|
@ -1137,6 +1137,7 @@ public class PatientHealthIndexService extends BaseService {
|
|
|
// return re;
|
|
|
// }
|
|
|
|
|
|
|
|
|
/**
|
|
|
* 按时间段查询患者健康指标
|
|
|
*
|
|
@ -1148,9 +1149,6 @@ public class PatientHealthIndexService extends BaseService {
|
|
|
*/
|
|
|
public JSONArray findChartByPatient(String patient, int type, int gi_type, String begin, String end) {
|
|
|
JSONArray re = new JSONArray();
|
|
|
|
|
|
Date startDate = DateUtil.strToDate(begin, DateUtil.YYYY_MM_DD_HH_MM_SS);
|
|
|
Date endDate = DateUtil.strToDate(end, DateUtil.YYYY_MM_DD_HH_MM_SS);
|
|
|
String sql = "SELECT " +
|
|
|
"MIN(id) id" +
|
|
|
", user" +
|
|
@ -1208,6 +1206,222 @@ public class PatientHealthIndexService extends BaseService {
|
|
|
return re;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 按时间段查询患者健康指标
|
|
|
*
|
|
|
* @param type 健康指标类型(1血糖,2血压,3体重,4腰围)
|
|
|
* @param gi_type 血糖就餐时间段(早餐前,早餐后等),(type=2时,1表示收缩压、2表示舒张压)
|
|
|
* @param begin 开始时间
|
|
|
* @param end 结束时间
|
|
|
* @return
|
|
|
*/
|
|
|
public com.alibaba.fastjson.JSONObject findChartByPatientIot(String patient, int type, int gi_type, String begin, String end,String time) {
|
|
|
com.alibaba.fastjson.JSONObject jsonObject = new com.alibaba.fastjson.JSONObject();
|
|
|
com.alibaba.fastjson.JSONArray re = new com.alibaba.fastjson.JSONArray();
|
|
|
int high = 0;//偏高
|
|
|
int normal = 0;//正常
|
|
|
int low = 0;//偏低
|
|
|
boolean flag = false;//高危标志 true高危。
|
|
|
|
|
|
String sql = "SELECT " +
|
|
|
"MIN(id) id" +
|
|
|
", user" +
|
|
|
",value1" +
|
|
|
",value2" +
|
|
|
",value3" +
|
|
|
",value4" +
|
|
|
",value5" +
|
|
|
",value6" +
|
|
|
",value7" +
|
|
|
",device_sn" +
|
|
|
",type" +
|
|
|
",record_date" +
|
|
|
",sort_date" +
|
|
|
",min(czrq) czrq " +
|
|
|
" from device.wlyy_patient_health_index " +
|
|
|
" WHERE `user` = '" + patient + "' " +
|
|
|
" and type =" + type +
|
|
|
" and record_date >= '" + begin + "'" +
|
|
|
" and record_date <= '" + end + "' " +
|
|
|
" and del = '1' ";
|
|
|
String conditionApp = "";
|
|
|
if (gi_type != 0) {
|
|
|
conditionApp = " and value2 = '" + gi_type + "' ";
|
|
|
}
|
|
|
sql = sql + conditionApp +
|
|
|
" GROUP BY user,value1,value2,value3,value4,value5,value6,value7,type,record_date,sort_date " +
|
|
|
" order by record_date desc ,sort_date desc limit " + 0 + " ," + 1000 + " ";
|
|
|
List<Map<String, Object>> list = jdbcTemplate.queryForList(sql);
|
|
|
for (Map<String, Object> map : list) {
|
|
|
String value1 = map.get("value1").toString();
|
|
|
String value2 = map.get("value2").toString();
|
|
|
com.alibaba.fastjson.JSONObject json = new com.alibaba.fastjson.JSONObject();
|
|
|
json.put("id", map.get("id"));
|
|
|
json.put("patient", map.get("user"));
|
|
|
json.put("value1", value1);
|
|
|
json.put("value2", value2);
|
|
|
json.put("value3", map.get("value3"));
|
|
|
json.put("value4", map.get("value4"));
|
|
|
json.put("value5", map.get("value5"));
|
|
|
json.put("value6", map.get("value6"));
|
|
|
json.put("value7", map.get("value7"));
|
|
|
json.put("deviceSn", map.get("device_sn") == null ? "" : map.get("device_sn"));
|
|
|
json.put("type", map.get("type"));
|
|
|
|
|
|
Date date = (Date) map.get("record_date");
|
|
|
if (type == 2) {
|
|
|
json.put("date", DateUtil.dateToStr(date, DateUtil.YYYY_MM_DD_HH_MM_SS));
|
|
|
} else {
|
|
|
json.put("date", DateUtil.dateToStr(date, DateUtil.YYYY_MM_DD));
|
|
|
}
|
|
|
json.put("sortDate", map.get("sort_date"));
|
|
|
json.put("czrq", map.get("czrq"));
|
|
|
|
|
|
|
|
|
//统计加指标分析
|
|
|
int returnInt = 0;
|
|
|
if(type==1){
|
|
|
// int age = 60;
|
|
|
// Patient p = patientDao.findByCode(patient);
|
|
|
// if(p!=null){
|
|
|
// age = IdCardUtil.getAgeForIdcard(p.getIdcard());
|
|
|
// }
|
|
|
//血糖
|
|
|
Double maxValueBefore = SystemConf.HEALTH_STANDARD_ST_MAX_BEFORE;
|
|
|
Double minValueBefore = SystemConf.HEALTH_STANDARD_ST_MIN_BEFORE;
|
|
|
Double maxValueAfter = SystemConf.HEALTH_STANDARD_ST_MAX_AFTER;
|
|
|
Double minValueAfter = SystemConf.HEALTH_STANDARD_ST_MIN_AFTER;
|
|
|
int index = Integer.parseInt(value2);
|
|
|
Double intVlue1 = NumberUtils.toDouble(value1);
|
|
|
if(index % 2 == 0){
|
|
|
//餐后
|
|
|
returnInt = checkHealth(maxValueAfter,minValueAfter,intVlue1);
|
|
|
switch (returnInt){
|
|
|
case 0:
|
|
|
normal++;
|
|
|
break;
|
|
|
case 1:
|
|
|
high++;
|
|
|
break;
|
|
|
default:
|
|
|
low++;
|
|
|
break;
|
|
|
}
|
|
|
if(intVlue1>=maxValueAfter){
|
|
|
flag = true;
|
|
|
}
|
|
|
}else {
|
|
|
//餐前
|
|
|
returnInt = checkHealth(maxValueBefore,minValueBefore,intVlue1);
|
|
|
switch (returnInt){
|
|
|
case 0:
|
|
|
normal++;
|
|
|
break;
|
|
|
case 1:
|
|
|
high++;
|
|
|
break;
|
|
|
default:
|
|
|
low++;
|
|
|
break;
|
|
|
}
|
|
|
if(intVlue1>=maxValueBefore){
|
|
|
flag = true;
|
|
|
}
|
|
|
}
|
|
|
}else if(type==2){
|
|
|
//血压
|
|
|
Double intVlue1 = NumberUtils.toDouble(value1);
|
|
|
Double intVlue2 = NumberUtils.toDouble(value2);
|
|
|
Double maxValueSSY = SystemConf.HEALTH_STANDARD_SSY_MAX;
|
|
|
Double minValueSSY = SystemConf.HEALTH_STANDARD_SSY_MIN;
|
|
|
Double maxValueSZY = SystemConf.HEALTH_STANDARD_SZY_MAX;
|
|
|
Double minValueSZY = SystemConf.HEALTH_STANDARD_SZY_MIN;
|
|
|
if(gi_type==1){
|
|
|
//1表示收缩压
|
|
|
returnInt = checkHealth(maxValueSSY,minValueSSY,intVlue1);
|
|
|
switch (returnInt){
|
|
|
case 0:
|
|
|
normal++;
|
|
|
break;
|
|
|
case 1:
|
|
|
high++;
|
|
|
break;
|
|
|
default:
|
|
|
low++;
|
|
|
break;
|
|
|
}
|
|
|
if(intVlue1>=maxValueSSY){
|
|
|
flag = true;
|
|
|
}
|
|
|
}else if(gi_type==2){
|
|
|
//2表示舒张压
|
|
|
returnInt = checkHealth(maxValueSZY,minValueSZY,intVlue2);
|
|
|
switch (returnInt){
|
|
|
case 0:
|
|
|
normal++;
|
|
|
break;
|
|
|
case 1:
|
|
|
high++;
|
|
|
break;
|
|
|
default:
|
|
|
low++;
|
|
|
break;
|
|
|
}
|
|
|
if(intVlue2>=maxValueSSY){
|
|
|
flag = true;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
re.add(json);
|
|
|
}
|
|
|
jsonObject.put("list",re);
|
|
|
com.alibaba.fastjson.JSONObject total = new com.alibaba.fastjson.JSONObject();
|
|
|
total.put("high",high);
|
|
|
total.put("normal",normal);
|
|
|
total.put("low",low);
|
|
|
jsonObject.put("total",total);
|
|
|
String content = "";
|
|
|
if(high>0){
|
|
|
content = "居民"+time+"内有"+high+"次指标偏高";
|
|
|
if(low>0){
|
|
|
content+=",有"+low+"次指标偏低";
|
|
|
}else {
|
|
|
content+="。";
|
|
|
}
|
|
|
if(flag){
|
|
|
content+="居民"+time+"内控制不理想,可能伴有靶器官损害或其他并发症。建议由健管师进行电话随访不少于每月4次,至少每2周面对面随访一次,建议动员居民至医院全科医生就诊,特殊情况建议入户诊疗。病情严重建议转诊专科医师进行进一步治疗。";
|
|
|
}else {
|
|
|
content+="居民"+time+"内控制不理想但低于急危值,建议至少每2周面对面随访一次,建议动员居民至医院全科医生就诊,特殊情况建议入户诊疗。病情严重建议转诊专科医师进行进一步治疗。";
|
|
|
}
|
|
|
}else if(low>0){
|
|
|
content = "居民"+time+"内有"+low+"次指标偏低。";
|
|
|
content+="居民"+time+"内控制不理想但低于急危值,建议至少每2周面对面随访一次,建议动员居民至医院全科医生就诊,特殊情况建议入户诊疗。病情严重建议转诊专科医师进行进一步治疗。";
|
|
|
}else {
|
|
|
content = "居民"+time+"内指标没有异常。居民"+time+"内相对稳定,建议至少每周面对面随访一次,全科医生根据居民情况安排预约转诊专科医师,并跟踪治疗情况。";
|
|
|
}
|
|
|
jsonObject.put("content",content);
|
|
|
|
|
|
return jsonObject;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 指标验证
|
|
|
* @param max
|
|
|
* @param min
|
|
|
* @param value
|
|
|
* @return -1偏低,0正常,1偏高
|
|
|
*/
|
|
|
private Integer checkHealth(Double max,Double min,Double value){
|
|
|
if(max<=value){
|
|
|
return 1;
|
|
|
}else if(min>value){
|
|
|
return -1;
|
|
|
}else {
|
|
|
return 0;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 查询指标记录
|
|
|
*
|