package controllers

import (
	"Xcx_New/enums"
	"Xcx_New/models"
	"Xcx_New/service/statistics_service"
	"Xcx_New/utils"
	"github.com/astaxie/beego"
	"time"
)

func PCIndexEvaluationApiControllersRegisterRouters() {

	beego.Router("/api/inspectionindex/init", &PCIndexEvaluationApiController{}, "Get:GetLaboratoryIndexInitData")
	beego.Router("/api/rangevalue/get", &PCIndexEvaluationApiController{}, "Get:GetLaboratoryIndexProjectRangeValueData")
	beego.Router("/api/inspectionindex/chart", &PCIndexEvaluationApiController{}, "Get:GetInspectionChartData")
	beego.Router("/api/inspectionindex/table", &PCIndexEvaluationApiController{}, "Get:GetInspectionChartTableData")
	beego.Router("/api/patientinspectionindex/chart", &PCIndexEvaluationApiController{}, "Get:GetPatientInspectionChartData")
	beego.Router("/api/patientinspectionindex/barchart", &PCIndexEvaluationApiController{}, "Get:GetPatientInspectionBarChartData")

	beego.Router("/api/dialysisprocessindex/chart", &PCIndexEvaluationApiController{}, "Get:GetDialysisProcessIndexChartData")
	beego.Router("/api/dialysisprocessindex/table", &PCIndexEvaluationApiController{}, "Get:GetDialysisProcessIndexTableData")

	beego.Router("/api/dialysiswatch/chart", &PCIndexEvaluationApiController{}, "Get:GetDialysisWatchChartData")
	beego.Router("/api/dialysiswatch/table", &PCIndexEvaluationApiController{}, "Get:GetDialysisWatchTableData")

	beego.Router("/api/dialysisbloodpressure/chart", &PCIndexEvaluationApiController{}, "Get:GetDialysisBloodPressureChartData")
	beego.Router("/api/dialysisbloodpressure/table", &PCIndexEvaluationApiController{}, "Get:GetDialysisBloodPressureTableData")
	beego.Router("/api/patientdialysisbloodpressure/chart", &PCIndexEvaluationApiController{}, "Get:GetDialysisPatientBloodPressureChartData")

	beego.Router("/api/dialysisweight/chart", &PCIndexEvaluationApiController{}, "Get:GetDialysisWeightChartData")
	beego.Router("/api/dialysisweight/table", &PCIndexEvaluationApiController{}, "Get:GetDialysisWeightTableData")
	beego.Router("/api/patientdialysisweight/chart", &PCIndexEvaluationApiController{}, "Get:GetDialysisPatientWeightChartData")

	beego.Router("/api/doctorworkload/chart", &PCIndexEvaluationApiController{}, "Get:GetDoctorWorkloadChartData")
	beego.Router("/api/doctorworkload/table", &PCIndexEvaluationApiController{}, "Get:GetDoctorWorkloadTableData")

	beego.Router("/api/nurseworkload/chart", &PCIndexEvaluationApiController{}, "Get:GetNurseWorkloadChartData")
	beego.Router("/api/nurseworkload/table", &PCIndexEvaluationApiController{}, "Get:GetNurseWorkloadTableData")

	beego.Router("/api/adminuser/all", &PCIndexEvaluationApiController{}, "Get:GetAdminUser")
	beego.Router("/api/defalutpatient/get", &PCIndexEvaluationApiController{}, "Get:GetDefaultPatient")

}

type PCIndexEvaluationApiController struct {
	BaseAuthAPIController
}

//化验指标

//初始化数据
func (this *PCIndexEvaluationApiController) GetLaboratoryIndexInitData() {
	adminUserInfo := this.GetAdminUserInfo()

	var references []*models.InspectionReference
	count, _ := statistics_service.FindOrgInspectionCount(adminUserInfo.CurrentOrgId)
	if count <= 0 {
		references, _ = statistics_service.FindOrgInspectionReference(0, 1)
		references2, _ := statistics_service.FindOrgInspectionReference(0, 2)
		references = append(references, references2...)

	} else {
		references, _ = statistics_service.FindOrgInspectionReference(adminUserInfo.CurrentOrgId, 1)
		references2, _ := statistics_service.FindOrgInspectionReference(adminUserInfo.CurrentOrgId, 2)
		references = append(references, references2...)

	}
	this.ServeSuccessJSON(map[string]interface{}{
		"references": references,
	})
}

