index_evaluation_service.go 60KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450
  1. package statistics_service
  2. import (
  3. "XT_New/models"
  4. "XT_New/service"
  5. "fmt"
  6. "github.com/jinzhu/gorm"
  7. "strconv"
  8. "strings"
  9. )
  10. func GetOrgFirstPatientInfo(user_org_id int64) (patient *models.Patients, err error) {
  11. db := service.XTReadDB()
  12. var tempPatient models.Patients
  13. findErr := db.Model(&models.Patients{}).Where("user_org_id = ? AND status = 1 AND lapseto = 1", user_org_id).First(&tempPatient).Error
  14. if findErr == gorm.ErrRecordNotFound {
  15. return nil, nil
  16. }
  17. if findErr != nil {
  18. return nil, findErr
  19. }
  20. return &tempPatient, nil
  21. }
  22. type ProcessIndexDataStruct struct {
  23. Date string `json:"date"`
  24. Value float64 `json:"value"`
  25. }
  26. //透析过程统计
  27. func GetDialysisProcessIndexChartData(user_org_id int64, patient_id int64, start_time int64, end_time int64, statistics_type int) (datas []*ProcessIndexDataStruct, err error) {
  28. db := service.XTReadDB()
  29. switch statistics_type {
  30. case 1:
  31. err = db.Raw("select from_unixtime(assessment_date,'%Y-%m-%d') as date, weight_before as value from xt_assessment_before_dislysis Where status = 1 AND user_org_id = ? AND patient_id = ? AND created_time <= ? AND created_time >= ? ", user_org_id, patient_id, end_time, start_time).Scan(&datas).Error
  32. break
  33. case 2:
  34. err = db.Raw("select from_unixtime(assessment_date,'%Y-%m-%d') as date, weight_after as value from xt_assessment_after_dislysis Where status = 1 AND user_org_id = ? AND patient_id = ? AND created_time <= ? AND created_time >= ? ", user_org_id, patient_id, end_time, start_time).Scan(&datas).Error
  35. break
  36. case 3:
  37. err = db.Raw("select from_unixtime(assessment_date,'%Y-%m-%d') as date, systolic_blood_pressure as value from xt_assessment_before_dislysis Where status = 1 AND user_org_id = ? AND patient_id = ? AND created_time <= ? AND created_time >= ? ", user_org_id, patient_id, end_time, start_time).Scan(&datas).Error
  38. break
  39. case 4:
  40. err = db.Raw("select from_unixtime(assessment_date,'%Y-%m-%d') as date, diastolic_blood_pressure as value from xt_assessment_before_dislysis Where status = 1 AND user_org_id = ? AND patient_id = ? AND created_time <= ? AND created_time >= ? ", user_org_id, patient_id, end_time, start_time).Scan(&datas).Error
  41. break
  42. case 5:
  43. err = db.Raw("select from_unixtime(assessment_date,'%Y-%m-%d') as date, pulse_frequency as value from xt_assessment_before_dislysis Where status = 1 AND user_org_id = ? AND patient_id = ? AND created_time <= ? AND created_time >= ? ", user_org_id, patient_id, end_time, start_time).Scan(&datas).Error
  44. break
  45. case 6:
  46. err = db.Raw("select from_unixtime(assessment_date,'%Y-%m-%d') as date, systolic_blood_pressure as value from xt_assessment_after_dislysis Where status = 1 AND user_org_id = ? AND patient_id = ? AND created_time <= ? AND created_time >= ? ", user_org_id, patient_id, end_time, start_time).Scan(&datas).Error
  47. break
  48. case 7:
  49. err = db.Raw("select from_unixtime(assessment_date,'%Y-%m-%d') as date, diastolic_blood_pressure as value from xt_assessment_after_dislysis Where status = 1 AND user_org_id = ? AND patient_id = ? AND created_time <= ? AND created_time >= ? ", user_org_id, patient_id, end_time, start_time).Scan(&datas).Error
  50. break
  51. case 8:
  52. err = db.Raw("select from_unixtime(assessment_date,'%Y-%m-%d') as date, pulse_frequency as value from xt_assessment_after_dislysis Where status = 1 AND user_org_id = ? AND patient_id = ? AND created_time <= ? AND created_time >= ? ", user_org_id, patient_id, end_time, start_time).Scan(&datas).Error
  53. break
  54. }
  55. if err != nil {
  56. return nil, err
  57. }
  58. return datas, nil
  59. }
  60. type otherItemAmount struct {
  61. Total int64 `json:"total"`
  62. Name string `json:"name"`
  63. Ratio string `json:"ratio"`
  64. }
  65. func GetDialysisProcessIndexOtherChartData(user_org_id int64, patient_id int64, start_time int64, end_time int64, statistics_type int) (item []*otherItemAmount, err error) {
  66. db := service.XTReadDB()
  67. var items []*otherItemAmount
  68. var tempErr error
  69. var total int64
  70. switch statistics_type {
  71. case 9:
  72. tempErr = db.Table("xt_dialysis_prescription as p").Where("p.user_org_id=? and p.status=1 and p.created_time >= ? and p.created_time <= ? AND p.patient_id = ? ", user_org_id, start_time, end_time, patient_id).
  73. Select("CASE WHEN p.mode_id = 1 THEN 'HD'" +
  74. " WHEN p.mode_id = 2 THEN 'HDF'" +
  75. " WHEN p.mode_id = 3 THEN 'HD+HP'" +
  76. " WHEN p.mode_id = 4 THEN 'HP'" +
  77. " WHEN p.mode_id = 5 THEN 'HF'" +
  78. " WHEN p.mode_id = 6 THEN 'SCUF'" +
  79. " WHEN p.mode_id = 7 THEN 'IUF'" +
  80. " WHEN p.mode_id = 8 THEN 'HFHD'" +
  81. " WHEN p.mode_id = 9 THEN 'HFHD+HP'" +
  82. " WHEN p.mode_id = 10 THEN 'PHF'" +
  83. " WHEN p.mode_id = 11 THEN 'HFR'" +
  84. " WHEN p.mode_id = 12 THEN 'HDF+HP'" +
  85. " WHEN p.mode_id = 13 THEN 'CRRT'" +
  86. " WHEN p.mode_id = 14 THEN '腹水回输'" +
  87. " WHEN p.mode_id = 19 THEN 'IUF+HD'" +
  88. " ELSE '未知' END AS name, COUNT(*) AS total",
  89. ).Group("p.mode_id").Scan(&items).Error
  90. break
  91. case 10:
  92. config, _ := GetAnticoagulantData(user_org_id)
  93. selectContent := "CASE"
  94. for _, item := range config {
  95. fmt.Println(selectContent)
  96. selectContent = selectContent + " WHEN p.anticoagulant =" + strconv.Itoa(item.Value) + " THEN " + "'" + item.Name + "'"
  97. }
  98. fmt.Println(selectContent)
  99. tempErr = db.Table("xt_dialysis_prescription as p").Where("p.user_org_id=? and p.status=1 and p.created_time >= ? and p.created_time <= ? AND p.patient_id = ? ", user_org_id, start_time, end_time, patient_id).
  100. Select(selectContent +
  101. " ELSE '未知' END AS name, COUNT(*) AS total",
  102. ).Group("p.anticoagulant").Scan(&items).Error
  103. break
  104. }
  105. 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)
  106. for _, item := range items {
  107. float_value, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", float64(item.Total)/float64(total)), 64)
  108. item.Ratio = strconv.FormatInt(int64(float_value*100), 10)
  109. }
  110. if tempErr != nil {
  111. return nil, err
  112. }
  113. return items, nil
  114. }
  115. type PatientDialysisRecord struct {
  116. models.VMSchedule
  117. DeviceNumber VMDeviceNumber `gorm:"foreignkey:ID;AssociationForeignKey:BedId;" json:"device_number"`
  118. DialysisPrescription VMDialysisPrescription `json:"prescription" gorm:"foreignkey:RecordDate;AssociationForeignKey:ScheduleDate;"`
  119. PredialysisEvaluation VMPredialysisEvaluation `json:"predialysis_evaluation" gorm:"foreignkey:AssessmentDate;AssociationForeignKey:ScheduleDate;"`
  120. AssessmentAfterDislysis models.AssessmentAfterDislysis `json:"assessment_after_dislysis" gorm:"foreignkey:AssessmentDate;AssociationForeignKey:ScheduleDate;"`
  121. Patient VMPatients `json:"patient" gorm:"foreignkey:ID;AssociationForeignKey:PatientID;"`
  122. }
  123. func GetDialysisProcessIndexTableData(orgID, patientID int64, page, limit, start, end int64) ([]*PatientDialysisRecord, int64, error) {
  124. offset := (page - 1) * limit
  125. var total int64
  126. var err error
  127. var orders []*PatientDialysisRecord
  128. readDb := service.XTReadDB()
  129. db := readDb.Table("xt_schedule as sch").
  130. Preload("DeviceNumber", "org_id=? and status=1", orgID).
  131. Preload("DialysisPrescription", "patient_id=? and user_org_id=? and status=1", patientID, orgID).
  132. Preload("PredialysisEvaluation", "patient_id=? and user_org_id=? and status=1", patientID, orgID).
  133. Preload("AssessmentAfterDislysis", "patient_id=? and user_org_id=? and status=1", patientID, orgID).
  134. Preload("Patient", "user_org_id=? and status=1", orgID).
  135. Where("sch.patient_id=? and sch.user_org_id=? and sch.status=1", patientID, orgID).Group("sch.schedule_date")
  136. if start != 0 {
  137. db = db.Where("sch.schedule_date>=?", start)
  138. }
  139. if end != 0 {
  140. db = db.Where("sch.schedule_date<=?", end)
  141. }
  142. err = db.Count(&total).Offset(offset).Limit(limit).Order("sch.schedule_date desc").Select("sch.patient_id,sch.schedule_date,sch.bed_id,sch.user_org_id").Find(&orders).Error
  143. return orders, total, err
  144. }
  145. func GetAnticoagulantData(user_org_id int64) (config []*models.Dataconfig, tempErr error) {
  146. var tempDataConfig []*models.Dataconfig
  147. var tempConfig models.Dataconfig
  148. db := service.XTReadDB()
  149. db.Model(&models.Dataconfig{}).Where("name = '抗凝剂' AND field_name = 'anticoagulant' AND parent_id = 0").First(&tempConfig)
  150. err := db.Model(&models.Dataconfig{}).Where("(org_id = 0 OR org_id = ?) AND parent_id = ?", user_org_id, tempConfig.ID).Find(&tempDataConfig).Error
  151. return tempDataConfig, err
  152. }
  153. //透析过程统计
  154. //透析监测统计
  155. func GetDialysisWatchChartData(user_org_id int64, patient_id int64, start_time int64, end_time int64, statistics_type int) (datas []*ProcessIndexDataStruct, err error) {
  156. db := service.XTReadDB()
  157. switch statistics_type {
  158. case 1:
  159. if patient_id == 0 {
  160. err = db.Raw("select from_unixtime(monitor.operate_time,'%Y-%m-%d %H:%i') as date, monitor.systolic_blood_pressure as value from xt_monitoring_record as monitor Where status = 1 AND user_org_id = ? AND operate_time <= ? AND operate_time >= ? ", user_org_id, end_time, start_time).Scan(&datas).Error
  161. } else {
  162. err = db.Raw("select from_unixtime(monitor.operate_time,'%Y-%m-%d %H:%i') as date, monitor.systolic_blood_pressure as value from xt_monitoring_record as monitor Where status = 1 AND user_org_id = ? AND patient_id = ? AND operate_time <= ? AND operate_time >= ? ", user_org_id, patient_id, end_time, start_time).Scan(&datas).Error
  163. }
  164. break
  165. case 2:
  166. if patient_id == 0 {
  167. //err = db.Raw("select from_unixtime(monitor.operate_time,'%Y-%m-%d %H:%i') as date, monitor.systolic_blood_pressure as value from xt_monitoring_record as monitor Where status = 1 AND user_org_id = ? AND operate_time <= ? AND operate_time >= ? ", user_org_id, end_time, start_time).Scan(&datas).Error
  168. err = db.Raw("select from_unixtime(monitor.operate_time,'%Y-%m-%d %H:%i') as date, monitor.diastolic_blood_pressure as value from xt_monitoring_record as monitor Where status = 1 AND user_org_id = ? AND operate_time <= ? AND operate_time >= ? ", user_org_id, end_time, start_time).Scan(&datas).Error
  169. } else {
  170. //err = db.Raw("select from_unixtime(monitor.operate_time,'%Y-%m-%d %H:%i') as date, monitor.systolic_blood_pressure as value from xt_monitoring_record as monitor Where status = 1 AND user_org_id = ? AND patient_id = ? AND operate_time <= ? AND operate_time >= ? ", user_org_id, patient_id, end_time, start_time).Scan(&datas).Error
  171. err = db.Raw("select from_unixtime(monitor.operate_time,'%Y-%m-%d %H:%i') as date, monitor.diastolic_blood_pressure as value from xt_monitoring_record as monitor Where status = 1 AND user_org_id = ? AND patient_id = ? AND operate_time <= ? AND operate_time >= ? ", user_org_id, patient_id, end_time, start_time).Scan(&datas).Error
  172. }
  173. break
  174. case 3:
  175. if patient_id == 0 {
  176. err = db.Raw("select from_unixtime(monitor.operate_time,'%Y-%m-%d %H:%i') as date, monitor.pulse_frequency as value from xt_monitoring_record as monitor Where status = 1 AND user_org_id = ? AND operate_time <= ? AND operate_time >= ? ", user_org_id, end_time, start_time).Scan(&datas).Error
  177. } else {
  178. err = db.Raw("select from_unixtime(monitor.operate_time,'%Y-%m-%d %H:%i') as date, monitor.pulse_frequency as value from xt_monitoring_record as monitor Where status = 1 AND user_org_id = ? AND patient_id = ? AND operate_time <= ? AND operate_time >= ? ", user_org_id, patient_id, end_time, start_time).Scan(&datas).Error
  179. }
  180. break
  181. case 4:
  182. if patient_id == 0 {
  183. err = db.Raw("select from_unixtime(monitor.operate_time,'%Y-%m-%d %H:%i') as date, monitor.breathing_rate as value from xt_monitoring_record as monitor Where status = 1 AND user_org_id = ? AND operate_time <= ? AND operate_time >= ? ", user_org_id, end_time, start_time).Scan(&datas).Error
  184. } else {
  185. err = db.Raw("select from_unixtime(monitor.operate_time,'%Y-%m-%d %H:%i') as date, monitor.breathing_rate as value from xt_monitoring_record as monitor Where status = 1 AND user_org_id = ? AND patient_id = ? AND operate_time <= ? AND operate_time >= ? ", user_org_id, patient_id, end_time, start_time).Scan(&datas).Error
  186. }
  187. break
  188. case 5:
  189. if patient_id == 0 {
  190. err = db.Raw("select from_unixtime(monitor.operate_time,'%Y-%m-%d %H:%i') as date, monitor.temperature as value from xt_monitoring_record as monitor Where status = 1 AND user_org_id = ? AND operate_time <= ? AND operate_time >= ? ", user_org_id, end_time, start_time).Scan(&datas).Error
  191. } else {
  192. err = db.Raw("select from_unixtime(monitor.operate_time,'%Y-%m-%d %H:%i') as date, monitor.temperature as value from xt_monitoring_record as monitor Where status = 1 AND user_org_id = ? AND patient_id = ? AND operate_time <= ? AND operate_time >= ? ", user_org_id, patient_id, end_time, start_time).Scan(&datas).Error
  193. }
  194. break
  195. case 6:
  196. if patient_id == 0 {
  197. err = db.Raw("select from_unixtime(monitor.operate_time,'%Y-%m-%d %H:%i') as date, monitor.blood_flow_volume as value from xt_monitoring_record as monitor Where status = 1 AND user_org_id = ? AND operate_time <= ? AND operate_time >= ? ", user_org_id, end_time, start_time).Scan(&datas).Error
  198. } else {
  199. err = db.Raw("select from_unixtime(monitor.operate_time,'%Y-%m-%d %H:%i') as date, monitor.blood_flow_volume as value from xt_monitoring_record as monitor Where status = 1 AND user_org_id = ? AND patient_id = ? AND operate_time <= ? AND operate_time >= ? ", user_org_id, patient_id, end_time, start_time).Scan(&datas).Error
  200. }
  201. break
  202. case 7:
  203. if patient_id == 0 {
  204. err = db.Raw("select from_unixtime(monitor.operate_time,'%Y-%m-%d %H:%i') as date, monitor.venous_pressure as value from xt_monitoring_record as monitor Where status = 1 AND user_org_id = ? AND operate_time <= ? AND operate_time >= ? ", user_org_id, end_time, start_time).Scan(&datas).Error
  205. } else {
  206. err = db.Raw("select from_unixtime(monitor.operate_time,'%Y-%m-%d %H:%i') as date, monitor.venous_pressure as value from xt_monitoring_record as monitor Where status = 1 AND user_org_id = ? AND patient_id = ? AND operate_time <= ? AND operate_time >= ? ", user_org_id, patient_id, end_time, start_time).Scan(&datas).Error
  207. }
  208. break
  209. case 8:
  210. if patient_id == 0 {
  211. err = db.Raw("select from_unixtime(monitor.operate_time,'%Y-%m-%d %H:%i') as date, monitor.arterial_pressure as value from xt_monitoring_record as monitor Where status = 1 AND user_org_id = ? AND operate_time <= ? AND operate_time >= ? ", user_org_id, end_time, start_time).Scan(&datas).Error
  212. } else {
  213. err = db.Raw("select from_unixtime(monitor.operate_time,'%Y-%m-%d %H:%i') as date, monitor.arterial_pressure as value from xt_monitoring_record as monitor Where status = 1 AND user_org_id = ? AND patient_id = ? AND operate_time <= ? AND operate_time >= ? ", user_org_id, patient_id, end_time, start_time).Scan(&datas).Error
  214. }
  215. break
  216. case 9:
  217. if patient_id == 0 {
  218. err = db.Raw("select from_unixtime(monitor.operate_time,'%Y-%m-%d %H:%i') as date, monitor.ultrafiltration_rate as value from xt_monitoring_record as monitor Where status = 1 AND user_org_id = ? AND operate_time <= ? AND operate_time >= ? ", user_org_id, end_time, start_time).Scan(&datas).Error
  219. } else {
  220. err = db.Raw("select from_unixtime(monitor.operate_time,'%Y-%m-%d %H:%i') as date, monitor.ultrafiltration_rate as value from xt_monitoring_record as monitor Where status = 1 AND user_org_id = ? AND patient_id = ? AND operate_time <= ? AND operate_time >= ? ", user_org_id, patient_id, end_time, start_time).Scan(&datas).Error
  221. }
  222. break
  223. }
  224. if err != nil {
  225. return nil, err
  226. }
  227. return datas, nil
  228. }
  229. func GetDialysisWatchTableData(orgID, patientID int64, page, limit, start, end int64) ([]*VMMonitoringRecord, int64, error) {
  230. offset := (page - 1) * limit
  231. var total int64
  232. var err error
  233. var orders []*VMMonitoringRecord
  234. readDb := service.XTReadDB()
  235. db := readDb.Table("xt_monitoring_record as mo").
  236. Where(" mo.user_org_id=? and mo.status=1", orgID)
  237. if patientID != 0 {
  238. db = db.Where("mo.patient_id =?", patientID)
  239. }
  240. if start != 0 {
  241. db = db.Where("mo.operate_time>=?", start)
  242. }
  243. if end != 0 {
  244. db = db.Where("mo.operate_time<=?", end)
  245. }
  246. err = db.Count(&total).Offset(offset).Limit(limit).Order("mo.operate_time desc").Select("mo.patient_id,mo.operate_time,mo.systolic_blood_pressure, mo.diastolic_blood_pressure, mo.pulse_frequency,mo.breathing_rate,mo.temperature,mo.blood_flow_volume,mo.venous_pressure,mo.arterial_pressure,mo.transmembrane_pressure,mo.dialysate_temperature,mo.ultrafiltration_rate,mo.ultrafiltration_volume").Find(&orders).Error
  247. return orders, total, err
  248. }
  249. //透析监测统计
  250. //透析体重统计
  251. func GetDialysisWeightChartData(user_org_id int64, start_time int64, end_time int64, statistics_type int) (item []*otherItemAmount, err error) {
  252. db := service.XTReadDB()
  253. var items []*otherItemAmount
  254. var tempErr error
  255. //var total int64
  256. switch statistics_type {
  257. case 1:
  258. 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).
  259. Select("CASE WHEN dry_weight < 40 THEN '小于40kg'" +
  260. " WHEN dry_weight >= 40 AND dry_weight < 50 THEN '40~50kg'" +
  261. " WHEN dry_weight >= 50 AND dry_weight < 60 THEN '50~60kg'" +
  262. " WHEN dry_weight >= 60 AND dry_weight < 70 THEN '60~70kg'" +
  263. " WHEN dry_weight >= 70 THEN '大于70kg'" +
  264. " ELSE '未知' END AS name, COUNT(*) AS total",
  265. ).Group("name").Scan(&items).Error
  266. var isHasConditionOne bool = false
  267. var isHasConditionTwo bool = false
  268. var isHasConditionThree bool = false
  269. var isHasConditionFour bool = false
  270. var isHasConditionFive bool = false
  271. for _, item := range items {
  272. if item.Name == "小于40kg" {
  273. isHasConditionOne = true
  274. }
  275. if item.Name == "40~50kg" {
  276. isHasConditionTwo = true
  277. }
  278. if item.Name == "60~70kg" {
  279. isHasConditionThree = true
  280. }
  281. if item.Name == "大于70kg" {
  282. isHasConditionFour = true
  283. }
  284. if item.Name == "未知" {
  285. isHasConditionFive = true
  286. }
  287. }
  288. if !isHasConditionOne {
  289. newItem := &otherItemAmount{
  290. Total: 0,
  291. Name: "小于40kg",
  292. Ratio: "0",
  293. }
  294. items = append(items, newItem)
  295. }
  296. if !isHasConditionTwo {
  297. newItem := &otherItemAmount{
  298. Total: 0,
  299. Name: "40~50kg",
  300. Ratio: "0",
  301. }
  302. items = append(items, newItem)
  303. }
  304. if !isHasConditionThree {
  305. newItem := &otherItemAmount{
  306. Total: 0,
  307. Name: "60~70kg",
  308. Ratio: "0",
  309. }
  310. items = append(items, newItem)
  311. }
  312. if !isHasConditionFour {
  313. newItem := &otherItemAmount{
  314. Total: 0,
  315. Name: "大于70kg",
  316. Ratio: "0",
  317. }
  318. items = append(items, newItem)
  319. }
  320. if !isHasConditionFive {
  321. newItem := &otherItemAmount{
  322. Total: 0,
  323. Name: "未知",
  324. Ratio: "0",
  325. }
  326. items = append(items, newItem)
  327. }
  328. break
  329. case 2:
  330. 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).
  331. Select("CASE WHEN weight_before < 40 THEN '小于40kg'" +
  332. " WHEN weight_before >= 40 AND weight_before < 50 THEN '40~50kg'" +
  333. " WHEN weight_before >= 50 AND weight_before < 60 THEN '50~60kg'" +
  334. " WHEN weight_before >= 60 AND weight_before < 70 THEN '60~70kg'" +
  335. " WHEN weight_before >= 70 THEN '大于70kg'" +
  336. " ELSE '未知' END AS name, COUNT(*) AS total",
  337. ).Group("name").Scan(&items).Error
  338. var isHasConditionOne bool = false
  339. var isHasConditionTwo bool = false
  340. var isHasConditionThree bool = false
  341. var isHasConditionFour bool = false
  342. var isHasConditionFive bool = false
  343. for _, item := range items {
  344. if item.Name == "小于40kg" {
  345. isHasConditionOne = true
  346. }
  347. if item.Name == "40~50kg" {
  348. isHasConditionTwo = true
  349. }
  350. if item.Name == "60~70kg" {
  351. isHasConditionThree = true
  352. }
  353. if item.Name == "大于70kg" {
  354. isHasConditionFour = true
  355. }
  356. if item.Name == "未知" {
  357. isHasConditionFive = true
  358. }
  359. }
  360. if !isHasConditionOne {
  361. newItem := &otherItemAmount{
  362. Total: 0,
  363. Name: "小于40kg",
  364. Ratio: "0",
  365. }
  366. items = append(items, newItem)
  367. }
  368. if !isHasConditionTwo {
  369. newItem := &otherItemAmount{
  370. Total: 0,
  371. Name: "40~50kg",
  372. Ratio: "0",
  373. }
  374. items = append(items, newItem)
  375. }
  376. if !isHasConditionThree {
  377. newItem := &otherItemAmount{
  378. Total: 0,
  379. Name: "60~70kg",
  380. Ratio: "0",
  381. }
  382. items = append(items, newItem)
  383. }
  384. if !isHasConditionFour {
  385. newItem := &otherItemAmount{
  386. Total: 0,
  387. Name: "大于70kg",
  388. Ratio: "0",
  389. }
  390. items = append(items, newItem)
  391. }
  392. if !isHasConditionFive {
  393. newItem := &otherItemAmount{
  394. Total: 0,
  395. Name: "未知",
  396. Ratio: "0",
  397. }
  398. items = append(items, newItem)
  399. }
  400. break
  401. case 3:
  402. type weight struct {
  403. WeightAfter float64 `json:"weight_after"`
  404. WeightBefore float64 `json:"weight_before"`
  405. }
  406. var weights []*weight
  407. var weightAdd []float64
  408. db.Raw("Select xt_assessment_after_dislysis.weight_after as weight_after ,xt_assessment_before_dislysis.weight_before as weight_before 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).Scan(&weights)
  409. for index, _ := range weights {
  410. if index+1 < len(weights) {
  411. if weights[index+1].WeightAfter == 0 || weights[index].WeightBefore == 0 {
  412. continue
  413. }
  414. weightAdd = append(weightAdd, weights[index].WeightBefore-weights[index+1].WeightAfter)
  415. }
  416. }
  417. fmt.Println(weightAdd)
  418. var total_one int64
  419. var total_two int64
  420. var total_three int64
  421. var total_four int64
  422. var total_five int64
  423. for _, item := range weightAdd {
  424. if item < 1 {
  425. total_one++
  426. fmt.Println(total_one)
  427. }
  428. if item >= 1 && item < 2 {
  429. total_two++
  430. fmt.Println(total_two)
  431. }
  432. if item >= 2 && item < 3 {
  433. total_three++
  434. fmt.Println(total_three)
  435. }
  436. if item >= 3 && item <= 4 {
  437. total_four++
  438. fmt.Println(total_four)
  439. }
  440. if item > 4 {
  441. total_five++
  442. fmt.Println(total_five)
  443. }
  444. }
  445. newItem := &otherItemAmount{
  446. Total: total_one,
  447. Name: "小于1kg",
  448. Ratio: "0",
  449. }
  450. newItem1 := &otherItemAmount{
  451. Total: total_two,
  452. Name: "1-2kg",
  453. Ratio: "0",
  454. }
  455. newItem2 := &otherItemAmount{
  456. Total: total_three,
  457. Name: "2-3kg",
  458. Ratio: "0",
  459. }
  460. newItem3 := &otherItemAmount{
  461. Total: total_four,
  462. Name: "3-4kg",
  463. Ratio: "0",
  464. }
  465. newItem4 := &otherItemAmount{
  466. Total: total_five,
  467. Name: "大于4kg",
  468. Ratio: "0",
  469. }
  470. items = append(items, newItem)
  471. items = append(items, newItem1)
  472. items = append(items, newItem2)
  473. items = append(items, newItem3)
  474. items = append(items, newItem4)
  475. break
  476. case 4:
  477. 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).
  478. Select("CASE WHEN weight_after < 40 THEN '小于40kg'" +
  479. " WHEN weight_after >= 40 AND weight_after < 50 THEN '40~50kg'" +
  480. " WHEN weight_after >= 50 AND weight_after < 60 THEN '50~60kg'" +
  481. " WHEN weight_after >= 60 AND weight_after < 70 THEN '60~70kg'" +
  482. " WHEN weight_after >= 70 THEN '大于70kg'" +
  483. " ELSE '未知' END AS name, COUNT(*) AS total",
  484. ).Group("name").Scan(&items).Error
  485. var isHasConditionOne bool = false
  486. var isHasConditionTwo bool = false
  487. var isHasConditionThree bool = false
  488. var isHasConditionFour bool = false
  489. var isHasConditionFive bool = false
  490. for _, item := range items {
  491. if item.Name == "小于40kg" {
  492. isHasConditionOne = true
  493. }
  494. if item.Name == "40~50kg" {
  495. isHasConditionTwo = true
  496. }
  497. if item.Name == "60~70kg" {
  498. isHasConditionThree = true
  499. }
  500. if item.Name == "大于70kg" {
  501. isHasConditionFour = true
  502. }
  503. if item.Name == "未知" {
  504. isHasConditionFive = true
  505. }
  506. }
  507. if !isHasConditionOne {
  508. newItem := &otherItemAmount{
  509. Total: 0,
  510. Name: "小于40kg",
  511. Ratio: "0",
  512. }
  513. items = append(items, newItem)
  514. }
  515. if !isHasConditionTwo {
  516. newItem := &otherItemAmount{
  517. Total: 0,
  518. Name: "40~50kg",
  519. Ratio: "0",
  520. }
  521. items = append(items, newItem)
  522. }
  523. if !isHasConditionThree {
  524. newItem := &otherItemAmount{
  525. Total: 0,
  526. Name: "60~70kg",
  527. Ratio: "0",
  528. }
  529. items = append(items, newItem)
  530. }
  531. if !isHasConditionFour {
  532. newItem := &otherItemAmount{
  533. Total: 0,
  534. Name: "大于70kg",
  535. Ratio: "0",
  536. }
  537. items = append(items, newItem)
  538. }
  539. if !isHasConditionFive {
  540. newItem := &otherItemAmount{
  541. Total: 0,
  542. Name: "未知",
  543. Ratio: "0",
  544. }
  545. items = append(items, newItem)
  546. }
  547. break
  548. }
  549. if tempErr != nil {
  550. return nil, err
  551. }
  552. fmt.Println(items)
  553. return items, nil
  554. }
  555. func GetDialysisWeightTableData(orgID, patientID int64, page, limit, start, end int64) ([]*VMPredialysisEvaluation, int64, error) {
  556. offset := (page - 1) * limit
  557. var total int64
  558. var err error
  559. var orders []*VMPredialysisEvaluation
  560. readDb := service.XTReadDB()
  561. db := readDb.Table("xt_assessment_before_dislysis")
  562. db = db.Where(" user_org_id=? and status=1", orgID)
  563. if patientID > 0 {
  564. db = db.Where("patient_id=?", patientID)
  565. }
  566. if start != 0 {
  567. db = db.Where("assessment_date>=?", start)
  568. }
  569. if end != 0 {
  570. db = db.Where("assessment_date<=?", end)
  571. }
  572. db = db.Preload("VMAssessmentAfterDislysis", "status = 1").Preload("VMPatients", "status = 1 AND user_org_id = ?", orgID)
  573. err = db.Count(&total).Offset(offset).Limit(limit).Order("assessment_date desc").Select("dry_weight, weight_before, patient_id, assessment_date").Find(&orders).Error
  574. for _, item := range orders {
  575. after, _ := GetLastAfterWeight(orgID, item.AssessmentDate, item.PatientId)
  576. if after.ID > 0 {
  577. fmt.Println(after.WeightAfter)
  578. item.LastAfterWeight = after.WeightAfter
  579. }
  580. }
  581. return orders, total, err
  582. }
  583. type LastAfter struct {
  584. ID int64 `json:"id"`
  585. WeightAfter float64 `json:"weight_after"`
  586. }
  587. func GetLastAfterWeight(user_org_id int64, before_assessment_date int64, patient_id int64) (after LastAfter, err error) {
  588. readDb := service.XTReadDB()
  589. err = readDb.Raw("SELECT weight_after as weight_after,id as id from xt_assessment_after_dislysis WHERE (user_org_id = ? AND patient_id = ? AND assessment_date < ?) ORDER BY id desc,`xt_assessment_after_dislysis`.`id` ASC LIMIT 1 ", user_org_id, patient_id, before_assessment_date).Scan(&after).Error
  590. return
  591. }
  592. func GetPatientDialysisWeightChartData(user_org_id int64, patient_id int64, start_time int64, end_time int64, statistics_type int) (datas []*ProcessIndexDataStruct, err error) {
  593. db := service.XTReadDB()
  594. switch statistics_type {
  595. case 1:
  596. err = db.Raw("select from_unixtime(assessment_date, '%Y-%m-%d') as date, dry_weight as value from xt_assessment_before_dislysis Where status = 1 AND user_org_id = ? AND patient_id = ? AND created_time <= ? AND created_time >= ? ", user_org_id, patient_id, end_time, start_time).Scan(&datas).Error
  597. break
  598. case 2:
  599. err = db.Raw("select from_unixtime(assessment_date, '%Y-%m-%d') as date, weight_before as value from xt_assessment_before_dislysis Where status = 1 AND user_org_id = ? AND patient_id = ? AND created_time <= ? AND created_time >= ? ", user_org_id, patient_id, end_time, start_time).Scan(&datas).Error
  600. break
  601. case 3:
  602. type weight struct {
  603. WeightAfter float64 `json:"weight_after"`
  604. WeightBefore float64 `json:"weight_before"`
  605. Date string `json:"date"`
  606. }
  607. var weights []*weight
  608. db.Raw("Select xt_assessment_after_dislysis.weight_after as weight_after ,xt_assessment_before_dislysis.weight_before as weight_before,from_unixtime(xt_assessment_before_dislysis.assessment_date,'%Y-%m-%d') as date 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 <= ? AND xt_assessment_before_dislysis.patient_id = ? Order by date desc", user_org_id, start_time, end_time, patient_id).Scan(&weights)
  609. fmt.Println(len(weights))
  610. for index, _ := range weights {
  611. if index+1 < len(weights) {
  612. var weight_add ProcessIndexDataStruct
  613. fmt.Println(weights[index+1].WeightAfter)
  614. fmt.Println(weights[index].WeightBefore)
  615. if weights[index+1].WeightAfter == 0 || weights[index].WeightBefore == 0 {
  616. continue
  617. }
  618. add := weights[index].WeightBefore - weights[index+1].WeightAfter
  619. weight_add.Value = add
  620. weight_add.Date = weights[index].Date
  621. datas = append(datas, &weight_add)
  622. }
  623. }
  624. break
  625. case 4:
  626. err = db.Raw("select from_unixtime(assessment_date, '%Y-%m-%d') as date, weight_after as value from xt_assessment_after_dislysis Where status = 1 AND user_org_id = ? AND patient_id = ? AND created_time <= ? AND created_time >= ? ", user_org_id, patient_id, end_time, start_time).Scan(&datas).Error
  627. break
  628. }
  629. if err != nil {
  630. return nil, err
  631. }
  632. return datas, nil
  633. }
  634. //透析体重统计
  635. //透析血压统计
  636. func GetBloodPressureChartData(user_org_id int64, start_time int64, end_time int64, statistics_type int, patient_id int64) (item []*otherItemAmount, err error) {
  637. db := service.XTReadDB()
  638. var items []*otherItemAmount
  639. var tempErr error
  640. //var total int64
  641. switch statistics_type {
  642. case 1:
  643. type bp struct {
  644. SystolicBloodPressure float64 `json:"systolic_blood_pressure"`
  645. DiastolicBloodPressure float64 `json:"diastolic_blood_pressure"`
  646. }
  647. var bps []*bp
  648. if patient_id == 0 {
  649. 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)
  650. } else {
  651. 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)
  652. }
  653. var total_one int64
  654. var total_two int64
  655. var total_three int64
  656. var total_four int64
  657. for _, item := range bps {
  658. if item.SystolicBloodPressure > 160 && item.DiastolicBloodPressure > 100 {
  659. total_one++
  660. } else if item.SystolicBloodPressure < 140 && item.DiastolicBloodPressure < 99 {
  661. total_two++
  662. } else if item.SystolicBloodPressure >= 100 && item.SystolicBloodPressure <= 160 && item.DiastolicBloodPressure >= 99 && item.DiastolicBloodPressure <= 140 {
  663. total_three++
  664. } else {
  665. total_four++
  666. }
  667. }
  668. newItem := &otherItemAmount{
  669. Total: total_one,
  670. Name: "大于160/100mmHg",
  671. Ratio: "0",
  672. }
  673. newItem1 := &otherItemAmount{
  674. Total: total_two,
  675. Name: "小于140/99mmHg",
  676. Ratio: "0",
  677. }
  678. newItem2 := &otherItemAmount{
  679. Total: total_three,
  680. Name: "140-160mmHg/90-100mmHg",
  681. Ratio: "0",
  682. }
  683. newItem3 := &otherItemAmount{
  684. Total: total_four,
  685. Name: "其他",
  686. Ratio: "0",
  687. }
  688. items = append(items, newItem)
  689. items = append(items, newItem1)
  690. items = append(items, newItem2)
  691. items = append(items, newItem3)
  692. break
  693. case 2:
  694. if patient_id == 0 {
  695. 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).
  696. Select("CASE WHEN systolic_blood_pressure > 160 AND diastolic_blood_pressure > 100 THEN '大于160/100mmHg'" +
  697. " WHEN systolic_blood_pressure < 140 AND diastolic_blood_pressure < 99 THEN '小于140/99mmHg'" +
  698. " 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'" +
  699. " ELSE '其他' END AS name, COUNT(*) AS total",
  700. ).Scan(&items).Group("name").Error
  701. } else {
  702. 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).
  703. Select("CASE WHEN systolic_blood_pressure > 160 AND diastolic_blood_pressure > 100 THEN '大于160/100mmHg'" +
  704. " WHEN systolic_blood_pressure < 140 AND diastolic_blood_pressure < 99 THEN '小于140/99mmHg'" +
  705. " 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'" +
  706. " ELSE '其他' END AS name, COUNT(*) AS total",
  707. ).Scan(&items).Group("name").Error
  708. }
  709. var isHasConditionOne bool = false
  710. var isHasConditionTwo bool = false
  711. var isHasConditionThree bool = false
  712. for _, item := range items {
  713. if item.Name == "大于160/100mmHg" {
  714. isHasConditionOne = true
  715. }
  716. if item.Name == "小于140/99mmHg" {
  717. isHasConditionTwo = true
  718. }
  719. if item.Name == "140-160mmHg/90-100mmHg" {
  720. isHasConditionThree = true
  721. }
  722. }
  723. if !isHasConditionOne {
  724. newItem := &otherItemAmount{
  725. Total: 0,
  726. Name: "大于160/100mmHg",
  727. Ratio: "0",
  728. }
  729. items = append(items, newItem)
  730. }
  731. if !isHasConditionTwo {
  732. newItem := &otherItemAmount{
  733. Total: 0,
  734. Name: "小于140/99mmHg",
  735. Ratio: "0",
  736. }
  737. items = append(items, newItem)
  738. }
  739. if !isHasConditionThree {
  740. newItem := &otherItemAmount{
  741. Total: 0,
  742. Name: "140-160mmHg/90-100mmHg",
  743. Ratio: "0",
  744. }
  745. items = append(items, newItem)
  746. }
  747. break
  748. case 3:
  749. if patient_id == 0 {
  750. 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).
  751. Select("CASE WHEN systolic_blood_pressure > 160 AND diastolic_blood_pressure > 100 THEN '大于160/100mmHg'" +
  752. " WHEN systolic_blood_pressure < 140 AND diastolic_blood_pressure < 99 THEN '小于140/99mmHg'" +
  753. " 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'" +
  754. " ELSE '其他' END AS name, COUNT(*) AS total",
  755. ).Scan(&items).Group("name").Error
  756. } else {
  757. 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).
  758. Select("CASE WHEN systolic_blood_pressure > 160 AND diastolic_blood_pressure > 100 THEN '大于160/100mmHg'" +
  759. " WHEN systolic_blood_pressure < 140 AND diastolic_blood_pressure < 99 THEN '小于140/99mmHg'" +
  760. " 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'" +
  761. " ELSE '其他' END AS name, COUNT(*) AS total",
  762. ).Scan(&items).Group("name").Error
  763. }
  764. var isHasConditionOne bool = false
  765. var isHasConditionTwo bool = false
  766. var isHasConditionThree bool = false
  767. for _, item := range items {
  768. if item.Name == "大于160/100mmHg" {
  769. isHasConditionOne = true
  770. }
  771. if item.Name == "小于140/99mmHg" {
  772. isHasConditionTwo = true
  773. }
  774. if item.Name == "140-160mmHg/90-100mmHg" {
  775. isHasConditionThree = true
  776. }
  777. }
  778. if !isHasConditionOne {
  779. newItem := &otherItemAmount{
  780. Total: 0,
  781. Name: "大于160/100mmHg",
  782. Ratio: "0",
  783. }
  784. items = append(items, newItem)
  785. }
  786. if !isHasConditionTwo {
  787. newItem := &otherItemAmount{
  788. Total: 0,
  789. Name: "小于140/99mmHg",
  790. Ratio: "0",
  791. }
  792. items = append(items, newItem)
  793. }
  794. if !isHasConditionThree {
  795. newItem := &otherItemAmount{
  796. Total: 0,
  797. Name: "140-160mmHg/90-100mmHg",
  798. Ratio: "0",
  799. }
  800. items = append(items, newItem)
  801. }
  802. break
  803. }
  804. if tempErr != nil {
  805. return nil, err
  806. }
  807. return items, nil
  808. }
  809. func GetBloodPressureTableData(orgID, patientID int64, page, limit, start, end int64) ([]*VMSchedule, int64, error) {
  810. offset := (page - 1) * limit
  811. var total int64
  812. var err error
  813. var orders []*VMSchedule
  814. readDb := service.XTReadDB()
  815. db := readDb.Table("xt_schedule as sch")
  816. db = db.Where(" sch.user_org_id=? and sch.status=1", orgID)
  817. if patientID > 0 {
  818. db = db.Where("sch.patient_id=?", patientID)
  819. }
  820. if start != 0 {
  821. db = db.Where("sch.created_time>=?", start)
  822. }
  823. if end != 0 {
  824. db = db.Where("sch.created_time<=?", end)
  825. }
  826. db = db.Preload("VMPredialysisEvaluation", "status = 1").
  827. Preload("VMAssessmentAfterDislysis", "status = 1").
  828. Preload("VMMinMonitoringRecord", func(db *gorm.DB) *gorm.DB {
  829. return db.Where("status = 1").Order("systolic_blood_pressure DESC")
  830. }).
  831. Preload("VMMaxMonitoringRecord", func(db *gorm.DB) *gorm.DB {
  832. return db.Where("status = 1").Order("systolic_blood_pressure ASC")
  833. }).
  834. Preload("VMPatients", "status = 1 AND user_org_id = ?", orgID)
  835. err = db.Count(&total).Offset(offset).Limit(limit).Order("sch.schedule_date desc").Select(" sch.schedule_date,sch.patient_id,sch.user_org_id").Find(&orders).Error
  836. return orders, total, err
  837. }
  838. type BPDataStruct struct {
  839. Date string `json:"date"`
  840. SystolicBloodPressure float64 `json:"systolic_blood_pressure"`
  841. DiastolicBloodPressure float64 `json:"diastolic_blood_pressure"`
  842. }
  843. func GetPatientBloodPressureChartData(user_org_id int64, patient_id int64, start_time int64, end_time int64, statistics_type int) (datas []*BPDataStruct, err error) {
  844. fmt.Println("8u8923u213u8129")
  845. db := service.XTReadDB()
  846. switch statistics_type {
  847. case 1:
  848. err = db.Raw("select from_unixtime(assessment_date, '%Y-%m-%d') as date, systolic_blood_pressure as systolic_blood_pressure, diastolic_blood_pressure as diastolic_blood_pressure from xt_assessment_before_dislysis Where status = 1 AND user_org_id = ? AND patient_id = ? AND created_time <= ? AND created_time >= ? ", user_org_id, patient_id, end_time, start_time).Scan(&datas).Error
  849. break
  850. case 2:
  851. err = db.Raw("select from_unixtime(assessment_date, '%Y-%m-%d') as date, systolic_blood_pressure as systolic_blood_pressure, diastolic_blood_pressure as diastolic_blood_pressure from xt_assessment_after_dislysis Where status = 1 AND user_org_id = ? AND patient_id = ? AND created_time <= ? AND created_time >= ? ", user_org_id, patient_id, end_time, start_time).Scan(&datas).Error
  852. break
  853. }
  854. if err != nil {
  855. return nil, err
  856. }
  857. return datas, nil
  858. }
  859. //透析血压统计
  860. //工作量统计
  861. func GetDoctorWorkloadChartData(user_org_id int64, start_time int64, end_time int64, statistics_type int) (datas []*VMUserAdminRole, err error) {
  862. userDb := service.UserReadDB()
  863. db := service.XTReadDB()
  864. userDb.Raw("select admin_user_id, user_name,org_id from sgj_user_admin_role Where status = 1 AND org_id = ? AND user_type = 2 ", user_org_id).Scan(&datas)
  865. switch statistics_type {
  866. case 1:
  867. for _, item := range datas {
  868. var total int64
  869. db.Table("xt_dialysis_prescription as p").Where("user_org_id = ? AND status = 1 AND prescription_doctor = ? AND created_time >= ? AND created_time <= ?", user_org_id, item.AdminUserId, start_time, end_time).Count(&total)
  870. item.PCount = total
  871. }
  872. break
  873. case 2:
  874. for _, item := range datas {
  875. var total int64
  876. db.Table("xt_patient_course_of_disease as course").Where("org_id = ? AND status = 1 AND recorder = ? AND ctime >= ? AND ctime <= ?", user_org_id, item.AdminUserId, start_time, end_time).Count(&total)
  877. item.CourseCount = total
  878. }
  879. break
  880. case 3:
  881. for _, item := range datas {
  882. var total int64
  883. db.Table("xt_patient_rescue_record as rescue").Where("org_id = ? AND status = 1 AND recorder = ? AND ctime >= ? AND ctime <= ?", user_org_id, item.AdminUserId, start_time, end_time).Count(&total)
  884. item.RescueCount = total
  885. }
  886. break
  887. }
  888. if err != nil {
  889. return nil, err
  890. }
  891. fmt.Println(datas)
  892. return datas, nil
  893. }
  894. func GetDoctorWorkloadTableData(user_org_id int64, start_time int64, end_time int64, admin_user_id int64) (datas []*VMUserAdminRole, err error) {
  895. userDb := service.UserReadDB()
  896. db := service.XTReadDB()
  897. if admin_user_id == 0 {
  898. userDb.Raw("select admin_user_id, user_name,org_id from sgj_user_admin_role Where status = 1 AND org_id = ? AND user_type = 2 ", user_org_id).Scan(&datas)
  899. } else {
  900. userDb.Raw("select admin_user_id, user_name,org_id from sgj_user_admin_role Where status = 1 AND org_id = ? AND user_type = 2 AND admin_user_id = ?", user_org_id, admin_user_id).Scan(&datas)
  901. }
  902. for _, item := range datas {
  903. var Total int64
  904. var TotalOne int64
  905. var TotalTwo int64
  906. db.Table("xt_dialysis_prescription as p").Where("user_org_id = ? AND status = 1 AND prescription_doctor = ? AND created_time >= ? AND created_time <= ?", user_org_id, item.AdminUserId, start_time, end_time).Count(&Total)
  907. db.Table("xt_patient_course_of_disease as course").Where("org_id = ? AND status = 1 AND recorder = ? AND ctime >= ? AND ctime <= ?", user_org_id, item.AdminUserId, start_time, end_time).Count(&TotalOne)
  908. db.Table("xt_patient_rescue_record as rescue").Where("org_id = ? AND status = 1 AND recorder = ? AND ctime >= ? AND ctime <= ?", user_org_id, item.AdminUserId, start_time, end_time).Count(&TotalTwo)
  909. item.PCount = Total
  910. item.CourseCount = TotalOne
  911. item.RescueCount = TotalTwo
  912. }
  913. if err != nil {
  914. return nil, err
  915. }
  916. return datas, nil
  917. }
  918. func GetNurseWorkloadChartData(user_org_id int64, start_time int64, end_time int64, statistics_type int) (datas []*VMUserAdminRole, err error) {
  919. userDb := service.UserReadDB()
  920. db := service.XTReadDB()
  921. userDb.Raw("select admin_user_id, user_name,org_id from sgj_user_admin_role Where status = 1 AND org_id = ? AND user_type = 3 ", user_org_id).Scan(&datas)
  922. var tempConfig models.Dataconfig
  923. db.Model(&models.Dataconfig{}).Where("name = '血管通路' AND module = 'hemodialysis' AND field_name = 'vascular_access_desc' AND parent_id = 0").First(&tempConfig)
  924. switch statistics_type {
  925. case 1:
  926. for _, item := range datas {
  927. var Total int64
  928. db.Raw("select count(*) as total from (select d.patient_id as patient, d.id, d.`assessment_date` as date,config.name as name from xt_assessment_before_dislysis as d JOIN `xt_data_config` config on d.`blood_access_part_opera_id` = config.value AND config.org_id = ? AND config.parent_id = ? AND config.name like '%内瘘%' Group by d.id) b JOIN `xt_dialysis_order` on xt_dialysis_order.`dialysis_date` = b.date AND xt_dialysis_order.user_org_id = ? AND xt_dialysis_order.status = 1 AND xt_dialysis_order.start_nurse = ? AND xt_dialysis_order.created_time >= ? AND xt_dialysis_order.created_time <= ? ", user_org_id, tempConfig.ID, user_org_id, item.AdminUserId, start_time, end_time).Count(&Total)
  929. item.PunctureCount = Total
  930. }
  931. break
  932. case 2:
  933. for _, item := range datas {
  934. var Total int64
  935. db.Raw("select count(*) as total from (select d.patient_id as patient, d.id, d.`assessment_date` as date,config.name as name from xt_assessment_before_dislysis as d JOIN `xt_data_config` config on d.`blood_access_part_opera_id` = config.value AND config.org_id = ? AND config.parent_id = ? AND config.name like '%导管%' Group by d.id) b JOIN `xt_dialysis_order` on xt_dialysis_order.`dialysis_date` = b.date AND xt_dialysis_order.user_org_id = ? AND xt_dialysis_order.status = 1 AND xt_dialysis_order.start_nurse = ? AND xt_dialysis_order.created_time >= ? AND xt_dialysis_order.created_time <= ? ", user_org_id, tempConfig.ID, user_org_id, item.AdminUserId, start_time, end_time).Count(&Total)
  936. item.ChangemedicineCount = Total
  937. }
  938. break
  939. case 3:
  940. for _, item := range datas {
  941. var total int64
  942. db.Table("xt_monitoring_record").Where("user_org_id = ? AND status = 1 AND monitoring_nurse = ? AND created_time >= ? AND created_time <= ?", user_org_id, item.AdminUserId, start_time, end_time).Count(&total)
  943. item.CureCount = total
  944. }
  945. break
  946. case 4:
  947. for _, item := range datas {
  948. var Total int64
  949. db.Table("xt_treatment_summary ").Where("user_org_id = ? AND status = 1 AND creater = ? AND created_time >= ? AND created_time <= ?", user_org_id, item.AdminUserId, start_time, end_time).Count(&Total)
  950. item.MissionCount = Total
  951. }
  952. break
  953. }
  954. if err != nil {
  955. return nil, err
  956. }
  957. return datas, nil
  958. }
  959. func GetNurseWorkloadTableData(user_org_id int64, start_time int64, end_time int64, admin_user_id int64) (datas []*VMUserAdminRole, err error) {
  960. userDb := service.UserReadDB()
  961. db := service.XTReadDB()
  962. var tempConfig models.Dataconfig
  963. db.Model(&models.Dataconfig{}).Where("name = '血管通路' AND module = 'hemodialysis' AND field_name = 'vascular_access_desc' AND parent_id = 0").First(&tempConfig)
  964. if admin_user_id == 0 {
  965. userDb.Raw("select admin_user_id, user_name,org_id from sgj_user_admin_role Where status = 1 AND org_id = ? AND user_type = 3 ", user_org_id).Scan(&datas)
  966. } else {
  967. userDb.Raw("select admin_user_id, user_name,org_id from sgj_user_admin_role Where status = 1 AND org_id = ? AND user_type = 3 AND admin_user_id = ?", user_org_id, admin_user_id).Scan(&datas)
  968. }
  969. for _, item := range datas {
  970. var Total int64
  971. var TotalOne int64
  972. var TotalTwo int64
  973. var TotalThree int64
  974. db.Raw("select count(*) as total from (select d.patient_id as patient, d.id, d.`assessment_date` as date,config.name as name from xt_assessment_before_dislysis as d JOIN `xt_data_config` config on d.`blood_access_part_opera_id` = config.value AND config.org_id = ? AND config.parent_id = ? AND config.name like '%内瘘%' Group by d.id) b JOIN `xt_dialysis_order` on xt_dialysis_order.`dialysis_date` = b.date AND xt_dialysis_order.user_org_id = ? AND xt_dialysis_order.status = 1 AND xt_dialysis_order.start_nurse = ? AND xt_dialysis_order.created_time >= ? AND xt_dialysis_order.created_time <= ? ", user_org_id, tempConfig.ID, user_org_id, item.AdminUserId, start_time, end_time).Count(&Total)
  975. db.Raw("select count(*) as total_one from (select d.patient_id as patient, d.id, d.`assessment_date` as date,config.name as name from xt_assessment_before_dislysis as d JOIN `xt_data_config` config on d.`blood_access_part_opera_id` = config.value AND config.org_id = ? AND config.parent_id = ? AND config.name like '%导管%' Group by d.id) b JOIN `xt_dialysis_order` on xt_dialysis_order.`dialysis_date` = b.date AND xt_dialysis_order.user_org_id = ? AND xt_dialysis_order.status = 1 AND xt_dialysis_order.start_nurse = ? AND xt_dialysis_order.created_time >= ? AND xt_dialysis_order.created_time <= ? ", user_org_id, tempConfig.ID, user_org_id, item.AdminUserId, start_time, end_time).Count(&TotalOne)
  976. db.Table("xt_monitoring_record ").Where("user_org_id = ? AND status = 1 AND monitoring_nurse = ? AND created_time >= ? AND created_time <= ?", user_org_id, item.AdminUserId, start_time, end_time).Count(&TotalTwo)
  977. db.Table("xt_treatment_summary").Where("user_org_id = ? AND status = 1 AND creater = ? AND created_time >= ? AND created_time <= ?", user_org_id, item.AdminUserId, start_time, end_time).Count(&TotalThree)
  978. item.PunctureCount = Total
  979. item.ChangemedicineCount = TotalOne
  980. item.PCount = Total
  981. item.CureCount = TotalTwo
  982. item.MissionCount = TotalThree
  983. }
  984. if err != nil {
  985. return nil, err
  986. }
  987. return datas, nil
  988. }
  989. //工作量统计
  990. type AdminUser struct {
  991. ID int64 `gorm:"column:id" json:"id" form:"id"`
  992. AdminUserId int64 `gorm:"column:admin_user_id" json:"admin_user_id" form:"admin_user_id"`
  993. OrgId int64 `gorm:"column:org_id" json:"org_id" form:"org_id"`
  994. UserName string `gorm:"column:user_name" json:"user_name" form:"user_name"`
  995. UserType int64 `gorm:"column:user_type" json:"user_type" form:"user_type"`
  996. }
  997. func GetAllAdminUser(user_org_id int64) (datas []*AdminUser, err error) {
  998. userDb := service.UserReadDB()
  999. userDb.Raw("select id, admin_user_id, user_name,org_id, user_type from sgj_user_admin_role Where status = 1 AND org_id = ?", user_org_id).Scan(&datas)
  1000. return datas, nil
  1001. }
  1002. func FindOrgInspectionCount(user_org_id int64) (count int64, err error) {
  1003. db := service.XTReadDB()
  1004. err = db.Model(&models.InspectionReference{}).Where("status = 1 AND org_id = ?", user_org_id).Count(&count).Error
  1005. return
  1006. }
  1007. func FindOrgInspectionReference(user_org_id int64) (references []*models.InspectionReference, err error) {
  1008. db := service.XTReadDB()
  1009. err = db.Model(&models.InspectionReference{}).Where("status = 1 AND org_id = ? AND range_max REGEXP '(^[0-9]+.[0-9]+$)|(^[0-9]$)' AND range_min REGEXP '(^[0-9]+.[0-9]+$)|(^[0-9]$)' ", user_org_id).Find(&references).Error
  1010. return
  1011. }
  1012. func FindProcjectInspectionReference(user_org_id int64, project_id int64, item_id int64) (references models.InspectionReference, err error) {
  1013. db := service.XTReadDB()
  1014. err = db.Model(&models.InspectionReference{}).Where("status = 1 AND org_id = ? AND project_id = ? AND id = ?", user_org_id, project_id, item_id).First(&references).Error
  1015. return
  1016. }
  1017. func FindOrgInspectionReferenceRangeTypeValue(user_org_id int64, project_id int64, item_id int64) (inspection []*models.Inspection, err error) {
  1018. db := service.XTReadDB()
  1019. err = db.Model(&models.Inspection{}).Where("status = 1 AND org_id = ? AND project_id = ? AND item_id = ? AND inspect_type = 2 AND inspect_value <> ''", user_org_id, project_id, item_id).Group("inspect_value").Find(&inspection).Error
  1020. return
  1021. }
  1022. func FindOrgConfigRangeTypeValue(user_org_id int64, project_id int64, item_id int64) (qcs QualityControlStandard, err error) {
  1023. db := service.XTReadDB()
  1024. err = db.Model(&QualityControlStandard{}).Where("status = 1 AND user_org_id = ? AND inspection_major = ? AND inspection_minor = ?", user_org_id, project_id, item_id).First(&qcs).Error
  1025. return
  1026. }
  1027. func GetInspectionChartData(user_org_id int64, start_time int64, end_time int64, project_id int64, item_id int64, range_type int, range_value string) (item []*otherItemAmount, err error) {
  1028. db := service.XTReadDB()
  1029. var items []*otherItemAmount
  1030. var tempErr error
  1031. selectContent := "CASE"
  1032. range_value_arr := strings.Split(range_value, ",")
  1033. fmt.Println(range_value_arr)
  1034. if range_type == 1 {
  1035. 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).
  1036. Select("CASE WHEN inspect_value < " + range_value_arr[0] + "THEN" + "'" + "小于" + range_value_arr[0] + "'" +
  1037. " WHEN inspect_value >= " + range_value_arr[0] + "AND inspect_value <= " + range_value_arr[1] + " THEN " + "'" + range_value_arr[0] + "~" + range_value_arr[1] + "'" +
  1038. " WHEN inspect_value > " + range_value_arr[1] + "THEN " + "'" + "大于" + range_value_arr[1] + "'" +
  1039. " ELSE '未知' END AS name, COUNT(*) AS total",
  1040. ).Group("name").Scan(&items).Error
  1041. var isHasConditionOne bool = false
  1042. var isHasConditionTwo bool = false
  1043. var isHasConditionThree bool = false
  1044. for _, item := range items {
  1045. if item.Name == "大于"+range_value_arr[1] {
  1046. isHasConditionOne = true
  1047. }
  1048. if item.Name == "小于"+range_value_arr[0] {
  1049. isHasConditionTwo = true
  1050. }
  1051. if item.Name == range_value_arr[0]+"~"+range_value_arr[1] {
  1052. isHasConditionThree = true
  1053. }
  1054. }
  1055. if !isHasConditionOne {
  1056. newItem := &otherItemAmount{
  1057. Total: 0,
  1058. Name: "大于" + range_value_arr[1],
  1059. Ratio: "0",
  1060. }
  1061. items = append(items, newItem)
  1062. }
  1063. if !isHasConditionTwo {
  1064. newItem := &otherItemAmount{
  1065. Total: 0,
  1066. Name: "小于" + range_value_arr[0],
  1067. Ratio: "0",
  1068. }
  1069. items = append(items, newItem)
  1070. }
  1071. if !isHasConditionThree {
  1072. newItem := &otherItemAmount{
  1073. Total: 0,
  1074. Name: range_value_arr[0] + "~" + range_value_arr[1],
  1075. Ratio: "0",
  1076. }
  1077. items = append(items, newItem)
  1078. }
  1079. return items, tempErr
  1080. } else {
  1081. for _, item := range range_value_arr {
  1082. //selectContent = selectContent + " WHEN inspect_value =" + item + " THEN " + "'" + item + "'"
  1083. selectContent = selectContent + " WHEN inspect_value =" + "'" + item + "'" + " THEN " + "'" + item + "'"
  1084. }
  1085. 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).
  1086. Select(selectContent +
  1087. " ELSE '未知' END AS name, COUNT(*) AS total",
  1088. ).Group("name").Scan(&items).Error
  1089. return items, tempErr
  1090. }
  1091. }
  1092. type Inspection struct {
  1093. ID int64 `gorm:"column:id" json:"id" form:"id"`
  1094. PatientId int64 `gorm:"column:patient_id" json:"patient_id" form:"patient_id"`
  1095. OrgId int64 `gorm:"column:org_id" json:"org_id" form:"org_id"`
  1096. ProjectId int64 `gorm:"column:project_id" json:"project_id" form:"project_id"`
  1097. ItemId int64 `gorm:"column:item_id" json:"item_id" form:"item_id"`
  1098. ItemName string `gorm:"column:item_name" json:"item_name" form:"item_name"`
  1099. ProjectName string `gorm:"column:project_name" json:"project_name" form:"project_name"`
  1100. InspectType int64 `gorm:"column:inspect_type" json:"inspect_type" form:"inspect_type"`
  1101. InspectValue string `gorm:"column:inspect_value" json:"inspect_value" form:"inspect_value"`
  1102. InspectDate int64 `gorm:"column:inspect_date" json:"inspect_date" form:"inspect_date"`
  1103. Status int64 `gorm:"column:status" json:"status" form:"status"`
  1104. CreatedTime int64 `gorm:"column:created_time" json:"created_time" form:"created_time"`
  1105. UpdatedTime int64 `gorm:"column:updated_time" json:"updated_time" form:"updated_time"`
  1106. Patient models.Patients `gorm:"ForeignKey:ID;AssociationForeignKey:PatientId" json:"patient"`
  1107. }
  1108. func (Inspection) TableName() string {
  1109. return "xt_inspection"
  1110. }
  1111. func GetInspectionChartTableData(user_org_id int64, start_time int64, end_time int64, project_id int64, item_id int64, patient_id int64, page, limit int64, range_type int, range_value string) (datas []*Inspection, total int64, err error) {
  1112. if range_type == 1 {
  1113. index := strings.Index(range_value, "小于")
  1114. indexTwo := strings.Index(range_value, "大于")
  1115. indexThree := strings.Index(range_value, "~")
  1116. if index != -1 {
  1117. value, _ := strconv.ParseFloat(strings.Replace(range_value, "小于", "", 1), 64)
  1118. db := service.XTReadDB()
  1119. offset := (page - 1) * limit
  1120. err = db.Model(&Inspection{}).Where("org_id = ? AND status = 1 AND created_time >= ? AND created_time <= ? AND project_id = ? AND item_id = ? AND status = 1 AND inspect_value < ?", user_org_id, start_time, end_time, project_id, item_id, value).Preload("Patient", func(db *gorm.DB) *gorm.DB {
  1121. return db.Where("status = 1")
  1122. }).Count(&total).Offset(offset).Limit(limit).Find(&datas).Error
  1123. return datas, total, err
  1124. } else if indexTwo != -1 {
  1125. value, _ := strconv.ParseFloat(strings.Replace(range_value, "大于", "", 1), 64)
  1126. db := service.XTReadDB()
  1127. offset := (page - 1) * limit
  1128. err = db.Model(&Inspection{}).Where("org_id = ? AND status = 1 AND created_time >= ? AND created_time <= ? AND project_id = ? AND item_id = ? AND status = 1 AND inspect_value > ?", user_org_id, start_time, end_time, project_id, item_id, value).Preload("Patient", func(db *gorm.DB) *gorm.DB {
  1129. return db.Where("status = 1")
  1130. }).Count(&total).Offset(offset).Limit(limit).Find(&datas).Error
  1131. return datas, total, err
  1132. } else if indexThree != -1 {
  1133. range_value_arr := strings.Split(range_value, "~")
  1134. fmt.Println(range_value_arr)
  1135. float1, err := strconv.ParseFloat(range_value_arr[0], 64)
  1136. float2, err := strconv.ParseFloat(range_value_arr[1], 64)
  1137. fmt.Println(err)
  1138. fmt.Println(float1)
  1139. fmt.Println(float2)
  1140. db := service.XTReadDB()
  1141. offset := (page - 1) * limit
  1142. err = db.Model(&Inspection{}).Where("org_id = ? AND status = 1 AND created_time >= ? AND created_time <= ? AND project_id = ? AND item_id = ? AND status = 1 AND inspect_value >= ? AND inspect_value <= ?", user_org_id, start_time, end_time, project_id, item_id, float1, float2).Preload("Patient", func(db *gorm.DB) *gorm.DB {
  1143. return db.Where("status = 1")
  1144. }).Count(&total).Offset(offset).Limit(limit).Find(&datas).Error
  1145. return datas, total, err
  1146. } else {
  1147. db := service.XTReadDB()
  1148. offset := (page - 1) * limit
  1149. err = db.Model(&Inspection{}).Where("org_id = ? AND status = 1 AND created_time >= ? AND created_time <= ? AND project_id = ? AND item_id = ? AND status = 1 ", user_org_id, start_time, end_time, project_id, item_id).Preload("Patient", func(db *gorm.DB) *gorm.DB {
  1150. return db.Where("status = 1")
  1151. }).Count(&total).Offset(offset).Limit(limit).Find(&datas).Error
  1152. return datas, total, err
  1153. }
  1154. } else {
  1155. if range_value == "全部" {
  1156. db := service.XTReadDB()
  1157. offset := (page - 1) * limit
  1158. err = db.Model(&Inspection{}).Where("org_id = ? AND status = 1 AND created_time >= ? AND created_time <= ? AND project_id = ? AND item_id = ? AND status = 1 ", user_org_id, start_time, end_time, project_id, item_id).Preload("Patient", func(db *gorm.DB) *gorm.DB {
  1159. return db.Where("status = 1")
  1160. }).Count(&total).Offset(offset).Limit(limit).Find(&datas).Error
  1161. return datas, total, err
  1162. } else {
  1163. db := service.XTReadDB()
  1164. offset := (page - 1) * limit
  1165. err = db.Model(&Inspection{}).Where("org_id = ? AND status = 1 AND created_time >= ? AND created_time <= ? AND project_id = ? AND item_id = ? AND status = 1 AND inspect_value = ?", user_org_id, start_time, end_time, project_id, item_id, range_value).Preload("Patient", func(db *gorm.DB) *gorm.DB {
  1166. return db.Where("status = 1")
  1167. }).Count(&total).Offset(offset).Limit(limit).Find(&datas).Error
  1168. return datas, total, err
  1169. }
  1170. }
  1171. }
  1172. type NewIndexDataStruct struct {
  1173. Date string `json:"date"`
  1174. Value string `json:"value"`
  1175. }
  1176. func GetPatientInspectionChartData(user_org_id int64, start_time int64, end_time int64, project_id int64, item_id int64, patient_id int64) (datas []*NewIndexDataStruct, err error) {
  1177. db := service.XTReadDB()
  1178. err = db.Raw("select from_unixtime(inspect_date, '%Y-%m-%d') as date, inspect_value as value from xt_inspection Where status = 1 AND org_id = ? AND patient_id = ? AND project_id = ? AND item_id = ? AND created_time <= ? AND created_time >= ? ", user_org_id, patient_id, project_id, item_id, end_time, start_time).Scan(&datas).Error
  1179. if err != nil {
  1180. return nil, err
  1181. }
  1182. return datas, nil
  1183. }
  1184. func GetPatientInspectionBarChartData(user_org_id int64, start_time int64, end_time int64, project_id int64, item_id int64, range_type int, range_value string, patient_id int64) (item []*otherItemAmount, err error) {
  1185. db := service.XTReadDB()
  1186. var items []*otherItemAmount
  1187. var tempErr error
  1188. selectContent := "CASE"
  1189. range_value_arr := strings.Split(range_value, ",")
  1190. if range_type == 1 {
  1191. tempErr = db.Table("xt_inspection").Where("org_id=? and status=1 and created_time >= ? and created_time <= ? AND project_id = ? AND item_id = ? AND patient_id = ?", user_org_id, start_time, end_time, project_id, item_id, patient_id).
  1192. Select("CASE WHEN inspect_value < " + range_value_arr[0] + "THEN" + "'" + "小于" + range_value_arr[0] + "'" +
  1193. " WHEN inspect_value >= " + range_value_arr[0] + "AND inspect_value <= " + range_value_arr[1] + " THEN " + "'" + range_value_arr[0] + "~" + range_value_arr[1] + "'" +
  1194. " WHEN inspect_value > " + range_value_arr[1] + "THEN " + "'" + "大于" + range_value_arr[1] + "'" +
  1195. " ELSE '未知' END AS name, COUNT(*) AS total",
  1196. ).Group("name").Scan(&items).Error
  1197. var isHasConditionOne bool = false
  1198. var isHasConditionTwo bool = false
  1199. var isHasConditionThree bool = false
  1200. for _, item := range items {
  1201. if item.Name == "大于"+range_value_arr[1] {
  1202. isHasConditionOne = true
  1203. }
  1204. if item.Name == "小于"+range_value_arr[0] {
  1205. isHasConditionTwo = true
  1206. }
  1207. if item.Name == range_value_arr[0]+"~"+range_value_arr[1] {
  1208. isHasConditionThree = true
  1209. }
  1210. }
  1211. if !isHasConditionOne {
  1212. newItem := &otherItemAmount{
  1213. Total: 0,
  1214. Name: "大于" + range_value_arr[1],
  1215. Ratio: "0",
  1216. }
  1217. items = append(items, newItem)
  1218. }
  1219. if !isHasConditionTwo {
  1220. newItem := &otherItemAmount{
  1221. Total: 0,
  1222. Name: "小于" + range_value_arr[0],
  1223. Ratio: "0",
  1224. }
  1225. items = append(items, newItem)
  1226. }
  1227. if !isHasConditionThree {
  1228. newItem := &otherItemAmount{
  1229. Total: 0,
  1230. Name: range_value_arr[0] + "~" + range_value_arr[1],
  1231. Ratio: "0",
  1232. }
  1233. items = append(items, newItem)
  1234. }
  1235. return items, tempErr
  1236. } else {
  1237. for _, item := range range_value_arr {
  1238. selectContent = selectContent + " WHEN inspect_value =" + "'" + item + "'" + " THEN " + "'" + item + "'"
  1239. }
  1240. tempErr = db.Table("xt_inspection").Where("org_id=? and status=1 and created_time >= ? and created_time <= ? AND patient_id = ?", user_org_id, start_time, end_time, patient_id).
  1241. Select(selectContent +
  1242. " ELSE '未知' END AS name, COUNT(*) AS total",
  1243. ).Group("name").Scan(&items).Error
  1244. return items, tempErr
  1245. }
  1246. }