package controllers

import "C"
import (
	"Xcx_New/enums"
	"Xcx_New/models"
	"Xcx_New/service"
	"Xcx_New/utils"
	"encoding/json"
	"fmt"
	"github.com/astaxie/beego"
	"github.com/jinzhu/gorm"
	"github.com/shopspring/decimal"
	"math/rand"
	"reflect"
	"strconv"
	"strings"
	"syscall"
	"time"
	"unsafe"
)

type HisApiController struct {
	BaseAuthAPIController
}

func HisManagerApiRegistRouters() {

	beego.Router("/api/hispatient/list", &HisApiController{}, "get:GetHisPatientList")
	//beego.Router("/api/hispatient/list", &HisApiController{}, "get:GetHisPatientList")

	beego.Router("/api/hispatient/get", &HisApiController{}, "get:GetHisPatientInfo")
	beego.Router("/api/hisprescription/config", &HisApiController{}, "get:GetHisPrescriptionConfig")

	beego.Router("/api/hisprescription/delete", &HisApiController{}, "post:DeletePrescription")
	beego.Router("/api/advice/delete", &HisApiController{}, "post:DeleteDoctorAdvice")
	beego.Router("/api/project/delete", &HisApiController{}, "post:DeleteProject")
	beego.Router("/api/addition_charge/delete", &HisApiController{}, "post:DeleteAddition")

	beego.Router("/api/hisprescription/list", &HisApiController{}, "get:GetHisPrescriptionList")
	beego.Router("/api/hisprescription/info", &HisApiController{}, "get:GetHisPrescriptionInfo")

	beego.Router("/api/hisprescription/create", &HisApiController{}, "post:CreateHisPrescription")
	beego.Router("/api/hisprescription/edit", &HisApiController{}, "post:EditHisPrescription")

	beego.Router("/api/doctorworkstation/casehistory/list", &HisApiController{}, "get:GetHisPatientCaseHistoryList")
	beego.Router("/api/doctorworkstation/casehistory/get", &HisApiController{}, "get:GetHisPatientCaseHistory")
	beego.Router("/api/doctorworkstation/casehistory/create", &HisApiController{}, "get:CreateHisPatientCaseHistory")

	beego.Router("/api/doctorworkstation/casehistorytemplate/create", &HisApiController{}, "get:CreateCaseHistoryTemplate")

	beego.Router("/api/doctorworkstation/casehistorytemplate/get", &HisApiController{}, "get:GetCaseHistoryTemplate")

	beego.Router("/api/hisorder/list", &HisApiController{}, "get:GetHisOrderList")

	beego.Router("/api/hisorder/get", &HisApiController{}, "get:GetHisOrder")

	beego.Router("/api/register/get", &HisApiController{}, "get:GetRegisterInfo")
	beego.Router("/api/upload/get", &HisApiController{}, "get:GetUploadInfo")
	beego.Router("/api/presettle/get", &HisApiController{}, "get:PreSettle")

	beego.Router("/api/refund/post", &HisApiController{}, "post:Refund")
	beego.Router("/api/refundnumber/post", &HisApiController{}, "post:RefundNumber")

	beego.Router("/api/medicalinsurance/config", &HisApiController{}, "get:GetMedicalInsuranceConfig")
	beego.Router("/api/doctor/list", &HisApiController{}, "get:GetAdminUsers")

	//beego.Router("/api/medicalinsurance/config", &HisApiController{}, "get:GetMedicalInsuranceConfig")
	//新增附加费用
	//beego.Router("/api/his/additionalcharge", &HisApiController{}, "Post:AdditionalCharge")
	//beego.Router("/api/additionalcharge/get", &HisApiController{}, "Get:GetAdditionalcharge")
	beego.Router("/api/hisprescription/get", &HisApiController{}, "Get:GetLastOrNextHisPrescription")
	beego.Router("/api/callhisprescription/get", &HisApiController{}, "Get:GetCallHisPrescription")
	beego.Router("/api/dayprescription/get", &HisApiController{}, "get:GetHisDayPrescription")
	beego.Router("/api/charge/list", &HisApiController{}, "get:GetHisChargePatientList")
	beego.Router("/api/charge/info", &HisApiController{}, "get:GetHisChargePatientInfo")
	beego.Router("/api/unregister/list", &HisApiController{}, "get:GetHisUnRegisterPatientList")
	beego.Router("/api/orderdetail/get", &HisApiController{}, "get:GetAllOrderDetail")
	beego.Router("/api/orderdetaicollect/get", &HisApiController{}, "get:GetAllOrderDetailCollect")
	beego.Router("/api/cost/compare", &HisApiController{}, "get:GetMedicalInsuranceCostCompareList")
	beego.Router("/api/record/list", &HisApiController{}, "get:GetPutOnRecordList")

	beego.Router("/api/comparedata/get", &HisApiController{}, "get:GetCompareData")
	beego.Router("/api/fapiao/get", &HisApiController{}, "get:GetFaPiaoData")

	beego.Router("/api/incomestatistics/get", &HisApiController{}, "get:GetIncomeStatisticsData")

	beego.Router("/api/postprojectinformation", &HisApiController{}, "post:PostProjectInformation")
	//beego.Router("/api/editprojectinformation", &HisApiController{}, "post:EditProjectInformation")

	beego.Router("/api/hisprescriptiontemplate/create", &HisApiController{}, "post:CreateHisPrescriptionTemplate")

	beego.Router("/api/privateexpenses/get", &HisApiController{}, "get:GetPrivateExpensesInfo")

	beego.Router("/api/changemedtype/post", &HisApiController{}, "post:ChangeMedType")

	beego.Router("/api/refunddetail/post", &HisApiController{}, "post:RefudDetail")

	beego.Router("/api/privateexpensesorder/get", &HisApiController{}, "get:GetPrivateExpensesOrder")

	beego.Router("/api/uncharge/list", &HisApiController{}, "get:GetHisUnChargePatientList")

	beego.Router("/api/monthcharge/info", &HisApiController{}, "get:GetHisMonthChargePatientInfo")
	beego.Router("/api/monthhispatient/get", &HisApiController{}, "get:GetHisMonthPatientInfo")

}

func (c *HisApiController) GetHisUnChargePatientList() {
	record_date := c.GetString("record_date")
	timeLayout := "2006-01-02"
	loc, _ := time.LoadLocation("Local")
	theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", record_date+" 00:00:00", loc)
	if err != nil {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
		return
	}
	recordDateTime := theTime.Unix()
	adminInfo := c.GetAdminUserInfo()
	var tempPatients []*service.NewTempPatients
	//tempPatients, _ := service.GetAllChargeHisPatientList(adminInfo.CurrentOrgId, "", recordDateTime)
	tempPatients, _ = service.GetNewAllUnChargeHisPatientList(adminInfo.CurrentOrgId, "", recordDateTime)
	var patients []*service.NewTempPatients
	var patients_two []*service.NewTempPatients

	for _, item := range tempPatients {
		//过滤掉没挂号的和没开处方的
		if len(item.HisPatient) > 0 || len(item.HisPrescription) > 0 {
			patients = append(patients, item)
		}

		//过滤掉没挂号的
		if len(item.HisPatient) > 0 {
			patients_two = append(patients_two, item)
		}
	}
	c.ServeSuccessJSON(map[string]interface{}{
		"list":     patients,
		"list_two": patients_two,
	})
}

func (c *HisApiController) GetPrivateExpensesOrder() {
	//id, _ := c.GetInt64("id")
	//record_time := c.GetString("record_time")
	order_id, _ := c.GetInt64("order_id")
	admin_user_id, _ := c.GetInt64("admin_user_id")

	//timeLayout := "2006-01-02"
	//loc, _ := time.LoadLocation("Local")
	//
	//theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", record_time+" 00:00:00", loc)
	//if err != nil {
	//	c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
	//	return
	//}
	//recordDateTime := theTime.Unix()
	adminUser := c.GetAdminUserInfo()
	order, _ := service.GetHisOrderByID(order_id)
	his, _ := service.GetHisPatientInfoThree(adminUser.CurrentOrgId, order.MdtrtId)

	orderInfos, _ := service.GetHisOrderDetailByNumber(order.Number, adminUser.CurrentOrgId)

	diagnosis_ids := strings.Split(his.Diagnosis, ",")

	//var config []*models.HisXtDiagnoseConfig
	var name string
	for _, item := range diagnosis_ids {
		id, _ := strconv.ParseInt(item, 10, 64)
		diagnosisConfig, _ := service.FindDiagnoseById(id)
		if len(name) == 0 {
			name = diagnosisConfig.ClassName

		} else {
			name = name + "," + diagnosisConfig.ClassName
		}
	}

	decimal.DivisionPrecision = 2

	for _, item := range orderInfos {
		item.FulamtOwnpayAmt = item.DetItemFeeSumamt
		if item.HisDoctorAdviceInfo.ID > 0 && item.HisPrescriptionProject.ID == 0 { //药品
			item.MedChrgitmType = "09"

		}
		if item.HisPrescriptionProject.ID > 0 && item.HisDoctorAdviceInfo.ID == 0 {
			if item.HisPrescriptionProject.Type == 2 {
				switch item.HisPrescriptionProject.VMHisProject.CostClassify {

				case 1:
					item.MedChrgitmType = "14"
					break
				case 2:
					item.MedChrgitmType = "05"

					break
				case 3:
					item.MedChrgitmType = "04"

					break
				case 4:
					item.MedChrgitmType = "14"

					break
				case 5:
					item.MedChrgitmType = "08"

					break
				case 6:
					item.MedChrgitmType = "14"

					break
				case 7:
					item.MedChrgitmType = "14"

					break
				case 8:
					item.MedChrgitmType = "03"
					break
				case 9:
					item.MedChrgitmType = "14"
					break

				}

			} else if item.HisPrescriptionProject.Type == 3 {
				item.MedChrgitmType = "08"
			}
		}
	}
	order.PsnCashPay = order.MedfeeSumamt

	//var user_name string
	//role, _ := service.GetAdminUserInfoByID(adminUser.CurrentOrgId, admin_user_id)
	//if role.ID == 0 {
	//	user_name = "管理员"
	//} else {
	//	user_name = role.UserName
	//}

	org, _ := service.GetOrgById(adminUser.CurrentOrgId)
	printor_admin, _ := service.GetAdminUserInfoByID(adminUser.CurrentOrgId, admin_user_id)
	charge_admin, _ := service.GetAdminUserInfoByID(adminUser.CurrentOrgId, order.Creator)

	patient, _ := service.GetPatientByID(order.UserOrgId, order.PatientId)

	c.ServeSuccessJSON(map[string]interface{}{
		"org_name":      org.OrgName,
		"name":          patient.Name,
		"order_infos":   orderInfos,
		"number":        order.MdtrtId,
		"date":          order.SettleAccountsDate,
		"charge_admin":  charge_admin,
		"printor_admin": printor_admin,
		"info":          order,
	})

}

func (c *HisApiController) RefudDetail() {
	order_id, _ := c.GetInt64("order_id")
	order, _ := service.GetHisOrderByID(order_id)
	adminUser := c.GetAdminUserInfo()
	service.UpdataOrderInfoStatus(order_id, order.Number, adminUser.CurrentOrgId)
	c.ServeSuccessJSON(map[string]interface{}{
		"msg": "撤销成功",
	})
}

func (c *HisApiController) Sscard() {
	//r := CardInit()
	//if r == 0 {
	//	GetBaseInfo()
	//}
	//c.ServeSuccessJSON(map[string]interface{}{
	//	"list": "11",
	//})

}

func GetBaseInfo() error {
	//handle := syscall.MustLoadDLL("SSCard.dll")
	//ReadCardBas := handle.MustFindProc("ReadCardBas")
	//
	//str := make([]byte, 256)
	//str1 := make([]byte, 256)
	//r, _, ferr := ReadCardBas.Call((uintptr)(unsafe.Pointer(&str[0])), IntPtr(1024), (uintptr)(unsafe.Pointer(&str1[0])), IntPtr(1024))
	//if ferr != nil {
	//	fmt.Println("ReadCardBas 报错", ferr.Error())
	//	return ferr
	//}
	//
	//fmt.Println(string(str))
	//
	//fmt.Println(r)
	return nil
}

func CardInit() int {
	//DllTestDef := syscall.MustLoadDLL("SSCard.dll")
	//add := DllTestDef.MustFindProc("Init")
	//ret, _, err := add.Call(StrPtr("http://igb.hsa.gdgov.cn/gdyb_inf/poc/api/card/initDll"), StrPtr("440200"))
	//if err != nil {
	//	fmt.Println("SSCard的运算结果为:", ret)
	//}
	//result := int(ret)
	return 0
}

func IntPtr(n int) uintptr {
	return uintptr(n)
}

func StrPtr(s string) uintptr {
	return uintptr(unsafe.Pointer(syscall.StringBytePtr(s)))
}

func (c *HisApiController) GetHisPatientList() {
	//types, _ := c.GetInt64("type", 0)
	record_date := c.GetString("record_date")
	sch_type, _ := c.GetInt64("sch_type")

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

	theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", record_date+" 00:00:00", loc)
	if err != nil {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
		return
	}
	recordDateTime := theTime.Unix()
	adminInfo := c.GetAdminUserInfo()
	//patients, _ := service.GetHisPatientList(adminInfo.CurrentOrgId, "", recordDateTime)
	patients, _ := service.GetNewHisPatientList(adminInfo.CurrentOrgId, recordDateTime)
	patients_two, _ := service.GetScheduleHisPatientList(adminInfo.CurrentOrgId, "", recordDateTime, sch_type)
	//获取当前用户的信息
	adminUserInfo, _ := service.GetAdminUserInfoByID(adminInfo.CurrentOrgId, adminInfo.AdminUser.Id)
	doctors, _ := service.GetHisAdminUserDoctors(adminInfo.CurrentOrgId)
	//获取所有科室信息
	department, _ := service.GetAllDepartMent(adminInfo.CurrentOrgId)
	c.ServeSuccessJSON(map[string]interface{}{
		"list":       patients,
		"list_two":   patients_two,
		"info":       adminUserInfo,
		"doctors":    doctors,
		"department": department,
	})
}

