smart_sch.go 4.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. package service
  2. import (
  3. "XT_New/models"
  4. "time"
  5. )
  6. func GetSmartSchPatientByKeyWord(orgID int64, keywords string) (patient []*models.SmartSchPatient, err error) {
  7. db := readDb.Model(&models.SmartSchPatient{}).Where("user_org_id=? and status=1", orgID)
  8. if len(keywords) > 0 {
  9. likekey := "%" + keywords + "%"
  10. err = db.Where("name LIKE ? OR dialysis_no LIKE ? ", likekey, likekey).Find(&patient).Error
  11. } else {
  12. err = db.Find(&patient).Error
  13. }
  14. for _, item := range patient {
  15. var sch []*models.SmartSchedule
  16. now := time.Now()
  17. offset := int(time.Monday - now.Weekday())
  18. if offset > 0 {
  19. offset = -6
  20. }
  21. weekStart := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, time.Local).AddDate(0, 0, offset)
  22. readDb.Model(&models.SmartSchedule{}).Where("user_org_id = ? AND status = 1 AND patient_id = ? AND schedule_date >= ?", orgID, item.ID, weekStart.Unix()).
  23. Preload("DeviceZone", "status = 1").
  24. Preload("DeviceNumber", "status = 1").Find(&sch)
  25. item.SmartSchedule = sch
  26. }
  27. return
  28. }
  29. func GetSmartSchTemplatePatientByKeyWord(orgID int64, keywords string) (patient []*models.SmartSchTemplatePatient, err error) {
  30. db := readDb.Model(&models.SmartSchTemplatePatient{}).Where("user_org_id=? and status=1", orgID)
  31. if len(keywords) > 0 {
  32. likekey := "%" + keywords + "%"
  33. err = db.Where("name LIKE ? OR dialysis_no LIKE ? ", likekey, likekey).Find(&patient).Error
  34. } else {
  35. err = db.Find(&patient).Error
  36. }
  37. for _, item := range patient {
  38. mode, _ := GetOrgPatientScheduleTemplateModeTwo(item.UserOrgId)
  39. if mode.ID > 0 {
  40. if mode.Mode == 1 {
  41. schs, _ := GetSmartSchTemplatePatientByID(item.UserOrgId, item.ID, 1)
  42. item.XtPatientScheduleTemplateId = schs
  43. } else if mode.Mode == 2 {
  44. schs, _ := GetSmartSchTemplatePatientByID(item.UserOrgId, item.ID, 2)
  45. item.XtPatientScheduleTemplateId = schs
  46. } else if mode.Mode == 3 {
  47. schs, _ := GetSmartSchTemplatePatientByID(item.UserOrgId, item.ID, 3)
  48. item.XtPatientScheduleTemplateId = schs
  49. } else if mode.Mode == 4 {
  50. schs, _ := GetSmartSchTemplatePatientByID(item.UserOrgId, item.ID, 4)
  51. item.XtPatientScheduleTemplateId = schs
  52. }
  53. }
  54. }
  55. return
  56. }
  57. func GetSmartSchPatientByID(orgID int64, patient_id int64) (schs []*models.SmartSchedule, err error) {
  58. now := time.Now()
  59. offset := int(time.Monday - now.Weekday())
  60. if offset > 0 {
  61. offset = -6
  62. }
  63. weekStart := time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, time.Local).AddDate(0, 0, offset)
  64. err = readDb.Model(&models.SmartSchedule{}).Where("user_org_id = ? AND status = 1 AND patient_id = ? AND schedule_date >= ?", orgID, patient_id, weekStart.Unix()).
  65. Preload("DeviceZone", "status = 1").
  66. Preload("DeviceNumber", "status = 1").Find(&schs).Error
  67. return
  68. }
  69. func GetSmartSchTemplatePatientByID(orgID int64, patient_id int64, count int) (schs []*models.XtPatientScheduleTemplateId, err error) {
  70. err = readDb.Model(&models.XtPatientScheduleTemplateId{}).Preload("XtPatientScheduleTemplateItem", "status=1 AND patient_id = ?", patient_id).Where("org_id = ? AND status = 1", orgID).Limit(count).Find(&schs).Error
  71. for _, items := range schs {
  72. for _, subItems := range items.XtPatientScheduleTemplateItem {
  73. number, _ := GetBedNumberById(subItems.DeviceNumberId, subItems.OrgId)
  74. subItems.ZoneId = number.ZoneID
  75. }
  76. }
  77. return
  78. }
  79. func GetAllAvaildDeviceNumbersByZone(orgID int64, record_date int64, schedule_type int, zone_id int64, patient_id int64) ([]*DeviceNumberViewModel, error) {
  80. var vms []*DeviceNumberViewModel = make([]*DeviceNumberViewModel, 0)
  81. 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()
  82. defer rows.Close()
  83. if err != nil {
  84. return nil, err
  85. }
  86. for rows.Next() {
  87. var vm DeviceNumberViewModel
  88. readDb.ScanRows(rows, &vm)
  89. vms = append(vms, &vm)
  90. }
  91. return vms, nil
  92. }
  93. func GetScheduleByZoneAndBed(org_id int64, partitionId int64, bed_id int64, schedule_date int64, sch_type int64) (sch models.SmartSchedule, err error) {
  94. 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
  95. return
  96. }