//获取取值范围
func (this *PCIndexEvaluationApiController) GetLaboratoryIndexProjectRangeValueData() {
	range_type, _ := this.GetInt64("range_type")
	project_id, _ := this.GetInt64("project_id")
	item_id, _ := this.GetInt64("item_id")
	adminUserInfo := this.GetAdminUserInfo()
	var range_vaule []string
	var qcs models.InspectionReference
	if range_type == 1 {
		count, _ := statistics_service.FindOrgInspectionCount(adminUserInfo.CurrentOrgId)

		if count <= 0 {
			qcs, _ = statistics_service.FindOrgConfigRangeTypeValue(0, project_id, item_id)
		} else {
			qcs, _ = statistics_service.FindOrgConfigRangeTypeValue(adminUserInfo.CurrentOrgId, project_id, item_id)

		}

		range_vaule = append(range_vaule, qcs.RangeMin)
		range_vaule = append(range_vaule, qcs.RangeMax)

	} else {

		inspection, _ := statistics_service.FindOrgInspectionReferenceRangeTypeValue(adminUserInfo.CurrentOrgId, project_id, item_id)
		for _, item := range inspection {
			range_vaule = append(range_vaule, item.InspectValue)
		}

	}
	this.ServeSuccessJSON(map[string]interface{}{
		"range_vaule": range_vaule,
	})

}
func (this *PCIndexEvaluationApiController) GetInspectionChartData() {
	adminUserInfo := this.GetAdminUserInfo()
	start_time := this.GetString("start_time")
	end_time := this.GetString("end_time")
	project_id, _ := this.GetInt64("project_id")
	item_id, _ := this.GetInt64("item_id")
	range_type, _ := this.GetInt("range_type")

	timeLayout := "2006-01-02"
	loc, _ := time.LoadLocation("Local")

	var theStartTIme int64
	if len(start_time) > 0 {
		theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", start_time+" 00:00:00", loc)
		if err != nil {
			utils.ErrorLog(err.Error())
		}
		theStartTIme = theTime.Unix()
	}
	var theEndtTIme int64
	if len(end_time) > 0 {
		theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", end_time+" 23:59:59", loc)
		if err != nil {
			utils.ErrorLog(err.Error())
		}
		theEndtTIme = theTime.Unix()
	}

	var range_value string

	if range_type == 1 {
		count, _ := statistics_service.FindOrgInspectionCount(adminUserInfo.CurrentOrgId)

		if count <= 0 {
			qcs, _ := statistics_service.FindOrgConfigRangeTypeValue(0, project_id, item_id)
			range_value = qcs.RangeMin + "," + qcs.RangeMax

		} else {
			qcs, _ := statistics_service.FindOrgConfigRangeTypeValue(adminUserInfo.CurrentOrgId, project_id, item_id)
			range_value = qcs.RangeMin + "," + qcs.RangeMax
		}

	} else {

		inspection, _ := statistics_service.FindOrgInspectionReferenceRangeTypeValue(adminUserInfo.CurrentOrgId, project_id, item_id)
		for _, item := range inspection {
			if len(range_value) == 0 {
				range_value = item.InspectValue
			} else {
				range_value = range_value + "," + item.InspectValue
			}
		}

	}

	data, _ := statistics_service.GetInspectionChartData(adminUserInfo.CurrentOrgId, theStartTIme, theEndtTIme, project_id, item_id, range_type, range_value)
	this.ServeSuccessJSON(map[string]interface{}{
		"data": data,
	})

}
func (this *PCIndexEvaluationApiController) GetInspectionChartTableData() {
	adminUserInfo := this.GetAdminUserInfo()
	start_time := this.GetString("start_time")
	end_time := this.GetString("end_time")
	patient_id, _ := this.GetInt64("patient_id")
	page, _ := this.GetInt64("page")
	limit, _ := this.GetInt64("limit")
	project_id, _ := this.GetInt64("project_id")
	item_id, _ := this.GetInt64("item_id")
	range_value := this.GetString("range_value")
	range_type, _ := this.GetInt("range_type")

	if page == 0 {
		page = 1
	}
	if limit == 0 {
		limit = 20
	}
	timeLayout := "2006-01-02"
	loc, _ := time.LoadLocation("Local")

	var theStartTIme int64
	if len(start_time) > 0 {
		theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", start_time+" 00:00:00", loc)
		if err != nil {
			utils.ErrorLog(err.Error())
		}
		theStartTIme = theTime.Unix()
	}
	var theEndtTIme int64
	if len(end_time) > 0 {
		theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", end_time+" 23:59:59", loc)
		if err != nil {
			utils.ErrorLog(err.Error())
		}
		theEndtTIme = theTime.Unix()
	}
	data, total, _ := statistics_service.GetInspectionChartTableData(adminUserInfo.CurrentOrgId, theStartTIme, theEndtTIme, project_id, item_id, patient_id, page, limit, range_type, range_value)
	this.ServeSuccessJSON(map[string]interface{}{
		"data":  data,
		"total": total,
	})

}
func (this *PCIndexEvaluationApiController) GetPatientInspectionChartData() {
	adminUserInfo := this.GetAdminUserInfo()
	start_time := this.GetString("start_time")
	end_time := this.GetString("end_time")
	project_id, _ := this.GetInt64("project_id")
	item_id, _ := this.GetInt64("item_id")
	patient_id, _ := this.GetInt64("patient_id")

	timeLayout := "2006-01-02"
	loc, _ := time.LoadLocation("Local")

	var theStartTIme int64
	if len(start_time) > 0 {
		theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", start_time+" 00:00:00", loc)
		if err != nil {
			utils.ErrorLog(err.Error())
		}
		theStartTIme = theTime.Unix()
	}
	var theEndtTIme int64
	if len(end_time) > 0 {
		theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", end_time+" 23:59:59", loc)
		if err != nil {
			utils.ErrorLog(err.Error())
		}
		theEndtTIme = theTime.Unix()
	}

	data, _ := statistics_service.GetPatientInspectionChartData(adminUserInfo.CurrentOrgId, theStartTIme, theEndtTIme, project_id, item_id, patient_id)
	references, _ := statistics_service.FindOrgQualityControlStandardInspectionReferenceById(adminUserInfo.CurrentOrgId, project_id, item_id)

	this.ServeSuccessJSON(map[string]interface{}{
		"data":       data,
		"references": references,
	})

}
func (this *PCIndexEvaluationApiController) GetPatientInspectionBarChartData() {
	adminUserInfo := this.GetAdminUserInfo()
	start_time := this.GetString("start_time")
	end_time := this.GetString("end_time")
	project_id, _ := this.GetInt64("project_id")
	item_id, _ := this.GetInt64("item_id")
	range_type, _ := this.GetInt("range_type")
	patient_id, _ := this.GetInt64("patient_id")

	timeLayout := "2006-01-02"
	loc, _ := time.LoadLocation("Local")

	var theStartTIme int64
	if len(start_time) > 0 {
		theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", start_time+" 00:00:00", loc)
		if err != nil {
			utils.ErrorLog(err.Error())
		}
		theStartTIme = theTime.Unix()
	}
	var theEndtTIme int64
	if len(end_time) > 0 {
		theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", end_time+" 23:59:59", loc)
		if err != nil {
			utils.ErrorLog(err.Error())
		}
		theEndtTIme = theTime.Unix()
	}

	var range_value string
	if range_type == 1 {
		count, _ := statistics_service.FindOrgInspectionCount(adminUserInfo.CurrentOrgId)

		if count <= 0 {
			qcs, _ := statistics_service.FindOrgConfigRangeTypeValue(0, project_id, item_id)
			range_value = qcs.RangeMin + "," + qcs.RangeMax

		} else {
			qcs, _ := statistics_service.FindOrgConfigRangeTypeValue(adminUserInfo.CurrentOrgId, project_id, item_id)
			range_value = qcs.RangeMin + "," + qcs.RangeMax
		}

	} else {

		inspection, _ := statistics_service.FindOrgInspectionReferenceRangeTypeValue(adminUserInfo.CurrentOrgId, project_id, item_id)
		for _, item := range inspection {
			if len(range_value) == 0 {
				range_value = item.InspectValue
			} else {
				range_value = range_value + "," + item.InspectValue
			}
		}

	}
	data, _ := statistics_service.GetPatientInspectionBarChartData(adminUserInfo.CurrentOrgId, theStartTIme, theEndtTIme, project_id, item_id, range_type, range_value, patient_id)
	this.ServeSuccessJSON(map[string]interface{}{
		"data": data,
	})

}

