index_evaluation_service.go 62KB

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