123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161 |
- package statistics_service
-
- import (
- "XT_New/models"
- "XT_New/service"
- "fmt"
- "github.com/jinzhu/gorm"
- "strconv"
- )
-
- func GetOrgFirstPatientInfo(user_org_id int64) (patient *models.Patients, err error) {
- db := service.XTReadDB()
- var tempPatient models.Patients
- findErr := db.Model(&models.Patients{}).Where("user_org_id = ? AND status = 1 AND lapseto = 1", user_org_id).First(&tempPatient).Error
- if findErr == gorm.ErrRecordNotFound {
- return nil, nil
- }
- if findErr != nil {
- return nil, findErr
- }
- return &tempPatient, nil
- }
-
- type ProcessIndexDataStruct struct {
- Date string `json:"date"`
- Value float64 `json:"value"`
- }
-
- //透析过程统计
- func GetDialysisProcessIndexChartData(user_org_id int64, patient_id int64, start_time int64, end_time int64, statistics_type int) (datas []*ProcessIndexDataStruct, err error) {
- db := service.XTReadDB()
- switch statistics_type {
- case 1:
- 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
- break
- case 2:
- 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
-
- break
- case 3:
- 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
-
- break
- case 4:
- 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
-
- break
- case 5:
- 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
-
- break
- case 6:
- 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
- break
- case 7:
- 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
-
- break
- case 8:
- 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
- break
-
- }
- if err != nil {
- return nil, err
- }
- return datas, nil
-
- }
-
- type otherItemAmount struct {
- Total int64 `json:"total"`
- Name string `json:"name"`
- Ratio string `json:"ratio"`
- }
-
- func GetDialysisProcessIndexOtherChartData(user_org_id int64, patient_id int64, start_time int64, end_time int64, statistics_type int) (item []*otherItemAmount, err error) {
- db := service.XTReadDB()
- var items []*otherItemAmount
- var tempErr error
- var total int64
- switch statistics_type {
- case 9:
- 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).
- Select("CASE WHEN p.mode_id = 1 THEN 'HD'" +
- " WHEN p.mode_id = 2 THEN 'HDF'" +
- " WHEN p.mode_id = 3 THEN 'HD+HP'" +
- " WHEN p.mode_id = 4 THEN 'HP'" +
- " WHEN p.mode_id = 5 THEN 'HF'" +
- " WHEN p.mode_id = 6 THEN 'SCUF'" +
- " WHEN p.mode_id = 7 THEN 'IUF'" +
- " WHEN p.mode_id = 8 THEN 'HFHD'" +
- " WHEN p.mode_id = 9 THEN 'HFHD+HP'" +
- " WHEN p.mode_id = 10 THEN 'PHF'" +
- " WHEN p.mode_id = 11 THEN 'HFR'" +
- " WHEN p.mode_id = 12 THEN 'HDF+HP'" +
- " WHEN p.mode_id = 13 THEN 'CRRT'" +
- " WHEN p.mode_id = 14 THEN '腹水回输'" +
- " WHEN p.mode_id = 19 THEN 'IUF+HD'" +
- " ELSE '未知' END AS name, COUNT(*) AS total",
- ).Group("p.mode_id").Scan(&items).Error
-
- break
- case 10:
- config, _ := GetAnticoagulantData(user_org_id)
- selectContent := "CASE"
- for _, item := range config {
- fmt.Println(selectContent)
- selectContent = selectContent + " WHEN p.anticoagulant =" + strconv.Itoa(item.Value) + " THEN " + "'" + item.Name + "'"
-
- }
- fmt.Println(selectContent)
- 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).
- Select(selectContent +
- " ELSE '未知' END AS name, COUNT(*) AS total",
- ).Group("p.anticoagulant").Scan(&items).Error
-
- break
- }
-
- 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)
-
- for _, item := range items {
- float_value, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", float64(item.Total)/float64(total)), 64)
- item.Ratio = strconv.FormatInt(int64(float_value*100), 10)
- }
- if tempErr != nil {
- return nil, err
- }
- return items, nil
- }
-
- type PatientDialysisRecord struct {
- models.VMSchedule
- DeviceNumber VMDeviceNumber `gorm:"foreignkey:ID;AssociationForeignKey:BedId;" json:"device_number"`
- DialysisPrescription VMDialysisPrescription `json:"prescription" gorm:"foreignkey:RecordDate;AssociationForeignKey:ScheduleDate;"`
- PredialysisEvaluation VMPredialysisEvaluation `json:"predialysis_evaluation" gorm:"foreignkey:AssessmentDate;AssociationForeignKey:ScheduleDate;"`
- AssessmentAfterDislysis models.AssessmentAfterDislysis `json:"assessment_after_dislysis" gorm:"foreignkey:AssessmentDate;AssociationForeignKey:ScheduleDate;"`
- Patient VMPatients `json:"patient" gorm:"foreignkey:ID;AssociationForeignKey:PatientID;"`
- }
-
- func GetDialysisProcessIndexTableData(orgID, patientID int64, page, limit, start, end int64) ([]*PatientDialysisRecord, int64, error) {
- offset := (page - 1) * limit
- var total int64
- var err error
- var orders []*PatientDialysisRecord
- readDb := service.XTReadDB()
- db := readDb.Table("xt_schedule as sch").
- Preload("DeviceNumber", "org_id=? and status=1", orgID).
- Preload("DialysisPrescription", "patient_id=? and user_org_id=? and status=1", patientID, orgID).
- Preload("PredialysisEvaluation", "patient_id=? and user_org_id=? and status=1", patientID, orgID).
- Preload("AssessmentAfterDislysis", "patient_id=? and user_org_id=? and status=1", patientID, orgID).
- Preload("Patient", "user_org_id=? and status=1", orgID).
- Where("sch.patient_id=? and sch.user_org_id=? and sch.status=1", patientID, orgID).Group("sch.schedule_date")
- if start != 0 {
- db = db.Where("sch.schedule_date>=?", start)
- }
- if end != 0 {
- db = db.Where("sch.schedule_date<=?", end)
- }
- 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
- return orders, total, err
- }
- func GetAnticoagulantData(user_org_id int64) (config []*models.Dataconfig, tempErr error) {
- var tempDataConfig []*models.Dataconfig
- var tempConfig models.Dataconfig
- db := service.XTReadDB()
- db.Model(&models.Dataconfig{}).Where("name = '抗凝剂' AND field_name = 'anticoagulant' AND parent_id = 0").First(&tempConfig)
- err := db.Model(&models.Dataconfig{}).Where("(org_id = 0 OR org_id = ?) AND parent_id = ?", user_org_id, tempConfig.ID).Find(&tempDataConfig).Error
- return tempDataConfig, err
- }
-
- //透析过程统计
-
- //透析监测统计
- func GetDialysisWatchChartData(user_org_id int64, patient_id int64, start_time int64, end_time int64, statistics_type int) (datas []*ProcessIndexDataStruct, err error) {
- db := service.XTReadDB()
- switch statistics_type {
- case 1:
- if patient_id == 0 {
- 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
-
- } else {
- 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
- }
- break
- case 2:
-
- if patient_id == 0 {
- //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
-
- 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
-
- } else {
- //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
-
- 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
-
- }
-
- break
- case 3:
- if patient_id == 0 {
- 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
-
- } else {
-
- 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
-
- }
- break
- case 4:
- if patient_id == 0 {
- 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
-
- } else {
-
- 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
-
- }
- break
- case 5:
- if patient_id == 0 {
-
- 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
-
- } else {
- 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
-
- }
- break
- case 6:
- if patient_id == 0 {
- 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
-
- } else {
- 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
-
- }
- break
- case 7:
- if patient_id == 0 {
-
- 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
-
- } else {
-
- 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
-
- }
- break
- case 8:
- if patient_id == 0 {
- 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
-
- } else {
- 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
- }
- break
- case 9:
- if patient_id == 0 {
- 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
-
- } else {
-
- 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
-
- }
-
- break
- }
- if err != nil {
- return nil, err
- }
- return datas, nil
-
- }
- func GetDialysisWatchTableData(orgID, patientID int64, page, limit, start, end int64) ([]*VMMonitoringRecord, int64, error) {
- offset := (page - 1) * limit
- var total int64
- var err error
- var orders []*VMMonitoringRecord
- readDb := service.XTReadDB()
- db := readDb.Table("xt_monitoring_record as mo").
- Where(" mo.user_org_id=? and mo.status=1", orgID)
- if patientID != 0 {
- db = db.Where("mo.patient_id =?", patientID)
- }
- if start != 0 {
- db = db.Where("mo.operate_time>=?", start)
- }
- if end != 0 {
- db = db.Where("mo.operate_time<=?", end)
- }
- 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
- return orders, total, err
- }
-
- //透析监测统计
-
- //透析体重统计
- func GetDialysisWeightChartData(user_org_id int64, start_time int64, end_time int64, statistics_type int) (item []*otherItemAmount, err error) {
- db := service.XTReadDB()
- var items []*otherItemAmount
- var tempErr error
- //var total int64
- switch statistics_type {
- case 1:
- 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).
- Select("CASE WHEN dry_weight < 40 THEN '小于40kg'" +
- " WHEN dry_weight >= 40 AND dry_weight < 50 THEN '40~50kg'" +
- " WHEN dry_weight >= 50 AND dry_weight < 60 THEN '50~60kg'" +
- " WHEN dry_weight >= 60 AND dry_weight < 70 THEN '60~70kg'" +
- " WHEN dry_weight >= 70 THEN '大于70kg'" +
- " ELSE '未知' END AS name, COUNT(*) AS total",
- ).Group("name").Scan(&items).Error
-
- var isHasConditionOne bool = false
- var isHasConditionTwo bool = false
- var isHasConditionThree bool = false
- var isHasConditionFour bool = false
- var isHasConditionFive bool = false
-
- for _, item := range items {
- if item.Name == "小于40kg" {
- isHasConditionOne = true
- }
- if item.Name == "40~50kg" {
- isHasConditionTwo = true
- }
-
- if item.Name == "60~70kg" {
- isHasConditionTwo = true
- }
-
- if item.Name == "大于70kg" {
- isHasConditionFour = true
- }
-
- if item.Name == "未知" {
- isHasConditionFive = true
- }
- }
- if !isHasConditionOne {
- newItem := &otherItemAmount{
- Total: 0,
- Name: "小于40kg",
- Ratio: "0",
- }
- items = append(items, newItem)
- }
-
- if !isHasConditionTwo {
- newItem := &otherItemAmount{
- Total: 0,
- Name: "40~50kg",
- Ratio: "0",
- }
- items = append(items, newItem)
- }
- if !isHasConditionThree {
- newItem := &otherItemAmount{
- Total: 0,
- Name: "60~70kg",
- Ratio: "0",
- }
- items = append(items, newItem)
-
- }
-
- if !isHasConditionFour {
- newItem := &otherItemAmount{
- Total: 0,
- Name: "大于70kg",
- Ratio: "0",
- }
- items = append(items, newItem)
-
- }
-
- if !isHasConditionFive {
- newItem := &otherItemAmount{
- Total: 0,
- Name: "未知",
- Ratio: "0",
- }
- items = append(items, newItem)
- }
-
- break
- case 2:
- 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).
- Select("CASE WHEN weight_before < 40 THEN '小于40kg'" +
- " WHEN weight_before >= 40 AND weight_before < 50 THEN '40~50kg'" +
- " WHEN weight_before >= 50 AND weight_before < 60 THEN '50~60kg'" +
- " WHEN weight_before >= 60 AND weight_before < 70 THEN '60~70kg'" +
- " WHEN weight_before >= 70 THEN '大于70kg'" +
- " ELSE '未知' END AS name, COUNT(*) AS total",
- ).Group("name").Scan(&items).Error
-
- var isHasConditionOne bool = false
- var isHasConditionTwo bool = false
- var isHasConditionThree bool = false
- var isHasConditionFour bool = false
- var isHasConditionFive bool = false
-
- for _, item := range items {
- if item.Name == "小于40kg" {
- isHasConditionOne = true
- }
- if item.Name == "40~50kg" {
- isHasConditionTwo = true
- }
-
- if item.Name == "60~70kg" {
- isHasConditionTwo = true
- }
-
- if item.Name == "大于70kg" {
- isHasConditionFour = true
- }
-
- if item.Name == "未知" {
- isHasConditionFive = true
- }
- }
- if !isHasConditionOne {
- newItem := &otherItemAmount{
- Total: 0,
- Name: "小于40kg",
- Ratio: "0",
- }
- items = append(items, newItem)
- }
-
- if !isHasConditionTwo {
- newItem := &otherItemAmount{
- Total: 0,
- Name: "40~50kg",
- Ratio: "0",
- }
- items = append(items, newItem)
- }
- if !isHasConditionThree {
- newItem := &otherItemAmount{
- Total: 0,
- Name: "60~70kg",
- Ratio: "0",
- }
- items = append(items, newItem)
-
- }
-
- if !isHasConditionFour {
- newItem := &otherItemAmount{
- Total: 0,
- Name: "大于70kg",
- Ratio: "0",
- }
- items = append(items, newItem)
-
- }
-
- if !isHasConditionFive {
- newItem := &otherItemAmount{
- Total: 0,
- Name: "未知",
- Ratio: "0",
- }
- items = append(items, newItem)
- }
- break
- case 3:
- type weight struct {
- WeightAfter float64 `json:"weight_after"`
- WeightBefore float64 `json:"weight_before"`
- }
- var weights []*weight
- var weightAdd []float64
- 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)
- for index, _ := range weights {
- if index+1 < len(weights) {
- if weights[index+1].WeightAfter == 0 || weights[index].WeightBefore == 0 {
- continue
- }
- weightAdd = append(weightAdd, weights[index].WeightBefore-weights[index+1].WeightAfter)
- }
- }
- fmt.Println(weightAdd)
-
- var total_one int64
- var total_two int64
- var total_three int64
- var total_four int64
- var total_five int64
-
- for _, item := range weightAdd {
- if item < 1 {
- total_one++
- fmt.Println(total_one)
-
- }
-
- if item >= 1 && item < 2 {
- total_two++
- fmt.Println(total_two)
-
- }
-
- if item >= 2 && item < 3 {
- total_three++
- fmt.Println(total_three)
-
- }
-
- if item >= 3 && item <= 4 {
- total_four++
- fmt.Println(total_four)
-
- }
-
- if item > 4 {
- total_five++
- fmt.Println(total_five)
-
- }
- }
-
- newItem := &otherItemAmount{
- Total: total_one,
- Name: "小于1kg",
- Ratio: "0",
- }
- newItem1 := &otherItemAmount{
- Total: total_two,
- Name: "1-2kg",
- Ratio: "0",
- }
- newItem2 := &otherItemAmount{
- Total: total_three,
- Name: "2-3kg",
- Ratio: "0",
- }
- newItem3 := &otherItemAmount{
- Total: total_four,
- Name: "3-4kg",
- Ratio: "0",
- }
- newItem4 := &otherItemAmount{
- Total: total_five,
- Name: "大于4kg",
- Ratio: "0",
- }
-
- items = append(items, newItem)
- items = append(items, newItem1)
- items = append(items, newItem2)
- items = append(items, newItem3)
- items = append(items, newItem4)
-
- break
- case 4:
- 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).
- Select("CASE WHEN weight_after < 40 THEN '小于40kg'" +
- " WHEN weight_after >= 40 AND weight_after < 50 THEN '40~50kg'" +
- " WHEN weight_after >= 50 AND weight_after < 60 THEN '50~60kg'" +
- " WHEN weight_after >= 60 AND weight_after < 70 THEN '60~70kg'" +
- " WHEN weight_after >= 70 THEN '大于70kg'" +
- " ELSE '未知' END AS name, COUNT(*) AS total",
- ).Group("name").Scan(&items).Error
-
- var isHasConditionOne bool = false
- var isHasConditionTwo bool = false
- var isHasConditionThree bool = false
- var isHasConditionFour bool = false
- var isHasConditionFive bool = false
-
- for _, item := range items {
- if item.Name == "小于40kg" {
- isHasConditionOne = true
- }
- if item.Name == "40~50kg" {
- isHasConditionTwo = true
- }
-
- if item.Name == "60~70kg" {
- isHasConditionTwo = true
- }
-
- if item.Name == "大于70kg" {
- isHasConditionFour = true
- }
-
- if item.Name == "未知" {
- isHasConditionFive = true
- }
- }
- if !isHasConditionOne {
- newItem := &otherItemAmount{
- Total: 0,
- Name: "小于40kg",
- Ratio: "0",
- }
- items = append(items, newItem)
- }
-
- if !isHasConditionTwo {
- newItem := &otherItemAmount{
- Total: 0,
- Name: "40~50kg",
- Ratio: "0",
- }
- items = append(items, newItem)
- }
- if !isHasConditionThree {
- newItem := &otherItemAmount{
- Total: 0,
- Name: "60~70kg",
- Ratio: "0",
- }
- items = append(items, newItem)
-
- }
-
- if !isHasConditionFour {
- newItem := &otherItemAmount{
- Total: 0,
- Name: "大于70kg",
- Ratio: "0",
- }
- items = append(items, newItem)
-
- }
-
- if !isHasConditionFive {
- newItem := &otherItemAmount{
- Total: 0,
- Name: "未知",
- Ratio: "0",
- }
- items = append(items, newItem)
- }
- break
- }
- if tempErr != nil {
- return nil, err
- }
-
- fmt.Println(items)
- return items, nil
- }
- func GetDialysisWeightTableData(orgID, patientID int64, page, limit, start, end int64) ([]*VMPredialysisEvaluation, int64, error) {
- offset := (page - 1) * limit
- var total int64
- var err error
- var orders []*VMPredialysisEvaluation
- readDb := service.XTReadDB()
- db := readDb.Table("xt_assessment_before_dislysis")
- db = db.Where(" user_org_id=? and status=1", orgID)
- if patientID > 0 {
- db = db.Where("patient_id=?", patientID)
- }
-
- if start != 0 {
- db = db.Where("assessment_date>=?", start)
- }
- if end != 0 {
- db = db.Where("assessment_date<=?", end)
- }
- db = db.Preload("VMAssessmentAfterDislysis", "status = 1").Preload("VMPatients", "status = 1 AND user_org_id = ?", orgID)
- err = db.Count(&total).Offset(offset).Limit(limit).Order("assessment_date desc").Select("dry_weight, weight_before, patient_id, assessment_date").Find(&orders).Error
-
- for _, item := range orders {
- after, _ := GetLastAfterWeight(orgID, item.AssessmentDate, item.PatientId)
- if after.ID > 0 {
- fmt.Println(after.WeightAfter)
- item.LastAfterWeight = after.WeightAfter
- }
- }
- return orders, total, err
- }
-
- type LastAfter struct {
- ID int64 `json:"id"`
- WeightAfter float64 `json:"weight_after"`
- }
-
- func GetLastAfterWeight(user_org_id int64, before_assessment_date int64, patient_id int64) (after LastAfter, err error) {
- readDb := service.XTReadDB()
- 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
- return
- }
-
- func GetPatientDialysisWeightChartData(user_org_id int64, patient_id int64, start_time int64, end_time int64, statistics_type int) (datas []*ProcessIndexDataStruct, err error) {
- db := service.XTReadDB()
- switch statistics_type {
- case 1:
- 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
- break
- case 2:
- 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
- break
- case 3:
-
- type weight struct {
- WeightAfter float64 `json:"weight_after"`
- WeightBefore float64 `json:"weight_before"`
- Date string `json:"date"`
- }
-
- var weights []*weight
- 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)
- fmt.Println(len(weights))
- for index, _ := range weights {
-
- if index+1 < len(weights) {
- var weight_add ProcessIndexDataStruct
- fmt.Println(weights[index+1].WeightAfter)
- fmt.Println(weights[index].WeightBefore)
-
- if weights[index+1].WeightAfter == 0 || weights[index].WeightBefore == 0 {
- continue
- }
- add := weights[index].WeightBefore - weights[index+1].WeightAfter
- weight_add.Value = add
- weight_add.Date = weights[index].Date
- datas = append(datas, &weight_add)
-
- }
- }
-
- break
- case 4:
- 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
- break
-
- }
- if err != nil {
- return nil, err
- }
- return datas, nil
-
- }
-
- //透析体重统计
-
- //透析血压统计
- func GetBloodPressureChartData(user_org_id int64, start_time int64, end_time int64, statistics_type int, patient_id int64) (item []*otherItemAmount, err error) {
- db := service.XTReadDB()
- var items []*otherItemAmount
- var tempErr error
- //var total int64
- switch statistics_type {
- case 1:
- type bp struct {
- SystolicBloodPressure float64 `json:"systolic_blood_pressure"`
- DiastolicBloodPressure float64 `json:"diastolic_blood_pressure"`
- }
- var bps []*bp
-
- if patient_id == 0 {
- 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)
- } else {
- 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)
-
- }
-
- var total_one int64
- var total_two int64
- var total_three int64
- var total_four int64
-
- for _, item := range bps {
- if item.SystolicBloodPressure > 160 && item.DiastolicBloodPressure > 100 {
- total_one++
- } else if item.SystolicBloodPressure < 140 && item.DiastolicBloodPressure < 99 {
- total_two++
-
- } else if item.SystolicBloodPressure >= 100 && item.SystolicBloodPressure <= 160 && item.DiastolicBloodPressure >= 99 && item.DiastolicBloodPressure <= 140 {
- total_three++
- } else {
- total_four++
- }
- }
-
- newItem := &otherItemAmount{
- Total: total_one,
- Name: "大于160/100mmHg",
- Ratio: "0",
- }
- newItem1 := &otherItemAmount{
- Total: total_two,
- Name: "小于140/99mmHg",
- Ratio: "0",
- }
- newItem2 := &otherItemAmount{
- Total: total_three,
- Name: "140-160mmHg/90-100mmHg",
- Ratio: "0",
- }
- newItem3 := &otherItemAmount{
- Total: total_four,
- Name: "其他",
- Ratio: "0",
- }
-
- items = append(items, newItem)
- items = append(items, newItem1)
- items = append(items, newItem2)
- items = append(items, newItem3)
-
- break
- case 2:
- if patient_id == 0 {
- 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).
- Select("CASE WHEN systolic_blood_pressure > 160 AND diastolic_blood_pressure > 100 THEN '大于160/100mmHg'" +
- " WHEN systolic_blood_pressure < 140 AND diastolic_blood_pressure < 99 THEN '小于140/99mmHg'" +
- " 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'" +
- " ELSE '其他' END AS name, COUNT(*) AS total",
- ).Scan(&items).Group("name").Error
-
- } else {
-
- 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).
- Select("CASE WHEN systolic_blood_pressure > 160 AND diastolic_blood_pressure > 100 THEN '大于160/100mmHg'" +
- " WHEN systolic_blood_pressure < 140 AND diastolic_blood_pressure < 99 THEN '小于140/99mmHg'" +
- " 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'" +
- " ELSE '其他' END AS name, COUNT(*) AS total",
- ).Scan(&items).Group("name").Error
-
- }
-
- var isHasConditionOne bool = false
- var isHasConditionTwo bool = false
- var isHasConditionThree bool = false
-
- for _, item := range items {
- if item.Name == "大于160/100mmHg" {
- isHasConditionOne = true
- }
- if item.Name == "小于140/99mmHg" {
- isHasConditionTwo = true
- }
-
- if item.Name == "140-160mmHg/90-100mmHg" {
- isHasConditionTwo = true
- }
- }
- if !isHasConditionOne {
- newItem := &otherItemAmount{
- Total: 0,
- Name: "大于160/100mmHg",
- Ratio: "0",
- }
- items = append(items, newItem)
- }
-
- if !isHasConditionTwo {
- newItem := &otherItemAmount{
- Total: 0,
- Name: "小于140/99mmHg",
- Ratio: "0",
- }
- items = append(items, newItem)
-
- }
-
- if !isHasConditionThree {
- newItem := &otherItemAmount{
- Total: 0,
- Name: "140-160mmHg/90-100mmHg",
- Ratio: "0",
- }
- items = append(items, newItem)
-
- }
- break
- case 3:
- if patient_id == 0 {
- 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).
- Select("CASE WHEN systolic_blood_pressure > 160 AND diastolic_blood_pressure > 100 THEN '大于160/100mmHg'" +
- " WHEN systolic_blood_pressure < 140 AND diastolic_blood_pressure < 99 THEN '小于140/99mmHg'" +
- " 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'" +
- " ELSE '其他' END AS name, COUNT(*) AS total",
- ).Scan(&items).Group("name").Error
- } else {
- 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).
- Select("CASE WHEN systolic_blood_pressure > 160 AND diastolic_blood_pressure > 100 THEN '大于160/100mmHg'" +
- " WHEN systolic_blood_pressure < 140 AND diastolic_blood_pressure < 99 THEN '小于140/99mmHg'" +
- " 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'" +
- " ELSE '其他' END AS name, COUNT(*) AS total",
- ).Scan(&items).Group("name").Error
- }
-
- var isHasConditionOne bool = false
- var isHasConditionTwo bool = false
- var isHasConditionThree bool = false
-
- for _, item := range items {
- if item.Name == "大于160/100mmHg" {
- isHasConditionOne = true
- }
- if item.Name == "小于140/99mmHg" {
- isHasConditionTwo = true
- }
-
- if item.Name == "140-160mmHg/90-100mmHg" {
- isHasConditionTwo = true
- }
- }
- if !isHasConditionOne {
- newItem := &otherItemAmount{
- Total: 0,
- Name: "大于160/100mmHg",
- Ratio: "0",
- }
- items = append(items, newItem)
- }
-
- if !isHasConditionTwo {
- newItem := &otherItemAmount{
- Total: 0,
- Name: "小于140/99mmHg",
- Ratio: "0",
- }
- items = append(items, newItem)
- }
- if !isHasConditionThree {
- newItem := &otherItemAmount{
- Total: 0,
- Name: "140-160mmHg/90-100mmHg",
- Ratio: "0",
- }
- items = append(items, newItem)
-
- }
-
- break
- }
- if tempErr != nil {
- return nil, err
- }
- return items, nil
- }
- func GetBloodPressureTableData(orgID, patientID int64, page, limit, start, end int64) ([]*VMSchedule, int64, error) {
- offset := (page - 1) * limit
- var total int64
- var err error
- var orders []*VMSchedule
- readDb := service.XTReadDB()
- db := readDb.Table("xt_schedule as sch")
- db = db.Where(" sch.user_org_id=? and sch.status=1", orgID)
- if patientID > 0 {
- db = db.Where("sch.patient_id=?", patientID)
- }
- if start != 0 {
- db = db.Where("sch.created_time>=?", start)
- }
- if end != 0 {
- db = db.Where("sch.created_time<=?", end)
- }
- db = db.Preload("VMPredialysisEvaluation", "status = 1").
- Preload("VMAssessmentAfterDislysis", "status = 1").
- Preload("VMMinMonitoringRecord", func(db *gorm.DB) *gorm.DB {
- return db.Where("status = 1").Order("systolic_blood_pressure DESC")
- }).
- Preload("VMMaxMonitoringRecord", func(db *gorm.DB) *gorm.DB {
- return db.Where("status = 1").Order("systolic_blood_pressure ASC")
- }).
- Preload("VMPatients", "status = 1 AND user_org_id = ?", orgID)
- 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
- return orders, total, err
-
- }
-
- type BPDataStruct struct {
- Date string `json:"date"`
- SystolicBloodPressure float64 `json:"systolic_blood_pressure"`
- DiastolicBloodPressure float64 `json:"diastolic_blood_pressure"`
- }
-
- func GetPatientBloodPressureChartData(user_org_id int64, patient_id int64, start_time int64, end_time int64, statistics_type int) (datas []*BPDataStruct, err error) {
- fmt.Println("8u8923u213u8129")
- db := service.XTReadDB()
- switch statistics_type {
- case 1:
- 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
- break
- case 2:
- 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
- break
-
- }
- if err != nil {
- return nil, err
- }
- return datas, nil
-
- }
-
- //透析血压统计
-
- //工作量统计
- func GetDoctorWorkloadChartData(user_org_id int64, start_time int64, end_time int64, statistics_type int) (datas []*VMUserAdminRole, err error) {
- userDb := service.UserReadDB()
- db := service.XTReadDB()
- 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)
-
- switch statistics_type {
- case 1:
- for _, item := range datas {
- var total int64
- 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)
- item.PCount = total
- }
- break
- case 2:
- for _, item := range datas {
- var total int64
- 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)
- item.CourseCount = total
- }
-
- break
- case 3:
- for _, item := range datas {
- var total int64
- 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)
- item.RescueCount = total
- }
- break
- }
- if err != nil {
- return nil, err
- }
-
- fmt.Println(datas)
- return datas, nil
-
- }
- func GetDoctorWorkloadTableData(user_org_id int64, start_time int64, end_time int64, admin_user_id int64) (datas []*VMUserAdminRole, err error) {
- userDb := service.UserReadDB()
- db := service.XTReadDB()
- if admin_user_id == 0 {
- 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)
- } else {
- 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)
- }
- for _, item := range datas {
- var Total int64
- var TotalOne int64
- var TotalTwo int64
- 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)
- 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)
- 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)
- item.PCount = Total
- item.CourseCount = TotalOne
- item.RescueCount = TotalTwo
- }
- if err != nil {
- return nil, err
- }
- return datas, nil
-
- }
- func GetNurseWorkloadChartData(user_org_id int64, start_time int64, end_time int64, statistics_type int) (datas []*VMUserAdminRole, err error) {
- userDb := service.UserReadDB()
- db := service.XTReadDB()
- 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)
-
- var tempConfig models.Dataconfig
- db.Model(&models.Dataconfig{}).Where("name = '血管通路' AND module = 'hemodialysis' AND field_name = 'vascular_access_desc' AND parent_id = 0").First(&tempConfig)
-
- switch statistics_type {
- case 1:
- for _, item := range datas {
- var Total int64
- 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)
- item.PunctureCount = Total
- }
- break
- case 2:
- for _, item := range datas {
- var Total int64
- 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)
- item.ChangemedicineCount = Total
- }
-
- break
- case 3:
- for _, item := range datas {
- var total int64
- 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)
- item.CureCount = total
- }
- break
-
- case 4:
- for _, item := range datas {
- var Total int64
- 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)
- item.MissionCount = Total
- }
- break
- }
-
- if err != nil {
- return nil, err
- }
- return datas, nil
-
- }
- func GetNurseWorkloadTableData(user_org_id int64, start_time int64, end_time int64, admin_user_id int64) (datas []*VMUserAdminRole, err error) {
- userDb := service.UserReadDB()
- db := service.XTReadDB()
- var tempConfig models.Dataconfig
- db.Model(&models.Dataconfig{}).Where("name = '血管通路' AND module = 'hemodialysis' AND field_name = 'vascular_access_desc' AND parent_id = 0").First(&tempConfig)
-
- if admin_user_id == 0 {
- 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)
- } else {
- 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)
- }
- for _, item := range datas {
- var Total int64
- var TotalOne int64
- var TotalTwo int64
- var TotalThree int64
- 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)
- 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)
- 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)
- 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)
- item.PunctureCount = Total
- item.ChangemedicineCount = TotalOne
- item.PCount = Total
- item.CureCount = TotalTwo
- item.MissionCount = TotalThree
- }
- if err != nil {
- return nil, err
- }
- return datas, nil
-
- }
-
- //工作量统计
- type AdminUser struct {
- ID int64 `gorm:"column:id" json:"id" form:"id"`
- AdminUserId int64 `gorm:"column:admin_user_id" json:"admin_user_id" form:"admin_user_id"`
- OrgId int64 `gorm:"column:org_id" json:"org_id" form:"org_id"`
- UserName string `gorm:"column:user_name" json:"user_name" form:"user_name"`
- UserType int64 `gorm:"column:user_type" json:"user_type" form:"user_type"`
- }
-
- func GetAllAdminUser(user_org_id int64) (datas []*AdminUser, err error) {
- userDb := service.UserReadDB()
- 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)
- return datas, nil
-
- }
|