index_evaluation_service.go 74KB

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