func (this *PCIndexEvaluationApiController) GetAdminUser() {
	admins, _ := statistics_service.GetAllAdminUser(this.GetAdminUserInfo().CurrentOrgId)
	this.ServeSuccessJSON(map[string]interface{}{
		"admin": admins,
	})
}

func (this *PCIndexEvaluationApiController) GetDialysisProcessIndexChartData() {
	adminUserInfo := this.GetAdminUserInfo()
	statistics_type, _ := this.GetInt("statistics_type")
	start_time := this.GetString("start_time")
	end_time := this.GetString("end_time")
	patient_id, _ := this.GetInt64("patient_id")
	timeLayout := "2006-01-02"
	loc, _ := time.LoadLocation("Local")

	var theStartTIme int64
	if len(start_time) > 0 {
		theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", start_time+" 00:00:00", loc)
		if err != nil {
			utils.ErrorLog(err.Error())
		}
		theStartTIme = theTime.Unix()
	}
	var theEndtTIme int64
	if len(end_time) > 0 {
		theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", end_time+" 23:59:59", loc)
		if err != nil {
			utils.ErrorLog(err.Error())
		}
		theEndtTIme = theTime.Unix()
	}

	if patient_id == 0 {
		patientInfo, _ := statistics_service.GetOrgFirstPatientInfo(adminUserInfo.CurrentOrgId)
		if patientInfo == nil {
			this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeOrgNoPatient)
			return
		}
		if statistics_type == 9 || statistics_type == 10 {
			data, _ := statistics_service.GetDialysisProcessIndexOtherChartData(adminUserInfo.CurrentOrgId, patientInfo.ID, theStartTIme, theEndtTIme, statistics_type)

			this.ServeSuccessJSON(map[string]interface{}{
				"data": data,
			})
		} else {

			data, _ := statistics_service.GetDialysisProcessIndexChartData(adminUserInfo.CurrentOrgId, patientInfo.ID, theStartTIme, theEndtTIme, statistics_type)

			this.ServeSuccessJSON(map[string]interface{}{
				"data": data,
			})

		}
	} else {
		if statistics_type == 9 || statistics_type == 10 {
			data, _ := statistics_service.GetDialysisProcessIndexOtherChartData(adminUserInfo.CurrentOrgId, patient_id, theStartTIme, theEndtTIme, statistics_type)

			this.ServeSuccessJSON(map[string]interface{}{
				"data": data,
			})

		} else {
			data, _ := statistics_service.GetDialysisProcessIndexChartData(adminUserInfo.CurrentOrgId, patient_id, theStartTIme, theEndtTIme, statistics_type)

			this.ServeSuccessJSON(map[string]interface{}{
				"data": data,
			})

		}
	}

}
func (this *PCIndexEvaluationApiController) GetDialysisProcessIndexTableData() {
	adminUserInfo := this.GetAdminUserInfo()
	start_time := this.GetString("start_time")
	end_time := this.GetString("end_time")
	patient_id, _ := this.GetInt64("patient_id")

	page, _ := this.GetInt64("page")
	limit, _ := this.GetInt64("limit")

	if page == 0 {
		page = 1
	}
	if limit == 0 {
		limit = 20
	}

	timeLayout := "2006-01-02"
	loc, _ := time.LoadLocation("Local")

	var theStartTIme int64
	if len(start_time) > 0 {
		theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", start_time+" 00:00:00", loc)
		if err != nil {
			utils.ErrorLog(err.Error())
		}
		theStartTIme = theTime.Unix()
	}
	var theEndtTIme int64
	if len(end_time) > 0 {
		theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", end_time+" 23:59:59", loc)
		if err != nil {
			utils.ErrorLog(err.Error())
		}
		theEndtTIme = theTime.Unix()
	}

	if patient_id == 0 {
		patientInfo, _ := statistics_service.GetOrgFirstPatientInfo(adminUserInfo.CurrentOrgId)
		if patientInfo == nil {
			this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeOrgNoPatient)
			return
		}

		data, total, _ := statistics_service.GetDialysisProcessIndexTableData(adminUserInfo.CurrentOrgId, patientInfo.ID, page, limit, theStartTIme, theEndtTIme)

		this.ServeSuccessJSON(map[string]interface{}{
			"data":  data,
			"total": total,
		})

	} else {
		data, total, _ := statistics_service.GetDialysisProcessIndexTableData(adminUserInfo.CurrentOrgId, patient_id, page, limit, theStartTIme, theEndtTIme)
		this.ServeSuccessJSON(map[string]interface{}{
			"data":  data,
			"total": total,
		})

	}

}

