Преглед изворни кода

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

wangzhinan пре 2 година
родитељ
комит
a02b3c8377

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

@ -21,6 +21,7 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
    /**
     * saas配置id
     * 云照护 签约社区
     */
//    @NotNull(message = "saasid不可为空")
    private String saasId;
@ -248,6 +249,7 @@ public class BasePatientDO extends UuidIdentityEntityWithOperator {
     */
    private String yktId;
    //云照护-是否签约老人 1是
    private String register;
    private String phone;

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

@ -51,6 +51,17 @@ public class CommonEndpoint extends EnvelopRestEndpoint {
    @Autowired
    private CarePatientService carePatientService;
    @GetMapping(value = "open/initOldTmp2")
    @ApiOperation(value = "初始化签约老人")
    public Envelop initOldTmp2() {
        try {
            carePatientService.initOldTmp2();
            return success("初始化成功");
        } catch (Exception e) {
            return failedException2(e);
        }
    }
    @GetMapping(value = "open/initJczdPerson")
    @ApiOperation(value = "初始化杭州老人")
    public Envelop initJczdPerson(Integer size) {

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

@ -24,13 +24,10 @@ 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 com.yihu.jw.util.entity.ServiceException;
import com.yihu.jw.util.healthIndex.HealthIndexUtil;
import com.yihu.mysql.query.BaseJpaService;
import org.apache.commons.collections.map.HashedMap;
import org.apache.commons.lang3.StringUtils;
import org.hibernate.annotations.Synchronize;
import org.json.JSONArray;
import org.json.JSONObject;
import org.slf4j.Logger;
@ -49,7 +46,6 @@ import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.LinkedMultiValueMap;
@ -58,7 +54,6 @@ import org.springside.modules.persistence.DynamicSpecifications;
import org.springside.modules.persistence.SearchFilter;
import org.springside.modules.persistence.SearchFilter.Operator;
import javax.annotation.PostConstruct;
import java.text.MessageFormat;
import java.util.*;
import java.util.concurrent.TimeUnit;
@ -1593,6 +1588,11 @@ public class PatientDeviceService extends BaseJpaService<DevicePatientDevice, Pa
                            }
                        }
                    }
                    if("用水异常预警".equals(orderDO.getServeDesc())){
                        if (StringUtils.isNotBlank(orderDO.getWarnInfo())){
                            info.put("info1",orderDO.getWarnInfo());
                        }
                    }
                    map.put("infos",info);
                }
            }

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

