123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512 |
- package mobile_api_controllers
-
- import (
- "XT_New/enums"
- "XT_New/models"
- "XT_New/service"
- "XT_New/utils"
- "fmt"
- "github.com/jinzhu/gorm"
- "time"
- )
-
- // /m/api/monitor/add [post]
- // @param patient_id:int
- // @param order_id?:int 透析记录 ID
- // @param date?:int 日期(10位时间戳)
- // @param operate_time?:int 实际测量日期(10位时间戳)
- // @param time?:string 时间(hh:mm) 废弃
- // @param pulse_frequency?:float 脉率(P)(次/min)
- // @param breathing_rated?:float 呼吸频率(R)(次/min)
- // @param systolic_bp?:float 收缩压
- // @param diastolic_bp?:float 舒张压
- // @param bp_type?:int 血压测量类型
- // @param blood_flow_volume?:float 血流量(ml/min)
- // @param venous_pressure?:float 静脉压
- // @param venous_pressure_unit?:string 静脉压单位
- // @param arterial_pressure?:float 动脉压
- // @param transmembrane_pressure?:float 跨膜压
- // @param transmembrane_pressure_unit?:string 跨膜压单位
- // @param ultrafiltration_rate?:float 超滤率(ml/h)
- // @param ultrafiltration_volume?:float 超滤量(ml)
- // @param sodium_concentration?:float 钠浓度(mmol/L)
- // @param dialysate_temperature?:float 透析液温度(℃)
- // @param replacement_rate?:float 置换率(ml/min)
- // @param displacement_quantity?:float 置换量(L)
- // @param ktv?:float KT/V(在线)
- // @param symptom?:string 症状
- // @param dispose?:string 处理
- // @param result?:string 结果
- // @param monitoring_nurse?:int 监测人
- func (this *DialysisAPIController) AddMonitorRecord() {
- patientID, _ := this.GetInt64("patient_id")
- if patientID <= 0 {
- this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
- return
- }
- orderID, _ := this.GetInt64("order_id")
- if orderID < 0 {
- orderID = 0
- }
- date, _ := this.GetInt64("date")
- operateTime, _ := this.GetInt64("operate_time")
-
- // recordTime := this.GetString("time")
- if date <= 0 || operateTime <= 0 {
- date = 0
- operateTime = 0
- // recordTime = ""
- }
- fmt.Println(date)
- fmt.Println(operateTime)
-
- pulseFrequency, _ := this.GetFloat("pulse_frequency")
- breathingRated, _ := this.GetFloat("breathing_rated")
- systolicBP, _ := this.GetFloat("systolic_bp")
- diastolicBP, _ := this.GetFloat("diastolic_bp")
- BPType, _ := this.GetInt("bp_type")
- bloodFlowVolume, _ := this.GetFloat("blood_flow_volume")
- venousPressure, _ := this.GetFloat("venous_pressure")
- venousPressureUnit := this.GetString("venous_pressure_unit")
- arterialPressure, _ := this.GetFloat("arterial_pressure")
- transmembranePressure, _ := this.GetFloat("transmembrane_pressure")
- transmembranePressureUnit := this.GetString("transmembrane_pressure_unit")
- ultrafiltrationRate, _ := this.GetFloat("ultrafiltration_rate")
- ultrafiltrationVolume, _ := this.GetFloat("ultrafiltration_volume")
- sodiumConcentration, _ := this.GetFloat("sodium_concentration")
- dialysateTemperature, _ := this.GetFloat("dialysate_temperature")
- temperature, _ := this.GetFloat("temperature")
- replacementRate, _ := this.GetFloat("replacement_rate")
- displacementQuantity, _ := this.GetFloat("displacement_quantity")
- ktv, _ := this.GetFloat("ktv")
- symptom := this.GetString("symptom")
- dispose := this.GetString("dispose")
- conductivity, _ := this.GetFloat("conductivity")
- displacement_flow_quantity, _ := this.GetFloat("displacement_flow_quantity")
- blood_oxygen_saturation := this.GetString("blood_oxygen_saturation")
- result := this.GetString("result")
- monitoringNurse, _ := this.GetInt64("monitoring_nurse")
-
- adminInfo := this.GetMobileAdminUserInfo()
- patient, getPatientErr := service.MobileGetPatientById(adminInfo.Org.Id, patientID)
- if getPatientErr != nil {
- this.ErrorLog("获取患者信息失败:%v", getPatientErr)
- this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
- return
- } else if patient == nil {
- this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodePatientNoExist)
- return
- }
-
- record := models.MonitoringRecord{
- UserOrgId: adminInfo.Org.Id,
- PatientId: patientID,
- DialysisOrderId: orderID,
- MonitoringDate: date,
- OperateTime: operateTime,
- // MonitoringTime: recordTime,
- PulseFrequency: pulseFrequency,
- BreathingRate: breathingRated,
- SystolicBloodPressure: systolicBP,
- DiastolicBloodPressure: diastolicBP,
- BloodPressureType: int64(BPType),
- BloodFlowVolume: bloodFlowVolume,
- VenousPressure: venousPressure,
- VenousPressureUnit: venousPressureUnit,
- ArterialPressure: arterialPressure,
- TransmembranePressure: transmembranePressure,
- TransmembranePressureUnit: transmembranePressureUnit,
- UltrafiltrationRate: ultrafiltrationRate,
- UltrafiltrationVolume: ultrafiltrationVolume,
- SodiumConcentration: sodiumConcentration,
- DialysateTemperature: dialysateTemperature,
- Temperature: temperature,
- ReplacementRate: replacementRate,
- DisplacementQuantity: displacementQuantity,
- Ktv: ktv,
- Symptom: symptom,
- Dispose: dispose,
- Result: result,
- MonitoringNurse: monitoringNurse,
- Status: 1,
- CreatedTime: time.Now().Unix(),
- UpdatedTime: time.Now().Unix(),
- Conductivity: conductivity,
- DisplacementFlowQuantity: displacement_flow_quantity,
- BloodOxygenSaturation: blood_oxygen_saturation,
- Creator: adminInfo.AdminUser.Id,
- Modify: 0,
- }
-
- err := service.CreateMonitor(&record)
- if err != nil {
- this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeMonitorCreate)
- return
- }
-
- this.ServeSuccessJSON(map[string]interface{}{
- "monitor": record,
- })
- }
-
- // /m/api/monitor/edit [post]
- // @param patient_id:int
- // @param order_id?:int 透析记录 ID
- // @param date?:int 日期(10位时间戳)
- // @param operate_time?:int 实际测量日期(10位时间戳)
- // @param time?:string 时间(hh:mm)废弃
- // @param pulse_frequency?:float 脉率(P)(次/min)
- // @param breathing_rated?:float 呼吸频率(R)(次/min)
- // @param systolic_bp?:float 收缩压
- // @param diastolic_bp?:float 舒张压
- // @param bp_type?:int 血压测量类型
- // @param blood_flow_volume?:float 血流量(ml/min)
- // @param venous_pressure?:float 静脉压
- // @param venous_pressure_unit?:string 静脉压单位
- // @param arterial_pressure?:float 动脉压
- // @param transmembrane_pressure?:float 跨膜压
- // @param transmembrane_pressure_unit?:string 跨膜压单位
- // @param ultrafiltration_rate?:float 超滤率(ml/h)
- // @param ultrafiltration_volume?:float 超滤量(ml)
- // @param sodium_concentration?:float 钠浓度(mmol/L)
- // @param dialysate_temperature?:float 透析液温度(℃)
- // @param replacement_rate?:float 置换率(ml/min)
- // @param displacement_quantity?:float 置换量(L)
- // @param ktv?:float KT/V(在线)
- // @param symptom?:string 症状
- // @param dispose?:string 处理
- // @param result?:string 结果
- // @param monitoring_nurse?:int 监测人
- func (this *DialysisAPIController) EditMonitorRecord() {
- patientID, _ := this.GetInt64("patient_id")
- if patientID <= 0 {
- this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
- return
- }
- id, _ := this.GetInt64("id")
- if id <= 0 {
- this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
- return
- }
- orderID, _ := this.GetInt64("order_id")
- if orderID < 0 {
- orderID = 0
- }
- date, _ := this.GetInt64("date")
- operateTime, _ := this.GetInt64("operate_time")
- if date <= 0 {
- date = 0
- operateTime = 0
- }
- pulseFrequency, _ := this.GetFloat("pulse_frequency")
- breathingRated, _ := this.GetFloat("breathing_rated")
- systolicBP, _ := this.GetFloat("systolic_bp")
- diastolicBP, _ := this.GetFloat("diastolic_bp")
- BPType, _ := this.GetInt("bp_type")
- bloodFlowVolume, _ := this.GetFloat("blood_flow_volume")
- venousPressure, _ := this.GetFloat("venous_pressure")
- venousPressureUnit := this.GetString("venous_pressure_unit")
- arterialPressure, _ := this.GetFloat("arterial_pressure")
- transmembranePressure, _ := this.GetFloat("transmembrane_pressure")
- transmembranePressureUnit := this.GetString("transmembrane_pressure_unit")
- ultrafiltrationRate, _ := this.GetFloat("ultrafiltration_rate")
- ultrafiltrationVolume, _ := this.GetFloat("ultrafiltration_volume")
- sodiumConcentration, _ := this.GetFloat("sodium_concentration")
- dialysateTemperature, _ := this.GetFloat("dialysate_temperature")
- temperature, _ := this.GetFloat("temperature")
- replacementRate, _ := this.GetFloat("replacement_rate")
- displacementQuantity, _ := this.GetFloat("displacement_quantity")
- ktv, _ := this.GetFloat("ktv")
- symptom := this.GetString("symptom")
- dispose := this.GetString("dispose")
- result := this.GetString("result")
- blood_oxygen_saturation := this.GetString("blood_oxygen_saturation")
- monitoringNurse, _ := this.GetInt64("monitoring_nurse")
- conductivity, _ := this.GetFloat("conductivity")
- displacement_flow_quantity, _ := this.GetFloat("displacement_flow_quantity")
-
- adminInfo := this.GetMobileAdminUserInfo()
-
- monitor, err := service.GetMonitor(adminInfo.Org.Id, patientID, id)
- if err != nil {
- this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
- return
- }
- //if monitor == nil {
- // this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeMonitorNotExist)
- // return
- //} else {
- // if monitor.MonitoringNurse != adminInfo.AdminUser.Id {
- // headNursePermission, getPermissionErr := service.GetAdminUserSpecialPermission(adminInfo.Org.Id, adminInfo.App.Id, adminInfo.AdminUser.Id, models.SpecialPermissionTypeHeadNurse)
- // if getPermissionErr != nil {
- // this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
- // return
- // } else if headNursePermission == nil {
- // this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDialysisPermissionDeniedModify)
- // return
- // }
- // }
- //}
- monitor.Conductivity = conductivity
- monitor.DialysisOrderId = orderID
- monitor.MonitoringDate = date
- monitor.OperateTime = operateTime
- monitor.PulseFrequency = pulseFrequency
- monitor.BreathingRate = breathingRated
- monitor.SystolicBloodPressure = systolicBP
- monitor.DiastolicBloodPressure = diastolicBP
- monitor.BloodPressureType = int64(BPType)
- monitor.BloodFlowVolume = bloodFlowVolume
- monitor.VenousPressure = venousPressure
- monitor.VenousPressureUnit = venousPressureUnit
- monitor.ArterialPressure = arterialPressure
- monitor.TransmembranePressure = transmembranePressure
- monitor.TransmembranePressureUnit = transmembranePressureUnit
- monitor.UltrafiltrationRate = ultrafiltrationRate
- monitor.UltrafiltrationVolume = ultrafiltrationVolume
- monitor.SodiumConcentration = sodiumConcentration
- monitor.DialysateTemperature = dialysateTemperature
- monitor.Temperature = temperature
- monitor.ReplacementRate = replacementRate
- monitor.DisplacementQuantity = displacementQuantity
- monitor.Ktv = ktv
- monitor.Symptom = symptom
- monitor.Dispose = dispose
- monitor.Result = result
- monitor.MonitoringNurse = monitoringNurse
- monitor.Status = 1
- monitor.UpdatedTime = time.Now().Unix()
- monitor.DisplacementFlowQuantity = displacement_flow_quantity
- monitor.BloodOxygenSaturation = blood_oxygen_saturation
- monitor.Modify = adminInfo.AdminUser.Id
-
- err = service.UpdateMonitor(monitor)
- if err != nil {
- this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeMonitorUpdate)
- return
- }
-
- this.ServeSuccessJSON(map[string]interface{}{
- "monitor": monitor,
- })
- }
-
- // /m/api/monitor/delete [post]
- // @param record_id:int
- // @param patient_id:int
- func (this *DialysisAPIController) DeleteMonitor() {
- recordID, _ := this.GetInt64("record_id")
- patientID, _ := this.GetInt64("patient_id")
- if recordID <= 0 || patientID <= 0 {
- this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
- return
- }
- adminInfo := this.GetMobileAdminUserInfo()
- patient, getPatientErr := service.MobileGetPatientById(adminInfo.Org.Id, patientID)
- if getPatientErr != nil {
- this.ErrorLog("获取患者信息失败:%v", getPatientErr)
- this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
- return
- } else if patient == nil {
- this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodePatientNoExist)
- return
- }
-
- monitor, getMonitorErr := service.GetMonitor(adminInfo.Org.Id, patientID, recordID)
- if getMonitorErr != nil {
- this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
- return
- }
- //if monitor != nil {
- // if monitor.MonitoringNurse != adminInfo.AdminUser.Id {
- // headNursePermission, getPermissionErr := service.GetAdminUserSpecialPermission(adminInfo.Org.Id, adminInfo.App.Id, adminInfo.AdminUser.Id, models.SpecialPermissionTypeHeadNurse)
- // if getPermissionErr != nil {
- // this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
- // return
- // } else if headNursePermission == nil {
- // this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDialysisPermissionDeniedModify)
- // return
- // }
- // }
- //}
-
- err := service.DisableMonitor(adminInfo.Org.Id, patientID, recordID, adminInfo.AdminUser.Id)
- if err != nil {
- this.ErrorLog("删除透析监测记录失败:%v", err)
- this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDBDelete)
- return
- }
- this.ServeSuccessJSON(map[string]interface{}{
- "record_id": monitor.ID,
- })
- }
-
- // /m/api/schedule/urgentinit [get]
- func (this *DialysisAPIController) UrgentScheduleInitData() {
- schedule_type, _ := this.GetInt("type", 0)
- adminUserInfo := this.GetMobileAdminUserInfo()
- today := utils.ZeroHourTimeOfDay(time.Now())
- //获取所有病人且没有上机记录的病人
- patients, getPatientsErr := service.MobileGetAllPatientsForUrgentSchedule(adminUserInfo.Org.Id, today.Unix())
- if getPatientsErr != nil {
- this.ErrorLog("获取所有患者失败:%v", getPatientsErr)
- this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
- return
- }
- modes, getModesErr := service.MobileGetAllTrearmentModesForUrgentSchedule()
- if getModesErr != nil {
- this.ErrorLog("获取所有治疗模式失败:%v", getModesErr)
- this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
- return
- }
- deviceNumbers, getDeviceNumbersErr := service.GetAllAvaildDeviceNumbers(adminUserInfo.Org.Id, today.Unix(), schedule_type)
- if getDeviceNumbersErr != nil {
- this.ErrorLog("获取所有床位失败:%v", getDeviceNumbersErr)
- this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
- return
- }
- schedules, getSchedulesErr := service.MobileGetOtherSchedulesForUrgentSchedule(adminUserInfo.Org.Id, today.Unix(), schedule_type)
- if getSchedulesErr != nil {
- this.ErrorLog("获取所有排班失败:%v", getSchedulesErr)
- this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
- return
- }
-
- this.ServeSuccessJSON(map[string]interface{}{
- "patients": patients,
- "modes": modes,
- "device_numbers": deviceNumbers,
- "schedules": schedules,
- })
- }
-
- // /m/api/schedule/urgentadd [post]
- // @param patient_id:int
- // @param schedule_type:int
- // @param mode:int
- // @param bed:int
- func (this *DialysisAPIController) AddUrgentSchedule() {
- patientID, _ := this.GetInt64("patient_id")
- scheduleType, _ := this.GetInt64("schedule_type")
- modeID, _ := this.GetInt64("mode")
- bedID, _ := this.GetInt64("bed")
- if patientID <= 0 || scheduleType < 1 || scheduleType > 3 || modeID < 1 || modeID > 14 || bedID <= 0 {
- this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
- return
- }
-
- adminUserInfo := this.GetMobileAdminUserInfo()
- patient, getPatientErr := service.GetPatientByID(adminUserInfo.Org.Id, patientID)
- if getPatientErr != nil {
- this.ErrorLog("获取患者信息失败:%v", getPatientErr)
- this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
- return
- } else if patient == nil {
- this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodePatientNoExist)
- return
- }
-
- deviceNumber, getDeviceNumberErr := service.GetDeviceNumberByID(adminUserInfo.Org.Id, bedID)
- if getDeviceNumberErr != nil {
- this.ErrorLog("获取床位失败:%v", getDeviceNumberErr)
- this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
- return
- } else if deviceNumber == nil {
- this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDeviceNumberNotExist)
- return
- }
-
- scheduleDate := utils.ZeroHourTimeOfDay(time.Now())
- weekday := int64(scheduleDate.Weekday())
- if weekday == 0 {
- weekday = 7
- }
-
- //判断这个人今天是否有排班
- daySchedule, dayScheduleErr := service.GetDayScheduleTwo(adminUserInfo.Org.Id, scheduleDate.Unix(), patientID)
-
- //判断当前时段该床位是否有排班
- schedule, err := service.GetDayScheduleByBedid(adminUserInfo.Org.Id, scheduleDate.Unix(), bedID, scheduleType)
- if dayScheduleErr == gorm.ErrRecordNotFound { //今天没有排班
- if err == gorm.ErrRecordNotFound { //空床位
- // 创建排班数据
- newSchedule := &models.Schedule{
- UserOrgId: adminUserInfo.Org.Id,
- PartitionId: deviceNumber.ZoneID,
- BedId: deviceNumber.ID,
- PatientId: patientID,
- ScheduleDate: scheduleDate.Unix(),
- ScheduleType: scheduleType,
- ScheduleWeek: weekday,
- ModeId: modeID,
- Status: 1,
- CreatedTime: time.Now().Unix(),
- UpdatedTime: time.Now().Unix(),
- }
- createErr := service.CreateSchedule(newSchedule)
- if createErr != nil {
- this.ErrorLog("紧急排班失败:%v", createErr)
- this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeCreateScheduleFail)
- return
- } else {
- this.ServeSuccessJSON(map[string]interface{}{
- "schedule": newSchedule,
- "patient": patient,
- })
- }
- } else if err == nil {
- if schedule.ID > 0 && schedule.DialysisOrder.ID == 0 { //该床位有排班没上机记录
- this.ServeFailJSONWithSGJErrorCode(enums.ErrorSchedualcRepeatBed)
- } else if schedule.ID > 0 && schedule.DialysisOrder.ID > 0 { //有排班且有上机记录
- this.ServeFailJSONWithSGJErrorCode(enums.ErrorDialysisOrderRepeatBed)
- return
- }
- } else if err != nil {
- this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
- return
- }
-
- } else if dayScheduleErr == nil { //今天有排班
-
- if daySchedule.ID > 0 && daySchedule.DialysisOrder.ID <= 0 { //今天有排班但是没上机
-
- if err == gorm.ErrRecordNotFound { //空床位
- // 修改了床位逻辑
- daySchedule, _ := service.GetDayScheduleTwo(adminUserInfo.Org.Id, scheduleDate.Unix(), patientID)
- if daySchedule.ID > 0 {
- daySchedule.PartitionId = deviceNumber.ZoneID
- daySchedule.BedId = bedID
- daySchedule.ModeId = modeID
- daySchedule.ScheduleType = scheduleType
- daySchedule.UpdatedTime = time.Now().Unix()
- err := service.UpdateSchedule(&daySchedule)
- if err != nil {
- this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
- return
- }
- this.ServeSuccessJSON(map[string]interface{}{
- "schedule": daySchedule,
- "patient": patient,
- })
- }
- } else if err == nil { //该床位被人霸占
- if schedule.ID > 0 && schedule.DialysisOrder.ID == 0 { //霸占该床位的病人有排班没上机记录
- this.ServeFailJSONWithSGJErrorCode(enums.ErrorSchedualcRepeatBed)
- return
- } else if schedule.ID > 0 && schedule.DialysisOrder.ID > 0 { //霸占该床位的病人有排班且有上机记录
- this.ServeFailJSONWithSGJErrorCode(enums.ErrorDialysisOrderRepeatBed)
- return
- }
- } else if err != nil {
- this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
- return
- }
-
- } else if daySchedule.ID > 0 && daySchedule.DialysisOrder.ID > 0 { //今天有排班且上机
- this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodePatientDialysisOrder)
- return
- }
- }
-
- }
|