func (this *PCIndexEvaluationApiController) GetDialysisWatchChartData() {
	adminUserInfo := this.GetAdminUserInfo()
	statistics_type, _ := this.GetInt("statistics_type")
	start_time := this.GetString("start_time")
	end_time := this.GetString("end_time")
	patient_id, _ := this.GetInt64("patient_id")
	timeLayout := "2006-01-02"
	loc, _ := time.LoadLocation("Local")

	var theStartTIme int64
	if len(start_time) > 0 {
		theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", start_time+" 00:00:00", loc)
		if err != nil {
			utils.ErrorLog(err.Error())
		}
		theStartTIme = theTime.Unix()
	}
	var theEndtTIme int64
	if len(end_time) > 0 {
		theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", end_time+" 23:59:59", loc)
		if err != nil {
			utils.ErrorLog(err.Error())
		}
		theEndtTIme = theTime.Unix()
	}

	if patient_id == 0 {
		patientInfo, _ := statistics_service.GetOrgFirstPatientInfo(adminUserInfo.CurrentOrgId)
		if patientInfo == nil {
			this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeOrgNoPatient)
			return
		}
		data, _ := statistics_service.GetDialysisWatchChartData(adminUserInfo.CurrentOrgId, patientInfo.ID, theStartTIme, theEndtTIme, statistics_type)
		this.ServeSuccessJSON(map[string]interface{}{
			"data": data,
		})
	} else {
		data, _ := statistics_service.GetDialysisWatchChartData(adminUserInfo.CurrentOrgId, patient_id, theStartTIme, theEndtTIme, statistics_type)
		this.ServeSuccessJSON(map[string]interface{}{
			"data": data,
		})
	}

}
func (this *PCIndexEvaluationApiController) GetDialysisWatchTableData() {
	adminUserInfo := this.GetAdminUserInfo()
	start_time := this.GetString("start_time")
	end_time := this.GetString("end_time")
	patient_id, _ := this.GetInt64("patient_id")
	page, _ := this.GetInt64("page")
	limit, _ := this.GetInt64("limit")

	if page == 0 {
		page = 1
	}
	if limit == 0 {
		limit = 20
	}
	timeLayout := "2006-01-02"
	loc, _ := time.LoadLocation("Local")

	var theStartTIme int64
	if len(start_time) > 0 {
		theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", start_time+" 00:00:00", loc)
		if err != nil {
			utils.ErrorLog(err.Error())
		}
		theStartTIme = theTime.Unix()
	}
	var theEndtTIme int64
	if len(end_time) > 0 {
		theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", end_time+" 23:59:59", loc)
		if err != nil {
			utils.ErrorLog(err.Error())
		}
		theEndtTIme = theTime.Unix()
	}

	if patient_id == 0 {
		patientInfo, _ := statistics_service.GetOrgFirstPatientInfo(adminUserInfo.CurrentOrgId)
		if patientInfo == nil {
			this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeOrgNoPatient)
			return
		}

		data, total, _ := statistics_service.GetDialysisWatchTableData(adminUserInfo.CurrentOrgId, patientInfo.ID, page, limit, theStartTIme, theEndtTIme)

		this.ServeSuccessJSON(map[string]interface{}{
			"data":  data,
			"total": total,
		})

	} else {

		data, total, _ := statistics_service.GetDialysisWatchTableData(adminUserInfo.CurrentOrgId, patient_id, page, limit, theStartTIme, theEndtTIme)
		this.ServeSuccessJSON(map[string]interface{}{
			"data":  data,
			"total": total,
		})

	}

}

