index_evaluation_service.go 48KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161
  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. type LastAfter struct {
  583. ID int64 `json:"id"`
  584. WeightAfter float64 `json:"weight_after"`
  585. }
  586. func GetLastAfterWeight(user_org_id int64, before_assessment_date int64, patient_id int64) (after LastAfter, err error) {
  587. readDb := service.XTReadDB()
  588. 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
  589. return
  590. }
  591. func GetPatientDialysisWeightChartData(user_org_id int64, patient_id int64, start_time int64, end_time int64, statistics_type int) (datas []*ProcessIndexDataStruct, err error) {
  592. db := service.XTReadDB()
  593. switch statistics_type {
  594. case 1:
  595. 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
  596. break
  597. case 2:
  598. 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
  599. break
  600. case 3:
  601. type weight struct {
  602. WeightAfter float64 `json:"weight_after"`
  603. WeightBefore float64 `json:"weight_before"`
  604. Date string `json:"date"`
  605. }
  606. var weights []*weight
  607. 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)
  608. fmt.Println(len(weights))
  609. for index, _ := range weights {
  610. if index+1 < len(weights) {
  611. var weight_add ProcessIndexDataStruct
  612. fmt.Println(weights[index+1].WeightAfter)
  613. fmt.Println(weights[index].WeightBefore)
  614. if weights[index+1].WeightAfter == 0 || weights[index].WeightBefore == 0 {
  615. continue
  616. }
  617. add := weights[index].WeightBefore - weights[index+1].WeightAfter
  618. weight_add.Value = add
  619. weight_add.Date = weights[index].Date
  620. datas = append(datas, &weight_add)
  621. }
  622. }
  623. break
  624. case 4:
  625. 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
  626. break
  627. }
  628. if err != nil {
  629. return nil, err
  630. }
  631. return datas, nil
  632. }
  633. //透析体重统计
  634. //透析血压统计
  635. func GetBloodPressureChartData(user_org_id int64, start_time int64, end_time int64, statistics_type int, patient_id int64) (item []*otherItemAmount, err error) {
  636. db := service.XTReadDB()
  637. var items []*otherItemAmount
  638. var tempErr error
  639. //var total int64
  640. switch statistics_type {
  641. case 1:
  642. type bp struct {
  643. SystolicBloodPressure float64 `json:"systolic_blood_pressure"`
  644. DiastolicBloodPressure float64 `json:"diastolic_blood_pressure"`
  645. }
  646. var bps []*bp
  647. if patient_id == 0 {
  648. 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)
  649. } else {
  650. 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)
  651. }
  652. var total_one int64
  653. var total_two int64
  654. var total_three int64
  655. var total_four int64
  656. for _, item := range bps {
  657. if item.SystolicBloodPressure > 160 && item.DiastolicBloodPressure > 100 {
  658. total_one++
  659. } else if item.SystolicBloodPressure < 140 && item.DiastolicBloodPressure < 99 {
  660. total_two++
  661. } else if item.SystolicBloodPressure >= 100 && item.SystolicBloodPressure <= 160 && item.DiastolicBloodPressure >= 99 && item.DiastolicBloodPressure <= 140 {
  662. total_three++
  663. } else {
  664. total_four++
  665. }
  666. }
  667. newItem := &otherItemAmount{
  668. Total: total_one,
  669. Name: "大于160/100mmHg",
  670. Ratio: "0",
  671. }
  672. newItem1 := &otherItemAmount{
  673. Total: total_two,
  674. Name: "小于140/99mmHg",
  675. Ratio: "0",
  676. }
  677. newItem2 := &otherItemAmount{
  678. Total: total_three,
  679. Name: "140-160mmHg/90-100mmHg",
  680. Ratio: "0",
  681. }
  682. newItem3 := &otherItemAmount{
  683. Total: total_four,
  684. Name: "其他",
  685. Ratio: "0",
  686. }
  687. items = append(items, newItem)
  688. items = append(items, newItem1)
  689. items = append(items, newItem2)
  690. items = append(items, newItem3)
  691. break
  692. case 2:
  693. if patient_id == 0 {
  694. 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).
  695. Select("CASE WHEN systolic_blood_pressure > 160 AND diastolic_blood_pressure > 100 THEN '大于160/100mmHg'" +
  696. " WHEN systolic_blood_pressure < 140 AND diastolic_blood_pressure < 99 THEN '小于140/99mmHg'" +
  697. " 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'" +
  698. " ELSE '其他' END AS name, COUNT(*) AS total",
  699. ).Scan(&items).Group("name").Error
  700. } else {
  701. 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).
  702. Select("CASE WHEN systolic_blood_pressure > 160 AND diastolic_blood_pressure > 100 THEN '大于160/100mmHg'" +
  703. " WHEN systolic_blood_pressure < 140 AND diastolic_blood_pressure < 99 THEN '小于140/99mmHg'" +
  704. " 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'" +
  705. " ELSE '其他' END AS name, COUNT(*) AS total",
  706. ).Scan(&items).Group("name").Error
  707. }
  708. var isHasConditionOne bool = false
  709. var isHasConditionTwo bool = false
  710. var isHasConditionThree bool = false
  711. for _, item := range items {
  712. if item.Name == "大于160/100mmHg" {
  713. isHasConditionOne = true
  714. }
  715. if item.Name == "小于140/99mmHg" {
  716. isHasConditionTwo = true
  717. }
  718. if item.Name == "140-160mmHg/90-100mmHg" {
  719. isHasConditionTwo = true
  720. }
  721. }
  722. if !isHasConditionOne {
  723. newItem := &otherItemAmount{
  724. Total: 0,
  725. Name: "大于160/100mmHg",
  726. Ratio: "0",
  727. }
  728. items = append(items, newItem)
  729. }
  730. if !isHasConditionTwo {
  731. newItem := &otherItemAmount{
  732. Total: 0,
  733. Name: "小于140/99mmHg",
  734. Ratio: "0",
  735. }
  736. items = append(items, newItem)
  737. }
  738. if !isHasConditionThree {
  739. newItem := &otherItemAmount{
  740. Total: 0,
  741. Name: "140-160mmHg/90-100mmHg",
  742. Ratio: "0",
  743. }
  744. items = append(items, newItem)
  745. }
  746. break
  747. case 3:
  748. if patient_id == 0 {
  749. 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).
  750. Select("CASE WHEN systolic_blood_pressure > 160 AND diastolic_blood_pressure > 100 THEN '大于160/100mmHg'" +
  751. " WHEN systolic_blood_pressure < 140 AND diastolic_blood_pressure < 99 THEN '小于140/99mmHg'" +
  752. " 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'" +
  753. " ELSE '其他' END AS name, COUNT(*) AS total",
  754. ).Scan(&items).Group("name").Error
  755. } else {
  756. 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).
  757. Select("CASE WHEN systolic_blood_pressure > 160 AND diastolic_blood_pressure > 100 THEN '大于160/100mmHg'" +
  758. " WHEN systolic_blood_pressure < 140 AND diastolic_blood_pressure < 99 THEN '小于140/99mmHg'" +
  759. " 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'" +
  760. " ELSE '其他' END AS name, COUNT(*) AS total",
  761. ).Scan(&items).Group("name").Error
  762. }
  763. var isHasConditionOne bool = false
  764. var isHasConditionTwo bool = false
  765. var isHasConditionThree bool = false
  766. for _, item := range items {
  767. if item.Name == "大于160/100mmHg" {
  768. isHasConditionOne = true
  769. }
  770. if item.Name == "小于140/99mmHg" {
  771. isHasConditionTwo = true
  772. }
  773. if item.Name == "140-160mmHg/90-100mmHg" {
  774. isHasConditionTwo = true
  775. }
  776. }
  777. if !isHasConditionOne {
  778. newItem := &otherItemAmount{
  779. Total: 0,
  780. Name: "大于160/100mmHg",
  781. Ratio: "0",
  782. }
  783. items = append(items, newItem)
  784. }
  785. if !isHasConditionTwo {
  786. newItem := &otherItemAmount{
  787. Total: 0,
  788. Name: "小于140/99mmHg",
  789. Ratio: "0",
  790. }
  791. items = append(items, newItem)
  792. }
  793. if !isHasConditionThree {
  794. newItem := &otherItemAmount{
  795. Total: 0,
  796. Name: "140-160mmHg/90-100mmHg",
  797. Ratio: "0",
  798. }
  799. items = append(items, newItem)
  800. }
  801. break
  802. }
  803. if tempErr != nil {
  804. return nil, err
  805. }
  806. return items, nil
  807. }
  808. func GetBloodPressureTableData(orgID, patientID int64, page, limit, start, end int64) ([]*VMSchedule, int64, error) {
  809. offset := (page - 1) * limit
  810. var total int64
  811. var err error
  812. var orders []*VMSchedule
  813. readDb := service.XTReadDB()
  814. db := readDb.Table("xt_schedule as sch")
  815. db = db.Where(" sch.user_org_id=? and sch.status=1", orgID)
  816. if patientID > 0 {
  817. db = db.Where("sch.patient_id=?", patientID)
  818. }
  819. if start != 0 {
  820. db = db.Where("sch.created_time>=?", start)
  821. }
  822. if end != 0 {
  823. db = db.Where("sch.created_time<=?", end)
  824. }
  825. db = db.Preload("VMPredialysisEvaluation", "status = 1").
  826. Preload("VMAssessmentAfterDislysis", "status = 1").
  827. Preload("VMMinMonitoringRecord", func(db *gorm.DB) *gorm.DB {
  828. return db.Where("status = 1").Order("systolic_blood_pressure DESC")
  829. }).
  830. Preload("VMMaxMonitoringRecord", func(db *gorm.DB) *gorm.DB {
  831. return db.Where("status = 1").Order("systolic_blood_pressure ASC")
  832. }).
  833. Preload("VMPatients", "status = 1 AND user_org_id = ?", orgID)
  834. 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
  835. return orders, total, err
  836. }
  837. type BPDataStruct struct {
  838. Date string `json:"date"`
  839. SystolicBloodPressure float64 `json:"systolic_blood_pressure"`
  840. DiastolicBloodPressure float64 `json:"diastolic_blood_pressure"`
  841. }
  842. func GetPatientBloodPressureChartData(user_org_id int64, patient_id int64, start_time int64, end_time int64, statistics_type int) (datas []*BPDataStruct, err error) {
  843. fmt.Println("8u8923u213u8129")
  844. db := service.XTReadDB()
  845. switch statistics_type {
  846. case 1:
  847. 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
  848. break
  849. case 2:
  850. 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
  851. break
  852. }
  853. if err != nil {
  854. return nil, err
  855. }
  856. return datas, nil
  857. }
  858. //透析血压统计
  859. //工作量统计
  860. func GetDoctorWorkloadChartData(user_org_id int64, start_time int64, end_time int64, statistics_type int) (datas []*VMUserAdminRole, err error) {
  861. userDb := service.UserReadDB()
  862. db := service.XTReadDB()
  863. 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)
  864. switch statistics_type {
  865. case 1:
  866. for _, item := range datas {
  867. var total int64
  868. 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)
  869. item.PCount = total
  870. }
  871. break
  872. case 2:
  873. for _, item := range datas {
  874. var total int64
  875. 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)
  876. item.CourseCount = total
  877. }
  878. break
  879. case 3:
  880. for _, item := range datas {
  881. var total int64
  882. 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)
  883. item.RescueCount = total
  884. }
  885. break
  886. }
  887. if err != nil {
  888. return nil, err
  889. }
  890. fmt.Println(datas)
  891. return datas, nil
  892. }
  893. func GetDoctorWorkloadTableData(user_org_id int64, start_time int64, end_time int64, admin_user_id int64) (datas []*VMUserAdminRole, err error) {
  894. userDb := service.UserReadDB()
  895. db := service.XTReadDB()
  896. if admin_user_id == 0 {
  897. 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)
  898. } else {
  899. 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)
  900. }
  901. for _, item := range datas {
  902. var Total int64
  903. var TotalOne int64
  904. var TotalTwo int64
  905. 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)
  906. 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)
  907. 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)
  908. item.PCount = Total
  909. item.CourseCount = TotalOne
  910. item.RescueCount = TotalTwo
  911. }
  912. if err != nil {
  913. return nil, err
  914. }
  915. return datas, nil
  916. }
  917. func GetNurseWorkloadChartData(user_org_id int64, start_time int64, end_time int64, statistics_type int) (datas []*VMUserAdminRole, err error) {
  918. userDb := service.UserReadDB()
  919. db := service.XTReadDB()
  920. 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)
  921. var tempConfig models.Dataconfig
  922. db.Model(&models.Dataconfig{}).Where("name = '血管通路' AND module = 'hemodialysis' AND field_name = 'vascular_access_desc' AND parent_id = 0").First(&tempConfig)
  923. switch statistics_type {
  924. case 1:
  925. for _, item := range datas {
  926. var Total int64
  927. 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)
  928. item.PunctureCount = Total
  929. }
  930. break
  931. case 2:
  932. for _, item := range datas {
  933. var Total int64
  934. 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)
  935. item.ChangemedicineCount = Total
  936. }
  937. break
  938. case 3:
  939. for _, item := range datas {
  940. var total int64
  941. 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)
  942. item.CureCount = total
  943. }
  944. break
  945. case 4:
  946. for _, item := range datas {
  947. var Total int64
  948. 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)
  949. item.MissionCount = Total
  950. }
  951. break
  952. }
  953. if err != nil {
  954. return nil, err
  955. }
  956. return datas, nil
  957. }
  958. func GetNurseWorkloadTableData(user_org_id int64, start_time int64, end_time int64, admin_user_id int64) (datas []*VMUserAdminRole, err error) {
  959. userDb := service.UserReadDB()
  960. db := service.XTReadDB()
  961. var tempConfig models.Dataconfig
  962. db.Model(&models.Dataconfig{}).Where("name = '血管通路' AND module = 'hemodialysis' AND field_name = 'vascular_access_desc' AND parent_id = 0").First(&tempConfig)
  963. if admin_user_id == 0 {
  964. 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)
  965. } else {
  966. 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)
  967. }
  968. for _, item := range datas {
  969. var Total int64
  970. var TotalOne int64
  971. var TotalTwo int64
  972. var TotalThree int64
  973. 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)
  974. 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)
  975. 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)
  976. 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)
  977. item.PunctureCount = Total
  978. item.ChangemedicineCount = TotalOne
  979. item.PCount = Total
  980. item.CureCount = TotalTwo
  981. item.MissionCount = TotalThree
  982. }
  983. if err != nil {
  984. return nil, err
  985. }
  986. return datas, nil
  987. }
  988. //工作量统计
  989. type AdminUser struct {
  990. ID int64 `gorm:"column:id" json:"id" form:"id"`
  991. AdminUserId int64 `gorm:"column:admin_user_id" json:"admin_user_id" form:"admin_user_id"`
  992. OrgId int64 `gorm:"column:org_id" json:"org_id" form:"org_id"`
  993. UserName string `gorm:"column:user_name" json:"user_name" form:"user_name"`
  994. UserType int64 `gorm:"column:user_type" json:"user_type" form:"user_type"`
  995. }
  996. func GetAllAdminUser(user_org_id int64) (datas []*AdminUser, err error) {
  997. userDb := service.UserReadDB()
  998. 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)
  999. return datas, nil
  1000. }