package controllers import ( "XT_New/models" "encoding/json" "github.com/jinzhu/gorm" "math" "strconv" "strings" "time" "XT_New/enums" "XT_New/service" "XT_New/utils" "fmt" "github.com/astaxie/beego" ) func DialysisRecordAPIControllerRegistRouter() { beego.Router("/api/dialysis/initdata", &DialysisRecordAPIController{}, "get:RecordInitData") beego.Router("/api/dialysis/schedules", &DialysisRecordAPIController{}, "get:GetSchedules") beego.Router("/api/dislysis/schedule", &DialysisRecordAPIController{}, "get:DialysisSchedule") beego.Router("/api/dislysis/monitor/edit", &DialysisRecordAPIController{}, "post:EditMonitor") beego.Router("/api/dialysis/start_record", &DialysisRecordAPIController{}, "post:StartDialysis") beego.Router("/api/dialysis/finish", &DialysisRecordAPIController{}, "post:FinishDialysis") beego.Router("/api/start_dialysis/modify", &DialysisRecordAPIController{}, "post:ModifyStartDialysis") beego.Router("/api/finish_dialysis/modify", &DialysisRecordAPIController{}, "post:ModifyFinishDialysis") } type DialysisRecordAPIController struct { BaseAuthAPIController } // /api/dialysis/initdata [get] func (this *DialysisRecordAPIController) RecordInitData() { adminInfo := this.GetAdminUserInfo() orgID := adminInfo.CurrentOrgId now := time.Now() ymdDate, _ := utils.ParseTimeStringToTime("2006-01-02", now.Format("2006-01-02")) schedules, getSchedulesErr := service.GetDialysisScheduals(orgID, ymdDate.Unix()) if getSchedulesErr != nil { this.ErrorLog("获取排班信息失败:%v", getSchedulesErr) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } zones, getZonesErr := service.GetAllValidDeviceZones(orgID) if getZonesErr != nil { this.ErrorLog("获取全部分区失败:%v", getZonesErr) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } this.ServeSuccessJSON(map[string]interface{}{ "schedules": schedules, "zones": zones, }) } // /api/dialysis/schedules [get] // @param date:string (yyyy-mm-dd) func (this *DialysisRecordAPIController) GetSchedules() { schedualDate := this.GetString("date") date, parseDateErr := utils.ParseTimeStringToTime("2006-01-02", schedualDate) if parseDateErr != nil { this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } adminInfo := this.GetAdminUserInfo() orgID := adminInfo.CurrentOrgId schedules, err := service.GetDialysisScheduals(orgID, date.Unix()) if err != nil { this.ErrorLog("获取排班信息失败:%v", err) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) } else { this.ServeSuccessJSON(map[string]interface{}{ "schedules": schedules, }) } } // /api/dislysis/schedule [get] // @param patient_id:int // @param date:string (yyyy-MM-dd) func (this *DialysisRecordAPIController) DialysisSchedule() { patientID, _ := this.GetInt64("patient_id") recordDateStr := this.GetString("date") if patientID <= 0 { this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } if len(recordDateStr) == 0 { recordDateStr = time.Now().Format("2006-01-02") } date, parseDateErr := utils.ParseTimeStringToTime("2006-01-02", recordDateStr) if parseDateErr != nil { this.ErrorLog("日期(%v)解析错误:%v", recordDateStr, parseDateErr) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } adminInfo := this.GetAdminUserInfo() patient, getPatientErr := service.MobileGetPatientDetail(adminInfo.CurrentOrgId, patientID) if getPatientErr != nil { this.ErrorLog("获取患者信息失败:%v", getPatientErr) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } else if patient == nil { this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodePatientNoExist) return } schedual, getSchedualErr := service.MobileGetSchedualDetail(adminInfo.CurrentOrgId, patientID, date.Unix()) if getSchedualErr != nil { this.ErrorLog("获取患者排班信息失败:%v", getSchedualErr) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } receiverTreatmentAccess, getRTARErr := service.MobileGetReceiverTreatmentAccessRecord(adminInfo.CurrentOrgId, patientID, date.Unix()) if getRTARErr != nil { this.ErrorLog("获取接诊评估失败:%v", getRTARErr) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } predialysisEvaluation, getPEErr := service.MobileGetPredialysisEvaluation(adminInfo.CurrentOrgId, patientID, date.Unix()) fmt.Println("predialysisEvaluatiotion", predialysisEvaluation) if getPEErr != nil { this.ErrorLog("获取透前评估失败:%v", getPEErr) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } doctorAdvices, getDoctorAdvicesErr := service.MobileGetDoctorAdvices(adminInfo.CurrentOrgId, patientID, date.Unix()) if getDoctorAdvicesErr != nil { this.ErrorLog("获取临时医嘱失败:%v", getDoctorAdvicesErr) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } dialysisOrder, getDialysisOrderErr := service.MobileGetSchedualDialysisRecord(adminInfo.CurrentOrgId, patientID, date.Unix()) if getDialysisOrderErr != nil { this.ErrorLog("获取透析记录失败:%v", getDialysisOrderErr) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } doubleCheck, getDoubleCheckErr := service.MobileGetDoubleCheck(adminInfo.CurrentOrgId, patientID, date.Unix()) if getDoubleCheckErr != nil { this.ErrorLog("获取双人核对记录失败:%v", getDoubleCheckErr) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } monitorRecords, getMonitorRecordsErr := service.MobileGetMonitorRecords(adminInfo.CurrentOrgId, patientID, date.Unix()) if getMonitorRecordsErr != nil { this.ErrorLog("获取透析监测记录失败:%v", getMonitorRecordsErr) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } assessmentAfterDislysis, getAADErr := service.MobileGetAssessmentAfterDislysis(adminInfo.CurrentOrgId, patientID, date.Unix()) if getAADErr != nil { this.ErrorLog("获取透后评估失败:%v", getAADErr) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } treatmentSummary, getTreatmentSummaryErr := service.MobileGetTreatmentSummary(adminInfo.CurrentOrgId, patientID, date.Unix()) if getTreatmentSummaryErr != nil { this.ErrorLog("获取治疗小结失败:%v", getTreatmentSummaryErr) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } admins, getAdminsErr := service.GetAllAdminUsers(adminInfo.CurrentOrgId, adminInfo.CurrentAppId) if getAdminsErr != nil { this.ErrorLog("获取医护列表失败:%v", getAdminsErr) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } devices, getDevicesErr := service.GetValidDevicesBy(adminInfo.CurrentOrgId, 0, 0) if getDevicesErr != nil { this.ErrorLog("获取设备列表失败:%v", getDevicesErr) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } deviceNumbers, getDeviceNumbersErr := service.GetAllValidDeviceNumbers(adminInfo.CurrentOrgId) if getDeviceNumbersErr != nil { this.ErrorLog("获取床位号列表失败:%v", getDeviceNumbersErr) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } lastPredialysisEvaluation, getLPEErr := service.GetLastTimePredialysisEvaluation(adminInfo.CurrentOrgId, patientID, date.Unix()) if getLPEErr != nil { this.ErrorLog("获取上一次透前评估失败:%v", getLPEErr) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } var lastMonitorRecord *models.MonitoringRecord lastMonitorRecord, getLastErr := service.GetLastMonitorRecord(adminInfo.CurrentOrgId, patientID, date.Unix()) if getLastErr != nil { this.ErrorLog("获取上一次透析的监测记录失败:%v", getLastErr) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } lastAssessmentAfterDislysis, getLAADErr := service.GetLastTimeAssessmentAfterDislysis(adminInfo.CurrentOrgId, patientID, date.Unix()) if getLAADErr != nil { this.ErrorLog("获取上一次透后评估失败:%v", getLAADErr) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } dialysisPrescribe, getDialysisPrescribeErr := service.GetDialysisPrescribe(adminInfo.CurrentOrgId, patientID, date.Unix()) if getDialysisPrescribeErr != nil { this.ErrorLog("获取透析处方失败:%v", getDialysisPrescribeErr) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } dialysisSolution, getDialysisSolutionErr := service.GetDialysisSolution(adminInfo.CurrentOrgId, patientID, schedual.ModeId) if getDialysisSolutionErr != nil { this.ErrorLog("获取透析方案失败:%v", getDialysisSolutionErr) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } lastDialysisPrescribe, getDialysisPrescribeErr := service.GetLastDialysisPrescribeByModeId(adminInfo.CurrentOrgId, patientID, schedual.ModeId) if getDialysisPrescribeErr != nil { this.ErrorLog("获取透析处方失败:%v", getDialysisPrescribeErr) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } systemDialysisPrescribe, getSystemDialysisPrescribeErr := service.GetSystemDialysisPrescribeByModeId(adminInfo.CurrentOrgId, schedual.ModeId) if getSystemDialysisPrescribeErr != nil { this.ErrorLog("获取系统透析处方失败:%v", getSystemDialysisPrescribeErr) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } if getLPEErr != nil { this.ErrorLog("获取上一次透前评估失败:%v", getLPEErr) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } lastDryWeightDislysis, getDryErr := service.GetLastDryWeight(adminInfo.CurrentOrgId, patientID) if getDryErr != nil { this.ErrorLog("获取最后一条干体重失败:%v", getDryErr) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } headNurses, _ := service.GetAllSpecialPermissionAdminUsersWithoutStatus(adminInfo.CurrentOrgId, adminInfo.CurrentAppId, models.SpecialPermissionTypeHeadNurse) _, record := service.FindAutomaticReduceRecordByOrgId(adminInfo.CurrentOrgId) if record.IsOpen == 1 { niprocart_good_type_id, _ := beego.AppConfig.Int64("niprocart") jms_good_type_id, _ := beego.AppConfig.Int64("jms") fistula_needle_set_good_type_id, _ := beego.AppConfig.Int64("fistula_needle_set") fistula_needle_set_16_good_type_id, _ := beego.AppConfig.Int64("fistula_needle_set_16") hemoperfusion_good_type_id, _ := beego.AppConfig.Int64("hemoperfusion") dialyser_sterilised_good_type_id, _ := beego.AppConfig.Int64("dialyser_sterilised") filtryzer_good_type_id, _ := beego.AppConfig.Int64("filtryzer") dialyzers_good_type_id, _ := beego.AppConfig.Int64("dialyzers") injector_good_type_id, _ := beego.AppConfig.Int64("injector") bloodlines_good_type_id, _ := beego.AppConfig.Int64("bloodlines") tubingHemodialysis_good_type_id, _ := beego.AppConfig.Int64("tubingHemodialysis") safe_package_good_type_id, _ := beego.AppConfig.Int64("package") aliquid_good_type_id, _ := beego.AppConfig.Int64("aliquid") niprocart_info, _ := service.FindWarehouseInfoByGoodType(niprocart_good_type_id, adminInfo.CurrentOrgId) jms_info, _ := service.FindWarehouseInfoByGoodType(jms_good_type_id, adminInfo.CurrentOrgId) fistula_needle_set_info, _ := service.FindWarehouseInfoByGoodType(fistula_needle_set_good_type_id, adminInfo.CurrentOrgId) fistula_needle_set_16_info, _ := service.FindWarehouseInfoByGoodType(fistula_needle_set_16_good_type_id, adminInfo.CurrentOrgId) hemoperfusion_info, _ := service.FindWarehouseInfoByGoodType(hemoperfusion_good_type_id, adminInfo.CurrentOrgId) dialyser_sterilised_info, _ := service.FindWarehouseInfoByGoodType(dialyser_sterilised_good_type_id, adminInfo.CurrentOrgId) filtryzer_info, _ := service.FindWarehouseInfoByGoodType(filtryzer_good_type_id, adminInfo.CurrentOrgId) dialyzers_info, _ := service.FindWarehouseInfoByGoodType(dialyzers_good_type_id, adminInfo.CurrentOrgId) injector_info, _ := service.FindWarehouseInfoByGoodType(injector_good_type_id, adminInfo.CurrentOrgId) bloodlines_info, _ := service.FindWarehouseInfoByGoodType(bloodlines_good_type_id, adminInfo.CurrentOrgId) tubingHemodialysis_info, _ := service.FindWarehouseInfoByGoodType(tubingHemodialysis_good_type_id, adminInfo.CurrentOrgId) safe_package_info, _ := service.FindWarehouseInfoByGoodType(safe_package_good_type_id, adminInfo.CurrentOrgId) aliquid_info, _ := service.FindWarehouseInfoByGoodType(aliquid_good_type_id, adminInfo.CurrentOrgId) returnData := map[string]interface{}{ "patient": patient, "schedual": schedual, "prescription": dialysisPrescribe, "solution": dialysisSolution, "receiver_treatment_access": receiverTreatmentAccess, "predialysis_evaluation": predialysisEvaluation, "doctor_advices": doctorAdvices, "double_check": doubleCheck, "assessment_after_dislysis": assessmentAfterDislysis, "treatment_summary": treatmentSummary, "monitor_records": monitorRecords, "dialysis_order": dialysisOrder, "doctors": admins, "devices": devices, "device_numbers": deviceNumbers, "niprocart_info": niprocart_info, "jms_info": jms_info, "fistula_needle_set_info": fistula_needle_set_info, "fistula_needle_set_16_info": fistula_needle_set_16_info, "hemoperfusion_info": hemoperfusion_info, "dialyser_sterilised_info": dialyser_sterilised_info, "filtryzer_info": filtryzer_info, "dialyzers_info": dialyzers_info, "injector_info": injector_info, "bloodlines_info": bloodlines_info, "tubingHemodialysis_info": tubingHemodialysis_info, "safe_package_info": safe_package_info, "aliquid_info": aliquid_info, "config": record, "lastPredialysisEvaluation": lastPredialysisEvaluation, "lastMonitorRecord": lastMonitorRecord, "lastAssessmentAfterDislysis": lastAssessmentAfterDislysis, "lastDialysisPrescribe": lastDialysisPrescribe, "lastDryWeightDislysis": lastDryWeightDislysis, "headNurses": headNurses, "system_prescribe": systemDialysisPrescribe, } this.ServeSuccessJSON(returnData) } else { returnData := map[string]interface{}{ "patient": patient, "schedual": schedual, "prescription": dialysisPrescribe, "solution": dialysisSolution, "receiver_treatment_access": receiverTreatmentAccess, "predialysis_evaluation": predialysisEvaluation, "doctor_advices": doctorAdvices, "double_check": doubleCheck, "assessment_after_dislysis": assessmentAfterDislysis, "treatment_summary": treatmentSummary, "monitor_records": monitorRecords, "dialysis_order": dialysisOrder, "doctors": admins, "devices": devices, "device_numbers": deviceNumbers, "lastPredialysisEvaluation": lastPredialysisEvaluation, "lastMonitorRecord": lastMonitorRecord, "lastAssessmentAfterDislysis": lastAssessmentAfterDislysis, "lastDialysisPrescribe": lastDialysisPrescribe, "lastDryWeightDislysis": lastDryWeightDislysis, "headNurses": headNurses, "system_prescribe": systemDialysisPrescribe, } this.ServeSuccessJSON(returnData) } } type EditMonitorParamObject struct { ID int64 `json:"id"` MonitoringDate int64 `json:"monitoring_date"` OperateTime int64 `json:"operate_time"` // MonitoringTime string `json:"monitoring_time"` SystolicBP float64 `json:"systolic_bp"` DiastolicBP float64 `json:"diastolic_bp"` PulseFrequency float64 `json:"pulse_frequency"` BreathingRated float64 `json:"breathing_rated"` BloodFlowVolume float64 `json:"blood_flow_volume"` VenousPressure float64 `json:"venous_pressure"` TransmembranePressure float64 `json:"transmembrane_pressure"` UltrafiltrationVolume float64 `json:"ultrafiltration_volume"` UltrafiltrationRate float64 `json:"ultrafiltration_rate"` ArterialPressure float64 `json:"arterial_pressure"` SodiumConcentration float64 `json:"sodium_concentration"` DialysateTemperature float64 `json:"dialysate_temperature"` Temperature float64 `json:"temperature"` ReplacementRate float64 `json:"replacement_rate"` DisplacementQuantity float64 `json:"displacement_quantity"` KTV float64 `json:"ktv"` Symptom string `json:"symptom"` Dispose string `json:"dispose"` Result string `json:"result"` Conductivity float64 `json:"conductivity"` DisplacementFlowQuantity float64 `json:"displacement_flow_quantity"` BloodOxygenSaturation string `gorm:"column:blood_oxygen_saturation" json:"blood_oxygen_saturation" form:"blood_oxygen_saturation"` Heparin float64 `gorm:"column:heparin" json:"heparin" form:"heparin"` DialysateFlow float64 `gorm:"column:dialysate_flow" json:"dialysate_flow" form:"dialysate_flow"` } // /api/dislysis/monitor/edit [post] // @param patient_id:int 患者id // @param schedule_date:int 排班日期 // 下面的参数放到 body // @param id?:int 监测记录ID(id为0时为创建记录,不为0时为修改记录) // @param monitoring_date:int 排班日期 // @param operate_time:int 实际测量日期 // @param monitoring_time:string (HH:mm) 监测时间 废弃 // @param systolic_bp?:float 收缩压 // @param diastolic_bp?:float 舒张压 // @param pulse_frequency?:float 心率 // @param breathing_rated?:float 呼吸频率 // @param blood_flow_volume?:float 血流量 // @param venous_pressure?:float 静脉压 // @param transmembrane_pressure?:float 跨膜压 // @param ultrafiltration_volume?:float 超滤量 // @param ultrafiltration_rate?:float 超滤率 // @param arterial_pressure?:float 动脉压 // @param sodium_concentration?:float 钠浓度 // @param dialysate_temperature?:float 透析液温度 // @param replacement_rate?:float 置换率 // @param displacement_quantity?:float 置换量 // @param ktv?:float KT/V // @param symptom?:string 病情变化 // @param dispose?:string 处理 // @param result?:string 结果 func (this *DialysisRecordAPIController) EditMonitor() { patientID, _ := this.GetInt64("patient_id") scheduleDate, _ := this.GetInt64("schedule_date") if patientID <= 0 || scheduleDate <= 0 { this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } var monitorParam EditMonitorParamObject if parseErr := json.Unmarshal(this.Ctx.Input.RequestBody, &monitorParam); parseErr != nil { this.ErrorLog("参数解析失败:%v", parseErr) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamFormatWrong) return } if monitorParam.MonitoringDate != scheduleDate { this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } adminUserInfo := this.GetAdminUserInfo() schedule, getScheduleErr := service.MobileGetSchedualDetail(adminUserInfo.CurrentOrgId, patientID, scheduleDate) if getScheduleErr != nil { this.ErrorLog("获取排班信息失败:%v", getScheduleErr) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } else if schedule == nil { this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeScheduleNotExist) return } // TODO 其实这里合理的逻辑是“透析记录存在的情况下才能添加监测记录的” dialysisOrder, getDialysisOrderErr := service.MobileGetDialysisRecord(adminUserInfo.CurrentOrgId, patientID, scheduleDate) if getDialysisOrderErr != nil { this.ErrorLog("获取透析记录失败:%v", getDialysisOrderErr) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } orderID := int64(0) if dialysisOrder != nil { orderID = dialysisOrder.ID } if monitorParam.ID <= 0 { // 新建记录 monitor := models.MonitoringRecord{ UserOrgId: adminUserInfo.CurrentOrgId, PatientId: patientID, DialysisOrderId: orderID, MonitoringDate: monitorParam.MonitoringDate, OperateTime: monitorParam.OperateTime, // MonitoringTime: monitorParam.MonitoringTime, PulseFrequency: monitorParam.PulseFrequency, BreathingRate: monitorParam.BreathingRated, SystolicBloodPressure: monitorParam.SystolicBP, DiastolicBloodPressure: monitorParam.DiastolicBP, BloodFlowVolume: monitorParam.BloodFlowVolume, VenousPressure: monitorParam.VenousPressure, ArterialPressure: monitorParam.ArterialPressure, TransmembranePressure: monitorParam.TransmembranePressure, UltrafiltrationRate: monitorParam.UltrafiltrationRate, UltrafiltrationVolume: monitorParam.UltrafiltrationVolume, SodiumConcentration: monitorParam.SodiumConcentration, DialysateTemperature: monitorParam.DialysateTemperature, Temperature: monitorParam.Temperature, ReplacementRate: monitorParam.ReplacementRate, DisplacementQuantity: monitorParam.DisplacementQuantity, Ktv: monitorParam.KTV, Symptom: monitorParam.Symptom, Dispose: monitorParam.Dispose, Result: monitorParam.Result, MonitoringNurse: adminUserInfo.AdminUser.Id, Conductivity: monitorParam.Conductivity, DisplacementFlowQuantity: monitorParam.DisplacementFlowQuantity, Status: 1, CreatedTime: time.Now().Unix(), UpdatedTime: time.Now().Unix(), BloodOxygenSaturation: monitorParam.BloodOxygenSaturation, Creator: adminUserInfo.AdminUser.Id, Heparin: monitorParam.Heparin, DialysateFlow: monitorParam.DialysateFlow, } createErr := service.CreateMonitor(&monitor) if createErr != nil { this.ErrorLog("创建监测记录失败:%v", createErr) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } this.ServeSuccessJSON(map[string]interface{}{ "monitor": monitor, }) } else { // 修改记录 monitor, getMonitorErr := service.GetMonitor(adminUserInfo.CurrentOrgId, patientID, monitorParam.ID) if getMonitorErr != nil { this.ErrorLog("获取透析监测记录失败:%v", getMonitorErr) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } else if monitor == nil { this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeMonitorNotExist) return } //if monitor.MonitoringNurse != adminUserInfo.AdminUser.Id { // headNursePermission, getPermissionErr := service.GetAdminUserSpecialPermission(adminUserInfo.CurrentOrgId, adminUserInfo.CurrentAppId, adminUserInfo.AdminUser.Id, models.SpecialPermissionTypeHeadNurse) // if getPermissionErr != nil { // this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) // return // } else if headNursePermission == nil { // this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDialysisPermissionDeniedModify) // return // } //} monitor.OperateTime = monitorParam.OperateTime monitor.PulseFrequency = monitorParam.PulseFrequency monitor.BreathingRate = monitorParam.BreathingRated monitor.SystolicBloodPressure = monitorParam.SystolicBP monitor.DiastolicBloodPressure = monitorParam.DiastolicBP monitor.BloodFlowVolume = monitorParam.BloodFlowVolume monitor.VenousPressure = monitorParam.VenousPressure monitor.ArterialPressure = monitorParam.ArterialPressure monitor.TransmembranePressure = monitorParam.TransmembranePressure monitor.UltrafiltrationRate = monitorParam.UltrafiltrationRate monitor.UltrafiltrationVolume = monitorParam.UltrafiltrationVolume monitor.SodiumConcentration = monitorParam.SodiumConcentration monitor.DialysateTemperature = monitorParam.DialysateTemperature monitor.Temperature = monitorParam.Temperature monitor.ReplacementRate = monitorParam.ReplacementRate monitor.DisplacementQuantity = monitorParam.DisplacementQuantity monitor.Conductivity = monitorParam.Conductivity monitor.DisplacementFlowQuantity = monitorParam.DisplacementFlowQuantity monitor.Ktv = monitorParam.KTV monitor.Symptom = monitorParam.Symptom monitor.Dispose = monitorParam.Dispose monitor.Result = monitorParam.Result monitor.MonitoringNurse = adminUserInfo.AdminUser.Id monitor.UpdatedTime = time.Now().Unix() monitor.Modify = adminUserInfo.AdminUser.Id monitor.BloodOxygenSaturation = monitorParam.BloodOxygenSaturation monitor.Heparin = monitorParam.Heparin monitor.DialysateFlow = monitorParam.DialysateFlow updateErr := service.UpdateMonitor(monitor) if updateErr != nil { this.ErrorLog("修改透析监测记录失败:%v", updateErr) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } this.ServeSuccessJSON(map[string]interface{}{ "monitor": monitor, }) } } // /api/dialysis/start_record [post] // @param patient_id:int // @param date:string 排班时间 (yyyy-mm-dd) // @param nurse:int 上机护士 // @param bed:int 上机床位号 func (this *DialysisRecordAPIController) StartDialysis() { patientID, _ := this.GetInt64("patient_id") recordDateStr := this.GetString("date") nurseID, _ := this.GetInt64("nurse") punctureNurseId, _ := this.GetInt64("puncture_nurse") startDateStr := this.GetString("start_time") blood_drawing, _ := this.GetInt64("blood_drawing") schedual_type, _ := this.GetInt64("schedual_type") bedID, _ := this.GetInt64("bed") if patientID <= 0 || len(recordDateStr) == 0 || nurseID <= 0 || bedID <= 0 { this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } recordDate, parseErr := utils.ParseTimeStringToTime("2006-01-02", recordDateStr) if parseErr != nil { this.ErrorLog("时间解析失败:%v", parseErr) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } startDate, parseErr := utils.ParseTimeStringToTime("2006-01-02 15:04", startDateStr) if parseErr != nil { this.ErrorLog("时间解析失败:%v", parseErr) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } adminUserInfo := this.GetAdminUserInfo() patient, getPatientErr := service.MobileGetPatientById(adminUserInfo.CurrentOrgId, patientID) if getPatientErr != nil { this.ErrorLog("获取患者信息失败:%v", getPatientErr) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } else if patient == nil { this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodePatientNoExist) return } nurse, getNurseErr := service.GetAdminUserByUserID(nurseID) if getNurseErr != nil { this.ErrorLog("获取护士失败:%v", getNurseErr) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } else if nurse == nil { this.ErrorLog("护士不存在") this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } nurse, getNurseErr = service.GetAdminUserByUserID(punctureNurseId) if getNurseErr != nil { this.ErrorLog("获取护士失败:%v", getNurseErr) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } else if nurse == nil { this.ErrorLog("护士不存在") this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } deviceNumber, getDeviceNumberErr := service.GetDeviceNumberByID(adminUserInfo.CurrentOrgId, bedID) if getDeviceNumberErr != nil { this.ErrorLog("获取床位号失败:%v", getDeviceNumberErr) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } else if deviceNumber == nil { this.ErrorLog("床位号不存在") this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } dialysisRecord, getRecordErr := service.MobileGetDialysisRecord(adminUserInfo.CurrentOrgId, patientID, recordDate.Unix()) if getRecordErr != nil { this.ErrorLog("获取透析记录失败:%v", getRecordErr) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } else if dialysisRecord != nil { this.ServeFailJSONWithSGJErrorCode(enums.ErrorDialysisOrderRepeatStart) return } template, _ := service.GetOrgInfoTemplate(adminUserInfo.CurrentOrgId) //是否启动自动扣减功能 _, config := service.FindAutomaticReduceRecordByOrgId(adminUserInfo.CurrentOrgId) //启动的话 if config.IsOpen == 1 { niprocart, _ := beego.AppConfig.Int64("niprocart") jms, _ := beego.AppConfig.Int64("jms") fistula_needle_set, _ := beego.AppConfig.Int64("fistula_needle_set") fistula_needle_set_16, _ := beego.AppConfig.Int64("fistula_needle_set_16") hemoperfusion, _ := beego.AppConfig.Int64("hemoperfusion") dialyser_sterilised, _ := beego.AppConfig.Int64("dialyser_sterilised") filtryzer, _ := beego.AppConfig.Int64("filtryzer") dialyzers, _ := beego.AppConfig.Int64("dialyzers") injector, _ := beego.AppConfig.Int64("injector") bloodlines, _ := beego.AppConfig.Int64("bloodlines") tubingHemodialysis, _ := beego.AppConfig.Int64("tubingHemodialysis") safe_package, _ := beego.AppConfig.Int64("package") aliquid, _ := beego.AppConfig.Int64("aliquid") //库存自动扣减功能 _, prescription := service.FindDialysisPrescriptionByReordDate(patientID, recordDate.Unix(), adminUserInfo.CurrentOrgId) if prescription.ID > 0 { out, err := service.FindStockOutByIsSys(adminUserInfo.CurrentOrgId, 1, recordDate.Unix()) if err == gorm.ErrRecordNotFound { //没有记录,则创建出库单 timeStr := time.Now().Format("2006-01-02") timeArr := strings.Split(timeStr, "-") total, _ := service.FindAllWarehouseOut(adminUserInfo.CurrentOrgId) total = total + 1 warehousing_out_order := strconv.FormatInt(adminUserInfo.CurrentOrgId, 10) + timeArr[0] + timeArr[1] + timeArr[2] + "000" number, _ := strconv.ParseInt(warehousing_out_order, 10, 64) number = number + total warehousing_out_order = "CKD" + strconv.FormatInt(number, 10) creater := adminUserInfo.AdminUser.Id warehouseOut := models.WarehouseOut{ WarehouseOutOrderNumber: warehousing_out_order, OperationTime: time.Now().Unix(), OrgId: adminUserInfo.CurrentOrgId, Creater: creater, Ctime: time.Now().Unix(), Status: 1, WarehouseOutTime: recordDate.Unix(), Dealer: 0, Manufacturer: 0, Type: 1, IsSys: 1, } err := service.AddSigleWarehouseOut(&warehouseOut) if err != nil { utils.TraceLog("创建出库单失败 err = %v", err) } else { if prescription.Niprocart > 0 { warehouseOutInfo := &models.WarehouseOutInfo{ WarehouseOutOrderNumber: warehouseOut.WarehouseOutOrderNumber, WarehouseOutId: warehouseOut.ID, Count: 1, Status: 1, Ctime: time.Now().Unix(), Remark: "", OrgId: adminUserInfo.CurrentOrgId, Type: 1, Manufacturer: 0, Dealer: 0, IsSys: 1, SysRecordTime: startDate.Unix(), } //查出入库记录中最后一条记录 stockInInfo, _ := service.FindLastStockInInfoRecord(prescription.Niprocart, adminUserInfo.CurrentOrgId) warehouseOutInfo.Price = stockInInfo.Price warehouseOutInfo.GoodId = prescription.Niprocart warehouseOutInfo.GoodTypeId = niprocart err := service.AddSigleWarehouseOutInfo(warehouseOutInfo) if err == nil { details := &models.AutomaticReduceDetail{ WarehouseOutId: warehouseOutInfo.ID, WarehouseOutOrderNumber: warehouseOutInfo.WarehouseOutOrderNumber, PatientId: patientID, Ctime: time.Now().Unix(), Mtime: time.Now().Unix(), Status: 1, RecordTime: startDate.Unix(), OrgId: adminUserInfo.CurrentOrgId, GoodId: prescription.Niprocart, GoodTypeId: niprocart, } service.AddSigleAutoReduceRecordInfo(details) } } if prescription.Jms > 0 { warehouseOutInfo := &models.WarehouseOutInfo{ WarehouseOutOrderNumber: warehouseOut.WarehouseOutOrderNumber, WarehouseOutId: warehouseOut.ID, Count: 1, Status: 1, Ctime: time.Now().Unix(), Remark: "", OrgId: adminUserInfo.CurrentOrgId, Type: 1, Manufacturer: 0, Dealer: 0, IsSys: 1, SysRecordTime: startDate.Unix(), } stockInInfo, _ := service.FindLastStockInInfoRecord(prescription.Jms, adminUserInfo.CurrentOrgId) warehouseOutInfo.Price = stockInInfo.Price warehouseOutInfo.GoodId = prescription.Jms warehouseOutInfo.GoodTypeId = jms err := service.AddSigleWarehouseOutInfo(warehouseOutInfo) if err == nil { details := &models.AutomaticReduceDetail{ WarehouseOutId: warehouseOutInfo.ID, WarehouseOutOrderNumber: warehouseOutInfo.WarehouseOutOrderNumber, PatientId: patientID, Ctime: time.Now().Unix(), Mtime: time.Now().Unix(), Status: 1, RecordTime: startDate.Unix(), OrgId: adminUserInfo.CurrentOrgId, GoodId: prescription.Jms, GoodTypeId: jms, } service.AddSigleAutoReduceRecordInfo(details) } } if prescription.FistulaNeedleSet > 0 { warehouseOutInfo := &models.WarehouseOutInfo{ WarehouseOutOrderNumber: warehouseOut.WarehouseOutOrderNumber, WarehouseOutId: warehouseOut.ID, Count: 1, Status: 1, Ctime: time.Now().Unix(), Remark: "", OrgId: adminUserInfo.CurrentOrgId, Type: 1, Manufacturer: 0, Dealer: 0, IsSys: 1, SysRecordTime: startDate.Unix(), } stockInInfo, _ := service.FindLastStockInInfoRecord(prescription.FistulaNeedleSet, adminUserInfo.CurrentOrgId) warehouseOutInfo.Price = stockInInfo.Price warehouseOutInfo.GoodId = prescription.FistulaNeedleSet warehouseOutInfo.GoodTypeId = fistula_needle_set err := service.AddSigleWarehouseOutInfo(warehouseOutInfo) if err == nil { details := &models.AutomaticReduceDetail{ WarehouseOutId: warehouseOutInfo.ID, WarehouseOutOrderNumber: warehouseOutInfo.WarehouseOutOrderNumber, PatientId: patientID, Ctime: time.Now().Unix(), Mtime: time.Now().Unix(), Status: 1, RecordTime: startDate.Unix(), OrgId: adminUserInfo.CurrentOrgId, GoodId: prescription.FistulaNeedleSet, GoodTypeId: fistula_needle_set, } service.AddSigleAutoReduceRecordInfo(details) } } if prescription.FistulaNeedleSet16 > 0 { warehouseOutInfo := &models.WarehouseOutInfo{ WarehouseOutOrderNumber: warehouseOut.WarehouseOutOrderNumber, WarehouseOutId: warehouseOut.ID, Count: 1, Status: 1, Ctime: time.Now().Unix(), Remark: "", OrgId: adminUserInfo.CurrentOrgId, Type: 1, Manufacturer: 0, Dealer: 0, IsSys: 1, SysRecordTime: startDate.Unix(), } stockInInfo, _ := service.FindLastStockInInfoRecord(prescription.FistulaNeedleSet16, adminUserInfo.CurrentOrgId) warehouseOutInfo.Price = stockInInfo.Price warehouseOutInfo.GoodId = prescription.FistulaNeedleSet16 warehouseOutInfo.GoodTypeId = fistula_needle_set_16 err := service.AddSigleWarehouseOutInfo(warehouseOutInfo) if err == nil { details := &models.AutomaticReduceDetail{ WarehouseOutId: warehouseOutInfo.ID, WarehouseOutOrderNumber: warehouseOutInfo.WarehouseOutOrderNumber, PatientId: patientID, Ctime: time.Now().Unix(), Mtime: time.Now().Unix(), Status: 1, RecordTime: startDate.Unix(), OrgId: adminUserInfo.CurrentOrgId, GoodId: prescription.FistulaNeedleSet16, GoodTypeId: fistula_needle_set_16, } service.AddSigleAutoReduceRecordInfo(details) } } if prescription.Hemoperfusion > 0 { warehouseOutInfo := &models.WarehouseOutInfo{ WarehouseOutOrderNumber: warehouseOut.WarehouseOutOrderNumber, WarehouseOutId: warehouseOut.ID, Count: 1, Status: 1, Ctime: time.Now().Unix(), Remark: "", OrgId: adminUserInfo.CurrentOrgId, Type: 1, Manufacturer: 0, Dealer: 0, IsSys: 1, SysRecordTime: startDate.Unix(), } stockInInfo, _ := service.FindLastStockInInfoRecord(prescription.Hemoperfusion, adminUserInfo.CurrentOrgId) warehouseOutInfo.Price = stockInInfo.Price warehouseOutInfo.GoodId = prescription.Hemoperfusion warehouseOutInfo.GoodTypeId = hemoperfusion err := service.AddSigleWarehouseOutInfo(warehouseOutInfo) if err == nil { details := &models.AutomaticReduceDetail{ WarehouseOutId: warehouseOutInfo.ID, WarehouseOutOrderNumber: warehouseOutInfo.WarehouseOutOrderNumber, PatientId: patientID, Ctime: time.Now().Unix(), Mtime: time.Now().Unix(), Status: 1, RecordTime: startDate.Unix(), OrgId: adminUserInfo.CurrentOrgId, GoodId: prescription.Hemoperfusion, GoodTypeId: hemoperfusion, } service.AddSigleAutoReduceRecordInfo(details) } } if prescription.DialyserSterilised > 0 { warehouseOutInfo := &models.WarehouseOutInfo{ WarehouseOutOrderNumber: warehouseOut.WarehouseOutOrderNumber, WarehouseOutId: warehouseOut.ID, Count: 1, Status: 1, Ctime: time.Now().Unix(), Remark: "", OrgId: adminUserInfo.CurrentOrgId, Type: 1, Manufacturer: 0, Dealer: 0, IsSys: 1, SysRecordTime: startDate.Unix(), } stockInInfo, _ := service.FindLastStockInInfoRecord(prescription.DialyserSterilised, adminUserInfo.CurrentOrgId) warehouseOutInfo.Price = stockInInfo.Price warehouseOutInfo.GoodId = prescription.DialyserSterilised warehouseOutInfo.GoodTypeId = dialyser_sterilised err := service.AddSigleWarehouseOutInfo(warehouseOutInfo) if err == nil { details := &models.AutomaticReduceDetail{ WarehouseOutId: warehouseOutInfo.ID, WarehouseOutOrderNumber: warehouseOutInfo.WarehouseOutOrderNumber, PatientId: patientID, Ctime: time.Now().Unix(), Mtime: time.Now().Unix(), Status: 1, RecordTime: startDate.Unix(), OrgId: adminUserInfo.CurrentOrgId, GoodId: prescription.DialyserSterilised, GoodTypeId: dialyser_sterilised, } service.AddSigleAutoReduceRecordInfo(details) } } if prescription.Filtryzer > 0 { warehouseOutInfo := &models.WarehouseOutInfo{ WarehouseOutOrderNumber: warehouseOut.WarehouseOutOrderNumber, WarehouseOutId: warehouseOut.ID, Count: 1, Status: 1, Ctime: time.Now().Unix(), Remark: "", OrgId: adminUserInfo.CurrentOrgId, Type: 1, Manufacturer: 0, Dealer: 0, IsSys: 1, SysRecordTime: startDate.Unix(), } stockInInfo, _ := service.FindLastStockInInfoRecord(prescription.Filtryzer, adminUserInfo.CurrentOrgId) warehouseOutInfo.Price = stockInInfo.Price warehouseOutInfo.GoodId = prescription.Filtryzer warehouseOutInfo.GoodTypeId = filtryzer err := service.AddSigleWarehouseOutInfo(warehouseOutInfo) if err == nil { details := &models.AutomaticReduceDetail{ WarehouseOutId: warehouseOutInfo.ID, WarehouseOutOrderNumber: warehouseOutInfo.WarehouseOutOrderNumber, PatientId: patientID, Ctime: time.Now().Unix(), Mtime: time.Now().Unix(), Status: 1, RecordTime: startDate.Unix(), OrgId: adminUserInfo.CurrentOrgId, GoodId: prescription.Filtryzer, GoodTypeId: filtryzer, } service.AddSigleAutoReduceRecordInfo(details) } } if prescription.Dialyzers > 0 { warehouseOutInfo := &models.WarehouseOutInfo{ WarehouseOutOrderNumber: warehouseOut.WarehouseOutOrderNumber, WarehouseOutId: warehouseOut.ID, Count: 1, Status: 1, Ctime: time.Now().Unix(), Remark: "", OrgId: adminUserInfo.CurrentOrgId, Type: 1, Manufacturer: 0, Dealer: 0, IsSys: 1, SysRecordTime: startDate.Unix(), } stockInInfo, _ := service.FindLastStockInInfoRecord(prescription.Dialyzers, adminUserInfo.CurrentOrgId) warehouseOutInfo.Price = stockInInfo.Price warehouseOutInfo.GoodId = prescription.Dialyzers warehouseOutInfo.GoodTypeId = dialyzers err := service.AddSigleWarehouseOutInfo(warehouseOutInfo) if err == nil { details := &models.AutomaticReduceDetail{ WarehouseOutId: warehouseOutInfo.ID, WarehouseOutOrderNumber: warehouseOutInfo.WarehouseOutOrderNumber, PatientId: patientID, Ctime: time.Now().Unix(), Mtime: time.Now().Unix(), Status: 1, RecordTime: startDate.Unix(), OrgId: adminUserInfo.CurrentOrgId, GoodId: prescription.Dialyzers, GoodTypeId: dialyzers, } service.AddSigleAutoReduceRecordInfo(details) } } if prescription.Injector > 0 { warehouseOutInfo := &models.WarehouseOutInfo{ WarehouseOutOrderNumber: warehouseOut.WarehouseOutOrderNumber, WarehouseOutId: warehouseOut.ID, Count: 1, Status: 1, Ctime: time.Now().Unix(), Remark: "", OrgId: adminUserInfo.CurrentOrgId, Type: 1, Manufacturer: 0, Dealer: 0, IsSys: 1, SysRecordTime: startDate.Unix(), } stockInInfo, _ := service.FindLastStockInInfoRecord(prescription.Injector, adminUserInfo.CurrentOrgId) warehouseOutInfo.Price = stockInInfo.Price warehouseOutInfo.GoodId = prescription.Injector warehouseOutInfo.GoodTypeId = injector err := service.AddSigleWarehouseOutInfo(warehouseOutInfo) if err == nil { details := &models.AutomaticReduceDetail{ WarehouseOutId: warehouseOutInfo.ID, WarehouseOutOrderNumber: warehouseOutInfo.WarehouseOutOrderNumber, PatientId: patientID, Ctime: time.Now().Unix(), Mtime: time.Now().Unix(), Status: 1, RecordTime: startDate.Unix(), OrgId: adminUserInfo.CurrentOrgId, GoodId: prescription.Injector, GoodTypeId: injector, } service.AddSigleAutoReduceRecordInfo(details) } } if prescription.Bloodlines > 0 { warehouseOutInfo := &models.WarehouseOutInfo{ WarehouseOutOrderNumber: warehouseOut.WarehouseOutOrderNumber, WarehouseOutId: warehouseOut.ID, Count: 1, Status: 1, Ctime: time.Now().Unix(), Remark: "", OrgId: adminUserInfo.CurrentOrgId, Type: 1, Manufacturer: 0, Dealer: 0, IsSys: 1, SysRecordTime: startDate.Unix(), } stockInInfo, _ := service.FindLastStockInInfoRecord(prescription.Bloodlines, adminUserInfo.CurrentOrgId) warehouseOutInfo.Price = stockInInfo.Price warehouseOutInfo.GoodId = prescription.Bloodlines warehouseOutInfo.GoodTypeId = bloodlines err := service.AddSigleWarehouseOutInfo(warehouseOutInfo) if err == nil { details := &models.AutomaticReduceDetail{ WarehouseOutId: warehouseOutInfo.ID, WarehouseOutOrderNumber: warehouseOutInfo.WarehouseOutOrderNumber, PatientId: patientID, Ctime: time.Now().Unix(), Mtime: time.Now().Unix(), Status: 1, RecordTime: startDate.Unix(), OrgId: adminUserInfo.CurrentOrgId, GoodId: prescription.Bloodlines, GoodTypeId: bloodlines, } service.AddSigleAutoReduceRecordInfo(details) } } if prescription.TubingHemodialysis > 0 { warehouseOutInfo := &models.WarehouseOutInfo{ WarehouseOutOrderNumber: warehouseOut.WarehouseOutOrderNumber, WarehouseOutId: warehouseOut.ID, Count: 1, Status: 1, Ctime: time.Now().Unix(), Remark: "", OrgId: adminUserInfo.CurrentOrgId, Type: 1, Manufacturer: 0, Dealer: 0, IsSys: 1, SysRecordTime: startDate.Unix(), } stockInInfo, _ := service.FindLastStockInInfoRecord(prescription.TubingHemodialysis, adminUserInfo.CurrentOrgId) warehouseOutInfo.Price = stockInInfo.Price warehouseOutInfo.GoodId = prescription.TubingHemodialysis warehouseOutInfo.GoodTypeId = tubingHemodialysis err := service.AddSigleWarehouseOutInfo(warehouseOutInfo) if err == nil { details := &models.AutomaticReduceDetail{ WarehouseOutId: warehouseOutInfo.ID, WarehouseOutOrderNumber: warehouseOutInfo.WarehouseOutOrderNumber, PatientId: patientID, Ctime: time.Now().Unix(), Mtime: time.Now().Unix(), Status: 1, RecordTime: startDate.Unix(), OrgId: adminUserInfo.CurrentOrgId, GoodId: prescription.TubingHemodialysis, GoodTypeId: tubingHemodialysis, } service.AddSigleAutoReduceRecordInfo(details) } } if prescription.Package > 0 { warehouseOutInfo := &models.WarehouseOutInfo{ WarehouseOutOrderNumber: warehouseOut.WarehouseOutOrderNumber, WarehouseOutId: warehouseOut.ID, Count: 1, Status: 1, Ctime: time.Now().Unix(), Remark: "", OrgId: adminUserInfo.CurrentOrgId, Type: 1, Manufacturer: 0, Dealer: 0, IsSys: 1, SysRecordTime: startDate.Unix(), } stockInInfo, _ := service.FindLastStockInInfoRecord(prescription.Package, adminUserInfo.CurrentOrgId) warehouseOutInfo.Price = stockInInfo.Price warehouseOutInfo.GoodId = prescription.Package warehouseOutInfo.GoodTypeId = safe_package err := service.AddSigleWarehouseOutInfo(warehouseOutInfo) if err == nil { details := &models.AutomaticReduceDetail{ WarehouseOutId: warehouseOutInfo.ID, WarehouseOutOrderNumber: warehouseOutInfo.WarehouseOutOrderNumber, PatientId: patientID, Ctime: time.Now().Unix(), Mtime: time.Now().Unix(), Status: 1, RecordTime: startDate.Unix(), OrgId: adminUserInfo.CurrentOrgId, GoodId: prescription.Package, GoodTypeId: safe_package, } service.AddSigleAutoReduceRecordInfo(details) } } if prescription.ALiquid > 0 { warehouseOutInfo := &models.WarehouseOutInfo{ WarehouseOutOrderNumber: warehouseOut.WarehouseOutOrderNumber, WarehouseOutId: warehouseOut.ID, Count: 1, Status: 1, Ctime: time.Now().Unix(), Remark: "", OrgId: adminUserInfo.CurrentOrgId, Type: 1, Manufacturer: 0, Dealer: 0, IsSys: 1, SysRecordTime: startDate.Unix(), } stockInInfo, _ := service.FindLastStockInInfoRecord(prescription.ALiquid, adminUserInfo.CurrentOrgId) warehouseOutInfo.Price = stockInInfo.Price warehouseOutInfo.GoodId = prescription.ALiquid warehouseOutInfo.GoodTypeId = aliquid err := service.AddSigleWarehouseOutInfo(warehouseOutInfo) if err == nil { details := &models.AutomaticReduceDetail{ WarehouseOutId: warehouseOutInfo.ID, WarehouseOutOrderNumber: warehouseOutInfo.WarehouseOutOrderNumber, PatientId: patientID, Ctime: time.Now().Unix(), Mtime: time.Now().Unix(), Status: 1, RecordTime: startDate.Unix(), OrgId: adminUserInfo.CurrentOrgId, GoodId: prescription.ALiquid, GoodTypeId: aliquid, } service.AddSigleAutoReduceRecordInfo(details) } } } } else if err == nil { if out.ID > 0 { if prescription.Niprocart > 0 { outInfo, err := service.FindStockOutInfoByTypeId(adminUserInfo.CurrentOrgId, niprocart, prescription.Niprocart, out.WarehouseOutOrderNumber) if err == gorm.ErrRecordNotFound { warehouseOutInfo := &models.WarehouseOutInfo{ WarehouseOutOrderNumber: out.WarehouseOutOrderNumber, WarehouseOutId: out.ID, Status: 1, Ctime: time.Now().Unix(), Remark: "", OrgId: adminUserInfo.CurrentOrgId, Type: 1, Manufacturer: 0, Dealer: 0, IsSys: 1, SysRecordTime: startDate.Unix(), } stockInInfo, _ := service.FindLastStockInInfoRecord(prescription.Niprocart, adminUserInfo.CurrentOrgId) warehouseOutInfo.Price = stockInInfo.Price warehouseOutInfo.GoodId = prescription.Niprocart warehouseOutInfo.GoodTypeId = niprocart warehouseOutInfo.Count = 1 err := service.AddSigleWarehouseOutInfo(warehouseOutInfo) if err == nil { details := &models.AutomaticReduceDetail{ WarehouseOutId: warehouseOutInfo.ID, WarehouseOutOrderNumber: warehouseOutInfo.WarehouseOutOrderNumber, PatientId: patientID, Ctime: time.Now().Unix(), Mtime: time.Now().Unix(), Status: 1, RecordTime: startDate.Unix(), OrgId: adminUserInfo.CurrentOrgId, GoodId: prescription.Niprocart, GoodTypeId: niprocart, } service.AddSigleAutoReduceRecordInfo(details) } } else if err == nil { //记录存在,则将数量加1 if outInfo.ID > 0 { service.UpdateStockOutInfoCount(adminUserInfo.CurrentOrgId, outInfo.ID) } details := &models.AutomaticReduceDetail{ WarehouseOutId: outInfo.ID, WarehouseOutOrderNumber: outInfo.WarehouseOutOrderNumber, PatientId: patientID, Ctime: time.Now().Unix(), Mtime: time.Now().Unix(), Status: 1, RecordTime: startDate.Unix(), OrgId: adminUserInfo.CurrentOrgId, GoodId: prescription.Niprocart, GoodTypeId: niprocart, } service.AddSigleAutoReduceRecordInfo(details) } } if prescription.Jms > 0 { outInfo, err := service.FindStockOutInfoByTypeId(adminUserInfo.CurrentOrgId, jms, prescription.Jms, out.WarehouseOutOrderNumber) if err == gorm.ErrRecordNotFound { warehouseOutInfo := &models.WarehouseOutInfo{ WarehouseOutOrderNumber: out.WarehouseOutOrderNumber, WarehouseOutId: out.ID, Status: 1, Ctime: time.Now().Unix(), Remark: "", OrgId: adminUserInfo.CurrentOrgId, Type: 1, Manufacturer: 0, Dealer: 0, IsSys: 1, SysRecordTime: startDate.Unix(), } stockInInfo, _ := service.FindLastStockInInfoRecord(prescription.Jms, adminUserInfo.CurrentOrgId) warehouseOutInfo.Price = stockInInfo.Price warehouseOutInfo.GoodId = prescription.Jms warehouseOutInfo.GoodTypeId = jms warehouseOutInfo.Count = 1 err := service.AddSigleWarehouseOutInfo(warehouseOutInfo) if err == nil { details := &models.AutomaticReduceDetail{ WarehouseOutId: warehouseOutInfo.ID, WarehouseOutOrderNumber: warehouseOutInfo.WarehouseOutOrderNumber, PatientId: patientID, Ctime: time.Now().Unix(), Mtime: time.Now().Unix(), Status: 1, RecordTime: startDate.Unix(), OrgId: adminUserInfo.CurrentOrgId, GoodId: prescription.Jms, GoodTypeId: jms, } service.AddSigleAutoReduceRecordInfo(details) } } else if err == nil { //记录存在,则将数量加1 if outInfo.ID > 0 { service.UpdateStockOutInfoCount(adminUserInfo.CurrentOrgId, outInfo.ID) } details := &models.AutomaticReduceDetail{ WarehouseOutId: outInfo.ID, WarehouseOutOrderNumber: outInfo.WarehouseOutOrderNumber, PatientId: patientID, Ctime: time.Now().Unix(), Mtime: time.Now().Unix(), Status: 1, RecordTime: startDate.Unix(), OrgId: adminUserInfo.CurrentOrgId, GoodId: prescription.Jms, GoodTypeId: jms, } service.AddSigleAutoReduceRecordInfo(details) } } if prescription.FistulaNeedleSet > 0 { outInfo, err := service.FindStockOutInfoByTypeId(adminUserInfo.CurrentOrgId, fistula_needle_set, prescription.FistulaNeedleSet, out.WarehouseOutOrderNumber) if err == gorm.ErrRecordNotFound { warehouseOutInfo := &models.WarehouseOutInfo{ WarehouseOutOrderNumber: out.WarehouseOutOrderNumber, WarehouseOutId: out.ID, Status: 1, Ctime: time.Now().Unix(), Remark: "", OrgId: adminUserInfo.CurrentOrgId, Type: 1, Manufacturer: 0, Dealer: 0, IsSys: 1, SysRecordTime: startDate.Unix(), } stockInInfo, _ := service.FindLastStockInInfoRecord(prescription.FistulaNeedleSet, adminUserInfo.CurrentOrgId) warehouseOutInfo.Price = stockInInfo.Price warehouseOutInfo.GoodId = prescription.FistulaNeedleSet warehouseOutInfo.GoodTypeId = fistula_needle_set warehouseOutInfo.Count = 1 err := service.AddSigleWarehouseOutInfo(warehouseOutInfo) if err == nil { details := &models.AutomaticReduceDetail{ WarehouseOutId: warehouseOutInfo.ID, WarehouseOutOrderNumber: warehouseOutInfo.WarehouseOutOrderNumber, PatientId: patientID, Ctime: time.Now().Unix(), Mtime: time.Now().Unix(), Status: 1, RecordTime: startDate.Unix(), OrgId: adminUserInfo.CurrentOrgId, GoodId: prescription.FistulaNeedleSet, GoodTypeId: fistula_needle_set, } service.AddSigleAutoReduceRecordInfo(details) } } else if err == nil { //记录存在,则将数量加1 if outInfo.ID > 0 { service.UpdateStockOutInfoCount(adminUserInfo.CurrentOrgId, outInfo.ID) } details := &models.AutomaticReduceDetail{ WarehouseOutId: outInfo.ID, WarehouseOutOrderNumber: outInfo.WarehouseOutOrderNumber, PatientId: patientID, Ctime: time.Now().Unix(), Mtime: time.Now().Unix(), Status: 1, RecordTime: startDate.Unix(), OrgId: adminUserInfo.CurrentOrgId, GoodId: prescription.FistulaNeedleSet, GoodTypeId: fistula_needle_set, } service.AddSigleAutoReduceRecordInfo(details) } } if prescription.FistulaNeedleSet16 > 0 { outInfo, err := service.FindStockOutInfoByTypeId(adminUserInfo.CurrentOrgId, fistula_needle_set_16, prescription.FistulaNeedleSet16, out.WarehouseOutOrderNumber) if err == gorm.ErrRecordNotFound { warehouseOutInfo := &models.WarehouseOutInfo{ WarehouseOutOrderNumber: out.WarehouseOutOrderNumber, WarehouseOutId: out.ID, Status: 1, Ctime: time.Now().Unix(), Remark: "", OrgId: adminUserInfo.CurrentOrgId, Type: 1, Manufacturer: 0, Dealer: 0, IsSys: 1, SysRecordTime: startDate.Unix(), } stockInInfo, _ := service.FindLastStockInInfoRecord(prescription.FistulaNeedleSet16, adminUserInfo.CurrentOrgId) warehouseOutInfo.Price = stockInInfo.Price warehouseOutInfo.GoodId = prescription.FistulaNeedleSet16 warehouseOutInfo.GoodTypeId = fistula_needle_set_16 warehouseOutInfo.Count = 1 err := service.AddSigleWarehouseOutInfo(warehouseOutInfo) if err == nil { details := &models.AutomaticReduceDetail{ WarehouseOutId: warehouseOutInfo.ID, WarehouseOutOrderNumber: warehouseOutInfo.WarehouseOutOrderNumber, PatientId: patientID, Ctime: time.Now().Unix(), Mtime: time.Now().Unix(), Status: 1, RecordTime: startDate.Unix(), OrgId: adminUserInfo.CurrentOrgId, GoodId: prescription.FistulaNeedleSet16, GoodTypeId: fistula_needle_set_16, } service.AddSigleAutoReduceRecordInfo(details) } } else if err == nil { //记录存在,则将数量加1 if outInfo.ID > 0 { service.UpdateStockOutInfoCount(adminUserInfo.CurrentOrgId, outInfo.ID) } details := &models.AutomaticReduceDetail{ WarehouseOutId: outInfo.ID, WarehouseOutOrderNumber: outInfo.WarehouseOutOrderNumber, PatientId: patientID, Ctime: time.Now().Unix(), Mtime: time.Now().Unix(), Status: 1, RecordTime: startDate.Unix(), OrgId: adminUserInfo.CurrentOrgId, GoodId: prescription.FistulaNeedleSet16, GoodTypeId: fistula_needle_set_16, } service.AddSigleAutoReduceRecordInfo(details) } } if prescription.Hemoperfusion > 0 { outInfo, err := service.FindStockOutInfoByTypeId(adminUserInfo.CurrentOrgId, hemoperfusion, prescription.Hemoperfusion, out.WarehouseOutOrderNumber) if err == gorm.ErrRecordNotFound { warehouseOutInfo := &models.WarehouseOutInfo{ WarehouseOutOrderNumber: out.WarehouseOutOrderNumber, WarehouseOutId: out.ID, Status: 1, Ctime: time.Now().Unix(), Remark: "", OrgId: adminUserInfo.CurrentOrgId, Type: 1, Manufacturer: 0, Dealer: 0, IsSys: 1, SysRecordTime: startDate.Unix(), } stockInInfo, _ := service.FindLastStockInInfoRecord(prescription.Hemoperfusion, adminUserInfo.CurrentOrgId) warehouseOutInfo.Price = stockInInfo.Price warehouseOutInfo.GoodId = prescription.Hemoperfusion warehouseOutInfo.GoodTypeId = hemoperfusion warehouseOutInfo.Count = 1 err := service.AddSigleWarehouseOutInfo(warehouseOutInfo) if err == nil { details := &models.AutomaticReduceDetail{ WarehouseOutId: warehouseOutInfo.ID, WarehouseOutOrderNumber: warehouseOutInfo.WarehouseOutOrderNumber, PatientId: patientID, Ctime: time.Now().Unix(), Mtime: time.Now().Unix(), Status: 1, RecordTime: startDate.Unix(), OrgId: adminUserInfo.CurrentOrgId, GoodId: prescription.Hemoperfusion, GoodTypeId: hemoperfusion, } service.AddSigleAutoReduceRecordInfo(details) } } else if err == nil { //记录存在,则将数量加1 if outInfo.ID > 0 { service.UpdateStockOutInfoCount(adminUserInfo.CurrentOrgId, outInfo.ID) } details := &models.AutomaticReduceDetail{ WarehouseOutId: outInfo.ID, WarehouseOutOrderNumber: outInfo.WarehouseOutOrderNumber, PatientId: patientID, Ctime: time.Now().Unix(), Mtime: time.Now().Unix(), Status: 1, RecordTime: startDate.Unix(), OrgId: adminUserInfo.CurrentOrgId, GoodId: prescription.Hemoperfusion, GoodTypeId: hemoperfusion, } service.AddSigleAutoReduceRecordInfo(details) } } if prescription.DialyserSterilised > 0 { outInfo, err := service.FindStockOutInfoByTypeId(adminUserInfo.CurrentOrgId, dialyser_sterilised, prescription.DialyserSterilised, out.WarehouseOutOrderNumber) if err == gorm.ErrRecordNotFound { warehouseOutInfo := &models.WarehouseOutInfo{ WarehouseOutOrderNumber: out.WarehouseOutOrderNumber, WarehouseOutId: out.ID, Status: 1, Ctime: time.Now().Unix(), Remark: "", OrgId: adminUserInfo.CurrentOrgId, Type: 1, Manufacturer: 0, Dealer: 0, IsSys: 1, SysRecordTime: startDate.Unix(), } stockInInfo, _ := service.FindLastStockInInfoRecord(prescription.DialyserSterilised, adminUserInfo.CurrentOrgId) warehouseOutInfo.Price = stockInInfo.Price warehouseOutInfo.GoodId = prescription.DialyserSterilised warehouseOutInfo.GoodTypeId = dialyser_sterilised warehouseOutInfo.Count = 1 err := service.AddSigleWarehouseOutInfo(warehouseOutInfo) if err == nil { details := &models.AutomaticReduceDetail{ WarehouseOutId: warehouseOutInfo.ID, WarehouseOutOrderNumber: warehouseOutInfo.WarehouseOutOrderNumber, PatientId: patientID, Ctime: time.Now().Unix(), Mtime: time.Now().Unix(), Status: 1, RecordTime: startDate.Unix(), OrgId: adminUserInfo.CurrentOrgId, GoodId: prescription.DialyserSterilised, GoodTypeId: dialyser_sterilised, } service.AddSigleAutoReduceRecordInfo(details) } } else if err == nil { //记录存在,则将数量加1 if outInfo.ID > 0 { service.UpdateStockOutInfoCount(adminUserInfo.CurrentOrgId, outInfo.ID) } details := &models.AutomaticReduceDetail{ WarehouseOutId: outInfo.ID, WarehouseOutOrderNumber: outInfo.WarehouseOutOrderNumber, PatientId: patientID, Ctime: time.Now().Unix(), Mtime: time.Now().Unix(), Status: 1, RecordTime: startDate.Unix(), OrgId: adminUserInfo.CurrentOrgId, GoodId: prescription.DialyserSterilised, GoodTypeId: dialyser_sterilised, } service.AddSigleAutoReduceRecordInfo(details) } } if prescription.Filtryzer > 0 { outInfo, err := service.FindStockOutInfoByTypeId(adminUserInfo.CurrentOrgId, filtryzer, prescription.Filtryzer, out.WarehouseOutOrderNumber) if err == gorm.ErrRecordNotFound { warehouseOutInfo := &models.WarehouseOutInfo{ WarehouseOutOrderNumber: out.WarehouseOutOrderNumber, WarehouseOutId: out.ID, Status: 1, Ctime: time.Now().Unix(), Remark: "", OrgId: adminUserInfo.CurrentOrgId, Type: 1, Manufacturer: 0, Dealer: 0, IsSys: 1, SysRecordTime: startDate.Unix(), } stockInInfo, _ := service.FindLastStockInInfoRecord(prescription.Filtryzer, adminUserInfo.CurrentOrgId) warehouseOutInfo.Price = stockInInfo.Price warehouseOutInfo.GoodId = prescription.Filtryzer warehouseOutInfo.GoodTypeId = filtryzer warehouseOutInfo.Count = 1 err := service.AddSigleWarehouseOutInfo(warehouseOutInfo) if err == nil { details := &models.AutomaticReduceDetail{ WarehouseOutId: warehouseOutInfo.ID, WarehouseOutOrderNumber: warehouseOutInfo.WarehouseOutOrderNumber, PatientId: patientID, Ctime: time.Now().Unix(), Mtime: time.Now().Unix(), Status: 1, RecordTime: startDate.Unix(), OrgId: adminUserInfo.CurrentOrgId, GoodId: prescription.Filtryzer, GoodTypeId: filtryzer, } service.AddSigleAutoReduceRecordInfo(details) } } else if err == nil { //记录存在,则将耗材使用数量加1 if outInfo.ID > 0 { service.UpdateStockOutInfoCount(adminUserInfo.CurrentOrgId, outInfo.ID) } //插入病人耗材使用记录 details := &models.AutomaticReduceDetail{ WarehouseOutId: outInfo.ID, WarehouseOutOrderNumber: outInfo.WarehouseOutOrderNumber, PatientId: patientID, Ctime: time.Now().Unix(), Mtime: time.Now().Unix(), Status: 1, RecordTime: startDate.Unix(), OrgId: adminUserInfo.CurrentOrgId, GoodId: prescription.Filtryzer, GoodTypeId: filtryzer, } service.AddSigleAutoReduceRecordInfo(details) } } if prescription.Dialyzers > 0 { outInfo, err := service.FindStockOutInfoByTypeId(adminUserInfo.CurrentOrgId, dialyzers, prescription.Dialyzers, out.WarehouseOutOrderNumber) if err == gorm.ErrRecordNotFound { warehouseOutInfo := &models.WarehouseOutInfo{ WarehouseOutOrderNumber: out.WarehouseOutOrderNumber, WarehouseOutId: out.ID, Status: 1, Ctime: time.Now().Unix(), Remark: "", OrgId: adminUserInfo.CurrentOrgId, Type: 1, Manufacturer: 0, Dealer: 0, IsSys: 1, SysRecordTime: startDate.Unix(), } stockInInfo, _ := service.FindLastStockInInfoRecord(prescription.Dialyzers, adminUserInfo.CurrentOrgId) warehouseOutInfo.Price = stockInInfo.Price warehouseOutInfo.GoodId = prescription.Dialyzers warehouseOutInfo.GoodTypeId = dialyzers warehouseOutInfo.Count = 1 err := service.AddSigleWarehouseOutInfo(warehouseOutInfo) if err == nil { details := &models.AutomaticReduceDetail{ WarehouseOutId: warehouseOutInfo.ID, WarehouseOutOrderNumber: warehouseOutInfo.WarehouseOutOrderNumber, PatientId: patientID, Ctime: time.Now().Unix(), Mtime: time.Now().Unix(), Status: 1, RecordTime: startDate.Unix(), OrgId: adminUserInfo.CurrentOrgId, GoodId: prescription.Dialyzers, GoodTypeId: dialyzers, } service.AddSigleAutoReduceRecordInfo(details) } } else if err == nil { //记录存在,则将耗材使用数量加1 if outInfo.ID > 0 { service.UpdateStockOutInfoCount(adminUserInfo.CurrentOrgId, outInfo.ID) } //插入病人耗材使用记录 details := &models.AutomaticReduceDetail{ WarehouseOutId: outInfo.ID, WarehouseOutOrderNumber: outInfo.WarehouseOutOrderNumber, PatientId: patientID, Ctime: time.Now().Unix(), Mtime: time.Now().Unix(), Status: 1, RecordTime: startDate.Unix(), OrgId: adminUserInfo.CurrentOrgId, GoodId: prescription.Dialyzer, GoodTypeId: dialyzers, } service.AddSigleAutoReduceRecordInfo(details) } } if prescription.Injector > 0 { outInfo, err := service.FindStockOutInfoByTypeId(adminUserInfo.CurrentOrgId, injector, prescription.Injector, out.WarehouseOutOrderNumber) if err == gorm.ErrRecordNotFound { warehouseOutInfo := &models.WarehouseOutInfo{ WarehouseOutOrderNumber: out.WarehouseOutOrderNumber, WarehouseOutId: out.ID, Status: 1, Ctime: time.Now().Unix(), Remark: "", OrgId: adminUserInfo.CurrentOrgId, Type: 1, Manufacturer: 0, Dealer: 0, IsSys: 1, SysRecordTime: startDate.Unix(), } stockInInfo, _ := service.FindLastStockInInfoRecord(prescription.Injector, adminUserInfo.CurrentOrgId) warehouseOutInfo.Price = stockInInfo.Price warehouseOutInfo.GoodId = prescription.Injector warehouseOutInfo.GoodTypeId = injector warehouseOutInfo.Count = 1 err := service.AddSigleWarehouseOutInfo(warehouseOutInfo) if err == nil { details := &models.AutomaticReduceDetail{ WarehouseOutId: warehouseOutInfo.ID, WarehouseOutOrderNumber: warehouseOutInfo.WarehouseOutOrderNumber, PatientId: patientID, Ctime: time.Now().Unix(), Mtime: time.Now().Unix(), Status: 1, RecordTime: startDate.Unix(), OrgId: adminUserInfo.CurrentOrgId, GoodId: prescription.Injector, GoodTypeId: injector, } service.AddSigleAutoReduceRecordInfo(details) } } else if err == nil { //记录存在,则将耗材使用数量加1 if outInfo.ID > 0 { service.UpdateStockOutInfoCount(adminUserInfo.CurrentOrgId, outInfo.ID) } //插入病人耗材使用记录 details := &models.AutomaticReduceDetail{ WarehouseOutId: outInfo.ID, WarehouseOutOrderNumber: outInfo.WarehouseOutOrderNumber, PatientId: patientID, Ctime: time.Now().Unix(), Mtime: time.Now().Unix(), Status: 1, RecordTime: startDate.Unix(), OrgId: adminUserInfo.CurrentOrgId, GoodId: prescription.Injector, GoodTypeId: injector, } service.AddSigleAutoReduceRecordInfo(details) } } if prescription.Bloodlines > 0 { outInfo, err := service.FindStockOutInfoByTypeId(adminUserInfo.CurrentOrgId, bloodlines, prescription.Bloodlines, out.WarehouseOutOrderNumber) if err == gorm.ErrRecordNotFound { warehouseOutInfo := &models.WarehouseOutInfo{ WarehouseOutOrderNumber: out.WarehouseOutOrderNumber, WarehouseOutId: out.ID, Status: 1, Ctime: time.Now().Unix(), Remark: "", OrgId: adminUserInfo.CurrentOrgId, Type: 1, Manufacturer: 0, Dealer: 0, IsSys: 1, SysRecordTime: startDate.Unix(), } stockInInfo, _ := service.FindLastStockInInfoRecord(prescription.Bloodlines, adminUserInfo.CurrentOrgId) warehouseOutInfo.Price = stockInInfo.Price warehouseOutInfo.GoodId = prescription.Bloodlines warehouseOutInfo.GoodTypeId = bloodlines warehouseOutInfo.Count = 1 err := service.AddSigleWarehouseOutInfo(warehouseOutInfo) if err == nil { details := &models.AutomaticReduceDetail{ WarehouseOutId: warehouseOutInfo.ID, WarehouseOutOrderNumber: warehouseOutInfo.WarehouseOutOrderNumber, PatientId: patientID, Ctime: time.Now().Unix(), Mtime: time.Now().Unix(), Status: 1, RecordTime: startDate.Unix(), OrgId: adminUserInfo.CurrentOrgId, GoodId: prescription.Bloodlines, GoodTypeId: bloodlines, } service.AddSigleAutoReduceRecordInfo(details) } } else if err == nil { //记录存在,则将耗材使用数量加1 if outInfo.ID > 0 { service.UpdateStockOutInfoCount(adminUserInfo.CurrentOrgId, outInfo.ID) } //插入病人耗材使用记录 details := &models.AutomaticReduceDetail{ WarehouseOutId: outInfo.ID, WarehouseOutOrderNumber: outInfo.WarehouseOutOrderNumber, PatientId: patientID, Ctime: time.Now().Unix(), Mtime: time.Now().Unix(), Status: 1, RecordTime: startDate.Unix(), OrgId: adminUserInfo.CurrentOrgId, GoodId: prescription.Bloodlines, GoodTypeId: bloodlines, } service.AddSigleAutoReduceRecordInfo(details) } } if prescription.TubingHemodialysis > 0 { outInfo, err := service.FindStockOutInfoByTypeId(adminUserInfo.CurrentOrgId, tubingHemodialysis, prescription.TubingHemodialysis, out.WarehouseOutOrderNumber) if err == gorm.ErrRecordNotFound { warehouseOutInfo := &models.WarehouseOutInfo{ WarehouseOutOrderNumber: out.WarehouseOutOrderNumber, WarehouseOutId: out.ID, Status: 1, Ctime: time.Now().Unix(), Remark: "", OrgId: adminUserInfo.CurrentOrgId, Type: 1, Manufacturer: 0, Dealer: 0, IsSys: 1, SysRecordTime: startDate.Unix(), } stockInInfo, _ := service.FindLastStockInInfoRecord(prescription.TubingHemodialysis, adminUserInfo.CurrentOrgId) warehouseOutInfo.Price = stockInInfo.Price warehouseOutInfo.GoodId = prescription.TubingHemodialysis warehouseOutInfo.GoodTypeId = tubingHemodialysis warehouseOutInfo.Count = 1 err := service.AddSigleWarehouseOutInfo(warehouseOutInfo) if err == nil { details := &models.AutomaticReduceDetail{ WarehouseOutId: warehouseOutInfo.ID, WarehouseOutOrderNumber: warehouseOutInfo.WarehouseOutOrderNumber, PatientId: patientID, Ctime: time.Now().Unix(), Mtime: time.Now().Unix(), Status: 1, RecordTime: startDate.Unix(), OrgId: adminUserInfo.CurrentOrgId, GoodId: prescription.TubingHemodialysis, GoodTypeId: tubingHemodialysis, } service.AddSigleAutoReduceRecordInfo(details) } } else if err == nil { //记录存在,则将耗材使用数量加1 if outInfo.ID > 0 { service.UpdateStockOutInfoCount(adminUserInfo.CurrentOrgId, outInfo.ID) } //插入病人耗材使用记录 details := &models.AutomaticReduceDetail{ WarehouseOutId: outInfo.ID, WarehouseOutOrderNumber: outInfo.WarehouseOutOrderNumber, PatientId: patientID, Ctime: time.Now().Unix(), Mtime: time.Now().Unix(), Status: 1, RecordTime: startDate.Unix(), OrgId: adminUserInfo.CurrentOrgId, GoodId: prescription.TubingHemodialysis, GoodTypeId: tubingHemodialysis, } service.AddSigleAutoReduceRecordInfo(details) } } if prescription.Package > 0 { outInfo, err := service.FindStockOutInfoByTypeId(adminUserInfo.CurrentOrgId, safe_package, prescription.Package, out.WarehouseOutOrderNumber) if err == gorm.ErrRecordNotFound { warehouseOutInfo := &models.WarehouseOutInfo{ WarehouseOutOrderNumber: out.WarehouseOutOrderNumber, WarehouseOutId: out.ID, Status: 1, Ctime: time.Now().Unix(), Remark: "", OrgId: adminUserInfo.CurrentOrgId, Type: 1, Manufacturer: 0, Dealer: 0, IsSys: 1, SysRecordTime: startDate.Unix(), } stockInInfo, _ := service.FindLastStockInInfoRecord(prescription.Package, adminUserInfo.CurrentOrgId) warehouseOutInfo.Price = stockInInfo.Price warehouseOutInfo.GoodId = prescription.Package warehouseOutInfo.GoodTypeId = safe_package warehouseOutInfo.Count = 1 err := service.AddSigleWarehouseOutInfo(warehouseOutInfo) if err == nil { details := &models.AutomaticReduceDetail{ WarehouseOutId: warehouseOutInfo.ID, WarehouseOutOrderNumber: warehouseOutInfo.WarehouseOutOrderNumber, PatientId: patientID, Ctime: time.Now().Unix(), Mtime: time.Now().Unix(), Status: 1, RecordTime: startDate.Unix(), OrgId: adminUserInfo.CurrentOrgId, GoodId: prescription.Package, GoodTypeId: safe_package, } service.AddSigleAutoReduceRecordInfo(details) } } else if err == nil { //记录存在,则将耗材使用数量加1 if outInfo.ID > 0 { service.UpdateStockOutInfoCount(adminUserInfo.CurrentOrgId, outInfo.ID) } //插入病人耗材使用记录 details := &models.AutomaticReduceDetail{ WarehouseOutId: outInfo.ID, WarehouseOutOrderNumber: outInfo.WarehouseOutOrderNumber, PatientId: patientID, Ctime: time.Now().Unix(), Mtime: time.Now().Unix(), Status: 1, RecordTime: startDate.Unix(), OrgId: adminUserInfo.CurrentOrgId, GoodId: prescription.Package, GoodTypeId: safe_package, } service.AddSigleAutoReduceRecordInfo(details) } } if prescription.ALiquid > 0 { outInfo, err := service.FindStockOutInfoByTypeId(adminUserInfo.CurrentOrgId, aliquid, prescription.ALiquid, out.WarehouseOutOrderNumber) if err == gorm.ErrRecordNotFound { warehouseOutInfo := &models.WarehouseOutInfo{ WarehouseOutOrderNumber: out.WarehouseOutOrderNumber, WarehouseOutId: out.ID, Status: 1, Ctime: time.Now().Unix(), Remark: "", OrgId: adminUserInfo.CurrentOrgId, Type: 1, Manufacturer: 0, Dealer: 0, IsSys: 1, SysRecordTime: startDate.Unix(), } stockInInfo, _ := service.FindLastStockInInfoRecord(prescription.ALiquid, adminUserInfo.CurrentOrgId) warehouseOutInfo.Price = stockInInfo.Price warehouseOutInfo.GoodId = prescription.ALiquid warehouseOutInfo.GoodTypeId = aliquid warehouseOutInfo.Count = 1 err := service.AddSigleWarehouseOutInfo(warehouseOutInfo) if err == nil { details := &models.AutomaticReduceDetail{ WarehouseOutId: warehouseOutInfo.ID, WarehouseOutOrderNumber: warehouseOutInfo.WarehouseOutOrderNumber, PatientId: patientID, Ctime: time.Now().Unix(), Mtime: time.Now().Unix(), Status: 1, RecordTime: startDate.Unix(), OrgId: adminUserInfo.CurrentOrgId, GoodId: prescription.ALiquid, GoodTypeId: aliquid, } service.AddSigleAutoReduceRecordInfo(details) } } else if err == nil { //记录存在,则将耗材使用数量加1 if outInfo.ID > 0 { service.UpdateStockOutInfoCount(adminUserInfo.CurrentOrgId, outInfo.ID) } //插入病人耗材使用记录 details := &models.AutomaticReduceDetail{ WarehouseOutId: outInfo.ID, WarehouseOutOrderNumber: outInfo.WarehouseOutOrderNumber, PatientId: patientID, Ctime: time.Now().Unix(), Mtime: time.Now().Unix(), Status: 1, RecordTime: startDate.Unix(), OrgId: adminUserInfo.CurrentOrgId, GoodId: prescription.ALiquid, GoodTypeId: aliquid, } service.AddSigleAutoReduceRecordInfo(details) } } } } } else { this.ErrorLog("上机失败,还没开处方") this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodePrescriptionException) return } } scheduleDateStart := startDate.Format("2006-01-02") + " 00:00:00" scheduleDateEnd := startDate.Format("2006-01-02") + " 23:59:59" timeLayout := "2006-01-02 15:04:05" loc, _ := time.LoadLocation("Local") theStartTime, _ := time.ParseInLocation(timeLayout, scheduleDateStart, loc) theEndTime, _ := time.ParseInLocation(timeLayout, scheduleDateEnd, loc) schedulestartTime := theStartTime.Unix() scheduleendTime := theEndTime.Unix() //查询更改的机号,是否有人用了,如果只是排班了,但是没上机,直接替换,如果排班且上机了,就提示他无法上机 schedule, err := service.GetDayScheduleByBedid(adminUserInfo.CurrentOrgId, schedulestartTime, bedID, schedual_type) //查询该床位是否有人用了 order, order_err := service.GetDialysisOrderByBedId(adminUserInfo.CurrentOrgId, schedulestartTime, bedID, schedual_type) if err == gorm.ErrRecordNotFound { //空床位 // 修改了床位逻辑 daySchedule, _ := service.GetDaySchedule(adminUserInfo.CurrentOrgId, schedulestartTime, scheduleendTime, patientID) if daySchedule.ID > 0 { daySchedule.PartitionId = deviceNumber.ZoneID daySchedule.BedId = bedID daySchedule.ScheduleType = schedual_type daySchedule.UpdatedTime = time.Now().Unix() err := service.UpdateSchedule(&daySchedule) if err != nil { this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } } } else if err == nil { if schedule.ID > 0 && schedule.DialysisOrder.ID == 0 { //有排班没上机记录 if order_err == nil { if order.ID > 0 { //该机位被其他人占用了 this.ServeFailJSONWithSGJErrorCode(enums.ErrorDialysisOrderRepeatBed) return } else { daySchedule, _ := service.GetDaySchedule(adminUserInfo.CurrentOrgId, schedulestartTime, scheduleendTime, patientID) if daySchedule.ID > 0 { daySchedule.PartitionId = deviceNumber.ZoneID daySchedule.BedId = bedID daySchedule.ScheduleType = schedual_type daySchedule.UpdatedTime = time.Now().Unix() err := service.UpdateSchedule(&daySchedule) if err != nil { this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } } } } else if order_err == gorm.ErrRecordNotFound { //该床位没被占用 daySchedule, _ := service.GetDaySchedule(adminUserInfo.CurrentOrgId, schedulestartTime, scheduleendTime, patientID) if daySchedule.ID > 0 { daySchedule.PartitionId = deviceNumber.ZoneID daySchedule.BedId = bedID daySchedule.ScheduleType = schedual_type daySchedule.UpdatedTime = time.Now().Unix() err := service.UpdateSchedule(&daySchedule) if err != nil { this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } } } else if order_err != nil { this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } } else if schedule.ID > 0 && schedule.DialysisOrder.ID > 0 { //有排班且有上机记录 this.ServeFailJSONWithSGJErrorCode(enums.ErrorDialysisOrderRepeatBed) return } } else if err != nil { this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } dialysisRecord = &models.DialysisOrder{ DialysisDate: recordDate.Unix(), UserOrgId: adminUserInfo.CurrentOrgId, PatientId: patientID, Stage: 1, BedID: bedID, StartNurse: nurseID, Status: 1, StartTime: startDate.Unix(), CreatedTime: time.Now().Unix(), UpdatedTime: time.Now().Unix(), PunctureNurse: punctureNurseId, Creator: adminUserInfo.AdminUser.Id, Modifier: adminUserInfo.AdminUser.Id, SchedualType: schedual_type, } createErr := service.MobileCreateDialysisOrder(adminUserInfo.CurrentOrgId, patientID, dialysisRecord) newdialysisRecord, getRecordErr := service.MobileGetDialysisRecord(adminUserInfo.CurrentOrgId, patientID, recordDate.Unix()) if createErr != nil { this.ErrorLog("上机失败:%v", createErr) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } else if createErr == nil { var tempdispose string // 只针对中能建 if blood_drawing > 0 && adminUserInfo.CurrentOrgId == 9538 { //adminUserInfo.CurrentOrgId == 9538 tempdispose = "引血" + strconv.FormatInt(blood_drawing, 10) + "ml/min" } var ultrafiltration_rate float64 _, prescription := service.FindDialysisPrescriptionByReordDate(patientID, schedulestartTime, adminUserInfo.CurrentOrgId) if prescription.ID > 0 { if prescription.TargetUltrafiltration > 0 && prescription.DialysisDurationHour > 0 { totalMin := prescription.DialysisDurationHour*60 + prescription.DialysisDurationMinute if template.TemplateId == 6 { ultrafiltration_rate = math.Floor(prescription.TargetUltrafiltration / float64(totalMin) * 60 * 1000) } // 只针对方济医院 if template.TemplateId == 1 { value, _ := strconv.ParseFloat(fmt.Sprintf("%.3f", prescription.TargetUltrafiltration/float64(totalMin)*60), 6) ultrafiltration_rate = value } } } record := models.MonitoringRecord{ UserOrgId: adminUserInfo.CurrentOrgId, PatientId: patientID, DialysisOrderId: dialysisRecord.ID, MonitoringDate: schedulestartTime, OperateTime: startDate.Unix(), // MonitoringTime: recordTime, MonitoringNurse: nurseID, Dispose: tempdispose, UltrafiltrationRate: ultrafiltration_rate, UltrafiltrationVolume: 0, Status: 1, CreatedTime: time.Now().Unix(), UpdatedTime: time.Now().Unix(), } // 如果当天有插入数据,则不再往透析纪录里插入数据 if newdialysisRecord.ID > 0 { err := service.CreateMonitor(&record) if err != nil { this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeMonitorCreate) return } } this.ServeSuccessJSON(map[string]interface{}{ "dialysis_order": dialysisRecord, "monitor": record, }) } } // /api/dialysis/finish [post] // @param patient_id:int // @param date:string 排班时间 (yyyy-mm-dd) // @param nurse:int 下机护士 func (this *DialysisRecordAPIController) FinishDialysis() { patientID, _ := this.GetInt64("patient_id") recordDateStr := this.GetString("date") nurseID, _ := this.GetInt64("nurse") end_time := this.GetString("end_time") if patientID <= 0 || len(recordDateStr) == 0 || nurseID <= 0 { this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } recordDate, parseErr := utils.ParseTimeStringToTime("2006-01-02", recordDateStr) if parseErr != nil { this.ErrorLog("时间解析失败:%v", parseErr) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } //if parseEndDateErr != nil { // this.ErrorLog("时间解析失败:%v", parseEndDateErr) // this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) // return //} adminUserInfo := this.GetAdminUserInfo() patient, getPatientErr := service.MobileGetPatientById(adminUserInfo.CurrentOrgId, patientID) if getPatientErr != nil { this.ErrorLog("获取患者信息失败:%v", getPatientErr) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } else if patient == nil { this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodePatientNoExist) return } nurse, getNurseErr := service.GetAdminUserByUserID(nurseID) if getNurseErr != nil { this.ErrorLog("获取护士失败:%v", getNurseErr) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } else if nurse == nil { this.ErrorLog("护士不存在") this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } dialysisRecord, getRecordErr := service.MobileGetDialysisRecord(adminUserInfo.CurrentOrgId, patientID, recordDate.Unix()) if getRecordErr != nil { this.ErrorLog("获取透析记录失败:%v", getRecordErr) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } if dialysisRecord.Stage == 2 { this.ServeFailJSONWithSGJErrorCode(enums.ErrorDialysisOrderNoEND) return } endDate, parseEndDateErr := utils.ParseTimeStringToTime("2006-01-02 15:04", end_time) if parseEndDateErr != nil { this.ErrorLog("日期(%v)解析错误:%v", end_time, parseEndDateErr) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } // 获取当天的第一条透析纪录 fmonitorRecords, getMonitorRecordsErr := service.MobileGetMonitorRecordFirst(adminUserInfo.CurrentOrgId, patientID, recordDate.Unix()) if getMonitorRecordsErr != nil { this.ErrorLog("获取透析监测记录失败:%v", getMonitorRecordsErr) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } // 获取当前的最后一条透析纪录 endmonitorRecords, getMonitorRecordsErr := service.MobileGetLastMonitorRecord(adminUserInfo.CurrentOrgId, patientID, recordDate.Unix()) if getMonitorRecordsErr != nil { this.ErrorLog("获取透析监测记录失败:%v", getMonitorRecordsErr) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } assessmentAfterDislysis, getAADErr := service.MobileGetAssessmentAfterDislysis(adminUserInfo.CurrentOrgId, patientID, recordDate.Unix()) if getAADErr != nil { this.ErrorLog("获取透后评估失败:%v", getAADErr) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } var tempassessmentAfterDislysis models.AssessmentAfterDislysis if assessmentAfterDislysis != nil { tempassessmentAfterDislysis = *assessmentAfterDislysis tempassessmentAfterDislysis.UpdatedTime = time.Now().Unix() } else { tempassessmentAfterDislysis.CreatedTime = time.Now().Unix() tempassessmentAfterDislysis.AssessmentDate = recordDate.Unix() tempassessmentAfterDislysis.Status = 1 tempassessmentAfterDislysis.PatientId = patientID tempassessmentAfterDislysis.UserOrgId = adminUserInfo.CurrentOrgId } if dialysisRecord.Stage == 1 { temp_time := (float64(endDate.Unix()) - float64(dialysisRecord.StartTime)) / 3600 value, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", temp_time), 64) fmt.Println(value) a, b := math.Modf(value) c, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", b), 64) hour, _ := strconv.ParseInt(fmt.Sprintf("%.0f", a), 10, 64) minute, _ := strconv.ParseInt(fmt.Sprintf("%.0f", c*60), 10, 64) fmt.Println(hour) fmt.Println(minute) tempassessmentAfterDislysis.ActualTreatmentHour = hour tempassessmentAfterDislysis.ActualTreatmentMinute = minute } if fmonitorRecords.ID > 0 && endmonitorRecords.ID > 0 { tempassessmentAfterDislysis.Temperature = endmonitorRecords.Temperature tempassessmentAfterDislysis.PulseFrequency = endmonitorRecords.PulseFrequency tempassessmentAfterDislysis.BreathingRate = endmonitorRecords.BreathingRate tempassessmentAfterDislysis.SystolicBloodPressure = endmonitorRecords.SystolicBloodPressure tempassessmentAfterDislysis.DiastolicBloodPressure = endmonitorRecords.DiastolicBloodPressure tempassessmentAfterDislysis.ActualUltrafiltration = endmonitorRecords.UltrafiltrationVolume tempassessmentAfterDislysis.ActualDisplacement = endmonitorRecords.DisplacementQuantity } err := service.UpdateAssessmentAfterDislysisRecord(&tempassessmentAfterDislysis) if err != nil { this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } updateErr := service.ModifyDialysisRecord(dialysisRecord.ID, nurseID, endDate.Unix(), adminUserInfo.AdminUser.Id) if updateErr != nil { this.ErrorLog("下机失败:%v", updateErr) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } else { dialysisRecord.Stage = 2 dialysisRecord.FinishNurse = nurseID dialysisRecord.FinishCreator = adminUserInfo.AdminUser.Id dialysisRecord.FinishModifier = adminUserInfo.AdminUser.Id dialysisRecord.EndTime = endDate.Unix() // 结束时候透析次数加1 service.UpdateSolutionByPatientId(patientID) this.ServeSuccessJSON(map[string]interface{}{ "dialysis_order": dialysisRecord, "assessmentAfterDislysis": tempassessmentAfterDislysis, }) } } func (this *DialysisRecordAPIController) ModifyStartDialysis() { record_id, _ := this.GetInt64("id") nurseID, _ := this.GetInt64("nurse") puncture_nurse, _ := this.GetInt64("puncture_nurse") bedID, _ := this.GetInt64("bed") start_time := this.GetString("start_time") schedual_type, _ := this.GetInt64("schedual_type") if record_id == 0 { this.ErrorLog("id:%v", record_id) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } startDate, parseStartDateErr := utils.ParseTimeStringToTime("2006-01-02 15:04", start_time) if parseStartDateErr != nil { this.ErrorLog("时间解析失败:%v", parseStartDateErr) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } adminUserInfo := this.GetAdminUserInfo() nurse, getNurseErr := service.GetAdminUserByUserID(nurseID) if getNurseErr != nil { this.ErrorLog("获取护士失败:%v", getNurseErr) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } else if nurse == nil { this.ErrorLog("护士不存在") this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } nurse, getNurseErr = service.GetAdminUserByUserID(puncture_nurse) if getNurseErr != nil { this.ErrorLog("获取护士失败:%v", getNurseErr) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } else if nurse == nil { this.ErrorLog("护士不存在") this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } deviceNumber, getDeviceNumberErr := service.GetDeviceNumberByID(adminUserInfo.CurrentOrgId, bedID) if getDeviceNumberErr != nil { this.ErrorLog("获取床位号失败:%v", getDeviceNumberErr) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } else if deviceNumber == nil { this.ErrorLog("床位号不存在") this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } _, tempDialysisRecord := service.FindDialysisOrderById(record_id) //if tempDialysisRecord.Creator != adminUserInfo.AdminUser.Id { // headNursePermission, getPermissionErr := service.GetAdminUserSpecialPermission(adminUserInfo.CurrentOrgId, adminUserInfo.CurrentAppId, adminUserInfo.AdminUser.Id, models.SpecialPermissionTypeHeadNurse) // if getPermissionErr != nil { // this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) // return // } else if headNursePermission == nil { // this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDialysisPermissionDeniedModify) // return // } //} scheduleDateStart := startDate.Format("2006-01-02") + " 00:00:00" scheduleDateEnd := startDate.Format("2006-01-02") + " 23:59:59" timeLayout := "2006-01-02 15:04:05" loc, _ := time.LoadLocation("Local") theStartTime, _ := time.ParseInLocation(timeLayout, scheduleDateStart, loc) theEndTime, _ := time.ParseInLocation(timeLayout, scheduleDateEnd, loc) schedulestartTime := theStartTime.Unix() scheduleendTime := theEndTime.Unix() //查询更改的机号,是否有人用了,如果只是排班了,但是没上机,直接替换,如果排班且上机了,就提示他无法上机 schedule, err := service.GetDayScheduleByBedid(adminUserInfo.CurrentOrgId, schedulestartTime, bedID, schedual_type) daySchedule, _ := service.GetDaySchedule(adminUserInfo.CurrentOrgId, schedulestartTime, scheduleendTime, tempDialysisRecord.PatientId) if daySchedule.BedId != bedID || daySchedule.ScheduleType != schedual_type { if err == gorm.ErrRecordNotFound { //空床位 // 修改了床位逻辑 daySchedule, _ := service.GetDaySchedule(adminUserInfo.CurrentOrgId, schedulestartTime, scheduleendTime, tempDialysisRecord.PatientId) if daySchedule.ID > 0 { daySchedule.BedId = bedID daySchedule.PartitionId = deviceNumber.ZoneID daySchedule.ScheduleType = schedual_type daySchedule.UpdatedTime = time.Now().Unix() err := service.UpdateSchedule(&daySchedule) if err != nil { this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } } } else if err == nil { if schedule.ID > 0 && schedule.DialysisOrder.ID == 0 { //有排班没上机记录 daySchedule, _ := service.GetDaySchedule(adminUserInfo.CurrentOrgId, schedulestartTime, scheduleendTime, tempDialysisRecord.PatientId) if daySchedule.ID > 0 { daySchedule.BedId = bedID daySchedule.PartitionId = deviceNumber.ZoneID daySchedule.ScheduleType = schedual_type daySchedule.UpdatedTime = time.Now().Unix() err := service.UpdateSchedule(&daySchedule) if err != nil { this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } } } else if schedule.ID > 0 && schedule.DialysisOrder.ID > 0 { //有排班且有上机记录 this.ServeFailJSONWithSGJErrorCode(enums.ErrorDialysisOrderRepeatBed) return } } else if err != nil { this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } } dialysisRecord := &models.DialysisOrder{ ID: record_id, UserOrgId: adminUserInfo.CurrentOrgId, BedID: bedID, StartNurse: nurseID, StartTime: startDate.Unix(), PunctureNurse: puncture_nurse, Creator: adminUserInfo.AdminUser.Id, Modifier: adminUserInfo.AdminUser.Id, SchedualType: schedual_type, } updateErr := service.ModifyStartDialysisOrder(dialysisRecord) if updateErr != nil { this.ErrorLog("修改上机失败:%v", updateErr) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } if updateErr == nil { if tempDialysisRecord.Stage == 2 { temp_time := (float64(tempDialysisRecord.EndTime) - float64(startDate.Unix())) / 3600 value, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", temp_time), 64) fmt.Println(value) a, b := math.Modf(value) tempMinute, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", b), 64) hour, _ := strconv.ParseInt(fmt.Sprintf("%.0f", a), 10, 64) minute, _ := strconv.ParseInt(fmt.Sprintf("%.0f", tempMinute*60), 10, 64) updateAssessmentErr := service.UpdateAssessmentAfterDate(tempDialysisRecord.PatientId, tempDialysisRecord.UserOrgId, tempDialysisRecord.DialysisDate, hour, minute) if updateAssessmentErr != nil { utils.ErrorLog("%v", updateAssessmentErr) } after, _ := service.FindAssessmentAfterDislysisById(tempDialysisRecord.UserOrgId, tempDialysisRecord.PatientId, tempDialysisRecord.DialysisDate) _, dialysisRecords := service.FindDialysisOrderById(record_id) this.ServeSuccessJSON(map[string]interface{}{ "dialysis_order": dialysisRecords, "after": after, }) } else { _, dialysisRecords := service.FindDialysisOrderById(record_id) this.ServeSuccessJSON(map[string]interface{}{ "dialysis_order": dialysisRecords, }) } } } func (c *DialysisRecordAPIController) ModifyFinishDialysis() { record_id, _ := c.GetInt64("id") nurseID, _ := c.GetInt64("nurse") end_time := c.GetString("end_time") if record_id <= 0 || nurseID <= 0 { c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } adminUserInfo := c.GetAdminUserInfo() nurse, getNurseErr := service.GetAdminUserByUserID(nurseID) if getNurseErr != nil { c.ErrorLog("获取护士失败:%v", getNurseErr) c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } else if nurse == nil { c.ErrorLog("护士不存在") c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } endDate, parseEndDateErr := utils.ParseTimeStringToTime("2006-01-02 15:04", end_time) if parseEndDateErr != nil { c.ErrorLog("日期(%v)解析错误:%v", end_time, parseEndDateErr) c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } _, tempDialysisRecords := service.FindDialysisOrderById(record_id) //if tempDialysisRecords.FinishCreator != adminUserInfo.AdminUser.Id { // headNursePermission, getPermissionErr := service.GetAdminUserSpecialPermission(adminUserInfo.CurrentOrgId, adminUserInfo.CurrentAppId, adminUserInfo.AdminUser.Id, models.SpecialPermissionTypeHeadNurse) // if getPermissionErr != nil { // c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) // return // } else if headNursePermission == nil { // c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDialysisPermissionDeniedModify) // return // } //} dialysisRecord := &models.DialysisOrder{ ID: record_id, UserOrgId: adminUserInfo.CurrentOrgId, EndTime: endDate.Unix(), FinishNurse: nurseID, FinishModifier: adminUserInfo.AdminUser.Id, } updateErr := service.ModifyFinishDialysisOrder(dialysisRecord) if updateErr != nil { c.ErrorLog("修改下机失败:%v", updateErr) c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } if updateErr == nil { temp_time := (float64(endDate.Unix()) - float64(tempDialysisRecords.StartTime)) / 3600 value, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", temp_time), 64) fmt.Println(value) a, b := math.Modf(value) tempMinute, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", b), 64) hour, _ := strconv.ParseInt(fmt.Sprintf("%.0f", a), 10, 64) minute, _ := strconv.ParseInt(fmt.Sprintf("%.0f", tempMinute*60), 10, 64) updateAssessmentErr := service.UpdateAssessmentAfterDate(tempDialysisRecords.PatientId, tempDialysisRecords.UserOrgId, tempDialysisRecords.DialysisDate, hour, minute) if updateAssessmentErr != nil { utils.ErrorLog("%v", updateAssessmentErr) } } after, _ := service.FindAssessmentAfterDislysisById(tempDialysisRecords.UserOrgId, tempDialysisRecords.PatientId, tempDialysisRecords.DialysisDate) _, dialysisRecords := service.FindDialysisOrderById(record_id) c.ServeSuccessJSON(map[string]interface{}{ "dialysis_order": dialysisRecords, "after": after, }) }