func (this *PCIndexEvaluationApiController) GetDialysisBloodPressureChartData() {
	adminUserInfo := this.GetAdminUserInfo()
	statistics_type, _ := this.GetInt("statistics_type")
	start_time := this.GetString("start_time")
	end_time := this.GetString("end_time")
	patient_id, _ := this.GetInt64("patient_id")

	timeLayout := "2006-01-02"
	loc, _ := time.LoadLocation("Local")

	var theStartTIme int64
	if len(start_time) > 0 {
		theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", start_time+" 00:00:00", loc)
		if err != nil {
			utils.ErrorLog(err.Error())
		}
		theStartTIme = theTime.Unix()
	}
	var theEndtTIme int64
	if len(end_time) > 0 {
		theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", end_time+" 23:59:59", loc)
		if err != nil {
			utils.ErrorLog(err.Error())
		}
		theEndtTIme = theTime.Unix()
	}

	data, _ := statistics_service.GetBloodPressureChartData(adminUserInfo.CurrentOrgId, theStartTIme, theEndtTIme, statistics_type, patient_id)
	this.ServeSuccessJSON(map[string]interface{}{
		"data": data,
	})

}
func (this *PCIndexEvaluationApiController) GetDialysisBloodPressureTableData() {
	adminUserInfo := this.GetAdminUserInfo()
	start_time := this.GetString("start_time")
	end_time := this.GetString("end_time")
	patient_id, _ := this.GetInt64("patient_id")
	page, _ := this.GetInt64("page")
	limit, _ := this.GetInt64("limit")

	if page == 0 {
		page = 1
	}
	if limit == 0 {
		limit = 20
	}
	timeLayout := "2006-01-02"
	loc, _ := time.LoadLocation("Local")

	var theStartTIme int64
	if len(start_time) > 0 {
		theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", start_time+" 00:00:00", loc)
		if err != nil {
			utils.ErrorLog(err.Error())
		}
		theStartTIme = theTime.Unix()
	}
	var theEndtTIme int64
	if len(end_time) > 0 {
		theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", end_time+" 23:59:59", loc)
		if err != nil {
			utils.ErrorLog(err.Error())
		}
		theEndtTIme = theTime.Unix()
	}

	data, total, _ := statistics_service.GetBloodPressureTableData(adminUserInfo.CurrentOrgId, patient_id, page, limit, theStartTIme, theEndtTIme)
	this.ServeSuccessJSON(map[string]interface{}{
		"data":  data,
		"total": total,
	})

}
func (this *PCIndexEvaluationApiController) GetDialysisPatientBloodPressureChartData() {
	adminUserInfo := this.GetAdminUserInfo()
	statistics_type, _ := this.GetInt("statistics_type")
	start_time := this.GetString("start_time")
	end_time := this.GetString("end_time")
	patient_id, _ := this.GetInt64("patient_id")

	timeLayout := "2006-01-02"
	loc, _ := time.LoadLocation("Local")

	var theStartTIme int64
	if len(start_time) > 0 {
		theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", start_time+" 00:00:00", loc)
		if err != nil {
			utils.ErrorLog(err.Error())
		}
		theStartTIme = theTime.Unix()
	}
	var theEndtTIme int64
	if len(end_time) > 0 {
		theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", end_time+" 23:59:59", loc)
		if err != nil {
			utils.ErrorLog(err.Error())
		}
		theEndtTIme = theTime.Unix()
	}

	data, _ := statistics_service.GetPatientBloodPressureChartData(adminUserInfo.CurrentOrgId, patient_id, theStartTIme, theEndtTIme, statistics_type)
	this.ServeSuccessJSON(map[string]interface{}{
		"data": data,
	})

}