func (c *HisApiController) GetHisPatientInfo() {
	patient_id, _ := c.GetInt64("patient_id")
	his_patient_id, _ := c.GetInt64("his_patient_id")
	record_date := c.GetString("record_date")
	number := c.GetString("number")
	//start_time := c.GetString("start_time")
	//end_time := c.GetString("end_time")
	p_type, _ := c.GetInt64("p_type")

	timeLayout := "2006-01-02"
	loc, _ := time.LoadLocation("Local")
	theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", record_date+" 00:00:00", loc)
	if err != nil {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
		return
	}
	recordDateTime := theTime.Unix()
	//startTime, err := time.ParseInLocation(timeLayout+" 15:04:05", start_time+" 00:00:00", loc)
	//if err != nil {
	//
	//}
	//startRecordDateTime := startTime.Unix()
	//endTime, err := time.ParseInLocation(timeLayout+" 15:04:05", end_time+" 23:59:59", loc)
	//if err != nil {
	//
	//}
	//endRecordDateTime := endTime.Unix()
	admin := c.GetAdminUserInfo()
	his_patient_info, _ := service.GetNewHisPatientInfoTwo(admin.CurrentOrgId, his_patient_id, recordDateTime)
	xt_patient_info, _ := service.GetXTPatientInfo(admin.CurrentOrgId, patient_id)

	count, _ := service.GetHisPatientCount(admin.CurrentOrgId, patient_id, recordDateTime)

	var prescriptions []*models.HisPrescription
	var last_prescriptions []*models.HisPrescription
	var sch_prescriptions []*models.HisPrescriptionInfoTemplate
	last_p_info, _ := service.FindLastPatientPrescriptionInfo(admin.CurrentOrgId, patient_id, recordDateTime)
	if p_type == 1 { //住院
		prescriptions, _ = service.GetHisPrescription(admin.CurrentOrgId, patient_id, recordDateTime, p_type)
		last_prescriptions, _ = service.GetHisPrescription(admin.CurrentOrgId, patient_id, last_p_info.RecordDate, p_type)
	} else { //门诊
		prescriptions, _ = service.GetNewHisPrescription(admin.CurrentOrgId, patient_id, his_patient_id, recordDateTime, p_type)
		last_prescriptions, _ = service.GetHisPrescription(admin.CurrentOrgId, patient_id, last_p_info.RecordDate, p_type)
	}

	sch, _ := service.GetPatientSch(patient_id, recordDateTime, admin.CurrentOrgId)
	if sch.ID > 0 {
		mode_template, _ := service.GetHisPrescriptionBySchMode(sch.ModeId, patient_id, admin.CurrentOrgId)
		sch_prescriptions, _ = service.GetHisPrescriptionTemplate(mode_template.ID, admin.CurrentOrgId)

	}
	//prescriptions, _ := service.GetHisPrescription(admin.CurrentOrgId, patient_id, his_patient_id, recordDateTime)
	//monthPrescriptions, _ := service.GetMonthHisPrescriptionTwo(admin.CurrentOrgId, patient_id, startRecordDateTime, endRecordDateTime, p_type)
	case_history, _ := service.GetHisPatientCaseHistoryInfo(admin.CurrentOrgId, patient_id, recordDateTime)
	patientPrescriptionInfo, _ := service.FindPatientPrescriptionInfo(admin.CurrentOrgId, patient_id, recordDateTime, p_type)
	lastPatientPrescriptionInfo, _ := service.FindLastPatientPrescriptionInfoTwo(admin.CurrentOrgId, patient_id, recordDateTime, p_type)

	order, _ := service.GetHisOrder(admin.CurrentOrgId, number, patient_id)
	doctors, _ := service.GetHisAdminUserDoctors(admin.CurrentOrgId)

	_, drugStockConfig := service.FindDrugStockAutomaticReduceRecordByOrgId(admin.CurrentOrgId)

	//获取所有科室信息
	department, _ := service.GetAllDepartMent(admin.CurrentOrgId)
	c.ServeSuccessJSON(map[string]interface{}{
		"his_info":     his_patient_info,
		"xt_info":      xt_patient_info,
		"prescription": prescriptions,
		"case_history": case_history,
		"info":         patientPrescriptionInfo,
		//"month_prescriptions": monthPrescriptions,
		"order":              order,
		"doctors":            doctors,
		"department":         department,
		"sch_prescriptions":  sch_prescriptions,
		"last_prescriptions": last_prescriptions,
		"schedule":           sch,
		"count":              count,
		"drugStockConfig":    drugStockConfig,
		"last_info":          lastPatientPrescriptionInfo,
	})
	return

}
func (c *HisApiController) GetHisPrescriptionConfig() {
	adminInfo := c.GetAdminUserInfo()
	//获取医嘱模版
	advices, _ := service.FindAllHisAdviceTemplate(adminInfo.CurrentOrgId)
	//获取所有基础药
	drugs, _ := service.GetAllDrugLibList(adminInfo.CurrentOrgId)
	drugways, _, _ := service.GetDrugWayDics(adminInfo.CurrentOrgId)
	efs, _, _ := service.GetExecutionFrequencyDics(adminInfo.CurrentOrgId)
	doctors, _ := service.GetHisAdminUserDoctors(adminInfo.CurrentOrgId)
	//获取所有科室信息
	department, _ := service.GetAllDepartMent(adminInfo.CurrentOrgId)

	//获取诊断信息

	sick, _ := service.FindAllSick(adminInfo.CurrentOrgId)

	diagnose, _ := service.FindAllDiagnose(adminInfo.CurrentOrgId)

	additions, _ := service.FindAllAddition(adminInfo.CurrentOrgId)

	c.ServeSuccessJSON(map[string]interface{}{
		"drugs":            drugs,
		"advices_template": advices,
		"drugways":         drugways,
		"efs":              efs,
		"doctors":          doctors,
		"department":       department,
		"sick":             sick,
		"additions":        additions,
		"diagnose":         diagnose,
	})
}
func (c *HisApiController) CreateHisPrescription() {
	record_date := c.GetString("record_date")
	patient_id, _ := c.GetInt64("patient_id")
	reg_type, _ := c.GetInt64("reg_type")
	diagnose := c.GetString("diagnose")
	sick_type, _ := c.GetInt64("sick_type")
	sick_history := c.GetString("sick_history")
	doctor_id, _ := c.GetInt64("doctor", 0)
	department, _ := c.GetInt64("department", 0)
	his_patient_id, _ := c.GetInt64("his_patient_id")
	p_type, _ := c.GetInt64("p_type")
	dataBody := make(map[string]interface{}, 0)
	err := json.Unmarshal(c.Ctx.Input.RequestBody, &dataBody)
	if err != nil {
		utils.ErrorLog(err.Error())
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
		return
	}

	timeLayout := "2006-01-02"
	loc, _ := time.LoadLocation("Local")
	theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", record_date+" 00:00:00", loc)
	if err != nil {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
		return
	}
	adminInfo := c.GetAdminUserInfo()
	recordDateTime := theTime.Unix()

	role, _ := service.GetAdminUserInfoByID(adminInfo.CurrentOrgId, doctor_id)

	if his_patient_id == 0 { //前端传过来的挂号id为0时，进行多一步判断
		lists, _ := service.GetHisPatientInfoList(adminInfo.CurrentOrgId, patient_id, recordDateTime)
		if len(lists) == 1 {
			his_patient_id = lists[0].ID
		}

	}

	_, drugStockConfig := service.FindDrugStockAutomaticReduceRecordByOrgId(c.GetAdminUserInfo().CurrentOrgId)

	_, stockConfig := service.FindAutomaticReduceRecordByOrgId(c.GetAdminUserInfo().CurrentOrgId)

	if drugStockConfig.IsOpen == 1 {
		//校验库存总量
		if dataBody["prescriptions"] != nil && reflect.TypeOf(dataBody["prescriptions"]).String() == "[]interface {}" {
			prescriptions, _ := dataBody["prescriptions"].([]interface{})
			if len(prescriptions) > 0 {
				for _, item := range prescriptions {
					items := item.(map[string]interface{})
					if items["advices"] != nil && reflect.TypeOf(items["advices"]).String() == "[]interface {}" {
						advices := items["advices"].([]interface{})
						if len(advices) > 0 {
							for _, advice := range advices {
								var drug_id int64
								var prescribing_number float64
								var prescribingNumberUnit string

								if advice.(map[string]interface{})["id"] != nil || reflect.TypeOf(advice.(map[string]interface{})["id"]).String() == "float64" {
									drug_id = int64(advice.(map[string]interface{})["id"].(float64))
								}
								if advice.(map[string]interface{})["prescribing_number"] != nil || reflect.TypeOf(advice.(map[string]interface{})["prescribing_number"]).String() == "string" {
									//prescribing_number = advice.(map[string]interface{})["prescribing_number"].(string)
									prescribing_number_str := advice.(map[string]interface{})["prescribing_number"].(string)
									prescribing_number, _ = strconv.ParseFloat(prescribing_number_str, 64)

								}

								if advice.(map[string]interface{})["prescribing_number_unit"] != nil && reflect.TypeOf(advice.(map[string]interface{})["prescribing_number_unit"]).String() == "string" {
									prescribingNumberUnit, _ = advice.(map[string]interface{})["prescribing_number_unit"].(string)
								}

								drug, _ := service.FindBaseDrugLibRecord(adminInfo.CurrentOrgId, drug_id)
								if drug.ID == 0 {
									c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
									return
								}

								if prescribingNumberUnit == drug.MinUnit {
									if prescribing_number > drug.Total {
										c.ServeDynamicFailJsonSend(drug.DrugName + "库存不足")
										//c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeOutOfStockParamWrong)
										return
									}
								} else {
									if prescribingNumberUnit == drug.MaxUnit {
										num := prescribing_number * float64(drug.MinNumber)
										if num > drug.Total {
											c.ServeDynamicFailJsonSend(drug.DrugName + "库存不足")
											//c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeOutOfStockParamWrong)
											return
										}
									}
								}
							}
						}
					}
				}
			}
		}
	}

	if stockConfig.IsOpen == 1 {
		if dataBody["prescriptions"] != nil && reflect.TypeOf(dataBody["prescriptions"]).String() == "[]interface {}" {
			prescriptions, _ := dataBody["prescriptions"].([]interface{})
			if len(prescriptions) > 0 {
				for _, item := range prescriptions {
					items := item.(map[string]interface{})
					if items["project"] != nil && reflect.TypeOf(items["project"]).String() == "[]interface {}" {
						projects := items["project"].([]interface{})
						if len(projects) > 0 {
							for _, project := range projects {
								var project_id int64
								var project_type int64
								var totals float64
								if project.(map[string]interface{})["project_id"] != nil || reflect.TypeOf(project.(map[string]interface{})["project_id"]).String() == "float64" {
									project_id = int64(project.(map[string]interface{})["project_id"].(float64))
								}
								if project.(map[string]interface{})["type"] != nil || reflect.TypeOf(project.(map[string]interface{})["type"]).String() == "float64" {
									project_type = int64(project.(map[string]interface{})["type"].(float64))
								}
								if project.(map[string]interface{})["total"] != nil || reflect.TypeOf(project.(map[string]interface{})["total"]).String() == "string" {
									total, _ := project.(map[string]interface{})["total"].(string)

									totals, _ = strconv.ParseFloat(total, 64)
								}
								if project_type == 3 {
									good, _ := service.FindGoodInfoByIdTwo(project_id)
									if good.ID == 0 {
										c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
										return
									}
									if totals > good.Total {
										c.ServeDynamicFailJsonSend(good.GoodName + "库存不足")
										//c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeOutOfStockParamWrong)
										return
									}

								}

							}
						}
					}
				}
			}
		}

	}

	info, _ := service.FindHisPatientPrescriptionInfo(adminInfo.CurrentOrgId, patient_id, recordDateTime, p_type, his_patient_id)
	var hpInfo models.HisPrescriptionInfo
	if info.ID == 0 {
		var randNum int
		randNum = rand.Intn(10000) + 1000
		timestamp := time.Now().Unix()
		tempTime := time.Unix(timestamp, 0)
		timeFormat := tempTime.Format("20060102150405")
		p_number := timeFormat + strconv.FormatInt(int64(randNum), 10) + strconv.FormatInt(int64(adminInfo.CurrentOrgId), 10) + strconv.FormatInt(int64(patient_id), 10)

		hpInfo = models.HisPrescriptionInfo{
			HisPatientId:       his_patient_id,
			UserOrgId:          adminInfo.CurrentOrgId,
			RecordDate:         theTime.Unix(),
			PatientId:          patient_id,
			Status:             1,
			Ctime:              time.Now().Unix(),
			Mtime:              time.Now().Unix(),
			Creator:            adminInfo.AdminUser.Id,
			Modifier:           adminInfo.AdminUser.Id,
			Diagnosis:          diagnose,
			SickHistory:        sick_history,
			Departments:        department,
			RegisterType:       reg_type,
			PrescriptionNumber: p_number,
			PrescriptionStatus: 1,
			Doctor:             role.UserName,
			DoctorId:           doctor_id,
			SickType:           sick_type,
			PType:              p_type,
		}
		service.SavePatientPrescriptionInfo(hpInfo)

	} else {
		hpInfo = models.HisPrescriptionInfo{

			ID:                 info.ID,
			UserOrgId:          adminInfo.CurrentOrgId,
			RecordDate:         info.RecordDate,
			PatientId:          info.PatientId,
			Status:             1,
			Ctime:              info.Ctime,
			Mtime:              time.Now().Unix(),
			Creator:            info.Creator,
			Modifier:           adminInfo.AdminUser.Id,
			Diagnosis:          diagnose,
			SickHistory:        sick_history,
			Departments:        department,
			RegisterType:       reg_type,
			PrescriptionNumber: info.PrescriptionNumber,
			Doctor:             role.UserName,
			PrescriptionStatus: info.PrescriptionStatus,
			DoctorId:           doctor_id,
			SickType:           sick_type,
			PType:              info.PType,
			HisPatientId:       info.HisPatientId,
		}
		service.SavePatientPrescriptionInfo(hpInfo)
	}

	if dataBody["prescriptions"] != nil && reflect.TypeOf(dataBody["prescriptions"]).String() == "[]interface {}" {
		prescriptions, _ := dataBody["prescriptions"].([]interface{})

		var tempPrescription *models.HisPrescription
		if len(prescriptions) > 0 {
			for _, item := range prescriptions {
				items := item.(map[string]interface{})
				if items["id"] == nil || reflect.TypeOf(items["id"]).String() != "float64" {
					utils.ErrorLog("id")
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
					return
				}
				id := int64(items["id"].(float64))

				new_prescription, _ := service.GetPrescriptionById(id, adminInfo.CurrentOrgId)
				tempPrescription = &new_prescription
				if items["type"] == nil || reflect.TypeOf(items["type"]).String() != "float64" {
					utils.ErrorLog("type")
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
					return
				}
				types := int64(items["type"].(float64))

				if items["order_status"] == nil || reflect.TypeOf(items["order_status"]).String() != "float64" {
					utils.ErrorLog("order_status")
				}
				order_status := int64(items["order_status"].(float64))

				if items["med_type"] == nil || reflect.TypeOf(items["med_type"]).String() != "float64" {
					utils.ErrorLog("med_type")
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
					return
				}
				med_type := strconv.Itoa(int(items["med_type"].(float64)))

				if med_type == "0" {
					med_type = "14"
				}

				if order_status == 0 {
					order_status = 1
				}

				if items["pre_time"] == nil || reflect.TypeOf(items["pre_time"]).String() != "string" {
					utils.ErrorLog("pre_time")
				}
				preTime, _ := items["pre_time"].(string)

				timeLayout := "2006-01-02"
				loc, _ := time.LoadLocation("Local")
				theTime2, err := time.ParseInLocation(timeLayout+" 15:04", preTime, loc)
				if err != nil {
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
					return
				}
				pTime := theTime2.Unix()

				ctime := time.Now().Unix()

				if tempPrescription.ID == 0 {
					prescription := &models.HisPrescription{
						ID:                 0,
						PatientId:          patient_id,
						UserOrgId:          adminInfo.CurrentOrgId,
						RecordDate:         recordDateTime,
						Ctime:              ctime,
						Mtime:              ctime,
						Type:               types,
						Modifier:           adminInfo.AdminUser.Id,
						Creator:            adminInfo.AdminUser.Id,
						Status:             1,
						Doctor:             role.UserName,
						HisPatientId:       his_patient_id,
						OrderStatus:        order_status,
						BatchNumber:        "",
						PrescriptionNumber: hpInfo.PrescriptionNumber,
						PreTime:            pTime,
						PType:              p_type,
						MedType:            med_type,
					}
					tempPrescription = prescription
					service.SaveHisPrescription(tempPrescription)

				} else {
					tempPrescription.ID = id
					tempPrescription.Type = types
					tempPrescription.Modifier = adminInfo.AdminUser.Id
					tempPrescription.Mtime = time.Now().Unix()
					tempPrescription.Doctor = role.UserName
					tempPrescription.OrderStatus = order_status
					tempPrescription.PreTime = pTime
					tempPrescription.MedType = med_type
					service.SaveHisPrescription(tempPrescription)
				}
				//service.SaveHisPrescription(prescription)
				//更改患者挂号状态
				_, err2 := service.UpdateHisPatientIsReturn(patient_id, recordDateTime, adminInfo.CurrentOrgId)
				fmt.Println("更改失败", err2)
				if items["advices"] != nil && reflect.TypeOf(items["advices"]).String() == "[]interface {}" {
					advices := items["advices"].([]interface{})
					//group := service.GetMaxAdviceGroupID(adminInfo.CurrentOrgId)
					groupNo := int64(0)
					ctime := time.Now().Unix()
					mtime := ctime
					if len(advices) > 0 {
						for _, advice := range advices {
							var s models.HisDoctorAdviceInfo
							s.PrescriptionId = tempPrescription.ID
							s.AdviceType = 2
							s.AdviceDoctor = doctor_id
							s.StopState = 2
							s.ExecutionState = 2
							s.AdviceDate = recordDateTime
							s.Status = 1
							s.UserOrgId = adminInfo.CurrentOrgId
							s.RecordDate = recordDateTime
							s.StartTime = tempPrescription.PreTime
							s.Groupno = groupNo
							s.CreatedTime = ctime
							s.UpdatedTime = mtime
							s.PatientId = patient_id
							s.HisPatientId = his_patient_id
							s.StartTime = pTime
							errcode := c.setAdviceWithJSON(&s, advice.(map[string]interface{}))
							if errcode > 0 {
								c.ServeFailJSONWithSGJErrorCode(errcode)
								return
							}

							s.StartTime = pTime
							service.CreateHisDoctorAdvice(&s)
							var randNum int
							randNum = rand.Intn(10000) + 1000
							timestamp := time.Now().Unix()
							tempTime := time.Unix(timestamp, 0)
							timeFormat := tempTime.Format("20060102150405")
							s.FeedetlSn = timeFormat + strconv.FormatInt(int64(randNum), 10) + "-" + "1" + "-" + strconv.FormatInt(s.ID, 10)
							service.CreateHisDoctorAdvice(&s)

						}
					}
				}
				if items["project"] != nil && reflect.TypeOf(items["project"]).String() == "[]interface {}" {
					projects := items["project"].([]interface{})
					if len(projects) > 0 {
						for _, project := range projects {
							var p models.HisPrescriptionProject
							p.PrescriptionId = tempPrescription.ID
							p.Ctime = time.Now().Unix()
							p.Mtime = time.Now().Unix()
							p.PatientId = patient_id
							p.RecordDate = recordDateTime
							p.Doctor = doctor_id
							p.UserOrgId = adminInfo.CurrentOrgId
							p.HisPatientId = his_patient_id
							p.Status = 1
							p.StartTime = pTime

							errcode := c.setProjectWithJSON(&p, project.(map[string]interface{}))
							if errcode > 0 {
								c.ServeFailJSONWithSGJErrorCode(errcode)
								return
							}
							service.CreateHisProjectTwo(&p)

							var randNum int
							randNum = rand.Intn(10000) + 1000
							timestamp := time.Now().Unix()
							tempTime := time.Unix(timestamp, 0)
							timeFormat := tempTime.Format("20060102150405")
							p.FeedetlSn = timeFormat + strconv.FormatInt(int64(randNum), 10) + "-" + "2" + "-" + strconv.FormatInt(p.ID, 10)
							service.SaveHisProjectTwo(&p)

							if p.Type == 3 { //处理透前准备耗材数量数据
								consumables, _ := service.FindHisConsumablesByID(adminInfo.CurrentOrgId, patient_id, recordDateTime, p.ProjectId)
								if consumables.ID > 0 {
									consumables.Count = p.Count
									service.UpdateConsumables(&consumables)
								}
							}
						}
					}
				}
				if items["addition"] != nil && reflect.TypeOf(items["addition"]).String() == "[]interface {}" {
					addition := items["addition"].([]interface{})
					//group := service.GetMaxAdviceGroupID(adminInfo.CurrentOrgId)
					ctime := time.Now().Unix()
					mtime := ctime
					if len(addition) > 0 {
						for _, item := range addition {
							var s models.HisAdditionalCharge
							s.PrescriptionId = tempPrescription.ID
							s.Status = 1
							s.UserOrgId = adminInfo.CurrentOrgId
							s.RecordDate = recordDateTime
							s.CreatedTime = ctime
							s.UpdatedTime = mtime
							s.PatientId = patient_id
							s.HisPatientId = his_patient_id
							errcode := c.setAddtionWithJSON(&s, item.(map[string]interface{}), adminInfo.CurrentOrgId)
							if errcode > 0 {
								c.ServeFailJSONWithSGJErrorCode(errcode)
								return
							}
							service.CreateAdditionalCharge(&s)
							var randNum int
							randNum = rand.Intn(10000) + 1000
							timestamp := time.Now().Unix()
							tempTime := time.Unix(timestamp, 0)
							timeFormat := tempTime.Format("20060102150405")
							s.FeedetlSn = timeFormat + strconv.FormatInt(int64(randNum), 10) + "-" + "3" + "-" + strconv.FormatInt(s.ID, 10)
							service.CreateAdditionalCharge(&s)

						}
					}
				}

			}
		}
	}
	if err == nil {
		c.ServeSuccessJSON(map[string]interface{}{
			"msg": "保存成功",
		})
		return

	} else {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeSystemError)
		return
	}
}
func (c *HisApiController) EditHisPrescription() {
	record_date := c.GetString("record_date")
	patient_id, _ := c.GetInt64("patient_id")
	reg_type, _ := c.GetInt64("reg_type")
	//diagnose, _ := c.GetInt64("diagnose", 0)
	diagnose := c.GetString("diagnose")
	sick_type, _ := c.GetInt64("sick_type")
	sick_history := c.GetString("sick_history")
	doctor_id, _ := c.GetInt64("doctor", 0)
	department, _ := c.GetInt64("department", 0)
	his_patient_id, _ := c.GetInt64("his_patient_id")
	p_type, _ := c.GetInt64("p_type")

	dataBody := make(map[string]interface{}, 0)
	err := json.Unmarshal(c.Ctx.Input.RequestBody, &dataBody)
	if err != nil {
		utils.ErrorLog(err.Error())
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
		return
	}

	timeLayout := "2006-01-02"
	loc, _ := time.LoadLocation("Local")
	theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", record_date+" 00:00:00", loc)
	if err != nil {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
		return
	}
	adminInfo := c.GetAdminUserInfo()
	recordDateTime := theTime.Unix()

	role, _ := service.GetAdminUserInfoByID(adminInfo.CurrentOrgId, doctor_id)

	info, _ := service.FindPatientPrescriptionInfo(adminInfo.CurrentOrgId, patient_id, recordDateTime, p_type)
	var hpInfo models.HisPrescriptionInfo
	if info.ID == 0 {
		var randNum int
		randNum = rand.Intn(10000) + 1000
		timestamp := time.Now().Unix()
		tempTime := time.Unix(timestamp, 0)
		timeFormat := tempTime.Format("20060102150405")
		p_number := timeFormat + strconv.FormatInt(int64(randNum), 10) + strconv.FormatInt(int64(adminInfo.CurrentOrgId), 10) + strconv.FormatInt(int64(patient_id), 10)

		hpInfo = models.HisPrescriptionInfo{
			UserOrgId:          adminInfo.CurrentOrgId,
			RecordDate:         theTime.Unix(),
			PatientId:          patient_id,
			Status:             1,
			Ctime:              time.Now().Unix(),
			Mtime:              time.Now().Unix(),
			Creator:            adminInfo.AdminUser.Id,
			Modifier:           adminInfo.AdminUser.Id,
			Diagnosis:          diagnose,
			SickHistory:        sick_history,
			Departments:        department,
			RegisterType:       reg_type,
			PrescriptionNumber: p_number,
			PrescriptionStatus: 1,
			Doctor:             role.UserName,
			DoctorId:           doctor_id,
			SickType:           sick_type,
			PType:              p_type,
		}
		service.SavePatientPrescriptionInfo(hpInfo)

	} else {
		hpInfo = models.HisPrescriptionInfo{
			ID:                 info.ID,
			UserOrgId:          adminInfo.CurrentOrgId,
			RecordDate:         info.RecordDate,
			PatientId:          info.PatientId,
			Status:             1,
			Ctime:              info.Ctime,
			Mtime:              time.Now().Unix(),
			Creator:            info.Creator,
			Modifier:           adminInfo.AdminUser.Id,
			Diagnosis:          diagnose,
			SickHistory:        sick_history,
			Departments:        department,
			RegisterType:       reg_type,
			PrescriptionNumber: info.PrescriptionNumber,
			Doctor:             role.UserName,
			PrescriptionStatus: info.PrescriptionStatus,
			DoctorId:           doctor_id,
			SickType:           sick_type,
			PType:              info.PType,
		}
		service.SavePatientPrescriptionInfo(hpInfo)
	}

	if dataBody["prescriptions"] != nil && reflect.TypeOf(dataBody["prescriptions"]).String() == "[]interface {}" {
		prescriptions, _ := dataBody["prescriptions"].([]interface{})

		if len(prescriptions) > 0 {
			for _, item := range prescriptions {
				items := item.(map[string]interface{})
				if items["id"] == nil || reflect.TypeOf(items["id"]).String() != "float64" {
					utils.ErrorLog("id")
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
					return
				}
				id := int64(items["id"].(float64))

				if items["type"] == nil || reflect.TypeOf(items["type"]).String() != "float64" {
					utils.ErrorLog("type")
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
					return
				}
				types := int64(items["type"].(float64))

				if items["med_type"] == nil || reflect.TypeOf(items["med_type"]).String() != "float64" {
					utils.ErrorLog("med_type")
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
					return
				}
				med_type := strconv.Itoa(int(items["med_type"].(float64)))

				historyPrescription, _ := service.GetHisPrescriptionByID(adminInfo.CurrentOrgId, id)

				ctime := time.Now().Unix()

				prescription := &models.HisPrescription{
					ID:                 id,
					PatientId:          patient_id,
					UserOrgId:          adminInfo.CurrentOrgId,
					RecordDate:         recordDateTime,
					Ctime:              ctime,
					Mtime:              ctime,
					Type:               types,
					Modifier:           adminInfo.AdminUser.Id,
					Creator:            adminInfo.AdminUser.Id,
					Status:             1,
					Doctor:             role.UserName,
					HisPatientId:       his_patient_id,
					OrderStatus:        1,
					BatchNumber:        "",
					PrescriptionNumber: hpInfo.PrescriptionNumber,
					PType:              hpInfo.PType,
					MedType:            med_type,
				}

				if historyPrescription.ID > 0 {
					prescription.PreTime = historyPrescription.PreTime

				}

				service.SaveHisPrescription(prescription)

				if items["advices"] != nil && reflect.TypeOf(items["advices"]).String() == "[]interface {}" {
					advices := items["advices"].([]interface{})
					//group := service.GetMaxAdviceGroupID(adminInfo.CurrentOrgId)
					groupNo := int64(0)
					ctime := time.Now().Unix()
					mtime := ctime
					if len(advices) > 0 {
						for _, advice := range advices {
							var s models.HisDoctorAdviceInfo
							s.PrescriptionId = prescription.ID
							s.AdviceType = 2
							s.AdviceDoctor = adminInfo.AdminUser.Id
							s.StopState = 2
							s.ExecutionState = 2
							s.AdviceDate = recordDateTime
							s.Status = 1
							s.UserOrgId = adminInfo.CurrentOrgId
							s.RecordDate = recordDateTime
							s.StartTime = prescription.PreTime
							s.Groupno = groupNo
							s.CreatedTime = ctime
							s.UpdatedTime = mtime
							s.PatientId = patient_id
							s.HisPatientId = his_patient_id
							errcode := c.setAdviceWithJSONTwo(&s, advice.(map[string]interface{}))
							if errcode > 0 {
								c.ServeFailJSONWithSGJErrorCode(errcode)
								return
							}
							service.CreateHisDoctorAdvice(&s)

						}
					}
				}
				if items["project"] != nil && reflect.TypeOf(items["project"]).String() == "[]interface {}" {
					projects := items["project"].([]interface{})
					if len(projects) > 0 {
						for _, project := range projects {
							var p models.HisPrescriptionProject
							p.PrescriptionId = prescription.ID
							p.Ctime = time.Now().Unix()
							p.Mtime = time.Now().Unix()
							p.PatientId = patient_id
							p.RecordDate = recordDateTime
							p.UserOrgId = adminInfo.CurrentOrgId
							p.HisPatientId = his_patient_id
							p.Status = 1
							errcode := c.setProjectWithJSONTwo(&p, project.(map[string]interface{}))
							if errcode > 0 {
								c.ServeFailJSONWithSGJErrorCode(errcode)
								return
							}
							service.CreateHisProjectTwo(&p)

						}
					}
				}
				if items["addition"] != nil && reflect.TypeOf(items["addition"]).String() == "[]interface {}" {
					addition := items["addition"].([]interface{})
					//group := service.GetMaxAdviceGroupID(adminInfo.CurrentOrgId)
					ctime := time.Now().Unix()
					mtime := ctime
					if len(addition) > 0 {
						for _, item := range addition {
							var s models.HisAdditionalCharge
							s.PrescriptionId = prescription.ID
							s.Status = 1
							s.UserOrgId = adminInfo.CurrentOrgId
							s.RecordDate = recordDateTime
							s.CreatedTime = ctime
							s.UpdatedTime = mtime
							s.PatientId = patient_id
							s.HisPatientId = his_patient_id
							errcode := c.setAddtionWithJSONTwo(&s, item.(map[string]interface{}), adminInfo.CurrentOrgId)
							if errcode > 0 {
								c.ServeFailJSONWithSGJErrorCode(errcode)
								return
							}
							service.CreateAdditionalCharge(&s)
						}
					}
				}

			}
		}
	}
	if err == nil {
		c.ServeSuccessJSON(map[string]interface{}{
			"msg": "保存成功",
		})
		return

	} else {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeSystemError)
		return
	}
}

func (c *HisApiController) DeletePrescription() {
	prescription_id, _ := c.GetInt64("id")
	projects, _ := service.GetHisPrescriptionProjectsByID(prescription_id)
	advices, _ := service.GetHisPrescriptionAdviceByID(prescription_id)
	_, drugStockConfig := service.FindDrugStockAutomaticReduceRecordByOrgId(c.GetAdminUserInfo().CurrentOrgId)

	_, stockConfig := service.FindAutomaticReduceRecordByOrgId(c.GetAdminUserInfo().CurrentOrgId)

	err := service.DelelteHisPrescription(prescription_id, c.GetAdminUserInfo().CurrentOrgId)
	if err == nil {
		if len(projects) > 0 {
			for _, item := range projects {
				if stockConfig.IsOpen == 1 {
					if item.Type == 3 {
						good, _ := service.FindGoodInfoByIdTwo(item.ProjectId)
						f_count, _ := strconv.ParseFloat(strconv.FormatInt(item.Count, 10), 64)
						good.Total = good.Total + f_count
						service.UpdateGoodInfo(&good)
					}
				}

				if item.Type == 3 { //处理透前准备耗材数量数据
					consumables, _ := service.FindHisConsumablesByID(item.UserOrgId, item.PatientId, item.RecordDate, item.ProjectId)
					if consumables.ID > 0 {
						consumables.Count = 0
						service.UpdateConsumables(&consumables)
					}
				}
			}
		}

		if drugStockConfig.IsOpen == 1 {
			if len(advices) > 0 {
				for _, item := range advices {
					drug, _ := service.FindBaseDrugLibRecord(c.GetAdminUserInfo().CurrentOrgId, item.DrugId)
					if item.PrescribingNumberUnit == drug.MinUnit {
						drug.Total = drug.Total + item.PrescribingNumber
						service.UpdateBaseDrugLib(&drug)
					} else {
						if item.PrescribingNumberUnit == drug.MaxUnit {
							item.PrescribingNumber = item.PrescribingNumber * float64(drug.MinNumber)
							drug.Total = drug.Total + item.PrescribingNumber
							service.UpdateBaseDrugLib(&drug)
						}
					}
				}
			}
		}
		c.ServeSuccessJSON(map[string]interface{}{
			"msg": "删除成功",
		})
		return
	} else {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeSystemError)
		return
	}
}

func (c *HisApiController) DeleteDoctorAdvice() {
	id, _ := c.GetInt64("id")
	advice, _ := service.GetHisDoctorAdvicesById(id)
	_, drugStockConfig := service.FindDrugStockAutomaticReduceRecordByOrgId(c.GetAdminUserInfo().CurrentOrgId)
	err := service.DelelteDoctorAdvice(id, c.GetAdminUserInfo().CurrentOrgId)
	if err == nil {
		if drugStockConfig.IsOpen == 1 {
			drug, _ := service.FindBaseDrugLibRecord(c.GetAdminUserInfo().CurrentOrgId, advice.DrugId)
			if advice.PrescribingNumberUnit == drug.MinUnit {
				drug.Total = drug.Total + advice.PrescribingNumber
				service.UpdateBaseDrugLib(&drug)
			} else {
				if advice.PrescribingNumberUnit == drug.MaxUnit {
					advice.PrescribingNumber = advice.PrescribingNumber * float64(drug.MinNumber)
					drug.Total = drug.Total + advice.PrescribingNumber
					service.UpdateBaseDrugLib(&drug)
				}
			}
		}

		c.ServeSuccessJSON(map[string]interface{}{
			"msg": "删除成功",
		})
		return
	} else {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeSystemError)
		return
	}
}

func (c *HisApiController) DeleteProject() {
	id, _ := c.GetInt64("id")
	adminInfo := c.GetAdminUserInfo()
	project, _ := service.GetHisProjectByID(id)
	var consumable models.DialysisBeforePrepare
	_, stockConfig := service.FindAutomaticReduceRecordByOrgId(c.GetAdminUserInfo().CurrentOrgId)

	if project.ID > 0 && project.Type == 3 {
		consumable, _ = service.FindHisConsumablesByID(adminInfo.CurrentOrgId, project.PatientId, project.RecordDate, project.ProjectId)
	}
	err := service.DelelteProject(id, c.GetAdminUserInfo().CurrentOrgId)
	if err == nil {
		if stockConfig.IsOpen == 1 {
			if project.Type == 3 {
				good, _ := service.FindGoodInfoByIdTwo(project.ProjectId)
				f_count, _ := strconv.ParseFloat(strconv.FormatInt(project.Count, 10), 64)
				good.Total = good.Total + f_count
				service.UpdateGoodInfo(&good)
			}
		}
		if consumable.ID > 0 {
			consumable.Count = 0
			service.UpdateConsumables(&consumable)
		}

		c.ServeSuccessJSON(map[string]interface{}{
			"msg": "删除成功",
		})
		return
	} else {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeSystemError)
		return
	}
}

