Browse Source

Merge branch 'xt_statistics_branch' of http://git.shengws.com/csx/XT_New into xt_statistics_branch

XMLWAN 4 years ago
parent
commit
5118dbccaf

+ 0 - 10
controllers/pc_index_evaluation_api_controller.go View File

147
 			} else { //是,读集成过来的参考值
147
 			} else { //是,读集成过来的参考值
148
 				reference, _ := statistics_service.FindProcjectInspectionReference(adminUserInfo.CurrentOrgId, project_id, item_id)
148
 				reference, _ := statistics_service.FindProcjectInspectionReference(adminUserInfo.CurrentOrgId, project_id, item_id)
149
 				range_value = reference.RangeMin + "," + reference.RangeMax
149
 				range_value = reference.RangeMin + "," + reference.RangeMax
150
-
151
 			}
150
 			}
152
-
153
 		} else { //有配置
151
 		} else { //有配置
154
-
155
 			range_value = qcs.MinRange + "," + qcs.LargeRange
152
 			range_value = qcs.MinRange + "," + qcs.LargeRange
156
-
157
 		}
153
 		}
158
 
154
 
159
 	} else {
155
 	} else {
160
-
161
 		inspection, _ := statistics_service.FindOrgInspectionReferenceRangeTypeValue(adminUserInfo.CurrentOrgId, project_id, item_id)
156
 		inspection, _ := statistics_service.FindOrgInspectionReferenceRangeTypeValue(adminUserInfo.CurrentOrgId, project_id, item_id)
162
 		for _, item := range inspection {
157
 		for _, item := range inspection {
163
 			if len(range_value) == 0 {
158
 			if len(range_value) == 0 {
290
 			if count <= 0 {                                                                   //不是,读系统参考值
285
 			if count <= 0 {                                                                   //不是,读系统参考值
291
 				reference, _ := statistics_service.FindProcjectInspectionReference(0, project_id, item_id)
286
 				reference, _ := statistics_service.FindProcjectInspectionReference(0, project_id, item_id)
292
 				range_value = reference.RangeMin + "," + reference.RangeMax
287
 				range_value = reference.RangeMin + "," + reference.RangeMax
293
-
294
 			} else { //是,读集成过来的参考值
288
 			} else { //是,读集成过来的参考值
295
 				reference, _ := statistics_service.FindProcjectInspectionReference(adminUserInfo.CurrentOrgId, project_id, item_id)
289
 				reference, _ := statistics_service.FindProcjectInspectionReference(adminUserInfo.CurrentOrgId, project_id, item_id)
296
 				range_value = reference.RangeMin + "," + reference.RangeMax
290
 				range_value = reference.RangeMin + "," + reference.RangeMax
297
-
298
 			}
291
 			}
299
 
292
 
300
 		} else { //有配置
293
 		} else { //有配置
301
-
302
 			range_value = qcs.MinRange + "," + qcs.LargeRange
294
 			range_value = qcs.MinRange + "," + qcs.LargeRange
303
-
304
 		}
295
 		}
305
 
296
 
306
 	} else {
297
 	} else {
307
-
308
 		inspection, _ := statistics_service.FindOrgInspectionReferenceRangeTypeValue(adminUserInfo.CurrentOrgId, project_id, item_id)
298
 		inspection, _ := statistics_service.FindOrgInspectionReferenceRangeTypeValue(adminUserInfo.CurrentOrgId, project_id, item_id)
309
 		for _, item := range inspection {
299
 		for _, item := range inspection {
310
 			if len(range_value) == 0 {
300
 			if len(range_value) == 0 {

+ 164 - 33
service/statistics_service/index_evaluation_service.go View File

5
 	"XT_New/service"
5
 	"XT_New/service"
6
 	"fmt"
6
 	"fmt"
7
 	"github.com/jinzhu/gorm"
7
 	"github.com/jinzhu/gorm"
8
+	"math"
8
 	"strconv"
9
 	"strconv"
9
 	"strings"
10
 	"strings"
10
 )
11
 )
122
 	db.Table("xt_dialysis_prescription as p").Where("p.user_org_id=? AND p.status = 1 AND p.patient_id = ? AND p.created_time >= ? and p.created_time <= ? ", user_org_id, patient_id, start_time, end_time).Count(&total)
123
 	db.Table("xt_dialysis_prescription as p").Where("p.user_org_id=? AND p.status = 1 AND p.patient_id = ? AND p.created_time >= ? and p.created_time <= ? ", user_org_id, patient_id, start_time, end_time).Count(&total)
123
 
124
 
124
 	for _, item := range items {
125
 	for _, item := range items {
125
-		float_value, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", float64(item.Total)/float64(total)), 64)
126
-		item.Ratio = strconv.FormatInt(int64(float_value*100), 10)
126
+		if math.IsNaN(float64(item.Total) / float64(total)) {
127
+			item.Ratio = "0"
128
+		} else {
129
+			float_value, _ := strconv.ParseFloat(fmt.Sprintf("%.1f", (float64(item.Total)/float64(total))*100), 64)
130
+			item.Ratio = strconv.FormatFloat(float_value, 'f', 1, 32)
131
+		}
127
 	}
132
 	}
128
 	if tempErr != nil {
133
 	if tempErr != nil {
129
 		return nil, err
134
 		return nil, err
304
 	db := service.XTReadDB()
309
 	db := service.XTReadDB()
305
 	var items []*otherItemAmount
310
 	var items []*otherItemAmount
306
 	var tempErr error
311
 	var tempErr error
307
-	//var total int64
312
+	var Total int64
308
 	switch statistics_type {
313
 	switch statistics_type {
309
 	case 1:
314
 	case 1:
315
+		db.Table("xt_assessment_before_dislysis ").Where("user_org_id=? and status=1 and  created_time >= ? and created_time <= ?", user_org_id, start_time, end_time).Count(&Total)
310
 		tempErr = db.Table("xt_assessment_before_dislysis ").Where("user_org_id=? and status=1 and  created_time >= ? and created_time <= ?", user_org_id, start_time, end_time).
316
 		tempErr = db.Table("xt_assessment_before_dislysis ").Where("user_org_id=? and status=1 and  created_time >= ? and created_time <= ?", user_org_id, start_time, end_time).
311
 			Select("CASE WHEN dry_weight < 40 THEN '小于40kg'" +
317
 			Select("CASE WHEN dry_weight < 40 THEN '小于40kg'" +
312
 				" WHEN dry_weight >= 40 AND dry_weight < 50 THEN '40~50kg'" +
318
 				" WHEN dry_weight >= 40 AND dry_weight < 50 THEN '40~50kg'" +
388
 			items = append(items, newItem)
394
 			items = append(items, newItem)
389
 		}
395
 		}
390
 
396
 
397
+		for _, item := range items {
398
+			if math.IsNaN(float64(item.Total) / float64(Total)) {
399
+				item.Ratio = "0"
400
+			} else {
401
+				float_value, _ := strconv.ParseFloat(fmt.Sprintf("%.1f", (float64(item.Total)/float64(Total))*100), 64)
402
+				item.Ratio = strconv.FormatFloat(float_value, 'f', 1, 32)
403
+			}
404
+		}
405
+
391
 		break
406
 		break
392
 	case 2:
407
 	case 2:
408
+		db.Table("xt_assessment_before_dislysis ").Where("user_org_id=? and status=1 and  created_time >= ? and created_time <= ?", user_org_id, start_time, end_time).Count(&Total)
409
+
393
 		tempErr = db.Table("xt_assessment_before_dislysis").Where("user_org_id=? and status=1 and  created_time >= ? and created_time <= ?", user_org_id, start_time, end_time).
410
 		tempErr = db.Table("xt_assessment_before_dislysis").Where("user_org_id=? and status=1 and  created_time >= ? and created_time <= ?", user_org_id, start_time, end_time).
394
 			Select("CASE WHEN weight_before < 40 THEN '小于40kg'" +
411
 			Select("CASE WHEN weight_before < 40 THEN '小于40kg'" +
395
 				" WHEN weight_before >= 40 AND weight_before < 50 THEN '40~50kg'" +
412
 				" WHEN weight_before >= 40 AND weight_before < 50 THEN '40~50kg'" +
470
 			}
487
 			}
471
 			items = append(items, newItem)
488
 			items = append(items, newItem)
472
 		}
489
 		}
490
+
491
+		for _, item := range items {
492
+			if math.IsNaN(float64(item.Total) / float64(Total)) {
493
+				item.Ratio = "0"
494
+			} else {
495
+				float_value, _ := strconv.ParseFloat(fmt.Sprintf("%.1f", (float64(item.Total)/float64(Total))*100), 64)
496
+				item.Ratio = strconv.FormatFloat(float_value, 'f', 1, 32)
497
+			}
498
+		}
499
+
473
 		break
500
 		break
474
 	case 3:
501
 	case 3:
502
+
503
+		//db.Table("xt_assessment_before_dislysis ").Where("user_org_id=? and status=1 and  created_time >= ? and created_time <= ?", user_org_id, start_time, end_time).Count(&Total)
504
+
505
+		//db.Raw("Select count(*) from `xt_assessment_before_dislysis`   LEFT JOIN  `xt_assessment_after_dislysis`  On xt_assessment_before_dislysis.`patient_id` = xt_assessment_after_dislysis.`patient_id` AND xt_assessment_before_dislysis.assessment_date = xt_assessment_after_dislysis.assessment_date AND xt_assessment_after_dislysis.weight_after != 0   Where  xt_assessment_before_dislysis.user_org_id = ? AND xt_assessment_before_dislysis.created_time >= ? AND  xt_assessment_before_dislysis.created_time <= ? Order by xt_assessment_before_dislysis.assessment_date desc", user_org_id, start_time, end_time).Count(&Total)
506
+
507
+		var newTotal int64
475
 		type weight struct {
508
 		type weight struct {
476
 			WeightAfter  float64 `json:"weight_after"`
509
 			WeightAfter  float64 `json:"weight_after"`
477
 			WeightBefore float64 `json:"weight_before"`
510
 			WeightBefore float64 `json:"weight_before"`
497
 		for _, item := range weightAdd {
530
 		for _, item := range weightAdd {
498
 			if item < 1 {
531
 			if item < 1 {
499
 				total_one++
532
 				total_one++
500
-				fmt.Println(total_one)
501
 
533
 
502
 			}
534
 			}
503
 
535
 
504
 			if item >= 1 && item < 2 {
536
 			if item >= 1 && item < 2 {
505
 				total_two++
537
 				total_two++
506
-				fmt.Println(total_two)
507
 
538
 
508
 			}
539
 			}
509
 
540
 
510
 			if item >= 2 && item < 3 {
541
 			if item >= 2 && item < 3 {
511
 				total_three++
542
 				total_three++
512
-				fmt.Println(total_three)
513
 
543
 
514
 			}
544
 			}
515
 
545
 
516
 			if item >= 3 && item <= 4 {
546
 			if item >= 3 && item <= 4 {
517
 				total_four++
547
 				total_four++
518
-				fmt.Println(total_four)
519
 
548
 
520
 			}
549
 			}
521
 
550
 
522
 			if item > 4 {
551
 			if item > 4 {
523
 				total_five++
552
 				total_five++
524
-				fmt.Println(total_five)
525
 
553
 
526
 			}
554
 			}
527
 		}
555
 		}
528
 
556
 
557
+		newTotal = total_one + total_two + total_three + total_four + total_five
558
+
529
 		newItem := &otherItemAmount{
559
 		newItem := &otherItemAmount{
530
 			Total: total_one,
560
 			Total: total_one,
531
 			Name:  "小于1kg",
561
 			Name:  "小于1kg",
558
 		items = append(items, newItem3)
588
 		items = append(items, newItem3)
559
 		items = append(items, newItem4)
589
 		items = append(items, newItem4)
560
 
590
 
591
+		for _, item := range items {
592
+			if math.IsNaN(float64(item.Total) / float64(newTotal)) {
593
+				item.Ratio = "0"
594
+			} else {
595
+				float_value, _ := strconv.ParseFloat(fmt.Sprintf("%.1f", (float64(item.Total)/float64(newTotal))*100), 64)
596
+				item.Ratio = strconv.FormatFloat(float_value, 'f', 1, 32)
597
+			}
598
+		}
599
+
561
 		break
600
 		break
562
 	case 4:
601
 	case 4:
602
+
603
+		db.Table("xt_assessment_after_dislysis ").Where("user_org_id=? and status=1 and  created_time >= ? and created_time <= ?", user_org_id, start_time, end_time).Count(&Total)
604
+
563
 		tempErr = db.Table("xt_assessment_after_dislysis").Where("user_org_id=? and status=1 and  created_time >= ? and created_time <= ?", user_org_id, start_time, end_time).
605
 		tempErr = db.Table("xt_assessment_after_dislysis").Where("user_org_id=? and status=1 and  created_time >= ? and created_time <= ?", user_org_id, start_time, end_time).
564
 			Select("CASE WHEN weight_after < 40 THEN '小于40kg'" +
606
 			Select("CASE WHEN weight_after < 40 THEN '小于40kg'" +
565
 				" WHEN weight_after >= 40 AND weight_after < 50 THEN '40~50kg'" +
607
 				" WHEN weight_after >= 40 AND weight_after < 50 THEN '40~50kg'" +
640
 			}
682
 			}
641
 			items = append(items, newItem)
683
 			items = append(items, newItem)
642
 		}
684
 		}
685
+
686
+		for _, item := range items {
687
+			if math.IsNaN(float64(item.Total) / float64(Total)) {
688
+				item.Ratio = "0"
689
+			} else {
690
+				float_value, _ := strconv.ParseFloat(fmt.Sprintf("%.1f", (float64(item.Total)/float64(Total))*100), 64)
691
+				item.Ratio = strconv.FormatFloat(float_value, 'f', 1, 32)
692
+			}
693
+		}
694
+
643
 		break
695
 		break
644
 	}
696
 	}
645
 	if tempErr != nil {
697
 	if tempErr != nil {
749
 	db := service.XTReadDB()
801
 	db := service.XTReadDB()
750
 	var items []*otherItemAmount
802
 	var items []*otherItemAmount
751
 	var tempErr error
803
 	var tempErr error
804
+	var TotalOne int64
805
+	var TotalTwo int64
752
 	var Total int64
806
 	var Total int64
753
-	fmt.Println(Total)
807
+
754
 	switch statistics_type {
808
 	switch statistics_type {
755
 	case 1:
809
 	case 1:
756
 		type bp struct {
810
 		type bp struct {
761
 
815
 
762
 		if patient_id == 0 {
816
 		if patient_id == 0 {
763
 			db.Raw("SELECT systolic_blood_pressure,diastolic_blood_pressure FROM xt_assessment_before_dislysis Where user_org_id = ? AND  created_time >= ? AND created_time <= ?   UNION ALL SELECT systolic_blood_pressure,diastolic_blood_pressure  FROM xt_assessment_after_dislysis Where user_org_id = ? AND created_time >= ? AND created_time <= ?  ", user_org_id, start_time, end_time, user_org_id, start_time, end_time).Scan(&bps)
817
 			db.Raw("SELECT systolic_blood_pressure,diastolic_blood_pressure FROM xt_assessment_before_dislysis Where user_org_id = ? AND  created_time >= ? AND created_time <= ?   UNION ALL SELECT systolic_blood_pressure,diastolic_blood_pressure  FROM xt_assessment_after_dislysis Where user_org_id = ? AND created_time >= ? AND created_time <= ?  ", user_org_id, start_time, end_time, user_org_id, start_time, end_time).Scan(&bps)
764
-			//db.Raw("SELECT count(id) FROM xt_assessment_before_dislysis Where user_org_id = ? AND  created_time >= ? AND created_time <= ?   UNION ALL SELECT systolic_blood_pressure,diastolic_blood_pressure  FROM xt_assessment_after_dislysis Where user_org_id = ? AND created_time >= ? AND created_time <= ?  ", user_org_id, start_time, end_time, user_org_id, start_time, end_time).Count(&Total)
818
+			db.Raw("SELECT count(id) FROM xt_assessment_before_dislysis Where user_org_id = ? AND  created_time >= ? AND created_time <= ?     ", user_org_id, start_time, end_time).Count(&TotalOne)
819
+			db.Raw("SELECT count(id) FROM xt_assessment_after_dislysis Where user_org_id = ? AND  created_time >= ? AND created_time <= ?   ", user_org_id, start_time, end_time).Count(&TotalTwo)
820
+			Total = TotalOne + TotalTwo
821
+			fmt.Println("----Total-----")
822
+			fmt.Println(TotalOne)
823
+			fmt.Println(TotalTwo)
824
+			fmt.Println(Total)
765
 
825
 
766
 		} else {
826
 		} else {
767
 			db.Raw("SELECT systolic_blood_pressure,diastolic_blood_pressure FROM xt_assessment_before_dislysis Where user_org_id = ? AND  created_time >= ? AND created_time <= ? AND patient_id = ?  UNION ALL SELECT systolic_blood_pressure,diastolic_blood_pressure  FROM xt_assessment_after_dislysis Where user_org_id = ? AND created_time >= ? AND created_time <= ? AND patient_id = ?  ", user_org_id, start_time, end_time, patient_id, user_org_id, start_time, end_time, patient_id).Scan(&bps)
827
 			db.Raw("SELECT systolic_blood_pressure,diastolic_blood_pressure FROM xt_assessment_before_dislysis Where user_org_id = ? AND  created_time >= ? AND created_time <= ? AND patient_id = ?  UNION ALL SELECT systolic_blood_pressure,diastolic_blood_pressure  FROM xt_assessment_after_dislysis Where user_org_id = ? AND created_time >= ? AND created_time <= ? AND patient_id = ?  ", user_org_id, start_time, end_time, patient_id, user_org_id, start_time, end_time, patient_id).Scan(&bps)
768
-			//db.Raw("SELECT  count(id) FROM xt_assessment_before_dislysis Where user_org_id = ? AND  created_time >= ? AND created_time <= ? AND patient_id = ?  UNION ALL SELECT systolic_blood_pressure,diastolic_blood_pressure  FROM xt_assessment_after_dislysis Where user_org_id = ? AND created_time >= ? AND created_time <= ? AND patient_id = ?  ", user_org_id, start_time, end_time, patient_id, user_org_id, start_time, end_time, patient_id).Count(&Total)
828
+			db.Raw("SELECT count(id) FROM xt_assessment_before_dislysis Where user_org_id = ? AND  created_time >= ? AND created_time <= ? AND patient_id = ?", user_org_id, start_time, end_time, patient_id).Count(&TotalOne)
829
+			db.Raw("SELECT count(id) FROM xt_assessment_after_dislysis Where user_org_id = ? AND  created_time >= ? AND created_time <= ? AND patient_id = ? ", user_org_id, start_time, end_time, patient_id).Count(&TotalTwo)
830
+			Total = TotalOne + TotalTwo
831
+			fmt.Println(TotalOne)
832
+			fmt.Println(TotalTwo)
833
+			fmt.Println(Total)
769
 
834
 
770
 		}
835
 		}
771
 
836
 
780
 			} else if item.SystolicBloodPressure < 140 && item.DiastolicBloodPressure < 99 {
845
 			} else if item.SystolicBloodPressure < 140 && item.DiastolicBloodPressure < 99 {
781
 				total_two++
846
 				total_two++
782
 
847
 
783
-			} else if item.SystolicBloodPressure >= 100 && item.SystolicBloodPressure <= 160 && item.DiastolicBloodPressure >= 99 && item.DiastolicBloodPressure <= 140 {
848
+			} else if item.SystolicBloodPressure >= 140 && item.SystolicBloodPressure <= 160 && item.DiastolicBloodPressure >= 99 && item.DiastolicBloodPressure <= 100 {
784
 				total_three++
849
 				total_three++
785
 			} else {
850
 			} else {
786
-				fmt.Println(item.SystolicBloodPressure)
787
-				fmt.Println(item.DiastolicBloodPressure)
788
 
851
 
789
 				total_four++
852
 				total_four++
790
 			}
853
 			}
816
 		items = append(items, newItem2)
879
 		items = append(items, newItem2)
817
 		items = append(items, newItem3)
880
 		items = append(items, newItem3)
818
 
881
 
819
-		//
820
-		//for _, item := range items {
821
-		//	float_value, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", float64(item.Total)/float64(Total)), 64)
822
-		//	item.Ratio = strconv.FormatInt(int64(float_value*100), 10)
823
-		//}
824
-
882
+		for _, item := range items {
883
+			if math.IsNaN(float64(item.Total) / float64(Total)) {
884
+				item.Ratio = "0"
885
+			} else {
886
+				float_value, _ := strconv.ParseFloat(fmt.Sprintf("%.1f", (float64(item.Total)/float64(Total))*100), 64)
887
+				item.Ratio = strconv.FormatFloat(float_value, 'f', 1, 32)
888
+			}
889
+		}
825
 		break
890
 		break
826
 	case 2:
891
 	case 2:
827
 		if patient_id == 0 {
892
 		if patient_id == 0 {
828
 			tempErr = db.Table("xt_assessment_before_dislysis ").Where("user_org_id=? and status=1 and  created_time >= ? and created_time <= ?  ", user_org_id, start_time, end_time).
893
 			tempErr = db.Table("xt_assessment_before_dislysis ").Where("user_org_id=? and status=1 and  created_time >= ? and created_time <= ?  ", user_org_id, start_time, end_time).
829
 				Select("CASE WHEN systolic_blood_pressure > 160 AND  diastolic_blood_pressure > 100 THEN '大于160/100mmHg'" +
894
 				Select("CASE WHEN systolic_blood_pressure > 160 AND  diastolic_blood_pressure > 100 THEN '大于160/100mmHg'" +
830
 					" WHEN systolic_blood_pressure < 140 AND  diastolic_blood_pressure < 99 THEN '小于140/99mmHg'" +
895
 					" WHEN systolic_blood_pressure < 140 AND  diastolic_blood_pressure < 99 THEN '小于140/99mmHg'" +
831
-					" WHEN systolic_blood_pressure >= 140 AND  systolic_blood_pressure >= 160   AND  diastolic_blood_pressure >= 99 AND  diastolic_blood_pressure <= 140 THEN '140-160mmHg/90-100mmHg'" +
896
+					" WHEN systolic_blood_pressure >= 140 AND  systolic_blood_pressure <= 160   AND  diastolic_blood_pressure >= 99 AND  diastolic_blood_pressure <= 100 THEN '140-160mmHg/90-100mmHg'" +
832
 					" ELSE '其他' END AS name, COUNT(*) AS total",
897
 					" ELSE '其他' END AS name, COUNT(*) AS total",
833
-				).Scan(&items).Group("name").Error
898
+				).Group("name").Scan(&items).Error
899
+			db.Table("xt_assessment_before_dislysis ").Where("user_org_id=? AND status = 1  AND created_time >= ? AND created_time <= ? ", user_org_id, start_time, end_time).Count(&Total)
834
 
900
 
835
 		} else {
901
 		} else {
836
 
902
 
837
 			tempErr = db.Table("xt_assessment_before_dislysis ").Where("user_org_id=? and status=1 and  created_time >= ? and created_time <= ?  and patient_id = ? ", user_org_id, start_time, end_time, patient_id).
903
 			tempErr = db.Table("xt_assessment_before_dislysis ").Where("user_org_id=? and status=1 and  created_time >= ? and created_time <= ?  and patient_id = ? ", user_org_id, start_time, end_time, patient_id).
838
 				Select("CASE WHEN systolic_blood_pressure > 160 AND  diastolic_blood_pressure > 100 THEN '大于160/100mmHg'" +
904
 				Select("CASE WHEN systolic_blood_pressure > 160 AND  diastolic_blood_pressure > 100 THEN '大于160/100mmHg'" +
839
 					" WHEN systolic_blood_pressure < 140 AND  diastolic_blood_pressure < 99 THEN '小于140/99mmHg'" +
905
 					" WHEN systolic_blood_pressure < 140 AND  diastolic_blood_pressure < 99 THEN '小于140/99mmHg'" +
840
-					" WHEN systolic_blood_pressure >= 140 AND  systolic_blood_pressure >= 160   AND  diastolic_blood_pressure >= 99 AND  diastolic_blood_pressure <= 140 THEN '140-160mmHg/90-100mmHg'" +
906
+					" WHEN systolic_blood_pressure >= 140 AND  systolic_blood_pressure <= 160   AND  diastolic_blood_pressure >= 99 AND  diastolic_blood_pressure <= 100 THEN '140-160mmHg/90-100mmHg'" +
841
 					" ELSE '其他' END AS name, COUNT(*) AS total",
907
 					" ELSE '其他' END AS name, COUNT(*) AS total",
842
-				).Scan(&items).Group("name").Error
908
+				).Group("name").Scan(&items).Error
843
 
909
 
844
-		}
910
+			db.Table("xt_assessment_before_dislysis ").Where("user_org_id=? AND status = 1  AND created_time >= ? AND created_time <= ? AND patient_id = ?", user_org_id, start_time, end_time, patient_id).Count(&Total)
845
 
911
 
846
-		//db.Table("xt_assessment_before_dislysis as before").Where("before.user_org_id=? AND before.status = 1  AND before.created_time >= ? and before.created_time <= ? ", user_org_id, patient_id, start_time, end_time).Count(&total)
912
+		}
847
 
913
 
848
 		var isHasConditionOne bool = false
914
 		var isHasConditionOne bool = false
849
 		var isHasConditionTwo bool = false
915
 		var isHasConditionTwo bool = false
850
 		var isHasConditionThree bool = false
916
 		var isHasConditionThree bool = false
917
+		var isHasConditionFour bool = false
851
 
918
 
852
 		for _, item := range items {
919
 		for _, item := range items {
853
 			if item.Name == "大于160/100mmHg" {
920
 			if item.Name == "大于160/100mmHg" {
860
 			if item.Name == "140-160mmHg/90-100mmHg" {
927
 			if item.Name == "140-160mmHg/90-100mmHg" {
861
 				isHasConditionThree = true
928
 				isHasConditionThree = true
862
 			}
929
 			}
930
+			if item.Name == "其他" {
931
+				isHasConditionFour = true
932
+			}
863
 		}
933
 		}
864
 		if !isHasConditionOne {
934
 		if !isHasConditionOne {
865
 			newItem := &otherItemAmount{
935
 			newItem := &otherItemAmount{
887
 				Ratio: "0",
957
 				Ratio: "0",
888
 			}
958
 			}
889
 			items = append(items, newItem)
959
 			items = append(items, newItem)
960
+		}
890
 
961
 
962
+		if !isHasConditionFour {
963
+			newItem := &otherItemAmount{
964
+				Total: 0,
965
+				Name:  "其他",
966
+				Ratio: "0",
967
+			}
968
+			items = append(items, newItem)
969
+		}
970
+
971
+		for _, item := range items {
972
+			if math.IsNaN(float64(item.Total) / float64(Total)) {
973
+				item.Ratio = "0"
974
+			} else {
975
+				float_value, _ := strconv.ParseFloat(fmt.Sprintf("%.1f", (float64(item.Total)/float64(Total))*100), 64)
976
+				item.Ratio = strconv.FormatFloat(float_value, 'f', 1, 32)
977
+			}
891
 		}
978
 		}
892
 		break
979
 		break
893
 	case 3:
980
 	case 3:
895
 			tempErr = db.Table("xt_assessment_after_dislysis ").Where("user_org_id=? and status=1 and  created_time >= ? and created_time <= ? ", user_org_id, start_time, end_time).
982
 			tempErr = db.Table("xt_assessment_after_dislysis ").Where("user_org_id=? and status=1 and  created_time >= ? and created_time <= ? ", user_org_id, start_time, end_time).
896
 				Select("CASE WHEN systolic_blood_pressure > 160 AND  diastolic_blood_pressure > 100 THEN '大于160/100mmHg'" +
983
 				Select("CASE WHEN systolic_blood_pressure > 160 AND  diastolic_blood_pressure > 100 THEN '大于160/100mmHg'" +
897
 					" WHEN systolic_blood_pressure < 140 AND  diastolic_blood_pressure < 99 THEN '小于140/99mmHg'" +
984
 					" WHEN systolic_blood_pressure < 140 AND  diastolic_blood_pressure < 99 THEN '小于140/99mmHg'" +
898
-					" WHEN systolic_blood_pressure >= 140 AND  systolic_blood_pressure >= 160   AND  diastolic_blood_pressure >= 99 AND  diastolic_blood_pressure <= 140 THEN '140-160mmHg/90-100mmHg'" +
985
+					" WHEN systolic_blood_pressure >= 140 AND  systolic_blood_pressure <= 160   AND  diastolic_blood_pressure >= 99 AND  diastolic_blood_pressure <= 100 THEN '140-160mmHg/90-100mmHg'" +
899
 					" ELSE '其他' END AS name, COUNT(*) AS total",
986
 					" ELSE '其他' END AS name, COUNT(*) AS total",
900
-				).Scan(&items).Group("name").Error
987
+				).Group("name").Scan(&items).Error
988
+			db.Table("xt_assessment_after_dislysis").Where("user_org_id=? AND status = 1  AND created_time >= ? AND created_time <= ? ", user_org_id, start_time, end_time).Count(&Total)
989
+
901
 		} else {
990
 		} else {
902
 			tempErr = db.Table("xt_assessment_after_dislysis ").Where("user_org_id=? and status=1 and  created_time >= ? and created_time <= ? and patient_id = ?", user_org_id, start_time, end_time, patient_id).
991
 			tempErr = db.Table("xt_assessment_after_dislysis ").Where("user_org_id=? and status=1 and  created_time >= ? and created_time <= ? and patient_id = ?", user_org_id, start_time, end_time, patient_id).
903
 				Select("CASE WHEN systolic_blood_pressure > 160 AND  diastolic_blood_pressure > 100 THEN '大于160/100mmHg'" +
992
 				Select("CASE WHEN systolic_blood_pressure > 160 AND  diastolic_blood_pressure > 100 THEN '大于160/100mmHg'" +
904
 					" WHEN systolic_blood_pressure < 140 AND  diastolic_blood_pressure < 99 THEN '小于140/99mmHg'" +
993
 					" WHEN systolic_blood_pressure < 140 AND  diastolic_blood_pressure < 99 THEN '小于140/99mmHg'" +
905
-					" WHEN systolic_blood_pressure >= 140 AND  systolic_blood_pressure >= 160   AND  diastolic_blood_pressure >= 99 AND  diastolic_blood_pressure <= 140 THEN '140-160mmHg/90-100mmHg'" +
994
+					" WHEN systolic_blood_pressure >= 140 AND  systolic_blood_pressure <= 160   AND  diastolic_blood_pressure >= 99 AND  diastolic_blood_pressure <= 100 THEN '140-160mmHg/90-100mmHg'" +
906
 					" ELSE '其他' END AS name, COUNT(*) AS total",
995
 					" ELSE '其他' END AS name, COUNT(*) AS total",
907
-				).Scan(&items).Group("name").Error
996
+				).Group("name").Scan(&items).Error
997
+
998
+			db.Table("xt_assessment_after_dislysis ").Where("user_org_id=? AND status = 1  AND created_time >= ? AND created_time <= ? AND patient_id = ? ", user_org_id, start_time, end_time, patient_id).Count(&Total)
999
+
908
 		}
1000
 		}
909
 
1001
 
910
 		var isHasConditionOne bool = false
1002
 		var isHasConditionOne bool = false
911
 		var isHasConditionTwo bool = false
1003
 		var isHasConditionTwo bool = false
912
 		var isHasConditionThree bool = false
1004
 		var isHasConditionThree bool = false
1005
+		var isHasConditionFour bool = false
913
 
1006
 
914
 		for _, item := range items {
1007
 		for _, item := range items {
915
 			if item.Name == "大于160/100mmHg" {
1008
 			if item.Name == "大于160/100mmHg" {
922
 			if item.Name == "140-160mmHg/90-100mmHg" {
1015
 			if item.Name == "140-160mmHg/90-100mmHg" {
923
 				isHasConditionThree = true
1016
 				isHasConditionThree = true
924
 			}
1017
 			}
1018
+			if item.Name == "其他" {
1019
+				isHasConditionFour = true
1020
+			}
925
 		}
1021
 		}
926
 		if !isHasConditionOne {
1022
 		if !isHasConditionOne {
927
 			newItem := &otherItemAmount{
1023
 			newItem := &otherItemAmount{
950
 
1046
 
951
 		}
1047
 		}
952
 
1048
 
1049
+		if !isHasConditionFour {
1050
+			newItem := &otherItemAmount{
1051
+				Total: 0,
1052
+				Name:  "其他",
1053
+				Ratio: "0",
1054
+			}
1055
+			items = append(items, newItem)
1056
+		}
1057
+
1058
+		for _, item := range items {
1059
+			if math.IsNaN(float64(item.Total) / float64(Total)) {
1060
+				item.Ratio = "0"
1061
+			} else {
1062
+				float_value, _ := strconv.ParseFloat(fmt.Sprintf("%.1f", (float64(item.Total)/float64(Total))*100), 64)
1063
+				item.Ratio = strconv.FormatFloat(float_value, 'f', 1, 32)
1064
+			}
1065
+		}
953
 		break
1066
 		break
954
 	}
1067
 	}
955
 	if tempErr != nil {
1068
 	if tempErr != nil {
995
 }
1108
 }
996
 
1109
 
997
 func GetPatientBloodPressureChartData(user_org_id int64, patient_id int64, start_time int64, end_time int64, statistics_type int) (datas []*BPDataStruct, err error) {
1110
 func GetPatientBloodPressureChartData(user_org_id int64, patient_id int64, start_time int64, end_time int64, statistics_type int) (datas []*BPDataStruct, err error) {
998
-	fmt.Println("8u8923u213u8129")
999
 	db := service.XTReadDB()
1111
 	db := service.XTReadDB()
1000
 	switch statistics_type {
1112
 	switch statistics_type {
1001
 	case 1:
1113
 	case 1:
1208
 	db := service.XTReadDB()
1320
 	db := service.XTReadDB()
1209
 	var items []*otherItemAmount
1321
 	var items []*otherItemAmount
1210
 	var tempErr error
1322
 	var tempErr error
1323
+	var Total int64
1211
 	selectContent := "CASE"
1324
 	selectContent := "CASE"
1212
 	range_value_arr := strings.Split(range_value, ",")
1325
 	range_value_arr := strings.Split(range_value, ",")
1213
 
1326
 
1214
-	fmt.Println(range_value_arr)
1327
+	db.Table("xt_inspection").Where("org_id=? and status=1 and  created_time >= ? and created_time <= ? AND project_id = ? AND item_id = ?", user_org_id, start_time, end_time, project_id, item_id).Count(&Total)
1215
 
1328
 
1216
 	if range_type == 1 {
1329
 	if range_type == 1 {
1217
 		tempErr = db.Table("xt_inspection").Where("org_id=? and status=1 and  created_time >= ? and created_time <= ? AND project_id = ? AND item_id = ?", user_org_id, start_time, end_time, project_id, item_id).
1330
 		tempErr = db.Table("xt_inspection").Where("org_id=? and status=1 and  created_time >= ? and created_time <= ? AND project_id = ? AND item_id = ?", user_org_id, start_time, end_time, project_id, item_id).
1261
 			}
1374
 			}
1262
 			items = append(items, newItem)
1375
 			items = append(items, newItem)
1263
 		}
1376
 		}
1377
+
1378
+		for _, item := range items {
1379
+			if math.IsNaN(float64(item.Total) / float64(Total)) {
1380
+				item.Ratio = "0"
1381
+			} else {
1382
+				float_value, _ := strconv.ParseFloat(fmt.Sprintf("%.1f", (float64(item.Total)/float64(Total))*100), 64)
1383
+				item.Ratio = strconv.FormatFloat(float_value, 'f', 1, 32)
1384
+			}
1385
+		}
1264
 		return items, tempErr
1386
 		return items, tempErr
1265
 
1387
 
1266
 	} else {
1388
 	} else {
1267
-
1268
 		for _, item := range range_value_arr {
1389
 		for _, item := range range_value_arr {
1269
 			//selectContent = selectContent + " WHEN inspect_value =" + item + " THEN " + "'" + item + "'"
1390
 			//selectContent = selectContent + " WHEN inspect_value =" + item + " THEN " + "'" + item + "'"
1270
 			selectContent = selectContent + " WHEN inspect_value =" + "'" + item + "'" + " THEN " + "'" + item + "'"
1391
 			selectContent = selectContent + " WHEN inspect_value =" + "'" + item + "'" + " THEN " + "'" + item + "'"
1274
 			Select(selectContent +
1395
 			Select(selectContent +
1275
 				" ELSE '未知' END AS name, COUNT(*) AS total",
1396
 				" ELSE '未知' END AS name, COUNT(*) AS total",
1276
 			).Group("name").Scan(&items).Error
1397
 			).Group("name").Scan(&items).Error
1398
+
1399
+		for _, item := range items {
1400
+			if math.IsNaN(float64(item.Total) / float64(Total)) {
1401
+				item.Ratio = "0"
1402
+			} else {
1403
+				float_value, _ := strconv.ParseFloat(fmt.Sprintf("%.1f", (float64(item.Total)/float64(Total))*100), 64)
1404
+				item.Ratio = strconv.FormatFloat(float_value, 'f', 1, 32)
1405
+			}
1406
+		}
1407
+
1277
 		return items, tempErr
1408
 		return items, tempErr
1278
 	}
1409
 	}
1279
 
1410