func (this *PCIndexEvaluationApiController) GetDialysisWeightChartData() {
	adminUserInfo := this.GetAdminUserInfo()
	statistics_type, _ := this.GetInt("statistics_type")
	start_time := this.GetString("start_time")
	end_time := this.GetString("end_time")
	timeLayout := "2006-01-02"
	loc, _ := time.LoadLocation("Local")

	var theStartTIme int64
	if len(start_time) > 0 {
		theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", start_time+" 00:00:00", loc)
		if err != nil {
			utils.ErrorLog(err.Error())
		}
		theStartTIme = theTime.Unix()
	}
	var theEndtTIme int64
	if len(end_time) > 0 {
		theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", end_time+" 23:59:59", loc)
		if err != nil {
			utils.ErrorLog(err.Error())
		}
		theEndtTIme = theTime.Unix()
	}

	data, _ := statistics_service.GetDialysisWeightChartData(adminUserInfo.CurrentOrgId, theStartTIme, theEndtTIme, statistics_type)
	this.ServeSuccessJSON(map[string]interface{}{
		"data": data,
	})

}
func (this *PCIndexEvaluationApiController) GetDialysisWeightTableData() {
	adminUserInfo := this.GetAdminUserInfo()
	start_time := this.GetString("start_time")
	end_time := this.GetString("end_time")
	patient_id, _ := this.GetInt64("patient_id")
	page, _ := this.GetInt64("page")
	limit, _ := this.GetInt64("limit")

	if page == 0 {
		page = 1
	}
	if limit == 0 {
		limit = 20
	}
	timeLayout := "2006-01-02"
	loc, _ := time.LoadLocation("Local")

	var theStartTIme int64
	if len(start_time) > 0 {
		theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", start_time+" 00:00:00", loc)
		if err != nil {
			utils.ErrorLog(err.Error())
		}
		theStartTIme = theTime.Unix()
	}
	var theEndtTIme int64
	if len(end_time) > 0 {
		theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", end_time+" 23:59:59", loc)
		if err != nil {
			utils.ErrorLog(err.Error())
		}
		theEndtTIme = theTime.Unix()
	}

	data, total, _ := statistics_service.GetDialysisWeightTableData(adminUserInfo.CurrentOrgId, patient_id, page, limit, theStartTIme, theEndtTIme)
	this.ServeSuccessJSON(map[string]interface{}{
		"data":  data,
		"total": total,
	})
}
func (this *PCIndexEvaluationApiController) GetDialysisPatientWeightChartData() {
	adminUserInfo := this.GetAdminUserInfo()
	statistics_type, _ := this.GetInt("statistics_type")
	start_time := this.GetString("start_time")
	end_time := this.GetString("end_time")
	patient_id, _ := this.GetInt64("patient_id")

	timeLayout := "2006-01-02"
	loc, _ := time.LoadLocation("Local")

	var theStartTIme int64
	if len(start_time) > 0 {
		theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", start_time+" 00:00:00", loc)
		if err != nil {
			utils.ErrorLog(err.Error())
		}
		theStartTIme = theTime.Unix()
	}
	var theEndtTIme int64
	if len(end_time) > 0 {
		theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", end_time+" 23:59:59", loc)
		if err != nil {
			utils.ErrorLog(err.Error())
		}
		theEndtTIme = theTime.Unix()
	}

	data, _ := statistics_service.GetPatientDialysisWeightChartData(adminUserInfo.CurrentOrgId, patient_id, theStartTIme, theEndtTIme, statistics_type)
	this.ServeSuccessJSON(map[string]interface{}{
		"data": data,
	})

}

