package mobile_api_controllers import ( "encoding/json" "errors" "fmt" "math" "net/http" "net/url" "reflect" "strconv" "strings" "time" "XT_New/enums" "XT_New/models" "XT_New/service" "XT_New/utils" "github.com/astaxie/beego" "github.com/jinzhu/gorm" ) // type DialysisTestAPIController struct { // MobileBaseAPIController // } // [get]/m/api/test // func (this *DialysisTestAPIController) Test() { // orgID := int64(3907) // now := time.Now() // nextWeek := now.AddDate(0, 0, 7) // nextWeekMon, nextWeekSun := utils.GetMondayAndSundayOfWeekDate(&nextWeek) // nextTwoWeek := now.AddDate(0, 0, 14) // nextTwoWeekMon, nextTwoWeekSun := utils.GetMondayAndSundayOfWeekDate(&nextTwoWeek) // nextWeekSchs, getNextWeekSchErr := service.GetWeekSchedule(orgID, nextWeekMon.Unix(), nextWeekSun.Unix()) // nextTwoWeekSchs, getNextTwoWeekSchErr := service.GetWeekSchedule(orgID, nextTwoWeekMon.Unix(), nextTwoWeekSun.Unix()) // if getNextWeekSchErr != nil || getNextTwoWeekSchErr != nil { // this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) // return // } // exchangeErr := service.ExchangeScheduleTimeWithWeekSchedules(orgID, nextWeekSchs, nextTwoWeekSchs) // if exchangeErr != nil { // this.ErrorLog("%v", exchangeErr) // this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) // return // } // this.ServeSuccessJSON(map[string]interface{}{ // // "now": now, // // "next_week": nextWeek,f // // "next_week_mon": nextWeekMon, // // "next_week_sun": nextWeekSun, // // "next_two_week_mon": nextTwoWeekMon, // // "next_two_week_sun": nextTwoWeekSun, // "next_week_schs": nextWeekSchs, // "next_two_week_schs": nextTwoWeekSchs, // }) // } type DialysisAPIController struct { MobileBaseAPIAuthController } // /m/api/scheduals [get] // @param type:int // @param date:string func (this *DialysisAPIController) Scheduals() { schedualType, _ := this.GetInt64("type") schedualDate := this.GetString("date") if schedualType != 0 && schedualType != 1 && schedualType != 2 && schedualType != 3 { schedualType = 0 } date, parseDateErr := utils.ParseTimeStringToTime("2006-01-02", schedualDate) if parseDateErr != nil { this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } adminInfo := this.GetMobileAdminUserInfo() orgID := adminInfo.Org.Id redis := service.RedisClient() defer redis.Close() key := "scheduals_" + schedualDate + "_" + strconv.FormatInt(orgID, 10) redis.Set(key, "", time.Second) scheduals_json_str, _ := redis.Get(key).Result() patients, _ := service.GetAllPatientListSix(orgID) if len(scheduals_json_str) == 0 { //没有到缓存数据,从数据库中获取数据,进行缓存到redis scheduals, err := service.MobileGetDialysisScheduals(orgID, date.Unix(), schedualType) for _, item := range scheduals { order, _ := service.GetMonitDialysisOrder(item.UserOrgId, item.PatientId, date.Unix()) item.DialysisLastOrder = order solution, _ := service.GetMonitDialysisSolution(item.UserOrgId, item.PatientId, item.ModeId) item.DialysisSolution = solution } if err != nil { this.ErrorLog("获取排班信息失败:%v", err) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) } else { if len(scheduals) > 0 { devices, _ := service.GetAllDevicetByListSix(orgID) advices, _ := service.GetAllAdvicestByList(orgID, date.Unix()) prescriptions, _ := service.GetAllPrescriptionsByList(orgID, date.Unix()) assessmentBefores, _ := service.GetAllAssessmentBeforesByList(orgID, date.Unix()) dialysisOrders, _ := service.GetAllDialysisOrdersByList(orgID, date.Unix()) treatmentSummarys, _ := service.GetAllTreatmentSummarysByList(orgID, date.Unix()) AssessmentAfterDislysis, _ := service.GetAllAssessmentAfterDislysisByList(orgID, date.Unix()) dobulecheck, _ := service.GetAllDobuleCheckList(orgID, date.Unix()) hisAdvices, _ := service.GetAllHisAdvicesByList(orgID, date.Unix()) inforMation, _ := service.GetTodayInforMation(orgID, date.Unix()) //monitor, _ := service.GetMonitorByListSix(orgID, date.Unix()) for key, item := range scheduals { for _, infor := range inforMation { if item.PatientId == infor.PatientId && item.BedId == infor.BedNumber { scheduals[key].NewDeviceInformation = infor break } } // 获取患者信息 for _, patient := range patients { if item.PatientId == patient.ID { scheduals[key].SchedualPatient = patient break } } // 床位信息 for _, device := range devices { if item.BedId == device.ID { scheduals[key].DeviceNumber = device break } } // 医嘱信息 scheduals[key].Advices = make([]models.VMDoctorAdviceForList, 0) for _, advice := range advices { if item.PatientId == advice.PatientId { scheduals[key].Advices = append(scheduals[key].Advices, advice) } } // 医嘱信息 scheduals[key].HisAdvices = make([]service.VMHisDoctorAdviceInfo, 0) for _, hisAdvice := range hisAdvices { if item.PatientId == hisAdvice.PatientId { scheduals[key].HisAdvices = append(scheduals[key].HisAdvices, hisAdvice) } } // 医嘱信息 for _, prescription := range prescriptions { if item.PatientId == prescription.PatientId { scheduals[key].Prescription = prescription break } } // 透前评估 for _, assessmentBefore := range assessmentBefores { if item.PatientId == assessmentBefore.PatientId { scheduals[key].AssessmentBeforeDislysis = assessmentBefore break } } // 透析上下机 for _, dialysisOrder := range dialysisOrders { if item.PatientId == dialysisOrder.PatientId { scheduals[key].DialysisOrder = dialysisOrder break } } // 治疗小节 for _, afterDislysis := range AssessmentAfterDislysis { if item.PatientId == afterDislysis.PatientId { scheduals[key].AssessmentAfterDislysis = afterDislysis break } } // 透后评估 for _, treatmentSummary := range treatmentSummarys { if item.PatientId == treatmentSummary.PatientId { scheduals[key].TreatmentSummary = treatmentSummary break } } for _, check := range dobulecheck { if item.PatientId == check.PatientId { scheduals[key].DoubleCheck = check break } } //// 监测 //scheduals[key].VMMonitoringRecord = make([]models.VMMonitoringRecord, 0) //for _, moni := range monitor { // if item.PatientId == moni.PatientId { // scheduals[key].VMMonitoringRecord = append(scheduals[key].VMMonitoringRecord, moni) // } //} } //缓存数据 scheduals_json, err := json.Marshal(&scheduals) if err == nil { redis.Set(key, scheduals_json, time.Second*60) } } //获取今日所有的处方开的耗材 _, configs := service.FindXTHisProjectByOrgId(orgID) project := make([]*models.HisPrescriptionProjectTwo, 0) if configs.ID > 0 && configs.IsOpen == 1 { project, _ = service.GetAllHisProjectPrescription(orgID, date.Unix()) } //list, _ := service.GetZoneCountList(orgID, date.Unix()) this.ServeSuccessJSON(map[string]interface{}{ "scheduals": scheduals, "project": project, }) } } else { //缓存数据了数据,将redis缓存的json字符串转为map var dat []map[string]interface{} if err := json.Unmarshal([]byte(scheduals_json_str), &dat); err == nil { } else { } //获取今日所有的处方开的耗材 _, configs := service.FindXTHisProjectByOrgId(orgID) project := make([]*models.HisPrescriptionProjectTwo, 0) if configs.ID > 0 && configs.IsOpen == 1 { project, _ = service.GetAllHisProjectPrescription(orgID, date.Unix()) } this.ServeSuccessJSON(map[string]interface{}{ "scheduals": dat, "redis": "true", "date": schedualDate, "project": project, }) } } // /m/api/waiting_scheduals [get] // @param date:string func (this *DialysisAPIController) WaitingScheduals() { schedualDate := this.GetString("date") date, parseDateErr := utils.ParseTimeStringToTime("2006-01-02", schedualDate) if parseDateErr != nil && len(schedualDate) != 0 { this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } adminInfo := this.GetMobileAdminUserInfo() orgID := adminInfo.Org.Id redis := service.RedisClient() defer redis.Close() // cur_date := time.Now().Format("2006-01-02") key := "wait_scheduals_" + schedualDate + "_" + strconv.FormatInt(orgID, 10) wait_scheduals, _ := redis.Get(key).Result() if len(wait_scheduals) == 0 { //没有到缓存数据,从数据库中获取数据,进行缓存到redis scheduals, err := service.MobileGetWaitingScheduals(orgID, date.Unix()) if err != nil { this.ErrorLog("获取排班信息失败:%v", err) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) } else { returnScheduals := make([]*service.MDialysisScheduleVM, 0, len(scheduals)) for _, s := range scheduals { returnScheduals = append(returnScheduals, s) } if len(returnScheduals) > 0 { //缓存数据 wait_scheduals_json, err := json.Marshal(scheduals) if err == nil { redis.Set(key, wait_scheduals_json, time.Second*30) } } this.ServeSuccessJSON(map[string]interface{}{ "scheduals": scheduals, }) } } else { //缓存数据了数据,将redis缓存的json字符串转为map var dat []map[string]interface{} if err := json.Unmarshal([]byte(wait_scheduals), &dat); err == nil { } else { } this.ServeSuccessJSON(map[string]interface{}{ "scheduals": dat, "redis": "true", "date": schedualDate, }) } } //else{ // fmt.Println("33333333") // // scheduals, err := service.MobileGetWaitingScheduals(orgID, date.Unix()) // if err != nil { // this.ErrorLog("获取排班信息失败:%v", err) // this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) // } else { // returnScheduals := make([]*service.MDialysisScheduleVM, 0, len(scheduals)) // for _, s := range scheduals { // // returnScheduals = append(returnScheduals, s) // } // // this.ServeSuccessJSON(map[string]interface{}{ // "scheduals": returnScheduals, // }) // } // // } //if err == nil{ // // // // // //}else{ //} // /m/api/dialysis/record [get] // @param patient_id:int // @param date:string (yyyy-MM-dd) func (this *DialysisAPIController) DialysisRecord() { 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.GetMobileAdminUserInfo() ch := make(chan struct{}) count := 24 // count 表示活动的协程个数 var patient models.Patients var receiverTreatmentAccess *models.ReceiveTreatmentAsses var predialysisEvaluation *models.PredialysisEvaluation var lastPredialysisEvaluation *models.PredialysisEvaluation var doctorAdvices []*models.DoctorAdvice var dialysisOrder *models.DialysisOrder var doubleCheck *models.DoubleCheck var monitorRecords []*models.MonitoringRecord var lastMonitorRecord *models.MonitoringRecord var assessmentAfterDislysis *models.AssessmentAfterDislysis var lastAssessmentAfterDislysis *models.AssessmentAfterDislysis var treatmentSummary *models.TreatmentSummary var dialysisPrescribe *models.DialysisPrescription var dialysisSolution *models.DialysisSolution var lastDialysisPrescribe *models.DialysisPrescription var systemDialysisPrescribe *models.SystemPrescription var is_project_open_config models.XtHisProjectConfig var projects []*models.HisPrescriptionProject var projectsOne []*models.HisPrescriptionProject var stockType []*models.GoodsTypeOne var prepare []*models.XtDialysisBeforePrepare var lastAssessment models.XtPatientVascularAccess var lastDryWeightDislysis *models.SgjPatientDryweight var gobalConfig models.GobalConfig var operators []*models.SgjUserAdminRoles // 先走redis,没有走数据库 schedual, _ := service.MobileGetSchedualDetailOne(adminInfo.Org.Id, patientID, date.Unix()) go func() { patient, _ = service.FindPatientByIdWithDiseases(adminInfo.Org.Id, patientID) ch <- struct{}{} }() go func() { receiverTreatmentAccess, _ = service.MobileGetReceiverTreatmentAccessRecord(adminInfo.Org.Id, patientID, date.Unix()) ch <- struct{}{} }() go func() { predialysisEvaluation, _ = service.MobileGetPredialysisEvaluation(adminInfo.Org.Id, patientID, date.Unix()) ch <- struct{}{} }() go func() { lastPredialysisEvaluation, _ = service.MobileGetLastTimePredialysisEvaluation(adminInfo.Org.Id, patientID, date.Unix()) ch <- struct{}{} }() go func() { doctorAdvices, _ = service.MobileGetDoctorAdvicesByGroups(adminInfo.Org.Id, patientID, date.Unix()) ch <- struct{}{} }() go func() { dialysisOrder, _ = service.MobileGetSchedualDialysisRecord(adminInfo.Org.Id, patientID, date.Unix()) ch <- struct{}{} }() go func() { doubleCheck, _ = service.MobileGetDoubleCheck(adminInfo.Org.Id, patientID, date.Unix()) ch <- struct{}{} }() go func() { monitorRecords, _ = service.MobileGetMonitorRecords(adminInfo.Org.Id, patientID, date.Unix()) ch <- struct{}{} }() go func() { lastMonitorRecord, _ = service.MobileGetLastMonitorRecord(adminInfo.Org.Id, patientID, date.Unix()) ch <- struct{}{} }() go func() { assessmentAfterDislysis, _ = service.MobileGetAssessmentAfterDislysis(adminInfo.Org.Id, patientID, date.Unix()) ch <- struct{}{} }() go func() { lastAssessmentAfterDislysis, _ = service.MobileGetLastTimeAssessmentAfterDislysis(adminInfo.Org.Id, patientID, date.Unix()) ch <- struct{}{} }() go func() { treatmentSummary, _ = service.MobileGetTreatmentSummary(adminInfo.Org.Id, patientID, date.Unix()) ch <- struct{}{} }() go func() { dialysisPrescribe, _ = service.MobileGetDialysisPrescribeByModeId(adminInfo.Org.Id, patientID, date.Unix(), schedual.ModeId) ch <- struct{}{} }() go func() { dialysisSolution, _ = service.MobileGetDialysisSolutionByModeId(adminInfo.Org.Id, patientID, schedual.ModeId) ch <- struct{}{} }() go func() { lastDialysisPrescribe, _ = service.MobileGetLastDialysisPrescribeByModeIdSix(adminInfo.Org.Id, patientID, schedual.ModeId) ch <- struct{}{} }() go func() { systemDialysisPrescribe, _ = service.MobileGetSystemDialysisPrescribeByModeId(adminInfo.Org.Id, schedual.ModeId) ch <- struct{}{} }() go func() { // 先走redis,没有走数据库 _, is_project_open_config = service.FindXTHisProjectByOrgId(adminInfo.Org.Id) ch <- struct{}{} }() go func() { // 先走redis,没有走数据库 projects, _ = service.GetHisPrescriptionProjects(adminInfo.Org.Id, patientID, date.Unix()) ch <- struct{}{} }() go func() { // // 先走redis,没有走数据库 stockType, _ = service.GetStockType(adminInfo.Org.Id) ch <- struct{}{} }() go func() { // 先走redis,没有走数据库 prepare, _ = service.GetDialyStockOut(adminInfo.Org.Id, date.Unix(), patientID) ch <- struct{}{} }() go func() { // //获取最后一次血管通路 // 先走redis,没有走数据库 lastAssessment, _ = service.GetLastPassWayAssessment(adminInfo.Org.Id, patientID) ch <- struct{}{} }() go func() { // 先走redis,没有走数据库 lastDryWeightDislysis, _ = service.MobileGetLastDryWeight(adminInfo.Org.Id, patientID) ch <- struct{}{} }() go func() { // 先走redis,没有走数据库 _, gobalConfig = service.FindAutomaticReduceRecordByOrgId(adminInfo.Org.Id) ch <- struct{}{} }() go func() { // 先走redis,没有走数据库 operators, _ = service.GetAllStarfEs(adminInfo.Org.Id) ch <- struct{}{} }() for range ch { // 每次从ch中接收数据,表明一个活动的协程结束 count-- // 当所有活动的协程都结束时,关闭管道 if count == 0 { close(ch) } } prescribeOne, _ := service.MobileGetDialysisPrescribeByModeIdOne(adminInfo.Org.Id, patientID, date.Unix()) _, is_open_config := service.FindXTHisRecordByOrgId(adminInfo.Org.Id) _, is_project_open_config = service.FindXTHisProjectByOrgId(adminInfo.Org.Id) projects, _ = service.GetHisPrescriptionProjects(adminInfo.Org.Id, patientID, date.Unix()) temp_team_projects, _ := service.GetHisPrescriptionTeamProjects(adminInfo.Org.Id, patientID, date.Unix()) prescriptionConfig, _ := service.FindPrescriptionConfigById(adminInfo.Org.Id) var team_projects []*models.HisPrescriptionProject //var index int64 = 0 for _, item := range temp_team_projects { //组套里面非检验项目的 if item.HisProject.CostClassify != 3 { projects = append(projects, item) } //组套里面检验项目的 if item.HisProject.CostClassify == 3 { team_projects = append(team_projects, item) } } //针对茂名舒和 if adminInfo.Org.Id == 10666 || adminInfo.Org.Id == 10644 { if len(projects) > 0 { for _, item := range projects { if item.Type == 2 { if item.HisProject.IsShow == 1 { projectsOne = append(projectsOne, item) } } if item.Type == 3 { if item.GoodInfo.IsShow == 1 { projectsOne = append(projectsOne, item) } } } } } else { for _, item := range projects { projectsOne = append(projectsOne, item) } } team_projects = RemoveRepeatedCheckRecod(team_projects) stockType, _ = service.GetStockType(adminInfo.Org.Id) prepare, _ = service.GetDialyStockOut(adminInfo.Org.Id, date.Unix(), patientID) prescribeOne, _ = service.MobileGetDialysisPrescribeByModeIdOne(adminInfo.Org.Id, patientID, date.Unix()) var his_advices []*models.HisDoctorAdviceInfo var his_advices_one []*models.HisDoctorAdviceInfo if is_open_config.IsOpen == 1 { // 先走redis,没有走数据库 his_advices, _ = service.GetAllHisDoctorAdvice(adminInfo.Org.Id, patientID, date.Unix()) } //针对茂名舒和 if adminInfo.Org.Id == 10666 || adminInfo.Org.Id == 10644 { if len(his_advices) > 0 { for _, item := range his_advices { drug, _ := service.GetDrugIsShow(item.DrugId, adminInfo.Org.Id) if drug.IsShow == 1 { his_advices_one = append(his_advices_one, item) } } } } else { if len(his_advices) > 0 { for _, item := range his_advices { his_advices_one = append(his_advices_one, item) } } } is_advice_open, _ := service.FindAdviceSettingById(adminInfo.Org.Id) if is_advice_open.IsAdviceOpen == 1 { his_advices, _ = service.GetAllHisDoctorAdvice(adminInfo.Org.Id, patientID, date.Unix()) } lastOrder, _ := service.GetLastDilysisOrder(adminInfo.Org.Id, patientID, date.Unix()) remind_config, _ := service.GetCheckRemindConfigById(adminInfo.Org.Id) var remind_lists []models.XtCheckRemind if remind_config.ID > 0 && remind_config.IsOpen == 1 { remind_lists, _ = service.GetAllInspectionRemind(adminInfo.Org.Id, patientID) } lastDialysisPrescription, _ := service.GetLastDialysisPrescription(patientID, adminInfo.Org.Id) lastAssesmentBeforDialysis, _ := service.GetLastAssessmentBeforDialysis(patientID, adminInfo.Org.Id) dryWeightList, _ := service.GetPatientDryList(patientID, adminInfo.Org.Id) lastMonitor, _ := service.GetLastMonitor(patientID, date.Unix(), adminInfo.Org.Id) firstMonitor, _ := service.GetFirstMonitorOne(patientID, date.Unix(), adminInfo.Org.Id) returnData := map[string]interface{}{ "patient": patient, "schedual": schedual, "prescription": dialysisPrescribe, "solution": dialysisSolution, "last_prescription": lastDialysisPrescribe, "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, "operators": operators, "last_predialysis_evaluation": lastPredialysisEvaluation, "last_assessment_after_dislysis": lastAssessmentAfterDislysis, "last_monitor_record": lastMonitorRecord, "config": gobalConfig, "dry_weight": lastDryWeightDislysis, "system_prescription": systemDialysisPrescribe, "his_advices": his_advices_one, "is_open_config": is_open_config, "stockType": stockType, "prepare": prepare, "lastAssessment": lastAssessment, "prescribeOne": prescribeOne, "is_project_open_config": is_project_open_config, "project": projectsOne, "team_projects": team_projects, "is_advice_open": is_advice_open, "prescription_open": prescriptionConfig.IsOpen, "lastOrder": lastOrder, "remind_lists": remind_lists, "lastDialysisPrescription": lastDialysisPrescription, "lastAssesmentBeforDialysis": lastAssesmentBeforDialysis, "dryWeightList": dryWeightList, "firstMonitor": firstMonitor, "lastMonitor": lastMonitor, } this.ServeSuccessJSON(returnData) } func (c *DialysisAPIController) GetDialysisGlobalConfig() { adminInfo := c.GetMobileAdminUserInfo() adminUsers, _ := service.GetAllAdminUsers(adminInfo.Org.Id, adminInfo.App.Id) devices, _ := service.GetValidDevicesBy(adminInfo.Org.Id, 0, 0) device_numbers, _ := service.GetAllValidDeviceNumbers(adminInfo.Org.Id) returnData := map[string]interface{}{ "admin_users": adminUsers, "devices": devices, "device_numbers": device_numbers, } c.ServeSuccessJSON(returnData) } func (c *DialysisAPIController) PostAtreatmentInfo() { id, _ := c.GetInt64("patient", 0) recordDateStr := c.GetString("record_date") propagandaAndEducationContent := c.GetString("propagandaAndEducationContent") summaryContent := c.GetString("summaryContent") changeMedicalNurseId, _ := c.GetInt64("changeMedicalNurse", 0) treatNurseId, _ := c.GetInt64("treatNurse", 0) checkStaffId, _ := c.GetInt64("checkStaff", 0) deboardNurseId, _ := c.GetInt64("deboardNurse", 0) treatDoctor, _ := c.GetInt64("treatDoctor", 0) nursingRecord := c.GetString("nursing_record") fmt.Println("护理记录", nursingRecord) specialRecord := c.GetString("special_record") fmt.Println("特殊记录", specialRecord) adminUserInfo := c.GetMobileAdminUserInfo() changeMedicalNurseId = adminUserInfo.AdminUser.Id checkStaffId = adminUserInfo.AdminUser.Id deboardNurseId = adminUserInfo.AdminUser.Id treatDoctor = adminUserInfo.AdminUser.Id if id <= 0 { c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } patient, _ := service.FindPatientById(adminUserInfo.Org.Id, id) if patient.ID == 0 { c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodePatientNoExist) return } if len(recordDateStr) == 0 { recordDateStr = time.Now().Format("2006-01-02") } recordDate, parseDateErr := utils.ParseTimeStringToTime("2006-01-02", recordDateStr) if parseDateErr != nil { c.ErrorLog("日期(%v)解析错误:%v", recordDateStr, parseDateErr) c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } summary := models.TreatmentSummary{ UserOrgId: adminUserInfo.Org.Id, PatientId: id, AssessmentDate: recordDate.Unix(), Mission: propagandaAndEducationContent, DialysisSummary: summaryContent, SjNurse: changeMedicalNurseId, ZlNurse: treatNurseId, HdNurse: checkStaffId, XjNurse: deboardNurseId, ZlDoctor: treatDoctor, CreatedTime: time.Now().Unix(), Status: 1, NursingRecord: nursingRecord, SpecialRecord: specialRecord, } // 查询信息规挡的设置天数 infor, _ := service.GetDialysisInformationSetting(adminUserInfo.Org.Id) if infor.ID > 0 && infor.WeekDay > 0 { var cha_time int64 timeNowStr := time.Now().Format("2006-01-02") timeNewDate, _ := utils.ParseTimeStringToTime("2006-01-02", timeNowStr) //今日的日期减去设置的日期 cha_time = timeNewDate.Unix() - infor.WeekDay*86400 if cha_time >= recordDate.Unix() { //查询审核是否允许 infor, _ := service.GetDialysisInformationByRecordDate(id, recordDate.Unix(), adminUserInfo.Org.Id, 10) //申请状态不允许的情况 拒绝修改 if infor.ApplicationStatus != 1 { c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeInformationExist) return } } } _, treatmentSummary := service.FindTreatmentSummaryByReordDate(id, recordDate.Unix(), adminUserInfo.Org.Id) if treatmentSummary.ID == 0 { //新增 summary.Creater = adminUserInfo.AdminUser.Id service.AddSigleSummaryRecord(&summary) finish := models.XtDialysisFinish{ IsFinish: 1, UserOrgId: adminUserInfo.Org.Id, Status: 1, Ctime: time.Now().Unix(), Mtime: 0, Module: 10, RecordDate: recordDate.Unix(), Sourse: 1, PatientId: id, } dialysisFinish, _ := service.GetDialysisFinish(adminUserInfo.Org.Id, recordDate.Unix(), 10, id) if dialysisFinish.ID == 0 { service.CreateDialysisFinish(finish) } key := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(id, 10) + ":" + strconv.FormatInt(recordDate.Unix(), 10) + ":treatment_summary" redis := service.RedisClient() //清空key 值 redis.Set(key, "", time.Second) keyOne := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(recordDate.Unix(), 10) + ":treatment_summarys_list_all" redis.Set(keyOne, "", time.Second) keyThree := "scheduals_" + recordDateStr + "_" + strconv.FormatInt(adminUserInfo.Org.Id, 10) redis.Set(keyThree, "", time.Second) defer redis.Close() c.ServeSuccessJSON(map[string]interface{}{ "summary": summary, }) } else { //修改 summary.Creater = treatmentSummary.Creater summary.CreatedTime = treatmentSummary.CreatedTime summary.Modifier = adminUserInfo.AdminUser.Id summary.ID = treatmentSummary.ID service.UpdateSummeRecord(&summary) key := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(id, 10) + ":" + strconv.FormatInt(recordDate.Unix(), 10) + ":treatment_summary" redis := service.RedisClient() //清空key 值 redis.Set(key, "", time.Second) keyOne := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(recordDate.Unix(), 10) + ":treatment_summarys_list_all" redis.Set(keyOne, "", time.Second) keyThree := "scheduals_" + recordDateStr + "_" + strconv.FormatInt(adminUserInfo.Org.Id, 10) redis.Set(keyThree, "", time.Second) defer redis.Close() c.ServeSuccessJSON(map[string]interface{}{ "summary": summary, }) } } func (c *DialysisAPIController) PostDoubleCheck() { id, _ := c.GetInt64("patient", 0) recordDateStr := c.GetString("record_date") checkTimeStr := c.GetString("check_time") firstCheckTimeStr := c.GetString("first_check_time") creater, _ := c.GetInt64("creater", 0) modifier, _ := c.GetInt64("modifier", 0) dialysis_item_check, _ := c.GetInt64("dialysis_item_check", 0) dialysis_parameter_check, _ := c.GetInt64("dialysis_parameter_check", 0) vascular_access_verification, _ := c.GetInt64("vascular_access_verification", 0) pipeline_connection_check, _ := c.GetInt64("pipeline_connection_check", 0) dialysis_item_desc := c.GetString("dialysis_item_desc") dialysis_parameter_desc := c.GetString("dialysis_parameter_desc") vascular_access_desc := c.GetString("vascular_access_desc") pipeline_connection_desc := c.GetString("pipeline_connection_desc") collator, _ := c.GetInt64("collator", 0) employee_number := c.GetString("employee_number") dialyzer_batch_number := c.GetString("dialyzer_batch_number") needle_batch_number := c.GetString("needle_batch_number") if id <= 0 { c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } adminUserInfo := c.GetMobileAdminUserInfo() patient, _ := service.FindPatientById(adminUserInfo.Org.Id, id) if patient.ID == 0 { c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodePatientNoExist) return } if len(recordDateStr) == 0 { recordDateStr = time.Now().Format("2006-01-02") } recordDate, parseDateErr := utils.ParseTimeStringToTime("2006-01-02", recordDateStr) if parseDateErr != nil { c.ErrorLog("日期(%v)解析错误:%v", recordDateStr, parseDateErr) c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } var checkDate int64 if len(checkTimeStr) == 0 { checkDate = 0 } else { checkDateUnix, _ := utils.ParseTimeStringToTime("2006-01-02 15:04:05", checkTimeStr) checkDate = checkDateUnix.Unix() } var firstCheckDate int64 if len(firstCheckTimeStr) == 0 { firstCheckDate = 0 } else { firstCheckDateUnix, _ := utils.ParseTimeStringToTime("2006-01-02 15:04:05", firstCheckTimeStr) firstCheckDate = firstCheckDateUnix.Unix() } if adminUserInfo.Org.Id == 10644 { list, _ := service.GetRoleList(adminUserInfo.Org.Id, modifier) _, check := service.FindDoubleCheckByReordDate(id, recordDate.Unix(), adminUserInfo.Org.Id) if check.ID == 0 { if employee_number != list.JobNumber { c.ServeSuccessJSON(map[string]interface{}{ "doubleCheck": check, "msg": "2", }) return } } if check.ID > 0 { if employee_number != list.JobNumber { c.ServeSuccessJSON(map[string]interface{}{ "doubleCheck": check, "msg": "2", }) return } } } doubleCheck := models.DoubleCheck{ UserOrgId: adminUserInfo.Org.Id, PatientId: id, DialysisItemCheck: dialysis_item_check, DialysisParameterCheck: dialysis_parameter_check, VascularAccessVerification: vascular_access_verification, PipelineConnectionCheck: pipeline_connection_check, DialysisItemDesc: dialysis_item_desc, DialysisParameterDesc: dialysis_parameter_desc, VascularAccessDesc: vascular_access_desc, PipelineConnectionDesc: pipeline_connection_desc, Collator: collator, Status: 1, CreatedTime: time.Now().Unix(), CheckDate: recordDate.Unix(), UpdatedTime: time.Now().Unix(), EmployeeNumber: employee_number, DialyzerBatchNumber: dialyzer_batch_number, NeedleBatchNumber: needle_batch_number, } _, check := service.FindDoubleCheckByReordDate(id, recordDate.Unix(), adminUserInfo.Org.Id) if check.ID == 0 { //新增 doubleCheck.FirstCheckTime = firstCheckDate doubleCheck.CheckTime = checkDate doubleCheck.Creater = creater doubleCheck.Modifier = modifier if adminUserInfo.Org.Id == 10340 { order, _ := service.GetDialysisOrder(recordDate.Unix(), id, adminUserInfo.Org.Id) doubleCheck.Creater = order.StartNurse } if adminUserInfo.Org.Id == 9671 || adminUserInfo.Org.Id == 10340 || adminUserInfo.Org.Id == 3877 { //查询未核对的医嘱 doctorList, err := service.GetDoctorAdviceCheckList(id, recordDate.Unix(), adminUserInfo.Org.Id) for _, advice := range doctorList { if advice.ExecutionStaff == modifier { c.ErrorLog("医嘱核对人不能和执行人为同一人!", err) c.ServeFailJSONWithSGJErrorCode(enums.AdviceCodeParamWrong) return } } } // 查询信息规挡的设置天数 infor, _ := service.GetDialysisInformationSetting(adminUserInfo.Org.Id) if infor.ID > 0 && infor.WeekDay > 0 { var cha_time int64 timeNowStr := time.Now().Format("2006-01-02") timeNewDate, _ := utils.ParseTimeStringToTime("2006-01-02", timeNowStr) //今日的日期减去设置的日期 cha_time = timeNewDate.Unix() - infor.WeekDay*86400 if cha_time >= recordDate.Unix() { //查询审核是否允许 infor, _ := service.GetDialysisInformationByRecordDate(id, recordDate.Unix(), adminUserInfo.Org.Id, 5) //申请状态不允许的情况 拒绝修改 if infor.ApplicationStatus != 1 { c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeInformationExist) return } } } err := service.AddSigleDoubleCheck(&doubleCheck) finish := models.XtDialysisFinish{ IsFinish: 1, UserOrgId: adminUserInfo.Org.Id, Status: 1, Ctime: time.Now().Unix(), Mtime: 0, Module: 5, RecordDate: recordDate.Unix(), Sourse: 1, PatientId: id, } dialysisFinish, _ := service.GetDialysisFinish(adminUserInfo.Org.Id, recordDate.Unix(), 5, id) if dialysisFinish.ID == 0 { service.CreateDialysisFinish(finish) } //针对长沙南雅 if adminUserInfo.Org.Id == 9671 || adminUserInfo.Org.Id == 10340 || adminUserInfo.Org.Id == 3877 { //查询未核对的医嘱 doctorList, _ := service.GetDoctorAdviceCheckList(id, recordDate.Unix(), adminUserInfo.Org.Id) if len(doctorList) > 0 && modifier > 0 { for _, advice := range doctorList { service.UpdateDoctorAdviceList(advice.ID, modifier) key := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(advice.PatientId, 10) + ":" + strconv.FormatInt(advice.AdviceDate, 10) + ":doctor_advices" redis := service.RedisClient() //清空key 值 redis.Set(key, "", time.Second) keyTwo := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(advice.AdviceDate, 10) + ":advice_list_all" redis.Set(keyTwo, "", time.Second) theTime := time.Now() recordDate := theTime.Format("2006-01-02") keyFour := "scheduals_" + recordDate + "_" + strconv.FormatInt(adminUserInfo.Org.Id, 10) redis.Set(keyFour, "", time.Second) defer redis.Close() } } } key := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(id, 10) + ":" + strconv.FormatInt(recordDate.Unix(), 10) + ":double_check" redis := service.RedisClient() //清空key 值 redis.Set(key, "", time.Second) keyOne := "scheduals_" + recordDateStr + "_" + strconv.FormatInt(adminUserInfo.Org.Id, 10) redis.Set(keyOne, "", time.Second) defer redis.Close() if err == nil { c.ServeSuccessJSON(map[string]interface{}{ "doubleCheck": &doubleCheck, }) } } else { //修改 infor, _ := service.GetDialysisInformationSetting(adminUserInfo.Org.Id) if infor.ID > 0 { var cha_time int64 timeNowStr := time.Now().Format("2006-01-02") timeNewDate, _ := utils.ParseTimeStringToTime("2006-01-02", timeNowStr) //今日的日期减去设置的日期 cha_time = timeNewDate.Unix() - infor.WeekDay*86400 if cha_time >= recordDate.Unix() { //查询审核是否允许 infor, _ := service.GetDialysisInformationByRecordDate(id, recordDate.Unix(), adminUserInfo.Org.Id, 5) //申请状态不允许的情况 拒绝修改 if infor.ApplicationStatus != 1 { c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeInformationExist) return } } } doubleCheck.FirstCheckTime = firstCheckDate doubleCheck.CheckTime = checkDate doubleCheck.Creater = creater doubleCheck.Modifier = modifier doubleCheck.CreatedTime = check.CreatedTime doubleCheck.ID = check.ID doubleCheck.EmployeeNumber = employee_number doubleCheck.NeedleBatchNumber = needle_batch_number doubleCheck.DialyzerBatchNumber = dialyzer_batch_number if adminUserInfo.Org.Id == 9671 || adminUserInfo.Org.Id == 10340 || adminUserInfo.Org.Id == 3877 { //查询未核对的医嘱 doctorList, err := service.GetDoctorAdviceCheckList(id, recordDate.Unix(), adminUserInfo.Org.Id) for _, advice := range doctorList { if advice.ExecutionStaff == modifier { c.ErrorLog("医嘱核对人不能和执行人为同一人!", err) c.ServeFailJSONWithSGJErrorCode(enums.AdviceCodeParamWrong) return } } } err := service.UpdateDoubleCheck(&doubleCheck) //针对长沙南雅 if adminUserInfo.Org.Id == 9671 || adminUserInfo.Org.Id == 10340 || adminUserInfo.Org.Id == 3877 { //查询未核对的医嘱 doctorList, _ := service.GetDoctorAdviceCheckList(id, recordDate.Unix(), adminUserInfo.Org.Id) if len(doctorList) > 0 && modifier > 0 { for _, advice := range doctorList { service.UpdateDoctorAdviceList(advice.ID, modifier) key := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(advice.PatientId, 10) + ":" + strconv.FormatInt(advice.AdviceDate, 10) + ":doctor_advices" redis := service.RedisClient() //清空key 值 redis.Set(key, "", time.Second) keyTwo := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(advice.AdviceDate, 10) + ":advice_list_all" redis.Set(keyTwo, "", time.Second) theTime := time.Now() recordDate := theTime.Format("2006-01-02") keyFour := "scheduals_" + recordDate + "_" + strconv.FormatInt(adminUserInfo.Org.Id, 10) redis.Set(keyFour, "", time.Second) defer redis.Close() } } } key := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(id, 10) + ":" + strconv.FormatInt(recordDate.Unix(), 10) + ":double_check" redis := service.RedisClient() //清空key 值 redis.Set(key, "", time.Second) keyOne := "scheduals_" + recordDateStr + "_" + strconv.FormatInt(adminUserInfo.Org.Id, 10) redis.Set(keyOne, "", time.Second) defer redis.Close() if err == nil { c.ServeSuccessJSON(map[string]interface{}{ "doubleCheck": &doubleCheck, "msg": "1", }) } } } func (c *DialysisAPIController) PostAcceptsAssessment() { id, _ := c.GetInt64("patient", 0) recordDateStr := c.GetString("record_date") way, _ := c.GetInt64("way", 0) consciousness, _ := c.GetInt64("consciousness", 0) appetite, _ := c.GetInt64("appetite", 0) condition, _ := c.GetInt64("condition", 0) posture, _ := c.GetInt64("posture") sick_condition, _ := c.GetInt64("sick_condition", 0) danger_level, _ := c.GetInt64("danger_level", 0) intake, _ := c.GetInt64("intake", 0) nutrition, _ := c.GetInt64("nutrition", 0) psychological_assessment, _ := c.GetInt64("psychological_assessment", 0) psychological_assessment_other := c.GetString("psychological_assessment_other") score := c.GetString("score") sick_condition_other := c.GetString("sick_condition_other") //precaution, _ := c.GetInt64("precaution", 0) precaution := c.GetString("precaution") precaution_other := c.GetString("precaution_other") psychological_other := c.GetString("psychological_other") admission_number := c.GetString("admission_number") tumble, _ := c.GetInt64("tumble") diacrisis := c.GetString("diacrisis") his_department := c.GetString("his_department") his_bed := c.GetString("his_bed") if id <= 0 { c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } adminUserInfo := c.GetMobileAdminUserInfo() patient, _ := service.FindPatientById(adminUserInfo.Org.Id, id) if patient.ID == 0 { c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodePatientNoExist) return } //now := time.Now() //year, month, day := now.Date() //today_time := time.Date(year, month, day, 0, 0, 0, 0, time.Local) //todayTimeStamp := today_time.Unix() if len(recordDateStr) == 0 { recordDateStr = time.Now().Format("2006-01-02") } recordDate, parseDateErr := utils.ParseTimeStringToTime("2006-01-02", recordDateStr) if parseDateErr != nil { c.ErrorLog("日期(%v)解析错误:%v", recordDateStr, parseDateErr) c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } // 查询信息规挡的设置天数 infor, _ := service.GetDialysisInformationSetting(adminUserInfo.Org.Id) if infor.ID > 0 && infor.WeekDay > 0 { var cha_time int64 timeNowStr := time.Now().Format("2006-01-02") timeNewDate, _ := utils.ParseTimeStringToTime("2006-01-02", timeNowStr) //今日的日期减去设置的日期 cha_time = timeNewDate.Unix() - infor.WeekDay*86400 if cha_time >= recordDate.Unix() { //查询审核是否允许 infor, _ := service.GetDialysisInformationByRecordDate(id, recordDate.Unix(), adminUserInfo.Org.Id, 2) //申请状态不允许的情况 拒绝修改 if infor.ApplicationStatus != 1 { c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeInformationExist) return } } } _, receiveTreatment := service.FindReceiveTreatmentAssesByReordDate(id, recordDate.Unix(), adminUserInfo.Org.Id) receiveTreatmentAsses := models.ReceiveTreatmentAsses{ UserOrgId: adminUserInfo.Org.Id, PatientId: id, RecordDate: recordDate.Unix(), Way: way, Consciousness: consciousness, Appetite: appetite, Condition: condition, SickCondition: sick_condition, DangerLevel: danger_level, Intake: intake, Nutrition: nutrition, PsychologicalAssessment: psychological_assessment, PsychologicalAssessmentOther: psychological_assessment_other, SickConditionOther: sick_condition_other, Posture: posture, CreatedTime: time.Now().Unix(), UpdateTime: time.Now().Unix(), Status: 1, Score: score, Precaution: precaution, PrecautionOther: precaution_other, PsychologicalOther: psychological_other, AdmissionNumber: admission_number, Tumble: tumble, Diacrisis: diacrisis, HisBed: his_bed, HisDepartment: his_department, } if receiveTreatment.ID == 0 { //新增 receiveTreatmentAsses.Creater = adminUserInfo.AdminUser.Id err := service.AddSigleReceiveTreatmentAssesRecord(&receiveTreatmentAsses) finish := models.XtDialysisFinish{ IsFinish: 1, UserOrgId: adminUserInfo.Org.Id, Status: 1, Ctime: time.Now().Unix(), Mtime: 0, Module: 2, RecordDate: recordDate.Unix(), Sourse: 1, PatientId: id, } dialysisFinish, _ := service.GetDialysisFinish(adminUserInfo.Org.Id, recordDate.Unix(), 2, id) if dialysisFinish.ID == 0 { service.CreateDialysisFinish(finish) } key := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(id, 10) + ":" + strconv.FormatInt(recordDate.Unix(), 10) + ":receive_treatment_asses" redis := service.RedisClient() defer redis.Close() //清空key 值 redis.Set(key, "", time.Second) keyOne := "scheduals_" + recordDateStr + "_" + strconv.FormatInt(adminUserInfo.Org.Id, 10) redis.Set(keyOne, "", time.Second) if err == nil { c.ServeSuccessJSON(map[string]interface{}{ "receiveTreatmentAsses": receiveTreatmentAsses, }) } } else { //修改 //if receiveTreatment.Creater != adminUserInfo.AdminUser.Id { // headNursePermission, getPermissionErr := service.GetAdminUserSpecialPermission(adminUserInfo.Org.Id, adminUserInfo.App.Id, adminUserInfo.AdminUser.Id, models.SpecialPermissionTypeHeadNurse) // if getPermissionErr != nil { // c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) // return // } else if headNursePermission == nil { // c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDialysisPermissionDeniedModify) // return // } //} // 查询信息规挡的设置天数 infor, _ := service.GetDialysisInformationSetting(adminUserInfo.Org.Id) if infor.ID > 0 && infor.WeekDay > 0 { var cha_time int64 timeNowStr := time.Now().Format("2006-01-02") timeNewDate, _ := utils.ParseTimeStringToTime("2006-01-02", timeNowStr) //今日的日期减去设置的日期 cha_time = timeNewDate.Unix() - infor.WeekDay*86400 if cha_time >= recordDate.Unix() { //查询审核是否允许 infor, _ := service.GetDialysisInformationByRecordDate(id, recordDate.Unix(), adminUserInfo.Org.Id, 2) //申请状态不允许的情况 拒绝修改 if infor.ApplicationStatus != 1 { c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeInformationExist) return } } } receiveTreatmentAsses.Creater = receiveTreatment.Creater receiveTreatmentAsses.CreatedTime = receiveTreatment.CreatedTime receiveTreatmentAsses.Modifier = adminUserInfo.AdminUser.Id receiveTreatmentAsses.ID = receiveTreatment.ID err := service.UpadateReceiveTreatmentAsses(&receiveTreatmentAsses) key := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(id, 10) + ":" + strconv.FormatInt(recordDate.Unix(), 10) + ":receive_treatment_asses" redis := service.RedisClient() defer redis.Close() //清空key 值 redis.Set(key, "", time.Second) keyOne := "scheduals_" + recordDateStr + "_" + strconv.FormatInt(adminUserInfo.Org.Id, 10) redis.Set(keyOne, "", time.Second) if err == nil { c.ServeSuccessJSON(map[string]interface{}{ "receiveTreatmentAsses": receiveTreatmentAsses, }) } } } func (c *DialysisAPIController) PostAssessmentAfterDislysis() { id, _ := c.GetInt64("patient", 0) recordDateStr := c.GetString("record_date") weightAfter, _ := c.GetFloat("weight_after", 0) additionalWeight, _ := c.GetFloat("additional_weight", 0) weightReduce, _ := c.GetFloat("weight_loss", 0) fmt.Println("weight_loss", weightReduce) temperature, _ := c.GetFloat("temperature", 0) pulse_frequency, _ := c.GetFloat("pulse_frequency", 0) breathing_rate := c.GetString("breathing_rate") systolic_blood_pressure, _ := c.GetFloat("systolic_blood_pressure", 0) diastolic_blood_pressure, _ := c.GetFloat("diastolic_blood_pressure", 0) actual_ultrafiltration, _ := c.GetFloat("actual_ultrafiltration", 0) actual_displacement, _ := c.GetFloat("actual_displacement", 0) actualtreatHour, _ := c.GetInt64("actual_treatment_hour", 0) actualtreatmin, _ := c.GetInt64("actual_treatment_minute", 0) cruor := c.GetString("cruor") symptomsAfterDialysi := c.GetString("symptom_after_dialysis") internalFistula := c.GetString("internal_fistula") catheter := c.GetString("catheter") complications := c.GetString("complication") remark := c.GetString("remark") //dialysateVolume, _ := c.GetInt64("dialysis_intakes", 0) dialysis_intakes := c.GetString("dialysis_intakes") dialysateVolume, _ := strconv.ParseFloat(dialysis_intakes, 64) dialysis_intakes_unit, _ := c.GetInt64("dialysis_intakes_unit", 0) blood_access_part_id, _ := c.GetInt64("blood_access_part_id", 0) blood_access_part_opera_id, _ := c.GetInt64("blood_access_part_opera_id", 0) puncturePointOozingBlood, _ := c.GetInt64("puncture_point_oozing_blood", 0) puncturePointHaematoma, _ := c.GetInt64("puncture_point_haematoma", 0) internalFistulaTremorAc, _ := c.GetInt64("internal_fistula_tremor_ac", 0) patientGose, _ := c.GetInt64("patient_gose", 0) inpatientDepartment := c.GetString("inpatient_department") observationContent := c.GetString("observation_content") observationContentOther := c.GetString("observation_content_other") dialysis_process, _ := c.GetInt64("dialysis_process", 0) in_advance_minute, _ := c.GetFloat("in_advance_minute", 0) in_advance_reason := c.GetString("in_advance_reason") hemostasis_minute, _ := c.GetInt64("hemostasis_minute", 0) hemostasis_opera, _ := c.GetInt64("hemostasis_opera", 0) tremor_noise, _ := c.GetInt64("tremor_noise", 0) disequilibrium_syndrome, _ := c.GetInt64("disequilibrium_syndrome", 0) disequilibrium_syndrome_option := c.GetString("disequilibrium_syndrome_option") arterial_tube, _ := c.GetInt64("arterial_tube", 0) intravenous_tube, _ := c.GetInt64("intravenous_tube", 0) dialyzer, _ := c.GetInt64("dialyzer", 0) in_advance_reason_other := c.GetString("in_advance_reason_other") is_eat, _ := c.GetInt64("is_eat", 0) cvc_a, _ := c.GetFloat("cvc_a", 0) cvc_v, _ := c.GetFloat("cvc_v", 0) channels, _ := c.GetInt64("channel", 0) return_blood, _ := c.GetInt64("return_blood", 0) rehydration_volume, _ := c.GetInt64("rehydration_volume", 0) //dialysis_during, _ := c.GetInt64("dialysis_during", 0) dialysis_during, _ := c.GetFloat("dialysis_during") stroke_volume, _ := c.GetInt64("stroke_volume", 0) blood_flow, _ := c.GetInt64("blood_flow", 0) //sealing_fluid_dispose, _ := c.GetInt64("sealing_fluid_dispose", 0) sealing_fluid_dispose := c.GetString("sealing_fluid_dispose") sealing_fluid_special := c.GetString("sealing_fluid_special") dosage_of_anticoagulants, _ := c.GetFloat("dosage_of_anticoagulants") supine_systolic_blood_pressure := c.GetString("supine_systolic_blood_pressure") setting_pressure := c.GetString("setting_pressure") supine_diastolic_blood_pressure := c.GetString("supine_diastolic_blood_pressure") diastolic_pressure := c.GetString("diastolic_pressure") other_complication := c.GetString("other_complication") ktv := c.GetString("ktv") urr := c.GetString("urr") hypertenison, _ := c.GetInt64("hypertenison") hypopiesia, _ := c.GetInt64("hypopiesia") leave_office_method, _ := c.GetInt64("leave_office_method") lapse, _ := c.GetInt64("lapse") consciousness, _ := c.GetInt64("consciousness") fallrisk, _ := c.GetInt64("fallrisk") machine_run := c.GetString("machine_run") after_urea := c.GetString("after_urea") pip_coagulation := c.GetString("pip_coagulation") accumulated_blood_volume := c.GetString("accumulated_blood_volume") transfusion_volume := c.GetString("transfusion_volume") last_after_weight := c.GetString("last_after_weight") displace_liqui_value := c.GetString("displace_liqui_value") if id <= 0 { c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } adminUserInfo := c.GetMobileAdminUserInfo() patient, _ := service.FindPatientById(adminUserInfo.Org.Id, id) if patient.ID == 0 { c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodePatientNoExist) return } if len(recordDateStr) == 0 { recordDateStr = time.Now().Format("2006-01-02") } recordDate, parseDateErr := utils.ParseTimeStringToTime("2006-01-02", recordDateStr) fmt.Println("parseDateErr", parseDateErr) if parseDateErr != nil { c.ErrorLog("日期(%v)解析错误:%v", recordDateStr, parseDateErr) c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } //now := time.Now() //year, month, day := now.Date() //today_time := time.Date(year, month, day, 0, 0, 0, 0, time.Local) //todayTimeStamp := today_time.Unix() //_, evaluation := service.FindPredialysisEvaluationByReordDate(id, recordDate.Unix(), adminUserInfo.Org.Id) assessmentAfterDislysis := models.AssessmentAfterDislysis{ UserOrgId: adminUserInfo.Org.Id, PatientId: id, AssessmentDate: recordDate.Unix(), Temperature: temperature, PulseFrequency: pulse_frequency, BreathingRate: breathing_rate, SystolicBloodPressure: systolic_blood_pressure, DiastolicBloodPressure: diastolic_blood_pressure, ActualUltrafiltration: actual_ultrafiltration, ActualDisplacement: actual_displacement, ActualTreatmentHour: actualtreatHour, ActualTreatmentMinute: actualtreatmin, WeightAfter: weightAfter, AdditionalWeight: additionalWeight, WeightLoss: weightReduce, Cruor: cruor, SymptomAfterDialysis: symptomsAfterDialysi, InternalFistula: internalFistula, Catheter: catheter, Complication: complications, DialysisIntakes: dialysateVolume, CreatedTime: time.Now().Unix(), UpdatedTime: time.Now().Unix(), Status: 1, Remark: remark, BloodAccessPartId: blood_access_part_id, BloodAccessPartOperaId: blood_access_part_opera_id, DialysisIntakesUnit: dialysis_intakes_unit, PuncturePointOozingBlood: puncturePointOozingBlood, PuncturePointHaematoma: puncturePointHaematoma, InternalFistulaTremorAc: internalFistulaTremorAc, PatientGose: patientGose, InpatientDepartment: inpatientDepartment, ObservationContent: observationContent, ObservationContentOther: observationContentOther, DialysisProcess: dialysis_process, InAdvanceMinute: in_advance_minute, InAdvanceReason: in_advance_reason, HemostasisMinute: hemostasis_minute, HemostasisOpera: hemostasis_opera, TremorNoise: tremor_noise, DisequilibriumSyndrome: disequilibrium_syndrome, DisequilibriumSyndromeOption: disequilibrium_syndrome_option, ArterialTube: arterial_tube, IntravenousTube: intravenous_tube, Dialyzer: dialyzer, InAdvanceReasonOther: in_advance_reason_other, IsEat: is_eat, CvcA: cvc_a, CvcV: cvc_v, Channel: channels, ReturnBlood: return_blood, RehydrationVolume: rehydration_volume, DialysisDuring: dialysis_during, StrokeVolume: stroke_volume, BloodFlow: blood_flow, SealingFluidDispose: sealing_fluid_dispose, SealingFluidSpecial: sealing_fluid_special, DosageOfAnticoagulants: dosage_of_anticoagulants, SupineDiastolicBloodPressure: supine_diastolic_blood_pressure, SupineSystolicBloodPressure: supine_systolic_blood_pressure, SettingPressure: setting_pressure, DiastolicPressure: diastolic_pressure, OtherComplication: other_complication, Ktv: ktv, Urr: urr, Hypopiesia: hypopiesia, Hypertenison: hypertenison, Lapse: lapse, LeaveOfficeMethod: leave_office_method, Consciousness: consciousness, Fallrisk: fallrisk, MachineRun: machine_run, AfterUrea: after_urea, PipCoagulation: pip_coagulation, AccumulatedBloodVolume: accumulated_blood_volume, TransfusionVolume: transfusion_volume, LastAfterWeight: last_after_weight, DisplaceLiquiValue: displace_liqui_value, } appRole, _ := service.FindAdminRoleTypeById(adminUserInfo.Org.Id, adminUserInfo.AdminUser.Id, adminUserInfo.App.Id) // 查询信息规挡的设置天数 infor, _ := service.GetDialysisInformationSetting(adminUserInfo.Org.Id) if infor.ID > 0 && infor.WeekDay > 0 { var cha_time int64 timeNowStr := time.Now().Format("2006-01-02") timeNewDate, _ := utils.ParseTimeStringToTime("2006-01-02", timeNowStr) //今日的日期减去设置的日期 cha_time = timeNewDate.Unix() - infor.WeekDay*86400 fmt.Println("recordDate.Unix()", recordDate.Unix()) if cha_time >= recordDate.Unix() { //查询审核是否允许 infor, _ := service.GetDialysisInformationByRecordDate(id, recordDate.Unix(), adminUserInfo.Org.Id, 9) //申请状态不允许的情况 拒绝修改 if infor.ApplicationStatus != 1 { c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeInformationExist) return } } } _, assessmentAfter := service.FindAssessmentAfterDislysisByReordDate(id, recordDate.Unix(), adminUserInfo.Org.Id) if assessmentAfter.ID == 0 { //新增 if appRole.UserType == 2 || appRole.UserType == 1 { assessmentAfterDislysis.AssessmentDoctor = adminUserInfo.AdminUser.Id assessmentAfterDislysis.AssessmentTime = time.Now().Unix() } else { assessmentAfterDislysis.Creater = adminUserInfo.AdminUser.Id } recordDialysis, _ := service.GetSigleAssessmentAfterDislysisRecord(assessmentAfterDislysis.PatientId, assessmentAfter.AssessmentDate, assessmentAfter.UserOrgId) if assessmentAfterDislysis.UserOrgId != 10340 { if assessmentAfterDislysis.WeightAfter == 0 { assessmentAfterDislysis.WeightAfter = recordDialysis.WeightAfter } } //孝康 //孝康 if adminUserInfo.Org.Id == 10693 { if assessmentAfterDislysis.ActualUltrafiltration == 0 { lastRecord, _ := service.GetLastMonitorRecordTwenty(adminUserInfo.Org.Id, id, assessmentAfter.AssessmentDate) UltrafiltrationVolumeOne, _ := strconv.ParseFloat(lastRecord.UltrafiltrationVolumeOne, 64) assessmentAfterDislysis.ActualUltrafiltration = UltrafiltrationVolumeOne } if assessmentAfterDislysis.SystolicBloodPressure == 0 { lastRecord, _ := service.GetLastMonitorRecordTwentyOne(adminUserInfo.Org.Id, id, assessmentAfter.AssessmentDate) systolicBloodPressureOne, _ := strconv.ParseFloat(lastRecord.MonitorSystolicBloodPressureOne, 64) assessmentAfterDislysis.SystolicBloodPressure = systolicBloodPressureOne } if assessmentAfterDislysis.DiastolicBloodPressure == 0 { lastRecord, _ := service.GetLastMonitorRecordTwentyTwo(adminUserInfo.Org.Id, id, assessmentAfter.AssessmentDate) MonitorDiastolicBloodPressureOne, _ := strconv.ParseFloat(lastRecord.MonitorDiastolicBloodPressureOne, 64) assessmentAfterDislysis.DiastolicBloodPressure = MonitorDiastolicBloodPressureOne } if assessmentAfterDislysis.PulseFrequency == 0 { lastRecord, _ := service.GetLastMonitorRecordTwentyThree(adminUserInfo.Org.Id, id, assessmentAfter.AssessmentDate) PulseFrequencyOne, _ := strconv.ParseFloat(lastRecord.PulseFrequencyOne, 64) assessmentAfterDislysis.PulseFrequency = PulseFrequencyOne } if assessmentAfterDislysis.ActualDisplacement == 0 { lastRecord, _ := service.GetLastMonitorRecordTwentyFour(adminUserInfo.Org.Id, id, assessmentAfter.AssessmentDate) DisplacementQuantityOne, _ := strconv.ParseFloat(lastRecord.DisplacementQuantityOne, 64) assessmentAfterDislysis.ActualDisplacement = DisplacementQuantityOne } } err := service.AddSigleAssessmentAfterDislysisRecord(&assessmentAfterDislysis) //记录日志 byterequest, _ := json.Marshal(assessmentAfterDislysis) afterDialysisLog := models.XtAssessmentAfterDialysisLog{ UserOrgId: assessmentAfterDislysis.UserOrgId, PatientId: assessmentAfterDislysis.PatientId, RecordDate: assessmentAfterDislysis.AssessmentDate, Status: 1, ErrLog: string(byterequest), AdminUserId: adminUserInfo.AdminUser.Id, Ctime: 0, Mtime: 0, Source: "手机端保存透后评估", } service.CreateAfterDialysisLog(afterDialysisLog) finish := models.XtDialysisFinish{ IsFinish: 1, UserOrgId: adminUserInfo.Org.Id, Status: 1, Ctime: time.Now().Unix(), Mtime: 0, Module: 9, RecordDate: recordDate.Unix(), Sourse: 1, PatientId: id, } dialysisFinish, _ := service.GetDialysisFinish(adminUserInfo.Org.Id, recordDate.Unix(), 9, id) if dialysisFinish.ID == 0 { service.CreateDialysisFinish(finish) } redis := service.RedisClient() keyTwo := "scheduals_" + recordDateStr + "_" + strconv.FormatInt(adminUserInfo.Org.Id, 10) redis.Set(keyTwo, "", time.Second) key := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(id, 10) + ":" + strconv.FormatInt(recordDate.Unix(), 10) + ":assessment_after_dislysis" //清空key 值 redis.Set(key, "", time.Second) keyOne := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(recordDate.Unix(), 10) + ":assessment_after_dislysis_list_all" redis.Set(keyOne, "", time.Second) defer redis.Close() if err == nil { c.ServeSuccessJSON(map[string]interface{}{ "assessmentAfterDislysis": assessmentAfterDislysis, }) } return } else { //修改 infor, _ := service.GetDialysisInformationSetting(adminUserInfo.Org.Id) if infor.ID > 0 && infor.WeekDay > 0 { var cha_time int64 timeNowStr := time.Now().Format("2006-01-02") timeNewDate, _ := utils.ParseTimeStringToTime("2006-01-02", timeNowStr) //今日的日期减去设置的日期 cha_time = timeNewDate.Unix() - infor.WeekDay*86400 if cha_time >= recordDate.Unix() { //查询审核是否允许 infor, _ := service.GetDialysisInformationByRecordDate(id, recordDate.Unix(), adminUserInfo.Org.Id, 9) //申请状态不允许的情况 拒绝修改 if infor.ApplicationStatus != 1 { c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeInformationExist) return } } } if appRole.UserType == 2 || appRole.UserType == 1 { assessmentAfterDislysis.AssessmentDoctor = adminUserInfo.AdminUser.Id assessmentAfterDislysis.AssessmentTime = time.Now().Unix() } else { assessmentAfterDislysis.Modifier = adminUserInfo.AdminUser.Id if assessmentAfterDislysis.Creater == 0 { assessmentAfterDislysis.Creater = adminUserInfo.AdminUser.Id } } assessmentAfterDislysis.CreatedTime = assessmentAfter.CreatedTime assessmentAfterDislysis.ID = assessmentAfter.ID recordDialysis, _ := service.GetSigleAssessmentAfterDislysisRecord(assessmentAfterDislysis.PatientId, assessmentAfter.AssessmentDate, assessmentAfter.UserOrgId) if assessmentAfterDislysis.UserOrgId != 10340 { if assessmentAfterDislysis.WeightAfter == 0 { assessmentAfterDislysis.WeightAfter = recordDialysis.WeightAfter } } //孝康 if adminUserInfo.Org.Id == 10693 { fmt.Println("adminUserInfo.Org.Id", assessmentAfterDislysis.ActualUltrafiltration) if assessmentAfterDislysis.ActualUltrafiltration == 0 { lastRecord, _ := service.GetLastMonitorRecordTwenty(adminUserInfo.Org.Id, id, assessmentAfter.AssessmentDate) UltrafiltrationVolumeOne, _ := strconv.ParseFloat(lastRecord.UltrafiltrationVolumeOne, 64) assessmentAfterDislysis.ActualUltrafiltration = UltrafiltrationVolumeOne } if assessmentAfterDislysis.SystolicBloodPressure == 0 { lastRecord, _ := service.GetLastMonitorRecordTwentyOne(adminUserInfo.Org.Id, id, assessmentAfter.AssessmentDate) systolicBloodPressureOne, _ := strconv.ParseFloat(lastRecord.MonitorSystolicBloodPressureOne, 64) assessmentAfterDislysis.SystolicBloodPressure = systolicBloodPressureOne } if assessmentAfterDislysis.DiastolicBloodPressure == 0 { lastRecord, _ := service.GetLastMonitorRecordTwentyTwo(adminUserInfo.Org.Id, id, assessmentAfter.AssessmentDate) MonitorDiastolicBloodPressureOne, _ := strconv.ParseFloat(lastRecord.MonitorDiastolicBloodPressureOne, 64) assessmentAfterDislysis.DiastolicBloodPressure = MonitorDiastolicBloodPressureOne } if assessmentAfterDislysis.PulseFrequency == 0 { lastRecord, _ := service.GetLastMonitorRecordTwentyThree(adminUserInfo.Org.Id, id, assessmentAfter.AssessmentDate) PulseFrequencyOne, _ := strconv.ParseFloat(lastRecord.PulseFrequencyOne, 64) assessmentAfterDislysis.PulseFrequency = PulseFrequencyOne } if assessmentAfterDislysis.ActualDisplacement == 0 { lastRecord, _ := service.GetLastMonitorRecordTwentyFour(adminUserInfo.Org.Id, id, assessmentAfter.AssessmentDate) DisplacementQuantityOne, _ := strconv.ParseFloat(lastRecord.DisplacementQuantityOne, 64) assessmentAfterDislysis.ActualDisplacement = DisplacementQuantityOne } } err := service.UpdateAssessmentAfterDislysisRecord(&assessmentAfterDislysis) //记录日志 byterequest, _ := json.Marshal(assessmentAfterDislysis) afterDialysisLog := models.XtAssessmentAfterDialysisLog{ UserOrgId: assessmentAfterDislysis.UserOrgId, PatientId: assessmentAfterDislysis.PatientId, RecordDate: assessmentAfterDislysis.AssessmentDate, Status: 1, ErrLog: string(byterequest), AdminUserId: adminUserInfo.AdminUser.Id, Ctime: time.Now().Unix(), Mtime: 0, Source: "手机端修改保存透后评估", } service.CreateAfterDialysisLog(afterDialysisLog) redis := service.RedisClient() keyTwo := "scheduals_" + recordDateStr + "_" + strconv.FormatInt(adminUserInfo.Org.Id, 10) redis.Set(keyTwo, "", time.Second) key := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(id, 10) + ":" + strconv.FormatInt(recordDate.Unix(), 10) + ":assessment_after_dislysis" //清空key 值 redis.Set(key, "", time.Second) keyOne := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(recordDate.Unix(), 10) + ":assessment_after_dislysis_list_all" redis.Set(keyOne, "", time.Second) if err == nil { c.ServeSuccessJSON(map[string]interface{}{ "assessmentAfterDislysis": assessmentAfterDislysis, }) return } } return } func (c *DialysisAPIController) PostDialysisPrescription() { id, _ := c.GetInt64("patient", 0) recordDateStr := c.GetString("record_date") if id <= 0 { c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } adminUserInfo := c.GetMobileAdminUserInfo() patient, _ := service.FindPatientById(adminUserInfo.Org.Id, id) if patient.ID == 0 { c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodePatientNoExist) return } if len(recordDateStr) == 0 { recordDateStr = time.Now().Format("2006-01-02") } recordDate, parseDateErr := utils.ParseTimeStringToTime("2006-01-02", recordDateStr) if parseDateErr != nil { c.ErrorLog("日期(%v)解析错误:%v", recordDateStr, parseDateErr) c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } mode_id, _ := c.GetInt64("mode_id", 0) dialysis_duration, _ := c.GetFloat("dialysis_duration", 0) dialyzer, _ := c.GetInt64("dialyzer", 0) perfusion_apparatus, _ := c.GetInt64("perfusion_apparatus", 0) blood_flow_volume, _ := c.GetFloat("blood_flow_volume", 0) dewater_amount, _ := c.GetFloat("dewater_amount", 0) displace_liqui, _ := c.GetFloat("displace_liqui", 0) replacement_total, _ := c.GetFloat("replacement_total", 0) replacement_way, _ := c.GetInt64("replacement_way", 0) anticoagulant, _ := c.GetInt64("anticoagulant", 0) anticoagulant_shouji, _ := c.GetFloat("anticoagulant_shouji", 0) anticoagulant_weichi, _ := c.GetFloat("anticoagulant_weichi", 0) anticoagulant_zongliang, _ := c.GetFloat("anticoagulant_zongliang", 0) anticoagulant_gaimingcheng := c.GetString("anticoagulant_gaimingcheng") anticoagulant_gaijiliang := c.GetString("anticoagulant_gaijiliang") dialyzerPerfusionApparatus := c.GetString("dialyzer_perfusion_apparatus") kalium, _ := c.GetFloat("kalium", 0) sodium, _ := c.GetFloat("sodium", 0) calcium, _ := c.GetFloat("calcium", 0) bicarbonate, _ := c.GetFloat("bicarbonate", 0) glucose, _ := c.GetFloat("glucose", 0) // prescription_doctor, _ := c.GetInt64("prescription_doctor", 0) // dry_weight, _ := c.GetFloat("dry_weight", 0) dialysate_flow, _ := c.GetFloat("dialysate_flow", 0) dialysate_temperature, _ := c.GetFloat("dialysate_temperature", 0) conductivity, _ := c.GetFloat("conductivity", 0) remark := c.GetString("remark") dialysisDurationHour, _ := c.GetInt64("dialysis_duration_hour", 0) dialysisDurationMinute, _ := c.GetInt64("dialysis_duration_minute", 0) targetUltrafiltration, _ := c.GetFloat("target_ultrafiltration", 0) dialysateFormulation, _ := c.GetInt64("dialysate_formulation", 0) body_fluid, _ := c.GetInt64("body_fluid", 0) special_medicine, _ := c.GetInt64("special_medicine", 0) special_medicine_other := c.GetString("special_medicine_other") displace_liqui_part, _ := c.GetInt64("displace_liqui_part", 0) displace_liqui_value, _ := c.GetFloat("displace_liqui_value", 0) blood_access, _ := c.GetInt64("blood_access", 0) ultrafiltration, _ := c.GetFloat("ultrafiltration", 0) body_fluid_other := c.GetString("body_fluid_other") niprocart, _ := c.GetInt64("niprocart", 0) jms, _ := c.GetInt64("jms", 0) fistula_needle_set, _ := c.GetInt64("fistula_needle_set", 0) fistula_needle_set_16, _ := c.GetInt64("fistula_needle_set_16", 0) hemoperfusion, _ := c.GetInt64("hemoperfusion", 0) dialyser_sterilised, _ := c.GetInt64("dialyser_sterilised", 0) filtryzer, _ := c.GetInt64("filtryzer", 0) target_ktv, _ := c.GetFloat("target_ktv", 0) dialyzers, _ := c.GetInt64("dialyzers", 0) injector, _ := c.GetInt64("injector", 0) bloodlines, _ := c.GetInt64("bloodlines", 0) tubing_hemodialysis, _ := c.GetInt64("tubing_hemodialysis", 0) safe_package, _ := c.GetInt64("package", 0) a_liquid, _ := c.GetInt64("a_liquid", 0) pre_impulse, parseDateErr := c.GetFloat("pre_impulse", 0) anticoagulant_stop_time_hour, _ := c.GetInt64("anticoagulant_stop_time_hour", 0) anticoagulant_stop_time_min, _ := c.GetInt64("anticoagulant_stop_time_min", 0) blood := c.GetString("blood") dialysis_dialyszers := c.GetString("dialysis_dialyszers") dialysis_irrigation := c.GetString("dialysis_irrigation") antioxidant_commodity_name := c.GetString("antioxidant_commodity_name") displace_speed := c.GetString("displace_speed") illness, _ := c.GetInt64("illness") amylaceum := c.GetString("amylaceum") single_time := c.GetString("single_time") single_water := c.GetString("single_water") replacement_flow := c.GetString("replacement_flow") plasma_separator := c.GetString("plasma_separator") bilirubin_adsorption_column := c.GetString("bilirubin_adsorption_column") oxygen_uptake, _ := c.GetInt64("oxygen_uptake") oxygen_flow := c.GetString("oxygen_flow") oxygen_time := c.GetString("oxygen_time") hemodialysis_pipelines := c.GetString("hemodialysis_pipelines") hemodialysis_pipelines_count, _ := c.GetFloat("hemodialysis_pipelines_count", 0) puncture_needle := c.GetString("puncture_needle") puncture_needle_count, _ := c.GetFloat("puncture_needle_count", 0) epo := c.GetString("epo") epo_count, _ := c.GetFloat("epo_count", 0) max_ultrafiltration_rate, _ := c.GetFloat("max_ultrafiltration_rate") admin_user_id, _ := c.GetInt64("admin_user_id") is_water := c.GetString("is_water") var is_war int64 if is_water == "是" { is_war = 1 } if is_water == "否" { is_war = 2 } if is_water == "请选择" { is_war = 0 } drhy_water := c.GetString("drhy_water") dry_water_hour := c.GetString("dry_water_hour") water_machine := c.GetString("water_machine") add_amount, _ := c.GetFloat("add_amount") reduce_amount, _ := c.GetFloat("reduce_amount") dialysis_remark := c.GetString("dialysis_remark") prescribing_number, _ := c.GetFloat("prescribing_number") prescription_sodium := c.GetString("prescription_sodium") start_sodium := c.GetString("start_sodium") sodium_curve := c.GetString("sodium_curve") treatment_remark := c.GetString("treatment_remark") dialysis_fluid_flow := c.GetString("dialysis_fluid_flow") sodium_bicarbonate_flow := c.GetString("sodium_bicarbonate_flow") prescription_water, _ := c.GetFloat("prescription_water") dialysis_strainer := c.GetString("dialysis_strainer") chaptalization := c.GetString("chaptalization") washing_time := c.GetString("washing_time") warsh_count := c.GetString("warsh_count") blood_access_part_id := c.GetString("blood_access_part_id") anticoagulant_weichi_hour := c.GetString("anticoagulant_weichi_hour") dialyzate := c.GetString("dialyzate") appRole, _ := service.FindAdminRoleTypeById(adminUserInfo.Org.Id, adminUserInfo.AdminUser.Id, adminUserInfo.App.Id) //template, _ := service.GetOrgInfoTemplate(adminUserInfo.Org.Id) // //if template.TemplateId == 2 || template.TemplateId == 6 { // if appRole.UserType == 3 { // headNursePermission, getPermissionErr := service.GetAdminUserSpecialPermission(adminUserInfo.Org.Id, adminUserInfo.App.Id, adminUserInfo.AdminUser.Id, models.SpecialPermissionTypeHeadNurse) // if getPermissionErr != nil { // c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) // return // } else if headNursePermission == nil { // c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodePrescriptionPermissionDeniedModify) // return // } // } //} // 查询信息规挡的设置天数 infor, _ := service.GetDialysisInformationSetting(adminUserInfo.Org.Id) if infor.ID > 0 && infor.WeekDay > 0 { var cha_time int64 timeNowStr := time.Now().Format("2006-01-02") timeNewDate, _ := utils.ParseTimeStringToTime("2006-01-02", timeNowStr) //今日的日期减去设置的日期 cha_time = timeNewDate.Unix() - infor.WeekDay*86400 if cha_time >= recordDate.Unix() { //查询审核是否允许 infor, _ := service.GetDialysisInformationByRecordDate(id, recordDate.Unix(), adminUserInfo.Org.Id, 1) //申请状态不允许的情况 拒绝修改 if infor.ApplicationStatus != 1 { c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeInformationExist) return } } } if mode_id > 0 { var str string //查找该机构用的是什么透析器 filedConfig, _ := service.GetFiledConfig(adminUserInfo.Org.Id) if filedConfig.ID > 0 { str = dialyzerPerfusionApparatus } else { str = dialysis_dialyszers + "/" + dialysis_irrigation + " " + dialysis_strainer } service.ModifyScheduleMode(mode_id, id, recordDate.Unix(), adminUserInfo.Org.Id, str) } //TODO 需要根据角色去判断 prescription := models.DialysisPrescription{ UserOrgId: adminUserInfo.Org.Id, PatientId: id, RecordDate: recordDate.Unix(), ModeId: mode_id, DialysisDuration: dialysis_duration, Dialyzer: dialyzer, PerfusionApparatus: perfusion_apparatus, BloodFlowVolume: blood_flow_volume, DewaterAmount: dewater_amount, DisplaceLiqui: displace_liqui, ReplacementWay: replacement_way, Anticoagulant: anticoagulant, AnticoagulantShouji: anticoagulant_shouji, AnticoagulantWeichi: anticoagulant_weichi, AnticoagulantZongliang: anticoagulant_zongliang, AnticoagulantGaimingcheng: anticoagulant_gaimingcheng, AnticoagulantGaijiliang: anticoagulant_gaijiliang, Kalium: kalium, Sodium: sodium, Calcium: calcium, Bicarbonate: bicarbonate, Glucose: glucose, // DryWeight: dry_weight, DialysateFlow: dialysate_flow, DialysateTemperature: dialysate_temperature, // PrescriptionDoctor: prescription_doctor, ReplacementTotal: replacement_total, Conductivity: conductivity, Remark: remark, Status: 1, CreatedTime: time.Now().Unix(), UpdatedTime: time.Now().Unix(), DialysisDurationMinute: dialysisDurationMinute, DialysisDurationHour: dialysisDurationHour, TargetUltrafiltration: targetUltrafiltration, DialysateFormulation: dialysateFormulation, DialyzerPerfusionApparatus: dialyzerPerfusionApparatus, BodyFluid: body_fluid, SpecialMedicine: special_medicine, SpecialMedicineOther: special_medicine_other, DisplaceLiquiPart: displace_liqui_part, DisplaceLiquiValue: displace_liqui_value, BloodAccess: blood_access, Ultrafiltration: ultrafiltration, BodyFluidOther: body_fluid_other, Niprocart: niprocart, Jms: jms, FistulaNeedleSet: fistula_needle_set, FistulaNeedleSet16: fistula_needle_set_16, Hemoperfusion: hemoperfusion, DialyserSterilised: dialyser_sterilised, Filtryzer: filtryzer, Dialyzers: dialyzers, Injector: injector, Bloodlines: bloodlines, TubingHemodialysis: tubing_hemodialysis, Package: safe_package, ALiquid: a_liquid, TargetKtv: target_ktv, PreImpulse: pre_impulse, AnticoagulantStopTimeHour: anticoagulant_stop_time_hour, AnticoagulantStopTimeMin: anticoagulant_stop_time_min, Blood: blood, DialysisDialyszers: dialysis_dialyszers, DialysisIrrigation: dialysis_irrigation, AntioxidantCommodityName: antioxidant_commodity_name, DisplaceSpeed: displace_speed, Illness: illness, Amylaceum: amylaceum, SingleTime: single_time, SingleWater: single_water, ReplacementFlow: replacement_flow, PlasmaSeparator: plasma_separator, BilirubinAdsorptionColumn: bilirubin_adsorption_column, OxygenUptake: oxygen_uptake, OxygenFlow: oxygen_flow, OxygenTime: oxygen_time, HemodialysisPipelines: hemodialysis_pipelines, HemodialysisPipelinesCount: hemodialysis_pipelines_count, PunctureNeedle: puncture_needle, PunctureNeedleCount: puncture_needle_count, Epo: epo, EpoCount: epo_count, MaxUltrafiltrationRate: max_ultrafiltration_rate, AdminUserId: admin_user_id, IsWater: is_war, DrhyWater: drhy_water, DryWaterHour: dry_water_hour, WaterMachine: water_machine, AddAmount: add_amount, ReduceAmount: reduce_amount, DialysisRemark: dialysis_remark, PrescribingNumber: prescribing_number, StartSodium: start_sodium, SodiumCurve: sodium_curve, TreatmentRemark: treatment_remark, PrescriptionSodium: prescription_sodium, DialysisFluidFlow: dialysis_fluid_flow, SodiumBicarbonateFlow: sodium_bicarbonate_flow, PrescriptionWater: prescription_water, DialysisStrainer: dialysis_strainer, Chaptalization: chaptalization, WashingTime: washing_time, WarshCount: warsh_count, BloodAccessPartId: blood_access_part_id, AnticoagulantWeichiHour: anticoagulant_weichi_hour, Dialyzate: dialyzate, } //查询最近透析准备表里是否存在 透析器 灌流器 // //splitStr := strings.Split(dialysis_dialyszers, ",") // //splitIrrigation := strings.Split(dialysis_irrigation, ",") // //mation, _ := service.GetGoodInfoMation(adminUserInfo.Org.Id) //if len(mation)>0{ // for _, item := range splitStr { // for _,it := range mation{ // if(item == it.SpecificationName){ // // //查询最近一次的透析器 // _, errcode := service.GetDialysisBeforePrepare(it.GoodTypeId, it.ID, adminUserInfo.Org.Id,id) // // if errcode == gorm.ErrRecordNotFound{ // //插入数据 // prepare := models.DialysisBeforePrepare{ // UserOrgId: adminUserInfo.Org.Id, // PatientId: id, // RecordDate: recordDate.Unix(), // GoodTypeId: it.GoodTypeId, // GoodId: it.ID, // Count: 1, // Ctime: time.Now().Unix(), // Creater: adminUserInfo.AdminUser.Id, // Status:1, // // } // errcode := service.CreateDialysisBeforePrepareOne(&prepare) // fmt.Println("",errcode) // } // } // } // // } // // for _, item := range splitIrrigation { // for _,it := range mation{ // if(item == it.SpecificationName){ // //查询最近一次的透析器 // _, errcode := service.GetDialysisBeforePrepare(it.GoodTypeId, it.ID, adminUserInfo.Org.Id,id) // if errcode == gorm.ErrRecordNotFound{ // //插入数据 // prepare := models.DialysisBeforePrepare{ // UserOrgId: adminUserInfo.Org.Id, // PatientId: id, // RecordDate: recordDate.Unix(), // GoodTypeId: it.GoodTypeId, // GoodId: it.ID, // Count: 1, // Ctime: time.Now().Unix(), // Creater: adminUserInfo.AdminUser.Id, // Status:1, // // } // errcode := service.CreateDialysisBeforePrepareOne(&prepare) // fmt.Println(errcode) // } // } // } // } //} _, dialysisPrescription := service.FindDialysisPrescriptionByReordDate(id, recordDate.Unix(), adminUserInfo.Org.Id) if dialysisPrescription.ID == 0 { //新增 if appRole.UserType == 2 || appRole.UserType == 1 { prescription.PrescriptionDoctor = adminUserInfo.AdminUser.Id } prescription.Creater = adminUserInfo.AdminUser.Id //针对河间咸得 if adminUserInfo.Org.Id == 10164 || adminUserInfo.Org.Id == 10090 || adminUserInfo.Org.Id == 3877 { if prescription.ModeId != 2 && prescription.ModeId != 5 && prescription.ModeId != 12 { prescription.DisplaceLiquiPart = 0 prescription.DisplaceLiquiValue = 0 } } if adminUserInfo.Org.Id == 10340 && prescription.AdminUserId == 0 { prescription.AdminUserId = adminUserInfo.AdminUser.Id } err := service.AddSigleRecord(&prescription) //记录日志 byterequest, _ := json.Marshal(prescription) prescriptionLog := models.XtDialysisPrescriptionLog{ UserOrgId: prescription.UserOrgId, Ctime: time.Now().Unix(), Mtime: 0, ErrLog: string(byterequest), AdminUserId: adminUserInfo.AdminUser.Id, RecordDate: prescription.RecordDate, PatientId: prescription.PatientId, Source: "手机端新增保存处方", Status: 1, } service.CreatePrescriptionLog(prescriptionLog) finish := models.XtDialysisFinish{ IsFinish: 1, UserOrgId: adminUserInfo.Org.Id, Status: 1, Ctime: time.Now().Unix(), Mtime: 0, Module: 1, RecordDate: recordDate.Unix(), Sourse: 1, PatientId: id, } dialysisFinish, _ := service.GetDialysisFinish(adminUserInfo.Org.Id, recordDate.Unix(), 1, id) if dialysisFinish.ID == 0 { service.CreateDialysisFinish(finish) } //长沙南雅医院,自动生成抗凝剂的临时处方 if adminUserInfo.Org.Id == 3877 || adminUserInfo.Org.Id == 9671 || adminUserInfo.Org.Id == 10340 { if prescribing_number == 0 { prescribing_number = 1 } if prescribing_number == 0 && id == 14682 { prescribing_number = 2 } if prescribing_number == 0 && id == 18560 { prescribing_number = 2 } advice := models.DoctorAdvice{ UserOrgId: adminUserInfo.Org.Id, PatientId: id, GroupNo: 0, AdviceType: 2, RecordDate: recordDate.Unix(), AdviceDate: recordDate.Unix(), StartTime: recordDate.Unix() + 6.5*60*60, // 根据排班班次,给默认时间 AdviceName: "", // 根据抗凝剂转换为中文 + 首剂 + 维持 + 总量 AdviceDesc: "", ReminderDate: 0, SingleDose: anticoagulant_zongliang, SingleDoseUnit: "iu", DrugSpec: 0, DrugSpecUnit: "", PrescribingNumber: prescribing_number, // 前端传过来的开药数量 PrescribingNumberUnit: "支", DeliveryWay: "静脉注射", ExecutionFrequency: "上机前", AdviceDoctor: 0, Status: 1, CreatedTime: time.Now().Unix(), UpdatedTime: time.Now().Unix(), IsPrescription: 1, ExecutionState: 2, StopState: 2, IsSettle: 2, } // 查询排班信息 schedulePatient, _ := service.GetScheduleByPatient(id, recordDate.Unix(), adminUserInfo.Org.Id) if schedulePatient.ID > 0 { if schedulePatient.ScheduleType == 1 { advice.StartTime = recordDate.Unix() + 6.5*60*60 } if schedulePatient.ScheduleType == 2 { advice.StartTime = recordDate.Unix() + 9*60*60 } } // 抗凝剂名称 switch anticoagulant { case 1: advice.AdviceName = "无肝素" break case 2: advice.AdviceName = "普通肝素" break case 3: advice.AdviceName = "低分子肝素" break case 4: advice.AdviceName = "阿加曲班" break case 5: advice.AdviceName = "枸橼酸钠" break case 6: advice.AdviceName = "低分子肝素钙" break case 7: advice.AdviceName = "低分子肝素钠" break case 8: advice.AdviceName = "依诺肝素" break case 9: advice.AdviceName = "达肝素" break case 10: advice.AdviceName = "体外抗凝" break case 11: advice.AdviceName = "那曲肝素" break case 12: advice.AdviceName = "无抗凝剂" break } //advice.AdviceDesc = "首剂" + strconv.FormatFloat(anticoagulant_shouji, 'f', -1, 64) + "维持" + strconv.FormatFloat(anticoagulant_weichi, 'f', -1, 64) + "总量" + strconv.FormatFloat(anticoagulant_zongliang, 'f', -1, 64) if appRole.UserType == 2 || appRole.UserType == 1 || appRole.UserType == 3 || appRole.UserType == 4 { advice.AdviceDoctor = appRole.AdminUserId } // 患者的临时医嘱里查找是否有抗凝剂临时医嘱 advicePrescription, _ := service.GetAdvicesByPrescription(adminUserInfo.Org.Id, id, recordDate.Unix()) if advicePrescription.ID > 0 && (anticoagulant == 3 || anticoagulant == 6 || anticoagulant == 7) { advice.AdviceName = "低分子肝素钠注射液" // 修改患者临时医嘱里的抗凝剂医嘱 advice.ID = advicePrescription.ID service.UpdateDoctorAdviceById(advicePrescription.ID, prescribing_number, anticoagulant_zongliang) } else { if anticoagulant == 3 || anticoagulant == 6 || anticoagulant == 7 { advice.AdviceName = "低分子肝素钠注射液" // 新增患者临时医嘱里的抗凝剂医嘱 service.CreateDoctorAdvice(&advice) } } key := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(id, 10) + ":" + strconv.FormatInt(recordDate.Unix(), 10) + ":doctor_advices" redis := service.RedisClient() defer redis.Close() //清空key 值 redis.Set(key, "", time.Second) keyOne := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(recordDate.Unix(), 10) + ":advice_list_all" redis.Set(keyOne, "", time.Second) } //获取key,清空redis key := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(id, 10) + ":" + strconv.FormatInt(recordDate.Unix(), 10) + ":" + strconv.FormatInt(mode_id, 10) + ":dialysis_prescribe" redis := service.RedisClient() //清空key 值 redis.Set(key, "", time.Second) keyOne := "scheduals_" + recordDateStr + "_" + strconv.FormatInt(adminUserInfo.Org.Id, 10) //清空key 值 redis.Set(keyOne, "", time.Second) keyTwo := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(id, 10) + ":" + strconv.FormatInt(mode_id, 10) + ":dialysis_solution" //清空key 值 redis.Set(keyTwo, "", time.Second) keySix := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(recordDate.Unix(), 10) + ":prescriptions_list_all" redis.Set(keySix, "", time.Second) keySeven := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(id, 10) + ":" + strconv.FormatInt(recordDate.Unix(), 10) + ":dialysis_prescribe_by_mode" redis.Set(keySeven, "", time.Second) if err == nil { updateErr := service.UpdateScheduleModeId(patient.ID, adminUserInfo.Org.Id, recordDate.Unix(), mode_id) keyThree := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(id, 10) + ":" + strconv.FormatInt(mode_id, 10) + ":dialysis_prescribe_by_mode" //清空key 值 redis.Set(keyThree, "", time.Second) keyFour := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(mode_id, 10) + ":system_dialysis_prescribe" //清空key 值 redis.Set(keyFour, "", time.Second) keyFive := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(id, 10) + ":" + strconv.FormatInt(recordDate.Unix(), 10) + ":schedual_detail" redis.Set(keyFive, "", time.Second) keySix := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(recordDate.Unix(), 10) + ":prescriptions_list_all" redis.Set(keySix, "", time.Second) keySeven := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(id, 10) + ":" + strconv.FormatInt(recordDate.Unix(), 10) + ":dialysis_prescribe_by_mode" redis.Set(keySeven, "", time.Second) keyOne := "scheduals_" + recordDateStr + "_" + strconv.FormatInt(adminUserInfo.Org.Id, 10) //清空key 值 redis.Set(keyOne, "", time.Second) if updateErr != nil { utils.ErrorLog("%v", updateErr) } defer redis.Close() c.ServeSuccessJSON(map[string]interface{}{ "prescription": prescription, }) } } else { //修改 //if mode_id > 0 { // service.ModifyScheduleMode(mode_id, patient.ID, recordDate.Unix(), adminUserInfo.Org.Id) //} //if template.TemplateId == 1 { // if dialysisPrescription.Creater != adminUserInfo.AdminUser.Id && dialysisPrescription.Creater != 0 { // headNursePermission, getPermissionErr := service.GetAdminUserSpecialPermission(adminUserInfo.Org.Id, adminUserInfo.App.Id, adminUserInfo.AdminUser.Id, models.SpecialPermissionTypeHeadNurse) // if getPermissionErr != nil { // c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) // return // } else if headNursePermission == nil { // c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodePrescriptionPermissionDeniedModify) // return // } // } //} prescription.CreatedTime = dialysisPrescription.CreatedTime prescription.Modifier = adminUserInfo.AdminUser.Id if appRole.UserType == 2 || appRole.UserType == 1 { prescription_doctor := adminUserInfo.AdminUser.Id prescription.PrescriptionDoctor = prescription_doctor } else { prescription.PrescriptionDoctor = dialysisPrescription.PrescriptionDoctor } if dialysisPrescription.Creater == 0 { //体重称 prescription.Creater = adminUserInfo.AdminUser.Id } else { prescription.Creater = dialysisPrescription.Creater if adminUserInfo.Org.Id == 9882 { if appRole.UserType == 2 || appRole.UserType == 1 { prescription_doctor := adminUserInfo.AdminUser.Id prescription.PrescriptionDoctor = prescription_doctor prescription.Creater = prescription_doctor } } } prescription.ID = dialysisPrescription.ID service.UpDateDialysisPrescription(&prescription) //记录日志 byterequest, _ := json.Marshal(prescription) prescriptionLog := models.XtDialysisPrescriptionLog{ UserOrgId: prescription.UserOrgId, Ctime: time.Now().Unix(), Mtime: 0, ErrLog: string(byterequest), AdminUserId: adminUserInfo.AdminUser.Id, RecordDate: prescription.RecordDate, PatientId: prescription.PatientId, Source: "手机端修改处方", Status: 1, } service.CreatePrescriptionLog(prescriptionLog) finish := models.XtDialysisFinish{ IsFinish: 1, UserOrgId: adminUserInfo.Org.Id, Status: 1, Ctime: time.Now().Unix(), Mtime: 0, Module: 1, RecordDate: recordDate.Unix(), Sourse: 1, PatientId: id, } dialysisFinish, _ := service.GetDialysisFinish(adminUserInfo.Org.Id, recordDate.Unix(), 1, id) if dialysisFinish.ID == 0 { service.CreateDialysisFinish(finish) } //修改处方 if adminUserInfo.Org.Id == 3877 || adminUserInfo.Org.Id == 9671 || adminUserInfo.Org.Id == 10340 { // 患者的临时医嘱里查找是否有抗凝剂临时医嘱 advicePrescription, _ := service.GetAdvicesByPrescription(adminUserInfo.Org.Id, id, recordDate.Unix()) if advicePrescription.ID > 0 { service.UpdateDoctorAdvieByIdOne(advicePrescription.ID, prescribing_number, anticoagulant_zongliang) key := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(id, 10) + ":" + strconv.FormatInt(recordDate.Unix(), 10) + ":doctor_advices" redis := service.RedisClient() defer redis.Close() //清空key 值 redis.Set(key, "", time.Second) keyOne := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(recordDate.Unix(), 10) + ":advice_list_all" redis.Set(keyOne, "", time.Second) } } //获取key,清空redis key := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(id, 10) + ":" + strconv.FormatInt(recordDate.Unix(), 10) + ":" + strconv.FormatInt(mode_id, 10) + ":dialysis_prescribe" redis := service.RedisClient() //清空key 值 redis.Set(key, "", time.Second) keyOne := "scheduals_" + recordDateStr + "_" + strconv.FormatInt(adminUserInfo.Org.Id, 10) //清空key 值 redis.Set(keyOne, "", time.Second) keySix := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(recordDate.Unix(), 10) + ":prescriptions_list_all" redis.Set(keySix, "", time.Second) keySeven := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(id, 10) + ":" + strconv.FormatInt(recordDate.Unix(), 10) + ":dialysis_prescribe_by_mode" redis.Set(keySeven, "", time.Second) updateErr := service.UpdateScheduleModeId(patient.ID, adminUserInfo.Org.Id, recordDate.Unix(), mode_id) keyTwoOne := "scheduals_" + recordDateStr + "_" + strconv.FormatInt(adminUserInfo.Org.Id, 10) //清空key 值 redis.Set(keyTwoOne, "", time.Second) defer redis.Close() if updateErr != nil { utils.ErrorLog("%v", updateErr) } c.ServeSuccessJSON(map[string]interface{}{ "prescription": prescription, }) } } func (c *DialysisAPIController) Finish() { id, _ := c.GetInt64("patient", 0) recordDateStr := c.GetString("record_date") nurseID, _ := c.GetInt64("nurse") end_time := c.GetString("end_time") puncture_point_haematoma, _ := c.GetInt64("puncture_point_haematoma") internal_fistula := c.GetString("blood_access_internal_fistula") catheter := c.GetString("catheter") cruor := c.GetString("cruor") mission := c.GetString("mission") condenser := c.GetString("condenser") if id <= 0 || nurseID <= 0 { c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } adminUserInfo := c.GetMobileAdminUserInfo() patient, _ := service.FindPatientById(adminUserInfo.Org.Id, id) if patient.ID == 0 { c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodePatientNoExist) return } 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 } if len(recordDateStr) == 0 { recordDateStr = time.Now().Format("2006-01-02") } recordDate, parseDateErr := utils.ParseTimeStringToTime("2006-01-02", recordDateStr) if parseDateErr != nil { c.ErrorLog("日期(%v)解析错误:%v", recordDateStr, parseDateErr) c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } endDate, parseEndDateErr := utils.ParseTimeStringToTime("2006-01-02 15:04:05", end_time) if parseEndDateErr != nil { c.ErrorLog("日期(%v)解析错误:%v", end_time, parseEndDateErr) c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } // 查询信息规挡的设置天数 infor, _ := service.GetDialysisInformationSetting(adminUserInfo.Org.Id) if infor.ID > 0 && infor.WeekDay > 0 { var cha_time int64 timeNowStr := time.Now().Format("2006-01-02") timeNewDate, _ := utils.ParseTimeStringToTime("2006-01-02", timeNowStr) //今日的日期减去设置的日期 cha_time = timeNewDate.Unix() - infor.WeekDay*86400 if cha_time >= recordDate.Unix() { //查询审核是否允许 infor, _ := service.GetDialysisInformationByRecordDate(id, recordDate.Unix(), adminUserInfo.Org.Id, 8) //申请状态不允许的情况 拒绝修改 if infor.ApplicationStatus != 1 { c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeInformationExist) return } } } //now := time.Now() //year, month, day := now.Date() //today_time := time.Date(year, month, day, 0, 0, 0, 0, time.Local) //todayTimeStamp := today_time.Unix() // 获取当天的第一条透析纪录 fmonitorRecords, getMonitorRecordsErr := service.MobileGetMonitorRecordFirst(adminUserInfo.Org.Id, id, recordDate.Unix()) if getMonitorRecordsErr != nil { c.ErrorLog("获取透析监测记录失败:%v", getMonitorRecordsErr) c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } // 获取当前的最后一条透析纪录 endmonitorRecords, getMonitorRecordsErr := service.MobileGetLastMonitorRecordOne(adminUserInfo.Org.Id, id, recordDate.Unix()) if getMonitorRecordsErr != nil { c.ErrorLog("获取透析监测记录失败:%v", getMonitorRecordsErr) c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } fmt.Println(endmonitorRecords.UltrafiltrationVolume) assessmentAfterDislysis, getAADErr := service.MobileGetAssessmentAfterDislysisOne(adminUserInfo.Org.Id, id, recordDate.Unix()) if getAADErr != nil { c.ErrorLog("获取透后评估失败:%v", getAADErr) c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } lastAssessmentAfterDislysis, _ := service.MobileGetLastTimeAssessmentAfterDislysisOne(adminUserInfo.Org.Id, id, recordDate.Unix()) lastAssessmentAfterDislysisTwo, _ := service.MobileGetLastTimeAssessmentAfterDislysisTwo(adminUserInfo.Org.Id, id, recordDate.Unix()) _, dialysisOrder := service.FindDialysisRecordById(adminUserInfo.Org.Id, id, recordDate.Unix()) 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 = id tempassessmentAfterDislysis.UserOrgId = adminUserInfo.Org.Id } //长沙南雅 if adminUserInfo.Org.Id == 9671 || adminUserInfo.Org.Id == 9675 || adminUserInfo.Org.Id == 10340 { //获取最后一条透析处方数据 prescription, _ := service.GetLastDialysisPrescriptionByPatientIdTwo(adminUserInfo.Org.Id, id, recordDate.Unix()) evaluation, _ := service.MobileGetPredialysisEvaluationTwo(adminUserInfo.Org.Id, id, recordDate.Unix()) tempassessmentAfterDislysis.WeightAfter = evaluation.WeightBefore - prescription.TargetUltrafiltration/1000 } if dialysisOrder.Stage == 1 { temp_time := (float64(endDate.Unix()) - float64(dialysisOrder.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) tempassessmentAfterDislysis.ActualTreatmentHour = hour tempassessmentAfterDislysis.ActualTreatmentMinute = minute } if fmonitorRecords.ID > 0 && endmonitorRecords.ID > 0 { //var num1 int64 //num1 = endmonitorRecords.OperateTime - fmonitorRecords.OperateTime //fmt.Println(num1) //sub := float64(num1 / 3600) //fmt.Println(sub) //tempassessmentAfterDislysis.ActualTreatmentHour = int64(math.Floor(sub)) //sub2 := float64(((endmonitorRecords.OperateTime - fmonitorRecords.OperateTime) % 3600) / 60) //tempassessmentAfterDislysis.ActualTreatmentMinute = int64(math.Floor(sub2)) tempassessmentAfterDislysis.Temperature = endmonitorRecords.Temperature tempassessmentAfterDislysis.PulseFrequency = endmonitorRecords.PulseFrequency tempassessmentAfterDislysis.BreathingRate = endmonitorRecords.BreathingRate if adminUserInfo.Org.Id != 10375 { tempassessmentAfterDislysis.SystolicBloodPressure = endmonitorRecords.SystolicBloodPressure tempassessmentAfterDislysis.DiastolicBloodPressure = endmonitorRecords.DiastolicBloodPressure } if adminUserInfo.Org.Id != 10445 { tempassessmentAfterDislysis.ActualUltrafiltration = endmonitorRecords.UltrafiltrationVolume } //北方营口医院 if adminUserInfo.Org.Id == 10445 { //获取最后一条透析处方数据 lastprescription, _ := service.GetLastDialysisPrescriptionByPatientIdTwo(adminUserInfo.Org.Id, id, recordDate.Unix()) tempassessmentAfterDislysis.ActualDisplacement = lastprescription.DisplaceLiquiValue } else { tempassessmentAfterDislysis.ActualDisplacement = endmonitorRecords.DisplacementQuantity } //新化博翔 if adminUserInfo.Org.Id == 10447 { tempassessmentAfterDislysis.Temperature = endmonitorRecords.Temperature } //阳春 if adminUserInfo.Org.Id == 10485 { tempassessmentAfterDislysis.ActualUltrafiltration = endmonitorRecords.UltrafiltrationVolume / 1000 } if adminUserInfo.Org.Id == 10551 { //获取最后一条透析处方数据 lastprescription, _ := service.GetLastDialysisPrescriptionByPatientIdTwo(adminUserInfo.Org.Id, id, recordDate.Unix()) tempassessmentAfterDislysis.ActualUltrafiltration = lastprescription.TargetUltrafiltration * 1000 } if adminUserInfo.Org.Id == 10580 { tempassessmentAfterDislysis.ActualUltrafiltration = 0 } if adminUserInfo.Org.Id == 10612 { tempassessmentAfterDislysis.ActualUltrafiltration = endmonitorRecords.UltrafiltrationVolume / 1000 } //孝康 if adminUserInfo.Org.Id == 10693 { MonitorSystolicBloodPressureOne, _ := strconv.ParseFloat(endmonitorRecords.MonitorSystolicBloodPressureOne, 64) tempassessmentAfterDislysis.SystolicBloodPressure = MonitorSystolicBloodPressureOne DiastolicBloodPressure, _ := strconv.ParseFloat(endmonitorRecords.MonitorDiastolicBloodPressureOne, 64) tempassessmentAfterDislysis.DiastolicBloodPressure = DiastolicBloodPressure tempassessmentAfterDislysis.BreathingRate = endmonitorRecords.BreathingRate pulseFrequency, _ := strconv.ParseFloat(endmonitorRecords.MonitorPulseFrequencyOne, 64) tempassessmentAfterDislysis.PulseFrequency = pulseFrequency DisplacementQuantityOne, _ := strconv.ParseFloat(endmonitorRecords.DisplacementQuantityOne, 64) tempassessmentAfterDislysis.ActualDisplacement = DisplacementQuantityOne UltrafiltrationVolumeOne, _ := strconv.ParseFloat(endmonitorRecords.UltrafiltrationVolumeOne, 64) tempassessmentAfterDislysis.ActualUltrafiltration = UltrafiltrationVolumeOne } if adminUserInfo.Org.Id == 10697 { lastWeightAfter, _ := service.GetLastWeightAfter(tempassessmentAfterDislysis.PatientId, tempassessmentAfterDislysis.AssessmentDate, adminUserInfo.Org.Id) floatAfeter := strconv.FormatFloat(lastWeightAfter.WeightAfter, 'f', -1, 64) lastWeightAfter.LastAfterWeight = floatAfeter } } if adminUserInfo.Org.Id == 10101 || adminUserInfo.Org.Id == 9671 || adminUserInfo.Org.Id == 3877 || adminUserInfo.Org.Id == 9675 || adminUserInfo.Org.Id == 10215 || adminUserInfo.Org.Id == 10233 || adminUserInfo.Org.Id == 10223 || adminUserInfo.Org.Id == 10243 || adminUserInfo.Org.Id == 10340 || adminUserInfo.Org.Id == 10414 || adminUserInfo.Org.Id == 10430 || adminUserInfo.Org.Id == 10432 || adminUserInfo.Org.Id == 10445 || adminUserInfo.Org.Id == 10223 || adminUserInfo.Org.Id == 9829 || adminUserInfo.Org.Id == 10432 || adminUserInfo.Org.Id == 10440 || adminUserInfo.Org.Id == 10469 || adminUserInfo.Org.Id == 10693 { evaluation, _ := service.MobileGetPredialysisEvaluationOne(adminUserInfo.Org.Id, id, recordDate.Unix()) if evaluation.SystolicBloodPressure == 0 { evaluation.SystolicBloodPressure = fmonitorRecords.SystolicBloodPressure if adminUserInfo.Org.Id == 10693 { SystolicBloodPressureOne, _ := strconv.ParseFloat(fmonitorRecords.MonitorSystolicBloodPressureOne, 64) evaluation.SystolicBloodPressure = SystolicBloodPressureOne } pre := models.PredialysisEvaluation{ SystolicBloodPressure: evaluation.SystolicBloodPressure, } fmt.Println("prew", pre) getNurseErr := service.UpdatePredialysisEvaluation(&pre, evaluation.ID) key := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(id, 10) + ":" + strconv.FormatInt(recordDate.Unix(), 10) + ":assessment_before_dislysis" keyOne := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(recordDate.Unix(), 10) + ":assessment_befores_list_all" redis := service.RedisClient() redis.Set(key, "", time.Second) redis.Set(keyOne, "", time.Second) defer redis.Close() fmt.Println(getNurseErr) } if evaluation.DiastolicBloodPressure == 0 { evaluation.DiastolicBloodPressure = fmonitorRecords.DiastolicBloodPressure if adminUserInfo.Org.Id == 10693 { DiastolicBloodPressureOne, _ := strconv.ParseFloat(fmonitorRecords.MonitorDiastolicBloodPressureOne, 64) evaluation.DiastolicBloodPressure = DiastolicBloodPressureOne } pres := models.PredialysisEvaluation{ DiastolicBloodPressure: evaluation.DiastolicBloodPressure, } getNurseErr := service.UpdatePredialysisEvaluationTwo(&pres, evaluation.ID) key := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(id, 10) + ":" + strconv.FormatInt(recordDate.Unix(), 10) + ":assessment_before_dislysis" redis := service.RedisClient() redis.Set(key, "", time.Second) keyOne := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(recordDate.Unix(), 10) + ":assessment_befores_list_all" redis.Set(keyOne, "", time.Second) defer redis.Close() fmt.Println(getNurseErr) } if evaluation.PulseFrequency == 0 { evaluation.PulseFrequency = fmonitorRecords.PulseFrequency if adminUserInfo.Org.Id == 10693 { pulseFrequency, _ := strconv.ParseFloat(endmonitorRecords.MonitorPulseFrequencyOne, 64) evaluation.PulseFrequency = pulseFrequency } press := models.PredialysisEvaluation{ PulseFrequency: evaluation.PulseFrequency, } getNurseErr := service.UpdatePredialysisEvaluationThree(&press, evaluation.ID) key := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(id, 10) + ":" + strconv.FormatInt(recordDate.Unix(), 10) + ":assessment_before_dislysis" redis := service.RedisClient() redis.Set(key, "", time.Second) keyOne := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(recordDate.Unix(), 10) + ":assessment_befores_list_all" redis.Set(keyOne, "", time.Second) defer redis.Close() fmt.Println(getNurseErr) } if evaluation.Temperature == 0 { evaluation.Temperature = fmonitorRecords.Temperature press := models.PredialysisEvaluation{ Temperature: evaluation.Temperature, } getNurseErr := service.UpdatePredialysisEvaluationFour(&press, evaluation.ID) key := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(id, 10) + ":" + strconv.FormatInt(recordDate.Unix(), 10) + ":assessment_before_dislysis" redis := service.RedisClient() redis.Set(key, "", time.Second) keyOne := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(recordDate.Unix(), 10) + ":assessment_befores_list_all" redis.Set(keyOne, "", time.Second) defer redis.Close() fmt.Println(getNurseErr) } } if adminUserInfo.Org.Id == 9583 { //获取透析处方的最后一条数据 diaPrescription, diaerr := service.GetLastDialysisPrescriptionByPatientId(adminUserInfo.Org.Id, id, recordDate.Unix()) if diaerr != nil { c.ErrorLog("获取透析处方失败:%v", diaerr) c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } if diaPrescription.ID > 0 && adminUserInfo.Org.Id == 9583 { tempassessmentAfterDislysis.ActualUltrafiltration = diaPrescription.TargetUltrafiltration } } if endmonitorRecords.ID > 0 && adminUserInfo.Org.Id == 10101 { tempassessmentAfterDislysis.ActualUltrafiltration = endmonitorRecords.UltrafiltrationVolume / 1000 } if endmonitorRecords.ID > 0 && adminUserInfo.Org.Id == 10233 { tempassessmentAfterDislysis.ActualUltrafiltration = endmonitorRecords.UltrafiltrationVolume / 1000 } if endmonitorRecords.ID > 0 && adminUserInfo.Org.Id == 10060 { tempassessmentAfterDislysis.ActualUltrafiltration = endmonitorRecords.UltrafiltrationVolume } if endmonitorRecords.ID > 0 && adminUserInfo.Org.Id == 10617 { tempassessmentAfterDislysis.ActualUltrafiltration = endmonitorRecords.UltrafiltrationVolume } if endmonitorRecords.ID > 0 && adminUserInfo.Org.Id == 9829 { tempassessmentAfterDislysis.SystolicBloodPressure = endmonitorRecords.SystolicBloodPressure tempassessmentAfterDislysis.DiastolicBloodPressure = endmonitorRecords.DiastolicBloodPressure } if endmonitorRecords.ID > 0 && adminUserInfo.Org.Id == 10432 { tempassessmentAfterDislysis.SystolicBloodPressure = endmonitorRecords.SystolicBloodPressure tempassessmentAfterDislysis.DiastolicBloodPressure = endmonitorRecords.DiastolicBloodPressure } if endmonitorRecords.ID > 0 && adminUserInfo.Org.Id == 10495 { tempassessmentAfterDislysis.SystolicBloodPressure = endmonitorRecords.SystolicBloodPressure tempassessmentAfterDislysis.DiastolicBloodPressure = endmonitorRecords.DiastolicBloodPressure tempassessmentAfterDislysis.Temperature = endmonitorRecords.Temperature tempassessmentAfterDislysis.BreathingRate = endmonitorRecords.BreathingRate } if endmonitorRecords.ID > 0 && adminUserInfo.Org.Id == 10598 { tempassessmentAfterDislysis.SystolicBloodPressure = 0 tempassessmentAfterDislysis.DiastolicBloodPressure = 0 } if endmonitorRecords.ID > 0 && adminUserInfo.Org.Id == 10683 { tempassessmentAfterDislysis.SystolicBloodPressure = 0 tempassessmentAfterDislysis.DiastolicBloodPressure = 0 } if lastAssessmentAfterDislysis != nil { tempassessmentAfterDislysis.BloodPressureType = lastAssessmentAfterDislysis.BloodPressureType tempassessmentAfterDislysis.WeighingWay = lastAssessmentAfterDislysis.WeighingWay tempassessmentAfterDislysis.Cruor = lastAssessmentAfterDislysis.Cruor tempassessmentAfterDislysis.SymptomAfterDialysis = lastAssessmentAfterDislysis.SymptomAfterDialysis tempassessmentAfterDislysis.InternalFistula = lastAssessmentAfterDislysis.InternalFistula tempassessmentAfterDislysis.Catheter = lastAssessmentAfterDislysis.Catheter tempassessmentAfterDislysis.Complication = lastAssessmentAfterDislysis.Complication tempassessmentAfterDislysis.DialysisIntakes = lastAssessmentAfterDislysis.DialysisIntakes tempassessmentAfterDislysis.DialysisIntakesFeed = lastAssessmentAfterDislysis.DialysisIntakesFeed tempassessmentAfterDislysis.DialysisIntakesTransfusion = lastAssessmentAfterDislysis.DialysisIntakesTransfusion tempassessmentAfterDislysis.DialysisIntakesBloodTransfusion = lastAssessmentAfterDislysis.DialysisIntakesBloodTransfusion tempassessmentAfterDislysis.DialysisIntakesWashpipe = lastAssessmentAfterDislysis.DialysisIntakesWashpipe tempassessmentAfterDislysis.BloodAccessPartId = lastAssessmentAfterDislysis.BloodAccessPartId tempassessmentAfterDislysis.BloodAccessPartOperaId = lastAssessmentAfterDislysis.BloodAccessPartOperaId tempassessmentAfterDislysis.PuncturePointOozingBlood = lastAssessmentAfterDislysis.PuncturePointOozingBlood tempassessmentAfterDislysis.PuncturePointHaematoma = lastAssessmentAfterDislysis.PuncturePointHaematoma tempassessmentAfterDislysis.InternalFistulaTremorAc = lastAssessmentAfterDislysis.InternalFistulaTremorAc tempassessmentAfterDislysis.PatientGose = lastAssessmentAfterDislysis.PatientGose tempassessmentAfterDislysis.InpatientDepartment = lastAssessmentAfterDislysis.InpatientDepartment tempassessmentAfterDislysis.ObservationContent = lastAssessmentAfterDislysis.ObservationContent tempassessmentAfterDislysis.ObservationContentOther = lastAssessmentAfterDislysis.ObservationContentOther tempassessmentAfterDislysis.DryWeight = lastAssessmentAfterDislysis.DryWeight tempassessmentAfterDislysis.DialysisProcess = lastAssessmentAfterDislysis.DialysisProcess tempassessmentAfterDislysis.InAdvanceMinute = lastAssessmentAfterDislysis.InAdvanceMinute tempassessmentAfterDislysis.InAdvanceReason = lastAssessmentAfterDislysis.InAdvanceReason tempassessmentAfterDislysis.HemostasisMinute = lastAssessmentAfterDislysis.HemostasisMinute tempassessmentAfterDislysis.HemostasisOpera = lastAssessmentAfterDislysis.HemostasisOpera tempassessmentAfterDislysis.TremorNoise = lastAssessmentAfterDislysis.TremorNoise tempassessmentAfterDislysis.DisequilibriumSyndrome = lastAssessmentAfterDislysis.DisequilibriumSyndrome tempassessmentAfterDislysis.DisequilibriumSyndromeOption = lastAssessmentAfterDislysis.DisequilibriumSyndromeOption tempassessmentAfterDislysis.ArterialTube = lastAssessmentAfterDislysis.ArterialTube tempassessmentAfterDislysis.IntravenousTube = lastAssessmentAfterDislysis.IntravenousTube tempassessmentAfterDislysis.Dialyzer = lastAssessmentAfterDislysis.Dialyzer tempassessmentAfterDislysis.InAdvanceReasonOther = lastAssessmentAfterDislysis.InAdvanceReasonOther tempassessmentAfterDislysis.IsEat = lastAssessmentAfterDislysis.IsEat tempassessmentAfterDislysis.DialysisIntakesUnit = lastAssessmentAfterDislysis.DialysisIntakesUnit tempassessmentAfterDislysis.CvcA = lastAssessmentAfterDislysis.CvcA tempassessmentAfterDislysis.CvcV = lastAssessmentAfterDislysis.CvcV tempassessmentAfterDislysis.Channel = lastAssessmentAfterDislysis.Channel tempassessmentAfterDislysis.ReturnBlood = lastAssessmentAfterDislysis.ReturnBlood tempassessmentAfterDislysis.RehydrationVolume = lastAssessmentAfterDislysis.RehydrationVolume tempassessmentAfterDislysis.DialysisDuring = lastAssessmentAfterDislysis.DialysisDuring tempassessmentAfterDislysis.StrokeVolume = lastAssessmentAfterDislysis.StrokeVolume tempassessmentAfterDislysis.BloodFlow = lastAssessmentAfterDislysis.BloodFlow tempassessmentAfterDislysis.SealingFluidDispose = lastAssessmentAfterDislysis.SealingFluidDispose tempassessmentAfterDislysis.SealingFluidSpecial = lastAssessmentAfterDislysis.SealingFluidSpecial tempassessmentAfterDislysis.Ktv = lastAssessmentAfterDislysisTwo.Ktv tempassessmentAfterDislysis.Urr = lastAssessmentAfterDislysisTwo.Urr if tempassessmentAfterDislysis.PatientId == 18695 { tempassessmentAfterDislysis.ActualDisplacement = 0 } if adminUserInfo.Org.Id != 10375 { tempassessmentAfterDislysis.SystolicBloodPressure = endmonitorRecords.SystolicBloodPressure tempassessmentAfterDislysis.DiastolicBloodPressure = endmonitorRecords.DiastolicBloodPressure } if endmonitorRecords.ID > 0 && adminUserInfo.Org.Id == 10598 { tempassessmentAfterDislysis.SystolicBloodPressure = 0 tempassessmentAfterDislysis.DiastolicBloodPressure = 0 } if endmonitorRecords.ID > 0 && adminUserInfo.Org.Id == 10683 { tempassessmentAfterDislysis.SystolicBloodPressure = 0 tempassessmentAfterDislysis.DiastolicBloodPressure = 0 } } finish := models.XtDialysisFinish{ IsFinish: 1, UserOrgId: adminUserInfo.Org.Id, Status: 1, Ctime: time.Now().Unix(), Mtime: 0, Module: 9, RecordDate: tempassessmentAfterDislysis.AssessmentDate, Sourse: 1, PatientId: tempassessmentAfterDislysis.PatientId, } dialysisFinish, _ := service.GetDialysisFinish(adminUserInfo.Org.Id, tempassessmentAfterDislysis.AssessmentDate, 9, tempassessmentAfterDislysis.PatientId) if dialysisFinish.ID == 0 { service.CreateDialysisFinish(finish) } //孝康 if adminUserInfo.Org.Id == 10693 { MonitorSystolicBloodPressureOne, _ := strconv.ParseFloat(endmonitorRecords.MonitorSystolicBloodPressureOne, 64) tempassessmentAfterDislysis.SystolicBloodPressure = MonitorSystolicBloodPressureOne DiastolicBloodPressure, _ := strconv.ParseFloat(endmonitorRecords.MonitorDiastolicBloodPressureOne, 64) tempassessmentAfterDislysis.DiastolicBloodPressure = DiastolicBloodPressure MonitorPulseFrequencyOne, _ := strconv.ParseFloat(endmonitorRecords.MonitorPulseFrequencyOne, 64) tempassessmentAfterDislysis.PulseFrequency = MonitorPulseFrequencyOne DisplacementQuantityOne, _ := strconv.ParseFloat(endmonitorRecords.DisplacementQuantityOne, 64) tempassessmentAfterDislysis.ActualDisplacement = DisplacementQuantityOne UltrafiltrationVolumeOne, _ := strconv.ParseFloat(endmonitorRecords.UltrafiltrationVolumeOne, 64) tempassessmentAfterDislysis.ActualUltrafiltration = UltrafiltrationVolumeOne } if adminUserInfo.Org.Id == 10697 { lastWeightAfter, _ := service.GetLastWeightAfter(tempassessmentAfterDislysis.PatientId, tempassessmentAfterDislysis.AssessmentDate, adminUserInfo.Org.Id) floatAfeter := strconv.FormatFloat(lastWeightAfter.WeightAfter, 'f', -1, 64) lastWeightAfter.LastAfterWeight = floatAfeter } err := service.UpdateAssessmentAfterDislysisRecord(&tempassessmentAfterDislysis) key := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(id, 10) + ":" + strconv.FormatInt(recordDate.Unix(), 10) + ":assessment_after_dislysis" redis := service.RedisClient() keyOne := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(recordDate.Unix(), 10) + ":assessment_after_dislysis_list_all" redis.Set(keyOne, "", time.Second) keyTwo := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(id, 10) + ":" + strconv.FormatInt(recordDate.Unix(), 10) + ":assessment_after_dislysis_last" redis.Set(keyTwo, "", time.Second) defer redis.Close() //清空key 值 redis.Set(key, "", time.Second) if err != nil { c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } if dialysisOrder == nil { c.ServeFailJSONWithSGJErrorCode(enums.ErrorDialysisOrderNoStart) return } if dialysisOrder.Stage == 2 { c.ServeFailJSONWithSGJErrorCode(enums.ErrorDialysisOrderNoEND) return } if dialysisOrder.Stage == 1 { err := service.ModifyDialysisRecord(dialysisOrder.ID, nurseID, endDate.Unix(), adminUserInfo.AdminUser.Id, puncture_point_haematoma, internal_fistula, catheter, cruor, mission, condenser) finish := models.XtDialysisFinish{ IsFinish: 1, UserOrgId: adminUserInfo.Org.Id, Status: 1, Ctime: time.Now().Unix(), Mtime: 0, Module: 8, RecordDate: recordDate.Unix(), Sourse: 1, PatientId: id, } dialysisFinish, _ := service.GetDialysisFinish(adminUserInfo.Org.Id, recordDate.Unix(), 8, id) if dialysisFinish.ID == 0 { service.CreateDialysisFinish(finish) } key := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(id, 10) + ":" + strconv.FormatInt(recordDate.Unix(), 10) + ":dialysis_order" redis := service.RedisClient() defer redis.Close() //清空key 值 redis.Set(key, "", time.Second) keyOne := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(recordDate.Unix(), 10) + ":dialysis_orders_list_all" redis.Set(keyOne, "", time.Second) //结束时候透析次数加1 service.UpdateSolutionByPatientId(id) //下机完自动消毒,针对长沙南雅 if dialysisOrder.Stage == 1 { if adminUserInfo.Org.Id == 9671 || adminUserInfo.Org.Id == 10340 || adminUserInfo.Org.Id == 3877 || adminUserInfo.Org.Id == 9538 || adminUserInfo.Org.Id == 10121 || adminUserInfo.Org.Id == 10612 { //根据床位号获取设备型号 unitType, _ := service.GetUnitType(dialysisOrder.BedID, dialysisOrder.UserOrgId) //查询使用消毒最后一条消毒记录 _, err := service.GetLaseDeviceInfomation(dialysisOrder.UserOrgId, dialysisOrder.BedID, dialysisOrder.DialysisDate, dialysisOrder.SchedualType) fmt.Println("err", err) if err == gorm.ErrRecordNotFound { //查找排班 scheduleByPatient, _ := service.GetScheduleByPatient(dialysisOrder.PatientId, dialysisOrder.DialysisDate, dialysisOrder.UserOrgId) //查询改设备是否有消毒计划 plan, errcode := service.GetDisInfectionTime(dialysisOrder.UserOrgId, unitType.UnitType, dialysisOrder.SchedualType, scheduleByPatient.ScheduleWeek) //根据床位号获取设备id addmacher, _ := service.GetEquimentIDTwo(dialysisOrder.BedID, dialysisOrder.UserOrgId) //查询病人信息 patients, _ := service.GetPatientInfoMation(dialysisOrder.PatientId) var con = "" if patients.IsInfectious == 0 { con = "" } if patients.IsInfectious == 1 { con = "无" } if patients.IsInfectious == 2 { con = "有" } if errcode == nil { var end_time int64 end_time = endDate.Unix() + plan.DisinfecTime*60 //新增消毒 information := models.DeviceInformation{ Date: dialysisOrder.DialysisDate, Zone: dialysisOrder.ZoneId, Class: dialysisOrder.SchedualType, BedNumber: dialysisOrder.BedID, PatientId: dialysisOrder.PatientId, DialysisMode: scheduleByPatient.ModeId, LongTime: strconv.FormatInt(plan.DisinfecTime, 10), Disinfection: 1, DialysisConcentration: 1, DisinfectionStatus: 1, Move: 1, UserOrgId: dialysisOrder.UserOrgId, DisinfectType: plan.Way, DisinfectantType: plan.MachineDisinfectant, FluidPath: plan.DisinfectanWay, //液路消毒方式 Disinfectant: plan.Disinfectant, Ctime: time.Now().Unix(), Status: 1, SignName: nurseID, EquimentId: addmacher.ID, DisinfectionResidue: 2, Bed: addmacher.BedNumber, StartTime: dialysisOrder.StartTime, EndTime: dialysisOrder.EndTime, Contagion: con, WeightLoss: 0, Hyperfiltratio: 0, DialysisHour: "", MachineRun: 1, DisinfecStartime: endDate.Unix(), DisinfecEndtime: end_time, } err := service.CreateInformationTwo(&information) fmt.Println("报错", err) } } } } dialysisOrder.Stage = 2 dialysisOrder.FinishNurse = nurseID dialysisOrder.FinishCreator = adminUserInfo.AdminUser.Id dialysisOrder.FinishModifier = adminUserInfo.AdminUser.Id dialysisOrder.EndTime = endDate.Unix() // 长沙南雅需求 if adminUserInfo.Org.Id == 9671 || adminUserInfo.Org.Id == 3877 || adminUserInfo.Org.Id == 10340 || adminUserInfo.Org.Id == 9675 { //获取最后1条监测的数据 fristrecordone, _ := service.FindFirstMonitorRecordToday(dialysisOrder.PatientId, dialysisOrder.UserOrgId, dialysisOrder.DialysisDate) lastrecord, _ := service.FindLastMonitorRecordToday(dialysisOrder.PatientId, dialysisOrder.UserOrgId, dialysisOrder.DialysisDate) var accumulatedBloodVolume float64 accumulatedBloodVolume = (lastrecord.BloodFlowVolume - 25) * (math.Floor(float64(lastrecord.OperateTime-fristrecordone.OperateTime)/3600) * 60) / 1000 err := service.UpdateLastMonitorRecordToday(accumulatedBloodVolume, lastrecord.ID) fmt.Println(err) // 查询未执行的医嘱 doctorAdvice, _ := service.GetDoctorAdviceListNoExecution(dialysisOrder.PatientId, dialysisOrder.DialysisDate, dialysisOrder.UserOrgId) for _, item := range doctorAdvice { service.UpdateDoctorAdviceNoExecution(item.ID, dialysisOrder.FinishNurse, dialysisOrder.EndTime) key := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(item.PatientId, 10) + ":" + strconv.FormatInt(item.AdviceDate, 10) + ":doctor_advices" redis := service.RedisClient() //清空key 值 redis.Set(key, "", time.Second) keyTwo := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(item.AdviceDate, 10) + ":advice_list_all" redis.Set(keyTwo, "", time.Second) keyThree := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(item.PatientId, 10) + ":" + strconv.FormatInt(item.AdviceDate, 10) + ":his_doctor_advice" redis.Set(keyThree, "", time.Second) toTime, _ := utils.ParseTimeStringToTime("2006-01-02 15:04:05", recordDateStr) theTime := toTime.Format("2006-01-02") keyFour := "scheduals_" + theTime + "_" + strconv.FormatInt(adminUserInfo.Org.Id, 10) redis.Set(keyFour, "", time.Second) keyFive := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(item.AdviceDate, 10) + ":his_advices_list_all" redis.Set(keyFive, "", time.Second) defer redis.Close() } } go func() { ssoDomain := beego.AppConfig.String("call_domain") api := ssoDomain + "/index/downpatient" values := make(url.Values) values.Set("org_id", strconv.FormatInt(adminUserInfo.AdminUser.Id, 10)) values.Set("admin_user_id", strconv.FormatInt(nurseID, 10)) values.Set("patient_id", strconv.FormatInt(id, 10)) http.PostForm(api, values) }() if err == nil { c.ServeSuccessJSON(map[string]interface{}{ "dialysisOrder": dialysisOrder, "assessmentAfterDislysis": tempassessmentAfterDislysis, }) } else { c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeSystemError) } } } func (c *DialysisAPIController) GetAllZone() { adminUserInfo := c.GetMobileAdminUserInfo() err, zone := service.GetAllDeviceZone(adminUserInfo.Org.Id) if err == nil { c.ServeSuccessJSON(map[string]interface{}{ "zone": zone, }) } } func (c *DialysisAPIController) GetSchedualPatientsList() { adminUserInfo := c.GetMobileAdminUserInfo() page, _ := c.GetInt64("page", 1) limit, _ := c.GetInt64("limit", 10) schedulType, _ := c.GetInt64("schedul_type", 0) startTime, _ := c.GetInt64("schedul_time", 0) partitionType, _ := c.GetInt64("partition_type", 0) keywords := c.GetString("keywords") dialysisSchedule, err := service.GetSchedualPatientList(adminUserInfo.Org.Id, startTime/1000, schedulType, partitionType, keywords, page, limit) if err == nil { c.ServeSuccessJSON(map[string]interface{}{ "schedule": dialysisSchedule, }) } return } // /m/api/dialysis/start [post] // @param patient_id:int // @param record_date:string 排班时间 (yyyy-mm-dd) // @param nurse:int 上机护士 // @param bed:int 床位号 func (this *DialysisAPIController) StartDialysis() { patientID, _ := this.GetInt64("patient_id") recordDateStr := this.GetString("record_date") nurseID, _ := this.GetInt64("start_nurse") puncture_nurse, _ := this.GetInt64("puncture_nurse") blood_drawing, _ := this.GetInt64("blood_drawing") schedual_type, _ := this.GetInt64("schedual_type") bedID, _ := this.GetInt64("bed") start_time := this.GetString("start_time") washpipe_nurse, _ := this.GetInt64("washpipe_nurse") change_nurse, _ := this.GetInt64("change_nurse") difficult_puncture_nurse, _ := this.GetInt64("difficult_puncture_nurse") new_fistula_nurse, _ := this.GetInt64("new_fistula_nurse") quality_nurse_id, _ := this.GetInt64("quality_nurse_id") puncture_needle := this.GetString("puncture_needle") puncture_way := this.GetString("puncture_way") dialysis_dialyszers := this.GetString("dialysis_dialyszers") dialysis_irrigation := this.GetString("dialysis_irrigation") blood_access_id, _ := this.GetInt64("blood_access_part_opera_id") zone_id, _ := this.GetInt64("zone_id") elecsign := this.GetString("url") nuclein_date_str := this.GetString("nuclein_date_str") schedule_remark := this.GetString("schedule_remark") order_remark := this.GetString("order_remark") catheter_operation := this.GetString("catheter_operation") blood_flow_volume := this.GetString("blood_flow_volume") dialysis_strainer := this.GetString("dialysis_strainer") if patientID <= 0 || len(recordDateStr) == 0 || nurseID <= 0 || bedID <= 0 { this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } startDate, parseStartDateErr := utils.ParseTimeStringToTime("2006-01-02 15:04:05", start_time) if parseStartDateErr != nil { this.ErrorLog("时间解析失败:%v", parseStartDateErr) 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 } adminUserInfo := this.GetMobileAdminUserInfo() patient, getPatientErr := service.MobileGetPatientById(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 } 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) 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.ErrorLog("床位号不存在") this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } dialysisRecord, getRecordErr := service.MobileGetDialysisRecord(adminUserInfo.Org.Id, patientID, recordDate.Unix()) if getRecordErr != nil { this.ErrorLog("获取透析记录失败:%v", getRecordErr) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } else if dialysisRecord != nil { this.ServeFailJSONWithSGJErrorCode(enums.ErrorDialysisOrderRepeatStart) 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() var theNucleinDate int64 timeLayoutOne := "2006-01-02" if len(nuclein_date_str) > 0 { theTime, err := time.ParseInLocation(timeLayoutOne+" 15:04:05", nuclein_date_str+" 00:00:00", loc) if err != nil { utils.ErrorLog(err.Error()) } theNucleinDate = theTime.Unix() } template, _ := service.GetOrgInfoTemplate(adminUserInfo.Org.Id) //查询更改的机号,是否有人用了,如果只是排班了,但是没上机,直接替换,如果排班且上机了,就提示他无法上机 //sch, _ := service.GetSourceSch(adminUserInfo.Org.Id, patientID, scheduleendTime) schedule, err := service.GetDayScheduleByBedid(adminUserInfo.Org.Id, schedulestartTime, bedID, schedual_type) //查询该床位是否有人用了 order, _ := service.GetDialysisOrderByBedIdTwo(adminUserInfo.Org.Id, schedulestartTime, bedID, schedual_type) if err == gorm.ErrRecordNotFound { //空床位 // 修改了床位逻辑 daySchedule, _ := service.GetDaySchedule(adminUserInfo.Org.Id, schedulestartTime, scheduleendTime, patientID) if daySchedule.ID > 0 { daySchedule.PartitionId = deviceNumber.ZoneID daySchedule.BedId = bedID daySchedule.ScheduleType = schedual_type daySchedule.UpdatedTime = time.Now().Unix() xtSchedule := models.Schedule{ PartitionId: deviceNumber.ZoneID, BedId: bedID, ScheduleType: schedual_type, UpdatedTime: time.Now().Unix(), } err := service.UpdateScheduleOne(daySchedule.ID, xtSchedule) if err != nil { this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } } } else if err == nil { if schedule.ID > 0 && schedule.DialysisOrder.ID == 0 { //有排班没上机记录 if order.ID > 0 { //该机位被其他人占用了 this.ServeFailJSONWithSGJErrorCode(enums.ErrorDialysisOrderRepeatBed) return } else { //2022-11-04 更变需求,如果改床位有排班,但是没上机,则进行互换床位操作 daySchedule, _ := service.GetDaySchedule(adminUserInfo.Org.Id, schedulestartTime, scheduleendTime, patientID) if daySchedule.ID > 0 { err := service.UpdateScheduleTwo(daySchedule, schedule) if err != nil { this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } } } } else if schedule.ID > 0 && schedule.DialysisOrder.ID > 0 { //有排班且有上机记录 this.ServeFailJSONWithSGJErrorCode(enums.ErrorDialysisOrderRepeatBed) return } //else if order.ID == 0 { //该床位没被占用 // daySchedule, _ := service.GetDaySchedule(adminUserInfo.Org.Id, 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) // xtSchedule := models.Schedule{ // PartitionId: deviceNumber.ZoneID, // BedId: bedID, // ScheduleType: schedual_type, // UpdatedTime: time.Now().Unix(), // } // err := service.UpdateScheduleOne(daySchedule.ID, xtSchedule) // if err != nil { // this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) // return // } // } //} //} } else if err != nil { this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } // 查询信息规挡的设置天数 infor, _ := service.GetDialysisInformationSetting(adminUserInfo.Org.Id) if infor.ID > 0 && infor.WeekDay > 0 { var cha_time int64 timeNowStr := time.Now().Format("2006-01-02") timeNewDate, _ := utils.ParseTimeStringToTime("2006-01-02", timeNowStr) //今日的日期减去设置的日期 cha_time = timeNewDate.Unix() - infor.WeekDay*86400 if cha_time >= recordDate.Unix() { //查询审核是否允许 infor, _ := service.GetDialysisInformationByRecordDate(patientID, recordDate.Unix(), adminUserInfo.Org.Id, 6) //申请状态不允许的情况 拒绝修改 if infor.ApplicationStatus != 1 { this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeInformationExist) return } } } dialysisRecord = &models.DialysisOrder{ DialysisDate: recordDate.Unix(), UserOrgId: adminUserInfo.Org.Id, PatientId: patientID, Stage: 1, BedID: bedID, StartNurse: nurseID, Status: 1, StartTime: startDate.Unix(), CreatedTime: time.Now().Unix(), UpdatedTime: time.Now().Unix(), PunctureNurse: puncture_nurse, Creator: adminUserInfo.AdminUser.Id, Modifier: adminUserInfo.AdminUser.Id, SchedualType: schedual_type, WashpipeNurse: washpipe_nurse, ChangeNurse: change_nurse, DifficultPunctureNurse: difficult_puncture_nurse, NewFistulaNurse: new_fistula_nurse, ZoneId: zone_id, QualityNurseId: quality_nurse_id, PunctureNeedle: puncture_needle, PunctureWay: puncture_way, DialysisIrrigation: dialysis_irrigation, DialysisDialyszers: dialysis_dialyszers, BloodAccessId: blood_access_id, Url: elecsign, NucleinDate: theNucleinDate, ScheduleRemark: schedule_remark, OrderRemark: order_remark, CatheterOperation: catheter_operation, BloodFlowVolume: blood_flow_volume, BloodDrawing: blood_drawing, DialysisStrainer: dialysis_strainer, } //查询该床位是否有人用了 _, errorscode := service.GetDialysisOrderByBedId(adminUserInfo.Org.Id, schedulestartTime, bedID, schedual_type) if errorscode == gorm.ErrRecordNotFound { createErr := service.MobileCreateDialysisOrder(adminUserInfo.Org.Id, patientID, dialysisRecord) finish := models.XtDialysisFinish{ IsFinish: 1, UserOrgId: adminUserInfo.Org.Id, Status: 1, Ctime: time.Now().Unix(), Mtime: 0, Module: 6, RecordDate: schedulestartTime, Sourse: 1, PatientId: patientID, } dialysisFinish, _ := service.GetDialysisFinish(adminUserInfo.Org.Id, recordDate.Unix(), 6, patientID) if dialysisFinish.ID == 0 { service.CreateDialysisFinish(finish) } service.UpdateMobilePatient(adminUserInfo.Org.Id, patientID, schedule_remark) if adminUserInfo.Org.Id != 10101 && adminUserInfo.Org.Id != 10445 && adminUserInfo.Org.Id != 3877 && adminUserInfo.Org.Id != 10345 { //统计该患者总次数 dialysisCount, _ := service.GetDialysisTotalCount(adminUserInfo.Org.Id, patientID) service.UpdateDialysisOrder(patientID, recordDate.Unix(), adminUserInfo.Org.Id, dialysisCount.Count) } if adminUserInfo.Org.Id == 10101 || adminUserInfo.Org.Id == 10445 || adminUserInfo.Org.Id == 3877 || adminUserInfo.Org.Id == 10345 { //统计该患者总次数 dialysisCount, _ := service.GetDialysisTotalCountOne(adminUserInfo.Org.Id, patientID) service.UpdateDialysisOrder(patientID, recordDate.Unix(), adminUserInfo.Org.Id, dialysisCount.Count) } redis := service.RedisClient() key := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(patientID, 10) + ":" + strconv.FormatInt(recordDate.Unix(), 10) + ":dialysis_order" redis.Set(key, "", time.Second) keyOne := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(recordDate.Unix(), 10) + ":dialysis_orders_list_all" //清空key 值 redis.Set(keyOne, "", time.Second) keyTwo := "scheduals_" + recordDateStr + "_" + strconv.FormatInt(adminUserInfo.Org.Id, 10) //清空key 值 redis.Set(keyTwo, "", time.Second) if createErr != nil { this.ErrorLog("上机失败:%v", createErr) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } } newdialysisRecord, getRecordErr := service.MobileGetDialysisRecord(adminUserInfo.Org.Id, patientID, recordDate.Unix()) var tempdispose string // 只针对中能建 if blood_drawing > 0 && adminUserInfo.Org.Id == 9538 { tempdispose = "引血" + strconv.FormatInt(blood_drawing, 10) + "ml/min" } if blood_drawing > 0 && adminUserInfo.Org.Id == 10318 { tempdispose = "引血" + strconv.FormatInt(blood_drawing, 10) + "ml/min" } //if blood_drawing > 0 && adminUserInfo.Org.Id == 10629 { // tempdispose = "引血" + strconv.FormatInt(blood_drawing, 10) + "ml/min" //} var ultrafiltration_rate float64 var ultrafiltration_rate_one string _, prescription := service.FindDialysisPrescriptionByReordDate(patientID, schedulestartTime, adminUserInfo.Org.Id) //后期预增脱水量 _, evaluation := service.FindPredialysisEvaluationByReordDate(patientID, schedulestartTime, adminUserInfo.Org.Id) if prescription.ID > 0 { if prescription.TargetUltrafiltration > 0 && prescription.DialysisDurationHour > 0 { totalMin := prescription.DialysisDurationHour*60 + prescription.DialysisDurationMinute if (template.TemplateId == 6 || template.TemplateId == 32 || template.TemplateId == 65 || adminUserInfo.Org.Id == 10375 || adminUserInfo.Org.Id == 10599) && adminUserInfo.Org.Id != 9671 { //adminUserInfo.Org.Id == 9538 ultrafiltration_rate = math.Floor(prescription.TargetUltrafiltration / float64(totalMin) * 60 * 1000) } if adminUserInfo.Org.Id == 10597 || adminUserInfo.Org.Id == 10679 { //adminUserInfo.Org.Id == 9538 ultrafiltration_rate = math.Floor(prescription.PrescriptionWater / float64(totalMin) * 60 * 1000) } //针对医师汇 if adminUserInfo.Org.Id == 10121 { dehydration, _ := strconv.ParseFloat(evaluation.Dehydration, 64) ultrafiltration_rate = math.Floor((prescription.TargetUltrafiltration + dehydration) / float64(totalMin) * 60 * 1000) } //针对通道 if adminUserInfo.Org.Id == 10234 { ultrafiltration_rate = math.Floor((prescription.TargetUltrafiltration) / float64(totalMin) * 60 * 1000) } //针对监利大垸医院 if template.TemplateId == 41 { ultrafiltration_rate = math.Floor(prescription.TargetUltrafiltration * 60 / float64(totalMin) * 1000) } //针对肇庆三鹤血液透析中心 if template.TemplateId == 43 || adminUserInfo.Org.Id == 10432 || adminUserInfo.Org.Id == 10441 || adminUserInfo.Org.Id == 10445 || adminUserInfo.Org.Id == 10440 { ultrafiltration_rate = math.Floor(prescription.TargetUltrafiltration * 60 / float64(totalMin)) } if adminUserInfo.Org.Id == 10469 { ultrafiltration_rate = math.Floor(prescription.PrescriptionWater * 60 / float64(totalMin)) } if adminUserInfo.Org.Id == 10667 { ultrafiltration_rate = math.Floor(prescription.PrescriptionWater * 60 / float64(totalMin)) } if template.TemplateId == 20 || template.TemplateId == 22 { //adminUserInfo.Org.Id == 9538 ultrafiltration_rate = math.Floor(prescription.TargetUltrafiltration / float64(totalMin) * 60) } // 只针对方济医院 if template.TemplateId == 1 && adminUserInfo.Org.Id != 9849 { value, _ := strconv.ParseFloat(fmt.Sprintf("%.3f", prescription.TargetUltrafiltration/float64(totalMin)*60), 6) ultrafiltration_rate = value } //针对 if adminUserInfo.Org.Id == 10471 || adminUserInfo.Org.Id == 3877 || adminUserInfo.Org.Id == 10460 { ultrafiltration_rate = math.Floor(prescription.TargetUltrafiltration / float64(totalMin) * 60 * 1000) ultrafiltration_rate = ultrafiltration_rate / 1000 } if adminUserInfo.Org.Id == 10551 { ultrafiltration_rate = math.Floor(prescription.TargetUltrafiltration * 1000 / float64(totalMin) * 60 * 1000) ultrafiltration_rate = ultrafiltration_rate / 1000 } if adminUserInfo.Org.Id == 10612 || adminUserInfo.Org.Id == 10617 { ultrafiltration_rate = math.Floor(prescription.TargetUltrafiltration * 1000 / float64(totalMin) * 60 * 1000) ultrafiltration_rate = ultrafiltration_rate / 1000 } if adminUserInfo.Org.Id == 10580 { ultrafiltration_rate = math.Floor(prescription.TargetUltrafiltration * 1000 / float64(totalMin) * 60 * 1000) ultrafiltration_rate = ultrafiltration_rate / 1000 } if adminUserInfo.Org.Id == 10629 { ultrafiltration_rate = math.Floor(prescription.TargetUltrafiltration * 1000 / float64(totalMin) * 60 * 1000) ultrafiltration_rate = ultrafiltration_rate / 1000 } if adminUserInfo.Org.Id == 10644 { ultrafiltration_rate = math.Floor(prescription.TargetUltrafiltration / float64(totalMin) * 60 * 1000) ultrafiltration_rate = ultrafiltration_rate / 1000 } if adminUserInfo.Org.Id == 10667 { ultrafiltration_rate = math.Floor(prescription.TargetUltrafiltration / float64(totalMin) * 60 * 1000) ultrafiltration_rate = ultrafiltration_rate / 1000 } //孝昌 if adminUserInfo.Org.Id == 10693 { ultrafiltration_rate = math.Floor(prescription.TargetUltrafiltration / float64(totalMin) * 60 * 1000) ultrafiltration_rate = ultrafiltration_rate ultrafiltration_rate_one = strconv.FormatFloat(ultrafiltration_rate, 'f', -1, 64) } if adminUserInfo.Org.Id == 10694 || adminUserInfo.Org.Id == 10697 { ultrafiltration_rate = math.Floor(prescription.TargetUltrafiltration / float64(totalMin) * 60 * 1000) ultrafiltration_rate = ultrafiltration_rate / 1000 } if adminUserInfo.Org.Id == 10702 { ultrafiltration_rate = math.Floor(prescription.PrescriptionWater * 1000 / float64(totalMin) * 60 * 1000) ultrafiltration_rate = ultrafiltration_rate / 1000 } } } record := models.MonitoringRecord{ UserOrgId: adminUserInfo.Org.Id, 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(), UltrafiltrationRateOne: ultrafiltration_rate_one, } //只针对广慈医院 if template.TemplateId == 26 || template.TemplateId == 25 || template.TemplateId == 28 || adminUserInfo.Org.Id == 9987 || adminUserInfo.Org.Id == 9526 || template.TemplateId == 32 || adminUserInfo.Org.Id == 9918 || adminUserInfo.Org.Id == 9671 || adminUserInfo.Org.Id == 3877 || adminUserInfo.Org.Id == 4 || adminUserInfo.Org.Id == 10432 || adminUserInfo.Org.Id == 10445 || adminUserInfo.Org.Id == 10517 || adminUserInfo.Org.Id == 10679 { // 查询病人是否有透前评估数据 befor, errcode := service.GetAssessmentBefor(adminUserInfo.Org.Id, patientID, recordDate.Unix()) //如果有数据就插入 if errcode == nil { record.SystolicBloodPressure = befor.SystolicBloodPressure record.DiastolicBloodPressure = befor.DiastolicBloodPressure record.BreathingRate = befor.BreathingRate record.PulseFrequency = befor.PulseFrequency record.Temperature = befor.Temperature } } //孝昌 if adminUserInfo.Org.Id == 10693 { // 查询病人是否有透前评估数据 befor, errcode := service.GetAssessmentBefor(adminUserInfo.Org.Id, patientID, recordDate.Unix()) //如果有数据就插入 if errcode == nil { record.MonitorSystolicBloodPressureOne = strconv.FormatFloat(befor.SystolicBloodPressure, 'f', -1, 64) record.MonitorDiastolicBloodPressureOne = strconv.FormatFloat(befor.DiastolicBloodPressure, 'f', -1, 64) record.MonitorTemperatureOne = strconv.FormatFloat(befor.Temperature, 'f', -1, 64) record.BreathingRate = befor.BreathingRate } } // 如果当天有插入数据,则不再往透析纪录里插入数据 if newdialysisRecord.ID > 0 { if adminUserInfo.Org.Id == 10340 || adminUserInfo.Org.Id == 3877 || adminUserInfo.Org.Id == 9671 { record.Temperature = 36.5 record.ArterialPressure = -100 record.DialysateTemperature = 36.5 record.Conductivity = 14 record.BreathingRate = "20" record.VenousPressure = 80 record.TransmembranePressure = 60 record.Dispose = catheter_operation } //针对新化博翔 if adminUserInfo.Org.Id == 9671 || adminUserInfo.Org.Id == 10447 { record.BloodOxygenSaturation = "99" record.Conductivity = 14 record.DialysateTemperature = 36.5 record.BreathingRate = "20" } //针对兰溪人民医院的需求 if adminUserInfo.Org.Id == 10430 || adminUserInfo.Org.Id == 9671 || adminUserInfo.Org.Id == 10683 { befor, _ := service.GetAssessmentBeforThrity(adminUserInfo.Org.Id, patientID, recordDate.Unix()) record.SystolicBloodPressure = befor.SystolicBloodPressure record.DiastolicBloodPressure = befor.DiastolicBloodPressure record.Temperature = befor.Temperature record.PulseFrequency = befor.PulseFrequency record.BreathingRate = befor.BreathingRate } //针对乐山友谊医院的需求 if adminUserInfo.Org.Id == 10677 { befor, _ := service.GetAssessmentBeforThrity(adminUserInfo.Org.Id, patientID, recordDate.Unix()) record.SystolicBloodPressure = befor.SystolicBloodPressure record.DiastolicBloodPressure = befor.DiastolicBloodPressure record.Temperature = befor.Temperature record.PulseFrequency = befor.PulseFrequency record.BreathingRate = befor.BreathingRate } //新化博翔 if adminUserInfo.Org.Id == 10447 { befor, _ := service.GetAssessmentBeforThrity(adminUserInfo.Org.Id, patientID, recordDate.Unix()) record.SystolicBloodPressure = befor.SystolicBloodPressure record.DiastolicBloodPressure = befor.DiastolicBloodPressure record.BreathingRate = befor.BreathingRate } if adminUserInfo.Org.Id == 9829 || adminUserInfo.Org.Id == 10469 { record.PulseFrequency = 80 record.Temperature = 36.5 } //诊断灵山圣康 if adminUserInfo.Org.Id == 10375 { record.Conductivity = 13.8 record.DialysateTemperature = 37 record.DialysateFlow = 500 record.BloodFlowVolume = 200 record.BreathingRate = "18" record.SodiumConcentration = 140 } //江成肾病医院 if adminUserInfo.Org.Id == 10517 { record.SodiumConcentration = 138 record.DialysateTemperature = 36.5 } if adminUserInfo.Org.Id != 10683 { err = service.CreateMonitor(&record) } //记录日志 byterequest, _ := json.Marshal(record) monitorRecordLog := models.XtMonitorRecordLog{ RecordDate: record.MonitoringDate, PatientId: record.PatientId, Module: 1, AdminUserId: adminUserInfo.AdminUser.Id, Ctime: time.Now().Unix(), Mtime: 0, Status: 1, UserOrgId: record.UserOrgId, ErrLog: string(byterequest), Source: "执行上机时新增监测", } service.CreateMonitorRecordLog(monitorRecordLog) finish := models.XtDialysisFinish{ IsFinish: 1, UserOrgId: adminUserInfo.Org.Id, Status: 1, Ctime: time.Now().Unix(), Mtime: 0, Module: 7, RecordDate: schedulestartTime, Sourse: 1, PatientId: patientID, } dialysisFinish, _ := service.GetDialysisFinish(adminUserInfo.Org.Id, recordDate.Unix(), 7, patientID) if dialysisFinish.ID == 0 { service.CreateDialysisFinish(finish) } key := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(patientID, 10) + ":" + strconv.FormatInt(recordDate.Unix(), 10) + ":monitor_records" redis := service.RedisClient() //清空key 值 redis.Set(key, "", time.Second) keyOne := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(recordDate.Unix(), 10) + ":monitor_record_list_all" redis.Set(keyOne, "", time.Second) defer redis.Close() if err != nil { this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeMonitorCreate) return } } go func() { ssoDomain := beego.AppConfig.String("call_domain") api := ssoDomain + "/index/uppatient" values := make(url.Values) values.Set("org_id", strconv.FormatInt(adminUserInfo.Org.Id, 10)) values.Set("admin_user_id", strconv.FormatInt(nurseID, 10)) values.Set("patient_id", strconv.FormatInt(patientID, 10)) values.Set("up_time", strconv.FormatInt(startDate.Unix(), 10)) http.PostForm(api, values) }() this.ServeSuccessJSON(map[string]interface{}{ "dialysis_order": newdialysisRecord, "monitor": record, }) return } func (c *DialysisAPIController) PostSolution() { id, _ := c.GetInt64("patient", 0) recordDateStr := c.GetString("record_date") if id <= 0 { c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } adminUserInfo := c.GetMobileAdminUserInfo() patient, _ := service.FindPatientById(adminUserInfo.Org.Id, id) if patient.ID == 0 { c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodePatientNoExist) return } if len(recordDateStr) == 0 { recordDateStr = time.Now().Format("2006-01-02") } recordDate, parseDateErr := utils.ParseTimeStringToTime("2006-01-02", recordDateStr) if parseDateErr != nil { c.ErrorLog("日期(%v)解析错误:%v", recordDateStr, parseDateErr) c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } mode_id, _ := c.GetInt64("mode_id", 0) dialysis_duration, _ := c.GetFloat("dialysis_duration", 0) dialyzer, _ := c.GetInt64("dialyzer", 0) perfusion_apparatus, _ := c.GetInt64("perfusion_apparatus", 0) blood_flow_volume, _ := c.GetFloat("blood_flow_volume", 0) dewater_amount, _ := c.GetFloat("dewater_amount", 0) displace_liqui, _ := c.GetFloat("displace_liqui", 0) replacement_way, _ := c.GetInt64("replacement_way", 0) anticoagulant, _ := c.GetInt64("anticoagulant", 0) anticoagulant_shouji, _ := c.GetFloat("anticoagulant_shouji", 0) anticoagulant_weichi, _ := c.GetFloat("anticoagulant_weichi", 0) anticoagulant_zongliang, _ := c.GetFloat("anticoagulant_zongliang", 0) anticoagulant_gaimingcheng := c.GetString("anticoagulant_gaimingcheng") anticoagulant_gaijiliang := c.GetString("anticoagulant_gaijiliang") kalium, _ := c.GetFloat("kalium", 0) sodium, _ := c.GetFloat("sodium", 0) calcium, _ := c.GetFloat("calcium", 0) bicarbonate, _ := c.GetFloat("bicarbonate", 0) prescription_doctor, _ := c.GetInt64("prescription_doctor", 0) dialyzerPerfusionApparatus := c.GetString("dialyzer_perfusion_apparatus") glucose, _ := c.GetFloat("glucose", 0) // dry_weight, _ := c.GetFloat("dry_weight", 0) dialysate_flow, _ := c.GetFloat("dialysate_flow", 0) dialysate_temperature, _ := c.GetFloat("dialysate_temperature", 0) conductivity, _ := c.GetFloat("conductivity", 0) remark := c.GetString("remark") dialysisDurationHour, _ := c.GetInt64("dialysis_duration_hour", 0) dialysisDurationMinute, _ := c.GetInt64("dialysis_duration_minute", 0) targetUltrafiltration, _ := c.GetFloat("target_ultrafiltration", 0) dialysateFormulation, _ := c.GetInt64("dialysate_formulation", 0) body_fluid, _ := c.GetInt64("body_fluid", 0) special_medicine, _ := c.GetInt64("special_medicine", 0) special_medicine_other := c.GetString("special_medicine_other") displace_liqui_part, _ := c.GetInt64("displace_liqui_part", 0) displace_liqui_value, _ := c.GetFloat("displace_liqui_value", 0) blood_access, _ := c.GetInt64("blood_access", 0) ultrafiltration, _ := c.GetFloat("ultrafiltration", 0) body_fluid_other := c.GetString("body_fluid_other") replacement_total, _ := c.GetFloat("replacement_total", 0) niprocart, _ := c.GetInt64("niprocart", 0) jms, _ := c.GetInt64("jms", 0) fistula_needle_set, _ := c.GetInt64("fistula_needle_set", 0) fistula_needle_set_16, _ := c.GetInt64("fistula_needle_set_16", 0) hemoperfusion, _ := c.GetInt64("hemoperfusion", 0) dialyser_sterilised, _ := c.GetInt64("dialyser_sterilised", 0) filtryzer, _ := c.GetInt64("filtryzer", 0) target_ktv, _ := c.GetFloat("target_ktv", 0) dialyzers, _ := c.GetInt64("dialyzers", 0) injector, _ := c.GetInt64("injector", 0) bloodlines, _ := c.GetInt64("bloodlines", 0) tubing_hemodialysis, _ := c.GetInt64("tubing_hemodialysis", 0) safe_package, _ := c.GetInt64("package", 0) a_liquid, _ := c.GetInt64("a_liquid", 0) anticoagulant_stop_time_hour, _ := c.GetInt64("anticoagulant_stop_time_hour", 0) anticoagulant_stop_time_min, _ := c.GetInt64("anticoagulant_stop_time_min", 0) blood := c.GetString("blood") dialysis_dialyszers := c.GetString("dialysis_dialyszers") dialysis_irrigation := c.GetString("dialysis_irrigation") antioxidant_commodity_name := c.GetString("antioxidant_commodity_name") displace_speed := c.GetString("displace_speed") illness, _ := c.GetInt64("illness") amylaceum := c.GetString("amylaceum") single_time := c.GetString("single_time") single_water := c.GetString("single_water") replacement_flow := c.GetString("replacement_flow") plasma_separator := c.GetString("plasma_separator") bilirubin_adsorption_column := c.GetString("bilirubin_adsorption_column") oxygen_uptake, _ := c.GetInt64("oxygen_uptake") oxygen_flow := c.GetString("oxygen_flow") oxygen_time := c.GetString("oxygen_time") hemodialysis_pipelines := c.GetString("hemodialysis_pipelines") hemodialysis_pipelines_count, _ := c.GetFloat("hemodialysis_pipelines_count", 0) puncture_needle := c.GetString("puncture_needle") puncture_needle_count, _ := c.GetFloat("puncture_needle_count", 0) epo := c.GetString("epo") epo_count, _ := c.GetFloat("epo_count", 0) max_ultrafiltration_rate, _ := c.GetFloat("max_ultrafiltration_rate") pre_impulse := c.GetString("pre_impulse") impulse, _ := strconv.ParseFloat(pre_impulse, 64) admin_user_id, _ := c.GetInt64("admin_user_id") is_water := c.GetString("is_water") add_amount, _ := c.GetFloat("add_amount") reduce_amount, _ := c.GetFloat("reduce_amount") prescribing_number, _ := c.GetFloat("prescribing_number") treatment_remark := c.GetString("treatment_remark") prescription_sodium := c.GetString("prescription_sodium") start_sodium := c.GetString("start_sodium") sodium_curve := c.GetString("sodium_curve") var is_war int64 if is_water == "是" { is_war = 1 } if is_water == "否" { is_war = 2 } if is_water == "请选择" { is_war = 0 } drhy_water := c.GetString("drhy_water") dry_water_hour := c.GetString("dry_water_hour") water_machine := c.GetString("water_machine") dialysis_remark := c.GetString("dialysis_remark") dialysis_fluid_flow := c.GetString("dialysis_fluid_flow") sodium_bicarbonate_flow := c.GetString("sodium_bicarbonate_flow") prescription_water, _ := c.GetFloat("prescription_water") dialysis_strainer := c.GetString("dialysis_strainer") chaptalization := c.GetString("chaptalization") washing_time := c.GetString("washing_time") warsh_count := c.GetString("warsh_count") blood_access_part_id := c.GetString("blood_access_part_id") anticoagulant_weichi_hour := c.GetString("anticoagulant_weichi_hour") dialyzate := c.GetString("dialyzate") if mode_id > 0 { var str string //查找该机构用的是什么透析器 filedConfig, _ := service.GetFiledConfig(adminUserInfo.Org.Id) if filedConfig.ID > 0 { str = dialyzerPerfusionApparatus } else { str = dialysis_dialyszers + "/" + dialysis_irrigation + " " + dialysis_strainer } service.ModifyScheduleMode(mode_id, patient.ID, recordDate.Unix(), adminUserInfo.Org.Id, str) } //template, _ := service.GetOrgInfoTemplate(adminUserInfo.Org.Id) // //if template.TemplateId == 2 || template.TemplateId == 6 { // if appRole.UserType == 3 { // headNursePermission, getPermissionErr := service.GetAdminUserSpecialPermission(adminUserInfo.Org.Id, adminUserInfo.App.Id, adminUserInfo.AdminUser.Id, models.SpecialPermissionTypeHeadNurse) // if getPermissionErr != nil { // c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) // return // } else if headNursePermission == nil { // c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDialysisPermissionDeniedModify) // return // } // } //} // 查询信息规挡的设置天数 infor, _ := service.GetDialysisInformationSetting(adminUserInfo.Org.Id) if infor.ID > 0 && infor.WeekDay > 0 { var cha_time int64 timeNowStr := time.Now().Format("2006-01-02") timeNewDate, _ := utils.ParseTimeStringToTime("2006-01-02", timeNowStr) //今日的日期减去设置的日期 cha_time = timeNewDate.Unix() - infor.WeekDay*86400 if cha_time >= recordDate.Unix() { //查询审核是否允许 infor, _ := service.GetDialysisInformationByRecordDate(id, recordDate.Unix(), adminUserInfo.Org.Id, 1) //申请状态不允许的情况 拒绝修改 if infor.ApplicationStatus != 1 { c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeInformationExist) return } } } prescription := models.DialysisPrescription{ UserOrgId: adminUserInfo.Org.Id, PatientId: id, RecordDate: recordDate.Unix(), ModeId: mode_id, DialysisDuration: dialysis_duration, Dialyzer: dialyzer, PerfusionApparatus: perfusion_apparatus, BloodFlowVolume: blood_flow_volume, DewaterAmount: dewater_amount, DisplaceLiqui: displace_liqui, ReplacementWay: replacement_way, Anticoagulant: anticoagulant, AnticoagulantShouji: anticoagulant_shouji, AnticoagulantWeichi: anticoagulant_weichi, AnticoagulantZongliang: anticoagulant_zongliang, AnticoagulantGaimingcheng: anticoagulant_gaimingcheng, AnticoagulantGaijiliang: anticoagulant_gaijiliang, Kalium: kalium, Sodium: sodium, Calcium: calcium, Bicarbonate: bicarbonate, Glucose: glucose, // DryWeight: dry_weight, DialysateFlow: dialysate_flow, DialysateTemperature: dialysate_temperature, Conductivity: conductivity, Remark: remark, Status: 1, CreatedTime: time.Now().Unix(), UpdatedTime: time.Now().Unix(), DialysisDurationMinute: dialysisDurationMinute, DialysisDurationHour: dialysisDurationHour, TargetUltrafiltration: targetUltrafiltration, DialysateFormulation: dialysateFormulation, DialyzerPerfusionApparatus: dialyzerPerfusionApparatus, BodyFluid: body_fluid, SpecialMedicine: special_medicine, SpecialMedicineOther: special_medicine_other, DisplaceLiquiPart: displace_liqui_part, DisplaceLiquiValue: displace_liqui_value, BloodAccess: blood_access, Ultrafiltration: ultrafiltration, BodyFluidOther: body_fluid_other, ReplacementTotal: replacement_total, Niprocart: niprocart, Jms: jms, FistulaNeedleSet: fistula_needle_set, FistulaNeedleSet16: fistula_needle_set_16, Hemoperfusion: hemoperfusion, DialyserSterilised: dialyser_sterilised, Filtryzer: filtryzer, TargetKtv: target_ktv, Dialyzers: dialyzers, Injector: injector, Bloodlines: bloodlines, TubingHemodialysis: tubing_hemodialysis, Package: safe_package, ALiquid: a_liquid, AnticoagulantStopTimeMin: anticoagulant_stop_time_min, AnticoagulantStopTimeHour: anticoagulant_stop_time_hour, Blood: blood, DialysisDialyszers: dialysis_dialyszers, DialysisIrrigation: dialysis_irrigation, AntioxidantCommodityName: antioxidant_commodity_name, DisplaceSpeed: displace_speed, Illness: illness, Amylaceum: amylaceum, SingleWater: single_water, SingleTime: single_time, ReplacementFlow: replacement_flow, PlasmaSeparator: plasma_separator, BilirubinAdsorptionColumn: bilirubin_adsorption_column, OxygenUptake: oxygen_uptake, OxygenTime: oxygen_time, OxygenFlow: oxygen_flow, HemodialysisPipelines: hemodialysis_pipelines, HemodialysisPipelinesCount: hemodialysis_pipelines_count, PunctureNeedle: puncture_needle, PunctureNeedleCount: puncture_needle_count, Epo: epo, EpoCount: epo_count, MaxUltrafiltrationRate: max_ultrafiltration_rate, PreImpulse: impulse, AdminUserId: admin_user_id, IsWater: is_war, DrhyWater: drhy_water, DryWaterHour: dry_water_hour, WaterMachine: water_machine, AddAmount: add_amount, ReduceAmount: reduce_amount, DialysisRemark: dialysis_remark, PrescribingNumber: prescribing_number, PrescriptionSodium: prescription_sodium, StartSodium: start_sodium, SodiumCurve: sodium_curve, TreatmentRemark: treatment_remark, DialysisFluidFlow: dialysis_fluid_flow, SodiumBicarbonateFlow: sodium_bicarbonate_flow, PrescriptionWater: prescription_water, DialysisStrainer: dialysis_strainer, Chaptalization: chaptalization, WashingTime: washing_time, WarshCount: warsh_count, BloodAccessPartId: blood_access_part_id, AnticoagulantWeichiHour: anticoagulant_weichi_hour, Dialyzate: dialyzate, } _, dialysisPrescription := service.FindDialysisPrescriptionByReordDate(id, recordDate.Unix(), adminUserInfo.Org.Id) appRole, _ := service.FindAdminRoleTypeById(adminUserInfo.Org.Id, adminUserInfo.AdminUser.Id, adminUserInfo.App.Id) // if appRole.UserType == 2 || appRole.UserType == 1 { prescription_doctor = adminUserInfo.AdminUser.Id prescription.PrescriptionDoctor = prescription_doctor } if dialysisPrescription.ID == 0 { //新增 prescription.Creater = adminUserInfo.AdminUser.Id if adminUserInfo.Org.Id == 10340 && prescription.AdminUserId == 0 { prescription.AdminUserId = adminUserInfo.AdminUser.Id } } else { //修改 if dialysisPrescription.Creater == 0 { prescription.Creater = adminUserInfo.AdminUser.Id } else { prescription.Creater = dialysisPrescription.Creater if adminUserInfo.Org.Id == 9882 { if appRole.UserType == 2 || appRole.UserType == 1 { prescription.Creater = adminUserInfo.AdminUser.Id prescription.PrescriptionDoctor = adminUserInfo.AdminUser.Id } } } if adminUserInfo.Org.Id == 10340 && prescription.AdminUserId == 0 { prescription.AdminUserId = adminUserInfo.AdminUser.Id } //if/**/ //template, _ := service.GetOrgInfoTemplate(adminUserInfo.Org.Id) //if dialysisPrescription.Creater != adminUserInfo.AdminUser.Id && dialysisPrescription.Creater > 0 { // headNursePermission, getPermissionErr := service.GetAdminUserSpecialPermission(adminUserInfo.Org.Id, adminUserInfo.App.Id, adminUserInfo.AdminUser.Id, models.SpecialPermissionTypeHeadNurse) // if getPermissionErr != nil { // c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) // return // } else if headNursePermission == nil { // c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDialysisPermissionDeniedModify) // return // } //} //prescription.Creater = dialysisPrescription.Creater prescription.CreatedTime = dialysisPrescription.CreatedTime prescription.Modifier = adminUserInfo.AdminUser.Id prescription.ID = dialysisPrescription.ID } solution := models.DialysisSolution{ RegistrarsId: adminUserInfo.AdminUser.Id, UserOrgId: adminUserInfo.Org.Id, Doctor: prescription_doctor, PatientId: id, ModeId: mode_id, DialysisDuration: dialysis_duration, PerfusionApparatus: perfusion_apparatus, BloodFlowVolume: blood_flow_volume, Dewater: dewater_amount, DisplaceLiqui: displace_liqui, ReplacementWay: replacement_way, Anticoagulant: anticoagulant, AnticoagulantShouji: anticoagulant_shouji, AnticoagulantWeichi: anticoagulant_weichi, AnticoagulantZongliang: anticoagulant_zongliang, AnticoagulantGaimingcheng: anticoagulant_gaimingcheng, AnticoagulantGaijiliang: anticoagulant_gaijiliang, Kalium: kalium, Sodium: sodium, Calcium: calcium, Bicarbonate: bicarbonate, Glucose: glucose, // DryWeight: dry_weight, DialysateFlow: dialysate_flow, DialysateTemperature: dialysate_temperature, Conductivity: conductivity, Remark: remark, Status: 1, CreatedTime: time.Now().Unix(), UpdatedTime: time.Now().Unix(), DialysisDurationMinute: dialysisDurationMinute, DialysisDurationHour: dialysisDurationHour, TargetUltrafiltration: targetUltrafiltration, DialysateFormulation: dialysateFormulation, DialyzerPerfusionApparatus: dialyzerPerfusionApparatus, BodyFluid: body_fluid, SpecialMedicine: special_medicine, SpecialMedicineOther: special_medicine_other, DisplaceLiquiPart: displace_liqui_part, DisplaceLiquiValue: displace_liqui_value, BloodAccess: blood_access, Ultrafiltration: ultrafiltration, BodyFluidOther: body_fluid_other, ReplacementTotal: replacement_total, TargetKtv: target_ktv, DialysisDialyszers: dialysis_dialyszers, DialysisIrrigation: dialysis_irrigation, HemodialysisPipelines: hemodialysis_pipelines, HemodialysisPipelinesCount: hemodialysis_pipelines_count, PunctureNeedle: puncture_needle, PunctureNeedleCount: puncture_needle_count, Epo: epo, EpoCount: epo_count, MaxUltrafiltrationRate: max_ultrafiltration_rate, PreImpulse: impulse, SolutionStatus: 1, DialysisRemark: dialysis_remark, PrescribingNumber: prescribing_number, PrescriptionSodium: prescription_sodium, StartSodium: start_sodium, SodiumCurve: sodium_curve, TreatmentRemark: treatment_remark, SodiumBicarbonateFlow: sodium_bicarbonate_flow, DialysisFluidFlow: dialysis_fluid_flow, PrescriptionWater: prescription_water, DialysisStrainer: dialysis_strainer, Chaptalization: chaptalization, WashingTime: washing_time, WarshCount: warsh_count, BloodAccessPartId: blood_access_part_id, AnticoagulantWeichiHour: anticoagulant_weichi_hour, Dialyzate: dialyzate, } //针对河间咸的 if adminUserInfo.Org.Id == 10090 || adminUserInfo.Org.Id == 10164 || adminUserInfo.Org.Id == 3877 { if solution.ModeId != 2 && solution.ModeId != 5 && solution.ModeId != 12 { solution.DisplaceLiquiPart = 0 solution.DisplaceLiquiValue = 0 } if prescription.ModeId != 2 && prescription.ModeId != 5 && prescription.ModeId != 12 { prescription.DisplaceLiquiPart = 0 prescription.DisplaceLiquiValue = 0 } } if adminUserInfo.Org.Id == 3877 || adminUserInfo.Org.Id == 10340 { if solution.PrescribingNumber == 0 { solution.PrescribingNumber = 1 } if prescription.PrescribingNumber == 0 { prescription.PrescribingNumber = 1 } if solution.PrescribingNumber == 0 && id == 14682 { solution.PrescribingNumber = 2 } if solution.PrescribingNumber == 0 && id == 18560 { solution.PrescribingNumber = 2 } if prescription.PrescribingNumber == 0 && id == 14682 { prescription.PrescribingNumber = 2 } if prescription.PrescribingNumber == 0 && id == 18560 { prescription.PrescribingNumber = 2 } } service.SavePrescriptionAndCreateSolution(&solution, &prescription) //记录日志 byterequest, _ := json.Marshal(prescription) prescriptionLog := models.XtDialysisPrescriptionLog{ UserOrgId: prescription.UserOrgId, Ctime: time.Now().Unix(), Mtime: 0, ErrLog: string(byterequest), AdminUserId: adminUserInfo.AdminUser.Id, RecordDate: prescription.RecordDate, PatientId: prescription.PatientId, Source: "手机端新增长期处方", Status: 1, } service.CreatePrescriptionLog(prescriptionLog) finish := models.XtDialysisFinish{ IsFinish: 1, UserOrgId: adminUserInfo.Org.Id, Status: 1, Ctime: time.Now().Unix(), Mtime: 0, Module: 1, RecordDate: recordDate.Unix(), Sourse: 1, PatientId: id, } dialysisFinish, _ := service.GetDialysisFinish(adminUserInfo.Org.Id, recordDate.Unix(), 1, id) if dialysisFinish.ID == 0 { service.CreateDialysisFinish(finish) } //获取最新1条 dialysisSolution, _ := service.GetLastPatientDialysisSolution(id, adminUserInfo.Org.Id) //更新状态 service.UpdateDialysisSolutionStatusTwo(dialysisSolution.ID, dialysisSolution.ModeId, dialysisSolution.UserOrgId, dialysisSolution.PatientId) //长沙南雅医院,自动生成抗凝剂的临时处方 if adminUserInfo.Org.Id == 3877 || adminUserInfo.Org.Id == 9671 || adminUserInfo.Org.Id == 10340 { if prescribing_number == 0 { prescribing_number = 1 } advice := models.DoctorAdvice{ UserOrgId: adminUserInfo.Org.Id, PatientId: id, GroupNo: 0, AdviceType: 2, RecordDate: recordDate.Unix(), AdviceDate: recordDate.Unix(), StartTime: recordDate.Unix() + 6.5*60*60, // 根据排班班次,给默认时间 AdviceName: "", // 根据抗凝剂转换为中文 + 首剂 + 维持 + 总量 AdviceDesc: "", ReminderDate: 0, SingleDose: prescription.AnticoagulantZongliang, SingleDoseUnit: "iu", DrugSpec: 0, DrugSpecUnit: "", PrescribingNumber: prescribing_number, // 前端传过来的开药数量 PrescribingNumberUnit: "支", DeliveryWay: "静脉注射", ExecutionFrequency: "上机前", AdviceDoctor: 0, Status: 1, CreatedTime: time.Now().Unix(), UpdatedTime: time.Now().Unix(), IsPrescription: 1, ExecutionState: 2, StopState: 2, IsSettle: 2, } // 查询排班信息 schedulePatient, _ := service.GetScheduleByPatient(id, recordDate.Unix(), adminUserInfo.Org.Id) if schedulePatient.ID > 0 { if schedulePatient.ScheduleType == 1 { advice.StartTime = recordDate.Unix() + 6.5*60*60 } if schedulePatient.ScheduleType == 2 { advice.StartTime = recordDate.Unix() + 9*60*60 } } // 抗凝剂名称 switch anticoagulant { case 1: advice.AdviceName = "无肝素" break case 2: advice.AdviceName = "普通肝素" break case 3: advice.AdviceName = "低分子肝素" break case 4: advice.AdviceName = "阿加曲班" break case 5: advice.AdviceName = "枸橼酸钠" break case 6: advice.AdviceName = "低分子肝素钙" break case 7: advice.AdviceName = "低分子肝素钠" break case 8: advice.AdviceName = "依诺肝素" break case 9: advice.AdviceName = "达肝素" break case 10: advice.AdviceName = "体外抗凝" break case 11: advice.AdviceName = "那曲肝素" break case 12: advice.AdviceName = "无抗凝剂" break } //advice.AdviceDesc = "首剂" + strconv.FormatFloat(anticoagulant_shouji, 'f', -1, 64) + "维持" + strconv.FormatFloat(anticoagulant_weichi, 'f', -1, 64) + "总量" + strconv.FormatFloat(anticoagulant_zongliang, 'f', -1, 64) if appRole.UserType == 2 || appRole.UserType == 1 || appRole.UserType == 3 || appRole.UserType == 4 { advice.AdviceDoctor = appRole.AdminUserId } // 患者的临时医嘱里查找是否有抗凝剂临时医嘱 advicePrescription, _ := service.GetAdvicesByPrescription(adminUserInfo.Org.Id, id, recordDate.Unix()) if advicePrescription.ID > 0 && (anticoagulant == 3 || anticoagulant == 6 || anticoagulant == 7) { advice.AdviceName = "低分子肝素钠注射液" // 修改患者临时医嘱里的抗凝剂医嘱 advice.ID = advicePrescription.ID service.UpdateDoctorAdviceById(advicePrescription.ID, prescribing_number, anticoagulant_zongliang) } else { if anticoagulant == 3 || anticoagulant == 6 || anticoagulant == 7 { advice.AdviceName = "低分子肝素钠注射液" service.CreateDoctorAdvice(&advice) } } key := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(id, 10) + ":" + strconv.FormatInt(recordDate.Unix(), 10) + ":doctor_advices" redis := service.RedisClient() defer redis.Close() //清空key 值 redis.Set(key, "", time.Second) keyOne := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(recordDate.Unix(), 10) + ":advice_list_all" redis.Set(keyOne, "", time.Second) } //获取key,清空redis key := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(id, 10) + ":" + strconv.FormatInt(recordDate.Unix(), 10) + ":" + strconv.FormatInt(mode_id, 10) + ":dialysis_prescribe" redis := service.RedisClient() defer redis.Close() //清空key 值 redis.Set(key, "", time.Second) //清空长期医嘱的key soulution_key := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(id, 10) + ":" + strconv.FormatInt(mode_id, 10) + ":dialysis_solution" redis.Set(soulution_key, "", time.Second) //查询最近透析准备表里是否存在 透析器 灌流器 keyOne := "scheduals_" + recordDateStr + "_" + strconv.FormatInt(adminUserInfo.Org.Id, 10) redis.Set(keyOne, "", time.Second) keyTwo := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(id, 10) + ":" + strconv.FormatInt(recordDate.Unix(), 10) + ":schedual_detail" redis.Set(keyTwo, "", time.Second) keyThree := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(recordDate.Unix(), 10) + ":prescriptions_list_all" redis.Set(keyThree, "", time.Second) keyFour := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(id, 10) + ":" + strconv.FormatInt(recordDate.Unix(), 10) + ":dialysis_prescribe_by_mode" redis.Set(keyFour, "", time.Second) //splitStr := strings.Split(dialysis_dialyszers, ",") // //splitIrrigation := strings.Split(dialysis_irrigation, ",") // //mation, _ := service.GetGoodInfoMation(adminUserInfo.Org.Id) //if len(mation)>0{ // for _, item := range splitStr { // for _,it := range mation{ // if(item == it.SpecificationName){ // // //查询最近一次的透析器 // _, errcode := service.GetDialysisBeforePrepare(it.GoodTypeId, it.ID, adminUserInfo.Org.Id,id) // // if errcode == gorm.ErrRecordNotFound{ // //插入数据 // prepare := models.DialysisBeforePrepare{ // UserOrgId: adminUserInfo.Org.Id, // PatientId: id, // RecordDate: recordDate.Unix(), // GoodTypeId: it.GoodTypeId, // GoodId: it.ID, // Count: 1, // Ctime: time.Now().Unix(), // Creater: adminUserInfo.AdminUser.Id, // Status:1, // // } // errcode := service.CreateDialysisBeforePrepareOne(&prepare) // fmt.Println("",errcode) // } // } // } // // } // // for _, item := range splitIrrigation { // for _,it := range mation{ // if(item == it.SpecificationName){ // //查询最近一次的透析器 // _, errcode := service.GetDialysisBeforePrepare(it.GoodTypeId, it.ID, adminUserInfo.Org.Id,id) // if errcode == gorm.ErrRecordNotFound{ // //插入数据 // prepare := models.DialysisBeforePrepare{ // UserOrgId: adminUserInfo.Org.Id, // PatientId: id, // RecordDate: recordDate.Unix(), // GoodTypeId: it.GoodTypeId, // GoodId: it.ID, // Count: 1, // Ctime: time.Now().Unix(), // Creater: adminUserInfo.AdminUser.Id, // Status:1, // // } // errcode := service.CreateDialysisBeforePrepareOne(&prepare) // fmt.Println(errcode) // } // } // } // } //} c.ServeSuccessJSON(map[string]interface{}{ "solution": &solution, "prescription": &prescription, }) } func (c *DialysisAPIController) GetAcceptsAssessment() { patient, _ := c.GetInt64("patient", 0) adminUserInfo := c.GetMobileAdminUserInfo() _, receiveTreatmentAsses := service.GetLastAcceptsAssessment(patient, adminUserInfo.Org.Id) c.ServeSuccessJSON(map[string]interface{}{ "receiveTreatmentAsses": receiveTreatmentAsses, }) } func (this *DialysisAPIController) PostSignInfo() { 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.GetMobileAdminUserInfo() err := service.UpDateDialysisPrescriptionDoctorSign(patientID, date.Unix(), adminInfo.Org.Id, adminInfo.AdminUser.Id) if err != nil { this.ErrorLog("签名失败:%v", err) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } this.ServeSuccessJSON(map[string]interface{}{ "doctor_id": adminInfo.AdminUser.Id, }) } func (this *DialysisAPIController) GetLastMonitorRecord() { patientID, _ := this.GetInt64("patient_id") adminInfo := this.GetMobileAdminUserInfo() record, _ := service.FindLastMonitorRecord(patientID, adminInfo.Org.Id) this.ServeSuccessJSON(map[string]interface{}{ "monitor": record, }) } func (this *DialysisAPIController) GetLastMonitorRecordTody() { thisTime := time.Now() scheduleDateStart := thisTime.Format("2006-01-02") + " 00:00:00" timeLayout := "2006-01-02 15:04:05" loc, _ := time.LoadLocation("Local") theStartTime, _ := time.ParseInLocation(timeLayout, scheduleDateStart, loc) theAssessmentDateTime := theStartTime.Unix() patientID, _ := this.GetInt64("patient_id") monitorDate, _ := this.GetInt64("monitoring_date", theAssessmentDateTime) adminInfo := this.GetMobileAdminUserInfo() record, _ := service.FindLastMonitorRecordToday(patientID, adminInfo.Org.Id, monitorDate) fristrecord, _ := service.FindFirstMonitorRecordToday(patientID, adminInfo.Org.Id, monitorDate) template, _ := service.GetOrgInfoTemplate(adminInfo.Org.Id) var ultrafiltration_rate float64 _, prescription := service.FindDialysisPrescriptionByReordDate(patientID, theAssessmentDateTime, adminInfo.Org.Id) _, evaluation := service.FindPredialysisEvaluationByReordDate(patientID, theAssessmentDateTime, adminInfo.Org.Id) fmt.Println(evaluation) fmt.Println("prescription.ID", prescription.ID) if prescription.ID > 0 { if prescription.TargetUltrafiltration > 0 && prescription.DialysisDurationHour > 0 { totalMin := prescription.DialysisDurationHour*60 + prescription.DialysisDurationMinute if (template.TemplateId == 6 || template.TemplateId == 65 || adminInfo.Org.Id == 10375 || adminInfo.Org.Id == 10599) && adminInfo.Org.Id != 9538 { ultrafiltration_rate = math.Floor(prescription.TargetUltrafiltration / float64(totalMin) * 60 * 1000) record.UltrafiltrationRate = ultrafiltration_rate } if adminInfo.Org.Id == 10597 || adminInfo.Org.Id == 10679 { ultrafiltration_rate = math.Floor(prescription.PrescriptionWater / float64(totalMin) * 60 * 1000) record.UltrafiltrationRate = ultrafiltration_rate } if adminInfo.Org.Id == 10510 { record.UltrafiltrationRate = 0 } if template.TemplateId == 32 || template.TemplateId == 34 || template.TemplateId == 36 { ultrafiltration_rate = math.Floor(prescription.TargetUltrafiltration / float64(totalMin) * 60 * 1) record.UltrafiltrationRate = ultrafiltration_rate } if template.TemplateId == 20 || template.TemplateId == 22 { ultrafiltration_rate = math.Floor(prescription.TargetUltrafiltration / float64(totalMin) * 60) record.UltrafiltrationRate = ultrafiltration_rate } // 只针对方济医院 if template.TemplateId == 1 && adminInfo.Org.Id != 9849 { value, _ := strconv.ParseFloat(fmt.Sprintf("%.3f", prescription.TargetUltrafiltration/float64(totalMin)*60), 6) ultrafiltration_rate = value record.UltrafiltrationRate = ultrafiltration_rate } if template.TemplateId == 41 || template.TemplateId == 47 { ultrafiltration_rate = math.Floor(prescription.TargetUltrafiltration * 60 / float64(totalMin) * 1000) record.UltrafiltrationRate = ultrafiltration_rate } if template.TemplateId == 43 { ultrafiltration_rate = math.Floor(prescription.TargetUltrafiltration * 60 / float64(totalMin)) record.UltrafiltrationRate = ultrafiltration_rate } if template.TemplateId == 46 || template.TemplateId == 54 { ultrafiltration_rate = math.Floor(prescription.TargetUltrafiltration * 60 / float64(totalMin)) record.UltrafiltrationRate = ultrafiltration_rate } if adminInfo.Org.Id == 10395 || adminInfo.Org.Id == 10138 || adminInfo.Org.Id == 10278 || adminInfo.Org.Id == 10340 || adminInfo.Org.Id == 10432 || adminInfo.Org.Id == 10441 || adminInfo.Org.Id == 10445 || adminInfo.Org.Id == 9829 || adminInfo.Org.Id == 10440 || adminInfo.Org.Id == 10610 || adminInfo.Org.Id == 10537 { ultrafiltration_rate = math.Floor(prescription.TargetUltrafiltration * 60 / 1000 / float64(totalMin) * 1000) record.UltrafiltrationRate = ultrafiltration_rate } if adminInfo.Org.Id == 10469 { ultrafiltration_rate = math.Floor(prescription.PrescriptionWater * 60 / 1000 / float64(totalMin) * 1000) record.UltrafiltrationRate = ultrafiltration_rate } if adminInfo.Org.Id == 10667 { ultrafiltration_rate = math.Floor(prescription.PrescriptionWater * 60 / 1000 / float64(totalMin) * 1000) record.UltrafiltrationRate = ultrafiltration_rate } if adminInfo.Org.Id == 10471 { ultrafiltration_rate = math.Floor(prescription.TargetUltrafiltration / float64(totalMin) * 60 * 1000) record.UltrafiltrationRate = ultrafiltration_rate / 1000 } if adminInfo.Org.Id == 10460 || adminInfo.Org.Id == 10644 || adminInfo.Org.Id == 10667 { ultrafiltration_rate = math.Floor(prescription.TargetUltrafiltration / float64(totalMin) * 60 * 1000) record.UltrafiltrationRate = ultrafiltration_rate / 1000 } if adminInfo.Org.Id == 10551 || adminInfo.Org.Id == 10617 || adminInfo.Org.Id == 10580 || adminInfo.Org.Id == 10629 { ultrafiltration_rate = math.Floor(prescription.TargetUltrafiltration * 1000 / float64(totalMin) * 60 * 1000) record.UltrafiltrationRate = ultrafiltration_rate / 1000 } if adminInfo.Org.Id == 10597 || adminInfo.Org.Id == 10599 || adminInfo.Org.Id == 10679 { record.UltrafiltrationRate = 0 } //if template.TemplateId == 47 { // ultrafiltration_rate = math.Floor(prescription.TargetUltrafiltration * 60 / float64(totalMin)) // record.UltrafiltrationRate = ultrafiltration_rate //} } } // record.UltrafiltrationRate = ultrafiltration_rate record.UltrafiltrationVolume = 0 if template.TemplateId == 1 && adminInfo.Org.Id != 9849 { //adminInfo.Org.Id == 3907 || adminInfo.Org.Id == 4 || adminInfo.Org.Id == 12 || adminInfo.Org.Id == 13 || adminInfo.Org.Id == 9535adminInfo.Org.Id == 3907 || adminInfo.Org.Id == 4 || adminInfo.Org.Id == 12 || adminInfo.Org.Id == 13 || adminInfo.Org.Id == 9535 if ultrafiltration_rate > 0 { value, _ := strconv.ParseFloat(fmt.Sprintf("%.3f", float64(record.OperateTime+3600-fristrecord.OperateTime)/3600*ultrafiltration_rate), 6) record.UltrafiltrationVolume = value } } if template.TemplateId == 6 || template.TemplateId == 65 || template.TemplateId == 20 || template.TemplateId == 22 || template.TemplateId == 32 || template.TemplateId == 34 || template.TemplateId == 36 || template.TemplateId == 41 || template.TemplateId == 43 || template.TemplateId == 47 || template.TemplateId == 54 || adminInfo.Org.Id == 10599 { //adminInfo.Org.Id == 9538 if ultrafiltration_rate > 0 && adminInfo.Org.Id != 9538 { ultrafiltration_volume := math.Floor(float64(record.OperateTime+3600-fristrecord.OperateTime) / 3600 * ultrafiltration_rate) record.UltrafiltrationVolume = ultrafiltration_volume } } if adminInfo.Org.Id == 10597 || adminInfo.Org.Id == 10679 { ultrafiltration_volume := math.Floor(float64(record.OperateTime+3600-fristrecord.OperateTime) / 3600 * ultrafiltration_rate) record.UltrafiltrationVolume = ultrafiltration_volume } //长沙南雅 if adminInfo.Org.Id == 10395 || adminInfo.Org.Id == 10138 || adminInfo.Org.Id == 10278 || adminInfo.Org.Id == 10432 || adminInfo.Org.Id == 10441 || adminInfo.Org.Id == 10445 || adminInfo.Org.Id == 10469 || adminInfo.Org.Id == 10375 || adminInfo.Org.Id == 10610 || adminInfo.Org.Id == 10537 || adminInfo.Org.Id == 10667 { if ultrafiltration_rate > 0 { ultrafiltration_volume := math.Floor(float64(record.OperateTime+3600-fristrecord.OperateTime) / 3600 * ultrafiltration_rate) record.UltrafiltrationVolume = ultrafiltration_volume } } if adminInfo.Org.Id == 10471 { ultrafiltration_volume := math.Floor(float64(record.OperateTime+3600-fristrecord.OperateTime) / 3600 * ultrafiltration_rate) record.UltrafiltrationVolume = ultrafiltration_volume / 1000 } if adminInfo.Org.Id == 10460 || adminInfo.Org.Id == 10644 || adminInfo.Org.Id == 10667 { ultrafiltration_volume := math.Floor(float64(record.OperateTime+3600-fristrecord.OperateTime) / 3600 * ultrafiltration_rate) record.UltrafiltrationVolume = ultrafiltration_volume / 1000 } if adminInfo.Org.Id == 10551 || adminInfo.Org.Id == 10617 || adminInfo.Org.Id == 10580 { ultrafiltration_volume := math.Floor(float64(record.OperateTime+3600-fristrecord.OperateTime) / 3600 * ultrafiltration_rate) record.UltrafiltrationVolume = ultrafiltration_volume / 1000 } //长沙南雅累计血容量自动计算 //if adminInfo.Org.Id == 10340 || adminInfo.Org.Id == 9671 || adminInfo.Org.Id == 3877{ // record.AccumulatedBloodVolume = (record.BloodFlowVolume - 25) * (math.Floor(float64(record.OperateTime+3600-fristrecord.OperateTime)/3600) * 60) / 1000 //} if template.TemplateId == 47 || template.TemplateId == 54 { record.DisplacementQuantity = record.DisplacementQuantity + record.DisplacementQuantity } if adminInfo.Org.Id == 10510 { record.UltrafiltrationVolume = 0 } lastMonitorRecordList, _ := service.GetLastMonitorRecordList(patientID, monitorDate, adminInfo.Org.Id) this.ServeSuccessJSON(map[string]interface{}{ "monitor": record, "lastMonitorRecordList": lastMonitorRecordList, }) } func (this *DialysisAPIController) ModifyStartDialysisOrder() { record_id, _ := this.GetInt64("id") nurseID, _ := this.GetInt64("start_nurse") puncture_nurse, _ := this.GetInt64("puncture_nurse") bedID, _ := this.GetInt64("bed") start_time := this.GetString("start_time") schedual_type, _ := this.GetInt64("schedual_type") washpipe_nurse, _ := this.GetInt64("washpipe_nurse") change_nurse, _ := this.GetInt64("change_nurse") difficult_puncture_nurse, _ := this.GetInt64("difficult_puncture_nurse") new_fistula_nurse, _ := this.GetInt64("new_fistula_nurse") quality_nurse_id, _ := this.GetInt64("quality_nurse_id") patient_id, _ := this.GetInt64("patient_id") record_date, _ := this.GetInt64("record_date") puncture_needle := this.GetString("puncture_needle") puncture_way := this.GetString("puncture_way") dialysis_dialyszers := this.GetString("dialysis_dialyszers") dialysis_irrigation := this.GetString("dialysis_irrigation") blood_access_id, _ := this.GetInt64("blood_access_part_opera_id") nuclein_date_str := this.GetString("nuclein_date_str") order_remark := this.GetString("order_remark") schedule_remark := this.GetString("schedule_remark") catheter_operation := this.GetString("catheter_operation") blood_flow_volume := this.GetString("blood_flow_volume") blood_drawing, _ := this.GetInt64("blood_drawing") dialysis_strainer := this.GetString("dialysis_strainer") if record_id == 0 { this.ErrorLog("id:%v", record_id) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } startDate, parseStartDateErr := utils.ParseTimeStringToTime("2006-01-02 15:04:05", start_time) if parseStartDateErr != nil { this.ErrorLog("时间解析失败:%v", parseStartDateErr) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } adminUserInfo := this.GetMobileAdminUserInfo() 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.Org.Id, 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.Org.Id, adminUserInfo.App.Id, 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() var theNucleinDate int64 timeLayoutOne := "2006-01-02" if len(nuclein_date_str) > 0 { theTime, err := time.ParseInLocation(timeLayoutOne+" 15:04:05", nuclein_date_str+" 00:00:00", loc) if err != nil { utils.ErrorLog(err.Error()) } theNucleinDate = theTime.Unix() } //查询更改的机号,是否有人用了,如果只是排班了,但是没上机,直接替换,如果排班且上机了,就提示他无法上机 schedule, err := service.GetDayScheduleByBedid(adminUserInfo.Org.Id, schedulestartTime, bedID, schedual_type) daySchedule, _ := service.GetDaySchedule(adminUserInfo.Org.Id, schedulestartTime, scheduleendTime, tempDialysisRecord.PatientId) if daySchedule.BedId != bedID || daySchedule.ScheduleType != schedual_type { if err == gorm.ErrRecordNotFound { //空床位 // 修改了床位逻辑 daySchedule, _ := service.GetDaySchedule(adminUserInfo.Org.Id, 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) xtSchedule := models.Schedule{ PartitionId: deviceNumber.ZoneID, BedId: bedID, ScheduleType: schedual_type, UpdatedTime: time.Now().Unix(), } err := service.UpdateScheduleOne(daySchedule.ID, xtSchedule) if err != nil { this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } } } else if err == nil { if schedule.ID > 0 && schedule.DialysisOrder.ID == 0 { //有排班没上机记录 daySchedule, _ := service.GetDaySchedule(adminUserInfo.Org.Id, 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) xtSchedule := models.Schedule{ PartitionId: deviceNumber.ZoneID, BedId: bedID, ScheduleType: schedual_type, UpdatedTime: time.Now().Unix(), } err := service.UpdateScheduleOne(daySchedule.ID, xtSchedule) 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.Org.Id, BedID: bedID, StartNurse: nurseID, StartTime: startDate.Unix(), PunctureNurse: puncture_nurse, Creator: adminUserInfo.AdminUser.Id, Modifier: adminUserInfo.AdminUser.Id, WashpipeNurse: washpipe_nurse, SchedualType: schedual_type, ChangeNurse: change_nurse, DifficultPunctureNurse: difficult_puncture_nurse, NewFistulaNurse: new_fistula_nurse, QualityNurseId: quality_nurse_id, PunctureNeedle: puncture_needle, PunctureWay: puncture_way, DialysisDialyszers: dialysis_dialyszers, DialysisIrrigation: dialysis_irrigation, BloodAccessId: blood_access_id, NucleinDate: theNucleinDate, OrderRemark: order_remark, ScheduleRemark: schedule_remark, CatheterOperation: catheter_operation, BloodFlowVolume: blood_flow_volume, BloodDrawing: blood_drawing, DialysisStrainer: dialysis_strainer, } //修改床位号需要重新消毒 if adminUserInfo.Org.Id == 9671 || adminUserInfo.Org.Id == 10340 || adminUserInfo.Org.Id == 10445 || adminUserInfo.Org.Id == 3877 { service.UpdateDeviceInformation(tempDialysisRecord.PatientId, tempDialysisRecord.DialysisDate) //查询第一条监测 firstMonitor, _ := service.GetFirstMonitor(tempDialysisRecord.PatientId, tempDialysisRecord.DialysisDate) service.UpdateFirstMonitor(firstMonitor.ID, catheter_operation) key := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(tempDialysisRecord.PatientId, 10) + ":" + strconv.FormatInt(tempDialysisRecord.DialysisDate, 10) + ":monitor_records" redis := service.RedisClient() //清空key 值 redis.Set(key, "", time.Second) keyOne := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(tempDialysisRecord.DialysisDate, 10) + ":monitor_record_list_all" redis.Set(keyOne, "", time.Second) defer redis.Close() } // 查询信息规挡的设置天数 infor, _ := service.GetDialysisInformationSetting(adminUserInfo.Org.Id) if infor.ID > 0 && infor.WeekDay > 0 { var cha_time int64 timeNowStr := time.Now().Format("2006-01-02") timeNewDate, _ := utils.ParseTimeStringToTime("2006-01-02", timeNowStr) //今日的日期减去设置的日期 cha_time = timeNewDate.Unix() - infor.WeekDay*86400 if cha_time >= record_date { //查询审核是否允许 infor, _ := service.GetDialysisInformationByRecordDate(tempDialysisRecord.PatientId, record_date, adminUserInfo.Org.Id, 1) //申请状态不允许的情况 拒绝修改 if infor.ApplicationStatus != 1 { this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeInformationExist) return } } } updateErr := service.ModifyStartDialysisOrder(dialysisRecord) order, _ := service.GetLastPatientOrder(record_id) service.UpdateMobilePatient(adminUserInfo.Org.Id, order.PatientId, schedule_remark) redis := service.RedisClient() key := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(patient_id, 10) + ":" + strconv.FormatInt(record_date, 10) + ":dialysis_order" redis.Set(key, "", time.Second) keyOne := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(record_date, 10) + ":dialysis_orders_list_all" //清空key 值 redis.Set(keyOne, "", time.Second) scheduleDateStartOne := startDate.Format("2006-01-02") keyTwo := "scheduals_" + scheduleDateStartOne + "_" + strconv.FormatInt(adminUserInfo.Org.Id, 10) redis.Set(keyTwo, "", time.Second) keyThree := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(patient_id, 10) + ":" + strconv.FormatInt(record_date, 10) + ":doctor_advices" redis.Set(keyThree, "", time.Second) keyFour := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(patient_id, 10) + ":" + strconv.FormatInt(record_date, 10) + ":monitor_records" redis.Set(keyFour, "", time.Second) keyFive := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(patient_id, 10) + ":patient_info" redis.Set(keyFive, "", time.Second) keySix := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(patient_id, 10) + ":" + strconv.FormatInt(record_date, 10) + ":his_doctor_advice" redis.Set(keySix, "", time.Second) keySeven := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + ":device_list_all" redis.Set(keySeven, "", time.Second) 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) redis := service.RedisClient() key := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(record_date, 10) + ":assessment_after_dislysis_list_all" redis.Set(key, "", time.Second) keyOne := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(tempDialysisRecord.PatientId, 10) + ":" + strconv.FormatInt(record_date, 10) + ":assessment_after_dislysis" redis.Set(keyOne, "", time.Second) keySix := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(record_date, 10) + ":dialysis_orders_list_all" //清空key 值 redis.Set(keySix, "", time.Second) keySeven := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(patient_id, 10) + ":" + strconv.FormatInt(record_date, 10) + ":monitor_records" redis.Set(keySeven, "", time.Second) redis.Close() if updateAssessmentErr != nil { utils.ErrorLog("%v", updateAssessmentErr) } } } _, dialysisRecords := service.FindDialysisOrderById(record_id) this.ServeSuccessJSON(map[string]interface{}{ "dialysis_order": dialysisRecords, }) } func (c *DialysisAPIController) ModifyFinishDialysisOrder() { record_id, _ := c.GetInt64("id") nurseID, _ := c.GetInt64("nurse") end_time := c.GetString("end_time") puncture_point_haematoma, _ := c.GetInt64("puncture_point_haematoma") blood_access_internal_fistula := c.GetString("blood_access_internal_fistula") catheter := c.GetString("catheter") cruor := c.GetString("cruor") mission := c.GetString("mission") condenser := c.GetString("condenser") if record_id <= 0 || nurseID <= 0 { c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } adminUserInfo := c.GetMobileAdminUserInfo() 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:05", 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.Org.Id, adminUserInfo.App.Id, adminUserInfo.AdminUser.Id, models.SpecialPermissionTypeHeadNurse) // if getPermissionErr != nil { // c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) // return // } else if headNursePermission == nil { // c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDialysisPermissionDeniedModify) // return // } //} // 查询信息规挡的设置天数 infor, _ := service.GetDialysisInformationSetting(adminUserInfo.Org.Id) if infor.ID > 0 { var cha_time int64 timeNowStr := time.Now().Format("2006-01-02") timeNewDate, _ := utils.ParseTimeStringToTime("2006-01-02", timeNowStr) //今日的日期减去设置的日期 cha_time = timeNewDate.Unix() - infor.WeekDay*86400 if cha_time >= tempDialysisRecords.DialysisDate { //查询审核是否允许 infor, _ := service.GetDialysisInformationByRecordDate(tempDialysisRecords.PatientId, tempDialysisRecords.DialysisDate, adminUserInfo.Org.Id, 6) //申请状态不允许的情况 拒绝修改 if infor.ApplicationStatus != 1 { c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeInformationExist) return } } } dialysisRecord := &models.DialysisOrder{ ID: record_id, UserOrgId: adminUserInfo.Org.Id, EndTime: endDate.Unix(), FinishNurse: nurseID, FinishModifier: adminUserInfo.AdminUser.Id, PuncturePointHaematoma: puncture_point_haematoma, BloodAccessInternalFistula: blood_access_internal_fistula, Catheter: catheter, Cruor: cruor, Mission: mission, Condenser: condenser, } updateErr := service.ModifyFinishDialysisOrder(dialysisRecord) redis := service.RedisClient() key := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(tempDialysisRecords.PatientId, 10) + ":" + strconv.FormatInt(tempDialysisRecords.DialysisDate, 10) + ":dialysis_order" //清空key 值 redis.Set(key, "", time.Second) keyOne := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(tempDialysisRecords.DialysisDate, 10) + ":dialysis_orders_list_all" //清空key 值 redis.Set(keyOne, "", time.Second) keySeven := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(tempDialysisRecords.PatientId, 10) + ":" + strconv.FormatInt(tempDialysisRecords.DialysisDate, 10) + ":monitor_records" redis.Set(keySeven, "", time.Second) redis.Close() 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) 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) redis := service.RedisClient() keyTen := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(tempDialysisRecords.PatientId, 10) + ":" + strconv.FormatInt(tempDialysisRecords.DialysisDate, 10) + ":assessment_after_dislysis" redis.Set(keyTen, "", time.Second) keyTwo := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(tempDialysisRecords.PatientId, 10) + ":" + strconv.FormatInt(tempDialysisRecords.DialysisDate, 10) + ":assessment_after_dislysis_last" redis.Set(keyTwo, "", time.Second) key := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(tempDialysisRecords.DialysisDate, 10) + ":assessment_after_dislysis_list_all" redis.Set(key, "", time.Second) keyThree := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(tempDialysisRecords.DialysisDate, 10) + ":dialysis_orders_list_all" redis.Set(keyThree, "", time.Second) keySeven := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(tempDialysisRecords.PatientId, 10) + ":" + strconv.FormatInt(tempDialysisRecords.DialysisDate, 10) + ":monitor_records" redis.Set(keySeven, "", time.Second) defer redis.Close() if updateAssessmentErr != nil { utils.ErrorLog("%v", updateAssessmentErr) } } _, dialysisRecords := service.FindDialysisOrderById(record_id) c.ServeSuccessJSON(map[string]interface{}{ "dialysis_order": dialysisRecords, }) } func (c *DialysisAPIController) GetLongAdvice() { patient_id, _ := c.GetInt64("id") adminUserInfo := c.GetMobileAdminUserInfo() _, config := service.FindDoctorAdviceRecordByOrgId(adminUserInfo.Org.Id) _, hisConfig := service.FindXTHisRecordByOrgId(adminUserInfo.Org.Id) is_advice_open, _ := service.FindAdviceSettingById(adminUserInfo.Org.Id) prescription_open, _ := service.FindPrescriptionConfigById(adminUserInfo.Org.Id) //patient, _ := service.FindPatientIsOpenRemindById(patient_id, adminUserInfo.Org.Id) if config.IsOpenRemind == 0 { //针对老用户,即没开启推送功能,也没有 不开启推送功能,不做任何处理 c.ServeSuccessJSON(map[string]interface{}{ "status": "1", }) return } else { //开启推送提醒 //开启推送提醒逻辑 提交长期处方的时候,弹起长期医嘱推送 var advice_three []*models.DoctorAdvice recordDateStr := time.Now().Format("2006-01-02") recordDate, _ := utils.ParseTimeStringToTime("2006-01-02", recordDateStr) nowtime := recordDate.Unix() //advices, err := service.GetLastLongAdviceByGroupNoOne(adminUserInfo.Org.Id, patient_id,nowtime) //fmt.Println("advices232333232323323233232333223233232322332",advices) //advices_two, err := service.GetLastLongAdviceByGroupNoFour(adminUserInfo.Org.Id, patient_id,nowtime) advices, err := service.GetLastLongAdviceByGroupNo(adminUserInfo.Org.Id, patient_id, nowtime) advices_two, err := service.GetLastLongAdviceByGroupNoThree(adminUserInfo.Org.Id, patient_id, nowtime) for _, advice := range advices { if advice.FrequencyType == 3 { t := time.Now() week := int(t.Weekday()) fmt.Println(t.Weekday()) fmt.Println(week) switch week { case 1: if strings.Index(advice.WeekDay, "周一") == -1 { advice_three = append(advice_three, advice) } break case 2: if strings.Index(advice.WeekDay, "周二") == -1 { advice_three = append(advice_three, advice) } break case 3: if strings.Index(advice.WeekDay, "周三") == -1 { advice_three = append(advice_three, advice) } break case 4: if strings.Index(advice.WeekDay, "周四") == -1 { advice_three = append(advice_three, advice) } break case 5: if strings.Index(advice.WeekDay, "周五") == -1 { advice_three = append(advice_three, advice) } break case 6: if strings.Index(advice.WeekDay, "周六") == -1 { advice_three = append(advice_three, advice) } break case 0: if strings.Index(advice.WeekDay, "周日") == -1 { advice_three = append(advice_three, advice) } break } } } for _, advice := range advices_two { p, _ := time.Parse("2006-01-02", time.Now().Format("2006-01-02")) now := p.Unix() dayStr := strconv.FormatInt(advice.DayCount, 10) dayStr2 := "-" + dayStr count, _ := strconv.ParseInt(dayStr2, 10, 64) oldTime := time.Now().AddDate(0, 0, int(count)).Unix() advices, _ := service.FindAllDoctorAdviceByTime(now, oldTime, patient_id, adminUserInfo.Org.Id, advice.TemplateId) for _, ad := range advices { advice_three = append(advice_three, ad) } } if err == nil { c.ServeSuccessJSON(map[string]interface{}{ "status": "2", "advices": advices, "advices_two": RemoveRepeatedElement(advice_three), "is_open_remind": config.IsOpenRemind, "his_config_open": hisConfig.IsOpen, "is_advice_open": is_advice_open.IsAdviceOpen, "prescription_open": prescription_open.IsOpen, }) } } } func (c *DialysisAPIController) GetLongAdviceOne() { patient_id, _ := c.GetInt64("id") startTime := c.GetString("schedule_date") timeLayout := "2006-01-02" loc, _ := time.LoadLocation("Local") var theStartTime int64 if len(startTime) > 0 { theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", startTime+" 00:00:00", loc) if err != nil { utils.ErrorLog(err.Error()) c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } theStartTime = theTime.Unix() } adminUserInfo := c.GetMobileAdminUserInfo() _, config := service.FindDoctorAdviceRecordByOrgId(adminUserInfo.Org.Id) _, hisConfig := service.FindXTHisRecordByOrgId(adminUserInfo.Org.Id) is_advice_open, _ := service.FindAdviceSettingById(adminUserInfo.Org.Id) prescription_open, _ := service.FindPrescriptionConfigById(adminUserInfo.Org.Id) //patient, _ := service.FindPatientIsOpenRemindById(patient_id, adminUserInfo.Org.Id) if config.IsOpenRemind == 0 { //针对老用户,即没开启推送功能,也没有 不开启推送功能,不做任何处理 c.ServeSuccessJSON(map[string]interface{}{ "status": "1", }) return } else { //开启推送提醒 //开启推送提醒逻辑 提交长期处方的时候,弹起长期医嘱推送 var advice_three []*models.DoctorAdvice advices, err := service.GetLastLongAdviceByGroupNo(adminUserInfo.Org.Id, patient_id, theStartTime) advices_two, err := service.GetLastLongAdviceByGroupNoThree(adminUserInfo.Org.Id, patient_id, theStartTime) for _, advice := range advices { if advice.FrequencyType == 3 { t := time.Now() week := int(t.Weekday()) fmt.Println(t.Weekday()) fmt.Println(week) switch week { case 1: if strings.Index(advice.WeekDay, "周一") == -1 { advice_three = append(advice_three, advice) } break case 2: if strings.Index(advice.WeekDay, "周二") == -1 { advice_three = append(advice_three, advice) } break case 3: if strings.Index(advice.WeekDay, "周三") == -1 { advice_three = append(advice_three, advice) } break case 4: if strings.Index(advice.WeekDay, "周四") == -1 { advice_three = append(advice_three, advice) } break case 5: if strings.Index(advice.WeekDay, "周五") == -1 { advice_three = append(advice_three, advice) } break case 6: if strings.Index(advice.WeekDay, "周六") == -1 { advice_three = append(advice_three, advice) } break case 0: if strings.Index(advice.WeekDay, "周日") == -1 { advice_three = append(advice_three, advice) } break } } } for _, advice := range advices_two { p, _ := time.Parse("2006-01-02", time.Now().Format("2006-01-02")) now := p.Unix() dayStr := strconv.FormatInt(advice.DayCount, 10) dayStr2 := "-" + dayStr count, _ := strconv.ParseInt(dayStr2, 10, 64) oldTime := time.Now().AddDate(0, 0, int(count)).Unix() advices, _ := service.FindAllDoctorAdviceByTime(now, oldTime, patient_id, adminUserInfo.Org.Id, advice.TemplateId) for _, ad := range advices { advice_three = append(advice_three, ad) } } if err == nil { c.ServeSuccessJSON(map[string]interface{}{ "status": "2", "advices": advices, "advices_two": RemoveRepeatedElement(advice_three), "is_open_remind": config.IsOpenRemind, "his_config_open": hisConfig.IsOpen, "is_advice_open": is_advice_open.IsAdviceOpen, "prescription_open": prescription_open.IsOpen, }) } } } func RemoveRepeatedElement(arr []*models.DoctorAdvice) (newArr []*models.DoctorAdvice) { newArr = make([]*models.DoctorAdvice, 0) for i := 0; i < len(arr); i++ { repeat := false for j := i + 1; j < len(arr); j++ { if arr[i].ID == arr[j].ID { repeat = true break } } if !repeat { newArr = append(newArr, arr[i]) } } return } func (c *DialysisAPIController) CreateRemindDoctorAdvice() { patient, _ := c.GetInt64("id", 0) groupNo, _ := c.GetInt64("groupno", 0) if patient <= 0 { c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } adminUserInfo := c.GetMobileAdminUserInfo() dataBody := make(map[string]interface{}, 0) err := json.Unmarshal(c.Ctx.Input.RequestBody, &dataBody) if err != nil { utils.ErrorLog(err.Error()) c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } utils.ErrorLog("%v", dataBody) timeLayout := "2006-01-02 15:04" loc, _ := time.LoadLocation("Local") timeLayout2 := "2006-01-02" loc2, _ := time.LoadLocation("Local") if dataBody["advice_type"] == nil || reflect.TypeOf(dataBody["advice_type"]).String() != "float64" { utils.ErrorLog("advice_type") c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } adviceType := int64(2) if dataBody["advice_date"] == nil || reflect.TypeOf(dataBody["advice_date"]).String() != "string" { utils.ErrorLog("advice_date") c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } adviceDate, _ := dataBody["advice_date"].(string) theTime, err := time.ParseInLocation(timeLayout2, adviceDate, loc2) AdviceDate := theTime.Unix() RecordDate := theTime.Unix() if dataBody["start_time"] == nil || reflect.TypeOf(dataBody["start_time"]).String() != "string" { utils.ErrorLog("start_time") c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } startTime, _ := dataBody["start_time"].(string) if len(startTime) == 0 { utils.ErrorLog("len(start_time) == 0") c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } theTime, err = time.ParseInLocation(timeLayout, startTime, loc) if err != nil { utils.ErrorLog(err.Error()) c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } StartTime := theTime.Unix() Remark := "" if dataBody["remark"] != nil && reflect.TypeOf(dataBody["remark"]).String() == "string" { remark, _ := dataBody["remark"].(string) Remark = remark } var advices []*models.GroupAdvice if dataBody["advices"] == nil || reflect.TypeOf(dataBody["advices"]).String() != "[]interface {}" { utils.ErrorLog("advices") c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } adviceNames := dataBody["advices"].([]interface{}) for _, adviceNameMap := range adviceNames { adviceNameM := adviceNameMap.(map[string]interface{}) var advice models.GroupAdvice advice.Remark = Remark advice.AdviceType = adviceType advice.StartTime = StartTime advice.AdviceDate = AdviceDate advice.RecordDate = RecordDate advice.Status = 1 advice.CreatedTime = time.Now().Unix() advice.UpdatedTime = time.Now().Unix() advice.StopState = 2 advice.ExecutionState = 2 advice.UserOrgId = adminUserInfo.Org.Id advice.PatientId = patient advice.AdviceDoctor = adminUserInfo.AdminUser.Id advice.IsSettle = 2 if adviceNameM["advice_name"] == nil || reflect.TypeOf(adviceNameM["advice_name"]).String() != "string" { utils.ErrorLog("advice_name") c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } adviceName, _ := adviceNameM["advice_name"].(string) if len(adviceName) == 0 { utils.ErrorLog("len(advice_name) == 0") c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } advice.AdviceName = adviceName if adviceNameM["drug_spec"] != nil && reflect.TypeOf(adviceNameM["drug_spec"]).String() == "string" { drugSpec, _ := strconv.ParseFloat(adviceNameM["drug_spec"].(string), 64) advice.DrugSpec = drugSpec } if adviceNameM["advice_desc"] != nil && reflect.TypeOf(adviceNameM["advice_desc"]).String() == "string" { adviceDesc, _ := adviceNameM["advice_desc"].(string) advice.AdviceDesc = adviceDesc } if adviceNameM["drug_spec_unit"] != nil && reflect.TypeOf(adviceNameM["drug_spec_unit"]).String() == "string" { drugSpecUnit, _ := adviceNameM["drug_spec_unit"].(string) advice.DrugSpecUnit = drugSpecUnit } //if adviceNameM["single_dose"] != nil && reflect.TypeOf(adviceNameM["single_dose"]).String() == "string" { // singleDose, _ := strconv.ParseFloat(adviceNameM["single_dose"].(string), 64) // advice.SingleDose = singleDose //} if adviceNameM["single_dose"] != nil || reflect.TypeOf(adviceNameM["single_dose"]).String() == "float64" { //single_dose := int64(adviceNameM["single_dose"].(float64)) advice.SingleDose = adviceNameM["single_dose"].(float64) } if adviceNameM["single_dose_unit"] != nil && reflect.TypeOf(adviceNameM["single_dose_unit"]).String() == "string" { singleDoseUnit, _ := adviceNameM["single_dose_unit"].(string) advice.SingleDoseUnit = singleDoseUnit } //if adviceNameM["prescribing_number"] != nil && reflect.TypeOf(adviceNameM["prescribing_number"]).String() == "string" { // prescribingNumber, _ := strconv.ParseFloat(adviceNameM["prescribing_number"].(string), 64) // advice.PrescribingNumber = prescribingNumber //} if adviceNameM["prescribing_number"] != nil || reflect.TypeOf(adviceNameM["prescribing_number"]).String() == "float64" { //single_dose := int64(adviceNameM["single_dose"].(float64)) advice.PrescribingNumber = adviceNameM["prescribing_number"].(float64) } if adviceNameM["prescribing_number_unit"] != nil && reflect.TypeOf(adviceNameM["prescribing_number_unit"]).String() == "string" { prescribingNumberUnit, _ := adviceNameM["prescribing_number_unit"].(string) advice.PrescribingNumberUnit = prescribingNumberUnit } if adviceNameM["delivery_way"] != nil && reflect.TypeOf(adviceNameM["delivery_way"]).String() == "string" { deliveryWay, _ := adviceNameM["delivery_way"].(string) advice.DeliveryWay = deliveryWay } if adviceNameM["execution_frequency"] != nil && reflect.TypeOf(adviceNameM["execution_frequency"]).String() == "string" { executionFrequency, _ := adviceNameM["execution_frequency"].(string) advice.ExecutionFrequency = executionFrequency } if adviceNameM["frequency_type"] != nil || reflect.TypeOf(adviceNameM["frequency_type"]).String() == "float64" { frequency_type := int64(adviceNameM["frequency_type"].(float64)) advice.FrequencyType = frequency_type } if adviceNameM["day_count"] != nil || reflect.TypeOf(adviceNameM["day_count"]).String() == "float64" { day_count := int64(adviceNameM["day_count"].(float64)) advice.DayCount = day_count } if adviceNameM["week_day"] != nil && reflect.TypeOf(adviceNameM["week_day"]).String() == "string" { week_day, _ := adviceNameM["week_day"].(string) advice.WeekDay = week_day } if adviceNameM["way"] != nil || reflect.TypeOf(adviceNameM["way"]).String() == "float64" { way := int64(adviceNameM["way"].(float64)) advice.Way = way } if adviceNameM["drug_id"] != nil || reflect.TypeOf(adviceNameM["drug_id"]).String() == "float64" { drug_id := int64(adviceNameM["drug_id"].(float64)) advice.DrugId = drug_id } if adviceNameM["drug_name_id"] != nil || reflect.TypeOf(adviceNameM["drug_name_id"]).String() == "float64" { drug_name_id := int64(adviceNameM["drug_name_id"].(float64)) advice.DrugNameId = drug_name_id } if adviceNameM["remark"] != nil && reflect.TypeOf(adviceNameM["remark"]).String() == "string" { remark, _ := adviceNameM["remark"].(string) advice.Remark = remark } if adviceNameM["groupno"] != nil || reflect.TypeOf(adviceNameM["groupno"]).String() == "float64" { groupno := int64(adviceNameM["groupno"].(float64)) advice.GroupNo = groupno } if adviceNameM["template_id"] != nil && reflect.TypeOf(adviceNameM["template_id"]).String() == "string" { template_id, _ := adviceNameM["template_id"].(string) advice.TemplateId = template_id } if adviceNameM["child"] != nil && reflect.TypeOf(adviceNameM["child"]).String() == "string" { executionFrequency, _ := adviceNameM["execution_frequency"].(string) advice.ExecutionFrequency = executionFrequency } if adviceNameM["child"] != nil && reflect.TypeOf(adviceNameM["child"]).String() == "[]interface {}" { children := adviceNameM["child"].([]interface{}) if len(children) > 0 { for _, childrenMap := range children { childMap := childrenMap.(map[string]interface{}) var child models.GroupAdvice child.Remark = Remark child.AdviceType = adviceType child.StartTime = StartTime child.AdviceDate = AdviceDate child.RecordDate = RecordDate child.Status = 1 child.CreatedTime = time.Now().Unix() child.UpdatedTime = time.Now().Unix() child.StopState = 2 child.ExecutionState = 2 child.UserOrgId = adminUserInfo.Org.Id child.PatientId = patient child.AdviceDoctor = adminUserInfo.AdminUser.Id child.IsSettle = 1 if childMap["advice_name"] == nil || reflect.TypeOf(childMap["advice_name"]).String() != "string" { utils.ErrorLog("child advice_name") c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } childAdviceName, _ := childMap["advice_name"].(string) if len(childAdviceName) == 0 { utils.ErrorLog("len(child advice_name) == 0") c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } child.AdviceName = childAdviceName if childMap["advice_desc"] != nil && reflect.TypeOf(childMap["advice_desc"]).String() == "string" { childAdviceDesc, _ := childMap["advice_desc"].(string) child.AdviceDesc = childAdviceDesc } if childMap["drug_spec"] != nil && reflect.TypeOf(childMap["drug_spec"]).String() == "string" { childDrugSpec, _ := strconv.ParseFloat(childMap["drug_spec"].(string), 64) child.DrugSpec = childDrugSpec } if childMap["drug_spec_unit"] != nil && reflect.TypeOf(childMap["drug_spec_unit"]).String() == "string" { childDrugSpecUnit, _ := childMap["drug_spec_unit"].(string) child.DrugSpecUnit = childDrugSpecUnit } if childMap["single_dose"] != nil && reflect.TypeOf(childMap["single_dose"]).String() == "float64" { child.SingleDose = childMap["single_dose"].(float64) } if childMap["single_dose_unit"] != nil && reflect.TypeOf(childMap["single_dose_unit"]).String() == "string" { childSingleDoseUnit, _ := childMap["single_dose_unit"].(string) child.SingleDoseUnit = childSingleDoseUnit } if childMap["prescribing_number"] != nil && reflect.TypeOf(childMap["prescribing_number"]).String() == "float64" { child.PrescribingNumber = childMap["prescribing_number"].(float64) } if childMap["prescribing_number_unit"] != nil && reflect.TypeOf(childMap["prescribing_number_unit"]).String() == "string" { childPrescribingNumberUnit, _ := childMap["prescribing_number_unit"].(string) child.PrescribingNumberUnit = childPrescribingNumberUnit } if childMap["groupno"] != nil || reflect.TypeOf(childMap["groupno"]).String() == "float64" { groupno := int64(childMap["groupno"].(float64)) advice.GroupNo = groupno } if childMap["remark"] != nil && reflect.TypeOf(childMap["remark"]).String() == "string" { remark, _ := childMap["remark"].(string) child.Remark = remark } child.DeliveryWay = advice.DeliveryWay child.ExecutionFrequency = advice.ExecutionFrequency advice.Children = append(advice.Children, &child) } } } temp_advice, _ := service.FindRemindAdvice(advice.UserOrgId, advice.AdviceName, advice.AdviceDesc, advice.TemplateId, advice.FrequencyType, patient, advice.RecordDate) if temp_advice.ID == 0 { advices = append(advices, &advice) } } if len(advices) > 0 { finish := models.XtDialysisFinish{ IsFinish: 1, UserOrgId: adminUserInfo.Org.Id, Status: 1, Ctime: time.Now().Unix(), Mtime: 0, Module: 4, RecordDate: AdviceDate, Sourse: 1, PatientId: patient, } dialysisFinish, _ := service.GetDialysisFinish(adminUserInfo.Org.Id, AdviceDate, 4, patient) if dialysisFinish.ID == 0 { service.CreateDialysisFinish(finish) } if adminUserInfo.Org.Id == 10597 || adminUserInfo.Org.Id == 3877 || adminUserInfo.Org.Id == 10164 { list, err := service.CreateMGroupAdviceOne(adminUserInfo.Org.Id, advices, groupNo) for _, item := range advices { byterequest, _ := json.Marshal(item) adviceLog := models.XtDoctorAdviceLog{ UserOrgId: adminUserInfo.Org.Id, PatientId: patient, AdminUserId: adminUserInfo.AdminUser.Id, Module: 1, ErrLog: string(byterequest), Status: 1, Ctime: time.Now().Unix(), Mtime: 0, Source: "手机端医嘱推送", RecordDate: item.AdviceDate, } service.CreateDoctorAdviceLog(adviceLog) } key := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(patient, 10) + ":" + strconv.FormatInt(RecordDate, 10) + ":doctor_advices" redis := service.RedisClient() //清空key 值 redis.Set(key, "", time.Second) keyOne := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(AdviceDate, 10) + ":advice_list_all" redis.Set(keyOne, "", time.Second) keyThree := "scheduals_" + adviceDate + "_" + strconv.FormatInt(adminUserInfo.Org.Id, 10) defer redis.Close() redis.Set(keyThree, "", time.Second) if err != nil { c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeCreateDoctorAdviceFail) return } c.ServeSuccessJSON(map[string]interface{}{ "msg": "ok", "advices": list, }) } else { list, err := service.CreateMGroupAdvice(adminUserInfo.Org.Id, advices, groupNo) for _, item := range advices { byterequest, _ := json.Marshal(item) adviceLog := models.XtDoctorAdviceLog{ UserOrgId: adminUserInfo.Org.Id, PatientId: patient, AdminUserId: adminUserInfo.AdminUser.Id, Module: 1, ErrLog: string(byterequest), Status: 1, Ctime: time.Now().Unix(), Mtime: 0, Source: "手机端医嘱推送", RecordDate: item.AdviceDate, } service.CreateDoctorAdviceLog(adviceLog) } key := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(patient, 10) + ":" + strconv.FormatInt(RecordDate, 10) + ":doctor_advices" redis := service.RedisClient() //清空key 值 redis.Set(key, "", time.Second) keyOne := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(AdviceDate, 10) + ":advice_list_all" redis.Set(keyOne, "", time.Second) keyThree := "scheduals_" + adviceDate + "_" + strconv.FormatInt(adminUserInfo.Org.Id, 10) defer redis.Close() redis.Set(keyThree, "", time.Second) if err != nil { c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeCreateDoctorAdviceFail) return } c.ServeSuccessJSON(map[string]interface{}{ "msg": "ok", "advices": list, }) } } else { c.ServeSuccessJSON(map[string]interface{}{ "msg": "ok", }) } return } func (c *DialysisAPIController) UploadDryWeight() { patient_id, _ := c.GetInt64("id") dry_weight, _ := c.GetFloat("dry_weight") doctor_id, _ := c.GetInt64("doctor_id") remark := c.GetString("remark") adminUserInfo := c.GetMobileAdminUserInfo() weightAdjust, err := service.FindLastDryWeightAdjust(adminUserInfo.Org.Id, patient_id) if err == gorm.ErrRecordNotFound { dryWeight := &models.SgjPatientDryweight{ PatientId: patient_id, DryWeight: dry_weight, Remakes: remark, Ctime: time.Now().Unix(), Mtime: time.Now().Unix(), Creator: doctor_id, Status: 1, UserOrgId: adminUserInfo.Org.Id, AdjustedValue: "/", UserId: adminUserInfo.AdminUser.Id, } createErr := service.CreatePatientWeightAdjust(dryWeight) redis := service.RedisClient() keyOne := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + ":assessment_befores_list_all" redis.Set(keyOne, "", time.Second) loc, _ := time.LoadLocation("Local") nowTime := time.Now() nowDay := nowTime.Format("2006-01-02") dayTime, _ := time.ParseInLocation("2006-01-02 15:04:05", nowDay+" 00:00:00", loc) key := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(patient_id, 10) + ":" + strconv.FormatInt(dayTime.Unix(), 10) + ":assessment_before_dislysis" redis.Set(key, "", time.Second) keyTwo := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(patient_id, 10) + ":last_dry_weight" redis.Set(keyTwo, "", time.Second) redis.Close() if createErr == nil { c.ServeSuccessJSON(map[string]interface{}{ "msg": "提交成功", "weight": dryWeight, }) } } else { dryWeight := &models.SgjPatientDryweight{ PatientId: patient_id, DryWeight: dry_weight, Remakes: remark, Ctime: time.Now().Unix(), Mtime: time.Now().Unix(), Creator: doctor_id, Status: 1, UserOrgId: adminUserInfo.Org.Id, AdjustedValue: "/", UserId: adminUserInfo.AdminUser.Id, } var value float64 value = dry_weight - weightAdjust.DryWeight if value < 0 { dryWeight.AdjustedValue = strconv.FormatFloat(math.Abs(value), 'f', 1, 64) + "(下调)" } else if value == 0 { dryWeight.AdjustedValue = "/" } else if value > 0 { dryWeight.AdjustedValue = strconv.FormatFloat(value, 'f', 1, 64) + "(上调)" } createErr := service.CreatePatientWeightAdjust(dryWeight) redis := service.RedisClient() loc, _ := time.LoadLocation("Local") nowTime := time.Now() nowDay := nowTime.Format("2006-01-02") dayTime, _ := time.ParseInLocation("2006-01-02 15:04:05", nowDay+" 00:00:00", loc) keyOne := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(dayTime.Unix(), 10) + ":assessment_befores_list_all" redis.Set(keyOne, "", time.Second) key := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(patient_id, 10) + ":" + strconv.FormatInt(dayTime.Unix(), 10) + ":assessment_before_dislysis" redis.Set(key, "", time.Second) keyTwo := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(patient_id, 10) + ":last_dry_weight" redis.Set(keyTwo, "", time.Second) redis.Close() if createErr == nil { c.ServeSuccessJSON(map[string]interface{}{ "msg": "提交成功", "weight": dryWeight, }) } } } func (c *DialysisAPIController) GetSolution() { patient_id, _ := c.GetInt64("patient_id") mode_id, _ := c.GetInt64("mode_id") adminUserInfo := c.GetMobileAdminUserInfo() solution, err := service.MobileGetDialysisSolutionByModeIdSeven(adminUserInfo.Org.Id, patient_id, mode_id) prescription, err := service.MobileGetLastDialysisPrescribeByModeIdSeven(adminUserInfo.Org.Id, patient_id, mode_id) system_prescription, err := service.MobileGetSystemDialysisPrescribeByModeIdSeven(adminUserInfo.Org.Id, mode_id) dialysisPrescription, _ := service.MobileGetLastDialysisPrescription(patient_id, adminUserInfo.Org.Id) if err != nil { c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeSystemError) return } c.ServeSuccessJSON(map[string]interface{}{ "solution": solution, "prescription": prescription, "system_prescription": system_prescription, "dialysisPrescription": dialysisPrescription, }) } func (c *DialysisAPIController) GetSchedule() { schedual_type, _ := c.GetInt64("schedual_type") adminUserInfo := c.GetMobileAdminUserInfo() scheduleTime, _ := c.GetInt64("record_date") deviceNumber, _ := service.GetAllDeviceNumbers(adminUserInfo.Org.Id, scheduleTime, schedual_type) list, _ := service.GetAllBedNumberSeven(adminUserInfo.Org.Id) c.ServeSuccessJSON(map[string]interface{}{ "number": deviceNumber, "list": list, }) } func (c *DialysisAPIController) GetPatientId() { id, _ := c.GetInt64("id") //orgid := c.GetMobileAdminUserInfo().Org.Id patientId, _ := service.GetPatientId(id) //获取该患者的所有传染病 list, _ := service.GetPatientInfectious(id) c.ServeSuccessJSON(map[string]interface{}{ "patient": patientId, "infectioulist": list, }) } func (this *DialysisAPIController) GetDialysisSchedule() { schedualDate := this.GetString("date") date, parseDateErr := utils.ParseTimeStringToTime("2006-01-02", schedualDate) if parseDateErr != nil { this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } adminInfo := this.GetMobileAdminUserInfo() orgID := adminInfo.Org.Id redis := service.RedisClient() defer redis.Close() key := "scheduals_" + schedualDate + "_" + strconv.FormatInt(orgID, 10) scheduals, _ := service.MobileGetDialysisScheduals(orgID, date.Unix(), 0) if len(scheduals) > 0 { //缓存数据 scheduals_json, err := json.Marshal(scheduals) if err == nil { redis.Set(key, scheduals_json, time.Second*30) } } this.ServeSuccessJSON(map[string]interface{}{ "scheduals": scheduals, }) } func (this *DialysisAPIController) GetLastOrNextDoctorAdvice() { change_type, _ := this.GetInt64("type", 0) record_date := this.GetString("record_time") patient_id, _ := this.GetInt64("patient_id", 0) timeLayout := "2006-01-02" loc, _ := time.LoadLocation("Local") theAdviceRecordTime, _ := time.ParseInLocation(timeLayout, record_date, loc) record_time := theAdviceRecordTime.Unix() adminUserInfo := this.GetMobileAdminUserInfo() advices, sch, err := service.GetDoctorAdviceByType(change_type, record_time, adminUserInfo.Org.Id, patient_id) if err == nil { if len(advices) == 0 { this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDoctorAdviceEmpty) return } else { this.ServeSuccessJSON(map[string]interface{}{ "advices": advices, "schedule": sch, }) return } } else { this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeSystemError) return } } func (c *DialysisAPIController) CreateConsumables() { record_date := c.GetString("record_time") patient_id, _ := c.GetInt64("patient_id", 0) active, _ := c.GetInt64("active") adminUser := c.GetMobileAdminUserInfo() timeLayout := "2006-01-02" loc, _ := time.LoadLocation("Local") theRecordTime, _ := time.ParseInLocation(timeLayout, record_date, loc) record_time := theRecordTime.Unix() // 查询信息规挡的设置天数 orgid := c.GetMobileAdminUserInfo().Org.Id infor, _ := service.GetDialysisInformationSetting(adminUser.Org.Id) if infor.ID > 0 { var cha_time int64 timeNowStr := time.Now().Format("2006-01-02") timeNewDate, _ := utils.ParseTimeStringToTime("2006-01-02", timeNowStr) //今日的日期减去设置的日期 cha_time = timeNewDate.Unix() - infor.WeekDay*86400 if cha_time >= record_time { //查询审核是否允许 infor, _ := service.GetDialysisInformationByRecordDate(patient_id, record_time, orgid, 11) //申请状态不允许的情况 拒绝修改 if infor.ApplicationStatus != 1 { c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeInformationExist) return } } } dataBody := make(map[string]interface{}, 0) err := json.Unmarshal(c.Ctx.Input.RequestBody, &dataBody) if err != nil { utils.ErrorLog(err.Error()) c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } houseConfig, _ := service.GetAllStoreHouseConfig(adminUser.Org.Id) var beforePrepares []*models.DialysisBeforePrepareGoods var newBeforePrepares []*models.NewDialysisBeforePrepareGoods var dialysisBefor []*models.DialysisBeforePrepare if dataBody["goods"] != nil && reflect.TypeOf(dataBody["goods"]).String() == "[]interface {}" { goods, _ := dataBody["goods"].([]interface{}) if len(goods) > 0 { for _, item := range goods { items := item.(map[string]interface{}) if items["good_id"] == nil || reflect.TypeOf(items["good_id"]).String() != "float64" { utils.ErrorLog("good_id") c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } good_id := int64(items["good_id"].(float64)) if items["good_type_id"] == nil || reflect.TypeOf(items["good_type_id"]).String() != "float64" { utils.ErrorLog("good_type_id") c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } good_type_id := int64(items["good_type_id"].(float64)) if items["count"] == nil || reflect.TypeOf(items["count"]).String() != "string" { utils.ErrorLog("count") c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } count, _ := strconv.ParseInt(items["count"].(string), 10, 64) commdity_code := items["commdity_code"].(string) fmt.Println("commdity", commdity_code) prepareGoods := &models.DialysisBeforePrepareGoods{ GoodTypeId: good_type_id, GoodId: good_id, Count: count, StorehouseId: houseConfig.StorehouseOutInfo, PatientId: patient_id, } beforePrepares = append(beforePrepares, prepareGoods) newPrepareGoods := &models.NewDialysisBeforePrepareGoods{ GoodTypeId: good_type_id, GoodId: good_id, Count: count, StorehouseId: houseConfig.StorehouseOutInfo, PatientId: patient_id, } newBeforePrepares = append(newBeforePrepares, newPrepareGoods) prepare := &models.DialysisBeforePrepare{ GoodTypeId: good_type_id, GoodId: good_id, Count: count, PatientId: patient_id, RecordDate: record_time, UserOrgId: adminUser.Org.Id, Status: 1, Ctime: time.Now().Unix(), Creater: adminUser.AdminUser.Id, CommdityCode: commdity_code, StorehouseId: houseConfig.StorehouseOutInfo, } dialysisBefor = append(dialysisBefor, prepare) } } //查询是否有库存 for _, item := range dialysisBefor { _, err := service.FindFirstWarehousingInfoByStock(item.GoodId, item.GoodTypeId, houseConfig.StorehouseOutInfo) if err == gorm.ErrRecordNotFound { goodObj, _ := service.GetGoodInformationByGoodId(item.GoodId) c.ServeSuccessJSON(map[string]interface{}{ "message": "1", "good_name": goodObj.GoodName, "specification_name": goodObj.SpecificationName, }) return } if err != nil { goodObj, _ := service.GetGoodInformationByGoodId(item.GoodId) c.ServeSuccessJSON(map[string]interface{}{ "message": "1", "good_name": goodObj.GoodName, "specification_name": goodObj.SpecificationName, }) return } } //新增 if active == 1 && len(goods) > 0 { db := service.XTWriteDB() tx := db.Begin() // 在函数结束时处理事务回滚 defer func() { if r := recover(); r != nil { tx.Rollback() } else { tx.Commit() } }() for _, item := range newBeforePrepares { creator := c.GetMobileAdminUserInfo().AdminUser.Id adminInfo := c.GetMobileAdminUserInfo() var his_count int64 //查询该耗材今日出库了多少 outInfo, _ := service.GetHistoryWarehouseOutInfo(item.PatientId, adminInfo.Org.Id, record_time, item.GoodId, tx) for _, it := range outInfo { his_count += it.Count } if item.Count > his_count { //如果当前出库数据 大于历史出库数据,那么需要出库 var cha_count int64 cha_count = item.Count - his_count timeStr := time.Now().Format("2006-01-02") timeArr := strings.Split(timeStr, "-") total, _ := service.FindAllWarehouseOut(adminInfo.Org.Id) total = total + 1 warehousing_out_order := strconv.FormatInt(adminInfo.Org.Id, 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) operation_time := time.Now().Unix() creater := c.GetMobileAdminUserInfo().AdminUser.Id recordDateStr := time.Now().Format("2006-01-02") recordDate, _ := utils.ParseTimeStringToTime("2006-01-02", recordDateStr) nowtime := recordDate.Unix() //查询默认出库仓库库存 storeConfig, _ := service.GetAllStoreHouseConfig(adminInfo.Org.Id) warehouseOut := models.WarehouseOut{ WarehouseOutOrderNumber: warehousing_out_order, OperationTime: operation_time, OrgId: adminInfo.Org.Id, Creater: creater, Ctime: time.Now().Unix(), Status: 1, WarehouseOutTime: nowtime, Type: 1, StorehouseId: storeConfig.StorehouseOutInfo, IsCheck: 1, IsSys: 1, } //查询是否生成出库单 out, _ := service.FindNewPrescriptionWarehouseOut(adminInfo.Org.Id, nowtime, tx) if out.ID == 0 { service.AddNewSigleWarehouseOut(&warehouseOut, tx) } lastOut, _ := service.FindNewLastPrescriptionWarehouseOut(adminInfo.Org.Id, nowtime, tx) goodObj, _ := service.GetNewGoodInformationByGoodIdThirty(item.GoodId, tx) houseConfig, _ := service.GetNewAllStoreHouseConfig(adminInfo.Org.Id, tx) dialyPrepareOne := models.DialysisBeforePrepare{ GoodTypeId: goodObj.GoodTypeId, GoodId: item.GoodId, PatientId: item.PatientId, RecordDate: record_time, UserOrgId: adminInfo.Org.Id, Count: cha_count, Ctime: time.Now().Unix(), Creater: creater, Status: 1, StorehouseId: houseConfig.StorehouseOutInfo, ProjectId: item.ProjectId, } //出库 service.ConsumableNewHisPrescriptionDelivery(adminInfo.Org.Id, item.PatientId, record_time, &dialyPrepareOne, &lastOut, creater, tx) if err == nil { goodErrcode := models.XtGoodErrcode{ UserOrgId: adminInfo.Org.Id, Errcode: "自动出库接口报错", GoodId: 0, Status: 1, Ctime: time.Now().Unix(), Mtime: 0, Count: 0, StockCount: 0, Creater: creator, BatchNumberId: 0, WarehouseOutId: 0, } service.CreateGoodErrcode(goodErrcode) utils.TraceLog("创建出库单失败 err = %v", err) } service.ModfiyAddDialysisAuto(item.PatientId, item.RecordDate, item.Count, item.GoodId, tx) } if item.Count < his_count { var cha_count int64 cha_count = his_count - item.Count goodObj, _ := service.GetNewGoodInformationByGoodIdThirty(item.ProjectId, tx) creater := c.GetMobileAdminUserInfo().AdminUser.Id newPrescriptionProject := &models.HisPrescriptionProject{ ID: item.ProjectId, ProjectId: item.GoodId, UserOrgId: adminInfo.Org.Id, Status: 1, Ctime: time.Now().Unix(), Mtime: time.Now().Unix(), PatientId: item.PatientId, RecordDate: record_time, Count: strconv.FormatInt(item.Count, 10), } service.NewMobileHisGoodCancelInfo(adminInfo.Org.Id, creater, newPrescriptionProject, cha_count, goodObj, tx) service.NewMobileHisGoodAutoCancelInfo(adminInfo.Org.Id, creater, newPrescriptionProject, cha_count, goodObj, tx) service.ModfiyReduceDialysisAuto(item.PatientId, item.RecordDate, item.Count, item.GoodId, tx) } if item.Count == his_count { if his_count == 0 { recordDateStr := time.Now().Format("2006-01-02") recordDate, _ := utils.ParseTimeStringToTime("2006-01-02", recordDateStr) nowtime := recordDate.Unix() lastOut, _ := service.FindNewLastPrescriptionWarehouseOut(adminInfo.Org.Id, nowtime, tx) goodObj, _ := service.GetNewGoodInformationByGoodIdThirty(item.GoodId, tx) houseConfig, _ := service.GetNewAllStoreHouseConfig(adminInfo.Org.Id, tx) creater := c.GetMobileAdminUserInfo().AdminUser.Id dialyPrepareOne := models.DialysisBeforePrepare{ GoodTypeId: goodObj.GoodTypeId, GoodId: item.GoodId, PatientId: item.PatientId, RecordDate: record_time, UserOrgId: adminInfo.Org.Id, Count: item.Count, Ctime: time.Now().Unix(), Creater: creater, Status: 1, StorehouseId: houseConfig.StorehouseOutInfo, ProjectId: item.ProjectId, } //出库 service.ConsumableNewHisPrescriptionDelivery(adminInfo.Org.Id, patient_id, record_time, &dialyPrepareOne, &lastOut, creater, tx) service.ModfiyAddDialysisAuto(item.PatientId, item.RecordDate, item.Count, item.GoodId, tx) } } //查询剩余库存 goodList, _ := service.GetNewAllGoodSumCount(item.GoodId, adminInfo.Org.Id, houseConfig.StorehouseOutInfo, tx) var sum_count int64 for _, item := range goodList { sum_count += item.StockCount } //更新剩余库存 service.UpdateNewGoodFlushCount(houseConfig.StorehouseOutInfo, item.GoodId, adminInfo.Org.Id, sum_count, tx) //耗材 service.UpdateNewGoodSumCountSeven(sum_count, item.GoodId, adminInfo.Org.Id, tx) } if err == nil { c.ServeSuccessJSON(map[string]interface{}{ "msg": "保存成功", "message": "2", }) return } else { c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeSystemError) return } } if len(beforePrepares) > 0 && active == 2 { db := service.XTWriteDB() tx := db.Begin() // 在函数结束时处理事务回滚 defer func() { if r := recover(); r != nil { tx.Rollback() } else { tx.Commit() } }() for _, item := range newBeforePrepares { creator := c.GetMobileAdminUserInfo().AdminUser.Id adminInfo := c.GetMobileAdminUserInfo() var his_count int64 //查询该耗材今日出库了多少 outInfo, _ := service.GetHistoryWarehouseOutInfo(item.PatientId, adminInfo.Org.Id, record_time, item.GoodId, tx) for _, it := range outInfo { his_count += it.Count } if item.Count > his_count { //如果当前出库数据 大于历史出库数据,那么需要出库 var cha_count int64 cha_count = item.Count - his_count timeStr := time.Now().Format("2006-01-02") timeArr := strings.Split(timeStr, "-") total, _ := service.FindAllWarehouseOut(adminInfo.Org.Id) total = total + 1 warehousing_out_order := strconv.FormatInt(adminInfo.Org.Id, 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) operation_time := time.Now().Unix() creater := c.GetMobileAdminUserInfo().AdminUser.Id recordDateStr := time.Now().Format("2006-01-02") recordDate, _ := utils.ParseTimeStringToTime("2006-01-02", recordDateStr) nowtime := recordDate.Unix() //查询默认出库仓库库存 storeConfig, _ := service.GetAllStoreHouseConfig(adminInfo.Org.Id) warehouseOut := models.WarehouseOut{ WarehouseOutOrderNumber: warehousing_out_order, OperationTime: operation_time, OrgId: adminInfo.Org.Id, Creater: creater, Ctime: time.Now().Unix(), Status: 1, WarehouseOutTime: nowtime, Type: 1, StorehouseId: storeConfig.StorehouseOutInfo, IsCheck: 1, IsSys: 1, } //查询是否生成出库单 out, _ := service.FindNewPrescriptionWarehouseOut(adminInfo.Org.Id, nowtime, tx) if out.ID == 0 { service.AddNewSigleWarehouseOut(&warehouseOut, tx) } lastOut, _ := service.FindNewLastPrescriptionWarehouseOut(adminInfo.Org.Id, nowtime, tx) goodObj, _ := service.GetNewGoodInformationByGoodIdThirty(item.GoodId, tx) houseConfig, _ := service.GetNewAllStoreHouseConfig(adminInfo.Org.Id, tx) dialyPrepareOne := models.DialysisBeforePrepare{ GoodTypeId: goodObj.GoodTypeId, GoodId: item.GoodId, PatientId: item.PatientId, RecordDate: record_time, UserOrgId: adminInfo.Org.Id, Count: cha_count, Ctime: time.Now().Unix(), Creater: creater, Status: 1, StorehouseId: houseConfig.StorehouseOutInfo, ProjectId: item.ProjectId, } //出库 service.ConsumableNewHisPrescriptionDelivery(adminInfo.Org.Id, item.PatientId, record_time, &dialyPrepareOne, &lastOut, creater, tx) if err == nil { goodErrcode := models.XtGoodErrcode{ UserOrgId: adminInfo.Org.Id, Errcode: "自动出库接口报错", GoodId: 0, Status: 1, Ctime: time.Now().Unix(), Mtime: 0, Count: 0, StockCount: 0, Creater: creator, BatchNumberId: 0, WarehouseOutId: 0, } service.CreateGoodErrcode(goodErrcode) utils.TraceLog("创建出库单失败 err = %v", err) } service.ModfiyAddDialysisAuto(item.PatientId, item.RecordDate, item.Count, item.GoodId, tx) } if item.Count < his_count { var cha_count int64 cha_count = his_count - item.Count goodObj, _ := service.GetNewGoodInformationByGoodIdThirty(item.ProjectId, tx) creater := c.GetMobileAdminUserInfo().AdminUser.Id newPrescriptionProject := &models.HisPrescriptionProject{ ID: item.ProjectId, ProjectId: item.GoodId, UserOrgId: adminInfo.Org.Id, Status: 1, Ctime: time.Now().Unix(), Mtime: time.Now().Unix(), PatientId: item.PatientId, RecordDate: record_time, Count: strconv.FormatInt(item.Count, 10), } service.NewMobileHisGoodCancelInfo(adminInfo.Org.Id, creater, newPrescriptionProject, cha_count, goodObj, tx) service.NewMobileHisGoodAutoCancelInfo(adminInfo.Org.Id, creater, newPrescriptionProject, cha_count, goodObj, tx) service.ModfiyReduceDialysisAuto(item.PatientId, item.RecordDate, item.Count, item.GoodId, tx) } if item.Count == his_count { if his_count == 0 { recordDateStr := time.Now().Format("2006-01-02") recordDate, _ := utils.ParseTimeStringToTime("2006-01-02", recordDateStr) nowtime := recordDate.Unix() lastOut, _ := service.FindNewLastPrescriptionWarehouseOut(adminInfo.Org.Id, nowtime, tx) goodObj, _ := service.GetNewGoodInformationByGoodIdThirty(item.GoodId, tx) houseConfig, _ := service.GetNewAllStoreHouseConfig(adminInfo.Org.Id, tx) creater := c.GetMobileAdminUserInfo().AdminUser.Id dialyPrepareOne := models.DialysisBeforePrepare{ GoodTypeId: goodObj.GoodTypeId, GoodId: item.GoodId, PatientId: item.PatientId, RecordDate: record_time, UserOrgId: adminInfo.Org.Id, Count: item.Count, Ctime: time.Now().Unix(), Creater: creater, Status: 1, StorehouseId: houseConfig.StorehouseOutInfo, ProjectId: item.ProjectId, } //出库 service.ConsumableNewHisPrescriptionDelivery(adminInfo.Org.Id, patient_id, record_time, &dialyPrepareOne, &lastOut, creater, tx) service.ModfiyAddDialysisAuto(item.PatientId, item.RecordDate, item.Count, item.GoodId, tx) } } //查询剩余库存 goodList, _ := service.GetNewAllGoodSumCount(item.GoodId, adminInfo.Org.Id, houseConfig.StorehouseOutInfo, tx) var sum_count int64 for _, item := range goodList { sum_count += item.StockCount } //更新剩余库存 service.UpdateNewGoodFlushCount(houseConfig.StorehouseOutInfo, item.GoodId, adminInfo.Org.Id, sum_count, tx) //耗材 service.UpdateNewGoodSumCountSeven(sum_count, item.GoodId, adminInfo.Org.Id, tx) goodObj, _ := service.GetGoodInformationByGoodId(item.GoodId) c.ServeSuccessJSON(map[string]interface{}{ "message": "1", "good_name": goodObj.GoodName, "specification_name": goodObj.SpecificationName, }) return } } var errs error if errs == nil { c.ServeSuccessJSON(map[string]interface{}{ "msg": "提交成功", "message": "2", "good_name": "", "specification_name": "", }) return } else { c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeSystemError) return } } } func (c *DialysisAPIController) CreateStockOutInfo() { patient_id, _ := c.GetInt64("patient_id", 0) record_date := c.GetString("record_time") if patient_id <= 0 { c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } adminInfo := c.GetMobileAdminUserInfo() creator := c.GetMobileAdminUserInfo().AdminUser.Id timeLayout := "2006-01-02" loc, _ := time.LoadLocation("Local") theRecordTime, _ := time.ParseInLocation(timeLayout, record_date, loc) record_time := theRecordTime.Unix() // 查询信息规挡的设置天数 infor, _ := service.GetDialysisInformationSetting(adminInfo.Org.Id) if infor.ID > 0 && infor.WeekDay > 0 { var cha_time int64 timeNowStr := time.Now().Format("2006-01-02") timeNewDate, _ := utils.ParseTimeStringToTime("2006-01-02", timeNowStr) //今日的日期减去设置的日期 cha_time = timeNewDate.Unix() - infor.WeekDay*86400 if cha_time >= record_time { //查询审核是否允许 infor, _ := service.GetDialysisInformationByRecordDate(patient_id, record_time, adminInfo.Org.Id, 11) //申请状态不允许的情况 拒绝修改 if infor.ApplicationStatus != 1 { c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeInformationExist) return } } } //创建步骤表 finish := models.XtDialysisFinish{ IsFinish: 1, UserOrgId: adminInfo.Org.Id, Status: 1, Ctime: time.Now().Unix(), Mtime: 0, Module: 11, RecordDate: record_time, Sourse: 1, PatientId: patient_id, } dialysisFinish, _ := service.GetDialysisFinish(adminInfo.Org.Id, record_time, 11, patient_id) if dialysisFinish.ID == 0 { service.CreateDialysisFinish(finish) } dataBody := make(map[string]interface{}, 0) err := json.Unmarshal(c.Ctx.Input.RequestBody, &dataBody) if err != nil { utils.ErrorLog(err.Error()) c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } var consumables []*models.DialysisBeforePrepare houseConfig, _ := service.GetAllStoreHouseConfig(adminInfo.Org.Id) if dataBody["goods"] != nil && reflect.TypeOf(dataBody["goods"]).String() == "[]interface {}" { goods, _ := dataBody["goods"].([]interface{}) if len(goods) > 0 { for _, item := range goods { items := item.(map[string]interface{}) if items["good_id"] == nil || reflect.TypeOf(items["good_id"]).String() != "float64" { utils.ErrorLog("good_id") c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } good_id := int64(items["good_id"].(float64)) if items["good_type_id"] == nil || reflect.TypeOf(items["good_type_id"]).String() != "float64" { utils.ErrorLog("good_type_id") c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } good_type_id := int64(items["good_type_id"].(float64)) if items["new_count"] == nil || reflect.TypeOf(items["new_count"]).String() != "float64" { utils.ErrorLog("new_count") c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } count := int64(items["new_count"].(float64)) if items["project_id"] == nil || reflect.TypeOf(items["project_id"]).String() != "float64" { utils.ErrorLog("project_id") c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } project_id := int64(items["project_id"].(float64)) prepare := &models.DialysisBeforePrepare{ GoodTypeId: good_type_id, GoodId: good_id, Count: count, PatientId: patient_id, RecordDate: record_time, UserOrgId: adminInfo.Org.Id, Status: 1, Ctime: time.Now().Unix(), Creater: adminInfo.AdminUser.Id, StorehouseId: houseConfig.StorehouseOutInfo, ProjectId: project_id, } consumables = append(consumables, prepare) } } } _, record := service.FindAutomaticReduceRecordByOrgId(adminInfo.Org.Id) if record.IsOpen == 1 { houseConfig, _ := service.GetAllStoreHouseConfig(adminInfo.Org.Id) //查询是否有库存 for _, item := range consumables { good, _ := service.GetGoodInformationByGoodId(item.GoodId) warehouse, _ := service.FindFirstWarehousingInfoByStockTwo(item.GoodId, good.GoodTypeId, houseConfig.StorehouseOutInfo) if item.Count > warehouse.Count { goodErrcode := models.XtGoodErrcode{ UserOrgId: item.UserOrgId, Errcode: "自动出库库存不足", GoodId: item.ProjectId, Status: 1, Ctime: time.Now().Unix(), Mtime: 0, Count: 0, StockCount: 0, Creater: creator, BatchNumberId: warehouse.ID, WarehouseOutId: 0, } service.CreateGoodErrcode(goodErrcode) goodObj, _ := service.GetGoodInformationByGoodId(item.GoodId) c.ServeSuccessJSON(map[string]interface{}{ "message": "1", "good_name": goodObj.GoodName, "specification_name": goodObj.SpecificationName, }) return } } //查询是否有出库单 _, err := service.FindStockOutByIsSys(adminInfo.Org.Id, 1, record_time) if err == gorm.ErrRecordNotFound { //没有记录,则创建出库单 timeStr := time.Now().Format("2006-01-02") timeArr := strings.Split(timeStr, "-") total, _ := service.FindAllWarehouseOut(adminInfo.Org.Id) total = total + 1 warehousing_out_order := strconv.FormatInt(adminInfo.Org.Id, 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 := adminInfo.AdminUser.Id warehouseOut := models.WarehouseOut{ WarehouseOutOrderNumber: warehousing_out_order, OperationTime: time.Now().Unix(), OrgId: adminInfo.Org.Id, Creater: creater, Ctime: time.Now().Unix(), Status: 1, WarehouseOutTime: record_time, Dealer: 0, Manufacturer: 0, Type: 1, IsSys: 1, StorehouseId: houseConfig.StorehouseOutInfo, IsCheck: 1, } err := service.AddSigleWarehouseOut(&warehouseOut) if err != nil { goodErrcode := models.XtGoodErrcode{ UserOrgId: adminInfo.Org.Id, Errcode: "创建出库单失败", GoodId: 0, Status: 1, Ctime: time.Now().Unix(), Mtime: 0, Count: 0, StockCount: 0, Creater: creator, BatchNumberId: 0, WarehouseOutId: 0, } service.CreateGoodErrcode(goodErrcode) utils.TraceLog("创建出库单失败 err = %v", err) } else { db := service.XTWriteDB() tx := db.Begin() // 在函数结束时处理事务回滚 defer func() { if r := recover(); r != nil { tx.Rollback() } else { tx.Commit() } }() for _, item := range consumables { //出库 if item.Count > 0 { timeStr := time.Now().Format("2006-01-02") timeArr := strings.Split(timeStr, "-") total, _ := service.FindAllWarehouseOut(adminInfo.Org.Id) total = total + 1 warehousing_out_order := strconv.FormatInt(adminInfo.Org.Id, 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) operation_time := time.Now().Unix() creater := c.GetMobileAdminUserInfo().AdminUser.Id recordDateStr := time.Now().Format("2006-01-02") recordDate, _ := utils.ParseTimeStringToTime("2006-01-02", recordDateStr) nowtime := recordDate.Unix() //查询默认出库仓库库存 storeConfig, _ := service.GetAllStoreHouseConfig(adminInfo.Org.Id) warehouseOut := models.WarehouseOut{ WarehouseOutOrderNumber: warehousing_out_order, OperationTime: operation_time, OrgId: adminInfo.Org.Id, Creater: creater, Ctime: time.Now().Unix(), Status: 1, WarehouseOutTime: nowtime, Type: 1, StorehouseId: storeConfig.StorehouseOutInfo, IsCheck: 1, IsSys: 1, } //查询是否生成出库单 out, _ := service.FindNewPrescriptionWarehouseOut(adminInfo.Org.Id, nowtime, tx) if out.ID == 0 { service.AddNewSigleWarehouseOut(&warehouseOut, tx) } lastOut, _ := service.FindNewLastPrescriptionWarehouseOut(adminInfo.Org.Id, nowtime, tx) goodObj, _ := service.GetNewGoodInformationByGoodIdThirty(item.GoodId, tx) houseConfig, _ := service.GetNewAllStoreHouseConfig(adminInfo.Org.Id, tx) dialyPrepareOne := models.DialysisBeforePrepare{ GoodTypeId: goodObj.GoodTypeId, GoodId: item.GoodId, PatientId: patient_id, RecordDate: record_time, UserOrgId: adminInfo.Org.Id, Count: item.Count, Ctime: time.Now().Unix(), Creater: creater, Status: 1, StorehouseId: houseConfig.StorehouseOutInfo, ProjectId: item.ProjectId, } //出库 service.ConsumableNewHisPrescriptionDelivery(adminInfo.Org.Id, item.PatientId, record_time, &dialyPrepareOne, &lastOut, creater, tx) if err == nil { goodErrcode := models.XtGoodErrcode{ UserOrgId: adminInfo.Org.Id, Errcode: "自动出库接口报错", GoodId: 0, Status: 1, Ctime: time.Now().Unix(), Mtime: 0, Count: 0, StockCount: 0, Creater: creator, BatchNumberId: 0, WarehouseOutId: 0, } service.CreateGoodErrcode(goodErrcode) utils.TraceLog("创建出库单失败 err = %v", err) } //添加 service.ModfiyAddDialysisAuto(item.PatientId, record_time, item.Count, item.GoodId, tx) } //退库 if item.Count < 0 { count := math.Abs(float64(item.Count)) item.Count = int64(count) goodObj, _ := service.GetNewGoodInformationByGoodIdThirty(item.GoodId, tx) creater := c.GetMobileAdminUserInfo().AdminUser.Id newPrescriptionProject := &models.HisPrescriptionProject{ ID: item.ProjectId, ProjectId: item.GoodId, UserOrgId: adminInfo.Org.Id, Status: 1, Ctime: time.Now().Unix(), Mtime: time.Now().Unix(), PatientId: patient_id, RecordDate: record_time, } fmt.Println("item.Count---------------------------------------", item.Count) service.NewMobileHisGoodCancelInfo(adminInfo.Org.Id, creater, newPrescriptionProject, item.Count, goodObj, tx) service.NewMobileHisGoodAutoCancelInfo(adminInfo.Org.Id, creater, newPrescriptionProject, item.Count, goodObj, tx) //减少 service.ModfiyReduceDialysisAuto(item.PatientId, record_time, item.Count, item.GoodId, tx) } //查询剩余库存 goodList, _ := service.GetNewAllGoodSumCount(item.GoodId, adminInfo.Org.Id, houseConfig.StorehouseOutInfo, tx) var sum_count int64 for _, item := range goodList { sum_count += item.StockCount } //更新剩余库存 service.UpdateNewGoodFlushCount(houseConfig.StorehouseOutInfo, item.GoodId, adminInfo.Org.Id, sum_count, tx) //耗材 service.UpdateNewGoodSumCountSeven(sum_count, item.GoodId, adminInfo.Org.Id, tx) } } // } else if err == nil { for _, item := range consumables { db := service.XTWriteDB() tx := db.Begin() // 在函数结束时处理事务回滚 defer func() { if r := recover(); r != nil { tx.Rollback() } else { tx.Commit() } }() //出库 if item.Count > 0 { timeStr := time.Now().Format("2006-01-02") timeArr := strings.Split(timeStr, "-") total, _ := service.FindAllWarehouseOut(adminInfo.Org.Id) total = total + 1 warehousing_out_order := strconv.FormatInt(adminInfo.Org.Id, 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) operation_time := time.Now().Unix() creater := c.GetMobileAdminUserInfo().AdminUser.Id recordDateStr := time.Now().Format("2006-01-02") recordDate, _ := utils.ParseTimeStringToTime("2006-01-02", recordDateStr) nowtime := recordDate.Unix() //查询默认出库仓库库存 storeConfig, _ := service.GetAllStoreHouseConfig(adminInfo.Org.Id) warehouseOut := models.WarehouseOut{ WarehouseOutOrderNumber: warehousing_out_order, OperationTime: operation_time, OrgId: adminInfo.Org.Id, Creater: creater, Ctime: time.Now().Unix(), Status: 1, WarehouseOutTime: nowtime, Type: 1, StorehouseId: storeConfig.StorehouseOutInfo, IsCheck: 1, IsSys: 1, } //查询是否生成出库单 out, _ := service.FindNewPrescriptionWarehouseOut(adminInfo.Org.Id, nowtime, tx) if out.ID == 0 { service.AddNewSigleWarehouseOut(&warehouseOut, tx) } lastOut, _ := service.FindNewLastPrescriptionWarehouseOut(adminInfo.Org.Id, nowtime, tx) goodObj, _ := service.GetNewGoodInformationByGoodIdThirty(item.GoodId, tx) houseConfig, _ := service.GetNewAllStoreHouseConfig(adminInfo.Org.Id, tx) dialyPrepareOne := models.DialysisBeforePrepare{ GoodTypeId: goodObj.GoodTypeId, GoodId: item.GoodId, PatientId: patient_id, RecordDate: record_time, UserOrgId: adminInfo.Org.Id, Count: item.Count, Ctime: time.Now().Unix(), Creater: creater, Status: 1, StorehouseId: houseConfig.StorehouseOutInfo, ProjectId: item.ProjectId, } //出库 service.ConsumableNewHisPrescriptionDelivery(adminInfo.Org.Id, item.PatientId, record_time, &dialyPrepareOne, &lastOut, creater, tx) if err == nil { goodErrcode := models.XtGoodErrcode{ UserOrgId: adminInfo.Org.Id, Errcode: "自动出库接口报错", GoodId: 0, Status: 1, Ctime: time.Now().Unix(), Mtime: 0, Count: 0, StockCount: 0, Creater: creator, BatchNumberId: 0, WarehouseOutId: 0, } service.CreateGoodErrcode(goodErrcode) utils.TraceLog("创建出库单失败 err = %v", err) } //减少 service.ModfiyAddDialysisAuto(item.PatientId, record_time, item.Count, item.GoodId, tx) } //退库 if item.Count < 0 { goodObj, _ := service.GetNewGoodInformationByGoodIdThirty(item.GoodId, tx) creater := c.GetMobileAdminUserInfo().AdminUser.Id count := math.Abs(float64(item.Count)) item.Count = int64(count) fmt.Println("item.Count---------------------------------------", item.Count) fmt.Println("item.GoodId-----------------------------------", item.GoodId) newPrescriptionProject := &models.HisPrescriptionProject{ ID: item.ProjectId, ProjectId: item.GoodId, UserOrgId: adminInfo.Org.Id, Status: 1, Ctime: time.Now().Unix(), Mtime: time.Now().Unix(), PatientId: item.PatientId, RecordDate: record_time, Count: strconv.FormatInt(item.Count, 10), } service.NewMobileHisGoodCancelInfo(adminInfo.Org.Id, creater, newPrescriptionProject, item.Count, goodObj, tx) service.NewMobileHisGoodAutoCancelInfo(adminInfo.Org.Id, creater, newPrescriptionProject, item.Count, goodObj, tx) //减少 service.ModfiyReduceDialysisAuto(item.PatientId, record_time, item.Count, item.GoodId, tx) } //查询剩余库存 goodList, _ := service.GetNewAllGoodSumCount(item.GoodId, adminInfo.Org.Id, houseConfig.StorehouseOutInfo, tx) var sum_count int64 for _, item := range goodList { sum_count += item.StockCount } //更新剩余库存 service.UpdateNewGoodFlushCount(houseConfig.StorehouseOutInfo, item.GoodId, adminInfo.Org.Id, sum_count, tx) //耗材 service.UpdateNewGoodSumCountSeven(sum_count, item.GoodId, adminInfo.Org.Id, tx) } } c.ServeSuccessJSON(map[string]interface{}{ "msg": "提交成功", "message": "2", "good_name": "", "specification_name": "", }) return } else { c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeOpenStocktWrong) return } } func (c *DialysisAPIController) EditConsumables() { patient_id, _ := c.GetInt64("patient_id", 0) record_date := c.GetString("record_time") if patient_id <= 0 { c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } adminInfo := c.GetMobileAdminUserInfo() timeLayout := "2006-01-02" loc, _ := time.LoadLocation("Local") theRecordTime, _ := time.ParseInLocation(timeLayout, record_date, loc) record_time := theRecordTime.Unix() // 查询信息规挡的设置天数 infor, _ := service.GetDialysisInformationSetting(adminInfo.Org.Id) if infor.ID > 0 && infor.WeekDay > 0 { var cha_time int64 timeNowStr := time.Now().Format("2006-01-02") timeNewDate, _ := utils.ParseTimeStringToTime("2006-01-02", timeNowStr) //今日的日期减去设置的日期 cha_time = timeNewDate.Unix() - infor.WeekDay*86400 if cha_time >= record_time { //查询审核是否允许 infor, _ := service.GetDialysisInformationByRecordDate(patient_id, record_time, adminInfo.Org.Id, 11) //申请状态不允许的情况 拒绝修改 if infor.ApplicationStatus != 1 { c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeInformationExist) return } } } dataBody := make(map[string]interface{}, 0) err := json.Unmarshal(c.Ctx.Input.RequestBody, &dataBody) if err != nil { utils.ErrorLog(err.Error()) c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } houseConfig, _ := service.GetAllStoreHouseConfig(adminInfo.Org.Id) var beforePrepares []*models.DialysisBeforePrepareGoods var newBeforePrepares []*models.NewDialysisBeforePrepareGoods //判断是否开启自动出库 _, record := service.FindAutomaticReduceRecordByOrgId(adminInfo.Org.Id) fmt.Println("record.IsOpen====================================", record) if record.IsOpen == 1 { if dataBody["goods"] != nil && reflect.TypeOf(dataBody["goods"]).String() == "[]interface {}" { goods, _ := dataBody["goods"].([]interface{}) if len(goods) > 0 { for _, item := range goods { items := item.(map[string]interface{}) if items["good_id"] == nil || reflect.TypeOf(items["good_id"]).String() != "float64" { utils.ErrorLog("good_id") c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } good_id := int64(items["good_id"].(float64)) if items["good_type_id"] == nil || reflect.TypeOf(items["good_type_id"]).String() != "float64" { utils.ErrorLog("good_type_id") c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } good_type_id := int64(items["good_type_id"].(float64)) if items["count"] == nil || reflect.TypeOf(items["count"]).String() != "string" { utils.ErrorLog("count") c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } count, _ := strconv.ParseInt(items["count"].(string), 10, 64) commdity_code := items["commdity_code"].(string) fmt.Println(commdity_code) prepareGoods := &models.DialysisBeforePrepareGoods{ GoodTypeId: good_type_id, GoodId: good_id, Count: count, StorehouseId: houseConfig.StorehouseOutInfo, PatientId: patient_id, } beforePrepares = append(beforePrepares, prepareGoods) newPrepareGoods := &models.NewDialysisBeforePrepareGoods{ GoodTypeId: good_type_id, GoodId: good_id, Count: count, StorehouseId: houseConfig.StorehouseOutInfo, PatientId: patient_id, } newBeforePrepares = append(newBeforePrepares, newPrepareGoods) } db := service.XTWriteDB() tx := db.Begin() // 在函数结束时处理事务回滚 defer func() { if r := recover(); r != nil { tx.Rollback() } else { tx.Commit() } }() for _, item := range newBeforePrepares { creator := c.GetMobileAdminUserInfo().AdminUser.Id var his_count int64 //查询该耗材今日出库了多少 outInfo, _ := service.GetHistoryWarehouseOutInfo(item.PatientId, adminInfo.Org.Id, record_time, item.GoodId, tx) fmt.Println("outInfo---------------------------------------", outInfo) for _, it := range outInfo { his_count += it.Count } if item.Count > his_count { //如果当前出库数据 大于历史出库数据,那么需要出库 var cha_count int64 cha_count = item.Count - his_count timeStr := time.Now().Format("2006-01-02") timeArr := strings.Split(timeStr, "-") total, _ := service.FindAllWarehouseOut(adminInfo.Org.Id) total = total + 1 warehousing_out_order := strconv.FormatInt(adminInfo.Org.Id, 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) operation_time := time.Now().Unix() creater := c.GetMobileAdminUserInfo().AdminUser.Id recordDateStr := time.Now().Format("2006-01-02") recordDate, _ := utils.ParseTimeStringToTime("2006-01-02", recordDateStr) nowtime := recordDate.Unix() //查询默认出库仓库库存 storeConfig, _ := service.GetAllStoreHouseConfig(adminInfo.Org.Id) warehouseOut := models.WarehouseOut{ WarehouseOutOrderNumber: warehousing_out_order, OperationTime: operation_time, OrgId: adminInfo.Org.Id, Creater: creater, Ctime: time.Now().Unix(), Status: 1, WarehouseOutTime: nowtime, Type: 1, StorehouseId: storeConfig.StorehouseOutInfo, IsCheck: 1, IsSys: 1, } //查询是否生成出库单 out, _ := service.FindNewPrescriptionWarehouseOut(adminInfo.Org.Id, nowtime, tx) if out.ID == 0 { service.AddNewSigleWarehouseOut(&warehouseOut, tx) } lastOut, _ := service.FindNewLastPrescriptionWarehouseOut(adminInfo.Org.Id, nowtime, tx) goodObj, _ := service.GetNewGoodInformationByGoodIdThirty(item.GoodId, tx) houseConfig, _ := service.GetNewAllStoreHouseConfig(adminInfo.Org.Id, tx) dialyPrepareOne := models.DialysisBeforePrepare{ GoodTypeId: goodObj.GoodTypeId, GoodId: item.GoodId, PatientId: item.PatientId, RecordDate: record_time, UserOrgId: adminInfo.Org.Id, Count: cha_count, Ctime: time.Now().Unix(), Creater: creater, Status: 1, StorehouseId: houseConfig.StorehouseOutInfo, ProjectId: item.ProjectId, } //出库 service.ConsumableNewHisPrescriptionDelivery(adminInfo.Org.Id, item.PatientId, record_time, &dialyPrepareOne, &lastOut, creater, tx) if err == nil { goodErrcode := models.XtGoodErrcode{ UserOrgId: adminInfo.Org.Id, Errcode: "自动出库接口报错", GoodId: 0, Status: 1, Ctime: time.Now().Unix(), Mtime: 0, Count: 0, StockCount: 0, Creater: creator, BatchNumberId: 0, WarehouseOutId: 0, } service.CreateGoodErrcode(goodErrcode) utils.TraceLog("创建出库单失败 err = %v", err) } service.ModfiyAddDialysisAuto(item.PatientId, item.RecordDate, item.Count, item.GoodId, tx) } if item.Count < his_count { var cha_count int64 cha_count = his_count - item.Count goodObj, _ := service.GetNewGoodInformationByGoodIdThirty(item.GoodId, tx) creater := c.GetMobileAdminUserInfo().AdminUser.Id newPrescriptionProject := &models.HisPrescriptionProject{ ID: item.ProjectId, ProjectId: item.GoodId, UserOrgId: adminInfo.Org.Id, Status: 1, Ctime: time.Now().Unix(), Mtime: time.Now().Unix(), PatientId: item.PatientId, RecordDate: record_time, } service.NewMobileHisGoodCancelInfo(adminInfo.Org.Id, creater, newPrescriptionProject, cha_count, goodObj, tx) service.NewMobileHisGoodAutoCancelInfo(adminInfo.Org.Id, creater, newPrescriptionProject, cha_count, goodObj, tx) service.ModfiyReduceDialysisAuto(item.PatientId, item.RecordDate, item.Count, item.GoodId, tx) } if item.Count == his_count { if his_count == 0 { recordDateStr := time.Now().Format("2006-01-02") recordDate, _ := utils.ParseTimeStringToTime("2006-01-02", recordDateStr) nowtime := recordDate.Unix() lastOut, _ := service.FindNewLastPrescriptionWarehouseOut(adminInfo.Org.Id, nowtime, tx) goodObj, _ := service.GetNewGoodInformationByGoodIdThirty(item.GoodId, tx) houseConfig, _ := service.GetNewAllStoreHouseConfig(adminInfo.Org.Id, tx) creater := c.GetMobileAdminUserInfo().AdminUser.Id dialyPrepareOne := models.DialysisBeforePrepare{ GoodTypeId: goodObj.GoodTypeId, GoodId: item.GoodId, PatientId: item.PatientId, RecordDate: record_time, UserOrgId: adminInfo.Org.Id, Count: item.Count, Ctime: time.Now().Unix(), Creater: creater, Status: 1, StorehouseId: houseConfig.StorehouseOutInfo, ProjectId: item.ProjectId, } //出库 service.ConsumableNewHisPrescriptionDelivery(adminInfo.Org.Id, patient_id, record_time, &dialyPrepareOne, &lastOut, creater, tx) service.ModfiyAddDialysisAuto(item.PatientId, item.RecordDate, item.Count, item.GoodId, tx) } } //查询剩余库存 goodList, _ := service.GetNewAllGoodSumCount(item.GoodId, adminInfo.Org.Id, houseConfig.StorehouseOutInfo, tx) var sum_count int64 for _, item := range goodList { sum_count += item.StockCount } //更新剩余库存 service.UpdateNewGoodFlushCount(houseConfig.StorehouseOutInfo, item.GoodId, adminInfo.Org.Id, sum_count, tx) //耗材 service.UpdateNewGoodSumCountSeven(sum_count, item.GoodId, adminInfo.Org.Id, tx) } } } //更新自动出库的地方 var errs error if errs == nil { c.ServeSuccessJSON(map[string]interface{}{ "msg": "修改成功", "message": "2", "good_name": "", "specification_name": "", }) return } else { c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeSystemError) return } } } func (c *DialysisAPIController) GetDialysisGoods() { schedualDate := c.GetString("schedule_date") schedule_type, _ := c.GetInt64("schedule_type") partition_id, _ := c.GetInt64("partition_id") page, _ := c.GetInt("page") patient_id, _ := c.GetInt64("patient_id") schedualEndDate := int64(0) date, parseDateErr := utils.ParseTimeStringToTime("2006-01-02", schedualDate) if parseDateErr != nil && len(schedualDate) != 0 { c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } endDate, parseDateErr := utils.ParseTimeStringToTime("2006-01-02 15:04:05", schedualDate+" 23:59:59") if parseDateErr != nil && len(schedualDate) != 0 { c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } schedualEndDate = endDate.Unix() adminUser := c.GetMobileAdminUserInfo() _, err := service.FindStockOutByIsSys(adminUser.Org.Id, 1, date.Unix()) goodTypes, _ := service.FindAllGoodType(adminUser.Org.Id) project, _ := service.GetHisPrescriptionProject(adminUser.Org.Id, patient_id, date.Unix()) _, config := service.FindXTHisRecordByOrgId(adminUser.Org.Id) outConfig, _ := service.FindGoodOutConfigById(adminUser.Org.Id) settleConfig, _ := service.GetSettleOpenConfigByOrgId(adminUser.Org.Id) //获取当天该病人的透析处方 prescribe, parseDateErr := service.GetDialysisPrescribe(adminUser.Org.Id, patient_id, date.Unix()) good_info, _ := service.FindAllGoodInfo(adminUser.Org.Id) if err == gorm.ErrRecordNotFound { dialysisGoods, _, total := service.MobileGetDialysisGoods(adminUser.Org.Id, date.Unix(), schedule_type, partition_id, page, 0, patient_id, "", schedualEndDate) warehouseOutList, _ := service.GetAllWarehouseOutSumList(patient_id, adminUser.Org.Id, date.Unix()) if patient_id != 0 { for _, item := range dialysisGoods { //获取当天排班的每个患者的最后日期的库存使用情况 goodUser, _ := service.GetLastDialysisGoods(item.PatientId, adminUser.Org.Id, date.Unix()) lastGoodUserDetial, _ := service.GetLastDialysisBeforePrepare(item.PatientId, adminUser.Org.Id, date.Unix()) //获取患者总的出库数据 item.LastAutomaticReduceDetail = goodUser item.LastDialysisBeforePrepare = lastGoodUserDetial item.Project = project for _, it := range item.AutomaticReduceDetail { var total int64 auto, _ := service.GetPatientAutoMatic(it.PatientId, adminUser.Org.Id, date.Unix(), it.GoodId) for _, its := range auto { total += its.Count } it.Count = total } } } c.ServeSuccessJSON(map[string]interface{}{ "dialysis_goods": dialysisGoods, "good_type": goodTypes, "total": total, "prescribe": prescribe, "good_info": good_info, "warehouseOutList": warehouseOutList, "config": config, "outConfig": outConfig, "settleConfig": settleConfig, }) return } else if err == nil { //获取当天排班的每个患者的库存使用情况 dialysisGoods, err, total := service.MobileGetDialysisGoods(adminUser.Org.Id, date.Unix(), schedule_type, partition_id, page, 0, patient_id, "", schedualEndDate) //获取患者总的出库数据 warehouseOutList, _ := service.GetAllWarehouseOutSumList(patient_id, adminUser.Org.Id, date.Unix()) if patient_id != 0 { for _, item := range dialysisGoods { //获取当天排班的每个患者的最后日期的库存使用情况 goodUser, _ := service.GetLastDialysisGoods(item.PatientId, adminUser.Org.Id, date.Unix()) lastGoodUserDetial, _ := service.GetLastDialysisBeforePrepare(item.PatientId, adminUser.Org.Id, date.Unix()) item.Project = project item.LastAutomaticReduceDetail = goodUser item.LastDialysisBeforePrepare = lastGoodUserDetial for _, it := range item.AutomaticReduceDetail { var total int64 auto, _ := service.GetPatientAutoMatic(it.PatientId, adminUser.Org.Id, date.Unix(), it.GoodId) for _, its := range auto { total += its.Count } it.Count = total } } } if err == nil { c.ServeSuccessJSON(map[string]interface{}{ "dialysis_goods": dialysisGoods, "good_type": goodTypes, "total": total, "prescribe": prescribe, "good_info": good_info, "project": project, "warehouseOutList": warehouseOutList, "config": config, "outConfig": outConfig, "settleConfig": settleConfig, }) return } else { c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeSystemError) return } } else if err != nil { c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeSystemError) return } } func (c *DialysisAPIController) GetDialysisGoodsStatistics() { start_time := c.GetString("start_time") end_time := c.GetString("end_time") timeLayout := "2006-01-02" loc, _ := time.LoadLocation("Local") var theStartTime int64 if len(start_time) > 0 { theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", start_time+" 00:00:00", loc) if err != nil { utils.ErrorLog(err.Error()) } theStartTime = theTime.Unix() } var theEndtTime int64 if len(end_time) > 0 { theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", end_time+" 23:59:59", loc) if err != nil { utils.ErrorLog(err.Error()) } theEndtTime = theTime.Unix() } adminUser := c.GetMobileAdminUserInfo() outInfo, err := service.MobileGetGoodsStatistics(adminUser.Org.Id, theStartTime, theEndtTime) stockCount, err := service.GetOutStockTotalCountOne(theStartTime, theEndtTime, adminUser.Org.Id) if err == nil { c.ServeSuccessJSON(map[string]interface{}{ "stock_out": outInfo, "stockCount": stockCount, }) return } else { c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeSystemError) return } } func (c *DialysisAPIController) GetStockInGoodInfo() { patient_id, _ := c.GetInt64("patient_id", 0) record_time := c.GetString("record_time") adminUser := c.GetMobileAdminUserInfo() date, parseDateErr := utils.ParseTimeStringToTime("2006-01-02", record_time) if parseDateErr != nil && len(record_time) != 0 { c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } goodTypes, _ := service.FindAllGoodTypeOne(adminUser.Org.Id) good_info, _ := service.FindAllGoodInfo(adminUser.Org.Id) goodUser, _ := service.GetAllStockOutUserDetail(patient_id, adminUser.Org.Id, date.Unix()) lastGoodUserDetial, _ := service.GetLastDialysisGoods(patient_id, adminUser.Org.Id, date.Unix()) project, _ := service.GetHisPrescriptionProject(adminUser.Org.Id, patient_id, date.Unix()) //获取今日患者的透析处方参数 prescribe, parseDateErr := service.GetDialysisPrescribe(adminUser.Org.Id, patient_id, date.Unix()) outInfo, _ := service.GetGoodWarehouseOutInfo(adminUser.Org.Id, patient_id, date.Unix()) _, configs := service.FindXTHisRecordByOrgId(adminUser.Org.Id) c.ServeSuccessJSON(map[string]interface{}{ "good_type": goodTypes, "good_user": goodUser, "good_info": good_info, "last_good_user": lastGoodUserDetial, "project": project, "prescription": prescribe, "outInfo": outInfo, "configs": configs, }) return } func (c *DialysisAPIController) CreateOtherStockOutInfo() { patient_id, _ := c.GetInt64("patient_id", 0) record_date := c.GetString("record_time") timeLayout := "2006-01-02" loc, _ := time.LoadLocation("Local") theRecordTime, _ := time.ParseInLocation(timeLayout, record_date, loc) record_time := theRecordTime.Unix() adminInfo := c.GetMobileAdminUserInfo() dataBody := make(map[string]interface{}, 0) err := json.Unmarshal(c.Ctx.Input.RequestBody, &dataBody) if err != nil { utils.ErrorLog(err.Error()) c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } houseConfig, _ := service.GetAllStoreHouseConfig(adminInfo.Org.Id) var beforePrepares []*models.DialysisBeforePrepareGoods var newBeforePrepares []*models.NewDialysisBeforePrepareGoods if dataBody["goods"] != nil && reflect.TypeOf(dataBody["goods"]).String() == "[]interface {}" { goods, _ := dataBody["goods"].([]interface{}) if len(goods) > 0 { for _, item := range goods { items := item.(map[string]interface{}) if items["good_id"] == nil || reflect.TypeOf(items["good_id"]).String() != "float64" { utils.ErrorLog("good_id") c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } good_id := int64(items["good_id"].(float64)) if items["good_type_id"] == nil || reflect.TypeOf(items["good_type_id"]).String() != "float64" { utils.ErrorLog("good_type_id") c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } good_type_id := int64(items["good_type_id"].(float64)) if items["count"] == nil || reflect.TypeOf(items["count"]).String() != "string" { utils.ErrorLog("count") c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } count, _ := strconv.ParseInt(items["count"].(string), 10, 64) if items["project_id"] == nil || reflect.TypeOf(items["project_id"]).String() != "float64" { utils.ErrorLog("project_id") c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } project_id := int64(items["project_id"].(float64)) new_count := int64(items["new_count"].(float64)) old_count := int64(items["old_count"].(float64)) prepare := &models.DialysisBeforePrepareGoods{ GoodId: good_id, GoodTypeId: good_type_id, Count: count, ProjectId: project_id, StorehouseId: houseConfig.StorehouseOutInfo, NewCount: new_count, OldCount: old_count, PatientId: patient_id, } beforePrepares = append(beforePrepares, prepare) newPrepare := &models.NewDialysisBeforePrepareGoods{ GoodId: good_id, GoodTypeId: good_type_id, Count: count, ProjectId: project_id, StorehouseId: houseConfig.StorehouseOutInfo, NewCount: new_count, OldCount: old_count, PatientId: patient_id, RecordDate: record_time, } newBeforePrepares = append(newBeforePrepares, newPrepare) } } } //查询是否有库存 for _, item := range beforePrepares { if item.NewCount > 0 { storeConfig, _ := service.GetAllStoreHouseConfig(adminInfo.Org.Id) warehouse, _ := service.FindFirstWarehousingInfoByStockTwo(item.GoodId, item.GoodTypeId, storeConfig.StorehouseOutInfo) if item.Count > warehouse.Count { goodObj, _ := service.GetGoodInformationByGoodId(item.GoodId) c.ServeSuccessJSON(map[string]interface{}{ "message": "1", "good_name": goodObj.GoodName, "specification_name": goodObj.SpecificationName, }) return } } } // 查询信息规挡的设置天数 infor, _ := service.GetDialysisInformationSetting(adminInfo.Org.Id) if infor.ID > 0 && infor.WeekDay > 0 { var cha_time int64 timeNowStr := time.Now().Format("2006-01-02") timeNewDate, _ := utils.ParseTimeStringToTime("2006-01-02", timeNowStr) //今日的日期减去设置的日期 cha_time = timeNewDate.Unix() - infor.WeekDay*86400 if cha_time >= record_time { //查询审核是否允许 infor, _ := service.GetDialysisInformationByRecordDate(patient_id, record_time, adminInfo.Org.Id, 11) //申请状态不允许的情况 拒绝修改 if infor.ApplicationStatus != 1 { c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeInformationExist) return } } } db := service.XTWriteDB() tx := db.Begin() // 在函数结束时处理事务回滚 defer func() { if r := recover(); r != nil { tx.Rollback() } else { tx.Commit() } }() for _, item := range beforePrepares { var his_count int64 //查询该耗材今日出库了多少 outInfo, _ := service.GetHistoryWarehouseOutInfo(patient_id, adminInfo.Org.Id, record_time, item.GoodId, tx) for _, it := range outInfo { his_count += it.Count } //如果当前出库数据 大于历史出库数据,那么需要出库 if item.Count > his_count { var cha_count int64 cha_count = item.Count - his_count timeStr := time.Now().Format("2006-01-02") timeArr := strings.Split(timeStr, "-") total, _ := service.FindAllWarehouseOut(adminInfo.Org.Id) total = total + 1 warehousing_out_order := strconv.FormatInt(adminInfo.Org.Id, 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) operation_time := time.Now().Unix() creater := c.GetMobileAdminUserInfo().AdminUser.Id recordDateStr := time.Now().Format("2006-01-02") recordDate, _ := utils.ParseTimeStringToTime("2006-01-02", recordDateStr) nowtime := recordDate.Unix() //查询默认出库仓库库存 storeConfig, _ := service.GetAllStoreHouseConfig(adminInfo.Org.Id) warehouseOut := models.WarehouseOut{ WarehouseOutOrderNumber: warehousing_out_order, OperationTime: operation_time, OrgId: adminInfo.Org.Id, Creater: creater, Ctime: time.Now().Unix(), Status: 1, WarehouseOutTime: nowtime, Type: 1, StorehouseId: storeConfig.StorehouseOutInfo, IsCheck: 1, IsSys: 1, } //查询是否生成出库单 out, _ := service.FindNewPrescriptionWarehouseOut(adminInfo.Org.Id, nowtime, tx) if out.ID == 0 { service.AddNewSigleWarehouseOut(&warehouseOut, tx) } lastOut, _ := service.FindNewLastPrescriptionWarehouseOut(adminInfo.Org.Id, nowtime, tx) goodObj, _ := service.GetNewGoodInformationByGoodIdThirty(item.GoodId, tx) houseConfig, _ := service.GetNewAllStoreHouseConfig(adminInfo.Org.Id, tx) dialyPrepareOne := models.DialysisBeforePrepare{ GoodTypeId: goodObj.GoodTypeId, GoodId: item.GoodId, PatientId: item.PatientId, RecordDate: record_time, UserOrgId: adminInfo.Org.Id, Count: cha_count, Ctime: time.Now().Unix(), Creater: creater, Status: 1, StorehouseId: houseConfig.StorehouseOutInfo, ProjectId: item.ProjectId, } //出库 service.ConsumableNewHisPrescriptionDelivery(adminInfo.Org.Id, patient_id, record_time, &dialyPrepareOne, &lastOut, creater, tx) } //如果当前出库数据 大于历史出库数据,则需要退库 if item.Count < his_count { var cha_count int64 cha_count = his_count - item.Count goodObj, _ := service.GetNewGoodInformationByGoodIdThirty(item.ProjectId, tx) creater := c.GetMobileAdminUserInfo().AdminUser.Id newPrescriptionProject := &models.HisPrescriptionProject{ ID: item.ProjectId, ProjectId: item.GoodId, UserOrgId: adminInfo.Org.Id, Status: 1, Ctime: time.Now().Unix(), Mtime: time.Now().Unix(), PatientId: item.PatientId, RecordDate: record_time, Count: strconv.FormatInt(item.Count, 10), } service.NewMobileHisGoodCancelInfo(adminInfo.Org.Id, creater, newPrescriptionProject, cha_count, goodObj, tx) service.NewMobileHisGoodAutoCancelInfo(adminInfo.Org.Id, creater, newPrescriptionProject, cha_count, goodObj, tx) } if item.Count == his_count { if his_count == 0 { recordDateStr := time.Now().Format("2006-01-02") recordDate, _ := utils.ParseTimeStringToTime("2006-01-02", recordDateStr) nowtime := recordDate.Unix() lastOut, _ := service.FindNewLastPrescriptionWarehouseOut(adminInfo.Org.Id, nowtime, tx) goodObj, _ := service.GetNewGoodInformationByGoodIdThirty(item.GoodId, tx) houseConfig, _ := service.GetNewAllStoreHouseConfig(adminInfo.Org.Id, tx) creater := c.GetMobileAdminUserInfo().AdminUser.Id dialyPrepareOne := models.DialysisBeforePrepare{ GoodTypeId: goodObj.GoodTypeId, GoodId: item.GoodId, PatientId: item.PatientId, RecordDate: record_time, UserOrgId: adminInfo.Org.Id, Count: item.Count, Ctime: time.Now().Unix(), Creater: creater, Status: 1, StorehouseId: houseConfig.StorehouseOutInfo, ProjectId: item.ProjectId, } //出库 service.ConsumableNewHisPrescriptionDelivery(adminInfo.Org.Id, patient_id, record_time, &dialyPrepareOne, &lastOut, creater, tx) } } houseConfig, _ := service.GetNewAllStoreHouseConfig(adminInfo.Org.Id, tx) //查询剩余库存 goodList, _ := service.GetNewAllGoodSumCount(item.GoodId, adminInfo.Org.Id, houseConfig.StorehouseOutInfo, tx) var sum_count int64 for _, item := range goodList { sum_count += item.StockCount } //更新剩余库存 service.UpdateNewGoodFlushCount(houseConfig.StorehouseOutInfo, item.GoodId, adminInfo.Org.Id, sum_count, tx) //耗材 service.UpdateNewGoodSumCountSeven(sum_count, item.GoodId, adminInfo.Org.Id, tx) //查询总共出库了多少支 autoGoodInfo, _ := service.GetDialysisAutoGoodInfo(patient_id, record_time, adminInfo.Org.Id, tx, item.GoodId) if len(autoGoodInfo) > 0 { var out_count int64 for _, item := range autoGoodInfo { out_count += item.Count } dialysisBeforePrepare := models.DialysisBeforePrepare{ UserOrgId: adminInfo.Org.Id, PatientId: patient_id, RecordDate: record_time, GoodId: item.GoodId, GoodTypeId: item.GoodTypeId, Count: out_count, Ctime: time.Now().Unix(), Mtime: time.Now().Unix(), Creater: adminInfo.AdminUser.Id, Modifier: adminInfo.AdminUser.Id, Status: 1, CommdityCode: "", NewCount: 0, Children: nil, ProjectId: item.ProjectId, StorehouseId: houseConfig.StorehouseOutInfo, } service.CreateDialysisPrepare(dialysisBeforePrepare, tx) } } finish := models.XtDialysisFinish{ IsFinish: 1, UserOrgId: adminInfo.Org.Id, Status: 1, Ctime: time.Now().Unix(), Mtime: 0, Module: 11, RecordDate: record_time, Sourse: 1, PatientId: patient_id, } dialysisFinish, _ := service.GetDialysisFinish(adminInfo.Org.Id, record_time, 11, patient_id) if dialysisFinish.ID == 0 { service.CreateDialysisFinish(finish) } //更新自动出库的地方 var errs error if errs == nil { c.ServeSuccessJSON(map[string]interface{}{ "msg": "修改成功", "message": "2", "good_name": "", "specification_name": "", }) return } else { c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeSystemError) return } } func RemoveRepeatedGood(arr []*models.DialysisBeforePrepare) (newArr []*models.DialysisBeforePrepare) { newArr = make([]*models.DialysisBeforePrepare, 0) for i := 0; i < len(arr); i++ { repeat := false for j := i + 1; j < len(arr); j++ { if arr[i].GoodId == arr[j].GoodId && arr[i].GoodTypeId == arr[j].GoodTypeId { repeat = true break } } if !repeat { newArr = append(newArr, arr[i]) } } return } func (c *DialysisAPIController) GetAllDrug() { patient_id, _ := c.GetInt64("patient_id", 0) adminInfo := c.GetMobileAdminUserInfo() _, drugStockConfig := service.FindDrugStockAutomaticReduceRecordByOrgId(adminInfo.Org.Id) privateDrugConfig, _ := service.GetDrugSetByUserOrgId(adminInfo.Org.Id) drugList, _ := service.GetAllBaseDrugLibList(adminInfo.Org.Id) privateDrugList, _ := service.GetPrivateDrugList(patient_id, adminInfo.Org.Id) c.ServeSuccessJSON(map[string]interface{}{ "base_drug_config": drugStockConfig, "private_drug_config": privateDrugConfig, "base_drug_list": drugList, "private_drug_list": privateDrugList, }) } func RemoveRepeatedGoodTwo(arr []*models.DialysisBeforePrepare) (newArr []*models.DialysisBeforePrepare) { newArr = make([]*models.DialysisBeforePrepare, 0) for i := 0; i < len(arr); i++ { repeat := false for j := i + 1; j < len(arr); j++ { if arr[i].GoodId == arr[j].GoodId { repeat = true break } } if !repeat { newArr = append(newArr, arr[i]) } } return } func (c *DialysisAPIController) GetDepartment() { adminInfo := c.GetMobileAdminUserInfo() departments, err := service.GetAllDepartMent(adminInfo.Org.Id) if err == nil { c.ServeSuccessJSON(map[string]interface{}{ "departments": departments, }) } else { c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeSystemError) return } } func (c *DialysisAPIController) GetMobilePrintStockGood() { types, _ := c.GetInt("type", 0) start_time := c.GetString("start_time") end_time := c.GetString("end_time") orgId := c.GetMobileAdminUserInfo().Org.Id timeLayout := "2006-01-02" loc, _ := time.LoadLocation("Local") var startTime int64 if len(start_time) > 0 { theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", start_time+" 00:00:00", loc) if err != nil { c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } startTime = theTime.Unix() } var endTime int64 if len(end_time) > 0 { theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", end_time+" 23:59:59", loc) if err != nil { utils.ErrorLog(err.Error()) c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } endTime = theTime.Unix() } list, err := service.FindPrintStockGoodInfoByType(types, startTime, endTime, orgId) stockTotal, err := service.GetOutStockTotalCountTwo(startTime, endTime, orgId) if err != nil { c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) } else { c.ServeSuccessJSON(map[string]interface{}{ "list": list, "type": types, "stockTotal": stockTotal, }) } } func (c *DialysisAPIController) GetPrescriptionList() { start_time := c.GetString("start_time") end_time := c.GetString("end_time") schedule_type, _ := c.GetInt64("schedule_type") partion_id, _ := c.GetInt64("partion_id") orgId := c.GetMobileAdminUserInfo().Org.Id timeLayout := "2006-01-02" loc, _ := time.LoadLocation("Local") var startTime int64 if len(start_time) > 0 { theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", start_time+" 00:00:00", loc) if err != nil { c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } startTime = theTime.Unix() } var endTime int64 if len(end_time) > 0 { theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", end_time+" 23:59:59", loc) if err != nil { utils.ErrorLog(err.Error()) c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } endTime = theTime.Unix() } schedulelist, _ := service.GetMobileScheduleListOne(startTime, endTime, orgId, schedule_type, partion_id) fmt.Println("schedulelist22222222", schedulelist) c.ServeSuccessJSON(map[string]interface{}{ "list": schedulelist, }) return } func (c *DialysisAPIController) BatchDeleteMonitor() { ids := c.GetString("ids") //patient_id, _ := c.GetInt64("patient_id") //monitoring_date, _ := c.GetInt64("monitoring_date") idArray := strings.Split(ids, ",") err := service.BatchDeleteMonitor(idArray) fmt.Print("err", err) //orgid := c.GetMobileAdminUserInfo().Org.Id //redis := service.RedisClient() //key := strconv.FormatInt(orgid, 10) + ":" + ":monitor_record_list_all" //redis.Set(key, "", time.Second) //keyOne := strconv.FormatInt(orgid, 10) + ":" + strconv.FormatInt(patient_id, 10) + ":" + strconv.FormatInt(monitoring_date, 10) + ":monitor_records" //redis.Set(keyOne, "", time.Second) //fmt.Println("keyo呢32332322332332232332",keyOne) //redis.Close() c.ServeSuccessJSON(map[string]interface{}{ "msg": "批量删除成功", }) return } func (c *DialysisAPIController) GetPatientDialysisRecordList() { id, _ := c.GetInt64("id") timeLayout := "2006-01-02" loc, _ := time.LoadLocation("Local") //start_time := time.Now().Format("2006-01-02") start_time := c.GetString("start_time") end_time := c.GetString("end_time") var startdateunix int64 if len(start_time) > 0 { theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", start_time+" 00:00:00", loc) if err != nil { c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } startdateunix = theTime.Unix() } var enddateunix int64 if len(end_time) > 0 { theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", end_time+" 00:00:00", loc) if err != nil { utils.ErrorLog(err.Error()) c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } enddateunix = theTime.Unix() } //startime, _ := time.ParseInLocation(timeLayout+" 15:04:05", start_time+" 00:00:00", loc) //nowTime := time.Now() //endTime := nowTime.AddDate(-30, 0, 0) //endTimes := endTime.Format("2006-01-02") //endtime, _ := time.ParseInLocation(timeLayout+" 15:04:05", end_time+" 00:00:00", loc) org_id := c.GetMobileAdminUserInfo().Org.Id //if org_id == 10579 { // list, _ := service.GetPatientDialysisRecordListOne(id, startdateunix, enddateunix) // c.ServeSuccessJSON(map[string]interface{}{ // "list": list, // }) // return //} else { // list, _ := service.GetPatientDialysisRecordList(id, startdateunix, enddateunix) // c.ServeSuccessJSON(map[string]interface{}{ // "list": list, // }) // return //} if org_id == 9538 || org_id == 10101 || org_id == 10353 || org_id == 9946 { list, _ := service.GetPatientDialysisRecordList(id, startdateunix, enddateunix) c.ServeSuccessJSON(map[string]interface{}{ "list": list, }) return } else { list, _ := service.GetPatientDialysisRecordListOne(id, startdateunix, enddateunix) c.ServeSuccessJSON(map[string]interface{}{ "list": list, }) } return } func (c *DialysisAPIController) BathDeleteAdviceList() { dataBody := make(map[string]interface{}, 0) err := json.Unmarshal(c.Ctx.Input.RequestBody, &dataBody) ids := c.GetString("ids") idArray := strings.Split(ids, ",") origin, _ := c.GetInt64("origin") if origin == 1 { err = service.BatchDeleteAdvice(idArray) fmt.Print("err", err) c.ServeSuccessJSON(map[string]interface{}{ "msg": "批量删除成功", }) return } if origin == 2 { service.BatchDeleteHisAdvice(idArray) } } func (c *DialysisAPIController) UpdateAutoReduceDetail() { good_id, _ := c.GetInt64("good_id") count, _ := c.GetInt64("count") record_time, _ := c.GetInt64("record_time") patient_id, _ := c.GetInt64("patient_id") detail, _ := service.UpdateAutoReduceDetail(good_id, count, record_time, patient_id) c.ServeSuccessJSON(map[string]interface{}{ "detail": detail, }) return } func (c *DialysisAPIController) DeleteAutoReduceDetail() { good_id, _ := c.GetInt64("good_id") record_time, _ := c.GetInt64("record_time") patient_id, _ := c.GetInt64("patient_id") service.DeleteDialysisBeforOne(good_id, record_time, patient_id) err := service.DeleteAutoReduceDetail(good_id, record_time, patient_id) fmt.Print("err", err) c.ServeSuccessJSON(map[string]interface{}{ "msg": "批量删除成功", }) return } func (c *DialysisAPIController) BatchAdviceCheck() { ids := c.GetString("ids") idArray := strings.Split(ids, ",") creator, _ := c.GetInt64("creator") origin, _ := c.GetInt64("origin") if origin == 1 { err := service.BatchAdviceCheck(idArray, creator) fmt.Println(err) list, _ := service.GetAdviceExecutionById(idArray) c.ServeSuccessJSON(map[string]interface{}{ "list": list, }) return } if origin == 2 { service.BatchHisAdviceCheck(idArray, creator) list, _ := service.GetHisAdviceExecutionById(idArray) c.ServeSuccessJSON(map[string]interface{}{ "list": list, }) return } } func (c *DialysisAPIController) BatchAdviceExecution() { ids := c.GetString("ids") idArray := strings.Split(ids, ",") executionTime := c.GetString("execution_time") creator, _ := c.GetInt64("creator") timeLayout := "2006-01-02 15:04:05" loc, _ := time.LoadLocation("Local") theTime, _ := time.ParseInLocation(timeLayout, executionTime, loc) orgin, _ := c.GetInt64("origin") if orgin == 1 { err := service.BatchAdviceExecution(idArray, creator, theTime.Unix()) list, _ := service.GetAdviceExecutionById(idArray) fmt.Println(err) c.ServeSuccessJSON(map[string]interface{}{ "list": list, }) return } if orgin == 2 { err := service.BatchHisAdviceExecution(idArray, creator, theTime.Unix()) list, _ := service.GetHisAdviceExecutionById(idArray) fmt.Println(err) c.ServeSuccessJSON(map[string]interface{}{ "list": list, }) return } } func (c *DialysisAPIController) UpdateStockGoods() { good_id, _ := c.GetInt64("good_id") record_time, _ := c.GetInt64("record_time") patient_id, _ := c.GetInt64("patient_id") count, _ := c.GetInt64("count") err := service.UpdateStockGoods(good_id, record_time, patient_id, count) fmt.Print("err", err) c.ServeSuccessJSON(map[string]interface{}{ "msg": "更新成功", }) return } // 当前数据比上一次出库数据少 func ConsumablesDeliveryTotalSeven(orgID int64, patient_id int64, record_time int64, goods []*models.DialysisBeforePrepareGoods, creater int64, count int64) (err error) { //查询该患者当天已经出库的耗材信息 goods_yc, _ := service.FindConsumablesByDateThree(orgID, patient_id, record_time) // 和新请求的出库数据进行对比,分出那些是继续出库的,那些是需要删除出库的 for i := len(goods_yc) - 1; i >= 0; i-- { goods_yc_temp := goods_yc[i] for j := len(goods) - 1; j >= 0; j-- { goods_temp := goods[j] // 已经出库和新请求出库都存在该耗材,则判断出库数量,分成是继续出库,还是删除出库 if goods_yc_temp.GoodTypeId == goods_temp.GoodTypeId && goods_yc_temp.GoodId == goods_temp.GoodId { // 已经出库和新请求出库的出库数量一致,则清除两个结构体里的数据(既不出库,也不删除出库) if goods_yc_temp.Count == goods_temp.Count { goods_yc = append(goods_yc[:i], goods_yc[i+1:]...) goods = append(goods[:j], goods[j+1:]...) break } // 如果已经出库的数量 大于 新请求出库的数量,则代表需要删除出库 if goods_yc_temp.Count > goods_temp.Count { temp_count := goods_yc_temp.Count - goods_temp.Count goods_yc[i].Count = temp_count goods = append(goods[:j], goods[j+1:]...) break } // 如果已经出库的数量 小于 新请求出库的梳理,则代表需要增加出库 if goods_yc_temp.Count < goods_temp.Count { temp_count := goods_temp.Count - goods_yc_temp.Count goods[j].Count = temp_count goods_yc = append(goods_yc[:i], goods_yc[i+1:]...) break } } } } // goods_yc 这个数据就是需要已经出库了,但是现在需要删除出库的耗材数据 // goods 这个数据就是需要出库的耗材的数据(新增的数据) //退库 if len(goods_yc) > 0 { for _, good_yc := range goods_yc { out, _ := service.FindStockOutByIsSys(orgID, 1, record_time) ConsumablesDeliveryDeleteNew(orgID, record_time, good_yc, &out, patient_id, creater, count) } } return nil } // 耗材出库删除 func ConsumablesDeliveryDeleteFour(orgID int64, record_time int64, good_yc *models.BloodAutomaticReduceDetail, warehouseOut *models.WarehouseOut, patient_id int64, creater int64, count int64) (err error) { // 先根据相关信息查询当天该耗材的出库信息 warehouseOutInfos, err := service.FindStockOutInfoByStockTwo(orgID, good_yc.GoodTypeId, good_yc.GoodId, record_time, good_yc.PatientId) if err != nil { return err } var delete_count int64 = 0 delete_count = warehouseOutInfos.Count - count houseConfig, _ := service.GetAllStoreHouseConfig(orgID) // 在出库记录表里记录退库详情 warehouseOutInfo := &models.WarehouseOutInfo{ WarehouseOutOrderNumber: warehouseOut.WarehouseOutOrderNumber, WarehouseOutId: warehouseOut.ID, Status: 1, Ctime: time.Now().Unix(), OrgId: orgID, Type: 1, IsSys: 1, SysRecordTime: record_time, GoodTypeId: good_yc.GoodTypeId, GoodId: good_yc.GoodId, PatientId: good_yc.PatientId, ConsumableType: 2, StorehouseId: houseConfig.StorehouseOutInfo, IsCheck: 1, } warehouseOutInfo.Count = count stockInInfo, _ := service.FindLastStockInInfoRecord(good_yc.GoodId, orgID) warehouseOutInfo.Price = stockInInfo.Price warehouseOutInfo.Dealer = stockInInfo.Dealer warehouseOutInfo.Manufacturer = stockInInfo.Manufacturer warehouseOutInfo.ExpiryDate = stockInInfo.ExpiryDate warehouseOutInfo.ProductDate = stockInInfo.ProductDate warehouseOutInfo.Number = warehouseOutInfos.Number warehouseOutInfo.LicenseNumber = stockInInfo.LicenseNumber warehouseOutInfo.WarehouseInfotId = stockInInfo.ID //查找当天是否存在出库记录 _, errcod := service.GetWarehouseOutInfoIsExistOne(good_yc.GoodId, good_yc.PatientId, record_time, good_yc.ProjectId) if errcod == gorm.ErrRecordNotFound { errOne := service.AddSigleWarehouseOutInfo(warehouseOutInfo) //插入详情明细表 stockFlow := models.VmStockFlow{ WarehouseOutOrderNumber: warehouseOut.WarehouseOutOrderNumber, WarehouseOutId: warehouseOut.ID, GoodId: good_yc.GoodId, Number: warehouseOutInfos.Number, ProductDate: stockInInfo.ProductDate, ExpireDate: stockInInfo.ExpiryDate, Count: count, Price: stockInInfo.Price, Status: 1, Ctime: time.Now().Unix(), UserOrgId: good_yc.OrgId, Manufacturer: stockInInfo.Manufacturer, Dealer: stockInInfo.Dealer, LicenseNumber: stockInInfo.LicenseNumber, IsEdit: 2, Creator: creater, SystemTime: record_time, ConsumableType: 3, WarehousingDetailId: 0, IsSys: 1, UpdateCreator: creater, PatientId: patient_id, StorehouseId: houseConfig.StorehouseOutInfo, } exsit, errflow := service.GetStockFlowIsExsit(warehouseOutInfos.WarehouseInfotId, patient_id, record_time, good_yc.GoodId) if errflow == gorm.ErrRecordNotFound { //创建流水表 err := service.CreateStockFlowOne(stockFlow) fmt.Println("err", err) } else if errflow == nil { //插入详情明细表 stockFlow := models.VmStockFlow{ ID: exsit.ID, WarehousingId: warehouseOutInfos.WarehouseInfotId, WarehouseOutOrderNumber: warehouseOut.WarehouseOutOrderNumber, WarehouseOutId: warehouseOut.ID, GoodId: good_yc.GoodId, Number: warehouseOutInfos.Number, ProductDate: stockInInfo.ProductDate, ExpireDate: stockInInfo.ExpiryDate, Count: exsit.Count - delete_count, Price: stockInInfo.Price, Status: 1, Ctime: time.Now().Unix(), UserOrgId: good_yc.OrgId, Manufacturer: stockInInfo.Manufacturer, Dealer: stockInInfo.Dealer, LicenseNumber: stockInInfo.LicenseNumber, IsEdit: 2, Creator: creater, SystemTime: record_time, ConsumableType: 3, WarehousingDetailId: 0, IsSys: 1, UpdateCreator: creater, PatientId: patient_id, StorehouseId: houseConfig.StorehouseOutInfo, } service.UpdatedStockFlowOne(stockFlow, warehouseOut.ID, patient_id, record_time, good_yc.GoodId) } if errOne != nil { return errOne } } else if errcod == nil { service.UpdatedWarehouseOutInfo(warehouseOutInfo, good_yc.GoodId, good_yc.PatientId, record_time, good_yc.ProjectId) //插入详情明细表 stockFlow := models.VmStockFlow{ WarehousingId: warehouseOutInfos.WarehouseInfotId, WarehouseOutOrderNumber: warehouseOut.WarehouseOutOrderNumber, WarehouseOutId: warehouseOut.ID, GoodId: good_yc.GoodId, Number: warehouseOutInfos.Number, ProductDate: stockInInfo.ProductDate, ExpireDate: stockInInfo.ExpiryDate, Count: count, Price: stockInInfo.Price, Status: 1, Ctime: time.Now().Unix(), UserOrgId: good_yc.OrgId, Manufacturer: stockInInfo.Manufacturer, Dealer: stockInInfo.Dealer, LicenseNumber: stockInInfo.LicenseNumber, IsEdit: 2, Creator: creater, SystemTime: record_time, ConsumableType: 3, WarehousingDetailId: 0, IsSys: 1, UpdateCreator: creater, PatientId: patient_id, ReturnCount: delete_count, StorehouseId: houseConfig.StorehouseOutInfo, } exsit, errflows := service.GetStockFlowIsExsit(warehouseOutInfos.WarehouseInfotId, patient_id, record_time, good_yc.GoodId) if errflows == gorm.ErrRecordNotFound { //创建流水表 service.CreateStockFlowOne(stockFlow) } else if errflows == nil { stockFlow := models.VmStockFlow{ WarehousingId: warehouseOutInfos.WarehouseInfotId, ID: exsit.ID, WarehouseOutOrderNumber: warehouseOut.WarehouseOutOrderNumber, WarehouseOutId: warehouseOut.ID, GoodId: good_yc.GoodId, Number: warehouseOutInfos.Number, ProductDate: stockInInfo.ProductDate, ExpireDate: stockInInfo.ExpiryDate, Count: exsit.Count - delete_count, Price: stockInInfo.Price, Status: 1, Ctime: time.Now().Unix(), UserOrgId: good_yc.OrgId, Manufacturer: stockInInfo.Manufacturer, Dealer: stockInInfo.Dealer, LicenseNumber: stockInInfo.LicenseNumber, IsEdit: 2, Creator: creater, SystemTime: record_time, ConsumableType: 3, WarehousingDetailId: 0, IsSys: 1, UpdateCreator: creater, PatientId: patient_id, ReturnCount: delete_count, StorehouseId: houseConfig.StorehouseOutInfo, } service.UpdatedStockFlowOne(stockFlow, warehouseOut.ID, patient_id, record_time, good_yc.GoodId) } } //更改自动出库的表格 details := models.BloodAutomaticReduceDetail{ WarehouseOutId: warehouseOutInfo.ID, WarehouseOutOrderNumber: warehouseOutInfo.WarehouseOutOrderNumber, PatientId: patient_id, Ctime: time.Now().Unix(), Mtime: time.Now().Unix(), Status: 1, RecordTime: record_time, OrgId: orgID, GoodId: good_yc.GoodId, GoodTypeId: good_yc.GoodTypeId, Count: count, StorehouseId: houseConfig.StorehouseOutInfo, } //查询当天耗材是否已经存在数据 _, errcode := service.GetAutoMaticReduceDetail(orgID, patient_id, record_time, good_yc.GoodId, good_yc.GoodTypeId) if errcode == gorm.ErrRecordNotFound { errTwo := service.CreateAutoReduceRecord(&details) if errTwo != nil { return errTwo } } else if errcode == nil { service.DeleteAutoRedeceDetailTwo(orgID, patient_id, record_time, good_yc.GoodId, good_yc.GoodTypeId) service.CreateAutoReduceRecord(&details) } service.ModifyGoodAddInformation(good_yc.GoodId, delete_count, good_yc.OrgId) //增加出库库存数量 service.ModifyReduceGoodSumCount(houseConfig.StorehouseOutInfo, delete_count, good_yc.OrgId, good_yc.GoodId) errOne := service.UpDateWarehouStockFlowByStockDelete(warehouseOutInfos.WarehouseInfotId, record_time, good_yc.GoodId, delete_count, good_yc.PatientId) fmt.Println("errOne", errOne) // 删除出库完成后,要增加对应批次的库存数量 errThree := service.UpDateWarehouseInfoByStockDelete(warehouseOutInfos.WarehouseInfotId, delete_count, patient_id, record_time, good_yc.GoodId) if errThree != nil { return errThree } if good_yc.Count == 0 { return nil } else { return errors.New("退库和出库数据不匹配") } } func ConsumablesDeliveryTotalSix(orgID int64, patient_id int64, record_time int64, goods []*models.DialysisBeforePrepareGoods, goodOne []*models.NewDialysisBeforePrepareGoods, creater int64) (err error) { //查询该患者当天已经出库的耗材信息 goods_yc, _ := service.FindConsumablesByDateThree(orgID, patient_id, record_time) // 和新请求的出库数据进行对比,分出那些是继续出库的,那些是需要删除出库的 for i := len(goods_yc) - 1; i >= 0; i-- { goods_yc_temp := goods_yc[i] for j := len(goods) - 1; j >= 0; j-- { goods_temp := goods[j] // 已经出库和新请求出库都存在该耗材,则判断出库数量,分成是继续出库,还是删除出库 if goods_yc_temp.GoodTypeId == goods_temp.GoodTypeId && goods_yc_temp.GoodId == goods_temp.GoodId { // 已经出库和新请求出库的出库数量一致,则清除两个结构体里的数据(既不出库,也不删除出库) if goods_yc_temp.Count == goods_temp.Count { goods_yc = append(goods_yc[:i], goods_yc[i+1:]...) goods = append(goods[:j], goods[j+1:]...) break } // 如果已经出库的数量 大于 新请求出库的数量,则代表需要删除出库 if goods_yc_temp.Count > goods_temp.Count { temp_count := goods_yc_temp.Count - goods_temp.Count goods_yc[i].Count = temp_count goods = append(goods[:j], goods[j+1:]...) break } // 如果已经出库的数量 小于 新请求出库的梳理,则代表需要增加出库 if goods_yc_temp.Count < goods_temp.Count { temp_count := goods_temp.Count - goods_yc_temp.Count goods[j].Count = temp_count goods_yc = append(goods_yc[:i], goods_yc[i+1:]...) break } } } } // goods_yc 这个数据就是需要已经出库了,但是现在需要删除出库的耗材数据 // goods 这个数据就是需要出库的耗材的数据(新增的数据) fmt.Println("剩余需要出库的", len(goods)) if len(goods) > 0 { out, err := service.FindStockOutByIsSys(orgID, 1, record_time) houseConfig, _ := service.GetAllStoreHouseConfig(orgID) if err == gorm.ErrRecordNotFound { //没有记录,则创建出库单 timeStr := time.Now().Format("2006-01-02") timeArr := strings.Split(timeStr, "-") total, _ := service.FindAllWarehouseOut(orgID) total = total + 1 warehousing_out_order := strconv.FormatInt(orgID, 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) warehouseOut := models.WarehouseOut{ WarehouseOutOrderNumber: warehousing_out_order, OperationTime: time.Now().Unix(), OrgId: orgID, Creater: creater, Ctime: time.Now().Unix(), Status: 1, WarehouseOutTime: record_time, Dealer: 0, Manufacturer: 0, Type: 1, IsSys: 1, StorehouseId: houseConfig.StorehouseOutInfo, IsCheck: 1, } err := service.AddSigleWarehouseOut(&warehouseOut) if err != nil { utils.TraceLog("创建出库单失败 err = %v", err) return err } else { out = warehouseOut } } for _, item := range goods { var newCount int64 = 0 for _, it := range goodOne { if item.GoodTypeId == it.GoodTypeId && item.GoodId == it.GoodId { newCount = it.Count } } prepare := models.DialysisBeforePrepare{ GoodTypeId: item.GoodTypeId, GoodId: item.GoodId, Count: item.Count, StorehouseId: houseConfig.StorehouseOutInfo, } service.ConsumablesGoodDelivery(orgID, patient_id, record_time, &prepare, &out, newCount) //增加出库数量 service.ModifyGoodSumCount(houseConfig.StorehouseOutInfo, item.Count, orgID, item.GoodId) } } if len(goods_yc) > 0 { for _, good_yc := range goods_yc { out, _ := service.FindStockOutByIsSys(orgID, 1, record_time) ConsumablesDeliveryDeleteThree(orgID, record_time, good_yc, &out) } } return nil } // 耗材出库删除 func ConsumablesDeliveryDeleteThree(orgID int64, record_time int64, good_yc *models.BloodAutomaticReduceDetail, warehouseOut *models.WarehouseOut) (err error) { // 先根据相关信息查询当天该耗材的出库信息 warehouseOutInfos, err := service.FindStockOutInfoByStockOne(orgID, good_yc.GoodTypeId, good_yc.GoodId, record_time) if err != nil { return err } var delete_count int64 = 0 for _, ware := range warehouseOutInfos { // 判断当前出库的数据和删除出库数量 if good_yc.Count <= ware.Count { delete_count = good_yc.Count } else { delete_count = ware.Count } warehouseOutInfo := &models.WarehouseOutInfo{ WarehouseOutOrderNumber: warehouseOut.WarehouseOutOrderNumber, WarehouseOutId: warehouseOut.ID, Status: 1, Ctime: time.Now().Unix(), Remark: "", OrgId: orgID, Type: 1, Manufacturer: 0, Dealer: 0, IsSys: 0, SysRecordTime: record_time, GoodTypeId: good_yc.GoodTypeId, GoodId: good_yc.GoodId, StorehouseId: warehouseOut.StorehouseId, IsCheck: 1, } warehouseOutInfo.Count = delete_count stockInInfo, _ := service.FindLastStockInInfoRecord(good_yc.GoodId, orgID) warehouseOutInfo.Price = stockInInfo.Price errOne := service.AddSigleWarehouseOutInfo(warehouseOutInfo) if errOne != nil { return errOne } // 删除出库完成后,要改变流水库存(有疑问) errOne = service.UpDateWarehouStockFlowByStockDelete(ware.WarehouseInfotId, record_time, good_yc.GoodId, delete_count, good_yc.PatientId) fmt.Println("errOne", errOne) errThree := service.UpDateWarehouseInfoByStockDelete(ware.WarehouseInfotId, delete_count, good_yc.PatientId, record_time, good_yc.GoodId) service.ModifyGoodAddInformation(good_yc.GoodId, delete_count, good_yc.OrgId) //扣减出库数量 service.ModifyReduceGoodSumCount(warehouseOut.StorehouseId, good_yc.Count, good_yc.OrgId, good_yc.GoodId) if errThree != nil { return errThree } } if good_yc.Count == 0 { return nil } else { return errors.New("退库和出库数据不匹配") } } func (this *DialysisAPIController) GetMobileScheduleList() { limit, _ := this.GetInt64("limit") page, _ := this.GetInt64("page") type_options_visible, _ := this.GetInt64("type_options_visible") sch_type_options_visible, _ := this.GetInt64("sch_type_options_visible") zone_options_visible, _ := this.GetInt64("zone_options_visible") fmt.Println(limit, page, type_options_visible, sch_type_options_visible, zone_options_visible) } func RemoveRepeatedCheckRecod(arr []*models.HisPrescriptionProject) (newArr []*models.HisPrescriptionProject) { newArr = make([]*models.HisPrescriptionProject, 0) for i := 0; i < len(arr); i++ { repeat := false for j := i + 1; j < len(arr); j++ { if arr[i].TeamId == arr[j].TeamId && arr[i].PrescriptionId == arr[j].PrescriptionId { repeat = true break } } if !repeat { newArr = append(newArr, arr[i]) } } return } func (this *DialysisAPIController) GetRoleList() { admin_user_id, _ := this.GetInt64("admin_user_id") orgid := this.GetMobileAdminUserInfo().Org.Id list, err := service.GetRoleList(orgid, admin_user_id) fmt.Println(err) this.ServeSuccessJSON(map[string]interface{}{ "list": list, }) return } func ConsumablesDeliveryDeleteNew(orgID int64, record_time int64, good_yc *models.BloodAutomaticReduceDetail, warehouseOut *models.WarehouseOut, patient_id int64, creater int64, count int64) (err error) { // 先根据相关信息查询当天该耗材的出库信息 warehouseOutInfos, err := service.FindStockOutInfoByStockTwo(orgID, good_yc.GoodTypeId, good_yc.GoodId, record_time, good_yc.PatientId) if err != nil { return err } var delete_count int64 = 0 delete_count = warehouseOutInfos.Count - count houseConfig, _ := service.GetAllStoreHouseConfig(orgID) // 删除出库完成后,要增加对应批次的库存数量 errThree := service.UpDateWarehouseInfoByStockDelete(warehouseOutInfos.WarehouseInfotId, delete_count, patient_id, record_time, good_yc.GoodId) if errThree != nil { return errThree } //增加退库数量 service.UpdateSumAddCancelCount(orgID, good_yc.GoodId, houseConfig.StorehouseOutInfo, delete_count) //扣减出库数量 service.ModifyAddGoodSumCount(houseConfig.StorehouseOutInfo, delete_count, orgID, good_yc.GoodId) //查询剩余库存 goodList, _ := service.GetAllGoodSumCount(good_yc.GoodId, orgID, houseConfig.StorehouseOutInfo) var sum_count int64 for _, item := range goodList { sum_count += item.StockCount } // 在出库记录表里记录退库详情 warehouseOutInfo := &models.WarehouseOutInfo{ WarehouseOutOrderNumber: warehouseOut.WarehouseOutOrderNumber, WarehouseOutId: warehouseOut.ID, Status: 1, Ctime: time.Now().Unix(), OrgId: orgID, Type: 1, IsSys: 1, SysRecordTime: record_time, GoodTypeId: good_yc.GoodTypeId, GoodId: good_yc.GoodId, PatientId: good_yc.PatientId, ConsumableType: 2, StorehouseId: houseConfig.StorehouseOutInfo, IsCheck: 1, OverCount: sum_count, } warehouseOutInfo.Count = count stockInInfo, _ := service.FindLastStockInInfoRecord(good_yc.GoodId, orgID) warehouseOutInfo.Price = stockInInfo.Price warehouseOutInfo.Dealer = stockInInfo.Dealer warehouseOutInfo.Manufacturer = stockInInfo.Manufacturer warehouseOutInfo.ExpiryDate = stockInInfo.ExpiryDate warehouseOutInfo.ProductDate = stockInInfo.ProductDate warehouseOutInfo.Number = warehouseOutInfos.Number warehouseOutInfo.LicenseNumber = stockInInfo.LicenseNumber warehouseOutInfo.WarehouseInfotId = stockInInfo.ID //查找当天是否存在出库记录 _, errcod := service.GetWarehouseOutInfoIsExistOne(good_yc.GoodId, good_yc.PatientId, record_time, good_yc.ProjectId) if errcod == gorm.ErrRecordNotFound { errOne := service.AddSigleWarehouseOutInfo(warehouseOutInfo) //插入详情明细表 if errOne != nil { return errOne } //插入详情明细表 stockFlow := models.VmStockFlow{ WarehouseOutOrderNumber: warehouseOut.WarehouseOutOrderNumber, WarehouseOutId: warehouseOut.ID, GoodId: good_yc.GoodId, Number: warehouseOutInfos.Number, ProductDate: stockInInfo.ProductDate, ExpireDate: stockInInfo.ExpiryDate, Count: count, Price: stockInInfo.Price, Status: 1, Ctime: record_time, UserOrgId: good_yc.OrgId, Manufacturer: stockInInfo.Manufacturer, Dealer: stockInInfo.Dealer, LicenseNumber: stockInInfo.LicenseNumber, IsEdit: 2, Creator: creater, SystemTime: record_time, ConsumableType: 3, WarehousingDetailId: 0, IsSys: 1, UpdateCreator: creater, PatientId: patient_id, StorehouseId: houseConfig.StorehouseOutInfo, OverCount: sum_count, ProjectId: good_yc.ProjectId, } err := service.CreateStockFlowOne(stockFlow) fmt.Println("err", err) } else if errcod == nil { service.UpdatedWarehouseOutInfo(warehouseOutInfo, good_yc.GoodId, good_yc.PatientId, record_time, good_yc.ProjectId) } //创建退库单 operation_time := time.Now().Unix() //创建退库单 timeStr := time.Now().Format("2006-01-02") timeArr := strings.Split(timeStr, "-") total, _ := service.FindAllCancelStockTotal(orgID) total = total + 1 orderNumber := "CKTKD" + strconv.FormatInt(orgID, 10) + timeArr[0] + timeArr[1] + timeArr[2] + "000" + strconv.FormatInt(total, 10) cancelStock := models.CancelStock{ OrderNumber: orderNumber, OperaTime: operation_time, OrgId: orgID, Creater: warehouseOut.Creater, Ctime: time.Now().Unix(), Status: 1, ReturnTime: record_time, Type: 1, StorehouseId: stockInInfo.StorehouseId, IsCheck: 1, } _, msgerrkonde := service.GetCancelStockDetailByOrderNumberOne(record_time, orgID) if msgerrkonde == gorm.ErrRecordNotFound { service.AddSigleCancelStock(&cancelStock) } cancel, _ := service.GetLastCancelStockById(orgID) manufacturer, _ := service.GetManufactureById(stockInInfo.Manufacturer) deaerler, _ := service.GetDealerById(stockInInfo.Dealer) cancelStockInfo := models.CancelStockInfo{ GoodId: stockInInfo.GoodId, CancelStockId: cancel.ID, GoodTypeId: stockInInfo.GoodTypeId, Count: delete_count, Price: stockInInfo.PackingPrice, Total: 0, ProductDate: stockInInfo.ProductDate, ExpiryDate: stockInInfo.ExpiryDate, Ctime: record_time, Status: 1, OrgId: orgID, OrderNumber: cancel.OrderNumber, Type: 0, Dealer: deaerler.DealerName, Manufacturer: manufacturer.ManufacturerName, Number: stockInInfo.Number, RegisterAccount: "", Remark: "", WarehouseInfoId: stockInInfo.ID, PatientId: patient_id, RecordDate: record_time, StorehouseId: stockInInfo.StorehouseId, IsCheck: 1, } service.CreateCancelStockInfoOne(&cancelStockInfo) cancelInfo, _ := service.GetLastCancelStockInfoByGoodId(stockInInfo.GoodId) flow := models.VmStockFlow{ WarehousingId: warehouseOutInfo.WarehouseInfotId, GoodId: good_yc.GoodId, Number: warehouseOutInfos.Number, LicenseNumber: stockInInfo.LicenseNumber, Count: delete_count, UserOrgId: orgID, PatientId: patient_id, SystemTime: record_time, ConsumableType: 7, IsSys: 0, WarehousingOrder: "", WarehouseOutId: warehouseOutInfos.WarehouseOutId, WarehouseOutOrderNumber: warehouseOutInfo.WarehouseOutOrderNumber, IsEdit: 0, CancelStockId: cancel.ID, CancelOrderNumber: cancel.OrderNumber, Manufacturer: manufacturer.ID, Dealer: 0, Creator: warehouseOut.Creater, UpdateCreator: 0, Status: 1, Ctime: record_time, Mtime: 0, Price: stockInInfo.Price, WarehousingDetailId: stockInInfo.ID, WarehouseOutDetailId: warehouseOutInfos.ID, CancelOutDetailId: cancelInfo.ID, ProductDate: stockInInfo.ProductDate, ExpireDate: stockInInfo.ExpiryDate, StorehouseId: houseConfig.StorehouseOutInfo, OverCount: sum_count, } service.CreateStockFlowOne(flow) //更改自动出库的表格 details := models.BloodAutomaticReduceDetail{ WarehouseOutId: warehouseOutInfo.ID, WarehouseOutOrderNumber: warehouseOutInfo.WarehouseOutOrderNumber, PatientId: patient_id, Ctime: time.Now().Unix(), Mtime: time.Now().Unix(), Status: 1, RecordTime: record_time, OrgId: orgID, GoodId: good_yc.GoodId, GoodTypeId: good_yc.GoodTypeId, Count: count, StorehouseId: houseConfig.StorehouseOutInfo, } //查询当天耗材是否已经存在数据 _, errcode := service.GetAutoMaticReduceDetail(orgID, patient_id, record_time, good_yc.GoodId, good_yc.GoodTypeId) if errcode == gorm.ErrRecordNotFound { errTwo := service.CreateAutoReduceRecord(&details) if errTwo != nil { return errTwo } } else if errcode == nil { service.DeleteAutoRedeceDetailTwo(orgID, patient_id, record_time, good_yc.GoodId, good_yc.GoodTypeId) service.CreateAutoReduceRecord(&details) } service.ModifyGoodAddInformation(good_yc.GoodId, delete_count, good_yc.OrgId) //增加出库库存数量 //service.ModifyReduceGoodSumCount(houseConfig.StorehouseOutInfo,delete_count,good_yc.OrgId,good_yc.GoodId) if good_yc.Count == 0 { return nil } else { return errors.New("退库和出库数据不匹配") } } func (this *DialysisAPIController) SavePatientSign() { adminUserInfo := this.GetMobileAdminUserInfo() patient_id, _ := this.GetInt64("patient_id") dialysis_date, _ := this.GetInt64("dialysis_date") orgid := adminUserInfo.Org.Id var esdata models.DialysisOrder var err error if err = json.Unmarshal(this.Ctx.Input.RequestBody, &esdata); err != nil { this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } esdata.Hash = esdata.Hash esdata.Url = beego.AppConfig.String("qiniu_domain") + esdata.Hash order := models.DialysisOrder{ Hash: esdata.Hash, Url: esdata.Url, } err = service.UpdatePatientSign(patient_id, dialysis_date, order, orgid) redis := service.RedisClient() key := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(patient_id, 10) + ":" + strconv.FormatInt(dialysis_date, 10) + ":dialysis_order" redis.Set(key, "", time.Second) keyOne := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(dialysis_date, 10) + ":dialysis_orders_list_all" //清空key 值 redis.Set(keyOne, "", time.Second) //scheduleDateStartOne := startDate.Format("2006-01-02") //keyTwo := "scheduals_" + scheduleDateStartOne + "_" + strconv.FormatInt(adminUserInfo.Org.Id, 10) //redis.Set(keyTwo, "", time.Second) keyThree := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(patient_id, 10) + ":" + strconv.FormatInt(dialysis_date, 10) + ":doctor_advices" redis.Set(keyThree, "", time.Second) keyFour := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(patient_id, 10) + ":" + strconv.FormatInt(dialysis_date, 10) + ":monitor_records" redis.Set(keyFour, "", time.Second) keyFive := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(patient_id, 10) + ":patient_info" redis.Set(keyFive, "", time.Second) keySix := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + strconv.FormatInt(patient_id, 10) + ":" + strconv.FormatInt(dialysis_date, 10) + ":his_doctor_advice" redis.Set(keySix, "", time.Second) keySeven := strconv.FormatInt(adminUserInfo.Org.Id, 10) + ":" + ":device_list_all" redis.Set(keySeven, "", time.Second) if err != nil { fmt.Println(err) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDBUpdate) return } this.ServeSuccessJSON(map[string]interface{}{ "electronic_signature": esdata, }) } func (this *DialysisAPIController) GetPatientSign() { patient_id, _ := this.GetInt64("patient_id") dialysis_date, _ := this.GetInt64("dialysis_date") adminUserInfo := this.GetMobileAdminUserInfo() orgId := adminUserInfo.Org.Id dialysisOrder, err := service.GetPatientSign(patient_id, dialysis_date, orgId) if err != nil { fmt.Println(err) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDBUpdate) return } this.ServeSuccessJSON(map[string]interface{}{ "dialysisOrder": dialysisOrder, }) } func (this *DialysisAPIController) GetScheduleByPatient() { patient_id, _ := this.GetInt64("patient_id") schedule_date, _ := this.GetInt64("schedule_date") orgid := this.GetMobileAdminUserInfo().Org.Id schedule, _ := service.GetScheduleByPatient(patient_id, schedule_date, orgid) this.ServeSuccessJSON(map[string]interface{}{ "schedule": schedule, }) } func (this *DialysisAPIController) GetDialysisRecordOrder() { org_id := this.GetMobileAdminUserInfo().Org.Id patient_id, _ := this.GetInt64("patient_id") schedule_date, _ := this.GetInt64("schedule_date") order, _ := service.GetDialysisRecordOrder(org_id, patient_id, schedule_date) this.ServeSuccessJSON(map[string]interface{}{ "order": order, }) } func (this *DialysisAPIController) GetScheduleTypeByIdList() { org_id := this.GetMobileAdminUserInfo().Org.Id schedule_date := this.GetString("schedule_date") schedule_type, _ := this.GetInt64("schedule_type") timeLayout := "2006-01-02" loc, _ := time.LoadLocation("Local") var startdateunix int64 if len(schedule_date) > 0 { theTime, err := time.ParseInLocation(timeLayout+"15:04:05", schedule_date+"00:00:00", loc) if err != nil { this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } startdateunix = theTime.Unix() } list, _ := service.GetScheduleTypeById(org_id, startdateunix, schedule_type) scheduals, _ := service.MobileGetDialysisScheduals(org_id, startdateunix, schedule_type) devices, _ := service.GetAllDevicetByListSix(org_id) for key, item := range scheduals { // 床位信息 for _, device := range devices { if item.BedId == device.ID { scheduals[key].DeviceNumber = device break } } } this.ServeSuccessJSON(map[string]interface{}{ "list": list, "scheduals": scheduals, }) } func (this *DialysisAPIController) SavePatientPicture() { patient_id, _ := this.GetInt64("patient_id") dialysis_date, _ := this.GetInt64("schedule_date") avatar := this.GetString("avatar") fmt.Println("patient_id", patient_id) orgId := this.GetMobileAdminUserInfo().Org.Id order := models.DialysisOrder{ Url: avatar, } err := service.UpdatePatientSign(patient_id, dialysis_date, order, orgId) redis := service.RedisClient() key := strconv.FormatInt(orgId, 10) + ":" + strconv.FormatInt(patient_id, 10) + ":" + strconv.FormatInt(dialysis_date, 10) + ":dialysis_order" redis.Set(key, "", time.Second) keyOne := strconv.FormatInt(orgId, 10) + ":" + strconv.FormatInt(dialysis_date, 10) + ":dialysis_orders_list_all" //清空key 值 redis.Set(keyOne, "", time.Second) keyThree := strconv.FormatInt(orgId, 10) + ":" + strconv.FormatInt(patient_id, 10) + ":" + strconv.FormatInt(dialysis_date, 10) + ":doctor_advices" redis.Set(keyThree, "", time.Second) keyFour := strconv.FormatInt(orgId, 10) + ":" + strconv.FormatInt(patient_id, 10) + ":" + strconv.FormatInt(dialysis_date, 10) + ":monitor_records" redis.Set(keyFour, "", time.Second) keyFive := strconv.FormatInt(orgId, 10) + ":" + strconv.FormatInt(patient_id, 10) + ":patient_info" redis.Set(keyFive, "", time.Second) keySix := strconv.FormatInt(orgId, 10) + ":" + strconv.FormatInt(patient_id, 10) + ":" + strconv.FormatInt(dialysis_date, 10) + ":his_doctor_advice" redis.Set(keySix, "", time.Second) keySeven := strconv.FormatInt(orgId, 10) + ":" + ":device_list_all" redis.Set(keySeven, "", time.Second) if err != nil { this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDBUpdate) return } this.ServeSuccessJSON(map[string]interface{}{ "order": order, }) } func (this *DialysisAPIController) ExectionMobileAdvice() { ids := this.GetString("ids") idSplit := strings.Split(ids, ",") orgId := this.GetMobileAdminUserInfo().Org.Id config, _ := service.FindXTHisRecordByOrgIdSix(orgId) execution_time := this.GetString("exce_time") timeLayout2 := "2006-01-02 15:04:05" loc, _ := time.LoadLocation("Local") theTime, errs := time.ParseInLocation(timeLayout2, execution_time, loc) if errs != nil { utils.ErrorLog(errs.Error()) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } //his客户 if config.IsOpen == 1 { list, _ := service.GetHisMobileAdviceGroupList(orgId, idSplit) adviceList, _ := service.GetHisMobileAdviceList(orgId, idSplit) for _, item := range list { for _, it := range adviceList { if item.DrugId == it.DrugId { item.ChildDoctorAdvice = append(item.ChildDoctorAdvice, it) } } } for _, item := range list { medical, _ := service.GetBaseDrugMedical(item.DrugId) var sum_out_count int64 for _, itemThree := range item.ChildDoctorAdvice { var prescribing_number int64 stringPrescribingNumber := strconv.FormatFloat(itemThree.PrescribingNumber, 'f', -1, 64) parseIntPrescribingNumber, _ := strconv.ParseInt(stringPrescribingNumber, 10, 64) if itemThree.PrescribingNumberUnit == medical.MaxUnit && medical.MaxUnit != medical.MinUnit { prescribing_number = parseIntPrescribingNumber * medical.MinNumber } if itemThree.PrescribingNumberUnit == medical.MinUnit && medical.MaxUnit != medical.MinUnit { prescribing_number = parseIntPrescribingNumber } if itemThree.PrescribingNumberUnit == medical.MinUnit && medical.MaxUnit == medical.MinUnit { prescribing_number = parseIntPrescribingNumber } sum_out_count += prescribing_number } houseConfig, _ := service.GetAllStoreHouseConfig(orgId) drugStockOut, _ := service.GetDrugSumOutCountByDrugId(item.DrugId, orgId, houseConfig.DrugStorehouseOut) //库存不足 if sum_out_count > drugStockOut.FlushCount { this.ServeSuccessJSON(map[string]interface{}{ "msg": "2", "drug": medical, "ids": ids, }) return } } creater := this.GetMobileAdminUserInfo().AdminUser.Id //执行医嘱 errs := service.ExectionMobileAdvice(orgId, idSplit, theTime.Unix(), creater) advices, _ := service.FindHisDoctorAdviceByIds(orgId, idSplit) for _, item := range advices { key := strconv.FormatInt(orgId, 10) + ":" + strconv.FormatInt(item.PatientId, 10) + ":" + strconv.FormatInt(item.AdviceDate, 10) + ":doctor_advices" redis := service.RedisClient() //清空key 值 redis.Set(key, "", time.Second) keyTwo := strconv.FormatInt(orgId, 10) + ":" + strconv.FormatInt(item.AdviceDate, 10) + ":advice_list_all" redis.Set(keyTwo, "", time.Second) keyThree := strconv.FormatInt(orgId, 10) + ":" + strconv.FormatInt(item.PatientId, 10) + ":" + strconv.FormatInt(item.AdviceDate, 10) + ":his_doctor_advice" redis.Set(keyThree, "", time.Second) recordDate := theTime.Format("2006-01-02") keyFour := "scheduals_" + recordDate + "_" + strconv.FormatInt(orgId, 10) redis.Set(keyFour, "", time.Second) keyFive := strconv.FormatInt(orgId, 10) + ":" + strconv.FormatInt(item.AdviceDate, 10) + ":his_advices_list_all" redis.Set(keyFive, "", time.Second) defer redis.Close() } if errs == nil { //药品管理信息 _, drugStockConfig := service.FindDrugStockAutomaticReduceRecordByOrgId(orgId) storeHouseConfig, _ := service.GetAllStoreHouseConfig(orgId) if drugStockConfig.IsOpen == 1 { for _, item := range advices { advice, _ := service.FindHisDoctorAdviceById(orgId, item.ID) config, _ := service.GetDrugOpenConfigOne(orgId) if config.IsOpen != 1 { //查询该药品是否有库存 medical, _ := service.GetBaseDrugMedical(item.DrugId) pharmacyConfig, _ := service.FindPharmacyConfig(advice.UserOrgId) if medical.IsUse == 2 { if config.IsOpen != 1 { if pharmacyConfig.IsOpen == 1 && medical.IsPharmacy == 0 { service.HisDrugsDelivery(orgId, creater, &advice) if orgId == 3877 || orgId == 10265 { //查询该药品是否有出库记录 flowMap, _ := service.GetDrugFLowByAdviceById(advice.DrugId, advice.PatientId, advice.UserOrgId, advice.AdviceDate) if len(flowMap) == 0 { errs := service.UpdateHisAdviceById(advice.ID) if errs != nil { drugError := models.XtDrugError{ UserOrgId: orgId, DrugId: item.DrugId, RecordDate: item.AdviceDate, PatientId: item.PatientId, Remark: "透析医嘱页面出库记录为空,更新执行人失败", Status: 1, Ctime: time.Now().Unix(), Mtime: 0, SumCount: 0, Prescribingnumber: advice.PrescribingNumber, PrescribingNumberUnit: advice.PrescribingNumberUnit, } service.CreateDrugError(drugError) } this.ServeSuccessJSON(map[string]interface{}{ "msg": "2", "drug": medical, "ids": ids, }) return } } } if pharmacyConfig.IsOpen != 1 { service.HisDrugsDelivery(orgId, creater, &advice) if orgId == 3877 || orgId == 10265 { //查询该药品是否有出库记录 flowMap, _ := service.GetDrugFLowByAdviceById(advice.DrugId, advice.PatientId, advice.UserOrgId, advice.AdviceDate) if len(flowMap) == 0 { errs := service.UpdateHisAdviceById(advice.ID) if errs != nil { drugError := models.XtDrugError{ UserOrgId: orgId, DrugId: item.DrugId, RecordDate: item.AdviceDate, PatientId: item.PatientId, Remark: "透析医嘱页面出库记录为空,更新执行人失败", Status: 1, Ctime: time.Now().Unix(), Mtime: 0, SumCount: 0, Prescribingnumber: advice.PrescribingNumber, PrescribingNumberUnit: advice.PrescribingNumberUnit, } service.CreateDrugError(drugError) } this.ServeSuccessJSON(map[string]interface{}{ "msg": "2", "drug": medical, "ids": ids, }) return } } } //更新字典里面的库存 stockInfo, _ := service.GetDrugAllStockInfo(storeHouseConfig.DrugStorehouseOut, item.UserOrgId, item.DrugId) var sum_count int64 for _, its := range stockInfo { if its.MaxUnit == medical.MaxUnit { its.StockMaxNumber = its.StockMaxNumber * medical.MinNumber } sum_count += its.StockMaxNumber + its.StockMinNumber } service.UpdateBaseDrugSumTwo(item.DrugId, sum_count, item.UserOrgId) //剩余库存 service.UpdateDrugStockCount(item.DrugId, item.UserOrgId, storeHouseConfig.DrugStorehouseOut, sum_count) } } } } } this.ServeSuccessJSON(map[string]interface{}{ "msg": "1", "ids": ids, }) return } else { this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeSystemError) } } //血透客户 if config.IsOpen == 2 || config.IsOpen == 0 { //药品管理信息 _, drugStockConfig := service.FindDrugStockAutomaticReduceRecordByOrgId(orgId) if drugStockConfig.IsOpen == 1 { list, _ := service.GetBloodMobileAdviceGroupList(orgId, idSplit) adviceList, _ := service.GetBloodMobileAdviceList(orgId, idSplit) for _, item := range list { for _, it := range adviceList { if item.DrugId == it.DrugId { item.ChildDoctorAdvice = append(item.ChildDoctorAdvice, it) } } } for _, item := range list { medical, _ := service.GetBaseDrugMedical(item.DrugId) var sum_out_count int64 for _, itemThree := range item.ChildDoctorAdvice { var prescribing_number int64 stringPrescribingNumber := strconv.FormatFloat(itemThree.PrescribingNumber, 'f', -1, 64) parseIntPrescribingNumber, _ := strconv.ParseInt(stringPrescribingNumber, 10, 64) if itemThree.PrescribingNumberUnit == medical.MaxUnit && medical.MaxUnit != medical.MinUnit { prescribing_number = parseIntPrescribingNumber * medical.MinNumber } if itemThree.PrescribingNumberUnit == medical.MinUnit && medical.MaxUnit != medical.MinUnit { prescribing_number = parseIntPrescribingNumber } if itemThree.PrescribingNumberUnit == medical.MinUnit && medical.MaxUnit == medical.MinUnit { prescribing_number = parseIntPrescribingNumber } sum_out_count += prescribing_number } houseConfig, _ := service.GetAllStoreHouseConfig(orgId) drugStockOut, _ := service.GetDrugSumOutCountByDrugId(item.DrugId, orgId, houseConfig.DrugStorehouseOut) //库存不足 if sum_out_count > drugStockOut.FlushCount { this.ServeSuccessJSON(map[string]interface{}{ "msg": "2", "drug": medical, "ids": ids, }) return } } creater := this.GetMobileAdminUserInfo().AdminUser.Id //执行医嘱 errs := service.ExectionBloodMobileAdvice(orgId, idSplit, theTime.Unix(), creater) advices, _ := service.FindAllDoctorAdviceByIds(orgId, idSplit) for _, item := range advices { key := strconv.FormatInt(orgId, 10) + ":" + strconv.FormatInt(item.PatientId, 10) + ":" + strconv.FormatInt(item.AdviceDate, 10) + ":doctor_advices" redis := service.RedisClient() //清空key 值 redis.Set(key, "", time.Second) keyTwo := strconv.FormatInt(orgId, 10) + ":" + strconv.FormatInt(item.AdviceDate, 10) + ":advice_list_all" redis.Set(keyTwo, "", time.Second) keyThree := strconv.FormatInt(orgId, 10) + ":" + strconv.FormatInt(item.PatientId, 10) + ":" + strconv.FormatInt(item.AdviceDate, 10) + ":his_doctor_advice" redis.Set(keyThree, "", time.Second) recordDate := theTime.Format("2006-01-02") keyFour := "scheduals_" + recordDate + "_" + strconv.FormatInt(orgId, 10) redis.Set(keyFour, "", time.Second) keyFive := strconv.FormatInt(orgId, 10) + ":" + strconv.FormatInt(item.AdviceDate, 10) + ":his_advices_list_all" redis.Set(keyFive, "", time.Second) defer redis.Close() } if errs == nil { for _, item := range advices { storeHouseConfig, _ := service.GetAllStoreHouseConfig(orgId) medical, _ := service.GetBaseDrugMedical(item.DrugId) //查询是否出库按钮开启 adviceSetting, _ := service.FindAdviceSettingById(item.UserOrgId) if adviceSetting.IsAdviceOpen == 1 { //查询是否出库按钮开启 prescriptionConfig, _ := service.FindPrescriptionConfigById(item.UserOrgId) pharmacyConfig, _ := service.FindPharmacyConfig(item.UserOrgId) if prescriptionConfig.IsOpen == 1 { if medical.IsUse == 2 { if pharmacyConfig.IsOpen == 1 && medical.IsPharmacy == 0 { service.DrugsDelivery(item.UserOrgId, item.ExecutionStaff, &item) } if pharmacyConfig.IsOpen != 1 { service.DrugsDelivery(item.UserOrgId, item.ExecutionStaff, &item) } //更新字典里面的库存 stockInfo, _ := service.GetDrugAllStockInfo(storeHouseConfig.DrugStorehouseOut, item.UserOrgId, item.DrugId) var sum_count int64 for _, its := range stockInfo { if its.MaxUnit == medical.MaxUnit { its.StockMaxNumber = its.StockMaxNumber * medical.MinNumber } sum_count += its.StockMaxNumber + its.StockMinNumber } service.UpdateBaseDrugSumTwo(item.DrugId, sum_count, item.UserOrgId) //剩余库存 service.UpdateDrugStockCount(item.DrugId, item.UserOrgId, storeHouseConfig.DrugStorehouseOut, sum_count) } } } else { pharmacyConfig, _ := service.FindPharmacyConfig(item.UserOrgId) if medical.IsUse == 2 { if pharmacyConfig.IsOpen == 1 && medical.IsPharmacy == 0 { service.DrugsDelivery(item.UserOrgId, item.ExecutionStaff, &item) } if pharmacyConfig.IsOpen != 1 { service.DrugsDelivery(item.UserOrgId, item.ExecutionStaff, &item) } stockInfo, _ := service.GetDrugAllStockInfo(storeHouseConfig.DrugStorehouseOut, item.UserOrgId, item.DrugId) var sum_count int64 for _, its := range stockInfo { if its.MaxUnit == medical.MaxUnit { its.StockMaxNumber = its.StockMaxNumber * medical.MinNumber } sum_count += its.StockMaxNumber + its.StockMinNumber } service.UpdateBaseDrugSumTwo(item.DrugId, sum_count, item.UserOrgId) //剩余库存 service.UpdateDrugStockCount(item.DrugId, item.UserOrgId, storeHouseConfig.DrugStorehouseOut, sum_count) } } } } this.ServeSuccessJSON(map[string]interface{}{ "msg": "1", "ids": ids, }) return } else { creater := this.GetMobileAdminUserInfo().AdminUser.Id //执行医嘱 service.ExectionBloodMobileAdvice(orgId, idSplit, theTime.Unix(), creater) advices, _ := service.FindAllDoctorAdviceByIds(orgId, idSplit) for _, item := range advices { key := strconv.FormatInt(orgId, 10) + ":" + strconv.FormatInt(item.PatientId, 10) + ":" + strconv.FormatInt(item.AdviceDate, 10) + ":doctor_advices" redis := service.RedisClient() //清空key 值 redis.Set(key, "", time.Second) keyTwo := strconv.FormatInt(orgId, 10) + ":" + strconv.FormatInt(item.AdviceDate, 10) + ":advice_list_all" redis.Set(keyTwo, "", time.Second) keyThree := strconv.FormatInt(orgId, 10) + ":" + strconv.FormatInt(item.PatientId, 10) + ":" + strconv.FormatInt(item.AdviceDate, 10) + ":his_doctor_advice" redis.Set(keyThree, "", time.Second) recordDate := theTime.Format("2006-01-02") keyFour := "scheduals_" + recordDate + "_" + strconv.FormatInt(orgId, 10) redis.Set(keyFour, "", time.Second) keyFive := strconv.FormatInt(orgId, 10) + ":" + strconv.FormatInt(item.AdviceDate, 10) + ":his_advices_list_all" redis.Set(keyFive, "", time.Second) defer redis.Close() } this.ServeSuccessJSON(map[string]interface{}{ "msg": "1", "ids": ids, }) return } } } func (this *DialysisAPIController) GetSettleMobileAdvice() { ids := this.GetString("ids") idSplit := strings.Split(ids, ",") orgId := this.GetMobileAdminUserInfo().Org.Id config, _ := service.FindXTHisRecordByOrgIdSix(orgId) if config.IsOpen == 1 { service.UpdateSettleMobileHisAdvice(orgId, idSplit) this.ServeSuccessJSON(map[string]interface{}{ "msg": "1", "ids": ids, }) return } if config.IsOpen == 0 || config.IsOpen == 2 { service.UpdateSettleMobileBloodAdvice(orgId, idSplit) this.ServeSuccessJSON(map[string]interface{}{ "msg": "1", "ids": ids, }) return } } func (this *DialysisAPIController) GetCheckMobileAdvice() { ids := this.GetString("ids") idSplit := strings.Split(ids, ",") orgId := this.GetMobileAdminUserInfo().Org.Id config, _ := service.FindXTHisRecordByOrgIdSix(orgId) //his if config.IsOpen == 1 { checker := this.GetMobileAdminUserInfo().AdminUser.Id theTime := time.Now() advices := models.HisDoctorAdviceThirty{ CheckTime: theTime.Unix(), Checker: checker, UpdatedTime: time.Now().Unix(), } service.CheckHisMobileDoctorAdvice(orgId, idSplit, advices) list, _ := service.FindDoctorAdviceByIds(orgId, idSplit) for _, item := range list { key := strconv.FormatInt(orgId, 10) + ":" + strconv.FormatInt(item.PatientId, 10) + ":" + strconv.FormatInt(item.AdviceDate, 10) + ":doctor_advices" redis := service.RedisClient() //清空key 值 redis.Set(key, "", time.Second) keyTwo := strconv.FormatInt(orgId, 10) + ":" + strconv.FormatInt(item.AdviceDate, 10) + ":advice_list_all" redis.Set(keyTwo, "", time.Second) keyThree := strconv.FormatInt(orgId, 10) + ":" + strconv.FormatInt(item.PatientId, 10) + ":" + strconv.FormatInt(item.AdviceDate, 10) + ":his_doctor_advice" redis.Set(keyThree, "", time.Second) recordDate := theTime.Format("2006-01-02") keyFour := "scheduals_" + recordDate + "_" + strconv.FormatInt(orgId, 10) redis.Set(keyFour, "", time.Second) keyFive := strconv.FormatInt(orgId, 10) + ":" + strconv.FormatInt(item.AdviceDate, 10) + ":his_advices_list_all" redis.Set(keyFive, "", time.Second) defer redis.Close() } this.ServeSuccessJSON(map[string]interface{}{ "msg": "1", "ids": ids, }) return } //血透 if config.IsOpen == 0 || config.IsOpen == 2 { checker := this.GetMobileAdminUserInfo().AdminUser.Id theTime := time.Now() advices := models.DoctorAdvice{ CheckTime: theTime.Unix(), Checker: checker, UpdatedTime: time.Now().Unix(), } service.CheckBloodDoctorAdvice(orgId, idSplit, advices) list, _ := service.FindDoctorAdviceByIds(orgId, idSplit) for _, item := range list { key := strconv.FormatInt(orgId, 10) + ":" + strconv.FormatInt(item.PatientId, 10) + ":" + strconv.FormatInt(item.AdviceDate, 10) + ":doctor_advices" redis := service.RedisClient() //清空key 值 redis.Set(key, "", time.Second) keyTwo := strconv.FormatInt(orgId, 10) + ":" + strconv.FormatInt(item.AdviceDate, 10) + ":advice_list_all" redis.Set(keyTwo, "", time.Second) keyThree := strconv.FormatInt(orgId, 10) + ":" + strconv.FormatInt(item.PatientId, 10) + ":" + strconv.FormatInt(item.AdviceDate, 10) + ":his_doctor_advice" redis.Set(keyThree, "", time.Second) recordDate := theTime.Format("2006-01-02") keyFour := "scheduals_" + recordDate + "_" + strconv.FormatInt(orgId, 10) redis.Set(keyFour, "", time.Second) keyFive := strconv.FormatInt(orgId, 10) + ":" + strconv.FormatInt(item.AdviceDate, 10) + ":his_advices_list_all" redis.Set(keyFive, "", time.Second) defer redis.Close() } this.ServeSuccessJSON(map[string]interface{}{ "msg": "1", "ids": ids, }) return } } func (this *DialysisAPIController) CheckSchedule() { patientID, _ := this.GetInt64("patient_id") recordDateStr := this.GetString("record_date") nurseID, _ := this.GetInt64("start_nurse") schedual_type, _ := this.GetInt64("schedual_type") bedID, _ := this.GetInt64("bed") start_time := this.GetString("start_time") fmt.Println("patientID", patientID) fmt.Println("recordDateStr", recordDateStr) fmt.Println("nurseID", nurseID) fmt.Println("schedual_type------", schedual_type) if patientID <= 0 || len(recordDateStr) == 0 || nurseID <= 0 || bedID <= 0 { this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } startDate, parseStartDateErr := utils.ParseTimeStringToTime("2006-01-02 15:04:05", start_time) if parseStartDateErr != nil { this.ErrorLog("时间解析失败:%v", parseStartDateErr) 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 } adminUserInfo := this.GetMobileAdminUserInfo() patient, getPatientErr := service.MobileGetPatientById(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 } 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 } 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.ErrorLog("床位号不存在") this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } dialysisRecord, getRecordErr := service.MobileGetDialysisRecord(adminUserInfo.Org.Id, patientID, recordDate.Unix()) if getRecordErr != nil { this.ErrorLog("获取透析记录失败:%v", getRecordErr) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) return } else if dialysisRecord != nil { this.ServeFailJSONWithSGJErrorCode(enums.ErrorDialysisOrderRepeatStart) 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() //查询更改的机号,是否有人用了,如果只是排班了,但是没上机,直接替换,如果排班且上机了,就提示他无法上机 //sch, _ := service.GetSourceSch(adminUserInfo.Org.Id, patientID, scheduleendTime) schedule, err := service.GetDayScheduleByBedid(adminUserInfo.Org.Id, schedulestartTime, bedID, schedual_type) //查询该床位是否有人用了 order, _ := service.GetDialysisOrderByBedIdTwo(adminUserInfo.Org.Id, schedulestartTime, bedID, schedual_type) if err == nil { if schedule.ID == 0 { this.ServeSuccessJSON(map[string]interface{}{ "status": 0, "msg": "请求失败", }) } else { if schedule.ID > 0 && schedule.DialysisOrder.ID == 0 { //有排班没上机记录 if order.ID > 0 { //该机位被其他人占用了 this.ServeFailJSONWithSGJErrorCode(enums.ErrorDialysisOrderRepeatBed) return } else { //2022-11-04 更变需求,如果改床位有排班,但是没上机,则进行互换床位操作,如果改床位是本人的话,不做处理 daySchedule, _ := service.GetDaySchedule(adminUserInfo.Org.Id, schedulestartTime, scheduleendTime, patientID) if daySchedule.ID > 0 && schedule.PatientId != daySchedule.PatientId { this.ServeSuccessJSON(map[string]interface{}{ "status": 1, "msg": "该机位已有排班,继续操作将会与原来的排班信息进行互调,请问是否继续?", }) return } else { this.ServeSuccessJSON(map[string]interface{}{ "status": 0, "msg": "", }) } } } else if schedule.ID > 0 && schedule.DialysisOrder.ID > 0 { this.ServeSuccessJSON(map[string]interface{}{ "status": 2, "msg": "当前机位已有患者在使用,请重新选择!", }) } } } else { this.ServeSuccessJSON(map[string]interface{}{ "status": 0, "msg": "", }) } } func (this *DialysisAPIController) GetNewDoctorListToday() { orgId := this.GetMobileAdminUserInfo().Org.Id schedule_type, _ := this.GetInt64("schedule_type") partion_type, _ := this.GetInt64("partion_type") start_time := this.GetString("start_time") timeLayout := "2006-01-02" loc, _ := time.LoadLocation("Local") startTime, _ := time.ParseInLocation(timeLayout+" 15:04:05", start_time+" 00:00:00", loc) list, err := service.GetDialysisAdviceSchedulistSeven(orgId, schedule_type, partion_type, startTime.Unix()) _, config := service.FindXTHisRecordByOrgId(orgId) appId := this.GetMobileAdminUserInfo().App.Id doctorList, _ := service.GetAllAdminUsers(orgId, appId) if err == nil { this.ServeSuccessJSON(map[string]interface{}{ "list": list, "config": config, "doctorList": doctorList, }) return } else { this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeSystemError) return } } func (this *DialysisAPIController) SaveMobileInformation() { patient_id, _ := this.GetInt64("patient_id") record_date, _ := this.GetInt64("record_date") startTime := this.GetString("start_time") module, _ := this.GetInt64("module") remark := this.GetString("remark") timeLayout := "2006-01-02 15:04" loc, _ := time.LoadLocation("Local") if len(startTime) == 0 { utils.ErrorLog("len(start_time) == 0") this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } theTime, err := time.ParseInLocation(timeLayout, startTime, loc) if err != nil { utils.ErrorLog(err.Error()) this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } StartTime := theTime.Unix() fmt.Println("startime-------------", StartTime) creater := this.GetMobileAdminUserInfo().AdminUser.Id user_org_id := this.GetMobileAdminUserInfo().Org.Id information := models.XtDialysisInformation{ Module: module, PatientId: patient_id, RecordDate: record_date, ApplicationDate: StartTime, Creater: creater, ApplicationStatus: 2, Checker: 0, CheckTime: 0, Remark: remark, UserOrgId: user_org_id, Ctime: time.Now().Unix(), Status: 1, Mtime: 0, } infor, _ := service.GetDialysisInformationByRecordDateOne(patient_id, record_date, user_org_id) if infor.ID == 0 { service.SaveDialysisInformation(information) } if infor.ID > 0 { service.UpdateInformationByRecordDate(patient_id, record_date, user_org_id, StartTime, remark) } this.ServeSuccessJSON(map[string]interface{}{ "information": information, }) return } func (this *DialysisAPIController) GetMobileInformation() { limit, _ := this.GetInt64("limit") page, _ := this.GetInt64("page") orgid := this.GetMobileAdminUserInfo().Org.Id information, total, _ := service.GetMobileInformation(limit, page, 2, orgid) appid := this.GetMobileAdminUserInfo().App.Id doclist, _ := service.GetAllDoctorSix(orgid, appid) patients, _ := service.GetAllpatientThirty(orgid) this.ServeSuccessJSON(map[string]interface{}{ "information": information, "total": total, "doclist": doclist, "patients": patients, }) return } func (this *DialysisAPIController) GetMobileInformationOne() { limit, _ := this.GetInt64("limit") page, _ := this.GetInt64("page") orgid := this.GetMobileAdminUserInfo().Org.Id information, total, _ := service.GetMobileInformationOne(limit, page, orgid) appid := this.GetMobileAdminUserInfo().App.Id doclist, _ := service.GetAllDoctorSix(orgid, appid) patients, _ := service.GetAllpatientThirty(orgid) this.ServeSuccessJSON(map[string]interface{}{ "information": information, "total": total, "doclist": doclist, "patients": patients, }) return } func (this *DialysisAPIController) CheckMobileInformation() { id, _ := this.GetInt64("id") application_status, _ := this.GetInt64("application_status") checker := this.GetMobileAdminUserInfo().AdminUser.Id checktime := time.Now().Unix() err := service.CheckMobileInformation(id, application_status, checker, checktime) if err == nil { this.ServeSuccessJSON(map[string]interface{}{ "msg": "ok", }) return } } func (c *DialysisAPIController) GetControlMonitorList() { partition, _ := c.GetInt64("partition") monitorDate := c.GetString("date") patient_id, _ := c.GetInt64("patient_id") pat_type, _ := c.GetInt64("pat_type") timeLayout := "2006-01-02" loc, _ := time.LoadLocation("Local") var theStartTime int64 if len(monitorDate) > 0 { theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", monitorDate+" 00:00:00", loc) if err != nil { theStartTime = 0 } theStartTime = theTime.Unix() } adminInfo := c.GetMobileAdminUserInfo() orgID := adminInfo.Org.Id monitor, err := service.GetNewMonitorRecord(orgID, theStartTime, partition, patient_id) if err != nil { c.ErrorLog("获取排班信息失败:%v", err) c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException) } else { if len(monitor) > 0 { //获取所有床位 numberList, _ := service.GetAllDeviceNumberByList(orgID) //获取所有分区 zoneList, _ := service.GetAllZoneByList(orgID) //获取透析处方 prescriptions, _ := service.GetAllPrescriptionByListSix(orgID, theStartTime) //获取透前评估 assessmentBefores, _ := service.GetAllAssessmentBeforesByListOne(orgID, theStartTime) //获取上机 dialysisOrders, _ := service.GetAllDialysisOrdersByListNight(orgID, theStartTime, pat_type) //获取透后 AssessmentAfterDislysis, _ := service.GetAllAssessmentAfterDislysisByListSix(orgID, theStartTime) //获取透后监测 monitorlist, _ := service.GetNewAllMonitorList(orgID, theStartTime, pat_type) //获取所有的患者 patients, _ := service.GetAllPatientListByListOne(orgID) //获取所有透析模式 treatments, _ := service.GetAllTreatModeByList(orgID) //获取所有医嘱 adviceList, _ := service.GetAdviceList(orgID, theStartTime, pat_type) //获取双人核对 checkList, _ := service.GetDobuleCheck(orgID, theStartTime) //治疗小结 summaryList, _ := service.GetTreatmentSummaryForList(orgID, theStartTime) //待消毒 informationList, _ := service.GetDialysisInformationList(orgID, theStartTime) for key, item := range monitor { // 获取床位信息 for _, it := range numberList { if item.BedId == it.ID { monitor[key].DeviceNumber = it break } } //获取分区信息 for _, it := range zoneList { if item.PartitionId == it.ID { monitor[key].DeviceZone = it } } for _, prescription := range prescriptions { if item.PatientId == prescription.PatientId { monitor[key].Prescription = prescription break } } for _, it := range checkList { if item.PatientId == it.PatientId { monitor[key].DoubleCheck = it break } } for _, it := range summaryList { if item.PatientId == it.PatientId { monitor[key].TreatmentSummaryForList = it break } } // 透前评估 for _, assessmentBefore := range assessmentBefores { if item.PatientId == assessmentBefore.PatientId { monitor[key].AssessmentBeforeDislysis = assessmentBefore break } } // 透析上下机 for _, dialysisOrder := range dialysisOrders { if item.PatientId == dialysisOrder.PatientId { monitor[key].DialysisOrder = dialysisOrder break } } // 治疗小节 for _, afterDislysis := range AssessmentAfterDislysis { if item.PatientId == afterDislysis.PatientId { monitor[key].AssessmentAfterDislysis = afterDislysis break } } for _, it := range monitorlist { if item.PatientId == it.PatientId { monitor[key].MonitoringRecord = append(monitor[key].MonitoringRecord, it) } } for _, it := range adviceList { if item.PatientId == it.PatientId { monitor[key].AdviceList = append(monitor[key].AdviceList, it) } } for _, patient := range patients { if item.PatientId == patient.ID { monitor[key].MonitorPatients = patient break } } for _, treatment := range treatments { if item.ModeId == treatment.ID { monitor[key].TreatmentMode = treatment break } } for _, infor := range informationList { if item.PatientId == infor.PatientId { monitor[key].NewDeviceInformation = infor break } } } } } patients, err := service.GetAllpatientFourty(orgID) var mds []*models.NewMonitorDialysisScheduleList if pat_type == 0 { for _, item := range monitor { mds = append(mds, item) } } //待医嘱核对 if pat_type == 1 { for _, item := range monitor { if len(item.AdviceList) > 0 { mds = append(mds, item) } } } //待开小结 if pat_type == 2 { for _, item := range monitor { if item.TreatmentSummaryForList == nil { mds = append(mds, item) } } } //待下机 if pat_type == 3 { for _, item := range monitor { if item.DialysisOrder != nil { if item.DialysisOrder.ID > 0 { mds = append(mds, item) } } } } //待消毒 if pat_type == 4 { for _, item := range monitor { if item.NewDeviceInformation == nil { mds = append(mds, item) } } } //待双人核对 if pat_type == 5 { for _, item := range monitor { if item.DoubleCheck == nil { mds = append(mds, item) } } } //医嘱未执行 if pat_type == 6 { for _, item := range monitor { if len(item.AdviceList) > 0 { mds = append(mds, item) } } } //患者未签名 if pat_type == 7 { for _, item := range monitor { if item.DialysisOrder != nil { if item.DialysisOrder.ID > 0 { mds = append(mds, item) } } } } //目标超滤于实际超滤不同 if pat_type == 8 { for _, item := range monitor { if item.Prescription != nil && item.AssessmentAfterDislysis != nil { if item.Prescription.TargetUltrafiltration != item.AssessmentAfterDislysis.ActualUltrafiltration { mds = append(mds, item) } } } } //血压少于5次 if pat_type == 9 { for _, item := range monitor { if len(item.MonitoringRecord) < 5 { mds = append(mds, item) } } } if pat_type == 10 { for _, item := range monitor { if len(item.MonitoringRecord) == 0 { mds = append(mds, item) } } } if pat_type == 11 { for _, item := range monitor { if len(item.MonitoringRecord) > 0 { mds = append(mds, item) } } } if pat_type == 12 { for _, item := range monitor { if len(item.MonitoringRecord) > 0 { mds = append(mds, item) } } } if err == nil { c.ServeSuccessJSON(map[string]interface{}{ "monitor": mds, "patients": patients, }) } else { c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeSystemError) } } func (c *DialysisAPIController) GetAdviceListNoExecution() { admin_user_id, _ := c.GetInt64("admin_user_id") timeStr := time.Now().Format("2006-01-02") timeLayout := "2006-01-02 15:04:05" timeStringToTime, _ := utils.ParseTimeStringToTime(timeLayout, timeStr+" 00:00:00") timenow := timeStringToTime.Unix() orgId := c.GetMobileAdminUserInfo().Org.Id //查询当前护士的患者 orderList, _ := service.GetDialysisOrderNoExecution(admin_user_id, orgId, timenow) var patientIds []int64 for _, item := range orderList { patientIds = append(patientIds, item.PatientId) } adviceList, _ := service.GetAdviceListNoExecution(timenow, orgId, patientIds) hisAdviceList, _ := service.GetHisAdviceListNoExecution(timenow, orgId, patientIds) projectList, _ := service.GetProjectListNoExecution(timenow, orgId, patientIds) //药品管理信息 _, drugStockConfig := service.FindHisConfig(orgId) _, projectConfig := service.FindXTHisProjectByOrgId(orgId) patientList, _ := service.GetPatientNoExecutionList(orgId, patientIds) c.ServeSuccessJSON(map[string]interface{}{ "adviceList": adviceList, "hisAdviceList": hisAdviceList, "projectList": projectList, "drugStockConfig": drugStockConfig, "patientList": patientList, "projectConfig": projectConfig, }) } func (c *DialysisAPIController) GetLastAcceptRecrods() { patient_id, _ := c.GetInt64("patient_id") recrods, _ := service.GetLastAcceptRecrods(patient_id) c.ServeSuccessJSON(map[string]interface{}{ "recrods": recrods, }) } func (c *DialysisAPIController) ExMobileChangeSch() { id_one, _ := c.GetInt64("id_one") id_two, _ := c.GetInt64("id_two") sch, _ := service.GetSchedule(c.GetMobileAdminUserInfo().Org.Id, id_one) sch_two, _ := service.GetSchedule(c.GetMobileAdminUserInfo().Org.Id, id_two) //order2, _ := service.GetDialysisOrder(sch_two.ScheduleDate, sch_two.PatientId, sch_two.UserOrgId) //if order2.ID > 0 { // c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodePatientDialysisOrderTwo) // return //} //替换者和被替换的排班日期不是同一天,则进行一个患者一天不能有多个排班提醒 if sch.ScheduleDate != sch_two.ScheduleDate && sch.PatientId != sch_two.PatientId { count, _ := service.GetScheduleCountByDate(c.GetMobileAdminUserInfo().Org.Id, sch_two.ScheduleDate, sch.PatientId) if count > 0 { c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodePatientScheduleRepeat) return } count1, _ := service.GetScheduleCountByDate(c.GetMobileAdminUserInfo().Org.Id, sch.ScheduleDate, sch_two.PatientId) if count1 > 0 { c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodePatientScheduleRepeat) return } } err := service.UpdateScheduleThree(sch, sch_two) order, _ := service.GetOneDialysisOrderOne(sch.ScheduleDate, sch.PatientId, sch.UserOrgId) if order.ID > 0 { //查询该患者的排班机位 pSchedule, _ := service.GetPscheduleDate(sch.ScheduleDate, sch.PatientId, sch.UserOrgId) service.UpdateDialysiOrderByPatientId(id_two, pSchedule.ScheduleType, pSchedule.PartitionId, pSchedule.BedId) redis := service.RedisClient() key := strconv.FormatInt(sch_two.UserOrgId, 10) + ":" + strconv.FormatInt(sch_two.PatientId, 10) + ":" + strconv.FormatInt(sch_two.ScheduleDate, 10) + ":dialysis_order" redis.Set(key, "", time.Second) keyOne := strconv.FormatInt(sch_two.UserOrgId, 10) + ":" + strconv.FormatInt(sch_two.ScheduleDate, 10) + ":dialysis_orders_list_all" //清空key 值 redis.Set(keyOne, "", time.Second) //c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodePatientDialysisOrderOne) //return } if err == nil { //去除当天患者排班中重复数据,保留最后一条数据 service.UpdateRepeatSchStatus(sch.UserOrgId, sch.ScheduleDate) service.UpdateRepeatSchStatus(sch_two.UserOrgId, sch_two.ScheduleDate) c.ServeSuccessJSON(map[string]interface{}{ "msg": "交换成功", }) } else { c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeSystemError) return } } func (c *DialysisAPIController) MobileCoverSch() { id_one, _ := c.GetInt64("id_one") id_two, _ := c.GetInt64("id_two") sch, _ := service.GetScheduleTen(c.GetMobileAdminUserInfo().Org.Id, id_one) //针对凤凰医院 if c.GetMobileAdminUserInfo().Org.Id == 10579 || c.GetMobileAdminUserInfo().Org.Id == 10344 || c.GetMobileAdminUserInfo().Org.Id == 10206 { advice, _ := service.GetDoctorAdviceListTwenty(sch.PatientId, sch.ScheduleDate, c.GetMobileAdminUserInfo().Org.Id) if len(advice) > 0 { service.UpdateAdviceObj(sch.PatientId, sch.ScheduleDate, c.GetMobileAdminUserInfo().Org.Id) } } if c.GetMobileAdminUserInfo().Org.Id == 10206 || c.GetMobileAdminUserInfo().Org.Id == 10344 { hisAdvice, _ := service.GetHisDoctorAdviceListTwenty(sch.PatientId, sch.ScheduleDate, c.GetMobileAdminUserInfo().Org.Id) project, _ := service.GetHisPrescriptionProjectList(sch.PatientId, sch.ScheduleDate, c.GetMobileAdminUserInfo().Org.Id) if len(hisAdvice) > 0 { service.UpdateHisAdviceObj(sch.PatientId, sch.ScheduleDate, c.GetMobileAdminUserInfo().Org.Id) } if len(project) > 0 { service.UpdateProjectObj(sch.PatientId, sch.ScheduleDate, c.GetMobileAdminUserInfo().Org.Id) } } sch_two, _ := service.GetScheduleTen(c.GetMobileAdminUserInfo().Org.Id, id_two) order, _ := service.GetOneDialysisOrderOne(sch.ScheduleDate, sch.PatientId, sch.UserOrgId) if order.ID > 0 { service.UpdateDialysiOrderByPatientId(id_two, sch_two.ScheduleType, sch_two.PartitionId, sch_two.BedId) redis := service.RedisClient() key := strconv.FormatInt(sch_two.UserOrgId, 10) + ":" + strconv.FormatInt(sch_two.PatientId, 10) + ":" + strconv.FormatInt(sch_two.ScheduleDate, 10) + ":dialysis_order" redis.Set(key, "", time.Second) keyOne := strconv.FormatInt(sch_two.UserOrgId, 10) + ":" + strconv.FormatInt(sch_two.ScheduleDate, 10) + ":dialysis_orders_list_all" //清空key 值 redis.Set(keyOne, "", time.Second) //c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodePatientDialysisOrderTwo) //return } //替换者和被替换的排班日期不是同一天,则进行一个患者一天不能有多个排班提醒 if sch.ScheduleDate != sch_two.ScheduleDate && sch.PatientId != sch_two.PatientId { count, _ := service.GetScheduleCountByDate(c.GetMobileAdminUserInfo().Org.Id, sch_two.ScheduleDate, sch.PatientId) if count > 0 { c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodePatientScheduleRepeat) return } } var new_sch models.Schedule new_sch = sch new_sch.BedId = sch_two.BedId new_sch.ScheduleDate = sch_two.ScheduleDate new_sch.ScheduleWeek = sch_two.ScheduleWeek new_sch.PartitionId = sch_two.PartitionId new_sch.ScheduleType = sch_two.ScheduleType new_sch.ID = 0 //删除原来的排班 err := service.SaveSchTwo(sch, sch_two) //生成新的排班 if err == nil { err2 := service.SaveSch(&new_sch) if err2 == nil { //去除当天患者排班中重复数据,保留最后一条数据 service.UpdateRepeatSchStatus(sch.UserOrgId, sch.ScheduleDate) service.UpdateRepeatSchStatus(sch_two.UserOrgId, sch_two.ScheduleDate) service.UpdateRepeatSchStatus(new_sch.UserOrgId, new_sch.ScheduleDate) c.ServeSuccessJSON(map[string]interface{}{ "msg": "覆盖成功", "new_sch": new_sch, }) } else { c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeSystemError) return } } else { c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeSystemError) return } } func (c *DialysisAPIController) BatchCheckAdvice() { patient_id, _ := c.GetInt64("patient_id") advice_date, _ := c.GetInt64("advice_date") org_id := c.GetMobileAdminUserInfo().Org.Id creater := c.GetMobileAdminUserInfo().AdminUser.Id //查询是his系统还是血透系统 _, configs := service.FindXTHisRecordByOrgId(org_id) //his客户 if configs.IsOpen == 1 { adviceList, _ := service.GetAllHisAdviceList(patient_id, advice_date, org_id) for _, item := range adviceList { service.BatchCheckHisAdvice(item.ID, creater) } projectList, _ := service.GetMobileProjectList(patient_id, advice_date, org_id) for _, item := range projectList { service.BatchCheckProject(item.ID, creater) } c.ServeSuccessJSON(map[string]interface{}{ "adviceList": adviceList, "projectList": projectList, }) } if configs.IsOpen != 1 { adviceList, _ := service.GetAllAdviceList(patient_id, advice_date, org_id) for _, item := range adviceList { service.BatchAdviceList(item.ID, creater) } projectList, _ := service.GetMobileProjectList(patient_id, advice_date, org_id) for _, item := range projectList { service.BatchCheckProject(item.ID, creater) } c.ServeSuccessJSON(map[string]interface{}{ "adviceList": adviceList, "projectList": projectList, }) } return } func (c *DialysisAPIController) GetAllMobileDrugList() { org_id := c.GetMobileAdminUserInfo().Org.Id drugList, _ := service.GetAllDrugList(org_id) c.ServeSuccessJSON(map[string]interface{}{ "drugList": drugList, }) } func (c *DialysisAPIController) SaveLongMobileAdvice() { org_id := c.GetMobileAdminUserInfo().Org.Id dataBody := make(map[string]interface{}, 0) err := json.Unmarshal(c.Ctx.Input.RequestBody, &dataBody) if err != nil { utils.ErrorLog(err.Error()) c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } timeLayout := "2006-01-02" loc, _ := time.LoadLocation("Local") if dataBody["advice_type"] == nil || reflect.TypeOf(dataBody["advice_type"]).String() != "float64" { utils.ErrorLog("advice_type") c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } adviceType := int64(dataBody["advice_type"].(float64)) if dataBody["start_time"] == nil || reflect.TypeOf(dataBody["start_time"]).String() != "string" { utils.ErrorLog("start_time") c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } startTime2, _ := dataBody["start_time"].(string) time_arr := strings.Split(startTime2, " ") if len(time_arr) > 0 { startTime2 = time_arr[0] } if dataBody["advice_date"] == nil || reflect.TypeOf(dataBody["advice_date"]).String() != "string" { utils.ErrorLog("advice_date") c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } advice_date, _ := dataBody["advice_date"].(string) var advicedateunix int64 if len(advice_date) > 0 { theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", advice_date+" 00:00:00", loc) if err != nil { fmt.Println(err) c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } advicedateunix = theTime.Unix() } adviceDate := startTime2 if len(adviceDate) == 0 { utils.ErrorLog("len(adviceDate) == 0") c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } theTime, err := time.ParseInLocation(timeLayout, adviceDate, loc) if err != nil { utils.ErrorLog(err.Error()) c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } AdviceDate := advicedateunix RecordDate := advicedateunix if dataBody["start_time"] == nil || reflect.TypeOf(dataBody["start_time"]).String() != "string" { utils.ErrorLog("start_time") c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } startTime, _ := dataBody["start_time"].(string) if len(startTime) == 0 { utils.ErrorLog("len(start_time) == 0") c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } theTime, err = time.ParseInLocation(timeLayout+" 15:04:05", startTime, loc) if err != nil { utils.ErrorLog(err.Error()) c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } StartTime := theTime.Unix() advice_name, _ := dataBody["advice_name"].(string) advice_desc, _ := dataBody["advice_desc"].(string) delivery_way, _ := dataBody["delivery_way"].(string) execution_frequency, _ := dataBody["execution_frequency"].(string) frequency_type := int64(dataBody["frequency_type"].(float64)) frequency_week, _ := dataBody["frequency_week"].(string) prescribing_number := dataBody["prescribing_number"].(float64) prescribing_number_unit := dataBody["prescribing_number_unit"].(string) remark := dataBody["remark"].(string) single_dose := dataBody["single_dose"].(float64) single_dose_unit := dataBody["single_dose_unit"].(string) patient_id := int64(dataBody["patient_id"].(float64)) day_count := int64(dataBody["day_count"].(float64)) groupNo := int64(dataBody["group_no"].(float64)) advice_doctor := c.GetMobileAdminUserInfo().AdminUser.Id adviceLast, _ := service.GetLastLongAdviceList(org_id) if groupNo <= 0 { group := service.GetMaxAdviceGroupID(org_id) groupNo = group + 1 } var template_id = "" adviceLastId := strconv.FormatInt(adviceLast.ID, 10) template_id = "M" + adviceLastId advice := models.DoctorAdvice{ UserOrgId: org_id, PatientId: patient_id, AdviceType: adviceType, AdviceDate: AdviceDate, StartTime: StartTime, AdviceName: advice_name, AdviceDesc: advice_desc, ReminderDate: 0, SingleDose: single_dose, SingleDoseUnit: single_dose_unit, DrugSpec: 0, DrugSpecUnit: "", PrescribingNumber: prescribing_number, PrescribingNumberUnit: prescribing_number_unit, DeliveryWay: delivery_way, ExecutionFrequency: execution_frequency, AdviceDoctor: advice_doctor, Status: 1, CreatedTime: time.Now().Unix(), UpdatedTime: 0, AdviceAffirm: "", Remark: remark, StopTime: 0, StopReason: "", StopDoctor: 0, StopState: 0, ParentId: 0, ExecutionTime: 0, ExecutionStaff: 0, ExecutionState: 0, Checker: 0, RecordDate: RecordDate, DialysisOrderId: 0, CheckTime: 0, CheckState: 0, AdviceId: 0, RemindType: 0, FrequencyType: frequency_type, DayCount: day_count, WeekDay: frequency_week, ChildDoctorAdvice: nil, TemplateId: template_id, Modifier: 0, IsCheck: 0, Way: 0, DrugId: 0, DrugNameId: 0, IsMedicine: 0, PushStartTime: 0, IsSettle: 0, IsPrescription: 0, GroupNo: groupNo, } service.CreateMobileAdivce(advice) c.ServeSuccessJSON(map[string]interface{}{ "msg": "保存成功!", }) } func (c *DialysisAPIController) GetLongDoctorAdviceByPatient() { patient_id, _ := c.GetInt64("patient_id") org_id := c.GetMobileAdminUserInfo().Org.Id app_id := c.GetMobileAdminUserInfo().App.Id adviceList, _ := service.GetLongDoctorAdviceByPatient(patient_id, org_id) adminRoles, _ := service.GetAllDoctorTwo(org_id, app_id) c.ServeSuccessJSON(map[string]interface{}{ "adviceList": adviceList, "adminRoles": adminRoles, }) } func (c *DialysisAPIController) SaveSelfChildDrugLongAdivce() { org_id := c.GetMobileAdminUserInfo().Org.Id dataBody := make(map[string]interface{}, 0) err := json.Unmarshal(c.Ctx.Input.RequestBody, &dataBody) if err != nil { utils.ErrorLog(err.Error()) c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } timeLayout := "2006-01-02" loc, _ := time.LoadLocation("Local") if dataBody["start_time"] == nil || reflect.TypeOf(dataBody["start_time"]).String() != "string" { utils.ErrorLog("start_time") c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } startTime2, _ := dataBody["start_time"].(string) time_arr := strings.Split(startTime2, " ") if len(time_arr) > 0 { startTime2 = time_arr[0] } if dataBody["advice_date"] == nil || reflect.TypeOf(dataBody["advice_date"]).String() != "string" { utils.ErrorLog("advice_date") c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } advice_date, _ := dataBody["advice_date"].(string) var advicedateunix int64 if len(advice_date) > 0 { theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", advice_date+" 00:00:00", loc) if err != nil { fmt.Println(err) c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } advicedateunix = theTime.Unix() } adviceDate := startTime2 if len(adviceDate) == 0 { utils.ErrorLog("len(adviceDate) == 0") c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } theTime, err := time.ParseInLocation(timeLayout, adviceDate, loc) if err != nil { utils.ErrorLog(err.Error()) c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } AdviceDate := advicedateunix RecordDate := advicedateunix if dataBody["start_time"] == nil || reflect.TypeOf(dataBody["start_time"]).String() != "string" { utils.ErrorLog("start_time") c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } startTime, _ := dataBody["start_time"].(string) if len(startTime) == 0 { utils.ErrorLog("len(start_time) == 0") c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } theTime, err = time.ParseInLocation(timeLayout+" 15:04:05", startTime, loc) if err != nil { utils.ErrorLog(err.Error()) c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } StartTime := theTime.Unix() advice_name, _ := dataBody["advice_name"].(string) advice_desc, _ := dataBody["advice_desc"].(string) delivery_way, _ := dataBody["delivery_way"].(string) execution_frequency, _ := dataBody["execution_frequency"].(string) prescribing_number := dataBody["prescribing_number"].(float64) prescribing_number_unit := dataBody["prescribing_number_unit"].(string) remark := dataBody["remark"].(string) single_dose := dataBody["single_dose"].(float64) single_dose_unit := dataBody["single_dose_unit"].(string) patient_id := int64(dataBody["patient_id"].(float64)) groupNo := int64(dataBody["group_no"].(float64)) parent_id := int64(dataBody["parent_id"].(float64)) advice_doctor := c.GetMobileAdminUserInfo().AdminUser.Id advice := models.XtDoctorAdviceOne{ UserOrgId: org_id, PatientId: patient_id, AdviceType: 1, AdviceDate: AdviceDate, StartTime: StartTime, AdviceName: advice_name, AdviceDesc: advice_desc, ReminderDate: 0, SingleDose: single_dose, SingleDoseUnit: single_dose_unit, PrescribingNumber: prescribing_number, PrescribingNumberUnit: prescribing_number_unit, DeliveryWay: delivery_way, ExecutionFrequency: execution_frequency, AdviceDoctor: advice_doctor, Status: 1, CreatedTime: time.Now().Unix(), UpdatedTime: time.Now().Unix(), AdviceAffirm: "", Remark: remark, StopTime: 0, StopReason: "", StopDoctor: 0, StopState: 0, ParentId: parent_id, ExecutionTime: 0, ExecutionStaff: 0, ExecutionState: 0, Checker: 0, RecordDate: RecordDate, DialysisOrderId: 0, CheckTime: 0, CheckState: 0, DrugSpec: 0, DrugSpecUnit: "", Groupno: groupNo, RemindType: 0, FrequencyType: 0, DayCount: 0, WeekDay: "", TemplateId: "", Modifier: 0, } service.CreateMobileAdivceOne(advice) c.ServeSuccessJSON(map[string]interface{}{ "msg": "保存成功!", }) } func (c *DialysisAPIController) DeleteSelfAdviceSubAdvice() { id, _ := c.GetInt64("id") service.DeleteSelfAdviceSubAdvice(id) c.ServeSuccessJSON(map[string]interface{}{ "msg": "保存成功!", }) } func (c *DialysisAPIController) GetEditAdviceAction() { id, _ := c.GetInt64("id") org_id := c.GetMobileAdminUserInfo().Org.Id advice, _ := service.GetEditAdviceActionList(id, org_id) drugList, _ := service.GetAllDrugList(org_id) c.ServeSuccessJSON(map[string]interface{}{ "advice": advice, "drugList": drugList, }) } func (c *DialysisAPIController) UpdateLongMobileAdvice() { dataBody := make(map[string]interface{}, 0) err := json.Unmarshal(c.Ctx.Input.RequestBody, &dataBody) if err != nil { utils.ErrorLog(err.Error()) c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } timeLayout := "2006-01-02" loc, _ := time.LoadLocation("Local") if dataBody["start_time"] == nil || reflect.TypeOf(dataBody["start_time"]).String() != "string" { utils.ErrorLog("start_time") c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } startTime2, _ := dataBody["start_time"].(string) time_arr := strings.Split(startTime2, " ") if len(time_arr) > 0 { startTime2 = time_arr[0] } if dataBody["advice_date"] == nil || reflect.TypeOf(dataBody["advice_date"]).String() != "string" { utils.ErrorLog("advice_date") c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } advice_date, _ := dataBody["advice_date"].(string) var advicedateunix int64 if len(advice_date) > 0 { theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", advice_date+" 00:00:00", loc) if err != nil { fmt.Println(err) c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } advicedateunix = theTime.Unix() } adviceDate := startTime2 if len(adviceDate) == 0 { utils.ErrorLog("len(adviceDate) == 0") c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } theTime, err := time.ParseInLocation(timeLayout, adviceDate, loc) if err != nil { utils.ErrorLog(err.Error()) c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } AdviceDate := advicedateunix RecordDate := advicedateunix if dataBody["start_time"] == nil || reflect.TypeOf(dataBody["start_time"]).String() != "string" { utils.ErrorLog("start_time") c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } startTime, _ := dataBody["start_time"].(string) if len(startTime) == 0 { utils.ErrorLog("len(start_time) == 0") c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } theTime, err = time.ParseInLocation(timeLayout+" 15:04:05", startTime, loc) if err != nil { utils.ErrorLog(err.Error()) c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } StartTime := theTime.Unix() advice_name, _ := dataBody["advice_name"].(string) advice_desc, _ := dataBody["advice_desc"].(string) delivery_way, _ := dataBody["delivery_way"].(string) execution_frequency, _ := dataBody["execution_frequency"].(string) prescribing_number := dataBody["prescribing_number"].(float64) prescribing_number_unit := dataBody["prescribing_number_unit"].(string) remark := dataBody["remark"].(string) single_dose := dataBody["single_dose"].(float64) single_dose_unit := dataBody["single_dose_unit"].(string) id := int64(dataBody["id"].(float64)) frequency_type := int64(dataBody["frequency_type"].(float64)) frequency_week, _ := dataBody["frequency_week"].(string) day_count := int64(dataBody["day_count"].(float64)) advice_doctor := c.GetMobileAdminUserInfo().AdminUser.Id advice := models.XtDoctorAdviceOne{ AdviceDate: AdviceDate, StartTime: StartTime, AdviceName: advice_name, AdviceDesc: advice_desc, SingleDose: single_dose, SingleDoseUnit: single_dose_unit, PrescribingNumber: prescribing_number, PrescribingNumberUnit: prescribing_number_unit, DeliveryWay: delivery_way, ExecutionFrequency: execution_frequency, AdviceDoctor: advice_doctor, Remark: remark, RecordDate: RecordDate, FrequencyType: frequency_type, DayCount: day_count, WeekDay: frequency_week, } service.UpdateMobileDoctorAdviceByIdOne(id, advice) c.ServeSuccessJSON(map[string]interface{}{ "advice": advice, }) } func (c *DialysisAPIController) UpdateEditDrugOrder() { dataBody := make(map[string]interface{}, 0) err := json.Unmarshal(c.Ctx.Input.RequestBody, &dataBody) if err != nil { utils.ErrorLog(err.Error()) c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } timeLayout := "2006-01-02" loc, _ := time.LoadLocation("Local") if dataBody["start_time"] == nil || reflect.TypeOf(dataBody["start_time"]).String() != "string" { utils.ErrorLog("start_time") c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } startTime2, _ := dataBody["start_time"].(string) time_arr := strings.Split(startTime2, " ") if len(time_arr) > 0 { startTime2 = time_arr[0] } if dataBody["advice_date"] == nil || reflect.TypeOf(dataBody["advice_date"]).String() != "string" { utils.ErrorLog("advice_date") c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } advice_date, _ := dataBody["advice_date"].(string) var advicedateunix int64 if len(advice_date) > 0 { theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", advice_date+" 00:00:00", loc) if err != nil { fmt.Println(err) c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } advicedateunix = theTime.Unix() } adviceDate := startTime2 if len(adviceDate) == 0 { utils.ErrorLog("len(adviceDate) == 0") c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } theTime, err := time.ParseInLocation(timeLayout, adviceDate, loc) if err != nil { utils.ErrorLog(err.Error()) c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } AdviceDate := advicedateunix RecordDate := advicedateunix if dataBody["start_time"] == nil || reflect.TypeOf(dataBody["start_time"]).String() != "string" { utils.ErrorLog("start_time") c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } startTime, _ := dataBody["start_time"].(string) if len(startTime) == 0 { utils.ErrorLog("len(start_time) == 0") c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } theTime, err = time.ParseInLocation(timeLayout+" 15:04:05", startTime, loc) if err != nil { utils.ErrorLog(err.Error()) c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } StartTime := theTime.Unix() advice_name, _ := dataBody["advice_name"].(string) advice_desc, _ := dataBody["advice_desc"].(string) delivery_way, _ := dataBody["delivery_way"].(string) execution_frequency, _ := dataBody["execution_frequency"].(string) prescribing_number := dataBody["prescribing_number"].(float64) prescribing_number_unit := dataBody["prescribing_number_unit"].(string) remark := dataBody["remark"].(string) single_dose := dataBody["single_dose"].(float64) single_dose_unit := dataBody["single_dose_unit"].(string) id := int64(dataBody["id"].(float64)) advice_doctor := c.GetMobileAdminUserInfo().AdminUser.Id advice := models.XtDoctorAdviceOne{ AdviceDate: AdviceDate, StartTime: StartTime, AdviceName: advice_name, AdviceDesc: advice_desc, SingleDose: single_dose, SingleDoseUnit: single_dose_unit, PrescribingNumber: prescribing_number, PrescribingNumberUnit: prescribing_number_unit, DeliveryWay: delivery_way, ExecutionFrequency: execution_frequency, AdviceDoctor: advice_doctor, Remark: remark, RecordDate: RecordDate, } service.UpdateMobileDoctorAdviceById(id, advice) c.ServeSuccessJSON(map[string]interface{}{ "advice": advice, }) } func (c *DialysisAPIController) SaveLongAdviceTemplate() { dataBody := make(map[string]interface{}, 0) timeLayout := "2006-01-02" loc, _ := time.LoadLocation("Local") err := json.Unmarshal(c.Ctx.Input.RequestBody, &dataBody) if err != nil { utils.ErrorLog(err.Error()) c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } if dataBody["start_time"] == nil || reflect.TypeOf(dataBody["start_time"]).String() != "string" { utils.ErrorLog("start_time") c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } startTime2, _ := dataBody["start_time"].(string) time_arr := strings.Split(startTime2, " ") if len(time_arr) > 0 { startTime2 = time_arr[0] } if dataBody["advice_date"] == nil || reflect.TypeOf(dataBody["advice_date"]).String() != "string" { utils.ErrorLog("advice_date") c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } advice_date, _ := dataBody["advice_date"].(string) var advicedateunix int64 if len(advice_date) > 0 { theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", advice_date+" 00:00:00", loc) if err != nil { fmt.Println(err) c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } advicedateunix = theTime.Unix() } adviceDate := startTime2 if len(adviceDate) == 0 { utils.ErrorLog("len(adviceDate) == 0") c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } theTime, err := time.ParseInLocation(timeLayout, adviceDate, loc) if err != nil { utils.ErrorLog(err.Error()) c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } RecordDate := advicedateunix if dataBody["start_time"] == nil || reflect.TypeOf(dataBody["start_time"]).String() != "string" { utils.ErrorLog("start_time") c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } startTime, _ := dataBody["start_time"].(string) if len(startTime) == 0 { utils.ErrorLog("len(start_time) == 0") c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } theTime, err = time.ParseInLocation(timeLayout+" 15:04:05", startTime, loc) if err != nil { utils.ErrorLog(err.Error()) c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } StartTime := theTime.Unix() patient_id := int64(dataBody["patient_id"].(float64)) group_no := int64(dataBody["group_no"].(float64)) org_id := c.GetMobileAdminUserInfo().Org.Id advice_doctor := c.GetMobileAdminUserInfo().AdminUser.Id if dataBody["advices"] == nil || reflect.TypeOf(dataBody["advices"]).String() != "[]interface {}" { utils.ErrorLog("advices") c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } adviceNames := dataBody["advices"].([]interface{}) var advices []*models.GroupAdvice for _, adviceNameMap := range adviceNames { var advice models.GroupAdvice adviceNameM := adviceNameMap.(map[string]interface{}) if adviceNameM["advice_name"] == nil || reflect.TypeOf(adviceNameM["advice_name"]).String() != "string" { utils.ErrorLog("advice_name") c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } adviceName, _ := adviceNameM["advice_name"].(string) if len(adviceName) == 0 { utils.ErrorLog("len(advice_name) == 0") c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong) return } advice.AdviceName = adviceName if adviceNameM["drug_spec"] != nil && reflect.TypeOf(adviceNameM["drug_spec"]).String() == "string" { drugSpec, _ := strconv.ParseFloat(adviceNameM["drug_spec"].(string), 64) advice.DrugSpec = drugSpec } if adviceNameM["advice_desc"] != nil && reflect.TypeOf(adviceNameM["advice_desc"]).String() == "string" { adviceDesc, _ := adviceNameM["advice_desc"].(string) advice.AdviceDesc = adviceDesc } if adviceNameM["drug_spec_unit"] != nil && reflect.TypeOf(adviceNameM["drug_spec_unit"]).String() == "string" { drugSpecUnit, _ := adviceNameM["drug_spec_unit"].(string) advice.DrugSpecUnit = drugSpecUnit } if adviceNameM["single_dose"] != nil && reflect.TypeOf(adviceNameM["single_dose"]).String() == "string" { singleDose, _ := strconv.ParseFloat(adviceNameM["single_dose"].(string), 64) advice.SingleDose = singleDose } if adviceNameM["single_dose"] != nil && reflect.TypeOf(adviceNameM["single_dose"]).String() == "float64" { singleDose := adviceNameM["single_dose"].(float64) advice.SingleDose = singleDose } if adviceNameM["single_dose_unit"] != nil && reflect.TypeOf(adviceNameM["single_dose_unit"]).String() == "string" { singleDoseUnit, _ := adviceNameM["single_dose_unit"].(string) advice.SingleDoseUnit = singleDoseUnit } if adviceNameM["single_dose_unit"] != nil && reflect.TypeOf(adviceNameM["single_dose_unit"]).String() == "float64" { tmp := adviceNameM["single_dose_unit"].(float64) singleDoseUnit := service.TypeConversion(tmp) advice.SingleDoseUnit = singleDoseUnit } if adviceNameM["prescribing_number"] != nil && reflect.TypeOf(adviceNameM["prescribing_number"]).String() == "string" { prescribingNumber, _ := strconv.ParseFloat(adviceNameM["prescribing_number"].(string), 64) advice.PrescribingNumber = prescribingNumber } if adviceNameM["prescribing_number"] != nil && reflect.TypeOf(adviceNameM["prescribing_number"]).String() == "float64" { prescribingNumber := adviceNameM["prescribing_number"].(float64) advice.PrescribingNumber = prescribingNumber } if adviceNameM["prescribing_number_unit"] != nil && reflect.TypeOf(adviceNameM["prescribing_number_unit"]).String() == "string" { prescribingNumberUnit, _ := adviceNameM["prescribing_number_unit"].(string) advice.PrescribingNumberUnit = prescribingNumberUnit } if adviceNameM["delivery_way"] != nil && reflect.TypeOf(adviceNameM["delivery_way"]).String() == "string" { deliveryWay, _ := adviceNameM["delivery_way"].(string) advice.DeliveryWay = deliveryWay } if adviceNameM["execution_frequency"] != nil && reflect.TypeOf(adviceNameM["execution_frequency"]).String() == "string" { executionFrequency, _ := adviceNameM["execution_frequency"].(string) advice.ExecutionFrequency = executionFrequency } remark, _ := adviceNameM["remark"].(string) advice.Remark = remark advice.AdviceType = 1 advice.StartTime = StartTime advice.RecordDate = RecordDate advice.PatientId = patient_id advice.UserOrgId = org_id advice.AdviceDoctor = advice_doctor advices = append(advices, &advice) } newAdvices, _ := service.CreateMobileMGroupAdvice(org_id, advices, group_no) c.ServeSuccessJSON(map[string]interface{}{ "advice": newAdvices, }) }