func (c *HisApiController) CreateHisAdditionalCharge() {
	his_patient_id, _ := c.GetInt64("his_patient_id")
	patient_id, _ := c.GetInt64("patient_id")
	record_date := c.GetString("record_date")
	timeLayout := "2006-01-02"
	loc, _ := time.LoadLocation("Local")
	theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", record_date+" 00:00:00", loc)
	if err != nil {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
		return
	}
	adminInfo := c.GetAdminUserInfo()
	recordDateTime := theTime.Unix()
	dataBody := make(map[string]interface{}, 0)
	err = json.Unmarshal(c.Ctx.Input.RequestBody, &dataBody)
	if err != nil {
		utils.ErrorLog(err.Error())
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
		return
	}

	var additions []*models.HisAdditionalCharge
	if dataBody["addition"] != nil && reflect.TypeOf(dataBody["addition"]).String() == "[]interface {}" {
		additions, _ := dataBody["addition"].([]interface{})
		if len(additions) > 0 {
			for _, item := range additions {
				items := item.(map[string]interface{})

				if items["item_id"] == nil || reflect.TypeOf(items["item_id"]).String() != "float64" {
					utils.ErrorLog("item_id")
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
					return
				}
				item_id := int64(items["item_id"].(float64))

				if items["item_name"] == nil || reflect.TypeOf(items["item_name"]).String() != "string" {
					utils.ErrorLog("item_name")
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
					return
				}
				item_name := items["item_name"].(string)

				if items["price"] == nil || reflect.TypeOf(items["price"]).String() != "string" {
					utils.ErrorLog("price")
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
					return
				}
				price, _ := strconv.ParseFloat(items["price"].(string), 64)

				ctime := time.Now().Unix()
				additional := &models.HisAdditionalCharge{
					PatientId:    patient_id,
					HisPatientId: his_patient_id,
					UserOrgId:    adminInfo.CurrentOrgId,
					RecordDate:   recordDateTime,
					CreatedTime:  ctime,
					UpdatedTime:  ctime,
					Modifier:     adminInfo.AdminUser.Id,
					Creator:      adminInfo.AdminUser.Id,
					Price:        price,
					ItemName:     item_name,
					ItemId:       item_id,
					Status:       1,
				}
				additions = append(additions, additional)
			}
		}
	}
	for _, item := range additions {
		service.CreateAddtionalCharge(item)
	}
	c.ServeSuccessJSON(map[string]interface{}{
		"msg": "创建成功",
	})
}

func (c *HisApiController) CreateHisPatientCaseHistory() {

	blood_fat := c.GetString("blood_fat")
	bloodfatfloat, _ := strconv.ParseFloat(blood_fat, 64)

	blood_sugar := c.GetString("blood_sugar")
	bloodsugarfloat, _ := strconv.ParseFloat(blood_sugar, 64)
	fmt.Println(bloodsugarfloat)
	chief_conplaint := c.GetString("chief_conplaint")

	dbp := c.GetString("dbp")
	dbpfloat, _ := strconv.ParseFloat(dbp, 64)
	delivery_way, _ := c.GetInt64("delivery_way")
	diagnostic := c.GetString("diagnostic")

	family_history := c.GetString("family_history")

	height := c.GetString("height")
	history_of_present_illness := c.GetString("history_of_present_illness")
	is_infect, _ := c.GetInt64("is_infect")
	fmt.Println("is", is_infect)
	past_history := c.GetString("past_history")
	patient_id, _ := c.GetInt64("patient_id")
	his_patient_id, _ := c.GetInt64("his_patient_id")
	fmt.Println("patient_id", patient_id)
	personal_history := c.GetString("personal_history")
	pulse := c.GetString("pulse")
	pulsefloat, _ := strconv.ParseFloat(pulse, 64)
	sbp := c.GetString("sbp")
	sbpfloat, _ := strconv.ParseFloat(sbp, 64)
	heightfloat, _ := strconv.ParseFloat(height, 64)
	sicktype := c.GetString("sick_type")
	fmt.Println("sicketype", sicktype)
	sick_type, _ := strconv.ParseInt(sicktype, 10, 64)
	symptom := c.GetString("symptom")
	sick_date := c.GetString("sick_date")
	temperatures := c.GetString("temperature")
	fmt.Println("temperatures", temperatures)
	temperature, _ := strconv.ParseFloat(temperatures, 64)
	record_date := c.GetString("record_date")
	breathing := c.GetString("breathing")
	doctor_advice := c.GetString("doctor_advice")
	remark := c.GetString("remark")
	breathingfloat, _ := strconv.ParseFloat(breathing, 64)

	sick, _ := c.GetInt64("sick")
	diagnose, _ := c.GetInt64("diagnose")
	id, _ := c.GetInt64("id")

	timeLayout := "2006-01-02"
	loc, _ := time.LoadLocation("Local")
	theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", record_date+" 00:00:00", loc)
	allergic_history := c.GetString("allergic_history")
	if err != nil {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
		return
	}
	recordDateTime := theTime.Unix()
	fmt.Println("recordDataTime", recordDateTime)
	sickTime, err := time.ParseInLocation(timeLayout+" 15:04:05", sick_date+" 00:00:00", loc)
	if err != nil {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
		return
	}
	sickTimes := sickTime.Unix()
	ctime := time.Now().Unix()
	caseHistory := models.HisPatientCaseHistory{
		HisPatientId:            his_patient_id,
		PatientId:               patient_id,
		Temperature:             temperature,
		BloodSugar:              bloodsugarfloat,
		Pulse:                   pulsefloat,
		Sbp:                     sbpfloat,
		Dbp:                     dbpfloat,
		Height:                  heightfloat,
		BloodFat:                bloodfatfloat,
		SickType:                sick_type,
		Symptom:                 symptom,
		SickDate:                sickTimes,
		IsInfect:                is_infect,
		HistoryOfPresentIllness: history_of_present_illness,
		PastHistory:             past_history,
		Doctor:                  c.GetAdminUserInfo().AdminUser.Id,
		ChiefConplaint:          chief_conplaint,
		PersonalHistory:         personal_history,
		FamilyHistory:           family_history,
		Diagnostic:              diagnostic,
		UserOrgId:               c.GetAdminUserInfo().CurrentOrgId,
		Status:                  1,
		Ctime:                   ctime,
		Mtime:                   ctime,
		RecordDate:              recordDateTime,
		DeliveryWay:             delivery_way,
		Breathing:               breathingfloat,
		DoctorAdvice:            doctor_advice,
		Remark:                  remark,
		Sick:                    sick,
		Diagnose:                diagnose,
		AllergicHistory:         allergic_history,
	}
	//查询该患者是否有病历
	_, errcodes := service.GetHisPatientCaseHistoryById(id)
	if errcodes == gorm.ErrRecordNotFound {
		err = service.SaveHisPatientCaseHistory(&caseHistory)
		if err != nil {
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeUpdateConfig)
			return
		}
		c.ServeSuccessJSON(map[string]interface{}{
			"caseHistory": caseHistory,
		})
		return
	} else if errcodes == nil {
		err := service.UpdatePatientCaseHistory(id, &caseHistory)
		if err != nil {
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeUpdateConfig)
			return
		}
		c.ServeSuccessJSON(map[string]interface{}{
			"caseHistory": caseHistory,
		})
	}

	//查询该患者是否有病历
	//_, errcode := service.GetHisPatientCaseHistoryById(his_patient_id)
	//if errcode == gorm.ErrRecordNotFound {
	//	err = service.SaveHisPatientCaseHistory(caseHistory)
	//	if err != nil {
	//		c.ServeSuccessJSON(map[string]interface{}{
	//			"msg": "保存成功",
	//		})
	//	}
	//} else if errcode == nil {
	//	c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeUpdateConfig)
	//	return
	//}

}
func (c *HisApiController) GetHisPatientCaseHistoryList() {
	patient_id, _ := c.GetInt64("patient_id", 0)
	adminUser := c.GetAdminUserInfo()
	caseHistorys, _ := service.GetHisPatientCaseHistoryList(adminUser.CurrentOrgId, patient_id)
	c.ServeSuccessJSON(map[string]interface{}{
		"list": caseHistorys,
	})

}
func (c *HisApiController) GetHisPatientCaseHistory() {
	record_date, _ := c.GetInt64("record_date", 0)
	patient_id, _ := c.GetInt64("patient_id", 0)
	admin := c.GetAdminUserInfo()
	info, _ := service.GetHisPatientInfo(admin.CurrentOrgId, patient_id, record_date)
	case_history, _ := service.GetHisPatientCaseHistoryInfo(admin.CurrentOrgId, patient_id, record_date)
	c.ServeSuccessJSON(map[string]interface{}{
		"info":         info,
		"case_history": case_history,
	})

}
func (c *HisApiController) CreateCaseHistoryTemplate() {
	template_name := c.GetString("template_name")
	template_remark := c.GetString("template_remark")
	doctor := c.GetAdminUserInfo().AdminUser.Id
	diagnostic := c.GetString("diagnostic")
	chief_conplaint := c.GetString("chief_conplain")
	history_of_present_illness := c.GetString("history_of_present_illness")
	past_history := c.GetString("past_history")
	personal_history := c.GetString("personal_history")
	family_history := c.GetString("family_history")
	user_name := c.GetString("user_name")
	doctor_advice := c.GetString("doctor_advice")
	remark := c.GetString("remark")
	//record_date := c.GetString("record_date")
	//fmt.Println("record_date--------",record_date)
	//timeLayout := "2006-01-02"
	//loc, _ := time.LoadLocation("Local")
	//
	//theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", record_date+" 00:00:00", loc)
	//if err != nil {
	//	c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
	//	return
	//}
	//recordDateTime := theTime.Unix()

	ctime := time.Now().Unix()

	template := models.HisCaseHistoryTemplate{
		HistoryOfPresentIllness: history_of_present_illness,
		PastHistory:             past_history,
		ChiefConplaint:          chief_conplaint,
		PersonalHistory:         personal_history,
		FamilyHistory:           family_history,
		Diagnostic:              diagnostic,
		UserOrgId:               c.GetAdminUserInfo().CurrentOrgId,
		Status:                  1,
		Ctime:                   ctime,
		Mtime:                   ctime,
		RecordDate:              time.Now().Unix(),
		TemplateName:            template_name,
		TemplateRemark:          template_remark,
		Creator:                 doctor,
		Modifier:                doctor,
		UserName:                user_name,
		DoctorAdvice:            doctor_advice,
		Remark:                  remark,
	}

	err := service.SaveHisPatientCaseHistoryTemplate(template)

	if err == nil {
		c.ServeSuccessJSON(map[string]interface{}{
			"msg": "保存成功",
		})

	} else {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeSystemError)
		return
	}

}
func (c *HisApiController) GetCaseHistoryTemplate() {
	timeLayout := "2006-01-02"
	loc, _ := time.LoadLocation("Local")
	keyword := c.GetString("keyword")
	start_time := c.GetString("start_time")
	end_time := c.GetString("end_time")
	startTime, _ := time.ParseInLocation(timeLayout+" 15:04:05", start_time+" 00:00:00", loc)
	endTime, _ := time.ParseInLocation(timeLayout+" 15:04:05", end_time+" 23:59:59", loc)
	admin := c.GetAdminUserInfo()
	template, _ := service.GetHisPatientCaseHistoryTemplate(admin.CurrentOrgId, startTime.Unix(), endTime.Unix(), keyword)
	//history, _ := service.GetHisPatientCaseHistory(admin.CurrentOrgId)
	c.ServeSuccessJSON(map[string]interface{}{
		"template": template,
		//"history":  history,
	})

}

func (c *HisApiController) setAdviceWithJSONTwo(advice *models.HisDoctorAdviceInfo, json map[string]interface{}) int {

	if json["drug_name"] == nil || reflect.TypeOf(json["drug_name"]).String() != "string" {
		utils.ErrorLog("drug_name")
		return enums.ErrorCodeParamWrong
	}
	adviceName, _ := json["drug_name"].(string)
	if len(adviceName) == 0 {
		utils.ErrorLog("len(advice_name) == 0")
		return enums.ErrorCodeParamWrong
	}
	advice.AdviceName = adviceName
	adviceDesc, _ := json["advice_desc"].(string)
	advice.AdviceDesc = adviceDesc
	if json["drug_spec"] != nil && reflect.TypeOf(json["drug_spec"]).String() == "string" {
		drugSpec, _ := strconv.ParseFloat(json["drug_spec"].(string), 64)
		advice.DrugSpec = drugSpec
	}
	if json["remark"] != nil && reflect.TypeOf(json["remark"]).String() == "string" {
		remark, _ := json["remark"].(string)
		advice.Remark = remark
	}
	if json["id"] == nil {
		advice.DrugId = 0
	} else {
		if json["id"] != nil || reflect.TypeOf(json["id"]).String() == "float64" {
			drug_id := int64(json["id"].(float64))
			advice.DrugId = drug_id
		}
	}
	if json["advice_id"] != nil && reflect.TypeOf(json["advice_id"]).String() == "float64" {
		advice_id := int64(json["advice_id"].(float64))
		advice.ID = advice_id
		if advice.ID > 0 {
			hisAdvice, err := service.GetHisDoctorAdvicesById(advice.ID)
			if err == nil {
				if hisAdvice.ID > 0 {
					advice.ExecutionTime = hisAdvice.ExecutionTime
					advice.ExecutionStaff = hisAdvice.ExecutionStaff
					advice.ExecutionState = hisAdvice.ExecutionState
					advice.CheckTime = hisAdvice.CheckTime
					advice.Checker = hisAdvice.Checker
					advice.CheckState = hisAdvice.CheckState
					advice.StartTime = hisAdvice.StartTime
					advice.FeedetlSn = hisAdvice.FeedetlSn

				}
			}
		}
	}

	//
	//if json["execution_time"] != nil && reflect.TypeOf(json["execution_time"]).String() == "string" {
	//	execution_time, _ := strconv.ParseInt(json["execution_time"].(string), 10,64)
	//	advice.ExecutionTime = execution_time
	//}
	//
	//
	//
	//if json["execution_staff"] != nil && reflect.TypeOf(json["execution_staff"]).String() == "string" {
	//	execution_staff, _ := strconv.ParseInt(json["execution_staff"].(string), 10,64)
	//	advice.ExecutionStaff = execution_staff
	//}
	//
	//
	//
	//if json["execution_state"] != nil && reflect.TypeOf(json["execution_state"]).String() == "string" {
	//	execution_state, _ := strconv.ParseInt(json["execution_state"].(string), 10,64)
	//	advice.ExecutionState = execution_state
	//}
	//
	//
	//if json["check_time"] != nil && reflect.TypeOf(json["check_time"]).String() == "string" {
	//	check_time, _ := strconv.ParseInt(json["check_time"].(string), 10,64)
	//	advice.CheckTime = check_time
	//}
	//
	//
	//if json["check_state"] != nil && reflect.TypeOf(json["check_state"]).String() == "string" {
	//	check_state, _ := strconv.ParseInt(json["check_state"].(string), 10,64)
	//	advice.CheckState = check_state
	//}
	//
	//
	//if json["checker"] != nil && reflect.TypeOf(json["checker"]).String() == "string" {
	//	checker, _ := strconv.ParseInt(json["checker"].(string), 10,64)
	//	advice.Checker = checker
	//}
	//
	//if json["start_time"] != nil && reflect.TypeOf(json["start_time"]).String() == "string" {
	//	start_time, _ := strconv.ParseInt(json["start_time"].(string), 10,64)
	//	advice.StartTime = start_time
	//}

	if json["min_unit"] != nil && reflect.TypeOf(json["min_unit"]).String() == "string" {
		drugSpecUnit, _ := json["min_unit"].(string)
		advice.DrugSpecUnit = drugSpecUnit
	}
	if json["single_dose"] != nil && reflect.TypeOf(json["single_dose"]).String() == "string" {
		singleDose, _ := strconv.ParseFloat(json["single_dose"].(string), 64)
		advice.SingleDose = singleDose
	}
	if json["single_dose_unit"] != nil && reflect.TypeOf(json["single_dose_unit"]).String() == "string" {
		singleDoseUnit, _ := json["single_dose_unit"].(string)
		advice.SingleDoseUnit = singleDoseUnit
	}
	if json["prescribing_number"] != nil && reflect.TypeOf(json["prescribing_number"]).String() == "string" {
		prescribingNumber, _ := strconv.ParseFloat(json["prescribing_number"].(string), 64)
		advice.PrescribingNumber = prescribingNumber
	}
	if json["prescribing_number_unit"] != nil && reflect.TypeOf(json["prescribing_number_unit"]).String() == "string" {
		prescribingNumberUnit, _ := json["prescribing_number_unit"].(string)
		advice.PrescribingNumberUnit = prescribingNumberUnit
	}
	if json["delivery_way"] != nil && reflect.TypeOf(json["delivery_way"]).String() == "string" {
		deliveryWay, _ := json["delivery_way"].(string)
		advice.DeliveryWay = deliveryWay
	}
	if json["execution_frequency"] != nil && reflect.TypeOf(json["execution_frequency"]).String() == "string" {
		executionFrequency, _ := json["execution_frequency"].(string)
		advice.ExecutionFrequency = executionFrequency
	}

	if json["retail_price"] != nil || reflect.TypeOf(json["retail_price"]).String() == "string" {
		price, _ := strconv.ParseFloat(json["retail_price"].(string), 64)
		advice.Price = price
	}
	if json["medical_insurance_number"] != nil || reflect.TypeOf(json["medical_insurance_number"]).String() == "string" {
		med_list_codg, _ := json["medical_insurance_number"].(string)
		advice.MedListCodg = med_list_codg
	}
	if json["day"] != nil || reflect.TypeOf(json["day"]).String() == "float64" {
		day := int64(json["day"].(float64))
		advice.Day = day
	}
	return 0
}

func (c *HisApiController) setProjectWithJSONTwo(project *models.HisPrescriptionProject, json map[string]interface{}) int {
	if json["id"] != nil || reflect.TypeOf(json["id"]).String() == "float64" {
		id := int64(json["id"].(float64))
		project.ID = id
		historyProject, _ := service.GetHisProjectByID(id)
		project.FeedetlSn = historyProject.FeedetlSn

	}
	if json["project_id"] != nil || reflect.TypeOf(json["project_id"]).String() == "float64" {
		project_id := int64(json["project_id"].(float64))
		project.ProjectId = project_id

	}
	// if json["price"] != nil || reflect.TypeOf(json["price"]).String() == "float64" {
	// 	price := int64(json["price"].(float64))
	// 	formatInt_price := strconv.FormatInt(price, 10)
	// 	float_price, _ := strconv.ParseFloat(formatInt_price, 64)
	// 	project.Price = float_price
	// }
	if json["price"] != nil || reflect.TypeOf(json["price"]).String() == "string" {
		price, _ := strconv.ParseFloat(json["price"].(string), 64)
		project.Price = price
	}

	if json["total"] != nil && reflect.TypeOf(json["total"]).String() == "string" {
		total, _ := json["total"].(string)
		totals, _ := strconv.ParseInt(total, 10, 64)
		project.Count = totals
	}

	if json["medical_code"] != nil && reflect.TypeOf(json["medical_code"]).String() == "string" {
		medical_code, _ := json["medical_code"].(string)
		project.MedListCodg = medical_code
	}
	if json["single_dose"] != nil && reflect.TypeOf(json["single_dose"]).String() == "string" {
		single_dose, _ := json["single_dose"].(string)
		project.SingleDose = single_dose
	}

	if json["delivery_way"] != nil && reflect.TypeOf(json["delivery_way"]).String() == "string" {
		delivery_way, _ := json["delivery_way"].(string)
		project.DeliveryWay = delivery_way
	}
	if json["execution_frequency"] != nil && reflect.TypeOf(json["execution_frequency"]).String() == "string" {
		execution_frequency, _ := json["execution_frequency"].(string)
		project.ExecutionFrequency = execution_frequency
	}
	if json["remark"] != nil && reflect.TypeOf(json["remark"]).String() == "string" {
		remark, _ := json["remark"].(string)
		project.Remark = remark
	}
	if json["number_days"] != nil && reflect.TypeOf(json["number_days"]).String() == "string" {
		day, _ := json["number_days"].(string)
		project.Day = day
	}

	if json["unit"] != nil && reflect.TypeOf(json["unit"]).String() == "string" {
		unit, _ := json["unit"].(string)
		project.Unit = unit
	}
	return 0
}

func (c *HisApiController) setAddtionWithJSONTwo(additionalCharge *models.HisAdditionalCharge, json map[string]interface{}, org_id int64) int {
	if json["id"] != nil || reflect.TypeOf(json["id"]).String() == "float64" {
		id := int64(json["id"].(float64))
		historyAddtions, _ := service.GetHisAdditionByID(id)
		additionalCharge.ID = id
		additionalCharge.FeedetlSn = historyAddtions.FeedetlSn
	}
	if json["item_id"] != nil || reflect.TypeOf(json["item_id"]).String() == "float64" {
		item_id := int64(json["item_id"].(float64))
		additionalCharge.ItemId = item_id
		config, _ := service.GetAdditionChargeByID(org_id, item_id)
		if config.ID > 0 {
			if len(config.Code) > 0 {
				additionalCharge.MedListCodg = config.Code
			}
		}
	}
	// if json["price"] != nil || reflect.TypeOf(json["price"]).String() == "float64" {
	// 	price := int64(json["price"].(float64))
	// 	formatInt_price := strconv.FormatInt(price, 10)
	// 	float_price, _ := strconv.ParseFloat(formatInt_price, 64)
	// 	additionalCharge.Price = float_price
	// }

	//if json["price"] != nil || reflect.TypeOf(json["price"]).String() == "float64" {
	//	price := int64(json["price"].(float64))
	//	formatInt_price := strconv.FormatInt(price, 10)
	//	float_price, _ := strconv.ParseFloat(formatInt_price, 64)
	//	additionalCharge.Price = float_price
	//}

	if json["price"] != nil || reflect.TypeOf(json["price"]).String() == "string" {
		price, _ := strconv.ParseFloat(json["price"].(string), 64)
		additionalCharge.Price = price
	}
	if json["count"] != nil && reflect.TypeOf(json["count"]).String() == "string" {
		count, _ := json["count"].(string)
		counts, _ := strconv.ParseInt(count, 10, 64)
		additionalCharge.Count = counts
	}
	if json["item_name"] != nil && reflect.TypeOf(json["item_name"]).String() == "string" {
		item_name, _ := json["item_name"].(string)
		additionalCharge.ItemName = item_name
	}

	return 0
}