func (this *PCIndexEvaluationApiController) GetDoctorWorkloadChartData() {
	adminUserInfo := this.GetAdminUserInfo()
	statistics_type, _ := this.GetInt("statistics_type")
	start_time := this.GetString("start_time")
	admin_user_id, _ := this.GetInt64("admin_user_id")

	end_time := this.GetString("end_time")
	timeLayout := "2006-01-02"
	loc, _ := time.LoadLocation("Local")

	var theStartTIme int64
	if len(start_time) > 0 {
		theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", start_time+" 00:00:00", loc)
		if err != nil {
			utils.ErrorLog(err.Error())
		}
		theStartTIme = theTime.Unix()
	}
	var theEndtTIme int64
	if len(end_time) > 0 {
		theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", end_time+" 23:59:59", loc)
		if err != nil {
			utils.ErrorLog(err.Error())
		}
		theEndtTIme = theTime.Unix()
	}

	data, _ := statistics_service.GetDoctorWorkloadChartData(adminUserInfo.CurrentOrgId, theStartTIme, theEndtTIme, statistics_type, admin_user_id)
	this.ServeSuccessJSON(map[string]interface{}{
		"data": data,
	})

}
func (this *PCIndexEvaluationApiController) GetDoctorWorkloadTableData() {
	adminUserInfo := this.GetAdminUserInfo()
	start_time := this.GetString("start_time")
	end_time := this.GetString("end_time")
	admin_user_id, _ := this.GetInt64("admin_user_id")
	page, _ := this.GetInt64("page")
	limit, _ := this.GetInt64("limit")

	if page == 0 {
		page = 1
	}
	if limit == 0 {
		limit = 20
	}
	timeLayout := "2006-01-02"
	loc, _ := time.LoadLocation("Local")

	var theStartTIme int64
	if len(start_time) > 0 {
		theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", start_time+" 00:00:00", loc)
		if err != nil {
			utils.ErrorLog(err.Error())
		}
		theStartTIme = theTime.Unix()
	}
	var theEndtTIme int64
	if len(end_time) > 0 {
		theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", end_time+" 23:59:59", loc)
		if err != nil {
			utils.ErrorLog(err.Error())
		}
		theEndtTIme = theTime.Unix()
	}
	data, _ := statistics_service.GetDoctorWorkloadTableData(adminUserInfo.CurrentOrgId, theStartTIme, theEndtTIme, admin_user_id)
	this.ServeSuccessJSON(map[string]interface{}{
		"data": data,
	})
}