@ -250,6 +250,11 @@ public class PatientFamilyMemberService extends BaseJpaService<BasePatientFamily
        BasePatientDO patientDO = patientDao.findById(relatives);
        boolean register=false;
        if(null == patientDO){
            result.put(ResponseContant.resultFlag,ResponseContant.fail);
            result.put(ResponseContant.resultMsg,"添加失败,账号不存在!");
            return result;
        }
        if (StringUtils.isNotBlank(relativesName)){
            patientDO.setName(relativesName);
            register=true;

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

@ -202,10 +202,10 @@ public class BaseServiceNewsService {
        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;
                "WHERE  p.del =1 and p.archive_type=1 and p.sign_status=0 and p.register = 1 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 ;
                "WHERE  p.del =1 and p.archive_type=1 and p.sign_status=0 and p.register = 1 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){
@ -340,7 +340,7 @@ public class BaseServiceNewsService {
        String content = "";
        switch (type){
            case "1":
                content = "发起上门辅导";
                content = "发起幼儿照护";
                break;
            case "2":
                content = "发起咨询";
@ -352,7 +352,7 @@ public class BaseServiceNewsService {
                content = "为"+patientName+"代预约";
                break;
            case "5":
                content = "发起了紧急救护";
                content = "发起了紧急呼叫";
                break;
            case "6":
                content = "发起了安防监护";

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

@ -5,8 +5,6 @@ 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;
@ -15,21 +13,16 @@ 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;
@ -100,6 +93,149 @@ public class CarePatientService extends BaseJpaService<BasePatientDO, BasePatien
    @Autowired
    private BasePatientService basePatientService;
    /**
     * 初始化签约老人2
     */
    public void initOldTmp2(){
        Map<String,String> lableCodeNameMap = new HashMap<>();
        lableCodeNameMap.put("3","独居");//独居
        lableCodeNameMap.put("4","孤寡");//孤寡
        String sql = "select * from old_tmp";
        List<Map<String,Object>> mapList = jdbcTemplate.queryForList(sql);
        for (Map<String,Object> map:mapList){
            String name = (map.get("name")+"").trim();
            String idcard = (map.get("idcard")+"").trim();
            String area = (map.get("area")+"").trim();
            String address = (map.get("address")+"").trim();
            String mobile = (map.get("mobile")+"").trim();
            String type = (map.get("type")+"").trim();
            BasePatientDO patientDO = patientDao.findByIdcard(idcard);
            if(patientDO==null){
                patientDO = new BasePatientDO();
            }else{
                continue;
            }
            patientDO.setRegister("1");
            patientDO.setSaasId(area);
            String salt = UUID.randomUUID().toString().substring(0,5);
            patientDO.setPassword(MD5.md5Hex(idcard + "{" + salt + "}"));
            patientDO.setSalt(salt);
            patientDO.setOpenid(null);
            patientDO.setIdcard(idcard);
            patientDO.setSsc(null);
            patientDO.setMobile(mobile);
            patientDO.setSex(Integer.valueOf(IdCardUtil.getSexForIdcard_new(idcard)));
            patientDO.setName(name);
            patientDO.setArchiveType(1);
            patientDO.setArchiveStatus(1);
            if(patientDO.getSex()==2){
                patientDO.setPhoto("group1/M00/00/7C/rBoAbmIu8g6ANMrpAAAiSDNDGrM907.png");
            }else{
                patientDO.setPhoto("group1/M00/00/5A/rBoAb2Iu8gOAQ9WYAAAgcmCLvjQ782.png");
            }
            patientDO.setDel("1");
            patientDO.setLocked(0);
            patientDO.setEnabled(1);
            patientDO.setSignStatus(0);
            patientDO.setCreateTime(new Date());
            patientDO.setAddress(address);
            Map<String,String> tmp = LatitudeUtils.getGeocoderLatitude(address);
            if(tmp!=null){
                String latlon = tmp.get("lat")+","+tmp.get("lng");
                patientDO.setLatLon(latlon);
            }
            patientDao.save(patientDO);
            String label = lableCodeNameMap.get(type);
            if(StringUtils.isNotBlank(label)){
                WlyyPatientLabelDO patientLabelDO = new WlyyPatientLabelDO();
                patientLabelDO.setCzrq(new Date());
                patientLabelDO.setLabelType("3");
                patientLabelDO.setPatient(patientDO.getId());
                patientLabelDO.setLabelCode(label);
                patientLabelDO.setLabelName(lableCodeNameMap.get(label));
                patientLabelDao.save(patientLabelDO);
            }
            logger.info("idcard="+idcard);
        }
    }
    /**
     * 初始化签约老人
     */
    public void initOldTmp(){
        Map<String,String> lableCodeNameMap = new HashMap<>();
        lableCodeNameMap.put("3","独居");//独居
        lableCodeNameMap.put("4","孤寡");//孤寡
        String sql = "select * from old_tmp";
        List<Map<String,Object>> mapList = jdbcTemplate.queryForList(sql);
        for (Map<String,Object> map:mapList){
            String name = (map.get("name")+"").trim();
            String idcard = (map.get("idcard")+"").trim();
            String area = (map.get("area")+"").trim();
            String address = (map.get("address")+"").trim();
            String mobile = (map.get("mobile")+"").trim();
            String type = (map.get("type")+"").trim();
            BasePatientDO patientDO = patientDao.findByIdcard(idcard);
            if(patientDO!=null){
                if(patientDO.getSignStatus()!=null&&patientDO.getSignStatus()==1){
                    logger.info("已签约居民idcard="+idcard);
                    continue;
                }
            }else{
                patientDO = new BasePatientDO();
            }
            patientDO.setRegister("1");
            patientDO.setSaasId(area);
            boolean flag = false;
            if(StringUtils.isBlank(patientDO.getIdcard())){
                String salt = UUID.randomUUID().toString().substring(0,5);
                patientDO.setPassword(MD5.md5Hex(idcard + "{" + salt + "}"));
                patientDO.setSalt(salt);
                patientDO.setOpenid(null);
                patientDO.setIdcard(idcard);
                patientDO.setSsc(null);
                patientDO.setMobile(mobile);
                patientDO.setSex(Integer.valueOf(IdCardUtil.getSexForIdcard_new(idcard)));
                patientDO.setName(name);
                patientDO.setArchiveType(1);
                patientDO.setArchiveStatus(1);
                if(patientDO.getSex()==2){
                    patientDO.setPhoto("group1/M00/00/7C/rBoAbmIu8g6ANMrpAAAiSDNDGrM907.png");
                }else{
                    patientDO.setPhoto("group1/M00/00/5A/rBoAb2Iu8gOAQ9WYAAAgcmCLvjQ782.png");
                }
                patientDO.setDel("1");
                patientDO.setLocked(0);
                patientDO.setEnabled(1);
                patientDO.setSignStatus(0);
                patientDO.setCreateTime(new Date());
                flag = true;
            }
            patientDO.setAddress(address);
            Map<String,String> tmp = LatitudeUtils.getGeocoderLatitude(address);
            if(tmp!=null){
                String latlon = tmp.get("lat")+","+tmp.get("lng");
                patientDO.setLatLon(latlon);
            }
            patientDao.save(patientDO);
            if(flag){
                String label = lableCodeNameMap.get(type);
                if(StringUtils.isNotBlank(label)){
                    WlyyPatientLabelDO patientLabelDO = new WlyyPatientLabelDO();
                    patientLabelDO.setCzrq(new Date());
                    patientLabelDO.setLabelType("3");
                    patientLabelDO.setPatient(patientDO.getId());
                    patientLabelDO.setLabelCode(label);
                    patientLabelDO.setLabelName(lableCodeNameMap.get(label));
                    patientLabelDao.save(patientLabelDO);
                }
            }
            logger.info("idcard="+idcard);
        }
    }
    /**
     * 初始化杭州老人,只保存有身份证且有手机号的数据
     */
@ -526,8 +662,9 @@ public class CarePatientService extends BaseJpaService<BasePatientDO, BasePatien
        JSONObject result = new JSONObject();
        BasePatientDO patientDO = patientDao.findById(patient);
        if (patientDO==null){
            result.put(ResponseContant.resultFlag,ResponseContant.fail);
            result.put(ResponseContant.resultMsg,"账号不存在");
            result.put(ResponseContant.resultFlag,ResponseContant.success);
            result.put(ResponseContant.resultMsg,"操作成功");
            return result;
        }
        if (StringUtils.isNotBlank(patientDO.getIdcard())){
            result.put(ResponseContant.resultFlag,ResponseContant.fail);
@ -747,16 +884,16 @@ public class CarePatientService extends BaseJpaService<BasePatientDO, BasePatien
    }
    /**
     * 查找签约老人
     * 查找签约老人 + 名单800
     * @param name
     * @param residentialArea
     * @param limit
     * @return
     */
    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 " +
        String sql = "SELECT DISTINCT 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=1  ";
                " WHERE a.archive_type = 1 and a.del = '1' and (a.sign_status=1 or a.register = '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
@ -770,7 +907,18 @@ public class CarePatientService extends BaseJpaService<BasePatientDO, BasePatien
            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+"') ";
                    " and i.del = 1  and sr.`status`=1 and CONVERT(sr.patient USING utf8)  = a.id and r.team_code='"+area+"')  ";
            sql += " OR (a.saas_id = '"+area+"' ";
            if (StringUtils.isNotBlank(name)){
                sql+= " and a.name like '%"+name+"%' ";
            }
            if(StringUtils.isNotBlank(residentialArea)){
                sql+= " and a.residential_area = '"+residentialArea+"' ";
            }
            sql +=" )";
        }
        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 ";
@ -819,7 +967,7 @@ public class CarePatientService extends BaseJpaService<BasePatientDO, BasePatien
    }
    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 ";
        String sql = "SELECT count(DISTINCT a.id) from base_patient a  WHERE a.archive_type = 1 and a.del = '1' and (a.sign_status=1 or a.register = 1)";
        if(!StringUtil.isBlank(name)){
            sql+= " and name like '%"+name+"%' ";
        }
@ -830,7 +978,16 @@ public class CarePatientService extends BaseJpaService<BasePatientDO, BasePatien
            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+"' ) ";
                    " and i.del = 1  and sr.`status`=1 and CONVERT(sr.patient USING utf8)  = a.id and r.team_code='"+area+"' )  ";
            sql += "OR (a.saas_id = '"+area+"' ";
            if (StringUtils.isNotBlank(name)){
                sql+= " and a.name like '%"+name+"%' ";
            }
            if(StringUtils.isNotBlank(residentialArea)){
                sql+= " and a.residential_area = '"+residentialArea+"' ";
            }
            sql +=" )";
        }
        sql += filter;
        return jdbcTemplate.queryForObject(sql,Integer.class);

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

@ -426,18 +426,42 @@ public class StatisticsService {
        Integer emergencyCallNum = jdbcTemplate.queryForObject(emergencyCallSql, Integer.class);
        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);   //老人注册人数
        String oldTotalSql ="SELECT ((SELECT COUNT(distinct p.id) FROM base_patient p  WHERE p.sign_status = 1 AND p.del = 1 ) +(SELECT COUNT(distinct p.id) FROM base_patient p INNER JOIN " +
                " wlyy_patient_device d ON p.id = d.`user` WHERE p.sign_status = 0 AND p.del = 1  AND d.del = 0)) total";
        List<Integer> oldTotalList = jdbcTemplate.queryForList(oldTotalSql, Integer.class);
        res.put("olderTotal", oldTotalList.get(0));   //老人注册人数
        res.put("childTotal", childTotal);   //儿童注册人数
        res.put("healthEquipmentNum", healthEquipmentNum);   //健康设备
        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 " +
        sqltmp = " select count(distinct pd.device_sn) total ,pd.device_type 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);//离线设备
        sqltmp += " group by pd.device_type ";
        List<Map<String,Object>> offlineDevices = jdbcTemplate.queryForList(sqltmp);//离线设备
        Long count = 0l;
        Long offlineDevice0 = 0l;
        Long offlineDevice1 = 0l;
        for (Map<String,Object> tmp:offlineDevices){
            String deviceType =  tmp.get("device_type").toString();
            if ("0".equals(deviceType)){
                offlineDevice0 = Long.valueOf(tmp.get("total").toString());
            }
            if ("1".equals(deviceType)){
                offlineDevice1 = Long.valueOf(tmp.get("total").toString());
            }
        }
        count = offlineDevice0+offlineDevice1;
        res.put("offlineDevice", count);
        res.put("offlineDevice0", offlineDevice0);//健康设备离线数
        res.put("offlineDevice1", offlineDevice1);//安防设备离线数
        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+
@ -728,9 +752,9 @@ public class StatisticsService {
            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+"') ";
                    " and i.del = 1  and sr.`status`=1 and CONVERT(sr.patient USING utf8)  = a.id and r.team_code='"+area+"') OR ( a.saas_id = '"+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 " +
        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 (a.sign_status=1 or a.register = 1) " +
                " and del='1' "+areaFilter+" " + oldFilter + " GROUP BY online";
        List<Map<String, Object>> list1 = jdbcTemplate.queryForList(sql1);
        for (Map<String, Object> map : list1) {
@ -1894,8 +1918,18 @@ public class StatisticsService {
            res.put("statusList", statusArray);
        } else {//老人
            //老人
            //能力评估 从签约时服务标签取
            res.put("levelList", cloudCareForTheElderly(endDate, area, level));
            //能力评估 从签约时服务标签取  + 照护老人
            JSONArray jsonArray = cloudCareForTheElderly(endDate, area, level);
            JSONObject oldTotalJson = new JSONObject();
            String oldTotalSql ="SELECT ((SELECT COUNT(distinct p.id) FROM base_patient p  WHERE p.sign_status = 1 AND p.del = 1 ) +(SELECT COUNT(distinct p.id) FROM base_patient p INNER JOIN " +
                    " wlyy_patient_device d ON p.id = d.`user` WHERE p.sign_status = 0 AND p.del = 1  AND d.del = 0)) total";
            List<Integer> oldTotalList = jdbcTemplate.queryForList(oldTotalSql, Integer.class);
            oldTotalJson.put("num", oldTotalList.get(0));
            oldTotalJson.put("code", 12);
            oldTotalJson.put("name", "老人数");
            jsonArray.add(oldTotalJson);
            res.put("levelList", jsonArray);
            //居民健康标签
            List<SaveModel> list = elasticsearchUtil.findDateAllQuotaLevel1(endDate, endDate, area, level, "47", SaveModel.timeLevel_DDL, null, null, areaLevel);
@ -1980,6 +2014,8 @@ public class StatisticsService {
            json.put("name", saveModel.getSlaveKey1Name());
            sexArray.add(json);
        }
        res.put("sexList", sexArray);
        return res;
    }
@ -2041,7 +2077,8 @@ public class StatisticsService {
    //老人整体概况
    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+"' ";
        String sql = " SELECT *,(SELECT ((SELECT COUNT(*) FROM base_patient p where  p.sign_status = 0 AND p.del = 1) - (SELECT COUNT(p.id) FROM base_patient p INNER JOIN wlyy_patient_device d ON p.id = d.`user` WHERE p.sign_status = 0 AND p.del = 1  AND d.del = 0)) total\n) total 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);

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

@ -979,12 +979,21 @@ public class WlyygcStatisticsService {
                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 = "SELECT count(a.id) from base_patient a  WHERE a.archive_type = 1 and a.del = '1' AND a.sign_status = 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);
            */
            sql = "SELECT count( DISTINCT a.id ) FROM base_patient a LEFT JOIN  base_service_package_record pr ON pr.patient = a.id " +
                    " LEFT JOIN base_service_package_sign_record sr ON sr.id = pr.sign_id " +
                    " WHERE " +
                    " a.archive_type = 1 " +
                    " AND a.del = '1' " +
                    " AND a.sign_status = 1 " +
                    " AND pr.team_code = '"+teamId+"' " +
                    " AND sr.`status` = 1 ";
            count =  jdbcTemplate.queryForObject(sql+filter,Integer.class);
            map.put("oldTotal",count);//照护老人数量
        }
        return  teamList;

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

@ -951,7 +951,7 @@ public class PatientInfoPlatFormService {
                    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 ";
                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));

+ 5 - 1
svr/svr-cloud-device/pom.xml

@ -150,7 +150,11 @@
            <version>2.0.0</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.eclipse.paho</groupId>
            <artifactId>org.eclipse.paho.client.mqttv3</artifactId>
            <version>1.2.5</version>
        </dependency>
    </dependencies>
    <build>

+ 24 - 0
svr/svr-cloud-device/src/main/java/com/yihu/jw/care/common/PostConstructUtil.java

@ -0,0 +1,24 @@
package com.yihu.jw.care.common;
import com.yihu.jw.care.util.MQTTClientUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
/**
 * 项目启动就执行的类
 * Created by yeshijie on 2022/5/7.
 */
@Component
public class PostConstructUtil {
    @Autowired
    private MQTTClientUtil mqttClientUtil;
    @PostConstruct
    public void init(){
        //启动电表的mqtt订阅
        mqttClientUtil.start();
    }
}

+ 111 - 0
svr/svr-cloud-device/src/main/java/com/yihu/jw/care/util/MQTTClientUtil.java

@ -0,0 +1,111 @@
package com.yihu.jw.care.util;
import org.eclipse.paho.client.mqttv3.*;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import java.util.concurrent.ScheduledExecutorService;
/**
 * Created by yeshijie on 2022/5/5.
 */
@Component
public class MQTTClientUtil {
    private static Logger logger = LoggerFactory.getLogger(MQTTClientUtil.class);
    public static final String HOST = "tcp://47.99.215.81:8885";
    public static final String TOPIC1 = "00752217643114/get/request/online";
//    public static final String TOPIC = "00752217643114/get/request/params";
    public static final String TOPIC = "00752217643114/#";//订阅所有
    private static final String clientid = String.valueOf(System.currentTimeMillis());;
    private MqttClient client;
    private MqttConnectOptions options;
    private String userName = "admin";
    private String passWord = "password";
    private ScheduledExecutorService scheduler;
    public void start() {
        logger.info("启动监听mqtt-start");
        try {
            // host为主机名,clientid即连接MQTT的客户端ID,一般以唯一标识符表示,MemoryPersistence设置clientid的保存形式,默认为以内存保存
            client = new MqttClient(HOST, clientid, new MemoryPersistence());
            // MQTT的连接设置
            options = new MqttConnectOptions();
            // 设置是否清空session,这里如果设置为false表示服务器会保留客户端的连接记录,这里设置为true表示每次连接到服务器都以新的身份连接
            options.setCleanSession(true);
            // 设置连接的用户名
            options.setUserName(userName);
            // 设置连接的密码
            options.setPassword(passWord.toCharArray());
            // 设置超时时间 单位为秒
            options.setConnectionTimeout(10);
            options.setAutomaticReconnect(true);//设置自动重连
            // 设置会话心跳时间 单位为秒 服务器会每隔1.5*20秒的时间向客户端发送个消息判断客户端是否在线,但这个方法并没有重连的机制
            options.setKeepAliveInterval(20);
            // 设置回调
            client.setCallback(new MqttCallback(){
                @Override
                public void connectionLost(Throwable throwable) {
                    // 连接丢失后,一般在这里面进行重连
                    throwable.printStackTrace();
                    logger.info("连接断开,可以做重连");
                }
                @Override
                public void messageArrived(String s, MqttMessage message) throws Exception {
                    // subscribe后得到的消息会执行到这里面
                    logger.info("接收s : " + s);
                    logger.info("接收消息主题 : " + message);
                    logger.info("接收消息Qos : " + message.getQos());
                    logger.info("接收消息内容 : " + new String(message.getPayload()));
                }
                @Override
                public void deliveryComplete(IMqttDeliveryToken token) {
                    logger.info("deliveryComplete---------" + token.isComplete());
                }
            });
//            MqttTopic topic = client.getTopic(TOPIC);
            //setWill方法,如果项目中需要知道客户端是否掉线可以调用该方法。设置最终端口的通知消息
//            options.setWill(topic, "close".getBytes(), 2, true);
            client.connect(options);
            //订阅消息
            int[] Qos  = {1};
            String[] topic1 = {TOPIC};
            client.subscribe(topic1, Qos);
/*            // 创建消息
            String payload = "{\n" +
                    "  \"token\": 0,\n" +
                    "  \"dev_type\": \"gw\", \n" +
                    "  \"msg_type\": \"online\", \n" +
                    "  \"content\" :[{\n" +
                    "    \"action\": \"getlist\"\n" +
                    "  }]\n" +
                    "}\n";
            MqttMessage message = new MqttMessage(payload.getBytes());
            // 设置消息的服务质量
            message.setQos(0);
            // 发布消息
            client.publish(TOPIC1, message);*/
        } catch (Exception e) {
            e.printStackTrace();
        }
        logger.info("启动监听mqtt-end");
    }
//    public static void main(String[] args) throws MqttException {
//        MQTTClientUtil client = new MQTTClientUtil();
//        client.start();
//        logger.info("启动监听mqtt");
//    }
}