func (c *HisApiController) setAdviceWithJSON(advice *models.HisDoctorAdviceInfo, json map[string]interface{}) int {

	if json["drug_name"] == nil || reflect.TypeOf(json["drug_name"]).String() != "string" {
		utils.ErrorLog("drug_name")
		return enums.ErrorCodeParamWrong
	}
	adviceName, _ := json["drug_name"].(string)
	if len(adviceName) == 0 {
		utils.ErrorLog("len(advice_name) == 0")
		return enums.ErrorCodeParamWrong
	}
	advice.AdviceName = adviceName
	adviceDesc, _ := json["advice_desc"].(string)
	advice.AdviceDesc = adviceDesc
	if json["drug_spec"] != nil && reflect.TypeOf(json["drug_spec"]).String() == "string" {
		drugSpec, _ := strconv.ParseFloat(json["drug_spec"].(string), 64)
		advice.DrugSpec = drugSpec
	}
	if json["remark"] != nil && reflect.TypeOf(json["remark"]).String() == "string" {
		remark, _ := json["remark"].(string)
		advice.Remark = remark
	}
	if json["id"] == nil {
		advice.DrugId = 0
	} else {
		if json["id"] != nil || reflect.TypeOf(json["id"]).String() == "float64" {
			drug_id := int64(json["id"].(float64))
			advice.DrugId = drug_id
		}
	}

	if json["groupno"] != nil || reflect.TypeOf(json["groupno"]).String() == "float64" {
		groupno := int64(json["groupno"].(float64))
		advice.Groupno = groupno
	}

	if json["prescribing_number"] != nil && reflect.TypeOf(json["prescribing_number"]).String() == "string" {
		prescribingNumber, _ := strconv.ParseFloat(json["prescribing_number"].(string), 64)
		advice.PrescribingNumber = prescribingNumber
	}

	if json["prescribing_number_unit"] != nil && reflect.TypeOf(json["prescribing_number_unit"]).String() == "string" {
		prescribingNumberUnit, _ := json["prescribing_number_unit"].(string)
		advice.PrescribingNumberUnit = prescribingNumberUnit
	}

	if json["advice_id"] != nil && reflect.TypeOf(json["advice_id"]).String() == "float64" {
		advice_id := int64(json["advice_id"].(float64))
		advice.ID = advice_id
		if advice.ID > 0 {
			hisAdvice, err := service.GetHisDoctorAdvicesById(advice.ID)
			if err == nil {
				if hisAdvice.ID > 0 {
					advice.ExecutionTime = hisAdvice.ExecutionTime
					advice.ExecutionStaff = hisAdvice.ExecutionStaff
					advice.ExecutionState = hisAdvice.ExecutionState
					advice.CheckTime = hisAdvice.CheckTime
					advice.Checker = hisAdvice.Checker
					advice.CheckState = hisAdvice.CheckState
					advice.StartTime = hisAdvice.StartTime
					//advice.Groupno = hisAdvice.Groupno

				}
			}
		}
	}

	_, drugStockConfig := service.FindDrugStockAutomaticReduceRecordByOrgId(advice.UserOrgId)

	if drugStockConfig.IsOpen == 1 {

		drug, _ := service.FindBaseDrugLibRecord(advice.UserOrgId, advice.DrugId)
		if advice.ID == 0 { //医嘱不存在
			if advice.PrescribingNumberUnit == drug.MinUnit { //当前数据单位与基础库一致为最小单位，直接计算
				drug.Total = drug.Total - advice.PrescribingNumber
				service.UpdateBaseDrugLib(&drug)

			} else if advice.PrescribingNumberUnit == drug.MaxUnit { //当前数据单位为最大单位，需要将最大单位转为最小单位
				num := advice.PrescribingNumber * float64(drug.MinNumber)
				drug.Total = drug.Total - num
				service.UpdateBaseDrugLib(&drug)
			}

		} else if advice.ID > 0 { //医嘱存在
			hisAdvice, _ := service.GetHisDoctorAdvicesById(advice.ID)
			var num float64

			if advice.PrescribingNumberUnit == drug.MinUnit { //当前数据为最小单位
				if hisAdvice.PrescribingNumberUnit == advice.PrescribingNumberUnit { //原数据为最小单位，三个单位一致为最小单位直接计算
					if hisAdvice.PrescribingNumber > advice.PrescribingNumber {
						num = hisAdvice.PrescribingNumber - advice.PrescribingNumber
						drug.Total = drug.Total + num
						service.UpdateBaseDrugLib(&drug)
					} else if hisAdvice.PrescribingNumber < advice.PrescribingNumber {
						num = advice.PrescribingNumber - hisAdvice.PrescribingNumber
						drug.Total = drug.Total - num
						service.UpdateBaseDrugLib(&drug)
					}
				} else { //原数据为最大单位，需要将最大单位数量转为最小单位数量
					num2 := hisAdvice.PrescribingNumber * float64(drug.MinNumber)
					if num2 > advice.PrescribingNumber {
						num = num2 - advice.PrescribingNumber
						drug.Total = drug.Total + num
						service.UpdateBaseDrugLib(&drug)
					} else if num2 < advice.PrescribingNumber {
						num = advice.PrescribingNumber - num2
						drug.Total = drug.Total - num
						service.UpdateBaseDrugLib(&drug)
					}

				}

			} else if advice.PrescribingNumberUnit == drug.MaxUnit { //当前数据为最大单位
				if advice.PrescribingNumberUnit == hisAdvice.PrescribingNumberUnit { //原数据为最大单位， 当前数据单位和原数据单位都为最大单位，需要将两个数据转成最小单位
					num1 := hisAdvice.PrescribingNumber * float64(drug.MinNumber)
					num2 := advice.PrescribingNumber * float64(drug.MinNumber)
					if num1 > num2 {
						num = num1 - num2
						drug.Total = drug.Total + num
						service.UpdateBaseDrugLib(&drug)
					} else if num1 < num2 {
						num = num2 - num1
						drug.Total = drug.Total - num
						service.UpdateBaseDrugLib(&drug)
					}

				} else { //原数据为最小单位，当前数据为最大单位，需要将当前数据数量转为最小单位数量
					num2 := advice.PrescribingNumber * float64(drug.MinNumber)
					//num2 := hisAdvice.PrescribingNumber * (drug.Dose / float64(drug.MinNumber))
					if hisAdvice.PrescribingNumber > num2 {
						num = hisAdvice.PrescribingNumber - num2
						drug.Total = drug.Total + num
						service.UpdateBaseDrugLib(&drug)
					} else if num2 < advice.PrescribingNumber {
						num = num2 - hisAdvice.PrescribingNumber
						drug.Total = drug.Total - num
						service.UpdateBaseDrugLib(&drug)
					}

				}
			}
		}
	}

	//
	//if json["execution_time"] != nil && reflect.TypeOf(json["execution_time"]).String() == "string" {
	//	execution_time, _ := strconv.ParseInt(json["execution_time"].(string), 10,64)
	//	advice.ExecutionTime = execution_time
	//}
	//
	//
	//
	//if json["execution_staff"] != nil && reflect.TypeOf(json["execution_staff"]).String() == "string" {
	//	execution_staff, _ := strconv.ParseInt(json["execution_staff"].(string), 10,64)
	//	advice.ExecutionStaff = execution_staff
	//}
	//
	//
	//
	//if json["execution_state"] != nil && reflect.TypeOf(json["execution_state"]).String() == "string" {
	//	execution_state, _ := strconv.ParseInt(json["execution_state"].(string), 10,64)
	//	advice.ExecutionState = execution_state
	//}
	//
	//
	//if json["check_time"] != nil && reflect.TypeOf(json["check_time"]).String() == "string" {
	//	check_time, _ := strconv.ParseInt(json["check_time"].(string), 10,64)
	//	advice.CheckTime = check_time
	//}
	//
	//
	//if json["check_state"] != nil && reflect.TypeOf(json["check_state"]).String() == "string" {
	//	check_state, _ := strconv.ParseInt(json["check_state"].(string), 10,64)
	//	advice.CheckState = check_state
	//}
	//
	//
	//if json["checker"] != nil && reflect.TypeOf(json["checker"]).String() == "string" {
	//	checker, _ := strconv.ParseInt(json["checker"].(string), 10,64)
	//	advice.Checker = checker
	//}
	//
	//if json["start_time"] != nil && reflect.TypeOf(json["start_time"]).String() == "string" {
	//	start_time, _ := strconv.ParseInt(json["start_time"].(string), 10,64)
	//	advice.StartTime = start_time
	//}

	if json["min_unit"] != nil && reflect.TypeOf(json["min_unit"]).String() == "string" {
		drugSpecUnit, _ := json["min_unit"].(string)
		advice.DrugSpecUnit = drugSpecUnit
	}
	if json["single_dose"] != nil && reflect.TypeOf(json["single_dose"]).String() == "string" {
		singleDose, _ := strconv.ParseFloat(json["single_dose"].(string), 64)
		advice.SingleDose = singleDose
	}
	if json["single_dose_unit"] != nil && reflect.TypeOf(json["single_dose_unit"]).String() == "string" {
		singleDoseUnit, _ := json["single_dose_unit"].(string)
		advice.SingleDoseUnit = singleDoseUnit
	}

	if json["delivery_way"] != nil && reflect.TypeOf(json["delivery_way"]).String() == "string" {
		deliveryWay, _ := json["delivery_way"].(string)
		advice.DeliveryWay = deliveryWay
	}
	if json["execution_frequency"] != nil && reflect.TypeOf(json["execution_frequency"]).String() == "string" {
		executionFrequency, _ := json["execution_frequency"].(string)
		advice.ExecutionFrequency = executionFrequency
	}

	if json["retail_price"] != nil || reflect.TypeOf(json["retail_price"]).String() == "string" {
		price, _ := strconv.ParseFloat(json["retail_price"].(string), 64)
		advice.Price = price
	}
	if json["medical_insurance_number"] != nil || reflect.TypeOf(json["medical_insurance_number"]).String() == "string" {
		med_list_codg, _ := json["medical_insurance_number"].(string)
		advice.MedListCodg = med_list_codg
	}
	if json["day"] != nil || reflect.TypeOf(json["day"]).String() == "float64" {
		day := int64(json["day"].(float64))
		advice.Day = day
	}
	return 0
}

func (c *HisApiController) setProjectWithJSON(project *models.HisPrescriptionProject, json map[string]interface{}) int {
	project.ExecutionStaff = 0
	project.ExecutionState = 2
	project.ExecutionTime = 0
	project.Checker = 0
	project.CheckState = 2
	project.CheckTime = 0
	if json["id"] != nil || reflect.TypeOf(json["id"]).String() == "float64" {
		id := int64(json["id"].(float64))
		project.ID = id
		temp_project, _ := service.GetHisPrescriptionProjectByID(id)
		project.ExecutionStaff = temp_project.ExecutionStaff
		project.ExecutionState = temp_project.ExecutionState
		project.ExecutionTime = temp_project.ExecutionTime
		project.Checker = temp_project.Checker
		project.CheckState = temp_project.CheckState
		project.CheckTime = temp_project.CheckTime

	}
	if json["type"] != nil || reflect.TypeOf(json["type"]).String() == "float64" {
		types := int64(json["type"].(float64))
		project.Type = types
	}
	if json["project_id"] != nil || reflect.TypeOf(json["project_id"]).String() == "float64" {
		project_id := int64(json["project_id"].(float64))
		project.ProjectId = project_id
		fmt.Println(project_id)
		fmt.Println(project.ProjectId)
	}
	// if json["price"] != nil || reflect.TypeOf(json["price"]).String() == "float64" {
	// 	price := int64(json["price"].(float64))
	// 	formatInt_price := strconv.FormatInt(price, 10)
	// 	float_price, _ := strconv.ParseFloat(formatInt_price, 64)
	// 	project.Price = float_price
	// }
	if json["price"] != nil || reflect.TypeOf(json["price"]).String() == "string" {
		price, _ := strconv.ParseFloat(json["price"].(string), 64)
		project.Price = price
	}

	if json["total"] != nil && reflect.TypeOf(json["total"]).String() == "string" {
		total, _ := json["total"].(string)
		totals, _ := strconv.ParseInt(total, 10, 64)
		project.Count = totals
	}

	if json["medical_code"] != nil && reflect.TypeOf(json["medical_code"]).String() == "string" {
		medical_code, _ := json["medical_code"].(string)
		project.MedListCodg = medical_code
	}
	if json["single_dose"] != nil && reflect.TypeOf(json["single_dose"]).String() == "string" {
		single_dose, _ := json["single_dose"].(string)
		project.SingleDose = single_dose
	}

	if json["delivery_way"] != nil && reflect.TypeOf(json["delivery_way"]).String() == "string" {
		delivery_way, _ := json["delivery_way"].(string)
		project.DeliveryWay = delivery_way
	}
	if json["execution_frequency"] != nil && reflect.TypeOf(json["execution_frequency"]).String() == "string" {
		execution_frequency, _ := json["execution_frequency"].(string)
		project.ExecutionFrequency = execution_frequency
	}
	if json["remark"] != nil && reflect.TypeOf(json["remark"]).String() == "string" {
		remark, _ := json["remark"].(string)
		project.Remark = remark
	}
	if json["number_days"] != nil && reflect.TypeOf(json["number_days"]).String() == "string" {
		day, _ := json["number_days"].(string)
		project.Day = day
	}

	if json["unit"] != nil && reflect.TypeOf(json["unit"]).String() == "string" {
		unit, _ := json["unit"].(string)
		project.Unit = unit
	}

	_, stockConfig := service.FindAutomaticReduceRecordByOrgId(project.UserOrgId)

	if project.ID == 0 {
		if stockConfig.IsOpen == 1 {
			if project.Type == 3 {
				good, _ := service.FindGoodInfoByIdTwo(project.ProjectId)
				f_count, _ := strconv.ParseFloat(strconv.FormatInt(project.Count, 10), 64)
				good.Total = good.Total - f_count
				service.UpdateGoodInfo(&good)
			}
		}

	} else {
		temp_project, _ := service.GetHisPrescriptionProjectByID(project.ID)

		if stockConfig.IsOpen == 1 {
			if project.Type == 3 {
				good, _ := service.FindGoodInfoByIdTwo(project.ProjectId)
				if project.Count < temp_project.Count {
					other_count := temp_project.Count - project.Count
					other_count_two, _ := strconv.ParseFloat(strconv.FormatInt(other_count, 10), 64)
					good.Total = good.Total + other_count_two
					service.UpdateGoodInfo(&good)
				} else if project.Count > temp_project.Count {
					other_count := project.Count - temp_project.Count
					other_count_two, _ := strconv.ParseFloat(strconv.FormatInt(other_count, 10), 64)
					good.Total = good.Total - other_count_two
					service.UpdateGoodInfo(&good)
				}

			}
		}

	}

	return 0
}

func (c *HisApiController) setAddtionWithJSON(additionalCharge *models.HisAdditionalCharge, json map[string]interface{}, org_id int64) int {
	if json["id"] != nil || reflect.TypeOf(json["id"]).String() == "float64" {
		id := int64(json["id"].(float64))
		additionalCharge.ID = id
	}

	if json["item_id"] != nil || reflect.TypeOf(json["item_id"]).String() == "float64" {
		item_id := int64(json["item_id"].(float64))
		additionalCharge.ItemId = item_id
		config, _ := service.GetAdditionChargeByID(org_id, item_id)
		if config.ID > 0 {
			if len(config.Code) > 0 {
				additionalCharge.MedListCodg = config.Code
			}
		}
	}
	// if json["price"] != nil || reflect.TypeOf(json["price"]).String() == "float64" {
	// 	price := int64(json["price"].(float64))
	// 	formatInt_price := strconv.FormatInt(price, 10)
	// 	float_price, _ := strconv.ParseFloat(formatInt_price, 64)
	// 	additionalCharge.Price = float_price
	// }

	//if json["price"] != nil || reflect.TypeOf(json["price"]).String() == "float64" {
	//	price := int64(json["price"].(float64))
	//	formatInt_price := strconv.FormatInt(price, 10)
	//	float_price, _ := strconv.ParseFloat(formatInt_price, 64)
	//	additionalCharge.Price = float_price
	//}

	if json["price"] != nil || reflect.TypeOf(json["price"]).String() == "string" {
		price, _ := strconv.ParseFloat(json["price"].(string), 64)
		additionalCharge.Price = price
	}
	if json["count"] != nil && reflect.TypeOf(json["count"]).String() == "string" {
		count, _ := json["count"].(string)
		counts, _ := strconv.ParseInt(count, 10, 64)
		additionalCharge.Count = counts
	}
	if json["item_name"] != nil && reflect.TypeOf(json["item_name"]).String() == "string" {
		item_name, _ := json["item_name"].(string)
		additionalCharge.ItemName = item_name
	}

	return 0
}

func (c *HisApiController) setAdviceTemplateWithJSON(advice *models.HisPrescriptionAdviceTemplate, json map[string]interface{}) int {

	if json["drug_name"] == nil || reflect.TypeOf(json["drug_name"]).String() != "string" {
		utils.ErrorLog("drug_name")
		return enums.ErrorCodeParamWrong
	}
	adviceName, _ := json["drug_name"].(string)
	if len(adviceName) == 0 {
		utils.ErrorLog("len(advice_name) == 0")
		return enums.ErrorCodeParamWrong
	}
	advice.AdviceName = adviceName
	adviceDesc, _ := json["advice_desc"].(string)
	advice.AdviceDesc = adviceDesc
	if json["drug_spec"] != nil && reflect.TypeOf(json["drug_spec"]).String() == "string" {
		drugSpec, _ := strconv.ParseFloat(json["drug_spec"].(string), 64)
		advice.DrugSpec = drugSpec
	}
	if json["remark"] != nil && reflect.TypeOf(json["remark"]).String() == "string" {
		remark, _ := json["remark"].(string)
		advice.Remark = remark
	}
	if json["id"] == nil {
		advice.DrugId = 0
	} else {
		if json["id"] != nil || reflect.TypeOf(json["id"]).String() == "float64" {
			drug_id := int64(json["id"].(float64))
			advice.DrugId = drug_id
		}
	}

	if json["min_unit"] != nil && reflect.TypeOf(json["min_unit"]).String() == "string" {
		drugSpecUnit, _ := json["min_unit"].(string)
		advice.DrugSpecUnit = drugSpecUnit
	}
	if json["single_dose"] != nil && reflect.TypeOf(json["single_dose"]).String() == "string" {
		singleDose, _ := strconv.ParseFloat(json["single_dose"].(string), 64)
		advice.SingleDose = singleDose
	}
	if json["single_dose_unit"] != nil && reflect.TypeOf(json["single_dose_unit"]).String() == "string" {
		singleDoseUnit, _ := json["single_dose_unit"].(string)
		advice.SingleDoseUnit = singleDoseUnit
	}
	if json["prescribing_number"] != nil && reflect.TypeOf(json["prescribing_number"]).String() == "string" {
		prescribingNumber, _ := strconv.ParseFloat(json["prescribing_number"].(string), 64)
		advice.PrescribingNumber = prescribingNumber
	}
	if json["prescribing_number_unit"] != nil && reflect.TypeOf(json["prescribing_number_unit"]).String() == "string" {
		prescribingNumberUnit, _ := json["prescribing_number_unit"].(string)
		advice.PrescribingNumberUnit = prescribingNumberUnit
	}
	if json["delivery_way"] != nil && reflect.TypeOf(json["delivery_way"]).String() == "string" {
		deliveryWay, _ := json["delivery_way"].(string)
		advice.DeliveryWay = deliveryWay
	}
	if json["execution_frequency"] != nil && reflect.TypeOf(json["execution_frequency"]).String() == "string" {
		executionFrequency, _ := json["execution_frequency"].(string)
		advice.ExecutionFrequency = executionFrequency
	}

	if json["retail_price"] != nil || reflect.TypeOf(json["retail_price"]).String() == "string" {
		price, _ := strconv.ParseFloat(json["retail_price"].(string), 64)
		advice.Price = price
	}
	if json["medical_insurance_number"] != nil || reflect.TypeOf(json["medical_insurance_number"]).String() == "string" {
		med_list_codg, _ := json["medical_insurance_number"].(string)
		advice.MedListCodg = med_list_codg
	}
	if json["day"] != nil || reflect.TypeOf(json["day"]).String() == "float64" {
		day := int64(json["day"].(float64))
		advice.Day = day
	}
	return 0
}

func (c *HisApiController) setProjectTemplateWithJSON(project *models.HisPrescriptionProjectTemplate, json map[string]interface{}) int {
	if json["type"] != nil || reflect.TypeOf(json["type"]).String() == "float64" {
		types := int64(json["type"].(float64))
		project.Type = types
	}
	if json["project_id"] != nil || reflect.TypeOf(json["project_id"]).String() == "float64" {
		project_id := int64(json["project_id"].(float64))
		project.ProjectId = project_id
	}

	if json["price"] != nil || reflect.TypeOf(json["price"]).String() == "string" {
		price, _ := strconv.ParseFloat(json["price"].(string), 64)
		project.Price = price
	}

	if json["total"] != nil && reflect.TypeOf(json["total"]).String() == "string" {
		total, _ := json["total"].(string)
		totals, _ := strconv.ParseInt(total, 10, 64)
		project.Count = totals
	}

	if json["medical_code"] != nil && reflect.TypeOf(json["medical_code"]).String() == "string" {
		medical_code, _ := json["medical_code"].(string)
		project.MedListCodg = medical_code
	}
	if json["single_dose"] != nil && reflect.TypeOf(json["single_dose"]).String() == "string" {
		single_dose, _ := json["single_dose"].(string)
		project.SingleDose = single_dose
	}

	if json["delivery_way"] != nil && reflect.TypeOf(json["delivery_way"]).String() == "string" {
		delivery_way, _ := json["delivery_way"].(string)
		project.DeliveryWay = delivery_way
	}
	if json["execution_frequency"] != nil && reflect.TypeOf(json["execution_frequency"]).String() == "string" {
		execution_frequency, _ := json["execution_frequency"].(string)
		project.ExecutionFrequency = execution_frequency
	}
	if json["remark"] != nil && reflect.TypeOf(json["remark"]).String() == "string" {
		remark, _ := json["remark"].(string)
		project.Remark = remark
	}
	if json["number_days"] != nil && reflect.TypeOf(json["number_days"]).String() == "string" {
		day, _ := json["number_days"].(string)
		project.Day = day
	}

	if json["unit"] != nil && reflect.TypeOf(json["unit"]).String() == "string" {
		unit, _ := json["unit"].(string)
		project.Unit = unit
	}
	return 0
}

func (c *HisApiController) GetHisOrderList() {
	page, _ := c.GetInt64("page", -1)
	limit, _ := c.GetInt64("limit", -1)
	start_time := c.GetString("start_time")
	end_time := c.GetString("end_time")
	types, _ := c.GetInt64("type", 0)
	keywords := c.GetString("keywords")
	p_type, _ := c.GetInt64("p_type", 0)

	timeLayout := "2006-01-02"
	loc, _ := time.LoadLocation("Local")
	var startTime int64
	if len(start_time) > 0 {
		theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", start_time+" 00:00:00", loc)
		if err != nil {
			fmt.Println(err)
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
			return
		}
		startTime = theTime.Unix()
	}
	var endTime 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())
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
			return
		}
		endTime = theTime.Unix()
	}

	adminUser := c.GetAdminUserInfo()
	org_id := adminUser.CurrentOrgId
	order, err, total := service.GetHisOrderList(org_id, page, limit, startTime, endTime, types, keywords, p_type)

	for _, item := range order {
		info, _ := service.GetHisPrescriptionByPatientID(item.PatientId, item.UserOrgId)
		item.DoctorName = info.Doctor
		item.DepartmentName = info.XtHisDepartment.Name
	}

	if err == nil {
		c.ServeSuccessJSON(map[string]interface{}{
			"order": order,
			"total": total,
		})

	} else {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
		return
	}
}

func (c *HisApiController) GetHisOrder() {
	patient_id, _ := c.GetInt64("patient_id", 0)
	number := c.GetString("number")
	adminInfo := c.GetAdminUserInfo()
	order, err := service.GetHisOrder(adminInfo.CurrentOrgId, number, patient_id)
	prescriptions, _ := service.GetHisPrescriptionThree(adminInfo.CurrentOrgId, patient_id, order.Number)

	if err == nil {
		c.ServeSuccessJSON(map[string]interface{}{
			"order":        order,
			"prescription": prescriptions,
		})
	} else {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
		return
	}

}

func (c *HisApiController) GetHisPrescriptionList() {
	record_date := c.GetString("record_date")
	keywords := c.GetString("keywords")
	page, _ := c.GetInt64("page")
	limit, _ := c.GetInt64("limit")

	timeLayout := "2006-01-02"
	loc, _ := time.LoadLocation("Local")
	theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", record_date+" 00:00:00", loc)
	if err != nil {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
		return
	}
	recordDateTime := theTime.Unix()
	adminInfo := c.GetAdminUserInfo()
	prescriptionOrder, err, total := service.GetNewHisPatientPrescriptionList(adminInfo.CurrentOrgId, keywords, recordDateTime, page, limit)

	//adminInfo := c.GetAdminUserInfo()
	//prescriptionOrder, err := service.GetHisPrescriptionOrderList(adminInfo.CurrentOrgId)
	//fmt.Println(prescriptionOrder)
	if err == nil {
		c.ServeSuccessJSON(map[string]interface{}{
			"order": prescriptionOrder,
			"total": total,
		})
	} else {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
		return
	}
}

func (c *HisApiController) GetHisPrescriptionInfo() {
	id, _ := c.GetInt64("id")
	adminInfo := c.GetAdminUserInfo()
	prescriptionOrder, err := service.GetHisPrescriptionOrderInfo(id, adminInfo.CurrentOrgId)
	prescription, err := service.GetHisPrescriptionFour(adminInfo.CurrentOrgId, prescriptionOrder.PatientId, prescriptionOrder.RecordDate, prescriptionOrder.PrescriptionNumber)
	if err == nil {
		c.ServeSuccessJSON(map[string]interface{}{
			"order":        prescriptionOrder,
			"prescription": prescription,
		})
	} else {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
		return
	}
}

func (c *HisApiController) GetMedicalInsuranceConfig() {
	adminUser := c.GetAdminUserInfo()
	config, _ := service.GetMedicalInsuranceConfig(adminUser.CurrentOrgId)
	c.ServeSuccessJSON(map[string]interface{}{
		"config": config,
	})

}

