package service import ( "XT_New/models" "github.com/jinzhu/gorm" "time" ) func GetSmartSchPatientByKeyWord(orgID int64, keywords string) (patient []*models.SmartSchPatient, err error) { db := readDb.Model(&models.SmartSchPatient{}).Where("user_org_id=? and status=1", orgID) if len(keywords) > 0 { likekey := "%" + keywords + "%" err = db.Where("name LIKE ? OR dialysis_no LIKE ? ", likekey, likekey).Find(&patient).Error } else { err = db.Find(&patient).Error } for _, item := range patient { var sch []*models.SmartSchedule now := time.Now() offset := int(time.Monday - now.Weekday()) if offset > 0 { offset = -6 } weekStart := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, time.Local).AddDate(0, 0, offset) readDb.Model(&models.SmartSchedule{}).Where("user_org_id = ? AND status = 1 AND patient_id = ? AND schedule_date >= ?", orgID, item.ID, weekStart.Unix()). Preload("DeviceZone", "status = 1"). Preload("SmSchDialysisOrder", "status = 1"). Preload("DeviceNumber", "status = 1").Find(&sch) item.SmartSchedule = sch } return } func GetSmartSchTemplatePatientByKeyWord(orgID int64, keywords string) (patient []*models.SmartSchTemplatePatient, err error) { db := readDb.Model(&models.SmartSchTemplatePatient{}).Where("user_org_id=? and status=1", orgID) if len(keywords) > 0 { likekey := "%" + keywords + "%" err = db.Where("name LIKE ? OR dialysis_no LIKE ? ", likekey, likekey).Find(&patient).Error } else { err = db.Find(&patient).Error } for _, item := range patient { mode, _ := GetOrgPatientScheduleTemplateModeTwo(item.UserOrgId) if mode.ID > 0 { if mode.Mode == 1 { schs, _ := GetSmartSchTemplatePatientByID(item.UserOrgId, item.ID, 1) item.XtPatientScheduleTemplateId = schs } else if mode.Mode == 2 { schs, _ := GetSmartSchTemplatePatientByID(item.UserOrgId, item.ID, 2) item.XtPatientScheduleTemplateId = schs } else if mode.Mode == 3 { schs, _ := GetSmartSchTemplatePatientByID(item.UserOrgId, item.ID, 3) item.XtPatientScheduleTemplateId = schs } else if mode.Mode == 4 { schs, _ := GetSmartSchTemplatePatientByID(item.UserOrgId, item.ID, 4) item.XtPatientScheduleTemplateId = schs } } } return } func GetSmartSchPatientByID(orgID int64, patient_id int64) (schs []*models.SmartSchedule, err error) { now := time.Now() offset := int(time.Monday - now.Weekday()) if offset > 0 { offset = -6 } weekStart := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, time.Local).AddDate(0, 0, offset) err = readDb.Model(&models.SmartSchedule{}).Where("user_org_id = ? AND status = 1 AND patient_id = ? AND schedule_date >= ?", orgID, patient_id, weekStart.Unix()). Preload("DeviceZone", "status = 1"). Preload("SmSchDialysisOrder", "status = 1"). Preload("DeviceNumber", "status = 1").Find(&schs).Error return } func GetSmartSchTemplatePatientByID(orgID int64, patient_id int64, count int) (schs []*models.XtPatientScheduleTemplateId, err error) { err = readDb.Model(&models.XtPatientScheduleTemplateId{}).Preload("XtPatientScheduleTemplateItem", func(db *gorm.DB) *gorm.DB { return db.Where("status = 1 AND patient_id = ?", patient_id).Order("weekday") }).Where("org_id = ? AND status = 1", orgID).Limit(count).Find(&schs).Error for _, items := range schs { for _, subItems := range items.XtPatientScheduleTemplateItem { number, _ := GetBedNumberById(subItems.DeviceNumberId, subItems.OrgId) subItems.ZoneId = number.ZoneID } } return } func GetAllAvaildDeviceNumbersByZone(orgID int64, record_date int64, schedule_type int, zone_id int64, patient_id int64) ([]*DeviceNumberViewModel, error) { var vms []*DeviceNumberViewModel = make([]*DeviceNumberViewModel, 0) rows, err := readDb.Raw("SELECT n.*, z.name as zone_name FROM xt_device_number as n join xt_device_zone as z on z.id = n.zone_id AND z.id = ? WHERE (n.org_id = ? AND n.status = 1) AND NOT EXISTS (Select * FROM xt_schedule as s Where s.`schedule_date` = ? AND s.patient_id <> ? AND s.user_org_id = n.org_id AND s.`bed_id` = n.id AND s.`schedule_type` = ? AND s.status = 1 )", zone_id, orgID, record_date, patient_id, schedule_type).Rows() defer rows.Close() if err != nil { return nil, err } for rows.Next() { var vm DeviceNumberViewModel readDb.ScanRows(rows, &vm) vms = append(vms, &vm) } return vms, nil } func GetScheduleByZoneAndBed(org_id int64, partitionId int64, bed_id int64, schedule_date int64, sch_type int64) (sch models.SmartSchedule, err error) { err = readDb.Model(&models.SmartSchedule{}).Where("bed_id = ? AND user_org_id = ? AND schedule_date = ? AND partition_id = ? AND schedule_type = ? AND status = 1", bed_id, org_id, schedule_date, partitionId, sch_type).First(&sch).Error return }