Forráskód Böngészése

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

# Conflicts:
#	server/svr-authentication/src/main/java/com/yihu/jw/security/oauth2/provider/endpoint/WlyyLoginEndpoint.java
wangzhinan 3 éve
szülő
commit
176993dba4
100 módosított fájl, 9208 hozzáadás és 1000 törlés
  1. 3 0
      business/base-service/src/main/java/com/yihu/jw/doctor/dao/BaseDoctorDao.java
  2. 3 3
      business/base-service/src/main/java/com/yihu/jw/patient/service/BasePatientService.java
  3. 53 17
      business/es-service/src/main/java/com/yihu/jw/es/util/ElasticsearchUtil.java
  4. 14 3
      business/push-service/src/main/java/com/yihu/jw/push/service/GetuiService.java
  5. 109 1
      common/common-entity/sql记录
  6. 2 2
      common/common-entity/src/main/java/com/yihu/jw/entity/base/doctor/BaseDoctorDO.java
  7. 1 1
      common/common-entity/src/main/java/com/yihu/jw/entity/base/org/BaseOrgDO.java
  8. 4 0
      common/common-entity/src/main/java/com/yihu/jw/entity/base/patient/BasePatientDO.java
  9. 1 1
      common/common-entity/src/main/java/com/yihu/jw/entity/care/assistance/EmergencyAssistanceDO.java
  10. 3 3
      common/common-entity/src/main/java/com/yihu/jw/entity/care/birthday/BirthDayWishesToPatient.java
  11. 169 0
      common/common-entity/src/main/java/com/yihu/jw/entity/care/birthday/BirthdayWishesNotPush.java
  12. 99 0
      common/common-entity/src/main/java/com/yihu/jw/entity/care/device/BasePatientMonitorDataDO.java
  13. 30 0
      common/common-entity/src/main/java/com/yihu/jw/entity/care/device/DeviceHealthIndex.java
  14. 101 0
      common/common-entity/src/main/java/com/yihu/jw/entity/care/handover/BaseDayHandover.java
  15. 161 0
      common/common-entity/src/main/java/com/yihu/jw/entity/care/label/BaseCapacityLabelDO.java
  16. 22 0
      common/common-entity/src/main/java/com/yihu/jw/entity/care/lifeCare/LifeCareItemDictDO.java
  17. 13 0
      common/common-entity/src/main/java/com/yihu/jw/entity/care/prescription/BaseCarePrescriptionDO.java
  18. 10 0
      common/common-entity/src/main/java/com/yihu/jw/entity/care/role/DoctorRole.java
  19. 9 1
      common/common-entity/src/main/java/com/yihu/jw/entity/care/securitymonitoring/BaseEmergencyWarnLogDO.java
  20. 11 2
      common/common-entity/src/main/java/com/yihu/jw/entity/care/securitymonitoring/SecurityMonitoringOrderDO.java
  21. 56 0
      common/common-entity/src/main/java/com/yihu/jw/entity/care/video/BaseVideoDO.java
  22. 170 0
      common/common-entity/src/main/java/com/yihu/jw/entity/patient/BaseDeviceRepairEntity.java
  23. 2 0
      common/common-request-mapping/src/main/java/com/yihu/jw/rm/base/BaseRequestMapping.java
  24. 64 63
      common/common-web/src/main/resources/logback-spring.xml
  25. 63 64
      common/common-web/src/main/resources/logback-spring.xml-bak
  26. 58 0
      server/svr-authentication/src/main/java/com/yihu/jw/security/oauth2/provider/WlyyTokenGranter.java
  27. 4 4
      server/svr-authentication/src/main/java/com/yihu/jw/security/oauth2/provider/endpoint/WlyyLoginEndpoint.java
  28. 21 0
      svr/svr-base/src/main/java/com/yihu/jw/base/dao/role/WlyyRoleDao.java
  29. 22 0
      svr/svr-base/src/main/java/com/yihu/jw/base/dao/role/WlyyUserRoleDao.java
  30. 18 0
      svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/doctor/BaseDoctorEndpoint.java
  31. 108 0
      svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/role/WlyyUserRoleEndpoint.java
  32. 5 3
      svr/svr-base/src/main/java/com/yihu/jw/base/service/doctor/BaseDoctorService.java
  33. 8 0
      svr/svr-base/src/main/java/com/yihu/jw/base/service/menu/BaseMenuManageService.java
  34. 119 0
      svr/svr-base/src/main/java/com/yihu/jw/base/service/role/WlyyUserRoleService.java
  35. 28 28
      svr/svr-base/src/main/resources/application.yml
  36. 6 0
      svr/svr-cloud-care/pom.xml
  37. 15 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/dao/device/BaseDeviceRepairDao.java
  38. 12 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/dao/device/BasePatientMonitorDataDao.java
  39. 12 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/dao/device/DeviceDataPushLogDao.java
  40. 23 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/dao/handover/BaseDayHandoverDao.java
  41. 5 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/dao/security/BaseEmergencyWarnLogDao.java
  42. 17 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/dao/video/BaseVideoDao.java
  43. 55 6
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/admin/CommonEndpoint.java
  44. 1 1
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/consult/DoctorConsultEndpoint.java
  45. 29 2
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/consult/PatientConsultEndpoint.java
  46. 181 21
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/device/DoctorDeviceController.java
  47. 32 1
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/device/PatientDeviceController.java
  48. 124 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/doctor/DoctorDayHandoverController.java
  49. 31 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/doctor/DoctorEndpoint.java
  50. 470 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/doctor/admin/AdminInfoEndpoint.java
  51. 199 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/doctor/admin/AdminListInfoController.java
  52. 66 4
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/lifeCare/DoctorLifeCareEndpoint.java
  53. 2 2
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/lifeCare/PadLifeCareEndpoint.java
  54. 48 7
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/lifeCare/PatientLifeCareEndpoint.java
  55. 12 3
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/message/DoctorMessageEndpoint.java
  56. 111 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/orderLogProcess/OrderLogProcessController.java
  57. 63 1
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/org/OrgEndpoint.java
  58. 35 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/security/SecurityMonitoringOrderEndpoint.java
  59. 38 4
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/statistics/DetectionPlatformEndpoint.java
  60. 112 5
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/statistics/OpenStatisticsEndpoint.java
  61. 9 24
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/statistics/StatisticsEndpoint.java
  62. 78 7
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/third/platForm/PatientInfoPlatFormEndpoint.java
  63. 64 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/video/PatientVideoEndpoint.java
  64. 229 1
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/wlyygc/WlyygcDataEndpoint.java
  65. 534 137
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/assistance/EmergencyAssistanceService.java
  66. 16 3
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/birthday/BirthdayWishesService.java
  67. 59 67
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/common/CommomService.java
  68. 33 6
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/common/PermissionService.java
  69. 16 7
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/consult/ConsultService.java
  70. 1 1
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/contacts/ContactsService.java
  71. 259 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/device/DeviceManageService.java
  72. 39 18
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/device/PatientDeviceService.java
  73. 31 9
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/doctor/CareDoctorService.java
  74. 74 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/doctor/DayHandoverService.java
  75. 2 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/family/PatientFamilyMemberService.java
  76. 2 2
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/label/PatientLableService.java
  77. 232 45
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/lifeCare/LifeCareOrderService.java
  78. 86 4
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/message/BaseServiceNewsService.java
  79. 23 7
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/message/DoctorMessageService.java
  80. 32 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/org/BaseOrgService.java
  81. 331 28
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/patient/CarePatientService.java
  82. 3 1
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/prescription/BaseCarePrescriptionService.java
  83. 57 78
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/role/RoleService.java
  84. 454 111
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/security/SecurityMonitoringOrderService.java
  85. 45 1
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/sign/ArchiveService.java
  86. 4 3
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/sign/ServicePackageService.java
  87. 107 33
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/statistics/DetectionPlatformService.java
  88. 1086 129
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/statistics/StatisticsService.java
  89. 14 1
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/statistics/StatisticsUtilService.java
  90. 644 11
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/statistics/WlyygcStatisticsService.java
  91. 459 13
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/third/PatientInfoPlatFormService.java
  92. 14 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/util/CommonUtil.java
  93. 137 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/util/DeviceDataPushLogUtil.java
  94. 116 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/util/DeviceLostMessageUtil.java
  95. 249 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/util/DingdingUtil.java
  96. 43 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/util/MessageUtil.java
  97. 350 0
      svr/svr-cloud-care/src/main/java/com/yihu/jw/care/vo/JczdPersonVo.java
  98. 12 0
      svr/svr-cloud-device/src/main/java/com/yihu/jw/care/dao/device/BasePatientMonitorDataDao.java
  99. 1 0
      svr/svr-cloud-device/src/main/java/com/yihu/jw/care/dao/device/DeviceHealthIndexDao.java
  100. 0 0
      svr/svr-cloud-device/src/main/java/com/yihu/jw/care/service/DeviceService.java

+ 3 - 0
business/base-service/src/main/java/com/yihu/jw/doctor/dao/BaseDoctorDao.java

@ -60,4 +60,7 @@ public interface BaseDoctorDao extends PagingAndSortingRepository<BaseDoctorDO,
    @Query("SELECT d from BaseDoctorDO d,BaseTeamMemberDO te where d.id = te.doctorCode and te.del='1' AND d.del ='1' and te.teamCode in (?1) ")
    List<BaseDoctorDO> findDoctorsByTeam(List<String> teams);
    @Query("from BaseDoctorDO d where d.yktDoctorId is null AND d.del ='1'")
    List<BaseDoctorDO> findByYktDoctorIdNull();
}

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

@ -820,13 +820,13 @@ public class BasePatientService<T, R extends CrudRepository> extends BaseJpaServ
                dictName="jiaoshinv";
                break;
            case "2-4-1"://助老员男
                dictName="shegongnan";
                dictName="zhulaoyuannan";
                break;
            case "2-4-2"://助老员女
                dictName="shegongnv";
                dictName="zhulaoyuannv";
                break;
            default:
                dictName="jiashunan";
                dictName="zhulaoyuannan";
                break;
        }
        String sql = " select dict_value from wlyy_hospital_sys_dict where dict_name='hz_default_avatar' and dict_code='"+dictName+"' ";

+ 53 - 17
business/es-service/src/main/java/com/yihu/jw/es/util/ElasticsearchUtil.java

@ -760,6 +760,18 @@ public class ElasticsearchUtil {
     */
    public List findDateQuotaLevel1(String startDate, String endDate, String area, int level, String index, String timeLevel, String slaveKey1, String interval, String lowLevel) throws Exception {
        //时间格式转换  yyyy-MM-dd转成 2017-07-17T00:00:00+0800
        String areaLevel="6";
        if (!index.contains(",")){
            String sqlArea = " select area_level from wlyy_job_config_new where id="+index;
            List<String> areaLevels = jdbcTemplate.queryForList(sqlArea,String.class);
            if (areaLevels.size()>0){
                areaLevel = areaLevels.get(0);
            }
        }
        if (StringUtils.isBlank(areaLevel)){
            areaLevel="6";
        }
        //时间格式转换  yyyy-MM-dd转成 2017-07-17T00:00:00+0800
        if (StringUtils.isNotEmpty(startDate)) {
            if (startDate.length() > 10) {
@ -831,7 +843,7 @@ public class ElasticsearchUtil {
//        sql.append(" quotaCode='" + index + "'  ");
        sql.append(" quotaCode in(" + index + ")  ");
        sql.append(" and timeLevel='" + timeLevel + "'  ");
        sql.append(" and areaLevel='6'");
        sql.append(" and areaLevel='"+areaLevel+"'");
        if (StringUtils.isNotEmpty(startDate)) {
            sql.append(" and quotaDate>='" + startDate + "'");
        }
@ -1174,15 +1186,18 @@ public class ElasticsearchUtil {
        if (StringUtils.isNotEmpty(lowLevel)) {
            low_level = lowLevel;
        }
        String[] groupKeys = groupKey.split(",");
        String[] groupKeys = StringUtils.isBlank(groupKey)?new String[]{}:groupKey.split(",");
        StringBuffer selectKeys = new StringBuffer();
        StringBuffer groupStr = new StringBuffer();
        int i=1;
        for (String slaveKeyTmp:slaveKeys){
            selectKeys.append(" slaveKey").append(i).append(" as slaveKey").append(i).append(",slaveKey").append(i).append("Name as slaveKey").append(i).append("Name, ");
            i++;
        if (null!=slaveKeys){
            for (String slaveKeyTmp:slaveKeys){
                selectKeys.append(" slaveKey").append(i).append(" as slaveKey").append(i).append(",slaveKey").append(i).append("Name as slaveKey").append(i).append("Name, ");
                i++;
            }
        }
        for (String groupKeyTmp:groupKeys){
            groupStr.append(",slaveKey"+groupKeyTmp+",slaveKey"+groupKeyTmp+"Name");
        }
@ -1233,17 +1248,19 @@ public class ElasticsearchUtil {
        }
        i=1;
        for (String slaveKeyTmp:slaveKeys){
            if (StringUtils.isNotBlank(slaveKeyTmp)){
                String[] str = slaveKeyTmp.split(",");
                StringBuffer buffer = new StringBuffer();
                for (int j=0;j<str.length;j++){
                    buffer.append("'"+str[j]+"',");
        if (null!=slaveKeys){
            for (String slaveKeyTmp:slaveKeys){
                if (StringUtils.isNotBlank(slaveKeyTmp)){
                    String[] str = slaveKeyTmp.split(",");
                    StringBuffer buffer = new StringBuffer();
                    for (int j=0;j<str.length;j++){
                        buffer.append("'"+str[j]+"',");
                    }
                    buffer.deleteCharAt(buffer.length()-1);
                    sql.append(" and slaveKey").append(i).append(" in (" + buffer + ")");
                }
                buffer.deleteCharAt(buffer.length()-1);
                sql.append(" and slaveKey").append(i).append(" in (" + buffer + ")");
                i++;
            }
            i++;
        }
        //根据时间维度分组
@ -1398,6 +1415,16 @@ public class ElasticsearchUtil {
     *
     */
    public List findDateQuotaLevel2ByKeyGroup(String startDate, String endDate, String area, int level, String index, String timeLevel, String slaveKey1, String slaveKey2, String interval, String lowLevel,String areaLevel,String keyGroup) {
        areaLevel="6";
        if (!index.contains(",")){
            String sqlArea = " select area_level from wlyy_job_config_new where id='"+index+"' ";
            List<String> areaLevels = jdbcTemplate.queryForList(sqlArea,String.class);
            if (areaLevels.size()>0){
                if (StringUtils.isNotBlank(areaLevels.get(0))){
                    areaLevel = areaLevels.get(0);
                }
            }
        }
        //时间格式转换  yyyy-MM-dd转成 2017-07-17T00:00:00+0800
        if (StringUtils.isNotEmpty(startDate)) {
@ -1575,7 +1602,16 @@ public class ElasticsearchUtil {
     * @throws Exception
     */
    public List findDateAllQuotaLevel1(String startDate, String endDate, String area, int level, String index, String timeLevel, String interval, String lowLevel,String areaLevel) throws Exception {
        areaLevel="6";
        if (!index.contains(",")){
            String sqlArea = " select area_level from wlyy_job_config_new where id='"+index+"' ";
            List<String> areaLevels = jdbcTemplate.queryForList(sqlArea,String.class);
            if (areaLevels.size()>0){
                if (StringUtils.isNotBlank(areaLevels.get(0))){
                    areaLevel = areaLevels.get(0);
                }
            }
        }
        //时间格式转换  yyyy-MM-dd转成 2017-07-17T00:00:00+0800
        if (StringUtils.isNotEmpty(startDate)) {
            if (startDate.length() > 10) {
@ -1995,8 +2031,8 @@ public class ElasticsearchUtil {
    /**
     * 多维度指标查询 可控制key与group
     */
    public  List<SaveModel> findDateQuotaLevelList(String startDate, String endDate, String area, int level, String index, String timelevel,String groupKey,String ...slaveKeys) throws Exception {
        List list = findDateQuotaLevels(startDate, endDate, area, level, index, timelevel,null, null,groupKey,slaveKeys);
    public  List<SaveModel> findDateQuotaLevelList(String startDate, String endDate, String area, int level, String index, String timelevel,String interval, String lowLevel,String groupKey,String ...slaveKeys) throws Exception {
        List list = findDateQuotaLevels(startDate, endDate, area, level, index, timelevel,interval, lowLevel,groupKey,slaveKeys);
        return list;
    }

+ 14 - 3
business/push-service/src/main/java/com/yihu/jw/push/service/GetuiService.java

@ -26,6 +26,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import java.util.List;
import java.util.Map;
@ -65,6 +66,17 @@ public class GetuiService {
    /**
     * 初始化接口参数
     */
    @PostConstruct
    public void clientInit(){
        if(pushApi == null){
            synchronized(GetuiService.class){
                if(pushApi == null){
                    pushApi = forceInit();
                }
            }
        }
    }
    private void init(){
        if(redisTemplate.hasKey(key+ ":AppID")){
            AppID = redisTemplate.opsForValue().get(key + ":AppID");
@ -85,7 +97,7 @@ public class GetuiService {
    /**
     * 如果修改了数据库参数,调用下这个方法
     */
    public void forceInit(){
    public PushApi forceInit(){
        List<WlyyHospitalSysDictDO> dictDOList = sysDictDao.findByDictName(key);
        for (WlyyHospitalSysDictDO wlyyHospitalSysDictDO:dictDOList){
            if (wlyyHospitalSysDictDO.getDictCode().equalsIgnoreCase("AppID")){
@ -102,7 +114,7 @@ public class GetuiService {
                redisTemplate.opsForValue().set(key + ":MasterSecret",MasterSecret);
            }
        }
        pushApi = getPushApi();
        return getPushApi();
    }
    private PushApi getPushApi(){
@ -125,7 +137,6 @@ public class GetuiService {
     * type 1 安卓 2 ios
     */
    public void push2(String cid,int type,JSONObject json){
        init();
        //根据cid进行单推
        PushDTO<Audience> pushDTO = new PushDTO<Audience>();
        // 设置推送参数

+ 109 - 1
common/common-entity/sql记录

@ -1696,4 +1696,112 @@ ALTER table base_visit add COLUMN `health` VARCHAR(500) DEFAULT NULL COMMENT '
ALTER table base_visit add COLUMN `life_consult` VARCHAR(500) DEFAULT NULL COMMENT '生活咨询';
-- 2022-03-14 ysj
ALTER TABLE base_login_log ADD token varchar(50) COMMENT '登录token 做权限验证用' ;
ALTER TABLE base_login_log ADD token varchar(50) COMMENT '登录token 做权限验证用' ;
-- 2022-03-21 wsl
CREATE TABLE `base_device_repair` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `order_id` varchar(50) DEFAULT NULL,
  `device_sn` varchar(50) DEFAULT NULL COMMENT '设备sn码',
  `device_name` varchar(20) DEFAULT NULL COMMENT '设备名称',
  `bind_user` varchar(50) DEFAULT NULL COMMENT '绑定人code',
  `bind_user_name` varchar(20) DEFAULT NULL COMMENT '绑定人',
  `status` tinyint(2) DEFAULT NULL COMMENT '报修状态:0 报修中、1 已完成',
  `create_time` timestamp NULL DEFAULT NULL COMMENT '创建时间',
  `repair_peoper` varchar(50) DEFAULT NULL COMMENT '报修人code',
  `repair_peoper_name` varchar(10) DEFAULT NULL COMMENT '报修人',
  `show_content` varchar(200) DEFAULT NULL COMMENT '说明',
  `img` varchar(2500) DEFAULT NULL COMMENT '图片地址“,”分割',
  `deal_peoper` varchar(50) DEFAULT NULL COMMENT '处理人',
  `deal_peoper_name` varchar(10) DEFAULT NULL COMMENT '处理人',
  `deal_time` datetime DEFAULT NULL COMMENT '处理时间',
  `feedback` varchar(50) DEFAULT NULL COMMENT '反馈',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COMMENT='设备报修表';
-- 2022-03-22 wsl
CREATE TABLE `base_day_handover` (
  `id` varchar(50) NOT NULL COMMENT '表id',
  `create_user` varchar(50) DEFAULT NULL COMMENT '提交人',
  `create_user_name` varchar(10) DEFAULT NULL COMMENT '提交人',
  `handover_user` varchar(50) DEFAULT NULL COMMENT '交接人',
  `handover_user_name` varchar(10) DEFAULT NULL COMMENT '交接人',
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',
  `device_overview` varchar(200) DEFAULT NULL COMMENT '设备概况',
  `old_overview` varchar(200) DEFAULT NULL COMMENT '老人概况',
  `note` varchar(200) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='日常交接';
-- 2022-03-21 lb
ALTER TABLE birthday_wishes_to_patient MODIFY COLUMN admin_team_code VARCHAR(50) DEFAULT NULL COMMENT '医生所在团队';
-- CREATE TABLE `base_older_num` (
--   `id` int(11) NOT NULL AUTO_INCREMENT,
--   `type` varchar(2) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '类别 1是省 2是市  3是区 4机构',
--   `code` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '所属代码(市为 330100 区为 330101 )',
--   `name` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '所属代码名称',
--   `year` int(10) DEFAULT NULL COMMENT '年份',
--   `lsqs_num` int(10) DEFAULT '0' COMMENT '60-79岁人数',
--   `bss_num` int(10) DEFAULT '0' COMMENT '80-89岁人数',
--   `jss_num` int(10) DEFAULT '0' COMMENT '90-99岁人数',
--   `ybs_num` int(10) DEFAULT '0' COMMENT '100岁以上',
--   `gg_num` int(10) DEFAULT NULL COMMENT '孤寡老人数',
--   `dj_num` int(10) DEFAULT NULL COMMENT '独居老人数',
--   `kc_num` int(10) DEFAULT NULL COMMENT '空巢老数',
--   PRIMARY KEY (`id`)
-- ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='老人概况表'; -- 已执行
-- CREATE TABLE `birthday_wishes_not_push` (
-- 	`id` INT ( 11 ) NOT NULL AUTO_INCREMENT,
-- 	`patient_code` VARCHAR ( 50 ) DEFAULT NULL COMMENT '患者标识',
-- 	`patient_name` VARCHAR ( 50 ) DEFAULT NULL COMMENT '患者名称',
-- 	`doctor_code` VARCHAR ( 50 ) DEFAULT NULL COMMENT '发送人code',
-- 	`doctor_name` VARCHAR ( 50 ) DEFAULT NULL COMMENT '发送人名称',
-- 	`admin_team_code` VARCHAR ( 50 ) DEFAULT NULL COMMENT '医生所在',
-- 	`admin_team_name` VARCHAR ( 50 ) DEFAULT NULL COMMENT '行政团队名称',
-- 	`hospital` VARCHAR ( 50 ) DEFAULT NULL COMMENT '所属机构',
-- 	`hospital_name` VARCHAR ( 50 ) DEFAULT NULL COMMENT '所属机构名称',
-- 	`town` VARCHAR ( 50 ) DEFAULT NULL COMMENT '所属区划',
-- 	`town_name` VARCHAR ( 50 ) DEFAULT NULL COMMENT '所属区划名称',
-- 	`city` VARCHAR ( 50 ) DEFAULT NULL COMMENT '所属市',
-- 	`city_name` VARCHAR ( 50 ) DEFAULT NULL COMMENT '所属市名称',
-- 	`province` VARCHAR ( 50 ) DEFAULT NULL COMMENT '所属市',
-- 	`province_name` VARCHAR ( 50 ) DEFAULT NULL COMMENT '所属市名称',
-- 	`create_time` VARCHAR ( 20 ) DEFAULT NULL COMMENT '创建时间',
-- 	PRIMARY KEY ( `id` ),
-- 	KEY `index_pd` ( `patient_code`, `doctor_code` ) USING BTREE,
-- KEY `index_time` ( `create_time` ) USING BTREE
-- ) ENGINE = INNODB AUTO_INCREMENT = 111 DEFAULT CHARSET = utf8mb4 COMMENT = '生日祝福未发送记录'; -- 已执行
-- 2022-03-22 lb
-- ALTER table base_care_prescription add column `deal_time` datetime DEFAULT NULL COMMENT '处置时间'; -- 已执行
-- update base_care_prescription set deal_time = create_time where `status`=2; -- 已执行
-- alter table base_security_monitoring_order add column `team_code` varchar(100) DEFAULT NULL COMMENT '服务团队'; -- 已执行
-- 2022-03-26
ALTER TABLE base_device_health_index add `temperature_value` varchar(20) DEFAULT NULL COMMENT '温度测量值';
ALTER TABLE base_device_health_index add `power_value` varchar(20) DEFAULT NULL COMMENT '剩余电量';
ALTER TABLE base_device_health_index add `at_id` varchar(50) DEFAULT NULL COMMENT 'at';
--2022-04-12
ALTER TABLE wlyy_role add column `level` tinyint(2) DEFAULT NULL COMMENT '1省2市3区县4机构5团队6医生'
-- 2022-04-24
CREATE TABLE `base_patient_monitor_data` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `patient` varchar(50) DEFAULT NULL COMMENT '居民code',
  `patient_name` varchar(50) DEFAULT NULL COMMENT '姓名',
  `category_code` varchar(50) DEFAULT NULL COMMENT '设备类型标识1血糖仪,2.血压计,4智能手表..',
  `device_sn` varchar(50) DEFAULT NULL COMMENT '设备SN码',
  `type` int(1) DEFAULT NULL COMMENT '检测类型',
  `device_info` varchar(2000) DEFAULT NULL COMMENT '设备数据内容',
  `relation_code` varchar(50) DEFAULT NULL COMMENT '关联id',
  `create_time` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_patient` (`patient`)
) ENGINE=InnoDB AUTO_INCREMENT=95 DEFAULT CHARSET=utf8mb4 COMMENT='设备监测日志记录表';

+ 2 - 2
common/common-entity/src/main/java/com/yihu/jw/entity/base/doctor/BaseDoctorDO.java

@ -254,7 +254,7 @@ public class BaseDoctorDO extends UuidIdentityEntityWithOperator {
     */
    private String verifyCode;
    /**
     *眼科同医生id
     *眼科同医生id/ 医养 钉钉账户id
     */
    private String yktDoctorId;
    /**
@ -286,7 +286,7 @@ public class BaseDoctorDO extends UuidIdentityEntityWithOperator {
    /**
     *
     * 类型 1社区医生,2社工, 3教师,4助老员
     * 类型字典(doctor_level) 0无 1社区医生,2社工, 3教师,4助老员
     */
    private Integer level;
    private String doctorLat;//医生当前定位地址纬度

+ 1 - 1
common/common-entity/src/main/java/com/yihu/jw/entity/base/org/BaseOrgDO.java

@ -84,7 +84,7 @@ public class BaseOrgDO extends UuidIdentityEntityWithOperator {
	private String spell;
    /**
	 * 机构类型: 1. 等级医院2. 社区医院3.  养老机构 4.  托育机构
	 * 机构类型: 1. 等级医院2. 社区医院3.  养老机构 4.  托育机构 5政府机关 6日照中心
	 */
	private String type;

+ 4 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/base/patient/BasePatientDO.java

@ -236,6 +236,10 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
     */
    private Date loginDate;
    /**
     * 互联网医院 眼科通userId
     * 医养项目 水表户号
     */
    private String userId;
    /**

+ 1 - 1
common/common-entity/src/main/java/com/yihu/jw/entity/care/assistance/EmergencyAssistanceDO.java

@ -20,7 +20,7 @@ public class EmergencyAssistanceDO extends UuidIdentityEntityWithOperator {
     */
    public enum Status {
        ErrorWarning(-2, "误报警"),
        ErrorWarning(-2, "已响应"),//误报警
        cancel(-1, "已取消"),
        complete(0, "已完成"),
        apply(1, "申请中");

+ 3 - 3
common/common-entity/src/main/java/com/yihu/jw/entity/care/birthday/BirthDayWishesToPatient.java

@ -30,7 +30,7 @@ public class BirthDayWishesToPatient extends IdEntity {
    //备注:从发送人的信息中获取(doctor表获取)
    private String sendPic;   // 发送人头像(ES)
    private String sendSex;   // 发送人性别(ES)
    private Long adminTeamCode;// 行政团队(ES)
    private String adminTeamCode;// 行政团队(ES)
    private String adminTeamName;// 行政团队(ES)
    private String hospital; // 所属机构(ES)
    private String hospitalName; // 所属机构(ES)
@ -119,11 +119,11 @@ public class BirthDayWishesToPatient extends IdEntity {
        this.sendSex = sendSex;
    }
    public Long getAdminTeamCode() {
    public String getAdminTeamCode() {
        return adminTeamCode;
    }
    public void setAdminTeamCode(Long adminTeamCode) {
    public void setAdminTeamCode(String adminTeamCode) {
        this.adminTeamCode = adminTeamCode;
    }

+ 169 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/care/birthday/BirthdayWishesNotPush.java

@ -0,0 +1,169 @@
package com.yihu.jw.entity.care.birthday;
import com.yihu.jw.entity.IdEntity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
/**
 * 生日未祝福推送记录表
 *
 */
@Entity
@Table(name = "birthday_wishes_not_push")
@SequenceGenerator(name="id_generated", sequenceName="seq_birthday_wishes_not_push")
public class BirthdayWishesNotPush extends IdEntity {
    private String patientCode; //
    private String patientName; //
    private String doctorCode; //
    private String doctorName; //
    private String adminTeamCode; //
    private String adminTeamName; //
    private String hospital; //
    private String hospitalName; //
    private String town; //
    private String townName; //
    private String city; //
    private String cityName; //
    private String province; //
    private String provinceName; //
    private String createTime; //
    @Column(name = "patient_code")
    public String getPatientCode() {
        return patientCode;
    }
    public void setPatientCode(String patientCode) {
        this.patientCode = patientCode;
    }
    @Column(name = "patient_name")
    public String getPatientName() {
        return patientName;
    }
    public void setPatientName(String patientName) {
        this.patientName = patientName;
    }
    @Column(name = "doctor_code")
    public String getDoctorCode() {
        return doctorCode;
    }
    public void setDoctorCode(String doctorCode) {
        this.doctorCode = doctorCode;
    }
    @Column(name = "doctor_name")
    public String getDoctorName() {
        return doctorName;
    }
    public void setDoctorName(String doctorName) {
        this.doctorName = doctorName;
    }
    @Column(name = "admin_team_code")
    public String getAdminTeamCode() {
        return adminTeamCode;
    }
    public void setAdminTeamCode(String adminTeamCode) {
        this.adminTeamCode = adminTeamCode;
    }
    @Column(name = "admin_team_name")
    public String getAdminTeamName() {
        return adminTeamName;
    }
    public void setAdminTeamName(String adminTeamName) {
        this.adminTeamName = adminTeamName;
    }
    @Column(name = "hospital")
    public String getHospital() {
        return hospital;
    }
    public void setHospital(String hospital) {
        this.hospital = hospital;
    }
    @Column(name = "hospital_name")
    public String getHospitalName() {
        return hospitalName;
    }
    public void setHospitalName(String hospitalName) {
        this.hospitalName = hospitalName;
    }
    @Column(name = "town")
    public String getTown() {
        return town;
    }
    public void setTown(String town) {
        this.town = town;
    }
    @Column(name = "town_name")
    public String getTownName() {
        return townName;
    }
    public void setTownName(String townName) {
        this.townName = townName;
    }
    @Column(name = "city")
    public String getCity() {
        return city;
    }
    public void setCity(String city) {
        this.city = city;
    }
    @Column(name = "city_name")
    public String getCityName() {
        return cityName;
    }
    public void setCityName(String cityName) {
        this.cityName = cityName;
    }
    @Column(name = "province")
    public String getProvince() {
        return province;
    }
    public void setProvince(String province) {
        this.province = province;
    }
    @Column(name = "province_name")
    public String getProvinceName() {
        return provinceName;
    }
    public void setProvinceName(String provinceName) {
        this.provinceName = provinceName;
    }
    @Column(name = "create_time")
    public String getCreateTime() {
        return createTime;
    }
    public void setCreateTime(String createTime) {
        this.createTime = createTime;
    }
}

+ 99 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/care/device/BasePatientMonitorDataDO.java

@ -0,0 +1,99 @@
package com.yihu.jw.entity.care.device;
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 Bing on 2022/4/25.
 * 居民设备监测日志
 */
@Entity
@Table(name = "base_patient_monitor_data")
@SequenceGenerator(name="id_generated", sequenceName="seq_base_patient_monitor_data")
public class BasePatientMonitorDataDO extends IdEntity {
    private String patient;
    private String patientName;
    private String categoryCode;
    private String deviceSn;
    /**
     * 当前已用TYPE类型:
     *  1血糖测量 2血压测量,5心率,7呼吸,8步数,9定位上传,10温度(烟感),11床带状态更新(睡眠带),14燃气浓度,15烟雾浓度,
     *  20紧急呼叫 22安防预警
     */
    private Integer type;
    private String deviceInfo;
    private String relationCode;
    private Date createTime;
    public String getPatient() {
        return patient;
    }
    public void setPatient(String patient) {
        this.patient = patient;
    }
    public String getPatientName() {
        return patientName;
    }
    public void setPatientName(String patientName) {
        this.patientName = patientName;
    }
    public String getCategoryCode() {
        return categoryCode;
    }
    public void setCategoryCode(String categoryCode) {
        this.categoryCode = categoryCode;
    }
    public String getDeviceSn() {
        return deviceSn;
    }
    public void setDeviceSn(String deviceSn) {
        this.deviceSn = deviceSn;
    }
    public Integer getType() {
        return type;
    }
    public void setType(Integer type) {
        this.type = type;
    }
    public String getDeviceInfo() {
        return deviceInfo;
    }
    public void setDeviceInfo(String deviceInfo) {
        this.deviceInfo = deviceInfo;
    }
    public String getRelationCode() {
        return relationCode;
    }
    public void setRelationCode(String relationCode) {
        this.relationCode = relationCode;
    }
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+08:00")
    @Column(name = "create_time")
    public Date getCreateTime() {
        return createTime;
    }
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
}

+ 30 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/care/device/DeviceHealthIndex.java

@ -23,6 +23,9 @@ public class DeviceHealthIndex extends UuidIdentityEntityWithCreateTime{
    private String value;//测量值
    private String unit;//单位
    private String recordTime;//记录时间
    private String temperaturValue;//温度值
    private String powerValue;//剩余电量
    private String atId;//at
    @Column(name = "device_sn")
    public String getDeviceSn() {
@ -68,4 +71,31 @@ public class DeviceHealthIndex extends UuidIdentityEntityWithCreateTime{
    public void setRecordTime(String recordTime) {
        this.recordTime = recordTime;
    }
    @Column(name = "temperature_value")
    public String getTemperaturValue() {
        return temperaturValue;
    }
    public void setTemperaturValue(String temperaturValue) {
        this.temperaturValue = temperaturValue;
    }
    @Column(name = "power_value")
    public String getPowerValue() {
        return powerValue;
    }
    public void setPowerValue(String powerValue) {
        this.powerValue = powerValue;
    }
    @Column(name = "at_id")
    public String getAtId() {
        return atId;
    }
    public void setAtId(String atId) {
        this.atId = atId;
    }
}

+ 101 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/care/handover/BaseDayHandover.java

@ -0,0 +1,101 @@
package com.yihu.jw.entity.care.handover;
import com.yihu.jw.entity.UuidIdentityEntityWithCreateTime;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.util.Date;
/**
 * Created by wsl on 2022/03/22.
 */
@Entity
@Table(name = "base_day_handover")
public class BaseDayHandover extends UuidIdentityEntityWithCreateTime {
    private String createUser; //提交人
    private String createUserName; //
    private String handoverUser; //交接人
    private String handoverUserName; //
    private Date createTime; //创建时间
    private String deviceOverview; //设备概况
    private String oldOverview; //老人概况
    private String note; //备注
    @Column(name = "create_user")
    public String getCreateUser() {
        return createUser;
    }
    public void setCreateUser(String createUser) {
        this.createUser = createUser;
    }
    @Column(name = "create_user_name")
    public String getCreateUserName() {
        return createUserName;
    }
    public void setCreateUserName(String createUserName) {
        this.createUserName = createUserName;
    }
    @Column(name = "handover_user")
    public String getHandoverUser() {
        return handoverUser;
    }
    public void setHandoverUser(String handoverUser) {
        this.handoverUser = handoverUser;
    }
    @Column(name = "handover_user_name")
    public String getHandoverUserName() {
        return handoverUserName;
    }
    public void setHandoverUserName(String handoverUserName) {
        this.handoverUserName = handoverUserName;
    }
    @Override
    public Date getCreateTime() {
        return createTime;
    }
    @Override
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
    @Column(name = "device_overview")
    public String getDeviceOverview() {
        return deviceOverview;
    }
    public void setDeviceOverview(String deviceOverview) {
        this.deviceOverview = deviceOverview;
    }
    @Column(name = "old_overview")
    public String getOldOverview() {
        return oldOverview;
    }
    public void setOldOverview(String oldOverview) {
        this.oldOverview = oldOverview;
    }
    @Column(name = "note")
    public String getNote() {
        return note;
    }
    public void setNote(String note) {
        this.note = note;
    }
}

+ 161 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/care/label/BaseCapacityLabelDO.java

@ -5,6 +5,11 @@ import com.yihu.jw.entity.UuidIdentityEntityWithCreateTime;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Transient;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * 能力状况记录表
@ -163,4 +168,160 @@ public class BaseCapacityLabelDO extends UuidIdentityEntityWithCreateTime {
    public void setTakeExercise(String takeExercise) {
        this.takeExercise = takeExercise;
    }
    @Transient
    public List<Map<String,Object>> getCapacityLabels(){
        List<Map<String,Object>> list = new ArrayList<>();
        Map<String,Object> tmp = new HashMap<>();
        if ("1".equals(hypertension)){
            tmp = new HashMap<>();
            tmp.put("txt","高血压:是");
            tmp.put("value",hypertension);
            tmp.put("code","hypertension");
            list.add(tmp);
        }
        if ("1".equals(hyperglycemia)){
            tmp = new HashMap<>();
            tmp.put("txt","高血糖:是");
            tmp.put("value",hyperglycemia);
            tmp.put("code","hyperglycemia");
            list.add(tmp);
        }
        if ("1".equals(heartDisease)){
            tmp = new HashMap<>();
            tmp.put("txt","心脏疾病:是");
            tmp.put("value",heartDisease);
            tmp.put("code","heartDisease");
            list.add(tmp);
        }
        if(null!=workStatus){
            switch (workStatus){
                case "1":
                    tmp = new HashMap<>();
                    tmp.put("txt","行走状态:迟缓");
                    tmp.put("value",workStatus);
                    tmp.put("code","workStatus");
                    list.add(tmp);
                    break;
                case "2":
                    tmp = new HashMap<>();
                    tmp.put("txt","行走状态:一般");
                    tmp.put("value",workStatus);
                    tmp.put("code","workStatus");
                    list.add(tmp);
                    break;
                case "3":
                    tmp = new HashMap<>();
                    tmp.put("txt","行走状态:健步如飞");
                    tmp.put("value",workStatus);
                    tmp.put("code","workStatus");
                    list.add(tmp);
                    break;
            }
        }
        if(null!=visualCondition){
            switch (visualCondition){
                case "1":
                    tmp = new HashMap<>();
                    tmp.put("txt","视觉状况:看不见");
                    tmp.put("value",visualCondition);
                    tmp.put("code","visualCondition");
                    list.add(tmp);
                    break;
                case "2":
                    tmp = new HashMap<>();
                    tmp.put("txt","视觉状况:近距离");
                    tmp.put("value",visualCondition);
                    tmp.put("code","visualCondition");
                    list.add(tmp);
                    break;
                case "3":
                    tmp = new HashMap<>();
                    tmp.put("txt","视觉状况:正常");
                    tmp.put("value",visualCondition);
                    tmp.put("code","visualCondition");
                    list.add(tmp);
                    break;
            }
        }
        if(null!=auditoryCondition){
            switch (auditoryCondition){
                case "1":
                    tmp = new HashMap<>();
                    tmp.put("txt","行走状态:迟缓");
                    tmp.put("value",auditoryCondition);
                    tmp.put("code","auditoryCondition");
                    list.add(tmp);
                    break;
                case "2":
                    tmp = new HashMap<>();
                    tmp.put("txt","行走状态:一般");
                    tmp.put("value",auditoryCondition);
                    tmp.put("code","auditoryCondition");
                    list.add(tmp);
                    break;
                case "3":
                    tmp = new HashMap<>();
                    tmp.put("txt","行走状态:健步如飞");
                    tmp.put("value",auditoryCondition);
                    tmp.put("code","auditoryCondition");
                    list.add(tmp);
                    break;
            }
        }
        if(null!=communication){
            switch (communication){
                case "1":
                    tmp = new HashMap<>();
                    tmp.put("txt","交流情况:不善于");
                    tmp.put("value",communication);
                    tmp.put("code","communication");
                    list.add(tmp);
                    break;
                case "2":
                    tmp = new HashMap<>();
                    tmp.put("txt","交流情况:一般");
                    tmp.put("value",communication);
                    tmp.put("code",communication);
                    list.add(tmp);
                    break;
                case "3":
                    tmp = new HashMap<>();
                    tmp.put("txt","交流情况:善于");
                    tmp.put("value",communication);
                    tmp.put("code","communication");
                    list.add(tmp);
                    break;
            }
        }
        if ("1".equals(mentalIllness)){
            tmp = new HashMap<>();
            tmp.put("txt","精神类疾病:是");
            tmp.put("value",mentalIllness);
            tmp.put("code","mentalIllness");
            list.add(tmp);
        }
        if ("1".equals(oftenGoOut)){
            tmp = new HashMap<>();
            tmp.put("txt","经常外出:是");
            tmp.put("value",oftenGoOut);
            tmp.put("code","oftenGoOut");
            list.add(tmp);
        }
        if ("1".equals(usePhone)){
            tmp = new HashMap<>();
            tmp.put("txt","会使用智能手机:是");
            tmp.put("value",usePhone);
            tmp.put("code","usePhone");
            list.add(tmp);
        }
        if ("1".equals(takeExercise)){
            tmp = new HashMap<>();
            tmp.put("txt","参加锻炼:是");
            tmp.put("value",takeExercise);
            tmp.put("code","takeExercise");
            list.add(tmp);
        }
        return list;
    }
}

+ 22 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/care/lifeCare/LifeCareItemDictDO.java

@ -1,10 +1,12 @@
package com.yihu.jw.entity.care.lifeCare;
import com.yihu.jw.entity.UuidIdentityEntity;
import org.springframework.transaction.annotation.Transactional;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Transient;
import java.math.BigDecimal;
/**
@ -26,6 +28,8 @@ public class LifeCareItemDictDO extends UuidIdentityEntity{
    private String serveStandard;//服务标准标准
    private String orgCode;//服务机构
    private String orgName;//服务机构名称
    private String orgPhoto;
    private String address;
    public String getCode() {
        return code;
@ -123,4 +127,22 @@ public class LifeCareItemDictDO extends UuidIdentityEntity{
    public void setOrgName(String orgName) {
        this.orgName = orgName;
    }
    @Transient
    public String getOrgPhoto() {
        return orgPhoto;
    }
    public void setOrgPhoto(String orgPhoto) {
        this.orgPhoto = orgPhoto;
    }
    @Transient
    public String getAddress() {
        return address;
    }
    public void setAddress(String address) {
        this.address = address;
    }
}

+ 13 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/care/prescription/BaseCarePrescriptionDO.java

@ -1,11 +1,13 @@
package com.yihu.jw.entity.care.prescription;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.yihu.jw.entity.UuidIdentityEntityWithCreateTime;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import javax.persistence.Transient;
import java.util.Date;
/**
 * Created by yeshijie on 2021/10/11.
@ -23,6 +25,7 @@ public class BaseCarePrescriptionDO extends UuidIdentityEntityWithCreateTime {
    private String applyContent;//申请内容
    private String dealImgs;//处理附件
    private String dealContent;//处理内容
    private Date dealTime;//处理时间
    private String sex;
    private String age;
@ -110,6 +113,16 @@ public class BaseCarePrescriptionDO extends UuidIdentityEntityWithCreateTime {
        this.dealContent = dealContent;
    }
    @Column(name = "deal_time")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+08:00")
    public Date getDealTime() {
        return dealTime;
    }
    public void setDealTime(Date dealTime) {
        this.dealTime = dealTime;
    }
    @Transient
    public String getSex() {
        return sex;

+ 10 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/care/role/DoctorRole.java

@ -20,6 +20,7 @@ public class DoctorRole extends IdEntity {
    private String name;        // 角色名称
    private String czy;       // 操作员
    private Date czrq;       // 操作日期
    private Integer level;       // 权限等级 同统计指标 1省2市3区县4机构5团队6医生
    @Column(name = "code")
    public String getCode() {
@ -57,4 +58,13 @@ public class DoctorRole extends IdEntity {
    public void setCzrq(Date czrq) {
        this.czrq = czrq;
    }
    @Column(name = "level")
    public Integer getLevel() {
        return level;
    }
    public void setLevel(Integer level) {
        this.level = level;
    }
}

+ 9 - 1
common/common-entity/src/main/java/com/yihu/jw/entity/care/securitymonitoring/BaseEmergencyWarnLogDO.java

@ -7,7 +7,6 @@ import javax.persistence.Entity;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Transient;
import javax.xml.crypto.Data;
import java.util.Date;
/**
@ -24,6 +23,7 @@ public class BaseEmergencyWarnLogDO extends IdEntity {
    public Integer userType; //用户类型 1居民 2社工
    public String content;
    public Date createTime;
    public Integer type; //保存类型(1已知悉,2前往,3 110,4 120,5小结)
    public String timeInfo;
@ -84,4 +84,12 @@ public class BaseEmergencyWarnLogDO extends IdEntity {
    public void setTimeInfo(String timeInfo) {
        this.timeInfo = timeInfo;
    }
    public Integer getType() {
        return type;
    }
    public void setType(Integer type) {
        this.type = type;
    }
}

+ 11 - 2
common/common-entity/src/main/java/com/yihu/jw/entity/care/securitymonitoring/SecurityMonitoringOrderDO.java

@ -24,7 +24,7 @@ public class SecurityMonitoringOrderDO extends UuidIdentityEntityWithOperator {
     */
    public enum Status {
        ErrorWarning(-2, "误报警"),
        ErrorWarning(-2, "已响应"),
        cancel(-1, "已取消"),
        complete(0, "已完成"),
        apply(1, "申请中");
@ -318,12 +318,13 @@ public class SecurityMonitoringOrderDO extends UuidIdentityEntityWithOperator {
    private String serviceStatus;//服务类型 1-预约项目 2-即时项目
    private String orderInfo;//工单详情 0-未推送 1-未确认 2-已确认
    private String doctorConfirmFinishImg;
    private Integer orderSource;//工单发起来源状态 1APP 2手环 3居家报警 4监控器发起 5睡眠带 6气感报警器 7 烟感报警器 8拐杖发起
    private Integer orderSource;//工单发起来源状态 1APP 2手环 3居家报警 4监控器发起 5睡眠带 6气感报警器 7 烟感报警器 8拐杖发起 9智慧水表
    private Integer emergencyCancel;// 紧急预警工单误报警原因 字典emergency_cancel
    private String topicItem;//安防工单所属专题 base_system_dict_entry表service_item
    private String sceneImg;//现场照片
    private String deviceSn;//设备sn  设备触发是才有该字段值
    private String warnInfo;//触发工单时信息如 烟雾心率等
    private String teamCode;//服务团队
    /**
     * 医生确认医生结束服务时间
@ -745,4 +746,12 @@ public class SecurityMonitoringOrderDO extends UuidIdentityEntityWithOperator {
    public void setWarnInfo(String warnInfo) {
        this.warnInfo = warnInfo;
    }
    public String getTeamCode() {
        return teamCode;
    }
    public void setTeamCode(String teamCode) {
        this.teamCode = teamCode;
    }
}

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

@ -0,0 +1,56 @@
package com.yihu.jw.entity.care.video;
import com.yihu.jw.entity.UuidIdentityEntityWithCreateTime;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
/**
 * Created by yeshijie on 2022/3/21.
 */
@Entity
@Table(name = "base_video")
public class BaseVideoDO extends UuidIdentityEntityWithCreateTime {
    private String type;//类型 1疾病防治 2健康生活 3慢病防治
    private String title;//标题
    private String url;//url
    private String img;//封面图片
    @Column(name = "type")
    public String getType() {
        return type;
    }
    public void setType(String type) {
        this.type = type;
    }
    @Column(name = "title")
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    @Column(name = "url")
    public String getUrl() {
        return url;
    }
    public void setUrl(String url) {
        this.url = url;
    }
    @Column(name = "img")
    public String getImg() {
        return img;
    }
    public void setImg(String img) {
        this.img = img;
    }
}

+ 170 - 0
common/common-entity/src/main/java/com/yihu/jw/entity/patient/BaseDeviceRepairEntity.java

@ -0,0 +1,170 @@
package com.yihu.jw.entity.patient;
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;
@Entity
@Table(name = "base_device_repair")
@SequenceGenerator(name = "id_generated", sequenceName = "seq_base_device_repair")
public class BaseDeviceRepairEntity extends IdEntity {
    private String orderId; //
    private String deviceSn; //设备sn码
    private String deviceName;//设备名称
    private String bindUser; //绑定人code
    private String bindUserName; //绑定人
    private Integer status; //报修状态:0 报修中、1 已完成
    private Date createTime; //创建时间
    private String repairPeoper; //报修人code
    private String repairPeoperName; //
    private String showContent; //说明
    private String img; //图片地址“,”分割
    private String dealPeoper; //处理人
    private String dealPeoperName; //
    private Date dealTime; //处理时间
    private String feedback; //反馈
    @Column(name = "order_id")
    public String getOrderId() {
        return orderId;
    }
    public void setOrderId(String orderId) {
        this.orderId = orderId;
    }
    @Column(name = "device_sn")
    public String getDeviceSn() {
        return deviceSn;
    }
    public void setDeviceSn(String deviceSn) {
        this.deviceSn = deviceSn;
    }
    @Column(name = "bind_user")
    public String getBindUser() {
        return bindUser;
    }
    public void setBindUser(String bindUser) {
        this.bindUser = bindUser;
    }
    @Column(name = "bind_user_name")
    public String getBindUserName() {
        return bindUserName;
    }
    public void setBindUserName(String bindUserName) {
        this.bindUserName = bindUserName;
    }
    @Column(name = "status")
    public Integer getStatus() {
        return status;
    }
    public void setStatus(Integer status) {
        this.status = status;
    }
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+08:00")
    @Column(name = "create_time")
    public Date getCreateTime() {
        return createTime;
    }
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
    @Column(name = "repair_peoper")
    public String getRepairPeoper() {
        return repairPeoper;
    }
    public void setRepairPeoper(String repairPeoper) {
        this.repairPeoper = repairPeoper;
    }
    @Column(name = "repair_peoper_name")
    public String getRepairPeoperName() {
        return repairPeoperName;
    }
    public void setRepairPeoperName(String repairPeoperName) {
        this.repairPeoperName = repairPeoperName;
    }
    @Column(name = "show_content")
    public String getShowContent() {
        return showContent;
    }
    public void setShowContent(String showContent) {
        this.showContent = showContent;
    }
    @Column(name = "img")
    public String getImg() {
        return img;
    }
    public void setImg(String img) {
        this.img = img;
    }
    @Column(name = "deal_peoper")
    public String getDealPeoper() {
        return dealPeoper;
    }
    public void setDealPeoper(String dealPeoper) {
        this.dealPeoper = dealPeoper;
    }
    @Column(name = "deal_peoper_name")
    public String getDealPeoperName() {
        return dealPeoperName;
    }
    public void setDealPeoperName(String dealPeoperName) {
        this.dealPeoperName = dealPeoperName;
    }
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+08:00")
    @Column(name = "deal_time")
    public Date getDealTime() {
        return dealTime;
    }
    public void setDealTime(Date dealTime) {
        this.dealTime = dealTime;
    }
    @Column(name = "feedback")
    public String getFeedback() {
        return feedback;
    }
    public void setFeedback(String feedback) {
        this.feedback = feedback;
    }
    @Column(name = "device_name")
    public String getDeviceName() {
        return deviceName;
    }
    public void setDeviceName(String deviceName) {
        this.deviceName = deviceName;
    }
}

+ 2 - 0
common/common-request-mapping/src/main/java/com/yihu/jw/rm/base/BaseRequestMapping.java

@ -17,6 +17,7 @@ public class BaseRequestMapping {
        public static final String DELETE = "/delete";
        public static final String UPDATE = "/update";
        public static final String PAGE = "/page";
        public static final String PAGE2 = "/page2";
        public static final String LIST = "/list";
        public static final String FINDBYID = "/findById";
        public static final String FIND_MODULE_BY_SAASID = "/findModuleBySaasId";
@ -217,6 +218,7 @@ public class BaseRequestMapping {
        public static final String api_success ="success";
        public static final String saveRole ="/saveRole";
        public static final String findRoleNameExist ="/findRoleNameExist";
        public static final String wlyyUserRole ="/wlyyUserRole";
    }
    /**

+ 64 - 63
common/common-web/src/main/resources/logback-spring.xml

@ -26,7 +26,8 @@
	</appender>
    <!-- Api Log Start -->
    <appender name="ApiInfoFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 先注释调,不生成日志文件,只在控制台生成
   <appender name="ApiInfoFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log_home}/api/info/%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>${max_history}</maxHistory>
@ -36,7 +37,7 @@
            <charset class="java.nio.charset.Charset">UTF-8</charset>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <level>OFF</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
@ -52,7 +53,7 @@
            <charset class="java.nio.charset.Charset">UTF-8</charset>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>WARN</level>
            <level>OFF</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
@ -68,61 +69,61 @@
            <charset class="java.nio.charset.Charset">UTF-8</charset>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <level>OFF</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    </appender>-->
    <!-- Api Log End -->
    <!-- Business Log Start -->
    <appender name="BusinessInfoFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log_home}/business/info/%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>${max_history}</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
            <charset class="java.nio.charset.Charset">UTF-8</charset>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <appender name="BusinessWarnFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log_home}/business/warn/%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>${max_history}</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
            <charset class="java.nio.charset.Charset">UTF-8</charset>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>WARN</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <appender name="BusinessErrorFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log_home}/business/error/%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>${max_history}</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
            <charset class="java.nio.charset.Charset">UTF-8</charset>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
<!--    <appender name="BusinessInfoFile" class="ch.qos.logback.core.rolling.RollingFileAppender">-->
<!--        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">-->
<!--            <fileNamePattern>${log_home}/business/info/%d{yyyy-MM-dd}.log</fileNamePattern>-->
<!--            <maxHistory>${max_history}</maxHistory>-->
<!--        </rollingPolicy>-->
<!--        <encoder>-->
<!--            <pattern>${FILE_LOG_PATTERN}</pattern>-->
<!--            <charset class="java.nio.charset.Charset">UTF-8</charset>-->
<!--        </encoder>-->
<!--        <filter class="ch.qos.logback.classic.filter.LevelFilter">-->
<!--            <level>OFF</level>-->
<!--            <onMatch>ACCEPT</onMatch>-->
<!--            <onMismatch>DENY</onMismatch>-->
<!--        </filter>-->
<!--    </appender>-->
<!--    <appender name="BusinessWarnFile" class="ch.qos.logback.core.rolling.RollingFileAppender">-->
<!--        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">-->
<!--            <fileNamePattern>${log_home}/business/warn/%d{yyyy-MM-dd}.log</fileNamePattern>-->
<!--            <maxHistory>${max_history}</maxHistory>-->
<!--        </rollingPolicy>-->
<!--        <encoder>-->
<!--            <pattern>${FILE_LOG_PATTERN}</pattern>-->
<!--            <charset class="java.nio.charset.Charset">UTF-8</charset>-->
<!--        </encoder>-->
<!--        <filter class="ch.qos.logback.classic.filter.LevelFilter">-->
<!--            <level>OFF</level>-->
<!--            <onMatch>ACCEPT</onMatch>-->
<!--            <onMismatch>DENY</onMismatch>-->
<!--        </filter>-->
<!--    </appender>-->
<!--    <appender name="BusinessErrorFile" class="ch.qos.logback.core.rolling.RollingFileAppender">-->
<!--        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">-->
<!--            <fileNamePattern>${log_home}/business/error/%d{yyyy-MM-dd}.log</fileNamePattern>-->
<!--            <maxHistory>${max_history}</maxHistory>-->
<!--        </rollingPolicy>-->
<!--        <encoder>-->
<!--            <pattern>${FILE_LOG_PATTERN}</pattern>-->
<!--            <charset class="java.nio.charset.Charset">UTF-8</charset>-->
<!--        </encoder>-->
<!--        <filter class="ch.qos.logback.classic.filter.LevelFilter">-->
<!--            <level>OFF</level>-->
<!--            <onMatch>ACCEPT</onMatch>-->
<!--            <onMismatch>DENY</onMismatch>-->
<!--        </filter>-->
<!--    </appender>-->
    <!-- Business Log End -->
    <!-- 如果微服务纳入全局异常处理,请勿修改以上代码,有新的日志处理请在以下追加!!! -->
@ -130,19 +131,19 @@
    <!-- Other Log End -->
    <!-- 针对接口调用出错日志(单独记录) -->
    <logger name="com.yihu.jw.web.handler.GlobalExceptionHandler" level="WARN" additivity="false">
        <appender-ref ref="console" />
        <appender-ref ref="ApiInfoFile" />
        <appender-ref ref="ApiWarnFile" />
        <appender-ref ref="ApiErrorFile" />
    </logger>
<!--    <logger name="com.yihu.jw.web.handler.GlobalExceptionHandler" level="OFF" additivity="false">-->
<!--        <appender-ref ref="console" />-->
<!--        <appender-ref ref="ApiInfoFile" />-->
<!--        <appender-ref ref="ApiWarnFile" />-->
<!--        <appender-ref ref="ApiErrorFile" />-->
<!--    </logger>-->
    <!-- 业务日志 -->
    <logger name="com.yihu.jw">
        <appender-ref ref="BusinessInfoFile" />
        <appender-ref ref="BusinessWarnFile" />
        <appender-ref ref="BusinessErrorFile" />
    </logger>
<!--    <logger name="com.yihu.jw">-->
<!--        <appender-ref ref="BusinessInfoFile" />-->
<!--        <appender-ref ref="BusinessWarnFile" />-->
<!--        <appender-ref ref="BusinessErrorFile" />-->
<!--    </logger>-->
    <!-- 基础日志 -->
	<root level="INFO">

+ 63 - 64
common/common-web/src/main/resources/logback-spring.xml-bak

@ -26,8 +26,7 @@
	</appender>
    <!-- Api Log Start -->
<!-- 先注释调,不生成日志文件,只在控制台生成
   <appender name="ApiInfoFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <appender name="ApiInfoFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log_home}/api/info/%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>${max_history}</maxHistory>
@ -37,7 +36,7 @@
            <charset class="java.nio.charset.Charset">UTF-8</charset>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>OFF</level>
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
@ -53,7 +52,7 @@
            <charset class="java.nio.charset.Charset">UTF-8</charset>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>OFF</level>
            <level>WARN</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
@ -69,61 +68,61 @@
            <charset class="java.nio.charset.Charset">UTF-8</charset>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>OFF</level>
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>-->
    </appender>
    <!-- Api Log End -->
    <!-- Business Log Start -->
<!--    <appender name="BusinessInfoFile" class="ch.qos.logback.core.rolling.RollingFileAppender">-->
<!--        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">-->
<!--            <fileNamePattern>${log_home}/business/info/%d{yyyy-MM-dd}.log</fileNamePattern>-->
<!--            <maxHistory>${max_history}</maxHistory>-->
<!--        </rollingPolicy>-->
<!--        <encoder>-->
<!--            <pattern>${FILE_LOG_PATTERN}</pattern>-->
<!--            <charset class="java.nio.charset.Charset">UTF-8</charset>-->
<!--        </encoder>-->
<!--        <filter class="ch.qos.logback.classic.filter.LevelFilter">-->
<!--            <level>OFF</level>-->
<!--            <onMatch>ACCEPT</onMatch>-->
<!--            <onMismatch>DENY</onMismatch>-->
<!--        </filter>-->
<!--    </appender>-->
<!--    <appender name="BusinessWarnFile" class="ch.qos.logback.core.rolling.RollingFileAppender">-->
<!--        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">-->
<!--            <fileNamePattern>${log_home}/business/warn/%d{yyyy-MM-dd}.log</fileNamePattern>-->
<!--            <maxHistory>${max_history}</maxHistory>-->
<!--        </rollingPolicy>-->
<!--        <encoder>-->
<!--            <pattern>${FILE_LOG_PATTERN}</pattern>-->
<!--            <charset class="java.nio.charset.Charset">UTF-8</charset>-->
<!--        </encoder>-->
<!--        <filter class="ch.qos.logback.classic.filter.LevelFilter">-->
<!--            <level>OFF</level>-->
<!--            <onMatch>ACCEPT</onMatch>-->
<!--            <onMismatch>DENY</onMismatch>-->
<!--        </filter>-->
<!--    </appender>-->
<!--    <appender name="BusinessErrorFile" class="ch.qos.logback.core.rolling.RollingFileAppender">-->
<!--        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">-->
<!--            <fileNamePattern>${log_home}/business/error/%d{yyyy-MM-dd}.log</fileNamePattern>-->
<!--            <maxHistory>${max_history}</maxHistory>-->
<!--        </rollingPolicy>-->
<!--        <encoder>-->
<!--            <pattern>${FILE_LOG_PATTERN}</pattern>-->
<!--            <charset class="java.nio.charset.Charset">UTF-8</charset>-->
<!--        </encoder>-->
<!--        <filter class="ch.qos.logback.classic.filter.LevelFilter">-->
<!--            <level>OFF</level>-->
<!--            <onMatch>ACCEPT</onMatch>-->
<!--            <onMismatch>DENY</onMismatch>-->
<!--        </filter>-->
<!--    </appender>-->
    <appender name="BusinessInfoFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log_home}/business/info/%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>${max_history}</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
            <charset class="java.nio.charset.Charset">UTF-8</charset>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <appender name="BusinessWarnFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log_home}/business/warn/%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>${max_history}</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
            <charset class="java.nio.charset.Charset">UTF-8</charset>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>WARN</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <appender name="BusinessErrorFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${log_home}/business/error/%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>${max_history}</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
            <charset class="java.nio.charset.Charset">UTF-8</charset>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <!-- Business Log End -->
    <!-- 如果微服务纳入全局异常处理,请勿修改以上代码,有新的日志处理请在以下追加!!! -->
@ -131,19 +130,19 @@
    <!-- Other Log End -->
    <!-- 针对接口调用出错日志(单独记录) -->
<!--    <logger name="com.yihu.jw.web.handler.GlobalExceptionHandler" level="OFF" additivity="false">-->
<!--        <appender-ref ref="console" />-->
<!--        <appender-ref ref="ApiInfoFile" />-->
<!--        <appender-ref ref="ApiWarnFile" />-->
<!--        <appender-ref ref="ApiErrorFile" />-->
<!--    </logger>-->
    <logger name="com.yihu.jw.web.handler.GlobalExceptionHandler" level="WARN" additivity="false">
        <appender-ref ref="console" />
        <appender-ref ref="ApiInfoFile" />
        <appender-ref ref="ApiWarnFile" />
        <appender-ref ref="ApiErrorFile" />
    </logger>
    <!-- 业务日志 -->
<!--    <logger name="com.yihu.jw">-->
<!--        <appender-ref ref="BusinessInfoFile" />-->
<!--        <appender-ref ref="BusinessWarnFile" />-->
<!--        <appender-ref ref="BusinessErrorFile" />-->
<!--    </logger>-->
    <logger name="com.yihu.jw">
        <appender-ref ref="BusinessInfoFile" />
        <appender-ref ref="BusinessWarnFile" />
        <appender-ref ref="BusinessErrorFile" />
    </logger>
    <!-- 基础日志 -->
	<root level="INFO">

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

@ -117,6 +117,14 @@ public class WlyyTokenGranter implements TokenGranter {
                        requestFactory,
                        userDetailsService
                ));
        tokenGranters.put(DingTalkTokenGranter.GRANT_TYPE,
                new DingTalkTokenGranter(
                        authenticationManager,
                        tokenServices,
                        clientDetailsService,
                        requestFactory,
                        userDetailsService
                ));
    }
    public OAuth2AccessToken grant(String grantType, TokenRequest tokenRequest) {
@ -579,6 +587,56 @@ public class WlyyTokenGranter implements TokenGranter {
                throw new InvalidGrantException("User account is locked");
            }
//            parameters.put("password",userDetails.getPassword());
            Authentication userAuth = new UsernamePasswordAuthenticationToken(username,userDetails.getPassword(),  this.authoritiesMapper.mapAuthorities(userDetails.getAuthorities()));
            ((AbstractAuthenticationToken) userAuth).setDetails(parameters);
            OAuth2Request storedOAuth2Request = getRequestFactory().createOAuth2Request(client, tokenRequest);
            return new OAuth2Authentication(storedOAuth2Request, userAuth);
        }
    }
    /**
     * 钉钉免登录
     */
    public static class DingTalkTokenGranter extends AbstractTokenGranter {
        private static final String GRANT_TYPE = "dingTalk";
        private final AuthenticationManager authenticationManager;
        private final UserDetailsService userDetailsService;
        private GrantedAuthoritiesMapper authoritiesMapper = new NullAuthoritiesMapper();
        public DingTalkTokenGranter(AuthenticationManager authenticationManager,
                                  AuthorizationServerTokenServices tokenServices,
                                  ClientDetailsService clientDetailsService,
                                  OAuth2RequestFactory requestFactory,
                                  UserDetailsService userDetailsService) {
            this(authenticationManager, tokenServices, clientDetailsService, requestFactory, userDetailsService, GRANT_TYPE);
        }
        protected DingTalkTokenGranter(AuthenticationManager authenticationManager,
                                     AuthorizationServerTokenServices tokenServices,
                                     ClientDetailsService clientDetailsService,
                                     OAuth2RequestFactory requestFactory,
                                     UserDetailsService userDetailsService,
                                     String grantType) {
            super(tokenServices, clientDetailsService, requestFactory, grantType);
            this.authenticationManager = authenticationManager;
            this.userDetailsService = userDetailsService;
        }
        @Override
        protected OAuth2Authentication getOAuth2Authentication(ClientDetails client, TokenRequest tokenRequest) {
            Map<String, String> parameters = new LinkedHashMap<String, String>(tokenRequest.getRequestParameters());
            String username = parameters.get("username");
            SaltUser userDetails = (SaltUser)userDetailsService.loadUserByUsername(username);
            if (!userDetails.isEnabled()) {
                throw new InvalidGrantException("User is disabled");
            }
            if (!userDetails.isAccountNonLocked()) {
                throw new InvalidGrantException("User account is locked");
            }
//            parameters.put("password",userDetails.getPassword());
            Authentication userAuth = new UsernamePasswordAuthenticationToken(username,userDetails.getPassword(),  this.authoritiesMapper.mapAuthorities(userDetails.getAuthorities()));
            ((AbstractAuthenticationToken) userAuth).setDetails(parameters);

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

@ -591,7 +591,7 @@ public class WlyyLoginEndpoint extends AbstractEndpoint {
                message = jsonStr.getString("Message");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        throw new IllegalStateException(message);
        /*Captcha _captcha = new Captcha();
@ -1171,7 +1171,7 @@ public class WlyyLoginEndpoint extends AbstractEndpoint {
    @ExceptionHandler(Exception.class)
    public ResponseEntity<Oauth2Envelop> handleException(Exception e) throws Exception {
        LOG.debug(e.getMessage(), e);
        e.printStackTrace();
        if (e instanceof UsernameNotFoundException) {
            return handleOAuth2Exception(new Oauth2Envelop("账号或者密码错误!", ResultStatus.INVALID_GRANT), e);
        } else if (e instanceof NoSuchClientException) {
@ -1187,9 +1187,9 @@ public class WlyyLoginEndpoint extends AbstractEndpoint {
        } else if (e instanceof IllegalStateException) {
            return handleOAuth2Exception(new Oauth2Envelop(e.getMessage(), -1), e);
        }else if (e instanceof ImgCaptchaException) {
            return handleOAuth2Exception(new Oauth2Envelop(e.getMessage(), ResultStatus.IMG_CAPTCHA), e);
            return handleOAuth2Exception(new Oauth2Envelop("图片验证码错误", ResultStatus.IMG_CAPTCHA), e);
        }
        return handleOAuth2Exception(new Oauth2Envelop(e.getMessage(), -1), e);
        return handleOAuth2Exception(new Oauth2Envelop("请求失败", -1), e);
    }
    private String invalidGrantMessage(InvalidGrantException e) {

+ 21 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/dao/role/WlyyRoleDao.java

@ -0,0 +1,21 @@
/*******************************************************************************
 * Copyright (c) 2005, 2014 springside.github.io
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 *******************************************************************************/
package com.yihu.jw.base.dao.role;
import com.yihu.jw.entity.care.role.DoctorRole;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import java.util.List;
public interface WlyyRoleDao extends PagingAndSortingRepository<DoctorRole, Long> {
    @Query(value = "select b.* from wlyy_user_role a,wlyy_role b where a.role = b.code and a.user = ?1",nativeQuery = true)
    List<DoctorRole> findUserRole(String user);
    DoctorRole findByCode(String code);
}

+ 22 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/dao/role/WlyyUserRoleDao.java

@ -0,0 +1,22 @@
/*******************************************************************************
 * Copyright (c) 2005, 2014 springside.github.io
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 *******************************************************************************/
package com.yihu.jw.base.dao.role;
import com.yihu.jw.entity.care.role.WlyyUserRole;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
public interface WlyyUserRoleDao extends PagingAndSortingRepository<WlyyUserRole, Long> {
    @Modifying
    @Query("update WlyyUserRole r set r.role=?1 where r.id=?2")
    void modifyRoleById(String role,Long id);
    @Query("select r from WlyyUserRole r where r.user=?1 and r.role=?2")
    WlyyUserRole findByUserAndRole(String user,String role);
}

+ 18 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/doctor/BaseDoctorEndpoint.java

@ -140,6 +140,24 @@ public class BaseDoctorEndpoint extends EnvelopRestEndpoint {
        return success(baseDoctors, count, page, size, BaseDoctorVO.class);
    }
    @GetMapping(value = BaseRequestMapping.BaseDoctor.PAGE2)
    @ApiOperation(value = "获取分页")
    public PageEnvelop<BaseDoctorVO> page2(
            @ApiParam(name = "fields", value = "返回的字段,为空返回全部字段")
            @RequestParam(value = "fields", required = false) String fields,
            @ApiParam(name = "filters", value = "过滤器,为空检索所有条件")
            @RequestParam(value = "filters", required = false) String filters,
            @ApiParam(name = "sorts", value = "排序,规则参见说明文档")
            @RequestParam(value = "sorts", required = false) String sorts,
            @ApiParam(name = "page", value = "分页大小", 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<BaseDoctorDO> baseDoctors = baseDoctorService.search(fields, filters, sorts, page, size);
        int count = (int) baseDoctorService.getCount(filters);
        return success(baseDoctors, count, page, size, BaseDoctorVO.class);
    }
    @GetMapping(value = BaseRequestMapping.BaseDoctor.LIST)
    @ApiOperation(value = "获取列表")
    public ListEnvelop<BaseDoctorVO> list(

+ 108 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/endpoint/role/WlyyUserRoleEndpoint.java

@ -0,0 +1,108 @@
package com.yihu.jw.base.endpoint.role;
import com.yihu.jw.base.service.role.WlyyUserRoleService;
import com.yihu.jw.restmodel.web.Envelop;
import com.yihu.jw.restmodel.web.ObjEnvelop;
import com.yihu.jw.restmodel.web.PageEnvelop;
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
import com.yihu.jw.rm.base.BaseRequestMapping;
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 Bing on 2022/4/12.
 *  hz医养管理员角色管理
 */
@RestController
@RequestMapping(value = BaseRequestMapping.Role.wlyyUserRole)
@Api(value = "hz医养角色管理", description = "hz医养角色管理", tags = {"wlyy基础服务 - hz医养角色管理"})
public class WlyyUserRoleEndpoint extends EnvelopRestEndpoint {
    @Autowired
    private WlyyUserRoleService wlyyUserRoleService;
    @GetMapping("getAdminList")
    @ApiOperation("获取管理员列表")
    public PageEnvelop getAdminList(@ApiParam(name = "name",value = "姓名")
                                    @RequestParam(value = "name",required = false)String name,
                                    @ApiParam(name = "idcard",value = "身份证")
                                    @RequestParam(value = "idcard",required = false)String idcard,
                                    @ApiParam(name = "mobile",value = "手机号")
                                    @RequestParam(value = "mobile",required = false)String mobile,
                                    @ApiParam(name = "page",value = "page")
                                        @RequestParam(value = "page",required = false,defaultValue = "1")Integer page,
                                    @ApiParam(name = "size",value = "手机号")
                                        @RequestParam(value = "size",required = false,defaultValue = "15")Integer size){
        try {
            return wlyyUserRoleService.getAdminList(name,idcard,mobile,page,size);
        }catch (Exception e){
            return failedPageEnvelopException2(e);
        }
    }
    @GetMapping("getRoleList")
    @ApiOperation("获取权限列表")
    public ObjEnvelop getAdminList(
                                    @ApiParam(name = "level",value = "管理权限等级 1省2市(街道) 3区县4机构5团队(社区)6医生")
                                    @RequestParam(value = "level",required = false,defaultValue = "2")String level){
        try {
            return ObjEnvelop.getSuccess("success",wlyyUserRoleService.getRoleList(level)) ;
        }catch (Exception e){
            return failedObjEnvelopException2(e);
        }
    }
    @PostMapping("delUserRole")
    @ApiOperation("删除角色权限")
    public Envelop delUserRole(@ApiParam(name="id")@RequestParam(value = "id")String id){
        try {
            wlyyUserRoleService.delete(Long.valueOf(id));
            return success();
        }catch (Exception e){
            return failedException2(e);
        }
    }
    @PostMapping("modifyUserRole")
    @ApiOperation("修改角色权限信息")
    public Envelop modifyUserRole(@ApiParam(name="id")@RequestParam(value = "id")String id,
                                  @ApiParam(name="role")@RequestParam(value = "role")String role){
        try {
            Integer result =  wlyyUserRoleService.modifyUserRole(id,role);
            if (-1==result){
                return Envelop.getError("不存在该管理权限");
            }if (-2==result){
                return Envelop.getError("未查询此条管理权限,无法修改");
            }
            return success();
        }catch (Exception e){
            return failedException2(e);
        }
    }
    @PostMapping("saveUserRole")
    @ApiOperation("新增用户权限")
    public Envelop saveUserRole(@ApiParam(name="json")@RequestParam(value = "json")String json){
        try {
            Integer result =  wlyyUserRoleService.saveUserRole(json);
            return success();
        }catch (Exception e){
            return failedException2(e);
        }
    }
    @GetMapping("getUserRoleById")
    @ApiOperation("根据id获取权限详情")
    public ObjEnvelop getUserRoleById(@ApiParam(name="id")@RequestParam(value = "id")String id){
        try {
            return ObjEnvelop.getSuccess("success",wlyyUserRoleService.getUserRoleById(id));
        }catch (Exception e){
            return failedObjEnvelopException2(e);
        }
    }
}

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

@ -168,9 +168,11 @@ public class BaseDoctorService extends BaseJpaService<BaseDoctorDO, BaseDoctorDa
            return result;
        }
        List<WlyyHospitalSysDictDO> list = wlyyHospitalSysDictDao.findByDictName("doctor_level");
        for (WlyyHospitalSysDictDO wlyyHospitalSysDictDO:list){
            if (doctors.getLevel().equals(wlyyHospitalSysDictDO.getDictCode())){
                doctors.setLevelName(wlyyHospitalSysDictDO.getDictValue());
        if (null!=doctors.getLevel()){
            for (WlyyHospitalSysDictDO wlyyHospitalSysDictDO:list){
                if (doctors.getLevel().equals(wlyyHospitalSysDictDO.getDictCode())){
                    doctors.setLevelName(wlyyHospitalSysDictDO.getDictValue());
                }
            }
        }
        //医生归属业务模块角色信息,非必填,数据可有可没有

+ 8 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/service/menu/BaseMenuManageService.java

@ -23,6 +23,7 @@ import com.yihu.jw.utils.hibernate.HibenateUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
@ -680,6 +681,13 @@ public class BaseMenuManageService {
        System.out.print("menuId"+menuId);
        List<KnowledgeArticleDictDO> list=knowledgeArticleDictDao.findByCategorySecondAndPage(menuIds,pageRequest);
        List<KnowledgeArticleDictDO> listnew = new ArrayList<>();
        BeanUtils.copyProperties(listnew,list);
        for (KnowledgeArticleDictDO dictDO:list){
            dictDO.setContent(null);
        }
        Integer count = knowledgeArticleDictDao.getCountByCategorySecond(menuIds);
        MixEnvelop mixEnvelop = new MixEnvelop();
        mixEnvelop.setTotalCount(count);

+ 119 - 0
svr/svr-base/src/main/java/com/yihu/jw/base/service/role/WlyyUserRoleService.java

@ -0,0 +1,119 @@
package com.yihu.jw.base.service.role;
import com.alibaba.fastjson.JSON;
import com.yihu.jw.base.dao.role.WlyyRoleDao;
import com.yihu.jw.base.dao.role.WlyyUserRoleDao;
import com.yihu.jw.entity.care.role.DoctorRole;
import com.yihu.jw.entity.care.role.WlyyUserRole;
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.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
 * Created by Bing on 2022/4/12.
 */
@Service
public class WlyyUserRoleService extends BaseJpaService<WlyyUserRole, WlyyUserRoleDao> {
    @Autowired
    private WlyyRoleDao wlyyRoleDao;
    @Autowired
    private WlyyUserRoleDao wlyyUserRoleDao;
    /**
     * 获取管理员列表
     * @return
     */
    public PageEnvelop<List<Map<String,Object>>> getAdminList(String name,String idcard,String mobile,Integer page,Integer size){
        page = page>0?page-1:0;
        String sql = " select ur.id,doc.name,doc.idcard,doc.id doctorCode,doc.mobile,ur.role,wr.code,wr.name roleName,wr.level from base_doctor doc " +
                " INNER JOIN wlyy_user_role ur on doc.id = ur.`user` INNER JOIN wlyy_role wr on ur.role = wr.`code` where 1=1 " ;
        String sqlCount = " select count(ur.id) from base_doctor doc " +
                " INNER JOIN wlyy_user_role ur on doc.id = ur.`user` INNER JOIN wlyy_role wr on ur.role = wr.`code` where 1=1 ";
        String filter  = " ";
        if (StringUtils.isNotBlank(name)){
            filter += " and doc.`name`like '%"+name+"%' ";
        }
        if (StringUtils.isNotBlank(idcard)){
            filter += " and doc.idcard like '%"+idcard+"%' ";
        }
        if (StringUtils.isNotBlank(mobile)){
            filter += " and doc.mobile like '%"+mobile+"%' ";
        }
        Long count = jdbcTemplate.queryForObject(sqlCount+filter,Long.class);
        filter += " order by doc.id asc limit "+page*size+","+size;
        List<Map<String,Object>> list = jdbcTemplate.queryForList(sql+filter);
        return PageEnvelop.getSuccessListWithPage("success",list,page,size,count);
    }
    /**
     *修改管理员权限
     */
    @Transactional
    public Integer modifyUserRole(String id,String role){
        DoctorRole doctorRole = wlyyRoleDao.findByCode(role);
        if (null==doctorRole){
            return -1;
        }
        WlyyUserRole wlyyUserRole = wlyyUserRoleDao.findOne(Long.valueOf(id));
        if (null==wlyyUserRole){
            return -2;
        }
        wlyyUserRoleDao.modifyRoleById(role,Long.valueOf(id));
        return 1;
    }
    /**
     * 保存新增权限
     */
    public Integer saveUserRole(String json){
        List<WlyyUserRole> userRoles = JSON.parseArray(json,WlyyUserRole.class);
        List<WlyyUserRole> saveRoles = new ArrayList<>();
        if (userRoles.size()>0){
            for (WlyyUserRole tmp:userRoles){
                if (null!= wlyyRoleDao.findByCode(tmp.getRole())){
                    if (null == wlyyUserRoleDao.findByUserAndRole(tmp.getUser(),tmp.getRole())){
                        saveRoles.add(tmp);
                    }
                }
            }
        }
        if (saveRoles.size()>0){
            wlyyUserRoleDao.save(saveRoles);
        }
        return 1;
    }
    /**
     * 获取权限列表
     * @param level 管理权限等级 1省2市(街道) 3区县4机构5团队(社区)6医生
     * @return
     */
    public  List<Map<String,Object>> getRoleList(String level){
        String sql = " select * from wlyy_role where 1=1 ";
        if (StringUtils.isNotBlank(level)){
            sql += " and level='"+level+"' ";
        }
        return jdbcTemplate.queryForList(sql);
    }
    /**
     *根据id获取权限详情
     */
    public Map<String,Object> getUserRoleById(String id){
        String sql = " select ur.id,doc.name,doc.idcard,doc.id doctorCode,doc.mobile,ur.role,wr.code,wr.name roleName,wr.level from base_doctor doc " +
                " INNER JOIN wlyy_user_role ur on doc.id = ur.`user` INNER JOIN wlyy_role wr on ur.role = wr.`code` where ur.id='"+id+"' " ;
        List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
        if (list.size()>0){
            return list.get(0);
        }
        return null;
    }
}

+ 28 - 28
svr/svr-base/src/main/resources/application.yml

@ -2,7 +2,7 @@
server:
  port: ${server.svr-base-port}
  tomcat:
      basedir: /data/apps/temp2
    basedir: /data/apps/temp2
express:
  sf_url: http://bsp-oisp.sf-express.com/bsp-oisp/sfexpressService
  sf_code: JKZL
@ -26,9 +26,9 @@ spring:
    test-while-idle: true #指明连接是否被空闲连接回收器(如果有)进行检验,如果检测失败,则连接将被从池中去除
    min-evictable-idle-time-millis: 3600000 #连接池中连接,在时间段内一直空闲,被逐出连接池的时间(1000*60*60),以毫秒为单位
    time-between-eviction-runs-millis: 300000 #在空闲连接回收器线程运行期间休眠的时间值,以毫秒为单位,一般比minEvictableIdleTimeMillis小
#  sleuth:
#    sampler:
#      percentage: 1.0 #采用需要的请求的百分比 默认是0.1 即 10%
  #  sleuth:
  #    sampler:
  #      percentage: 1.0 #采用需要的请求的百分比 默认是0.1 即 10%
  redis:
    database: 0 # Database index used by the connection factory.
    password: # Login password of the redis server.
@ -40,18 +40,18 @@ spring:
      min-idle: 5  # 连接池中的最小空闲连接
  mail:
    default-encoding: UTF-8
#端口
    #端口
    port: 25
#协议
    #协议
    protocol: smtp
    properties.mail.smtp.auth: true
    properties.mail.smtp.starttls.enable: true
    properties.mail.smtp.starttls.required: true
    timeout: 1000
    host: smtp.163.com
#发送者的邮箱密码
    #发送者的邮箱密码
    password: xmijk181016jkzl
#发送者的邮箱账号
    #发送者的邮箱账号
    username: i_jiankang@163.com
es:
  index:
@ -85,9 +85,9 @@ wechat:
spring:
  profiles: jwdev
  datasource:
#    url: jdbc:mysql://172.17.110.160/base?useUnicode:true&amp;characterEncoding=utf-8&amp;autoReconnect=true
#    username: ssgg
#    password: ssgg
    #    url: jdbc:mysql://172.17.110.160/base?useUnicode:true&amp;characterEncoding=utf-8&amp;autoReconnect=true
    #    username: ssgg
    #    password: ssgg
    url: jdbc:mysql://172.19.103.77/base?useUnicode:true&characterEncoding=utf-8&autoReconnect=true
    username: root
    password: 123456
@ -140,9 +140,9 @@ spring:
    url: jdbc:mysql://172.26.0.104/base?useUnicode:true&amp;characterEncoding=utf-8&amp;autoReconnect=true
    username: ssgg
    password: ssgg@jkzl2019
#    url: jdbc:mysql://172.19.103.77/base?useUnicode:true&characterEncoding=utf-8&autoReconnect=true
#    username: root
#    password: 123456
  #    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: 172.19.103.45:9300,172.19.103.68:9300 #配置es节点信息,逗号分隔,如果没有指定,则启动ClientNode
@ -189,9 +189,9 @@ spring:
    url: jdbc:mysql://172.26.0.104/iot-base?useUnicode:true&amp;characterEncoding=utf-8&amp;autoReconnect=true
    username: ssgg
    password: ssgg@jkzl2019
#    url: jdbc:mysql://172.19.103.77/base?useUnicode:true&characterEncoding=utf-8&autoReconnect=true
#    username: root
#    password: 123456
  #    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: 172.19.103.45:9300,172.19.103.68:9300 #配置es节点信息,逗号分隔,如果没有指定,则启动ClientNode
@ -239,9 +239,9 @@ spring:
    url: jdbc:mysql://172.26.0.195/iot-base?useUnicode:true&amp;characterEncoding=utf-8&amp;autoReconnect=true
    username: root
    password: jkzlehr
#    url: jdbc:mysql://172.19.103.77/base?useUnicode:true&characterEncoding=utf-8&autoReconnect=true
#    username: root
#    password: 123456
  #    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: 172.19.103.45:9300,172.19.103.68:9300 #配置es节点信息,逗号分隔,如果没有指定,则启动ClientNode
@ -360,7 +360,7 @@ hospital:
wlyy:
  url: http://ehr.yihu.com/wlyy/
wechat:
#  id: xm_ykyy_wx
  #  id: xm_ykyy_wx
  id: d24d1367-7f4f-43af-910e-a0a43799e040
#文件服务器上传配置 0本地,1.I健康,2.内网调用
testPattern:
@ -424,9 +424,9 @@ spring:
    url: jdbc:mysql://10.90.32.3:20002/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
  #    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.90.32.3:20010,10.90.32.3:20012 #配置es节点信息,逗号分隔,如果没有指定,则启动ClientNode
@ -599,9 +599,9 @@ im:
spring:
  profiles: hzprod
  datasource:
     url: jdbc:mysql://10.18.43.40:3306/base?useUnicode:true&amp;characterEncoding=utf-8&amp;autoReconnect=true&useSSL=false
     username: wlyy
     password: '0XxS3W*!cRj'
    url: jdbc:mysql://10.18.43.40:3306/base?useUnicode:true&amp;characterEncoding=utf-8&amp;autoReconnect=true&useSSL=false
    username: wlyy
    password: '0XxS3W*!cRj'
  elasticsearch:
    cluster-name: jkzl #集群名 默认elasticsearch
    cluster-nodes: 10.18.43.40:9300 #配置es节点信息,逗号分隔,如果没有指定,则启动ClientNode
@ -830,4 +830,4 @@ testPattern:
  sign: 1
  remote_inner_url: 172.16.100.240:10023/open/fileUpload/upload_stream
im:
  im_list_get: http://127.0.0.1:3000/
  im_list_get: http://127.0.0.1:3000/

+ 6 - 0
svr/svr-cloud-care/pom.xml

@ -270,6 +270,12 @@
            <artifactId>artemis-http-client</artifactId>
            <version>1.1.3</version>
        </dependency>
        <!--钉钉sdk-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>zwdd-sdk-java</artifactId>
            <version>1.2.0</version>
        </dependency>
    </dependencies>
    <build>

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

@ -0,0 +1,15 @@
package com.yihu.jw.care.dao.device;
import com.yihu.jw.entity.patient.BaseDeviceRepairEntity;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import java.util.List;
public interface BaseDeviceRepairDao extends PagingAndSortingRepository<BaseDeviceRepairEntity,Long>,
        JpaSpecificationExecutor<BaseDeviceRepairEntity> {
    @Query(value = "select r from BaseDeviceRepairEntity r where r.deviceSn = ?1")
    List<BaseDeviceRepairEntity> findbydeviceSn(String deviceSn);
}

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

@ -0,0 +1,12 @@
package com.yihu.jw.care.dao.device;
import com.yihu.jw.entity.care.device.BasePatientMonitorDataDO;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;
/**
 * Created by Bing on 2022/4/25.
 */
public interface BasePatientMonitorDataDao extends PagingAndSortingRepository<BasePatientMonitorDataDO,Long>,
        JpaSpecificationExecutor<BasePatientMonitorDataDO> {
}

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

@ -0,0 +1,12 @@
package com.yihu.jw.care.dao.device;
import com.yihu.jw.entity.care.device.DeviceDataPushLog;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;
/**
 * Created by Bing on 2021/9/2.
 */
public interface DeviceDataPushLogDao extends PagingAndSortingRepository<DeviceDataPushLog,Long>,
        JpaSpecificationExecutor<DeviceDataPushLog> {
}

+ 23 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/dao/handover/BaseDayHandoverDao.java

@ -0,0 +1,23 @@
package com.yihu.jw.care.dao.handover;
import com.yihu.jw.entity.care.handover.BaseDayHandover;
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/03/22
 */
public interface BaseDayHandoverDao extends PagingAndSortingRepository<BaseDayHandover, String>, JpaSpecificationExecutor<BaseDayHandover> {
    @Query("select h from BaseDayHandover h where h.createUser = ?1 and h.createTime >= ?2 and h.createTime <= ?3 order by h.createTime DESC")
    List<BaseDayHandover> findByCreateUser(String code,String staterDate,String endDate);
    @Query("select h from BaseDayHandover h where h.id = ?1")
    BaseDayHandover findById(String id);
    // Map<String,Object> findById(String id);
}

+ 5 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/dao/security/BaseEmergencyWarnLogDao.java

@ -2,6 +2,7 @@ package com.yihu.jw.care.dao.security;
import com.yihu.jw.entity.care.securitymonitoring.BaseEmergencyWarnLogDO;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import java.util.List;
@ -12,5 +13,9 @@ import java.util.List;
public interface BaseEmergencyWarnLogDao extends PagingAndSortingRepository<BaseEmergencyWarnLogDO, Long>,
        JpaSpecificationExecutor<BaseEmergencyWarnLogDO> {
    @Query("select w from BaseEmergencyWarnLogDO w where w.orderId = ?1 and w.type is null ")
    List<BaseEmergencyWarnLogDO> findByOrderIdOrderByCreateTimeDesc(String oderId);
    @Query("select w from BaseEmergencyWarnLogDO w where w.orderId = ?1 and w.type = 1")
    List<BaseEmergencyWarnLogDO> findByOrderIdByType(String orderId);
}

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

@ -0,0 +1,17 @@
package com.yihu.jw.care.dao.video;
import com.yihu.jw.entity.care.video.BaseVideoDO;
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/3/21.
 */
public interface BaseVideoDao extends PagingAndSortingRepository<BaseVideoDO, String>, JpaSpecificationExecutor<BaseVideoDO> {
    @Query("select a from BaseVideoDO a where a.type = ?1")
    List<BaseVideoDO> findByType(String type) throws Exception;
}

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

@ -1,15 +1,14 @@
package com.yihu.jw.care.endpoint.admin;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.care.dao.label.BaseCapacityLabelDao;
import com.yihu.jw.care.service.common.CommomService;
import com.yihu.jw.care.service.patient.CarePatientService;
import com.yihu.jw.care.util.DingdingUtil;
import com.yihu.jw.entity.base.patient.BasePatientDO;
import com.yihu.jw.entity.care.label.BaseCapacityLabelDO;
import com.yihu.jw.patient.dao.BasePatientDao;
import com.yihu.jw.restmodel.web.Envelop;
import com.yihu.jw.restmodel.web.ObjEnvelop;
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
import com.yihu.jw.utils.ByteToInputStream;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils;
@ -47,6 +46,56 @@ public class CommonEndpoint extends EnvelopRestEndpoint {
    private StringRedisTemplate redisTemplate;
    @Autowired
    private CommomService commomService;
    @Autowired
    private DingdingUtil dingdingUtil;
    @Autowired
    private CarePatientService carePatientService;
    @GetMapping(value = "open/initJczdPerson")
    @ApiOperation(value = "初始化杭州老人")
    public Envelop initJczdPerson(Integer size) {
        try {
            //start=133480 size=10000
            carePatientService.initJczdPerson(size);
            return success("初始化成功");
        } catch (Exception e) {
            return failedException2(e);
        }
    }
    @GetMapping(value = "open/testZzd")
    @ApiOperation(value = "测试浙政钉")
    public Envelop testZzd() {
        try {
            dingdingUtil.testZzd();
            return success("初始化成功");
        } catch (Exception e) {
            return failedException2(e);
        }
    }
    @GetMapping(value = "open/yktDoctorIdInit")
    @ApiOperation(value = "初始化更新钉钉账户id")
    public Envelop yktDoctorIdInit() {
        try {
            dingdingUtil.yktDoctorIdInit();
            return success("初始化成功");
        } catch (Exception e) {
            return failedException2(e);
        }
    }
    @GetMapping(value = "open/updYktDoctorId")
    @ApiOperation(value = "设更新单个钉钉账户id")
    public Envelop updYktDoctorId(String mobile) {
        try {
            dingdingUtil.updYktDoctorId(mobile);
            return success("导入成功");
        } catch (Exception e) {
            return failedException2(e);
        }
    }
    @GetMapping(value = "open/health")
    @ApiOperation(value = "测试应用是否可用")
@ -146,11 +195,11 @@ public class CommonEndpoint extends EnvelopRestEndpoint {
    }
    @GetMapping(value = "open/WXtempleateSendTest")
    @ApiOperation(value = "微信模板消息推送")
    @GetMapping(value = "open/shuiBiaoInit")
    @ApiOperation(value = "水表用户初始化")
    public Envelop setRedisEnable() {
        try {
            commomService.WXtempleateSendTest();
            commomService.shuiBiaoInit();
            return success("success");
        } catch (Exception e) {
            return failedException2(e);

+ 1 - 1
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/consult/DoctorConsultEndpoint.java

@ -163,7 +163,7 @@ public class DoctorConsultEndpoint extends EnvelopRestEndpoint {
            if(permissionService.noPermission(1,param)){
                return Envelop.getError("该操作没有权限");
            }
            consultService.sendWeTempMesMiniProgram(sender_id,reciver_id,session_id,token,channelName);
            consultService.sendWeTempMesMiniProgram(sender_id,reciver_id,"2",session_id,token,channelName);
            return success("操作成功");
        }catch (Exception e){
            return failedException2(e);

+ 29 - 2
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/consult/PatientConsultEndpoint.java

@ -115,9 +115,34 @@ public class PatientConsultEndpoint extends EnvelopRestEndpoint {
	@Autowired
	private MessageUtil messageUtil;
	@PostMapping(value = "videoInviteMiniProgram")
	@ApiOperation(value = "发起/断开 会话小程序视频邀请", notes = "发起/断开 会话小程序视频邀请")
	public Envelop videoInviteMiniProgram(@ApiParam(name = "sender_id", value = "发起人")
										  @RequestParam(value = "sender_id",required = true) String sender_id,
										  @ApiParam(name = "reciver_id", value = "接收人")
										  @RequestParam(value = "reciver_id",required = true) String reciver_id,
										  @ApiParam(name = "reciver_type", value = "接收人类型1居民 2医生")
										  @RequestParam(value = "reciver_type",required = false) String reciver_type,
										  @ApiParam(name = "token", value = "token")
										  @RequestParam(value = "token",required = false) String token,
										  @ApiParam(name = "channelName", value = "房间号")
										  @RequestParam(value = "channelName",required = false) String channelName,
										  @ApiParam(name = "session_id", value = "会话ID",required = false)
										  @RequestParam(value = "session_id",required = false) String session_id
	){
		try{
			consultService.sendWeTempMesMiniProgram(sender_id,reciver_id,"1",session_id,token,channelName);
			return success("操作成功");
		}catch (Exception e){
			return failedException2(e);
		}
	}
	@PostMapping(value = "sendGetuiMessage")
	@ApiOperation(value = "im推送个推消息")
	public Envelop sendGetuiMessage(String sessionId,String type,String senderName,String senderId,String targetId){
	public Envelop sendGetuiMessage(String sessionId,String type,String contentType,String senderName,String senderId,String targetId){
		try {
			logger.info("im推送1个推消息"+sessionId+","+senderName+","+targetId);
			String body = "收到来自"+senderName+"的一条消息,请关注并及时处理。";
@ -127,8 +152,10 @@ public class PatientConsultEndpoint extends EnvelopRestEndpoint {
			if(list!=null&&list.size()>0){
				peerName = URLEncoder.encode(list.get(0).get("name").toString(), "UTF-8");
			}
			String url = "/chatroom/index?type="+type+"&peerId=&peerName="+peerName+"&sessionId="+sessionId;
			String url = "/chatroom/index?type="+type+"&peerId="+senderId+"&action=callVideo&peerName="+peerName+"&sessionId="+sessionId;
			messageUtil.sendDoctorGetuiMessage(targetId,"4",url,"im消息",body);
			messageUtil.sendDoctorDingdingMessage(null,targetId,"text","4",body,null,null);
			return Envelop.getSuccess("请求成功");
		}catch (Exception e){
			e.printStackTrace();

+ 181 - 21
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/device/DoctorDeviceController.java

@ -1,20 +1,19 @@
package com.yihu.jw.care.endpoint.device;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.jw.care.aop.ObserverRequired;
import com.yihu.jw.care.dao.device.PatientDeviceDao;
import com.yihu.jw.care.endpoint.BaseController;
import com.yihu.jw.care.service.common.PermissionService;
import com.yihu.jw.care.service.contacts.ContactsService;
import com.yihu.jw.care.service.device.DeviceDetailService;
import com.yihu.jw.care.service.device.DeviceManageService;
import com.yihu.jw.care.service.device.PatientDeviceService;
import com.yihu.jw.care.util.CommonUtil;
import com.yihu.jw.doctor.dao.BaseDoctorDao;
import com.yihu.jw.care.useragent.UserAgent;
import com.yihu.jw.entity.care.device.DevicePatientDevice;
import com.yihu.jw.patient.dao.BasePatientDao;
import com.yihu.jw.entity.patient.BaseDeviceRepairEntity;
import com.yihu.jw.restmodel.ResponseContant;
import com.yihu.jw.restmodel.web.ObjEnvelop;
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
import com.yihu.jw.restmodel.web.PageEnvelop;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
@ -23,10 +22,11 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@ -44,20 +44,13 @@ public class DoctorDeviceController extends BaseController {
	@Autowired
	private PatientDeviceService patientDeviceService;
	@Autowired
	private DeviceDetailService deviceDetailService;
	DeviceManageService deviceManageService;
	@Autowired
	private BasePatientDao patientDao;
	@Autowired
	private BaseDoctorDao doctorDao;
	@Autowired
	private CommonUtil commonUtil;
	@Autowired
	private PatientDeviceDao patientDeviceDao;
	@Autowired
	private JmsTemplate jmsTemplate;
	PermissionService permissionService;
	@Autowired
	private ContactsService contactsService;
	@Autowired
	UserAgent userAgent;
	private ObjectMapper  objectMapper=new ObjectMapper();
@ -153,5 +146,172 @@ public class DoctorDeviceController extends BaseController {
		}
	}
	@RequestMapping(value = "/getDeviceList", method = RequestMethod.POST)
	@ApiOperation(value = "获取居民设备绑定列表")
	public String getDeviceList(@ApiParam(name = "doctor", value = "医生code")
								@RequestParam(value = "doctor", required = false) String doctor,
								@ApiParam(name = "patientName", value = "居民名字或者idCard")
								@RequestParam(value = "patientName", required = false) String patientName,
								@ApiParam(name = "categoryCode", value = "设备类型标识 1血糖仪,2.血压计,3药盒,4智能手表,7 = 居家报警器,12 监控器 13 睡眠带 14气感报警器 15烟感报警器 16拐杖 17随身wifi")
								@RequestParam(value = "categoryCode", required = false) String categoryCode,
								@ApiParam(name = "page", value = "分页起始id", defaultValue = "1")
								@RequestParam(value = "page", required = true) int page,
								@ApiParam(name = "pagesize", value = "每页条数", defaultValue = "10")
								@RequestParam(value = "pagesize", required = true) int pagesize) {
		List<Map<String, Object>> deviceList = null;
		try {
			JSONObject param = new JSONObject();
			param.put("doctorId",doctor);
			if(permissionService.noPermission(2,param)){
				return write(-1,"该操作没有权限");
			}
			return write(200,"成功","data",deviceManageService.getDeviceList(doctor, patientName, categoryCode, page, pagesize));
		} catch (Exception e) {
			error(e);
			return  errorResult(e);
		}
	}
	@RequestMapping(value = "/getDeviceInfo",method = RequestMethod.POST)
	@ApiOperation(value = "设备详细信息")
	public String getDeviceInfo(@ApiParam(name = "patient",value = "居民code")
								@RequestParam(value = "patient")String patient,
								@ApiParam(name = "deviceSn",value = "设备SN码")
								@RequestParam(value = "deviceSn")String deviceSn){
		try {
			JSONObject param = new JSONObject();
			param.put("doctorId",permissionService.getUID());
			if(permissionService.noPermission(2,param)){
				return write(-1,"该操作没有权限");
			}
			org.json.JSONObject result = deviceManageService.getDeviceInfo(patient, deviceSn);
			if (result.getInt(ResponseContant.resultFlag)==ResponseContant.success){
				return write(200,"获取成功","data", JSON.parseObject(result.getString(ResponseContant.resultMsg)));
			}else {
				return error(-1,result.getString(ResponseContant.resultMsg));
			}
		} catch (Exception e) {
			error(e);
			return errorResult(e);
		}
	}
	@RequestMapping(value = "/getMonitoring",method = RequestMethod.POST)
    @ApiOperation(value = "监护信息")
	public String getMonitoring(@ApiParam(name = "patient", value = "居民code")
								@RequestParam(value = "patient") String patient,
								@ApiParam(name = "topicItem", value = "专题code,关联security_topic_dict字典", required = false)
								@RequestParam(value = "topicItem",required = false,defaultValue = "preventLost") String topicItem){
		try {
			JSONObject param = new JSONObject();
			param.put("doctorId",permissionService.getUID());
			if(permissionService.noPermission(2,param)){
				return write(-1,"该操作没有权限");
			}
			return write(200,"成功","data",deviceManageService.getMonitoring(patient,topicItem));
		} catch (Exception e) {
			error(e);
			return errorResult(e);
		}
	}
    @RequestMapping(value = "/getRepairList",method = RequestMethod.POST)
    @ApiOperation(value = "报修列表")
    public String getRepairList(@ApiParam(name = "doctor",value = "医生code")
                                @RequestParam(value = "doctor")String doctor,
								@ApiParam(name = "categoryCode",value = "设备类型标识")
								@RequestParam(name = "categoryCode",required = false)String categoryCode,
                                @ApiParam(name = "patientName",value = "居民code 或 身份证")
                                @RequestParam(value = "patientName",required = false)String patientName,
                                @ApiParam(name = "page")
                                @RequestParam(value = "page")Integer page,
                                @ApiParam(name = "pageSize")
                                @RequestParam(value = "pageSize")Integer pageSize,
								@ApiParam(name = "status",value = "报修状态:0 报修中、1 已完成")
								@RequestParam(value = "status",required = false)String status
                                ){
        try {
            JSONObject param = new JSONObject();
            param.put("doctorId",doctor);
            if(permissionService.noPermission(1,param)){
                return write(-1,"该操作没有权限");
            }
            return write(200,"成功","data",deviceManageService.getRepairList(doctor,categoryCode,patientName,page,pageSize,status));
        } catch (Exception e) {
            error(e);
			return errorResult(e);
        }
    }
    @RequestMapping(value = "/getRepairInfo",method = RequestMethod.POST)
    @ApiOperation(value = "报修详细信息")
    public String getRepairInfo(@ApiParam(name = "orderId", value = "报修id")
                                @RequestParam(value = "orderId") String orderId) {
        try {
			JSONObject param = new JSONObject();
			param.put("doctorId",permissionService.getUID());
			if(permissionService.noPermission(1,param)){
				return write(-1,"该操作没有权限");
			}
            return write(200,"成功","data",deviceManageService.getRepairInfo(orderId));
        } catch (Exception e) {
            error(e);
			return errorResult(e);
        }
    }
    @RequestMapping(value = "/deviceRepair",method = RequestMethod.POST)
    @ApiOperation(value="报修")
    public String deviceRepair(@ApiParam(name = "repairJson",value = "报修对象")
                               @RequestParam(value = "repairJson")String repairJson){
        try {
			String doctor = permissionService.getUID();
			JSONObject param = new JSONObject();
			param.put("doctorId",doctor);
			if(permissionService.noPermission(1,param)){
				return write(-1,"该操作没有权限");
			}
			BaseDeviceRepairEntity baseDeviceRepairEntity = JSON.parseObject(repairJson, BaseDeviceRepairEntity.class);
			BaseDeviceRepairEntity baseDRDO = deviceManageService.deviceRepair(baseDeviceRepairEntity, doctor);
			if (null==baseDRDO) {
				return write(-1,"当前设备已存在报修订单,请联系管理员进行处理!");
			}
			return write(200,"成功","data",baseDRDO);
        } catch (Exception e) {
            error(e);
			return errorResult(e);
        }
    }
	@RequestMapping(value = "/getPatientMonitorData",method = RequestMethod.GET)
	@ApiOperation(value="获取居民设备监护数据")
	public PageEnvelop getPatientMonitorData(@ApiParam(name = "patient",value = "patient")
							   				@RequestParam(value = "patient")String patient,
											 @ApiParam(name = "startTime",value = "开始时间yyyy-MM-dd HH:mm:ss")
											 @RequestParam(value = "startTime")String startTime,
											 @ApiParam(name = "endTime",value = "endTime")
											 @RequestParam(value = "endTime")String endTime,
											 @ApiParam(name = "page",value = "page")
											 @RequestParam(value = "page")Integer page,
											 @ApiParam(name = "size",value = "size")
											 @RequestParam(value = "size")Integer size){
		try {
			String doctor = permissionService.getUID();
			JSONObject param = new JSONObject();
			param.put("doctorId",doctor);
			if(permissionService.noPermission(1,param)){
				return PageEnvelop.getSuccess("该操作没有权限");
			}
			return deviceManageService.getPatientMonitorData(patient,startTime,endTime,page,size);
		} catch (Exception e) {
			e.printStackTrace();
			return PageEnvelop.getError("系统繁忙");
		}
	}
}

+ 32 - 1
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/device/PatientDeviceController.java

@ -5,7 +5,9 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.jw.care.aop.ObserverRequired;
import com.yihu.jw.care.dao.device.PatientDeviceDao;
import com.yihu.jw.care.endpoint.BaseController;
import com.yihu.jw.care.service.common.PermissionService;
import com.yihu.jw.care.service.device.DeviceDetailService;
import com.yihu.jw.care.service.device.DeviceManageService;
import com.yihu.jw.care.service.device.PatientDeviceService;
import com.yihu.jw.care.service.device.PatientHealthIndexService;
import com.yihu.jw.entity.base.patient.BasePatientDO;
@ -14,6 +16,7 @@ import com.yihu.jw.entity.care.device.DevicePatientDevice;
import com.yihu.jw.patient.dao.BasePatientDao;
import com.yihu.jw.restmodel.ResponseContant;
import com.yihu.jw.restmodel.web.ObjEnvelop;
import com.yihu.jw.restmodel.web.PageEnvelop;
import com.yihu.jw.util.entity.ServiceException;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@ -55,6 +58,10 @@ public class PatientDeviceController extends BaseController {
    private DeviceDetailService deviceDetailService;
    @Autowired
    private BasePatientDao patientDao;
    @Autowired
    DeviceManageService deviceManageService;
    @Autowired
    PermissionService permissionService;
@ -489,6 +496,30 @@ public class PatientDeviceController extends BaseController {
        }
    }
    @RequestMapping(value = "/getPatientMonitorData",method = RequestMethod.GET)
    @ApiOperation(value="获取居民设备监护数据")
    public PageEnvelop getPatientMonitorData(@ApiParam(name = "patient",value = "patient")
                                             @RequestParam(value = "patient")String patient,
                                             @ApiParam(name = "startTime",value = "开始时间yyyy-MM-dd HH:mm:ss")
                                             @RequestParam(value = "startTime")String startTime,
                                             @ApiParam(name = "endTime",value = "endTime")
                                             @RequestParam(value = "endTime")String endTime,
                                             @ApiParam(name = "page",value = "page")
                                             @RequestParam(value = "page")Integer page,
                                             @ApiParam(name = "size",value = "size")
                                             @RequestParam(value = "size")Integer size){
        try {
			String perPatient = permissionService.getUID();
            com.alibaba.fastjson.JSONObject param = new com.alibaba.fastjson.JSONObject();
			param.put("patient",perPatient);
			if(permissionService.noPermission(1,param)){
				return PageEnvelop.getSuccess("该操作没有权限");
			}
            return deviceManageService.getPatientMonitorData(patient,startTime,endTime,page,size);
        } catch (Exception e) {
            e.printStackTrace();
            return PageEnvelop.getError("系统繁忙");
        }
    }
}

+ 124 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/doctor/DoctorDayHandoverController.java

@ -0,0 +1,124 @@
package com.yihu.jw.care.endpoint.doctor;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.care.endpoint.BaseController;
import com.yihu.jw.care.service.common.PermissionService;
import com.yihu.jw.care.service.doctor.DayHandoverService;
import com.yihu.jw.care.useragent.UserAgent;
import com.yihu.jw.entity.care.handover.BaseDayHandover;
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 Bing on 2021/7/16.
 */
@RestController
@RequestMapping(value = "doctor/handover")
@Api(tags = "社工端-日常交接", description = "日常交接")
public class DoctorDayHandoverController extends BaseController {
    @Autowired
    DayHandoverService dayHandoverService;
    @Autowired
    UserAgent userAgent;
    @Autowired
    PermissionService permissionService;
    @PostMapping("/saveHandover")
    @ApiOperation(value = "保存日常交接")
    public String saveHandover(@ApiParam(name = "dayHandoverJson", value = "交接对象")
                               @RequestParam(value = "dayHandoverJson") String dayHandoverJson) {
        try {
            JSONObject param = new JSONObject();
            param.put("doctorId", userAgent.getUID());
            if (permissionService.noPermission(1, param)) {
                return write(-1, "该操作没有权限");
            }
            if (dayHandoverService.doctorIf(param.get("doctorId").toString())) {
                return write(-1, "该操作仅支持社工");
            }
            BaseDayHandover baseDayHandover = JSON.parseObject(dayHandoverJson, BaseDayHandover.class);
            if (null == baseDayHandover) {
                return write(-1, "参数错误!");
            }
            BaseDayHandover result = dayHandoverService.saveDayHandover(baseDayHandover);
            if (null==result){
                return write(400,"提交人与交接人不能是同一个人!");
            }
            return write(200, "成功", "data",result);
        } catch (Exception e) {
            error(e);
            return errorResult(e);
        }
    }
    @PostMapping("/getDayHandoverList")
    @ApiOperation(value = "获取交接列表")
    public String getDayHandoverList(@ApiParam(name = "doctor")
                                     @RequestParam(value = "doctor") String doctor,
                                     @ApiParam(name = "staterDate")
                                     @RequestParam(value = "staterDate")String staterDate,
                                     @ApiParam(name = "endDate")
                                     @RequestParam(value = "endDate")String endDate) {
        try {
            JSONObject param = new JSONObject();
            param.put("doctorId", doctor);
            if (permissionService.noPermission(1, param)) {
                return write(-1, "该操作没有权限");
            }
            if (dayHandoverService.doctorIf(doctor)) {
                return write(-1, "该操作仅支持社工");
            }
            return write(200, "成功", "data", dayHandoverService.getDayHandoverList(doctor,staterDate,endDate));
        } catch (Exception e) {
            error(e);
            return errorResult(e);
        }
    }
    @PostMapping("/getTeamMember")
    @ApiOperation(value = "获取团队成员")
    public String getTeamMember(@ApiParam(name = "doctor")
                                @RequestParam(value = "doctor") String doctor) {
        try {
            JSONObject param = new JSONObject();
            param.put("doctorId", doctor);
            if (permissionService.noPermission(1, param)) {
                return write(-1, "该操作没有权限");
            }
            return write(200, "成功", "data", dayHandoverService.getTeamMember(doctor));
        } catch (Exception e) {
            error(e);
            return errorResult(e);
        }
    }
    @GetMapping("/getDayHandoverDetails")
    @ApiOperation(value = "获取日常交接详情")
    public String getDayHandoverDetails(@ApiParam(name = "id",value = "交接表单id")
                                        @RequestParam(value = "id")String id){
        try {
            JSONObject param = new JSONObject();
            param.put("doctorId", permissionService.getUID());
            if (permissionService.noPermission(1, param)) {
                return write(-1, "该操作没有权限");
            }
            return write(200,"成功","data",dayHandoverService.getDayHandoverDetails(id));
        } catch (Exception e) {
            error(e);
            return errorResult(e);
        }
    }
}

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

@ -7,8 +7,10 @@ import com.yihu.jw.care.service.consult.ConsultTeamService;
import com.yihu.jw.care.service.doctor.CareDoctorService;
import com.yihu.jw.care.service.doctor.DoctorServicePermissionsService;
import com.yihu.jw.care.service.sign.CapacityAssessmentRecordService;
import com.yihu.jw.care.util.DingdingUtil;
import com.yihu.jw.care.util.EntranceUtil;
import com.yihu.jw.doctor.dao.BaseDoctorDao;
import com.yihu.jw.entity.base.doctor.BaseDoctorDO;
import com.yihu.jw.restmodel.web.Envelop;
import com.yihu.jw.restmodel.web.ListEnvelop;
import com.yihu.jw.restmodel.web.ObjEnvelop;
@ -47,7 +49,36 @@ public class DoctorEndpoint extends EnvelopRestEndpoint {
    private DoctorServicePermissionsService doctorServicePermissionsService;
    @Autowired
    private PermissionService permissionService;
    @Autowired
    private DingdingUtil dingdingUtil;
    @GetMapping(value = "dingtalk_app_user")
    @ApiOperation(value = "钉钉授权code获取用户信息")
    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("暂无该账号,请联系云照护工作人员配置");
                    }else{
                        return success(doctorDO.getMobile());
                    }
                }else{
                    return Envelop.getError(content.getString("responseMessage"));
                }
            }else {
                return Envelop.getError("获取失败");
            }
        }catch (Exception e){
            e.printStackTrace();
            return failedException2(e);
        }
    }
    @PostMapping(value = "updOnline")
    @ApiOperation(value = "更新在线状态")

+ 470 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/doctor/admin/AdminInfoEndpoint.java

@ -0,0 +1,470 @@
package com.yihu.jw.care.endpoint.doctor.admin;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.care.service.common.PermissionService;
import com.yihu.jw.care.service.device.DeviceManageService;
import com.yihu.jw.care.service.sign.ArchiveService;
import com.yihu.jw.care.service.statistics.DetectionPlatformService;
import com.yihu.jw.care.service.statistics.StatisticsService;
import com.yihu.jw.restmodel.web.Envelop;
import com.yihu.jw.restmodel.web.ListEnvelop;
import com.yihu.jw.restmodel.web.ObjEnvelop;
import com.yihu.jw.restmodel.web.PageEnvelop;
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.apache.commons.lang3.StringUtils;
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 2022/3/21.
 * APP管理员部分
 */
@RestController
@RequestMapping("admin" )
@Api(tags = "管理员部分", description = "管理员部分")
public class AdminInfoEndpoint extends EnvelopRestEndpoint {
    @Autowired
    private PermissionService permissionService;
    @Autowired
    private StatisticsService statisticsService;
    @Autowired
    private DetectionPlatformService platformService;
    @Autowired
    private DeviceManageService deviceManageService;
    @Autowired
    private ArchiveService archiveService;
    @GetMapping(value = "getOlderOverview")
    @ApiOperation("获取老人概况")
    public ObjEnvelop getOlderOverview(@ApiParam(name = "currentUserRole", value = "登录角色")
                                       @RequestParam(value = "currentUserRole", required = false) String currentUserRole,
                                       @ApiParam(name = "currentUserRoleLevel", value = "登录角色等级(1省2市3区4社区、机构)")
                                       @RequestParam(value = "currentUserRoleLevel", required = false)String currentUserRoleLevel){
        try {
            JSONObject param = new JSONObject();
            String doctorId =  permissionService.getUID();
            param.put("doctorId",doctorId);
            if(permissionService.noPermission(0,param)){
                return ObjEnvelop.getError("该操作没有权限");
            }
            return ObjEnvelop.getSuccess("查询成功",statisticsService.getOlderOverview(currentUserRole,currentUserRoleLevel));
        }catch (Exception e){
            return failedObjEnvelopException2(e);
        }
    }
    @GetMapping(value = "statisticsTotalAmount")
    @ApiOperation(value = "统计总数")
    public ObjEnvelop statisticsTotalAmount(
            @RequestParam(required = true) String endDate,
            @RequestParam(required = true) String area,
            @RequestParam(required = true) int level,
            @RequestParam(required = true) String index,
            @ApiParam(name="type",value="类型:1本周,2本月",defaultValue = "")@RequestParam(required = false) String type) {
        try {
            JSONObject param = new JSONObject();
            String doctorId =  permissionService.getUID();
            param.put("doctorId",doctorId);
            if(permissionService.noPermission(0,param)){
                return ObjEnvelop.getError("该操作没有权限");
            }
            JSONObject result = statisticsService.statisticsTotalAmount(endDate, area, level, index, type);
            return success(result);
        } catch (Exception e) {
            return failedObjEnvelopException2(e);
        }
    }
    @GetMapping(value = "patientAnalysis")
    @ApiOperation(value = "居民分析")
    public ObjEnvelop patientAnalysis(
            @RequestParam(required = true) String endDate,
            @RequestParam(required = true) String area,
            @RequestParam(required = true) int level,
            @ApiParam(name="index",value="42幼儿,37老人",defaultValue = "")@RequestParam(required = true) String index) {
        try {
            JSONObject param = new JSONObject();
            String doctorId =  permissionService.getUID();
            param.put("doctorId",doctorId);
            if(permissionService.noPermission(0,param)){
                return ObjEnvelop.getError("该操作没有权限");
            }
            JSONObject result = statisticsService.patientAnalysis(endDate, area, level, index);
            return success(result);
        } catch (Exception e) {
            return failedObjEnvelopException2(e);
        }
    }
    @GetMapping(value = "deviceAndService")
    @ApiOperation(value = "获取安防设备种类、安防服务、预警类型 数量")
    public ObjEnvelop deviceAndService() {
        try {
            JSONObject param = new JSONObject();
            String doctorId =  permissionService.getUID();
            param.put("doctorId",doctorId);
            if(permissionService.noPermission(0,param)){
                return ObjEnvelop.getError("该操作没有权限");
            }
            return success("查询成功", 200, platformService.deviceAndService());
        } catch (Exception e) {
            return failedObjEnvelopException(e);
        }
    }
    @GetMapping(value = "addLine")
    @ApiOperation(value = "通用折线图")
    public ListEnvelop addLine(
            @RequestParam(required = true) String startDate,
            @RequestParam(required = true) String endDate,
            @RequestParam(required = true) String area,
            @RequestParam(required = true) int level,
            @RequestParam(required = true) String index,
            @RequestParam(required = false) String timeLevel,
            @RequestParam(required = false) String interval,
            @RequestParam(required = false) String lowLevel) {
        try {
            JSONObject param = new JSONObject();
            String doctorId =  permissionService.getUID();
            param.put("doctorId",doctorId);
            if(permissionService.noPermission(0,param)){
                return ListEnvelop.getError("该操作没有权限");
            }
            JSONArray result = statisticsService.addLine(startDate,endDate, area, level, index, timeLevel,interval,lowLevel);
            return success(result);
        } catch (Exception e) {
            return failedListEnvelopException2(e);
        }
    }
    @GetMapping(value = "getServiceSituation")
    @ApiOperation(value = "设备库存、使用、总备案、照护类型设备数量")
    public ObjEnvelop getServiceSituation( @RequestParam(required = true) String area,
                                           @RequestParam(required = true) int level) {
        try {
            JSONObject param = new JSONObject();
            String doctorId =  permissionService.getUID();
            param.put("doctorId",doctorId);
            if(permissionService.noPermission(0,param)){
                return ObjEnvelop.getError("该操作没有权限");
            }
            return success("查询成功", 200, platformService.getServiceSituation(area,level));
        } catch (Exception e) {
            return failedObjEnvelopException(e);
        }
    }
    @GetMapping(value = "getDeviceCompany")
    @ApiOperation(value = "设备物联率、失联率")
    public ObjEnvelop getDeviceCompany( @RequestParam(required = true) String area,
                                        @RequestParam(required = true) int level) {
        try {
            JSONObject param = new JSONObject();
            String doctorId =  permissionService.getUID();
            param.put("doctorId",doctorId);
            if(permissionService.noPermission(0,param)){
                return ObjEnvelop.getError("该操作没有权限");
            }
            JSONObject o = platformService.getDeviceComapny(area,level);
            return success(o);
        } catch (Exception e) {
            return failedObjEnvelopException(e);
        }
    }
    @GetMapping(value = "statisticsEmeWarnServer")
    @ApiOperation(value = "紧急预警事件饼图、预警数量")
    public ObjEnvelop statisticsOrderServer(@RequestParam(required = true) String endDate,
                                            @RequestParam(required = true) String area,
                                            @RequestParam(required = true) int level) {
        try {
            JSONObject param = new JSONObject();
            String doctorId =  permissionService.getUID();
            param.put("doctorId",doctorId);
            if(permissionService.noPermission(0,param)){
                return ObjEnvelop.getError("该操作没有权限");
            }
            JSONObject result = statisticsService.adminStatisticsEmeWarnServer(endDate,area,level);
            return success(result);
        } catch (Exception e) {
            return failedObjEnvelopException2(e);
        }
    }
    @GetMapping(value = "statisticsEmeWarnList")
    @ApiOperation(value = "紧急预警响应率")
    public ObjEnvelop statisticsEmeWarnList(@RequestParam(required = true) String endDate,
                                            @RequestParam(required = true) String area,
                                            @RequestParam(required = true) int level) {
        try {
            JSONObject param = new JSONObject();
            String doctorId =  permissionService.getUID();
            param.put("doctorId",doctorId);
            if(permissionService.noPermission(0,param)){
                return ObjEnvelop.getError("该操作没有权限");
            }
            JSONObject result = statisticsService.statisticsEmeWarnList(endDate,area,level);
            return success(result);
        } catch (Exception e) {
            return failedObjEnvelopException2(e);
        }
    }
    @GetMapping(value = "statisticsNotWishesList")
    @ApiOperation(value = "人文关怀祝福未发送率")
    public ObjEnvelop statisticsNotWishesList(@RequestParam(required = true) String endDate,
                                              @RequestParam(required = true) String area,
                                              @RequestParam(required = true) int level) {
        try {
            JSONObject param = new JSONObject();
            String doctorId =  permissionService.getUID();
            param.put("doctorId",doctorId);
            if(permissionService.noPermission(0,param)){
                return ObjEnvelop.getError("该操作没有权限");
            }
            JSONObject result = statisticsService.statisticsNotWishesList(endDate,area,level);
            return success(result);
        } catch (Exception e) {
            return failedObjEnvelopException2(e);
        }
    }
    /******设备保修**********/
    @GetMapping(value = "getDeviceRepairList")
    @ApiOperation(value = "获取设备保修列表")
    public PageEnvelop getDeviceRepairList(@ApiParam(name="name",value = "姓名/身份证",required = false)
                                           @RequestParam(value = "name",required = false) String name,
                                           @ApiParam(name="status",value = "保修状态0保修中 1已完成",required = false)
                                           @RequestParam(value = "status",required = false) String status,
                                           @ApiParam(name="page",value = "页码",required = true)
                                           @RequestParam(value = "page",required = true,defaultValue = "1") Integer page,
                                           @ApiParam(name="size",value = "分页大小",required = true)
                                           @RequestParam(value = "size",required = true,defaultValue = "15") Integer size) {
        try {
            page = page>0?page-1:0;
            JSONObject param = new JSONObject();
            String doctorId =  permissionService.getUID();
            param.put("doctorId",doctorId);
            if(permissionService.noPermission(0,param)){
                return PageEnvelop.getError("该操作没有权限");
            }
            return deviceManageService.getDeviceRepairList(name,status,page,size);
        } catch (Exception e) {
            return failedPageEnvelopException2(e);
        }
    }
    @GetMapping(value = "getDeviceRepairDetail")
    @ApiOperation(value = "获取设备报修工单详细信息")
    public ObjEnvelop getDeviceRepairDetail(@ApiParam(name="orderId",value = "保修工单号",required = true)
                                       @RequestParam(value = "orderId",required = true) String orderId) {
        try {
            JSONObject param = new JSONObject();
            String doctorId =  permissionService.getUID();
            param.put("doctorId",doctorId);
            if(permissionService.noPermission(0,param)){
                return ObjEnvelop.getError("该操作没有权限");
            }
            return ObjEnvelop.getSuccess("获取成功",deviceManageService.getDeviceRepairDetail(orderId));
        } catch (Exception e) {
            return failedObjEnvelopException2(e);
        }
    }
    @PostMapping(value = "dealDeviceRepair")
    @ApiOperation(value = "处理设备报修工单")
    public Envelop dealDeviceRepair(@ApiParam(name="orderId",value = "保修工单号",required = true)
                                    @RequestParam(value = "orderId",required = true) String orderId,
                                    @ApiParam(name="dealContent",value = "报修反馈",required = true)
                                    @RequestParam(value = "dealContent",required = true) String dealContent) {
        try {
            JSONObject param = new JSONObject();
            String doctorId =  permissionService.getUID();
            param.put("doctorId",doctorId);
            if(permissionService.noPermission(0,param)){
                return Envelop.getError("该操作没有权限");
            }
            if (StringUtils.isBlank(dealContent)){
                return Envelop.getError("报修反馈未填");
            }
            deviceManageService.dealDeviceRepair(doctorId,orderId,dealContent);
            return Envelop.getSuccess("填写成功");
        } catch (Exception e) {
            return failedObjEnvelopException2(e);
        }
    }
    @GetMapping(value = "getOlderTeamListWithPage")
    @ApiOperation("获取养老服务社区团队列表")
    public PageEnvelop getOlderTeamListWithPage(
                                        @RequestParam(required = false,defaultValue = "330100") String area,
                                        @RequestParam(required = false,defaultValue = "2") String level,
                                        @ApiParam(name="page",value = "页码",required = true)
                                        @RequestParam(value = "page",required = true,defaultValue = "1") Integer page,
                                        @ApiParam(name="size",value = "分页大小",required = true)
                                        @RequestParam(value = "size",required = true,defaultValue = "5") Integer size){
        try {
            JSONObject param = new JSONObject();
            String doctorId =  permissionService.getUID();
            param.put("doctorId",doctorId);
            if(permissionService.noPermission(0,param)){
                return PageEnvelop.getError("该操作没有权限");
            }
            return statisticsService.getOlderTeamListWithPage(area,level,page,size);
        }catch (Exception e){
            return failedPageEnvelopException2(e);
        }
    }
    @GetMapping(value = "statisticsSecurityOlder")
    @ApiOperation(value = "管理端首页安防预警统计分析")
    public ObjEnvelop statisticsSecurityOlder(
            @RequestParam(required = true) String endDate,
            @RequestParam(required = true) String area,
            @RequestParam(required = true) Integer level,
            @ApiParam(name="type",value="类型:1本周,2本月",defaultValue = "")@RequestParam(required = false) String type) {
        try {
            JSONObject param = new JSONObject();
            String doctorId =  permissionService.getUID();
            param.put("doctorId",doctorId);
            if(permissionService.noPermission(0,param)){
                return ObjEnvelop.getError("该操作没有权限");
            }
            JSONObject result = statisticsService.statisticsSecurityOlder(endDate,area,level, type);
            return success(result);
        } catch (Exception e) {
            return failedObjEnvelopException2(e);
        }
    }
    @ApiOperation("获取各专题绑定人数")
    @ResponseBody
    @RequestMapping(value = "getTopicPeopleNums", method = RequestMethod.GET)
    public ObjEnvelop getTopicPeopleNums(@RequestParam(required = true) String area,
                                         @RequestParam(required = true) Integer level) {
        try {
            JSONObject param = new JSONObject();
            String doctorId =  permissionService.getUID();
            param.put("doctorId",doctorId);
            if(permissionService.noPermission(0,param)){
                return ObjEnvelop.getError("该操作没有权限");
            }
            return ObjEnvelop.getSuccess("查询成功",platformService.getTopicPeopleNums(area,level+""));
        } catch (Exception e) {
            return failedObjEnvelopException2(e);
        }
    }
    @GetMapping(value = "getSignOlder")
    @ApiOperation(value = "管理员查找签约居民")
    public PageEnvelop<List<Map<String,Object>>> getSignOlder (
            @RequestParam(required = true) String area,
            @RequestParam(required = true) Integer level,
            @ApiParam(name = "name", value = "姓名或身份证", required = false)
            @RequestParam(value = "name",required = false) String name,
            @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) {
        try{
            JSONObject param = new JSONObject();
            String doctorId =  permissionService.getUID();
            param.put("doctorId",doctorId);
            if(permissionService.noPermission(0,param)){
                return PageEnvelop.getError("该操作没有权限");
            }
            return archiveService.adminGetSignOlder(area, level, name, page, size);
        }catch (Exception e){
            return failedPageEnvelopException2(e);
        }
    }
    @GetMapping(value = "getConsultAnalysisRank")
    @ApiOperation(value = "获取咨询排名情况")
    public ObjEnvelop getConsultAnalysisRank(@RequestParam(required = true) String endDate,
                                            @RequestParam(required = true) String area,
                                            @RequestParam(required = true) Integer level,
                                            @ApiParam(name="type",value="咨询类型 23新生儿在线咨询 24老人在线咨询,25老人健康咨询",defaultValue = "")
                                            @RequestParam(required = true) String type) {
        try {
            JSONObject param = new JSONObject();
            String doctorId =  permissionService.getUID();
            param.put("doctorId",doctorId);
            if(permissionService.noPermission(0,param)){
                return ObjEnvelop.getError("该操作没有权限");
            }
            return ObjEnvelop.getSuccess("success",statisticsService.getConsultAnalysisRank(endDate,area,level,type));
        } catch (Exception e) {
            return failedObjEnvelopException2(e);
        }
    }
    @GetMapping(value = "getDoorCoachRank")
    @ApiOperation(value = "获取上门辅导排名")
    public ObjEnvelop getDoorCoachRank(@RequestParam(required = true) String endDate,
                                       @RequestParam(required = true) String area,
                                       @RequestParam(required = true) Integer level) {
        try {
            JSONObject param = new JSONObject();
            String doctorId =  permissionService.getUID();
            param.put("doctorId",doctorId);
            if(permissionService.noPermission(0,param)){
                return ObjEnvelop.getError("该操作没有权限");
            }
            return ObjEnvelop.getSuccess("success",statisticsService.getDoorCoachRank(endDate,area,level));
        } catch (Exception e) {
            return failedObjEnvelopException2(e);
        }
    }
    @GetMapping(value = "getLifeCareRank")
    @ApiOperation(value = "获取生活照料排名")
    public ObjEnvelop getLifeCareRank(@RequestParam(required = true) String endDate,
                                       @RequestParam(required = true) String area,
                                       @RequestParam(required = true) Integer level) {
        try {
            JSONObject param = new JSONObject();
            String doctorId =  permissionService.getUID();
            param.put("doctorId",doctorId);
            if(permissionService.noPermission(0,param)){
                return ObjEnvelop.getError("该操作没有权限");
            }
            return ObjEnvelop.getSuccess("success",statisticsService.getLifeCareRank(endDate,area,level));
        } catch (Exception e) {
            return failedObjEnvelopException2(e);
        }
    }
    @GetMapping(value = "statisticsLifeCareItemAdd")
    @ApiOperation(value = "管理端首页智慧照护生活照料项目新增情况")
    public ObjEnvelop statisticsLifeCareItemAdd(
            @RequestParam(required = true) String endDate,
            @RequestParam(required = true) String area,
            @RequestParam(required = true) Integer level,
            @ApiParam(name="type",value="类型:1本周,2本月",defaultValue = "")@RequestParam(required = false) String type) {
        try {
            JSONObject param = new JSONObject();
            String doctorId =  permissionService.getUID();
            param.put("doctorId",doctorId);
            if(permissionService.noPermission(0,param)){
                return ObjEnvelop.getError("该操作没有权限");
            }
            JSONObject result = statisticsService.statisticsLifeCareItemAdd(endDate,area,level, type);
            return success(result);
        } catch (Exception e) {
            return failedObjEnvelopException2(e);
        }
    }
}

+ 199 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/doctor/admin/AdminListInfoController.java

@ -0,0 +1,199 @@
package com.yihu.jw.care.endpoint.doctor.admin;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.care.service.assistance.EmergencyAssistanceService;
import com.yihu.jw.care.service.common.PermissionService;
import com.yihu.jw.care.service.lifeCare.LifeCareOrderService;
import com.yihu.jw.care.service.statistics.StatisticsService;
import com.yihu.jw.care.service.third.PatientInfoPlatFormService;
import com.yihu.jw.entity.care.message.BaseServiceNews;
import com.yihu.jw.restmodel.web.ListEnvelop;
import com.yihu.jw.restmodel.web.ObjEnvelop;
import com.yihu.jw.restmodel.web.PageEnvelop;
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.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;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping(value = "/admin/list/info")
@Api(description = "管理端   列表展示信息")
public class AdminListInfoController extends EnvelopRestEndpoint {
    @Autowired
    private PatientInfoPlatFormService patientInfoPlatFormService;
    @Autowired
    private StatisticsService statisticsService;
    @Autowired
    private PermissionService permissionService;
    @Autowired
    private LifeCareOrderService lifeCareOrderService;
    @Autowired
    private EmergencyAssistanceService emergencyAssistanceService;
    @GetMapping(value = "/getPatientDeviceInfoWithDetail")
    @ApiOperation("获取居民设备列表(带设备电量、预警情况、是否在线等信息)")
    public ObjEnvelop getPatientDeviceInfoWithDetail(@ApiParam(name="patient",value = "居民id",required = true)
                                                     @RequestParam(value = "patient")String patient){
        try {
            JSONObject param = new JSONObject();
            String doctorId =  permissionService.getUID();
            param.put("doctorId",doctorId);
            if(permissionService.noPermission(0,param)){
                return ObjEnvelop.getError("该操作没有权限");
            }
            return ObjEnvelop.getSuccess("查询成功",patientInfoPlatFormService.getPatientDeviceInfoWithDetail(patient,null));
        }catch (Exception e){
            return failedObjEnvelopException2(e);
        }
    }
    @GetMapping(value = "/serviceDynamics")
    @ApiOperation("获取动态服务--管理员端")
    public ListEnvelop  serviceDynamics(@ApiParam(name = "page")
                                        @RequestParam(value = "page")Integer page,
                                        @ApiParam(name = "size")
                                        @RequestParam(value = "size")Integer size,
                                        @ApiParam(name = "area")
                                        @RequestParam(value = "area")String area,
                                        @ApiParam(name = "level")
                                        @RequestParam(value = "level")String level){
        try {
            JSONObject param = new JSONObject();
            String doctorId =  permissionService.getUID();
            param.put("doctorId",doctorId);
            if(permissionService.noPermission(0,param)){
                return ListEnvelop.getError("该操作没有权限");
            }
            List<BaseServiceNews> baseServiceNews = statisticsService.serviceDynamics(page, size, area, level);
            return ListEnvelop.getSuccess("查询成功",baseServiceNews);
        } catch (Exception e) {
            return failedListEnvelopException2(e);
        }
    }
    @GetMapping("lifeCare/topStatusBarNum")
    @ApiOperation(value = "管理员查询生活照料顶部状态栏订单分类tab")
    public ObjEnvelop adminGetNumGroupByStatus(
            @RequestParam(required = true) String area,
            @RequestParam(required = true) Integer level) {
        try {
            JSONObject param = new JSONObject();
            String doctorId =  permissionService.getUID();
            param.put("doctorId",doctorId);
            if(permissionService.noPermission(0,param)){
                return ObjEnvelop.getError("该操作没有权限");
            }
            Map<String, Integer> map = lifeCareOrderService.adminGetNumGroupByStatus(area,level);
            return ObjEnvelop.getSuccess("获取成功",map);
        } catch (Exception e) {
            return failedObjEnvelopException2(e);
        }
    }
    @GetMapping(value = "lifeCare/queryBriefList")
    @ApiOperation(value = "管理员查询生活照料工单列表")
    public PageEnvelop queryBriefList(
            @RequestParam(required = true) String area,
            @RequestParam(required = true) Integer level,
            @ApiParam(name = "patientName", value = "居民姓名或身份证") @RequestParam(value = "patientName", required = false) String patientName,
            @ApiParam(name = "phone", value = "手机号码") @RequestParam(value = "phone", required = false) String phone,
            @ApiParam(name = "status", value = "工单状态") @RequestParam(value = "status", required = false) Integer status,
            @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) {
        try{
            JSONObject param = new JSONObject();
            String doctorId =  permissionService.getUID();
            param.put("doctorId",doctorId);
            if(permissionService.noPermission(0,param)){
                return PageEnvelop.getError("该操作没有权限");
            }
            return lifeCareOrderService.adminQueryBriefList(area,level, patientName, phone, status, page, size);
        }catch (Exception e){
            return failedPageEnvelopException2(e);
        }
    }
    @GetMapping(value = "/getAdminOrderList")
    @ApiOperation(value = "获取紧急安防工单--管理员端")
    public ListEnvelop getEmeAndSecuOrderList(@ApiParam(name="patientId",value = "居民id")
                                              @RequestParam(value = "patientId",required = false) String patientId,
                                              @ApiParam(name="patientName",value = "患者姓名/身份证")
                                              @RequestParam(value = "patientName",required = false) String patientName,
                                              @ApiParam(name="doctor",value = "查看医生")
                                              @RequestParam(value = "doctor",required = false) String doctor,
                                              @ApiParam(name="status",value = "工单状态-2误报警-1已取消0已完成1申请中")
                                              @RequestParam(value = "status",required = false) String status,
                                              @ApiParam(name="svrDesc",value = "安防工单服务类型 关联security_server_dict字典")
                                              @RequestParam(value = "svrDesc",required = false)String svrDesc,
                                              @ApiParam(name="orderType",value = "工单类型,20紧急呼叫22安防工单")
                                              @RequestParam(value = "orderType",required = true)String orderType,
                                              @ApiParam(name="page",value = "page")
                                              @RequestParam(value = "page",required = true) Integer page,
                                              @ApiParam(name="pageSize",value = "pageSize")
                                              @RequestParam(value = "pageSize",required = true) Integer pageSize,
                                              @ApiParam(name = "area")
                                                  @RequestParam(value = "area")String area,
                                              @ApiParam(name = "level")
                                                  @RequestParam(value = "level")String level
    ){
        try {
            JSONObject param = new JSONObject();
            String doctorId =  permissionService.getUID();
            param.put("doctorId",doctorId);
            if(permissionService.noPermission(0,param)){
                return ListEnvelop.getError("该操作没有权限");
            }
            /*if (StringUtils.isBlank(patientId)&&StringUtils.isBlank(doctor)){
                return ListEnvelop.getError("请求参数错误");
            }*/
            return ListEnvelop.getSuccess( "查询成功",emergencyAssistanceService.getAdminEmeAndSecuOrderList(orderType,patientId,patientName,doctor,status,page,pageSize,svrDesc,area,level));
        }catch (Exception e){
            return failedListEnvelopException2(e);
        }
    }
    @GetMapping(value = "/getEmeAndSecuOrderTab")
    @ApiOperation(value = "获取安防与紧急呼叫工单Tab")
    public ObjEnvelop getEmeAndSecuOrderTab(@ApiParam(name="doctor",value = "查看医生")
                                            @RequestParam(value = "doctor",required = true) String doctor,
                                            @ApiParam(name="status",value = "工单状态")
                                            @RequestParam(value = "status",required =false) String status,
                                            @ApiParam(name = "area")
                                                @RequestParam(value = "area") String area,
                                            @ApiParam(name = "level")
                                                @RequestParam(value = "level") String level) {
        try {
            JSONObject param = new JSONObject();
            String doctorId =  permissionService.getUID();
            param.put("doctorId",doctorId);
            if(permissionService.noPermission(0,param)){
                return ObjEnvelop.getError("该操作没有权限");
            }
            return ObjEnvelop.getSuccess( "查询成功",emergencyAssistanceService.getAdminEmeAndSecuOrderTab(doctor,status,area,level));
        }catch (Exception e){
            return failedObjEnvelopException2(e);
        }
    }
}

+ 66 - 4
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/lifeCare/DoctorLifeCareEndpoint.java

@ -2,10 +2,13 @@ package com.yihu.jw.care.endpoint.lifeCare;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.care.aop.ObserverRequired;
import com.yihu.jw.care.service.common.PermissionService;
import com.yihu.jw.care.service.lifeCare.LifeCareOrderService;
import com.yihu.jw.care.service.org.BaseOrgService;
import com.yihu.jw.entity.care.lifeCare.LifeCareOrderDO;
import com.yihu.jw.restmodel.ResponseContant;
import com.yihu.jw.restmodel.web.Envelop;
import com.yihu.jw.restmodel.web.ListEnvelop;
import com.yihu.jw.restmodel.web.ObjEnvelop;
import com.yihu.jw.restmodel.web.PageEnvelop;
import com.yihu.jw.restmodel.web.endpoint.EnvelopRestEndpoint;
@ -28,6 +31,10 @@ public class DoctorLifeCareEndpoint extends EnvelopRestEndpoint {
    @Autowired
    private LifeCareOrderService lifeCareOrderService;
    @Autowired
    private BaseOrgService baseOrgService;
    @Autowired
    private PermissionService permissionService;
    @GetMapping(value = "queryBriefList")
    @ApiOperation(value = "调度员查询工单列表")
@ -37,9 +44,10 @@ public class DoctorLifeCareEndpoint extends EnvelopRestEndpoint {
            @ApiParam(name = "phone", value = "手机号码") @RequestParam(value = "phone", required = false) String phone,
            @ApiParam(name = "status", value = "工单状态") @RequestParam(value = "status", required = false) Integer status,
            @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) {
            @ApiParam(name = "size", value = "页码", required = true, defaultValue = "15") @RequestParam(value = "size") int size,
            @ApiParam(name = "code", value = "服务项类型", required = false) @RequestParam(value = "code",required = false) String code) {
        try{
            JSONObject result = lifeCareOrderService.queryBriefList(doctorCode, patientName, phone, status, page, size);
            JSONObject result = lifeCareOrderService.queryBriefList(doctorCode, patientName, phone, status, page, size,code);
            if (result.getIntValue(ResponseContant.resultFlag) == ResponseContant.fail) {
                return PageEnvelop.getError(result.getString(ResponseContant.resultMsg));
            }
@ -54,9 +62,11 @@ public class DoctorLifeCareEndpoint extends EnvelopRestEndpoint {
    @ApiOperation(value = "顶部状态栏订单分类tab")
    public ObjEnvelop topStatusBarNum(
            @ApiParam(name = "doctor", value = "医生code")
            @RequestParam(value = "doctor", required = true) String doctor) {
            @RequestParam(value = "doctor", required = true) String doctor,
            @ApiParam(name = "code", value = "服务项类型", required = false)
            @RequestParam(value = "code",required = false) String code) {
        try {
            Map<String, Integer> map = lifeCareOrderService.getNumGroupByStatus(doctor);
            Map<String, Integer> map = lifeCareOrderService.getNumGroupByStatus(doctor,code);
            return ObjEnvelop.getSuccess("获取成功",map);
        } catch (Exception e) {
            return failedObjEnvelopException2(e);
@ -188,4 +198,56 @@ public class DoctorLifeCareEndpoint extends EnvelopRestEndpoint {
            return failedException2(e);
        }
    }
    @PostMapping("getLifeOrg")
    @ApiOperation(value = "医生端-获取生活服务照例机构")
    public Envelop getLifeOrg(){
        try {
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("doctorId",permissionService.getUID());
            if (permissionService.noPermission(1, jsonObject)) {
                return ObjEnvelop.getError("该操作没有权限",-1);
            }
            return ObjEnvelop.getSuccess("获取成功",baseOrgService.findLifeOrg(),200);
        } catch (Exception e) {
           return failedObjEnvelopException2(e);
        }
    }
    @GetMapping("wisdomCare")
    @ApiOperation(value = "医生端-智慧照护")
    public Envelop wisdomCare(@ApiParam(value = "医生id", name = "orgCode")
                              @RequestParam(value = "orgCode", required = true) String orgCode){
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("doctorId",permissionService.getUID());
        if (permissionService.noPermission(1, jsonObject)) {
            return ObjEnvelop.getError("该操作没有权限",-1);
        }
        try {
           return ObjEnvelop.getSuccess("获取成功",lifeCareOrderService.wisdomCare(orgCode),200) ;
        } catch (Exception e) {
            return failedObjEnvelopException2(e);
        }
    }
    @GetMapping(value = "findPatientItemDict")
    @ApiOperation(value = "查找居民已预约的服务项")
    public ListEnvelop findPatientItemDict(@ApiParam(value = "patient", name = "patient")
                                           @RequestParam(value = "patient", required = false) String patient) {
        try {
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("doctorId",permissionService.getUID());
            if (permissionService.noPermission(1, jsonObject)) {
                return ListEnvelop.getError("该操作没有权限");
            }
            return ListEnvelop.getSuccess("查询成功",lifeCareOrderService.findPatientItemDict(patient));
        }catch (Exception e){
            return failedListEnvelopException2(e);
        }
    }
}

+ 2 - 2
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/lifeCare/PadLifeCareEndpoint.java

@ -89,7 +89,7 @@ public class PadLifeCareEndpoint 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) {
        try {
            JSONObject result = lifeCareOrderService.queryInfoList(patient, status, page, size);
            JSONObject result = lifeCareOrderService.queryInfoList(patient, status,null, page, size);
            if (result.getIntValue(ResponseContant.resultFlag) == ResponseContant.fail) {
                return PageEnvelop.getError(result.getString(ResponseContant.resultMsg), -1);
            }
@ -103,7 +103,7 @@ public class PadLifeCareEndpoint extends EnvelopRestEndpoint {
    @GetMapping(value = "findItemDict")
    @ApiOperation(value = "查找服务项字典")
    public ListEnvelop findItemDict(@ApiParam(value = "orgCode", name = "orgCode")
                                    @RequestParam(value = "orgCode", required = true) String orgCode) {
                                    @RequestParam(value = "orgCode", required = false) String orgCode) {
        try {
            return ListEnvelop.getSuccess("查询成功",lifeCareOrderService.findItemDict(orgCode));
        }catch (Exception e){

+ 48 - 7
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/lifeCare/PatientLifeCareEndpoint.java

@ -2,7 +2,9 @@ package com.yihu.jw.care.endpoint.lifeCare;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.care.aop.ObserverRequired;
import com.yihu.jw.care.service.common.PermissionService;
import com.yihu.jw.care.service.lifeCare.LifeCareOrderService;
import com.yihu.jw.care.service.org.BaseOrgService;
import com.yihu.jw.entity.care.lifeCare.LifeCareOrderDO;
import com.yihu.jw.restmodel.ResponseContant;
import com.yihu.jw.restmodel.web.Envelop;
@ -28,6 +30,10 @@ public class PatientLifeCareEndpoint  extends EnvelopRestEndpoint {
    @Autowired
    private LifeCareOrderService lifeCareOrderService;
    @Autowired
    private BaseOrgService baseOrgService;
    @Autowired
    private PermissionService permissionService;
    @PostMapping(value = "create")
    @ApiOperation(value = "申请生活照料")
@ -83,10 +89,11 @@ public class PatientLifeCareEndpoint  extends EnvelopRestEndpoint {
    public PageEnvelop page(
            @ApiParam(name = "patient", value = "居民code") @RequestParam(value = "patient", required = true) String patient,
            @ApiParam(name = "status", value = "工单状态,状态为全部时不传") @RequestParam(value = "status", required = false) Integer status,
            @ApiParam(name = "fedCode", value = "生活工单服务项") @RequestParam(value = "fedCode", required = false) String fedCode,
            @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) {
        try {
            JSONObject result = lifeCareOrderService.queryInfoList(patient, status, page, size);
            JSONObject result = lifeCareOrderService.queryInfoList(patient, status,fedCode, page, size);
            if (result.getIntValue(ResponseContant.resultFlag) == ResponseContant.fail) {
                return PageEnvelop.getError(result.getString(ResponseContant.resultMsg), -1);
            }
@ -100,9 +107,10 @@ public class PatientLifeCareEndpoint  extends EnvelopRestEndpoint {
    @GetMapping(value = "infoCount")
    @ApiOperation(value = "查询工单数量")
    public ObjEnvelop infoCount(
            @ApiParam(name = "patient", value = "居民code") @RequestParam(value = "patient", required = true) String patient) {
            @ApiParam(name = "patient", value = "居民code") @RequestParam(value = "patient", required = true) String patient,
            @ApiParam(name = "fedCode", value = "生活工单服务项") @RequestParam(value = "fedCode", required = false) String fedCode) {
        try {
            JSONObject allResult = lifeCareOrderService.queryInfoList(patient, null, 1, 5);
            JSONObject allResult = lifeCareOrderService.queryInfoList(patient, null,fedCode, 1, 5);
            if (allResult.getIntValue(ResponseContant.resultFlag) == ResponseContant.fail) {
                return ObjEnvelop.getError(allResult.getString(ResponseContant.resultMsg), -1);
            }
@ -110,14 +118,14 @@ public class PatientLifeCareEndpoint  extends EnvelopRestEndpoint {
            JSONObject object = new JSONObject();
            object.put("allCount",allCount);
            JSONObject qxResult = lifeCareOrderService.queryInfoList(patient, -1, 1, 5);
            JSONObject qxResult = lifeCareOrderService.queryInfoList(patient, -1, fedCode,1, 5);
            if (qxResult.getIntValue(ResponseContant.resultFlag) == ResponseContant.fail) {
                return ObjEnvelop.getError(qxResult.getString(ResponseContant.resultMsg), -1);
            }
            int qxCount = qxResult.getIntValue(ResponseContant.count);
            object.put("qxCount",qxCount);
            JSONObject wcResult = lifeCareOrderService.queryInfoList(patient, 2, 1, 5);
            JSONObject wcResult = lifeCareOrderService.queryInfoList(patient, 2, fedCode,1, 5);
            if (wcResult.getIntValue(ResponseContant.resultFlag) == ResponseContant.fail) {
                return ObjEnvelop.getError(wcResult.getString(ResponseContant.resultMsg), -1);
            }
@ -130,9 +138,9 @@ public class PatientLifeCareEndpoint  extends EnvelopRestEndpoint {
    }
    @GetMapping(value = "findItemDict")
    @ApiOperation(value = "查找服务项字典")
    @ApiOperation(value = "查找所有服务项字典")
    public ListEnvelop findItemDict(@ApiParam(value = "orgCode", name = "orgCode")
                                   @RequestParam(value = "orgCode", required = true) String orgCode) {
                                   @RequestParam(value = "orgCode", required = false) String orgCode) {
        try {
            return ListEnvelop.getSuccess("查询成功",lifeCareOrderService.findItemDict(orgCode));
        }catch (Exception e){
@ -140,6 +148,22 @@ public class PatientLifeCareEndpoint  extends EnvelopRestEndpoint {
        }
    }
    @GetMapping(value = "findPatientItemDict")
    @ApiOperation(value = "查找居民已预约的服务项")
    public ListEnvelop findPatientItemDict(@ApiParam(value = "patient", name = "patient")
                                    @RequestParam(value = "patient", required = false) String patient) {
        try {
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("patient",permissionService.getUID());
            if (permissionService.noPermission(1, jsonObject)) {
                return ListEnvelop.getError("该操作没有权限");
            }
            return ListEnvelop.getSuccess("查询成功",lifeCareOrderService.findPatientItemDict(patient));
        }catch (Exception e){
            return failedListEnvelopException2(e);
        }
    }
    @GetMapping("getByOrderId")
    @ApiOperation(value = "根据工单id获取相应的工单")
    public ObjEnvelop getByOrderId(
@ -153,4 +177,21 @@ public class PatientLifeCareEndpoint  extends EnvelopRestEndpoint {
            return failedObjEnvelopException2(e);
        }
    }
    @PostMapping("getLifeOrg")
    @ApiOperation(value = "医生端-获取生活服务照例机构")
    public Envelop getLifeOrg(){
        try {
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("patient",permissionService.getUID());
            if (permissionService.noPermission(1, jsonObject)) {
                return ObjEnvelop.getError("该操作没有权限",-1);
            }
            return ObjEnvelop.getSuccess("获取成功",baseOrgService.findLifeOrg(),200);
        } catch (Exception e) {
            return failedObjEnvelopException2(e);
        }
    }
}

+ 12 - 3
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/message/DoctorMessageEndpoint.java

@ -104,12 +104,21 @@ public class DoctorMessageEndpoint extends EnvelopRestEndpoint {
        }
    }
    @GetMapping(value = "getDeviceLostMessageList")
    @GetMapping(value = "/getDeviceLostMessageList")
    @ApiOperation("获取设备离线通知列表")
    public ObjEnvelop getDeviceLostMessageList(@ApiParam(name="doctor",value = "医生ID,当前查看列表医生",required = true)
                                          @RequestParam(value = "doctor")String doctor){
                                          @RequestParam(value = "doctor")String doctor,
                                               @ApiParam(name = "deviceCode",value = "设备类型code",required = false)
                                               @RequestParam(value = "deviceCode",required = false)String deviceCode,
                                               @ApiParam(name = "deviceName",value = "设备名字",required = false)
                                               @RequestParam(value = "deviceName",required = false)String deviceName,
                                               @ApiParam(name = "area")
                                               @RequestParam(value = "area",required = false) String area,
                                               @ApiParam(name = "level")
                                               @RequestParam(value = "level",required = false) String level
                                               ){
        try {
            return ObjEnvelop.getSuccess("查询成功",doctorMessageService.getDeviceLostMessageList(doctor));
            return ObjEnvelop.getSuccess("查询成功",doctorMessageService.getDeviceLostMessageList(doctor,deviceCode,deviceName,area,level));
        }catch (Exception e){
            return failedObjEnvelopException2(e);
        }

+ 111 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/orderLogProcess/OrderLogProcessController.java

@ -0,0 +1,111 @@
package com.yihu.jw.care.endpoint.orderLogProcess;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.care.endpoint.BaseController;
import com.yihu.jw.care.service.assistance.EmergencyAssistanceService;
import com.yihu.jw.care.service.common.PermissionService;
import com.yihu.jw.care.useragent.UserAgent;
import com.yihu.jw.entity.care.securitymonitoring.BaseEmergencyWarnLogDO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
 * @Author: wsl
 * @Date: 2022/03/23
 */
@RestController
@RequestMapping("orderLogProcess/")
@Api(tags = "流程日志保存")
public class OrderLogProcessController extends BaseController {
    @Autowired
    EmergencyAssistanceService easervice;
    @Autowired
    PermissionService permissionService;
    @Autowired
    UserAgent userAgent;
    @RequestMapping(value = "yujingboda", method = RequestMethod.POST)
    @ApiOperation(value = "110/120拨打日志保存")
    public String phoneLogSave(@ApiParam(name = "logJson")
                               @RequestParam(value = "logJson") String logJson,
                               @ApiParam(name = "type")
                               @RequestParam(value = "type") Integer type) {
        try {
             JSONObject param = new JSONObject();
            param.put("doctorId", permissionService.getUID());
            if (permissionService.noPermission(1, param)) {
                return write(-1, "该操作没有权限");
            }
            if (StringUtils.isNotBlank(logJson)) {
                BaseEmergencyWarnLogDO baseEmergencyWarnLogDO = JSON.parseObject(logJson, BaseEmergencyWarnLogDO.class);
                int i = easervice.phoneLogSave(baseEmergencyWarnLogDO, type);
                switch (i) {
                    case 1:
                        return write(200, "成功");
                    case -1:
                        return error(-1, "类型错误");
                    default:
                        return write(400, "参数错误");
                }
            }else {
                return error(400,"参数错误");
            }
        } catch (Exception e) {
            error(e);
            return errorResult(e);
        }
    }
    @RequestMapping(value = "processLog", method = RequestMethod.POST)
    @ApiOperation(value = "紧急救助工单流程")
    public String processLog(@ApiParam(name = "orderid")
                             @RequestParam(value = "orderid") String orderid,
                             @ApiParam(name = "orderType",value = "20紧急呼叫22安防工单")
                             @RequestParam(value = "orderType") String orderType) {
        try {
            JSONObject param = new JSONObject();
            param.put("doctorId", permissionService.getUID());
            if (permissionService.noPermission(1, param)) {
                return write(-1, "该操作没有权限");
            }
            JSONObject emergencyAssistanceProcess = easervice.getEmergencyAssistanceProcess(orderid, orderType);
            if (null == emergencyAssistanceProcess) {
                return error(400, "工单不存在");
            }
            return write(200, "成功", "data", emergencyAssistanceProcess);
        } catch (Exception e) {
            error(e);
            return errorResult(e);
        }
    }
    @RequestMapping(value = "initialize",method = RequestMethod.POST)
    @ApiOperation(value = "预警流程初始化")
    public String initialize(){
        try {
            easervice.initialize();
            return write(200,"成功");
        } catch (Exception e) {
            error(e);
            return errorResult(e);
        }
    }
}

+ 63 - 1
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/org/OrgEndpoint.java

@ -1,5 +1,7 @@
package com.yihu.jw.care.endpoint.org;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.care.service.common.PermissionService;
import com.yihu.jw.care.service.org.BaseOrgService;
import com.yihu.jw.restmodel.web.ListEnvelop;
import com.yihu.jw.restmodel.web.ObjEnvelop;
@ -10,6 +12,9 @@ import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
/**
 * Created by yeshijie on 2021/3/3.
 */
@ -20,9 +25,11 @@ public class OrgEndpoint extends EnvelopRestEndpoint {
    @Autowired
    private BaseOrgService orgService;
    @Autowired
    private PermissionService permissionService;
    @RequestMapping(value = "/findOrgList", method = RequestMethod.GET)
    @ApiOperation(value = "获取机构成员")
    @ApiOperation(value = "获取机构")
    public ListEnvelop findOrgList(@ApiParam(name = "type", value = "机构类型1. 等级医院2. 社区医院3.  养老机构 4.  托育机构")
                                      @RequestParam(value = "type", required = false) String type,
                                      @ApiParam(name = "name", value = "机构名称")
@ -30,6 +37,14 @@ public class OrgEndpoint extends EnvelopRestEndpoint {
                                      @ApiParam(name = "orgCode", value = "orgCode")
                                      @RequestParam(value = "orgCode", required = false) String orgCode) {
        try {
            JSONObject param = new JSONObject();
            String doctorId =  permissionService.getUID();
            param.put("doctorId",doctorId);
            if(permissionService.noPermission(0,param)){
                return ListEnvelop.getError("该操作没有权限");
            }
            return ListEnvelop.getSuccess("获取成功",orgService.findOrgList(type,name,orgCode));
        } catch (Exception e) {
            return failedListEnvelopException2(e);
@ -43,11 +58,58 @@ public class OrgEndpoint extends EnvelopRestEndpoint {
                                   @ApiParam(name = "orgCode", value = "orgCode")
                                   @RequestParam(value = "orgCode", required = false) String orgCode) {
        try {
            JSONObject param = new JSONObject();
            String doctorId =  permissionService.getUID();
            param.put("doctorId",doctorId);
            if(permissionService.noPermission(0,param)){
                return ObjEnvelop.getError("该操作没有权限");
            }
            return ObjEnvelop.getSuccess("获取成功",orgService.findOrgByCode(orgCode));
        } catch (Exception e) {
            return failedObjEnvelopException2(e);
        }
    }
    @GetMapping(value = "/findCommunity")
    @ApiOperation(value = "获取机构社区-朝晖街道养老机构用")
    public ListEnvelop findCommunity(){
        try {
            JSONObject param = new JSONObject();
            String doctorId =  permissionService.getUID();
            param.put("doctorId",doctorId);
            if(permissionService.noPermission(0,param)){
                return ListEnvelop.getError("该操作没有权限");
            }
            List<Map<String, Object>> community = orgService.findCommunity();
            return success(community);
        } catch (Exception e) {
            return failedListEnvelopException2(e);
        }
    }
    @GetMapping(value = "/findCommunityZly")
    @ApiOperation(value = "获取社区成员-朝晖街道养老机构用")
    public ListEnvelop findCommunityZly(@ApiParam(name = "teamId", value = "teamId")
                                        @RequestParam(value = "teamId", required = true) String teamId){
        try {
            JSONObject param = new JSONObject();
            String doctorId =  permissionService.getUID();
            param.put("doctorId",doctorId);
            if(permissionService.noPermission(0,param)){
                return ListEnvelop.getError("该操作没有权限");
            }
            List<Map<String, Object>> communityZly = orgService.findCommunityZly(teamId);
            return success(communityZly);
        } catch (Exception e) {
            return failedListEnvelopException2(e);
        }
    }
}

+ 35 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/security/SecurityMonitoringOrderEndpoint.java

@ -2,6 +2,7 @@ package com.yihu.jw.care.endpoint.security;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.care.aop.ObserverRequired;
import com.yihu.jw.care.service.common.PermissionService;
import com.yihu.jw.care.service.security.SecurityMonitoringOrderService;
import com.yihu.jw.entity.care.securitymonitoring.EmergencyWarnConclusionDO;
import com.yihu.jw.restmodel.ResponseContant;
@ -28,6 +29,8 @@ public class SecurityMonitoringOrderEndpoint extends EnvelopRestEndpoint {
    @Autowired
    private SecurityMonitoringOrderService securityMonitoringOrderService;
    @Autowired
    private PermissionService permissionService;
    @PostMapping(value = "createOrder")
    @ApiOperation(value = "创建安防服务工单")
@ -523,4 +526,36 @@ public class SecurityMonitoringOrderEndpoint extends EnvelopRestEndpoint {
        }
    }
    @GetMapping(value = "patient/getPatientDeviceTopic")
    @ApiOperation(value = "居民获取智慧安防专题")
    public ListEnvelop getPatientDeviceTopicP(@ApiParam(name="patient",value = "patient")
                                            @RequestParam(value = "patient") String patient){
        try {
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("patient",permissionService.getUID());
            if (permissionService.noPermission(1, jsonObject)) {
                return ListEnvelop.getError("该操作没有权限");
            }
            return ListEnvelop.getSuccess("获取成功",securityMonitoringOrderService.getPatientDeviceTopic(patient));
        }catch (Exception e){
            return failedListEnvelopException2(e);
        }
    }
    @GetMapping(value = "doctor/getPatientDeviceTopic")
    @ApiOperation(value = "医生获取居民智慧安防专题")
    public ListEnvelop getPatientDeviceTopicD(@ApiParam(name="patient",value = "patient")
                                           @RequestParam(value = "patient") String patient){
        try {
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("doctorId",permissionService.getUID());
            if (permissionService.noPermission(1, jsonObject)) {
                return ListEnvelop.getError("该操作没有权限");
            }
            return ListEnvelop.getSuccess("获取成功",securityMonitoringOrderService.getPatientDeviceTopic(patient));
        }catch (Exception e){
            return failedListEnvelopException2(e);
        }
    }
}

+ 38 - 4
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/statistics/DetectionPlatformEndpoint.java

@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.care.endpoint.BaseController;
import com.yihu.jw.care.service.device.DeviceManageService;
import com.yihu.jw.care.service.device.NetworkCardService;
import com.yihu.jw.care.service.device.PatientDeviceService;
import com.yihu.jw.care.service.security.SecurityMonitoringOrderService;
@ -43,6 +44,8 @@ public class DetectionPlatformEndpoint extends EnvelopRestEndpoint {
    private SecurityMonitoringOrderService securityMonitoringOrderService;
    @Autowired
    private NetworkCardService networkCardService;
    @Autowired
    private DeviceManageService deviceManageService;
    @ApiOperation("环境信息")
@ -71,10 +74,10 @@ public class DetectionPlatformEndpoint extends EnvelopRestEndpoint {
    }
    @GetMapping(value = "getDeviceCompany")
    @ApiOperation(value = "设备入驻")
    @ApiOperation(value = "设备物联率、失联率")
    public ObjEnvelop getDeviceCompany() {
        try {
            JSONObject o = platformService.getDeviceComapny();
            JSONObject o = platformService.getDeviceComapny(null,null);
            return success(o);
        } catch (Exception e) {
            return failedObjEnvelopException(e);
@ -277,10 +280,10 @@ public class DetectionPlatformEndpoint extends EnvelopRestEndpoint {
    }
    @GetMapping(value = "getServiceSituation")
    @ApiOperation(value = "物联网检测大屏,服务情况")
    @ApiOperation(value = "物联网检测大屏,设备库存、使用、总备案、照护类型设备数量")
    public ObjEnvelop getServiceSituation() {
        try {
            return success("查询成功", 200, platformService.getServiceSituation());
            return success("查询成功", 200, platformService.getServiceSituation(null,null));
        } catch (Exception e) {
            return failedObjEnvelopException(e);
        }
@ -382,4 +385,35 @@ public class DetectionPlatformEndpoint extends EnvelopRestEndpoint {
            return failedListEnvelopException2(e);
        }
    }
    @ApiOperation("获取各专题绑定人数")
    @ResponseBody
    @RequestMapping(value = "getTopicPeopleNums", method = RequestMethod.GET)
    public ObjEnvelop getTopicPeopleNums() {
        try {
            return ObjEnvelop.getSuccess("查询成功",platformService.getTopicPeopleNums(null,null));
        } catch (Exception e) {
            return failedObjEnvelopException2(e);
        }
    }
    @RequestMapping(value = "/getPatientMonitorData",method = RequestMethod.GET)
    @ApiOperation(value="获取居民设备监护数据")
    public PageEnvelop getPatientMonitorData(@ApiParam(name = "patient",value = "patient")
                                             @RequestParam(value = "patient")String patient,
                                             @ApiParam(name = "startTime",value = "开始时间")
                                             @RequestParam(value = "startTime")String startTime,
                                             @ApiParam(name = "endTime",value = "endTime")
                                             @RequestParam(value = "endTime")String endTime,
                                             @ApiParam(name = "page",value = "page")
                                             @RequestParam(value = "page")Integer page,
                                             @ApiParam(name = "size",value = "size")
                                             @RequestParam(value = "size")Integer size){
        try {
            return deviceManageService.getPatientMonitorData(patient,startTime,endTime,page,size);
        } catch (Exception e) {
            e.printStackTrace();
            return PageEnvelop.getError("系统繁忙");
        }
    }
}

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

@ -1,6 +1,7 @@
package com.yihu.jw.care.endpoint.statistics;
import com.alibaba.fastjson.JSON;
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;
@ -114,7 +115,7 @@ public class OpenStatisticsEndpoint extends EnvelopRestEndpoint {
    @GetMapping(value = "curveTotal")
    @ApiOperation(value = "曲线图")
    public ObjEnvelop curveTotal(@RequestParam(required = true) String day,
                                 @ApiParam(name = "type", value = "39-老人-生活照料-服务工单数 44-老人-生活照料-代预约 3-幼儿活动报名 41-紧急呼叫  43-老人安放监护 2-公艺课程播放  1-活动浏览次数 28-新生儿-在线咨询总数 32-新生儿-在线咨询总数  35-新生儿-上门辅导-服务工单数")
                                 @ApiParam(name = "type", value = "39-老人-生活照料-服务工单数 44-老人-生活照料-代预约 3-幼儿活动报名 41-紧急呼叫  43-老人安放监护 2-公艺课程播放  1-活动浏览次数 28-新生儿-在线咨询总数 32-老人在线咨询未回复数  35-新生儿-上门辅导-服务工单数")
                                 @RequestParam(required = true) String type,
                                 @RequestParam(required = true) String area,
                                 @RequestParam(required = true) int level,
@ -199,9 +200,12 @@ public class OpenStatisticsEndpoint extends EnvelopRestEndpoint {
    @GetMapping(value = "platformPeople")
    @ApiOperation(value = "平台人员实时统计")
    public ObjEnvelop platformPeople() {
    public ObjEnvelop platformPeople(@ApiParam(name="area",value = "查询区域code")
                                     @RequestParam(required = false) String area,
                                     @ApiParam(name="level",value = "区域等级 2市3区4机构5团队6医生")
                                     @RequestParam(required = false) Integer level) {
        try {
            JSONObject result = statisticsService.platformPeople();
            JSONObject result = statisticsService.platformPeople(area,level);
            return success(result);
        } catch (Exception e) {
            return failedObjEnvelopException2(e);
@ -210,18 +214,22 @@ public class OpenStatisticsEndpoint extends EnvelopRestEndpoint {
    @GetMapping(value = "findUserByType")
    @ApiOperation(value = "人员实时动态搜索")
    public Envelop findUserByType(@ApiParam(name = "type", value = "类型:1幼儿,2老人,3社工,4医生,5老人家属。不传返回四个类型的数据")
    public Envelop findUserByType(@ApiParam(name = "type", value = "类型:1幼儿,2签约老人,3社工,4医生,5老人家属 6助老员,7社区老人(未签约).不传返回四个类型的数据")
                                  @RequestParam(value = "type", required = false) String type,
                                  @ApiParam(name = "name", value = "姓名")
                                  @RequestParam(value = "name", required = false) String name,
                                  @ApiParam(name = "residentialArea", value = "居住小区")
                                  @RequestParam(value = "residentialArea", required = false) String residentialArea,
                                  @ApiParam(name="area",value = "查询区域code")
                                  @RequestParam(required = false) String area,
                                  @ApiParam(name="level",value = "区域等级 2市3区4机构5团队6医生")
                                  @RequestParam(required = false) Integer level,
                                  @ApiParam(name = "page", value = "第几页")
                                  @RequestParam(value = "page", required = false) Integer page,
                                  @ApiParam(name = "size", value = "页面大小")
                                  @RequestParam(value = "size", required = false) Integer size) {
        try {
            return success("修改成功", patientService.findUserByType(type, name, residentialArea, page, size));
            return success("修改成功", patientService.findUserByType(type, name, residentialArea,area,level, page, size));
        } catch (Exception e) {
            return failedException2(e);
        }
@ -351,5 +359,104 @@ public class OpenStatisticsEndpoint extends EnvelopRestEndpoint {
        }
    }
    @GetMapping(value = "getOlderOverview")
    @ApiOperation("获取老人概况")
    public ObjEnvelop getOlderOverview(){
        try {
            return ObjEnvelop.getSuccess("查询成功",statisticsService.getOlderOverview("330100","2"));
        }catch (Exception e){
            return failedObjEnvelopException2(e);
        }
    }
    @GetMapping(value = "getServerSituation")
    @ApiOperation("获取老人服务情况(助老服务、紧急救助、医生服务、监测设备)")
    public ObjEnvelop getServerSituation(@RequestParam(required = true,defaultValue = "") String area,
                                       @RequestParam(required = true,defaultValue = "2") int level){
        try {
            return ObjEnvelop.getSuccess("查询成功",statisticsService.getServerSituation(area,level));
        }catch (Exception e){
            return failedObjEnvelopException2(e);
        }
    }
    @GetMapping(value = "getServerSituationItem")
    @ApiOperation("获取老人服务项目数量情况(助老服务、紧急救助、医生服务)")
    public ObjEnvelop getServerSituationItem(@RequestParam(required = true) String endDate,
                                       @RequestParam(required = true) String area,
                                       @RequestParam(required = true) int level){
        try {
            return ObjEnvelop.getSuccess("查询成功",statisticsService.getServerSituationItem(endDate,area,level));
        }catch (Exception e){
            return failedObjEnvelopException2(e);
        }
    }
    @GetMapping(value = "getOlderTeamList")
    @ApiOperation("获取养老服务社区团队列表")
    public ObjEnvelop getOlderTeamList(){
        try {
            return ObjEnvelop.getSuccess("查询成功",statisticsService.getOlderTeamList());
        }catch (Exception e){
            return failedObjEnvelopException2(e);
        }
    }
    @GetMapping(value = "getOlderTeamListWithPage")
    @ApiOperation("获取养老服务社区团队列表带分页")
    public PageEnvelop getOlderTeamListWithPage(@ApiParam(name="page",value = "页码",required = true)
                                                @RequestParam(value = "page",required = true,defaultValue = "1") Integer page,
                                                @ApiParam(name="size",value = "分页大小",required = true)
                                                @RequestParam(value = "size",required = true,defaultValue = "5") Integer size){
        try {
            return statisticsService.getOlderTeamListWithPage(null,null,page,size);
        }catch (Exception e){
            return failedPageEnvelopException2(e);
        }
    }
    @ApiOperation("获取助老机构生活照料服务响应率情况")
    @ResponseBody
    @RequestMapping(value = "getOrgLifeCareStatistic", method = RequestMethod.GET)
    public ObjEnvelop getOrgLifeCareStatis() {
        try {
            return ObjEnvelop.getSuccess("查询成功",statisticsService.getOrgLifeCareStatistic());
        } catch (Exception e) {
            return failedObjEnvelopException2(e);
        }
    }
    @GetMapping(value = "getOrgEmeWarnStatistic")
    @ApiOperation(value = "获取养老机构紧急预警响应率")
    public ObjEnvelop getOrgEmeWarnStatistic(@RequestParam(required = true) String endDate,
                                            @RequestParam(required = true) String area,
                                            @RequestParam(required = true) int level) {
        try {
            JSONObject result = statisticsService.statisticsEmeWarnList(endDate,area,level);
            return success(result);
        } catch (Exception e) {
            return failedObjEnvelopException2(e);
        }
    }
    @GetMapping(value = "addLineIndexs")
    @ApiOperation(value = "数据折线趋势,多个指标相加")
    public ListEnvelop addLineIndexs(
            @RequestParam(required = true) String startDate,
            @RequestParam(required = true) String endDate,
            @RequestParam(required = true) String area,
            @RequestParam(required = true) int level,
            @RequestParam(required = true) String index,
            @RequestParam(required = false) String timeLevel,
            @RequestParam(required = false) String interval,
            @RequestParam(required = false) String lowLevel) {
        try {
            JSONArray result = statisticsService.addLineIndexs(startDate,endDate, area, level, index, timeLevel,interval,lowLevel);
            return success(result);
        } catch (Exception e) {
            return failedListEnvelopException2(e);
        }
    }
}

+ 9 - 24
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/statistics/StatisticsEndpoint.java

@ -15,8 +15,6 @@ import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.Locale;
/**
 * Created by yeshijie on 2021/4/7.
 */
@ -213,29 +211,14 @@ public class StatisticsEndpoint extends EnvelopRestEndpoint {
    @GetMapping("olderBindingDeviceStatus")
    @ApiOperation("管理端首页老人接入情况")
    public ObjEnvelop olderBindingDeviceStatus(@RequestParam(required = false) String area,
                                               @RequestParam(required = false) Integer level){
                                               @RequestParam(required = false) String level){
        try {
            return ObjEnvelop.getSuccess("查询成功",statisticsService.olderBindingDeviceStatus(area));
            return ObjEnvelop.getSuccess("查询成功",statisticsService.olderBindingDeviceStatus(area,level));
        }catch (Exception e){
            return failedObjEnvelopException2(e);
        }
    }
    @GetMapping(value = "statisticsSecurityOlder")
    @ApiOperation(value = "管理端首页安防监护统计分析")
    public ObjEnvelop statisticsSecurityOlder(
            @RequestParam(required = true) String endDate,
            @RequestParam(required = true) String area,
            @RequestParam(required = true) int level,
            @ApiParam(name="type",value="类型:1本周,2本月",defaultValue = "")@RequestParam(required = false) String type) {
        try {
            JSONObject result = statisticsService.statisticsSecurityOlder(endDate,area,level, type);
            return success(result);
        } catch (Exception e) {
            return failedObjEnvelopException2(e);
        }
    }
    @GetMapping(value = "deviceGrantAndService")
    @ApiOperation("设备分析--投放、照护类型")
    public ObjEnvelop deviceGrantAndService(@RequestParam(required = false) String area,
@ -250,12 +233,14 @@ public class StatisticsEndpoint extends EnvelopRestEndpoint {
    @GetMapping(value = "getAllDeviceLostMessage")
    @ApiOperation("设备分析--异常消息通知")
    public PageEnvelop getAllDeviceLostMessage(@RequestParam(required = false) String area,
                                              @RequestParam(required = false) Integer level,
                                              @RequestParam(required = false) Integer page,
                                              @RequestParam(required = false) Integer size){
                                               @RequestParam(required = false) Integer level,
                                               @RequestParam(required = false) String deviceCode,
                                               @RequestParam(required = false) Integer page,
                                               @RequestParam(required = false) Integer size
    ) {
        try {
           return statisticsService.getAllDeviceLostMessage(area,page,size);
        }catch (Exception e){
            return statisticsService.getAllDeviceLostMessage(area, page, size);
        } catch (Exception e) {
            return failedPageEnvelopException2(e);
        }
    }

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

@ -1,7 +1,6 @@
package com.yihu.jw.care.endpoint.third.platForm;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.jw.care.endpoint.BaseController;
import com.yihu.jw.care.service.assistance.EmergencyAssistanceService;
import com.yihu.jw.care.service.common.DictService;
@ -24,13 +23,9 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.apache.commons.lang.StringUtils;
import org.json.JSONArray;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.Map;
/**
 * Created by Bing on 2021/6/16.
 * 管理端pc端 居民详情大屏
@ -81,6 +76,17 @@ public class PatientInfoPlatFormEndpoint extends EnvelopRestEndpoint {
        }
    }
    @GetMapping(value = "findUnSignPatientLocations")
    @ApiOperation("查找未签约老人坐标")
    public PageEnvelop findUnSignPatientLocations(@ApiParam(name = "page")@RequestParam(value = "page")Integer page,
                                                  @ApiParam(name = "size")@RequestParam(value = "size")Integer size){
        try {
            return baseServiceNewsService.findUnSignPatientLocations(page,size);
        }catch (Exception e){
            return failedPageEnvelopException2(e);
        }
    }
    @GetMapping(value = "getLatLon")
    @ApiOperation("查询所有社工坐标")
    public ListEnvelop getLatLon(){
@ -141,6 +147,41 @@ public class PatientInfoPlatFormEndpoint extends EnvelopRestEndpoint {
        }
    }
    @GetMapping(value = "getPatientDeviceInfoWithDetail")
    @ApiOperation("获取居民设备列表(带设备电量、预警情况、是否在线等信息)")
    public ObjEnvelop getPatientDeviceInfoWithDetail(@ApiParam(name="patient",value = "居民id",required = false)
                                                     @RequestParam(value = "patient",required = false)String patient,
                                                     @ApiParam(name="deviceSn",value = "设备SN",required = false)
                                                     @RequestParam(value = "deviceSn",required = false)String deviceSn){
        try {
            return ObjEnvelop.getSuccess("查询成功",patientInfoPlatFormService.getPatientDeviceInfoWithDetail(patient,deviceSn));
        }catch (Exception e){
            return failedObjEnvelopException2(e);
        }
    }
    @GetMapping(value = "getEmeAndOlderServiceInfo")
    @ApiOperation("大屏获取老人紧急预警、助老服务情况")
    public ObjEnvelop getEmeAndOlderServiceInfo(@ApiParam(name="patient",value = "居民id",required = true)
                                                @RequestParam(value = "patient")String patient){
        try {
            return ObjEnvelop.getSuccess("查询成功",patientInfoPlatFormService.getEmeAndOlderServiceInfo(patient));
        }catch (Exception e){
            return failedObjEnvelopException2(e);
        }
    }
    @GetMapping(value = "getPatientHealthStatistic")
    @ApiOperation("大屏获取老人健康管理")
    public ObjEnvelop getPatientHealthStatistic(@ApiParam(name="patient",value = "居民id",required = true)
                                                @RequestParam(value = "patient")String patient){
        try {
            return ObjEnvelop.getSuccess("查询成功",patientInfoPlatFormService.getPatientHealthStatistic(patient));
        }catch (Exception e){
            return failedObjEnvelopException2(e);
        }
    }
    @GetMapping(value = "getPatientEvent")
    @ApiOperation("获取就诊事件")
    public ObjEnvelop getPatientEvent(@ApiParam(name="patient",value = "居民id",required = true)
@ -231,6 +272,17 @@ public class PatientInfoPlatFormEndpoint extends EnvelopRestEndpoint {
        }
    }
    @GetMapping(value = "getPatientTopicWarnInfo")
    @ApiOperation("获取居民各专题预警情况")
    public String getPatientTopicWarnInfo(@ApiParam(name="patient",value="患者代码",defaultValue = "808080eb7917a3be017918a979380055")
                                     @RequestParam(value="patient",required = true) String patient){
        try {
            return baseController.write (200,"查询成功","data",securityMonitoringOrderService.getPatientTopicWarnInfo(patient));
        }catch (Exception e){
            return baseController.errorResult(e);
        }
    }
    @GetMapping("getDoorCoachByOrderId")
    @ApiOperation(value = "根据工单id获取相应的工单,如果为空,则获取该患者当前最新一条的工单")
    public ObjEnvelop getByOrderId(
@ -256,7 +308,7 @@ public class PatientInfoPlatFormEndpoint extends EnvelopRestEndpoint {
    }
    @GetMapping("getLifeCareByOrderId")
    @ApiOperation(value = "根据工单id获取相应的工单")
    @ApiOperation(value = "根据工单id获取相应的生活照料工单")
    public ObjEnvelop getByOrderId(
            @ApiParam(value = "工单id", name = "orderId")
            @RequestParam(value = "orderId", required = true) String orderId) {
@ -357,7 +409,7 @@ public class PatientInfoPlatFormEndpoint extends EnvelopRestEndpoint {
    }
    @GetMapping(value = "getHealthMonitoringListNew")
    @ApiOperation(value = "健康监测列表 v0.7.0")//        血糖+血压
    @ApiOperation(value = "健康监测列表 v0.7.0")// 血糖+血压
    public PageEnvelop getHealthMonitoringListNew(@ApiParam(name="page",value = "page")
                                                  @RequestParam(value = "page") Integer page,
                                                  @ApiParam(name="pageSize",value = "pageSize")
@ -388,4 +440,23 @@ public class PatientInfoPlatFormEndpoint extends EnvelopRestEndpoint {
        return dictService.findDictsByNameCode(modelName,name,code,value,page,pageSize);
    }
    @RequestMapping(value = "processLog", method = RequestMethod.GET)
    @ApiOperation(value = "紧急救助工单流程")
    public ObjEnvelop processLog(@ApiParam(name = "orderid")
                                @RequestParam(value = "orderid") String orderid,
                                 @ApiParam(name = "orderType",value = "20紧急呼叫22安防工单")
                                 @RequestParam(value = "orderType") String orderType) {
        try {
            JSONObject emergencyAssistanceProcess = assistanceService.getEmergencyAssistanceProcess(orderid, orderType);
            if (null == emergencyAssistanceProcess) {
                return ObjEnvelop.getError("工单不存在",400 );
            }
            return ObjEnvelop.getSuccess("成功",emergencyAssistanceProcess);
        } catch (Exception e) {
           return failedObjEnvelopException2(e);
        }
    }
}

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

@ -0,0 +1,64 @@
package com.yihu.jw.care.endpoint.video;
import com.yihu.jw.care.dao.video.BaseVideoDao;
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.jdbc.core.JdbcTemplate;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * Created by yeshijie on 2022/3/21.
 */
@RestController
@RequestMapping(value = "pateintVideo")
@Api(value = "居民视频", description = "居民视频", tags = {"居民视频"})
public class PatientVideoEndpoint extends EnvelopRestEndpoint {
    @Autowired
    private BaseVideoDao baseVideoDao;
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @RequestMapping(value = "findVideoNum", method = RequestMethod.GET)
    @ApiOperation(value = "按类型获取视频列表")
    public ObjEnvelop findVideoNum() {
        try {
            String sql = "SELECT type,COUNT(*) num from base_video GROUP BY type";
            List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
            Map<String, Integer> map = new HashMap<>();
            //类型 1疾病防治 2健康生活 3慢病防治
            map.put("1",0);
            map.put("2",0);
            map.put("3",0);
            for (Map<String, Object> one:list){
                map.put(String.valueOf(one.get("type")), Integer.valueOf(String.valueOf(one.get("num"))));
            }
            return ObjEnvelop.getSuccess("获取成功",map);
        } catch (Exception e) {
            return failedObjEnvelopException2(e);
        }
    }
    @RequestMapping(value = "findVideo", method = RequestMethod.GET)
    @ApiOperation(value = "按类型获取视频列表")
    public ListEnvelop findVideo(@ApiParam(name = "type", value = "类型 1疾病防治 2健康生活 3慢病防治")
                                 @RequestParam(value = "type", required = true) String type) {
        try {
            return ListEnvelop.getSuccess("获取成功",baseVideoDao.findByType(type));
        } catch (Exception e) {
            return failedListEnvelopException2(e);
        }
    }
}

+ 229 - 1
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/endpoint/wlyygc/WlyygcDataEndpoint.java

@ -2,6 +2,7 @@ package com.yihu.jw.care.endpoint.wlyygc;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.care.service.statistics.WlyygcStatisticsService;
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;
@ -14,6 +15,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
/**
@ -97,6 +100,64 @@ public class WlyygcDataEndpoint extends EnvelopRestEndpoint {
        }
    }
    @GetMapping(value = "teamList")
    @ApiOperation(value = "获取社区列表")
    public PageEnvelop teamList(@ApiParam(name = "page", value = "分页大小", required = true)
                                @RequestParam(value = "page") Integer page,
                                @ApiParam(name = "size", value = "页码", required = true)
                                @RequestParam(value = "size") Integer size) {
        try {
            return wlyygcStatisticsService.teamList(page,size);
        } catch (Exception e) {
            return failedPageEnvelopException2(e);
        }
    }
    @GetMapping(value = "orgList")
    @ApiOperation(value = "机构列表")
    public PageEnvelop orgList(@ApiParam(name = "orgType", value = "机构类型 2. 社区医院3.  养老机构 4.  托育机构  6日照中心")
                               @RequestParam(value = "orgType", required = true) String orgType,
                               @ApiParam(name = "page", value = "分页大小", required = true)
                               @RequestParam(value = "page") Integer page,
                               @ApiParam(name = "size", value = "页码", required = true)
                               @RequestParam(value = "size") Integer size) {
        try {
            return wlyygcStatisticsService.orgList(orgType,page,size);
        } catch (Exception e) {
            return failedPageEnvelopException2(e);
        }
    }
    @GetMapping(value = "doctorList")
    @ApiOperation(value = "助老员/社工列表")
    public PageEnvelop doctorList(@ApiParam(name = "level", value = "类型 2社工,4助老员", required = true)
                                  @RequestParam(value = "level", required = true) Integer level,
                                  @ApiParam(name = "teamCode", value = "社区id", required = false)
                                  @RequestParam(value = "teamCode", required = false) String teamCode,
                                  @ApiParam(name = "page", value = "分页大小", required = true)
                                  @RequestParam(value = "page") Integer page,
                                  @ApiParam(name = "size", value = "页码", required = true)
                                  @RequestParam(value = "size") Integer size) {
        try {
            return wlyygcStatisticsService.doctorList(level,teamCode,page,size);
        } catch (Exception e) {
            return failedPageEnvelopException2(e);
        }
    }
    @GetMapping(value = "teacherList")
    @ApiOperation(value = "获取教师列表")
    public PageEnvelop teacherList(@ApiParam(name = "page", value = "分页大小", required = true)
                                   @RequestParam(value = "page") Integer page,
                                   @ApiParam(name = "size", value = "页码", required = true)
                                   @RequestParam(value = "size") Integer size) {
        try {
            return wlyygcStatisticsService.teacherList(page, size);
        } catch (Exception e) {
            return failedPageEnvelopException2(e);
        }
    }
    @GetMapping(value = "securityEmergencyList")
    @ApiOperation(value = "获取安防/监护")
    public PageEnvelop securityEmergencyList(@ApiParam(name = "code", value = "社区编码")
@ -118,15 +179,182 @@ public class WlyygcDataEndpoint extends EnvelopRestEndpoint {
    @ApiOperation(value = "获取设备列表")
    public PageEnvelop deviceList(@ApiParam(name = "code", value = "社区编码")
                                  @RequestParam(value = "code", required = true) String code,
                                  @ApiParam(name = "deviceType", value = "设备种类 0健康设备 1安防设备", required = false)
                                  @RequestParam(value = "deviceType", required = false) Integer deviceType,
                                  @ApiParam(name = "page", value = "分页大小", required = true)
                                  @RequestParam(value = "page") Integer page,
                                  @ApiParam(name = "size", value = "页码", required = true)
                                  @RequestParam(value = "size") Integer size) {
        try {
            return wlyygcStatisticsService.deviceList(code, page, size);
            return wlyygcStatisticsService.deviceList(code,deviceType, page, size);
        } catch (Exception e) {
            return failedPageEnvelopException2(e);
        }
    }
    /********************************************全社区*******************************************************/
    @GetMapping(value = "emeAndsecinfos")
    @ApiOperation(value = "获取紧急安防工单信息")
    public PageEnvelop emeAndsecinfo(@ApiParam(name = "page", value = "分页大小", required = true)
                                     @RequestParam(value = "page") Integer page,
                                     @ApiParam(name = "size", value = "页码", required = true)
                                     @RequestParam(value = "size") Integer size){
        try {
            return wlyygcStatisticsService.emeAndsecinfo(page, size);
        } catch (Exception e) {
            return failedPageEnvelopException2(e);
        }
    }
    @GetMapping(value = "deviceLists")
    @ApiOperation(value = "设备信息")
    public PageEnvelop deviceLists(@ApiParam(name = "page", value = "分页大小", required = true)
                                   @RequestParam(value = "page") Integer page,
                                   @ApiParam(name = "size", value = "页码", required = true)
                                   @RequestParam(value = "size") Integer size) {
        try {
            return wlyygcStatisticsService.deviceLists(page, size);
        } catch (Exception e) {
            return failedPageEnvelopException2(e);
        }
    }
    @GetMapping(value = "doorServiceOrder")
    @ApiOperation(value = "获取上门辅导")
    public PageEnvelop doorServiceOrder(@ApiParam(name = "page", value = "分页大小", required = true)
                                        @RequestParam(value = "page") Integer page,
                                        @ApiParam(name = "size", value = "页码", required = true)
                                        @RequestParam(value = "size") Integer size){
        try {
            return wlyygcStatisticsService.doorServiceOrder(page, size);
        } catch (Exception e) {
            return failedPageEnvelopException2(e);
        }
    }
    @GetMapping(value = "infantInfo")
    @ApiOperation(value = "幼儿信息")
    public PageEnvelop infantInfo(@ApiParam(name = "page", value = "分页大小", required = true)
                                   @RequestParam(value = "page") Integer page,
                                   @ApiParam(name = "size", value = "页码", required = true)
                                   @RequestParam(value = "size") Integer size){
        try {
            return wlyygcStatisticsService.infantInfo(page,size);
        } catch (Exception e) {
            return failedPageEnvelopException2(e);
        }
    }
    @GetMapping(value = "lifeCareList")
    @ApiOperation(value = "生活照料")
    public PageEnvelop lifeCareList(@ApiParam(name = "page", value = "分页大小", required = true)
                                    @RequestParam(value = "page") Integer page,
                                    @ApiParam(name = "size", value = "页码", required = true)
                                    @RequestParam(value = "size") Integer size) {
        try {
           return wlyygcStatisticsService.lifeCareList(page,size);
        } catch (Exception e) {
            return failedPageEnvelopException2(e);
        }
    }
    @GetMapping(value = "deviceCollectInfo")
    @ApiOperation(value = "设备采集信息")
    public ListEnvelop deviceCollectInfo(@ApiParam(name = "deviceSN",value = "设备SN",required = true)
                                         @RequestParam(value = "deviceSN")String deviceSn,
                                         @ApiParam(name = "code",value = "设备code",required = true)
                                         @RequestParam(value = "code")String code,
                                         @ApiParam(name = "startDate",value = "开始时间",required = false)
                                         @RequestParam(value = "startDate",required = false)String startDate,
                                         @ApiParam(name = "endDate",value = "结束时间",required = false)
                                         @RequestParam(value = "endDate",required = false)String endDate){
        try {
            return success(wlyygcStatisticsService.deviceCollectInfo(deviceSn,code,startDate,endDate));
        } catch (Exception e) {
            return failedListEnvelopException2(e);
        }
    }
    @GetMapping(value = "signOldInfo")
    @ApiOperation(value = "老人签约信息 签约团队")
    public PageEnvelop signOldInfo(@ApiParam(name = "patient",value = "居民code",required = true)
                                   @RequestParam(value = "patient")String patient,
                                   @ApiParam(name = "page", value = "分页大小", required = true)
                                   @RequestParam(value = "page") Integer page,
                                   @ApiParam(name = "size", value = "页码", required = true)
                                   @RequestParam(value = "size") Integer size){
        try {
            return wlyygcStatisticsService.signOldInfo(patient,page,size);
        } catch (Exception e) {
            return failedPageEnvelopException2(e);
        }
    }
    @GetMapping(value = "oldInfo")
    @ApiOperation(value = "老人基本信息")
    public PageEnvelop oldInfo(@ApiParam(name = "page", value = "分页大小", required = true)
                               @RequestParam(value = "page") Integer page,
                               @ApiParam(name = "size", value = "页码", required = true)
                               @RequestParam(value = "size") Integer size){
        try {
            return wlyygcStatisticsService.oldInfo(page,size);
        } catch (Exception e) {
            return failedPageEnvelopException2(e);
        }
    }
    @GetMapping(value = "infantTotal")
    @ApiOperation(value = "幼儿信息计数统计")
    public ObjEnvelop infantTotal(@ApiParam(name = "date",value = "到达时间",required = true)
                                  @RequestParam(value = "date") String date){
        try {
            JSONObject jsonObject = wlyygcStatisticsService.infantTotal(date);
            return success(jsonObject);
        } catch (Exception e) {
            return failedObjEnvelopException2(e);
        }
    }
    @GetMapping(value = "oldTotal")
    @ApiOperation(value = "老人信息计数统计")
    public ObjEnvelop oldTotal(@ApiParam(name = "date",value = "到达时间",required = false)
                                   @RequestParam(value = "date",required = false) String date){
        try {
            JSONObject jsonObject = wlyygcStatisticsService.oldTotal(date);
            return success(jsonObject);
        } catch (Exception e) {
            return failedObjEnvelopException2(e);
        }
    }
    @GetMapping(value = "communityTotal")
    @ApiOperation(value = "社区信息计数统计")
    public  ListEnvelop getOlderTeamListWithPage(@ApiParam(name = "page", value = "分页大小", required = true)
                                                @RequestParam(value = "page") Integer page,
                                                @ApiParam(name = "size", value = "页码", required = true)
                                                @RequestParam(value = "size") Integer size) {
        try {
            List<Map<String, Object>> olderTeamListWithPage = wlyygcStatisticsService.getOlderTeamListWithPage(page, size);
            return success(olderTeamListWithPage);
        } catch (Exception e) {
            return failedListEnvelopException2(e);
        }
    }
}

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

@ -20,10 +20,10 @@ import com.yihu.jw.care.service.contacts.ContactsService;
import com.yihu.jw.care.service.device.PatientDeviceService;
import com.yihu.jw.care.service.doctor.DoctorServicePermissionsService;
import com.yihu.jw.care.service.family.PatientFamilyMemberService;
import com.yihu.jw.care.util.ConstantUtil;
import com.yihu.jw.care.util.CountDistance;
import com.yihu.jw.care.util.HttpClientUtilCare;
import com.yihu.jw.care.util.MessageUtil;
import com.yihu.jw.care.service.message.BaseServiceNewsService;
import com.yihu.jw.care.service.role.RoleService;
import com.yihu.jw.care.service.sign.ServicePackageService;
import com.yihu.jw.care.util.*;
import com.yihu.jw.doctor.dao.BaseDoctorDao;
import com.yihu.jw.doctor.dao.BaseDoctorHospitalDao;
import com.yihu.jw.entity.base.doctor.BaseDoctorDO;
@ -53,7 +53,6 @@ import com.yihu.jw.restmodel.web.PageEnvelop;
import com.yihu.jw.util.common.IdCardUtil;
import com.yihu.jw.util.common.LatitudeUtils;
import com.yihu.jw.util.date.DateUtil;
import com.yihu.mysql.query.BaseJpaService;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.NameValuePair;
@ -134,6 +133,14 @@ public class EmergencyAssistanceService extends BaseJpaService<EmergencyAssistan
    private DeviceDetailDao deviceDetailDao;
    @Autowired
    private PermissionService permissionService;
    @Autowired
    private ServicePackageService servicePackageService;
    @Autowired
    private BaseServiceNewsService baseServiceNewsService;
    @Autowired
    private RoleService roleService;
    @Autowired
    private DeviceDataPushLogUtil deviceDataPushLogUtil;
    /**
     * 获取百度天气
@ -160,56 +167,57 @@ public class EmergencyAssistanceService extends BaseJpaService<EmergencyAssistan
     * @return
     */
    public JSONObject newOrder(String patient,String jsonData,String proxyPatient,Integer orderSource,String agent) throws Exception{
        JSONObject result = new JSONObject();
        EmergencyAssistanceDO assistanceDO = JSON.parseObject(jsonData,EmergencyAssistanceDO.class);
        BasePatientDO patientDO = patientDao.findById(patient);
        if (patientDO==null){
            String failMsg = "当前居民未存在,请先进行建档";
            result.put(ResponseContant.resultFlag, ResponseContant.fail);
            result.put(ResponseContant.resultMsg,failMsg);
            return result;
        }
        if (emergencyAssistanceDao.findByPatientAndStatus(patient,EmergencyAssistanceDO.Status.apply.getType()).size()>0){
            String failMsg = "当前居民存在发起中工单,请完成后再申请";
            result.put(ResponseContant.resultFlag, ResponseContant.fail);
            result.put(ResponseContant.resultMsg,failMsg);
            return result;
        }
        assistanceDO.setOrderSource(orderSource);
        assistanceDO.setStatus(1);
        assistanceDO.setPatient(patient);
        assistanceDO.setPatientIdcard(patientDO.getIdcard());
        assistanceDO.setPatientName(patientDO.getName());
        assistanceDO.setPatientPhone(patientDO.getMobile());
        if (proxyPatient==null){//设备发起时该字段为空
            assistanceDO.setProxyPatient(patient);
            assistanceDO.setProxyPatientName(patientDO.getName());
            assistanceDO.setProxyPatientPhone(patientDO.getMobile());
            assistanceDO.setType(1);
        }
        else{
            if(StringUtils.isNotBlank(agent)){
                BasePatientDO agentPatient = patientDao.findById(agent);
                if (null!=agentPatient){
                    assistanceDO.setProxyPatient(agentPatient.getId());
                    assistanceDO.setProxyPatientName(agentPatient.getName());
                    assistanceDO.setProxyPatientPhone(agentPatient.getMobile());
                }
                assistanceDO.setType(4);
        synchronized (patient.intern()){
            JSONObject result = new JSONObject();
            EmergencyAssistanceDO assistanceDO = JSON.parseObject(jsonData,EmergencyAssistanceDO.class);
            BasePatientDO patientDO = patientDao.findById(patient);
            if (patientDO==null){
                String failMsg = "当前居民未存在,请先进行建档";
                result.put(ResponseContant.resultFlag, ResponseContant.fail);
                result.put(ResponseContant.resultMsg,failMsg);
                return result;
            }
            if (emergencyAssistanceDao.findByPatientAndStatus(patient,EmergencyAssistanceDO.Status.apply.getType()).size()>0){
                String failMsg = "当前居民存在发起中工单,请完成后再申请";
                result.put(ResponseContant.resultFlag, ResponseContant.fail);
                result.put(ResponseContant.resultMsg,failMsg);
                return result;
            }
            else if(patient.equals(proxyPatient)) {//本人发起
            assistanceDO.setOrderSource(orderSource);
            assistanceDO.setStatus(1);
            assistanceDO.setPatient(patient);
            assistanceDO.setPatientIdcard(patientDO.getIdcard());
            assistanceDO.setPatientName(patientDO.getName());
            assistanceDO.setPatientPhone(patientDO.getMobile());
            if (proxyPatient==null){//设备发起时该字段为空
                assistanceDO.setProxyPatient(patient);
                assistanceDO.setProxyPatientName(patientDO.getName());
                assistanceDO.setProxyPatientPhone(patientDO.getMobile());
                assistanceDO.setType(1);
            }else {//家人
                BasePatientDO proxyPatientDO = patientDao.findById(proxyPatient);
                assistanceDO.setProxyPatient(proxyPatient);
                assistanceDO.setProxyPatientName(proxyPatientDO.getName());
                assistanceDO.setProxyPatientPhone(proxyPatientDO.getMobile());
                assistanceDO.setType(2);
            }
        }
            else{
                if(StringUtils.isNotBlank(agent)){
                    BasePatientDO agentPatient = patientDao.findById(agent);
                    if (null!=agentPatient){
                        assistanceDO.setProxyPatient(agentPatient.getId());
                        assistanceDO.setProxyPatientName(agentPatient.getName());
                        assistanceDO.setProxyPatientPhone(agentPatient.getMobile());
                    }
                    assistanceDO.setType(4);
                }
                else if(patient.equals(proxyPatient)) {//本人发起
                    assistanceDO.setProxyPatient(patient);
                    assistanceDO.setProxyPatientName(patientDO.getName());
                    assistanceDO.setProxyPatientPhone(patientDO.getMobile());
                    assistanceDO.setType(1);
                }else {//家人
                    BasePatientDO proxyPatientDO = patientDao.findById(proxyPatient);
                    assistanceDO.setProxyPatient(proxyPatient);
                    assistanceDO.setProxyPatientName(proxyPatientDO.getName());
                    assistanceDO.setProxyPatientPhone(proxyPatientDO.getMobile());
                    assistanceDO.setType(2);
                }
            }
//        if (emergencyAssistanceDao.findByPatientAndStatus(patient,1)!=null){
//            String failMsg = "当前居民存在申请中的救助,请完成后再申请";
@ -217,98 +225,104 @@ public class EmergencyAssistanceService extends BaseJpaService<EmergencyAssistan
//            result.put(ResponseContant.resultMsg,failMsg);
//            return result;
//        }
        //签约防走失服务包
        String sql ="SELECT i.code,r.team_code,pack.org_code,pack.org_name from base_service_package_sign_record sr,base_service_package_record r, base_service_package_item i,base_service_package pack  \n" +
                "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 \n" +
                "and  sr.patient  = '"+assistanceDO.getPatient()+"' and i.code='emergencyAssistance' ";
        List<Map<String,Object>> items = jdbcTemplate.queryForList(sql);
        if (items.size()==0){
            String failMsg = "当前居民未签约紧急救助服务项,请先进行签约";
            result.put(ResponseContant.resultFlag, ResponseContant.fail);
            result.put(ResponseContant.resultMsg,failMsg);
            return result;
        }
        Map<String,Object> mapTmp = items.get(0);
        List<BaseDoctorDO> doctorDOS = baseTeamMemberDao.findAllMembersByLevel(mapTmp.get("team_code").toString(),2);
        if (StringUtils.isNotBlank((mapTmp.get("org_code").toString()))){
            assistanceDO.setOrgCode(mapTmp.get("org_code").toString());
        }
        if (StringUtils.isNotBlank((mapTmp.get("org_name").toString()))){
            assistanceDO.setOrgName((mapTmp.get("org_name").toString()));
        }
        assistanceDO.setTeamCode(mapTmp.get("team_code").toString());
        if (doctorDOS.size()==0){
            String failMsg = "紧急救助服务项服务医生为空,不可发起救助";
            result.put(ResponseContant.resultFlag, ResponseContant.fail);
            result.put(ResponseContant.resultMsg,failMsg);
            return result;
        }
        assistanceDO = emergencyAssistanceDao.save(assistanceDO);
        //创建im会话  紧急救助咨询的sessionid  为居民code+20
        JSONObject IMObj = consultTeamService.addServiceConsult(assistanceDO.getId(),patient,agent,null);
        String sessionId=patient + "_20";
        assistanceDO.setSessionId(sessionId);
        //向会话中发送一条消息
        ConsultTeamDo consultTeam = consultTeamDao.queryByRelationCode(assistanceDO.getId());
        if (consultTeam!=null){
            if (StringUtils.isNotBlank(assistanceDO.getSendMessage())){
                imUtill.sendTopicIM(patient,patientDO.getName(),consultTeam.getConsult(),"1",assistanceDO.getSendMessage(),null);
            //签约防走失服务包
            String sql ="SELECT i.code,r.team_code,pack.org_code,pack.org_name from base_service_package_sign_record sr,base_service_package_record r, base_service_package_item i,base_service_package pack  \n" +
                    "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 \n" +
                    "and  sr.patient  = '"+assistanceDO.getPatient()+"' and i.code='emergencyAssistance' ";
            List<Map<String,Object>> items = jdbcTemplate.queryForList(sql);
            if (items.size()==0){
                String failMsg = "当前居民未签约紧急救助服务项,请先进行签约";
                result.put(ResponseContant.resultFlag, ResponseContant.fail);
                result.put(ResponseContant.resultMsg,failMsg);
                return result;
            }
        }
        //推送socket给医生
        JSONObject message = new JSONObject();
        String latLon = assistanceDO.getServeLat()+","+assistanceDO.getServeLon();
        message.put("latLon",latLon);
        message.put("session_id",assistanceDO.getSessionId());
        message.put("sender_name",assistanceDO.getPatientName());
        message.put("content_notice",assistanceDO.getPatientName()+" 发起紧急救助!");
        message.put("sender_code",assistanceDO.getPatient());
        message.put("OrderType",20);
        message.put("OrderStatus","new");
        message.put("order_id",assistanceDO.getId());
        message.put("content_type",40);
        message.put("serverDesc","紧急呼叫");
        message.put("categoryCode","");
        message.put("orgType","");
        message.put("contactStatus","");
        message.put("residentialArea",patientDO.getResidentialArea());
        if (null!=assistanceDO.getDeviceSn()){
            String device_sn = assistanceDO.getDeviceSn();
            if (org.apache.commons.lang.StringUtils.isNotBlank(device_sn)){
                DeviceDetail deviceDetail = deviceDetailDao.findBySn(device_sn);
                if (null!=deviceDetail){
                    message.put("contactStatus",deviceDetail.getContactStatus());
                    message.put("categoryCode",deviceDetail.getCategoryCode());
            Map<String,Object> mapTmp = items.get(0);
            List<BaseDoctorDO> doctorDOS = baseTeamMemberDao.findAllMembersByLevel(mapTmp.get("team_code").toString(),2);
            if (StringUtils.isNotBlank((mapTmp.get("org_code").toString()))){
                assistanceDO.setOrgCode(mapTmp.get("org_code").toString());
            }
            if (StringUtils.isNotBlank((mapTmp.get("org_name").toString()))){
                assistanceDO.setOrgName((mapTmp.get("org_name").toString()));
            }
            assistanceDO.setTeamCode(mapTmp.get("team_code").toString());
            if (doctorDOS.size()==0){
                String failMsg = "紧急救助服务项服务医生为空,不可发起救助";
                result.put(ResponseContant.resultFlag, ResponseContant.fail);
                result.put(ResponseContant.resultMsg,failMsg);
                return result;
            }
            assistanceDO = emergencyAssistanceDao.save(assistanceDO);
            //创建im会话  紧急救助咨询的sessionid  为居民code+20
            JSONObject IMObj = consultTeamService.addServiceConsult(assistanceDO.getId(),patient,agent,null);
            String sessionId=patient + "_20";
            assistanceDO.setSessionId(sessionId);
            //向会话中发送一条消息
            ConsultTeamDo consultTeam = consultTeamDao.queryByRelationCode(assistanceDO.getId());
            if (consultTeam!=null){
                if (StringUtils.isNotBlank(assistanceDO.getSendMessage())){
                    imUtill.sendTopicIM(patient,patientDO.getName(),consultTeam.getConsult(),"1",assistanceDO.getSendMessage(),null);
                }
            }
        }
        String orgCode = assistanceDO.getOrgCode();
        BaseOrgDO orgDO = orgDao.findByCode(orgCode);
        if (null!=orgDO){
            message.put("orgType",orgDO.getType());
        }
            //推送socket给医生
            JSONObject message = new JSONObject();
            String latLon = assistanceDO.getServeLat()+","+assistanceDO.getServeLon();
            message.put("latLon",latLon);
            message.put("session_id",assistanceDO.getSessionId());
            message.put("sender_name",assistanceDO.getPatientName());
            message.put("content_notice",assistanceDO.getPatientName()+" 发起紧急救助!");
            message.put("sender_code",assistanceDO.getPatient());
            message.put("OrderType",20);
            message.put("OrderStatus","new");
            message.put("order_id",assistanceDO.getId());
            message.put("content_type",40);
            message.put("serverDesc","紧急呼叫");
            message.put("categoryCode","");
            message.put("orgType","");
            message.put("contactStatus","");
            message.put("residentialArea",patientDO.getResidentialArea());
            if (null!=assistanceDO.getDeviceSn()){
                String device_sn = assistanceDO.getDeviceSn();
                if (org.apache.commons.lang.StringUtils.isNotBlank(device_sn)){
                    DeviceDetail deviceDetail = deviceDetailDao.findBySn(device_sn);
                    if (null!=deviceDetail){
                        message.put("contactStatus",deviceDetail.getContactStatus());
                        message.put("categoryCode",deviceDetail.getCategoryCode());
                    }
                }
            }
            String orgCode = assistanceDO.getOrgCode();
            BaseOrgDO orgDO = orgDao.findByCode(orgCode);
            if (null!=orgDO){
                message.put("orgType",orgDO.getType());
            }
        for (BaseDoctorDO doctorDO:doctorDOS){
            try {
                if (StringUtils.isNotBlank(doctorDO.getMobile())){
                    messageUtil.sendTXYSJson("1099807",doctorDO.getMobile(),assistanceDO.getPatientName(),"紧急呼叫");
                }
            }catch (Exception e){}
            String body = "您好,"+assistanceDO.getPatientName()+"居民发起紧急呼叫,请关注并及时处理。";
            messageUtil.sendDoctorGetuiMessage(doctorDO.getId(),"2","/sos/index?tabActive=1","紧急呼叫",body);
            imUtill.sendMDTSocketMessageToDoctor(doctorDO.getId(),message.toString());
        }
        //pc管理端端推送消息
        imUtill.sendPcManageMessageToPc("cloudCare_pcManage",message.toString());
            for (BaseDoctorDO doctorDO:doctorDOS){
                try {
                    if (StringUtils.isNotBlank(doctorDO.getMobile())){
                        messageUtil.sendTXYSJson("1099807",doctorDO.getMobile(),assistanceDO.getPatientName(),"紧急呼叫");
                    }
                }catch (Exception e){}
                String body = "您好,"+assistanceDO.getPatientName()+"居民发起紧急呼叫,请关注并及时处理。";
                messageUtil.sendDoctorGetuiMessage(doctorDO.getId(),"2","/sos/index?tabActive=1","紧急呼叫",body);
                messageUtil.sendDoctorDingdingMessage(doctorDO,null,"text","2",body,null,null);
                imUtill.sendMDTSocketMessageToDoctor(doctorDO.getId(),message.toString());
            }
            //pc管理端端推送消息
            imUtill.sendPcManageMessageToPc("cloudCare_pcManage",message.toString());
        emergencyAssistanceDao.save(assistanceDO);
        result.put("resultFlag", ResponseContant.success);
        result.put("resultMsg",assistanceDO);
        return result;
            emergencyAssistanceDao.save(assistanceDO);
            result.put("resultFlag", ResponseContant.success);
            result.put("resultMsg",assistanceDO);
            if (StringUtils.isNotBlank(assistanceDO.getDeviceSn())){
                deviceDataPushLogUtil.savePatientMonitorData(assistanceDO.getDeviceSn(),20,"发起紧急呼叫",assistanceDO.getId());
            }
            baseServiceNewsService.addServiceNews(patientDO.getName(),patientDO.getId(),"5",null,assistanceDO.getId(),1);
            return result;
        }
    }
    public JSONObject getOrderDetail(String orderID,String doctor){
@ -368,7 +382,7 @@ public class EmergencyAssistanceService extends BaseJpaService<EmergencyAssistan
        Integer statustemp = Integer.valueOf(assistanceDO.getStatus()+"");
        String statusName = "";
        switch (statustemp){
            case -2:statusName="误警报";break;
            case -2:statusName="已响应";break;
            case -1:statusName="已取消";break;
            case 0:statusName="已完成";break;
            case 1:statusName="预警中";break;
@ -392,7 +406,7 @@ public class EmergencyAssistanceService extends BaseJpaService<EmergencyAssistan
            //判断当前社工是否知悉
            if(tmp.getUserCode().equals(doctor)){
                BaseDoctorDO baseDoctorDO = doctorDao.findById(doctor);
                String tmpContent = "社工" + baseDoctorDO.getName() + "已知悉";
                String tmpContent = "已知悉";
                if(tmpContent.equals(tmp.getContent())){
                    emergencyOrderVO.setKnow(1);
                }
@ -835,6 +849,12 @@ public class EmergencyAssistanceService extends BaseJpaService<EmergencyAssistan
            result.put(ResponseContant.resultMsg,failMsg);
            return result;
        }
        if (assistanceDO.getStatus() == 0){
            String failMsg = "当前救助工单已完成";
            result.put(ResponseContant.resultFlag, ResponseContant.fail);
            result.put(ResponseContant.resultMsg,failMsg);
            return result;
        }
        assistanceDO.setStatus(-1);
        assistanceDO.setUpdateUser(patient);
        assistanceDO.setUpdateUserName(patientDO.getName());
@ -886,6 +906,16 @@ public class EmergencyAssistanceService extends BaseJpaService<EmergencyAssistan
        String failMsg = "当前救助工单已取消";
        result.put(ResponseContant.resultFlag, ResponseContant.success);
        result.put(ResponseContant.resultMsg,JSONObject.parseObject(JSON.toJSONStringWithDateFormat(assistanceDO,"yyyy-MM-dd HH:mm:ss", SerializerFeature.WriteMapNullValue)));
        BaseEmergencyWarnLogDO logTypeDO = new BaseEmergencyWarnLogDO();
        logTypeDO.setUserCode(patient);
        logTypeDO.setUserName(assistanceDO.getPatientName());
        logTypeDO.setOrderId(orderId);
        logTypeDO.setUserType(1);
        logTypeDO.setCreateTime(new Date());
        logTypeDO.setContent("已取消");
        logTypeDO.setType(6);
        logDao.save(logTypeDO);
        return result;
    }
@ -921,6 +951,31 @@ public class EmergencyAssistanceService extends BaseJpaService<EmergencyAssistan
            doorConclusion.setDoctor(doctorDO.getId());
            doorConclusion.setDoctorName(doctorDO.getName());
        }
        List<BaseEmergencyWarnLogDO> byOrderIdByType = logDao.findByOrderIdByType(orderId);
        if (byOrderIdByType.size()==0){
            BaseEmergencyWarnLogDO logTypeDOOne = new BaseEmergencyWarnLogDO();
            logTypeDOOne.setUserCode(doctor);
            logTypeDOOne.setUserName(doctorDO.getName());
            logTypeDOOne.setOrderId(orderId);
            logTypeDOOne.setUserType(2);
            logTypeDOOne.setCreateTime(new Date());
            logTypeDOOne.setContent("已知悉");
            logTypeDOOne.setType(1);
            logDao.save(logTypeDOOne);
        }
        BaseEmergencyWarnLogDO logTypeDO = new BaseEmergencyWarnLogDO();
        logTypeDO.setUserCode(doctor);
        logTypeDO.setUserName(doctorDO.getName());
        logTypeDO.setOrderId(orderId);
        logTypeDO.setUserType(2);
        //logTypeDO.setCreateTime(DateUtil.strToDateLong(String.valueOf(new Date().getTime() + 1000)));
        logTypeDO.setCreateTime(new Date());
        logTypeDO.setContent("完成服务小结");
        logTypeDO.setType(5);
        logDao.save(logTypeDO);
        doorConclusion.setEmergencyReason(emergency_reason);
        doorConclusion.setEmergencyTreatmentStatus(treatment_status);
        doorConclusion.setConclusion(conclusion);
@ -1075,6 +1130,7 @@ public class EmergencyAssistanceService extends BaseJpaService<EmergencyAssistan
            BaseDoctorDO doctorDO = doctorDao.findById(doctor);
            if (null!=doctorDO){
                BaseEmergencyWarnLogDO logDO = new BaseEmergencyWarnLogDO();
                BaseEmergencyWarnLogDO logTypeDO = new BaseEmergencyWarnLogDO();
                logDO.setUserCode(doctor);
                logDO.setUserName(doctorDO.getName());
                logDO.setOrderId(orderId);
@ -1082,6 +1138,28 @@ public class EmergencyAssistanceService extends BaseJpaService<EmergencyAssistan
                logDO.setCreateTime(new Date());
                logDO.setContent("前往定位");
                logDao.save(logDO);
                List<BaseEmergencyWarnLogDO> byOrderIdByType = logDao.findByOrderIdByType(orderId);
                if (byOrderIdByType.size()==0){
                    BaseEmergencyWarnLogDO logTypeDOOne = new BaseEmergencyWarnLogDO();
                    logTypeDOOne.setUserCode(doctor);
                    logTypeDOOne.setUserName(doctorDO.getName());
                    logTypeDOOne.setOrderId(orderId);
                    logTypeDOOne.setUserType(2);
                    logTypeDOOne.setCreateTime(new Date());
                    logTypeDOOne.setContent("已知悉");
                    logTypeDOOne.setType(1);
                    logDao.save(logTypeDOOne);
                }
                logTypeDO.setUserCode(doctor);
                logTypeDO.setUserName(doctorDO.getName());
                logTypeDO.setOrderId(orderId);
                logTypeDO.setUserType(2);
                logTypeDO.setCreateTime(new Date());
                logTypeDO.setContent("前往定位");
                logTypeDO.setType(2);
                logDao.save(logTypeDO);
            }
        }
@ -1391,4 +1469,323 @@ public class EmergencyAssistanceService extends BaseJpaService<EmergencyAssistan
        return result;
    }
    public JSONObject getEmergencyAssistanceProcess(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;
    }
    public int phoneLogSave(BaseEmergencyWarnLogDO baseEmergencyWarnLogDO,Integer type){
        switch (type) {
            case 1:
                baseEmergencyWarnLogDO.setContent("呼叫110");
                baseEmergencyWarnLogDO.setType(3);
                break;
            case 2:
                baseEmergencyWarnLogDO.setContent("呼叫120");
                baseEmergencyWarnLogDO.setType(4);
                break;
            default:
                return -1;
        }
        baseEmergencyWarnLogDO.setUserType(2);
        baseEmergencyWarnLogDO.setCreateTime(new Date());
        logDao.save(baseEmergencyWarnLogDO);
        return 1;
    }
    @Transactional(rollbackFor = Exception.class)
    public void initialize(){
//        String sql = "  select o.`status`,o.id,o.patient,o.patient_name,o.doctor AS doctor,o.doctor_name,DATE_FORMAT(o.create_time,'%Y-%m-%d %H:%i:%s') AS createTime,DATE_FORMAT(o.update_time,'%Y-%m-%d %H:%i:%s') AS updateTime from base_emergency_assistance_order o  where 1=1\n" +
//                "  \t\n" +
//                "UNION\n" +
//                " select o.`status`,o.id,o.patient,o.patient_name,o.doctor AS doctor,o.doctor_name,DATE_FORMAT(o.create_time,'%Y-%m-%d %H:%i:%s') AS createTime,DATE_FORMAT(o.update_time,'%Y-%m-%d %H:%i:%s') AS updateTime from base_security_monitoring_order o  where 1=1    ";
//        List<Map<String, Object>> emeList = jdbcTemplate.queryForList(sql);
//        List<BaseEmergencyWarnLogDO> list =new ArrayList<>();
//        List<EmergencyWarnConclusionDO> listC = new ArrayList<>();
//
//        for (Map<String, Object> map : emeList) {
//            BaseEmergencyWarnLogDO baseEmergencyWarnLogDO = new BaseEmergencyWarnLogDO();
//            BaseDoctorDO doctorDO =  null;
//            if (null!=map.get("doctor")&&StringUtils.isNotBlank(map.get("doctor").toString())){
//                doctorDO = doctorDao.findById(map.get("doctor").toString());
//            }else {
//                List<BaseDoctorDO> doctorDOS =  servicePackageService.findSignDoctor(map.get("patient").toString(),null);
//                if (doctorDOS.size()>0){
//                    doctorDO = doctorDOS.get(0);
//                }
//            }
//            if (null!=doctorDO){
//                switch (map.get("status").toString()){
//                    case "0" :
//                        //小结完成
//                        sql = " select count(id) from base_emergency_warn_log where order_id ='"+map.get("id").toString()+"' and type=1 ";
//                        if (jdbcTemplate.queryForObject(sql,Integer.class)==0){
//                            //已知悉
//                            baseEmergencyWarnLogDO = new BaseEmergencyWarnLogDO();
//                            baseEmergencyWarnLogDO.setType(1);
//                            baseEmergencyWarnLogDO.setCreateTime(DateUtil.strToDate(map.get("createTime").toString()));
//                            baseEmergencyWarnLogDO.setContent("已知悉");
//                            baseEmergencyWarnLogDO.setUserType(2);
//                            baseEmergencyWarnLogDO.setUserCode(doctorDO.getId());
//                            baseEmergencyWarnLogDO.setUserName(doctorDO.getName());
//                            baseEmergencyWarnLogDO.setOrderId(map.get("id").toString());
//                            list.add(baseEmergencyWarnLogDO);
//                        }
//                        sql = " select count(id) from base_emergency_warn_log where order_id ='"+map.get("id").toString()+"' and type=5 ";
//                        if (jdbcTemplate.queryForObject(sql,Integer.class)==0){
//                            baseEmergencyWarnLogDO = new BaseEmergencyWarnLogDO();
//                            baseEmergencyWarnLogDO.setType(5);
//                            baseEmergencyWarnLogDO.setCreateTime(DateUtil.strToDateLong(map.get("updateTime").toString()));
//                            baseEmergencyWarnLogDO.setContent("完成服务小结");
//                            baseEmergencyWarnLogDO.setUserType(2);
//                            baseEmergencyWarnLogDO.setUserCode(doctorDO.getId());
//                            baseEmergencyWarnLogDO.setUserName(doctorDO.getName());
//                            baseEmergencyWarnLogDO.setOrderId(map.get("id").toString());
//                            list.add(baseEmergencyWarnLogDO);
//                        }
//                        sql = " select count(id) from base_emergency_warn_log where order_id ='"+map.get("id").toString()+"' and type=1 ";
//                        if (jdbcTemplate.queryForObject(sql,Integer.class)==0){
//                            //已知悉
//                            baseEmergencyWarnLogDO = new BaseEmergencyWarnLogDO();
//                            baseEmergencyWarnLogDO.setType(1);
//                            baseEmergencyWarnLogDO.setCreateTime(DateUtil.strToDate(map.get("createTime").toString()));
//                            baseEmergencyWarnLogDO.setContent("已知悉");
//                            baseEmergencyWarnLogDO.setUserType(2);
//                            baseEmergencyWarnLogDO.setUserCode(doctorDO.getId());
//                            baseEmergencyWarnLogDO.setUserName(doctorDO.getName());
//                            baseEmergencyWarnLogDO.setOrderId(map.get("id").toString());
//                            list.add(baseEmergencyWarnLogDO);
//                        }
//                        break;
//                    case "-1":    //取消
//                        sql = " select count(id) from base_emergency_warn_log where order_id ='"+map.get("id").toString()+"' and type=6 ";
//                        if (jdbcTemplate.queryForObject(sql,Integer.class)==0){
//                            baseEmergencyWarnLogDO = new BaseEmergencyWarnLogDO();
//                            baseEmergencyWarnLogDO.setType(6);
//                            baseEmergencyWarnLogDO.setCreateTime(DateUtil.strToDate(map.get("updateTime").toString()));
//                            baseEmergencyWarnLogDO.setContent("已取消");
//                            baseEmergencyWarnLogDO.setUserType(1);
//                            baseEmergencyWarnLogDO.setUserCode(map.get("patient").toString());
//                            baseEmergencyWarnLogDO.setUserName(map.get("patient_name").toString());
//                            baseEmergencyWarnLogDO.setOrderId(map.get("id").toString());
//                            list.add(baseEmergencyWarnLogDO);
//                        }
//                        break;
//                    case "-2":  //误报警
//                        //创建小结
//                        String countSql = "SELECT COUNT(id) FROM base_emergency_warn_conclusion WHERE order_id = '"+map.get("id").toString()+"'";
//                        List<Map<String, Object>> countList = jdbcTemplate.queryForList(countSql);
//                        if (countList.size()<=0) {
//                            EmergencyWarnConclusionDO emergencyWarnConclusionDO = new EmergencyWarnConclusionDO();
//                            emergencyWarnConclusionDO.setOrderId(map.get("id").toString());
//                            emergencyWarnConclusionDO.setConclusion("误报警!");
//                            emergencyWarnConclusionDO.setPatient(map.get("patient").toString());
//                            emergencyWarnConclusionDO.setPatientName(map.get("patient_name").toString());
//                            emergencyWarnConclusionDO.setDoctor(doctorDO.getId());
//                            emergencyWarnConclusionDO.setDoctorName(doctorDO.getName());
//                            emergencyWarnConclusionDO.setCreateTime(DateUtil.strToDate(map.get("updateTime").toString()));
//                            emergencyWarnConclusionDO.setCreateUser(doctorDO.getId());
//                            emergencyWarnConclusionDO.setCreateUserName(doctorDO.getName());
//                            emergencyWarnConclusionDO.setEmergencyReason(3);
//                            emergencyWarnConclusionDO.setEmergencyTreatmentStatus(3);
//                            listC.add(emergencyWarnConclusionDO);
//                        }
//                        //完成服务小结
//                        sql = " select count(id) from base_emergency_warn_log where order_id ='"+map.get("id").toString()+"' and type=5 ";
//                        if (jdbcTemplate.queryForObject(sql,Integer.class)==0){
//                            baseEmergencyWarnLogDO = new BaseEmergencyWarnLogDO();
//                            baseEmergencyWarnLogDO.setType(5);
//                            baseEmergencyWarnLogDO.setCreateTime(DateUtil.strToDate(map.get("createTime").toString()));
//                            baseEmergencyWarnLogDO.setContent("完成服务小结");
//                            baseEmergencyWarnLogDO.setUserType(1);
//                            baseEmergencyWarnLogDO.setUserCode(doctorDO.getId());
//                            baseEmergencyWarnLogDO.setUserName(doctorDO.getName());
//                            baseEmergencyWarnLogDO.setOrderId(map.get("id").toString());
//                            list.add(baseEmergencyWarnLogDO);
//                        }
//                        sql = " select count(id) from base_emergency_warn_log where order_id ='"+map.get("id").toString()+"' and type=1 ";
//                        if (jdbcTemplate.queryForObject(sql,Integer.class)==0){
//                            //已知悉
//                            baseEmergencyWarnLogDO = new BaseEmergencyWarnLogDO();
//                            baseEmergencyWarnLogDO.setType(1);
//                            baseEmergencyWarnLogDO.setCreateTime(DateUtil.strToDate(map.get("createTime").toString()));
//                            baseEmergencyWarnLogDO.setContent("已知悉");
//                            baseEmergencyWarnLogDO.setUserType(2);
//                            baseEmergencyWarnLogDO.setUserCode(doctorDO.getId());
//                            baseEmergencyWarnLogDO.setUserName(doctorDO.getName());
//                            baseEmergencyWarnLogDO.setOrderId(map.get("id").toString());
//                            list.add(baseEmergencyWarnLogDO);
//                        }
//
//                        break;
//                }
//            }
//        }
//        logDao.save(list);
    }
    /*******************************************管理员端使用********************************************/
    public List<Map<String,Object>> getAdminEmeAndSecuOrderList(String orderType,String patient,String patientName,String doctor,String status,Integer page,Integer pageSize,String svrDesc,String area,String level){
        String olderFilter = roleService.getOlderRoleSQL(area,level+"");
        page = page>0?page-1:0;
        List<Map<String,Object>> result = new ArrayList<>();
        String filter = " ";
        if (StringUtils.isNotBlank(patient)){
            filter += " and ord.patient ='"+patient+"' ";
        }
        if (StringUtils.isNotBlank(patientName)){
            filter += " and ord.patient_name like'%"+patientName+"%' ";
        }
        if (StringUtils.isNotBlank(status)){
            filter += " and ord.status ='"+status+"' ";
        }
        String sql = " ";
        if (StringUtils.isNotBlank(orderType)){
            List<String> orderTypes = Arrays.asList(orderType.split(",").clone());
            if (orderTypes.contains("20")){
                sql += "select '20' as OrderType,ord.id,ord.patient,ord.patient_name patientName,ord.doctor,ord.status,ord.doctor_name," +
                        "'紧急呼叫' as serve_desc,DATE_FORMAT(ord.create_time,'%Y-%m-%d %H:%i:%S') create_time ,case p.sex when 1 then '男' when 2 then '女' else p.sex end as sex," +
                        " TIMESTAMPDIFF(YEAR,p.birthday,now()) as age,ord.order_source orderSource,p.mobile,p.photo,ord.session_id sessionId " +
                        "from base_emergency_assistance_order ord  INNER JOIN base_patient p on ord.patient = p.id  " +
                        " where 1=1 "+filter +" "+olderFilter.replace("{patient}","p.id");
            }
            if (orderTypes.contains("20")&&orderTypes.contains("22")){
                sql += " UNION ";
            }
            if (orderTypes.contains("22")){
                sql += " select  '22' as 'OrderType',ord.id,ord.patient,ord.patient_name patientName,ord.doctor,ord.status,ord.doctor_name," +
                        "ord.serve_desc,DATE_FORMAT(ord.create_time,'%Y-%m-%d %H:%i:%S') create_time ,case p.sex when 1 then '男' when 2 then '女' else p.sex end as sex, " +
                        "TIMESTAMPDIFF(YEAR,p.birthday,now()) as age,ord.order_source orderSource,p.mobile,p.photo,CONCAT(ord.patient,'_22') sessionId  " +
                        " from base_security_monitoring_order ord " +
                        " INNER JOIN base_patient p on ord.patient = p.id " +
                        " where 1=1  "+filter +" "+olderFilter.replace("{patient}","p.id");
                if(StringUtils.isNotBlank(svrDesc)){
                    sql += " and ord.serve_desc = '"+svrDesc+"' ";
                }
            }
            sql += " order by create_time desc limit "+page*pageSize+","+pageSize;
            result =   jdbcTemplate.queryForList(sql);
        }
        return result;
    }
    public JSONObject getAdminEmeAndSecuOrderTab(String doctor,String status,String area,String level){
        String olderFilter = roleService.getOlderRoleSQL(area,level+"");
        JSONObject result = new JSONObject();
        JSONObject eme = new JSONObject();
        JSONObject secu = new JSONObject();
        JSONObject emeAndSecu = new JSONObject();
        /************************紧急********/
        eme.put("status_-2",0);//误报警
        eme.put("status_-1",0);//已取消
        eme.put("status_0",0);//已完成
        eme.put("status_1",0);//预警中
        String sql = " select ord.status,count(distinct ord.id) count from base_emergency_assistance_order ord INNER JOIN base_patient_helper ph on ord.patient = ph.patient and ph.del=1 ";
        if (StringUtils.isNotBlank(status)){
            sql += " and ord.status='"+status+"' ";
        }
        sql +=  "  where ph.doctor='"+doctor+"' "+olderFilter.replace("{patient}","ph.patient")+" group by ord.status  ";
        List<Map<String,Object>> sqlResult = jdbcTemplate.queryForList(sql);
        for (Map<String,Object> map:sqlResult){
            eme.put("status_"+map.get("status"),map.get("count"));
        }
        Integer All = 0;
        Set<String> keySet = eme.keySet();
        for (String key : keySet){
            All+=eme.getInteger(key);
        }
        eme.put("all",All);
        result.put("eme",eme);
        /************************ 安防********/
        secu.put("status_-2", 0);//误报警
        secu.put("status_-1", 0);//已取消
        secu.put("status_0", 0);//已完成
        secu.put("status_1", 0);//预警中
        secu.put("status_all", 0);//
        secu.put("svr_all", 0);//
        Map<String, String> serverTmp = new HashMap<>();
        sql = " select py_code,dict_value from wlyy_hospital_sys_dict where dict_name='security_server_dict' ";
        List<Map<String, Object>> servers = jdbcTemplate.queryForList(sql);
        for (Map<String, Object> server : servers) {
            secu.put("svr_" + server.get("py_code").toString(), 0);
            serverTmp.put(server.get("dict_value").toString(), server.get("py_code").toString());
        }
        sql = "select ord.status,ord.serve_desc,count(distinct ord.id) count from base_security_monitoring_order ord INNER JOIN base_patient p on p.id = ord.patient " +
                " INNER JOIN base_patient_helper ph on ord.patient = ph.patient and ph.del=1  where ph.doctor='"+doctor+"'  ";
        String fliter = " group by ord.status";
        sqlResult = jdbcTemplate.queryForList(sql +olderFilter.replace("{patient}","ph.patient")+ fliter);
        for (Map<String, Object> map : sqlResult) {
            secu.put("status_" + map.get("status"), secu.getInteger("status_" + map.get("status")) + Integer.parseInt(map.get("count").toString()));
            secu.put("status_all", secu.getInteger("status_all") + Integer.parseInt(map.get("count").toString()));
        }
        if (StringUtils.isNotBlank(status)){
            sql += " and ord.status='"+status+"' ";
        }
        fliter = " group by ord.status,ord.serve_desc ";
        sqlResult = jdbcTemplate.queryForList(sql + fliter);
        String pyCode = "";
        for (Map<String, Object> map : sqlResult) {
            pyCode = serverTmp.get(map.get("serve_desc")) == null ? null : serverTmp.get(map.get("serve_desc")).toString();
            if (StringUtils.isNotBlank(pyCode)) {
                secu.put("svr_" + pyCode, secu.getInteger("svr_" + pyCode) + Integer.parseInt(map.get("count").toString()));
                secu.put("svr_all", secu.getInteger("svr_all") + Integer.parseInt(map.get("count").toString()));
            }
        }
        result.put("secu",secu);
        /************************ 安防、紧急总数********/
        sql = " select count(distinct ord.id)  from base_emergency_assistance_order ord INNER JOIN base_patient p on ord.patient = p.id and p.del=1 INNER JOIN base_patient_helper ph on ord.patient = ph.patient and ph.del=1 " +
                "  where ph.doctor='"+doctor+"' " ;
        Long emeCount = jdbcTemplate.queryForObject(sql+olderFilter.replace("{patient}","p.id"),Long.class);
        emeAndSecu.put("emeAll",emeCount);
        sql = "select count(distinct ord.id) count from base_security_monitoring_order ord INNER JOIN base_patient p on ord.patient = p.id and p.del=1 " +
                " INNER JOIN base_patient_helper ph on p.id = ph.patient and ph.del=1  where ph.doctor='"+doctor+"'  ";
        fliter = "  ";
        Long secuCount = jdbcTemplate.queryForObject(sql+olderFilter.replace("{patient}","p.id"),Long.class);
        emeAndSecu.put("secuAll",secuCount);
        result.put("emeAndSecu",emeAndSecu);
        return result;
    }
}

+ 16 - 3
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/birthday/BirthdayWishesService.java

@ -2,16 +2,21 @@ package com.yihu.jw.care.service.birthday;
import com.yihu.jw.care.dao.birthday.BirthDayWishesToPatientDao;
import com.yihu.jw.care.dao.birthday.BirthdayWishesTemplateDao;
import com.yihu.jw.care.dao.team.BaseTeamDao;
import com.yihu.jw.care.service.common.PermissionService;
import com.yihu.jw.doctor.dao.BaseDoctorDao;
import com.yihu.jw.doctor.dao.BaseDoctorHospitalDao;
import com.yihu.jw.entity.base.doctor.BaseDoctorDO;
import com.yihu.jw.entity.base.doctor.BaseDoctorHospitalDO;
import com.yihu.jw.entity.base.patient.BasePatientDO;
import com.yihu.jw.entity.base.team.BaseTeamDO;
import com.yihu.jw.entity.base.team.BaseTeamMemberDO;
import com.yihu.jw.entity.care.birthday.BirthDayWishesToPatient;
import com.yihu.jw.entity.care.birthday.BirthdayWishesTemplate;
import com.yihu.jw.patient.dao.BasePatientDao;
import com.yihu.jw.restmodel.web.Envelop;
import com.yihu.jw.team.BaseDoctorTeamDao;
import com.yihu.jw.team.BaseDoctorTeamMemberDao;
import com.yihu.jw.util.common.IdCardUtil;
import com.yihu.jw.util.date.DateUtil;
import org.apache.commons.lang.StringUtils;
@ -53,6 +58,10 @@ public class BirthdayWishesService {
    private RedisTemplate redisTemplate;
    @Autowired
    private PermissionService permissionService;
    @Autowired
    private BaseDoctorTeamMemberDao teamMemberDao;
    @Autowired
    private BaseTeamDao baseTeamDao;
//    /**
//     * 发送到mq
@ -358,7 +367,7 @@ public class BirthdayWishesService {
            }
        }
        whereSql += "and DATE_FORMAT(ph.create_time,'%Y%m%d')<= CONCAT('"+year+"',(CASE LENGTH(p.idcard) WHEN 18 THEN SUBSTR(p.idcard, 11, 4) WHEN 15 THEN SUBSTR(p.idcard, 9, 4) END)) ";
        whereSql += "and DATE_FORMAT(sr.create_time,'%Y%m%d')<= CONCAT('"+year+"',(CASE LENGTH(p.idcard) WHEN 18 THEN SUBSTR(p.idcard, 11, 4) WHEN 15 THEN SUBSTR(p.idcard, 9, 4) END)) ";
        sql = sql + whereSql + " ) order by birthday limit "+(page-1)*pageSize + "," + pageSize;
        sqlCount = sqlCount + whereSql+")";
@ -455,6 +464,8 @@ public class BirthdayWishesService {
        Set<String> openidSet = new HashSet<>();
        BaseDoctorDO doctor = doctorDao.findById(doctorCode);
        //医生团队
        List<BaseTeamDO> teamDOS = baseTeamDao.findDoctorTeams(doctorCode);
        String sql = " select * from ( 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 in ( "+p+") " +
                "  order by we.create_time desc )A group by A.patient  ";
@ -488,12 +499,14 @@ public class BirthdayWishesService {
            //存储发送人信息
            es.setSendPic(doctor.getPhoto());
            es.setSendSex(doctor.getSex()+"");
//            es.setAdminTeamName(patientInfo.get("teamName") + "");
//            es.setAdminTeamCode(Long.valueOf(patientInfo.get("admin_team_code")+""));
            if (hospitalDOs.size()>0){
                es.setHospital(hospitalDOs.get(0).getOrgCode());
                es.setHospitalName(hospitalDOs.get(0).getOrgName());
            }
            if (teamDOS.size()>0){
                es.setAdminTeamCode(teamDOS.get(0).getId());
                es.setAdminTeamName(teamDOS.get(0).getName());
            }
            es.setTown(doctor.getTownCode());
            es.setTownName(doctor.getTownName());

+ 59 - 67
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/common/CommomService.java

@ -1,8 +1,14 @@
package com.yihu.jw.care.service.common;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.care.dao.device.DeviceDao;
import com.yihu.jw.care.dao.device.DeviceDetailDao;
import com.yihu.jw.care.dao.device.PatientDeviceDao;
import com.yihu.jw.care.util.MessageUtil;
import com.yihu.jw.entity.base.patient.BasePatientDO;
import com.yihu.jw.entity.care.device.Device;
import com.yihu.jw.entity.care.device.DeviceDetail;
import com.yihu.jw.entity.care.device.DevicePatientDevice;
import com.yihu.jw.entity.hospital.message.SystemMessageDO;
import com.yihu.jw.patient.dao.BasePatientDao;
import com.yihu.jw.util.date.DateUtil;
@ -12,6 +18,7 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
@ -30,73 +37,58 @@ public class CommomService {
    private MessageUtil messageUtil;
    @Value("${wechat.id}")
    private String wxId;
    //模板消息测试
    public void WXtempleateSendTest(){
        String patient="808080eb78d3ce030178edeb4346002b";
        BasePatientDO patientDO = basePatientDao.findById(patient);
        //获取家属
        String  sql = " select  t2.id,t2.name,t2.openid,'family3' as 'user' from  base_patient_family_member t1,  base_patient t2 where  " +
                "t2.id in (select family_member from base_patient_family_member where patient = '"+patient+"' )  " +
                " and t1.patient = '"+patient+"'  and t1.family_member = t2.id  " +
                " and t2.archive_type=3 GROUP BY t2.id " ;
        List<Map<String,Object>> relatives = jdbcTemplate.queryForList(sql);
        for (Map<String,Object> docTmp:relatives){
            if ("family3".equals(docTmp.get("user").toString())){//设备离线推送给家属
                if(null!=docTmp.get("openid")&& StringUtils.isNotBlank(docTmp.get("openid").toString())){
                    String first = patientDO.getName()+" 血糖仪设备疑似离线";
                    String keyword1 = "【"+ DateUtil.getStringDate()+"】";
                    String keyword2 = "【设备离线】";
                    String keyword3 = patientDO.getName()+" 血糖仪设备疑似离线,请及时跟进";
                    messageUtil.putTemplateWxMessage(wxId,"template_error_notice","sblxtz",
                            docTmp.get("openid").toString(),first,null,null,38,new JSONObject(),keyword1,keyword2,keyword3);
                    first=patientDO.getName()+"已离家";
                    keyword2="【离家提醒】";
                    keyword3 = patientDO.getName()+"已离家,请及时跟进";
                    boolean success = messageUtil.putTemplateWxMessage(wxId,"template_error_notice","lrjjztgxtz",docTmp.get("openid").toString(),first,null,null,3,new JSONObject(),DateUtil.getStringDate(),keyword2,keyword3);
                    first=patientDO.getName()+"已到家";
                    keyword2="【到家提醒】";
                    keyword3 = patientDO.getName()+"已到家,请知悉";
                    messageUtil.putTemplateWxMessage(wxId,"template_error_notice","lrjjztgxtz",docTmp.get("openid").toString(),first,null,null,3,new JSONObject(),DateUtil.getStringDate(),keyword2,keyword3);
                    JSONObject jsonObject = new JSONObject();
                    jsonObject.put("patientId",patient);
                    first = patientDO.getName()+"血糖超7天未测量";
                    keyword2="【血糖测量】";
                    keyword3=patientDO.getName()+"血糖超7天未测量,请及时跟进";
                    jsonObject.put("type","1");
                    messageUtil.putTemplateWxMessage(wxId,"template_error_notice","xyxtwcltz",docTmp.get("openid").toString(),first,null,null,3,jsonObject,keyword1,keyword2,keyword3);
                    jsonObject = new JSONObject();
                    first = patientDO.getName()+"血压未测量";
                    keyword2="【血压测量】";
                    keyword3=patientDO.getName()+"昨日未测量血压,请及时跟进";
                    jsonObject.put("type","2");
                    messageUtil.putTemplateWxMessage(wxId,"template_error_notice","xyxtwcltz",docTmp.get("openid").toString(),first,null,null,3,jsonObject,keyword1,keyword2,keyword3);
                    first = patientDO.getName()+"最新测量血糖值反馈";
                    keyword1 = DateUtil.getStringDate();
                    keyword2 = "早餐前血糖";
                    keyword3 = "【5.5mmol/L】";
                    String keyword4 = "请注意日常饮食";
                    messageUtil.putTemplateWxMessage(wxId,"template_measure_result_notice","jktzcljgtz",patientDO.getOpenid(),first,null,null,3,new JSONObject(),keyword1,keyword2,keyword3,keyword4);
                    first= patientDO.getName()+" 最新测量血压值反馈";
                    keyword1 =  DateUtil.getStringDate();
                    keyword2 = "血压";
                    keyword3 = "【收缩压:106mmgh 舒张压:65mmgh】";
                    keyword4 = "请注意日常饮食";
                    messageUtil.putTemplateWxMessage(wxId,"template_measure_result_notice","jktzcljgtz",patientDO.getOpenid(),first,null,null,3,new JSONObject(),keyword1,keyword2,keyword3,keyword4);
                }
            }
    @Autowired
    private DeviceDao deviceDao;
    @Autowired
    private DeviceDetailDao deviceDetailDao;
    @Autowired
    private PatientDeviceDao patientDeviceDao;
    //水表用户初始化
    public void shuiBiaoInit(){
        String sql = " select id,user_id,idcard from base_patient where user_id is NOT null and user_id<>'' ";
        List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
        List<DeviceDetail> deviceDetails = new ArrayList<>();
        List<DevicePatientDevice> patientDevices = new ArrayList<>();
        List<Device> dmDevices = deviceDao.findByCategoryCode("18");
        Device deviceDo = dmDevices.get(0);
        for (Map<String,Object> tmp:list){
            String patient = tmp.get("id").toString();
            String deviceSn = tmp.get("user_id").toString();
            String idcard = tmp.get("idcard").toString();
            DeviceDetail deviceDetail = new DeviceDetail();
            deviceDetail.setDeviceName(deviceDo.getName());
            deviceDetail.setDeviceCode(deviceSn);
            deviceDetail.setDeviceModel(deviceDo.getModel());
            deviceDetail.setCategoryCode(deviceDo.getCategoryCode());
            deviceDetail.setBindingCount("{\"1\":\"1\",\"2\":\"0\"}");
            deviceDetail.setContactStatus(1);
            deviceDetail.setDeviceType(1);
            deviceDetail.setIsGrant(1);
            deviceDetail.setGrantAdminTeam("0");
            deviceDetail.setManufacturer("泰安泰山金石机械有限责任公司");
            deviceDetail.setApplyDate(DateUtil.getStringDate());
            deviceDetails.add(deviceDetail);
            DevicePatientDevice patientDevice = new DevicePatientDevice();
            patientDevice.setDel(0);
            patientDevice.setUser(patient);
            patientDevice.setCategoryCode(deviceDo.getCategoryCode());
            patientDevice.setDeviceId(deviceDo.getId());
            patientDevice.setDeviceName(deviceDo.getName());
            patientDevice.setDeviceSn(deviceSn);
            patientDevice.setUserIdcard(idcard);
            patientDevice.setUserType("-1");
            patientDevice.setCzrq(new Date());
            patientDevice.setDeviceType(1);
            patientDevices.add(patientDevice);
        }
        if (patientDevices.size()>0){
            patientDeviceDao.save(patientDevices);
        }
        if (deviceDetails.size()>0){
            deviceDetailDao.save(deviceDetails);
        }
    }
}

+ 33 - 6
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/common/PermissionService.java

@ -10,8 +10,10 @@ import com.yihu.jw.doctor.dao.BaseDoctorHospitalDao;
import com.yihu.jw.entity.base.doctor.BaseDoctorDO;
import com.yihu.jw.entity.base.doctor.BaseDoctorHospitalDO;
import com.yihu.jw.entity.base.login.BaseLoginLogDO;
import com.yihu.jw.entity.base.patient.BasePatientDO;
import com.yihu.jw.entity.care.role.DoctorRole;
import com.yihu.jw.entity.hospital.consult.WlyyHospitalSysDictDO;
import com.yihu.jw.patient.dao.BasePatientDao;
import com.yihu.jw.sms.dao.HospitalSysDictDao;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
@ -42,6 +44,8 @@ public class PermissionService {
    @Autowired
    private BaseDoctorDao doctorDao;
    @Autowired
    private BasePatientDao patientDao;
    @Autowired
    private HospitalSysDictDao hospitalSysDictDao;
    @Autowired
    private BaseDoctorHospitalDao doctorHospitalDao;
@ -92,7 +96,7 @@ public class PermissionService {
    /**
     * 判断是否有权限
     *  loginType 1user 登录 2医生登录 3居民登录 4第三方同步患者账号 5支付宝登录 6第三方登录-医联康护 7家人登录
     *  type 类型 0只能管理员访问,1doctor相关 2生日祝福模板
     *  type 类型 0只能管理员访问,1医生/居民相关 2生日祝福模板
     *  param 参数 不同类型参数不一样
     * @return true表示没权限
     */
@ -117,7 +121,10 @@ public class PermissionService {
            if (2==doctorDO.getLevel()||4==doctorDO.getLevel()){
                LoginType="2";
            }
        } else {
        } else if(isAgent()) {//家属端登录
            userId = getUID();
            LoginType = "3";
        }else {
            userId = loginLogDO.getUserId();
        }
        //目前只判断医生端
@ -143,13 +150,21 @@ public class PermissionService {
        }
        //居民
        if ("3".equals(LoginType)){
            if(type == 1){
                String patient = param.getString("patient");
                if(!userId.equals(patient)){
                    return true;
                }
            }
        }
        return false;
    }
    public String getUID(){
        if (isObserver()){
            return getAgentUID();
        if (isObserver()||isAgent()){
            return getHeaderUID();
        }else {
            BaseLoginLogDO loginLogDO = getLoginLog();
            if(loginLogDO != null){
@ -229,7 +244,19 @@ public class PermissionService {
        return false;
    }
    public String getAgentUID() {
    //是否为家属登录
    public boolean isAgent(){
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
        org.json.JSONObject json = getAgent(request);
        String agent = json.has("agent") ? json.getString("agent") : "";
        //为家属登录
        if(StringUtils.isNotBlank(agent)&&"1".equals(agent)){
            return true;
        }
        return false;
    }
    public String getHeaderUID() {
        try {
            HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();

+ 16 - 7
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/consult/ConsultService.java

@ -98,27 +98,36 @@ public class ConsultService {
     * @param reciver_id 接收者ID
     * @param session_id 会话ID
     */
    public String sendWeTempMesMiniProgram(String sender_id, String reciver_id, String session_id,String token,String channelName)throws Exception {
    public String sendWeTempMesMiniProgram(String sender_id, String reciver_id,String sender_type, String session_id,String token,String channelName)throws Exception {
        BasePatientDO patient = basePatientDao.findById(reciver_id);
        if(patient!=null){
            BaseDoctorDO doctorDO = baseDoctorDao.findById(sender_id);
            String key2 = "";
            if("1".equals(sender_type)){
                BasePatientDO tmp = basePatientDao.findById(sender_id);
                if(tmp==null){
                    return "";
                }
                key2 = tmp.getName();
            }else{
                BaseDoctorDO doctorDO = baseDoctorDao.findById(sender_id);
                key2 = doctorDO.getName();
            }
            JSONObject json = new JSONObject();
            json.put("nickName", patient.getName());
            json.put("token", token);
            json.put("channelName", channelName);
            json.put("userId", doctorDO.getId());
            json.put("userName", doctorDO.getName());
            json.put("userId", patient.getId());
            json.put("userName", patient.getName());
            json.put("sessionId", session_id);
            String first = "【key1】您好!【key2】向您发起了视频请求";
            first = first.replace("key1",patient.getName());
            first = first.replace("key2", doctorDO.getName());
            first = first.replace("key2", key2);
            List<BasePatientWechatDo> basePatientWechatDos = basePatientWechatDao.findByWechatIdAndPatientId(wechatId,patient.getId());
            if (basePatientWechatDos.size()>0){
                String openId = basePatientWechatDos.get(0).getOpenid();
                messageUtil.putTemplateWxMessage(wechatId,"template_consult_notice","spthtx",openId,first,null,null,28,json, DateUtil.dateToChineseDate(new Date()),"视频请求","点击接收");
            }
        }else{
            throw new Exception("接收者ID错误,无法找到该账号");
        }
        return "success";
    }

+ 1 - 1
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/contacts/ContactsService.java

@ -248,7 +248,7 @@ public class ContactsService {
                    }
                }
                String[] numTmp = num.split("_");
                String sql = " select pd.device_sn,wd.iccid from  wlyy_patient_device pd inner join wlyy_devices wd  " +
                String sql = " select pd.device_sn,wd.iccid sim from  wlyy_patient_device pd inner join wlyy_devices wd  " +
                        "on pd.device_sn = wd.device_code and pd.del=0 and wd.iccid is not null and pd.category_code in('7','4')  " +
                        "where pd.user='"+patient+"' ";
                List<Map<String,Object>> sims = jdbcTemplate.queryForList(sql);

+ 259 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/device/DeviceManageService.java

@ -0,0 +1,259 @@
package com.yihu.jw.care.service.device;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.care.dao.device.BaseDeviceRepairDao;
import com.yihu.jw.care.dao.sign.BasePatientHelperDao;
import com.yihu.jw.care.service.security.SecurityMonitoringOrderService;
import com.yihu.jw.doctor.dao.BaseDoctorDao;
import com.yihu.jw.entity.base.doctor.BaseDoctorDO;
import com.yihu.jw.entity.patient.BaseDeviceRepairEntity;
import com.yihu.jw.restmodel.web.PageEnvelop;
import com.yihu.jw.util.date.DateUtil;
import com.yihu.mysql.query.BaseJpaService;
import net.sf.json.JSONArray;
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 java.util.*;
@Service
public class DeviceManageService extends BaseJpaService<BaseDeviceRepairEntity,BaseDeviceRepairDao> {
    @Autowired
    JdbcTemplate jdbcTemplate;
    @Autowired
    PatientDeviceService patientDeviceService;
    @Autowired
    SecurityMonitoringOrderService securityMonitoringOrderService;
    @Autowired
    BaseDeviceRepairDao baseDeviceRepairDao;
    @Autowired
    private BasePatientHelperDao patientHelperDao;
    @Autowired
    BaseDoctorDao baseDoctorDao;
    /*获取设备清单 数据范围为我关联的居民绑定的设备清单*/
    public List<Map<String, Object>> getDeviceList(String doctor, String patientName, String categoryCode, int page, int pageSize) {
        String sql = "select Distinct p.id,p.`name`,dd.photo,pd.device_id deviceId,pd.category_code categoryCode,pd.device_name deviceName, " +
                " pd.device_sn deviceSn,pd.czrq,pd.doctor,pd.doctor_name doctorName,pd.agent,pd.agent_name agentName " +
                " from wlyy_patient_device pd,wlyy_devices wd,base_patient p,dm_device dd where p.id = pd.`user`  and pd.del = 0 " +
                " and pd.device_sn = wd.device_code and pd.category_code = dd.category_code and dd.model = wd.device_model and p.del=1 ";
        if (StringUtils.isNotBlank(patientName)) {
            sql += " AND (p.`name` LIKE '%" + patientName + "%' or  p.idcard LIKE '%" + patientName + "%') ";
        }
        if (StringUtils.isNotBlank(categoryCode)) {
            sql += " and pd.category_code ='" + categoryCode + "'";
        }
        if (StringUtils.isNotBlank(doctor)) {//
            BaseDoctorDO doctorByid = baseDoctorDao.findById(doctor);
            // 2是社工 4是助老员
            if (doctorByid.getLevel() == 4) {
                sql += " and EXISTS (SELECT ph.patient from base_patient_helper ph WHERE pd.user = ph.patient AND ph.doctor = '"+doctor+"' and ph.del = '1')";
            } else {
                sql += " and EXISTS (SELECT sr.patient from base_service_package_sign_record sr,base_service_package_record r,base_team_member m " +
                        " WHERE sr.patient = p.id and sr.status=1 and m.team_code = r.team_code and sr.id=r.sign_id " +
                        " and m.doctor_code = '" + doctor + "' and m.del = '1') ";
            }
        }
        sql += " ORDER BY pd.czrq DESC LIMIT " + (page - 1) * pageSize + " , " + pageSize + " ";
        List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
        return list;
    }
    /*设备详细信息*/
    public org.json.JSONObject getDeviceInfo(String patient, String deviceSn) throws Exception {
        return patientDeviceService.getPatientDeviceDetail(patient, deviceSn, null);
    }
    /*监护信息*/
    public JSONObject getMonitoring(String patient, String topicItem) {
        return securityMonitoringOrderService.patientMonitoringInfo(patient, topicItem, null, true);
    }
    /*报修列表*/
    public List<Map<String, Object>> getRepairList(String doctor,String categoryCode, String patientName, int page, int pageSize,String status) {
        BaseDoctorDO doctorById = baseDoctorDao.findById(doctor);
        String repairSql = "";
        if (null != doctorById) {
            //level == 2 社工
            //level == 4 助老员
            if (doctorById.getLevel() == 4) {
                 repairSql ="SELECT DISTINCT" +
                         " dr.order_id as id,dr.repair_peoper_name AS repairName,pd.device_name AS deviceName,pd.category_code as categoryCode,dr.`status` AS `status` ,dr.bind_user_name AS bindName,dr.deal_peoper_name AS dealName,dr.create_time AS createTime" +
                         " FROM" +
                         " wlyy_patient_device pd," +
                         " base_device_repair dr," +
                         " base_patient_helper ph," +
                         " base_patient p" +
                         " WHERE" +
                         " p.id = pd.`user`" +
                         " AND pd.del = 0" +
                         " AND dr.repair_peoper = ph.doctor" +
                         " AND dr.device_sn = pd.device_sn" +
                         " AND pd. USER = ph.patient" +
                         " AND ph.doctor = '"+doctor+"'" +
                         " AND ph.del = '1'";
            } else {
                 repairSql = "SELECT DISTINCT dr.order_id AS id,dr.bind_user_name AS patientName, pd.category_code as categoryCode," +
                        " dr.`status` AS `status`,dr.create_time AS createTime,dr.repair_peoper_name AS repairName,wd.device_name AS deviceName" +
                        " FROM" +
                        " wlyy_patient_device pd," +
                        " wlyy_devices wd," +
                        " base_patient p," +
                        " dm_device dd," +
                        " base_device_repair dr" +
                        " WHERE" +
                        " p.id = pd.`user`" +
                        " AND pd.del = 0" +
                        " AND pd.device_sn = wd.device_code" +
                        " AND pd.category_code = dd.category_code" +
                        " AND dd.model = wd.device_model" +
                        " AND p.del = 1" +
                        " AND pd.device_sn = dr.device_sn" +
                        " and EXISTS (SELECT sr.patient from base_service_package_sign_record sr,base_service_package_record r,base_team_member m " +
                        " WHERE sr.patient = p.id and sr.status=1 and m.team_code = r.team_code and sr.id=r.sign_id AND dr.repair_peoper = m.doctor_code" +
                        " and m.doctor_code = '" + doctor + "' and m.del = '1')";
            }
        }
        if (StringUtils.isNotBlank(patientName)) {
            repairSql += " AND (p.`name` LIKE '%" + patientName + "%' or  p.idcard LIKE '%" + patientName + "%') ";
        }
        if (StringUtils.isNotBlank(categoryCode)) {
            repairSql += " and pd.category_code ='" + categoryCode + "'";
        }
        if (StringUtils.isNotBlank(status)){
            repairSql += " and dr.status ='"+status+"'";
        }
        repairSql += " ORDER BY pd.czrq DESC LIMIT " + (page - 1) * pageSize + " , " + pageSize + " ";
        return jdbcTemplate.queryForList(repairSql);
    }
    /*报修详细信息*/
    public List<BaseDeviceRepairEntity> getRepairInfo(String orderId) {
        return jdbcTemplate.query("SELECT * from base_device_repair WHERE order_id = '" + orderId + "'", new BeanPropertyRowMapper<>(BaseDeviceRepairEntity.class));
    }
    /*报修*/
    public BaseDeviceRepairEntity deviceRepair(BaseDeviceRepairEntity repairEntity,String doctor) {
        BaseDoctorDO doctorDO = baseDoctorDao.findById(doctor);
        List<BaseDeviceRepairEntity> baseDeviceRepairEntities = baseDeviceRepairDao.findbydeviceSn(repairEntity.getDeviceSn());
        if (baseDeviceRepairEntities.size() > 0) {
            for (BaseDeviceRepairEntity baseDeviceRepairEntity : baseDeviceRepairEntities) {
                if (baseDeviceRepairEntity.getStatus() == 0) {
                    return null;
                }
            }
        }
        if (2==doctorDO.getLevel()||4==doctorDO.getLevel()){
                repairEntity.setOrderId(UUID.randomUUID().toString().replaceAll("-", ""));
                repairEntity.setStatus(0);
                repairEntity.setCreateTime(DateUtil.getNowDate());
            }else{
                repairEntity.setStatus(1);
            }
        return baseDeviceRepairDao.save(repairEntity);
    }
    /**
     * 管理员端获取保修列表
     * @param name
     * @param status 保修状态0保修中 1已完成
     * @param page
     * @param size
     * @return
     */
    public PageEnvelop<List<Map<String,Object>>> getDeviceRepairList(String name,String status,Integer page,Integer size){
        List<Map<String,Object>> list = new ArrayList<>();
        Long total = 0l;
        String sql = " SELECT DISTINCT " +
                " dr.id,pd.device_name AS deviceName,repair_peoper repairpeoper,repair_peoper_name repairPeoperName,dr.`status` AS `status` ,pd.category_code,dr.bind_user_name AS bindName,dr.deal_peoper_name AS dealName, " +
                " DATE_FORMAT( dr.create_time ,'%Y-%m-%d %H:%i:%S') createTime " ;
        String countSql = " select count(distinct dr.id) ";
        String filterSql =  " FROM wlyy_patient_device pd,base_device_repair dr,base_patient p " +
                "WHERE p.id = pd.user AND pd.del = 0 AND dr.device_sn = pd.device_sn and p.del=1  ";
        if (StringUtils.isNotBlank(status)){
            filterSql += " and dr.status='"+status+"' ";
        }
        if (StringUtils.isNotBlank(name)){
            filterSql += " and (p.name like '%"+name+"%' or p.idcard='%"+name+"%' ) ";
        }
        total = jdbcTemplate.queryForObject(countSql+filterSql,Long.class);
        filterSql += " order by dr.create_time asc limit "+page*size+","+size;
        list = jdbcTemplate.queryForList(sql+filterSql);
        return PageEnvelop.getSuccessListWithPage("获取成功",list,page,size,total);
    }
    public Map<String,Object> getDeviceRepairDetail(String orderId){
       Map<String,Object> result = null;
        String sql  = " SELECT DISTINCT dr.id, " +
                " pd.device_name AS deviceName,dr.status ,dr.bind_user_name AS bindName,dr.deal_peoper_name AS dealName, " +
                " DATE_FORMAT( dr.create_time ,'%Y-%m-%d %H:%i:%S') createTime,  DATE_FORMAT( pd.czrq ,'%Y-%m-%d %H:%i:%S') czrq, " +
                " dr.show_content,dr.img,dr.feedback " +
                "FROM wlyy_patient_device pd,base_device_repair dr,base_patient p " +
                "WHERE p.id = pd.user AND pd.del = 0 AND dr.device_sn = pd.device_sn and p.del=1 and dr.id='"+orderId+"' ";
        List <Map<String,Object>> list =  jdbcTemplate.queryForList(sql);
        if (list.size()>0){
            result = list.get(0);
        }
        return result;
    }
    public String dealDeviceRepair(String doctorId,String orderId,String dealContent)throws Exception{
        BaseDeviceRepairEntity deviceRepairEntity =  baseDeviceRepairDao.findOne(Long.parseLong(orderId));
        BaseDoctorDO doctorDO = baseDoctorDao.findById(doctorId);
        if (null!=doctorDO){
            if (null != deviceRepairEntity){
                deviceRepairEntity.setFeedback(dealContent);
                deviceRepairEntity.setDealTime(new Date());
                deviceRepairEntity.setDealPeoper(doctorId);
                deviceRepairEntity.setStatus(1);
                deviceRepairEntity.setDealPeoperName(doctorDO.getName());
                baseDeviceRepairDao.save(deviceRepairEntity);
            }else{
                throw new Exception("工单不存在");
            }
        }else {
            throw new Exception("无操作权限");
        }
        return "success";
    }
    /**
     * 获取居民设备监测日志
     * @param patient
     * @param startTime
     * @param endTime
     * @param page
     * @param size
     * @return
     */
    public PageEnvelop<List<Map<String,Object>>> getPatientMonitorData(String patient,String startTime,String endTime,Integer page,Integer size){
        page = page>0?page-1:0;
        String sql = " select dm.name,dm.photo,dm.category_code,modata.patient,modata.patient_name,modata.device_info,modata.relation_code, " +
                "modata.type,DATE_FORMAT(modata.create_time,'%Y-%m-%d %H:%i:%S') create_time  " ;
        String sqlFilter =  " from base_patient_monitor_data modata INNER JOIN wlyy_patient_device pd on modata.device_sn = pd.device_sn and pd.del=0 " +
                "INNER JOIN dm_device dm on pd.device_id = dm.id " +
                "where patient='"+patient+"' and create_time>='"+startTime+"' and create_time<='"+endTime+"' ";
        String sqlCount = " select count(modata.id) ";
        sql = sql+sqlFilter +" ORDER BY modata.id desc limit "+page*size+","+size;
        Long total = jdbcTemplate.queryForObject(sqlCount+sqlFilter,Long.class);
        List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
        return PageEnvelop.getSuccessListWithPage("success",list,page,size,total);
    }
}

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

@ -609,21 +609,24 @@ public class PatientDeviceService extends BaseJpaService<DevicePatientDevice, Pa
    }
    public List<Map<String,Object>> patientDeviceListByTopic(String patient,String serviceTopic){
        String sql = "select dd.photo,pd.device_sn,dd.brands,dd.category_code,dd.model,pd.device_name,date_format(pd.czrq,'%Y-%m-%d %H:%i:%S' ) deviceTime " +
        List<Map<String,Object>> result = new ArrayList<>();
        String sql = "select dd.photo,pd.device_sn,dd.brands,dd.category_code,dd.model,pd.device_name,date_format(pd.czrq,'%Y-%m-%d %H:%i:%S' ) deviceTime,dd.device_type as deviceType " +
                "from dm_device dd INNER JOIN wlyy_patient_device pd on dd.category_code = pd.category_code INNER JOIN wlyy_devices wd on dd.model = wd.device_model and pd.device_sn = wd.device_code \n" +
                "where 1=1 and  pd.del=0 ";
        if (StringUtils.isNotBlank(patient)) {
        sql += " and  pd.`user`='" + patient + "' ";
            sql += " and  pd.`user`='" + patient + "' ";
        }
        if (StringUtils.isNotBlank(serviceTopic)) {
            sql+= " and dd.service_topic like '%"+serviceTopic+"%' ";
        }
        sql+=" order by pd.czrq asc ";
        return jdbcTemplate.queryForList(sql);
        result =  jdbcTemplate.queryForList(sql);
        return result;
    }
    public List<Map<String,Object>> patientEmeDeviceList(String patient){
        String sql = "select dd.photo,pd.device_sn,dd.brands,dd.category_code,dd.model,pd.device_name,date_format(pd.czrq,'%Y-%m-%d %H:%i:%S' ) deviceTime " +
        String sql = "select dd.photo,pd.device_sn,dd.brands,dd.category_code,dd.model,pd.device_name,date_format(pd.czrq,'%Y-%m-%d %H:%i:%S' ) deviceTime,dd.device_type as deviceType " +
                "from dm_device dd INNER JOIN wlyy_patient_device pd on dd.category_code = pd.category_code INNER JOIN wlyy_devices wd on dd.model = wd.device_model and pd.device_sn = wd.device_code \n" +
                "where 1=1 and  pd.del=0 ";
        if (StringUtils.isNotBlank(patient)) {
@ -1049,6 +1052,17 @@ public class PatientDeviceService extends BaseJpaService<DevicePatientDevice, Pa
                    devInfoObj.put("routes", locations);
                    break;
                case "7"://报警器 紧急工单
                    com.alibaba.fastjson.JSONObject response = getAqgDeviceInfo2(deviceSn);
                    //电量
                    if (response.containsKey("remaining_power") && response.get("remaining_power") != null) {
                        devInfoObj.put("remaining_power", response.get("remaining_power"));
                    }
                    //在线状态实时获取
                    if (!response.getBoolean("online")) {//设备在线状态
                        devInfoObj.put("contactStatus",0);
                    } else {
                        devInfoObj.put("contactStatus",1);
                    }
                    break;
                case "12"://监控 视频地址
                    com.alibaba.fastjson.JSONObject tmp = ysDeviceService.getDeviceLiveAddress(patient, deviceSn, 1, null);
@ -1731,17 +1745,19 @@ public class PatientDeviceService extends BaseJpaService<DevicePatientDevice, Pa
    }
    public com.alibaba.fastjson.JSONObject getAqgDeviceInfo2(String imei){
        try {
            String url = MessageFormat.format(AqgConfig.deviceInfo, imei);
            HttpEntity<com.alibaba.fastjson.JSONObject> response = httpClientUtil.aqgCookieHttp(url, null, HttpMethod.GET, getCookie());
            com.alibaba.fastjson.JSONObject json = response.getBody();
            if(!json.getBoolean("success")){
                return  null;
        synchronized (imei.intern()){
            try {
                String url = MessageFormat.format(AqgConfig.deviceInfo, imei);
                HttpEntity<com.alibaba.fastjson.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;
            }
            return json.getJSONObject("obj");
        }catch (Exception e){
            e.printStackTrace();
            return null;
        }
    }
@ -2022,10 +2038,15 @@ public class PatientDeviceService extends BaseJpaService<DevicePatientDevice, Pa
    }
    public com.alibaba.fastjson.JSONObject getSleepDeviceInfo(String deviceSn){
        MultiValueMap<String, String> param = new LinkedMultiValueMap<>();
        param.add("mac", deviceSn);
        HttpEntity<com.alibaba.fastjson.JSONObject> response = httpClientUtil.aqgCookieHttp(AqgConfig.sleepDevice_info, param, HttpMethod.GET, getCookie());
        return response.getBody();
        try {
            MultiValueMap<String, String> param = new LinkedMultiValueMap<>();
            param.add("mac", deviceSn);
            HttpEntity<com.alibaba.fastjson.JSONObject> response = httpClientUtil.aqgCookieHttp(AqgConfig.sleepDevice_info, param, HttpMethod.GET, getCookie());
            return response.getBody();
        }catch (Exception e){
            e.printStackTrace();
            return null;
        }
    }
    public com.alibaba.fastjson.JSONObject sleepDeviceEdit(String deviceSn,Integer heart_check_enable,Integer breath_check_enable,Integer offbed_check_enable,

+ 31 - 9
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/doctor/CareDoctorService.java

@ -83,6 +83,11 @@ public class CareDoctorService extends BaseJpaService<BaseDoctorDO, BaseDoctorDa
     * @return
     */
    public Map<String,Object> doctorSimpleInfo(String doctorId){
        BaseDoctorDO doctorDO = baseDoctorDao.findById(doctorId);
        if (doctorDO==null){
            return null;
        }
        String sql = "SELECT d.id,d.name,d.photo,d.sex ";
        sql += " ,h.org_code orgCode,h.org_name orgName from base_doctor d left join base_doctor_hospital h on d.id = h.doctor_code  and h.del = 1" +
                "  WHERE d.id = '"+doctorId+"' limit 1 ";
@ -90,16 +95,33 @@ public class CareDoctorService extends BaseJpaService<BaseDoctorDO, BaseDoctorDa
        Map<String,Object> map = list.get(0);
        //签约老人数、紧急救助完成数、生活照料完成数、安防监护完成数
        String sql1 = "SELECT COUNT(DISTINCT sr.patient) FROM " +
                " base_service_package_sign_record sr, base_service_package_record r, base_team_member m " +
                " WHERE  sr.id = r.sign_id and sr.status=1 " +
                "  and m.team_code = r.team_code " +
                "  and m.del = '1' and m.doctor_code = '"+doctorId+"'";
        String sql1 = "";
        String sqlLife = "";
        String sqlEmergency = "";
        String sqlSecurity = "";
        String filter = "";
        if (2==doctorDO.getLevel()){//社工
             sql1 = "SELECT COUNT(DISTINCT sr.patient) FROM " +
                    " base_service_package_sign_record sr, base_service_package_record r, base_team_member m " +
                    " WHERE  sr.id = r.sign_id and sr.status=1 " +
                    "  and m.team_code = r.team_code " +
                    "  and m.del = '1' and m.doctor_code = '"+doctorId+"'";
             sqlLife= "SELECT COUNT(*) from base_life_care_order where `status` = 2";
             sqlEmergency= "SELECT COUNT(*) from base_emergency_assistance_order where `status` = 0";
             sqlSecurity= "SELECT COUNT(*) from base_security_monitoring_order where `status` = 0 ";
             filter = " and doctor = '"+doctorId+"'";
        }else if (4==doctorDO.getLevel()){
            sql1 = " SELECT count(DISTINCT p.id) from base_patient_helper ph INNER JOIN base_patient p " +
                    " on ph.patient = p.id and p.del=1 " +
                    "where ph.doctor='"+doctorId+"' and ph.del=1 ";
            sqlLife= "SELECT COUNT(*) from base_life_care_order where `status` = 2";
            sqlEmergency= "SELECT COUNT(*) from base_emergency_assistance_order where `status` = 0";
            sqlSecurity= "SELECT COUNT(*) from base_security_monitoring_order where `status` = 0 ";
            filter = " and doctor = '"+doctorId+"'";
        }else {
            return null;
        }
        Integer signNum = jdbcTemplate.queryForObject(sql1,Integer.class);
        String sqlLife= "SELECT COUNT(*) from base_life_care_order where `status` = 2";
        String sqlEmergency= "SELECT COUNT(*) from base_emergency_assistance_order where `status` = 0";
        String sqlSecurity= "SELECT COUNT(*) from base_security_monitoring_order where `status` = 0 ";
        String filter = " and doctor = '"+doctorId+"'";
        Integer lifeCare = jdbcTemplate.queryForObject(sqlLife+filter,Integer.class);
        Integer emergency = jdbcTemplate.queryForObject(sqlEmergency+filter,Integer.class);
        Integer security = jdbcTemplate.queryForObject(sqlSecurity+filter,Integer.class);

+ 74 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/doctor/DayHandoverService.java

@ -0,0 +1,74 @@
package com.yihu.jw.care.service.doctor;
import com.yihu.jw.care.dao.handover.BaseDayHandoverDao;
import com.yihu.jw.doctor.dao.BaseDoctorDao;
import com.yihu.jw.entity.base.doctor.BaseDoctorDO;
import com.yihu.jw.entity.care.handover.BaseDayHandover;
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 java.util.List;
import java.util.Map;
/**
 * 2022/03/22  wsl
 */
@Service
public class DayHandoverService {
    @Autowired
    JdbcTemplate jdbcTemplate;
    @Autowired
    BaseDayHandoverDao baseDayHandoverDao;
    @Autowired
    BaseDoctorDao baseDoctorDao;
    //保存日常交接
    public BaseDayHandover saveDayHandover(BaseDayHandover baseDayHandover) {
        if (baseDayHandover.getHandoverUser().equals(baseDayHandover.getCreateUser())){
            return null;
        }
        return baseDayHandoverDao.save(baseDayHandover);
    }
    //获取交接列表
    public List<BaseDayHandover> getDayHandoverList(String doctor,String staterDate,String endDate) {
        //发起
        String createSql ="SELECT * from base_day_handover WHERE (create_user = '"+doctor+"' OR handover_user = '"+doctor+"') AND create_time >= '"+staterDate+"' AND create_time <= '"+endDate+"' ORDER BY create_time DESC";
        return jdbcTemplate.query(createSql, new BeanPropertyRowMapper<>(BaseDayHandover.class));
    }
    //获取团队成员
    public List<Map<String, Object>> getTeamMember(String doctor) {
        String memberSql = "SELECT Distinct" +
                " d. NAME AS `name`, d.id AS id " +
                " FROM base_team_member m, base_doctor d" +
                " WHERE " +
                " m.team_code = (SELECT team_code FROM base_team_member WHERE doctor_code ='" + doctor + "' AND del = '1' LIMIT 1) and m.doctor_code = d.id " +
                " and m.del = '1'";
        return jdbcTemplate.queryForList(memberSql);
    }
    //获取日常交接详情
    public Object getDayHandoverDetails(String id){
        BaseDayHandover dayHandoverDo = baseDayHandoverDao.findById(id);
        return dayHandoverDo;
    }
    //判断是否是社工医生
    public boolean doctorIf(String doctorCode){
        BaseDoctorDO doctorDO = baseDoctorDao.findById(doctorCode);
        if (doctorDO.getLevel()!=1) {
            return false;
        }
        return true;
    }
}

+ 2 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/family/PatientFamilyMemberService.java

@ -513,6 +513,7 @@ public class PatientFamilyMemberService extends BaseJpaService<BasePatientFamily
            obj.put("photo", StringUtils.isEmpty(p.getPhoto()) ? "" : p.getPhoto());
            obj.put("mobile", StringUtils.isEmpty(p.getMobile()) ? "" : p.getMobile());
            obj.put("address", StringUtils.isEmpty(p.getAddress()) ? "" : p.getAddress());
            obj.put("age", StringUtils.isBlank(p.getIdcard())?null:IdCardUtil.getAgeForIdcard(p.getIdcard()));
            obj.put("familyRelation", "-1");
            obj.put("familyRelationName", "自己");
            obj.put("isAuthorize", 1);//0:未授权,1:已授权
@ -575,6 +576,7 @@ public class PatientFamilyMemberService extends BaseJpaService<BasePatientFamily
                obj.put("isAuthorize", isAuthorize);//0:未授权,1:已授权
                obj.put("birthday", map.get("birthday"));
                obj.put("idcard", StringUtils.isEmpty(String.valueOf(map.get("idcard"))) ? "" : map.get("idcard").toString());
                obj.put("age", null==map.get("idcard")?null:IdCardUtil.getAgeForIdcard(map.get("idcard").toString()));
                obj.put("photo", map.get("photo"));
                obj.put("mobile", map.get("mobile"));
                obj.put("address", StringUtils.isEmpty(String.valueOf(map.get("address"))) ? "" : map.get("address"));

+ 2 - 2
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/label/PatientLableService.java

@ -42,8 +42,8 @@ public class PatientLableService extends BaseJpaService<WlyyPatientLabelDO, Wlyy
                "LEFT JOIN (SELECT DISTINCT l.id,l.label_code  " +
                "from base_service_package_sign_record sr,base_service_package_record r  " +
                "                ,base_patient p,wlyy_patient_label l " +
                "                WHERE sr.id = r.sign_id and sr.status=1 and r.team_code = '"+teamCode+"' " +
                "                and sr.patient = p.id and p.id = l.patient and l.label_type = 1) " +
                "                WHERE sr.id = r.sign_id  and sr.status=1 and r.team_code = '"+teamCode+"' " +
                "                and sr.patient = p.id and p.id = l.patient and l.label_type = 1 AND p.del=1 ) " +
                "a on dict.dict_code = a.label_code  " +
                "where dict.dict_name = '"+ConstantUtil.DICT_SERVICE_TYPE+"' and dict_code<>5  " +
                "GROUP BY labelCode,labelName ";

+ 232 - 45
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/lifeCare/LifeCareOrderService.java

@ -8,6 +8,7 @@ import com.yihu.jw.care.service.common.OrderNoService;
import com.yihu.jw.care.service.doctor.DoctorServicePermissionsService;
import com.yihu.jw.care.service.message.BaseServiceNewsService;
import com.yihu.jw.care.service.pay.PayService;
import com.yihu.jw.care.service.role.RoleService;
import com.yihu.jw.care.util.MessageUtil;
import com.yihu.jw.doctor.dao.BaseDoctorDao;
import com.yihu.jw.doctor.dao.BaseDoctorHospitalDao;
@ -16,20 +17,17 @@ import com.yihu.jw.entity.base.doctor.BaseDoctorHospitalDO;
import com.yihu.jw.entity.base.org.BaseOrgDO;
import com.yihu.jw.entity.base.patient.BasePatientDO;
import com.yihu.jw.entity.base.wx.BasePatientWechatDo;
import com.yihu.jw.entity.care.doorCoach.BaseDoorCoachOrderDO;
import com.yihu.jw.entity.care.lifeCare.LifeCareCancelLogDO;
import com.yihu.jw.entity.care.lifeCare.LifeCareFeeDetailDO;
import com.yihu.jw.entity.care.lifeCare.LifeCareItemDictDO;
import com.yihu.jw.entity.care.lifeCare.LifeCareOrderDO;
import com.yihu.jw.entity.door.BaseAdminServiceDynamic;
import com.yihu.jw.entity.order.BusinessOrderDO;
import com.yihu.jw.entity.patient.Patient;
import com.yihu.jw.order.dao.BusinessOrderDao;
import com.yihu.jw.org.dao.BaseOrgDao;
import com.yihu.jw.patient.dao.BasePatientDao;
import com.yihu.jw.restmodel.ResponseContant;
import com.yihu.jw.restmodel.web.PageEnvelop;
import com.yihu.jw.rm.base.BaseRequestMapping;
import com.yihu.jw.util.common.IdCardUtil;
import com.yihu.jw.util.date.DateUtil;
import com.yihu.jw.util.entity.EntityUtils;
@ -42,6 +40,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.dao.DataAccessException;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
@ -96,6 +95,8 @@ public class LifeCareOrderService extends BaseJpaService<LifeCareOrderDO, LifeCa
    private BaseAdminServiceDynamicDao baseAdminServiceDynamicDao;
    @Autowired
    private DoctorServicePermissionsService doctorServicePermissionsService;
    @Autowired
    private RoleService roleService;
    //是否开启支付 false 不需要支付
    public static final boolean  isNeedPay = false;
@ -168,7 +169,7 @@ public class LifeCareOrderService extends BaseJpaService<LifeCareOrderDO, LifeCa
    /**
     * 根据id获取服务工单信息
     * 根据工单id获取相应的生活照料工单
     * @param id
     * @return
     */
@ -212,13 +213,18 @@ public class LifeCareOrderService extends BaseJpaService<LifeCareOrderDO, LifeCa
     * @param doctor
     * @return
     */
    public Map<String, Integer> getNumGroupByStatus(String doctor) {
    public Map<String, Integer> getNumGroupByStatus(String doctor,String code) {
        List<BaseDoctorHospitalDO> doctorHospitalDOs = doctorHospitalDao.findByDoctorCode(doctor);
        String hospital = doctorHospitalDOs.get(0).getOrgCode();
        String filter = " ";
        if (StringUtils.isNotBlank(code)){
            filter = " and fed.code='"+code+"' ";
        }
        String sql = "SELECT a.status, COUNT(DISTINCT a.id) as num FROM base_life_care_order a " ;
        String sql = "SELECT a.status, COUNT(DISTINCT a.id) as num FROM base_life_care_order a " +
                " INNER JOIN base_life_care_fee_detail fed on a.id = fed.order_id " ;
        sql +=  "  WHERE  a.hospital = ? and a.pay_status>0 and a.status<>0 group BY a.status";
        sql +=  "  WHERE  a.hospital = ? and a.pay_status>0 and a.status<>0 "+filter+" group BY a.status";
        List<Map<String, Object>> list = jdbcTemplate.queryForList(sql, hospital);
        Map<String, Integer> map = new HashMap<>();
        //状态 待服务 1、已完成 2 、已取消 -1 已签到 3
@ -236,13 +242,43 @@ public class LifeCareOrderService extends BaseJpaService<LifeCareOrderDO, LifeCa
        return map;
    }
    /**
     * 管理员端生活照料获取顶部状态栏订单各分类总条数
     * @param area
     * @param level 1省2市3区县4机构5团队6医生
     * @return
     */
    public Map<String, Integer> adminGetNumGroupByStatus(String area,Integer level) {
       String olderFilter = roleService.getOlderRoleSQL(area,level+"");
        String sql = "SELECT a.status, COUNT(DISTINCT a.id) as num FROM base_life_care_order a " +
                " WHERE  1=1 and a.pay_status>0 and a.status<>0 " ;
        sql +=  olderFilter.replace("{patient}","a.patient")+ "   group BY a.status";
        List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
        Map<String, Integer> map = new HashMap<>();
        //状态 待服务 1、已完成 2 、已取消 -1 已签到 3
        map.put("1",0);
        map.put("2",0);
        map.put("3",0);
        map.put("-1",0);
        int total = 0;
        for (Map<String, Object> one:list){
            map.put(String.valueOf(one.get("status")), Integer.valueOf(String.valueOf(one.get("num"))));
            total+=Integer.valueOf(String.valueOf(one.get("num")));
        }
        map.put("total", total);
        return map;
    }
    /**
     * 医生/助老员-查询-工单列表
     *
     * @return
     */
    public JSONObject queryBriefList(String doctorCode,String name,String phone,Integer status,int page, int size) {
    public JSONObject queryBriefList(String doctorCode,String name,String phone,Integer status,int page, int size,String code) {
        JSONObject result = new JSONObject();
        List<Map<String,Object>> sqlResultlist = new ArrayList<>();
        //服务权限
@ -288,15 +324,21 @@ public class LifeCareOrderService extends BaseJpaService<LifeCareOrderDO, LifeCa
                "  o.type as type, " +
                "  o.serve_lon as lon, " +
                "  o.serve_lat as lat, " +
                "  o.`status` as status " +
                "  o.`status` as status, " +
                "  fd.`code`" +
                " FROM " +
                " ( base_life_care_order o " +
                " LEFT JOIN base_patient p ON o.patient = p.id ) "+
                " LEFT JOIN base_patient p ON o.patient = p.id " +
                " INNER JOIN base_life_care_fee_detail fd ON o.id = fd.order_id ) "+
                " WHERE " +
                "  o.hospital = '{hospital}' " +buffer+
                " AND ( o.`status` = {status} OR -100 = {status} ) and o.pay_status>0 and o.status<>0 " +
                " ORDER BY o.create_time desc " +
                " LIMIT {start},{end};";
                " AND ( o.`status` = {status} OR -100 = {status} ) and o.pay_status>0 and o.status<>0 ";
        if (StringUtils.isNotBlank(code)){
            sql +=" AND fd.`code` = '"+code+"'";
        }
        sql +=" ORDER BY o.create_time desc " +
               "  LIMIT {start},{end};";
        String finalSql = sql.replace("{hospital}", hospital)
                .replace("{status}", String.valueOf(status))
@ -308,10 +350,15 @@ public class LifeCareOrderService extends BaseJpaService<LifeCareOrderDO, LifeCa
                " FROM  " +
                "   base_life_care_order o  " +
                " LEFT JOIN base_patient p ON o.patient = p.id " +
                " INNER JOIN base_life_care_fee_detail fd ON o.id = fd.order_id" +
                " WHERE  " +
                "  o.hospital = '{hospital}' " +buffer+
                " AND (o.`status` = {status} or -100 = {status}) and o.pay_status>0 and o.status<>0 ";
        if (StringUtils.isNotBlank(code)){
            countSql +=" AND fd.`code` = '"+code+"'";
        }
        String finqlCountSql = countSql.replace("{hospital}", hospital)
                .replace("{status}", String.valueOf(status));
@ -345,13 +392,108 @@ public class LifeCareOrderService extends BaseJpaService<LifeCareOrderDO, LifeCa
        return result;
    }
    /**
     * 管理员-查询-工单列表
     * @param area
     * @param level 1省2市3区县4机构5团队6医生
     */
    public PageEnvelop<List<Map<String,Object>>> adminQueryBriefList(String area,Integer level,String name,String phone,Integer status,int page, int size) {
        List<Map<String,Object>> sqlResultlist = new ArrayList<>();
        String olderFilter = roleService.getOlderRoleSQL(area,level+"");
        name = null == name ? "" : name;
        phone = null == phone ? "" : phone;
        status = null == status ? -100 : status;
        int start = 0 == page ? page++ : (page - 1) * size;
        int end = 0 == size ? 15 : size;
        StringBuffer buffer = new StringBuffer();
        if (StringUtils.isNoneBlank(name)){
            buffer.append(" AND (o.`patient_name` like '%"+name+"%' or p.idcard like '%"+name+"%')");
        }else if (StringUtils.isNoneBlank(phone)){
            buffer.append(" AND o.`proxy_patient_phone` like '%"+phone+"%'");
        }
        String sql = "SELECT " +
                "  p.name AS patientName, " +
                "  p.photo AS photo, " +
                "  p.idcard," +
                "  case p.sex  " +
                "  when 1 then '男'  " +
                "  when 2 then '女' " +
                "  end AS sex, " +
                "  TIMESTAMPDIFF(year,p.birthday,NOW()) AS age," +
                "  o.id as orderId, " +
                "  o.patient_phone as phone, " +
                "  o.proxy_patient as proxyPatient, " +
                "  o.patient as patient, " +
                "  o.number as number, " +
                "  o.patient_expected_serve_time as serveTime, o.doctor, o.doctor_name as doctorName, " +
                "  o.serve_address as address, " +
                "  o.type as type, " +
                "  o.serve_lon as lon, " +
                "  o.serve_lat as lat, " +
                "  o.`status` as status " +
                " FROM " +
                " ( base_life_care_order o " +
                " LEFT JOIN base_patient p ON o.patient = p.id ) "+
                " WHERE 1=1 " +olderFilter.replace("{patient}","o.patient")+
                "  " +buffer+
                " AND ( o.`status` = {status} OR -100 = {status} ) and o.pay_status>0 and o.status<>0 " +
                " ORDER BY o.create_time desc " +
                " LIMIT {start},{end};";
        String finalSql = sql.replace("{status}", String.valueOf(status))
                .replace("{start}", String.valueOf(start))
                .replace("{end}", String.valueOf(end));
        String countSql = "SELECT  " +
                "   count(o.id)  " +
                " FROM  " +
                "   base_life_care_order o  " +
                " LEFT JOIN base_patient p ON o.patient = p.id " +
                " WHERE  1=1 " +olderFilter.replace("{patient}","o.patient")+
                " " +buffer+
                " AND (o.`status` = {status} or -100 = {status}) and o.pay_status>0 and o.status<>0 ";
        String finqlCountSql = countSql.replace("{status}", String.valueOf(status));
        sqlResultlist = jdbcTemplate.queryForList(finalSql);
        for (Map<String,Object> orderDO:sqlResultlist){
            orderDO.put("feeDetails",getFeeDetails(orderDO.get("orderId").toString()));
        }
        Long count;
        count = jdbcTemplate.queryForObject(finqlCountSql, Long.class);
        return PageEnvelop.getSuccessListWithPage("success",sqlResultlist,page,size,count);
    }
    /**
     * 查找服务项字典
     *   v1.7.1 机构的生活照料服务项目必须配置才有返回
     * @return
     */
    public List<LifeCareItemDictDO> findItemDict(String orgCode){
        return lifeCareItemDictDao.findByOrgCode(orgCode);
        String sql = " select dict.*,org.address,org.photo as orgPhoto from base_life_care_item_dict dict " +
                " LEFT JOIN base_org org  on dict.org_code = org.`code` where 1=1 " ;
        if (StringUtils.isNotBlank(orgCode)){
            sql += " and dict.org_code='"+orgCode+"' ";
        }
        sql+=  " and dict.del=1 order by dict.sort asc  ";
        List<LifeCareItemDictDO> list = jdbcTemplate.query(sql,new BeanPropertyRowMapper<>(LifeCareItemDictDO.class));
        return list;
    }
    /**
     * 获取居民已预约生活照料项目
     * @param patient
     * @return
     */
    public List<Map<String,Object>> findPatientItemDict(String patient){
        String sql = " select distinct dict.* from base_life_care_item_dict dict " +
                "INNER JOIN base_org org  on dict.org_code = org.`code` " +
                "INNER JOIN base_life_care_fee_detail fed on fed.`code` = dict.`code` " +
                "INNER join base_life_care_order ord on fed.order_id = ord.id " +
                " where ord.patient='"+patient+"' and ord.`status` >0 ";
        List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
        return list;
    }
    /**
@ -359,16 +501,22 @@ public class LifeCareOrderService extends BaseJpaService<LifeCareOrderDO, LifeCa
     *
     * @return
     */
    public JSONObject queryInfoList(String patient,Integer status, int page, int size) {
    public JSONObject queryInfoList(String patient,Integer status,String fedCode ,int page, int size) {
        JSONObject result = new JSONObject();
        status = null == status ? -100 : status;
        int start = 0 == page ? page++ : (page - 1) * size;
        int end = 0 == size ? 15 : size;
        String fedSql = " ";
        if (StringUtils.isNotBlank(fedCode)){
            fedSql = " and EXISTS ( " +
                    " select 1 from base_life_care_fee_detail fed where fed.order_id = o.id and fed.code='"+fedCode+"' " +
                    " )  ";
        }
        String sql = "SELECT *  FROM  base_life_care_order o " +
                " WHERE (o.patient = '{patient}' or o.proxy_patient = '{patient}') "+
                " AND (o.`status` = {status} or -100 = {status})" +
                " AND (o.`status` = {status} or -100 = {status})" +fedSql+
                "  group by o.id " +
                " ORDER BY o.create_time desc" +
                " LIMIT {start},{end} ";
@ -381,7 +529,7 @@ public class LifeCareOrderService extends BaseJpaService<LifeCareOrderDO, LifeCa
        String countSql = "SELECT count(DISTINCT o.id) FROM base_life_care_order o " +
                " WHERE  " +
                "  (o.patient = '{patient}' or o.proxy_patient = '{patient}') " +
                " AND (o.`status` = {status} or -100 = {status})";
                " AND (o.`status` = {status} or -100 = {status})"+fedSql;
        String finqlCountSql = countSql.replace("{patient}", patient)
                .replace("{status}", String.valueOf(status));
@ -576,15 +724,7 @@ public class LifeCareOrderService extends BaseJpaService<LifeCareOrderDO, LifeCa
                orderDO.setProxyPatient(proxyPatient);
                orderDO.setProxyPatientName(doctorDO.getName());
                orderDO.setProxyPatientPhone(doctorDO.getMobile());
                if(isNeedPay){
                    List<BasePatientWechatDo> basePatientWechatDos = basePatientWechatDao.findByWechatIdAndPatientId(wxId,orderDO.getPatient());
                    if (basePatientWechatDos.size()>0){
                        JSONObject json = new JSONObject();
                        String openId = basePatientWechatDos.get(0).getOpenid();
                        messageUtil.putTemplateWxMessage(wxId,"template_process_feedback","shzldzf",openId,null,null,"请在30分钟内完成支付",3,json,
                                DateUtil.dateToChineseDate(new Date()),"社工已为您代预约生活照料","待支付");
                    }
                }
            }
            if(StringUtils.isNotBlank(agent)){
                BasePatientDO agentPatient = patientDao.findById(agent);
@ -622,6 +762,14 @@ public class LifeCareOrderService extends BaseJpaService<LifeCareOrderDO, LifeCa
            return result;
        }
        if(StringUtils.isEmpty(orderDO.getHospital())){
            result.put(ResponseContant.resultFlag, ResponseContant.fail);
            String failMsg = "当前服务机构为空,无法提交申请";
            result.put(ResponseContant.resultMsg, failMsg);
            logger.error(failMsg);
            return result;
        }
        if (StringUtils.isNotBlank(orderDO.getHospital())){
            BaseOrgDO orgDO = baseOrgDao.findByCode(orderDO.getHospital());
            orderDO.setHospitalName(orgDO.getName());
@ -669,27 +817,33 @@ public class LifeCareOrderService extends BaseJpaService<LifeCareOrderDO, LifeCa
        }
        //给签约医生发送预约短信
        String sql ="SELECT i.code,r.team_code,pack.org_code,pack.org_name from base_service_package_sign_record sr,base_service_package_record r, base_service_package_item i,base_service_package pack  \n" +
                "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 \n" +
                "and  sr.patient  = '"+orderDO.getPatient()+"' and i.code='lifeCare' ";
        List<Map<String,Object>> items = jdbcTemplate.queryForList(sql);
        if(items.size()==0){
            result.put(ResponseContant.resultFlag, ResponseContant.fail);
            String failMsg = "居民未签约生活照料服务,无法发起申请";
            result.put(ResponseContant.resultMsg, failMsg);
            logger.error(failMsg);
            return result;
        }
        Map<String,Object> mapTmp = items.get(0);
        List<BaseDoctorDO> doctorDOS = baseTeamMemberDao.findAllMembersByLevel(mapTmp.get("team_code").toString(),2);
        for (BaseDoctorDO doctorDO:doctorDOS){
            try {
                if (StringUtils.isNotBlank(doctorDO.getMobile())){
                    messageUtil.sendTXYSJson("1099807",doctorDO.getMobile(),orderDO.getPatientName(),"生活照料");
        try {
            String hospitalDoctorSql = "SELECT d.mobile AS mobile FROM base_doctor_hospital h,base_doctor d WHERE h.doctor_code = d.id " +
                    " AND d.doctor_level = 4" +
                    " AND h.org_code = '"+orderDO.getHospital()+"'" +
                    " AND h.del = 1" +
                    " AND d.del = 1" +
                    " AND d.mobile IS NOT NULL" +
                    " AND d.mobile != ''";
            List<Map<String, Object>> maps = jdbcTemplate.queryForList(hospitalDoctorSql);
            if (maps.size() != 0) {
                for (Map<String, Object> map : maps) {
                    messageUtil.sendTXYSJson("1099807", map.get("mobile").toString(), orderDO.getPatientName(), "生活照料");
                }
            }catch (Exception e){
                e.printStackTrace();
            }
            if(isNeedPay&&3==orderDO.getType()){
                List<BasePatientWechatDo> basePatientWechatDos = basePatientWechatDao.findByWechatIdAndPatientId(wxId,orderDO.getPatient());
                if (basePatientWechatDos.size()>0){
                    JSONObject json = new JSONObject();
                    String openId = basePatientWechatDos.get(0).getOpenid();
                    messageUtil.putTemplateWxMessage(wxId,"template_process_feedback","shzldzf",openId,null,null,"请在30分钟内完成支付",3,json,
                            DateUtil.dateToChineseDate(new Date()),"助老员已为您代预约生活照料","待支付");
                }
            }
        } catch (DataAccessException e) {
            e.printStackTrace();
        }
        return result;
@ -940,4 +1094,37 @@ public class LifeCareOrderService extends BaseJpaService<LifeCareOrderDO, LifeCa
        }
    }
    /**
     * 智慧照护
     */
    public List<Map<String, Object>> wisdomCare(String orgCode){
        String sql = "SELECT " +
                " dict. CODE, " +
                " dict. NAME, " +
                " dict.life_care_img, " +
                " dict.pad_icon_img, " +
                " A.total " +
                " FROM " +
                " base_life_care_item_dict dict " +
                " LEFT JOIN ( " +
                " SELECT " +
                " count(DISTINCT o.id) total, " +
                " fd. CODE " +
                " FROM " +
                " base_life_care_order o " +
                " INNER JOIN base_life_care_fee_detail fd ON o.id = fd.order_id " +
                " WHERE " +
                " o.`status` = 1 " +
                " AND o.hospital = '"+orgCode+"' " +
                " GROUP BY " +
                " fd.`code` " +
                " ) A ON dict. CODE = A. CODE " +
                " WHERE " +
                " dict.del = 1 " +
                " AND dict.org_code = '"+orgCode+"'";
        List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
        return list;
    }
}

+ 86 - 4
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/message/BaseServiceNewsService.java

@ -11,6 +11,7 @@ import com.yihu.jw.entity.care.device.DevicePatientDevice;
import com.yihu.jw.entity.care.message.BaseServiceNews;
import com.yihu.jw.org.dao.BaseOrgDao;
import com.yihu.jw.patient.dao.BasePatientDao;
import com.yihu.jw.restmodel.web.PageEnvelop;
import com.yihu.jw.util.common.IdCardUtil;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
@ -64,7 +65,8 @@ public class BaseServiceNewsService {
            orgCodes = orgCodes.replaceAll(",","','");
            filter = " and code not in ('"+orgCodes+"')";
        }
        String sql = "SELECT code,name,brief,address,photo,mobile,longitude,latitude,type from base_org WHERE type in ('3','4') and del =1";
        String sql = "SELECT code,name,brief,address,photo,mobile,longitude,latitude,type from base_org WHERE type in ('3','4','6') and del =1 " +
                " and code not in ('zdjsylfwyxgszhfgs') ";
        sql += filter;
        List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
        return list;
@ -75,7 +77,7 @@ public class BaseServiceNewsService {
     * @return
     */
    public List<Map<String,Object>> findPatinetByName(String name){
        String sql = "SELECT p.id,p.`name`,p.address,p.photo,p.mobile,p.lat_lon latLon,sex,idcard,p.pad_imei,p.openid,CAST(archive_type AS char) type from base_patient p\n" +
        String sql = "SELECT p.id,p.`name`,p.address,p.photo,p.mobile,p.lat_lon latLon,sex,idcard,p.pad_imei,p.openid,CAST(archive_type AS char) type,p.sign_status as signStatus from base_patient p\n" +
                "WHERE p.del = 1 and p.name like '%"+name+"%'";
        List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
        List<DevicePatientDevice> feeDetail = patientDeviceDao.findByAll();
@ -130,7 +132,7 @@ public class BaseServiceNewsService {
                "WHERE t.patient = p.id and t.del=1 and t.`status`=1 and p.del =1  " +filter+
                "UNION  " +
                "SELECT p.id,p.`name`,p.address,p.photo,p.mobile,p.lat_lon latLon,sex,idcard,archive_type type,p.pad_imei,p.openid from base_service_package_sign_record t,base_patient p " +
                "WHERE t.patient = p.id and t.`status`=1 and p.del =1"+filter;
                "WHERE t.patient = p.id and t.`status`=1 and p.del =1 and p.sign_status=1 "+filter;
        List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
        for (Map<String,Object> map:list){
            String patient = map.get("id").toString();
@ -179,6 +181,80 @@ public class BaseServiceNewsService {
        return list;
    }
    /**
     * 查找所有未签约老人
     * 社区老人
     * @return
     */
    public PageEnvelop<List<Map<String,Object>>> findUnSignPatientLocations(Integer page,Integer size){
        page = page>0?page-1:0;
        String filter =" ";
        String sqltmp = "SELECT GROUP_CONCAT(dict_code) orgCodes from wlyy_hospital_sys_dict WHERE dict_name = 'jkzl_child' or dict_name = 'jkzl_older' ";
        List<Map<String,Object>> listtmp =  jdbcTemplate.queryForList(sqltmp);
        if(listtmp.size()>0){
            String orgCodes = String.valueOf(listtmp.get(0).get("orgCodes"));
            if (StringUtils.isNotBlank(orgCodes)){
                orgCodes = orgCodes.replaceAll(",","','");
                filter = " and p.id not in ('"+orgCodes+"') ";
            }
        }
        String sql = "SELECT p.id,p.`name`,p.address,p.photo,p.mobile,p.lat_lon latLon,sex,idcard,archive_type type,p.pad_imei,p.openid " +
                " from base_patient p " +
                "WHERE  p.del =1 and p.archive_type=1 and p.sign_status=0 and p.lat_lon is not null "+filter+" limit "+page*size+","+size;
        String sqlCount = "SELECT count(p.id) " +
                " from base_patient p " +
                "WHERE  p.del =1 and p.archive_type=1 and p.sign_status=0 and p.lat_lon is not null "+filter ;
        Long count = jdbcTemplate.queryForObject(sqlCount,Long.class);
        List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
        for (Map<String,Object> map:list){
            String patient = map.get("id").toString();
            sql = "select label_code,label_name from wlyy_patient_label where label_type=1 and patient='"+patient+"' ";
            List<Map<String,Object>> labels = jdbcTemplate.queryForList(sql);
            if (labels.size()>0){
                map.put("label_code",labels.get(0).get("label_code"));
                map.put("label_name",labels.get(0).get("label_name"));
            }
            else {
                map.put("label_code",null);
                map.put("label_name",null);
            }
            String devices= deviceService.getPatientDeviceCategoryCode(map.get("id").toString());
            if ("0".equals(devices)){
                map.put("devices",new ArrayList<>());
            }else {
                String[] ss = devices.split(",");
                map.put("devices",ss);
            }
            String idcard = map.get("idcard").toString();
            map.put("age", IdCardUtil.getAgeForIdcard(idcard));
            sql = " select CONCAT(o.serve_lat,',',o.serve_lon) latLon,'紧急呼叫' as serverDesc,o.org_code orgCode,o.device_sn from base_emergency_assistance_order o where o.patient='"+patient+"' and `status`=1 " +
                    " UNION All  " +
                    "select CONCAT(o.serve_lat,',',o.serve_lon) latLon,o.serve_desc serverDesc,o.hospital orgCode,o.device_sn from base_security_monitoring_order o where o.patient='"+patient+"' and `status`=1 ";
            List<Map<String,Object>> orderPoints = jdbcTemplate.queryForList(sql);
            for (Map<String,Object> tmp:orderPoints){
                if (null!=tmp.get("device_sn")){
                    String device_sn = tmp.get("device_sn").toString();
                    if (StringUtils.isNotBlank(device_sn)){
                        DeviceDetail deviceDetail = deviceDetailDao.findBySn(device_sn);
                        if (null!=deviceDetail){
                            tmp.put("contactStatus",deviceDetail.getContactStatus());
                            tmp.put("categoryCode",deviceDetail.getCategoryCode());
                        }
                    }
                }
                String orgCode = tmp.get("orgCode").toString();
                BaseOrgDO orgDO = orgDao.findByCode(orgCode);
                if (null!=orgDO){
                    tmp.put("orgType",orgDO.getType());
                }
            }
            map.put("orderPoints",orderPoints);
        }
        return PageEnvelop.getSuccessListWithPage("success",list,page,size,count);
    }
    public List<Map<String , Object>> getLatLon(){
        String filter =" ";
        String sqltmp = "SELECT GROUP_CONCAT(dict_code) orgCodes from wlyy_hospital_sys_dict WHERE dict_name = 'jkzl_helper' or dict_name = 'jkzl_teacher' ";
@ -252,7 +328,7 @@ public class BaseServiceNewsService {
     * 添加服务动态信息-大屏展示用
     * @param name
     * @param code
     * @param type 类型 1上门辅导、2发起咨询、3发起生活照料、4代预约
     * @param type 类型 1上门辅导、2发起咨询、3发起生活照料、4代预约、5紧急救助、6安防
     */
    public void addServiceNews(String name,String code,String type,String patientName,String relationCode,Integer userType){
        BaseServiceNews serviceNews = new BaseServiceNews();
@ -275,6 +351,12 @@ public class BaseServiceNewsService {
            case "4":
                content = "为"+patientName+"代预约";
                break;
            case "5":
                content = "发起了紧急救护";
                break;
            case "6":
                content = "发起了安防监护";
                break;
            default:
                content = "";
                break;

+ 23 - 7
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/message/DoctorMessageService.java

@ -8,13 +8,13 @@ import com.yihu.jw.care.dao.message.OrgNoticeDao;
import com.yihu.jw.care.dao.message.UserNoticeDao;
import com.yihu.jw.care.dao.security.SecurityMonitoringOrderDao;
import com.yihu.jw.care.service.doctor.DoctorServicePermissionsService;
import com.yihu.jw.care.service.role.RoleService;
import com.yihu.jw.doctor.dao.BaseDoctorDao;
import com.yihu.jw.doctor.dao.BaseDoctorHospitalDao;
import com.yihu.jw.entity.base.doctor.BaseDoctorDO;
import com.yihu.jw.entity.base.doctor.BaseDoctorHospitalDO;
import com.yihu.jw.entity.base.notice.UserNoticeDO;
import com.yihu.jw.entity.care.message.OrgNoticeDO;
import com.yihu.jw.entity.hospital.message.SystemMessageDO;
import com.yihu.jw.hospital.message.dao.SystemMessageDao;
import com.yihu.jw.restmodel.ResponseContant;
import com.yihu.jw.restmodel.web.PageEnvelop;
@ -52,6 +52,8 @@ public class DoctorMessageService {
    private BaseDoctorHospitalDao doctorHospitalDao;
    @Autowired
    private DoctorServicePermissionsService doctorServicePermissionsService;
    @Autowired
    private RoleService roleService;
    /**
     *
@ -317,9 +319,24 @@ public class DoctorMessageService {
        return orgNoticeDao.findOne(noticeId);
    }
    public List<SystemMessageDO> getDeviceLostMessageList(String doctor){
        List<SystemMessageDO> systemMessageDOS = messageDao.getByReceiverAndType(doctor,"43");
        return systemMessageDOS;
    public  List<Map<String, Object>> getDeviceLostMessageList(String doctor,String deviceCode,String deviceName,String area,String level){
       // List<SystemMessageDO> systemMessageDOS = messageDao.getByReceiverAndType(doctor,"43");
        String sql =  "select DISTINCT sm.id as id,sm.type AS type,sm.title AS title,sm.sender AS sender,sm.sender_name AS senderName,\n" +
                "  sm.receiver AS receiver,sm.receiver_name AS receiver_name,sm.relation_code AS relationCode,\n" +
                "  sm.data AS data,sm.is_read AS isRead,DATE_FORMAT(sm.create_time,'%Y-%m-%d') AS createTime,sm.sender_photo AS sender_photo,pd.category_code,pd.device_name" +
                "  from base_system_message sm LEFT JOIN wlyy_patient_device pd ON sm.relation_code = pd.device_sn where sm.receiver = '"+doctor+"' AND sm.type=43 and sm.del=1 ";
        if (StringUtils.isNotBlank(deviceCode)&&!"''".equals(deviceCode)){
            sql +=" AND pd.category_code = '"+deviceCode+"'";
        }
        if (StringUtils.isNotBlank(deviceName)){
            sql += " and pd.device_name LIKE '%"+deviceName+"%'";
        }
        sql+= "  order by sm.create_time desc";
        List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
        return maps;
    }
    public Integer todoworkTotal(String doctor){
@ -361,7 +378,7 @@ public class DoctorMessageService {
                    total += jdbcTemplate.queryForObject(sql,Integer.class);
                }
                if(doctorServicePermissionsService.isPermission(doctor,7)==1){
                /*if(doctorServicePermissionsService.isPermission(doctor,7)==1){
                    List<BaseDoctorHospitalDO> doctorHospitalDOs = doctorHospitalDao.findByDoctorCode(doctor);
                    if (doctorHospitalDOs.size()>0){
                        String hospital = doctorHospitalDOs.get(0).getOrgCode();
@ -369,8 +386,7 @@ public class DoctorMessageService {
                                "WHERE  o.hospital = '"+hospital+"'  AND o.`status` = 1 ";
                        total += jdbcTemplate.queryForObject(sql,Integer.class);
                    }
                }
                }*/
            }
            if (3==doctorDO.getLevel()){//教师
                //上门、在线咨询

+ 32 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/org/BaseOrgService.java

@ -9,6 +9,7 @@ import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
/**
 * Created by yeshijie on 2021/3/3.
@ -19,6 +20,8 @@ public class BaseOrgService extends BaseJpaService<BaseOrgDO, BaseOrgDao> {
    @Autowired
    private BaseOrgDao orgDao;
    private final String orgCode = "zdjsylfwyxgszhfgs";
    public List<BaseOrgDO> findOrgList(String type,String name,String orgCode){
        String sql = "select a.* from base_org a where a.del = 1";
        if(!StringUtil.isBlank(type)){
@ -32,6 +35,8 @@ public class BaseOrgService extends BaseJpaService<BaseOrgDO, BaseOrgDao> {
            sql += " and a.code = '"+orgCode+"' ";
        }
        sql += " and a.code NOT IN (SELECT DISTINCT dict_code from wlyy_hospital_sys_dict WHERE dict_name = 'jkzl_org' and dict_code is not null)";
        return jdbcTemplate.query(sql,new BeanPropertyRowMapper<>(BaseOrgDO.class));
    }
@ -39,4 +44,31 @@ public class BaseOrgService extends BaseJpaService<BaseOrgDO, BaseOrgDao> {
        BaseOrgDO orgDO = orgDao.findByCode(orgCode);
        return orgDO;
    }
    //生活照料服务机构 存在服务项的机构
    public List<Map<String, Object>> findLifeOrg(){
        String findLifesql = "SELECT DISTINCT o.`code` as code,o.`name` as name,o.address AS address,o.photo AS photo  FROM base_org o,base_life_care_item_dict d WHERE o.type = '3' and o.del = 1 and o.`code` = d.org_code";
        List<Map<String, Object>> maps = jdbcTemplate.queryForList(findLifesql);
        if (maps.size()==0) {
            return null;
        }
        return maps;
    }
    public List<Map<String, Object>>  findCommunity() {
   /*     String orgSql = "SELECT tm.team_code AS teamCode,tm.org_code AS orgCode,tm.doctor_code AS doctorCode,d.`name` AS `name` " +
                " FROM base_team_member tm LEFT JOIN base_doctor d ON tm.doctor_code = d.id WHERE tm.del = 1 AND d.del =1 AND org_code = '" + orgCode + "'";
   */
        String orgSql = "SELECT id,org_code,org_name,`name` from base_team WHERE org_code = '"+orgCode+"' ";
        List<Map<String, Object>> maps = jdbcTemplate.queryForList(orgSql);
        return maps;
    }
    public List<Map<String, Object>> findCommunityZly(String teamId){
        String sql = "SELECT tm.team_code AS teamCode,tm.org_code AS orgCode,tm.doctor_code AS doctorCode,d.`name` AS `name`  FROM base_team_member tm LEFT JOIN base_doctor d ON tm.doctor_code = d.id WHERE tm.del = 1 AND d.del =1 AND tm.team_code = '"+teamId+"'";
        List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
        return maps;
    }
}

+ 331 - 28
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/patient/CarePatientService.java

@ -3,7 +3,10 @@ package com.yihu.jw.care.service.patient;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.yihu.jw.care.aop.RedisLockAOP;
import com.yihu.jw.care.dao.family.PatientFamilyMemberDao;
import com.yihu.jw.care.dao.label.BaseCapacityLabelDao;
import com.yihu.jw.care.dao.label.WlyyPatientLabelDao;
import com.yihu.jw.care.service.common.DictService;
@ -12,27 +15,35 @@ import com.yihu.jw.care.service.family.PatientFamilyMemberService;
import com.yihu.jw.care.service.sign.CapacityAssessmentRecordService;
import com.yihu.jw.care.service.sign.ServicePackageService;
import com.yihu.jw.care.util.ConstantUtil;
import com.yihu.jw.care.vo.JczdPersonVo;
import com.yihu.jw.doctor.dao.BaseDoctorHospitalDao;
import com.yihu.jw.entity.base.doctor.BaseDoctorHospitalDO;
import com.yihu.jw.entity.base.patient.BasePatientDO;
import com.yihu.jw.entity.base.patient.PatientMedicareCardDO;
import com.yihu.jw.entity.base.servicePackage.ServicePackageSignRecordDO;
import com.yihu.jw.entity.care.label.BaseCapacityLabelDO;
import com.yihu.jw.entity.care.label.WlyyPatientLabelDO;
import com.yihu.jw.entity.care.sign.CapacityAssessmentRecordDO;
import com.yihu.jw.entity.hospital.family.WlyyPatientFamilyMemberDO;
import com.yihu.jw.hospital.family.dao.WlyyPatientFamilyMemberDao;
import com.yihu.jw.im.util.ImUtil;
import com.yihu.jw.patient.dao.BasePatientDao;
import com.yihu.jw.patient.dao.BasePatientMedicareCardDao;
import com.yihu.jw.patient.service.BasePatientMedicardCardService;
import com.yihu.jw.patient.service.BasePatientService;
import com.yihu.jw.restmodel.ResponseContant;
import com.yihu.jw.restmodel.web.PageEnvelop;
import com.yihu.jw.sms.dao.HospitalSysDictDao;
import com.yihu.jw.util.common.IdCardUtil;
import com.yihu.jw.util.common.LatitudeUtils;
import com.yihu.jw.util.date.DateUtil;
import com.yihu.jw.utils.StringUtil;
import com.yihu.mysql.query.BaseJpaService;
import com.yihu.utils.security.MD5;
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.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
@ -56,12 +67,12 @@ import java.util.stream.Collectors;
 */
@Service
public class CarePatientService extends BaseJpaService<BasePatientDO, BasePatientDao> {
    private static final Logger logger = LoggerFactory.getLogger(CarePatientService.class);
    @Autowired
    private BasePatientDao patientDao;
    @Autowired
    private BasePatientMedicardCardService basePatientMedicardCardService;
    private BasePatientMedicareCardDao basePatientMedicareCardDao;
    @Autowired
    private ServicePackageService servicePackageService;
    @Autowired
@ -73,6 +84,8 @@ public class CarePatientService extends BaseJpaService<BasePatientDO, BasePatien
    @Autowired
    private PatientFamilyMemberService familyMemberService;
    @Autowired
    private WlyyPatientFamilyMemberDao familyMemberDao;
    @Autowired
    private BaseDoctorHospitalDao doctorHospitalDao;
    @Value("${wechat.id}")
    private String wxId;
@ -87,6 +100,72 @@ public class CarePatientService extends BaseJpaService<BasePatientDO, BasePatien
    @Autowired
    private BasePatientService basePatientService;
    /**
     * 初始化杭州老人,只保存有身份证且有手机号的数据
     */
    public void initJczdPerson(Integer size){
        Map<String,String> lableCodeMap = new HashMap<>();
        Map<String,String> lableCodeNameMap = new HashMap<>();
        lableCodeMap.put("1","1");//低保
        lableCodeMap.put("9","2");//低边
        lableCodeMap.put("41","3");//独居
        lableCodeMap.put("73","3");//独居
        lableCodeMap.put("40","4");//孤寡
        lableCodeMap.put("10","7");//特困
        lableCodeNameMap.put("1","低保");//低保
        lableCodeNameMap.put("2","低边");//低边
        lableCodeNameMap.put("3","独居");//独居
        lableCodeNameMap.put("4","孤寡");//孤寡
        lableCodeNameMap.put("7","特困");//特困
        String sql = "select * from base_patient where openid = 'jczd' limit ?";
        List<BasePatientDO> list = jdbcTemplate.query(sql,new Object[]{size},new BeanPropertyRowMapper<>(BasePatientDO.class));
        for (BasePatientDO patient:list){
            String idcard = patient.getIdcard();
            String persionTags = patient.getSsc();
            String salt = UUID.randomUUID().toString().substring(0,5);
            patient.setPassword(MD5.md5Hex(idcard + "{" + salt + "}"));
            patient.setSalt(salt);
            patient.setOpenid(null);
            patient.setSsc(null);
            String address = patient.getAddress();
            patient.setAddress(address);
            if(StringUtils.isNotBlank(address)){
                if(!address.contains("杭州市")){
                    address = "杭州市"+address;
                }
                Map<String,String> map = LatitudeUtils.getGeocoderLatitude(address);
                if(map!=null){
                    String latlon = map.get("lat")+","+map.get("lng");
                    patient.setLatLon(latlon);
                }
            }
            patientDao.save(patient);
            String pateintId = patient.getId();
            if(StringUtils.isNotBlank(persionTags)){
                String pertags[] = persionTags.split(",");
                for (String tag:pertags){
                    String label = lableCodeMap.get(tag);
                    if(StringUtils.isNotBlank(label)){
                        WlyyPatientLabelDO patientLabelDO = new WlyyPatientLabelDO();
                        patientLabelDO.setCzrq(new Date());
                        patientLabelDO.setLabelType("3");
                        patientLabelDO.setPatient(pateintId);
                        patientLabelDO.setLabelCode(label);
                        patientLabelDO.setLabelName(lableCodeNameMap.get(label));
                        patientLabelDao.save(patientLabelDO);
                    }
                }
            }
            logger.info("idcard=="+patient.getIdcard());
        }
        logger.info("新增人数="+list.size());
    }
    /**
     * 获取能力状况
     * @param patient
@ -216,11 +295,13 @@ public class CarePatientService extends BaseJpaService<BasePatientDO, BasePatien
        if (patientDO.getMarriage()!=null){
            patientDO.setMarriageName(dictService.fingByNameAndCode(ConstantUtil.DICT_MARRIAGE_STATUS,String.valueOf(patientDO.getMarriage())));
        }
        String deviceSql = "select COUNT(*) from wlyy_patient_device a where a.`user` = '"+patientId+"'";
        Integer deviceFlag = jdbcTemplate.queryForObject(deviceSql, Integer.class);
        patientDO.setDeviceFlag(deviceFlag);
        res.put("patient",patientDO);
        Map<String, Object> patientInfo = JSONObject.parseObject(JSON.toJSONString(patientDO,SerializerFeature.WriteMapNullValue), Map.class);
        patientInfo.put("birthday",DateUtil.dateToStrShort(patientDO.getBirthday()));
        res.put("patient",patientInfo);
        String sql = "select * from base_service_package_sign_record where patient = '"+patientId+"' and status = 1 ";
        List<ServicePackageSignRecordDO> signRecordDOs = jdbcTemplate.query(sql,new BeanPropertyRowMapper(ServicePackageSignRecordDO.class));
@ -515,12 +596,14 @@ public class CarePatientService extends BaseJpaService<BasePatientDO, BasePatien
    /**
     *
     * @param type 类型:1幼儿,2老人,3社工,4医生。不传返回四个类型的数据
     * @param type 类型:1幼儿,2签约老人,3社工,4医生,5老人家属 6助老员,7社区老人(未签约) 不传返回四个类型的数据
     * @param name 姓名
     * @param area 查询区域 目前仅支持查询老人、社工、家属
     * @param level 区域等级 2市3区4机构5团队6医生
     * @param residentialArea 居住小区
     * @return
     */
    public JSONObject findUserByType(String type,String name,String residentialArea,Integer page,Integer size){
    public JSONObject findUserByType(String type,String name,String residentialArea,String area,Integer level,Integer page,Integer size){
        JSONObject re = new JSONObject();
        if(page == null){
            page = 1;
@ -531,7 +614,7 @@ public class CarePatientService extends BaseJpaService<BasePatientDO, BasePatien
        String limit = " limit "+(page-1)*size+","+size;
        String filter ="";
        if("1".equals(type)||StringUtil.isBlank(type)){
        if("1".equals(type)||StringUtil.isBlank(type)){//新生儿
            String sqltmp = "SELECT GROUP_CONCAT(dict_code) orgCodes from wlyy_hospital_sys_dict WHERE dict_name = 'jkzl_child' ";
            List<Map<String,Object>> listtmp =  jdbcTemplate.queryForList(sqltmp);
            if(listtmp.size()>0){
@ -544,7 +627,7 @@ public class CarePatientService extends BaseJpaService<BasePatientDO, BasePatien
            re.put("child",list);
            re.put("childTotal",findChildTotal(name,residentialArea,filter));
        }
        if("2".equals(type)||StringUtil.isBlank(type)){
        if("2".equals(type)||StringUtil.isBlank(type)){//老人
            filter = "";
            String sqltmp = "SELECT GROUP_CONCAT(dict_code) orgCodes from wlyy_hospital_sys_dict WHERE dict_name = 'jkzl_older' ";
            List<Map<String,Object>> listtmp =  jdbcTemplate.queryForList(sqltmp);
@ -554,11 +637,11 @@ public class CarePatientService extends BaseJpaService<BasePatientDO, BasePatien
                filter = " and a.id not in ('"+orgCodes+"')";
            }
            List<Map<String,Object>> list = findOld(name,residentialArea,limit,filter);
            List<Map<String,Object>> list = findOld(name,residentialArea,area,level,limit,filter);
            re.put("old",list);
            re.put("oldTotal",findOldTotal(name,residentialArea,filter));
            re.put("oldTotal",findOldTotal(name,residentialArea,area,level,filter));
        }
        if("3".equals(type)||StringUtil.isBlank(type)){
        if("3".equals(type)||StringUtil.isBlank(type)){//社工
            filter = "";
            String sqltmp = "SELECT GROUP_CONCAT(dict_code) orgCodes from wlyy_hospital_sys_dict WHERE dict_name = 'jkzl_org' ";
            List<Map<String,Object>> listtmp =  jdbcTemplate.queryForList(sqltmp);
@ -567,10 +650,10 @@ public class CarePatientService extends BaseJpaService<BasePatientDO, BasePatien
                orgCodes = orgCodes.replaceAll(",","','");
                filter = " and h.org_code not in ('"+orgCodes+"')";
            }
            List<Map<String,Object>> list = findHelper(name,limit,filter);
            List<Map<String,Object>> list = findHelper(name,area,level,limit,filter);
            re.put("helper",list);
            re.put("helperTotal",findHelperTotal(name,filter));
            re.put("helperTotal",findHelperTotal(name,area,level,filter));
        }
        if("5".equals(type)||StringUtils.isBlank(type)){//老人家属
            filter = "";
@ -581,9 +664,37 @@ public class CarePatientService extends BaseJpaService<BasePatientDO, BasePatien
                orgCodes = orgCodes.replaceAll(",","','");
                filter = " and t2.id not in ('"+orgCodes+"')";
            }
            List<Map<String,Object>> list = findOlderFamily(name,limit,filter);
            List<Map<String,Object>> list = findOlderFamily(name,limit,area,level,filter);
            re.put("oldFamily",list);
            re.put("oldFamilyCount",findOlderFamilyTotal(name,filter));
            re.put("oldFamilyCount",findOlderFamilyTotal(name,area,level,filter));
        }
        if("6".equals(type)||StringUtils.isBlank(type)){//助老员
            filter = "";
            String sqltmp = "SELECT GROUP_CONCAT(dict_code) orgCodes from wlyy_hospital_sys_dict WHERE dict_name = 'jkzl_org' ";
            List<Map<String,Object>> listtmp =  jdbcTemplate.queryForList(sqltmp);
            if(listtmp.size()>0){
                String orgCodes = String.valueOf(listtmp.get(0).get("orgCodes"));
                orgCodes = orgCodes.replaceAll(",","','");
                filter = " and h.org_code not in ('"+orgCodes+"')";
            }
            List<Map<String,Object>> list = findHelper4(name,area,level,limit,filter);
            re.put("helper4",list);
            re.put("helper4Total",findHelper4Total(name,area,level,filter));
        }
        if("7".equals(type)||StringUtils.isBlank(type)){//社区老人
            filter = "";
            String sqltmp = "SELECT GROUP_CONCAT(dict_code) orgCodes from wlyy_hospital_sys_dict WHERE dict_name = 'jkzl_older' ";
            List<Map<String,Object>> listtmp =  jdbcTemplate.queryForList(sqltmp);
            if(listtmp.size()>0){
                String orgCodes = String.valueOf(listtmp.get(0).get("orgCodes"));
                orgCodes = orgCodes.replaceAll(",","','");
                filter = " and a.id not in ('"+orgCodes+"')";
            }
            List<Map<String,Object>> list = findUnSignOld(name,residentialArea,area,level,limit,filter);
            re.put("unSignOld",list);
            re.put("unSignOldCount",findUnSignOldTotal(name,residentialArea,area,level,filter));
        }
        return re;
    }
@ -636,16 +747,16 @@ public class CarePatientService extends BaseJpaService<BasePatientDO, BasePatien
    }
    /**
     * 查找老人
     * 查找签约老人
     * @param name
     * @param residentialArea
     * @param limit
     * @return
     */
    public List<Map<String,Object>> findOld(String name,String residentialArea,String limit,String filter1){
    public List<Map<String,Object>> findOld(String name,String residentialArea,String area,Integer level,String limit,String filter1){
        String sql = "SELECT a.id,a.name,a.photo,a.idcard,CAST(IFNULL(a.birthday,'') AS char ) birthday,a.residential_area residentialArea,a.sex " +
                ",a.ykt_id yktId, case 1 WHEN openid is not null then 1 WHEN a.on_line = '1' then 1 ELSE 0 end as online,IFNULL(sign_status,0) signStatus from base_patient a " +
                " WHERE a.archive_type = 1 and a.del = '1' ";
                " WHERE a.archive_type = 1 and a.del = '1' and a.sign_status=1  ";
        //case 1 WHEN openid is not null then 1 WHEN a.on_line = '1' then 1 ELSE 0 end as online
        //if(openid is null,0,1) onlineWx,IFNULL(a.on_line,0) onlinePad
@ -655,6 +766,12 @@ public class CarePatientService extends BaseJpaService<BasePatientDO, BasePatien
        if(!StringUtil.isBlank(residentialArea)){
            sql+= " and residential_area = '"+residentialArea+"' ";
        }
        if (StringUtils.isNotBlank(area)&&5==level){
            sql += " 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='"+area+"') ";
        }
        sql += filter1;
        sql += " GROUP BY a.id,a.name,a.photo,a.idcard,a.birthday,a.residential_area,a.sex,a.ykt_id,online,signStatus ";
        sql += " ORDER BY online desc,a.ykt_id desc,signStatus desc";
@ -690,18 +807,113 @@ public class CarePatientService extends BaseJpaService<BasePatientDO, BasePatien
            map.put("emergency",emergency);
            map.put("security",security);
            map.put("devices",deviceList);
            sql = " select sum(total) from ( " +
                    "select count(id) total from  base_emergency_assistance_order o where o.patient ='"+paientId+"' and o.`status`=1 " +
                    "UNION All " +
                    "select count(id) total from  base_security_monitoring_order o where o.patient ='"+paientId+"' and o.`status`=1 " +
                    ")A  ";
            Integer warnTotal = jdbcTemplate.queryForObject(sql,Integer.class);
            map.put("warnFlag",warnTotal>0?true:false);
        }
        return list;
    }
    public Integer findOldTotal(String name,String residentialArea,String filter){
        String sql = "SELECT count(a.id) from base_patient a  WHERE a.archive_type = 1 and a.del = '1' ";
    public Integer findOldTotal(String name,String residentialArea,String area,Integer level,String filter){
        String sql = "SELECT count(a.id) from base_patient a  WHERE a.archive_type = 1 and a.del = '1' and a.sign_status=1 ";
        if(!StringUtil.isBlank(name)){
            sql+= " and name like '%"+name+"%' ";
        }
        if(!StringUtil.isBlank(residentialArea)){
            sql+= " and residential_area = '"+residentialArea+"' ";
        }
        if (StringUtils.isNotBlank(area)&&5==level){
            sql += " 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='"+area+"' ) ";
        }
        sql += filter;
        return jdbcTemplate.queryForObject(sql,Integer.class);
    }
    /**
     * 查找签约老人
     * @param name
     * @param residentialArea
     * @param limit
     * @return
     */
    public List<Map<String,Object>> findUnSignOld(String name,String residentialArea,String area,Integer level,String limit,String filter1){
        String sql = "SELECT a.id,a.name,a.photo,a.idcard,CAST(IFNULL(a.birthday,'') AS char ) birthday,a.residential_area residentialArea,a.sex " +
                ",a.ykt_id yktId, case 1 WHEN openid is not null then 1 WHEN a.on_line = '1' then 1 ELSE 0 end as online,IFNULL(sign_status,0) signStatus from base_patient a " +
                " WHERE a.archive_type = 1 and a.del = '1' and a.sign_status=0  ";
        if(!StringUtil.isBlank(name)){
            sql+= " and name like '%"+name+"%' ";
        }
        if(!StringUtil.isBlank(residentialArea)){
            sql+= " and residential_area = '"+residentialArea+"' ";
        }
        if (StringUtils.isNotBlank(area)&&5==level){
            return null;
        }
        sql += filter1;
        sql += " GROUP BY a.id,a.name,a.photo,a.idcard,a.birthday,a.residential_area,a.sex,a.ykt_id,online,signStatus ";
        sql += " ORDER BY online desc,a.ykt_id desc,signStatus desc";
        sql += limit;
        List<Map<String,Object>>  list = jdbcTemplate.queryForList(sql);
        String sqlLife= "SELECT COUNT(*) from base_life_care_order ";
        String sqlEmergency= "SELECT COUNT(*) from base_emergency_assistance_order ";
        String sqlSecurity= "SELECT COUNT(*) from base_security_monitoring_order  ";
        String sqlDevice = "SELECT pd.category_code deviceFlag, IFNULL(d.contact_status,0) status from wlyy_patient_device pd,wlyy_devices d";
        for (Map<String,Object> map:list){
            String paientId = map.get("id").toString();
            String filterDevice = " WHERE pd.device_sn = d.device_code and pd.user = '"+paientId+"' ORDER BY deviceFlag,status desc";
            String idcardNo = map.get("idcard") + "";
            Date birthday = DateUtil.strToDate(map.get("birthday").toString());
            Integer age = IdCardUtil.getAgeByIdcardOrBirthday(idcardNo,birthday);
            map.put("age",age);
            String filter = " where patient = '"+paientId+"'";
            Integer lifeCare = jdbcTemplate.queryForObject(sqlLife+filter,Integer.class);
            Integer emergency = jdbcTemplate.queryForObject(sqlEmergency+filter,Integer.class);
            Integer security = jdbcTemplate.queryForObject(sqlSecurity+filter,Integer.class);
            List<Map<String,Object>> deviceList = jdbcTemplate.queryForList(sqlDevice+filterDevice);
            Iterator it = deviceList.listIterator();
            Map<Object,Object> deviceMap = new HashedMap();
            while (it.hasNext()){
                Map<String,Object> tmp = (Map<String,Object>)it.next();
                if(deviceMap.containsKey(tmp.get("deviceFlag"))){
                    it.remove();
                }else{
                    deviceMap.put(tmp.get("deviceFlag"),tmp.get("deviceFlag"));
                }
            }
            map.put("lifeCare",lifeCare);
            map.put("emergency",emergency);
            map.put("security",security);
            map.put("devices",deviceList);
            sql = " select sum(total) from ( " +
                    "select count(id) total from  base_emergency_assistance_order o where o.patient ='"+paientId+"' and o.`status`=1 " +
                    "UNION All " +
                    "select count(id) total from  base_security_monitoring_order o where o.patient ='"+paientId+"' and o.`status`=1 " +
                    ")A  ";
            Integer warnTotal = jdbcTemplate.queryForObject(sql,Integer.class);
            map.put("warnFlag",warnTotal>0?true:false);
        }
        return list;
    }
    public Integer findUnSignOldTotal(String name,String residentialArea,String area,Integer level,String filter){
        String sql = "SELECT count(a.id) from base_patient a  WHERE a.archive_type = 1 and a.del = '1' and a.sign_status=0 ";
        if(!StringUtil.isBlank(name)){
            sql+= " and name like '%"+name+"%' ";
        }
        if(!StringUtil.isBlank(residentialArea)){
            sql+= " and residential_area = '"+residentialArea+"' ";
        }
        if (StringUtils.isNotBlank(area)&&5==level){
            return 0;
        }
        sql += filter;
        return jdbcTemplate.queryForObject(sql,Integer.class);
    }
@ -712,19 +924,23 @@ public class CarePatientService extends BaseJpaService<BasePatientDO, BasePatien
     * @param limit
     * @return
     */
    public List<Map<String,Object>> findHelper(String name,String limit,String fileter){
    public List<Map<String,Object>> findHelper(String name,String area,Integer level,String limit,String fileter){
        String sql = "SELECT a.id,a.name,a.photo,a.sex,IFNULL(a.on_line,0) online from base_doctor a,base_doctor_hospital h" +
                "  WHERE a.id=h.doctor_code and a.doctor_level = 2 and a.del = '1' and h.del = '1' ";
        if(!StringUtil.isBlank(name)){
            sql+= " and a.name like '%"+name+"%' ";
        }
        if (StringUtils.isNotBlank(area)&&5==level){
            sql += " and EXISTS ( select 1 from base_team_member mem where mem.doctor_code = a.id " +
                    " and mem.team_code='"+area+"' and mem.del=1 )  ";
        }
        sql += fileter;
        sql += " ORDER BY online desc";
        sql+=limit;
        List<Map<String,Object>>  list = jdbcTemplate.queryForList(sql);
        String sqlLife= "SELECT COUNT(*) from base_life_care_order where `status` = 2";
        String sqlEmergency= "SELECT COUNT(*) from base_emergency_assistance_order where `status` = 0";
        String sqlSecurity= "SELECT COUNT(*) from base_security_monitoring_order where `status` = 7 ";
        String sqlSecurity= "SELECT COUNT(*) from base_security_monitoring_order where `status` = 0 ";
        for (Map<String,Object> map:list){
            String doctorId = map.get("id").toString();
            List<BaseDoctorHospitalDO> hospitalDOS = doctorHospitalDao.findByDoctorCode(doctorId);
@ -747,16 +963,88 @@ public class CarePatientService extends BaseJpaService<BasePatientDO, BasePatien
        return list;
    }
    public Integer findHelperTotal(String name,String filter){
    public Integer findHelperTotal(String name,String area,Integer level,String filter){
        String sql = "SELECT count(a.id) from base_doctor a,base_doctor_hospital h WHERE  a.id=h.doctor_code and a.doctor_level = 2 and a.del = '1' and h.del = '1'  ";
        if(!StringUtil.isBlank(name)){
            sql+= " and name like '%"+name+"%' ";
        }
        if (StringUtils.isNotBlank(area)&&5==level){
            sql += " and EXISTS ( select 1 from base_team_member mem where mem.doctor_code = a.id " +
                    " and mem.team_code='"+area+"' and mem.del=1 )  ";
        }
        sql += filter;
        return jdbcTemplate.queryForObject(sql,Integer.class);
    }
    /**
     * 查找助老员
     * @param name
     * @param limit
     * @return
     */
    public List<Map<String,Object>> findHelper4(String name,String area,Integer level,String limit,String fileter){
        String sql = "SELECT a.id,a.name,a.photo,a.sex,IFNULL(a.on_line,0) online from base_doctor a,base_doctor_hospital h" +
                "  WHERE a.id=h.doctor_code and a.doctor_level = 4 and a.del = '1' and h.del = '1' ";
        if(!StringUtil.isBlank(name)){
            sql+= " and a.name like '%"+name+"%' ";
        }
        if (StringUtils.isNotBlank(area)&&5==level){
            sql += " and EXISTS ( select 1 from base_patient_helper ph,base_service_package_sign_record sr, " +
                    " base_service_package_record r, base_service_package_item i,base_service_package pack  " +
                    " where ph.del=1 and ph.doctor = a.id and 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) = ph.patient " +
                    " and r.team_code='"+area+"') ";
        }
        sql += fileter;
        sql += " ORDER BY online desc";
        sql+=limit;
        List<Map<String,Object>>  list = jdbcTemplate.queryForList(sql);
        String sqlLife= " SELECT COUNT(distinct ord.id) from base_life_care_order ord,base_doctor_hospital h where ord.`status` = 2 " +
                " and ord.hospital = h.org_code and h.del='1' ";
        String sqlEmergency= " SELECT COUNT(distinct ord.id) from base_emergency_assistance_order ord,base_patient_helper h where ord.`status` = 0 " +
                " and ord.patient = h.patient and h.del=1 ";
        String sqlSecurity= " SELECT COUNT(distinct ord.id) from base_security_monitoring_order ord,base_patient_helper h where ord.`status` = 0 " +
                " and ord.patient = h.patient and h.del=1 ";
        for (Map<String,Object> map:list){
            String doctorId = map.get("id").toString();
            List<BaseDoctorHospitalDO> hospitalDOS = doctorHospitalDao.findByDoctorCode(doctorId);
            if (hospitalDOS.size()>0){
                map.put("residentialArea",hospitalDOS.get(0).getOrgName());
                map.put("org_code",hospitalDOS.get(0).getOrgCode());
            }else {
                map.put("residentialArea",null);
                map.put("org_code",null);
            }
            String filter = " and h.doctor_code = '"+doctorId+"'";
            Integer lifeCare = jdbcTemplate.queryForObject(sqlLife+filter,Integer.class);
            filter = " and h.doctor = '"+doctorId+"'";
            Integer emergency = jdbcTemplate.queryForObject(sqlEmergency+filter,Integer.class);
            Integer security = jdbcTemplate.queryForObject(sqlSecurity+filter,Integer.class);
            map.put("lifeCare",lifeCare);
            map.put("emergency",emergency);
            map.put("security",security);
        }
        return list;
    }
    public Integer findHelper4Total(String name,String area,Integer level,String filter){
        String sql = "SELECT count(a.id) from base_doctor a,base_doctor_hospital h WHERE  a.id=h.doctor_code and a.doctor_level = 4 and a.del = '1' and h.del = '1'  ";
        if(!StringUtil.isBlank(name)){
            sql+= " and name like '%"+name+"%' ";
        }
        if (StringUtils.isNotBlank(area)&&5==level){
            sql += " and EXISTS ( select 1 from base_patient_helper ph,base_service_package_sign_record sr, " +
                    " base_service_package_record r, base_service_package_item i,base_service_package pack  " +
                    " where ph.del=1 and ph.doctor = a.id and 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) = ph.patient " +
                    " and r.team_code='"+area+"') ";
        }
        sql += filter;
        return jdbcTemplate.queryForObject(sql,Integer.class);
    }
    public List<Map<String,Object>> findOlderFamily(String name,String limit,String fileter){
    public List<Map<String,Object>> findOlderFamily(String name,String limit,String area,Integer level,String fileter){
        String sql = "select t2.id,t2.name,t2.sex,t2.mobile,t2.idcard,if(t2.openid is null,0,1) online,t2.photo,t1.family_relation,t1.patient older,t3.name olderName " +
                "from base_patient t2 left JOIN base_patient_family_member t1 on t1.family_member = t2.id " +
                "left join base_patient t3 on t3.id = t1.patient  " +
@ -764,6 +1052,12 @@ public class CarePatientService extends BaseJpaService<BasePatientDO, BasePatien
        if (StringUtils.isNotBlank(name)){
            sql += " and t3.name like '%"+name+"%' ";
        }
        if (StringUtils.isNotBlank(area)&&5==level){
            sql += " 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)  = t3.id and r.team_code='"+area+"' ) ";
        }
        sql += fileter + " GROUP BY t2.id,t1.patient ORDER BY online desc ";
        sql += limit;
        List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
@ -773,7 +1067,7 @@ public class CarePatientService extends BaseJpaService<BasePatientDO, BasePatien
        return list;
    }
    public Integer findOlderFamilyTotal(String name,String fileter){
    public Integer findOlderFamilyTotal(String name,String area,Integer level,String fileter){
        String sql = "select t2.id,t1.patient " +
                "from base_patient t2 left JOIN base_patient_family_member t1 on t1.family_member = t2.id " +
                "left join base_patient t3 on t3.id = t1.patient  " +
@ -781,6 +1075,12 @@ public class CarePatientService extends BaseJpaService<BasePatientDO, BasePatien
        if (StringUtils.isNotBlank(name)){
            sql += " and t3.name like '%"+name+"%' ";
        }
        if (StringUtils.isNotBlank(area)&&5==level){
            sql += " 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)  = t3.id and r.team_code='"+area+"' ) ";
        }
        sql += fileter +" group by t2.id,t1.patient ";
        String sqlCount = "SELECT count(*) from ( "+sql+")A";
        return jdbcTemplate.queryForObject(sqlCount,Integer.class);
@ -806,9 +1106,12 @@ public class CarePatientService extends BaseJpaService<BasePatientDO, BasePatien
        String sql = "SELECT DISTINCT p.id,p.name,p.photo,p.idcard,p.mobile,p.openid,p.sex,p.pad_imei padImei " +
                "from base_patient p INNER JOIN base_patient_wechat wc on p.id = wc.patient_id where p.del=1 and p.id='"+patient+"' and " +
                " wc.wechat_id = '"+wxId+"' GROUP BY p.id ORDER BY wc.create_time desc";
        Map<String,Object> result = jdbcTemplate.queryForMap(sql);
        result.put("deviceType",deviceService.getPatientDeviceCategoryCode(result.get("id").toString()));
        List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
        Map<String,Object> result =null;
        if (list.size()>0){
            result = list.get(0);
            result.put("deviceType",deviceService.getPatientDeviceCategoryCode(result.get("id").toString()));
        }
        return result;
    }
}

+ 3 - 1
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/prescription/BaseCarePrescriptionService.java

@ -20,6 +20,7 @@ import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
@ -194,6 +195,7 @@ public class BaseCarePrescriptionService {
        prescriptionDO.setPatient(patient);
        prescriptionDO.setPatientName(patientDO.getName());
        prescriptionDO.setStatus(1);
        prescriptionDO.setDealTime(new Date());
        carePrescriptionDao.save(prescriptionDO);
        return prescriptionDO;
    }
@ -214,7 +216,7 @@ public class BaseCarePrescriptionService {
        prescriptionDO.setDealImgs(dealImgs);
        prescriptionDO.setStatus(2);
        prescriptionDO.setDoctor(doctor);
        prescriptionDO.setDealTime(new Date());
        BaseDoctorDO doctorDO = doctorDao.findById(doctor);
        prescriptionDO.setDoctorName(doctorDO.getName());

+ 57 - 78
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/role/RoleService.java

@ -13,6 +13,7 @@ import com.yihu.jw.doctor.dao.BaseDoctorDao;
import com.yihu.jw.entity.care.role.DoctorRole;
import com.yihu.jw.entity.care.role.DoctorRoleRealm;
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;
@ -85,74 +86,20 @@ public class RoleService extends BaseJpaService<DoctorRole, DoctorRoleDao> {
        int resultLevel = 5;
        for (DoctorRole one : roleList) {
            if(resultLevel>roleConverse(one.getCode())){
                resultLevel=roleConverse(one.getCode());
            if(resultLevel>one.getLevel()){
                resultLevel=one.getLevel();
            }
        }
        if (roleList != null && roleList.size() > 0) {
            //遍历角色
            for (DoctorRole role : roleList) {
                if(role.getCode().length()!=6&&role.getCode().length()!=10){
                    continue;
                }
                Map<String, String> map = new HashMap<>();
                map.put("code", role.getCode());
                map.put("name", role.getName());
                //获取区域权限
                String areaString = "";
                List<DoctorRoleRealm> areaList = doctorRoleRealmDao.findByRoleCode(role.getCode());
                if (areaList != null && areaList.size() > 0) {
                    //获取最大权限区域
                    List<String> areas = new ArrayList<>();
                    List<String> orgs = new ArrayList<>();
                    for (DoctorRoleRealm areaItem : areaList) {
                        String currentArea = areaItem.getAreaCode();
                        int currentLength = currentArea.length();
                        if (currentLength == 6) //区域
                        {
                            areas.add(currentArea);
                        } else {               //机构
                            orgs.add(currentArea);
                        }
                    }
                    //区域权限重复校验
                    for (int i = areas.size() - 1; i >= 0; i--) {
                        String currentArea = areas.get(i);
                        for (int j = 0; j < areas.size() - i - 1; j++) {
                            String shortArea = getShortArea(areas.get(j));
                            if (currentArea.startsWith(shortArea))   //包含则移除
                            {
                                areas.remove(i);
                            }
                        }
                    }
                    //机构权限重复校验
                    for (int m = orgs.size() - 1; m >= 0; m--) {
                        String currentOrg = orgs.get(m);
                        for (int n = 0; n < areas.size() - m - 1; n++) {
                            String shortArea = getShortArea(areas.get(n));
                            if (currentOrg.startsWith(shortArea))   //包含则移除
                            {
                                orgs.remove(m);
                            }
                        }
                    }
                    for (String item : areas) {
                        areaString += item + ",";
                    }
                    for (String item : orgs) {
                        areaString += item + ",";
                    }
                    areaString = areaString.substring(0, areaString.length() - 1);
                }
                map.put("areas", areaString);
                map.put("level",roleConverse(role.getCode())+"");
                map.put("areas", "");
                map.put("level",role.getLevel()+"");
                map.put("isManage", "1");
                if(resultLevel==roleConverse(role.getCode())){
                if(resultLevel==role.getLevel()){
                    map.put("high", "1");
                }else{
                    map.put("high", "0");
@ -164,25 +111,25 @@ public class RoleService extends BaseJpaService<DoctorRole, DoctorRoleDao> {
        return re;
    }
    /**
     * 角色code转成角色级别
     * @param roleCode 角色code
     * @return 1、省级,2、市级,3、区级,4、机构
     */
    public Integer roleConverse(String roleCode){
        if(roleCode.length()==6){
            if("0".equals(roleCode.substring(3,4))){
                return 1;
            }else if("00".equals(roleCode.substring(4))){
                return 2;
            }else{
                return 3;
            }
        }else{
            return 4;
        }
    }
//    /**
//     * 角色code转成角色级别
//     * @param roleCode 角色code
//     * @return 1、省级,2、市级,3、区级,4、机构
//     */
//    public Integer roleConverse(String roleCode){
//
//        if(roleCode.length()==6){
//            if("0".equals(roleCode.substring(3,4))){
//                return 1;
//            }else if("00".equals(roleCode.substring(4))){
//                return 2;
//            }else{
//                return 3;
//            }
//        }else{
//            return 4;
//        }
//    }
    public Map<String,Object> findManageUserRole(String doctor){
        String sql ="SELECT " +
@ -215,4 +162,36 @@ public class RoleService extends BaseJpaService<DoctorRole, DoctorRoleDao> {
                " r.code = 'dispatcher'";
        return jdbcTemplate.queryForList(sql);
    }
    /**
     * 获取管理员权限与老人数据相关sql
     * @param area
     * @param level
     * @return
     */
    public String getOlderRoleSQL(String area,String level){
        String areaFilter = "";
        String olderFilter = " and {patient} not in (SELECT dict_code FROM `base`.`wlyy_hospital_sys_dict` WHERE `dict_name` = 'jkzl_older' or dict_name='jkzl_child') ";
        if (StringUtils.isNotBlank(area)){
            if ("330100".equals(area)){
                return olderFilter;
            }else {
                if ("4".equals(level)){
                    areaFilter = " and pack.org_code='"+area+"' ";
                }
                if ("5".equals(level)){//团队
                    areaFilter = " and r.team_code='"+area+"' ";
                }
                if ("4".equals(level)||"5".equals(level)){
                    olderFilter = " 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)  = {patient} " +
                            " and {patient} not in (SELECT dict_code FROM `base`.`wlyy_hospital_sys_dict` WHERE `dict_name` = 'jkzl_older' or dict_name='jkzl_child') "+areaFilter+" ) ";
                }
            }
        }
        return olderFilter;
    }
}

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

@ -17,9 +17,11 @@ import com.yihu.jw.care.service.device.PatientDeviceService;
import com.yihu.jw.care.service.device.YsDeviceService;
import com.yihu.jw.care.service.doctor.DoctorServicePermissionsService;
import com.yihu.jw.care.service.family.PatientFamilyMemberService;
import com.yihu.jw.care.service.message.BaseServiceNewsService;
import com.yihu.jw.care.service.sign.ServicePackageService;
import com.yihu.jw.care.util.ConstantUtil;
import com.yihu.jw.care.util.CountDistance;
import com.yihu.jw.care.util.DeviceDataPushLogUtil;
import com.yihu.jw.care.util.MessageUtil;
import com.yihu.jw.doctor.dao.BaseDoctorDao;
import com.yihu.jw.doctor.dao.BaseDoctorHospitalDao;
@ -50,7 +52,6 @@ import com.yihu.jw.util.date.DateUtil;
import com.yihu.jw.util.entity.EntityUtils;
import com.yihu.jw.util.healthIndex.HealthIndexUtil;
import com.yihu.mysql.query.BaseJpaService;
import jdk.nashorn.internal.runtime.FindProperty;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -148,6 +149,10 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
    private DeviceService deviceService;
    @Autowired
    private PermissionService permissionService;
    @Autowired
    private BaseServiceNewsService baseServiceNewsService;
    @Autowired
    private DeviceDataPushLogUtil deviceDataPushLogUtil;
    private Logger logger = LoggerFactory.getLogger(SecurityMonitoringOrderService.class);
@ -246,7 +251,7 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
            result.put(ResponseContant.resultMsg, failMsg);
            return result;
        }
        orderDO.setTeamCode(mapTmp.get("team_code").toString());
        orderDO.setCreateTime(new Date());
        //判断创建预警服务类型,发起类型(1本人发起 2家人待预约 3医生代预约)
        orderDO.setType(1);//发起类型
@ -302,17 +307,21 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
                if (StringUtils.isNotBlank(doctorDO.getMobile())) {
                    messageUtil.sendTXYSJson("1141719", doctorDO.getMobile(), orderDO.getPatientName(), orderDO.getServeDesc());
                }
            } catch (Exception e) {
            }
            String body = "您好," + orderDO.getPatientName() + "居民" + orderDO.getServeDesc() + ",请关注并及时处理。";
            messageUtil.sendDoctorGetuiMessage(doctorDO.getId(), "1", "/securityMonitoring/index", "安防紧急预警", body);
            messageUtil.sendDoctorDingdingMessage(doctorDO,null,"text","1",body,null,null);
            imUtil.sendMDTSocketMessageToDoctor(doctorDO.getId(), message.toString());
        }
        //pc管理端端推送消息
        imUtil.sendPcManageMessageToPc("cloudCare_pcManage", message.toString());
        result.put("resultFlag", 1);
        result.put("resultMsg", orderDO);
        if (StringUtils.isNotBlank(orderDO.getDeviceSn())){
            deviceDataPushLogUtil.savePatientMonitorData(orderDO.getDeviceSn(),22,orderDO.getServeDesc(),orderDO.getId());
        }
        baseServiceNewsService.addServiceNews(patientDO.getName(),patientDO.getId(),"6",null,orderDO.getId(),1);
        return result;
    }
@ -357,7 +366,7 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
        String statusName = "";
        switch (statustemp) {
            case -2:
                statusName = "误警报";
                statusName = "已响应";
                break;
            case -1:
                statusName = "已取消";
@ -499,6 +508,11 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
                e.printStackTrace();
            }
        }
        if (9 == orderDO.getOrderSource()){
            Map<String, Object> map = new HashMap<>();
            map.put("infoDetail", orderDO.getWarnInfo());
            emergencyOrderVO.setInformation(map);
        }
        //通知对象
        List<Map<String, Object>> noticePersons = new ArrayList<>();
@ -693,7 +707,7 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
        String fliter = "  ";
        String sql = " select p.id patientCode,p.name,p.sex,p.photo,p.idcard,ord.id orderId,ord.number,ord.serve_desc,ord.create_time,ord.`status`,ord.doctor," +
                "ord.doctor_name,ord.update_user,ord.update_user_name,ord.patient_phone,ord.conclusion_status from base_security_monitoring_order ord INNER JOIN base_patient p on p.id = ord.patient " +
                "where 1=1 ";
                "where 1=1  ";
        if (1 == dailyMonitor) {//医生日常监护居民安防工单列表查询
            if (StringUtils.isBlank(topicItem) || StringUtils.isBlank(doctor)) {
@ -716,6 +730,9 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
                case "preventOutOfBed":
                    categoryCode = "'13'";
                    break;
                case "dailyWater":
                    categoryCode = "'18'";
                    break;
            }
            if (StringUtils.isNotBlank(doctor)) {//日常监护医生必传
                BaseDoctorDO doctorDO = baseDoctorDao.findById(doctor);
@ -885,6 +902,9 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
                case "preventOutOfBed":
                    categoryCode = "'13'";
                    break;
                case "dailyWater":
                    categoryCode = "'18'";
                    break;
            }
            if (StringUtils.isNotBlank(doctor)) {//日常监护医生必传
                BaseDoctorDO doctorDO = baseDoctorDao.findById(doctor);
@ -1371,6 +1391,30 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
        one.setConclusionStatus(2);
        securityMonitoringOrderDao.save(one);
        List<BaseEmergencyWarnLogDO> byOrderIdByType = logDao.findByOrderIdByType(orderId);
        if (byOrderIdByType.size()==0){
            BaseEmergencyWarnLogDO logTypeDOOne = new BaseEmergencyWarnLogDO();
            logTypeDOOne.setUserCode(doctor);
            logTypeDOOne.setUserName(doctorVO.getName());
            logTypeDOOne.setOrderId(orderId);
            logTypeDOOne.setUserType(2);
            logTypeDOOne.setCreateTime(new Date());
            logTypeDOOne.setContent("已知悉");
            logTypeDOOne.setType(1);
            logDao.save(logTypeDOOne);
        }
        BaseEmergencyWarnLogDO logTypeDO = new BaseEmergencyWarnLogDO();
        logTypeDO.setUserCode(doctor);
        logTypeDO.setUserName(one.getDoctorName());
        logTypeDO.setOrderId(orderId);
        logTypeDO.setUserType(2);
        //logTypeDO.setCreateTime(DateUtil.strToDateLong(String.valueOf(new Date().getTime() + 1000)));
        logTypeDO.setCreateTime(new Date());
        logTypeDO.setContent("完成服务小结");
        logTypeDO.setType(5);
        logDao.save(logTypeDO);
        //完成工单向pc管理端发送消息
        JSONObject message = new JSONObject();
        String latLon = one.getServeLat() + "," + one.getServeLon();
@ -1559,6 +1603,7 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
    public JSONObject patientMonitoringInfo(String patient, String topicItem,String deviceSn,boolean video) {
        JSONObject result = new JSONObject();
        result.put("location", null);
        result.put("atHome", null);// 居家状态
        result.put("fences", null);
        result.put("gasLeakage", null);
        result.put("fire", null);
@ -1569,47 +1614,82 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
        result.put("emeAssistance", false);
        result.put("monitorInfo", null);
        String sql = " select dict.code,count(ord.id) total from base_system_dict_entry dict LEFT JOIN base_security_monitoring_order ord " +
                " on dict.code = ord.topic_item COLLATE utf8_unicode_ci and ord.status=" + SecurityMonitoringOrderDO.Status.apply.getType() + " where dict.dict_code='service_item' " +
                "and dict.remark='security' and ord.patient='" + patient + "' GROUP BY dict.code ";
                " on dict.code = ord.topic_item COLLATE utf8_unicode_ci and ord.status=" + SecurityMonitoringOrderDO.Status.apply.getType() + " and ord.patient='" + patient + "' where dict.dict_code='service_item' " +
                "and dict.remark='security' GROUP BY dict.code ";
        List<Map<String, Object>> sqlResult = jdbcTemplate.queryForList(sql);
        for (Map<String, Object> tmp : sqlResult) {
            switch (tmp.get("code").toString()) {
                case "preventGasLeakage":
                    Integer count = Integer.parseInt(tmp.get("total").toString());
                    if (count > 0) {
                        result.put("gasLeakage", true);
                    } else {
                        result.put("gasLeakage", false);
                    if (patientDeviceService.patientDeviceListByTopic(patient,"preventGasLeakage").size()==0){
                        result.put("gasLeakage", null);
                    }else {
                        Integer count = Integer.parseInt(tmp.get("total").toString());
                        if (count > 0) {
                            result.put("gasLeakage", true);
                        } else {
                            result.put("gasLeakage", false);
                        }
                    }
                    break;
                case "preventFire":
                    count = Integer.parseInt(tmp.get("total").toString());
                    if (count > 0) {
                        result.put("fire", true);
                    } else {
                        result.put("fire", false);
                    if (patientDeviceService.patientDeviceListByTopic(patient,"preventFire").size()==0){
                        result.put("fire", null);
                    }else {
                        Integer count = Integer.parseInt(tmp.get("total").toString());
                        if (count > 0) {
                            result.put("fire", true);
                        } else {
                            result.put("fire", false);
                        }
                    }
                    break;
                case "preventFall":
                    count = Integer.parseInt(tmp.get("total").toString());
                    if (count > 0) {
                        result.put("fall", true);
                    } else {
                        result.put("fall", false);
                    if (patientDeviceService.patientDeviceListByTopic(patient,"preventFall").size()==0){
                        result.put("fall", null);
                    }else {
                        Integer count = Integer.parseInt(tmp.get("total").toString());
                        if (count > 0) {
                            result.put("fall", true);
                        } else {
                            result.put("fall", false);
                        }
                    }
                    break;
                case "preventOutOfBed":
                    count = Integer.parseInt(tmp.get("total").toString());
                    if (count > 0) {
                        result.put("sleep", true);
                        sql = " select serve_desc from base_security_monitoring_order where topic_item='preventOutOfBed' " +
                                "and patient='" + patient + "' and `status`=1 order by create_time desc limit 1 ";
                        List<String> serveDesces = jdbcTemplate.queryForList(sql, String.class);
                        if (serveDesces.size() > 0) {
                            result.put("sleepOrderInfo", serveDesces.get(0));
                    if (patientDeviceService.patientDeviceListByTopic(patient,"preventOutOfBed").size()==0){
                        result.put("sleep", null);
                    }else {
                       Integer count = Integer.parseInt(tmp.get("total").toString());
                        if (count > 0) {
                            result.put("sleep", true);
                            sql = " select serve_desc from base_security_monitoring_order where topic_item='preventOutOfBed' " +
                                    "and patient='" + patient + "' and `status`=1 order by create_time desc limit 1 ";
                            List<String> serveDesces = jdbcTemplate.queryForList(sql, String.class);
                            if (serveDesces.size() > 0) {
                                result.put("sleepOrderInfo", serveDesces.get(0));
                            }
                        } else {
                            result.put("sleep", false);
                        }
                    }
                    break;
                case "dailyWater":
                    if (patientDeviceService.patientDeviceListByTopic(patient,"dailyWater").size()==0){
                        result.put("dailyWater", null);
                    }else {
                        Integer count = Integer.parseInt(tmp.get("total").toString());
                        if (count > 0) {
                            result.put("dailyWater", true);
                            sql = " select serve_desc from base_security_monitoring_order where topic_item='dailyWater' " +
                                    "and patient='" + patient + "' and `status`=1 order by create_time desc limit 1 ";
                            List<String> serveDesces = jdbcTemplate.queryForList(sql, String.class);
                            if (serveDesces.size() > 0) {
                                result.put("dailyWaterOrderInfo", serveDesces.get(0));
                            }
                        } else {
                            result.put("dailyWater", false);
                        }
                    } else {
                        result.put("sleep", false);
                    }
                    break;
            }
@ -1623,6 +1703,109 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
        return result;
    }
    /**
     * 获取各专题预警情况
     * @param patient
     * @return
     */
    public List<Map<String,Object>> getPatientTopicWarnInfo(String patient) {
        String sql = " select dict.code,count(ord.id) total,ord.patient,ord.id,'22' as OrderType,ord.serve_desc as serveDesc from base_system_dict_entry dict LEFT JOIN base_security_monitoring_order ord " +
                " on dict.code = ord.topic_item COLLATE utf8_unicode_ci and ord.status=" + SecurityMonitoringOrderDO.Status.apply.getType() + " and ord.patient='" + patient + "' " +
                " where dict.dict_code='service_item' " +
                "and dict.remark='security'  GROUP BY dict.code ";
        List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
        for (Map<String, Object> tmp : list) {
            switch (tmp.get("code").toString()) {
                case "preventGasLeakage":
                    List<Map<String,Object>> devices = patientDeviceService.patientDeviceListByTopic(patient,"preventGasLeakage");
                    if (devices.size()>0) {
                        tmp.put("band", true);
                        tmp.put("devices", devices);
                    }else {
                        tmp.put("band", false);
                        tmp.put("devices", null);
                    }
                    break;
                case "preventFire":
                    devices = patientDeviceService.patientDeviceListByTopic(patient,"preventFire");
                    if (devices.size()>0){
                        tmp.put("band", true);
                        tmp.put("devices", devices);
                    }else {
                        tmp.put("band", false);
                        tmp.put("devices", null);
                    }
                    break;
                case "preventFall":
                    devices = patientDeviceService.patientDeviceListByTopic(patient,"preventFall");
                    if (devices.size()>0){
                        tmp.put("band", true);
                        tmp.put("devices", devices);
                    }else {
                        tmp.put("band", false);
                        tmp.put("devices", null);
                    }
                    break;
                case "preventOutOfBed":
                    devices = patientDeviceService.patientDeviceListByTopic(patient,"preventOutOfBed");
                    if (devices.size()>0){
                        tmp.put("band", true);
                        tmp.put("devices", devices);
                    }else {
                        tmp.put("band", false);
                        tmp.put("devices", null);
                    }
                    break;
                case "preventLost":
                    devices = patientDeviceService.patientDeviceListByTopic(patient,"preventLost");
                    if (devices.size()>0){
                        tmp.put("band", true);
                        tmp.put("devices", devices);
                    }else {
                        tmp.put("band", false);
                        tmp.put("devices", null);
                    }
                    break;
                case "dailyWater":
                    devices = patientDeviceService.patientDeviceListByTopic(patient,"dailyWater");
                    if (devices.size()>0){
                        tmp.put("band", true);
                        tmp.put("devices", devices);
                    }else {
                        tmp.put("band", false);
                        tmp.put("devices", null);
                    }
                    break;
            }
        }
        sql = " select 'emeAssistance' as code,ord.id,ord.patient,'20' as OrderType,'紧急呼叫' as serveDesc " +
                " from base_emergency_assistance_order ord where ord.`status`='"+EmergencyAssistanceDO.Status.apply.getType()+"' " +
                " and ord.patient='"+patient+"' limit 1 ";
        List<Map<String,Object>> emeAssistances = jdbcTemplate.queryForList(sql);
        sql = " select dd.photo,pd.device_sn,dd.brands,dd.category_code,dd.model,pd.device_name,date_format(pd.czrq,'%Y-%m-%d %H:%i:%S' ) deviceTime \n" +
                "from dm_device dd INNER JOIN wlyy_patient_device pd on dd.category_code = pd.category_code INNER JOIN wlyy_devices wd on dd.model = wd.device_model and pd.device_sn = wd.device_code \n" +
                "where 1=1 and  pd.del=0 and dd.category_code in (4,7,16) and user='"+patient+"' ";
        List<Map<String,Object>> devices = jdbcTemplate.queryForList(sql);
        if (emeAssistances.size()>0){
          Map<String,Object> tmp =  emeAssistances.get(0);
            tmp.put("band",devices.size()>0?true:false);
            tmp.put("devices",devices);
            list.add(tmp);
        }else{
            Map<String,Object> tmp = new HashMap<>();
            tmp.put("code","emeAssistance");
            tmp.put("id",null);
            tmp.put("patient",null);
            tmp.put("OrderType",null);
            tmp.put("serveDesc",null);
            tmp.put("band",devices.size()>0?true:false);
            tmp.put("devices",devices);
            list.add(tmp);
        }
        return list;
    }
    /**
     * 老人家属首页实时监护信息
     * 居家状态取手表 无手表缺省
@ -1686,6 +1869,21 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
                        result.put("sleep", false);
                    }
                    break;
                case "dailyWater":
                    count = Integer.parseInt(tmp.get("total").toString());
                    if (count > 0) {
                        result.put("dailyWater", true);
                        sql = " select serve_desc from base_security_monitoring_order where topic_item='dailyWater' " +
                                "and patient='" + patient + "' and `status`=1 order by create_time desc limit 1 ";
                        List<String> serveDesces = jdbcTemplate.queryForList(sql, String.class);
                        if (serveDesces.size() > 0) {
                            result.put("dailyWaterOrderInfo", serveDesces.get(0));
                        }
                    } else {
                        result.put("dailyWater", false);
                    }
                    break;
            }
        }
        sql = " select count(id) from base_emergency_assistance_order  where patient='" + patient + "' and status=" + EmergencyAssistanceDO.Status.apply.getType();
@ -1792,6 +1990,24 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
                devicePatientDeviceDos = patientDeviceDao.findByUserAndCategoryCode(patient, "4");//手表
                devicePatientDeviceDos2 = patientDeviceDao.findByUserAndCategoryCode(patient, "16");//拐杖
            }
            if(devicePatientDeviceDos.size()==0&&devicePatientDeviceDos2.size()==0){
                BasePatientDO patientDO = basePatientDao.findById(patient);
                JSONObject tmp = new JSONObject();
                tmp.put("city",null);
                tmp.put("province", null);
                tmp.put("address", patientDO.getAddress());
                if (StringUtils.isNotBlank(patientDO.getLatLon())) {
                    String[] latLon = patientDO.getLatLon().split(",");
                    if (StringUtils.isNotBlank(patientDO.getHomeLatLon()) && latLon.length == 2) {
                        String homeLatLon = patientDO.getHomeLatLon();
                        String homeLat = homeLatLon.split(",")[0];
                        String homeLon = homeLatLon.split(",")[1];
                        tmp.put("lon", homeLon);
                        tmp.put("lat", homeLat+"");
                    }
                }
                result.put("location", tmp);
            }
            if (devicePatientDeviceDos.size() > 0 && (4 == categoryCode || 0 == categoryCode)) {//手表
                DevicePatientDevice device = devicePatientDeviceDos.get(0);
                result.put("deviceSn", device.getDeviceSn());
@ -1804,13 +2020,20 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
                        Double lat = locationTmp.getJSONArray("coordinates").getDouble(1);
                        if (!response.getBoolean("online")) {//设备离线 取居民表定位
                            result.put("X1online", false);
                            result.put("contactStatus", 0);
                        } else {
                            result.put("X1online", true);
                            result.put("contactStatus", 1);
                        }
                        JSONObject tmp = gpsUtil.gcj02_To_Bd09(lat, lon);
                        tmp.put("city", response.getString("last_city"));
                        tmp.put("province", response.getString("last_province"));
                        tmp.put("address", response.getString("last_address"));
                        if (response.containsKey("location_updated_at") && response.get("location_updated_at") != null) {
                            JSONObject locationTimeObj = response.getJSONObject("location_updated_at");
                            Long locationTime =  locationTimeObj.getLongValue("$date");
                            tmp.put("locationTime", DateUtil.dateToStrLong( new Date(locationTime)));
                        }
                        result.put("location", tmp);
                        BasePatientDO patientDO = basePatientDao.findById(patient);
                        if (null != patientDO) {
@ -1871,13 +2094,15 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
                DevicePatientDevice deviceDO = devicePatientDeviceDos2.get(0);
                double dulat = 0l;
                double dulon = 0l;
                String locationTime=null;
                //获取当前定位
                String sql = " SELECT * FROM base_yxdevice_index WHERE sn = '" + deviceDO.getDeviceSn() + "' " +
                String sql = " SELECT *,CAST(DATE_FORMAT(create_time,'%Y-%m-%d %H:%i:%S') as char) create_time FROM base_yxdevice_index WHERE sn = '" + deviceDO.getDeviceSn() + "' " +
                        "AND create_time LIKE '" + DateUtil.getStringDateShort() + "%' AND lon != 0 AND lat != 0 ORDER BY create_time DESC  ";
                List<Map<String, Object>> pointTmp = jdbcTemplate.queryForList(sql);
                if (pointTmp.size() > 0) {
                    dulat = Double.parseDouble(pointTmp.get(0).get("lat").toString());
                    dulon = Double.parseDouble(pointTmp.get(0).get("lon").toString());
                    locationTime = pointTmp.get(0).get("create_time").toString();
                }
                if ((dulat == 0.0 && dulon == 0.0)) {
                    BasePatientDO patientDO = basePatientDao.findById(deviceDO.getUser());
@ -1911,6 +2136,7 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
                            Double areaLat = Double.parseDouble(areaPoint[1]);
                            positionTmp.put("lat", areaLat);
                            positionTmp.put("lon", areaLon);
                            positionTmp.put("locationTime", locationTime);
                            fenceLocation.add(positionTmp);
                        }
                        if (devicePatientDeviceDos2.size() > 0 && 0 == categoryCode && devicePatientDeviceDos2.size() > 0) {
@ -1922,6 +2148,7 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
                                    obj.put("address", address);
                                    obj.put("lon", dulon);
                                    obj.put("lat", dulat);
                                    obj.put("locationTime", locationTime);
                                }
                            }
                        } else if (devicePatientDeviceDos2.size() > 0) {//指定拐杖设备
@ -1933,6 +2160,7 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
                                location.put("city", "");
                                location.put("lon", dulon);
                                location.put("lat", dulat);
                                location.put("locationTime", locationTime);
                                result.put("location", location);
                                JSONArray fences = new JSONArray();
                                JSONObject fence = new JSONObject();
@ -1960,70 +2188,83 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
        } else {
            DevicePatientDevice deviceDo = devicePatientDeviceDos.get(0);
            JSONObject deviceInfo = patientDeviceService.getSleepDeviceInfo(deviceDo.getDeviceSn());
            if (deviceInfo.getBooleanValue("success")) {
                result.put("patientAddress", deviceDo.getSosAddress());
                JSONArray objInfo = deviceInfo.getJSONArray("objs");
                if (objInfo.size() > 0) {
                    result.put("sleepStatus", true);
                    JSONObject tmp = objInfo.getJSONObject(0);
                    JSONObject sleepInfo = new JSONObject();
                    if (StringUtils.isBlank(dayTime)) {
                        dayTime = getSleepMonitoringDay(new Date(), patient);
                    }
                    List<BaseSleepPlanDetail> planDetails = sleepPlanDetailDao.findByPatientAndDay(patient, dayTime);
                    BaseSleepPlanDetail planDetail = new BaseSleepPlanDetail();
                    if (planDetails.size() > 0) {
                        planDetail = planDetails.get(0);
                        List<BaseSleepNightRecord> sleepNightRecordList = nightRecordDao.findByPatientAndDayOrderByCreateTimeDesc(patient, dayTime);
                        planDetail.setSleepNightRecordList(sleepNightRecordList);
                    }
                    String jsonStr = JSON.toJSONStringWithDateFormat(planDetail, "yyyy-MM-dd HH:mm:ss", SerializerFeature.WriteMapNullValue);
                    sleepInfo = JSONObject.parseObject(jsonStr);
                    sleepInfo.put("day", dayTime);
                    List<BaseSleepPlan> sleepPlans = sleepPlanDao.findByPatient(patient);
                    if (sleepPlans.size() > 0) {
                        BaseSleepPlan sleepPlan = sleepPlans.get(0);
                        String endTime = DateUtil.getNextMin(sleepPlan.getGetUpTime(), -1);
                        sleepInfo.put("sleepPlan", true);
                        sleepInfo.put("getUpTime", sleepPlan.getGetUpTime());
                        sleepInfo.put("siestaTime", sleepPlan.getNapTime());
                        sleepInfo.put("nightRestTime", sleepPlan.getNightRestTime());
                        sleepInfo.put("nightRecordTime", sleepPlan.getNightRestTime() + "-隔日" + endTime);
                    } else {
                        sleepInfo.put("sleepPlan", false);
                    }
                    sleepInfo.put("online", tmp.getBooleanValue("online"));
                    if (tmp.getBooleanValue("onbed")) {
                        sleepInfo.put("bedStatus", 1);
                        sleepInfo.put("heartRate", tmp.getString("heartrate"));
                        sleepInfo.put("breath", tmp.getString("breathrate"));
                    } else {
                        sleepInfo.put("bedStatus", 0);
                        sleepInfo.put("heartRate", null);
                        sleepInfo.put("breath", null);
                    }
                    BasePatientOutBed outBed = outBedDao.findByPatientAndDeviceSnAndStatus(patient, deviceDo.getDeviceSn(), 0);
                    if (null != outBed) {
                        String outBedTime = "";
                        Date date = new Date();
                        long millisecondsDiff = date.getTime() - outBed.getCreateTime().getTime();
                        long minutesDiff = millisecondsDiff / TimeUnit.MINUTES.toMillis(1L);
                        long hoursDiff = millisecondsDiff / TimeUnit.HOURS.toMillis(1L);
                        long minuteFieldDiff = minutesDiff - TimeUnit.HOURS.toMinutes(hoursDiff);
                        if (hoursDiff > 0L) {
                            outBedTime += String.format("%d小时", hoursDiff);
            if (null!=deviceInfo){
                if (deviceInfo.getBooleanValue("success")) {
                    result.put("patientAddress", deviceDo.getSosAddress());
                    JSONArray objInfo = deviceInfo.getJSONArray("objs");
                    if (objInfo.size() > 0) {
                        result.put("sleepStatus", true);
                        JSONObject tmp = objInfo.getJSONObject(0);
                        JSONObject sleepInfo = new JSONObject();
                        if (StringUtils.isBlank(dayTime)) {
                            dayTime = getSleepMonitoringDay(new Date(), patient);
                        }
                        if (minuteFieldDiff > 0) {
                            outBedTime += String.format("%d分钟", minuteFieldDiff);
                        List<BaseSleepPlanDetail> planDetails = sleepPlanDetailDao.findByPatientAndDay(patient, dayTime);
                        BaseSleepPlanDetail planDetail = new BaseSleepPlanDetail();
                        if (planDetails.size() > 0) {
                            planDetail = planDetails.get(0);
                            List<BaseSleepNightRecord> sleepNightRecordList = nightRecordDao.findByPatientAndDayOrderByCreateTimeDesc(patient, dayTime);
                            planDetail.setSleepNightRecordList(sleepNightRecordList);
                        }
                        sleepInfo.put("outBedTimeCrzq", outBed.getCreateTime());
                        sleepInfo.put("outBedTime", outBedTime);
                    } else {
                        sleepInfo.put("outBedTime", "无");
                        String jsonStr = JSON.toJSONStringWithDateFormat(planDetail, "yyyy-MM-dd HH:mm:ss", SerializerFeature.WriteMapNullValue);
                        sleepInfo = JSONObject.parseObject(jsonStr);
                        sleepInfo.put("day", dayTime);
                        List<BaseSleepPlan> sleepPlans = sleepPlanDao.findByPatient(patient);
                        if (sleepPlans.size() > 0) {
                            BaseSleepPlan sleepPlan = sleepPlans.get(0);
                            String endTime = DateUtil.getNextMin(sleepPlan.getGetUpTime(), -1);
                            sleepInfo.put("sleepPlan", true);
                            sleepInfo.put("getUpTime", sleepPlan.getGetUpTime());
                            sleepInfo.put("siestaTime", sleepPlan.getNapTime());
                            sleepInfo.put("nightRestTime", sleepPlan.getNightRestTime());
                            sleepInfo.put("nightRecordTime", sleepPlan.getNightRestTime() + "-隔日" + endTime);
                        } else {
                            sleepInfo.put("sleepPlan", false);
                        }
                        sleepInfo.put("online", tmp.getBooleanValue("online"));
                        if(tmp.getBooleanValue("online")){
                            sleepInfo.put("contactStatus", 1);
                        }
                        else {
                            sleepInfo.put("contactStatus", 0);
                        }
                        if (tmp.getBooleanValue("onbed")) {
                            sleepInfo.put("bedStatus", 1);
                            sleepInfo.put("heartRate", tmp.getString("heartrate"));
                            sleepInfo.put("breath", tmp.getString("breathrate"));
                        } else {
                            sleepInfo.put("bedStatus", 0);
                            sleepInfo.put("heartRate", null);
                            sleepInfo.put("breath", null);
                        }
                        BasePatientOutBed outBed = outBedDao.findByPatientAndDeviceSnAndStatus(patient, deviceDo.getDeviceSn(), 0);
                        if (null != outBed) {
                            String outBedTime = "";
                            Date date = new Date();
                            long millisecondsDiff = date.getTime() - outBed.getCreateTime().getTime();
                            long minutesDiff = millisecondsDiff / TimeUnit.MINUTES.toMillis(1L);
                            long hoursDiff = millisecondsDiff / TimeUnit.HOURS.toMillis(1L);
                            long minuteFieldDiff = minutesDiff - TimeUnit.HOURS.toMinutes(hoursDiff);
                            if (hoursDiff > 0L) {
                                outBedTime += String.format("%d小时", hoursDiff);
                            }
                            if (minuteFieldDiff > 0) {
                                outBedTime += String.format("%d分钟", minuteFieldDiff);
                            }
                            sleepInfo.put("outBedTimeCrzq", outBed.getCreateTime());
                            sleepInfo.put("outBedTime", outBedTime);
                        } else {
                            sleepInfo.put("outBedTime", "无");
                        }
                        result.put("sleepInfo", sleepInfo);
                    }
                    result.put("sleepInfo", sleepInfo);
                } else {
                    result.put("sleepStatus", false);
                    result.put("sleepInfo", "获取睡眠带数据失败");
                }
            } else {
            }else {
                result.put("sleepStatus", false);
                result.put("sleepInfo", "获取睡眠带数据失败");
            }
@ -2191,6 +2432,8 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
            BaseDoctorDO doctorDO = baseDoctorDao.findById(doctor);
            if (null != doctorDO) {
                BaseEmergencyWarnLogDO logDO = new BaseEmergencyWarnLogDO();
                BaseEmergencyWarnLogDO logTypeDO = new BaseEmergencyWarnLogDO();
                logDO.setUserCode(doctor);
                logDO.setUserName(doctorDO.getName());
                logDO.setOrderId(orderId);
@ -2198,6 +2441,15 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
                logDO.setCreateTime(new Date());
                logDO.setContent("社工" + doctorDO.getName() + "前往定位");
                logDao.save(logDO);
                logTypeDO.setUserCode(doctor);
                logTypeDO.setUserName(doctorDO.getName());
                logTypeDO.setOrderId(orderId);
                logTypeDO.setUserType(2);
                logTypeDO.setCreateTime(new Date());
                logTypeDO.setContent("前往定位");
                logTypeDO.setType(2);
                logDao.save(logTypeDO);
            }
        }
        result.put("resultFlag", 1);
@ -2213,13 +2465,24 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
        BaseDoctorDO doctorDO = baseDoctorDao.findById(doctor);
        if (null != doctorDO) {
            BaseEmergencyWarnLogDO logDO = new BaseEmergencyWarnLogDO();
            BaseEmergencyWarnLogDO logTypeDD = new BaseEmergencyWarnLogDO();
            logDO.setUserCode(doctor);
            logDO.setUserName(doctorDO.getName());
            logDO.setOrderId(orderId);
            logDO.setUserType(2);
            logDO.setCreateTime(new Date());
            logDO.setContent("社工" + doctorDO.getName() + "已知悉");
            logDO.setContent("已知悉");
            logTypeDD.setUserCode(doctor);
            logTypeDD.setUserName(doctorDO.getName());
            logTypeDD.setOrderId(orderId);
            logTypeDD.setUserType(2);
            logTypeDD.setCreateTime(new Date());
            logTypeDD.setContent("已知悉");
            logTypeDD.setType(1);
            logDao.save(logDO);
            logDao.save(logTypeDD);
        }
    }
@ -2344,6 +2607,9 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
            case "preventOutOfBed":
                categoryCode = "'13'";
                break;
            case "dailyWater":
                categoryCode = "'18'";
                break;
        }
        fliter = " and EXISTS (select 1 from wlyy_patient_device pd INNER JOIN dm_device dd on pd.device_id = dd.id  " +
@ -2476,6 +2742,9 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
            case "preventOutOfBed":
                categoryCode = "'13'";
                break;
            case "dailyWater":
                categoryCode = "'18'";
                break;
            case "emergencyAssistance":
                categoryCode = "'7','4'";
                break;
@ -2578,32 +2847,51 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
                            tmp.put("eCall", 0);
                            tmp.put("orderId", "");
                        }
                        BasePatientDO patientDO = basePatientDao.findById(id);
                        if (null != patientDO) {
                            if (StringUtils.isNotBlank(patientDO.getLatLon())) {
                                String[] latLon = patientDO.getLatLon().toString().split(",");
                                if (StringUtils.isNotBlank(patientDO.getHomeLatLon())) {
                                    String homeLatLon = patientDO.getHomeLatLon();
                                    double homeLat = Double.parseDouble(homeLatLon.split(",")[0]);
                                    double homeLon = Double.parseDouble(homeLatLon.split(",")[1]);
                                    double homeDistance = countDistance.getDistance(Double.parseDouble(latLon[0]), Double.parseDouble(latLon[1]),
                                            homeLat, homeLon);
                                    if (homeDistance * 1000 > 50) {
                                        tmp.put("atHome", false);
                        sql = "select pd.device_sn from wlyy_patient_device pd INNER JOIN dm_device dd " +
                                " on pd.device_id = dd.id where  pd.user = '" + patientTmp.get("id").toString() + "' and pd.del=0  and pd.category_code =4 ";
                        List<String> deviceSns = jdbcTemplate.queryForList(sql, String.class);
                        if (deviceSns.size() > 0) {
                            JSONObject objectTmp = patientMonitoringInfo(patientTmp.get("id").toString(), "preventLost", deviceSns.get(0),false);
                            tmp.put("atHome", objectTmp.get("atHome"));
                            if(objectTmp.containsKey("location")&&null!=objectTmp.getJSONObject("location")){
                                tmp.put("address", objectTmp.getJSONObject("location").get("address"));
                                String lonTmp = null==objectTmp.getJSONObject("location").get("lon")?"":objectTmp.getJSONObject("location").get("lon")+"";
                                String latTmp = null==objectTmp.getJSONObject("location").get("lat")?"":objectTmp.getJSONObject("location").get("lat")+"";
                                if (StringUtils.isNotBlank(latTmp)&&StringUtils.isNotBlank(lonTmp)){
                                    patientTmp.put("latLon",latTmp+","+lonTmp);
                                }
                            }else {
                                tmp.put("address", null);
                            }
                        }else {
                            BasePatientDO patientDO = basePatientDao.findById(id);
                            if (null != patientDO) {
                                if (StringUtils.isNotBlank(patientDO.getLatLon())) {
                                    String[] latLon = patientDO.getLatLon().toString().split(",");
                                    if (StringUtils.isNotBlank(patientDO.getHomeLatLon())&&latLon.length==2) {
                                        String homeLatLon = patientDO.getHomeLatLon();
                                        double homeLat = Double.parseDouble(homeLatLon.split(",")[0]);
                                        double homeLon = Double.parseDouble(homeLatLon.split(",")[1]);
                                        double homeDistance = countDistance.getDistance(Double.parseDouble(latLon[0]), Double.parseDouble(latLon[1]),
                                                homeLat, homeLon);
                                        if (homeDistance * 1000 > 50) {
                                            tmp.put("atHome", false);
                                        } else {
                                            tmp.put("atHome", true);
                                        }
                                    } else {
                                        tmp.put("atHome", true);
                                    }
                                    String locationAddress = LatitudeUtils.getLocationAddress(latLon[0], latLon[1]);
                                    tmp.put("address", locationAddress);
                                } else {
                                    tmp.put("atHome", true);
                                    tmp.put("address", "");
                                }
                                String locationAddress = LatitudeUtils.getLocationAddress(latLon[0], latLon[1]);
                                tmp.put("address", locationAddress);
                            } else {
                                tmp.put("atHome", true);
                                tmp.put("address", "");
                            }
                        }
                        object.put("info", tmp);
                        break;
                    default:
                        String patientId = (String) list.get(i).get("id");
@ -2644,5 +2932,60 @@ public class SecurityMonitoringOrderService extends BaseJpaService<SecurityMonit
        }
        return result;
    }
    /**
     * 获取居民专题 已绑定
     * @param patient
     * @return
     */
    public List<Map<String,Object>> getPatientDeviceTopic(String patient){
        List<Map<String,Object>> result = new ArrayList<>();
        String sql = " select distinct pd.device_sn,pd.category_code from wlyy_patient_device pd where pd.del=0  " +
                " and pd.category_code in (4,7,12,13,14,15,18) and pd.`user`='"+patient+"' " +
                " group by pd.category_code ";
        List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
        for (Map<String,Object> tmp:list){
            Map<String,Object> mapTmp = new HashMap<>();
            mapTmp.put("categoryCode",tmp.get("category_code").toString());
            switch (tmp.get("category_code").toString()){
                case "4":
                    mapTmp.put("deviceSn",tmp.get("device_sn").toString());
                    mapTmp.put("topic","preventLost");
                    result.add(mapTmp);
                    break;
                case "7":
                    mapTmp.put("deviceSn",tmp.get("device_sn").toString());
                    mapTmp.put("topic","emergencyAssistance");
                    result.add(mapTmp);
                    break;
                case "12":
                    mapTmp.put("deviceSn",tmp.get("device_sn").toString());
                    mapTmp.put("topic","preventFall");
                    result.add(mapTmp);
                    break;
                case "13":
                    mapTmp.put("deviceSn",tmp.get("device_sn").toString());
                    mapTmp.put("topic","preventOutOfBed");
                    result.add(mapTmp);
                    break;
                case "14":
                    mapTmp.put("deviceSn",tmp.get("device_sn").toString());
                    mapTmp.put("topic","preventGasLeakage");
                    result.add(mapTmp);
                    break;
                case "15":
                    mapTmp.put("deviceSn",tmp.get("device_sn").toString());
                    mapTmp.put("topic","preventFire");
                    result.add(mapTmp);
                    break;
                case "18":
                    mapTmp.put("deviceSn",tmp.get("device_sn").toString());
                    mapTmp.put("topic","dailyWater");
                    result.add(mapTmp);
                    break;
            }
        }
        return  result;
    }
}

+ 45 - 1
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/sign/ArchiveService.java

@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.care.dao.apply.PatientBedApplyDao;
import com.yihu.jw.care.dao.sign.ArchiveDao;
import com.yihu.jw.care.service.device.DeviceService;
import com.yihu.jw.care.service.role.RoleService;
import com.yihu.jw.doctor.dao.BaseDoctorDao;
import com.yihu.jw.doctor.dao.BaseDoctorHospitalDao;
import com.yihu.jw.entity.base.doctor.BaseDoctorDO;
@ -53,6 +54,8 @@ public class ArchiveService extends BaseJpaService<ArchiveDO, ArchiveDao> {
    private DeviceService deviceService;
    @Autowired
    private BasePatientService basePatientService;
    @Autowired
    private RoleService roleService;
    /**
@ -91,7 +94,7 @@ public class ArchiveService extends BaseJpaService<ArchiveDO, ArchiveDao> {
        String countSql = "SELECT count(*) from ( ";
        String filters = "from wlyy_archive a,base_patient p " +
                "WHERE  a.patient = p.id ";
                "WHERE  a.patient = p.id and p.del=1 ";
        if (StringUtils.isNotBlank(admin)){//管理员展示所有档案
@ -306,4 +309,45 @@ public class ArchiveService extends BaseJpaService<ArchiveDO, ArchiveDao> {
        Long count = jdbcTemplate.queryForObject(countSql+filter,Long.class);
        return PageEnvelop.getSuccessListWithPage("success",list,page,size,count);
    }
    /**
     * 管理员查找签约居民
     * @param area
     * @param level 1省2市3区县4机构5团队6医生
     * @param name
     * @param page
     * @param size
     * @return
     */
    public PageEnvelop<List<Map<String,Object>>> adminGetSignOlder(String area,Integer level,String name,Integer page,Integer size){
        page = page>0?page-1:0;
        String olderFilter = roleService.getOlderRoleSQL(area,level+"");
        String sql = "SELECT DISTINCT p.id,p.name,p.photo,p.sex,p.archive_type as archiveType,p.idcard,p.mobile,p.openid,p.pad_imei padImei " ;
        sql +=",(select COUNT(*) from wlyy_patient_device a where a.`user` = p.id and a.del=0) deviceFlag ";
        String countSql = "SELECT count(DISTINCT p.id) ";
        String filters ="";
        filters = " from base_patient p,wlyy_patient_label l WHERE p.del=1 and p.id = l.patient and l.label_type = 1 "
                +olderFilter.replace("{patient}","p.id") ;
        if(StringUtils.isNotBlank(name)){
            filters += " and (p.name like '%"+name+"%' or p.idcard like '%"+name+"%') ";
        }
        String orderBy = " ORDER BY p.id asc " +
                "LIMIT "+ page * size + "," + size;
        List<Map<String,Object>> list = jdbcTemplate.queryForList(sql+filters+orderBy);
        for (Map<String,Object> map : list){
            String idcard = map.get("idcard").toString();
            map.put("age", IdCardUtil.getAgeForIdcard(idcard));
            map.put("deviceType",deviceService.getPatientDeviceCategoryCode(map.get("id").toString()));
            //签约医生标识
            List<Map<String,Object>> doctorList = servicePackageService.getServerDoctorAll(map.get("id").toString(),"0","1");
            List<Map<String,Object>> helperList = servicePackageService.getServerDoctorAll(map.get("id").toString(),"0","2");
            map.put("helper", helperList.size()>0?1:0);
            map.put("doctor", doctorList.size()>0?1:0);
        }
        Long count = jdbcTemplate.queryForObject(countSql+filters,Long.class);
        return PageEnvelop.getSuccessListWithPage("success",list,page,size,count);
    }
}

+ 4 - 3
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/sign/ServicePackageService.java

@ -398,8 +398,9 @@ public class ServicePackageService extends BaseJpaService<ServicePackageDO, Serv
     * @return
     */
    public int getSignTotal(String doctorId){
        String sql = "SELECT COUNT(DISTINCT sr.patient) from base_service_package_sign_record sr,base_service_package_record r,base_team_member m " +
                "WHERE sr.status=1 and m.team_code = r.team_code and sr.id=r.sign_id " +
        String sql = "SELECT COUNT(DISTINCT sr.patient) from base_service_package_sign_record sr,base_service_package_record r, " +
                " base_team_member m,base_patient p " +
                "WHERE sr.status=1 and m.team_code = r.team_code and sr.id=r.sign_id and p.id = sr.patient and p.del=1  " +
                "and m.doctor_code = '"+doctorId+"' and m.del = '1' ";
        return jdbcTemplate.queryForObject(sql,Integer.class);
@ -818,7 +819,7 @@ public class ServicePackageService extends BaseJpaService<ServicePackageDO, Serv
        filters = "from base_service_package_sign_record sr,base_service_package_record r,  " +
                "                base_patient p,wlyy_patient_label l " +
                "                WHERE sr.id = r.sign_id and sr.status=1 and sr.patient = p.id and p.id = l.patient and l.label_type = 1 " ;
                "                WHERE sr.id = r.sign_id and sr.status=1 and p.del=1 and sr.patient = p.id and p.id = l.patient and l.label_type = 1 " ;
        if (StringUtils.isNotBlank(teamCode)){
            filters+= " and r.team_code =  '"+teamCode+"' ";

+ 107 - 33
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/statistics/DetectionPlatformService.java

@ -7,7 +7,10 @@ import com.yihu.jw.care.dao.device.DeviceDetailDao;
import com.yihu.jw.care.dao.device.PatientDeviceDao;
import com.yihu.jw.care.service.device.DeviceService;
import com.yihu.jw.care.service.device.PatientDeviceService;
import com.yihu.jw.care.service.role.RoleService;
import com.yihu.jw.care.service.sign.ServicePackageService;
import com.yihu.jw.doctor.dao.BaseDoctorDao;
import com.yihu.jw.entity.base.doctor.BaseDoctorDO;
import com.yihu.jw.entity.base.org.BaseOrgDO;
import com.yihu.jw.entity.base.patient.BasePatientDO;
import com.yihu.jw.entity.care.device.DeviceDetail;
@ -64,6 +67,10 @@ public class DetectionPlatformService  {
    private DeviceService deviceService;
    @Autowired
    private ServicePackageService servicePackageService;
    @Autowired
    private RoleService roleService;
    @Autowired
    private BaseDoctorDao doctorDao;
    /**
@ -114,7 +121,9 @@ public class DetectionPlatformService  {
        }
    }
    public JSONObject getDeviceComapny(){
    public JSONObject getDeviceComapny(String area,Integer level){
        String olderFilter = roleService.getOlderRoleSQL(area,level+"");
        String filter = "";
        String sqltmp = "SELECT GROUP_CONCAT(dict_code) orgCodes from wlyy_hospital_sys_dict WHERE dict_name = 'jkzl_child' or dict_name = 'jkzl_older' ";
        List<Map<String,Object>> listtmp =  jdbcTemplate.queryForList(sqltmp);
@ -141,7 +150,7 @@ public class DetectionPlatformService  {
        }
        String securitySql = "SELECT allCount,isUse,(allCount - isUse) inventory FROM \n" +
                "(SELECT COUNT(1) allCount FROM wlyy_devices WHERE device_type = 1) allCount,\n" +
                "(SELECT COUNT(DISTINCT pd.device_sn) isUse FROM wlyy_devices d,wlyy_patient_device pd WHERE d.device_type = 1 AND d.device_code = pd.device_sn and pd.user "+filter+" AND pd.del = 0) isUse";
                "(SELECT COUNT(DISTINCT pd.device_sn) isUse FROM wlyy_devices d,wlyy_patient_device pd WHERE d.device_type = 1 AND d.device_code = pd.device_sn and pd.user "+filter+" AND pd.del = 0 "+olderFilter.replace("{patient}","pd.user")+" ) isUse";
        List<Map<String , Object>> securityList = jdbcTemplate.queryForList(securitySql);
        if (securityList.size() > 0) {
            object.put("securityAllCount",securityList.get(0).get("allCount")); //安防设备总量
@ -154,7 +163,7 @@ public class DetectionPlatformService  {
        }
        String healthSql = "SELECT allCount,isUse,(allCount - isUse) inventory FROM \n" +
                "(SELECT COUNT(1) allCount FROM wlyy_devices WHERE device_type = 0) allCount,\n" +
                "(SELECT COUNT(DISTINCT pd.device_sn) isUse FROM wlyy_devices d,wlyy_patient_device pd WHERE d.device_type = 0 AND d.device_code = pd.device_sn and pd.user "+filter+" AND pd.del = 0) isUse";
                "(SELECT COUNT(DISTINCT pd.device_sn) isUse FROM wlyy_devices d,wlyy_patient_device pd WHERE d.device_type = 0 AND d.device_code = pd.device_sn and pd.user "+filter+" AND pd.del = 0 "+olderFilter.replace("{patient}","pd.user")+" ) isUse";
        List<Map<String , Object>> healthList = jdbcTemplate.queryForList(healthSql);
        if (healthList.size() > 0) {
            object.put("healthAllCount",healthList.get(0).get("allCount"));//健康设备总量
@ -170,12 +179,12 @@ public class DetectionPlatformService  {
        Long securityAllCount = (Long) securityList.get(0).get("allCount");
        Long healthAllCount = (Long) healthList.get(0).get("allCount");
        object.put("lawOfIOT",getRange( (securityIsUser.intValue() + healthIsUser.intValue() ),( securityAllCount.intValue() + healthAllCount.intValue()  ) ));//物联率 发放了就算物联
        object.put("isUseAllIot",(securityIsUser.intValue() + healthIsUser.intValue()));//已发放设备
        object.put("allIot",securityAllCount.intValue() + healthAllCount.intValue());//总设备
        String unUseSql = "SELECT DISTINCT wd.device_code FROM wlyy_devices wd INNER JOIN wlyy_patient_device pd on wd.device_code =pd.device_sn and pd.user "+filter+"  WHERE contact_status = 0";//contact_status = 0   失联
        object.put("isUseAllIot",(securityIsUser.intValue() + healthIsUser.intValue()));//已发放设备 失联分母、物联分子
        object.put("allIot",securityAllCount.intValue() + healthAllCount.intValue());//总设备 物联分母
        String unUseSql = "SELECT DISTINCT wd.device_code FROM wlyy_devices wd INNER JOIN wlyy_patient_device pd on wd.device_code =pd.device_sn and pd.user "+filter+" "+olderFilter.replace("{patient}","pd.user")+" WHERE contact_status = 0";//contact_status = 0   失联
        List<Map<String , Object>> unUseList = jdbcTemplate.queryForList(unUseSql);
        int unUseCount = unUseList.size();
        object.put("unUseCount",unUseCount);//设备失联数量
        object.put("unUseCount",unUseCount);//设备失联数量 失联分子
        object.put("lostLaw",getRange(unUseCount,(securityIsUser.intValue() + healthIsUser.intValue())));//设备失联率    失联设备/已发放设备
        return object;
    }
@ -489,8 +498,9 @@ public class DetectionPlatformService  {
        return object;
    }
    public JSONObject getServiceSituation(){
    public JSONObject getServiceSituation(String area,Integer level){
        JSONObject object = new JSONObject();
        String olderFilter = roleService.getOlderRoleSQL(area,level+"");
        /*****设备分类****/
        // SELECT hsd.`value` dict_value,aa.count FROM base_system_dict_entry hsd LEFT JOIN (SELECT serve_desc,COUNT(1) count FROM base_security_monitoring_order GROUP BY serve_desc)aa ON hsd.`value` = aa.serve_desc WHERE hsd.remark = 'security'
        String passportTypeSql = "SELECT sde.`value`,COUNT(d.id) count,GROUP_CONCAT(DISTINCT d.category_code SEPARATOR ',') AS category_code,GROUP_CONCAT(DISTINCT d.model SEPARATOR ',') AS model FROM base_system_dict_entry sde LEFT JOIN dm_device d ON FIND_IN_SET(sde.`code`,d.service_topic) WHERE sde.remark = 'security' GROUP BY sde.`value` ";
@ -507,7 +517,7 @@ public class DetectionPlatformService  {
                model = (String) passportType.get(i).get("model");
                model = model.replace(",","','");
                if ( count.intValue() > 0) {
                    useSql = "SELECT COUNT(DISTINCT device_sn) FROM wlyy_patient_device WHERE category_code IN ("+ passportType.get(i).get("category_code") +") AND del = 0";
                    useSql = "SELECT COUNT(DISTINCT device_sn) FROM wlyy_patient_device pd WHERE category_code IN ("+ passportType.get(i).get("category_code") +") AND del = 0 "+olderFilter.replace("{patient}","pd.user");
                    use = jdbcTemplate.queryForObject(useSql,Integer.class);
                    passportType.get(i).put("use",use);//使用
                    allSql = "SELECT COUNT(DISTINCT device_code) FROM wlyy_devices WHERE device_model IN ('"+ model +"')";
@ -527,37 +537,43 @@ public class DetectionPlatformService  {
    public JSONObject deviceAndService(){
        JSONObject object = new JSONObject();
        String device = "SELECT COUNT(1) FROM dm_device GROUP BY category_code";
        List<Map<String , Object>> mapList = jdbcTemplate.queryForList(device);
        object.put("deviceType",mapList.size());
        //安防设备数量
        String device = "SELECT COUNT(1) FROM dm_device where device_type=1";
        Integer deviceCount = jdbcTemplate.queryForObject(device,Integer.class);
        object.put("deviceType",deviceCount);
        //安防服务类型
        String service = "SELECT COUNT(1) FROM base_system_dict_entry WHERE remark = 'security'";
        Integer serviceCount = jdbcTemplate.queryForObject(service,Integer.class);
        object.put("serviceCount",serviceCount);
        //安防服务预警类型数量
        service = "SELECT count(1) from wlyy_hospital_sys_dict WHERE dict_name = 'security_server_dict'";
        Integer securityServerCount = jdbcTemplate.queryForObject(service,Integer.class);
        object.put("securityServerCount",securityServerCount);
        return object;
    }
    public List<Map<String,Object >> findSignOlder(String doctorId){
        /*String sql=  "SELECT p.id,p.name,p.photo,p.idcard,CAST(IFNULL(p.birthday,'') AS char ) birthday,p.residential_area residentialArea,p.sex, " +
                " p.ykt_id yktId, case 1 WHEN p.openid is not null then 1 WHEN p.on_line = '1' then 1 ELSE 0 end as online,IFNULL(p.sign_status,0) signStatus "+
                " from base_service_package_sign_record sr,base_patient p,base_service_package_record r,base_team_member m " +
                "WHERE sr.status=1 and sr.patient = p.id and m.team_code = r.team_code and sr.id=r.sign_id " +
                " and m.del = '1' and  p.del = '1' " +
                " GROUP BY p.id,p.name,p.photo,p.idcard,p.birthday,p.residential_area,p.sex,p.ykt_id,online,signStatus" +
                " ORDER BY online desc,p.ykt_id desc,signStatus desc ";*/
        String sql=  "SELECT p.id,p.name,p.photo,p.idcard,CAST(IFNULL(p.birthday,'') AS char ) birthday,p.residential_area residentialArea,p.sex, " +
                " p.ykt_id yktId, case 1 WHEN p.openid is not null then 1 WHEN p.on_line = '1' then 1 ELSE 0 end as online,IFNULL(p.sign_status,0) signStatus "+
                " from base_service_package_sign_record sr,base_patient p,base_service_package_record r,base_team_member m " +
                "WHERE sr.status=1 and sr.patient = p.id and m.team_code = r.team_code and sr.id=r.sign_id " +
                "and m.doctor_code = '"+doctorId+"' and m.del = '1' and  p.del = '1' " +
                " GROUP BY p.id,p.name,p.photo,p.idcard,p.birthday,p.residential_area,p.sex,p.ykt_id,online,signStatus" +
                " ORDER BY online desc,p.ykt_id desc,signStatus desc ";
//        String sql = "SELECT DISTINCT p.id,p.name,p.photo,p.idcard,p.mobile,p.openid,p.sex,p.pad_imei padImei,p.residential_area residentialArea  " +
//                " from base_service_package_sign_record sr,base_patient p,base_service_package_record r,base_team_member m " +
//                "WHERE sr.status=1 and sr.patient = p.id and m.team_code = r.team_code and sr.id=r.sign_id " +
//                "and m.doctor_code = '"+doctorId+"' and m.del = '1' ";
        BaseDoctorDO doctorDO = doctorDao.findById(doctorId);
        if (doctorDO==null){
            return null;
        }
        String sql = "";
        if (2==doctorDO.getLevel()){//社工
            sql=  "SELECT p.id,p.name,p.photo,p.idcard,CAST(IFNULL(p.birthday,'') AS char ) birthday,p.residential_area residentialArea,p.sex, " +
                    " p.ykt_id yktId, case 1 WHEN p.openid is not null then 1 WHEN p.on_line = '1' then 1 ELSE 0 end as online,IFNULL(p.sign_status,0) signStatus "+
                    " from base_service_package_sign_record sr,base_patient p,base_service_package_record r,base_team_member m " +
                    "WHERE sr.status=1 and sr.patient = p.id and m.team_code = r.team_code and sr.id=r.sign_id " +
                    "and m.doctor_code = '"+doctorId+"' and m.del = '1' and  p.del = '1' " +
                    " GROUP BY p.id,p.name,p.photo,p.idcard,p.birthday,p.residential_area,p.sex,p.ykt_id,online,signStatus" +
                    " ORDER BY online desc,p.ykt_id desc,signStatus desc ";
        }else if (4==doctorDO.getLevel()){//助老员
            sql = " SELECT p.id,p.name,p.photo,p.idcard,CAST(IFNULL(p.birthday,'') AS char ) birthday,p.residential_area residentialArea, " +
                  " p.sex,p.ykt_id yktId, case 1 WHEN p.openid is not null then 1 WHEN p.on_line = '1' then 1 ELSE 0 end as online,IFNULL(p.sign_status,0) signStatus " +
                  " from base_patient p,base_patient_helper ph " +
                  " where p.id = ph.patient and p.del=1 and ph.del=1 and ph.doctor='"+doctorId+"' ";
        }else {
            return null;
        }
        List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
        String sqlLife= "SELECT COUNT(*) from base_life_care_order ";
        String sqlEmergency= "SELECT COUNT(*) from base_emergency_assistance_order ";
@ -595,4 +611,62 @@ public class DetectionPlatformService  {
        }
        return list;
    }
    /**
     * 获取各专题绑定人数
     * 电子围栏监护  绑定手表 category_code:4
     * 防跌倒监护  绑定监控器 category_code:12
     * 紧急呼叫服务  绑定居家呼叫器 category_code:7
     * 火灾预警监护  绑定烟雾报警器 category_code:15
     * 睡眠监护  绑定床带 category_code:13
     * 燃气泄漏监护  绑定燃气预警器 category_code:14
     */
    public JSONObject getTopicPeopleNums(String area,String level){
        JSONObject result = new JSONObject();
        String sql = " select dict_code from wlyy_hospital_sys_dict where dict_name='security_topic_dict' ";
        List<String> sqlList = jdbcTemplate.queryForList(sql,String.class);
        for (String tmp:sqlList){
            result.put(tmp,0);
        }
        result.put("emergencyAssistance",0);
        String olderFilter = roleService.getOlderRoleSQL(area,level);
//        String filter = " ";
//        String sqltmp = "SELECT GROUP_CONCAT(dict_code) usrCodes from wlyy_hospital_sys_dict WHERE dict_name = 'jkzl_child' or dict_name = 'jkzl_older' ";
//        List<Map<String, Object>> listtmp = jdbcTemplate.queryForList(sqltmp);
//        if (listtmp.size() > 0) {
//            String orgCodes = String.valueOf(listtmp.get(0).get("usrCodes"));
//            if (StringUtils.isNotBlank(orgCodes)) {
//                orgCodes = orgCodes.replaceAll(",", "','");
//                filter = " and pd.user not in ('" + orgCodes + "') ";
//            }
//        }
        sql = " select count(DISTINCT pd.user) total,pd.category_code from wlyy_patient_device pd where pd.del=0  " +
                " and pd.category_code in (4,7,12,13,14,15) " + olderFilter.replace("{patient}","pd.user")+
                " group by pd.category_code ";
        List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
        for (Map<String,Object> tmp:list){
            switch (tmp.get("category_code").toString()){
                case "4":
                    result.put("preventLost",Long.valueOf(tmp.get("total").toString()));
                    break;
                case "7":
                    result.put("emergencyAssistance",Long.valueOf(tmp.get("total").toString()));
                    break;
                case "12":
                    result.put("preventFall",Long.valueOf(tmp.get("total").toString()));
                    break;
                case "13":
                    result.put("preventOutOfBed",Long.valueOf(tmp.get("total").toString()));
                    break;
                case "14":
                    result.put("preventGasLeakage",Long.valueOf(tmp.get("total").toString()));
                    break;
                case "15":
                    result.put("preventFire",Long.valueOf(tmp.get("total").toString()));
                    break;
            }
        }
        return  result;
    }
}

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

@ -4,7 +4,9 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.care.dao.device.PatientDeviceDao;
import com.yihu.jw.care.dao.message.BaseServiceNewsDao;
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.vo.NumVo;
@ -14,14 +16,13 @@ import com.yihu.jw.doctor.dao.BaseDoctorHospitalDao;
import com.yihu.jw.entity.base.doctor.BaseDoctorDO;
import com.yihu.jw.entity.base.login.BaseLoginLogDO;
import com.yihu.jw.entity.base.patient.BasePatientDO;
import com.yihu.jw.entity.care.assistance.EmergencyAssistanceDO;
import com.yihu.jw.entity.care.device.DevicePatientDevice;
import com.yihu.jw.entity.hospital.message.SystemMessageDO;
import com.yihu.jw.entity.care.message.BaseServiceNews;
import com.yihu.jw.es.es.ElasticSearchHelperUtil;
import com.yihu.jw.es.util.ElasticsearchUtil;
import com.yihu.jw.es.util.SaveModel;
import com.yihu.jw.hospital.message.dao.SystemMessageDao;
import com.yihu.jw.im.util.ImUtil;
import com.yihu.jw.message.dao.MessageDao;
import com.yihu.jw.org.dao.BaseOrgDao;
import com.yihu.jw.patient.dao.BasePatientDao;
import com.yihu.jw.restmodel.web.PageEnvelop;
@ -29,25 +30,16 @@ import com.yihu.jw.util.common.IdCardUtil;
import com.yihu.jw.util.date.DateUtil;
import org.apache.commons.collections.map.HashedMap;
import org.apache.commons.lang.StringUtils;
import org.nlpcn.es4sql.jdbc.ObjectResult;
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.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.persistence.Transient;
import javax.persistence.criteria.CriteriaBuilder;
import java.awt.print.Pageable;
import java.sql.Timestamp;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
@ -94,6 +86,10 @@ public class StatisticsService {
    private String esType;
    @Autowired
    private CarePatientService carePatientService;
    @Autowired
    private RoleService roleService;
    @Autowired
    private BaseServiceNewsDao baseServiceNewsDao;
    private static final String defalutArea = "330100";
@ -118,6 +114,9 @@ public class StatisticsService {
        // 39 老人-生活照料-服务工单数
        // 44 老人-生活照料-代预约
        // 54 新生儿-上门辅导-工单发起数
        // 64 活动浏览数
        // 65 课程播放数
        // 66 活动报名数
        String index = "28,31,35,37,39,44,54";
        String[] indexes = index.split(",");
@ -126,6 +125,17 @@ public class StatisticsService {
            SaveModel saveModel = elasticsearchUtil.findOneDateQuotaLevel0(endDate, endDate, defalutArea, defalutLevel, ind, SaveModel.timeLevel_DDL);
            res.put("index_" + ind, saveModel.getResult2().longValue());
        }
        // activity-1   活动浏览次数64
        // activity-2   公艺课程播放65
        // activity-3   公艺课程播放65
        SaveModel saveModel = elasticsearchUtil.findOneDateQuotaLevel0(endDate, endDate, defalutArea, defalutLevel, "64", SaveModel.timeLevel_DDL);
        res.put("activity_1", saveModel.getResult2().longValue());
        saveModel = elasticsearchUtil.findOneDateQuotaLevel0(endDate, endDate, defalutArea, defalutLevel, "65", SaveModel.timeLevel_DDL);
        res.put("activity_2", saveModel.getResult2().longValue());
        saveModel = elasticsearchUtil.findOneDateQuotaLevel0(endDate, endDate, defalutArea, defalutLevel, "66", SaveModel.timeLevel_DDL);
        res.put("activity_3", saveModel.getResult2().longValue());
        //41紧急预警43安防要与实时一样,查sql
        String sqltmp = "SELECT GROUP_CONCAT(dict_code) orgCodes from wlyy_hospital_sys_dict WHERE dict_name = 'jkzl_org' ";
        List<Map<String, Object>> listtmp = jdbcTemplate.queryForList(sqltmp);
@ -159,21 +169,6 @@ public class StatisticsService {
        //居民健康标签纬度
        res.put("patientLabelStatistic", statisticsOrderServer("47", endDate, 2, "2"));
        // activity-1   活动浏览次数
        // activity-2   公艺课程播放
        res.put("activity_1", 0);
        res.put("activity_2", 0);
        String sql = " SELECT activity_type, COUNT(id) total  FROM base_activity_click WHERE activity_type IN (1, 2) GROUP BY activity_type";
        List<Map<String, Object>> lists = jdbcTemplate.queryForList(sql);
        for (Map<String, Object> tmp : lists) {
            Integer num = Integer.parseInt(tmp.get("total").toString());
            res.put("activity_" + tmp.get("activity_type").toString(), num);
        }
        //activity-3 幼儿活动报名-总数
        sql = " select count(id) as total from base_child_activity_registration ";
        Integer count = jdbcTemplate.queryForObject(sql, Integer.class);
        res.put("activity_3", count);
        return res;
    }
@ -194,7 +189,8 @@ public class StatisticsService {
        /*---------sql----------*/
        // 3 幼儿活动
        if ("3".equals(type)) {
            sqlbuff.append("SELECT count(id) amount,DATE_FORMAT(create_time,'%Y-%m-%d') as `range` FROM base_child_activity_registration WHERE DATE_SUB(CURDATE(), INTERVAL " + day + " DAY) <= date(create_time) GROUP BY DATE_FORMAT(create_time,'%Y-%m-%d') ORDER BY create_time");
            sqlbuff.append("SELECT count(id) amount,DATE_FORMAT(create_time,'%Y-%m-%d') as `range` FROM base_child_activity_registration WHERE DATE_SUB(CURDATE(), INTERVAL " + day + " DAY) <= date(create_time) " +
                    " and org_code not in (SELECT dict_code from wlyy_hospital_sys_dict WHERE dict_name = 'jkzl_org') GROUP BY DATE_FORMAT(create_time,'%Y-%m-%d') ORDER BY create_time");
            listMaps = jdbcTemplate.queryForList(String.valueOf(sqlbuff));
            res.put("count", listMaps);
        }
@ -315,7 +311,7 @@ public class StatisticsService {
            }
            /*幼儿活动报名 总数*/
            String sqlActivity = " select count(id) as total from base_child_activity_registration ";
            String sqlActivity = " select count(id) as total from base_child_activity_registration where org_code not in (SELECT dict_code from wlyy_hospital_sys_dict WHERE dict_name = 'jkzl_org') ";
            Integer count = jdbcTemplate.queryForObject(sqlActivity, Integer.class);
            res.put("activity_3", count);
        }
@ -334,12 +330,14 @@ public class StatisticsService {
        JSONObject res = new JSONObject();
        String medicalInstitutionSql = "SELECT COUNT(1) FROM base_org WHERE (type = 1 OR type = 2) AND del = 1 " + orgFilter;
        String elderlyCarServiceSql = "SELECT COUNT(1) FROM base_org WHERE type = 3 AND del = 1" + orgFilter;
        String elderlyCarServiceSql = "SELECT COUNT(1) FROM base_org WHERE type = 3 AND del = 1 and code not in ('zdjsylfwyxgszhfgs') " + orgFilter;
        String childcareInstitutionsssSql = "SELECT COUNT(1) FROM base_org WHERE type = 4 AND del = 1" + orgFilter;
        String careCenterNumSql = "SELECT COUNT(1) FROM base_org WHERE type = 6 AND del = 1" + orgFilter;
        //社工和教师注册人数
        Integer doctorNum = 0;
        Integer helperNum = 0;
        Integer helper4Num = 0;
        Integer teacherNum = 0;
        String sql2 = "SELECT COUNT(a.id) c,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 ( " +
@ -357,6 +355,10 @@ public class StatisticsService {
                helperNum = num;
                continue;
            }
            if ("4".equals(archive_type)) {
                helper4Num = num;
                continue;
            }
            if ("3".equals(archive_type)) {
                teacherNum = num;
            }
@ -364,11 +366,14 @@ public class StatisticsService {
        Integer medicalInstitutionNum = jdbcTemplate.queryForObject(medicalInstitutionSql, Integer.class);
        Integer elderlyCarServiceNum = jdbcTemplate.queryForObject(elderlyCarServiceSql, Integer.class);
        Integer childcareInstitutionsssNum = jdbcTemplate.queryForObject(childcareInstitutionsssSql, Integer.class);
        Integer careCenterNum = jdbcTemplate.queryForObject(careCenterNumSql, Integer.class);
        res.put("medicalInstitutionNum", medicalInstitutionNum);             //医疗结构
        res.put("elderlyCarServiceNum", elderlyCarServiceNum);               //养老机构
        res.put("childcareInstitutionsssNum", childcareInstitutionsssNum);   //托育机构
        res.put("careCenterNum", careCenterNum);   //照料中心
        res.put("doctorNum", doctorNum);     //医生
        res.put("helperNum", helperNum);     //社工
        res.put("helper4Num", helper4Num);   //助老员
        res.put("teacherNum", teacherNum);   //教师
        return res;
    }
@ -377,19 +382,18 @@ public class StatisticsService {
    public JSONObject realTimeDataNew() throws Exception {
        JSONObject res = new JSONObject();
        String filter = "";
        String userfilter = "";
        String sqltmp = "SELECT GROUP_CONCAT(dict_code) orgCodes from wlyy_hospital_sys_dict WHERE dict_name = 'jkzl_child' or dict_name = 'jkzl_older' ";
        List<Map<String, Object>> listtmp = jdbcTemplate.queryForList(sqltmp);
        if (listtmp.size() > 0) {
            String orgCodes = String.valueOf(listtmp.get(0).get("orgCodes"));
            orgCodes = orgCodes.replaceAll(",", "','");
            filter = " and id not in ('" + orgCodes + "')";
            userfilter = " not in ('" + orgCodes + "') ";
        }
        Integer olderTotal = 0;
        Integer childTotal = 0;
        String sql1 = "SELECT COUNT(*) c,archive_type*1 as archive_type from base_patient WHERE archive_type is not null and del='1' ";
        sql1 += filter;
        String sql1 = "SELECT COUNT(*) c,archive_type*1 as archive_type from base_patient WHERE archive_type is not null and del='1' and id "+userfilter;
        sql1 += " GROUP BY archive_type";
        List<Map<String, Object>> list1 = jdbcTemplate.queryForList(sql1);
@ -412,17 +416,15 @@ public class StatisticsService {
        sqltmp = "SELECT GROUP_CONCAT(dict_code) orgCodes from wlyy_hospital_sys_dict WHERE dict_name = 'jkzl_org' ";
        listtmp = jdbcTemplate.queryForList(sqltmp);
        filter = "";
        String filter2 = "";
        String orgFilter = "";
        if (listtmp.size() > 0) {
            String orgCodes = String.valueOf(listtmp.get(0).get("orgCodes"));
            orgCodes = orgCodes.replaceAll(",", "','");
            filter = " and hospital not in ('" + orgCodes + "') ";
            filter2 = " and org_code not in ('" + orgCodes + "') ";
            orgFilter = "  not in ('" + orgCodes + "') ";
        }
        String emergencyCallSql = "SELECT COUNT(1) FROM base_emergency_assistance_order WHERE status <> -1 " + filter2;
        String emergencyCallSql = "SELECT COUNT(1) FROM base_emergency_assistance_order WHERE status <> -1 and org_code  " + orgFilter;
        Integer emergencyCallNum = jdbcTemplate.queryForObject(emergencyCallSql, Integer.class);
        String securityMonitoringSql = "SELECT COUNT(1) FROM base_security_monitoring_order where 1=1 " + filter;
        String securityMonitoringSql = "SELECT COUNT(1) FROM base_security_monitoring_order where 1=1 and hospital " + orgFilter;
        Integer securityMonitoringNum = jdbcTemplate.queryForObject(securityMonitoringSql, Integer.class);
        res.put("olderTotal", olderTotal);   //老人注册人数
        res.put("childTotal", childTotal);   //儿童注册人数
@ -430,6 +432,27 @@ public class StatisticsService {
        res.put("securityEquipmentNum", securityEquipmentNum);   //安防设备
        res.put("emergencyCallNum", emergencyCallNum);   //紧急呼叫的次数
        res.put("securityMonitoringNum", securityMonitoringNum);   //安防监护触发工单的次数
        //离线的设备数 超过6小时未受理的预警数  超6小时未响应服务(审核照料发起6小时未接单)
        sqltmp = " select count(distinct pd.device_sn) 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 " +
                "where (dev.contact_status=0 or dev.contact_status is null ) and pd.user "+userfilter;
        Long count = jdbcTemplate.queryForObject(sqltmp,Long.class);//离线设备
        res.put("offlineDevice", count);
        sqltmp = " select sum(total) from ( " +
                "select count(o.id) total from  " +
                "base_emergency_assistance_order o INNER JOIN base_patient p on o.patient = p.id where status=1 and o.patient " +userfilter+
                " and (TIMESTAMPDIFF(HOUR,o.create_time,now()) >=6) and not EXISTS ( " +
                "select 1 from base_emergency_warn_log log where log.order_id = o.id) " +
                "union all " +
                "select count(o.id) total from  " +
                "base_security_monitoring_order o INNER JOIN base_patient p on o.patient = p.id where status=1 and o.patient " +userfilter+
                " and (TIMESTAMPDIFF(HOUR,o.create_time,now()) >=6) and not EXISTS ( " +
                "select 1 from base_emergency_warn_log log where log.order_id = o.id))B ";
        count = jdbcTemplate.queryForObject(sqltmp,Long.class);
        res.put("overTimeWarnOrder", count);//超过6小时未受理的预警数
        sqltmp = " select count(o.id) from base_life_care_order o where `status`=1 and (TIMESTAMPDIFF(hour,o.create_time,NOW())) >=6 and o.hospital "+orgFilter;
        count = jdbcTemplate.queryForObject(sqltmp,Long.class);
        res.put("overTimeServerOrder", count);//超6小时未响应服务
        return res;
    }
@ -450,8 +473,8 @@ public class StatisticsService {
            }
        }
        String sql = "select * from base_login_log where create_time>='" + dateStr + "' " + filter + " order by create_time desc limit " + (page - 1) * size + "," + size;
        String sqlCount = "select count(id) from base_login_log where create_time>='" + dateStr + "' " + filter;
        String sql = "select * from base_login_log where login_type<>1 and create_time>='" + dateStr + "' " + filter + " order by create_time desc limit " + (page - 1) * size + "," + size;
        String sqlCount = "select count(id) from base_login_log where login_type<>1 and create_time>='" + dateStr + "' " + filter;
        Long count = jdbcTemplate.queryForObject(sqlCount, Long.class);
        List<BaseLoginLogDO> loginLogDOs = jdbcTemplate.query(sql, new BeanPropertyRowMapper(BaseLoginLogDO.class));
        for (BaseLoginLogDO log : loginLogDOs) {
@ -638,8 +661,11 @@ public class StatisticsService {
    /**
     * 平台人员实时统计
     * @param area 查询区域 目前仅支持查询老人、社工、家属
     * @param level 区域等级 2市3区4机构5团队6医生
     */
    public JSONObject platformPeople() {
    public JSONObject platformPeople(String area,Integer level) {
        String areaFilter = " ";
        JSONObject result = new JSONObject();
        Integer olderTotal = 0;
        Integer childTotal = 0;
@ -659,6 +685,14 @@ public class StatisticsService {
        Integer olderFamilyOn = 0;
        Integer olderFamilyOff = 0;
        Integer olderFamilyBinding = 0;//家属绑定老人数量
        Integer helper4On=0;
        Integer helper4Off=0;
        Integer helper4Total=0;
        Integer unSignOlderTotal=0;
        Integer unSignOlderOff=0;
        Integer unSignOlderOn=0;
        //儿童注册人数
        String childFilter = "";
        String sqlChildtmp = "SELECT GROUP_CONCAT(dict_code) orgCodes from wlyy_hospital_sys_dict WHERE dict_name = 'jkzl_child' or dict_name = 'jkzl_older'  ";
@ -680,7 +714,6 @@ public class StatisticsService {
                childOff += num;
            }
        }
        //老人
        String oldFilter = "";
        String sqlOldtmp = "SELECT GROUP_CONCAT(dict_code) orgCodes from wlyy_hospital_sys_dict WHERE dict_name = 'jkzl_older' ";
@ -691,9 +724,14 @@ public class StatisticsService {
            oldFilter = " and a.id not in ('" + orgCodes + "')";
        }
        String sql1 = "SELECT COUNT(*) c,case 1 WHEN openid is not null then 1 WHEN a.on_line = '1' then 1 ELSE 0 end as online from base_patient a WHERE archive_type = 1" +
                " and del='1' " + oldFilter + " GROUP BY online";
        if (org.apache.commons.lang3.StringUtils.isNotBlank(area)&&5==level){
            areaFilter = " 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='"+area+"') ";
        }
        String sql1 = "SELECT COUNT(*) c,case 1 WHEN openid is not null then 1 WHEN a.on_line = '1' then 1 ELSE 0 end as online from base_patient a WHERE archive_type = 1 and sign_status=1 " +
                " and del='1' "+areaFilter+" " + oldFilter + " GROUP BY online";
        List<Map<String, Object>> list1 = jdbcTemplate.queryForList(sql1);
        for (Map<String, Object> map : list1) {
            Integer num = Integer.valueOf(map.get("c").toString());
@ -707,8 +745,27 @@ public class StatisticsService {
        olderTotal = olderOff + olderOn;
        childTotal = childOff + childOn;
        sql1 = "SELECT COUNT(*) c,case 1 WHEN openid is not null then 1 WHEN a.on_line = '1' then 1 ELSE 0 end as online from base_patient a WHERE archive_type = 1 and (sign_status=0 or sign_status is null ) " +
                " and del='1' " + oldFilter + " GROUP BY online";
        list1 = jdbcTemplate.queryForList(sql1);
        for (Map<String, Object> map : list1) {
            Integer num = Integer.valueOf(map.get("c").toString());
            Integer online = Integer.valueOf(map.get("online").toString());
            if (online == 1) {
                unSignOlderOn += num;
            } else {
                unSignOlderOff += num;
            }
        }
        unSignOlderTotal = unSignOlderOff+unSignOlderOn;
        //社工和教师注册人数
        String sql2 = "SELECT COUNT(a.id) c,a.doctor_level,IFNULL(a.on_line,0) online from base_doctor a,base_doctor_hospital h where a.id=h.doctor_code and a.del = '1' and h.del = '1' " +
        if (org.apache.commons.lang3.StringUtils.isNotBlank(area)&&5==level){
            areaFilter = " and EXISTS ( select 1 from base_team_member mem where mem.doctor_code = a.id " +
                    " and mem.team_code='"+area+"' and mem.del=1 )  ";
        }
        String sql2 = "SELECT COUNT(a.id) c,a.doctor_level,IFNULL(a.on_line,0) online " +
                "from base_doctor a,base_doctor_hospital h where a.id=h.doctor_code and a.del = '1' and h.del = '1' " +areaFilter+
                "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,on_line";
@ -732,9 +789,17 @@ public class StatisticsService {
                    teacherOff += num;
                }
            }
            if ("4".equals(archive_type)) {
                if (online == 1) {
                    helper4On += num;
                } else {
                    helper4Off += num;
                }
            }
        }
        helperTotal = helperOff + helperOn;
        teacherTotal = teacherOff + teacherOn;
        helper4Total = helper4On + helper4Off;
        //老人家属
        String olderRelativeFilter = "";
@ -745,7 +810,21 @@ public class StatisticsService {
            orgCodes = orgCodes.replaceAll(",", "','");
            olderRelativeFilter = " and t2.id not in ('" + orgCodes + "') ";
        }
        sql2 = " select count(id) count,if(openid is null,0,1) online from base_patient t2 where  archive_type=3 and del=1 "+olderRelativeFilter+" GROUP BY online; ";
        if (org.apache.commons.lang3.StringUtils.isNotBlank(area)&&5==level){
            //有社区只查询该社区老人的家属列表
            areaFilter = " 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)  = t3.id and r.team_code='"+area+"' ) ";
            sql2 = " select count(distinct t2.id) count,if(t2.openid is null,0,1) online " +
                    "from base_patient t2 left JOIN base_patient_family_member t1 on t1.family_member = t2.id " +
                    "left join base_patient t3 on t3.id = t1.patient   " +
                    "where t2.archive_type=3 and t2.del=1 and t3.archive_type=1 and t3.del=1 "+olderRelativeFilter+areaFilter + "GROUP BY online ";
        }else {
            sql2 = " select count(id) count,if(openid is null,0,1) online from base_patient t2 where  archive_type=3 and del=1 "+olderRelativeFilter+" GROUP BY online; ";
        }
        List<Map<String, Object>> oldFamilyList2 = jdbcTemplate.queryForList(sql2);
        for(Map<String,Object>tmp:oldFamilyList2){
            Integer num = Integer.valueOf(tmp.get("count").toString());
@ -759,26 +838,39 @@ public class StatisticsService {
        }
        olderFamilyTotal = olderFamilyOff+olderFamilyOn;
        //家属绑定老人数量
        if (org.apache.commons.lang3.StringUtils.isNotBlank(area)&&5==level){
            areaFilter = " 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)  = t3.id and r.team_code='"+area+"' ) ";
        }
        sql2 = " select count(distinct t3.id) total from base_patient t2 left JOIN base_patient_family_member t1 on t1.family_member = t2.id " +
                " Inner join base_patient t3 on t3.id = t1.patient " +
                " where t2.archive_type=3 and t2.del=1 and t3.archive_type=1 and t3.del=1 ";
                " where t2.archive_type=3 and t2.del=1 and t3.archive_type=1 and t3.del=1 "+areaFilter ;
        olderFamilyBinding = jdbcTemplate.queryForObject(sql2,Integer.class);
        //helper 社工,teacher 教师,child 幼儿,olderWx 老人公众号,olderPad 老人平板
        //helper 社工,teacher 教师,child 幼儿,olderWx 老人公众号,olderPad 老人平板 olderFamily老人家属
        //helper4助老员 unSignOlder社区老人
        result.put("olderTotal", olderTotal);
        result.put("olderOn", olderOn);
        result.put("olderOff", olderOff);
        result.put("childTotal", childTotal);
        result.put("helperTotal", helperTotal);
        result.put("teacherTotal", teacherTotal);
        result.put("helperOn", helperOn);
        result.put("teacherOn", teacherOn);
        result.put("childOn", childOn);
        result.put("olderOn", olderOn);
        result.put("childOff", childOff);
        result.put("unSignOlderTotal", unSignOlderTotal);
        result.put("unSignOlderOff", unSignOlderOff);
        result.put("unSignOlderOn", unSignOlderOn);
        result.put("helperTotal", helperTotal);
        result.put("helperOff", helperOff);
        result.put("helperOn", helperOn);
        result.put("teacherTotal", teacherTotal);
        result.put("teacherOff", teacherOff);
        result.put("olderOff", olderOff);
        result.put("teacherOn", teacherOn);
        result.put("helper4Total", helper4Total);
        result.put("helper4On", helper4On);
        result.put("helper4Off", helper4Off);
        //老人家属
        result.put("olderFamilyTotal", olderFamilyTotal);
@ -793,7 +885,7 @@ public class StatisticsService {
     *
     * @param endDate
     * @param area
     * @param level   2 市  3区  4医院 5、科室 6医生
     * @param level   2 市  3区  4医院 5、团队 6医生
     * @param index
     * @param type
     * @return
@ -851,7 +943,6 @@ public class StatisticsService {
        res.put("inTime", saveModel3.getResult2().longValue());
        res.put("noReplyRate", statisticsUtilService.getTwoRange(saveModel2.getResult2(), saveModel1.getResult2()));
        res.put("inTimeRate", statisticsUtilService.getTwoRange(saveModel3.getResult2(), saveModel1.getResult2()));
        return res;
    }
@ -973,6 +1064,30 @@ public class StatisticsService {
            arrTmp.put("patientLabelList", labelArr);
            res.put("patientLabelStatistic", arrTmp);
            //居民类型标签
            list = elasticsearchUtil.findDateAllQuotaLevel1(endDate, endDate, area, level, "56", SaveModel.timeLevel_DDL, null, null, "2");
            labelArr = new JSONArray();
            total = 0l;
            for (int i = 0; i < list.size(); i++) {
                SaveModel saveModel = list.get(i);
                JSONObject json = new JSONObject();
                if (saveModel.getResult2().longValue() == 0 && StringUtils.isBlank(saveModel.getSlaveKey1())) {
                    continue;
                }
                if ("0".equals(saveModel.getSlaveKey1())) {//去除60岁以下老人
                    continue;
                }
                json.put("num", saveModel.getResult2().longValue());
                json.put("code", saveModel.getSlaveKey1());
                json.put("name", saveModel.getSlaveKey1Name());
                total += saveModel.getResult2().longValue();
                labelArr.add(json);
            }
            arrTmp = new JSONObject();
            arrTmp.put("patientLabelTotal", total);
            arrTmp.put("patientLabelList", labelArr);
            res.put("olderLabelStatistic", arrTmp);
            //年龄分布 50
//            ageList = elasticsearchUtil.findDateAllQuotaLevel1(endDate, endDate, area, level, "50", SaveModel.timeLevel_DDL,null,null,"2");
            List<SaveModel> ageList = elasticsearchUtil.findDateAllQuotaLevel1(endDate, endDate, area, level, "50", SaveModel.timeLevel_DDL, null, null, "2");
@ -1022,7 +1137,8 @@ public class StatisticsService {
        if ("37".equals(index)) {
            archiType = "1";
        }
        List<SaveModel> sexList = elasticsearchUtil.findDateQuotaLevel2ByKeyGroup(endDate, endDate, defalutArea, level, "51", SaveModel.timeLevel_DDL, null, archiType, null, null, "2", "1");
        List<SaveModel> sexList = elasticsearchUtil.findDateQuotaLevel2ByKeyGroup(endDate, endDate, area, level,
                "51", SaveModel.timeLevel_DDL, null, archiType, null, null, null, "1");
        JSONArray sexArray = new JSONArray();
        for (int i = 0; i < sexList.size(); i++) {
            SaveModel saveModel = sexList.get(i);
@ -1042,9 +1158,9 @@ public class StatisticsService {
     */
    public JSONObject lifeCareAnalysis(String endDate, String area, int level) throws Exception {
        JSONObject res = new JSONObject();
        String totalIndex = "38";
        String noReplyIndex = "39";
        String inTimeIndex = "40";
        String totalIndex = "38";//已服务人数
        String noReplyIndex = "39"; //工单数 (除了已取消与未支付)
        String inTimeIndex = "48"; //工单项目数 (除了已取消与未支付)
        //老人数
        SaveModel saveModel1 = elasticsearchUtil.findOneDateQuotaLevel0(endDate, endDate, area, level, totalIndex, SaveModel.timeLevel_DDL);
        //工单数
@ -1266,7 +1382,12 @@ public class StatisticsService {
            JSONArray jsonArray = new JSONArray();
            long total = 0l;
            //总量
            List<SaveModel> list = elasticsearchUtil.findDateAllQuotaLevel1(endDate, endDate, defalutArea, level, ind, SaveModel.timeLevel_DDL, null, null, areaLevel);
            List<SaveModel> list = new ArrayList<>();
            if (ind.equals("46")){
                list = elasticsearchUtil.findDateQuotaLevel2ByKeyGroup(DateUtil.getStringDateShort(), DateUtil.getStringDateShort(), defalutArea, 2, "46", SaveModel.timeLevel_DDL, null, "-2,0,1", null, null, "4", "1");
            }else {
                list =  elasticsearchUtil.findDateAllQuotaLevel1(endDate, endDate, defalutArea, level, ind, SaveModel.timeLevel_DDL, null, null, areaLevel);
            }
            for (int i = 0; i < list.size(); i++) {
                SaveModel saveModel = list.get(i);
                JSONObject json = new JSONObject();
@ -1290,23 +1411,27 @@ public class StatisticsService {
    /**
     * 管理端首页老人接入情况,关联家属
     *
     * @param area 权限范围
     * @param level 1省2市3区县4机构5团队6医生
     * @return
     */
    public JSONObject olderBindingDeviceStatus(String area) {
    public JSONObject olderBindingDeviceStatus(String area,String level) {
        JSONObject result = new JSONObject();
        String filter = "";
        String sqltmp = "SELECT GROUP_CONCAT(dict_code) orgCodes from wlyy_hospital_sys_dict WHERE dict_name = 'jkzl_child' or dict_name = 'jkzl_older' ";
        List<Map<String, Object>> listtmp = jdbcTemplate.queryForList(sqltmp);
        if (listtmp.size() > 0) {
            String orgCodes = String.valueOf(listtmp.get(0).get("orgCodes"));
            orgCodes = orgCodes.replaceAll(",", "','");
            filter = " not in ('" + orgCodes + "')";
        }
        String sql = " select count(id) from base_patient  where del=1 and archive_type=1 and id " + filter;
        String olderFilter = roleService.getOlderRoleSQL(area,level);
//        String filter = "";
//        String sqltmp = "SELECT GROUP_CONCAT(dict_code) orgCodes from wlyy_hospital_sys_dict WHERE dict_name = 'jkzl_child' or dict_name = 'jkzl_older' ";
//        List<Map<String, Object>> listtmp = jdbcTemplate.queryForList(sqltmp);
//        if (listtmp.size() > 0) {
//            String orgCodes = String.valueOf(listtmp.get(0).get("orgCodes"));
//            orgCodes = orgCodes.replaceAll(",", "','");
//            filter = " not in ('" + orgCodes + "')";
//        }
        String sql = " select count(p.id) from base_patient p  where p.del=1 and p.archive_type=1 " + olderFilter.replace("{patient}","p.id");
        Integer olderCount = jdbcTemplate.queryForObject(sql, Integer.class);
        sql = " select count(DISTINCT p.id) from base_patient p INNER JOIN wlyy_patient_device pd on p.id = pd.user and p.archive_type=1 and pd.del=0 where p.del=1 and p.id " + filter;
        sql = " select count(DISTINCT p.id) from base_patient p INNER JOIN wlyy_patient_device pd on p.id = pd.user and p.archive_type=1 and pd.del=0 where p.del=1  "+
                olderFilter.replace("{patient}","p.id");
        Integer bindingCount = jdbcTemplate.queryForObject(sql, Integer.class);
        //老人接入情况
        result.put("olderCount", olderCount);
@ -1315,18 +1440,13 @@ public class StatisticsService {
        //关联家属
        String sqlfamily = "SELECT COUNT(DISTINCT p.id)  FROM " +
                "base_patient p INNER JOIN base_service_package_sign_record sr " +
                "on p.id = sr.patient and sr.`status`=1 and  p.id not in " +
                "(SELECT dict_code from wlyy_hospital_sys_dict WHERE dict_name = 'jkzl_child' or dict_name = 'jkzl_older') " +
                ",(SELECT DISTINCT fm.family_member from base_patient_family_member fm,base_patient p1 " +
                "base_patient p , (SELECT DISTINCT fm.family_member from base_patient_family_member fm,base_patient p1 " +
                "WHERE p1.id = fm.patient and p1.archive_type = '3') f1 " +
                "WHERE p.del = 1 and p.archive_type =1 and p.id = f1.family_member ";
                "WHERE p.del = 1 and p.archive_type =1 and p.id = f1.family_member "+olderFilter.replace("{patient}","p.id");
        String sqlSign = "SELECT COUNT(DISTINCT p.id) FROM " +
                "base_patient p INNER JOIN base_service_package_sign_record sr " +
                "on p.id = sr.patient and sr.`status`=1 and  p.id not in " +
                "(SELECT dict_code from wlyy_hospital_sys_dict WHERE dict_name = 'jkzl_child' or dict_name = 'jkzl_older') " +
                "WHERE p.del = 1 and p.archive_type =1 ";
                "base_patient p "+
                "WHERE p.del = 1 and p.archive_type =1 "+olderFilter.replace("{patient}","p.id");
        Integer familyOlderCount = jdbcTemplate.queryForObject(sqlfamily, Integer.class);
        Integer familySignCount = jdbcTemplate.queryForObject(sqlSign, Integer.class);
@ -1338,18 +1458,18 @@ public class StatisticsService {
    }
    /**
     * 管理端安防监护新增分析
     * 管理端首页安防预警统计分析
     */
    public JSONObject statisticsSecurityOlder(String endDate, String area, int level, String type) throws Exception {
    public JSONObject statisticsSecurityOlder(String endDate, String area, Integer level, String type) throws Exception {
        JSONObject res = new JSONObject();
        String areaLevel = "4";
        areaLevel = "4";
        SaveModel saveModel = elasticsearchUtil.findOneDateQuotaLevel0(endDate, endDate, area, level, "46", SaveModel.timeLevel_DDL, areaLevel);
        SaveModel saveModel = elasticsearchUtil.findOneDateQuotaLevels(endDate, endDate, area, level, "46", SaveModel.timeLevel_DDL, null, null, "-2,0,1" );
        res.put("index_" + 46 + "_total", saveModel.getResult2().longValue());
        if (StringUtils.isNotBlank(type)) {
            //周/月 增量
            String start = statisticsUtilService.calStart(endDate, type);
            SaveModel saveModelAdd = elasticsearchUtil.findOneDateQuotaLevel0(start, endDate, area, level, "46", SaveModel.timeLevel_ZL, areaLevel);
            SaveModel saveModelAdd = elasticsearchUtil.findOneDateQuotaLevels(start, endDate, area, level, "46", SaveModel.timeLevel_ZL, null,null,"-2,0,1");
            res.put("index_" + 46 + "_add", saveModelAdd.getResult2().longValue());
        }
        JSONArray addDetail = new JSONArray();
@ -1357,16 +1477,25 @@ public class StatisticsService {
            //周/月 增量
            String start = statisticsUtilService.calStart(endDate, type);
            List<SaveModel> saveModelAdds = elasticsearchUtil.findDateQuotaLevelList(start, endDate, area, level, "46", SaveModel.timeLevel_ZL, "3", null, null, null);
            List<SaveModel> saveModelAdds = elasticsearchUtil.findDateQuotaLevelList(start, endDate, area, level, "46", SaveModel.timeLevel_ZL, null,null,"3", null, "-2,0,1" );
            for (SaveModel saveModelTmp : saveModelAdds) {
                JSONObject json = new JSONObject();
                SaveModel saveMode2 = elasticsearchUtil.findOneDateQuotaLevels(endDate, endDate, area, level, "46", SaveModel.timeLevel_DDL, "3", null, null, saveModelTmp.getSlaveKey3());
                SaveModel saveMode2 = elasticsearchUtil.findOneDateQuotaLevels(endDate, endDate, area, level, "46", SaveModel.timeLevel_DDL, "3", null, "-2,0,1", saveModelTmp.getSlaveKey3());
                json.put("total", saveMode2.getResult2().longValue());
                json.put("num", saveModelTmp.getResult2().longValue());
                json.put("code", saveModelTmp.getSlaveKey3());
                json.put("name", saveModelTmp.getSlaveKey3Name());
                addDetail.add(json);
            }
            SaveModel saveMode2 = elasticsearchUtil.findOneDateQuotaLevels(endDate, endDate, area, level, "53", SaveModel.timeLevel_DDL, null, null, "-2,0,1" );
            SaveModel saveModelTmp = elasticsearchUtil.findOneDateQuotaLevels(start, endDate, area, level, "53", SaveModel.timeLevel_ZL, null, null, "-2,0,1" );
            JSONObject json = new JSONObject();
            json.put("total", saveMode2.getResult2().longValue());
            json.put("num", saveModelTmp.getResult2().longValue());
            json.put("code", "jjhj");
            json.put("name", "紧急呼叫");
            addDetail.add(json);
            System.out.println("1");
        }
        res.put("index_add_detail", addDetail);
        return res;
@ -1749,8 +1878,7 @@ public class StatisticsService {
    public JSONObject patientAnalysisDP(String endDate, String area, int level, String index) throws Exception {
        JSONObject res = new JSONObject();
        String areaLevel = "6";
        if ("42".equals(index)) {
            areaLevel = "4";
        if ("42".equals(index)) {//幼儿
            //新生儿
            //是否入学
            List<SaveModel> statusList = elasticsearchUtil.findDateAllQuotaLevel1(endDate, endDate, area, level, index, SaveModel.timeLevel_DDL, null, null, areaLevel);
@ -1764,13 +1892,13 @@ public class StatisticsService {
                statusArray.add(json);
            }
            res.put("statusList", statusArray);
        } else {
        } else {//老人
            //老人
            //能力评估 从签约时服务标签取
            res.put("levelList", cloudCareForTheElderly(null, null, null));
            res.put("levelList", cloudCareForTheElderly(endDate, area, level));
            //居民健康标签
            List<SaveModel> list = elasticsearchUtil.findDateAllQuotaLevel1(endDate, endDate, area, level, "47", SaveModel.timeLevel_DDL, null, null, "2");
            List<SaveModel> list = elasticsearchUtil.findDateAllQuotaLevel1(endDate, endDate, area, level, "47", SaveModel.timeLevel_DDL, null, null, areaLevel);
            JSONArray labelArr = new JSONArray();
            Long total = 0l;
            for (int i = 0; i < list.size(); i++) {
@ -1795,7 +1923,7 @@ public class StatisticsService {
            //年龄分布 50
//            ageList = elasticsearchUtil.findDateAllQuotaLevel1(endDate, endDate, area, level, "50", SaveModel.timeLevel_DDL,null,null,"2");
            List<SaveModel> ageList = elasticsearchUtil.findDateAllQuotaLevel1(endDate, endDate, area, level, "50", SaveModel.timeLevel_DDL, null, null, "2");
            List<SaveModel> ageList = elasticsearchUtil.findDateAllQuotaLevel1(endDate, endDate, area, level, "50", SaveModel.timeLevel_DDL, null, null, areaLevel);
            JSONArray ageArray = new JSONArray();
            for (int i = 0; i < ageList.size(); i++) {
                SaveModel saveModel = ageList.get(i);
@ -1859,36 +1987,20 @@ public class StatisticsService {
    /*大屏 老人云照护 评估*/
    public JSONArray cloudCareForTheElderly(String endDate, String area, Integer level) throws Exception {
        //评估类型
        String filter = "";
        String sqltmp = "SELECT GROUP_CONCAT(dict_code) orgCodes from wlyy_hospital_sys_dict WHERE dict_name = 'jkzl_child' or dict_name = 'jkzl_older' ";
        List<Map<String, Object>> listtmp = jdbcTemplate.queryForList(sqltmp);
        if (listtmp.size() > 0) {
            String orgCodes = String.valueOf(listtmp.get(0).get("orgCodes"));
            if (StringUtils.isNotBlank(orgCodes)) {
                orgCodes = orgCodes.replaceAll(",", "','");
                filter = " and lab.patient not in ('" + orgCodes + "')";
            }
        }
        //居民类型标签
        List<SaveModel> list = elasticsearchUtil.findDateAllQuotaLevel1(endDate, endDate, area, level, "56", SaveModel.timeLevel_DDL, null, null, "2");
        SaveModel saveModel3 = elasticsearchUtil.findOneDateQuotaLevel0(endDate, endDate, area, level, "56", SaveModel.timeLevel_DDL);
        JSONArray jsonArray = new JSONArray();
        String sql = " select dict.dict_code,dict_value,count(DISTINCT A.patient) total from wlyy_hospital_sys_dict dict \n" +
                " LEFT JOIN (select distinct lab.patient,lab.label_code from  wlyy_patient_label lab  INNER JOIN base_patient p on p.id = lab.patient AND  lab.label_type='3' " +
                filter + "   \n" +
                ")A on dict.dict_code = A.label_code " +
                "where  dict.dict_name='older_label'  and  dict.dict_code is not null and dict_code <= 7  \n" +
                " GROUP BY dict.dict_code; ";
        List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
        String older = " select count(distinct lab.patient) from  wlyy_patient_label lab  INNER JOIN base_patient p on p.id = lab.patient AND  lab.label_type='1' " + filter;
        Integer count = jdbcTemplate.queryForObject(older, Integer.class);
        for (Map<String, Object> map : list) {
        Long total = saveModel3.getResult1().longValue();
        DecimalFormat df = new DecimalFormat("0.00");
        for (int i = 0; i < list.size(); i++) {
            SaveModel saveModel = list.get(i);
            JSONObject json = new JSONObject();
            DecimalFormat df = new DecimalFormat("0.00");
            json.put("rate", df.format((Integer.parseInt(map.get("total").toString()) * 1.00) / count * 100));
            json.put("num", map.get("total"));
            json.put("code", map.get("dict_code").toString());
            json.put("name", map.get("dict_value").toString());
            json.put("num", saveModel.getResult2().longValue());
            json.put("code", saveModel.getSlaveKey1());
            json.put("name", saveModel.getSlaveKey1Name());
            json.put("rate", df.format((saveModel.getResult2().longValue() * 1.00) / total * 100));
            total += saveModel.getResult2().longValue();
            jsonArray.add(json);
        }
        return jsonArray;
@ -1926,5 +2038,850 @@ public class StatisticsService {
        return res;
    }
    //新生儿上门辅导 类型
    //老人整体概况
    public Map<String,Object> getOlderOverview(String currentUserRole,String  currentUserRoleLevel){
        String year = DateUtil.getNowYear()+"";
        String sql = " select * from base_older_num where type='"+currentUserRoleLevel+"' and code='"+currentUserRole+"' and year='"+year+"' ";
        List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
        if (list.size()>0){
            return list.get(0);
        }
        return  null;
    }
    /**
     * 紧急预警事件饼图、预警数量
     * @return
     * @throws Exception
     */
    public JSONObject adminStatisticsEmeWarnServer(String endDate,String area ,int level ) throws Exception {
        JSONObject res = new JSONObject();
        JSONArray jsonArray = new JSONArray();
        //总量
        List<SaveModel> list = elasticsearchUtil.findDateQuotaLevel2ByKeyGroup(endDate, endDate, area, level, "46", SaveModel.timeLevel_DDL, null, "-2,0,1", null, null, "4", "1");
        for (int i = 0; i < list.size(); i++) {
            SaveModel saveModel = list.get(i);
            JSONObject json = new JSONObject();
            json.put("num", saveModel.getResult2().longValue());
            json.put("code", saveModel.getSlaveKey1());
            json.put("name", saveModel.getSlaveKey1Name());
            jsonArray.add(json);
        }
        //紧急呼叫
        SaveModel saveModel = elasticsearchUtil.findOneDateQuotaLevel1(endDate, endDate, area, level, "68", SaveModel.timeLevel_DDL, "-2,0,1");
        JSONObject json = new JSONObject();
        json.put("num", saveModel.getResult2().longValue());
        json.put("code", "jjhj");
        json.put("name", "紧急呼叫");
        jsonArray.add(json);
        jsonArray.sort(Comparator.comparing(obj -> ((JSONObject) obj).getLongValue("num")).reversed());
        res.put("orderServerArray", jsonArray);
        //预警总数 未处理数量
        saveModel = elasticsearchUtil.findOneDateQuotaLevel1(endDate, area, level, "67", SaveModel.timeLevel_DDL,"-2,0,1");
        res.put("emeWarnTotal", saveModel.getResult2().longValue());
        saveModel = elasticsearchUtil.findOneDateQuotaLevel1(endDate, area, level, "67", SaveModel.timeLevel_DDL,"1");
        res.put("emeWarnNotDeal", saveModel.getResult2().longValue());
        return res;
    }
    /**
     * 紧急预警紧急预警响应率
     * @return
     * @throws Exception
     */
    public JSONObject statisticsEmeWarnList(String endDate,String area ,int level ) throws Exception {
        JSONObject res = new JSONObject();
        JSONArray jsonArray = new JSONArray();
        //总量
        List<SaveModel> list = elasticsearchUtil.findDateQuotaLevelList(endDate, endDate, area, level, "67", SaveModel.timeLevel_DDL,null,"5", null, "-2,0,1");
        for (int i = 0; i < list.size(); i++) {
            SaveModel saveModel = list.get(i);
            JSONObject json = new JSONObject();
            json.put("emeWarnTotal", saveModel.getResult2().longValue());
            json.put("dept", saveModel.getDept());
            json.put("deptName", saveModel.getDeptName());
            //已响应数量
            SaveModel saveModel2 = elasticsearchUtil.findOneDateQuotaLevel1(endDate, saveModel.getDept(), 5, "67", SaveModel.timeLevel_DDL,"-2,0");
            json.put("emeWarnDealt", saveModel2.getResult2().longValue());
            json.put("emeWarnDealtLaw", commonUtil.getRangeDouble(saveModel2.getResult2().intValue(),saveModel.getResult2().intValue()));
            jsonArray.add(json);
        }
        jsonArray.sort(Comparator.comparing(obj -> ((JSONObject) obj).getDouble("emeWarnDealtLaw")).reversed());
        res.put("orderServerArray", jsonArray);
        return res;
    }
    /**
     * 人文关怀祝福未发送率
     * @return
     * @throws Exception
     */
    public JSONObject statisticsNotWishesList(String endDate,String area ,int level ) throws Exception {
        JSONObject res = new JSONObject();
        JSONArray jsonArray = new JSONArray();
        //总量
        List<SaveModel> list = elasticsearchUtil.findDateQuotaLevelList(endDate, endDate, area, level, "60", SaveModel.timeLevel_DDL,null,"5", null, null);
        for (int i = 0; i < list.size(); i++) {
            SaveModel saveModel = list.get(i);
            JSONObject json = new JSONObject();
            json.put("dept", saveModel.getDept());
            json.put("deptName", saveModel.getDeptName());
            SaveModel saveModel2 = elasticsearchUtil.findOneDateQuotaLevel0(endDate, saveModel.getDept(), 5, "61", SaveModel.timeLevel_DDL);
            json.put("birthDayTotal", saveModel2.getResult2().longValue()+saveModel.getResult2().longValue());
            json.put("notWishesTotal", saveModel2.getResult2().longValue());
            json.put("notWishesLaw", commonUtil.getRangeDouble(saveModel2.getResult2().intValue(),(saveModel2.getResult2().intValue()+saveModel.getResult2().intValue())));
            jsonArray.add(json);
        }
        res.put("wishesArray", jsonArray);
        jsonArray.sort(Comparator.comparing(obj -> ((JSONObject) obj).getDouble("notWishesLaw")).reversed());
        //祝福人次
        SaveModel saveModel = elasticsearchUtil.findOneDateQuotaLevel0(endDate, area, level, "60", SaveModel.timeLevel_DDL);
        res.put("wishesTotal", saveModel.getResult2().longValue());
        //祝福人数
        saveModel = elasticsearchUtil.findOneDateQuotaLevel0(endDate, area, level, "69", SaveModel.timeLevel_DDL);
        res.put("wishesPeople", saveModel.getResult2().longValue());
        return res;
    }
    /**
     *
     * @param area
     * @param level 2 市  3区  4医院 5、团队 6医生
     *获取老人服务情况(助老服务、紧急救助、医生服务、监测设备)
     */
    public JSONObject getServerSituation(String area,int level) throws Exception {
        JSONObject result = new JSONObject();
        Long finishCount = 0l;
        Long unfinishCount = 0l;
        //助老服务 生活照料
        JSONObject olderServiceInfo = new JSONObject();
        olderServiceInfo.put("finish",0);
        olderServiceInfo.put("unfinish",0);
        olderServiceInfo.put("total",0);
        olderServiceInfo.put("law",0);
        //紧急救助 呼叫+安防 指标67
        JSONObject emeAssistance = new JSONObject();
        emeAssistance.put("finish",0);
        emeAssistance.put("unfinish",0);
        olderServiceInfo.put("total",0);
        emeAssistance.put("law",0);
        //医生服务 老人健康咨询咨询+续方
        JSONObject doctorServiceInfo = new JSONObject();
        doctorServiceInfo.put("finish",0);
        doctorServiceInfo.put("unfinish",0);
        olderServiceInfo.put("total",0);
        doctorServiceInfo.put("law",0);
        //监测设备
        JSONObject monitorDevice = new JSONObject();
        monitorDevice.put("healthDevice",0);
        monitorDevice.put("securityDevice",0);
        olderServiceInfo.put("total",0);
        monitorDevice.put("offlineDevice",0);
        String areaFilter = "";
        if (StringUtils.isNotBlank(area)&&2!=level){
            if (4==level){
                areaFilter = " and pack.org_code='"+area+"' ";
            }
            if (5==level){//团队
                areaFilter = " and r.team_code='"+area+"' ";
            }
        }
        String olderFilter = " 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)  = {patient} " +
                " and CONVERT(sr.patient USING utf8) not in (SELECT dict_code FROM `base`.`wlyy_hospital_sys_dict` WHERE `dict_name` = 'jkzl_older' or dict_name='jkzl_child') "+areaFilter+" ) ";
        //助老服务 生活照料 已完成
        String sql = " select count(life.id) from base_life_care_order life  where life.`status`=2 "+olderFilter.replace("{patient}","life.patient") +"" ;
        finishCount = jdbcTemplate.queryForObject(sql,Long.class);
        olderServiceInfo.put("finish",finishCount);
        sql = " select count(life.id) from base_life_care_order life where life.status in (1,3)  "+olderFilter.replace("{patient}","life.patient")+"  " ;
        unfinishCount = jdbcTemplate.queryForObject(sql,Long.class);
        olderServiceInfo.put("unfinish",unfinishCount);
        olderServiceInfo.put("total",finishCount.intValue()+unfinishCount.intValue());
        olderServiceInfo.put("law",commonUtil.getRangeDouble(finishCount.intValue(),(finishCount.intValue()+unfinishCount.intValue())));
        result.put("olderServiceInfo",olderServiceInfo);
        //紧急救助 呼叫+安防
        //紧急救助 已响应
        SaveModel saveModel = elasticsearchUtil.findOneDateQuotaLevel1(DateUtil.getStringDateShort(), area, level, "67", SaveModel.timeLevel_DDL,"-2,0");
        SaveModel saveModel2 = elasticsearchUtil.findOneDateQuotaLevel1(DateUtil.getStringDateShort(), area, level, "67", SaveModel.timeLevel_DDL,"1");
        finishCount = saveModel.getResult2().longValue();
        unfinishCount = saveModel2.getResult2().longValue();
        emeAssistance.put("finish",finishCount);
        emeAssistance.put("unfinish",unfinishCount);
        emeAssistance.put("total",finishCount.intValue()+unfinishCount.intValue());
        emeAssistance.put("law",commonUtil.getRangeDouble(finishCount.intValue(),(finishCount.intValue()+unfinishCount.intValue())));
        result.put("emeAssistance",emeAssistance);
        //医生服务 老人健康咨询咨询+续方
        sql = " SELECT count(p.id) FROM base_care_prescription p where p.status=2 "+olderFilter.replace("{patient}","p.patient")+"  ";
        finishCount = jdbcTemplate.queryForObject(sql,Long.class);
        sql = " SELECT count(p.id) FROM base_care_prescription p where p.status=1 "+olderFilter.replace("{patient}","p.patient")+"  ";
        unfinishCount = jdbcTemplate.queryForObject(sql,Long.class);
        //老人健康咨询咨询
        sql = " SELECT count(o.consult) FROM wlyy_consult_team o INNER JOIN base_doctor d on o.doctor = d.id " +
                " where o.status=1 and o.type = 25 AND d.del = 1  "+olderFilter.replace("{patient}","o.patient")+"  ";
        finishCount += jdbcTemplate.queryForObject(sql,Long.class);
        sql = " SELECT count(o.consult) FROM wlyy_consult_team o INNER JOIN base_doctor d on o.doctor = d.id " +
                " where o.status=0 and o.type = 25 AND d.del = 1  "+olderFilter.replace("{patient}","o.patient")+"  ";
        unfinishCount += jdbcTemplate.queryForObject(sql,Long.class);
        doctorServiceInfo.put("finish",finishCount);
        doctorServiceInfo.put("unfinish",unfinishCount);
        doctorServiceInfo.put("total",finishCount.intValue()+unfinishCount.intValue());
        doctorServiceInfo.put("law",commonUtil.getRangeDouble(finishCount.intValue(),(finishCount.intValue()+unfinishCount.intValue())));
        //监测设备
        sql = " select count(distinct pd.device_sn) from wlyy_patient_device pd INNER JOIN base_patient p on pd.user = p.id and pd.del=0 and p.del=1 " +
                "where pd.device_type=0 "+olderFilter.replace("{patient}","pd.user");
        Long count = jdbcTemplate.queryForObject(sql,Long.class);//健康设备
        monitorDevice.put("healthDevice",count);
        sql = " select count(distinct pd.device_sn) from wlyy_patient_device pd INNER JOIN base_patient p on pd.user = p.id and pd.del=0 and p.del=1 " +
                "where pd.device_type=1 "+olderFilter.replace("{patient}","pd.user");
        count = jdbcTemplate.queryForObject(sql,Long.class);//安防设备
        monitorDevice.put("securityDevice",count);
        sql = " select count(distinct pd.device_sn) 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 " +
                    "where (dev.contact_status=0 or dev.contact_status is null ) "+olderFilter.replace("{patient}","pd.user");
        count = jdbcTemplate.queryForObject(sql,Long.class);//离线设备
        monitorDevice.put("offlineDevice",count);
        monitorDevice.put("total",monitorDevice.getInteger("securityDevice")+monitorDevice.getInteger("healthDevice"));
        result.put("olderServiceInfo",olderServiceInfo);
        result.put("emeAssistance",emeAssistance);
        result.put("doctorServiceInfo",doctorServiceInfo);
        result.put("monitorDevice",monitorDevice);
        return result;
    }
    /**
     *获取老人服务情况(助老服务、紧急救助、医生服务 项目数量)
     */
    public JSONObject getServerSituationItem(String endDate,String area,int level) throws Exception {
        JSONObject result = new JSONObject();
        //助老服务 生活照料 (出去已取消和未支付)
        JSONArray olderServiceInfo = new JSONArray();
        List<SaveModel> list = statisticsUtilService.findDateAllQuotaLevel1Sort(endDate, endDate, area, level, "48", SaveModel.timeLevel_DDL, null, null);
        for (int i = 0; (i < list.size() && i < 5); i++) {
            SaveModel saveModel = list.get(i);
            JSONObject json = new JSONObject();
            json.put("num", saveModel.getResult2().longValue());
            json.put("code", saveModel.getSlaveKey1());
            json.put("name", saveModel.getSlaveKey1Name());
            olderServiceInfo.add(json);
        }
        //紧急救助 呼叫68+安防46 已取消不算
        JSONArray emeAssistance = new JSONArray();
        list = elasticsearchUtil.findDateQuotaLevel2ByKeyGroup(endDate, endDate, area, level, "46", SaveModel.timeLevel_DDL, null, "-2,0,1", null, null, "4", "1");
        for (int i = 0; i < list.size(); i++) {
            SaveModel saveModel = list.get(i);
            JSONObject json = new JSONObject();
            json.put("num", saveModel.getResult2().longValue());
            json.put("code", saveModel.getSlaveKey1());
            json.put("name", saveModel.getSlaveKey1Name());
            emeAssistance.add(json);
        }
        //紧急呼叫
        SaveModel saveModel = elasticsearchUtil.findOneDateQuotaLevel1(endDate, endDate, area, level, "68", SaveModel.timeLevel_DDL, "-2,0,1");
        JSONObject json = new JSONObject();
        json.put("num", saveModel.getResult2().longValue());
        json.put("code", "jjhj");
        json.put("name", "紧急呼叫");
        emeAssistance.add(json);
        emeAssistance.sort(Comparator.comparing(obj -> ((JSONObject) obj).getLongValue("num")).reversed());
        //医生服务 老人健康咨询咨询+续方
        String areaFilter = "";
        if (StringUtils.isNotBlank(area)&&2!=level){
            if (4==level){
                areaFilter = " and pack.org_code='"+area+"' ";
            }
            if (5==level){//团队
                areaFilter = " and r.team_code='"+area+"' ";
            }
        }
        String olderFilter = " 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)  = {patient} " +
                " and CONVERT(sr.patient USING utf8) not in (SELECT dict_code FROM `base`.`wlyy_hospital_sys_dict` WHERE `dict_name` = 'jkzl_older' or dict_name='jkzl_child') "+areaFilter+" ) ";
        JSONArray doctorServiceInfo = new JSONArray();
        String sql = " SELECT count(p.id) FROM base_care_prescription p where 1=1 "+olderFilter.replace("{patient}","p.patient")+"  ";
        Long count = jdbcTemplate.queryForObject(sql,Long.class);
        json = new JSONObject();
        json.put("num", count);
        json.put("code", "cfxf");
        json.put("name", "处方续方");
        doctorServiceInfo.add(json);
        sql = " SELECT count(o.consult) FROM wlyy_consult_team o INNER JOIN base_doctor d on o.doctor = d.id " +
                " where  o.type = 25 AND d.del = 1  "+olderFilter.replace("{patient}","o.patient")+"  ";
        count = jdbcTemplate.queryForObject(sql,Long.class);
        json = new JSONObject();
        json.put("num", count);
        json.put("code", "jkzx");
        json.put("name", "健康咨询");
        doctorServiceInfo.add(json);
        result.put("olderServiceItemInfo",olderServiceInfo);
        result.put("emeAssistanceItem",emeAssistance);
        result.put("doctorServiceItemInfo",doctorServiceInfo);
        return result;
    }
    /**
     * 获取养老服务社区团队列表
     */
    public List<Map<String,Object>> getOlderTeamList() throws Exception {
        List<Map<String,Object>> teamList  = new ArrayList<>();
        String sql = " select distinct org.code as orgCode,org.name as orgName,te.id as teamId,te.name as teamName from " +
                " base_service_package pack INNER JOIN base_org org on pack.org_code = org.code " +
                "INNER JOIN base_team te on te.org_code = org.`code` " +
                " where  org.del=1 and org.type=3 and te.del=1 and org.code not in " +
                " (select dict_code from wlyy_hospital_sys_dict where dict_name='jkzl_org') ";
        teamList = jdbcTemplate.queryForList(sql);
        for (Map<String,Object> map:teamList){
            //1 获取社工人数(该团队人数) 2.预警数(紧急呼叫+安防监护 已取消的不算)
            //3助老服务(该社区所有老人的生活照料总数 已取消的不算) 4物联设备(健康设备绑定量+安防设备绑定量)
            String teamName = map.get("teamName").toString();
            String teamId = map.get("teamId").toString();
            teamName = teamName.replace("团队","社区");
            teamName = teamName.replace("服务","");
            if(!teamName.contains("社区")){
                teamName = teamName+"社区";
            }
            map.put("teamName",teamName);
            sql = " select count(doc.id) from base_team_member mem ,base_doctor doc where mem.team_code='"+teamId+"' " +
                    " and mem.doctor_code = doc.id and mem.del=1 and doc.del=1 ";
            Integer count = jdbcTemplate.queryForObject(sql,Integer.class);
            map.put("doctorCount",count);
            sql = " SELECT count(o.bussiness_id) " +
                    "FROM (  SELECT o.id AS bussiness_id,o.team_code as dept,o.`status`,o.update_time FROM base_security_monitoring_order o  " +
                    " where o.team_code='"+teamId+"' and o.`status` in (-2,0,1)  " +
                    " UNION ALL  SELECT o.id AS bussiness_id,o.team_code as dept,o.`status`,o.update_time FROM base_emergency_assistance_order o " +
                    " where o.team_code='"+teamId+"' and o.`status` in (-2,0,1)  )o  ";
            Long emeAssistanceCount = jdbcTemplate.queryForObject(sql,Long.class);
            map.put("emeAssistanceCount",emeAssistanceCount);
            sql = " SELECT count(o.id) FROM base_life_care_order o WHERE o.status<>0 and o.status<>-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)  = o.patient " +
                    " and CONVERT(sr.patient USING utf8) not in (SELECT dict_code FROM `base`.`wlyy_hospital_sys_dict` " +
                    " WHERE `dict_name` = 'jkzl_older' or dict_name='jkzl_child') and r.team_code='"+teamId+"' ) ";
            count = jdbcTemplate.queryForObject(sql,Integer.class);
            map.put("olderServiceCount",count);
            sql = "  select count(distinct pd.device_sn) 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  " +
                    " where 1=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)  = p.id " +
                    " and CONVERT(sr.patient USING utf8) not in (SELECT dict_code FROM `base`.`wlyy_hospital_sys_dict` " +
                    " WHERE `dict_name` = 'jkzl_older' or dict_name='jkzl_child') and r.team_code='"+teamId+"' ) ";
            count = jdbcTemplate.queryForObject(sql,Integer.class);
            map.put("bindingDeviceCount",count);
            //社工数量
            String filter = "";
            String sqltmp = "SELECT GROUP_CONCAT(dict_code) orgCodes from wlyy_hospital_sys_dict WHERE dict_name = 'jkzl_older' ";
            List<Map<String,Object>> listtmp =  jdbcTemplate.queryForList(sqltmp);
            if(listtmp.size()>0){
                String orgCodes = String.valueOf(listtmp.get(0).get("orgCodes"));
                orgCodes = orgCodes.replaceAll(",","','");
                filter = " and a.id not in ('"+orgCodes+"')";
            }
            sql = "SELECT count(a.id) from base_patient a  WHERE a.archive_type = 1 and a.sign_status=1 and a.del = '1' ";
            sql += " 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;
            count =  jdbcTemplate.queryForObject(sql,Integer.class);
            map.put("oldTotal",count);
            //照护老人数量
            filter = "";
            sqltmp = "SELECT GROUP_CONCAT(dict_code) orgCodes from wlyy_hospital_sys_dict WHERE dict_name = 'jkzl_org' ";
            listtmp =  jdbcTemplate.queryForList(sqltmp);
            if(listtmp.size()>0){
                String orgCodes = String.valueOf(listtmp.get(0).get("orgCodes"));
                orgCodes = orgCodes.replaceAll(",","','");
                filter = " and h.org_code not in ('"+orgCodes+"')";
            }
            sql = "SELECT count(a.id) from base_doctor a,base_doctor_hospital h WHERE  a.id=h.doctor_code and " +
                    " a.doctor_level = 2 and a.del = '1' and h.del = '1'  ";
            sql += " and EXISTS ( select 1 from base_team_member mem where mem.doctor_code = a.id " +
                    " and mem.team_code='"+teamId+"' and mem.del=1 )  "+filter;
            count =  jdbcTemplate.queryForObject(sql,Integer.class);
            map.put("helperTotal",count);
        }
        return teamList;
    }
    public PageEnvelop<List<Map<String,Object>>> getOlderTeamListWithPage(String area,String level,Integer page,Integer size) throws Exception {
        List<Map<String,Object>> teamList  = new ArrayList<>();
        page = page>0?page-1:0;
        String areaFilter = " ";
        if ("5".equals(level)){
            areaFilter += " and te.id='"+area+"' ";
        }
        String sql = " select count(distinct org.code) from " +
                " base_service_package pack INNER JOIN base_org org on pack.org_code = org.code " +
                "INNER JOIN base_team te on te.org_code = org.`code` " +
                " where  org.del=1 and org.type=3 and te.del=1 and org.code not in " +
                " (select dict_code from wlyy_hospital_sys_dict where dict_name='jkzl_org') "+areaFilter;
        Long totalNum = jdbcTemplate.queryForObject(sql,Long.class);
        sql = " select distinct org.code as orgCode,org.name as orgName,te.id as teamId,te.name as teamName from " +
                " base_service_package pack INNER JOIN base_org org on pack.org_code = org.code " +
                "INNER JOIN base_team te on te.org_code = org.`code` " +
                " where  org.del=1 and org.type=3 and te.del=1 and org.code not in " +
                " (select dict_code from wlyy_hospital_sys_dict where dict_name='jkzl_org') "+areaFilter+" order by org.code asc " +
                "limit "+(page*size)+","+size ;
        teamList = jdbcTemplate.queryForList(sql);
        for (Map<String,Object> map:teamList){
            //1 获取社工人数(该团队人数) 2.预警数(紧急呼叫+安防监护 已取消的不算)
            //3助老服务(该社区所有老人的生活照料总数 已取消的不算) 4物联设备(健康设备绑定量+安防设备绑定量)
            String teamName = map.get("teamName").toString();
            String teamId = map.get("teamId").toString();
            teamName = teamName.replace("团队","社区");
            teamName = teamName.replace("服务","");
            if(!teamName.contains("社区")){
                teamName = teamName+"社区";
            }
            map.put("teamName",teamName);
            sql = " select count(doc.id) from base_team_member mem ,base_doctor doc where mem.team_code='"+teamId+"' " +
                    " and mem.doctor_code = doc.id and mem.del=1 and doc.del=1 ";
            Integer count = jdbcTemplate.queryForObject(sql,Integer.class);
            map.put("doctorCount",count);
            sql = " SELECT count(o.bussiness_id) " +
                    "FROM (  SELECT o.id AS bussiness_id,o.team_code as dept,o.`status`,o.update_time FROM base_security_monitoring_order o  " +
                    " where o.team_code='"+teamId+"' and o.`status` in (-2,0,1)  " +
                    " UNION ALL  SELECT o.id AS bussiness_id,o.team_code as dept,o.`status`,o.update_time FROM base_emergency_assistance_order o " +
                    " where o.team_code='"+teamId+"' and o.`status` in (-2,0,1)  )o  ";
            Long emeAssistanceCount = jdbcTemplate.queryForObject(sql,Long.class);
            map.put("emeAssistanceCount",emeAssistanceCount);//救助服务
            sql = " SELECT count(o.id) FROM base_life_care_order o WHERE o.status<>0 and o.status<>-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)  = o.patient " +
                    " and CONVERT(sr.patient USING utf8) not in (SELECT dict_code FROM `base`.`wlyy_hospital_sys_dict` " +
                    " WHERE `dict_name` = 'jkzl_older' or dict_name='jkzl_child') and r.team_code='"+teamId+"' ) ";
            count = jdbcTemplate.queryForObject(sql,Integer.class);
            map.put("olderServiceCount",count);//助老服务
            sql = "  select count(distinct pd.device_sn) 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  " +
                    " where 1=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)  = p.id " +
                    " and CONVERT(sr.patient USING utf8) not in (SELECT dict_code FROM `base`.`wlyy_hospital_sys_dict` " +
                    " WHERE `dict_name` = 'jkzl_older' or dict_name='jkzl_child') and r.team_code='"+teamId+"' ) ";
            count = jdbcTemplate.queryForObject(sql,Integer.class);
            map.put("bindingDeviceCount",count);
            String filter = "";
            String sqltmp = "SELECT GROUP_CONCAT(dict_code) orgCodes from wlyy_hospital_sys_dict WHERE dict_name = 'jkzl_older' ";
            List<Map<String,Object>> listtmp =  jdbcTemplate.queryForList(sqltmp);
            if(listtmp.size()>0){
                String orgCodes = String.valueOf(listtmp.get(0).get("orgCodes"));
                orgCodes = orgCodes.replaceAll(",","','");
                filter = " and a.id not in ('"+orgCodes+"')";
            }
            sql = "SELECT count(a.id) from base_patient a  WHERE a.archive_type = 1 and a.sign_status=1 and a.del = '1' ";
            sql += " 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;
            count =  jdbcTemplate.queryForObject(sql,Integer.class);
            map.put("oldTotal",count);//照护老人数量
            filter = "";
            sqltmp = "SELECT GROUP_CONCAT(dict_code) orgCodes from wlyy_hospital_sys_dict WHERE dict_name = 'jkzl_org' ";
            listtmp =  jdbcTemplate.queryForList(sqltmp);
            if(listtmp.size()>0){
                String orgCodes = String.valueOf(listtmp.get(0).get("orgCodes"));
                orgCodes = orgCodes.replaceAll(",","','");
                filter = " and h.org_code not in ('"+orgCodes+"')";
            }
            sql = "SELECT count(a.id) from base_doctor a,base_doctor_hospital h WHERE  a.id=h.doctor_code and " +
                    " a.doctor_level = 2 and a.del = '1' and h.del = '1'  ";
            sql += " and EXISTS ( select 1 from base_team_member mem where mem.doctor_code = a.id " +
                    " and mem.team_code='"+teamId+"' and mem.del=1 )  "+filter;
            count =  jdbcTemplate.queryForObject(sql,Integer.class);
            map.put("helperTotal",count);//社工数量
            //医生服务 老人健康咨询咨询+续方
            String olderFilter = " 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)  = {patient} " +
                    " and CONVERT(sr.patient USING utf8) not in (SELECT dict_code FROM `base`.`wlyy_hospital_sys_dict` WHERE `dict_name` = 'jkzl_older' or dict_name='jkzl_child') and r.team_code='"+teamId+"' ) ";
            sql = " SELECT count(p.id) FROM base_care_prescription p where 1=1 "+olderFilter.replace("{patient}","p.patient")+"  ";
            Long doctorServiceCount = jdbcTemplate.queryForObject(sql,Long.class);
            //老人健康咨询咨询
            sql = " SELECT count(o.consult) FROM wlyy_consult_team o INNER JOIN base_doctor d on o.doctor = d.id " +
                    " where 1=1 and o.type = 25 AND d.del = 1  "+olderFilter.replace("{patient}","o.patient")+"  ";
            doctorServiceCount += jdbcTemplate.queryForObject(sql,Long.class);
            map.put("doctorServiceTotal",doctorServiceCount);//医生服务数量
        }
        return PageEnvelop.getSuccessListWithPage("success",teamList,page,size,totalNum);
    }
    /**
     * 获取助老机构生活照料服务响应率情况
     */
    public List<Map<String,Object>> getOrgLifeCareStatistic() {
        String sql = " select code,name from base_org where type=3 and code not in (select dict_code from wlyy_hospital_sys_dict " +
                " where dict_name ='jkzl_org') and del=1 ";
        List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
        sql = " select count(life.id) total,life.hospital,org.name from base_life_care_order life INNER JOIN  base_org org " +
                " on life.hospital = org.code   where life.`status`=2  and org.code not in (select dict_code from wlyy_hospital_sys_dict "+
                "          where dict_name ='jkzl_org') and org.del=1 ";
        List<Map<String,Object>> tmpList = jdbcTemplate.queryForList(sql);
        try {
            Map<String,List<Map<String,Object>>> numList = tmpList.stream().collect(Collectors.groupingBy(e->e.get("hospital").toString()));
            sql = " select count(life.id) total,life.hospital,org.name from base_life_care_order life INNER JOIN  base_org org " +
                    " on life.hospital = org.code   where life.`status` in (1,3)  and org.code not in (select dict_code from wlyy_hospital_sys_dict "+
                    "          where dict_name ='jkzl_org') and org.del=1 ";
            tmpList = jdbcTemplate.queryForList(sql);
            Map<String,List<Map<String,Object>>> numList2 = tmpList.stream().collect(Collectors.groupingBy(e->e.get("hospital").toString()));
            for (Map<String, Object> tmp : list) {
                if (numList.containsKey(tmp.get("code"))||numList2.containsKey(tmp.get("code"))) {
                    Long finish=0l;
                    Long unfinish=0l;
                    if (numList.containsKey(tmp.get("code"))){
                        finish =Long.valueOf(numList.get(tmp.get("code")).get(0).get("total").toString());
                    }
                    if (numList2.containsKey(tmp.get("code"))){
                        unfinish =Long.valueOf(numList2.get(tmp.get("code")).get(0).get("total").toString());
                    }
                    tmp.put("finish", finish);
                    tmp.put("unfinish", unfinish);
                    tmp.put("total", finish+unfinish);
                    tmp.put("law", commonUtil.getRangeDouble(finish.intValue(),(finish.intValue()+unfinish.intValue())));
                } else {
                    tmp.put("finish", 0);
                    tmp.put("unfinish", 0);
                    tmp.put("total", 0);
                    tmp.put("law", 0);
                }
            }
            if (list.size()>0){
                list.sort(Comparator.comparing(obj -> Double.parseDouble(((Map<String,Object>) obj).get("law").toString())).reversed());
            }
        }catch (Exception e){
            return null;
        }
        return list;
    }
    public List<BaseServiceNews> serviceDynamics(Integer page,Integer size,String area,String level){
        List<String> jkzlPatients = jdbcTemplate.queryForList("SELECT dict_code FROM wlyy_hospital_sys_dict WHERE dict_name LIKE '%jkzl%' ",String.class);
        List<BaseServiceNews> result = new ArrayList<>();
        String olderFilter = roleService.getOlderRoleSQL(area,level);
        String baseServiceSql = "select sn.* from base_service_news sn where sn.user_type = 1 and (relation_code <> '' or relation_code is not null )" + olderFilter.replace("{patient}","sn.code");
        /*if ("330100".equals(area)){
                baseServiceSql +=" UNION SELECT sn.* FROM base_service_news sn WHERE sn.user_type =2 ";
        }else {
            // 1省 2市 3区县 4机构 5团队 6医生
            baseServiceSql +=" UNION SELECT sn.* FROM base_service_news sn LEFT JOIN base_team_member tm ON sn.`code` = tm.doctor_code WHERE sn.user_type =2  AND tm.del =1 ";
            if ("4".equals(level)){
                baseServiceSql +=" AND tm.org_code ='"+area+"'";
            }
            if ("5".equals(level)){
                baseServiceSql += " AND tm.team_code ='"+area+"'";
            }
        }*/
        baseServiceSql += " ORDER BY sn.create_time DESC  LIMIT "+(page-1)*size+","+size+"";
        List<BaseServiceNews> list = jdbcTemplate.query(baseServiceSql,new BeanPropertyRowMapper<>(BaseServiceNews.class));
        for (BaseServiceNews tmp:list){
            if (jkzlPatients.contains(tmp.getCode())){
                continue;
            }
            BasePatientDO patientDO = patientDao.findById(tmp.getCode());
            if (null!=patientDO){
                tmp.setArchiveType(patientDO.getArchiveType());
                tmp.setResidentialArea(patientDO.getResidentialArea());
            }
            String relationCode = tmp.getRelationCode();
            if (StringUtils.isNotBlank(relationCode)){
                if ("1".equals(tmp.getType())){//上门
                    String sql = " select group_concat(Distinct name SEPARATOR '、') from base_door_coach_fee_detail where  order_id ='"+relationCode+"' and status =1 ";
                    List<String> serviceItems = jdbcTemplate.queryForList(sql,String.class);
                    if (serviceItems.size()>0){
                        tmp.setServeItems(serviceItems.get(0));
                    }
                }
                if ("3".equals(tmp.getType())||"4".equals(tmp.getType())){//生活照料
                    String sql = " select group_concat(Distinct name SEPARATOR '、') from base_life_care_fee_detail where order_id ='"+relationCode+"' ";
                    List<String> serviceItems = jdbcTemplate.queryForList(sql,String.class);
                    if (serviceItems.size()>0){
                        tmp.setServeItems(serviceItems.get(0));
                    }
                }
                if ("6".equals(tmp.getType())){//安防
                    String sql = "SELECT serve_desc FROM base_security_monitoring_order WHERE id = '"+relationCode+"'";
                    List<String> serviceItems = jdbcTemplate.queryForList(sql,String.class);
                    if (serviceItems.size()>0){
                        tmp.setServeItems(serviceItems.get(0));
                    }
                }
            }
            result.add(tmp);
        }
        return result;
    }
    /**
     * 咨询排名情况
     * @param endDate
     * @param area
     * @param level 1省2市3区县4机构5团队6医生
     * @param type 咨询类型 23新生儿在线咨询 24老人在线咨询,25老人健康咨询
     * @return
     */
    public JSONArray getConsultAnalysisRank(String endDate,String area,int level,String type) throws Exception {
        JSONArray result = new JSONArray();
        String totalIndex = "";
        String noReplyIndex = "";
        String inTimeIndex = "";
        String finishIndex = " " ;
        Integer lowLevel ;
        if ("23".equals(type)){
            totalIndex = "28";
            noReplyIndex = "29";
            inTimeIndex = "30";
            finishIndex = "70";
            lowLevel = 4;//按机构分组
        }else if ("24".equals(type)){
            totalIndex = "31";
            noReplyIndex = "32";
            inTimeIndex = "33";
            finishIndex = "71";
            lowLevel = 5;//按社区分组
        }else if ("25".equals(type)){
            totalIndex = "57";
            noReplyIndex = "58";
            inTimeIndex = "59";
            finishIndex = "72";
            lowLevel = 5;//按社区分组
        }else {
            return null;
        }
        //按机构排名
        List<SaveModel> list = elasticsearchUtil.findDateQuotaLevelList(endDate, endDate, area, level, totalIndex, SaveModel.timeLevel_DDL,null,lowLevel+"", null);
        for (SaveModel tmp:list){
            JSONObject res = new JSONObject();
            String areaTmp ="";
            if (4==lowLevel){
                areaTmp = tmp.getHospital();
            }if (5==lowLevel){
                areaTmp = tmp.getDept();
            }
            SaveModel saveModel2 = elasticsearchUtil.findOneDateQuotaLevel0(endDate, endDate, areaTmp, lowLevel, noReplyIndex, SaveModel.timeLevel_DDL);
            //及时回复数
            SaveModel saveModel3 = elasticsearchUtil.findOneDateQuotaLevel0(endDate, endDate, areaTmp, lowLevel, inTimeIndex, SaveModel.timeLevel_DDL);
            SaveModel saveModel4 = elasticsearchUtil.findOneDateQuotaLevel0(endDate, endDate, areaTmp, lowLevel, finishIndex, SaveModel.timeLevel_DDL);
            res.put("total", tmp.getResult2().longValue());
            res.put("dept", tmp.getDept());
            res.put("deptName", tmp.getDeptName());
            res.put("hospital", tmp.getHospital());
            res.put("hospitalName", tmp.getHospitalName());
            res.put("noReply", saveModel2.getResult2().longValue());
            res.put("inTime", saveModel3.getResult2().longValue());
            res.put("finish", saveModel4.getResult2().longValue());
            res.put("noReplyRate", commonUtil.getRangeDouble(saveModel2.getResult2().intValue(), tmp.getResult2().intValue()));
            res.put("inTimeRate", commonUtil.getRangeDouble(saveModel3.getResult2().intValue(), tmp.getResult2().intValue()));
            res.put("finishRate", commonUtil.getRangeDouble(saveModel4.getResult2().intValue(), tmp.getResult2().intValue()));
            result.add(res);
        }
        result.sort(Comparator.comparing(obj -> ((JSONObject) obj).getDouble("finishRate")).reversed());
        return result;
    }
    public List<EmergencyAssistanceDO> getAdminOrderList(String patient, String patientName, String doctor, String status, Integer page, Integer pageSize,String area,String level){
        String olderFilter = roleService.getOlderRoleSQL(area,level);
        StringBuilder sql = new StringBuilder(" select ord.* from base_emergency_assistance_order ord inner join base_patient pa on pa.id = ord.patient and pa.del=1  where 1=1 ");
        if (org.apache.commons.lang3.StringUtils.isNotBlank(doctor)){
            BaseDoctorDO doctorDO = doctorDao.findById(doctor);
            if (null!=doctorDO){
                if (2==doctorDO.getLevel()){//社工
                    sql.append(" AND EXISTS (" +
                            "SELECT sr.patient from base_service_package_sign_record sr,base_service_package_record r, base_service_package_item i ," +
                            "base_team_member m " +
                            "where ord.patient = CONVERT(sr.patient USING utf8) and  sr.id = r.sign_id and sr.status=1 and r.service_package_id = i.service_package_id and  m.team_code = r.team_code " +
                            " and i.del = 1 and sr.`status`=1  and i.code='emergencyAssistance' and m.doctor_code = '"+doctor+"' and m.del = '1') ");
                }
                if (4==doctorDO.getLevel()){//助老员
                    sql.append(" and EXISTS (" +
                            "SELECT 1 from base_patient_helper ph INNER JOIN base_patient p on ph.patient = p.id and p.del=1 " +
                            " where ord.patient = ph.patient and ph.doctor='"+doctor+"' and ph.del=1) ");
                }
            }
        }
        if (org.apache.commons.lang3.StringUtils.isNotBlank(patient)){
            sql.append(" and ( ord.patient  = '"+patient+"' or ord.proxy_patient='"+patient+"' )");
        }
        if (org.apache.commons.lang3.StringUtils.isNotBlank(patientName)){
            sql.append(" and (pa.name like '%"+patientName+"%' or pa.idcard like '%"+patientName+"%') ");
        }
        if (StringUtils.isNotBlank(status)) {
            sql.append(" and ord.status in ( '").append(status.replace(",","','")).append("') ");
        }
        sql.append(olderFilter.replace("{patient}","pa.id"));
        sql.append(" order by ord.create_time DESC limit "+page*pageSize+","+pageSize);
        List<EmergencyAssistanceDO> resultList = jdbcTemplate.query(sql.toString(),new BeanPropertyRowMapper(EmergencyAssistanceDO.class));
        for (EmergencyAssistanceDO obj:resultList){
            BasePatientDO patientDO = patientDao.findById(obj.getPatient());
            obj.setPatientPhoto(patientDO.getPhoto());
            obj.setPatientSex(patientDO.getSex());
            obj.setPatientAge(IdCardUtil.getAgeForIdcard(patientDO.getIdcard()));
        }
        return resultList;
    }
    /**
     * 获取上门辅导排名
     * @return
     */
    public JSONArray getDoorCoachRank(String endDate,String area,Integer level) throws Exception {
        JSONArray result = new JSONArray();
        List<SaveModel> list = elasticsearchUtil.findDateQuotaLevelList(endDate, endDate, area, level, "54", SaveModel.timeLevel_DDL,null,"4", null);
        for (SaveModel tmp:list){
            JSONObject res = new JSONObject();
            SaveModel saveModel2 = elasticsearchUtil.findOneDateQuotaLevel0(endDate, endDate, tmp.getHospital(), 4, "35", SaveModel.timeLevel_DDL);
            res.put("total", tmp.getResult2().longValue());
            res.put("hospital", tmp.getHospital());
            res.put("hospitalName", tmp.getHospitalName());
            res.put("finish", saveModel2.getResult2().longValue());
            res.put("finishRate", commonUtil.getRangeDouble(saveModel2.getResult2().intValue(), tmp.getResult2().intValue()));
            result.add(res);
        }
        result.sort(Comparator.comparing(obj -> ((JSONObject) obj).getDouble("finishRate")).reversed());
        return result;
    }
    /**
     *  获取生活照料排名
     * @param endDate
     * @param area
     * @param level
     * @return
     * @throws Exception
     */
    public JSONArray getLifeCareRank(String endDate,String area,Integer level) throws Exception {
        JSONArray result = new JSONArray();
        List<SaveModel> list = elasticsearchUtil.findDateQuotaLevelList(endDate, endDate, area, level, "49", SaveModel.timeLevel_DDL,null,"5", null,"1,2,3");
        for (SaveModel tmp:list){
            JSONObject res = new JSONObject();
            SaveModel saveModel2 = elasticsearchUtil.findOneDateQuotaLevels(endDate, endDate, tmp.getHospital(), 4, "49", SaveModel.timeLevel_DDL,null,"2");
            res.put("total", tmp.getResult2().longValue());
            res.put("hospital", tmp.getHospital());
            res.put("hospitalName", tmp.getHospitalName());
            res.put("dept", tmp.getDept());
            res.put("deptName", tmp.getDeptName());
            res.put("finish", saveModel2.getResult2().longValue());
            res.put("finishRate", commonUtil.getRangeDouble(saveModel2.getResult2().intValue(), tmp.getResult2().intValue()));
            result.add(res);
        }
        result.sort(Comparator.comparing(obj -> ((JSONObject) obj).getDouble("finishRate")).reversed());
        return result;
    }
    /**
     * 管理端首页智慧照护生活照料项目新增情况
     */
    public JSONObject statisticsLifeCareItemAdd(String endDate, String area, Integer level, String type) throws Exception {
        JSONObject res = new JSONObject();
        SaveModel saveModel = elasticsearchUtil.findOneDateQuotaLevels(endDate, endDate, area, level, "48", SaveModel.timeLevel_DDL, null, null);
        res.put("index_" + 48 + "_total", saveModel.getResult2().longValue());
        if (StringUtils.isNotBlank(type)) {
            //周/月 增量
            String start = statisticsUtilService.calStart(endDate, type);
            SaveModel saveModelAdd = elasticsearchUtil.findOneDateQuotaLevels(start, endDate, area, level, "48", SaveModel.timeLevel_ZL, null,null);
            res.put("index_" + 48 + "_add", saveModelAdd.getResult2().longValue());
        }
        JSONArray addDetail = new JSONArray();
        if (StringUtils.isNotBlank(type)) {
            //周/月 增量
            String start = statisticsUtilService.calStart(endDate, type);
            List<SaveModel> saveModelAdds = elasticsearchUtil.findDateQuotaLevelList(start, endDate, area, level, "48", SaveModel.timeLevel_ZL, null,null,"1", null );
            for (SaveModel saveModelTmp : saveModelAdds) {
                JSONObject json = new JSONObject();
                SaveModel saveMode2 = elasticsearchUtil.findOneDateQuotaLevels(endDate, endDate, area, level, "48", SaveModel.timeLevel_DDL, null, saveModelTmp.getSlaveKey1());
                json.put("total", saveMode2.getResult2().longValue());
                json.put("num", saveModelTmp.getResult2().longValue());
                json.put("code", saveModelTmp.getSlaveKey1());
                json.put("name", saveModelTmp.getSlaveKey1Name());
                addDetail.add(json);
            }
        }
        res.put("index_add_detail", addDetail);
        return res;
    }
    /**
     * 通用增量趋势接口
     */
    public JSONArray addLineIndexs(String startDate, String endDate, String area, int level, String index, String timeLevel, String interval, String lowLevel) throws Exception {
        String[] indexs = index.split(",");
        JSONArray result = new JSONArray();
        List<List<SaveModel>> indexResultList = new ArrayList<>();
        for (String tmp:indexs){
            List<SaveModel> list = elasticsearchUtil.findDateQuotaLevel0(startDate, endDate, area, level, tmp, timeLevel, interval, lowLevel);
            indexResultList.add(list);
        }
            if (indexResultList.size()>0){
            List<SaveModel> list = indexResultList.get(0);
            Integer length = list.size();
            Integer indexLength = indexResultList.size();
            for (int i=0;i<length;i++) {
                JSONObject range = new JSONObject();
                SaveModel saveModel = list.get(i);
                Double amount = saveModel.getResult2();
                String date = DateUtil.dateToStr(saveModel.getQuotaDate(), "yyyy-MM-dd");
                for (int j=1;j<indexLength;j++){
                    try {
                        List<SaveModel> tmpList = indexResultList.get(j);
                        SaveModel saveModelTmp = tmpList.get(i);
                        amount +=saveModelTmp.getResult2();
                    }catch (Exception e){}
                }
                range.put("range", date);
                range.put("amount", amount);
                result.add(range);
            }
        }else {
            return null;
        }
        return result;
    }
}

+ 14 - 1
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/service/statistics/StatisticsUtilService.java

@ -5,6 +5,7 @@ import com.yihu.jw.es.util.SaveModel;
import com.yihu.jw.util.date.DateUtil;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import java.text.DecimalFormat;
@ -23,9 +24,21 @@ public class StatisticsUtilService {
    @Autowired
    private ElasticsearchUtil elasticsearchUtil;
    @Autowired
    private JdbcTemplate jdbcTemplate;
    public List<SaveModel> findDateAllQuotaLevel1Sort(String startDate, String endDate, String area, int level, String index, String timeLevel, String interval, String lowLevel) throws Exception {
        List<SaveModel> list = elasticsearchUtil.findDateAllQuotaLevel1(startDate,endDate,area,level,index,timeLevel,interval,lowLevel,"6");
        String areaLevel="6";
        if (!index.contains(",")){
            String sqlArea = " select area_level from wlyy_job_config_new where id='"+index+"' ";
            List<String> areaLevels = jdbcTemplate.queryForList(sqlArea,String.class);
            if (areaLevels.size()>0){
                if (org.apache.commons.lang3.StringUtils.isNotBlank(areaLevels.get(0))){
                    areaLevel = areaLevels.get(0);
                }
            }
        }
        List<SaveModel> list = elasticsearchUtil.findDateAllQuotaLevel1(startDate,endDate,area,level,index,timeLevel,interval,lowLevel,areaLevel);
        list.sort((a, b) -> Double.compare(b.getResult2(), a.getResult2()));
        return list;
    }

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

@ -4,15 +4,17 @@ import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.yihu.jw.care.dao.security.BaseEmergencyWarnLogDao;
import com.yihu.jw.entity.care.securitymonitoring.BaseEmergencyWarnLogDO;
import com.yihu.jw.es.util.ElasticsearchUtil;
import com.yihu.jw.es.util.SaveModel;
import com.yihu.jw.restmodel.web.PageEnvelop;
import com.yihu.jw.util.common.IdCardUtil;
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.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
/**
 * Created by yeshijie on 2022/1/18.
@ -24,7 +26,105 @@ public class WlyygcStatisticsService {
    private JdbcTemplate jdbcTemplate;
    @Autowired
    private BaseEmergencyWarnLogDao logDao;
    @Autowired
    private ElasticsearchUtil elasticsearchUtil;
    @Autowired
    private StatisticsService statisticsService;
    private static final String defalutArea = "330100";
    private static final Integer defalutLevel = 2;
//    接口:
//
//            1. 获取签约老人列表(需区分社区)
//            2. 获取健康设备列表(需区分社区)
//            3. 获取安防设备列表(2/3可以合在一起,类型区分)、(需区分社区)
//            4. 获取助老员列表
//5. 获取机构列表(养老机构/医疗机构/托育机构)
//            6. 获取社工列表(需区分社区)
//            7. 获取预警列表(需区分社区)
//            8. 获取幼儿列表
//9. 获取教师列表
    /**
     * 获取团队列表(社区列表)
     * @return
     */
    public PageEnvelop teamList(Integer page,Integer size){
        String sql = "select id,name from base_team where org_code = 'zdjsylfwyxgszhfgs' and del=1 ";
        sql += " ORDER BY id desc limit "+(page-1)*size+","+size;
        String sqlCount = "select count(id) from base_team where org_code = 'zdjsylfwyxgszhfgs' and del=1 ";
        List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
        long total = jdbcTemplate.queryForObject(sqlCount,Long.class);
        return PageEnvelop.getSuccessListWithPage("查询成功",list,page,size,total);
    }
    /**
     * 按类型查找机构
     * @param orgType 机构类型 2. 社区医院3.  养老机构 4.  托育机构  6日照中心
     */
    public PageEnvelop orgList(String orgType,Integer page,Integer size){
        String sql = "SELECT code,name,address  FROM base_org WHERE type =? and del = 1 AND `code` NOT IN (SELECT DISTINCT dict_code from wlyy_hospital_sys_dict WHERE dict_name = 'jkzl_org' and dict_code is not null) ";
        String sqlCount = "SELECT count(id) FROM base_org WHERE type =? and del = 1 AND `code` NOT IN (SELECT DISTINCT dict_code from wlyy_hospital_sys_dict WHERE dict_name = 'jkzl_org' and dict_code is not null) ";
        sql += " ORDER BY id desc limit "+(page-1)*size+","+size;
        List<Map<String,Object>> list = jdbcTemplate.queryForList(sql,new Object[]{orgType});
        long total = jdbcTemplate.queryForObject(sqlCount,new Object[]{orgType},Long.class);
        return PageEnvelop.getSuccessListWithPage("查询成功",list,page,size,total);
    }
    /**
     * 社工/助老员列表
     * level 2社工,4助老员
     * @param level
     */
    public PageEnvelop doctorList(Integer level,String teamCode,Integer page,Integer size){
        String sql = "SELECT DISTINCT d.id,d.name,d.mobile, d.idcard,(CASE WHEN d.sex = 1 THEN  '男' ELSE '女' END ) AS sex " +
                ",m.team_code teamCode,t.name teamName from base_doctor d  " +
                "LEFT JOIN base_team_member m on d.id = m.doctor_code " +
                "LEFT JOIN base_team t on t.id = m.team_code " +
                "WHERE d.doctor_level = ? and d.del = '1' and d.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 sqlCount = "SELECT DISTINCT count(d.id) from base_doctor d  " +
                "LEFT JOIN base_team_member m on d.id = m.doctor_code " +
                "WHERE d.doctor_level = ? and d.del = '1' and d.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) ";
        if(StringUtils.isNotBlank(teamCode)){
            sql += " and m.team_code ='"+teamCode+"'";
            sqlCount += " and m.team_code ='"+teamCode+"'";
        }
        sql += " ORDER BY d.id desc limit "+(page-1)*size+","+size;
        List<Map<String,Object>> list = jdbcTemplate.queryForList(sql,new Object[]{level});
        long total = jdbcTemplate.queryForObject(sqlCount,new Object[]{level},Long.class);
        return PageEnvelop.getSuccessListWithPage("查询成功",list,page,size,total);
    }
    /**
     * 教师列表
     */
    public PageEnvelop teacherList(Integer page,Integer size){
        String sql = "SELECT d.id,d.name,d.mobile, d.idcard,(CASE WHEN d.sex = 1 THEN  '男' ELSE '女' END ) AS sex " +
                " from base_doctor d " +
                " WHERE d.doctor_level = 3 and d.del = '1' and d.id not in (SELECT DISTINCT dict_code from wlyy_hospital_sys_dict WHERE dict_name = 'jkzl_teacher' and dict_code is not null)";
        sql += " ORDER BY d.id desc limit "+(page-1)*size+","+size;
        String sqlCount = "SELECT count(d.id) " +
                " from base_doctor d " +
                " WHERE d.doctor_level = 3 and d.del = '1' and d.id not in (SELECT DISTINCT dict_code from wlyy_hospital_sys_dict WHERE dict_name = 'jkzl_teacher' and dict_code is not null)";
        List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
        long total = jdbcTemplate.queryForObject(sqlCount,Long.class);
        return PageEnvelop.getSuccessListWithPage("查询成功",list,page,size,total);
    }
    /***************************************************华联社区******************************************************/
    /**
     * 社区签约老人数量
     * @return
@ -188,8 +288,10 @@ public class WlyygcStatisticsService {
        String filter = "";
        if("1".equals(code)){
            filter = " and r.team_code = '8a92aba97a9f6f49017ae4fdbdmqteam' ";
        }else if("all".equals(code)){
        }else {
            return PageEnvelop.getSuccess("查询成功");
            filter = " and r.team_code = '"+code+"' ";
        }
        if(status!=null){
            filter += " and o.status = "+status;
@ -202,7 +304,7 @@ public class WlyygcStatisticsService {
        }
        Map<String,String> statusMap = new HashMap<>();
        statusMap.put("-1","已取消");
        statusMap.put("-2","误报警");
        statusMap.put("-2","已响应");
        statusMap.put("0","已完成");
        statusMap.put("1","申请中");
        String sql = "SELECT * from ( " +
@ -267,6 +369,13 @@ public class WlyygcStatisticsService {
        return PageEnvelop.getSuccessListWithPage("查询成功",jsonArray,page,size,total);
    }
    /**
     * 签约老人列表
     * @param code 1 华联社区,其他社区要传具体社区id
     * @param page
     * @param size
     * @return
     */
    public PageEnvelop signOldList(String code, Integer page, Integer size) {
        if (page == null) {
            page = 1;
@ -284,8 +393,11 @@ public class WlyygcStatisticsService {
            //1华联社区
            sql += "  and r.team_code = '8a92aba97a9f6f49017ae4fdbdmqteam' ";
            sqlCount += "  and r.team_code = '8a92aba97a9f6f49017ae4fdbdmqteam' ";
        }else if("all".equals(code)){
            //查全部
        } else {
            return PageEnvelop.getSuccess("查询成功");
            sql += "  and r.team_code = '"+code+"' ";
            sqlCount += "  and r.team_code = '"+code+"' ";
        }
        sql += "ORDER BY p.`name` desc limit " + (page - 1)*size + "," + size;
        List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
@ -297,8 +409,10 @@ public class WlyygcStatisticsService {
        String filter = "";
        if("1".equals(code)){
            filter = " and r.team_code = '8a92aba97a9f6f49017ae4fdbdmqteam' ";
        }else if("all".equals(code)){
            //查全部
        }else {
            return PageEnvelop.getSuccess("查询成功");
            filter += "  and r.team_code = '"+code+"' ";
        }
        if(page==null){
            page =1;
@ -349,8 +463,14 @@ public class WlyygcStatisticsService {
        return PageEnvelop.getSuccessListWithPage("查询成功",res,page,size,total);
    }
    public PageEnvelop deviceList(String code,Integer page,Integer size){
    /**
     * 设备列表
     * @param deviceType 设备种类 0健康设备 1安防设备
     * @param page
     * @param size
     * @return
     */
    public PageEnvelop deviceList(String code,Integer deviceType ,Integer page,Integer size){
        if (page == null) {
            page = 1;
        }
@ -359,9 +479,15 @@ public class WlyygcStatisticsService {
        }
        String filter ="";
        if ("1".equals(code)){
            filter += "AND r.team_code = '8a92aba97a9f6f49017ae4fdbdmqteam'";
            filter += " AND r.team_code = '8a92aba97a9f6f49017ae4fdbdmqteam'";
        }else if("all".equals(code)){
        }else {
            return PageEnvelop.getSuccess("查询成功");
            filter += " AND r.team_code = '"+code+"'";
        }
        if(deviceType != null){
            filter += " AND pd.device_type = "+deviceType+"";
        }
        String deviceSql = "SELECT DISTINCT p.id patient,pd.device_sn sn," +
@ -404,4 +530,511 @@ public class WlyygcStatisticsService {
        return PageEnvelop.getSuccessListWithPage("查询成功",maps,page,size,total);
    }
    /***************************************************所有社区******************************************************/
    /**
     *老人基本信息 居民标签
     */
    public PageEnvelop oldInfo(Integer page, Integer size){
        if (page == null) {
            page = 1;
        }
        if (size == null) {
            size = 10;
        }
        String patientInfoSql="SELECT DISTINCT" +
                " a.`name` AS `name`," +
                " TIMESTAMPDIFF(YEAR, a.birthday, CURDATE()) AS age," +
                " a.address AS address," +
                " a.residential_area AS residential_area," +
                " '老人' AS type," +
                " a.sign_status * 1 AS signStatus," +
                " a.archive_status * 1 AS archiveStatus," +
                " l.label_name AS labelName," +
                " a.id as id" +
                " FROM" +
                " base_patient a LEFT JOIN " +
                " wlyy_patient_label l ON a.id = l.patient" +
                " WHERE" +
                " a.archive_type = 1" +
                " AND a.del = '1' and  l.label_type = 1 limit " + (page - 1)*size + "," + size;
        List<Map<String, Object>> maps = jdbcTemplate.queryForList(patientInfoSql);
        //删除测试老人数据
        Iterator<Map<String, Object>> iterator = maps.iterator();
        Map<String, String> signOlderMap = removeTestOld();
        while (iterator.hasNext()) {
            Map<String, Object> next = iterator.next();
            if (!signOlderMap.containsValue(next.get("id").toString())) {
                iterator.remove();
            }
        }
        return  PageEnvelop.getSuccessListWithPage("查询成功",maps,page,size,Long.parseLong(maps.size()+""));
    }
    /**
     * 老人签约信息 签约团队
     */
    public PageEnvelop signOldInfo(String patient,Integer page, Integer size){
        String signOld = "SELECT" +
                " DATE_FORMAT(pr.create_time,'%Y-%m-%d') AS createTime," +
                " p.`name` AS serName," +
                " p.type AS serType," +
                " p.org_name AS serOrgName," +
                " sr.sign_doctor_name AS signDoctorName," +
                " t.name AS teamName" +
                " FROM" +
                " base_service_package_sign_record sr " +
                " LEFT JOIN base_service_package_record pr ON sr.id = pr.sign_id" +
                " LEFT JOIN base_service_package p ON pr.service_package_id = p.id" +
                " LEFT JOIN base_team t ON t.id = pr.team_code" +
                " WHERE" +
                "  sr.status=1" +
                " AND p.del = '1'" +
                " AND t.del = '1'" +
                " AND sr.patient = '"+patient+"' limit " + (page - 1)*size + "," + size;
        List<Map<String, Object>> maps = jdbcTemplate.queryForList(signOld);
        return PageEnvelop.getSuccessListWithPage("查询成功",maps,page,size,Long.parseLong(maps.size()+""));
    }
    /**
     * 紧急预警信息
     */
    public PageEnvelop emeAndsecinfo(Integer page,Integer size){
        String emeSql = "SELECT DISTINCT " +
                " eao.patient AS patient, " +
                " eao.patient_name AS patientName, " +
                " eao.org_name AS orgName, " +
                " eao.serve_address AS serveAddress, " +
                " eao.doctor_name AS doctorName, " +
                " DATE_FORMAT(eao.create_time,'%Y-%m-%d')  AS createTime," +
                " eao.type AS type," +
                " '紧急呼叫' serve_desc," +
                " eao.`status` AS `status`," +
                " DATE_FORMAT(eao.complete_time,'%Y-%m-%d') as completeTime," +
                " DATE_FORMAT(wdr.response_time,'%Y-%m-%d')  AS responseTime" +
                " FROM" +
                " base_emergency_assistance_order eao LEFT JOIN base_emergency_warn_doctor_response wdr ON eao.id = wdr.order_id limit " + (page - 1)*size + "," + size;
        String secSql = "SELECT DISTINCT" +
                " mo.patient AS patient," +
                " mo.patient_name AS patientName," +
                " mo.doctor_name AS doctorName," +
                " mo.serve_desc AS serveDesc," +
                " mo.serve_address AS serveAddress," +
                " DATE_FORMAT(mo.create_time,'%Y-%m-%d')  AS createTime," +
                " DATE_FORMAT(mo.complete_time,'%Y-%m-%d')  AS completeTime," +
                " DATE_FORMAT(mo.service_response_time,'%Y-%m-%d')  AS responseTime," +
                " mo.order_source AS orderSource," +
                " mo.type AS type," +
                " mo.`status` AS `status`" +
                " FROM" +
                " base_security_monitoring_order mo limit " + (page - 1)*size + "," + size;
        List<Map<String, Object>> emeList = jdbcTemplate.queryForList(emeSql);
        List<Map<String, Object>> secList = jdbcTemplate.queryForList(secSql);
        emeList.addAll(secList);
        Map<String, String> jkzlUserMap = removeTestUser();
        Iterator<Map<String, Object>> iterator = emeList.iterator();
        while (iterator.hasNext()) {
            Map<String, Object> next = iterator.next();
            if (jkzlUserMap.containsValue(next.get("patient"))) {
                iterator.remove();
            }
        }
        return PageEnvelop.getSuccessListWithPage("查询成功",emeList,page,size,Long.parseLong(emeList.size()+""));
    }
    /**
     * 设备信息
     */
    public PageEnvelop deviceLists(Integer page,Integer size){
        String deviceSql = "SELECT DISTINCT" +
                " p.`name`," +
                " p.id," +
                " pd.device_sn AS deviceSn," +
                " pd.device_name AS deviceName," +
                " wd.device_type as deviceType," +
                " pd.category_code as categoryCode  " +
                " FROM" +
                " wlyy_patient_device pd," +
                " wlyy_devices wd," +
                " base_patient p" +
                " WHERE" +
                " p.id = pd.`user` AND" +
                " wd.device_code = pd.device_sn limit " + (page - 1)*size + "," + size;
        List<Map<String, Object>> maps = jdbcTemplate.queryForList(deviceSql);
        Map<String, String> jkzlUserMap = removeTestUser();
        Iterator<Map<String, Object>> iterator = maps.iterator();
        while (iterator.hasNext()) {
            Map<String, Object> next = iterator.next();
            if (jkzlUserMap.containsValue(next.get("patient"))) {
                iterator.remove();
            }
        }
        return PageEnvelop.getSuccessListWithPage("查询成功",maps,page,size,Long.parseLong(maps.size()+""));
    }
    //1血糖仪,2.血压计,3药盒,4智能手表,7 = 居家报警器,12 监控器 13 睡眠带 14气感报警器 15烟感报警器 16拐杖 17随身wifi
    public List<Map<String, Object>> deviceCollectInfo(String deviceSN,String code,String startDate,String endDate){
        String sql = "";
        switch (code){
            case "14":
                //烟感气感实时数据
                sql = "SELECT device_sn,device_type,value,unit,DATE_FORMAT(create_time,'%Y-%m-%d') as create_time,temperature_value,power_value FROM base_device_health_index WHERE device_sn = '"+deviceSN+"'";
                break;
            case "16": //拐杖
                sql = "SELECT lat,lon,DATE_FORMAT(create_time,'%Y-%m-%d') as create_time FROM base_yxdevice_index WHERE sn = '"+deviceSN+"'";
                break;
            case "13": //睡眠带
                sql = "SELECT * FROM base_sleep_device WHERE device_sn = '"+deviceSN+"'";
                break;
            case "4": //智能手表
                sql = "SELECT sleep_time,deep_sleep,light_sleep,awake_time,interval_time,total,del,DATE_FORMAT(create_time,'%Y-%m-%d') as create_time FROM base_sleep_x1device WHERE device_sn = '"+deviceSN+"' ";
                break;
        }
        if (StringUtils.isNotBlank(startDate)&&StringUtils.isNotBlank(endDate)){
            sql += " AND create_time >= '"+startDate+"' AND create_time <='"+endDate+"' ";
        }
        sql += " ORDER BY create_time";
        return jdbcTemplate.queryForList(sql);
    }
    /**
     * 生活照料
     */
    public PageEnvelop lifeCareList(Integer page,Integer size){
        if (null==page||0==page){
            page = 1;
        }
        if (null==size||0==size) {
            size = 10;
        }
        String sql ="SELECT DISTINCT" +
                " co.proxy_patient_name," +
                " co.patient_name AS patientName," +
                " co.serve_address AS serveAddress," +
                " DATE_FORMAT(co.create_time,'%Y-%m-%d') AS createTime," +
                " DATE_FORMAT(co.complete_time,'%Y-%m-%d') AS completeTime," +
                " co.doctor_name AS doctorName," +
                " fd.`name` AS lifeCareName," +
                " co.`status` AS `status`," +
                " co.conclusion_remark AS remark" +
                " FROM" +
                " base_life_care_order co" +
                " LEFT JOIN base_life_care_fee_detail fd ON co.id = fd.order_id ORDER BY co.create_time DESC LIMIT "+(page-1)*size+","+size+"";
        List<Map<String, Object>> maps = jdbcTemplate.queryForList(sql);
        Map<String, String> jkzlUserMap = removeTestUser();
        Iterator<Map<String, Object>> iterator = maps.iterator();
        while (iterator.hasNext()) {
            Map<String, Object> next = iterator.next();
            if (jkzlUserMap.containsValue(next.get("patientName"))) {
                iterator.remove();
            }
        }
        return PageEnvelop.getSuccessListWithPage("查询成功",maps,page,size,Long.parseLong(maps.size()+""));
    }
    /**
     * 幼儿信息
     */
    public PageEnvelop infantInfo(Integer page,Integer size){
        String infantSql = "SELECT DISTINCT" +
                " p.id AS id," +
                " o.address AS address," +
                " p. NAME AS `name`," +
                " t. STATUS AS `status`," +
                " o. NAME AS `orgName`," +
                " p.idcard AS idcard" +
                " FROM" +
                " base_patient p" +
                " LEFT JOIN base_doctor_patient_tmp t ON t.patient = p.id" +
                " LEFT JOIN base_org o ON t.org_code = o. CODE" +
                " WHERE" +
                " p.archive_type = 2" +
                " AND t.del = 1" +
                " AND p.del = 1" +
                " and o.type = 4 ORDER BY p.create_time DESC LIMIT "+(page-1)*size+","+page+"";
        List<Map<String, Object>> infantList = jdbcTemplate.queryForList(infantSql);
        Map<String, String> jkzlUserRem = removeTestUser();
        Iterator<Map<String, Object>> iterator = infantList.iterator();
        while (iterator.hasNext()) {
            Map<String, Object> next = iterator.next();
            if (jkzlUserRem.containsValue(next.get("id"))) {
                iterator.remove();
            }else {
                next.put("age",IdCardUtil.getAgeForIdcard(next.get("idcard").toString()));
            }
        }
        return PageEnvelop.getSuccessListWithPage("查询成功",infantList,page,size,Long.parseLong(infantList.size()+""));
    }
    /**
     * 上门辅导
     */
    public PageEnvelop doorServiceOrder(Integer page,Integer size){
        String serviceSql ="SELECT DISTINCT " +
                " so.serve_address AS serveAddress, " +
                " so.proxy_patient_name AS ppName, " +
                " so.patient_name AS pName, " +
                " so.patient AS patient," +
                " DATE_FORMAT(so.create_time,'%Y-%m-%d')  AS createTime, " +
                " DATE_FORMAT(so.service_response_time,'%Y-%m-%d')  AS serviceTime, " +
                " so.doctor_name AS  doctorName, " +
                " dc.`name` AS serveName, " +
                " DATE_FORMAT(so.complete_time,'%Y-%m-%d')  AS completeTime, " +
                " so.`status` AS `status`, " +
                " fd.conclusion AS conclusion " +
                " FROM " +
                " base_door_coach_order so " +
                " LEFT JOIN base_door_coach_fee_detail dc ON so.id = dc.order_id " +
                " LEFT JOIN base_door_coach_conclusion fd ON so.id = fd.order_id ";
        List<Map<String, Object>> lists = jdbcTemplate.queryForList(serviceSql);
        Map<String, String> jkzlUserRm = removeTestUser();
        Iterator<Map<String, Object>> iterator = lists.iterator();
        while (iterator.hasNext()) {
            Map<String, Object> next = iterator.next();
            if (jkzlUserRm.containsValue(next.get("patient"))) {
                iterator.remove();
            }
        }
        return PageEnvelop.getSuccessListWithPage("查询成功",lists,page,size,Long.parseLong(lists.size()+""));
    }
    /**
     * 幼儿信息计数
     */
    public JSONObject infantTotal(String endDate) throws Exception {
        JSONObject res = new JSONObject();
        // 64 活动浏览数
        // 65 课程播放数
        // 66 活动报名数
        //28 新生儿-在线咨询总数
        //35 新生儿-上门辅导-服务工单数
        SaveModel saveModel = elasticsearchUtil.findOneDateQuotaLevel0(endDate, endDate, defalutArea, defalutLevel, "64", SaveModel.timeLevel_DDL);
        res.put("activity_1", saveModel.getResult2().longValue());
        saveModel = elasticsearchUtil.findOneDateQuotaLevel0(endDate, endDate, defalutArea, defalutLevel, "65", SaveModel.timeLevel_DDL);
        res.put("activity_2", saveModel.getResult2().longValue());
        saveModel = elasticsearchUtil.findOneDateQuotaLevel0(endDate, endDate, defalutArea, defalutLevel, "66", SaveModel.timeLevel_DDL);
        res.put("activity_3", saveModel.getResult2().longValue());
        saveModel = elasticsearchUtil.findOneDateQuotaLevel0(endDate, endDate, defalutArea, defalutLevel, "28", SaveModel.timeLevel_DDL);
        res.put("index_28", saveModel.getResult2().longValue());
        saveModel = elasticsearchUtil.findOneDateQuotaLevel0(endDate, endDate, defalutArea, defalutLevel, "35", SaveModel.timeLevel_DDL);
        res.put("index_35", saveModel.getResult2().longValue());
        //托育机构
        String orgSql = "SELECT COUNT(id) FROM base_org WHERE type = 4 AND del = 1 AND `code` NOT IN (SELECT DISTINCT dict_code from wlyy_hospital_sys_dict WHERE dict_name = 'jkzl_org' and dict_code is not null)";
        List<Integer> totalList = jdbcTemplate.queryForList(orgSql, Integer.class);
        res.put("orgTotal",totalList.get(0));
        //教师
        String teacherSql = "SELECT COUNT(id) FROM base_doctor WHERE doctor_level = 3 AND del =1 AND id NOT IN(SELECT DISTINCT dict_code from wlyy_hospital_sys_dict WHERE dict_name = 'jkzl_teacher' and dict_code is not null)";
        totalList = jdbcTemplate.queryForList(teacherSql, Integer.class);
        res.put("teacherTotal",totalList.get(0));
        String infantSql = "SELECT COUNT(id) FROM base_patient WHERE archive_type = 2 AND del = 1 AND id NOT IN (SELECT DISTINCT dict_code FROM wlyy_hospital_sys_dict WHERE dict_name = 'jkzl_child' and dict_code is not null)";
        //照护幼儿
        totalList = jdbcTemplate.queryForList(infantSql,Integer.class);
        res.put("zh_infantTotal",totalList.get(0));
        //幼儿总数
        String infantTotalSql = "SELECT infant_num FROM base_older_num ";
        totalList = jdbcTemplate.queryForList(infantTotalSql,Integer.class);
        res.put("infantTotal",totalList.get(0));
        //照护率
         res.put("zh_rate", (Float.parseFloat(res.get("zh_infantTotal").toString()) / (float) 1335 * 100) + "%");
        return res;
    }
    /**
     * 老人信息计数
     */
    public JSONObject oldTotal(String endDate) throws Exception {
        JSONObject res = new JSONObject();
        //老人总数
        String totalList = "SELECT lsqs_num+bss_num+jss_num+ybs_num AS total FROM base_older_num";
        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 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 orgSql = "SELECT COUNT(IF(type = 2,type,null)) AS yl,COUNT(IF(type = 3,type,null)) AS yangl,COUNT(IF(type =6 ,type,NULL)) AS rz FROM base_org WHERE del = 1 AND `code` NOT IN (SELECT DISTINCT dict_code from wlyy_hospital_sys_dict WHERE dict_name = 'jkzl_org' 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) ";
        if (StringUtils.isNotBlank(endDate)) {
            zhTotalList += " and create_time <= '"+endDate+"'";
            orgSql += " and create_time <= '"+endDate+"'";
            zlSql += " and create_time <= '"+endDate+"'";
        }
        integers = jdbcTemplate.queryForList(zhTotalList,Integer.class);
        res.put("zh_oldTotal",integers.get(0));
        //照护率
        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>> orgList = jdbcTemplate.queryForList(orgSql);
        res.put("yanglao",orgList.get(0).get("yangl"));
        res.put("yl",orgList.get(0).get("yl"));
        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"));
        //指标
        JSONArray jsonArray = statisticsService.cloudCareForTheElderly(endDate, defalutArea, defalutLevel);
        res.put("label",jsonArray);
        JSONObject jsonObject = statisticsService.statisticsOrderServer("50", endDate, 2, "2");
        res.put("age",jsonObject);
        // 紧急预警
        String jjyjSql = "SELECT patient_name FROM base_emergency_assistance_order WHERE `status` = 1 ";
        if (StringUtils.isNotBlank(endDate)) {
            jjyjSql += "AND create_time <= '"+endDate+"'";
        }
        List<Map<String, Object>> jjyj = jdbcTemplate.queryForList(jjyjSql);
        res.put("emeName",jjyj);
        return res;
    }
    /**
     * 社区计数
     */
    public List<Map<String,Object>> getOlderTeamListWithPage(Integer page,Integer size) throws Exception {
        List<Map<String,Object>> teamList  = new ArrayList<>();
        page = page>0?page-1:0;
        String sql = " select count(distinct org.code) from " +
                " base_service_package pack INNER JOIN base_org org on pack.org_code = org.code " +
                "INNER JOIN base_team te on te.org_code = org.`code` " +
                " where  org.del=1 and org.type=3 and te.del=1 and org.code not in " +
                " (select dict_code from wlyy_hospital_sys_dict where dict_name='jkzl_org') ";
        Long totalNum = jdbcTemplate.queryForObject(sql,Long.class);
        sql = " select distinct org.code as orgCode,org.name as orgName,te.id as teamId,te.name as teamName from " +
                " base_service_package pack INNER JOIN base_org org on pack.org_code = org.code " +
                "INNER JOIN base_team te on te.org_code = org.`code` " +
                " where  org.del=1 and org.type=3 and te.del=1 and org.code not in " +
                " (select dict_code from wlyy_hospital_sys_dict where dict_name='jkzl_org') order by org.code asc " +
                "limit "+(page*size)+","+size ;
        teamList = jdbcTemplate.queryForList(sql);
        for (Map<String,Object> map:teamList){
            Integer count = 0;
            //1 获取社工人数(该团队人数) 2.预警数(紧急呼叫+安防监护 已取消的不算)
            //3助老服务(该社区所有老人的生活照料总数 已取消的不算) 4物联设备(健康设备绑定量+安防设备绑定量)
            String teamName = map.get("teamName").toString();
            String teamId = map.get("teamId").toString();
            teamName = teamName.replace("团队","社区");
            teamName = teamName.replace("服务","");
            if(!teamName.contains("社区")){
                teamName = teamName+"社区";
            }
            map.put("teamName",teamName);
            sql = " SELECT count(o.bussiness_id) " +
                    "FROM ( SELECT o.id AS bussiness_id,o.team_code as dept,o.`status`,o.update_time " +
                    "FROM base_security_monitoring_order o UNION ALL  " +
                    "SELECT o.id AS bussiness_id,o.team_code as dept,o.`status`,o.update_time " +
                    "FROM base_emergency_assistance_order o " +
                    ") o WHERE 1=1  and dept='"+teamId+"' and `status` = 1 ";
            Long emeAssistanceCount = jdbcTemplate.queryForObject(sql,Long.class);
            map.put("emeAssistanceCount",emeAssistanceCount);//救助服务
            sql = "  select count(distinct pd.device_sn) 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  " +
                    " where 1=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)  = p.id " +
                    " and CONVERT(sr.patient USING utf8) not in (SELECT dict_code FROM `base`.`wlyy_hospital_sys_dict` " +
                    " WHERE `dict_name` = 'jkzl_older' or dict_name='jkzl_child') and r.team_code='"+teamId+"' ) ";
            count = jdbcTemplate.queryForObject(sql,Integer.class);
            map.put("bindingDeviceCount",count);
            String sqltmp = "SELECT GROUP_CONCAT(dict_code) orgCodes from wlyy_hospital_sys_dict WHERE dict_name = 'jkzl_older' ";
            List<Map<String,Object>> listtmp =  jdbcTemplate.queryForList(sqltmp);
            String filter ="";
            if(listtmp.size()>0){
                String orgCodes = String.valueOf(listtmp.get(0).get("orgCodes"));
                orgCodes = orgCodes.replaceAll(",","','");
                filter = " and a.id not in ('"+orgCodes+"')";
            }
            sql = "SELECT count(a.id) from base_patient a  WHERE a.archive_type = 1 and a.del = '1' ";
            sql += " 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;
            count =  jdbcTemplate.queryForObject(sql,Integer.class);
            map.put("oldTotal",count);//照护老人数量
        }
        return  teamList;
    }
    /**
     * 排除测试数据
     */
    public Map<String,String>  removeTestOrg(){
        String filterOrg = "";//排除的测试机构
        String sqlOgr = "SELECT DISTINCT dict_code from wlyy_hospital_sys_dict WHERE dict_name = 'jkzl_org' and dict_code is not null ";
        List<String> Orglist =  jdbcTemplate.queryForList(sqlOgr,String.class);
        Map<String,String> jkzlOrgMap = new HashMap<>();
        if(Orglist.size()>0){
            jkzlOrgMap = Orglist.stream().collect(Collectors.toMap(String::toString,String::toString));
            filterOrg = " '" +String.join("','",Orglist)+ "' ";
        }
        return jkzlOrgMap;
    }
    //排除的测试用户
    public Map<String, String> removeTestUser() {
        String filterUser = " ";
        String sqltmp = "SELECT DISTINCT dict_code from wlyy_hospital_sys_dict WHERE (dict_name = 'jkzl_child' or dict_name = 'jkzl_older' " +
                "  or dict_name = 'jkzl_user' or dict_name = 'jkzl_helper'  or dict_name = 'jkzl_teacher' ) and dict_code is not null";
        List<String> listtmp = jdbcTemplate.queryForList(sqltmp, String.class);
        Map<String, String> jkzlUserMap = new HashMap<>();
        if (listtmp.size() > 0) {
            jkzlUserMap = listtmp.stream().collect(Collectors.toMap(String::toString, String::toString));
            filterUser = " '" + String.join("','", listtmp) + "' ";
        }
        return jkzlUserMap;
    }
    //测试 签约老人id
    public Map<String,String> removeTestOld(){
        String signOlderSql="SELECT " +
                " DISTINCT p.id " +
                " FROM  " +
                " base_patient p INNER JOIN base_service_package_sign_record sr on p.id = sr.patient and sr.`status`=1 and  " +
                " p.id not in ( SELECT DISTINCT dict_code from wlyy_hospital_sys_dict WHERE (dict_name = 'jkzl_child' or dict_name = 'jkzl_older' or dict_name = 'jkzl_user' or dict_name = 'jkzl_helper'  or dict_name = 'jkzl_teacher' ) and dict_code is not null ) " +
                " WHERE p.del = 1 and p.archive_type =1  " ;
        List<String> signOlderList = jdbcTemplate.queryForList(signOlderSql,String.class);
        Map<String,String> signOlderMap = signOlderList.stream().collect(Collectors.toMap(String::toString,String::toString));
        return signOlderMap;
    }
}

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

@ -11,6 +11,7 @@ import com.yihu.jw.care.dao.security.SecurityMonitoringOrderDao;
import com.yihu.jw.care.service.course.CourseService;
import com.yihu.jw.care.service.device.PatientDeviceService;
import com.yihu.jw.care.service.device.PatientHealthIndexService;
import com.yihu.jw.care.service.device.YsDeviceService;
import com.yihu.jw.care.service.doorCoach.PatientDoorCoachOrderService;
import com.yihu.jw.care.service.lifeCare.LifeCareOrderService;
import com.yihu.jw.care.service.security.SecurityMonitoringOrderService;
@ -27,8 +28,11 @@ import com.yihu.jw.entity.care.securitymonitoring.BaseEmergencyWarnLogDO;
import com.yihu.jw.entity.care.securitymonitoring.SecurityMonitoringOrderDO;
import com.yihu.jw.entity.care.sign.CapacityAssessmentRecordDO;
import com.yihu.jw.patient.dao.BasePatientDao;
import com.yihu.jw.restmodel.ResponseContant;
import com.yihu.jw.restmodel.web.PageEnvelop;
import com.yihu.jw.util.common.GpsUtil;
import com.yihu.jw.util.common.IdCardUtil;
import com.yihu.jw.util.common.LatitudeUtils;
import com.yihu.jw.util.date.DateUtil;
import org.apache.commons.lang.StringUtils;
import org.json.JSONArray;
@ -36,10 +40,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.stream.Collectors;
/**
@ -82,6 +83,10 @@ public class PatientInfoPlatFormService {
    private PatientSafeAreaDao patientSafeAreaDao;
    @Autowired
    private CountDistance countDistance;
    @Autowired
    private YsDeviceService ysDeviceService;
    @Autowired
    private GpsUtil gpsUtil;
    /**
@ -148,7 +153,7 @@ public class PatientInfoPlatFormService {
     * @param patientType 1老人 2新生儿
     * @return
     */
    public JSONObject getPatientInfoNew(String patient,Integer patientType){
    public JSONObject getPatientInfoNew(String patient,Integer patientType) throws IllegalAccessException {
        JSONObject result = new JSONObject();
        JSONObject tmp = new JSONObject();
        BasePatientDO patientDO = patientDao.findById(patient);
@ -158,6 +163,7 @@ public class PatientInfoPlatFormService {
            tmp.put("address",patientDO.getAddress());
            tmp.put("address",patientDO.getAddress());
            tmp.put("patient",patientDO.getId());
            tmp.put("pad_imei",patientDO.getPadImei());
            String idcard = patientDO.getIdcard();
            if (StringUtils.isNotBlank(idcard)){
                Integer age = IdCardUtil.getAgeForIdcard(idcard);
@ -194,12 +200,136 @@ public class PatientInfoPlatFormService {
            //能力状况
            BaseCapacityLabelDO capacityLabelDO = capacityLabelDao.findByPatient(patient);
            result.put("capacityLabelDO",capacityLabelDO);
            if (null!= capacityLabelDO&&capacityLabelDO.getCapacityLabels().size() > 0) {
                result.put("capacityLabelDOStr", capacityLabelDO.getCapacityLabels());
            }else {
                result.put("capacityLabelDOStr", null);
            }
            return result;
        }
        return null;
    }
    /**
     * 大屏获取老人紧急预警、助老服务情况
     * @return
     */
    public JSONObject getEmeAndOlderServiceInfo(String patient){
        JSONObject result = new JSONObject();
        JSONObject emeWarn = new JSONObject(); //紧急预警
        emeWarn.put("lastOlder",null);
        JSONObject olderService = new JSONObject(); //养老服务(生活照料)
        olderService.put("lastOlder",null);
        String sql = " select count(o.id) total,`status` from base_emergency_assistance_order o where patient='"+patient+"' " +
                " and `status` <>-1 " +
                "UNION ALL " +
                "select count(o.id) total,status from base_security_monitoring_order o where patient='"+patient+"' and `status` <>-1 " +
                "GROUP BY `status` ";
        List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
        Integer all=0;
        Integer unfinish=0;
        Integer finish=0;
        for (Map<String,Object> map:list){
            if (null!=map.get("status")){
                if ("0".equals(map.get("status").toString())||"2".equals(map.get("status").toString())){
                    finish += Integer.parseInt(map.get("total").toString());
                }else {
                    unfinish +=Integer.parseInt(map.get("total").toString());
                }
                all += Integer.parseInt(map.get("total").toString());
            }
        }
        emeWarn.put("all",all);
        emeWarn.put("unfinish",unfinish);
        emeWarn.put("finish",finish);
        //获取最近一次工单
        sql = " select o.id,p.id patient,p.name,p.idcard,p.residential_area,'20' OrderType,'1' type,o.serve_address,'紧急呼叫' serve_desc, " +
                " o.status,DATE_FORMAT(o.create_time,'%Y-%m-%d %H:%i:%S') create_time from base_emergency_assistance_order o INNER JOIN base_patient p on p.id = o.patient " +
                " where o.patient='"+patient+"' and o.`status` <>-1 " +
                " UNION " +
                "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 o.patient='"+patient+"' and o.`status` <>-1 " +
                "ORDER BY create_time desc limit 1 ";
        list = jdbcTemplate.queryForList(sql);
        if (list.size()>0){
            emeWarn.put("lastOlder",list.get(0));
        }
        all=0;
        unfinish=0;
        finish=0;
        sql = " select count(id) as total,`status` from base_life_care_order where patient='"+patient+"' and `status`<>-1 and `status`<>0 " +
                "GROUP BY `status` ";
        list = jdbcTemplate.queryForList(sql);
        for (Map<String,Object> map:list){
            if ("2".equals(map.get("status").toString())){
                finish += Integer.parseInt(map.get("total").toString());
            }else {
                unfinish +=Integer.parseInt(map.get("total").toString());
            }
            all += Integer.parseInt(map.get("total").toString());
        }
        olderService.put("all",all);
        olderService.put("unfinish",unfinish);
        olderService.put("finish",finish);
        //最近一次记录
        sql = " select o.id,p.name,p.id as patient,o.status,o.hospital_name hospitalName,p.idcard,DATE_FORMAT(o.create_time,'%Y-%m-%d %H:%i:%S') create_time,GROUP_CONCAT(DISTINCT fed.name SEPARATOR '、' ) serveItems " +
                " from base_life_care_order o INNER JOIN base_patient p on o.patient = p.id INNER JOIN base_life_care_fee_detail fed on o.id = fed.order_id " +
                " and fed.status<>3 where o.patient='"+patient+"' and o.`status`<>-1 and o.`status`<>0  " +
                "GROUP BY o.id ORDER BY create_time desc limit 1; ";
        list = jdbcTemplate.queryForList(sql);
        if (list.size()>0){
            olderService.put("lastOlder",list.get(0));
        }
        result.put("emeWarn",emeWarn);
        result.put("olderService",olderService);
        return result;
    }
    /**
     * 大屏获取老人健康管理
     */
    public JSONObject getPatientHealthStatistic(String patient){
        JSONObject result = new JSONObject();
        JSONObject healthIndex = new JSONObject();
        healthIndex.put("lastHealthIndex",null);
        List<Map<String,Object>> list = new ArrayList<>();
        String sql = " select count(id) total,`status` from wlyy_patient_health_index where user='"+patient+"' and type in (1,2) GROUP BY `status` ";
        list = jdbcTemplate.queryForList(sql);
        Long total = 0l;
        Long warnCount = 0l;
        for (Map<String,Object> map:list){
            if ("1".equals(map.get("status"))){
                warnCount += Long.parseLong(map.get("status").toString());
            }
            total+= Long.parseLong( map.get("total").toString());
        }
        healthIndex.put("all",total);
        healthIndex.put("warn",warnCount);
        sql = " select *,CAST(DATE_FORMAT(record_date,'%Y-%m-%d %H:%i:%S') as char) record_date, " +
                " CAST(DATE_FORMAT(sort_date,'%Y-%m-%d %H:%i:%S') as char) sort_date, " +
                " CAST(DATE_FORMAT(czrq,'%Y-%m-%d %H:%i:%S') as char) czrq from wlyy_patient_health_index where user='"+patient+"' and type in (1) ORDER BY sort_date DESC LIMIT 1 ";
        list = jdbcTemplate.queryForList(sql);
        if (list.size()>0){
            healthIndex.put("lastXTHealthIndex",list.get(0));
        }else{
            healthIndex.put("lastXTHealthIndex",null);
        }
        sql = " select *,CAST(DATE_FORMAT(record_date,'%Y-%m-%d %H:%i:%S') as char) record_date, " +
                " CAST(DATE_FORMAT(sort_date,'%Y-%m-%d %H:%i:%S') as char) sort_date, " +
                " CAST(DATE_FORMAT(czrq,'%Y-%m-%d %H:%i:%S') as char) czrq from wlyy_patient_health_index where user='"+patient+"' and type in (2) ORDER BY sort_date DESC LIMIT 1 ";
        list = jdbcTemplate.queryForList(sql);
        if (list.size()>0){
            healthIndex.put("lastXYHealthIndex",list.get(0));
        }else{
            healthIndex.put("lastXYHealthIndex",null);
        }
        result.put("healthIndex",healthIndex);
        return  result;
    }
    /**
     * 老人--获取签约服务
     * @param patient
@ -514,22 +644,23 @@ public class PatientInfoPlatFormService {
        String filter=" ";
        String sqltmp = "SELECT GROUP_CONCAT(dict_code) orgCodes from wlyy_hospital_sys_dict WHERE dict_name = 'jkzl_child' or dict_name = 'jkzl_older' ";
        List<Map<String,Object>> listtmp =  jdbcTemplate.queryForList(sqltmp);
        if(listtmp.size()>0){
        if(listtmp.size()>0&&StringUtils.isBlank(patient)){
            String orgCodes = String.valueOf(listtmp.get(0).get("orgCodes"));
            orgCodes = orgCodes.replaceAll(",","','");
            filter = " and ord.patient not in ('"+orgCodes+"') ";
        }
        String sqlCount = " select count(ord.id) from base_emergency_assistance_order ord INNER JOIN base_patient p on ord.patient = p.id where 1=1 ";
        String sql = " select '20' as OrderType,p.archive_type archiveType,p.residential_area residentialArea,ord.id,ord.patient, " +
                "p.name,'紧急呼叫' as serve_desc,DATE_FORMAT(ord.create_time,'%Y-%m-%d %H:%i:%S') create_time,ord.`status`," +
                " case p.sex when 1 then '男' when 2 then '女' else p.sex end as sex,TIMESTAMPDIFF(YEAR,p.birthday,now()) as age \n" +
                "from base_emergency_assistance_order ord INNER JOIN base_patient p on ord.patient = p.id " ;
                "from base_emergency_assistance_order ord INNER JOIN base_patient p on ord.patient = p.id and p.del=1 where 1=1 " ;
        if (StringUtils.isNotBlank(patient)){
            sql +=" and ord.patient='"+patient+"' ";
            filter +=" and ord.patient='"+patient+"' ";
        }
        sql +=  filter + "  order by create_time desc ";
        String countSql = "select count(id) from ("+sql+")A ";
        long count = jdbcTemplate.queryForObject(countSql,long.class);
        sql +=  filter + "  order by create_time desc";
        sqlCount  +=filter;
        long count = jdbcTemplate.queryForObject(sqlCount,long.class);
        sql +=" limit "+page*pageSize+","+pageSize;
        List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
        return PageEnvelop.getSuccessListWithPage("查询成功",list,page,pageSize,count);
@ -550,11 +681,326 @@ public class PatientInfoPlatFormService {
        String sql = " SELECT idx.id,idx.user,idx.`name`,p.archive_type archiveType,p.residential_area residentialArea,'健康监测' as serve_desc, " +
                "idx.czrq,value1,value2,value3,value4,value5,value6,value7,type FROM wlyy_patient_health_index idx " +
                " INNER JOIN base_patient p on idx.user = p.id and p.del=1\n" +
                " WHERE idx.del = 1 AND idx.type < 3 "+filter+" ORDER BY idx.czrq ";
                " WHERE idx.del = 1 AND idx.type < 3 "+filter+" ORDER BY idx.czrq desc ";
        String countSql = "select count(id) from ("+sql+")A ";
        long count = jdbcTemplate.queryForObject(countSql,long.class);
        sql +=" limit "+page*pageSize+","+pageSize;
        List<Map<String,Object>> list = jdbcTemplate.queryForList(sql);
        return PageEnvelop.getSuccessListWithPage("查询成功",list,page,pageSize,count);
    }
    /**
     *获取设备详情
     */
    public List<Map<String,Object>> getPatientDeviceInfoWithDetail(String patient,String deviceSn){
        List<Map<String,Object>>  list = new ArrayList<>();
        String sql = "select dd.photo,pd.device_sn,dd.brands,dd.category_code,dd.model,pd.device_name,date_format(pd.czrq,'%Y-%m-%d %H:%i:%S' ) deviceTime,dd.device_type as deviceType " +
                "from dm_device dd INNER JOIN wlyy_patient_device pd on dd.category_code = pd.category_code INNER JOIN wlyy_devices wd on dd.model = wd.device_model and pd.device_sn = wd.device_code \n" +
                "where 1=1 and  pd.del=0 ";
        if (org.apache.commons.lang3.StringUtils.isNotBlank(patient)) {
            sql += " and  pd.`user`='" + patient + "' ";
        }
        if (org.apache.commons.lang3.StringUtils.isNotBlank(deviceSn)){
            sql += " and pd.device_sn = '"+deviceSn+"' ";
        }
        sql+=" order by dd.device_type desc,pd.czrq asc ";
        list =  jdbcTemplate.queryForList(sql);
        for (Map<String,Object> tmp :list){
            String category_code = tmp.get("category_code").toString();
            String deviceSN = tmp.get("device_sn").toString();
            Map<String,Object> detailInfo =  getDeviceIndexAndOrder(category_code,deviceSN,patient);
            tmp.put("detailInfo",detailInfo);
        }
        return list;
    }
    /**
     * 获取设备关联数据
     * 手表4:电量、佩戴状态、是否预警、在线状态
     * 报警器7:电量  是否报警、在线状态
     * 床带13:是否压床、是否预警、心率和呼吸频率、在线状态
     * 监控12:是否预警、在线状态、播放地址
     * 烟雾15:浓度、是否预警、在线状态 、最近一次温度
     * 燃气14 :浓度、是否预警、在线状态
     * 拐杖16:是否预警、在线状态、定位
     * 血压2:最近一次收缩压,舒张压、在线状态
     * 血糖1:最近一次血糖、在线状态
     */
    public Map<String,Object> getDeviceIndexAndOrder(String category_code,String deviceSn,String patient){
        Map<String,Object> detailInfo = new HashMap<>();
        String sql = " select IFNULL(contact_status,0) contact_status from wlyy_devices where device_code='"+deviceSn+"' ";
        List<String> contact_status = jdbcTemplate.queryForList(sql,String.class);
        detailInfo.put("contact_status",0);
        if (contact_status.size()>0){
            detailInfo.put("contact_status",contact_status.get(0));
        }
        switch (category_code){
            case "1"://血糖 最近一次血糖、在线状态
                sql = " select *,CAST(DATE_FORMAT(record_date,'%Y-%m-%d %H:%i:%S') as char) record_date,  " +
                        " CAST(DATE_FORMAT(sort_date,'%Y-%m-%d %H:%i:%S') as char) sort_date,  " +
                        " CAST(DATE_FORMAT(czrq,'%Y-%m-%d %H:%i:%S') as char) czrq from wlyy_patient_health_index " +
                        " where device_sn='"+deviceSn+"' and del=1 ORDER BY sort_date DESC LIMIT 1  ";
                List<Map<String,Object>> sqlResult = jdbcTemplate.queryForList(sql);
                if (sqlResult.size()>0){
                    detailInfo.put("healthIndex",sqlResult.get(0));
                }else {
                    detailInfo.put("healthIndex",null);
                }
                break;
            case "2"://血压 最近一次收缩压,舒张压、在线状态
                sql = " select *,CAST(DATE_FORMAT(record_date,'%Y-%m-%d %H:%i:%S') as char) record_date,  " +
                        " CAST(DATE_FORMAT(sort_date,'%Y-%m-%d %H:%i:%S') as char) sort_date,  " +
                        " CAST(DATE_FORMAT(czrq,'%Y-%m-%d %H:%i:%S') as char) czrq from wlyy_patient_health_index " +
                        " where device_sn='"+deviceSn+"' and del=1 ORDER BY sort_date DESC LIMIT 1  ";
                sqlResult = jdbcTemplate.queryForList(sql);
                if (sqlResult.size()>0){
                    detailInfo.put("healthIndex",sqlResult.get(0));
                }else {
                    detailInfo.put("healthIndex",null);
                }
                break;
            case "4"://手表 电量、佩戴状态、是否预警、在线状态
                sql = "  select o.id,p.id patient,p.name,p.idcard,p.residential_area,'20' OrderType,'1' type,o.serve_address,'紧急呼叫' serve_desc,  " +
                        " o.status,DATE_FORMAT(o.create_time,'%Y-%m-%d %H:%i:%S') create_time from base_emergency_assistance_order o " +
                        " INNER JOIN base_patient p on p.id = o.patient where device_sn='"+deviceSn+"' and o.status=1 " +
                        " UNION " +
                        " 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 " +
                        "ORDER BY create_time desc limit 1 ";
                sqlResult = jdbcTemplate.queryForList(sql);
                if (sqlResult.size()>0){
                    detailInfo.put("warnStatus",true);
                    detailInfo.put("orderInfo",sqlResult.get(0));
                }else {
                    detailInfo.put("warnStatus",false);
                }
                JSONObject response = patientDeviceService.getAqgDeviceInfo2(deviceSn);
                //手表佩戴状态
                if (null!=response){
                    if (response.containsKey("wear_flag") && response.get("wear_flag") != null) {
                        detailInfo.put("wear_flag", response.get("wear_flag"));
                        detailInfo.put("wear_flagName", 1==response.getInteger("wear_flag")?"未佩戴":"已佩戴");
                    }
                    //电量
                    if (response.containsKey("remaining_power") && response.get("remaining_power") != null) {
                        detailInfo.put("remaining_power", response.get("remaining_power"));
                    }
                    //在线状态实时获取
                    if (!response.getBoolean("online")) {//设备在线状态
                        detailInfo.put("contact_status",0);
                    } else {
                        detailInfo.put("contact_status",1);
                    }
                }else {
                    detailInfo.put("wear_flag",null);
                    detailInfo.put("wear_flagName", null);
                    detailInfo.put("remaining_power",null);
                }
                sql = "select *,CAST(DATE_FORMAT(create_time,'%Y-%m-%d %H:%i:%S') as char) create_time from base_patient_step where 1=1  and device_sn='"+deviceSn+"' order by create_time desc limit 1";
                sqlResult = jdbcTemplate.queryForList(sql);
                if (sqlResult.size()>0) {
                    detailInfo.put("steps",sqlResult.get(0));
                }else {
                    detailInfo.put("steps","无步数数据");
                }
                sql = " select *,CAST(DATE_FORMAT(record_date,'%Y-%m-%d %H:%i:%S') as char) record_date,  " +
                        " CAST(DATE_FORMAT(sort_date,'%Y-%m-%d %H:%i:%S') as char) sort_date,  " +
                        " CAST(DATE_FORMAT(czrq,'%Y-%m-%d %H:%i:%S') as char) czrq from wlyy_patient_health_index " +
                        " where type=5 and device_sn='"+deviceSn+"' and del=1 ORDER BY sort_date DESC LIMIT 1  ";
                sqlResult = jdbcTemplate.queryForList(sql);
                if (sqlResult.size()>0){
                    detailInfo.put("heartRate",sqlResult.get(0));
                }else {
                    detailInfo.put("heartRate","无心率数据");
                }
                //获取手表定位
                JSONObject dw = patientDeviceService.getAqgDeviceInfo2(deviceSn);
                if (dw != null) {
                    //定位信息
                    if (dw.containsKey("last_location") && dw.get("last_location") != null) {
                        JSONObject locationTmp = dw.getJSONObject("last_location");
                        Double lon = locationTmp.getJSONArray("coordinates").getDouble(0);
                        Double lat = locationTmp.getJSONArray("coordinates").getDouble(1);
                        JSONObject tmp = gpsUtil.gcj02_To_Bd09(lat, lon);
                        tmp.put("city", dw.getString("last_city"));
                        tmp.put("province", dw.getString("last_province"));
                        tmp.put("address", dw.getString("last_address"));
                        detailInfo.put("location", tmp);
                    }
                }
                break;
            case "7"://报警器 电量  是否报警、在线状态
                sql = "  select o.id,p.id patient,p.name,p.idcard,p.residential_area,'20' OrderType,'1' type,o.serve_address,'紧急呼叫' serve_desc,  " +
                        " o.status,DATE_FORMAT(o.create_time,'%Y-%m-%d %H:%i:%S') create_time from base_emergency_assistance_order o " +
                        " INNER JOIN base_patient p on p.id = o.patient where device_sn='"+deviceSn+"' and o.status=1 ORDER BY create_time desc limit 1 ";
                sqlResult = jdbcTemplate.queryForList(sql);
                if (sqlResult.size()>0){
                    detailInfo.put("warnStatus",true);
                    detailInfo.put("orderInfo",sqlResult.get(0));
                }else {
                    detailInfo.put("warnStatus",false);
                }
                response = patientDeviceService.getAqgDeviceInfo2(deviceSn);
                if (null!=response){
                    //电量
                    if (response.containsKey("remaining_power") && response.get("remaining_power") != null) {
                        detailInfo.put("remaining_power", response.get("remaining_power"));
                    }
                    //在线状态实时获取
                    if (!response.getBoolean("online")) {//设备在线状态
                        detailInfo.put("contact_status",0);
                    } else {
                        detailInfo.put("contact_status",1);
                    }
                }
                break;
            case "12"://监控
                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 " +
                     "ORDER BY create_time desc limit 1 ";
                sqlResult = jdbcTemplate.queryForList(sql);
                if (sqlResult.size()>0){
                    detailInfo.put("warnStatus",true);
                    detailInfo.put("orderInfo",sqlResult.get(0));
                }else {
                    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));
                }
                break;
            case "13"://床带 是否压床、 心率和呼吸频率、在线状态
                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 " +
                        "ORDER BY create_time desc limit 1 ";
                sqlResult = jdbcTemplate.queryForList(sql);
                if (sqlResult.size()>0){
                    detailInfo.put("warnStatus",true);
                    detailInfo.put("orderInfo",sqlResult.get(0));
                }else {
                    detailInfo.put("warnStatus",false);
                }
                JSONObject deviceInfo = patientDeviceService.getSleepDeviceInfo(deviceSn);
                if (null!=deviceInfo){
                    if (deviceInfo.getBooleanValue("success")) {
                        com.alibaba.fastjson.JSONArray objInfo = deviceInfo.getJSONArray("objs");
                        if (objInfo.size() > 0) {
                            response = objInfo.getJSONObject(0);
                            if (!response.getBoolean("online")) {//设备在线状态
                                detailInfo.put("contact_status",0);
                            } else {
                                detailInfo.put("contact_status",1);
                            }
                            if (response.getBooleanValue("onbed")) {//当前在床状态
                                detailInfo.put("bedStatus", 1);
                                detailInfo.put("heartRate", response.getString("heartrate"));
                                detailInfo.put("breath", response.getString("breathrate"));
                            } else {
                                detailInfo.put("bedStatus", 0);
                                detailInfo.put("heartRate", null);
                                detailInfo.put("breath", null);
                            }
                        }
                    }
                }
                break;
            case "14"://燃气
                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 " +
                        "ORDER BY create_time desc limit 1 ";
                sqlResult = jdbcTemplate.queryForList(sql);
                if (sqlResult.size()>0){
                    detailInfo.put("warnStatus",true);
                    detailInfo.put("orderInfo",sqlResult.get(0));
                }else {
                    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 ";
                sqlResult = jdbcTemplate.queryForList(sql);
                if (sqlResult.size()>0){
                    detailInfo.putAll(sqlResult.get(0));
                }else {
                    detailInfo.put("value",null);
                    detailInfo.put("record_time",null);
                }
                break;
            case "15"://烟感
                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 " +
                        "ORDER BY create_time desc limit 1 ";
                sqlResult = jdbcTemplate.queryForList(sql);
                if (sqlResult.size()>0){
                    detailInfo.put("warnStatus",true);
                    detailInfo.put("orderInfo",sqlResult.get(0));
                }else {
                    detailInfo.put("warnStatus",false);
                }
                //获取最新一次烟雾浓度
                sql = " select value,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("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 ";
                sqlResult = jdbcTemplate.queryForList(sql);
                if (sqlResult.size()>0){
                    detailInfo.putAll(sqlResult.get(0));
                }
                else {
                    detailInfo.put("temperature_value",null);
                    detailInfo.put("temperature_value_record_time",null);
                }
                break;
            case "16"://拐杖 是否预警
                sql = "  select o.id,p.id patient,p.name,p.idcard,p.residential_area,'20' OrderType,'1' type,o.serve_address,'紧急呼叫' serve_desc,  " +
                        " o.status,DATE_FORMAT(o.create_time,'%Y-%m-%d %H:%i:%S') create_time from base_emergency_assistance_order o " +
                        " INNER JOIN base_patient p on p.id = o.patient where device_sn='"+deviceSn+"' and o.status=1 " +
                        " UNION " +
                        " 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  " +
                        "ORDER BY create_time desc limit 1 ";
                sqlResult = jdbcTemplate.queryForList(sql);
                if (sqlResult.size()>0){
                    detailInfo.put("warnStatus",true);
                    detailInfo.put("orderInfo",sqlResult.get(0));
                }else {
                    detailInfo.put("warnStatus",false);
                }
                sql = "SELECT *,CAST(DATE_FORMAT(create_time,'%Y-%m-%d %H:%i:%S') as char) create_time FROM base_yxdevice_index  WHERE sn = '" + deviceSn + "' AND lon != 0 AND lat != 0 ORDER BY create_time DESC limit 1";
                sqlResult = jdbcTemplate.queryForList(sql);
                if (sqlResult.size()>0){
                    detailInfo.put("newlonlat",sqlResult.get(0));
                    String address = LatitudeUtils.getLocationAddress(sqlResult.get(0).get("lat").toString(), sqlResult.get(0).get("lon").toString());
//                    JSONObject dz =  gpsUtil.gcj02_To_Bd09(Double.parseDouble(sqlResult.get(0).get("lat").toString()),Double.parseDouble(sqlResult.get(0).get("lon").toString()));
                    detailInfo.put("location", address);
                }else {
                    detailInfo.put("newlonlat",null);
                    detailInfo.put("location", null);
                }
                break;
        }
        return detailInfo;
    }
}

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

@ -221,4 +221,18 @@ public class CommonUtil {
        return filesize + "%";
    }
    public double getRangeDouble(Integer first, Integer second) {
        if (second == 0 && first > 0) {
            //如果分母为0 分子不为0 返回100%
            return 100;
        } else if (second == 0 && first == 0) {
            //如果分母为0 分子为0 返回0%
            return 0;
        }
        double result =  (first * 100.0) / second;
        DecimalFormat df = new DecimalFormat("0.00");//格式化小数,不足的补0
        String filesize = df.format(result);
        return Double.parseDouble(filesize);
    }
}

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

@ -0,0 +1,137 @@
package com.yihu.jw.care.util;
import com.yihu.jw.care.dao.device.BasePatientMonitorDataDao;
import com.yihu.jw.care.dao.device.DeviceDataPushLogDao;
import com.yihu.jw.care.dao.device.DeviceDetailDao;
import com.yihu.jw.care.dao.device.PatientDeviceDao;
import com.yihu.jw.entity.base.patient.BasePatientDO;
import com.yihu.jw.entity.care.device.BasePatientMonitorDataDO;
import com.yihu.jw.entity.care.device.DeviceDataPushLog;
import com.yihu.jw.entity.care.device.DeviceDetail;
import com.yihu.jw.entity.care.device.DevicePatientDevice;
import com.yihu.jw.hospital.message.dao.SystemMessageDao;
import com.yihu.jw.patient.dao.BasePatientDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
 * Created by Bing on 2021/9/2.
 * 设备数据推送日志保存
 */
@Component
public class DeviceDataPushLogUtil {
    @Autowired
    private DeviceDataPushLogDao deviceDataPushLogDao;
    @Autowired
    private PatientDeviceDao patientDeviceDao;
    @Autowired
    private BasePatientDao patientDao;
    @Autowired
    private DeviceLostMessageUtil deviceLostMessageUtil;
    @Autowired
    private DeviceDetailDao deviceDetailDao;
    @Autowired
    private SystemMessageDao systemMessageDao;
    @Autowired
    private BasePatientMonitorDataDao basePatientMonitorDataDao;
    @Autowired
    private JdbcTemplate jdbcTemplate;
    public void savePushLog(String sn,String data,String apiName){
        try {
            DeviceDataPushLog pushLog = new DeviceDataPushLog();
            pushLog.setDeviceSn(sn);
            pushLog.setData(data);
            pushLog.setApiName(apiName);
            pushLog.setCreateTime(new Date());
            List<DevicePatientDevice> devices= patientDeviceDao.findByDeviceSn(sn);
            if (devices.size()>0){
                DevicePatientDevice tmp = devices.get(0);
                BasePatientDO patientDO = patientDao.findById(tmp.getUser());
                if (null!=patientDO){
                    pushLog.setPatient(tmp.getUser());
                    pushLog.setPatientName(patientDO.getName());
                }
                pushLog.setDeviceName(tmp.getDeviceName());
                pushLog.setDeviceCategory(tmp.getCategoryCode());
            }
            deviceDataPushLogDao.save(pushLog);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    /**
     * 更新在线状态 及次数
     * @param sn
     * @param status
     * @param flag 状态 true 异常 false 正常 null其他
     */
    @Transactional
    public void updContactStatus(String sn,Integer status,Boolean flag){
        DeviceDetail deviceDetail = deviceDetailDao.findBySn(sn);
        if(deviceDetail!=null){
            deviceDetail.setContactStatus(status);
            if(0==status){
                List<String> sns =  new ArrayList<String>();
                sns.add(sn);
                deviceLostMessageUtil.deviceLostMessage(sns);
            }
            else if(1==status){
                //设备在线清除原有的离线消息
                List<String> sns = new ArrayList<String>();
                sns.add(sn);
                systemMessageDao.delMessageByRelationCode(sns);
            }
            deviceDetail.setContactStatusTime(new Date());
            if(deviceDetail.getCollectNum()==null){
                deviceDetail.setCollectNum(0L);
            }
            if(deviceDetail.getAbnormalNum()==null){
                deviceDetail.setAbnormalNum(0L);
            }
            if(flag!=null){
                deviceDetail.setCollectNum(deviceDetail.getCollectNum()+1L);
                if(flag){
                    deviceDetail.setAbnormalNum(deviceDetail.getAbnormalNum()+1L);
                }
            }
            deviceDetailDao.save(deviceDetail);
        }
    }
    /**
     */
    @Async
    public void savePatientMonitorData(String deviceSn,Integer type,String deviceInfo,String relationCode){
        BasePatientMonitorDataDO basePatientMonitorDataDO = new BasePatientMonitorDataDO();
        String sql = " select `user`,category_code from wlyy_patient_device where device_sn='"+deviceSn+"' and del=0 ";
        List<Map<String,Object>> patients = jdbcTemplate.queryForList(sql);
        if (patients.size()>0){
            String patient = patients.get(0).get("user").toString();
            String categoryCode = patients.get(0).get("category_code").toString();
            BasePatientDO patientDO = patientDao.findById(patient);
            basePatientMonitorDataDO.setPatient(patientDO.getId());
            basePatientMonitorDataDO.setPatientName(patientDO.getName());
            basePatientMonitorDataDO.setCategoryCode(categoryCode);
            basePatientMonitorDataDO.setDeviceSn(deviceSn);
            basePatientMonitorDataDO.setType(type);
            basePatientMonitorDataDO.setDeviceInfo(deviceInfo);
            basePatientMonitorDataDO.setRelationCode(relationCode);
            basePatientMonitorDataDO.setCreateTime(new Date());
            basePatientMonitorDataDao.save(basePatientMonitorDataDO);
        }
    }
}

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

@ -0,0 +1,116 @@
package com.yihu.jw.care.util;
import com.yihu.jw.care.dao.device.PatientDeviceDao;
import com.yihu.jw.entity.base.patient.BasePatientDO;
import com.yihu.jw.entity.care.device.DevicePatientDevice;
import com.yihu.jw.entity.hospital.message.SystemMessageDO;
import com.yihu.jw.hospital.message.dao.SystemMessageDao;
import com.yihu.jw.patient.dao.BasePatientDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
 * Created by Bing on 2021/9/13.
 */
@Component
public class DeviceLostMessageUtil {
    @Autowired
    private SystemMessageDao systemMessageDao;
    @Autowired
    private PatientDeviceDao patientDeviceDao;
    @Autowired
    private JdbcTemplate jdbcTemplate;
    @Autowired
    private BasePatientDao patientDao;
    /**
     * 设备离线通知
     * @param devices
     */
    public void deviceLostMessage(List<String> devices){
        List<SystemMessageDO> messageDOS = new ArrayList<>();
        for (String id:devices){
            List<SystemMessageDO> sendMessageBefore = systemMessageDao.queryByRelationCodeAndTypeIn(id,new String[]{"43"});
            if (sendMessageBefore.size()>0){//删除之前的离线消息
                systemMessageDao.delete(sendMessageBefore);
            }
            List<DevicePatientDevice> pds =  patientDeviceDao.findByDeviceSn(id);
            if (pds.size()>0){
                DevicePatientDevice deviceDO = pds.get(0);
                String sql = "SELECT DISTINCT d.id,d.name from base_service_package_sign_record sr,base_service_package_record r,base_team_member m,base_doctor d  " +
                        "               WHERE sr.status=1 and m.team_code = r.team_code and sr.id=r.sign_id and m.doctor_code = d.id " +
                        "               and m.del = '1' and sr.patient = '"+deviceDO.getUser()+"' " ;
                List<Map<String,Object>> doctors = jdbcTemplate.queryForList(sql);
                // 家属
                sql = " select  t2.id,t2.name from  base_patient_family_member t1,  base_patient t2 where  " +
                        "t2.id in (select family_member from base_patient_family_member where patient = '"+deviceDO.getUser()+"' )  " +
                        " and t1.patient = '"+deviceDO.getUser()+"'  and t1.family_member = t2.id  " +
                        " and t2.archive_type=3 GROUP BY t2.id " ;
                List<Map<String,Object>> relatives = jdbcTemplate.queryForList(sql);
                doctors.addAll(relatives);
                String deviceName="";
                for (Map<String,Object> docTmp:doctors){
                    switch (deviceDO.getCategoryCode()){
                        case "1":
                            deviceName="血糖仪离线";
                            break;
                        case "2":
                            deviceName="血压计离线";
                            break;
                        case "4":
                            deviceName="智能手表离线";
                            break;
                        case "7":
                            deviceName="居家安全报警器离线";
                            break;
                        case "12":
                            deviceName="监控器离线";
                            break;
                        case "13":
                            deviceName="睡眠带离线";
                            break;
                        case "14":
                            deviceName="气感报警器离线";
                            break;
                        case "15":
                            deviceName="烟感报警器离线";
                            break;
                        case "16":
                            deviceName="智能拐杖离线";
                            break;
                        case "17":
                            deviceName="随身WiFi离线";
                            break;
                    }
                    BasePatientDO patientDO = patientDao.findById(deviceDO.getUser());
                    SystemMessageDO messageDO = new SystemMessageDO();
                    messageDO.setTitle("设备离线通知");
                    messageDO.setType("43");
                    messageDO.setIsRead("0");
                    messageDO.setSender(deviceDO.getUser());
                    messageDO.setSenderName(patientDO.getName());
                    messageDO.setRelationCode(id);
                    messageDO.setReceiver(docTmp.get("id").toString());
                    messageDO.setReceiverName(docTmp.get("name").toString());
                    messageDO.setOver("1");
                    messageDO.setData(deviceName);
                    messageDO.setDel("1");
                    messageDO.setCreateTime(new Date());
                    messageDO.setSenderPhoto(patientDO.getPhoto());
                    messageDOS.add(messageDO);
                }
            }
        }
        if (messageDOS.size()>0){
            systemMessageDao.save(messageDOS);
        }
    }
}

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

@ -0,0 +1,249 @@
package com.yihu.jw.care.util;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.xxpt.gateway.shared.client.http.ExecutableClient;
import com.alibaba.xxpt.gateway.shared.client.http.GetClient;
import com.alibaba.xxpt.gateway.shared.client.http.PostClient;
import com.yihu.jw.doctor.dao.BaseDoctorDao;
import com.yihu.jw.entity.base.doctor.BaseDoctorDO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.util.ArrayList;
import java.util.List;
/**
 * 阿里巴巴钉钉工具类
 * Created by yeshijie on 2022/3/23.
 */
@Component
public class DingdingUtil {
    private static final Logger logger = LoggerFactory.getLogger(DingdingUtil.class);
    //测试-专有钉钉
//    private static final String AppKey = "ceshiyzh-jtP6zf3cfZEqs8UmmYNra";
//    private static final String AppSecret = "NbbH9viHPDNTPTuQPz2Y0Y06F88krYWTTPLv0h01";
    //正式-浙政钉
    private static final String zhdAppKey = "zhyzh-r085NCVALJYmgcDc7oBVFRZj";
    private static final String zhdAppSecret = "fH8ZVDGAmJaeF7ujwAZgCi40w0U3im9J801vBaSF";
    private static final String zhdDomainName = "openplatform.dg-work.cn";
    private static final String zhdtenantId = "50495309";
    //正式-专有钉钉
    private static final String AppKey = "zhyzh-67H0tpyZr7m8crdJsxI3YVZb";
    private static final String AppSecret = "xK0VBIfeUj0gBm0Gp55180Qk6i866230Qch1T96v";
    private static final String DomainName = "openplatform-pro.ding.zj.gov.cn";
    private static final String tenantId = "196729";
    private static final String gettokenApi = "/gettoken.json";
    private static final String dingtalk_app_user = "/rpc/oauth2/dingtalk_app_user.json";
    private static final String get_by_mobiles = "/mozi/employee/get_by_mobiles";
    private static final String getuserinfo_bycode = "/rpc/oauth2/getuserinfo_bycode.json";
    private static final String sendMsg = "/chat/sendMsg";
    //单聊默认发送者id
    private static final String p2pSenderId = "78728186";
//    private static final String p2pSenderId = "821606";
    public static final String picMediaId = "$iwHSAADGgQoAC9EkWgKsb2N0ZXQtc3RyZWFtAwAEAAUABrzrLoqjhIdIKXPi5GCsroJXXzE3ZmI0OGFiNWJhBwAIAAmhMA";
    //executableClient要单例,并且使用前要初始化,只需要初始化一次
    private static ExecutableClient executableClient = null;
    @Autowired
    private BaseDoctorDao doctorDao;
    @Autowired
    private JdbcTemplate jdbcTemplate;
    /**
     * 测试浙政钉
     */
    public void testZzd() {
//        ExecutableClient executableClient = ExecutableClient.getInstance();
//        executableClient.setAccessKey(zhdAppKey);
//        executableClient.setSecretKey(zhdAppSecret);
//        executableClient.setDomainName(zhdDomainName);
//        executableClient.setProtocal("https");
//        executableClient.init();
//        logger.info("get_by_mobiles========="+zhdDomainName);
//        //调用API
//        PostClient postClient = executableClient.newPostClient(get_by_mobiles);
//        //设置参数
//        postClient.addParameter("areaCode", "86");
//        //手机号码列表,逗号分隔,最多50个
//        postClient.addParameter("mobiles", "15659713528");
//        postClient.addParameter("tenantId", zhdtenantId);
//        postClient.addParameter("namespace", "local");
//        //Call API
//        String apiResult2 = postClient.post();
//        logger.info("get_by_mobiles========="+apiResult2);
    }
    @PostConstruct
    public void clientInit(){
        if(executableClient == null){
            synchronized(ExecutableClient.class){
                if(executableClient == null){
                    executableClient = ExecutableClient.getInstance();
                    executableClient.setAccessKey(AppKey);
                    executableClient.setSecretKey(AppSecret);
                    executableClient.setDomainName(DomainName);
                    executableClient.setProtocal("https");
                    executableClient.init();
                }
            }
        }
    }
    /**
     * 获取AccessToken
     * @return
     */
    public String getAccessToken(){
        GetClient getClient = executableClient.newGetClient(gettokenApi);
        //设置参数
        getClient.addParameter("appkey", AppKey);
        getClient.addParameter("appsecret", AppSecret);
        //调用API
        String apiResult = getClient.get();
        logger.info(apiResult);
        //{"success":true,"content":{"data":{"expiresIn":7200,"accessToken":"app_4197121c698246cea9ec660902324edd"},"success":true,"requestId":"276077ca16480212814976877e76c6","responseMessage":"OK","responseCode":"0","bizErrorCode":"0"},"bizErrorCode":"0"}
        JSONObject jsonObject = JSON.parseObject(apiResult);
        if(jsonObject.getBoolean("success")){
            JSONObject content = jsonObject.getJSONObject("content");
            if(content.getBoolean("success")){
                return content.getJSONObject("data").getString("accessToken");
            }
        }
        return null;
    }
    /**
     * 获取用户信息
     * @return
     */
    public JSONObject dingtalk_app_user(String authCode){
        //调用API
        PostClient postClient = executableClient.newPostClient(dingtalk_app_user);
        //设置参数
        postClient.addParameter("access_token", getAccessToken());
        postClient.addParameter("auth_code", authCode);
        //Call API
        String apiResult = postClient.post();
        logger.info(apiResult);
        //{"success":true,"content":{"success":false,"responseMessage":"code失效或不存在","responseCode":"240111","bizErrorCode":"MBS-B001-02-16-240111"}}
        return JSON.parseObject(apiResult);
    }
    /**
     * 根据手机号获取员工账户id
     * @param mobiles
     * @return
     */
    public JSONArray get_by_mobiles(String mobiles){
        //调用API
        PostClient postClient = executableClient.newPostClient(get_by_mobiles);
        //设置参数
        postClient.addParameter("areaCode", "86");
        //手机号码列表,逗号分隔,最多50个
        postClient.addParameter("mobiles", mobiles);
        postClient.addParameter("tenantId", tenantId);
        postClient.addParameter("namespace", "local");
        //Call API
        String apiResult = postClient.post();
        logger.info(apiResult);
        //{"success":true,"content":{"data":[{"accountId":821685,"mobile":"15859634562","employeeCode":"GE_f27a7231e19f4b31b8f11d2859d1be07","status":0},{"accountId":821606,"mobile":"13559485270","employeeCode":"GE_10933a0f8bc949149143163cba5bb81f","status":0}],"success":true,"requestId":"2760828316480239373806874ed97b","responseMessage":"OK","responseCode":"0","bizErrorCode":"0"},"bizErrorCode":"0"}
        JSONObject jsonObject = JSON.parseObject(apiResult);
        if(jsonObject.getBoolean("success")){
            JSONObject content = jsonObject.getJSONObject("content");
            if(content.getBoolean("success")){
                return content.getJSONArray("data");
            }
        }
        return null;
    }
    /**
     * 初始化更新钉钉账户id
     */
    public void yktDoctorIdInit(){
        List<BaseDoctorDO> doctorDOList = doctorDao.findByYktDoctorIdNull();
        List<BaseDoctorDO> doctorDOs = new ArrayList<>();
        for (BaseDoctorDO doctorDO:doctorDOList){
            JSONArray jsonArray = get_by_mobiles(doctorDO.getMobile());
            if(jsonArray!=null&&jsonArray.size()>0){
                long accountId = jsonArray.getJSONObject(0).getLong("accountId");
                doctorDO.setYktDoctorId(accountId+"");
                doctorDOs.add(doctorDO);
            }
        }
        if(doctorDOs.size()>0){
            doctorDao.save(doctorDOs);
        }
    }
    /**
     * 更新单个钉钉账户id
     * @param mobile
     */
    public void updYktDoctorId(String mobile){
        List<BaseDoctorDO> doctorDOs = doctorDao.findByMobile(mobile);
        if(doctorDOs.size()>0){
            BaseDoctorDO doctorDO = doctorDOs.get(0);
            JSONArray jsonArray = get_by_mobiles(doctorDO.getMobile());
            if(jsonArray!=null&&jsonArray.size()>0){
                long accountId = jsonArray.getJSONObject(0).getLong("accountId");
                doctorDO.setYktDoctorId(accountId+"");
                doctorDao.save(doctorDOs);
            }
        }
    }
    public String getuserinfo_bycode(String code){
        //调用API
        PostClient postClient = executableClient.newPostClient(getuserinfo_bycode);
        //设置参数
        postClient.addParameter("access_token", getAccessToken());
        postClient.addParameter("code", code);
        //Call API
        String apiResult = postClient.post();
        logger.info(apiResult);
//        JSONObject jsonObject = JSON.parseObject(apiResult);
//        if(jsonObject.getBoolean("success")){
//            JSONObject content = jsonObject.getJSONObject("content");
//            if(content.getBoolean("success")){
//                return content.getJSONObject("data").getString("accessToken");
//            }
//        }
        return null;
    }
    /**
     * 发送单聊消息
     */
    public void sendP2pMsg(String msg,String receiverId){
        PostClient postClient = executableClient.newPostClient(sendMsg);
        //Set the parameters
        postClient.addParameter("msg", msg);
        postClient.addParameter("senderId", p2pSenderId);
        postClient.addParameter("receiverId", receiverId);
        postClient.addParameter("chatId", "");
        postClient.addParameter("tenantId", tenantId);
        postClient.addParameter("chatType", "1");
        //Call API
        String apiResult = postClient.post();
        logger.info(apiResult);
    }
}

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

@ -72,6 +72,8 @@ public class MessageUtil {
    private GetuiService getuiService;
    @Autowired
    private GetuiClientDao getuiClientDao;
    @Autowired
    private DingdingUtil dingdingUtil;
    /**
     * 您好{1}有一条新的在线报名申请,请及时前往APP消息应用进行处理。
@ -113,6 +115,40 @@ public class MessageUtil {
        }
    }
    /**
     * 发送钉钉消息
     * type 1 安防紧急预警 2紧急呼叫 4im 5生日祝福
     * msgtype 消息类型 text
     */
    public void sendDoctorDingdingMessage(BaseDoctorDO doctorDO,String doctorCode,String msgtype,String type,String content,String title,String url){
        try {
            if(doctorDO == null){
                doctorDO = baseDoctorDao.findById(doctorCode);
            }
            if(StringUtils.isBlank(doctorDO.getYktDoctorId())){
                //没有钉钉id不推送
                return;
            }
            JSONObject msg = new JSONObject();
            msg.put("msgtype",msgtype);
            if("text".equals(msgtype)){
                JSONObject text = new JSONObject();
                text.put("content",content);
                msg.put("text",text);
            }else if("link".equals(msgtype)){
                JSONObject link = new JSONObject();
                link.put("messageUrl",url);
                link.put("title",title);
                link.put("text",content);
                link.put("picMediaId",DingdingUtil.picMediaId);
                msg.put("link",link);
            }
            dingdingUtil.sendP2pMsg(msg.toString(), doctorDO.getYktDoctorId());
        }catch (Exception e){
            e.printStackTrace();
        }
    }
    /**
     *
     * @param wechatId
@ -244,6 +280,13 @@ public class MessageUtil {
                wxTemplateConfigDO.setUrl(wxTemplateConfigDO.getUrl()+"?openid=" + openid + "&id=" + json.getString("id"));
                break;
            case 28://视频请求
                //小程序参数
                String miniprogramUrl = wxTemplateConfigDO.getUrl()+"?channelName="+ json.getString("channelName")+
                        "&nickName=" + json.getString("nickName")+ "&token=" + json.getString("token")
                        + "&userId=" + json.getString("userId")+ "&userName=" + json.getString("userName")
                        + "&sessionId=" + json.getString("sessionId")+"&isAckVideoType=1";
                wxTemplateConfigDO.setPagepath(miniprogramUrl);
                //?channelName="'&nickName=''&token=' '
                wxTemplateConfigDO.setUrl(wxTemplateConfigDO.getUrl()+"?openid=" + openid + "&channelName=" + json.getString("channelName")
                        + "&nickName=" + json.getString("nickName")+ "&token=" + json.getString("token")

+ 350 - 0
svr/svr-cloud-care/src/main/java/com/yihu/jw/care/vo/JczdPersonVo.java

@ -0,0 +1,350 @@
package com.yihu.jw.care.vo;
import java.io.Serializable;
import java.util.Date;
/**
 * 杭州居民信息
 * Created by yeshijie on 2022/4/25.
 */
public class JczdPersonVo implements Serializable {
    private Long id;//主键
    private Long tenantId;//租户ID
    private Long oldGridId;//老的网格id
    private Integer status;//人员状态
    private String personName;//姓名
    private String photoFilePath;//头像图片地址
    private String nationality;//国籍
    private String usedName;//曾用名
    private Integer certificateType;//证件类型:0-身份证,1-护照
    private String certificateNumber;//证件号码
    private Date certificateTermStart;//证件有效期起
    private Date certificateTermEnd;//证件有效期止
    private String personPhone;//手机号
    private Integer sex;//性别 0-女,1-男
    private String liveAddress;//居住地
    private Integer hasResidence;//有无住所,0-无,1-有
    private Integer permanentResidence;//是否常住,0-无,1-是
    private Integer isFloating;//1 户籍人口 2流动人口 3境外人口
    private Date birthday;//生日
    private Integer dataFlag;//0-已删除,1-有效
    private String unifyAddress_code;//统一地址编码
    private String familyCode;//关联家庭(户号)
    private String telephone;//电话号码
    private String personTags;//人员属性
    private Long oldRegistryGridId;//老的网格id
    private String liveAddressCode;//居住地址code
    private String registryAddressCode;//户籍地址code
    private String registryAddress;//户籍地址
    private String liveHouseType;//居住类型, 1:自住,2:租住
    private String licensePlate;//车牌号
    private String gridId;//新的网格id
    private String registryGridId;//新的网格id
    private String familyCodeId;//户号id
    private Date lastVisitTime;//最新访问时间
    private String lastVisitor;//最新采访人
    private Date deadDate;// 死亡时间
    private String personMobile;//电话号码(本系统维护的号码)
    public Long getId() {
        return id;
    }
    public void setId(Long id) {
        this.id = id;
    }
    public Long getTenantId() {
        return tenantId;
    }
    public void setTenantId(Long tenantId) {
        this.tenantId = tenantId;
    }
    public Long getOldGridId() {
        return oldGridId;
    }
    public void setOldGridId(Long oldGridId) {
        this.oldGridId = oldGridId;
    }
    public Integer getStatus() {
        return status;
    }
    public void setStatus(Integer status) {
        this.status = status;
    }
    public String getPersonName() {
        return personName;
    }
    public void setPersonName(String personName) {
        this.personName = personName;
    }
    public String getPhotoFilePath() {
        return photoFilePath;
    }
    public void setPhotoFilePath(String photoFilePath) {
        this.photoFilePath = photoFilePath;
    }
    public String getNationality() {
        return nationality;
    }
    public void setNationality(String nationality) {
        this.nationality = nationality;
    }
    public String getUsedName() {
        return usedName;
    }
    public void setUsedName(String usedName) {
        this.usedName = usedName;
    }
    public Integer getCertificateType() {
        return certificateType;
    }
    public void setCertificateType(Integer certificateType) {
        this.certificateType = certificateType;
    }
    public String getCertificateNumber() {
        return certificateNumber;
    }
    public void setCertificateNumber(String certificateNumber) {
        this.certificateNumber = certificateNumber;
    }
    public Date getCertificateTermStart() {
        return certificateTermStart;
    }
    public void setCertificateTermStart(Date certificateTermStart) {
        this.certificateTermStart = certificateTermStart;
    }
    public Date getCertificateTermEnd() {
        return certificateTermEnd;
    }
    public void setCertificateTermEnd(Date certificateTermEnd) {
        this.certificateTermEnd = certificateTermEnd;
    }
    public String getPersonPhone() {
        return personPhone;
    }
    public void setPersonPhone(String personPhone) {
        this.personPhone = personPhone;
    }
    public Integer getSex() {
        return sex;
    }
    public void setSex(Integer sex) {
        this.sex = sex;
    }
    public String getLiveAddress() {
        return liveAddress;
    }
    public void setLiveAddress(String liveAddress) {
        this.liveAddress = liveAddress;
    }
    public Integer getHasResidence() {
        return hasResidence;
    }
    public void setHasResidence(Integer hasResidence) {
        this.hasResidence = hasResidence;
    }
    public Integer getPermanentResidence() {
        return permanentResidence;
    }
    public void setPermanentResidence(Integer permanentResidence) {
        this.permanentResidence = permanentResidence;
    }
    public Integer getIsFloating() {
        return isFloating;
    }
    public void setIsFloating(Integer isFloating) {
        this.isFloating = isFloating;
    }
    public Date getBirthday() {
        return birthday;
    }
    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
    public Integer getDataFlag() {
        return dataFlag;
    }
    public void setDataFlag(Integer dataFlag) {
        this.dataFlag = dataFlag;
    }
    public String getUnifyAddress_code() {
        return unifyAddress_code;
    }
    public void setUnifyAddress_code(String unifyAddress_code) {
        this.unifyAddress_code = unifyAddress_code;
    }
    public String getFamilyCode() {
        return familyCode;
    }
    public void setFamilyCode(String familyCode) {
        this.familyCode = familyCode;
    }
    public String getTelephone() {
        return telephone;
    }
    public void setTelephone(String telephone) {
        this.telephone = telephone;
    }
    public String getPersonTags() {
        return personTags;
    }
    public void setPersonTags(String personTags) {
        this.personTags = personTags;
    }
    public Long getOldRegistryGridId() {
        return oldRegistryGridId;
    }
    public void setOldRegistryGridId(Long oldRegistryGridId) {
        this.oldRegistryGridId = oldRegistryGridId;
    }
    public String getLiveAddressCode() {
        return liveAddressCode;
    }
    public void setLiveAddressCode(String liveAddressCode) {
        this.liveAddressCode = liveAddressCode;
    }
    public String getRegistryAddressCode() {
        return registryAddressCode;
    }
    public void setRegistryAddressCode(String registryAddressCode) {
        this.registryAddressCode = registryAddressCode;
    }
    public String getRegistryAddress() {
        return registryAddress;
    }
    public void setRegistryAddress(String registryAddress) {
        this.registryAddress = registryAddress;
    }
    public String getLiveHouseType() {
        return liveHouseType;
    }
    public void setLiveHouseType(String liveHouseType) {
        this.liveHouseType = liveHouseType;
    }
    public String getLicensePlate() {
        return licensePlate;
    }
    public void setLicensePlate(String licensePlate) {
        this.licensePlate = licensePlate;
    }
    public String getGridId() {
        return gridId;
    }
    public void setGridId(String gridId) {
        this.gridId = gridId;
    }
    public String getRegistryGridId() {
        return registryGridId;
    }
    public void setRegistryGridId(String registryGridId) {
        this.registryGridId = registryGridId;
    }
    public String getFamilyCodeId() {
        return familyCodeId;
    }
    public void setFamilyCodeId(String familyCodeId) {
        this.familyCodeId = familyCodeId;
    }
    public Date getLastVisitTime() {
        return lastVisitTime;
    }
    public void setLastVisitTime(Date lastVisitTime) {
        this.lastVisitTime = lastVisitTime;
    }
    public String getLastVisitor() {
        return lastVisitor;
    }
    public void setLastVisitor(String lastVisitor) {
        this.lastVisitor = lastVisitor;
    }
    public Date getDeadDate() {
        return deadDate;
    }
    public void setDeadDate(Date deadDate) {
        this.deadDate = deadDate;
    }
    public String getPersonMobile() {
        return personMobile;
    }
    public void setPersonMobile(String personMobile) {
        this.personMobile = personMobile;
    }
    
}

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

@ -0,0 +1,12 @@
package com.yihu.jw.care.dao.device;
import com.yihu.jw.entity.care.device.BasePatientMonitorDataDO;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;
/**
 * Created by Bing on 2022/4/25.
 */
public interface BasePatientMonitorDataDao extends PagingAndSortingRepository<BasePatientMonitorDataDO,Long>,
        JpaSpecificationExecutor<BasePatientMonitorDataDO> {
}

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

@ -13,4 +13,5 @@ import org.springframework.data.repository.PagingAndSortingRepository;
 */
public interface DeviceHealthIndexDao extends PagingAndSortingRepository<DeviceHealthIndex, String>, JpaSpecificationExecutor<DeviceHealthIndex> {
    DeviceHealthIndex findByAtId(String atId);
}

+ 0 - 0
svr/svr-cloud-device/src/main/java/com/yihu/jw/care/service/DeviceService.java


Nem az összes módosított fájl került megjelenítésre, mert túl sok fájl változott