type ResultTwo struct {
	ErrMsg      interface{} `json:"err_msg"`
	InfRefmsgid string      `json:"inf_refmsgid"`
	Infcode     int64       `json:"infcode"`
	Output      struct {
		Baseinfo struct {
			Age         float64 `json:"age"`
			Brdy        string  `json:"brdy"`
			Certno      string  `json:"certno"`
			Gend        string  `json:"gend"`
			Naty        string  `json:"naty"`
			PsnCertType string  `json:"psn_cert_type"`
			PsnName     string  `json:"psn_name"`
			PsnNo       string  `json:"psn_no"`
		} `json:"baseinfo"`
		Idetinfo []interface{} `json:"idetinfo"`
		Iinfo    []struct {
			Balc                   float64     `json:"balc"`
			CvlservFlag            string      `json:"cvlserv_flag"`
			EmpName                string      `json:"emp_name"`
			InsuplcAdmdvs          string      `json:"insuplc_admdvs"`
			Insutype               string      `json:"insutype"`
			PausInsuDansuplcAdmdvs string      `json:"paus_insu_dansuplc_admdvs"`
			PausInsuDate           interface{} `json:"paus_insu_date"`
			PsnInsuDate            string      `json:"psn_insu_date"`
			PsnInsuStas            string      `json:"psn_insu_stas"`
			PsnType                string      `json:"psn_type"`
		} `json:"insuinfo"`
	} `json:"output"`
	RefmsgTime  string      `json:"refmsg_time"`
	RespondTime string      `json:"respond_time"`
	Signtype    interface{} `json:"signtype"`
	WarnInfo    interface{} `json:"warn_info"`
}
type ResultThree struct {
	Cainfo      interface{} `json:"cainfo"`
	ErrMsg      interface{} `json:"err_msg"`
	InfRefmsgid string      `json:"inf_refmsgid"`
	Infcode     int64       `json:"infcode"`
	Output      struct {
		Data struct {
			IptOtpNo string `json:"ipt_otp_no"`
			MdtrtID  string `json:"mdtrt_id"`
			PsnNo    string `json:"psn_no"`
		} `json:"data"`
	} `json:"output"`
	RefmsgTime  string      `json:"refmsg_time"`
	RespondTime string      `json:"respond_time"`
	Signtype    interface{} `json:"signtype"`
	WarnMsg     interface{} `json:"warn_msg"`
}
type ResultFour struct {
	Cainfo      string `json:"cainfo"`
	ErrMsg      string `json:"err_msg"`
	InfRefmsgid string `json:"inf_refmsgid"`
	Infcode     int64  `json:"infcode"`
	Output      struct {
		Result []struct {
			BasMednFlag      string  `json:"bas_medn_flag"`
			ChldMedcFlag     string  `json:"chld_medc_flag"`
			ChrgitmLv        string  `json:"chrgitm_lv"`
			Cnt              float64 `json:"cnt"`
			DetItemFeeSumamt float64 `json:"det_item_fee_sumamt"`
			DrtReimFlag      string  `json:"drt_reim_flag"`
			FeedetlSn        string  `json:"feedetl_sn"`
			FulamtOwnpayAmt  float64 `json:"fulamt_ownpay_amt"`
			HiNegoDrugFlag   string  `json:"hi_nego_drug_flag"`
			InscpScpAmt      float64 `json:"inscp_scp_amt"`
			ListSpItemFlag   string  `json:"list_sp_item_flag"`
			LmtUsedFlag      string  `json:"lmt_used_flag"`
			MedChrgitmType   string  `json:"med_chrgitm_type"`
			Memo             string  `json:"memo"`
			OverlmtAmt       float64 `json:"overlmt_amt"`
			PreselfpayAmt    float64 `json:"preselfpay_amt"`
			Pric             float64 `json:"pric"`
			PricUplmtAmt     float64 `json:"pric_uplmt_amt"`
			SelfpayProp      float64 `json:"selfpay_prop"`
		} `json:"result"`
	} `json:"output"`
	RefmsgTime  string `json:"refmsg_time"`
	RespondTime string `json:"respond_time"`
	Signtype    string `json:"signtype"`
	WarnMsg     string `json:"warn_msg"`
}
type ResultFive struct {
	Insutype string `json:"insutype"`
}
type ResultSix struct {
	Cainfo      interface{} `json:"cainfo"`
	ErrMsg      interface{} `json:"err_msg"`
	InfRefmsgid string      `json:"inf_refmsgid"`
	Infcode     int64       `json:"infcode"`
	Output      struct {
	} `json:"output"`
	RefmsgTime  string      `json:"refmsg_time"`
	RespondTime string      `json:"respond_time"`
	Signtype    interface{} `json:"signtype"`
	WarnMsg     interface{} `json:"warn_msg"`
}
type ResultSeven struct {
	Cainfo      string `json:"cainfo"`
	ErrMsg      string `json:"err_msg"`
	InfRefmsgid string `json:"inf_refmsgid"`
	Infcode     int64  `json:"infcode"`
	Output      struct {
		Setldetail []interface{} `json:"setldetail"`
		Setlinfo   struct {
			AcctMulaidPay   float64 `json:"acct_mulaid_pay"`
			AcctPay         float64 `json:"acct_pay"`
			ActPayDedc      float64 `json:"act_pay_dedc"`
			Age             float64 `json:"age"`
			Balc            float64 `json:"balc"`
			Brdy            string  `json:"brdy"`
			Certno          string  `json:"certno"`
			ClrOptins       string  `json:"clr_optins"`
			ClrType         string  `json:"clr_type"`
			ClrWay          string  `json:"clr_way"`
			CvlservFlag     string  `json:"cvlserv_flag"`
			CvlservPay      float64 `json:"cvlserv_pay"`
			FulamtOwnpayAmt float64 `json:"fulamt_ownpay_amt"`
			FundPaySumamt   float64 `json:"fund_pay_sumamt"`
			Gend            string  `json:"gend"`
			HifesPay        float64 `json:"hifes_pay"`
			HifmiPay        float64 `json:"hifmi_pay"`
			HifobPay        float64 `json:"hifob_pay"`
			HifpPay         float64 `json:"hifp_pay"`
			HospPartAmt     float64 `json:"hosp_part_amt"`
			InscpScpAmt     float64 `json:"inscp_scp_amt"`
			Insutype        string  `json:"insutype"`
			MafPay          float64 `json:"maf_pay"`
			MdtrtCertType   string  `json:"mdtrt_cert_type"`
			MdtrtID         string  `json:"mdtrt_id"`
			MedType         string  `json:"med_type"`
			MedfeeSumamt    float64 `json:"medfee_sumamt"`
			MedinsSetlID    string  `json:"medins_setl_id"`
			Naty            string  `json:"naty"`
			OthPay          float64 `json:"oth_pay"`
			OverlmtSelfpay  float64 `json:"overlmt_selfpay"`
			PoolPropSelfpay float64 `json:"pool_prop_selfpay"`
			PreselfpayAmt   float64 `json:"preselfpay_amt"`
			PsnCashPay      float64 `json:"psn_cash_pay"`
			PsnCertType     string  `json:"psn_cert_type"`
			PsnName         string  `json:"psn_name"`
			PsnNo           string  `json:"psn_no"`
			PsnPartAmt      float64 `json:"psn_part_amt"`
			PsnType         string  `json:"psn_type"`
			SetlID          string  `json:"setl_id"`
			SetlTime        string  `json:"setl_time"`
		} `json:"setlinfo"`
	} `json:"output"`
	RefmsgTime  string      `json:"refmsg_time"`
	RespondTime string      `json:"respond_time"`
	Signtype    interface{} `json:"signtype"`
	WarnMsg     interface{} `json:"warn_msg"`
}

type ResultEight struct {
	Cainfo      string `json:"cainfo"`
	ErrMsg      string `json:"err_msg"`
	InfRefmsgid string `json:"inf_refmsgid"`
	Infcode     int64  `json:"infcode"`
	Output      struct {
		Stmtinfo struct {
			SetlOptins   string `json:"setl_optins"`
			StmtRslt     string `json:"stmt_rslt"`
			StmtRsltDscr string `json:"stmt_rslt_dscr"`
		} `json:"stmtinfo"`
	} `json:"output"`
	RefmsgTime  string      `json:"refmsg_time"`
	RespondTime string      `json:"respond_time"`
	Signtype    interface{} `json:"signtype"`
	WarnMsg     interface{} `json:"warn_msg"`
}

type ResultNine struct {
	Cainfo      string `json:"cainfo"`
	ErrMsg      string `json:"err_msg"`
	InfRefmsgid string `json:"inf_refmsgid"`
	Infcode     int64  `json:"infcode"`
	Output      struct {
		FileQuryNo string `json:"file_qury_no"`
	} `json:"output"`
	RefmsgTime  string      `json:"refmsg_time"`
	RespondTime string      `json:"respond_time"`
	Signtype    interface{} `json:"signtype"`
	WarnMsg     interface{} `json:"warn_msg"`
}

type ResultTen struct {
	Cainfo      string `json:"cainfo"`
	ErrMsg      string `json:"err_msg"`
	InfRefmsgid string `json:"inf_refmsgid"`
	Infcode     int64  `json:"infcode"`
	Output      struct {
		DldEndtime string `json:"dld_endtime"`
		FileQuryNo string `json:"file_qury_no"`
		Filename   string `json:"filename"`
	} `json:"output"`
	RefmsgTime  string      `json:"refmsg_time"`
	RespondTime string      `json:"respond_time"`
	Signtype    interface{} `json:"signtype"`
	WarnMsg     interface{} `json:"warn_msg"`
}

type ResultEleven struct {
	Cainfo      string `json:"cainfo"`
	ErrMsg      string `json:"err_msg"`
	InfRefmsgid string `json:"inf_refmsgid"`
	Infcode     int64  `json:"infcode"`
	Output      struct {
		Setlinfo struct {
			FixmedinsName   string  `json:"fixmedins_name"`
			FixmedinsCode   string  `json:"fixmedins_code"`
			PsnNo           string  `json:"psn_no"`
			PsnName         string  `json:"psn_name"`
			HifobPay        float64 `json:"hifob_pay"`
			Gend            string  `json:"gend"`
			Brdy            string  `json:"brdy"`
			PsnCertType     string  `json:"psn_cert_type"`
			PsnType         string  `json:"psn_type"`
			EmpName         string  `json:"emp_name"`
			Certno          string  `json:"certno"`
			Insutype        string  `json:"insutype"`
			MedfeeSumamt    float64 `json:"medfee_sumamt"`
			FulamtOwnpayAmt float64 `json:"fulamt_ownpay_amt"`
			OverlmtSelfpay  float64 `json:"overlmt_selfpay"`
			PreselfpayAmt   float64 `json:"preselfpay_amt"`
			InscpScpAmt     float64 `json:"inscp_scp_amt"`
			ActPayDedc      float64 `json:"act_pay_dedc"`
			HifpPay         float64 `json:"hifp_pay"`
			PoolPropSelfpay float64 `json:"pool_prop_selfpay"`
			CvlservPay      float64 `json:"cvlserv_pay"`
			HifesPay        float64 `json:"hifes_pay"`
			HifmiPay        float64 `json:"hifmi_pay"`
			MafPay          float64 `json:"maf_pay"`
			OthPay          float64 `json:"oth_pay"`
			FundPaySumamt   float64 `json:"fund_pay_sumamt"`
			PsnPay          float64 `json:"psn_pay"`
			AcctPay         float64 `json:"acct_pay"`
			CashPayamt      float64 `json:"cash_payamt"`
			Balc            float64 `json:"balc"`
			AcctMulaidPay   float64 `json:"acct_mulaid_pay"`
			MedinsSetlId    string  `json:"medins_setl_id"`
			RefdSetlFlag    string  `json:"refd_setl_flag"`
			SetlTime        string  `json:"setl_time"`
			MedType         string  `json:"med_type"`
		} `json:"setlinfo"`
	} `json:"output"`
	RefmsgTime  string      `json:"refmsg_time"`
	RespondTime string      `json:"respond_time"`
	Signtype    interface{} `json:"signtype"`
	WarnMsg     interface{} `json:"warn_msg"`
}

type Custom struct {
	DetItemFeeSumamt string
	Cut              string
	FeedetlSn        string
	Price            string
	MedListCodg      string
	Type             int64
	AdviceId         int64
	ProjectId        int64
	ItemId           int64
}

//获取个人信息----挂号-----上传就诊信息
func (c *HisApiController) GetRegisterInfo() {
	id, _ := c.GetInt64("id")
	record_time := c.GetString("record_time")
	settlementValue, _ := c.GetInt64("settlement_value")
	medical_insurance_card := c.GetString("medical_insurance_card")
	name := c.GetString("name")
	id_card_type, _ := c.GetInt64("id_card_type")
	certificates, _ := c.GetInt64("certificates")
	medical_care, _ := c.GetInt64("medical_care")
	birthday := c.GetString("birthday")
	age, _ := c.GetInt64("age")
	id_card := c.GetString("id_card")
	register_type, _ := c.GetInt64("register")
	doctor, _ := c.GetInt64("doctor")
	department, _ := c.GetInt64("department")
	gender, _ := c.GetInt64("sex")
	phone := c.GetString("phone")
	registration_fee, _ := c.GetFloat("registration_fee")
	medical_expenses, _ := c.GetFloat("medical_expenses")
	social_type, _ := c.GetInt64("social_type")

	//diagnosis_id, _ := c.GetInt64("diagnosis")

	diagnosis_ids := c.GetString("diagnosis")

	sick_type, _ := c.GetInt64("sick_type")
	reg_type := c.GetString("p_type")

	timeLayout := "2006-01-02"
	loc, _ := time.LoadLocation("Local")
	birthdays, _ := time.ParseInLocation(timeLayout+" 15:04:05", birthday+" 00:00:00", loc)
	birthUnix := birthdays.Unix()

	theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", record_time+" 00:00:00", loc)
	if err != nil {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
		return
	}
	recordDateTime := theTime.Unix()

	adminInfo := c.GetAdminUserInfo()
	tempPatient, _ := service.GetPatientByIDCardAndName(id_card, adminInfo.CurrentOrgId, name)
	if tempPatient.ID == 0 {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeNoBloodPatientException)
		return
	}
	var patient service.Patients
	if id == 0 {
		patient, _ = service.GetPatientByIDCard(id_card, adminInfo.CurrentOrgId)

	} else {
		patient, _ = service.GetPatientByIDTwo(adminInfo.CurrentOrgId, id)

	}

	if patient.ID == 0 {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodePatientNoExist)
		return
	}
	if len(patient.IdCardNo) == 0 {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeIDCartNo)
		return
	}

	his, _ := service.GetHisPatientInfoTwo(adminInfo.CurrentOrgId, patient.ID, recordDateTime)
	if len(his) >= 1 {
		order, _ := service.GetNewHisOrderTwo(adminInfo.CurrentOrgId, his[len(his)-1].Number, his[len(his)-1].PatientId, recordDateTime)
		if len(his) >= 1 && order.ID == 0 {
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeHisPatientParamWrong)
			return
		}
	}

	timeStr := time.Now().Format("2006-01-02 15:04:05")
	fmt.Println(timeStr)
	timeArr := strings.Split(timeStr, " ")
	fmt.Println(timeArr)

	timeArrTwo := strings.Split(timeArr[0], "-")
	timeArrThree := strings.Split(timeArr[1], ":")
	var str = timeArrTwo[0] + timeArrTwo[1] + timeArrTwo[2] + timeArrThree[0] + timeArrThree[1] + timeArrThree[2] + strconv.FormatInt(patient.ID, 10)

	lists, _ := service.GetHisPatientInfoList(adminInfo.CurrentOrgId, patient.ID, recordDateTime)

	if len(lists) == 0 {
		var hisPatient models.XtHisPatient
		hisPatient = models.XtHisPatient{
			Name:                   name,
			Age:                    age,
			Gender:                 gender,
			Birthday:               birthUnix,
			Phone:                  phone,
			MedicalTreatmentType:   medical_care,
			IdType:                 certificates,
			IdCardNo:               id_card,
			BalanceAccountsType:    settlementValue,
			SocialType:             social_type,
			MedicalInsuranceNumber: medical_insurance_card,
			RegisterType:           register_type,
			RegisterCost:           registration_fee,
			TreatmentCost:          medical_expenses,
			AdminUserId:            adminInfo.AdminUser.Id,
			UserOrgId:              adminInfo.CurrentOrgId,
			Status:                 1,
			RecordDate:             recordDateTime,
			IsReturn:               1,
			PatientId:              patient.ID,
			Ctime:                  time.Now().Unix(),
			Mtime:                  time.Now().Unix(),
			Number:                 str,
			IdCardType:             id_card_type,
			Departments:            department,
			Doctor:                 doctor,
			PType:                  reg_type,
			Diagnosis:              diagnosis_ids,
			SickType:               sick_type,
		}
		service.CreateHisPatient(&hisPatient)

		service.UpdateHisPrescriptionHisID(hisPatient.ID, patient.ID, recordDateTime, adminInfo.CurrentOrgId)

		c.ServeSuccessJSON(map[string]interface{}{
			"his_info": hisPatient,
		})
	} else {
		//chrgBchno := rand.Intn(1000000) + 10000
		var hisPatient models.XtHisPatient
		hisPatient = models.XtHisPatient{
			Name:                   name,
			Age:                    age,
			Gender:                 gender,
			Birthday:               birthUnix,
			Phone:                  phone,
			MedicalTreatmentType:   medical_care,
			IdType:                 certificates,
			IdCardNo:               id_card,
			BalanceAccountsType:    settlementValue,
			SocialType:             social_type,
			MedicalInsuranceNumber: medical_insurance_card,
			RegisterType:           register_type,
			RegisterCost:           registration_fee,
			TreatmentCost:          medical_expenses,
			AdminUserId:            adminInfo.AdminUser.Id,
			UserOrgId:              adminInfo.CurrentOrgId,
			Status:                 1,
			RecordDate:             recordDateTime,
			IsReturn:               1,
			PatientId:              patient.ID,
			Ctime:                  time.Now().Unix(),
			Mtime:                  time.Now().Unix(),
			Number:                 str,
			IdCardType:             id_card_type,
			Departments:            department,
			Doctor:                 doctor,
			PType:                  reg_type,
			Diagnosis:              diagnosis_ids,
			SickType:               sick_type,
		}
		service.CreateHisPatient(&hisPatient)

		service.UpdateHisPrescriptionHisID(hisPatient.ID, patient.ID, recordDateTime, adminInfo.CurrentOrgId)

		c.ServeSuccessJSON(map[string]interface{}{
			"his_info": hisPatient,
		})

	}

}

//上传明细----结算
func (c *HisApiController) GetUploadInfo() {
	id, _ := c.GetInt64("id")
	record_time := c.GetString("record_time")
	his_patient_id, _ := c.GetInt64("his_patient_id")

	pay_way, _ := c.GetInt64("pay_way")
	pay_price, _ := c.GetFloat("pay_price")
	pay_card_no := c.GetString("pay_card_no")
	discount_price, _ := c.GetFloat("discount_price")
	preferential_price, _ := c.GetFloat("preferential_price")
	reality_price, _ := c.GetFloat("reality_price")
	found_price, _ := c.GetFloat("found_price")
	medical_insurance_price, _ := c.GetFloat("medical_insurance_price")
	private_price, _ := c.GetFloat("private_price")
	timeLayout := "2006-01-02"
	loc, _ := time.LoadLocation("Local")
	settle_accounts_type, _ := c.GetInt64("settle_accounts_type")

	fapiao_code := c.GetString("fapiao_code")
	fapiao_number := c.GetString("fapiao_number")

	diagnosis_id := c.GetString("diagnosis")
	sick_type, _ := c.GetInt64("sick_type")
	reg_type, _ := c.GetInt64("p_type")
	order_id, _ := c.GetInt64("order_id")

	his, _ := service.GetHisPatientByIdThree(his_patient_id)

	tempOrder, _ := service.GetHisOrderByID(order_id)

	theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", record_time+" 00:00:00", loc)
	if err != nil {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
		return
	}
	recordDateTime := theTime.Unix()
	adminUser := c.GetAdminUserInfo()
	var prescriptions []*models.HisPrescription
	var start_time int64
	var end_time int64

	ids_str := c.GetString("ids")
	ids_arr := strings.Split(ids_str, ",")
	if tempOrder.ID == 0 {
		if settle_accounts_type == 1 { //日结
			fmt.Println(reg_type)
			if reg_type == 11 {
				fmt.Println(reg_type)
				prescriptions, _ = service.GetPrescriptionByIds(ids_arr, adminUser.CurrentOrgId)
			} else {
				prescriptions, _ = service.GetSettleHisPrescription(adminUser.CurrentOrgId, id, his_patient_id, recordDateTime, reg_type)
			}
		} else { //月结
			start_time_str := c.GetString("start_time")
			end_time_str := c.GetString("end_time")
			timeLayout := "2006-01-02"
			loc, _ := time.LoadLocation("Local")
			theStartTime, err := time.ParseInLocation(timeLayout+" 15:04:05", start_time_str+" 00:00:00", loc)
			if err != nil {
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
				return
			}
			recordStartTime := theStartTime.Unix()
			start_time = recordStartTime
			theEndTime, err := time.ParseInLocation(timeLayout+" 15:04:05", end_time_str+" 00:00:00", loc)
			if err != nil {
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
				return
			}
			recordEndTime := theEndTime.Unix()
			end_time = recordEndTime
			prescriptions, _ = service.GetMonthHisPrescription(adminUser.CurrentOrgId, id, recordStartTime, recordEndTime, reg_type)
		}

		timestamp := time.Now().Unix()
		tempTime := time.Unix(timestamp, 0)
		timeFormat := tempTime.Format("20060102150405")
		chrgBchno := rand.Intn(100000) + 10000
		chrg_bchno := timeFormat + strconv.FormatInt(int64(chrgBchno), 10) + strconv.FormatInt(his.PatientId, 10)
		strconv.FormatInt(his.PatientId, 10)

		var ids []int64
		fmt.Println(prescriptions)
		for _, item := range prescriptions {
			ids = append(ids, item.ID)
		}
		var total float64
		fmt.Println(prescriptions)
		for _, item := range prescriptions {
			fmt.Println(item)
			if item.Type == 1 { //药品
				for _, subItem := range item.HisDoctorAdviceInfo {
					total = total + (subItem.Price * subItem.PrescribingNumber)
				}
			}
			if item.Type == 2 { //项目
				for _, subItem := range item.HisPrescriptionProject {
					total = total + (subItem.Price * float64(subItem.Count))
				}
			}

			for _, subItem := range item.HisAdditionalCharge {
				total = total + (subItem.Price * float64(subItem.Count))
			}
		}

		allTotal := fmt.Sprintf("%.2f", total)
		totals, _ := strconv.ParseFloat(allTotal, 64)
		order := &models.HisOrder{
			UserOrgId:             adminUser.CurrentOrgId,
			HisPatientId:          his.ID,
			PatientId:             id,
			SettleAccountsDate:    recordDateTime,
			Ctime:                 time.Now().Unix(),
			Mtime:                 time.Now().Unix(),
			Status:                1,
			OrderStatus:           2,
			MdtrtId:               his.Number,
			Number:                chrg_bchno,
			MedfeeSumamt:          totals,
			PayWay:                pay_way,
			PayPrice:              pay_price,
			MedType:               strconv.Itoa(int(reg_type)),
			PayCardNo:             pay_card_no,
			DiscountPrice:         discount_price,
			PreferentialPrice:     preferential_price,
			RealityPrice:          reality_price,
			FoundPrice:            found_price,
			MedicalInsurancePrice: medical_insurance_price,
			PrivatePrice:          private_price,
			SettleEndTime:         end_time,
			SettleStartTime:       start_time,
			SettleType:            settle_accounts_type,
			FaPiaoCode:            fapiao_code,
			FaPiaoNumber:          fapiao_number,
			Diagnosis:             diagnosis_id,
			PType:                 2,
		}
		err = service.CreateOrder(order)
		if err != nil {
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeCreateOrderException)
			return
		}

		var customs []*Custom
		for _, item := range prescriptions {
			if item.Type == 1 { //药品
				for _, subItem := range item.HisDoctorAdviceInfo {
					cus := &Custom{
						AdviceId:         subItem.ID,
						ProjectId:        0,
						DetItemFeeSumamt: fmt.Sprintf("%.2f", subItem.Price*subItem.PrescribingNumber),
						Cut:              fmt.Sprintf("%.2f", subItem.PrescribingNumber),
						FeedetlSn:        subItem.FeedetlSn,
						Price:            fmt.Sprintf("%.2f", subItem.Price),
						MedListCodg:      subItem.MedListCodg,
						Type:             1,
					}
					customs = append(customs, cus)
				}
			}
			if item.Type == 2 { //项目
				for _, subItem := range item.HisPrescriptionProject {
					cus := &Custom{
						AdviceId:         0,
						ProjectId:        subItem.ID,
						DetItemFeeSumamt: fmt.Sprintf("%.2f", subItem.Price*float64(subItem.Count)),
						Cut:              fmt.Sprintf("%.2f", float64(subItem.Count)),
						FeedetlSn:        subItem.FeedetlSn,
						Price:            fmt.Sprintf("%.2f", float64(subItem.Price)),
						MedListCodg:      subItem.MedListCodg,
						Type:             2,
					}
					customs = append(customs, cus)
				}
			}
			for _, item := range item.HisAdditionalCharge {
				cus := &Custom{
					ItemId:           item.ID,
					AdviceId:         0,
					ProjectId:        0,
					DetItemFeeSumamt: fmt.Sprintf("%.2f", item.Price),
					Cut:              fmt.Sprintf("%.2f", float64(item.Count)),
					FeedetlSn:        item.FeedetlSn,
					Price:            fmt.Sprintf("%.2f", float64(item.Price)),
					MedListCodg:      item.XtHisAddtionConfig.Code,
					Type:             3,
				}
				customs = append(customs, cus)
			}
		}
		for _, item := range customs {
			var advice_id int64 = 0
			var project_id int64 = 0
			var item_id int64 = 0

			var types int64 = 0

			if item.Type == 1 {
				advice_id = item.AdviceId
				project_id = 0
				item_id = 0
			} else if item.Type == 2 {
				advice_id = 0
				item_id = 0

				project_id = item.ProjectId
			} else if item.Type == 3 {
				advice_id = 0
				item_id = item.ItemId
				project_id = 0
			}
			detItemFeeSumamt, _ := strconv.ParseFloat(item.DetItemFeeSumamt, 32)
			cut, _ := strconv.ParseFloat(item.Cut, 32)
			pric, _ := strconv.ParseFloat(item.Price, 32)
			info := &models.HisOrderInfo{
				OrderNumber:      order.Number,
				UploadDate:       time.Now().Unix(),
				AdviceId:         advice_id,
				DetItemFeeSumamt: detItemFeeSumamt,
				Cnt:              cut,
				Pric:             pric,
				PatientId:        id,
				Status:           1,
				Mtime:            time.Now().Unix(),
				Ctime:            time.Now().Unix(),
				UserOrgId:        adminUser.CurrentOrgId,
				HisPatientId:     his.ID,
				OrderId:          order.ID,
				ProjectId:        project_id,
				Type:             types,
				ItemId:           item_id,
			}
			service.CreateOrderInfo(info)
		}
		his.Diagnosis = diagnosis_id
		his.SickType = sick_type
		his.RegisterType = reg_type
		his.MedicalTreatmentType = reg_type
		service.UpdataHisPateint(&his)
		err = service.UpDatePrescriptionNumber(adminUser.CurrentOrgId, ids, chrg_bchno)
		err = service.UpDateHisPrescriptionInfoNumber(adminUser.CurrentOrgId, id, chrg_bchno, recordDateTime, his_patient_id)
		err = service.UpdataOrderStatusTwo(chrg_bchno, adminUser.CurrentOrgId)
		if err == nil {
			c.ServeSuccessJSON(map[string]interface{}{
				"msg": "结算成功",
			})
		}
	} else {
		if tempOrder.IsPre > 0 {
			allTotal := fmt.Sprintf("%.2f", tempOrder.MedfeeSumamt)
			totals, _ := strconv.ParseFloat(allTotal, 64)
			tempOrder.OrderStatus = 2
			tempOrder.PayWay = pay_way
			tempOrder.PayPrice = pay_price
			tempOrder.PayCardNo = pay_card_no
			tempOrder.DiscountPrice = discount_price
			tempOrder.PreferentialPrice = preferential_price
			tempOrder.RealityPrice = reality_price
			tempOrder.FoundPrice = found_price
			tempOrder.MedicalInsurancePrice = medical_insurance_price
			tempOrder.PrivatePrice = private_price
			tempOrder.FaPiaoCode = fapiao_code
			tempOrder.FaPiaoNumber = fapiao_number
			tempOrder.PType = 2
			tempOrder.MedfeeSumamt = totals
			tempOrder.Diagnosis = diagnosis_id
			err = service.SaveHisOrder(&tempOrder)
			err = service.UpdataOrderStatusTwo(tempOrder.Number, adminUser.CurrentOrgId)
			if err != nil {
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeCreateOrderException)
				return
			}
			if err == nil {
				c.ServeSuccessJSON(map[string]interface{}{
					"msg": "结算成功",
				})
			}
		}
	}
}

