Browse Source

居民自主添加血压血糖,预警数值无变化的BUG

huangwenjie 7 years ago
parent
commit
97cba04043

+ 3 - 3
common/common-entity/src/main/java/com/yihu/device/entity/DevicePatientHealthIndex.java

@ -51,7 +51,7 @@ public class DevicePatientHealthIndex extends IdEntity {
	//设备编号
	private String deviceSn;
	private Short status;//状态:0为标准,1为异常
	private int status;//状态:0为标准,1为异常
	public String getUser() {
		return user;
@ -188,11 +188,11 @@ public class DevicePatientHealthIndex extends IdEntity {
		this.deviceSn = deviceSn;
	}
	public Short getStatus() {
	public int getStatus() {
		return status;
	}
	public void setStatus(Short status) {
	public void setStatus(int status) {
		this.status = status;
	}
}

+ 6 - 0
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/health/repository/DevicePatientHealthIndexDao.java

@ -100,4 +100,10 @@ public interface DevicePatientHealthIndexDao
	@Query(value= " select * from device.wlyy_patient_health_index where type in (?1) and record_date BETWEEN ?2 AND ?3  AND user in (select p.code from wlyy.wlyy_patient p INNER JOIN wlyy.wlyy_sign_family s on s.patient = p.code and s.status > 0 AND s.admin_team_code = ?4 and p.disease >0)",nativeQuery = true)
	List<DevicePatientHealthIndex> findByTeamcodeAndRecordDate(String type ,Date start, Date end,String teamcode);
	@Query("select a from PatientHealthIndex a where a.user = ?1 and a.type =?2  order by recordDate desc ")
	List<DevicePatientHealthIndex> findByPatientAndType(String patientCode, int type, Pageable pageable);
	@Query("select count(a) from PatientHealthIndex a where a.recordDate >= ?1 and a.recordDate <= ?2 and a.type in (1,2) and a.status = ?3 and a.del = '1'")
	int getCountByTimeAndStatus(Date start, Date end,int status);
}

+ 71 - 0
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/service/app/health/PatientHealthIndexService.java

@ -29,6 +29,7 @@ import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.data.jpa.domain.Specification;
@ -599,10 +600,15 @@ public class PatientHealthIndexService extends BaseService {
            if (index % 2 == 0) {
                if (!checkHealthIndex(NumberUtils.toDouble(value1), maxValueBefore, minValueBefore)) {
                    msgContent += patient.getName() + "血糖异常(" + value1 + "mmol/L)";
                    //体征异常,更新体征数据状态
                    data.setStatus(1);
                    patientHealthIndexDao.save(data);
                }
            } else { //餐前
                if (!checkHealthIndex(NumberUtils.toDouble(value1), maxValueAfter, minValueAfter)) {
                    msgContent += patient.getName() + "血糖异常(" + value1 + "mmol/L)";
                    data.setStatus(1);
                    patientHealthIndexDao.save(data);
                }
            }
        }
@ -633,6 +639,8 @@ public class PatientHealthIndexService extends BaseService {
            // 收缩压/舒张压校验
            if (!checkHealthIndex(NumberUtils.toDouble(value1), maxValueSSY, minValueSSY) || !checkHealthIndex(NumberUtils.toDouble(value2), maxValueSZY, minValueSZY)) {
                msgContent = patient.getName() + "血压异常(舒张压 " + value2 + "mmHg、收缩压 " + value1 + "mmHg)";
                data.setStatus(1);
                patientHealthIndexDao.save(data);
            }
        }
@ -783,6 +791,69 @@ public class PatientHealthIndexService extends BaseService {
        return obj;
    }
    /**
     * 判断居民的体征预警状态
     * @param obj
     */
    public void handlePatientStandarStatus(DevicePatientHealthIndex obj){
        //连续5次体征值正常,则修改为非预警状态;连续5次异常,修改为预警状态-----START
        String patientCode = obj.getUser();
        //患者信息
        Patient patient = patientDao.findByCode(patientCode);
        int bloodPressureBbnormalCount = 0;//血压异常次数
        int bloodSuggurBbnormalCount = 0;//血糖异常次数
        // 排序
        Sort sort = new Sort(Sort.Direction.DESC, "recordDate");
        // 分页信息
        Pageable pageRequest = new PageRequest(0, 5, sort);
        Pageable pageable = new PageRequest(1, 5);
        List<DevicePatientHealthIndex> bloodPressurepatientHealthIndices = new ArrayList<>();
        List<DevicePatientHealthIndex> bloodSuggurpatientHealthIndices = new ArrayList<>();
        if( 1 == patient.getDisease()){
            bloodPressurepatientHealthIndices = patientHealthIndexDao.findByPatientAndType(patientCode,2,pageable);
        } else if( 2 == patient.getDisease()){
            bloodSuggurpatientHealthIndices = patientHealthIndexDao.findByPatientAndType(patientCode,1,pageable);
        } else {
            bloodPressurepatientHealthIndices = patientHealthIndexDao.findByPatientAndType(patientCode,2,pageable);
            bloodSuggurpatientHealthIndices = patientHealthIndexDao.findByPatientAndType(patientCode,1,pageable);
        }
        for (DevicePatientHealthIndex patientHealthIndex : bloodPressurepatientHealthIndices) {
            if(1 == patientHealthIndex.getStatus()){
                bloodPressureBbnormalCount++;
            }
        }
        for (DevicePatientHealthIndex patientHealthIndex : bloodSuggurpatientHealthIndices) {
            if(1 == patientHealthIndex.getStatus()){
                bloodSuggurBbnormalCount++;
            }
        }
        //连续3次异常,修改用户为预警状态
        if( (3 == bloodPressureBbnormalCount || 3 == bloodSuggurBbnormalCount) && 0 == patient.getStandardStatus()){
            patient.setStandardStatus(1);
        }else{
            Date end = new Date();
            Date start = DateUtil.setDateTime(end,-7);
            //计算血糖或者血压一周内的异常记录数量
            int errorCount = patientHealthIndexDao.getCountByTimeAndStatus(start,end,1);
            if(errorCount >= 5){//超过5次,记为预警状态
                patient.setStandardStatus(1);
            }
        }
        //连续5次正常,修改用户为非预警状态
        if((0 == bloodPressureBbnormalCount && 0 == bloodSuggurBbnormalCount) && 1 == patient.getStandardStatus()){
            patient.setStandardStatus(0);
        }
        patientDao.save(patient);
        //连续5次体征值正常,则修改为非预警状态;连续5次异常,修改为预警状态-----END
    }
    /**
     * 按录入时间和患者标识查询健康记录

+ 13 - 0
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/util/DateUtil.java

@ -870,4 +870,17 @@ public class DateUtil {
		Timestamp nousedate = new Timestamp(date.getTime());
		return nousedate;
	}
	/**
	 *  日期加减天数
	 * @param date 时间
	 * @param days 天数�?
	 * @return
	 */
	public static java.util.Date setDateTime(java.util.Date date,int days){
		Calendar cal = Calendar.getInstance();
		cal.setTime(date);
		cal.set(Calendar.DATE, cal.get(Calendar.DATE) +(days));
		return  cal.getTime();
	}
}

+ 5 - 0
patient-co/patient-co-wlyy/src/main/java/com/yihu/wlyy/web/patient/health/PatientHealthController.java

@ -394,11 +394,16 @@ public class PatientHealthController extends BaseController {
//                patient = getUID();
            }
            DevicePatientHealthIndex obj = healthIndexService.addPatientHealthIndex(data, type, patient, null);
            //血糖和血压需要校验
            if (type.equals("1") || type.equals("2")) {
                healthIndexService.verifyHealthIndex(obj.getId());
            }
            //判断居民的体征预警状态
            healthIndexService.handlePatientStandarStatus(obj);
            return success("新增患者指标成功!");
        } catch (Exception ex) {
            return invalidUserException(ex, -1, ex.getMessage());