index_evaluation_service.go 48KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155
  1. package statistics_service
  2. import (
  3. "XT_New/models"
  4. "XT_New/service"
  5. "fmt"
  6. "github.com/jinzhu/gorm"
  7. "strconv"
  8. )
  9. func GetOrgFirstPatientInfo(user_org_id int64) (patient *models.Patients, err error) {
  10. db := service.XTReadDB()
  11. var tempPatient models.Patients
  12. findErr := db.Model(&models.Patients{}).Where("user_org_id = ? AND status = 1 AND lapseto = 1", user_org_id).First(&tempPatient).Error
  13. if findErr == gorm.ErrRecordNotFound {
  14. return nil, nil
  15. }
  16. if findErr != nil {
  17. return nil, findErr
  18. }
  19. return &tempPatient, nil
  20. }
  21. type ProcessIndexDataStruct struct {
  22. Date string `json:"date"`
  23. Value float64 `json:"value"`
  24. }
  25. //透析过程统计
  26. func GetDialysisProcessIndexChartData(user_org_id int64, patient_id int64, start_time int64, end_time int64, statistics_type int) (datas []*ProcessIndexDataStruct, err error) {
  27. db := service.XTReadDB()
  28. switch statistics_type {
  29. case 1:
  30. 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
  31. break
  32. case 2:
  33. 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
  34. break
  35. case 3:
  36. 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
  37. break
  38. case 4:
  39. 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
  40. break
  41. case 5:
  42. 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
  43. break
  44. case 6:
  45. 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
  46. break
  47. case 7:
  48. 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
  49. break
  50. case 8:
  51. 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
  52. break
  53. }
  54. if err != nil {
  55. return nil, err
  56. }
  57. return datas, nil
  58. }
  59. type otherItemAmount struct {
  60. Total int64 `json:"total"`
  61. Name string `json:"name"`
  62. Ratio string `json:"ratio"`
  63. }
  64. func GetDialysisProcessIndexOtherChartData(user_org_id int64, patient_id int64, start_time int64, end_time int64, statistics_type int) (item []*otherItemAmount, err error) {
  65. db := service.XTReadDB()
  66. var items []*otherItemAmount
  67. var tempErr error
  68. var total int64
  69. switch statistics_type {
  70. case 9:
  71. 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).
  72. Select("CASE WHEN p.mode_id = 1 THEN 'HD'" +
  73. " WHEN p.mode_id = 2 THEN 'HDF'" +
  74. " WHEN p.mode_id = 3 THEN 'HD+HP'" +
  75. " WHEN p.mode_id = 4 THEN 'HP'" +
  76. " WHEN p.mode_id = 5 THEN 'HF'" +
  77. " WHEN p.mode_id = 6 THEN 'SCUF'" +
  78. " WHEN p.mode_id = 7 THEN 'IUF'" +
  79. " WHEN p.mode_id = 8 THEN 'HFHD'" +
  80. " WHEN p.mode_id = 9 THEN 'HFHD+HP'" +
  81. " WHEN p.mode_id = 10 THEN 'PHF'" +
  82. " WHEN p.mode_id = 11 THEN 'HFR'" +
  83. " WHEN p.mode_id = 12 THEN 'HDF+HP'" +
  84. " WHEN p.mode_id = 13 THEN 'CRRT'" +
  85. " WHEN p.mode_id = 14 THEN '腹水回输'" +
  86. " WHEN p.mode_id = 19 THEN 'IUF+HD'" +
  87. " ELSE '未知' END AS name, COUNT(*) AS total",
  88. ).Group("p.mode_id").Scan(&items).Error
  89. break
  90. case 10:
  91. config, _ := GetAnticoagulantData(user_org_id)
  92. selectContent := "CASE"
  93. for _, item := range config {
  94. fmt.Println(selectContent)
  95. selectContent = selectContent + " WHEN p.anticoagulant =" + strconv.Itoa(item.Value) + " THEN " + "'" + item.Name + "'"
  96. }
  97. fmt.Println(selectContent)
  98. 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).
  99. Select(selectContent +
  100. " ELSE '未知' END AS name, COUNT(*) AS total",
  101. ).Group("p.anticoagulant").Scan(&items).Error
  102. break
  103. }
  104. 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)
  105. for _, item := range items {
  106. float_value, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", float64(item.Total)/float64(total)), 64)
  107. item.Ratio = strconv.FormatInt(int64(float_value*100), 10)
  108. }
  109. if tempErr != nil {
  110. return nil, err
  111. }
  112. return items, nil
  113. }
  114. type PatientDialysisRecord struct {
  115. models.VMSchedule
  116. DeviceNumber VMDeviceNumber `gorm:"foreignkey:ID;AssociationForeignKey:BedId;" json:"device_number"`
  117. DialysisPrescription VMDialysisPrescription `json:"prescription" gorm:"foreignkey:RecordDate;AssociationForeignKey:ScheduleDate;"`
  118. PredialysisEvaluation VMPredialysisEvaluation `json:"predialysis_evaluation" gorm:"foreignkey:AssessmentDate;AssociationForeignKey:ScheduleDate;"`
  119. AssessmentAfterDislysis models.AssessmentAfterDislysis `json:"assessment_after_dislysis" gorm:"foreignkey:AssessmentDate;AssociationForeignKey:ScheduleDate;"`
  120. Patient VMPatients `json:"patient" gorm:"foreignkey:ID;AssociationForeignKey:PatientID;"`
  121. }
  122. func GetDialysisProcessIndexTableData(orgID, patientID int64, page, limit, start, end int64) ([]*PatientDialysisRecord, int64, error) {
  123. offset := (page - 1) * limit
  124. var total int64
  125. var err error
  126. var orders []*PatientDialysisRecord
  127. readDb := service.XTReadDB()
  128. db := readDb.Table("xt_schedule as sch").
  129. Preload("DeviceNumber", "org_id=? and status=1", orgID).
  130. Preload("DialysisPrescription", "patient_id=? and user_org_id=? and status=1", patientID, orgID).
  131. Preload("PredialysisEvaluation", "patient_id=? and user_org_id=? and status=1", patientID, orgID).
  132. Preload("AssessmentAfterDislysis", "patient_id=? and user_org_id=? and status=1", patientID, orgID).
  133. Preload("Patient", "user_org_id=? and status=1", orgID).
  134. Where("sch.patient_id=? and sch.user_org_id=? and sch.status=1", patientID, orgID).Group("sch.schedule_date")
  135. if start != 0 {
  136. db = db.Where("sch.schedule_date>=?", start)
  137. }
  138. if end != 0 {
  139. db = db.Where("sch.schedule_date<=?", end)
  140. }
  141. 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
  142. return orders, total, err
  143. }
  144. func GetAnticoagulantData(user_org_id int64) (config []*models.Dataconfig, tempErr error) {
  145. var tempDataConfig []*models.Dataconfig
  146. var tempConfig models.Dataconfig
  147. db := service.XTReadDB()
  148. db.Model(&models.Dataconfig{}).Where("name = '抗凝剂' AND field_name = 'anticoagulant' AND parent_id = 0").First(&tempConfig)
  149. err := db.Model(&models.Dataconfig{}).Where("(org_id = 0 OR org_id = ?) AND parent_id = ?", user_org_id, tempConfig.ID).Find(&tempDataConfig).Error
  150. return tempDataConfig, err
  151. }
  152. //透析过程统计
  153. //透析监测统计
  154. func GetDialysisWatchChartData(user_org_id int64, patient_id int64, start_time int64, end_time int64, statistics_type int) (datas []*ProcessIndexDataStruct, err error) {
  155. db := service.XTReadDB()
  156. switch statistics_type {
  157. case 1:
  158. if patient_id == 0 {
  159. 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
  160. } else {
  161. 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
  162. }
  163. break
  164. case 2:
  165. if patient_id == 0 {
  166. //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
  167. 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
  168. } else {
  169. //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
  170. 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
  171. }
  172. break
  173. case 3:
  174. if patient_id == 0 {
  175. 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
  176. } else {
  177. 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
  178. }
  179. break
  180. case 4:
  181. if patient_id == 0 {
  182. 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
  183. } else {
  184. 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
  185. }
  186. break
  187. case 5:
  188. if patient_id == 0 {
  189. 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
  190. } else {
  191. 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
  192. }
  193. break
  194. case 6:
  195. if patient_id == 0 {
  196. 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
  197. } else {
  198. 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
  199. }
  200. break
  201. case 7:
  202. if patient_id == 0 {
  203. 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
  204. } else {
  205. 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
  206. }
  207. break
  208. case 8:
  209. if patient_id == 0 {
  210. 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
  211. } else {
  212. 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
  213. }
  214. break
  215. case 9:
  216. if patient_id == 0 {
  217. 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
  218. } else {
  219. 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
  220. }
  221. break
  222. }
  223. if err != nil {
  224. return nil, err
  225. }
  226. return datas, nil
  227. }
  228. func GetDialysisWatchTableData(orgID, patientID int64, page, limit, start, end int64) ([]*VMMonitoringRecord, int64, error) {
  229. offset := (page - 1) * limit
  230. var total int64
  231. var err error
  232. var orders []*VMMonitoringRecord
  233. readDb := service.XTReadDB()
  234. db := readDb.Table("xt_monitoring_record as mo").
  235. Where(" mo.user_org_id=? and mo.status=1", orgID)
  236. if patientID != 0 {
  237. db = db.Where("mo.patient_id =?", patientID)
  238. }
  239. if start != 0 {
  240. db = db.Where("mo.operate_time>=?", start)
  241. }
  242. if end != 0 {
  243. db = db.Where("mo.operate_time<=?", end)
  244. }
  245. 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
  246. return orders, total, err
  247. }
  248. //透析监测统计
  249. //透析体重统计
  250. func GetDialysisWeightChartData(user_org_id int64, start_time int64, end_time int64, statistics_type int) (item []*otherItemAmount, err error) {
  251. db := service.XTReadDB()
  252. var items []*otherItemAmount
  253. var tempErr error
  254. //var total int64
  255. switch statistics_type {
  256. case 1:
  257. 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).
  258. Select("CASE WHEN dry_weight < 40 THEN '小于40kg'" +
  259. " WHEN dry_weight >= 40 AND dry_weight < 50 THEN '40~50kg'" +
  260. " WHEN dry_weight >= 50 AND dry_weight < 60 THEN '50~60kg'" +
  261. " WHEN dry_weight >= 60 AND dry_weight < 70 THEN '60~70kg'" +
  262. " WHEN dry_weight >= 70 THEN '大于70kg'" +
  263. " ELSE '未知' END AS name, COUNT(*) AS total",
  264. ).Group("name").Scan(&items).Error
  265. var isHasConditionOne bool = false
  266. var isHasConditionTwo bool = false
  267. var isHasConditionThree bool = false
  268. var isHasConditionFour bool = false
  269. var isHasConditionFive bool = false
  270. for _, item := range items {
  271. if item.Name == "小于40kg" {
  272. isHasConditionOne = true
  273. }
  274. if item.Name == "40~50kg" {
  275. isHasConditionTwo = true
  276. }
  277. if item.Name == "60~70kg" {
  278. isHasConditionTwo = true
  279. }
  280. if item.Name == "大于70kg" {
  281. isHasConditionFour = true
  282. }
  283. if item.Name == "未知" {
  284. isHasConditionFive = true
  285. }
  286. }
  287. if !isHasConditionOne {
  288. newItem := &otherItemAmount{
  289. Total: 0,
  290. Name: "小于40kg",
  291. Ratio: "0",
  292. }
  293. items = append(items, newItem)
  294. }
  295. if !isHasConditionTwo {
  296. newItem := &otherItemAmount{
  297. Total: 0,
  298. Name: "40~50kg",
  299. Ratio: "0",
  300. }
  301. items = append(items, newItem)
  302. }
  303. if !isHasConditionThree {
  304. newItem := &otherItemAmount{
  305. Total: 0,
  306. Name: "60~70kg",
  307. Ratio: "0",
  308. }
  309. items = append(items, newItem)
  310. }
  311. if !isHasConditionFour {
  312. newItem := &otherItemAmount{
  313. Total: 0,
  314. Name: "大于70kg",
  315. Ratio: "0",
  316. }
  317. items = append(items, newItem)
  318. }
  319. if !isHasConditionFive {
  320. newItem := &otherItemAmount{
  321. Total: 0,
  322. Name: "未知",
  323. Ratio: "0",
  324. }
  325. items = append(items, newItem)
  326. }
  327. break
  328. case 2:
  329. 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).
  330. Select("CASE WHEN weight_before < 40 THEN '小于40kg'" +
  331. " WHEN weight_before >= 40 AND weight_before < 50 THEN '40~50kg'" +
  332. " WHEN weight_before >= 50 AND weight_before < 60 THEN '50~60kg'" +
  333. " WHEN weight_before >= 60 AND weight_before < 70 THEN '60~70kg'" +
  334. " WHEN weight_before >= 70 THEN '大于70kg'" +
  335. " ELSE '未知' END AS name, COUNT(*) AS total",
  336. ).Group("name").Scan(&items).Error
  337. var isHasConditionOne bool = false
  338. var isHasConditionTwo bool = false
  339. var isHasConditionThree bool = false
  340. var isHasConditionFour bool = false
  341. var isHasConditionFive bool = false
  342. for _, item := range items {
  343. if item.Name == "小于40kg" {
  344. isHasConditionOne = true
  345. }
  346. if item.Name == "40~50kg" {
  347. isHasConditionTwo = true
  348. }
  349. if item.Name == "60~70kg" {
  350. isHasConditionTwo = true
  351. }
  352. if item.Name == "大于70kg" {
  353. isHasConditionFour = true
  354. }
  355. if item.Name == "未知" {
  356. isHasConditionFive = true
  357. }
  358. }
  359. if !isHasConditionOne {
  360. newItem := &otherItemAmount{
  361. Total: 0,
  362. Name: "小于40kg",
  363. Ratio: "0",
  364. }
  365. items = append(items, newItem)
  366. }
  367. if !isHasConditionTwo {
  368. newItem := &otherItemAmount{
  369. Total: 0,
  370. Name: "40~50kg",
  371. Ratio: "0",
  372. }
  373. items = append(items, newItem)
  374. }
  375. if !isHasConditionThree {
  376. newItem := &otherItemAmount{
  377. Total: 0,
  378. Name: "60~70kg",
  379. Ratio: "0",
  380. }
  381. items = append(items, newItem)
  382. }
  383. if !isHasConditionFour {
  384. newItem := &otherItemAmount{
  385. Total: 0,
  386. Name: "大于70kg",
  387. Ratio: "0",
  388. }
  389. items = append(items, newItem)
  390. }
  391. if !isHasConditionFive {
  392. newItem := &otherItemAmount{
  393. Total: 0,
  394. Name: "未知",
  395. Ratio: "0",
  396. }
  397. items = append(items, newItem)
  398. }
  399. break
  400. case 3:
  401. type weight struct {
  402. WeightAfter float64 `json:"weight_after"`
  403. WeightBefore float64 `json:"weight_before"`
  404. }
  405. var weights []*weight
  406. var weightAdd []float64
  407. 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)
  408. for index, _ := range weights {
  409. if index+1 < len(weights) {
  410. if weights[index+1].WeightAfter == 0 || weights[index].WeightBefore == 0 {
  411. continue
  412. }
  413. weightAdd = append(weightAdd, weights[index].WeightBefore-weights[index+1].WeightAfter)
  414. }
  415. }
  416. fmt.Println(weightAdd)
  417. var total_one int64
  418. var total_two int64
  419. var total_three int64
  420. var total_four int64
  421. var total_five int64
  422. for _, item := range weightAdd {
  423. if item < 1 {
  424. total_one++
  425. fmt.Println(total_one)
  426. }
  427. if item >= 1 && item < 2 {
  428. total_two++
  429. fmt.Println(total_two)
  430. }
  431. if item >= 2 && item < 3 {
  432. total_three++
  433. fmt.Println(total_three)
  434. }
  435. if item >= 3 && item <= 4 {
  436. total_four++
  437. fmt.Println(total_four)
  438. }
  439. if item > 4 {
  440. total_five++
  441. fmt.Println(total_five)
  442. }
  443. }
  444. newItem := &otherItemAmount{
  445. Total: total_one,
  446. Name: "小于1kg",
  447. Ratio: "0",
  448. }
  449. newItem1 := &otherItemAmount{
  450. Total: total_two,
  451. Name: "1-2kg",
  452. Ratio: "0",
  453. }
  454. newItem2 := &otherItemAmount{
  455. Total: total_three,
  456. Name: "2-3kg",
  457. Ratio: "0",
  458. }
  459. newItem3 := &otherItemAmount{
  460. Total: total_four,
  461. Name: "3-4kg",
  462. Ratio: "0",
  463. }
  464. newItem4 := &otherItemAmount{
  465. Total: total_five,
  466. Name: "大于4kg",
  467. Ratio: "0",
  468. }
  469. items = append(items, newItem)
  470. items = append(items, newItem1)
  471. items = append(items, newItem2)
  472. items = append(items, newItem3)
  473. items = append(items, newItem4)
  474. break
  475. case 4:
  476. 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).
  477. Select("CASE WHEN weight_after < 40 THEN '小于40kg'" +
  478. " WHEN weight_after >= 40 AND weight_after < 50 THEN '40~50kg'" +
  479. " WHEN weight_after >= 50 AND weight_after < 60 THEN '50~60kg'" +
  480. " WHEN weight_after >= 60 AND weight_after < 70 THEN '60~70kg'" +
  481. " WHEN weight_after >= 70 THEN '大于70kg'" +
  482. " ELSE '未知' END AS name, COUNT(*) AS total",
  483. ).Group("name").Scan(&items).Error
  484. var isHasConditionOne bool = false
  485. var isHasConditionTwo bool = false
  486. var isHasConditionThree bool = false
  487. var isHasConditionFour bool = false
  488. var isHasConditionFive bool = false
  489. for _, item := range items {
  490. if item.Name == "小于40kg" {
  491. isHasConditionOne = true
  492. }
  493. if item.Name == "40~50kg" {
  494. isHasConditionTwo = true
  495. }
  496. if item.Name == "60~70kg" {
  497. isHasConditionTwo = true
  498. }
  499. if item.Name == "大于70kg" {
  500. isHasConditionFour = true
  501. }
  502. if item.Name == "未知" {
  503. isHasConditionFive = true
  504. }
  505. }
  506. if !isHasConditionOne {
  507. newItem := &otherItemAmount{
  508. Total: 0,
  509. Name: "小于40kg",
  510. Ratio: "0",
  511. }
  512. items = append(items, newItem)
  513. }
  514. if !isHasConditionTwo {
  515. newItem := &otherItemAmount{
  516. Total: 0,
  517. Name: "40~50kg",
  518. Ratio: "0",
  519. }
  520. items = append(items, newItem)
  521. }
  522. if !isHasConditionThree {
  523. newItem := &otherItemAmount{
  524. Total: 0,
  525. Name: "60~70kg",
  526. Ratio: "0",
  527. }
  528. items = append(items, newItem)
  529. }
  530. if !isHasConditionFour {
  531. newItem := &otherItemAmount{
  532. Total: 0,
  533. Name: "大于70kg",
  534. Ratio: "0",
  535. }
  536. items = append(items, newItem)
  537. }
  538. if !isHasConditionFive {
  539. newItem := &otherItemAmount{
  540. Total: 0,
  541. Name: "未知",
  542. Ratio: "0",
  543. }
  544. items = append(items, newItem)
  545. }
  546. break
  547. }
  548. if tempErr != nil {
  549. return nil, err
  550. }
  551. fmt.Println(items)
  552. return items, nil
  553. }
  554. func GetDialysisWeightTableData(orgID, patientID int64, page, limit, start, end int64) ([]*VMPredialysisEvaluation, int64, error) {
  555. offset := (page - 1) * limit
  556. var total int64
  557. var err error
  558. var orders []*VMPredialysisEvaluation
  559. readDb := service.XTReadDB()
  560. db := readDb.Table("xt_assessment_before_dislysis")
  561. db = db.Where(" user_org_id=? and status=1", orgID)
  562. if patientID > 0 {
  563. db = db.Where("patient_id=?", patientID)
  564. }
  565. if start != 0 {
  566. db = db.Where("assessment_date>=?", start)
  567. }
  568. if end != 0 {
  569. db = db.Where("assessment_date<=?", end)
  570. }
  571. db = db.Preload("VMAssessmentAfterDislysis", "status = 1").Preload("VMPatients", "status = 1 AND user_org_id = ?", orgID)
  572. err = db.Count(&total).Offset(offset).Limit(limit).Order("assessment_date desc").Select("dry_weight, weight_before, patient_id, assessment_date").Find(&orders).Error
  573. for _, item := range orders {
  574. after, _ := GetLastAfterWeight(orgID, item.AssessmentDate, item.PatientId)
  575. if after.ID > 0 {
  576. fmt.Println(after.WeightAfter)
  577. item.LastAfterWeight = after.WeightAfter
  578. }
  579. }
  580. return orders, total, err
  581. }
  582. func GetLastAfterWeight(user_org_id int64, before_assessment_date int64, patient_id int64) (after models.AssessmentAfterDislysis, err error) {
  583. readDb := service.XTReadDB()
  584. err = readDb.Model(&models.AssessmentAfterDislysis{}).Where("user_org_id = ? AND patient_id = ? AND assessment_date < ?", user_org_id, patient_id, before_assessment_date).Order("id desc").First(&after).Error
  585. return
  586. }
  587. func GetPatientDialysisWeightChartData(user_org_id int64, patient_id int64, start_time int64, end_time int64, statistics_type int) (datas []*ProcessIndexDataStruct, err error) {
  588. db := service.XTReadDB()
  589. switch statistics_type {
  590. case 1:
  591. 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
  592. break
  593. case 2:
  594. 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
  595. break
  596. case 3:
  597. type weight struct {
  598. WeightAfter float64 `json:"weight_after"`
  599. WeightBefore float64 `json:"weight_before"`
  600. Date string `json:"date"`
  601. }
  602. var weights []*weight
  603. 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)
  604. fmt.Println(len(weights))
  605. for index, _ := range weights {
  606. if index+1 < len(weights) {
  607. var weight_add ProcessIndexDataStruct
  608. fmt.Println(weights[index+1].WeightAfter)
  609. fmt.Println(weights[index].WeightBefore)
  610. if weights[index+1].WeightAfter == 0 || weights[index].WeightBefore == 0 {
  611. continue
  612. }
  613. add := weights[index].WeightBefore - weights[index+1].WeightAfter
  614. weight_add.Value = add
  615. weight_add.Date = weights[index].Date
  616. datas = append(datas, &weight_add)
  617. }
  618. }
  619. break
  620. case 4:
  621. err = db.Raw("select assessment_date 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
  622. break
  623. }
  624. if err != nil {
  625. return nil, err
  626. }
  627. return datas, nil
  628. }
  629. //透析体重统计
  630. //透析血压统计
  631. func GetBloodPressureChartData(user_org_id int64, start_time int64, end_time int64, statistics_type int, patient_id int64) (item []*otherItemAmount, err error) {
  632. db := service.XTReadDB()
  633. var items []*otherItemAmount
  634. var tempErr error
  635. //var total int64
  636. switch statistics_type {
  637. case 1:
  638. type bp struct {
  639. SystolicBloodPressure float64 `json:"systolic_blood_pressure"`
  640. DiastolicBloodPressure float64 `json:"diastolic_blood_pressure"`
  641. }
  642. var bps []*bp
  643. if patient_id == 0 {
  644. 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)
  645. } else {
  646. 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)
  647. }
  648. var total_one int64
  649. var total_two int64
  650. var total_three int64
  651. var total_four int64
  652. for _, item := range bps {
  653. if item.SystolicBloodPressure > 160 && item.DiastolicBloodPressure > 100 {
  654. total_one++
  655. } else if item.SystolicBloodPressure < 140 && item.DiastolicBloodPressure < 99 {
  656. total_two++
  657. } else if item.SystolicBloodPressure >= 100 && item.SystolicBloodPressure <= 160 && item.DiastolicBloodPressure >= 99 && item.DiastolicBloodPressure <= 140 {
  658. total_three++
  659. } else {
  660. total_four++
  661. }
  662. }
  663. newItem := &otherItemAmount{
  664. Total: total_one,
  665. Name: "大于160/100mmHg",
  666. Ratio: "0",
  667. }
  668. newItem1 := &otherItemAmount{
  669. Total: total_two,
  670. Name: "小于140/99mmHg",
  671. Ratio: "0",
  672. }
  673. newItem2 := &otherItemAmount{
  674. Total: total_three,
  675. Name: "140-160mmHg/90-100mmHg",
  676. Ratio: "0",
  677. }
  678. newItem3 := &otherItemAmount{
  679. Total: total_four,
  680. Name: "其他",
  681. Ratio: "0",
  682. }
  683. items = append(items, newItem)
  684. items = append(items, newItem1)
  685. items = append(items, newItem2)
  686. items = append(items, newItem3)
  687. break
  688. case 2:
  689. if patient_id == 0 {
  690. 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).
  691. Select("CASE WHEN systolic_blood_pressure > 160 AND diastolic_blood_pressure > 100 THEN '大于160/100mmHg'" +
  692. " WHEN systolic_blood_pressure < 140 AND diastolic_blood_pressure < 99 THEN '小于140/99mmHg'" +
  693. " 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'" +
  694. " ELSE '其他' END AS name, COUNT(*) AS total",
  695. ).Scan(&items).Group("name").Error
  696. } else {
  697. 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).
  698. Select("CASE WHEN systolic_blood_pressure > 160 AND diastolic_blood_pressure > 100 THEN '大于160/100mmHg'" +
  699. " WHEN systolic_blood_pressure < 140 AND diastolic_blood_pressure < 99 THEN '小于140/99mmHg'" +
  700. " 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'" +
  701. " ELSE '其他' END AS name, COUNT(*) AS total",
  702. ).Scan(&items).Group("name").Error
  703. }
  704. var isHasConditionOne bool = false
  705. var isHasConditionTwo bool = false
  706. var isHasConditionThree bool = false
  707. for _, item := range items {
  708. if item.Name == "大于160/100mmHg" {
  709. isHasConditionOne = true
  710. }
  711. if item.Name == "小于140/99mmHg" {
  712. isHasConditionTwo = true
  713. }
  714. if item.Name == "140-160mmHg/90-100mmHg" {
  715. isHasConditionTwo = true
  716. }
  717. }
  718. if !isHasConditionOne {
  719. newItem := &otherItemAmount{
  720. Total: 0,
  721. Name: "大于160/100mmHg",
  722. Ratio: "0",
  723. }
  724. items = append(items, newItem)
  725. }
  726. if !isHasConditionTwo {
  727. newItem := &otherItemAmount{
  728. Total: 0,
  729. Name: "小于140/99mmHg",
  730. Ratio: "0",
  731. }
  732. items = append(items, newItem)
  733. }
  734. if !isHasConditionThree {
  735. newItem := &otherItemAmount{
  736. Total: 0,
  737. Name: "140-160mmHg/90-100mmHg",
  738. Ratio: "0",
  739. }
  740. items = append(items, newItem)
  741. }
  742. break
  743. case 3:
  744. if patient_id == 0 {
  745. 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).
  746. Select("CASE WHEN systolic_blood_pressure > 160 AND diastolic_blood_pressure > 100 THEN '大于160/100mmHg'" +
  747. " WHEN systolic_blood_pressure < 140 AND diastolic_blood_pressure < 99 THEN '小于140/99mmHg'" +
  748. " 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'" +
  749. " ELSE '其他' END AS name, COUNT(*) AS total",
  750. ).Scan(&items).Group("name").Error
  751. } else {
  752. 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).
  753. Select("CASE WHEN systolic_blood_pressure > 160 AND diastolic_blood_pressure > 100 THEN '大于160/100mmHg'" +
  754. " WHEN systolic_blood_pressure < 140 AND diastolic_blood_pressure < 99 THEN '小于140/99mmHg'" +
  755. " 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'" +
  756. " ELSE '其他' END AS name, COUNT(*) AS total",
  757. ).Scan(&items).Group("name").Error
  758. }
  759. var isHasConditionOne bool = false
  760. var isHasConditionTwo bool = false
  761. var isHasConditionThree bool = false
  762. for _, item := range items {
  763. if item.Name == "大于160/100mmHg" {
  764. isHasConditionOne = true
  765. }
  766. if item.Name == "小于140/99mmHg" {
  767. isHasConditionTwo = true
  768. }
  769. if item.Name == "140-160mmHg/90-100mmHg" {
  770. isHasConditionTwo = true
  771. }
  772. }
  773. if !isHasConditionOne {
  774. newItem := &otherItemAmount{
  775. Total: 0,
  776. Name: "大于160/100mmHg",
  777. Ratio: "0",
  778. }
  779. items = append(items, newItem)
  780. }
  781. if !isHasConditionTwo {
  782. newItem := &otherItemAmount{
  783. Total: 0,
  784. Name: "小于140/99mmHg",
  785. Ratio: "0",
  786. }
  787. items = append(items, newItem)
  788. }
  789. if !isHasConditionThree {
  790. newItem := &otherItemAmount{
  791. Total: 0,
  792. Name: "140-160mmHg/90-100mmHg",
  793. Ratio: "0",
  794. }
  795. items = append(items, newItem)
  796. }
  797. break
  798. }
  799. if tempErr != nil {
  800. return nil, err
  801. }
  802. return items, nil
  803. }
  804. func GetBloodPressureTableData(orgID, patientID int64, page, limit, start, end int64) ([]*VMSchedule, int64, error) {
  805. offset := (page - 1) * limit
  806. var total int64
  807. var err error
  808. var orders []*VMSchedule
  809. readDb := service.XTReadDB()
  810. db := readDb.Table("xt_schedule as sch")
  811. db = db.Where(" sch.user_org_id=? and sch.status=1", orgID)
  812. if patientID > 0 {
  813. db = db.Where("sch.patient_id=?", patientID)
  814. }
  815. if start != 0 {
  816. db = db.Where("sch.created_time>=?", start)
  817. }
  818. if end != 0 {
  819. db = db.Where("sch.created_time<=?", end)
  820. }
  821. db = db.Preload("VMPredialysisEvaluation", "status = 1").
  822. Preload("VMAssessmentAfterDislysis", "status = 1").
  823. Preload("VMMinMonitoringRecord", func(db *gorm.DB) *gorm.DB {
  824. return db.Where("status = 1").Order("systolic_blood_pressure DESC")
  825. }).
  826. Preload("VMMaxMonitoringRecord", func(db *gorm.DB) *gorm.DB {
  827. return db.Where("status = 1").Order("systolic_blood_pressure ASC")
  828. }).
  829. Preload("VMPatients", "status = 1 AND user_org_id = ?", orgID)
  830. 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
  831. return orders, total, err
  832. }
  833. type BPDataStruct struct {
  834. Date string `json:"date"`
  835. SystolicBloodPressure float64 `json:"systolic_blood_pressure"`
  836. DiastolicBloodPressure float64 `json:"diastolic_blood_pressure"`
  837. }
  838. func GetPatientBloodPressureChartData(user_org_id int64, patient_id int64, start_time int64, end_time int64, statistics_type int) (datas []*BPDataStruct, err error) {
  839. fmt.Println("8u8923u213u8129")
  840. db := service.XTReadDB()
  841. switch statistics_type {
  842. case 1:
  843. 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
  844. break
  845. case 2:
  846. 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
  847. break
  848. }
  849. if err != nil {
  850. return nil, err
  851. }
  852. return datas, nil
  853. }
  854. //透析血压统计
  855. //工作量统计
  856. func GetDoctorWorkloadChartData(user_org_id int64, start_time int64, end_time int64, statistics_type int) (datas []*VMUserAdminRole, err error) {
  857. userDb := service.UserReadDB()
  858. db := service.XTReadDB()
  859. 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)
  860. switch statistics_type {
  861. case 1:
  862. for _, item := range datas {
  863. var total int64
  864. 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)
  865. item.PCount = total
  866. }
  867. break
  868. case 2:
  869. for _, item := range datas {
  870. var total int64
  871. 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)
  872. item.CourseCount = total
  873. }
  874. break
  875. case 3:
  876. for _, item := range datas {
  877. var total int64
  878. 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)
  879. item.RescueCount = total
  880. }
  881. break
  882. }
  883. if err != nil {
  884. return nil, err
  885. }
  886. fmt.Println(datas)
  887. return datas, nil
  888. }
  889. func GetDoctorWorkloadTableData(user_org_id int64, start_time int64, end_time int64, admin_user_id int64) (datas []*VMUserAdminRole, err error) {
  890. userDb := service.UserReadDB()
  891. db := service.XTReadDB()
  892. if admin_user_id == 0 {
  893. 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)
  894. } else {
  895. 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)
  896. }
  897. for _, item := range datas {
  898. var Total int64
  899. var TotalOne int64
  900. var TotalTwo int64
  901. 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)
  902. 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)
  903. 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)
  904. item.PCount = Total
  905. item.CourseCount = TotalOne
  906. item.RescueCount = TotalTwo
  907. }
  908. if err != nil {
  909. return nil, err
  910. }
  911. return datas, nil
  912. }
  913. func GetNurseWorkloadChartData(user_org_id int64, start_time int64, end_time int64, statistics_type int) (datas []*VMUserAdminRole, err error) {
  914. userDb := service.UserReadDB()
  915. db := service.XTReadDB()
  916. 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)
  917. var tempConfig models.Dataconfig
  918. db.Model(&models.Dataconfig{}).Where("name = '血管通路' AND module = 'hemodialysis' AND field_name = 'vascular_access_desc' AND parent_id = 0").First(&tempConfig)
  919. switch statistics_type {
  920. case 1:
  921. for _, item := range datas {
  922. var Total int64
  923. 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)
  924. item.PunctureCount = Total
  925. }
  926. break
  927. case 2:
  928. for _, item := range datas {
  929. var Total int64
  930. 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)
  931. item.ChangemedicineCount = Total
  932. }
  933. break
  934. case 3:
  935. for _, item := range datas {
  936. var total int64
  937. 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)
  938. item.CureCount = total
  939. }
  940. break
  941. case 4:
  942. for _, item := range datas {
  943. var Total int64
  944. 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)
  945. item.MissionCount = Total
  946. }
  947. break
  948. }
  949. if err != nil {
  950. return nil, err
  951. }
  952. return datas, nil
  953. }
  954. func GetNurseWorkloadTableData(user_org_id int64, start_time int64, end_time int64, admin_user_id int64) (datas []*VMUserAdminRole, err error) {
  955. userDb := service.UserReadDB()
  956. db := service.XTReadDB()
  957. var tempConfig models.Dataconfig
  958. db.Model(&models.Dataconfig{}).Where("name = '血管通路' AND module = 'hemodialysis' AND field_name = 'vascular_access_desc' AND parent_id = 0").First(&tempConfig)
  959. if admin_user_id == 0 {
  960. 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)
  961. } else {
  962. 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)
  963. }
  964. for _, item := range datas {
  965. var Total int64
  966. var TotalOne int64
  967. var TotalTwo int64
  968. var TotalThree int64
  969. 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)
  970. 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)
  971. 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)
  972. 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)
  973. item.PunctureCount = Total
  974. item.ChangemedicineCount = TotalOne
  975. item.PCount = Total
  976. item.CureCount = TotalTwo
  977. item.MissionCount = TotalThree
  978. }
  979. if err != nil {
  980. return nil, err
  981. }
  982. return datas, nil
  983. }
  984. //工作量统计
  985. type AdminUser struct {
  986. ID int64 `gorm:"column:id" json:"id" form:"id"`
  987. AdminUserId int64 `gorm:"column:admin_user_id" json:"admin_user_id" form:"admin_user_id"`
  988. OrgId int64 `gorm:"column:org_id" json:"org_id" form:"org_id"`
  989. UserName string `gorm:"column:user_name" json:"user_name" form:"user_name"`
  990. UserType int64 `gorm:"column:user_type" json:"user_type" form:"user_type"`
  991. }
  992. func GetAllAdminUser(user_org_id int64) (datas []*AdminUser, err error) {
  993. userDb := service.UserReadDB()
  994. 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)
  995. return datas, nil
  996. }