//退款
func (c *HisApiController) Refund() {
	order_id, _ := c.GetInt64("order_id")
	order, _ := service.GetHisOrderByID(order_id)
	adminUser := c.GetAdminUserInfo()
	err := service.UpdataOrderStatus(order_id, order.Number, adminUser.CurrentOrgId)
	if err == nil {
		c.ServeSuccessJSON(map[string]interface{}{
			"msg": "退费成功",
		})
	} else {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
		return
	}
}

func (c *HisApiController) RefundNumber() {
	his_patient_id, _ := c.GetInt64("id")
	info, _ := service.GetNewHisPatientInfo(his_patient_id)
	info.Status = 0
	count, _ := service.GetOrderCountByNumber(c.GetAdminUserInfo().CurrentOrgId, info.PatientId, info.RecordDate, info.Number)
	if count > 0 {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeOrderParamWrongTwo)
		return
	}

	err := service.SaveHisPatient(info)
	if err == nil {
		c.ServeSuccessJSON(map[string]interface{}{
			"msg": "退号成功",
		})
	} else {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
		return
	}

}

func (this *HisApiController) AdditionalCharge() {

	dataBody := make(map[string]interface{}, 0)
	err := json.Unmarshal(this.Ctx.Input.RequestBody, &dataBody)
	fmt.Println(err)
	his_patient_id := int64(dataBody["his_patient_id"].(float64))
	patient_id := int64(dataBody["patient_id"].(float64))
	medicineData, _ := dataBody["medicineData"].([]interface{})
	adminUserInfo := this.GetAdminUserInfo()
	orgId := adminUserInfo.CurrentOrgId
	admin_user_id := adminUserInfo.AdminUser.Id
	timeStr := time.Now().Format("2006-01-02")
	timeLayout := "2006-01-02 15:04:05"
	timeStringToTime, _ := utils.ParseTimeStringToTime(timeLayout, timeStr+" 00:00:00")
	timenow := timeStringToTime.Unix()
	var additionalCharges []*models.HisAdditionalCharge
	for _, item := range medicineData {

		var randNum int
		randNum = rand.Intn(10000) + 1000
		timestamp := time.Now().Unix()
		tempTime := time.Unix(timestamp, 0)
		timeFormat := tempTime.Format("20060102150405")
		p_number := timeFormat + strconv.FormatInt(int64(randNum), 10) + strconv.FormatInt(int64(adminUserInfo.CurrentOrgId), 10) + strconv.FormatInt(int64(patient_id), 10)

		items := item.(map[string]interface{})
		money := items["price"].(string)
		item_id_str := items["item_id"].(string)
		name := items["name"].(string)
		id_str := items["id"].(string)
		moneys, _ := strconv.ParseInt(money, 10, 64)
		monStr := strconv.FormatInt(moneys, 10)
		monneyStr, _ := strconv.ParseFloat(monStr, 64)
		item_id, _ := strconv.ParseInt(item_id_str, 10, 64)
		id, _ := strconv.ParseInt(id_str, 10, 64)
		additionalCharge := &models.HisAdditionalCharge{
			ID:                 id,
			HisPatientId:       his_patient_id,
			UserOrgId:          orgId,
			PatientId:          patient_id,
			RecordDate:         timenow,
			Price:              monneyStr,
			Status:             1,
			ItemName:           name,
			ItemId:             item_id,
			AdminUserId:        admin_user_id,
			CreatedTime:        time.Now().Unix(),
			OrderStatus:        0,
			PrescriptionNumber: "",
			BatchNumber:        "",
			FeedetlSn:          p_number,
		}
		service.CreateAdditionalCharge(additionalCharge)

		additionalCharges = append(additionalCharges, additionalCharge)
	}

	this.ServeSuccessJSON(map[string]interface{}{
		"msg":                "添加成功",
		"additional_charges": additionalCharges,
	})
}

func (this *HisApiController) DeleteAddition() {
	id, _ := this.GetInt64("id")
	//TODO 需要判断是否已经结算
	err := service.DelelteAddition(id, this.GetAdminUserInfo().CurrentOrgId)
	if err == nil {
		this.ServeSuccessJSON(map[string]interface{}{
			"msg": "删除成功",
		})
		return
	} else {
		this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeSystemError)
		return
	}

}

func (this *HisApiController) GetAdminUsers() {
	adminUser := this.GetAdminUserInfo()
	doctors, _ := service.GetAllHisDoctor(adminUser.CurrentOrgId)
	this.ServeSuccessJSON(map[string]interface{}{
		"doctors": doctors,
	})
}

func (this *HisApiController) GetLastOrNextHisPrescription() {
	change_type, _ := this.GetInt64("type", 0)
	record_date := this.GetString("record_time")
	patient_id, _ := this.GetInt64("patient_id", 0)
	p_type, _ := this.GetInt64("p_type", 0)

	timeLayout := "2006-01-02"
	loc, _ := time.LoadLocation("Local")
	theAdviceRecordTime, _ := time.ParseInLocation(timeLayout, record_date, loc)
	record_time := theAdviceRecordTime.Unix()
	adminUserInfo := this.GetAdminUserInfo()
	prescriptions, err := service.GetHisPrescriptionByType(change_type, record_time, adminUserInfo.CurrentOrgId, patient_id, p_type)
	if err == nil {
		if len(prescriptions) == 0 {
			this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDoctorAdviceEmpty)
			return
		} else {
			this.ServeSuccessJSON(map[string]interface{}{
				"prescriptions": prescriptions,
			})
			return
		}
	} else {
		this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeSystemError)
		return
	}
}

func (this *HisApiController) GetCallHisPrescription() {
	patient_id, _ := this.GetInt64("patient_id", 0)
	timeLayout := "2006-01-02"
	loc, _ := time.LoadLocation("Local")
	start_time := this.GetString("start_time")
	startime, _ := time.ParseInLocation(timeLayout+" 15:04:05", start_time+" 00:00:00", loc)
	end_time := this.GetString("end_time")
	p_type, _ := this.GetInt64("p_type")

	endtime, _ := time.ParseInLocation(timeLayout+" 15:04:05", end_time+" 23:59:59", loc)
	adminUserInfo := this.GetAdminUserInfo()
	prescriptions, err := service.GetCallHisPrescriptions(startime.Unix(), endtime.Unix(), adminUserInfo.CurrentOrgId, patient_id, p_type)
	if err == nil {
		this.ServeSuccessJSON(map[string]interface{}{
			"prescriptions": prescriptions,
		})
		return
	} else {
		this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeSystemError)
		return
	}
}

func (this *HisApiController) GetHisDayPrescription() {
	timeLayout := "2006-01-02"
	loc, _ := time.LoadLocation("Local")
	start_time := this.GetString("start_time")
	patient_id, _ := this.GetInt64("patient_id", 0)
	startime, _ := time.ParseInLocation(timeLayout+" 15:04:05", start_time+" 00:00:00", loc)
	end_time := this.GetString("end_time")
	p_type, _ := this.GetInt64("p_type")

	order_status, _ := this.GetInt64("type")

	endtime, _ := time.ParseInLocation(timeLayout+" 15:04:05", end_time+" 23:59:59", loc)
	adminUserInfo := this.GetAdminUserInfo()

	var dayHisPrescription []*models.HisPrescription
	var err error
	if order_status == 1 || order_status == 0 {

		dayHisPrescription, err = service.GetUnChargeMonthHisPrescriptionSix(adminUserInfo.CurrentOrgId, patient_id, startime.Unix(), endtime.Unix(), p_type)

	} else if order_status == 2 {
		dayHisPrescription, err = service.GetChargeMonthHisPrescriptionSix(adminUserInfo.CurrentOrgId, patient_id, startime.Unix(), endtime.Unix(), p_type)

	}

	if err == nil {
		this.ServeSuccessJSON(map[string]interface{}{
			"day_prescription": dayHisPrescription,
		})
		return
	} else {
		this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeSystemError)
		return
	}
}

func (c *HisApiController) GetHisChargePatientList() {
	record_date := c.GetString("record_date")
	order_status, _ := c.GetInt64("type")

	timeLayout := "2006-01-02"
	loc, _ := time.LoadLocation("Local")
	theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", record_date+" 00:00:00", loc)
	if err != nil {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
		return
	}
	recordDateTime := theTime.Unix()
	adminInfo := c.GetAdminUserInfo()
	var tempPatients []*service.NewTempPatients
	//tempPatients, _ := service.GetAllChargeHisPatientList(adminInfo.CurrentOrgId, "", recordDateTime)
	if order_status != 2 {
		tempPatients, _ = service.GetNewAllUnChargeHisPatientList(adminInfo.CurrentOrgId, "", recordDateTime)
	} else {
		tempPatients, _ = service.GetNewAllChargeHisPatientList(adminInfo.CurrentOrgId, "", recordDateTime)
	}

	var patients []*service.NewTempPatients
	var patients_two []*service.NewTempPatients

	for _, item := range tempPatients {
		//过滤掉没挂号的和没开处方的
		if len(item.HisPatient) > 0 || len(item.HisPrescription) > 0 {
			patients = append(patients, item)
		}

		//过滤掉没挂号的
		if len(item.HisPatient) > 0 {
			patients_two = append(patients_two, item)
		}
	}
	c.ServeSuccessJSON(map[string]interface{}{
		"list":     patients,
		"list_two": patients_two,
	})
}

func (c *HisApiController) GetHisUnRegisterPatientList() {
	record_date := c.GetString("record_date")
	timeLayout := "2006-01-02"
	loc, _ := time.LoadLocation("Local")
	theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", record_date+" 00:00:00", loc)
	if err != nil {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
		return
	}
	recordDateTime := theTime.Unix()
	adminUser := c.GetAdminUserInfo()

	tempPatients, _ := service.GetHisPatientList(adminUser.CurrentOrgId, "", recordDateTime)

	var patients []*service.Patients
	for _, item := range tempPatients {
		if item.HisPatient.ID == 0 {
			patients = append(patients, item)
		}
	}
	c.ServeSuccessJSON(map[string]interface{}{
		"list": patients,
		//"list_two":	patients_two,
	})

}

func RemoveRepeatedPatient(patient []*service.Patients) (newArr []*service.Patients) {
	newArr = make([]*service.Patients, 0)
	for i := 0; i < len(patient); i++ {
		repeat := false
		for j := i + 1; j < len(patient); j++ {
			if patient[i].ID == patient[j].ID {
				repeat = true
				break
			}
		}
		if !repeat {
			newArr = append(newArr, patient[i])
		}
	}
	return
}

func (c *HisApiController) GetHisChargePatientInfo() {
	patient_id, _ := c.GetInt64("patient_id")
	his_patient_id, _ := c.GetInt64("his_patient_id")
	record_date := c.GetString("record_date")
	//start_time := c.GetString("start_time")
	//end_time := c.GetString("end_time")
	order_status, _ := c.GetInt64("type", 0)
	p_type, _ := c.GetInt64("p_type", 0)
	order_id, _ := c.GetInt64("order_id", 0)

	timeLayout := "2006-01-02"
	loc, _ := time.LoadLocation("Local")
	theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", record_date+" 00:00:00", loc)
	if err != nil {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
		return
	}
	recordDateTime := theTime.Unix()

	//startTime, err := time.ParseInLocation(timeLayout+" 15:04:05", start_time+" 00:00:00", loc)
	//if err != nil {
	//
	//}
	//startRecordDateTime := startTime.Unix()
	//
	//endTime, err := time.ParseInLocation(timeLayout+" 15:04:05", end_time+" 23:59:59", loc)
	//if err != nil {
	//
	//}
	//endRecordDateTime := endTime.Unix()

	admin := c.GetAdminUserInfo()
	his_patient_info, _ := service.GetNewHisPatientInfo(his_patient_id)
	xt_patient_info, _ := service.GetXTPatientInfo(admin.CurrentOrgId, patient_id)

	var prescriptions []*models.HisPrescription

	order, _ := service.GetHisOrderByID(order_id)

	if order_status == 1 || order_status == 0 {
		prescriptions, _ = service.GetUnChargeHisPrescriptionFive(admin.CurrentOrgId, patient_id, his_patient_id, recordDateTime, p_type)
	} else if order_status == 2 {
		prescriptions, _ = service.GetChargeHisPrescriptionSeven(admin.CurrentOrgId, patient_id, order.Number, p_type)
	}

	//var monthPrescriptions []*models.HisPrescription
	//if order_status == 1 || order_status == 0 {
	//	monthPrescriptions, _ = service.GetUnChargeMonthHisPrescriptionThree(admin.CurrentOrgId, patient_id, startRecordDateTime, endRecordDateTime, p_type)
	//} else if order_status == 2 {
	//	monthPrescriptions, _ = service.GetChargeMonthHisPrescriptionFive(admin.CurrentOrgId, patient_id, order.Number, p_type)
	//}

	case_history, _ := service.GetHisPatientCaseHistoryInfo(admin.CurrentOrgId, patient_id, recordDateTime)
	patientPrescriptionInfo, _ := service.FindPatientPrescriptionInfo(admin.CurrentOrgId, patient_id, recordDateTime, p_type)

	lastPatientPrescriptionInfo, _ := service.FindLastPatientPrescriptionInfoTwo(admin.CurrentOrgId, patient_id, recordDateTime, p_type)

	doctors, _ := service.GetHisAdminUserDoctors(admin.CurrentOrgId)
	//获取所有科室信息
	department, _ := service.GetAllDepartMent(admin.CurrentOrgId)

	c.ServeSuccessJSON(map[string]interface{}{
		"his_info":     his_patient_info,
		"xt_info":      xt_patient_info,
		"prescription": prescriptions,
		"case_history": case_history,
		"info":         patientPrescriptionInfo,
		"last_info":    lastPatientPrescriptionInfo,
		//"month_prescriptions": monthPrescriptions,
		"order":      order,
		"doctors":    doctors,
		"department": department,
	})
	return

}

func (c *HisApiController) GetAllOrderDetail() {
	order_id, _ := c.GetInt64("id", 0)
	order, _ := service.GetHisOrderByID(order_id)
	if order.ID == 0 {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeOrderParamWrong)
		return
	}
	org_id := c.GetAdminUserInfo().CurrentOrgId
	adminInfo, _ := service.GetAdminUserInfoByID(org_id, order.Creator)
	patient, _ := service.GetPatientByID(org_id, order.PatientId)
	order_info, _ := service.GetHisOrderDetailByNumber(order.Number, org_id)
	c.ServeSuccessJSON(map[string]interface{}{
		"order":      order,
		"order_info": order_info,
		"patient":    patient,
		"admin_info": adminInfo,
	})
	return

}

func (c *HisApiController) GetAllOrderDetailCollect() {
	order_id, _ := c.GetInt64("id", 0)

	order, _ := service.GetHisOrderByID(order_id)
	if order.ID == 0 {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeOrderParamWrong)
		return
	}

	org_id := c.GetAdminUserInfo().CurrentOrgId
	adminInfo, _ := service.GetAdminUserInfoByID(org_id, order.Creator)
	order_info, _ := service.GetHisOrderDetailByNumber(order.Number, org_id)
	patient, _ := service.GetPatientByID(org_id, order.PatientId)

	his, _ := service.GetHisPatientInfoThree(order.UserOrgId, order.MdtrtId)

	if his.BalanceAccountsType != 2 {
		c.ServeSuccessJSON(map[string]interface{}{
			"order":      order,
			"order_info": order_info,
			"patient":    patient,
			"admin_info": adminInfo,
		})
	} else {

		for _, item := range order_info {
			item.FulamtOwnpayAmt = item.DetItemFeeSumamt
			if item.HisDoctorAdviceInfo.ID > 0 && item.HisPrescriptionProject.ID == 0 { //药品
				item.MedChrgitmType = "09"

			}
			if item.HisPrescriptionProject.ID > 0 && item.HisDoctorAdviceInfo.ID == 0 {
				if item.HisPrescriptionProject.Type == 2 {
					switch item.HisPrescriptionProject.VMHisProject.CostClassify {

					case 1:
						item.MedChrgitmType = "14"
						break
					case 2:
						item.MedChrgitmType = "05"

						break
					case 3:
						item.MedChrgitmType = "04"

						break
					case 4:
						item.MedChrgitmType = "14"

						break
					case 5:
						item.MedChrgitmType = "08"

						break
					case 6:
						item.MedChrgitmType = "14"

						break
					case 7:
						item.MedChrgitmType = "14"

						break
					case 8:
						item.MedChrgitmType = "03"
						break
					case 9:
						item.MedChrgitmType = "14"
						break
					}
				} else if item.HisPrescriptionProject.Type == 3 {
					item.MedChrgitmType = "08"
				}
			}
		}
		c.ServeSuccessJSON(map[string]interface{}{
			"order":      order,
			"order_info": order_info,
			"patient":    patient,
			"admin_info": adminInfo,
		})

	}

	return
}

func (c *HisApiController) GetMedicalInsuranceCostCompareList() {
	page, _ := c.GetInt64("page")
	limit, _ := c.GetInt64("limit")
	keywords := c.GetString("keywords")
	start_time := c.GetString("start_time")
	end_time := c.GetString("end_time")
	//clr_type := c.GetString("clr_type")
	insutype := c.GetString("insutype")

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

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

	if page <= 0 {
		page = 1
	}
	if limit <= 0 {
		limit = 10
	}
	list, total, _ := service.GetMedicalInsuranceCostCompareList(c.GetAdminUserInfo().CurrentOrgId, page, limit, keywords, insutype, theStartTIme, theEndtTIme)
	c.ServeSuccessJSON(map[string]interface{}{
		"total": total,
		"list":  list,
	})
	return

}

func (c *HisApiController) GetPutOnRecordList() {
	page, _ := c.GetInt64("page")
	limit, _ := c.GetInt64("limit")
	keywords := c.GetString("keywords")
	is_put_on_record, _ := c.GetInt64("is_put_on_record")

	if page <= 0 {
		page = 1
	}
	if limit <= 0 {
		limit = 10
	}
	list, total, _ := service.GetGdybPsnNcdsRecordList(c.GetAdminUserInfo().CurrentOrgId, page, limit, keywords, is_put_on_record)
	c.ServeSuccessJSON(map[string]interface{}{
		"total": total,
		"list":  list,
	})
	return

}

func (c *HisApiController) GetCompareData() {
	start_time := c.GetString("start_time")
	end_time := c.GetString("end_time")
	insutype := c.GetString("insutype")
	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 {
			theStartTIme = 0
		}
		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 {
			theEndtTIme = 0
		}
		theEndtTIme = theTime.Unix()
	}
	formData, err := service.GetCheckAccountFormData(theStartTIme, theEndtTIme, c.GetAdminUserInfo().CurrentOrgId, insutype)
	if err == nil {
		c.ServeSuccessJSON(map[string]interface{}{
			"list": formData,
		})
	} else {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
		return

	}
}

