schedule_service.go 29KB

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