|
@@ -3,7 +3,9 @@ package service
|
3
|
3
|
import (
|
4
|
4
|
"XT_New/models"
|
5
|
5
|
"fmt"
|
|
6
|
+ "reflect"
|
6
|
7
|
"strings"
|
|
8
|
+ "time"
|
7
|
9
|
)
|
8
|
10
|
|
9
|
11
|
func GetDialysisTotalDatas() {
|
|
@@ -14,20 +16,20 @@ func GetNewDialysiTotal(startime int64, endtime int64, orgid int64, origin int64
|
14
|
16
|
counts := models.PatientPrescriptionCountStruct{}
|
15
|
17
|
var err error
|
16
|
18
|
if origin == 1 { //透析记录,上机为准
|
17
|
|
- db := XTReadDB().Table("xt_dialysis_order as x")
|
|
19
|
+ db := XTReadDB().Table("xt_dialysis_order as x").Joins("join xt_dialysis_prescription p on p.patient_id = x.patient_id and p.record_date = x.dialysis_date")
|
18
|
20
|
err = db.Select("count(x.id) as count").Where("x.dialysis_date >= ? and x.dialysis_date<=? and x.user_org_id = ? AND x.status = 1", startime, endtime, orgid).Scan(&counts).Error
|
19
|
21
|
return counts.Count, err
|
20
|
22
|
|
21
|
23
|
} else {
|
22
|
|
- db := XTReadDB().Table("xt_schedule as sch")
|
23
|
|
- //err = db.Select("COUNT(DISTINCT patient_id) AS total_employees").Where("x.dialysis_date >= ? and x.dialysis_date<=? and x.user_org_id = ? AND x.status = 1", startime, endtime, orgid).Scan(&counts).Error
|
24
|
24
|
var count int64
|
25
|
|
- err := db.Model(&Schedule{}).
|
26
|
|
- Select("patient_id, schedule_date").
|
|
25
|
+ var schs []models.Schedule
|
|
26
|
+ db := XTReadDB().Model(&models.Schedule{})
|
|
27
|
+ err := db.
|
27
|
28
|
Group("patient_id, schedule_date").
|
28
|
|
- Where("schedule_date >= ? AND schedule_date <= ?", startime, endtime).
|
29
|
|
- Count(&count).
|
|
29
|
+ Where("schedule_date >= ? AND schedule_date <= ? and user_org_id = ? and status = 1", startime, endtime, orgid).
|
|
30
|
+ Find(&schs).
|
30
|
31
|
Error
|
|
32
|
+ count = int64(len(schs))
|
31
|
33
|
return count, err
|
32
|
34
|
|
33
|
35
|
}
|
|
@@ -237,17 +239,7 @@ func GetNewDialysisCountMode(starttime int64, endtime int64, orgid int64, origin
|
237
|
239
|
return counts, err
|
238
|
240
|
|
239
|
241
|
} else {
|
240
|
|
- db := readDb.Table("xt_schedule as o").Where("o.status = 1").Select("patient_id, schedule_date").Group("patient_id, schedule_date,mode_id")
|
241
|
|
- if starttime > 0 {
|
242
|
|
- db = db.Where("o.schedule_date >= ?", starttime)
|
243
|
|
- }
|
244
|
|
- if endtime > 0 {
|
245
|
|
- db = db.Where("o.schedule_date <= ?", endtime)
|
246
|
|
- }
|
247
|
|
- if orgid > 0 {
|
248
|
|
- db = db.Where("o.user_org_id = ?", orgid)
|
249
|
|
- }
|
250
|
|
- err = db.Select("o.mode_id,count(o.mode_id) as count").Scan(&counts).Error
|
|
242
|
+ err = readDb.Raw("select mode_id, count(aa.`mode_id`) as count from xt_schedule aa join (SELECT DISTINCT o.patient_id, o.`schedule_date` FROM xt_schedule AS o WHERE o.status = 1 AND o.schedule_date >= ? AND o.schedule_date <= ? AND o.user_org_id = ?) as b on aa.`patient_id` = b.`patient_id` and aa.`schedule_date` = b.`schedule_date` where aa.`status` = 1 and aa.schedule_date >= ? AND aa.schedule_date <= ? AND aa.user_org_id = ? Group by aa.`mode_id`", starttime, endtime, orgid, starttime, endtime, orgid).Find(&counts).Error
|
251
|
243
|
return counts, err
|
252
|
244
|
|
253
|
245
|
}
|
|
@@ -255,28 +247,52 @@ func GetNewDialysisCountMode(starttime int64, endtime int64, orgid int64, origin
|
255
|
247
|
}
|
256
|
248
|
|
257
|
249
|
func GetNewDialysisCountModeTwo(starttime int64, endtime int64, orgid int64, origin int64, mode_id int64) (counts models.CustomDialysisData, err error) {
|
|
250
|
+
|
|
251
|
+ // 将时间戳转换为time.Time类型
|
|
252
|
+ t := time.Unix(starttime, 0)
|
|
253
|
+
|
|
254
|
+ // 使用布局定义格式化时间
|
|
255
|
+ layout := "2006-01-02"
|
|
256
|
+
|
|
257
|
+ // 将时间格式化为字符串
|
|
258
|
+ startDate := t.Format(layout) + " 00:00:00"
|
|
259
|
+
|
|
260
|
+ t2 := time.Unix(endtime, 0)
|
|
261
|
+
|
|
262
|
+ // 使用布局定义格式化时间
|
|
263
|
+ //layout := "2006-01-02"
|
|
264
|
+
|
|
265
|
+ // 将时间格式化为字符串
|
|
266
|
+ endDate := t2.Format(layout) + " 00:00:00"
|
|
267
|
+ //fmt.Println(formattedDate)
|
|
268
|
+
|
|
269
|
+ // 将日期字符串解析为time.Time类型
|
|
270
|
+ //start, _ := time.Parse("2006-01-02 15:04:05", formattedDate)
|
|
271
|
+ //starttime = start.Unix()
|
|
272
|
+ //fmt.Println(starttime)
|
|
273
|
+
|
258
|
274
|
if origin == 1 {
|
259
|
275
|
db := readDb.Table("xt_dialysis_order as o").Where("o.status = 1")
|
260
|
276
|
if starttime > 0 {
|
261
|
|
- db = db.Where("o.dialysis_date >=?", starttime)
|
|
277
|
+ db = db.Where("DATE_FORMAT(FROM_UNIXTIME(o.dialysis_date), '%Y-%m-%d %H:%i:%s') >= ?", startDate)
|
262
|
278
|
}
|
263
|
279
|
if endtime > 0 {
|
264
|
|
- db = db.Where("o.dialysis_date<=?", endtime)
|
|
280
|
+ db = db.Where("DATE_FORMAT(FROM_UNIXTIME(o.dialysis_date), '%Y-%m-%d %H:%i:%s') <= ?", endDate)
|
265
|
281
|
}
|
266
|
282
|
if orgid > 0 {
|
267
|
283
|
db = db.Where("o.user_org_id = ?", orgid)
|
268
|
284
|
}
|
269
|
285
|
|
270
|
|
- err = db.Select("s.mode_id,count(s.mode_id) as count").Joins("join xt_dialysis_prescription as s on s.patient_id = o.patient_id and s.record_date = o.dialysis_date and s.status= 1 AND s.record_date >= ? AND s.record_date <= ? AND s.mode_id = ? ", starttime, endtime, mode_id).Group("s.mode_id").Scan(&counts).Error
|
|
286
|
+ err = db.Select("s.mode_id,count(s.mode_id) as count").Joins("join xt_dialysis_prescription as s on s.patient_id = o.patient_id and s.record_date = o.dialysis_date and s.status= 1 AND DATE_FORMAT(FROM_UNIXTIME(s.record_date), '%Y-%m-%d %H:%i:%s') >= ? AND DATE_FORMAT(FROM_UNIXTIME(s.record_date), '%Y-%m-%d %H:%i:%s') <= ? AND s.mode_id = ? ", startDate, endDate, mode_id).Group("s.mode_id").Scan(&counts).Error
|
271
|
287
|
return counts, err
|
272
|
288
|
|
273
|
289
|
} else {
|
274
|
|
- db := readDb.Table("xt_schedule as o").Where("o.status = 1").Select("patient_id, schedule_date").Group("patient_id, schedule_date,mode_id")
|
|
290
|
+ db := readDb.Table("xt_schedule as o").Where("o.status = 1").Select("patient_id, schedule_date").Group("mode_id")
|
275
|
291
|
if starttime > 0 {
|
276
|
|
- db = db.Where("o.schedule_date >= ?", starttime)
|
|
292
|
+ db = db.Where("DATE_FORMAT(FROM_UNIXTIME(o.schedule_date),'%Y-%m-%d %H:%i:%s') >= ?", startDate)
|
277
|
293
|
}
|
278
|
294
|
if endtime > 0 {
|
279
|
|
- db = db.Where("o.schedule_date <= ?", endtime)
|
|
295
|
+ db = db.Where("DATE_FORMAT(FROM_UNIXTIME(o.schedule_date),'%Y-%m-%d %H:%i:%s') <= ?", endDate)
|
280
|
296
|
}
|
281
|
297
|
if orgid > 0 {
|
282
|
298
|
db = db.Where("o.user_org_id = ?", orgid)
|
|
@@ -471,116 +487,185 @@ func GetDialysisCompletionTotal(org_id int64, start_time int64, end_time int64)
|
471
|
487
|
xt_assessment_after_dislysis a ON o.dialysis_date = a.assessment_date AND o.patient_id = a.patient_id AND a.user_org_id = ?
|
472
|
488
|
WHERE
|
473
|
489
|
o.stage = 2 AND o.user_org_id = ? AND o.dialysis_date >= ? AND o.dialysis_date <= ?
|
474
|
|
- GROUP BY
|
475
|
|
- dialysis_status;
|
476
|
490
|
`
|
477
|
|
- if err := readDb.Raw(query, org_id, org_id, org_id, start_time, end_time).Scan(&Count).Error; err != nil {
|
|
491
|
+ if err := readDb.Raw(query, org_id, org_id, org_id, start_time, end_time).Count(&Count).Error; err != nil {
|
478
|
492
|
return 0, err
|
479
|
493
|
}
|
480
|
494
|
|
481
|
495
|
return Count, nil
|
482
|
496
|
}
|
483
|
|
-func GetDialysisCompletionDetail(org_id int64, start_time int64, end_time int64, mode int64, limit int64, page int64) (date []*CustomData, total int64, err error) {
|
|
497
|
+func GetDialysisCompletionDetail(org_id int64, start_time int64, end_time int64, mode int64, limit int64, page int64) (results []interface{}, total int64, err error) {
|
484
|
498
|
var query string
|
485
|
499
|
if mode == 0 {
|
486
|
500
|
query = `
|
487
|
|
- SELECT
|
488
|
|
- p.dialysis_no as dialysis_no,
|
489
|
|
- p.name as patient_name,
|
490
|
|
- FROM_UNIXTIME(o.dialysis_date) as dialysis_date,
|
491
|
|
- CONCAT(p.dialysis_duration_hour, 'h', p.dialysis_duration_minute,'min') as dialysis_duration,
|
492
|
|
- CONCAT(a.actual_treatment_hour, 'h', a.actual_treatment_minute,'min') as actual_duration,
|
493
|
|
- ABS(TIMESTAMPDIFF(MINUTE, MAKETIME(p.dialysis_duration_hour, p.dialysis_duration_minute, 0), MAKETIME(a.actual_treatment_hour, a.actual_treatment_minute, 0))) as diff,
|
494
|
|
- p.prescription_doctor as doctor,
|
495
|
|
- p.finish_nurse as nurse
|
496
|
|
- FROM
|
497
|
|
- xt_dialysis_order o
|
498
|
|
- JOIN
|
499
|
|
- xt_patients pp ON o.patient_id = pp.id AND pp.user_org_id = ?
|
500
|
|
- JOIN
|
501
|
|
- xt_dialysis_prescription p ON o.dialysis_date = p.record_date AND o.patient_id = p.patient_id AND p.user_org_id = ?
|
502
|
|
- JOIN
|
503
|
|
- xt_assessment_after_dislysis a ON o.dialysis_date = a.assessment_date AND o.patient_id = a.patient_id AND a.user_org_id = ?
|
504
|
|
- WHERE
|
505
|
|
- o.stage = 2 AND o.user_org_id = ? AND o.dialysis_date >= ? AND o.dialysis_date <= ?
|
506
|
|
- `
|
|
501
|
+ SELECT
|
|
502
|
+ p.dialysis_no as dialysis_no,
|
|
503
|
+ p.name as patient_name,
|
|
504
|
+ FROM_UNIXTIME(o.dialysis_date) as dialysis_date,
|
|
505
|
+ CONCAT(p.dialysis_duration_hour, 'h', p.dialysis_duration_minute,'min') as dialysis_duration,
|
|
506
|
+ CONCAT(a.actual_treatment_hour, 'h', a.actual_treatment_minute,'min') as actual_duration,
|
|
507
|
+ ABS(TIMESTAMPDIFF(MINUTE, MAKETIME(p.dialysis_duration_hour, p.dialysis_duration_minute, 0), MAKETIME(a.actual_treatment_hour, a.actual_treatment_minute, 0))) as diff,
|
|
508
|
+ p.prescription_doctor as doctor,
|
|
509
|
+ o.finish_nurse as nurse
|
|
510
|
+ FROM
|
|
511
|
+ xt_dialysis_order o
|
|
512
|
+ JOIN
|
|
513
|
+ xt_patients pp ON o.patient_id = pp.id AND pp.user_org_id = ?
|
|
514
|
+ JOIN
|
|
515
|
+ xt_dialysis_prescription p ON o.dialysis_date = p.record_date AND o.patient_id = p.patient_id AND p.user_org_id = ?
|
|
516
|
+ JOIN
|
|
517
|
+ xt_assessment_after_dislysis a ON o.dialysis_date = a.assessment_date AND o.patient_id = a.patient_id AND a.user_org_id = ?
|
|
518
|
+ WHERE
|
|
519
|
+ o.stage = 2 AND o.user_org_id = ? AND o.dialysis_date >= ? AND o.dialysis_date <= ?
|
|
520
|
+ `
|
|
521
|
+
|
|
522
|
+ readDb.Table("xt_dialysis_order o").
|
|
523
|
+ Joins("JOIN xt_patients pp ON o.patient_id = pp.id AND pp.user_org_id = ?", org_id).
|
|
524
|
+ Joins("JOIN xt_dialysis_prescription p ON o.dialysis_date = p.record_date AND o.patient_id = p.patient_id AND p.user_org_id = ?", org_id).
|
|
525
|
+ Joins("JOIN xt_assessment_after_dislysis a ON o.dialysis_date = a.assessment_date AND o.patient_id = a.patient_id AND a.user_org_id = ?", org_id).
|
|
526
|
+ Where("o.stage = 2 AND o.user_org_id = ? AND o.dialysis_date >= ? AND o.dialysis_date <= ?", org_id, start_time, end_time).Count(&total)
|
507
|
527
|
|
508
|
528
|
} else if mode == 1 {
|
509
|
529
|
query = `
|
510
|
|
- SELECT
|
511
|
|
- p.dialysis_no as dialysis_no,
|
512
|
|
- p.name as patient_name,
|
513
|
|
- FROM_UNIXTIME(o.dialysis_date) as dialysis_date,
|
514
|
|
- CONCAT(p.dialysis_duration_hour, 'h', p.dialysis_duration_minute,'min') as dialysis_duration,
|
515
|
|
- CONCAT(a.actual_treatment_hour, 'h', a.actual_treatment_minute,'min') as actual_duration,
|
516
|
|
- ABS(TIMESTAMPDIFF(MINUTE, MAKETIME(p.dialysis_duration_hour, p.dialysis_duration_minute, 0), MAKETIME(a.actual_treatment_hour, a.actual_treatment_minute, 0))) as diff,
|
517
|
|
- p.prescription_doctor as doctor,
|
518
|
|
- p.finish_nurse as nurse
|
519
|
|
- FROM
|
520
|
|
- xt_dialysis_order o
|
521
|
|
- JOIN
|
522
|
|
- xt_patients pp ON o.patient_id = pp.id AND pp.user_org_id = ?
|
523
|
|
- JOIN
|
524
|
|
- xt_dialysis_prescription p ON o.dialysis_date = p.record_date AND o.patient_id = p.patient_id AND p.user_org_id = ?
|
525
|
|
- JOIN
|
526
|
|
- xt_assessment_after_dislysis a ON o.dialysis_date = a.assessment_date AND o.patient_id = a.patient_id AND a.user_org_id = ?
|
527
|
|
- WHERE
|
528
|
|
- o.stage = 2 AND o.user_org_id = ? AND o.dialysis_date >= ? AND o.dialysis_date <= ? AND ABS(TIMESTAMPDIFF(MINUTE, MAKETIME(p.dialysis_duration_hour, p.dialysis_duration_minute, 0), MAKETIME(a.actual_treatment_hour, a.actual_treatment_minute, 0))) <= 15
|
529
|
|
- `
|
|
530
|
+ SELECT
|
|
531
|
+ pp.dialysis_no as dialysis_no,
|
|
532
|
+ pp.name as patient_name,
|
|
533
|
+ FROM_UNIXTIME(o.dialysis_date) as dialysis_date,
|
|
534
|
+ CONCAT(p.dialysis_duration_hour, 'h', p.dialysis_duration_minute,'min') as dialysis_duration,
|
|
535
|
+ CONCAT(a.actual_treatment_hour, 'h', a.actual_treatment_minute,'min') as actual_duration,
|
|
536
|
+ ABS(TIMESTAMPDIFF(MINUTE, MAKETIME(p.dialysis_duration_hour, p.dialysis_duration_minute, 0), MAKETIME(a.actual_treatment_hour, a.actual_treatment_minute, 0))) as diff,
|
|
537
|
+ p.prescription_doctor as doctor,
|
|
538
|
+ o.finish_nurse as nurse
|
|
539
|
+ FROM
|
|
540
|
+ xt_dialysis_order o
|
|
541
|
+ JOIN
|
|
542
|
+ xt_patients pp ON o.patient_id = pp.id AND pp.user_org_id = ?
|
|
543
|
+ JOIN
|
|
544
|
+ xt_dialysis_prescription p ON o.dialysis_date = p.record_date AND o.patient_id = p.patient_id AND p.user_org_id = ?
|
|
545
|
+ JOIN
|
|
546
|
+ xt_assessment_after_dislysis a ON o.dialysis_date = a.assessment_date AND o.patient_id = a.patient_id AND a.user_org_id = ?
|
|
547
|
+ WHERE
|
|
548
|
+ o.stage = 2 AND o.user_org_id = ? AND o.dialysis_date >= ? AND o.dialysis_date <= ? AND ABS(TIMESTAMPDIFF(MINUTE, MAKETIME(p.dialysis_duration_hour, p.dialysis_duration_minute, 0), MAKETIME(a.actual_treatment_hour, a.actual_treatment_minute, 0))) <= 15
|
|
549
|
+ `
|
|
550
|
+ readDb.Table("xt_dialysis_order o").
|
|
551
|
+ Joins("JOIN xt_patients pp ON o.patient_id = pp.id AND pp.user_org_id = ?", org_id).
|
|
552
|
+ Joins("JOIN xt_dialysis_prescription p ON o.dialysis_date = p.record_date AND o.patient_id = p.patient_id AND p.user_org_id = ?", org_id).
|
|
553
|
+ Joins("JOIN xt_assessment_after_dislysis a ON o.dialysis_date = a.assessment_date AND o.patient_id = a.patient_id AND a.user_org_id = ?", org_id).
|
|
554
|
+ Where("o.stage = 2 AND o.user_org_id = ? AND o.dialysis_date >= ? AND o.dialysis_date <= ? and ABS(TIMESTAMPDIFF(MINUTE, MAKETIME(p.dialysis_duration_hour, p.dialysis_duration_minute, 0), MAKETIME(a.actual_treatment_hour, a.actual_treatment_minute, 0))) <= 15", org_id, start_time, end_time).Count(&total)
|
530
|
555
|
|
531
|
556
|
} else if mode == 2 {
|
532
|
557
|
query = `
|
533
|
|
- SELECT
|
534
|
|
- p.dialysis_no as dialysis_no,
|
535
|
|
- p.name as patient_name,
|
536
|
|
- FROM_UNIXTIME(o.dialysis_date) as dialysis_date,
|
537
|
|
- CONCAT(p.dialysis_duration_hour, 'h', p.dialysis_duration_minute,'min') as dialysis_duration,
|
538
|
|
- CONCAT(a.actual_treatment_hour, 'h', a.actual_treatment_minute,'min') as actual_duration,
|
539
|
|
- ABS(TIMESTAMPDIFF(MINUTE, MAKETIME(p.dialysis_duration_hour, p.dialysis_duration_minute, 0), MAKETIME(a.actual_treatment_hour, a.actual_treatment_minute, 0))) as diff,
|
540
|
|
- p.prescription_doctor as doctor,
|
541
|
|
- p.finish_nurse as nurse
|
542
|
|
- FROM
|
543
|
|
- xt_dialysis_order o
|
544
|
|
- JOIN
|
545
|
|
- xt_patients pp ON o.patient_id = pp.id AND pp.user_org_id = ?
|
546
|
|
- JOIN
|
547
|
|
- xt_dialysis_prescription p ON o.dialysis_date = p.record_date AND o.patient_id = p.patient_id AND p.user_org_id = ?
|
548
|
|
- JOIN
|
549
|
|
- xt_assessment_after_dislysis a ON o.dialysis_date = a.assessment_date AND o.patient_id = a.patient_id AND a.user_org_id = ?
|
550
|
|
- WHERE
|
551
|
|
- o.stage = 2 AND o.user_org_id = ? AND o.dialysis_date >= ? AND o.dialysis_date <= ? AND TIMESTAMPDIFF(MINUTE, MAKETIME(p.dialysis_duration_hour, p.dialysis_duration_minute, 0), MAKETIME(a.actual_treatment_hour, a.actual_treatment_minute, 0)) < 0
|
552
|
|
- `
|
|
558
|
+ SELECT
|
|
559
|
+ pp.dialysis_no as dialysis_no,
|
|
560
|
+ pp.name as patient_name,
|
|
561
|
+ FROM_UNIXTIME(o.dialysis_date) as dialysis_date,
|
|
562
|
+ CONCAT(p.dialysis_duration_hour, 'h', p.dialysis_duration_minute,'min') as dialysis_duration,
|
|
563
|
+ CONCAT(a.actual_treatment_hour, 'h', a.actual_treatment_minute,'min') as actual_duration,
|
|
564
|
+ ABS(TIMESTAMPDIFF(MINUTE, MAKETIME(p.dialysis_duration_hour, p.dialysis_duration_minute, 0), MAKETIME(a.actual_treatment_hour, a.actual_treatment_minute, 0))) as diff,
|
|
565
|
+ p.prescription_doctor as doctor,
|
|
566
|
+ o.finish_nurse as nurse
|
|
567
|
+ FROM
|
|
568
|
+ xt_dialysis_order o
|
|
569
|
+ JOIN
|
|
570
|
+ xt_patients pp ON o.patient_id = pp.id AND pp.user_org_id = ?
|
|
571
|
+ JOIN
|
|
572
|
+ xt_dialysis_prescription p ON o.dialysis_date = p.record_date AND o.patient_id = p.patient_id AND p.user_org_id = ?
|
|
573
|
+ JOIN
|
|
574
|
+ xt_assessment_after_dislysis a ON o.dialysis_date = a.assessment_date AND o.patient_id = a.patient_id AND a.user_org_id = ?
|
|
575
|
+ WHERE
|
|
576
|
+ o.stage = 2 AND o.user_org_id = ? AND o.dialysis_date >= ? AND o.dialysis_date <= ? AND TIMESTAMPDIFF(MINUTE, MAKETIME(p.dialysis_duration_hour, p.dialysis_duration_minute, 0), MAKETIME(a.actual_treatment_hour, a.actual_treatment_minute, 0)) < 0
|
|
577
|
+ `
|
|
578
|
+ readDb.Table("xt_dialysis_order o").
|
|
579
|
+ Joins("JOIN xt_patients pp ON o.patient_id = pp.id AND pp.user_org_id = ?", org_id).
|
|
580
|
+ Joins("JOIN xt_dialysis_prescription p ON o.dialysis_date = p.record_date AND o.patient_id = p.patient_id AND p.user_org_id = ?", org_id).
|
|
581
|
+ Joins("JOIN xt_assessment_after_dislysis a ON o.dialysis_date = a.assessment_date AND o.patient_id = a.patient_id AND a.user_org_id = ?", org_id).
|
|
582
|
+ Where("o.stage = 2 AND o.user_org_id = ? AND o.dialysis_date >= ? AND o.dialysis_date <= ? and TIMESTAMPDIFF(MINUTE, MAKETIME(p.dialysis_duration_hour, p.dialysis_duration_minute, 0), MAKETIME(a.actual_treatment_hour, a.actual_treatment_minute, 0)) < 0", org_id, start_time, end_time).Count(&total)
|
553
|
583
|
|
554
|
584
|
} else if mode == 3 {
|
555
|
585
|
query = `
|
556
|
|
- SELECT
|
557
|
|
- p.dialysis_no as dialysis_no,
|
558
|
|
- p.name as patient_name,
|
559
|
|
- FROM_UNIXTIME(o.dialysis_date) as dialysis_date,
|
560
|
|
- CONCAT(p.dialysis_duration_hour, 'h', p.dialysis_duration_minute,'min') as dialysis_duration,
|
561
|
|
- CONCAT(a.actual_treatment_hour, 'h', a.actual_treatment_minute,'min') as actual_duration,
|
562
|
|
- ABS(TIMESTAMPDIFF(MINUTE, MAKETIME(p.dialysis_duration_hour, p.dialysis_duration_minute, 0), MAKETIME(a.actual_treatment_hour, a.actual_treatment_minute, 0))) as diff,
|
563
|
|
- p.prescription_doctor as doctor,
|
564
|
|
- p.finish_nurse as nurse
|
565
|
|
- FROM
|
566
|
|
- xt_dialysis_order o
|
567
|
|
- JOIN
|
568
|
|
- xt_patients pp ON o.patient_id = pp.id AND pp.user_org_id = ?
|
569
|
|
- JOIN
|
570
|
|
- xt_dialysis_prescription p ON o.dialysis_date = p.record_date AND o.patient_id = p.patient_id AND p.user_org_id = ?
|
571
|
|
- JOIN
|
572
|
|
- xt_assessment_after_dislysis a ON o.dialysis_date = a.assessment_date AND o.patient_id = a.patient_id AND a.user_org_id = ?
|
573
|
|
- WHERE
|
574
|
|
- o.stage = 2 AND o.user_org_id = ? AND o.dialysis_date >= ? AND o.dialysis_date <= ? AND TIMESTAMPDIFF(MINUTE, MAKETIME(p.dialysis_duration_hour, p.dialysis_duration_minute, 0), MAKETIME(a.actual_treatment_hour, a.actual_treatment_minute, 0)) > 15
|
575
|
|
- `
|
|
586
|
+ SELECT
|
|
587
|
+ pp.dialysis_no as dialysis_no,
|
|
588
|
+ pp.name as patient_name,
|
|
589
|
+ FROM_UNIXTIME(o.dialysis_date) as dialysis_date,
|
|
590
|
+ CONCAT(p.dialysis_duration_hour, 'h', p.dialysis_duration_minute,'min') as dialysis_duration,
|
|
591
|
+ CONCAT(a.actual_treatment_hour, 'h', a.actual_treatment_minute,'min') as actual_duration,
|
|
592
|
+ ABS(TIMESTAMPDIFF(MINUTE, MAKETIME(p.dialysis_duration_hour, p.dialysis_duration_minute, 0), MAKETIME(a.actual_treatment_hour, a.actual_treatment_minute, 0))) as diff,
|
|
593
|
+ p.prescription_doctor as doctor,
|
|
594
|
+ o.finish_nurse as nurse
|
|
595
|
+ FROM
|
|
596
|
+ xt_dialysis_order o
|
|
597
|
+ JOIN
|
|
598
|
+ xt_patients pp ON o.patient_id = pp.id AND pp.user_org_id = ?
|
|
599
|
+ JOIN
|
|
600
|
+ xt_dialysis_prescription p ON o.dialysis_date = p.record_date AND o.patient_id = p.patient_id AND p.user_org_id = ?
|
|
601
|
+ JOIN
|
|
602
|
+ xt_assessment_after_dislysis a ON o.dialysis_date = a.assessment_date AND o.patient_id = a.patient_id AND a.user_org_id = ?
|
|
603
|
+ WHERE
|
|
604
|
+ o.stage = 2 AND o.user_org_id = ? AND o.dialysis_date >= ? AND o.dialysis_date <= ? AND TIMESTAMPDIFF(MINUTE, MAKETIME(p.dialysis_duration_hour, p.dialysis_duration_minute, 0), MAKETIME(a.actual_treatment_hour, a.actual_treatment_minute, 0)) > 15
|
|
605
|
+ `
|
|
606
|
+ readDb.Table("xt_dialysis_order o").
|
|
607
|
+ Joins("JOIN xt_patients pp ON o.patient_id = pp.id AND pp.user_org_id = ?", org_id).
|
|
608
|
+ Joins("JOIN xt_dialysis_prescription p ON o.dialysis_date = p.record_date AND o.patient_id = p.patient_id AND p.user_org_id = ?", org_id).
|
|
609
|
+ Joins("JOIN xt_assessment_after_dislysis a ON o.dialysis_date = a.assessment_date AND o.patient_id = a.patient_id AND a.user_org_id = ?", org_id).
|
|
610
|
+ Where("o.stage = 2 AND o.user_org_id = ? AND o.dialysis_date >= ? AND o.dialysis_date <= ? and TIMESTAMPDIFF(MINUTE, MAKETIME(p.dialysis_duration_hour, p.dialysis_duration_minute, 0), MAKETIME(a.actual_treatment_hour, a.actual_treatment_minute, 0)) > 15", org_id, start_time, end_time).Count(&total)
|
|
611
|
+
|
576
|
612
|
}
|
|
613
|
+
|
577
|
614
|
offset := (page - 1) * limit
|
578
|
615
|
|
579
|
|
- if err := readDb.Raw(query, org_id, org_id, org_id, org_id, start_time, end_time).Count(&total).Offset(offset).Limit(limit).Scan(&date).Error; err != nil {
|
580
|
|
- return nil, 0, err
|
|
616
|
+ rows, err := readDb.Raw(query, org_id, org_id, org_id, org_id, start_time, end_time).Offset(offset).Limit(limit).Rows()
|
|
617
|
+ if err != nil {
|
|
618
|
+ fmt.Println(err)
|
581
|
619
|
}
|
|
620
|
+ defer rows.Close()
|
582
|
621
|
|
583
|
|
- return
|
|
622
|
+ // Define a map to hold the dynamic fields
|
|
623
|
+ fields := map[string]interface{}{
|
|
624
|
+ "dialysis_no": "",
|
|
625
|
+ "patient_name": "",
|
|
626
|
+ "dialysis_date": "",
|
|
627
|
+ "dialysis_duration": "",
|
|
628
|
+ "actual_duration": "",
|
|
629
|
+ "diff": 0,
|
|
630
|
+ "doctor": "",
|
|
631
|
+ "nurse": "",
|
|
632
|
+ }
|
|
633
|
+
|
|
634
|
+ // Create the dynamic struct type
|
|
635
|
+ dynamicStructType := createDynamicStruct(fields)
|
|
636
|
+
|
|
637
|
+ // Slice to hold the results
|
|
638
|
+ //var results []interface{}
|
|
639
|
+
|
|
640
|
+ // Iterate over the rows and scan into the dynamic struct
|
|
641
|
+ for rows.Next() {
|
|
642
|
+ // Create a new instance of the dynamic struct
|
|
643
|
+ result := reflect.New(dynamicStructType).Interface()
|
|
644
|
+
|
|
645
|
+ // Create a slice of pointers to the fields in the struct
|
|
646
|
+ fieldPtrs := []interface{}{
|
|
647
|
+ reflect.ValueOf(result).Elem().FieldByName("Dialysis_no").Addr().Interface(),
|
|
648
|
+ reflect.ValueOf(result).Elem().FieldByName("Patient_name").Addr().Interface(),
|
|
649
|
+ reflect.ValueOf(result).Elem().FieldByName("Dialysis_date").Addr().Interface(),
|
|
650
|
+ reflect.ValueOf(result).Elem().FieldByName("Dialysis_duration").Addr().Interface(),
|
|
651
|
+ reflect.ValueOf(result).Elem().FieldByName("Actual_duration").Addr().Interface(),
|
|
652
|
+ reflect.ValueOf(result).Elem().FieldByName("Diff").Addr().Interface(),
|
|
653
|
+ reflect.ValueOf(result).Elem().FieldByName("Doctor").Addr().Interface(),
|
|
654
|
+ reflect.ValueOf(result).Elem().FieldByName("Nurse").Addr().Interface(),
|
|
655
|
+ }
|
|
656
|
+
|
|
657
|
+ // Scan the row into the struct
|
|
658
|
+ if err := rows.Scan(fieldPtrs...); err != nil {
|
|
659
|
+ //log.Fatalf("failed to scan row: %v", err)
|
|
660
|
+ fmt.Println(err)
|
|
661
|
+
|
|
662
|
+ }
|
|
663
|
+
|
|
664
|
+ // Append the result to the slice
|
|
665
|
+ results = append(results, result)
|
|
666
|
+ }
|
|
667
|
+
|
|
668
|
+ return results, total, err
|
584
|
669
|
}
|
585
|
670
|
|
586
|
671
|
type QualityControlStandard struct {
|
|
@@ -612,7 +697,7 @@ func GetLatestInspectionValues(org_id int64, yearMonth string) ([]map[string]int
|
612
|
697
|
|
613
|
698
|
var selectFields []string
|
614
|
699
|
for _, standard := range standards {
|
615
|
|
- field := fmt.Sprintf("MAX(CASE WHEN i.item_name = %s THEN i.inspect_value END) AS `%s`",
|
|
700
|
+ field := fmt.Sprintf("IFNULL(MAX(CASE WHEN i.item_name = %s THEN i.inspect_value END),'') AS `%s`",
|
616
|
701
|
"'"+standard.ItemName+"'", standard.ItemName)
|
617
|
702
|
selectFields = append(selectFields, field)
|
618
|
703
|
}
|
|
@@ -665,3 +750,15 @@ func GetLatestInspectionValues(org_id int64, yearMonth string) ([]map[string]int
|
665
|
750
|
|
666
|
751
|
return results, nil
|
667
|
752
|
}
|
|
753
|
+
|
|
754
|
+func createDynamicStruct(fields map[string]interface{}) reflect.Type {
|
|
755
|
+ var structFields []reflect.StructField
|
|
756
|
+ for name, value := range fields {
|
|
757
|
+ structFields = append(structFields, reflect.StructField{
|
|
758
|
+ Name: strings.Title(name),
|
|
759
|
+ Type: reflect.TypeOf(value),
|
|
760
|
+ Tag: reflect.StructTag(fmt.Sprintf(`json:"%s"`, name)),
|
|
761
|
+ })
|
|
762
|
+ }
|
|
763
|
+ return reflect.StructOf(structFields)
|
|
764
|
+}
|