func (this *PCIndexEvaluationApiController) GetNurseWorkloadChartData() {
	adminUserInfo := this.GetAdminUserInfo()
	statistics_type, _ := this.GetInt("statistics_type")
	start_time := this.GetString("start_time")
	end_time := this.GetString("end_time")
	admin_user_id, _ := this.GetInt64("admin_user_id")

	timeLayout := "2006-01-02"
	loc, _ := time.LoadLocation("Local")

	var theStartTIme int64
	if len(start_time) > 0 {
		theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", start_time+" 00:00:00", loc)
		if err != nil {
			utils.ErrorLog(err.Error())
		}
		theStartTIme = theTime.Unix()
	}
	var theEndtTIme int64
	if len(end_time) > 0 {
		theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", end_time+" 23:59:59", loc)
		if err != nil {
			utils.ErrorLog(err.Error())
		}
		theEndtTIme = theTime.Unix()
	}

	data, _ := statistics_service.GetNurseWorkloadChartData(adminUserInfo.CurrentOrgId, theStartTIme, theEndtTIme, statistics_type, admin_user_id)

	this.ServeSuccessJSON(map[string]interface{}{
		"data": data,
	})

}
func (this *PCIndexEvaluationApiController) GetNurseWorkloadTableData() {
	adminUserInfo := this.GetAdminUserInfo()
	start_time := this.GetString("start_time")
	end_time := this.GetString("end_time")
	admin_user_id, _ := this.GetInt64("admin_user_id")
	page, _ := this.GetInt64("page")
	limit, _ := this.GetInt64("limit")

	if page == 0 {
		page = 1
	}
	if limit == 0 {
		limit = 5
	}
	timeLayout := "2006-01-02"
	loc, _ := time.LoadLocation("Local")

	var theStartTIme int64
	if len(start_time) > 0 {
		theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", start_time+" 00:00:00", loc)
		if err != nil {
			utils.ErrorLog(err.Error())
		}
		theStartTIme = theTime.Unix()
	}
	var theEndtTIme int64
	if len(end_time) > 0 {
		theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", end_time+" 23:59:59", loc)
		if err != nil {
			utils.ErrorLog(err.Error())
		}
		theEndtTIme = theTime.Unix()
	}
	data, total, _ := statistics_service.GetNurseWorkloadTableData(adminUserInfo.CurrentOrgId, theStartTIme, theEndtTIme, admin_user_id, page, limit)
	dialysisCount, _ := statistics_service.GetOrderDialysisCount(adminUserInfo.CurrentOrgId, theStartTIme, theEndtTIme)
	this.ServeSuccessJSON(map[string]interface{}{
		"data":          data,
		"total":         total,
		"dialysisCount": dialysisCount,
	})
}

func (this *PCIndexEvaluationApiController) GetDefaultPatient() {
	adminUserInfo := this.GetAdminUserInfo()
	patientInfo, _ := statistics_service.GetOrgFirstPatientInfo(adminUserInfo.CurrentOrgId)
	if patientInfo == nil {
		this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeOrgNoPatient)
		return
	}

	this.ServeSuccessJSON(map[string]interface{}{
		"patient": patientInfo,
	})

}