func (c *HisApiController) GetFaPiaoData() {
	order_id, _ := c.GetInt64("order_id")
	patient_id, _ := c.GetInt64("patient_id")
	number := c.GetString("number")

	adminUser := c.GetAdminUserInfo()
	order, _ := service.GetHisOrderByID(order_id)
	orderInfos, _ := service.GetHisOrderInfoByNumber(order.Number)

	patientPrescription, _ := service.FindLastPatientPrescriptionInfo(adminUser.CurrentOrgId, patient_id, order.SettleAccountsDate)

	department, _ := service.GetDepartMentDetail(patientPrescription.Departments)

	his, _ := service.GetHisPatientInfoThree(adminUser.CurrentOrgId, number)

	//prescriptions, _ := service.GetHisPrescriptionThree(adminUser.CurrentOrgId, patient_id, order.Number)

	var bedCostTotal float64 = 0         //床位总费
	var bedCostSelfTotal float64 = 0     //床位自费
	var bedCostPartSelfTotal float64 = 0 //床位部分项目自费

	var operationCostTotal float64 = 0         //手术费
	var operationCostSelfTotal float64 = 0     //手术费
	var operationCostPartSelfTotal float64 = 0 //手术费

	var otherCostTotal float64 = 0         //其他费用
	var otherCostSelfTotal float64 = 0     //其他费用
	var otherCostPartSelfTotal float64 = 0 //其他费用

	var materialCostTotal float64 = 0         //材料费
	var materialCostSelfTotal float64 = 0     //材料费
	var materialCostPartSelfTotal float64 = 0 //材料费

	var westernMedicineCostTotal float64 = 0         //西药费
	var westernMedicineCostSelfTotal float64 = 0     //西药费
	var westernMedicineCostPartSelfTotal float64 = 0 //西药费

	var chineseTraditionalMedicineCostTotal float64 = 0         //中成药
	var chineseTraditionalMedicineCostSelfTotal float64 = 0     //中成药
	var chineseTraditionalMedicineCostPartSelfTotal float64 = 0 //中成药

	var checkCostTotal float64 = 0         //检查费
	var checkCostSelfTotal float64 = 0     //检查费
	var checkCostPartSelfTotal float64 = 0 //检查费

	var laboratoryCostTotal float64 = 0         //化验费
	var laboratoryCostSelfTotal float64 = 0     //化验费
	var laboratoryCostPartSelfTotal float64 = 0 //化验费

	var treatCostTotal float64 = 0         //治疗费用
	var treatCostSelfTotal float64 = 0     //治疗费用
	var treatCostPartSelfTotal float64 = 0 //治疗费用

	decimal.DivisionPrecision = 2

	if his.BalanceAccountsType == 2 {

		orderInfos_two, _ := service.GetHisOrderDetailByNumber(order.Number, adminUser.CurrentOrgId)

		for _, item := range orderInfos_two {
			item.FulamtOwnpayAmt = item.DetItemFeeSumamt
			if item.HisDoctorAdviceInfo.ID > 0 && item.HisPrescriptionProject.ID == 0 { //药品
				item.MedChrgitmType = "09"

			}
			if item.HisPrescriptionProject.ID > 0 && item.HisDoctorAdviceInfo.ID == 0 {
				if item.HisPrescriptionProject.Type == 2 {
					switch item.HisPrescriptionProject.VMHisProject.CostClassify {

					case 1:
						item.MedChrgitmType = "14"
						break
					case 2:
						item.MedChrgitmType = "05"

						break
					case 3:
						item.MedChrgitmType = "04"

						break
					case 4:
						item.MedChrgitmType = "14"

						break
					case 5:
						item.MedChrgitmType = "08"

						break
					case 6:
						item.MedChrgitmType = "14"

						break
					case 7:
						item.MedChrgitmType = "14"

						break
					case 8:
						item.MedChrgitmType = "03"
						break
					case 9:
						item.MedChrgitmType = "14"
						break

					}

				} else if item.HisPrescriptionProject.Type == 3 {
					item.MedChrgitmType = "08"
				}
			}
		}

		for _, item := range orderInfos_two {
			if item.MedChrgitmType == "01" { //床位费
				bedCostTotal, _ = decimal.NewFromFloat(bedCostTotal).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
				bedCostSelfTotal = bedCostTotal
			}

			if item.MedChrgitmType == "03" { //检查费
				checkCostTotal, _ = decimal.NewFromFloat(checkCostTotal).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
				checkCostSelfTotal = checkCostTotal
			}

			if item.MedChrgitmType == "04" { //化验费
				laboratoryCostTotal, _ = decimal.NewFromFloat(laboratoryCostTotal).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
				laboratoryCostSelfTotal = laboratoryCostTotal
			}

			if item.MedChrgitmType == "05" { //治疗费
				treatCostTotal, _ = decimal.NewFromFloat(treatCostTotal).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
				treatCostSelfTotal = treatCostTotal
			}

			if item.MedChrgitmType == "06" { //手术费
				treatCostTotal, _ = decimal.NewFromFloat(operationCostTotal).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
				operationCostSelfTotal = treatCostTotal
			}

			if item.MedChrgitmType == "08" { //材料费
				materialCostTotal, _ = decimal.NewFromFloat(materialCostTotal).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
				materialCostSelfTotal = materialCostTotal
			}

			if item.MedChrgitmType == "09" { //西药费
				westernMedicineCostTotal, _ = decimal.NewFromFloat(westernMedicineCostTotal).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
				westernMedicineCostSelfTotal = westernMedicineCostTotal
			}

			if item.MedChrgitmType == "11" { //中成费
				chineseTraditionalMedicineCostTotal, _ = decimal.NewFromFloat(chineseTraditionalMedicineCostTotal).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
				chineseTraditionalMedicineCostSelfTotal = chineseTraditionalMedicineCostTotal
			}

			if item.MedChrgitmType == "14" { //其他费
				otherCostTotal, _ = decimal.NewFromFloat(otherCostTotal).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
				otherCostSelfTotal = otherCostTotal
			}

		}

	} else {
		for _, item := range orderInfos {
			if item.MedChrgitmType == "01" { //床位费
				bedCostTotal, _ = decimal.NewFromFloat(bedCostTotal).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
				bedCostSelfTotal, _ = decimal.NewFromFloat(bedCostSelfTotal).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
				bedCostPartSelfTotal, _ = decimal.NewFromFloat(bedCostPartSelfTotal).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()
			}

			if item.MedChrgitmType == "03" { //检查费
				checkCostTotal, _ = decimal.NewFromFloat(checkCostTotal).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
				checkCostSelfTotal, _ = decimal.NewFromFloat(checkCostSelfTotal).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
				checkCostPartSelfTotal, _ = decimal.NewFromFloat(checkCostPartSelfTotal).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()
			}

			if item.MedChrgitmType == "04" { //化验费
				laboratoryCostTotal, _ = decimal.NewFromFloat(laboratoryCostTotal).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
				laboratoryCostSelfTotal, _ = decimal.NewFromFloat(laboratoryCostSelfTotal).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
				laboratoryCostPartSelfTotal, _ = decimal.NewFromFloat(laboratoryCostPartSelfTotal).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()
			}

			if item.MedChrgitmType == "05" { //治疗费
				treatCostTotal, _ = decimal.NewFromFloat(treatCostTotal).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
				treatCostSelfTotal, _ = decimal.NewFromFloat(treatCostSelfTotal).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
				treatCostPartSelfTotal, _ = decimal.NewFromFloat(treatCostPartSelfTotal).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()
			}

			if item.MedChrgitmType == "06" { //手术费
				operationCostTotal, _ = decimal.NewFromFloat(operationCostTotal).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
				operationCostSelfTotal, _ = decimal.NewFromFloat(operationCostSelfTotal).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
				operationCostPartSelfTotal, _ = decimal.NewFromFloat(operationCostPartSelfTotal).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()
			}

			if item.MedChrgitmType == "08" { //材料费
				materialCostTotal, _ = decimal.NewFromFloat(materialCostTotal).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
				materialCostSelfTotal, _ = decimal.NewFromFloat(materialCostSelfTotal).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
				materialCostPartSelfTotal, _ = decimal.NewFromFloat(materialCostPartSelfTotal).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()
			}

			if item.MedChrgitmType == "09" { //西药费
				westernMedicineCostTotal, _ = decimal.NewFromFloat(westernMedicineCostTotal).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
				westernMedicineCostSelfTotal, _ = decimal.NewFromFloat(westernMedicineCostSelfTotal).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
				westernMedicineCostPartSelfTotal, _ = decimal.NewFromFloat(westernMedicineCostPartSelfTotal).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()
			}

			if item.MedChrgitmType == "11" { //中成费
				chineseTraditionalMedicineCostTotal, _ = decimal.NewFromFloat(chineseTraditionalMedicineCostTotal).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
				chineseTraditionalMedicineCostSelfTotal, _ = decimal.NewFromFloat(chineseTraditionalMedicineCostSelfTotal).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
				chineseTraditionalMedicineCostPartSelfTotal, _ = decimal.NewFromFloat(chineseTraditionalMedicineCostPartSelfTotal).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()
			}

			if item.MedChrgitmType == "14" { //其他费
				otherCostTotal, _ = decimal.NewFromFloat(otherCostTotal).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
				otherCostSelfTotal, _ = decimal.NewFromFloat(otherCostSelfTotal).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
				otherCostPartSelfTotal, _ = decimal.NewFromFloat(otherCostPartSelfTotal).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()
			}

		}

	}

	admin, _ := service.GetAdminUserInfoByID(adminUser.CurrentOrgId, adminUser.AdminUser.Id)

	c.ServeSuccessJSON(map[string]interface{}{
		"order_number":    order.Number,        //业务流水号
		"id_card_no":      his.IdCardNo,        //社会保障号
		"department_name": department.Name,     //科室
		"number":          his.Number,          //门诊号
		"date":            order.SettleEndTime, //结算日期
		"name":            order.PsnName,       //姓名
		"gender":          order.Gend,          //性别
		"psn_cash_money":  order.PsnCashPay,    //个人支付
		"pay_way":         "门诊",                //结算方式
		"medfee_sumamt":   order.MedfeeSumamt,  //总费用
		"admin_user_name": admin.UserName,      //收款员

		"bedCostTotal":                                bedCostTotal,
		"bedCostSelfTotal":                            bedCostSelfTotal,
		"bedCostPartSelfTotal":                        bedCostPartSelfTotal,
		"operationCostTotal":                          operationCostTotal,
		"operationCostSelfTotal":                      operationCostSelfTotal,
		"operationCostPartSelfTotal":                  operationCostPartSelfTotal,
		"otherCostTotal":                              otherCostTotal,
		"otherCostSelfTotal":                          otherCostSelfTotal,
		"otherCostPartSelfTotal":                      otherCostPartSelfTotal,
		"materialCostTotal":                           materialCostTotal,
		"materialCostSelfTotal":                       materialCostSelfTotal,
		"materialCostPartSelfTotal":                   materialCostPartSelfTotal,
		"westernMedicineCostTotal":                    westernMedicineCostTotal,
		"westernMedicineCostSelfTotal":                westernMedicineCostSelfTotal,
		"westernMedicineCostPartSelfTotal":            westernMedicineCostPartSelfTotal,
		"chineseTraditionalMedicineCostTotal":         chineseTraditionalMedicineCostTotal,
		"chineseTraditionalMedicineCostSelfTotal":     chineseTraditionalMedicineCostSelfTotal,
		"chineseTraditionalMedicineCostPartSelfTotal": chineseTraditionalMedicineCostPartSelfTotal,
		"checkCostTotal":                              checkCostTotal,
		"checkCostSelfTotal":                          checkCostSelfTotal,
		"checkCostPartSelfTotal":                      checkCostPartSelfTotal,
		"laboratoryCostTotal":                         laboratoryCostTotal,
		"laboratoryCostSelfTotal":                     laboratoryCostSelfTotal,
		"laboratoryCostPartSelfTotal":                 laboratoryCostPartSelfTotal,
		"treatCostTotal":                              treatCostTotal,
		"treatCostSelfTotal":                          treatCostSelfTotal,
		"treatCostPartSelfTotal":                      treatCostPartSelfTotal,
	})

}

func (this *HisApiController) GetIncomeStatisticsData() {
	start_time := this.GetString("start_time")
	end_time := this.GetString("end_time")
	key_words := this.GetString("key_words")
	limit, _ := this.GetInt64("limit")
	page, _ := this.GetInt64("page")

	if page <= 0 {
		page = 1
	}
	if limit <= 0 {
		limit = 10
	}
	statistics_type, _ := this.GetInt64("statistics_type")
	admin := this.GetAdminUserInfo()
	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 {
			theStartTIme = 0
		}
		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 {
			theEndtTIme = 0
		}
		theEndtTIme = theTime.Unix()
	}

	if statistics_type == 1 {
		list, total, _ := service.GetDayIncomeStatisticsData(admin.CurrentOrgId, key_words, theStartTIme, theEndtTIme, page, limit)
		this.ServeSuccessJSON(map[string]interface{}{
			"list":  list,
			"total": total,
		})
	} else {
		list, total, _ := service.GetDayIncomeDetailStatisticsData(admin.CurrentOrgId, key_words, theStartTIme, theEndtTIme, page, limit)
		this.ServeSuccessJSON(map[string]interface{}{
			"list":  list,
			"total": total,
		})

	}

}

func (c *HisApiController) PostProjectInformation() {
	adminUser := c.GetAdminUserInfo()
	orgId := adminUser.CurrentOrgId
	dataBody := make(map[string]interface{}, 0)
	err := json.Unmarshal(c.Ctx.Input.RequestBody, &dataBody)
	if err != nil {
		utils.ErrorLog(err.Error())
		return
	}
	utils.ErrorLog("%v", dataBody)
	var projectList []*models.HisProject
	var total_goods []interface{}
	tempProjects := dataBody["projects"].([]interface{})

	total_goods = tempProjects
	for index, projectMap := range tempProjects {

		projectM := projectMap.(map[string]interface{})

		var project models.HisProject
		if projectM["project_name"] == nil || reflect.TypeOf(projectM["project_name"]).String() != "string" {
			utils.ErrorLog("project_name")
			return
		}

		project_name, _ := projectM["project_name"].(string)
		if len(project_name) == 0 { //名字为空则生成一条导入错误日志
			err_log := models.ExportErrLog{
				LogType:    6,
				UserOrgId:  c.GetAdminUserInfo().CurrentOrgId,
				ErrMsg:     "第" + strconv.Itoa(index+3) + "行" + "的项目名称不能为空",
				Status:     1,
				CreateTime: time.Now().Unix(),
				UpdateTime: time.Now().Unix(),
				ExportTime: time.Now().Unix(),
			}
			service.CreateExportErrLog(&err_log)
			continue
		}

		project.ProjectName = project_name

		prices := projectM["price"].(string)

		price, _ := strconv.ParseFloat(prices, 64)
		if price <= 0 { //名字为空则生成一条导入错误日志
			err_log := models.ExportErrLog{
				LogType:    6,
				UserOrgId:  c.GetAdminUserInfo().CurrentOrgId,
				ErrMsg:     "第" + strconv.Itoa(index+3) + "行" + "的零价不能为空",
				Status:     1,
				CreateTime: time.Now().Unix(),
				UpdateTime: time.Now().Unix(),
				ExportTime: time.Now().Unix(),
			}
			service.CreateExportErrLog(&err_log)
			continue
		}

		project.Price = price

		if projectM["unit"] == nil || reflect.TypeOf(projectM["unit"]).String() != "string" {
			utils.ErrorLog("unit_id")
			return
		}

		unit := projectM["unit"].(string)
		if len(unit) == 0 { //名字为空则生成一条导入错误日志
			err_log := models.ExportErrLog{
				LogType:    6,
				UserOrgId:  c.GetAdminUserInfo().CurrentOrgId,
				ErrMsg:     "第" + strconv.Itoa(index+3) + "行" + "的单位不能为空",
				Status:     1,
				CreateTime: time.Now().Unix(),
				UpdateTime: time.Now().Unix(),
				ExportTime: time.Now().Unix(),
			}
			service.CreateExportErrLog(&err_log)
			continue
		}
		project.Unit = unit

		cost_classify := projectM["cost_classify"].(string)
		if len(cost_classify) == 0 { //名字为空则生成一条导入错误日志
			err_log := models.ExportErrLog{
				LogType:    6,
				UserOrgId:  c.GetAdminUserInfo().CurrentOrgId,
				ErrMsg:     "第" + strconv.Itoa(index+3) + "行" + "的费用类别不能为空",
				Status:     1,
				CreateTime: time.Now().Unix(),
				UpdateTime: time.Now().Unix(),
				ExportTime: time.Now().Unix(),
			}
			service.CreateExportErrLog(&err_log)
			continue
		}
		var costClassify = "费用类别"
		var cost_classify_id int64

		costClassifyConfig, _ := service.GetDrugDataConfig(0, costClassify)

		if len(cost_classify) != 0 {
			_, errcode := service.IsExistDicConfig(costClassifyConfig.ID, cost_classify, orgId)
			if errcode == gorm.ErrRecordNotFound {
				costConfig, _ := service.GetLastDicConfig(costClassifyConfig.ID, orgId)
				dataconfig := models.DictDataconfig{
					ParentId:       costClassifyConfig.ID,
					Module:         "system",
					OrgId:          orgId,
					Name:           cost_classify,
					FieldName:      "",
					Value:          costConfig.Value + 1,
					CreatedTime:    "",
					UpdatedTime:    "",
					CreateUserId:   adminUser.AdminUser.Id,
					Status:         1,
					Remark:         "",
					DeleteIdSystem: 0,
					Title:          "",
					Content:        "",
					Order:          0,
					Code:           "",
				}
				service.CreatedDicConfig(&dataconfig)
			}
		}

		costClassList, _ := service.GetParentDataConfig(costClassifyConfig.ID, orgId)

		for _, it := range costClassList {
			if cost_classify == it.Name {
				cost_classify_id = int64(it.Value)
			}
		}
		project.CostClassify = cost_classify_id

		executive_section := projectM["executive_section"].(string)
		if len(executive_section) == 0 { //名字为空则生成一条导入错误日志
			err_log := models.ExportErrLog{
				LogType:    6,
				UserOrgId:  c.GetAdminUserInfo().CurrentOrgId,
				ErrMsg:     "第" + strconv.Itoa(index+3) + "行" + "的费用类别不能为空或内容与系统不匹配",
				Status:     1,
				CreateTime: time.Now().Unix(),
				UpdateTime: time.Now().Unix(),
				ExportTime: time.Now().Unix(),
			}
			service.CreateExportErrLog(&err_log)
			continue
		}

		if len(executive_section) != 0 {
			//查找科室是否有内容
			_, errcodedepart := service.GetDepartMentByName(executive_section, orgId)
			if errcodedepart == gorm.ErrRecordNotFound {
				department := models.XtHisDepartment{
					Name:        executive_section,
					Status:      1,
					UserOrgId:   adminUser.CurrentOrgId,
					CreatedTime: time.Now().Unix(),
				}
				service.CreateDePartment(&department)
			}
		}
		var executive_section_id int64
		departMentList, _ := service.GetAllDepartMent(orgId)
		for _, it := range departMentList {
			if executive_section == it.Name {
				executive_section_id = it.ID
			}
		}
		project.ExecutiveSection = executive_section_id

		medical_coverage := projectM["medical_coverage"].(string)

		if len(medical_coverage) == 0 { //名字为空则生成一条导入错误日志
			err_log := models.ExportErrLog{
				LogType:    6,
				UserOrgId:  c.GetAdminUserInfo().CurrentOrgId,
				ErrMsg:     "第" + strconv.Itoa(index+3) + "行" + "的费用类别不能为空",
				Status:     1,
				CreateTime: time.Now().Unix(),
				UpdateTime: time.Now().Unix(),
				ExportTime: time.Now().Unix(),
			}
			service.CreateExportErrLog(&err_log)
			continue
		}

		var medicalCoverage = "医保等级"
		var medical_coverage_id int64

		medicalCoverageConfig, _ := service.GetDrugDataConfig(0, medicalCoverage)
		if len(medical_coverage) != 0 {

			_, errormedicalcoverage := service.IsExistDicConfig(medicalCoverageConfig.ID, medical_coverage, orgId)
			if errormedicalcoverage == gorm.ErrRecordNotFound {
				medicalCoverageConfig, _ := service.GetLastDicConfig(medicalCoverageConfig.ID, orgId)
				dataconfig := models.DictDataconfig{
					ParentId:       medicalCoverageConfig.ID,
					Module:         "system",
					OrgId:          orgId,
					Name:           medical_coverage,
					FieldName:      "",
					Value:          medicalCoverageConfig.Value + 1,
					CreatedTime:    "",
					UpdatedTime:    "",
					CreateUserId:   adminUser.AdminUser.Id,
					Status:         1,
					Remark:         "",
					DeleteIdSystem: 0,
					Title:          "",
					Content:        "",
					Order:          0,
					Code:           "",
				}
				service.CreatedDicConfig(&dataconfig)
			}
		}
		medicalCoverageList, _ := service.GetParentDataConfig(medicalCoverageConfig.ID, orgId)
		for _, it := range medicalCoverageList {
			if medical_coverage == it.Name {
				medical_coverage_id = int64(it.Value)
			}
		}
		project.MedicalCoverage = medical_coverage_id

		pinyin := projectM["pinyin"].(string)
		project.Pinyin = pinyin

		wubi := projectM["wubi"].(string)

		project.Wubi = wubi

		statistical_classification := projectM["statistical_classification"].(string)

		var statisticalClassification = "统计分类"
		var statistical_classification_id int64
		classiFication, _ := service.GetDrugDataConfig(0, statisticalClassification)
		if len(statistical_classification) != 0 {

			_, classificationerrcodes := service.IsExistDicConfig(classiFication.ID, statistical_classification, orgId)

			if classificationerrcodes == gorm.ErrRecordNotFound {
				classiFicationConfig, _ := service.GetLastDicConfig(classiFication.ID, orgId)
				dataconfig := models.DictDataconfig{
					ParentId:       classiFication.ID,
					Module:         "system",
					OrgId:          orgId,
					Name:           statistical_classification,
					FieldName:      "",
					Value:          classiFicationConfig.Value + 1,
					CreatedTime:    "",
					UpdatedTime:    "",
					CreateUserId:   adminUser.AdminUser.Id,
					Status:         1,
					Remark:         "",
					DeleteIdSystem: 0,
					Title:          "",
					Content:        "",
					Order:          0,
					Code:           "",
				}
				service.CreatedDicConfig(&dataconfig)
			}

		}
		classiFicationList, _ := service.GetParentDataConfig(classiFication.ID, orgId)

		for _, it := range classiFicationList {
			if statistical_classification == it.Name {

				statistical_classification_id = int64(it.Value)
			}
		}

		project.StatisticalClassification = statistical_classification_id

		disease_directory := int64(projectM["disease_directory"].(float64))
		project.DiseaseDirectory = disease_directory

		is_record := int64(projectM["is_record"].(float64))
		project.IsRecord = is_record

		medical_code := projectM["medical_code"].(string)
		project.MedicalCode = medical_code

		tube_color := projectM["tube_color"].(string)

		var tubeColor = "试管颜色"
		var tube_color_id int64
		tubeColorConfig, _ := service.GetDrugDataConfig(0, tubeColor)
		if len(tube_color) != 0 {
			_, errcodetube := service.IsExistDicConfig(tubeColorConfig.ID, tube_color, orgId)
			if errcodetube == gorm.ErrRecordNotFound {
				tubeConfig, _ := service.GetLastDicConfig(tubeColorConfig.ID, orgId)
				dataconfig := models.DictDataconfig{
					ParentId:       tubeColorConfig.ID,
					Module:         "system",
					OrgId:          orgId,
					Name:           tube_color,
					FieldName:      "",
					Value:          tubeConfig.Value + 1,
					CreatedTime:    "",
					UpdatedTime:    "",
					CreateUserId:   adminUser.AdminUser.Id,
					Status:         1,
					Remark:         "",
					DeleteIdSystem: 0,
					Title:          "",
					Content:        "",
					Order:          0,
					Code:           "",
				}
				service.CreatedDicConfig(&dataconfig)
			}

		}

		tubeColorList, _ := service.GetParentDataConfig(tubeColorConfig.ID, orgId)
		for _, it := range tubeColorList {
			if tube_color == it.Name {
				tube_color_id = int64(it.Value)
			}
		}

		project.TubeColor = tube_color_id

		single_dose := projectM["single_dose"].(string)
		project.SingleDose = single_dose
		execution_frequency := projectM["execution_frequency"].(string)
		project.ExecutionFrequency = execution_frequency

		delivery_way := projectM["delivery_way"].(string)
		project.DeliveryWay = delivery_way

		number_days := projectM["number_days"].(string)
		project.NumberDays = number_days

		total := projectM["total"].(string)
		project.Total = total

		medical_status := int64(projectM["medical_status"].(float64))
		project.MedicalStatus = medical_status

		category := int64(projectM["category"].(float64))
		project.Category = category

		specail_project := int64(projectM["specail_project"].(float64))
		project.SpecailProject = specail_project

		social_security_directory_code := projectM["social_security_directory_code"].(string)

		project.SocialSecurityDirectoryCode = social_security_directory_code

		remark := projectM["remark"].(string)
		project.Remark = remark

		record_date := projectM["record_date"].(string)

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

		theTime, _ := time.ParseInLocation(timeLayout+" 15:04:05", record_date+" 00:00:00", loc)
		project.RecordDate = theTime.Unix()
		projectList = append(projectList, &project)
	}

	export_time := time.Now().Unix()

	errLogs, _ := service.FindPatientExportLog(c.GetAdminUserInfo().CurrentOrgId, export_time)
	if len(projectList) > 0 {
		for _, item := range projectList {
			project := models.HisProject{
				ProjectName:                 item.ProjectName,
				Price:                       item.Price,
				Unit:                        item.Unit,
				CostClassify:                item.CostClassify,
				ExecutiveSection:            item.ExecutiveSection,
				MedicalCoverage:             item.MedicalCoverage,
				UserOrgId:                   orgId,
				Status:                      1,
				CreatedTime:                 time.Now().Unix(),
				Pinyin:                      item.Pinyin,
				Wubi:                        item.Wubi,
				StatisticalClassification:   item.StatisticalClassification,
				DiseaseDirectory:            item.DiseaseDirectory,
				IsRecord:                    item.IsRecord,
				MedicalCode:                 item.MedicalCode,
				TubeColor:                   item.TubeColor,
				SingleDose:                  item.SingleDose,
				DeliveryWay:                 item.DeliveryWay,
				NumberDays:                  item.NumberDays,
				Total:                       item.Total,
				Category:                    item.Category,
				MedicalStatus:               item.MedicalStatus,
				SpecailProject:              item.SpecailProject,
				RecordDate:                  item.RecordDate,
				Remark:                      item.Remark,
				SocialSecurityDirectoryCode: item.SocialSecurityDirectoryCode,
				ExecutionFrequency:          item.ExecutionFrequency,
			}

			_, errcodeproject := service.GetProjectByNameIsExsit(item.ProjectName, orgId)
			if errcodeproject == gorm.ErrRecordNotFound {
				service.CreateProjectInfomation(&project)
			} else if errcodeproject == nil {
				service.UpdateProjectByName(&project, item.ProjectName, orgId)
			}

			log := models.ExportLog{
				LogType:    6,
				UserOrgId:  c.GetAdminUserInfo().CurrentOrgId,
				TotalNum:   int64(len(total_goods)),
				FailNum:    int64(len(errLogs)),
				SuccessNum: int64(len(projectList)),
				CreateTime: time.Now().Unix(),
				UpdateTime: time.Now().Unix(),
				ExportTime: export_time,
				Status:     1,
			}
			service.CreateExportLog(&log)
			c.ServeSuccessJSON(map[string]interface{}{
				"msg":         "导入成功",
				"total_num":   len(total_goods),
				"success_num": len(projectList),
				"fail_num":    int64(len(errLogs)),
			})
		}
	} else {
		log := models.ExportLog{
			LogType:    6,
			UserOrgId:  c.GetAdminUserInfo().CurrentOrgId,
			TotalNum:   int64(len(total_goods)),
			FailNum:    int64(len(errLogs)),
			SuccessNum: int64(len(projectList)),
			CreateTime: time.Now().Unix(),
			UpdateTime: time.Now().Unix(),
			ExportTime: export_time,
			Status:     1,
		}
		service.CreateExportLog(&log)

		c.ServeSuccessJSON(map[string]interface{}{
			"msg":         "导入成功",
			"total_num":   len(total_goods),
			"success_num": len(projectList),
			"fail_num":    int64(len(errLogs)),
		})
	}
}

