schedule_service.go 27KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665
  1. package service
  2. import (
  3. "XT_New/models"
  4. "fmt"
  5. "strconv"
  6. "strings"
  7. "time"
  8. "github.com/jinzhu/gorm"
  9. )
  10. //GetSchedulePartitionPanel 取出排班面板,分区-机号
  11. func GetSchedulePartitionPanel(orgID int64) (partitions []*models.Partition, err error) {
  12. err = readDb.Model(&models.DeviceZone{}).Preload("Jihaos", "org_id=? and status=1", orgID).Where("org_id=? and status=1", orgID).Order("").Find(&partitions).Error
  13. return
  14. }
  15. func GetPatientWithScheduleAndSolution(orgID int64, keywords string, weekStart, weekEnd, schedule, contagion int64) (patients []*models.Patients, err error) {
  16. db := readDb.Table("xt_patients as p").
  17. Preload("DialysisSolutions", "user_org_id=? and initiate_mode=1 and affirm_state=1 and parent_id=0 and status=1", orgID).
  18. Preload("Schedules", "user_org_id=? and schedule_date>=? and schedule_date<= ? and status=1", orgID, weekStart, weekEnd).
  19. Preload("Contagions", "status=1").
  20. Where("p.user_org_id=? and p.lapseto=1 and p.status=1", orgID)
  21. if len(keywords) > 0 {
  22. likeKey := "%" + keywords + "%"
  23. db = db.Where("p.name LIKE ?", likeKey)
  24. }
  25. if schedule == 1 {
  26. db = db.Where("EXISTS (?)", readDb.Table("xt_schedule as iss").Where("iss.patient_id=p.id and iss.schedule_date>=? and iss.schedule_date<= ? and iss.status=1", weekStart, weekEnd).QueryExpr())
  27. } else if schedule == 2 {
  28. db = db.Where("NOT EXISTS (?)", readDb.Table("xt_schedule as iss").Where("iss.patient_id=p.id and iss.schedule_date>=? and iss.schedule_date<= ? and iss.status=1", weekStart, weekEnd).QueryExpr())
  29. }
  30. if contagion > 0 {
  31. db = db.Where("EXISTS (?)", readDb.Table("xt_patients_infectious_diseases as pid").Where("pid.patient_id=p.id and pid.disease_id=? and pid.status=1", contagion).QueryExpr())
  32. }
  33. err = db.Find(&patients).Error
  34. return
  35. }
  36. func GetWeekSchedule(orgID int64, start, end int64) (schedules []*models.Schedule, err error) {
  37. err = readDb.
  38. Table("xt_schedule as s").
  39. Preload("PatientInfectiousDiseases", "status = 1 ").
  40. Joins("JOIN xt_patients as p ON p.id = s.patient_id").
  41. Where("s.user_org_id=? and s.schedule_date>=? and s.schedule_date<=? and s.status=1", orgID, start, end).
  42. Select("s.id, s.user_org_id, s.partition_id, s.bed_id, s.patient_id, s.schedule_date, s.schedule_type, s.schedule_week, s.mode_id, s.status, s.created_time, s.updated_time, p.name as patient").
  43. Order("updated_time asc").
  44. Find(&schedules).Error
  45. return
  46. }
  47. func GetDaySchedule(orgID, start, end, patientID int64) (schedule models.Schedule, err error) {
  48. err = readDb.Model(&models.Schedule{}).Where("user_org_id=? and patient_id=? and schedule_date>=? and schedule_date<=? and status=1", orgID, patientID, start, end).First(&schedule).Error
  49. return
  50. }
  51. func GetDayScheduleTwo(orgID, start, patientID int64) (schedule models.Schedule, err error) {
  52. err = readDb.Model(&models.Schedule{}).Where("user_org_id=? and patient_id=? and schedule_date = ? and status=1", orgID, patientID, start).Preload("DialysisOrder", "status = 1").First(&schedule).Error
  53. return
  54. }
  55. func GetDayScheduleByBedid(orgID, start, bed_id int64, schedule_type int64) (schedule models.Schedule, err error) {
  56. err = readDb.Model(&models.Schedule{}).Where("user_org_id=? and schedule_date=? and bed_id=? and status=1 AND schedule_type = ?", orgID, start, bed_id, schedule_type).Preload("DialysisOrder", "status = 1").First(&schedule).Error
  57. return
  58. }
  59. func GetPatientScheduleFormDay(orgID, start, end, patientID int64) (schedules []*models.PatientSchedule, err error) {
  60. err = readDb.Table("xt_schedule as s").
  61. Preload("DeviceZone", "org_id=? and status=1", orgID).
  62. Preload("DeviceNumber", "org_id=? and status=1", orgID).
  63. Where("s.patient_id =? and s.user_org_id=? and s.schedule_date>=? and s.schedule_date < ? and s.status=1", patientID, orgID, start, end).
  64. Find(&schedules).Error
  65. return
  66. }
  67. func GetNextSchedule(orgID, end, patientID int64) (schedules []*models.PatientSchedule, err error) {
  68. err = readDb.Table("xt_schedule as s").
  69. Preload("DeviceZone", "org_id=? and status=1", orgID).
  70. Preload("DeviceNumber", "org_id=? and status=1", orgID).
  71. Where("s.patient_id =? and s.user_org_id=? and s.schedule_date>=? and s.status=1", patientID, orgID, end).
  72. Find(&schedules).Error
  73. return
  74. }
  75. func GetPointSchedule(orgID, scheduleDate, scheduleWeek, scheduleType, bedId int64) (schedule models.Schedule, err error) {
  76. err = readDb.Model(&models.Schedule{}).Where("user_org_id=? and schedule_date=? and bed_id=? and schedule_week=? AND schedule_type=? and status=1", orgID, scheduleDate, bedId, scheduleWeek, scheduleType).First(&schedule).Error
  77. if err == gorm.ErrRecordNotFound {
  78. err = nil
  79. return
  80. }
  81. return
  82. }
  83. func CreateSchedule(m *models.Schedule) error {
  84. return writeDb.Model(&models.Schedule{}).Create(&m).Error
  85. }
  86. func GetSchedule(orgID, id int64) (*models.Schedule, error) {
  87. var schedule models.Schedule
  88. var err error
  89. err = readDb.Model(&models.Schedule{}).Where("id = ? and user_org_id=? and status=1", id, orgID).First(&schedule).Error
  90. if err != nil {
  91. return nil, err
  92. }
  93. return &schedule, nil
  94. }
  95. func UpdateSchedule(m *models.Schedule) error {
  96. return writeDb.Model(&models.Schedule{}).Save(&m).Error
  97. }
  98. func GetPatientScheduleFormToday(orgId, id, start int64) (schedules []*models.PatientSchedule, err error) {
  99. err = readDb.Table("xt_schedule as s").
  100. Preload("DeviceZone", "org_id=? and status=1", orgId).
  101. Preload("DeviceNumber", "org_id=? and status=1", orgId).
  102. Where("s.patient_id =? and s.user_org_id=? and s.schedule_date>=? and s.status=1", id, orgId, start).
  103. Find(&schedules).Error
  104. return
  105. }
  106. type WeekSchedulePrintVM struct {
  107. ID int64 `gorm:"column:id" json:"id"`
  108. ZoneID int64 `gorm:"column:partition_id" json:"zone_id"`
  109. DeviceNumberID int64 `gorm:"column:bed_id" json:"device_number_id"`
  110. PatientID int64 `gorm:"column:patient_id" json:"patient_id"`
  111. ScheduleDate int64 `gorm:"column:schedule_date" json:"schedule_date"`
  112. ScheduleType int64 `gorm:"column:schedule_type" json:"schedule_type"`
  113. ScheduleWeek int64 `gorm:"column:schedule_week" json:"schedule_week"`
  114. ModeID int64 `gorm:"column:mode_id" json:"mode_id"`
  115. Patient *models.Patients `gorm:"ForeignKey:PatientID" json:"patient"`
  116. DeviceNumber *models.DeviceNumber `gorm:"ForeignKey:DeviceNumberID" json:"device_number"`
  117. Zone *models.DeviceZone `gorm:"ForeignKey:ZoneID" json:"zone"`
  118. Mode *models.TreatmentMode `gorm:"ForeignKey:ModeID" json:"mode"`
  119. }
  120. type PrintCount struct {
  121. ScheduleType int64 `gorm:"column:schedule_type" json:"schedule_type"`
  122. ScheduleWeek int64 `gorm:"column:schedule_week" json:"schedule_week"`
  123. Count int64
  124. }
  125. func GetPrinitWeekSchedules(orgID int64, start, end int64) ([]*WeekSchedulePrintVM, error) {
  126. var schedules []*WeekSchedulePrintVM
  127. err := readDb.Table("xt_schedule as s").
  128. Preload("Patient", "status = 1 and user_org_id = ?", orgID).
  129. Preload("DeviceNumber", "status = 1 and org_id = ?", orgID).
  130. Preload("Zone", "status = 1 and org_id = ?", orgID).
  131. Preload("Mode", "status = 1").
  132. // Joins("JOIN xt_patients as p ON p.id = s.patient_id").
  133. Where("s.user_org_id = ? and s.schedule_date >= ? and s.schedule_date <= ? and s.status = 1", orgID, start, end).
  134. // Select("s.id, s.user_org_id, s.partition_id, s.bed_id, s.patient_id, s.schedule_date, s.schedule_type, s.schedule_week, s.mode_id").
  135. Find(&schedules).Error
  136. return schedules, err
  137. }
  138. func GetPrinitWeekTotal(orgid int64, startime int64, endtime int64) (print []*PrintCount, err error) {
  139. db := XTReadDB().Table("xt_schedule as x").Where("x.status = 1")
  140. if orgid > 0 {
  141. db = db.Where("x.user_org_id = ?", orgid)
  142. }
  143. if startime > 0 {
  144. db = db.Where("x.schedule_date >=?", startime)
  145. }
  146. if endtime > 0 {
  147. db = db.Where("x.schedule_date <=?", endtime)
  148. }
  149. err = db.Select("x.schedule_type,x.schedule_week,count(x.patient_id) as count").Group("x.schedule_date,x.schedule_type").Scan(&print).Error
  150. return print, err
  151. }
  152. func GetBloodPrintWeekTotal(orgid int64, startime int64, endtime int64) (print []*PrintCount, err error) {
  153. db := XTReadDB().Table("xt_schedule as x").Where("x.status = 1")
  154. if orgid > 0 {
  155. db = db.Where("x.user_org_id = ?", orgid)
  156. }
  157. if startime > 0 {
  158. db = db.Where("x.schedule_date >=?", startime)
  159. }
  160. if endtime > 0 {
  161. db = db.Where("x.schedule_date <=?", endtime)
  162. }
  163. db = db.Where("x.mode_id = 2")
  164. err = db.Select("x.schedule_type,x.schedule_week,count(x.patient_id) as count").Group("x.schedule_date,x.schedule_type").Scan(&print).Error
  165. return print, err
  166. }
  167. func GetPerfusionWeekTotal(orgid int64, startime int64, endtime int64) (print []*PrintCount, err error) {
  168. db := XTReadDB().Table("xt_schedule as x").Where("x.status = 1")
  169. if orgid > 0 {
  170. db = db.Where("x.user_org_id = ?", orgid)
  171. }
  172. if startime > 0 {
  173. db = db.Where("x.schedule_date >=?", startime)
  174. }
  175. if endtime > 0 {
  176. db = db.Where("x.schedule_date <=?", endtime)
  177. }
  178. db = db.Where("x.mode_id = 3")
  179. err = db.Select("x.schedule_type,x.schedule_week,count(x.patient_id) as count").Group("x.schedule_date,x.schedule_type").Scan(&print).Error
  180. return print, err
  181. }
  182. // func ExchangeScheduleTimeWithWeekSchedules(orgID int64, nextWeekSchs []*models.Schedule, nextTwoWeekSchs []*models.Schedule) error {
  183. // templateMode, getTemplateModeErr := GetOrgPatientScheduleTemplateMode(orgID)
  184. // if getTemplateModeErr != nil {
  185. // return getTemplateModeErr
  186. // }
  187. // if templateMode == nil {
  188. // return errors.New("模板模式不存在")
  189. // }
  190. // tx := writeDb.Begin()
  191. // updateTime := time.Now().Unix()
  192. // for _, sch := range nextWeekSchs {
  193. // sch.PatientInfectiousDiseases = nil
  194. // date := time.Unix(sch.ScheduleDate, 0)
  195. // sch.ScheduleDate = date.AddDate(0, 0, 7).Unix()
  196. // sch.UpdatedTime = updateTime
  197. // updateSchErr := tx.Save(sch).Error
  198. // if updateSchErr != nil {
  199. // tx.Rollback()
  200. // return updateSchErr
  201. // }
  202. // }
  203. // for _, sch := range nextTwoWeekSchs {
  204. // sch.PatientInfectiousDiseases = nil
  205. // date := time.Unix(sch.ScheduleDate, 0)
  206. // sch.ScheduleDate = date.AddDate(0, 0, -7).Unix()
  207. // sch.UpdatedTime = updateTime
  208. // updateSchErr := tx.Save(sch).Error
  209. // if updateSchErr != nil {
  210. // tx.Rollback()
  211. // return updateSchErr
  212. // }
  213. // }
  214. // templateMode.ModifyTime = updateTime
  215. // templateMode.ExecuteTimes += 1
  216. // updateModeErr := tx.Save(templateMode).Error
  217. // if updateModeErr != nil {
  218. // tx.Rollback()
  219. // return updateModeErr
  220. // }
  221. // tx.Commit()
  222. // return nil
  223. // }
  224. func GetSchedualPatientsByKeywordsAndWeek(keywords string, org_id int64, start_time int64, end_time int64) (schedule []*models.Schedule, err error) {
  225. likeKey := "%" + keywords + "%"
  226. err = readDb.
  227. Table("xt_schedule as s").
  228. Preload("PatientInfectiousDiseases", "status = 1 ").
  229. Preload("DeviceZone", "status = 1 ").
  230. Preload("DeviceNumber", "status = 1 ").
  231. Preload("TreatmentMode", "status = 1 ").
  232. Joins("JOIN xt_patients as p ON p.id = s.patient_id AND (p.name LIKE ? OR p.dialysis_no LIKE ?)", likeKey, likeKey).
  233. Where("s.user_org_id=? and s.schedule_date >= ? and s.schedule_date <= ? and s.status=1", org_id, start_time, end_time).
  234. Select("s.id, s.user_org_id, s.partition_id, s.bed_id, s.patient_id, s.schedule_date, s.schedule_type, s.schedule_week, s.mode_id, s.status, s.created_time, s.updated_time, p.name as patient").
  235. Order("schedule_date asc").
  236. Find(&schedule).Error
  237. return
  238. }
  239. func GetSchedualPatientsByKeywords(keywords string, org_id int64) (schedule []*models.Schedule, err error) {
  240. likeKey := "%" + keywords + "%"
  241. err = readDb.
  242. Table("xt_schedule as s").
  243. Preload("PatientInfectiousDiseases", "status = 1 ").
  244. Preload("DeviceZone", "status = 1 ").
  245. Preload("DeviceNumber", "status = 1 ").
  246. Preload("TreatmentMode", "status = 1 ").
  247. Joins("JOIN xt_patients as p ON p.id = s.patient_id AND (p.name LIKE ? OR p.dialysis_no LIKE ?)", likeKey, likeKey).
  248. Where("s.user_org_id=? and s.schedule_date >= UNIX_TIMESTAMP(DATE_FORMAT(NOW(),'%Y-%m-%d 00:00:00')) and s.schedule_date <= UNIX_TIMESTAMP(DATE_FORMAT( SUBDATE(CURDATE(),DATE_FORMAT(CURDATE(),'%w')-7), '%Y-%m-%d 23:59:59')) and s.status=1", org_id).
  249. Select("s.id, s.user_org_id, s.partition_id, s.bed_id, s.patient_id, s.schedule_date, s.schedule_type, s.schedule_week, s.mode_id, s.status, s.created_time, s.updated_time, p.name as patient").
  250. Order("schedule_date asc").
  251. Find(&schedule).Error
  252. return
  253. }
  254. func GetWeekDayScheduleTwo(orgID int64, scheduleDate int64, scheduleDates *time.Time, weektime int64) (schedules []*models.WeekSchedule, err error) {
  255. db := readDb.Table("xt_schedule as s ").Where("s.status =1")
  256. if orgID > 0 {
  257. db = db.Where("s.user_org_id = ?", orgID)
  258. }
  259. if scheduleDate > 0 {
  260. db = db.Where("s.schedule_date = ?", scheduleDate)
  261. }
  262. if weektime > 0 {
  263. db = db.Where("s.schedule_type = ?", weektime)
  264. }
  265. err = db.
  266. Preload("DeviceZone", "status = 1 ").
  267. Preload("DeviceNumber", "status = 1 ").
  268. Preload("DialysisPrescription", func(db *gorm.DB) *gorm.DB {
  269. return db.Where("status = 1").Order("id asc")
  270. }).
  271. Joins("JOIN xt_patients as p ON p.id = s.patient_id").
  272. Select("s.id, s.user_org_id, s.partition_id, s.bed_id, s.patient_id, s.schedule_date, s.schedule_type, s.schedule_week, s.mode_id, s.status, s.created_time, s.updated_time, p.name as patient").
  273. Order("s.partition_id asc").
  274. Find(&schedules).Error
  275. for _, item := range schedules {
  276. _, config := FindDoctorAdviceRecordByOrgId(item.UserOrgId)
  277. if config.IsOpenRemind > 0 {
  278. //开启推送提醒逻辑 提交长期处方的时候,弹起长期医嘱推送
  279. var advice_three []*models.DoctorAdvice
  280. advices, _ := GetLastLongAdviceByGroupNoOther(item.UserOrgId, item.PatientId)
  281. advices_two, _ := GetLastLongAdviceByGroupNoThreeOther(item.UserOrgId, item.PatientId)
  282. for _, advice := range advices {
  283. advice.IsCheck = 1
  284. if advice.FrequencyType == 3 {
  285. week := int(scheduleDates.Weekday())
  286. fmt.Println("week-------", week)
  287. fmt.Println(advice.WeekDay)
  288. switch week {
  289. case 1:
  290. if strings.Index(advice.WeekDay, "周一") > -1 {
  291. advice_three = append(advice_three, advice)
  292. }
  293. break
  294. case 2:
  295. if strings.Index(advice.WeekDay, "周二") > -1 {
  296. advice_three = append(advice_three, advice)
  297. }
  298. break
  299. case 3:
  300. if strings.Index(advice.WeekDay, "周三") > -1 {
  301. advice_three = append(advice_three, advice)
  302. }
  303. break
  304. case 4:
  305. if strings.Index(advice.WeekDay, "周四") > -1 {
  306. advice_three = append(advice_three, advice)
  307. }
  308. break
  309. case 5:
  310. if strings.Index(advice.WeekDay, "周五") > -1 {
  311. advice_three = append(advice_three, advice)
  312. }
  313. break
  314. case 6:
  315. if strings.Index(advice.WeekDay, "周六") > -1 {
  316. advice_three = append(advice_three, advice)
  317. }
  318. break
  319. case 0:
  320. if strings.Index(advice.WeekDay, "周日") > -1 {
  321. advice_three = append(advice_three, advice)
  322. }
  323. break
  324. }
  325. } else if advice.FrequencyType == 1 {
  326. advice_three = append(advice_three, advice)
  327. }
  328. }
  329. for _, advice := range advices_two {
  330. now := scheduleDates.Unix()
  331. dayStr := strconv.FormatInt(advice.DayCount, 10)
  332. dayStr2 := "-" + dayStr
  333. count, _ := strconv.ParseInt(dayStr2, 10, 64)
  334. oldTime := scheduleDates.AddDate(0, 0, int(count)).Unix()
  335. advices, _ := FindAllDoctorAdviceByTimeOther(now, oldTime, item.PatientId, item.UserOrgId, advice.TemplateId)
  336. if len(advices) == 0 {
  337. advice_three = append(advice_three, advice)
  338. }
  339. }
  340. item.DoctorAdvice = append(item.DoctorAdvice, advice_three...)
  341. }
  342. }
  343. return
  344. }
  345. func GetWeekDaySchedule(orgID int64, scheduleDate int64, scheduleDates *time.Time) (schedules []*models.WeekSchedule, err error) {
  346. err = readDb.
  347. Table("xt_schedule as s").
  348. Preload("DeviceZone", "status = 1 ").
  349. Preload("DeviceNumber", "status = 1 ").
  350. Preload("DialysisPrescription", func(db *gorm.DB) *gorm.DB {
  351. return db.Where("status = 1").Order("id asc")
  352. }).
  353. Joins("JOIN xt_patients as p ON p.id = s.patient_id").
  354. Where("s.user_org_id=? and s.schedule_date = ? and s.status=1", orgID, scheduleDate).
  355. Select("s.id, s.user_org_id, s.partition_id, s.bed_id, s.patient_id, s.schedule_date, s.schedule_type, s.schedule_week, s.mode_id, s.status, s.created_time, s.updated_time, p.name as patient").
  356. Order("schedule_type").
  357. Find(&schedules).Error
  358. for _, item := range schedules {
  359. _, config := FindDoctorAdviceRecordByOrgId(item.UserOrgId)
  360. if config.IsOpenRemind > 0 {
  361. //开启推送提醒逻辑 提交长期处方的时候,弹起长期医嘱推送
  362. var advice_three []*models.DoctorAdvice
  363. advices, _ := GetLastLongAdviceByGroupNoOther(item.UserOrgId, item.PatientId)
  364. advices_two, _ := GetLastLongAdviceByGroupNoThreeOther(item.UserOrgId, item.PatientId)
  365. for _, advice := range advices {
  366. advice.IsCheck = 1
  367. if advice.FrequencyType == 3 {
  368. week := int(scheduleDates.Weekday())
  369. fmt.Println(advice.WeekDay)
  370. switch week {
  371. case 1:
  372. if strings.Index(advice.WeekDay, "周一") > -1 {
  373. advice_three = append(advice_three, advice)
  374. }
  375. break
  376. case 2:
  377. if strings.Index(advice.WeekDay, "周二") > -1 {
  378. advice_three = append(advice_three, advice)
  379. }
  380. break
  381. case 3:
  382. if strings.Index(advice.WeekDay, "周三") > -1 {
  383. advice_three = append(advice_three, advice)
  384. }
  385. break
  386. case 4:
  387. if strings.Index(advice.WeekDay, "周四") > -1 {
  388. advice_three = append(advice_three, advice)
  389. }
  390. break
  391. case 5:
  392. if strings.Index(advice.WeekDay, "周五") > -1 {
  393. advice_three = append(advice_three, advice)
  394. }
  395. break
  396. case 6:
  397. if strings.Index(advice.WeekDay, "周六") > -1 {
  398. advice_three = append(advice_three, advice)
  399. }
  400. break
  401. case 0:
  402. if strings.Index(advice.WeekDay, "周日") > -1 {
  403. advice_three = append(advice_three, advice)
  404. }
  405. break
  406. }
  407. } else if advice.FrequencyType == 1 {
  408. advice_three = append(advice_three, advice)
  409. }
  410. }
  411. for _, advice := range advices_two {
  412. now := scheduleDates.Unix()
  413. dayStr := strconv.FormatInt(advice.DayCount, 10)
  414. dayStr2 := "-" + dayStr
  415. count, _ := strconv.ParseInt(dayStr2, 10, 64)
  416. oldTime := scheduleDates.AddDate(0, 0, int(count)).Unix()
  417. advices, _ := FindAllDoctorAdviceByTimeOther(now, oldTime, item.PatientId, item.UserOrgId, advice.TemplateId)
  418. if len(advices) == 0 {
  419. advice_three = append(advice_three, advice)
  420. }
  421. }
  422. item.DoctorAdvice = append(item.DoctorAdvice, advice_three...)
  423. }
  424. }
  425. return
  426. }
  427. func RemoveRepeatedElement(arr []*models.DoctorAdvice) (newArr []*models.DoctorAdvice) {
  428. newArr = make([]*models.DoctorAdvice, 0)
  429. for i := 0; i < len(arr); i++ {
  430. repeat := false
  431. for j := i + 1; j < len(arr); j++ {
  432. if arr[i].ID == arr[j].ID {
  433. repeat = true
  434. break
  435. }
  436. }
  437. if !repeat {
  438. newArr = append(newArr, arr[i])
  439. }
  440. }
  441. return
  442. }
  443. func GetLastLongAdviceByGroupNoOther(orgId int64, patient_id int64) (advice []*models.DoctorAdvice, err error) {
  444. err = readDb.Model(&models.DoctorAdvice{}).Where("status = 1 AND user_org_id = ? AND patient_id = ? AND advice_type = 1 AND stop_state = 2 AND parent_id = 0", orgId, patient_id).Preload("ChildDoctorAdvice", "status = 1").Find(&advice).Error
  445. return
  446. }
  447. func GetLastLongAdviceByGroupNoThreeOther(orgId int64, patient_id int64) (advice []*models.DoctorAdvice, err error) {
  448. err = readDb.Model(&models.DoctorAdvice{}).Where("status = 1 AND user_org_id = ? AND patient_id = ? AND advice_type = 1 AND frequency_type = 2 AND stop_state = 2 AND parent_id = 0 ", orgId, patient_id).Preload("ChildDoctorAdvice", "status = 1").Find(&advice).Error
  449. return
  450. }
  451. func FindAllDoctorAdviceByTimeOther(now int64, end int64, patient_id int64, orgId int64, temp_id string) (advice []*models.DoctorAdvice, err error) {
  452. err = readDb.Model(&models.DoctorAdvice{}).Where("status = 1 AND user_org_id = ? AND patient_id = ? AND advice_type = 2 AND frequency_type = 2 AND advice_date > ? AND advice_date < ? AND template_id = ? ", orgId, patient_id, end, now, temp_id).Preload("ChildDoctorAdvice", "status = 1").Find(&advice).Error
  453. return
  454. }
  455. func FindSchPatientNameByName(name string, user_org_id int64) (patient []*models.Patients, err error) {
  456. err = readDb.Model(&models.Patients{}).Where("user_org_id = ? AND name = ? AND status = 1", user_org_id, name).Find(&patient).Error
  457. return
  458. }
  459. func UpdateScheduleStatus(date int64, org_id int64) (err error) {
  460. err = readDb.Model(&models.Schedule{}).Where("user_org_id = ? AND schedule_date > ? AND status = 1", org_id, date).Updates(map[string]interface{}{"status": 0, "mtime": time.Now().Unix()}).Error
  461. return
  462. }
  463. func FindDeviceZoneByName(name string, org_id int64) (zone models.DeviceZone, err error) {
  464. err = readDb.Model(&models.DeviceZone{}).Where("org_id = ? AND name = ? AND status = 1", org_id, name).First(&zone).Error
  465. return
  466. }
  467. func FindDeviceByName(device_name string, org_id int64, zone_id int64) (devices []*models.DeviceNumber, err error) {
  468. err = readDb.Model(&models.DeviceNumber{}).Where("org_id = ? AND number = ? AND zone_id = ? AND status = 1", org_id, device_name, zone_id).Find(&devices).Error
  469. return
  470. }
  471. func FindSchedualExportLog(org_id int64, export_time int64) (errLogs []*models.ExportErrLog, err error) {
  472. err = readDb.Model(&models.ExportErrLog{}).Where("user_org_id = ? AND export_time = ? AND log_type = 2", org_id, export_time).Find(&errLogs).Error
  473. return
  474. }
  475. func FindDeviceByNameTwo(device_name string, org_id int64, zone_id int64) (devices []*models.DeviceNumber, err error) {
  476. err = readDb.Model(&models.DeviceNumber{}).Where("org_id = ? AND number = ? AND status = 1 AND zone_id = ?", org_id, device_name, zone_id).Find(&devices).Error
  477. return
  478. }
  479. func UpdateScheduleTemplateStatus(org_id int64) (err error) {
  480. err = readDb.Model(&models.PatientScheduleTemplateItem{}).Where("org_id = ? AND status = 1", org_id).Updates(map[string]interface{}{"status": 0, "mtime": time.Now().Unix()}).Error
  481. return
  482. }
  483. func CreateScheduleTemplate(m *models.PatientScheduleTemplateItem) error {
  484. return writeDb.Model(&models.PatientScheduleTemplateItem{}).Create(&m).Error
  485. }
  486. func FindSchedualTemplateExportLog(org_id int64, export_time int64) (errLogs []*models.ExportErrLog, err error) {
  487. err = readDb.Model(&models.ExportErrLog{}).Where("user_org_id = ? AND export_time = ? AND log_type = 3", org_id, export_time).Find(&errLogs).Error
  488. return
  489. }
  490. func GetDialysisOrderByBedId(orgID, start, bed_id int64, schedule_type int64) (schedule models.DialysisOrder, err error) {
  491. err = readDb.Model(&models.DialysisOrder{}).Where("user_org_id=? and dialysis_date=? and bed_id=? and status=1 AND schedual_type = ?", orgID, start, bed_id, schedule_type).First(&schedule).Error
  492. return
  493. }
  494. type VMDeviceNumber struct {
  495. ID int64 `gorm:"column:id" json:"id"`
  496. OrgID int64 `gorm:"column:org_id" json:"-"`
  497. Number string `gorm:"column:number" json:"number"`
  498. GroupID int64 `gorm:"column:group_id" json:"group_id"`
  499. ZoneID int64 `gorm:"column:zone_id" json:"zone_id"`
  500. Status int8 `json:"-"`
  501. CreateTime int64 `gorm:"column:ctime" json:"-"`
  502. ModifyTime int64 `gorm:"column:mtime" json:"-"`
  503. DeviceZone models.DeviceZone `json:"zone" gorm:"foreignkey:ID;AssociationForeignKey:ZoneID;"`
  504. }
  505. func (VMDeviceNumber) TableName() string {
  506. return "xt_device_number"
  507. }
  508. type VMPatientScheduleTemplateItem struct {
  509. ID int64 `gorm:"column:id" json:"id" form:"id"`
  510. OrgID int64 `gorm:"column:org_id" json:"-" form:"org_id"`
  511. TemplateID int64 `gorm:"column:template_id" json:"template_id" form:"template_id"`
  512. DeviceNumberID int64 `gorm:"column:device_number_id" json:"device_number_id" form:"device_number_id"`
  513. PatientID int64 `gorm:"column:patient_id" json:"patient_id" form:"patient_id"`
  514. TreatMode int64 `gorm:"column:treat_mode" json:"treat_mode" form:"treat_mode"` // 治疗模式
  515. Weekday int8 `gorm:"column :weekday" json:"weekday" form:"weekday"` // 周一-周日 1-7
  516. TimeType int8 `gorm:"column:time_type" json:"time_type" form:"time_type"` // 上下晚 123
  517. Status int8 `gorm:"column:status" json:"status" form:"status"`
  518. CreateTime int64 `gorm:"column:ctime" json:"-" form:"ctime"`
  519. ModifyTime int64 `gorm:"column:mtime" json:"-" form:"mtime"`
  520. IsExport int64 `gorm:"column:is_export" json:"is_export" form:"is_export"`
  521. Patient string `gorm:"-" json:"patient" form:"patient"`
  522. DeviceNumber VMDeviceNumber `json:"number" gorm:"foreignkey:ID;AssociationForeignKey:DeviceNumberID;"`
  523. PatientInfectiousDiseases []*models.InfectiousDiseases `json:"patient_contagions" gorm:"foreignkey:PatientId;AssociationForeignKey:PatientId;"`
  524. }
  525. func (VMPatientScheduleTemplateItem) TableName() string {
  526. return "xt_patient_schedule_template_item"
  527. }
  528. func GetTemplateSchedualPatientsByKeywords(keywords string, org_id int64, template_id int64) (schedule []*VMPatientScheduleTemplateItem, err error) {
  529. likeKey := "%" + keywords + "%"
  530. err = readDb.
  531. Table("xt_patient_schedule_template_item as s").
  532. Preload("PatientInfectiousDiseases", "status = 1 ").
  533. Preload("DeviceNumber", func(db *gorm.DB) *gorm.DB {
  534. return db.Where("org_id = ? AND status = 1", org_id).Preload("DeviceZone", "org_id = ? AND status = 1", org_id)
  535. }).
  536. Joins("JOIN xt_patients as p ON p.id = s.patient_id AND (p.name LIKE ? OR p.dialysis_no LIKE ?)", likeKey, likeKey).
  537. Where("s.template_id = ? AND s.org_id=? and s.status=1", template_id, org_id).
  538. Select("s.id, s.org_id, s.template_id, s.device_number_id, s.patient_id, s.treat_mode, s.weekday, s.time_type, s.status, s.ctime, s.mtime, p.name as patient").
  539. Order("weekday asc").
  540. Find(&schedule).Error
  541. return
  542. }
  543. func UpdateNewScheduleTemplateStatus(id int64, org_id int64) (err error) {
  544. err = readDb.Model(&models.PatientScheduleTemplateItem{}).Where("org_id = ? AND id = ?", org_id, id).Updates(map[string]interface{}{"status": 0, "mtime": time.Now().Unix()}).Error
  545. return
  546. }
  547. func GetNextWeekDaySchedule(weektype int64, weektime int64, startime int64, endtime int64, orgID int64) (schedules []*models.WeekSchedule, err error) {
  548. db := readDb.Table("xt_schedule as s ").Where("s.status =1")
  549. if orgID > 0 {
  550. db = db.Where("s.user_org_id = ?", orgID)
  551. }
  552. if startime > 0 {
  553. db = db.Where("s.schedule_date >= ?", startime)
  554. }
  555. if endtime > 0 {
  556. db = db.Where("s.schedule_date <= ?", endtime)
  557. }
  558. if weektime > 0 {
  559. db = db.Where("s.schedule_type = ?", weektime)
  560. }
  561. if weektype > 0 {
  562. db = db.Where("s.schedule_week = ?", weektype)
  563. }
  564. err = db.
  565. Preload("DeviceZone", "status = 1 ").
  566. Preload("DeviceNumber", "status = 1 ").
  567. Preload("DialysisPrescription", func(db *gorm.DB) *gorm.DB {
  568. return db.Where("status = 1").Order("id asc")
  569. }).
  570. Joins("JOIN xt_patients as p ON p.id = s.patient_id").
  571. Select("s.id, s.user_org_id, s.partition_id, s.bed_id, s.patient_id, s.schedule_date, s.schedule_type, s.schedule_week, s.mode_id, s.status, s.created_time, s.updated_time, p.name as patient").
  572. Order("s.partition_id asc").
  573. Find(&schedules).Error
  574. return schedules, err
  575. }