//func (this *HisApiController) EditProjectInformation(){
//
//	id, _ := this.GetInt64("id")
//	project_team := this.GetString("project_team")
//	price := this.GetString("price")
//	price_float, _ := strconv.ParseFloat(price, 64)
//	pinyin := this.GetString("pinyin")
//	wubi := this.GetString("wubi")
//	tube_color, _ := this.GetInt64("tube_color")
//	team_type, _ := this.GetInt64("team_type")
//	remark := this.GetString("remark")
//	ids := this.GetString("ids")
//	item_id := this.GetString("item_id")
//	projectTeam := models.XtHisProjectTeam{
//		ProjectTeam: project_team,
//		Price:       price_float,
//		Pinyin:      pinyin,
//		Wubi:        wubi,
//		TubeColor:   tube_color,
//		TeamType:    team_type,
//		Remark:      remark,
//		ProjectId:   ids,
//		ItemId:      item_id,
//	}
//
//
//	dataBody := make(map[string]interface{}, 0)
//	err := json.Unmarshal(this.Ctx.Input.RequestBody, &dataBody)
//	if err != nil {
//		utils.ErrorLog(err.Error())
//		this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
//		return
//	}
//
//	err = service.UpdatedProjectTeam(id, &projectTeam)
//
//
//	if err != nil {
//		this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeUpdateConfig)
//		return
//	}
//
//	if dataBody["info"] != nil && reflect.TypeOf(dataBody["info"]).String() == "[]interface {}" {
//		infos, _ := dataBody["info"].([]interface{})
//		if len(infos) > 0 {
//			var ids []string
//
//			for _, item := range infos {
//				items := item.(map[string]interface{})
//				if items["id"] == nil || reflect.TypeOf(items["id"]).String() != "float64" {
//					utils.ErrorLog("id")
//					this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
//					return
//				}
//				id := int64(items["id"].(float64))
//
//				if items["type"] == nil || reflect.TypeOf(items["type"]).String() != "float64" {
//					utils.ErrorLog("type")
//					this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
//					return
//				}
//				types := int64(items["type"].(float64))
//
//				if items["number"] == nil || reflect.TypeOf(items["number"]).String() != "string" {
//					utils.ErrorLog("number")
//				}
//
//				number, _ := strconv.ParseInt(items["number"].(string), 10, 64)
//
//				projectList := models.XtHisProjectList{
//					Number:      number,
//					UserOrgId:   this.GetAdminUserInfo().CurrentOrgId,
//					ProjectId:   id,
//					Status:      1,
//					CreatedTime: time.Now().Unix(),
//					UpdatedTime: time.Now().Unix(),
//					TeamId:      projectTeam.ID,
//					Type:        types,
//				}
//				list := projectList
//
//				service.CreateProjectList(&list)
//
//				ids = append(ids, strconv.FormatInt(list.ID, 10))
//
//			}
//			ids_str := strings.Join(ids, ",")
//			projectTeam.ProjectId = projectTeam.ProjectId+"," + ids_str
//			service.SaveProjectTeam(&projectTeam)
//			this.ServeSuccessJSON(map[string]interface{}{
//				"projectTeam": projectTeam,
//			})
//		}
//	}
//}

func (c *HisApiController) CreateHisPrescriptionTemplate() {
	name := c.GetString("name")
	mode_id, _ := c.GetInt64("mode", 0)
	types, _ := c.GetInt64("type", 0)
	patient_id, _ := c.GetInt64("patient_id", 0)
	types = 1
	adminInfo := c.GetAdminUserInfo()
	template := &models.HisPrescriptionTemplate{
		UserOrgId: c.GetAdminUserInfo().CurrentOrgId,
		PatientId: patient_id,
		Type:      types,
		Status:    1,
		Ctime:     time.Now().Unix(),
		Mtime:     time.Now().Unix(),
		Name:      name,
		Mode:      mode_id,
	}

	dataBody := make(map[string]interface{}, 0)
	err := json.Unmarshal(c.Ctx.Input.RequestBody, &dataBody)
	if err != nil {
		utils.ErrorLog(err.Error())
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
		return
	}

	err = service.CreateHisPrescriptionTemplate(template)
	if dataBody["prescriptions"] != nil && reflect.TypeOf(dataBody["prescriptions"]).String() == "[]interface {}" {
		prescriptions, _ := dataBody["prescriptions"].([]interface{})
		if len(prescriptions) > 0 {
			for _, item := range prescriptions {
				items := item.(map[string]interface{})
				if items["type"] == nil || reflect.TypeOf(items["type"]).String() != "float64" {
					utils.ErrorLog("type")
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
					return
				}
				types := int64(items["type"].(float64))

				if items["med_type"] == nil || reflect.TypeOf(items["med_type"]).String() != "float64" {
					utils.ErrorLog("med_type")
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
					return
				}
				med_type := strconv.Itoa(int(items["med_type"].(float64)))

				ctime := time.Now().Unix()
				prescription := &models.HisPrescriptionInfoTemplate{
					PatientId:   patient_id,
					UserOrgId:   adminInfo.CurrentOrgId,
					Ctime:       ctime,
					Mtime:       ctime,
					Type:        types,
					Modifier:    adminInfo.AdminUser.Id,
					Creator:     adminInfo.AdminUser.Id,
					Status:      1,
					PTemplateId: template.ID,
					MedType:     med_type,
				}
				service.CreateHisPrescriptionInfoTemplate(prescription)

				if items["advices"] != nil && reflect.TypeOf(items["advices"]).String() == "[]interface {}" {
					advices := items["advices"].([]interface{})
					//group := service.GetMaxAdviceGroupID(adminInfo.CurrentOrgId)
					groupNo := int64(0)
					ctime := time.Now().Unix()
					mtime := ctime
					if len(advices) > 0 {
						for _, advice := range advices {
							var s models.HisPrescriptionAdviceTemplate
							s.PrescriptionId = prescription.ID
							s.AdviceType = 2
							s.StopState = 2
							s.ExecutionState = 2
							s.Status = 1
							s.UserOrgId = adminInfo.CurrentOrgId
							s.Groupno = groupNo
							s.CreatedTime = ctime
							s.UpdatedTime = mtime
							s.PatientId = patient_id
							errcode := c.setAdviceTemplateWithJSON(&s, advice.(map[string]interface{}))
							if errcode > 0 {
								c.ServeFailJSONWithSGJErrorCode(errcode)
								return
							}

							service.CreateHisPrescriptionAdviceTemplate(&s)

						}
					}
				}
				if items["project"] != nil && reflect.TypeOf(items["project"]).String() == "[]interface {}" {
					projects := items["project"].([]interface{})
					if len(projects) > 0 {
						for _, project := range projects {
							var p models.HisPrescriptionProjectTemplate
							p.PrescriptionId = prescription.ID
							p.Ctime = time.Now().Unix()
							p.Mtime = time.Now().Unix()
							p.PatientId = patient_id
							p.UserOrgId = adminInfo.CurrentOrgId
							p.Status = 1
							errcode := c.setProjectTemplateWithJSON(&p, project.(map[string]interface{}))
							if errcode > 0 {
								c.ServeFailJSONWithSGJErrorCode(errcode)
								return
							}
							service.CreateHisPrescriptionProjectTemplate(&p)

						}
					}
				}

			}

			c.ServeSuccessJSON(map[string]interface{}{
				"msg": "创建成功",
			})
		}
	}

}

func (c *HisApiController) PreSettle() {
	id, _ := c.GetInt64("id")
	record_time := c.GetString("record_time")
	his_patient_id, _ := c.GetInt64("his_patient_id")

	timeLayout := "2006-01-02"
	loc, _ := time.LoadLocation("Local")
	settle_accounts_type, _ := c.GetInt64("settle_accounts_type")
	diagnosis_id := c.GetString("diagnosis")
	sick_type, _ := c.GetInt64("sick_type")
	reg_type, _ := c.GetInt64("p_type")

	his, _ := service.GetHisPatientByIdThree(his_patient_id)

	theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", record_time+" 00:00:00", loc)
	if err != nil {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
		return
	}
	recordDateTime := theTime.Unix()
	adminUser := c.GetAdminUserInfo()
	var prescriptions []*models.HisPrescription
	var start_time int64
	var end_time int64

	ids_str := c.GetString("ids")
	ids_arr := strings.Split(ids_str, ",")

	fmt.Println(reg_type)

	if settle_accounts_type == 1 { //日结

		if reg_type == 11 {

			prescriptions, _ = service.GetPrescriptionByIds(ids_arr, adminUser.CurrentOrgId)
		} else {
			prescriptions, _ = service.GetSettleHisPrescription(adminUser.CurrentOrgId, id, his_patient_id, recordDateTime, reg_type)
		}

		fmt.Println(prescriptions)
	} else { //月结
		start_time_str := c.GetString("start_time")
		end_time_str := c.GetString("end_time")
		timeLayout := "2006-01-02"
		loc, _ := time.LoadLocation("Local")
		theStartTime, err := time.ParseInLocation(timeLayout+" 15:04:05", start_time_str+" 00:00:00", loc)
		if err != nil {
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
			return
		}
		recordStartTime := theStartTime.Unix()
		start_time = recordStartTime
		theEndTime, err := time.ParseInLocation(timeLayout+" 15:04:05", end_time_str+" 00:00:00", loc)
		if err != nil {
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
			return
		}
		recordEndTime := theEndTime.Unix()
		end_time = recordEndTime
		prescriptions, _ = service.GetMonthHisPrescription(adminUser.CurrentOrgId, id, recordStartTime, recordEndTime, reg_type)
	}

	if reg_type == 1111 || reg_type == 1112 {
		reg_type = 11
	}

	timestamp := time.Now().Unix()
	tempTime := time.Unix(timestamp, 0)
	timeFormat := tempTime.Format("20060102150405")
	chrgBchno := rand.Intn(100000) + 10000
	chrg_bchno := timeFormat + strconv.FormatInt(int64(chrgBchno), 10) + strconv.FormatInt(his.PatientId, 10)
	strconv.FormatInt(his.PatientId, 10)

	var ids []int64

	for _, item := range prescriptions {
		ids = append(ids, item.ID)
	}

	fmt.Println(ids)

	var total float64
	for _, item := range prescriptions {
		fmt.Println(item)
		if item.Type == 1 { //药品
			for _, subItem := range item.HisDoctorAdviceInfo {
				total = total + (subItem.Price * subItem.PrescribingNumber)
			}
		}
		if item.Type == 2 { //项目
			for _, subItem := range item.HisPrescriptionProject {
				total = total + (subItem.Price * float64(subItem.Count))
			}
		}

		for _, subItem := range item.HisAdditionalCharge {
			total = total + (subItem.Price * float64(subItem.Count))
		}
	}

	allTotal := fmt.Sprintf("%.2f", total)
	totals, _ := strconv.ParseFloat(allTotal, 64)
	order := &models.HisOrder{
		UserOrgId:          adminUser.CurrentOrgId,
		HisPatientId:       his.ID,
		PatientId:          id,
		SettleAccountsDate: recordDateTime,
		Ctime:              time.Now().Unix(),
		Mtime:              time.Now().Unix(),
		Status:             1,
		OrderStatus:        1,
		MdtrtId:            his.Number,
		Number:             chrg_bchno,
		MedfeeSumamt:       totals,
		SettleEndTime:      end_time,
		SettleStartTime:    start_time,
		SettleType:         settle_accounts_type,
		PType:              2,
		IsPre:              1,
		MedType:            strconv.Itoa(int(reg_type)),
		Diagnosis:          diagnosis_id,
	}
	err = service.CreateOrder(order)
	if err != nil {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeCreateOrderException)
		return
	}

	var customs []*Custom
	for _, item := range prescriptions {
		fmt.Println(item.Type)
		if item.Type == 1 { //药品
			for _, subItem := range item.HisDoctorAdviceInfo {
				cus := &Custom{
					AdviceId:         subItem.ID,
					ProjectId:        0,
					DetItemFeeSumamt: fmt.Sprintf("%.2f", subItem.Price*subItem.PrescribingNumber),
					Cut:              fmt.Sprintf("%.2f", subItem.PrescribingNumber),
					FeedetlSn:        subItem.FeedetlSn,
					Price:            fmt.Sprintf("%.2f", subItem.Price),
					MedListCodg:      subItem.MedListCodg,
					Type:             1,
				}
				customs = append(customs, cus)
			}
		}

		if item.Type == 2 { //项目
			for _, subItem := range item.HisPrescriptionProject {

				cus := &Custom{
					AdviceId:         0,
					ProjectId:        subItem.ID,
					DetItemFeeSumamt: fmt.Sprintf("%.2f", subItem.Price*float64(subItem.Count)),
					Cut:              fmt.Sprintf("%.2f", float64(subItem.Count)),
					FeedetlSn:        subItem.FeedetlSn,
					Price:            fmt.Sprintf("%.2f", float64(subItem.Price)),
					MedListCodg:      subItem.MedListCodg,
					Type:             2,
				}

				customs = append(customs, cus)
			}
		}

		for _, item := range item.HisAdditionalCharge {
			cus := &Custom{
				ItemId:           item.ID,
				AdviceId:         0,
				ProjectId:        0,
				DetItemFeeSumamt: fmt.Sprintf("%.2f", item.Price),
				Cut:              fmt.Sprintf("%.2f", float64(item.Count)),
				FeedetlSn:        item.FeedetlSn,
				Price:            fmt.Sprintf("%.2f", float64(item.Price)),
				MedListCodg:      item.XtHisAddtionConfig.Code,
				Type:             3,
			}

			customs = append(customs, cus)
		}

	}

	fmt.Println(customs)

	for _, item := range customs {
		var advice_id int64 = 0
		var project_id int64 = 0
		var item_id int64 = 0

		var types int64 = 0

		if item.Type == 1 {
			advice_id = item.AdviceId
			project_id = 0
			item_id = 0
		} else if item.Type == 2 {
			advice_id = 0
			item_id = 0

			project_id = item.ProjectId
		} else if item.Type == 3 {
			advice_id = 0
			item_id = item.ItemId
			project_id = 0
		}

		detItemFeeSumamt, _ := strconv.ParseFloat(item.DetItemFeeSumamt, 32)
		cut, _ := strconv.ParseFloat(item.Cut, 32)
		pric, _ := strconv.ParseFloat(item.Price, 32)

		info := &models.HisOrderInfo{
			OrderNumber:      order.Number,
			UploadDate:       time.Now().Unix(),
			AdviceId:         advice_id,
			DetItemFeeSumamt: detItemFeeSumamt,
			Cnt:              cut,
			Pric:             pric,
			PatientId:        id,
			Status:           1,
			Mtime:            time.Now().Unix(),
			Ctime:            time.Now().Unix(),
			UserOrgId:        adminUser.CurrentOrgId,
			HisPatientId:     his.ID,
			OrderId:          order.ID,
			ProjectId:        project_id,
			Type:             types,
			ItemId:           item_id,
		}
		service.CreateOrderInfo(info)
	}
	his.SickType = sick_type
	service.UpdataHisPateint(&his)
	err = service.UpDatePrescriptionNumber(adminUser.CurrentOrgId, ids, chrg_bchno)
	err = service.UpDateHisPrescriptionInfoNumber(adminUser.CurrentOrgId, id, chrg_bchno, recordDateTime, his_patient_id)
	//err = service.UpdataOrderStatusTwo(chrg_bchno, adminUser.CurrentOrgId)
	if err == nil {
		c.ServeSuccessJSON(map[string]interface{}{
			"msg": "结算成功",
		})
	}
}

func (c *HisApiController) GetPrivateExpensesInfo() {
	order_id, _ := c.GetInt64("id", 0)
	his_patient_id, _ := c.GetInt64("his_patient_id", 0)
	order, _ := service.GetHisOrderByID(order_id)
	role, _ := service.GetAdminUserInfoByID(c.GetAdminUserInfo().CurrentOrgId, c.GetAdminUserInfo().AdminUser.Id)
	if order.ID == 0 {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeOrderParamWrong)
		return
	}
	miConfig, _ := service.FindMedicalInsuranceInfo(c.GetAdminUserInfo().CurrentOrgId)
	his, _ := service.GetHisPatientByIdThree(his_patient_id)
	org_id := c.GetAdminUserInfo().CurrentOrgId
	adminInfo, _ := service.GetAdminUserInfoByID(org_id, order.Creator)
	order_info, _ := service.GetHisOrderDetailByNumber(order.Number, org_id)
	patient, _ := service.GetPatientByID(org_id, order.PatientId)
	c.ServeSuccessJSON(map[string]interface{}{
		"order":         order,
		"order_info":    order_info,
		"patient":       patient,
		"admin_info":    adminInfo,
		"his":           his,
		"current_admin": role,
		"org_config":    miConfig,
	})

}

func (this *HisApiController) ChangeMedType() {
	med_type := this.GetString("med_type")
	id, _ := this.GetInt64("id")

	prescription, _ := service.GetPrescriptionById(id, this.GetAdminUserInfo().CurrentOrgId)
	prescription.MedType = med_type
	err := service.SaveHisPrescription(&prescription)

	if err == nil {
		this.ServeSuccessJSON(map[string]interface{}{
			"msg": "修改成功",
		})

	} else {

		this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeSystemError)
		return

	}

}

func (c *HisApiController) GetHisMonthChargePatientInfo() {
	patient_id, _ := c.GetInt64("patient_id")
	his_patient_id, _ := c.GetInt64("his_patient_id")
	record_date := c.GetString("record_date")
	start_time := c.GetString("start_time")
	end_time := c.GetString("end_time")
	order_status, _ := c.GetInt64("type", 0)
	p_type, _ := c.GetInt64("p_type", 0)
	order_id, _ := c.GetInt64("order_id", 0)

	timeLayout := "2006-01-02"
	loc, _ := time.LoadLocation("Local")
	theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", record_date+" 00:00:00", loc)
	if err != nil {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
		return
	}
	recordDateTime := theTime.Unix()

	startTime, err := time.ParseInLocation(timeLayout+" 15:04:05", start_time+" 00:00:00", loc)
	if err != nil {

	}
	startRecordDateTime := startTime.Unix()

	endTime, err := time.ParseInLocation(timeLayout+" 15:04:05", end_time+" 23:59:59", loc)
	if err != nil {

	}
	endRecordDateTime := endTime.Unix()

	admin := c.GetAdminUserInfo()
	his_patient_info, _ := service.GetNewHisPatientInfo(his_patient_id)
	xt_patient_info, _ := service.GetXTPatientInfo(admin.CurrentOrgId, patient_id)

	order, _ := service.GetHisOrderByID(order_id)

	var monthPrescriptions []*models.HisPrescription
	if order_status == 1 || order_status == 0 {
		monthPrescriptions, _ = service.GetUnChargeMonthHisPrescriptionThree(admin.CurrentOrgId, patient_id, startRecordDateTime, endRecordDateTime, p_type)
	} else if order_status == 2 {
		monthPrescriptions, _ = service.GetChargeMonthHisPrescriptionFive(admin.CurrentOrgId, patient_id, order.Number, p_type)
	}

	case_history, _ := service.GetHisPatientCaseHistoryInfo(admin.CurrentOrgId, patient_id, recordDateTime)
	patientPrescriptionInfo, _ := service.FindPatientPrescriptionInfo(admin.CurrentOrgId, patient_id, recordDateTime, p_type)

	lastPatientPrescriptionInfo, _ := service.FindLastPatientPrescriptionInfoTwo(admin.CurrentOrgId, patient_id, recordDateTime, p_type)

	doctors, _ := service.GetHisAdminUserDoctors(admin.CurrentOrgId)
	//获取所有科室信息
	department, _ := service.GetAllDepartMent(admin.CurrentOrgId)

	c.ServeSuccessJSON(map[string]interface{}{
		"his_info":            his_patient_info,
		"xt_info":             xt_patient_info,
		"case_history":        case_history,
		"info":                patientPrescriptionInfo,
		"last_info":           lastPatientPrescriptionInfo,
		"month_prescriptions": monthPrescriptions,
		"order":               order,
		"doctors":             doctors,
		"department":          department,
	})
	return
}

func (c *HisApiController) GetHisMonthPatientInfo() {
	patient_id, _ := c.GetInt64("patient_id")
	his_patient_id, _ := c.GetInt64("his_patient_id")
	record_date := c.GetString("record_date")
	number := c.GetString("number")
	start_time := c.GetString("start_time")
	end_time := c.GetString("end_time")
	p_type, _ := c.GetInt64("p_type")

	timeLayout := "2006-01-02"
	loc, _ := time.LoadLocation("Local")
	theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", record_date+" 00:00:00", loc)
	if err != nil {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
		return
	}
	recordDateTime := theTime.Unix()
	startTime, err := time.ParseInLocation(timeLayout+" 15:04:05", start_time+" 00:00:00", loc)
	if err != nil {

	}
	startRecordDateTime := startTime.Unix()
	endTime, err := time.ParseInLocation(timeLayout+" 15:04:05", end_time+" 23:59:59", loc)
	if err != nil {

	}
	endRecordDateTime := endTime.Unix()
	admin := c.GetAdminUserInfo()
	his_patient_info, _ := service.GetNewHisPatientInfoTwo(admin.CurrentOrgId, his_patient_id, recordDateTime)
	xt_patient_info, _ := service.GetXTPatientInfo(admin.CurrentOrgId, patient_id)

	count, _ := service.GetHisPatientCount(admin.CurrentOrgId, patient_id, recordDateTime)

	monthPrescriptions, _ := service.GetMonthHisPrescriptionTwo(admin.CurrentOrgId, patient_id, startRecordDateTime, endRecordDateTime, p_type)
	case_history, _ := service.GetHisPatientCaseHistoryInfo(admin.CurrentOrgId, patient_id, recordDateTime)
	patientPrescriptionInfo, _ := service.FindPatientPrescriptionInfo(admin.CurrentOrgId, patient_id, recordDateTime, p_type)
	lastPatientPrescriptionInfo, _ := service.FindLastPatientPrescriptionInfoTwo(admin.CurrentOrgId, patient_id, recordDateTime, p_type)

	order, _ := service.GetHisOrder(admin.CurrentOrgId, number, patient_id)
	doctors, _ := service.GetHisAdminUserDoctors(admin.CurrentOrgId)

	_, drugStockConfig := service.FindDrugStockAutomaticReduceRecordByOrgId(admin.CurrentOrgId)
	//获取所有科室信息
	department, _ := service.GetAllDepartMent(admin.CurrentOrgId)
	c.ServeSuccessJSON(map[string]interface{}{
		"his_info":            his_patient_info,
		"xt_info":             xt_patient_info,
		"case_history":        case_history,
		"info":                patientPrescriptionInfo,
		"month_prescriptions": monthPrescriptions,
		"order":               order,
		"doctors":             doctors,
		"department":          department,
		"count":               count,
		"drugStockConfig":     drugStockConfig,
		"last_info":           lastPatientPrescriptionInfo,
	})
	return

}
