package controllers

import (
	"encoding/json"
	"fmt"
	"math/rand"
	"reflect"
	"strconv"
	"strings"
	"syscall"
	"time"
	"unsafe"

	"XT_New/enums"
	"XT_New/models"
	"XT_New/service"
	"XT_New/utils"
	"github.com/astaxie/beego"
	"github.com/jinzhu/gorm"
	"github.com/mozillazg/go-pinyin"
	"github.com/shopspring/decimal"
)

type HisApiController struct {
	BaseAuthAPIController
}

func HisManagerApiRegistRouters() {
	beego.Router("/test/net", &HisApiController{}, "get:TestNet")

	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/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")

	beego.Router("/api/orders", &HisApiController{}, "get:GetAllOrder")

	beego.Router("/api/psn/ncds/delete", &HisApiController{}, "post:DeleteNCDS")
	beego.Router("/api/bailin/export", &PublicApiController{}, "get:GetBaiLinExportData")
	beego.Router("/api/his/gethistdoctoradviceinfo", &HisApiController{}, "get:GetHisDoctorAdviceInfo")

	beego.Router("/api/his/gethistdoctoradviceinfo", &HisApiController{}, "get:GetHisDoctorAdviceInfo")

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

	beego.Router("/api/test/get", &HisApiController{}, "get:GetTestOrder")

	beego.Router("/api/batch/settleaccount", &HisApiController{}, "get:GetBatchSettleAccounts")

	beego.Router("/api/monthhispatient", &HisApiController{}, "get:GetMonthHisPatient")
	beego.Router("/api/changeorderdesc", &HisApiController{}, "get:ChangeOrderDesc")
	beego.Router("/api/getfapiaonumber", &HisApiController{}, "get:GetFaPiaoNumber")
	beego.Router("/api/associationprescription", &HisApiController{}, "get:AssociationHisPrescription")
	beego.Router("/api/checkhispatient", &HisApiController{}, "get:CheckHisPatient")
	beego.Router("/api/hisorder/listtwo", &HisApiController{}, "get:GetHisOrderListTwo")

	beego.Router("/api/getallgoodinforlist", &HisApiController{}, "Get:GetAllGoodInforList")

	beego.Router("/api/savegoodlist", &HisApiController{}, "Post:SaveGoodList")

	beego.Router("/api/getgoodlist", &HisApiController{}, "Get:GetGoodList")

	beego.Router("/api/getgoodnamedetail", &HisApiController{}, "Get:GetGoodNameDetail")

	beego.Router("/api/updategoodlist", &HisApiController{}, "Post:UpdateGoodList")

	beego.Router("/api/deletegoodteam", &HisApiController{}, "Get:DeleteGoodTeam")

	beego.Router("/api/deletegood", &HisApiController{}, "Get:DeleteGood")

}

func (c *HisApiController) TestNet() {
	c.ServeSuccessJSON(map[string]interface{}{
		"msg": "成功",
	})
}

func (c *HisApiController) CheckHisPatient() {
	record_date := c.GetString("record_date")
	patient_id, _ := c.GetInt64("patient_id")

	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.GetHisPatientInfoTwo(adminInfo.CurrentOrgId, patient_id, recordDateTime)
	if len(patients) > 1 {
		ps, _ := service.GetHisPrescriptionByHisPatientID(recordDateTime, adminInfo.CurrentOrgId, patient_id)
		if len(ps) > 0 && len(ps[0].VMHisPrescription) > 0 {
			c.ServeSuccessJSON(map[string]interface{}{
				"status":         1,
				"msg":            "关联",
				"ps":             ps,
				"his_patient_id": patients[len(patients)-1].ID,
				"patient_id":     patients[len(patients)-1].PatientId,
			})
		} else {
			c.ServeSuccessJSON(map[string]interface{}{
				"status": 0,
				"msg":    "无需关联",
			})
		}
	} else {
		c.ServeSuccessJSON(map[string]interface{}{
			"status": 0,
			"msg":    "无需关联",
		})
		return
	}
}
func (c *HisApiController) AssociationHisPrescription() {
	record_date := c.GetString("record_date")
	his_patient_id, _ := c.GetInt64("his_patient_id")
	patient_id, _ := c.GetInt64("patient_id")
	p_ids := c.GetString("p_ids")
	p_ids_arr := strings.Split(p_ids, ",")
	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()
	his_patient, _ := service.GetHisPatientByIdThree(his_patient_id)
	if his_patient_id == 0 || his_patient.ID == 0 {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
		return
	}
	err = service.UpdateHisPrescriptionHisIDByPID(his_patient_id, patient_id, recordDateTime, c.GetAdminUserInfo().CurrentOrgId, p_ids_arr)
	if err == nil {
		c.ServeSuccessJSON(map[string]interface{}{
			"msg": "关联处方成功",
		})
		return
	} else {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeSystemError)
		return
	}
}

//func (c *HisApiController) AssociationHisPrescription() {
//	record_date, _ := c.GetInt64("record_date")
//	his_patient_id, _ := c.GetInt64("his_patient_id")
//	patient_id, _ := c.GetInt64("patient_id")
//	p_ids := c.GetString("p_ids")
//	p_ids_arr := strings.Split(p_ids, ",")
//	his_patient, _ := service.GetHisPatientByIdThree(his_patient_id)
//	if his_patient_id == 0 || his_patient.ID == 0 {
//		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
//		return
//	}
//	err := service.UpdateHisPrescriptionHisIDByPID(his_patient_id, patient_id, record_date, c.GetAdminUserInfo().CurrentOrgId, p_ids_arr)
//	if err == nil {
//		c.ServeSuccessJSON(map[string]interface{}{
//			"msg": "关联处方成功",
//		})
//		return
//	} else {
//		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeSystemError)
//		return
//	}
//}

func (c *HisApiController) GetFaPiaoNumber() {
	max_order, _ := service.GetLastHisOrderTwo(c.GetAdminUserInfo().CurrentOrgId)
	count, _ := strconv.ParseInt(max_order.FaPiaoNumber, 10, 64)
	fmt.Println(count)
	var zero string
	number := count + 1

	//if number >= 1000 {
	//        zero = "0000" + strconv.FormatInt(number, 10)
	//} else if number >= 10000 {
	//        zero = "000" + strconv.FormatInt(number, 10)
	//} else if number >= 100000 {
	//        zero = "00" + strconv.FormatInt(number, 10)
	//} else if number >= 1000000 {
	//        zero = "0" + strconv.FormatInt(number, 10)
	//} else {
	zero = "0" + strconv.FormatInt(number, 10)
	//}

	c.ServeSuccessJSON(map[string]interface{}{
		"fapiao_number": zero,
	})
	return
}

func (c *HisApiController) ChangeOrderDesc() {
	id, _ := c.GetInt64("id")
	desc := c.GetString("desc")
	change_type := c.GetString("change_type")
	order, _ := service.GetHisOrderByID(id)
	if order.ID == 0 {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
		return
	}
	switch change_type {
	case "oth_desc":
		order.OthDesc = desc
		break
	case "cash_pay":
		order.CashPay = desc

		break
	case "jifen_pay":
		order.JifenPay = desc

		break
	case "card_desc":
		order.CardDesc = desc

		break
	case "band_card_pay":
		order.BandCardPay = desc

		break
	case "ali_pay":
		order.AliPay = desc

		break
	case "wechat_pay":
		order.WechatPay = desc
		break
	case "fa_piao_number":
		order.FaPiaoNumber = desc
		break
	case "fa_piao_code":
		order.FaPiaoCode = desc
		break
	}
	err := service.SaveHisOrder(&order)
	if err == nil {
		c.ServeSuccessJSON(map[string]interface{}{
			"msg": "修改成功",
		})
		return

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

}
func (c *HisApiController) GetMonthHisPatient() {
	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)
	// 获取当前时间
	now := time.Now()
	// 获取本月的第一天
	firstDay := time.Date(now.Year(), now.Month(), 1, 0, 0, 0, 0, now.Location())
	// 获取下个月的第一天
	nextMonth := firstDay.AddDate(0, 1, 0)
	// 获取本月的最后一天
	lastDay := nextMonth.Add(-time.Nanosecond)
	tempPatients, _ = service.GetMonthNewAllUnChargeHisPatientList(adminInfo.CurrentOrgId, "", recordDateTime, firstDay.Unix(), lastDay.Unix())

	chargePatients, _ := service.GetChargeHisPatientList(adminInfo.CurrentOrgId, recordDateTime)

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

	if c.GetAdminUserInfo().CurrentOrgId == 10206 {

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

			}
			////过滤掉没挂号的
			//if len(item.HisPatient) > 0 {
			//}
		}

	} else {

		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,
		"chargePatients": chargePatients,
	})

}

func (c *HisApiController) GetBatchSettleAccounts() {
	order_ids := c.GetString("order_ids")
	admin_user_id, _ := c.GetInt64("admin_user_id")
	adminUser := c.GetAdminUserInfo()
	orders := strings.Split(order_ids, ",")
	var newOrders []models.Orders
	for _, item := range orders {
		order, _ := service.GetHisOrderByIDTenOne(item)
		his, _ := service.GetHisPatientByNumber(order.MdtrtId)
		orderInfos, _ := service.GetHisOrderInfoByNumberOne(order.Number)
		orderInfos_two, _ := service.GetHisOrderInfoByNumberTwo(order.Number)
		orderInfos = append(orderInfos, orderInfos_two...)
		his_hospital, _ := service.GetInHospitalRecordByNumber(order.MdtrtId)
		//diagnosisConfig, _ := service.FindDiagnoseById(his.Diagnosis)
		var diagnosis_ids []string
		if his.ID > 0 {
			diagnosis_ids = strings.Split(his.Diagnosis, ",")

		} else {
			diagnosis_ids = strings.Split(his_hospital.Diagnosis, ",")

		}
		patient, _ := service.GetPatientByIDTenTwo(adminUser.CurrentOrgId, order.PatientId)
		var dia_config []*models.HisXtDiagnoseConfig
		var name string
		for _, item := range diagnosis_ids {
			id, _ := strconv.ParseInt(item, 10, 64)
			diagnosisConfig, _ := service.FindDiagnoseById(id)
			dia_config = append(dia_config, diagnosisConfig)
			if len(name) == 0 {
				name = diagnosisConfig.ClassName

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

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

		var operationCostTotal float64 = 0         //手术费
		var operationCostSelfTotal float64 = 0     //手术费
		var operationCostPartSelfTotal float64 = 0 //手术费
		var operationSelfTotal float64 = 0         //床位部分项目自费
		var operationInscpTotal float64 = 0        //床位部分项目自费

		var otherCostTotal float64 = 0         //其他费用
		var otherCostSelfTotal float64 = 0     //其他费用
		var otherCostPartSelfTotal float64 = 0 //其他费用
		var otherSelfTotal float64 = 0         //床位部分项目自费
		var otherInscpTotal float64 = 0        //床位部分项目自费

		var materialCostTotal float64 = 0         //材料费
		var materialCostSelfTotal float64 = 0     //材料费
		var materialCostPartSelfTotal float64 = 0 //材料费
		var materialSelfTotal float64 = 0         //床位部分项目自费
		var materialInscpTotal float64 = 0        //床位部分项目自费

		var westernMedicineCostTotal float64 = 0         //西药费
		var westernMedicineCostSelfTotal float64 = 0     //西药费
		var westernMedicineCostPartSelfTotal float64 = 0 //西药费
		var westernMedicineSelfTotal float64 = 0         //床位部分项目自费
		var westernMedicineInscpTotal float64 = 0        //床位部分项目自费

		var chineseTraditionalMedicineCostTotal float64 = 0         //中成药
		var chineseTraditionalMedicineCostSelfTotal float64 = 0     //中成药
		var chineseTraditionalMedicineCostPartSelfTotal float64 = 0 //中成药
		var chineseTraditionalSelfTotal float64 = 0                 //床位部分项目自费
		var chineseTraditionalInscpTotal float64 = 0                //床位部分项目自费

		var checkCostTotal float64 = 0         //检查费
		var checkCostSelfTotal float64 = 0     //检查费
		var checkCostPartSelfTotal float64 = 0 //检查费
		var checkSelfTotal float64 = 0         //床位部分项目自费
		var checkInscpTotal float64 = 0        //床位部分项目自费

		var laboratoryCostTotal float64 = 0         //化验费
		var laboratoryCostSelfTotal float64 = 0     //化验费
		var laboratoryCostPartSelfTotal float64 = 0 //化验费
		var laboratorySelfTotal float64 = 0         //床位部分项目自费
		var laboratoryInscpTotal float64 = 0        //床位部分项目自费

		var treatCostTotal float64 = 0         //治疗费用
		var treatCostSelfTotal float64 = 0     //治疗费用
		var treatCostPartSelfTotal float64 = 0 //治疗费用
		var treatSelfTotal float64 = 0         //床位部分项目自费
		var treatInscpTotal float64 = 0        //床位部分项目自费

		decimal.DivisionPrecision = 2

		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()
				bedSelfTotal, _ = decimal.NewFromFloat(bedSelfTotal).Add(decimal.NewFromFloat(item.FulamtOwnpayAmt)).Float64()
				bedInscpTotal, _ = decimal.NewFromFloat(bedInscpTotal).Add(decimal.NewFromFloat(item.InscpScpAmt)).Float64()

			}

			if c.GetAdminUserInfo().CurrentOrgId == 10188 || c.GetAdminUserInfo().CurrentOrgId == 10217 {
				if item.MedChrgitmType == "03" { //检查费
					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()
					laboratorySelfTotal, _ = decimal.NewFromFloat(laboratorySelfTotal).Add(decimal.NewFromFloat(item.FulamtOwnpayAmt)).Float64()
					laboratoryInscpTotal, _ = decimal.NewFromFloat(laboratoryInscpTotal).Add(decimal.NewFromFloat(item.InscpScpAmt)).Float64()

				}
			} else {

				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()
					checkSelfTotal, _ = decimal.NewFromFloat(checkSelfTotal).Add(decimal.NewFromFloat(item.FulamtOwnpayAmt)).Float64()
					checkInscpTotal, _ = decimal.NewFromFloat(checkInscpTotal).Add(decimal.NewFromFloat(item.InscpScpAmt)).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()
				laboratorySelfTotal, _ = decimal.NewFromFloat(laboratorySelfTotal).Add(decimal.NewFromFloat(item.FulamtOwnpayAmt)).Float64()
				laboratoryInscpTotal, _ = decimal.NewFromFloat(laboratoryInscpTotal).Add(decimal.NewFromFloat(item.InscpScpAmt)).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()
				treatSelfTotal, _ = decimal.NewFromFloat(treatSelfTotal).Add(decimal.NewFromFloat(item.FulamtOwnpayAmt)).Float64()
				treatInscpTotal, _ = decimal.NewFromFloat(treatInscpTotal).Add(decimal.NewFromFloat(item.InscpScpAmt)).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()
				operationSelfTotal, _ = decimal.NewFromFloat(operationSelfTotal).Add(decimal.NewFromFloat(item.FulamtOwnpayAmt)).Float64()
				operationInscpTotal, _ = decimal.NewFromFloat(operationInscpTotal).Add(decimal.NewFromFloat(item.InscpScpAmt)).Float64()

			}

			if item.MedChrgitmType == "08" || item.MedChrgitmType == "1402" || item.MedChrgitmType == "1403" || item.MedChrgitmType == "1401" { //材料费
				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()
				materialSelfTotal, _ = decimal.NewFromFloat(materialSelfTotal).Add(decimal.NewFromFloat(item.FulamtOwnpayAmt)).Float64()
				materialInscpTotal, _ = decimal.NewFromFloat(materialInscpTotal).Add(decimal.NewFromFloat(item.InscpScpAmt)).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()
				westernMedicineSelfTotal, _ = decimal.NewFromFloat(westernMedicineSelfTotal).Add(decimal.NewFromFloat(item.FulamtOwnpayAmt)).Float64()
				westernMedicineInscpTotal, _ = decimal.NewFromFloat(westernMedicineInscpTotal).Add(decimal.NewFromFloat(item.InscpScpAmt)).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()
				chineseTraditionalSelfTotal, _ = decimal.NewFromFloat(chineseTraditionalSelfTotal).Add(decimal.NewFromFloat(item.FulamtOwnpayAmt)).Float64()
				chineseTraditionalInscpTotal, _ = decimal.NewFromFloat(chineseTraditionalInscpTotal).Add(decimal.NewFromFloat(item.InscpScpAmt)).Float64()

			}

			if item.MedChrgitmType == "14" || item.MedChrgitmType == "0" || item.MedChrgitmType == "12" || item.MedChrgitmType == "02" { //其他费
				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()
				otherSelfTotal, _ = decimal.NewFromFloat(otherSelfTotal).Add(decimal.NewFromFloat(item.FulamtOwnpayAmt)).Float64()
				otherInscpTotal, _ = decimal.NewFromFloat(otherInscpTotal).Add(decimal.NewFromFloat(item.InscpScpAmt)).Float64()

			}
		}

		miConfig, _ := service.FindMedicalInsuranceInfo(adminUser.CurrentOrgId)

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

		doctor_info, _ := service.GetAdminUserInfoByID(adminUser.CurrentOrgId, his_hospital.Doctor)

		roles, _ := service.GetAdminUserInfoByID(adminUser.CurrentOrgId, admin_user_id)

		var doctor_name string
		if roles.ID == 0 {
			doctor_name = "管理员"
		} else {
			doctor_name = roles.UserName
		}

		yiliao_leibie := ""

		switch order.MedType {
		case "11":
			yiliao_leibie = "普通门诊"
			break
		case "12":
			yiliao_leibie = "门诊挂号"
			break
		case "13":
			yiliao_leibie = "急诊"
			break
		case "14":
			yiliao_leibie = "门诊特殊病"
			break
		case "15":
			yiliao_leibie = "门诊统筹"
			break
		case "16":
			yiliao_leibie = "门诊慢性病"
			break
		case "21":
			yiliao_leibie = "普通住院"
			break
		}
		var newOrder models.Orders

		newOrder.Diagnosis = name
		newOrder.OrderInfos = orderInfos
		newOrder.Number = order.MdtrtId
		newOrder.Date = order.SettleAccountsDate
		newOrder.ChargeAdmin = charge_admin
		newOrder.PrintorAdmin = printor_admin
		newOrder.Order = order
		newOrder.BedCostTotal = bedCostTotal
		newOrder.BedCostSelfTotal = bedCostSelfTotal
		newOrder.BedCostPartSelfTotal = bedCostPartSelfTotal
		newOrder.BedSelfTotal = bedSelfTotal
		newOrder.BedInscpTotal = bedInscpTotal
		newOrder.OperationCostTotal = operationCostTotal
		newOrder.OperationCostSelfTotal = operationCostSelfTotal
		newOrder.OperationCostPartSelfTotal = operationCostPartSelfTotal
		newOrder.OperationSelfTotal = operationSelfTotal
		newOrder.OperationInscpTotal = operationInscpTotal
		newOrder.OtherCostTotal = otherCostTotal
		newOrder.OtherCostSelfTotal = otherCostSelfTotal
		newOrder.OtherCostPartSelfTotal = otherCostPartSelfTotal
		newOrder.OtherSelfTotal = otherSelfTotal
		newOrder.OtherInscpTotal = otherInscpTotal

		newOrder.MaterialCostTotal = materialCostTotal
		newOrder.MaterialCostSelfTotal = materialCostSelfTotal
		newOrder.MaterialCostPartSelfTotal = materialCostPartSelfTotal
		newOrder.MaterialSelfTotal = materialSelfTotal
		newOrder.MaterialInscpTotal = materialInscpTotal

		newOrder.WesternMedicineCostTotal = westernMedicineCostTotal
		newOrder.WesternMedicineCostSelfTotal = westernMedicineCostSelfTotal
		newOrder.WesternMedicineCostPartSelfTotal = westernMedicineCostPartSelfTotal
		newOrder.WesternMedicineSelfTotal = westernMedicineSelfTotal
		newOrder.WesternMedicineInscpTotal = westernMedicineInscpTotal

		newOrder.ChineseTraditionalMedicineCostTotal = chineseTraditionalMedicineCostTotal
		newOrder.ChineseTraditionalMedicineCostSelfTotal = chineseTraditionalMedicineCostSelfTotal
		newOrder.ChineseTraditionalMedicineCostPartSelfTotal = chineseTraditionalMedicineCostPartSelfTotal
		newOrder.ChineseTraditionalSelfTotal = chineseTraditionalSelfTotal
		newOrder.ChineseTraditionalInscpTotal = chineseTraditionalInscpTotal

		newOrder.CheckCostTotal = checkCostTotal
		newOrder.CheckCostSelfTotal = checkCostSelfTotal
		newOrder.CheckCostPartSelfTotal = checkCostPartSelfTotal
		newOrder.CheckSelfTotal = checkSelfTotal
		newOrder.CheckInscpTotal = checkInscpTotal

		newOrder.LaboratoryCostTotal = laboratoryCostTotal
		newOrder.LaboratoryCostSelfTotal = laboratoryCostSelfTotal
		newOrder.LaboratoryCostPartSelfTotal = laboratoryCostPartSelfTotal
		newOrder.LaboratorySelfTotal = laboratorySelfTotal
		newOrder.LaboratoryInscpTotal = laboratoryInscpTotal

		newOrder.TreatCostTotal = treatCostTotal
		newOrder.TreatCostSelfTotal = treatCostSelfTotal
		newOrder.TreatCostPartSelfTotal = treatCostPartSelfTotal
		newOrder.TreatSelfTotal = treatSelfTotal
		newOrder.TreatInscpTotal = treatInscpTotal

		newOrder.DoctorInfo = doctor_info
		newOrder.DoctorName = doctor_name
		newOrder.HealthCardNo = order.PsnNo
		newOrder.YiliaoLeibie = yiliao_leibie
		newOrder.Patient = patient
		newOrder.OrgName = miConfig.OrgName
		newOrder.OrgCode = miConfig.Code
		newOrder.OrderNumber = order.Number
		newOrder.HisPatient = his
		newOrder.DiaConfig = dia_config

		newOrders = append(newOrders, newOrder)
	}
	c.ServeSuccessJSON(map[string]interface{}{
		"orders": newOrders,
	})
}

func (c *HisApiController) GetTestOrder() {
	order_id, _ := c.GetInt64("order_id")
	admin_user_id, _ := c.GetInt64("admin_user_id")
	adminUser := c.GetAdminUserInfo()
	order, _ := service.GetHisOrderByID(order_id)
	orderInfos, _ := service.GetHisOrderInfoByNumberOne(order.Number)
	orderInfos_two, _ := service.GetHisOrderInfoByNumberTwo(order.Number)
	orderInfos = append(orderInfos, orderInfos_two...)
	his_hospital, _ := service.GetInHospitalRecordByNumber(order.MdtrtId)
	patient, _ := service.GetPatientByIDTwo(adminUser.CurrentOrgId, order.PatientId)
	var dia_config []*models.HisXtDiagnoseConfig
	var name string

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

	var operationCostTotal float64 = 0         //手术费
	var operationCostSelfTotal float64 = 0     //手术费
	var operationCostPartSelfTotal float64 = 0 //手术费
	var operationSelfTotal float64 = 0         //床位部分项目自费
	var operationInscpTotal float64 = 0        //床位部分项目自费

	var otherCostTotal float64 = 0         //其他费用
	var otherCostSelfTotal float64 = 0     //其他费用
	var otherCostPartSelfTotal float64 = 0 //其他费用
	var otherSelfTotal float64 = 0         //床位部分项目自费
	var otherInscpTotal float64 = 0        //床位部分项目自费

	var materialCostTotal float64 = 0         //材料费
	var materialCostSelfTotal float64 = 0     //材料费
	var materialCostPartSelfTotal float64 = 0 //材料费
	var materialSelfTotal float64 = 0         //床位部分项目自费
	var materialInscpTotal float64 = 0        //床位部分项目自费

	var westernMedicineCostTotal float64 = 0         //西药费
	var westernMedicineCostSelfTotal float64 = 0     //西药费
	var westernMedicineCostPartSelfTotal float64 = 0 //西药费
	var westernMedicineSelfTotal float64 = 0         //床位部分项目自费
	var westernMedicineInscpTotal float64 = 0        //床位部分项目自费

	var chineseTraditionalMedicineCostTotal float64 = 0         //中成药
	var chineseTraditionalMedicineCostSelfTotal float64 = 0     //中成药
	var chineseTraditionalMedicineCostPartSelfTotal float64 = 0 //中成药
	var chineseTraditionalSelfTotal float64 = 0                 //床位部分项目自费
	var chineseTraditionalInscpTotal float64 = 0                //床位部分项目自费

	var checkCostTotal float64 = 0         //检查费
	var checkCostSelfTotal float64 = 0     //检查费
	var checkCostPartSelfTotal float64 = 0 //检查费
	var checkSelfTotal float64 = 0         //床位部分项目自费
	var checkInscpTotal float64 = 0        //床位部分项目自费

	var laboratoryCostTotal float64 = 0         //化验费
	var laboratoryCostSelfTotal float64 = 0     //化验费
	var laboratoryCostPartSelfTotal float64 = 0 //化验费
	var laboratorySelfTotal float64 = 0         //床位部分项目自费
	var laboratoryInscpTotal float64 = 0        //床位部分项目自费

	var treatCostTotal float64 = 0         //治疗费用
	var treatCostSelfTotal float64 = 0     //治疗费用
	var treatCostPartSelfTotal float64 = 0 //治疗费用
	var treatSelfTotal float64 = 0         //床位部分项目自费
	var treatInscpTotal float64 = 0        //床位部分项目自费

	decimal.DivisionPrecision = 2

	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()
			bedSelfTotal, _ = decimal.NewFromFloat(bedSelfTotal).Add(decimal.NewFromFloat(item.FulamtOwnpayAmt)).Float64()
			bedInscpTotal, _ = decimal.NewFromFloat(bedInscpTotal).Add(decimal.NewFromFloat(item.InscpScpAmt)).Float64()

		}

		if c.GetAdminUserInfo().CurrentOrgId == 10188 || c.GetAdminUserInfo().CurrentOrgId == 10217 {
			if item.MedChrgitmType == "03" { //检查费
				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()
				laboratorySelfTotal, _ = decimal.NewFromFloat(laboratorySelfTotal).Add(decimal.NewFromFloat(item.FulamtOwnpayAmt)).Float64()
				laboratoryInscpTotal, _ = decimal.NewFromFloat(laboratoryInscpTotal).Add(decimal.NewFromFloat(item.InscpScpAmt)).Float64()

			}
		} else {

			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()
				checkSelfTotal, _ = decimal.NewFromFloat(checkSelfTotal).Add(decimal.NewFromFloat(item.FulamtOwnpayAmt)).Float64()
				checkInscpTotal, _ = decimal.NewFromFloat(checkInscpTotal).Add(decimal.NewFromFloat(item.InscpScpAmt)).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()
			laboratorySelfTotal, _ = decimal.NewFromFloat(laboratorySelfTotal).Add(decimal.NewFromFloat(item.FulamtOwnpayAmt)).Float64()
			laboratoryInscpTotal, _ = decimal.NewFromFloat(laboratoryInscpTotal).Add(decimal.NewFromFloat(item.InscpScpAmt)).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()
			treatSelfTotal, _ = decimal.NewFromFloat(treatSelfTotal).Add(decimal.NewFromFloat(item.FulamtOwnpayAmt)).Float64()
			treatInscpTotal, _ = decimal.NewFromFloat(treatInscpTotal).Add(decimal.NewFromFloat(item.InscpScpAmt)).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()
			operationSelfTotal, _ = decimal.NewFromFloat(operationSelfTotal).Add(decimal.NewFromFloat(item.FulamtOwnpayAmt)).Float64()
			operationInscpTotal, _ = decimal.NewFromFloat(operationInscpTotal).Add(decimal.NewFromFloat(item.InscpScpAmt)).Float64()

		}

		if item.MedChrgitmType == "08" || item.MedChrgitmType == "1402" || item.MedChrgitmType == "1403" || item.MedChrgitmType == "1401" { //材料费
			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()
			materialSelfTotal, _ = decimal.NewFromFloat(materialSelfTotal).Add(decimal.NewFromFloat(item.FulamtOwnpayAmt)).Float64()
			materialInscpTotal, _ = decimal.NewFromFloat(materialInscpTotal).Add(decimal.NewFromFloat(item.InscpScpAmt)).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()
			westernMedicineSelfTotal, _ = decimal.NewFromFloat(westernMedicineSelfTotal).Add(decimal.NewFromFloat(item.FulamtOwnpayAmt)).Float64()
			westernMedicineInscpTotal, _ = decimal.NewFromFloat(westernMedicineInscpTotal).Add(decimal.NewFromFloat(item.InscpScpAmt)).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()
			chineseTraditionalSelfTotal, _ = decimal.NewFromFloat(chineseTraditionalSelfTotal).Add(decimal.NewFromFloat(item.FulamtOwnpayAmt)).Float64()
			chineseTraditionalInscpTotal, _ = decimal.NewFromFloat(chineseTraditionalInscpTotal).Add(decimal.NewFromFloat(item.InscpScpAmt)).Float64()

		}

		if item.MedChrgitmType == "14" || item.MedChrgitmType == "0" || item.MedChrgitmType == "12" || item.MedChrgitmType == "02" { //其他费
			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()
			otherSelfTotal, _ = decimal.NewFromFloat(otherSelfTotal).Add(decimal.NewFromFloat(item.FulamtOwnpayAmt)).Float64()
			otherInscpTotal, _ = decimal.NewFromFloat(otherInscpTotal).Add(decimal.NewFromFloat(item.InscpScpAmt)).Float64()

		}
	}

	miConfig, _ := service.FindMedicalInsuranceInfo(adminUser.CurrentOrgId)
	printor_admin, _ := service.GetAdminUserInfoByID(adminUser.CurrentOrgId, admin_user_id)
	charge_admin, _ := service.GetAdminUserInfoByID(adminUser.CurrentOrgId, order.Creator)
	doctor_info, _ := service.GetAdminUserInfoByID(adminUser.CurrentOrgId, his_hospital.Doctor)
	roles, _ := service.GetAdminUserInfoByID(adminUser.CurrentOrgId, admin_user_id)
	var doctor_name string
	if roles.ID == 0 {
		doctor_name = "管理员"
	} else {
		doctor_name = roles.UserName
	}
	yiliao_leibie := ""
	switch order.MedType {
	case "11":
		yiliao_leibie = "普通门诊"
		break
	case "12":
		yiliao_leibie = "门诊挂号"
		break
	case "13":
		yiliao_leibie = "急诊"
		break
	case "14":
		yiliao_leibie = "门诊特殊病"
		break
	case "15":
		yiliao_leibie = "门诊统筹"
		break
	case "16":
		yiliao_leibie = "门诊慢性病"
		break
	case "21":
		yiliao_leibie = "普通住院"
		break
	}
	c.ServeSuccessJSON(map[string]interface{}{
		"diagnosis":            name,
		"order_infos":          orderInfos,
		"number":               order.MdtrtId,
		"date":                 order.SettleAccountsDate,
		"charge_admin":         charge_admin,
		"printor_admin":        printor_admin,
		"info":                 order,
		"order":                order,
		"bedCostTotal":         bedCostTotal,
		"bedCostSelfTotal":     bedCostSelfTotal,
		"bedCostPartSelfTotal": bedCostPartSelfTotal,
		"bedSelfTotal":         bedSelfTotal,
		"bedInscpTotal":        bedInscpTotal,

		"operationCostTotal":         operationCostTotal,
		"operationCostSelfTotal":     operationCostSelfTotal,
		"operationCostPartSelfTotal": operationCostPartSelfTotal,
		"operationSelfTotal":         operationSelfTotal,
		"operationInscpTotal":        operationInscpTotal,
		"otherCostTotal":             otherCostTotal,
		"otherCostSelfTotal":         otherCostSelfTotal,
		"otherCostPartSelfTotal":     otherCostPartSelfTotal,
		"otherSelfTotal":             otherSelfTotal,
		"otherInscpTotal":            otherInscpTotal,
		"materialCostTotal":          materialCostTotal,
		"materialCostSelfTotal":      materialCostSelfTotal,
		"materialCostPartSelfTotal":  materialCostPartSelfTotal,
		"materialSelfTotal":          materialSelfTotal,
		"materialInscpTotal":         materialInscpTotal,

		"westernMedicineCostTotal":         westernMedicineCostTotal,
		"westernMedicineCostSelfTotal":     westernMedicineCostSelfTotal,
		"westernMedicineCostPartSelfTotal": westernMedicineCostPartSelfTotal,
		"westernMedicineSelfTotal":         westernMedicineSelfTotal,
		"westernMedicineInscpTotal":        westernMedicineInscpTotal,

		"chineseTraditionalMedicineCostTotal":         chineseTraditionalMedicineCostTotal,
		"chineseTraditionalMedicineCostSelfTotal":     chineseTraditionalMedicineCostSelfTotal,
		"chineseTraditionalMedicineCostPartSelfTotal": chineseTraditionalMedicineCostPartSelfTotal,
		"chineseTraditionalSelfTotal":                 chineseTraditionalSelfTotal,
		"chineseTraditionalInscpTotal":                chineseTraditionalInscpTotal,

		"checkCostTotal":         checkCostTotal,
		"checkCostSelfTotal":     checkCostSelfTotal,
		"checkCostPartSelfTotal": checkCostPartSelfTotal,
		"checkSelfTotal":         checkSelfTotal,
		"checkInscpTotal":        checkInscpTotal,

		"laboratoryCostTotal":         laboratoryCostTotal,
		"laboratoryCostSelfTotal":     laboratoryCostSelfTotal,
		"laboratoryCostPartSelfTotal": laboratoryCostPartSelfTotal,
		"laboratorySelfTotal":         laboratorySelfTotal,
		"laboratoryInscpTotal":        laboratoryInscpTotal,

		"treatCostTotal":         treatCostTotal,
		"treatCostSelfTotal":     treatCostSelfTotal,
		"treatCostPartSelfTotal": treatCostPartSelfTotal,
		"treatSelfTotal":         treatSelfTotal,
		"treatInscpTotal":        treatInscpTotal,

		"doctor_info":    doctor_info,
		"doctor_name":    doctor_name,
		"health_card_no": order.PsnNo,
		"yiliao_leibie":  yiliao_leibie,
		"patient":        patient,
		"org_name":       miConfig.OrgName,
		"org_code":       miConfig.Code,
		"order_number":   order.Number,
		"his_hospital":   his_hospital,
		"dia_config":     dia_config,
	})

}

type CustomFundPay struct {
	FundPayType string  `json:"fund_pay_type"`
	FundPayamt  float64 `json:"fund_payamt"`
	InscpScpAmt float64 `json:"inscp_scp_amt"`
}

func (c *PublicApiController) GetBaiLinExportData() {
	data := service.GetBaiLinOrderData()
	fmt.Println(len(data))
	var new_data []*models.NewCustomHisOrder
	for _, item := range data {
		if item.NewCustomHisOrderInfo.NewCustomHisPrescriptionProject.ID != 0 {
			new_data = append(new_data, item)
		}

	}
	fmt.Println(len(new_data))

	c.ServeSuccessJSON(map[string]interface{}{
		"list": new_data,
	})
}

func (c *HisApiController) GetHisUnChargePatientList() {
	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()
	var tempPatients []*service.NewTempPatients
	//tempPatients, _ := service.GetAllChargeHisPatientList(adminInfo.CurrentOrgId, "", recordDateTime)
	tempPatients, _ = service.GetNewAllUnChargeHisPatientList(adminInfo.CurrentOrgId, "", recordDateTime, sch_type)
	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)
	his_hospital, _ := service.GetInHospitalRecordByNumber(order.MdtrtId)

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

	//var config []*models.HisXtDiagnoseConfig

	var name string
	if order.PType == 1 {
		diagnosis_ids := strings.Split(his_hospital.Diagnosis, ",")
		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
			}
		}
	} else {
		diagnosis_ids := strings.Split(his.Diagnosis, ",")

		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
			}
		}
	}

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

	var operationCostTotal float64 = 0         //手术费
	var operationCostSelfTotal float64 = 0     //手术费
	var operationCostPartSelfTotal float64 = 0 //手术费
	var operationSelfTotal float64 = 0         //床位部分项目自费
	var operationInscpTotal float64 = 0        //床位部分项目自费

	var otherCostTotal float64 = 0         //其他费用
	var otherCostSelfTotal float64 = 0     //其他费用
	var otherCostPartSelfTotal float64 = 0 //其他费用
	//var otherSelfTotal float64 = 0         //床位部分项目自费
	//var otherInscpTotal float64 = 0        //床位部分项目自费

	var materialCostTotal float64 = 0         //材料费
	var materialCostSelfTotal float64 = 0     //材料费
	var materialCostPartSelfTotal float64 = 0 //材料费
	var materialSelfTotal float64 = 0         //床位部分项目自费
	var materialInscpTotal float64 = 0        //床位部分项目自费

	var westernMedicineCostTotal float64 = 0         //西药费
	var westernMedicineCostSelfTotal float64 = 0     //西药费
	var westernMedicineCostPartSelfTotal float64 = 0 //西药费
	var westernMedicineSelfTotal float64 = 0         //床位部分项目自费
	var westernMedicineInscpTotal float64 = 0        //床位部分项目自费

	var chineseTraditionalMedicineCostTotal float64 = 0         //中成药
	var chineseTraditionalMedicineCostSelfTotal float64 = 0     //中成药
	var chineseTraditionalMedicineCostPartSelfTotal float64 = 0 //中成药
	var chineseTraditionalSelfTotal float64 = 0                 //床位部分项目自费
	var chineseTraditionalInscpTotal float64 = 0                //床位部分项目自费

	var checkCostTotal float64 = 0         //检查费
	var checkCostSelfTotal float64 = 0     //检查费
	var checkCostPartSelfTotal float64 = 0 //检查费
	var checkSelfTotal float64 = 0         //床位部分项目自费
	var checkInscpTotal float64 = 0        //床位部分项目自费

	var laboratoryCostTotal float64 = 0         //化验费
	var laboratoryCostSelfTotal float64 = 0     //化验费
	var laboratoryCostPartSelfTotal float64 = 0 //化验费
	var laboratorySelfTotal float64 = 0         //床位部分项目自费
	var laboratoryInscpTotal float64 = 0        //床位部分项目自费

	var treatCostTotal float64 = 0         //治疗费用
	var treatCostSelfTotal float64 = 0     //治疗费用
	var treatCostPartSelfTotal float64 = 0 //治疗费用
	var treatSelfTotal float64 = 0         //床位部分项目自费
	var treatInscpTotal float64 = 0        //床位部分项目自费

	var huliCostTotal float64 = 0         //治疗费用
	var huliCostSelfTotal float64 = 0     //治疗费用
	var huliCostPartSelfTotal float64 = 0 //治疗费用
	var huliSelfTotal float64 = 0         //床位部分项目自费
	var huliInscpTotal float64 = 0        //床位部分项目自费

	var zcCostTotal float64 = 0         //治疗费用
	var zcCostSelfTotal float64 = 0     //治疗费用
	var zcCostPartSelfTotal float64 = 0 //治疗费用
	var zcSelfTotal float64 = 0         //床位部分项目自费
	var zcInscpTotal float64 = 0        //床位部分项目自费

	var zhenChaCostTotal float64 = 0 //其他费用
	//var zhenChaCostPartSelfTotal float64 = 0 //其他费用

	decimal.DivisionPrecision = 2

	for _, item := range orderInfos {
		//item.FulamtOwnpayAmt = item.DetItemFeeSumamt
		if c.GetAdminUserInfo().CurrentOrgId != 10726 {
			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 {
					if c.GetAdminUserInfo().CurrentOrgId == 10215 {
						fmt.Println("CostClassify")
						fmt.Println(item.HisPrescriptionProject.VMHisProject.CostClassify)
						switch item.HisPrescriptionProject.VMHisProject.CostClassify {
						case 0:
							item.MedChrgitmType = "0"
							break
						case 1:
							item.MedChrgitmType = "14"
							break
						case 2:
							item.MedChrgitmType = "05"

							break
						case 3:
							item.MedChrgitmType = "03"

							break
						case 4:
							item.MedChrgitmType = "03"

							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
						case 10:
							item.MedChrgitmType = "14"
							break
						case 11:
							item.MedChrgitmType = "06"
							break
						case 12:
							item.MedChrgitmType = "12"
							break
						case 13:
							item.MedChrgitmType = "01"
							break
						case 14:
							item.MedChrgitmType = "04"
							break
						case 15:
							item.MedChrgitmType = "14"
							break
						case 101:
							item.MedChrgitmType = "04"
							break

						}

					} else {
						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
						case 101:
							item.MedChrgitmType = "04"
							break
						default:
							item.MedChrgitmType = "14"
							break
						}
					}
				} else if item.HisPrescriptionProject.Type == 3 {
					item.MedChrgitmType = "08"
				}
			}
		}
	}
	if order.IsMedicineInsurance != 1 {
		order.PsnCashPay = order.MedfeeSumamt
	}

	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()
			bedSelfTotal, _ = decimal.NewFromFloat(bedSelfTotal).Add(decimal.NewFromFloat(item.FulamtOwnpayAmt)).Float64()
			bedInscpTotal, _ = decimal.NewFromFloat(bedInscpTotal).Add(decimal.NewFromFloat(item.InscpScpAmt)).Float64()

		}
		if item.MedChrgitmType == "02" { //诊察费
			zhenChaCostTotal, _ = decimal.NewFromFloat(zhenChaCostTotal).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
			//zhenChaCostSelfTotal = zhenChaCostTotal
		}

		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()
			checkSelfTotal, _ = decimal.NewFromFloat(checkSelfTotal).Add(decimal.NewFromFloat(item.FulamtOwnpayAmt)).Float64()
			checkInscpTotal, _ = decimal.NewFromFloat(checkInscpTotal).Add(decimal.NewFromFloat(item.InscpScpAmt)).Float64()

		}

		if item.MedChrgitmType == "02" { //检查费
			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()
			checkSelfTotal, _ = decimal.NewFromFloat(checkSelfTotal).Add(decimal.NewFromFloat(item.FulamtOwnpayAmt)).Float64()
			checkInscpTotal, _ = decimal.NewFromFloat(checkInscpTotal).Add(decimal.NewFromFloat(item.InscpScpAmt)).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()
			laboratorySelfTotal, _ = decimal.NewFromFloat(laboratorySelfTotal).Add(decimal.NewFromFloat(item.FulamtOwnpayAmt)).Float64()
			laboratoryInscpTotal, _ = decimal.NewFromFloat(laboratoryInscpTotal).Add(decimal.NewFromFloat(item.InscpScpAmt)).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()
			treatSelfTotal, _ = decimal.NewFromFloat(treatSelfTotal).Add(decimal.NewFromFloat(item.FulamtOwnpayAmt)).Float64()
			treatInscpTotal, _ = decimal.NewFromFloat(treatInscpTotal).Add(decimal.NewFromFloat(item.InscpScpAmt)).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()

			operationSelfTotal, _ = decimal.NewFromFloat(operationSelfTotal).Add(decimal.NewFromFloat(item.FulamtOwnpayAmt)).Float64()
			operationInscpTotal, _ = decimal.NewFromFloat(operationInscpTotal).Add(decimal.NewFromFloat(item.InscpScpAmt)).Float64()

		}

		if item.MedChrgitmType == "08" || item.MedChrgitmType == "1402" || item.MedChrgitmType == "1403" || item.MedChrgitmType == "1401" { //材料费
			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()

			materialSelfTotal, _ = decimal.NewFromFloat(materialSelfTotal).Add(decimal.NewFromFloat(item.FulamtOwnpayAmt)).Float64()
			materialInscpTotal, _ = decimal.NewFromFloat(materialInscpTotal).Add(decimal.NewFromFloat(item.InscpScpAmt)).Float64()

		}

		if item.MedChrgitmType == "09" { //西药费
			fmt.Println("FulamtOwnpayAmt")

			fmt.Println(item.FulamtOwnpayAmt)
			fmt.Println("FulamtOwnpayAmt")

			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()

			westernMedicineSelfTotal, _ = decimal.NewFromFloat(westernMedicineSelfTotal).Add(decimal.NewFromFloat(item.FulamtOwnpayAmt)).Float64()
			westernMedicineInscpTotal, _ = decimal.NewFromFloat(westernMedicineInscpTotal).Add(decimal.NewFromFloat(item.InscpScpAmt)).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()

			chineseTraditionalSelfTotal, _ = decimal.NewFromFloat(chineseTraditionalSelfTotal).Add(decimal.NewFromFloat(item.FulamtOwnpayAmt)).Float64()
			chineseTraditionalInscpTotal, _ = decimal.NewFromFloat(chineseTraditionalInscpTotal).Add(decimal.NewFromFloat(item.InscpScpAmt)).Float64()

		}

		if item.MedChrgitmType == "14" || item.MedChrgitmType == "0" || item.MedChrgitmType == "12" || item.MedChrgitmType == "02" { //其他费
			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()
		}

		if item.MedChrgitmType == "02" { //其他费
			zcCostTotal, _ = decimal.NewFromFloat(zcCostTotal).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
			zcCostSelfTotal, _ = decimal.NewFromFloat(zcCostSelfTotal).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
			zcCostPartSelfTotal, _ = decimal.NewFromFloat(zcCostPartSelfTotal).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()
			zcSelfTotal, _ = decimal.NewFromFloat(zcSelfTotal).Add(decimal.NewFromFloat(item.FulamtOwnpayAmt)).Float64()
			zcInscpTotal, _ = decimal.NewFromFloat(zcInscpTotal).Add(decimal.NewFromFloat(item.InscpScpAmt)).Float64()

		}

		if item.MedChrgitmType == "07" { //其他费
			huliCostTotal, _ = decimal.NewFromFloat(huliCostTotal).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
			huliCostSelfTotal, _ = decimal.NewFromFloat(huliCostSelfTotal).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
			huliCostPartSelfTotal, _ = decimal.NewFromFloat(huliCostPartSelfTotal).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()
			huliSelfTotal, _ = decimal.NewFromFloat(huliSelfTotal).Add(decimal.NewFromFloat(item.FulamtOwnpayAmt)).Float64()
			huliInscpTotal, _ = decimal.NewFromFloat(huliInscpTotal).Add(decimal.NewFromFloat(item.InscpScpAmt)).Float64()

		}
	}

	org, _ := service.GetOrgById(adminUser.CurrentOrgId)
	printor_admin, _ := service.GetAdminUserInfoByID(adminUser.CurrentOrgId, admin_user_id)
	charge_admin, _ := service.GetAdminUserInfoByID(adminUser.CurrentOrgId, order.Creator)
	var dia_config []*models.HisXtDiagnoseConfig
	var diagnosis_ids []string
	if his.ID > 0 {
		diagnosis_ids = strings.Split(his.Diagnosis, ",")

	} else {
		diagnosis_ids = strings.Split(his_hospital.Diagnosis, ",")

	}

	for _, item := range diagnosis_ids {
		id, _ := strconv.ParseInt(item, 10, 64)
		diagnosisConfig, _ := service.FindDiagnoseById(id)
		dia_config = append(dia_config, diagnosisConfig)
	}

	var rf []CustomFundPay
	json.Unmarshal([]byte(order.SetlDetail), &rf)
	patient, _ := service.GetFaPiaoPatientByID(order.UserOrgId, order.PatientId)
	c.ServeSuccessJSON(map[string]interface{}{
		"patient":              patient,
		"order_infos":          orderInfos,
		"diagnosis":            name,
		"bedCostTotal":         bedCostTotal,
		"bedCostSelfTotal":     bedCostSelfTotal,
		"bedCostPartSelfTotal": bedCostPartSelfTotal,

		"bedSelfTotal":  bedSelfTotal,
		"bedInscpTotal": bedInscpTotal,

		"operationCostTotal":         operationCostTotal,
		"operationCostSelfTotal":     operationCostSelfTotal,
		"operationCostPartSelfTotal": operationCostPartSelfTotal,
		"operationInscpTotal":        operationInscpTotal,
		"operationSelfTotal":         operationSelfTotal,

		"otherCostTotal":            otherCostTotal,
		"otherCostSelfTotal":        otherCostSelfTotal,
		"otherCostPartSelfTotal":    otherCostPartSelfTotal,
		"materialCostTotal":         materialCostTotal,
		"materialCostSelfTotal":     materialCostSelfTotal,
		"materialCostPartSelfTotal": materialCostPartSelfTotal,
		"materialSelfTotal":         materialSelfTotal,
		"materialInscpTotal":        materialInscpTotal,

		"westernMedicineCostTotal":         westernMedicineCostTotal,
		"westernMedicineCostSelfTotal":     westernMedicineCostSelfTotal,
		"westernMedicineCostPartSelfTotal": westernMedicineCostPartSelfTotal,
		"westernMedicineSelfTotal":         westernMedicineSelfTotal,
		"westernMedicineInscpTotal":        westernMedicineInscpTotal,

		"chineseTraditionalMedicineCostTotal":         chineseTraditionalMedicineCostTotal,
		"chineseTraditionalMedicineCostSelfTotal":     chineseTraditionalMedicineCostSelfTotal,
		"chineseTraditionalMedicineCostPartSelfTotal": chineseTraditionalMedicineCostPartSelfTotal,
		"chineseTraditionalSelfTotal":                 chineseTraditionalSelfTotal,
		"chineseTraditionalInscpTotal":                chineseTraditionalInscpTotal,

		"checkCostTotal":         checkCostTotal,
		"checkCostSelfTotal":     checkCostSelfTotal,
		"checkSelfTotal":         checkSelfTotal,
		"checkInscpTotal":        checkInscpTotal,
		"checkCostPartSelfTotal": checkCostPartSelfTotal,

		"zhenChaCostTotal":     zhenChaCostTotal,
		"zhenChaCostSelfTotal": zhenChaCostTotal,

		"laboratoryCostTotal":         laboratoryCostTotal,
		"laboratoryCostSelfTotal":     laboratoryCostSelfTotal,
		"laboratoryCostPartSelfTotal": laboratoryCostPartSelfTotal,
		"laboratorySelfTotal":         laboratorySelfTotal,
		"laboratoryInscpTotal":        laboratoryInscpTotal,

		"treatCostTotal":         treatCostTotal,
		"treatCostSelfTotal":     treatCostSelfTotal,
		"treatCostPartSelfTotal": treatCostPartSelfTotal,
		"treatSelfTotal":         treatSelfTotal,
		"treatInscpTotal":        treatInscpTotal,

		"charge_admin":  charge_admin,
		"printor_admin": printor_admin,
		"org_name":      org.OrgName,
		"org_code":      miConfig.Code,
		"name":          patient.Name,
		"number":        order.MdtrtId,
		"date":          order.SettleAccountsDate,
		"info":          order,
		"new_order":     order,
		"his_hospital":  his_hospital,
		"his":           his,
		"funds":         rf,
		"dia_config":    dia_config,

		"huliCostTotal":         huliCostTotal,
		"huliCostSelfTotal":     huliCostSelfTotal,
		"huliCostPartSelfTotal": huliCostPartSelfTotal,
		"huliSelfTotal":         huliSelfTotal,
		"huliInscpTotal":        huliInscpTotal,

		"zcCostTotal":         zcCostTotal,
		"zcCostSelfTotal":     zcCostSelfTotal,
		"zcCostPartSelfTotal": zcCostPartSelfTotal,
		"zcSelfTotal":         zcSelfTotal,
		"zcInscpTotal":        zcInscpTotal,
	})

}

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() {
	record_date := c.GetString("record_date")
	sch_type, _ := c.GetInt64("sch_type")
	patient_type, _ := c.GetInt64("patient_type")

	fmt.Println("patient_type")

	fmt.Println(patient_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.GetNewHisPatientList(adminInfo.CurrentOrgId, recordDateTime, sch_type, 0)
	patients_two, _ := service.GetScheduleHisPatientList(adminInfo.CurrentOrgId, "", recordDateTime, sch_type, 0)

	if patient_type == 2 && c.GetAdminUserInfo().CurrentOrgId == 10721 {
		patients_three, _ := service.GetFuTouHisPatientList(adminInfo.CurrentOrgId, recordDateTime)
		patients_four, _ := service.GetScheduleHisPatientListTwo(adminInfo.CurrentOrgId, recordDateTime)

		fmt.Println(patients_three)
		//获取当前用户的信息
		adminUserInfo, _ := service.GetAdminUserInfoByID(adminInfo.CurrentOrgId, adminInfo.AdminUser.Id)
		doctors, _ := service.GetHisAdminUserDoctors(adminInfo.CurrentOrgId)
		//获取所有科室信息
		department, _ := service.GetAllDepartMent(adminInfo.CurrentOrgId)
		//var aa []service.PatientThree
		noElementsSlice := make([]service.PatientThree, 0)
		c.ServeSuccessJSON(map[string]interface{}{
			"list":       patients_three,
			"list_two":   patients_four,
			"list_three": noElementsSlice,
			"info":       adminUserInfo,
			"doctors":    doctors,
			"department": department,
		})
	} else {

		//获取当前用户的信息
		adminUserInfo, _ := service.GetAdminUserInfoByID(adminInfo.CurrentOrgId, adminInfo.AdminUser.Id)
		doctors, _ := service.GetHisAdminUserDoctors(adminInfo.CurrentOrgId)
		//获取所有科室信息
		department, _ := service.GetAllDepartMent(adminInfo.CurrentOrgId)
		//var aa []service.PatientThree
		noElementsSlice := make([]service.PatientThree, 0)

		c.ServeSuccessJSON(map[string]interface{}{
			"list":       patients,
			"list_two":   patients_two,
			"list_three": noElementsSlice,
			"info":       adminUserInfo,
			"doctors":    doctors,
			"department": department,
		})

	}

}

type CustomTemplate struct {
	ID                             int64                                    `gorm:"column:id" json:"id" form:"id"`
	UserOrgId                      int64                                    `gorm:"column:user_org_id" json:"user_org_id" form:"user_org_id"`
	RecordDate                     int64                                    `gorm:"column:record_date" json:"record_date" form:"record_date"`
	PatientId                      int64                                    `gorm:"column:patient_id" json:"patient_id" form:"patient_id"`
	Status                         int64                                    `gorm:"column:status" json:"status" form:"status"`
	Ctime                          int64                                    `gorm:"column:ctime" json:"ctime" form:"ctime"`
	Mtime                          int64                                    `gorm:"column:mtime" json:"mtime" form:"mtime"`
	Type                           int64                                    `gorm:"column:type" json:"type" form:"type"`
	Creator                        int64                                    `gorm:"column:creator" json:"creator" form:"creator"`
	Modifier                       int64                                    `gorm:"column:modifier" json:"modifier" form:"modifier"`
	PType                          int64                                    `gorm:"column:p_type" json:"p_type" form:"p_type"`
	PTemplateId                    int64                                    `gorm:"column:p_template_id" json:"p_template_id" form:"p_template_id"`
	HisPrescriptionAdviceTemplate  []*models.HisPrescriptionAdviceTemplate  `gorm:"ForeignKey:PrescriptionId;AssociationForeignKey:ID" json:"advices"`
	HisPrescriptionProjectTemplate []*models.HisPrescriptionProjectTemplate `gorm:"ForeignKey:PrescriptionId;AssociationForeignKey:ID" json:"project"`
	MedType                        string                                   `gorm:"column:med_type" json:"med_type" form:"med_type"`
}

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)
	//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)

	pre, _ := service.GetDialysisPrescription(patient_id, admin.CurrentOrgId, recordDateTime)

	var prescriptions []*models.HisPrescription
	var last_prescriptions []*models.HisPrescription
	var sch_prescriptions []CustomTemplate
	last_p_info, _ := service.FindLastPatientPrescriptionInfo(admin.CurrentOrgId, patient_id, recordDateTime)
	if p_type == 1 { //住院
		prescriptions, _ = service.GetHisPrescription(admin.CurrentOrgId, patient_id, recordDateTime, p_type)
		for _, item := range prescriptions {
			for _, subItem := range item.HisDoctorAdviceInfo {
				info, _ := service.GetWarehoseInfoByDrugId(subItem.DrugId, admin.CurrentOrgId)
				if info.RetailPrice > 0 {
					subItem.Drug.MinPrice = info.RetailPrice
				}
			}
		}
		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)
		for _, item := range prescriptions {
			for _, subItem := range item.HisDoctorAdviceInfo {
				info, _ := service.GetWarehoseInfoByDrugId(subItem.DrugId, admin.CurrentOrgId)
				if info.RetailPrice > 0 {
					subItem.Drug.MinPrice = info.RetailPrice
				}
			}
		}
		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 {
		var week string
		t := theTime
		switch t.Weekday().String() {
		case "Monday":
			week = "周一"
			break
		case "Tuesday":
			week = "周二"

			break
		case "Wednesday":
			week = "周三"

			break
		case "Thursday":
			week = "周四"

			break
		case "Friday":
			week = "周五"

			break
		case "Saturday":
			week = "周六"

			break
		case "Sunday":
			week = "周日"

			break

		}

		mode_template, _ := service.GetHisPrescriptionBySchMode(sch.ModeId, patient_id, admin.CurrentOrgId)
		temp_sch_prescriptions, _ := service.GetHisPrescriptionTemplate(mode_template.ID, admin.CurrentOrgId)

		//根据推送频率组装新的数组
		for _, item := range temp_sch_prescriptions {
			var cus CustomTemplate
			cus.ID = item.ID
			cus.UserOrgId = item.UserOrgId
			cus.PatientId = item.PatientId
			cus.MedType = item.MedType
			cus.RecordDate = item.RecordDate
			cus.Type = item.Type
			cus.PType = item.PType
			for _, subItem := range item.HisPrescriptionAdviceTemplate {
				if find := strings.Contains(subItem.Drug.DrugStatus, "停用"); !find {
					if subItem.FrequencyType == 1 { //每次必推
						cus.HisPrescriptionAdviceTemplate = append(cus.HisPrescriptionAdviceTemplate, subItem)
					}

					if subItem.FrequencyType == 3 && strings.Index(subItem.WeekDay, week) != -1 { //按照星期来推
						cus.HisPrescriptionAdviceTemplate = append(cus.HisPrescriptionAdviceTemplate, subItem)
					}

					if subItem.FrequencyType == 2 { //按照天数频率
						p, _ := time.Parse("2006-01-02", theTime.Format("2006-01-02"))
						now := p.Unix()
						dayStr := strconv.FormatInt(subItem.DayCount, 10)
						dayStr2 := "-" + dayStr
						count, _ := strconv.ParseInt(dayStr2, 10, 64)
						oldTime := theTime.AddDate(0, 0, int(count)).Unix()
						advices, _ := service.FindAllHisDoctorAdviceByTime(now, oldTime, patient_id, c.GetAdminUserInfo().CurrentOrgId, subItem.DrugId)
						if len(advices) == 0 {
							cus.HisPrescriptionAdviceTemplate = append(cus.HisPrescriptionAdviceTemplate, subItem)
						}
					}
				}
			}

			for _, subItem := range item.HisPrescriptionProjectTemplate {

				if subItem.Type == 2 {
					if subItem.XtHisProject.MedicalStatus != 1 {
						if subItem.FrequencyType == 1 {
							cus.HisPrescriptionProjectTemplate = append(cus.HisPrescriptionProjectTemplate, subItem)
						}

						if subItem.FrequencyType == 3 && strings.Index(subItem.WeekDay, week) != -1 {
							cus.HisPrescriptionProjectTemplate = append(cus.HisPrescriptionProjectTemplate, subItem)
						}

						if subItem.FrequencyType == 2 {
							p, _ := time.Parse("2006-01-02", theTime.Format("2006-01-02"))
							now := p.Unix()
							dayStr := strconv.FormatInt(subItem.DayCount, 10)
							dayStr2 := "-" + dayStr
							count, _ := strconv.ParseInt(dayStr2, 10, 64)
							oldTime := theTime.AddDate(0, 0, int(count)).Unix()
							projects, _ := service.FindAllHisProjectByTime(now, oldTime, patient_id, c.GetAdminUserInfo().CurrentOrgId, subItem.ProjectId)
							if len(projects) == 0 {
								cus.HisPrescriptionProjectTemplate = append(cus.HisPrescriptionProjectTemplate, subItem)
							}
						}

					}

				} else if subItem.Type == 3 {
					if find := strings.Contains(subItem.GoodInfo.GoodStatus, "停用"); !find {
						if subItem.FrequencyType == 1 {
							cus.HisPrescriptionProjectTemplate = append(cus.HisPrescriptionProjectTemplate, subItem)
						}

						if subItem.FrequencyType == 3 && strings.Index(subItem.WeekDay, week) != -1 {
							cus.HisPrescriptionProjectTemplate = append(cus.HisPrescriptionProjectTemplate, subItem)
						}

						if subItem.FrequencyType == 2 {
							p, _ := time.Parse("2006-01-02", theTime.Format("2006-01-02"))
							now := p.Unix()
							dayStr := strconv.FormatInt(subItem.DayCount, 10)
							dayStr2 := "-" + dayStr
							count, _ := strconv.ParseInt(dayStr2, 10, 64)
							oldTime := theTime.AddDate(0, 0, int(count)).Unix()
							projects, _ := service.FindAllHisProjectByTime(now, oldTime, patient_id, c.GetAdminUserInfo().CurrentOrgId, subItem.ProjectId)
							if len(projects) == 0 {
								cus.HisPrescriptionProjectTemplate = append(cus.HisPrescriptionProjectTemplate, subItem)
							}
						}
					}
				}
			}
			sch_prescriptions = append(sch_prescriptions, cus)
		}

		for _, item := range sch_prescriptions {
			if len(item.HisPrescriptionProjectTemplate) == 0 {
				item.HisPrescriptionProjectTemplate = make([]*models.HisPrescriptionProjectTemplate, 0)
			}
			if len(item.HisPrescriptionAdviceTemplate) == 0 {
				item.HisPrescriptionAdviceTemplate = make([]*models.HisPrescriptionAdviceTemplate, 0)
			}

		}
	}
	_, config := service.FindHisStockPriceRecordByOrgId(admin.CurrentOrgId)
	if config.ID > 0 && config.IsOpen == 1 {
		for _, item := range sch_prescriptions {
			for _, subItem := range item.HisPrescriptionAdviceTemplate {
				info, _ := service.GetWarehoseInfoByDrugId(subItem.DrugId, admin.CurrentOrgId)
				if info.RetailPrice > 0 {
					subItem.Drug.MinPrice = info.RetailPrice

					if admin.CurrentOrgId != 10598 {
						service.UpdatePrescriptionAdvice(subItem.DrugId, admin.CurrentOrgId, info.RetailPrice, subItem.PatientId)
						service.UpdateBaseMinPrice(subItem.DrugId, admin.CurrentOrgId, info.RetailPrice)
					}

				}
			}
		}
	}

	if config.ID > 0 && config.IsOpen == 1 {
		for _, item := range sch_prescriptions {
			for _, subItem := range item.HisPrescriptionProjectTemplate {
				if subItem.Type == 3 {
					info, _ := service.GetGoodWarehoseInfoByGoodId(subItem.ProjectId, admin.CurrentOrgId)
					if info.Price > 0 {
						subItem.GoodInfo.PackingPrice = info.Price

						if admin.CurrentOrgId != 10598 {

							service.UpdatePrescriptionProject(subItem.ProjectId, admin.CurrentOrgId, info.Price, subItem.PatientId)
							service.UpdateGood(subItem.ProjectId, admin.CurrentOrgId, info.Price)
						}

					}
				}
			}
		}
	}

	//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, his_patient_id)
	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)

	beforThrity, _ := service.GetAssessmentBeforThrity(admin.CurrentOrgId, patient_id, recordDateTime)

	LastCaseHistory, _ := service.GetLastHisPatientCaseHistory(admin.CurrentOrgId, patient_id)

	prescriptionInfo, _ := service.GetDialysisPresriptionById(admin.CurrentOrgId, patient_id, recordDateTime)

	fmt.Println(prescriptions)
	fmt.Println(sch_prescriptions)
	fmt.Println(last_prescriptions)

	if len(prescriptions) == 0 && c.GetAdminUserInfo().CurrentOrgId == 10721 {
		if len(sch_prescriptions) > 0 {
			var index = 0
			for subindex, item := range sch_prescriptions {
				if item.Type == 2 {
					index = subindex
				}
			}
			fmt.Println(index)
			fmt.Println(len(sch_prescriptions))

			if index >= 0 && index < len(sch_prescriptions) {
				one, _ := service.GetGoodInformationByGoodId(pre.DialysisDialyszersId)
				two, _ := service.GetGoodInformationByGoodId(pre.DialysisIrrigationId)
				//three, _ := service.GetGoodInformationByGoodId(pre.DialysisStrainerId)
				if one.ID > 0 {
					var hpt models.HisPrescriptionProjectTemplate
					hpt.Type = 3
					hpt.ID = 0
					hpt.PatientId = sch_prescriptions[index].PatientId
					hpt.Status = 1
					hpt.UserOrgId = sch_prescriptions[index].UserOrgId
					hpt.Mtime = time.Now().Unix()
					hpt.Ctime = time.Now().Unix()
					hpt.RecordDate = sch_prescriptions[index].RecordDate
					hpt.Count = "1"
					hpt.Price = one.RetailPrice
					hpt.ProjectId = one.ID
					hpt.FeedetlSn = ""
					hpt.PrescriptionId = sch_prescriptions[index].ID
					hpt.Unit = one.PackingUnit
					hpt.Day = "1"
					hpt.SingleDose = "1"
					hpt.GoodInfo = one
					sch_prescriptions[index].HisPrescriptionProjectTemplate = append(sch_prescriptions[index].HisPrescriptionProjectTemplate, &hpt)
				}
				if two.ID > 0 {
					var hpt models.HisPrescriptionProjectTemplate
					hpt.Type = 3
					hpt.ID = 0
					hpt.PatientId = sch_prescriptions[index].PatientId
					hpt.Status = 1
					hpt.UserOrgId = sch_prescriptions[index].UserOrgId
					hpt.Mtime = time.Now().Unix()
					hpt.Ctime = time.Now().Unix()
					hpt.RecordDate = sch_prescriptions[index].RecordDate
					hpt.Count = "1"
					hpt.Price = two.RetailPrice
					hpt.ProjectId = two.ID
					hpt.FeedetlSn = ""
					hpt.PrescriptionId = sch_prescriptions[index].ID
					hpt.Unit = two.PackingUnit
					hpt.Day = "1"
					hpt.SingleDose = "1"
					hpt.GoodInfo = two
					sch_prescriptions[index].HisPrescriptionProjectTemplate = append(sch_prescriptions[index].HisPrescriptionProjectTemplate, &hpt)
				}
				//if three.ID > 0 {
				//	var hpt models.HisPrescriptionProjectTemplate
				//	hpt.Type = 3
				//	hpt.ID = 0
				//	hpt.PatientId = sch_prescriptions[index].PatientId
				//	hpt.Status = 1
				//	hpt.UserOrgId = sch_prescriptions[index].UserOrgId
				//	hpt.Mtime = time.Now().Unix()
				//	hpt.Ctime = time.Now().Unix()
				//	hpt.RecordDate = sch_prescriptions[index].RecordDate
				//	hpt.Count = "1"
				//	hpt.Price = three.RetailPrice
				//	hpt.ProjectId = three.ID
				//	hpt.FeedetlSn = ""
				//	hpt.PrescriptionId = sch_prescriptions[index].ID
				//	hpt.Unit = three.PackingUnit
				//	hpt.Day = "1"
				//	hpt.SingleDose = "1"
				//	hpt.GoodInfo = three
				//	sch_prescriptions[index].HisPrescriptionProjectTemplate = append(sch_prescriptions[index].HisPrescriptionProjectTemplate, &hpt)
				//}

				fmt.Println(sch_prescriptions)
			}
		} else {
			if len(last_prescriptions) > 0 {
				var index = 0
				for subindex, item := range last_prescriptions {
					if item.Type == 2 {
						index = subindex
					}
				}
				if index >= 0 && index < len(last_prescriptions) {
					one, _ := service.GetGoodInformationByGoodId(pre.DialysisDialyszersId)
					two, _ := service.GetGoodInformationByGoodId(pre.DialysisIrrigationId)
					//three, _ := service.GetGoodInformationByGoodId(pre.DialysisStrainerId)
					if one.ID > 0 {
						var hpt models.HisPrescriptionProject
						hpt.Type = 3
						hpt.ID = 0
						hpt.PatientId = last_prescriptions[index].PatientId
						hpt.Status = 1
						hpt.UserOrgId = last_prescriptions[index].UserOrgId
						hpt.Mtime = time.Now().Unix()
						hpt.Ctime = time.Now().Unix()
						hpt.RecordDate = last_prescriptions[index].RecordDate
						hpt.Count = "1"
						hpt.Price = one.RetailPrice
						hpt.ProjectId = one.ID
						hpt.FeedetlSn = ""
						hpt.PrescriptionId = last_prescriptions[index].ID
						hpt.Unit = one.PackingUnit
						hpt.Day = "1"
						hpt.SingleDose = "1"
						hpt.GoodInfo = one
						last_prescriptions[index].HisPrescriptionProject = append(last_prescriptions[index].HisPrescriptionProject, &hpt)

					}
					if two.ID > 0 {
						var hpt models.HisPrescriptionProject
						hpt.Type = 3
						hpt.ID = 0
						hpt.PatientId = last_prescriptions[index].PatientId
						hpt.Status = 1
						hpt.UserOrgId = last_prescriptions[index].UserOrgId
						hpt.Mtime = time.Now().Unix()
						hpt.Ctime = time.Now().Unix()
						hpt.RecordDate = last_prescriptions[index].RecordDate
						hpt.Count = "1"
						hpt.Price = two.RetailPrice
						hpt.ProjectId = two.ID
						hpt.FeedetlSn = ""
						hpt.PrescriptionId = last_prescriptions[index].ID
						hpt.Unit = two.PackingUnit
						hpt.Day = "1"
						hpt.SingleDose = "1"
						hpt.GoodInfo = two
						last_prescriptions[index].HisPrescriptionProject = append(last_prescriptions[index].HisPrescriptionProject, &hpt)
					}
					//if three.ID > 0 {
					//	var hpt models.HisPrescriptionProject
					//	hpt.Type = 3
					//	hpt.ID = 0
					//	hpt.PatientId = last_prescriptions[index].PatientId
					//	hpt.Status = 1
					//	hpt.UserOrgId = last_prescriptions[index].UserOrgId
					//	hpt.Mtime = time.Now().Unix()
					//	hpt.Ctime = time.Now().Unix()
					//	hpt.RecordDate = last_prescriptions[index].RecordDate
					//	hpt.Count = "1"
					//	hpt.Price = three.RetailPrice
					//	hpt.ProjectId = three.ID
					//	hpt.FeedetlSn = ""
					//	hpt.PrescriptionId = last_prescriptions[index].ID
					//	hpt.Unit = three.PackingUnit
					//	hpt.Day = "1"
					//	hpt.SingleDose = "1"
					//	hpt.GoodInfo = three
					//	last_prescriptions[index].HisPrescriptionProject = append(last_prescriptions[index].HisPrescriptionProject, &hpt)
					//}
				}
			}
		}
	}

	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,
		"befor":              beforThrity,
		"LastCaseHistory":    LastCaseHistory,
		"prescriptionInfo":   prescriptionInfo,
	})
	return

}

func (c *HisApiController) GetHisPrescriptionConfig() {
	adminInfo := c.GetAdminUserInfo()
	//获取医嘱模版
	advices, _ := service.FindAllHisAdviceTemplate(adminInfo.CurrentOrgId)

	houseConfig, _ := service.GetAllStoreHouseConfig(adminInfo.CurrentOrgId)
	if adminInfo.CurrentOrgId == 9675 || adminInfo.CurrentOrgId == 9671 || adminInfo.CurrentOrgId == 10215 {
		//获取所有基础药
		drugs, _ := service.GetAllDrugLibListSix(adminInfo.CurrentOrgId, houseConfig.DrugStorehouseOut)
		_, config := service.FindHisStockPriceRecordByOrgId(adminInfo.CurrentOrgId)
		if config.ID > 0 && config.IsOpen == 1 {
			for _, item := range drugs {
				var index = 0
				for _, subItem := range item.OtherDrugWarehouseInfo {
					if index == 0 {
						index = index + 1
						if subItem.RetailPrice > 0 {
							item.MinPrice = subItem.RetailPrice

						}
					}
				}
			}
		}

		manufacturers, _ := service.GetAllManufacturerList(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)

		patientDiagnose, _ := service.FindPatientDianose(adminInfo.CurrentOrgId)
		//获取是否开启保存耗材出库的开关
		goodOutOpen, _ := service.GetGoodOutOpenConfigOne(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,
			"manufacturers":    manufacturers,
			"goodOutOpen":      goodOutOpen,
			"patientDiagnose":  patientDiagnose,
		})
	}
	if adminInfo.CurrentOrgId != 9675 && adminInfo.CurrentOrgId != 9671 && adminInfo.CurrentOrgId != 10215 {
		//获取所有基础药
		drugs, _ := service.GetAllDrugLibListSix(adminInfo.CurrentOrgId, houseConfig.DrugStorehouseOut)
		_, config := service.FindHisStockPriceRecordByOrgId(adminInfo.CurrentOrgId)
		if config.ID > 0 && config.IsOpen == 1 {
			for _, item := range drugs {
				var index = 0
				for _, subItem := range item.OtherDrugWarehouseInfo {
					if index == 0 {
						index = index + 1
						if subItem.RetailPrice > 0 {
							item.MinPrice = subItem.RetailPrice
						}
					}
				}
			}
		}

		manufacturers, _ := service.GetAllManufacturerList(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)
		//获取是否开启保存耗材出库的开关
		goodOutOpen, _ := service.GetGoodOutOpenConfigOne(adminInfo.CurrentOrgId)
		patientDiagnose, _ := service.FindPatientDianose(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,
			"manufacturers":    manufacturers,
			"goodOutOpen":      goodOutOpen,
			"patientDiagnose":  patientDiagnose,
		})
	}
}

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")
	patient_diagnose := c.GetString("patient_diagnose")

	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
	}

	//edit, src := GetCompareData(dataBody)
	//drugResult := ComparePrescriptions(src.adviceList, edit.adviceList)
	//goodResult := CompareGoodPrescriptions(src.projectList, edit.projectList)
	//fmt.Println(drugResult)
	//fmt.Println(goodResult)

	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()

	//查询默认出库仓库库存
	storeConfig, _ := service.GetAllStoreHouseConfig(adminInfo.CurrentOrgId)
	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
		}
	}

	patient, _ := service.GetPatientByIDTwo(adminInfo.CurrentOrgId, patient_id)

	//自动出库的开关开启
	_, drugStockConfig := service.FindDrugStockAutomaticReduceRecordByOrgId(c.GetAdminUserInfo().CurrentOrgId)

	//自动出库
	_, stockConfig := service.FindAutomaticReduceRecordByOrgId(c.GetAdminUserInfo().CurrentOrgId)

	//耗材保存处方出库
	goodOutConfig, _ := service.FindGoodOutConfigById(c.GetAdminUserInfo().CurrentOrgId)

	settleConfig, _ := service.FindeDrugSettleConfigById(c.GetAdminUserInfo().CurrentOrgId)

	//已发药和已收费限制逻辑
	isMidicine := false
	isCharge := false
	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 id > 0 {
					new_prescription, err := service.GetPrescriptionById(id, adminInfo.CurrentOrgId)
					if err != nil {
						if new_prescription.OrderStatus == 4 {
							isCharge = true
						}
					}
				}

			}
		}
	}
	if isMidicine == true {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeMedicineWrong)
		return
	}
	if isCharge == true {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeChargeWrong)
		return
	}

	// 开始主事务
	db := service.XTWriteDB()
	tx := db.Begin()

	// 在函数结束时处理事务回滚
	defer func() {
		if r := recover(); r != nil {
			tx.Rollback()
		}
	}()

	pharmacyConfig, _ := service.FindPharmacyConfig(adminInfo.CurrentOrgId)

	//药品发药出库
	if pharmacyConfig.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

								var adviceId int64
								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_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)
								}

								if advice.(map[string]interface{})["advice_id"] != nil || reflect.TypeOf(advice.(map[string]interface{})["advice_id"]).String() == "float64" {
									adviceId = int64(advice.(map[string]interface{})["advice_id"].(float64))
								}

								drug, _ := service.FindBaseDrugLibRecordSeven(adminInfo.CurrentOrgId, drug_id)
								if drug.ID == 0 {

									tx.Rollback()
									c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
									return
								}

								//查询药品的所有库存
								list, _ := service.GetDrugWarehouseInfoPrescriptionSeven(drug_id, adminInfo.CurrentOrgId, storeConfig.DrugStorehouseOut)

								var total_count int64
								for _, it := range list {
									total_count += it.StockMaxNumber*drug.MinNumber + it.StockMinNumber
								}
								totals := strconv.FormatInt(total_count, 10)
								//查询该药品是否存在开药记录
								advicelist, _ := service.GetHisAdviceListByDrugIdEight(drug_id, patient_id, recordDateTime, adviceId)

								//新增处方盘点库存是否充足
								if advicelist.ID == 0 {
									all_count, _ := strconv.ParseFloat(totals, 64)
									if prescribingNumberUnit == drug.MinUnit {
										if drug.IsUse != 1 {
											if drug.IsProject == 0 || drug.IsProject == 2 {
												if all_count == 0 {
													tx.Rollback()
													c.ServeDynamicFailJsonSend(drug.DrugName + "库存不足,保存失败")
													return
												}

												if prescribing_number > all_count {
													tx.Rollback()
													c.ServeDynamicFailJsonSend(drug.DrugName + "库存不足,保存失败")
													return
												}
											}

										}

									}
									if prescribingNumberUnit == drug.MaxUnit {
										num := prescribing_number * float64(drug.MinNumber)
										if drug.IsUse != 1 {
											if drug.IsProject == 0 || drug.IsProject == 2 {
												if all_count == 0 {
													tx.Rollback()
													c.ServeDynamicFailJsonSend(drug.DrugName + "库存不足,保存失败")
													return
												}
												if num > all_count {
													tx.Rollback()
													c.ServeDynamicFailJsonSend(drug.DrugName + "库存不足,保存失败")
													return
												}
											}

										}
									}
								}

								drugOutConfig, _ := service.GetDrugOpenConfigOne(adminInfo.CurrentOrgId)
								//不使用保存处方出库
								if drugOutConfig.IsOpen != 1 {
									//修改处方
									for _, advice := range advices {
										var drug_id int64
										var prescribing_number float64
										var prescribingNumberUnit string
										var prescribingNumber string

										var adviceId int64
										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_str := advice.(map[string]interface{})["prescribing_number"].(string)
											prescribing_number, _ = strconv.ParseFloat(prescribing_number_str, 64)
											prescribingNumber = advice.(map[string]interface{})["prescribing_number"].(string)
										}

										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)
										}

										if advice.(map[string]interface{})["advice_id"] != nil || reflect.TypeOf(advice.(map[string]interface{})["advice_id"]).String() == "float64" {
											adviceId = int64(advice.(map[string]interface{})["advice_id"].(float64))
										}

										drug, _ := service.FindBaseDrugLibRecordSeven(adminInfo.CurrentOrgId, drug_id)
										if drug.ID == 0 {
											tx.Rollback()
											c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
											return
										}
										//查询药品的所有库存
										list, _ := service.GetDrugWarehouseInfoPrescriptionSeven(drug_id, adminInfo.CurrentOrgId, storeConfig.DrugStorehouseOut)
										var total_count int64
										for _, it := range list {
											total_count += it.StockMaxNumber*drug.MinNumber + it.StockMinNumber
										}
										totals := strconv.FormatInt(total_count, 10)
										//查询该药品是否存在开药记录
										advicelist, _ := service.GetHisAdviceListByDrugIdEight(drug_id, patient_id, recordDateTime, adviceId)

										//新增处方
										if advicelist.ID == 0 {

											all_count, _ := strconv.ParseFloat(totals, 64)
											if prescribingNumberUnit == drug.MinUnit {
												if drug.IsUse != 1 {
													if drug.IsProject == 0 || drug.IsProject == 2 {
														if all_count == 0 {
															tx.Rollback()
															c.ServeDynamicFailJsonSend(drug.DrugName + "库存不足,保存失败")
															return
														}
														if prescribing_number > all_count {
															tx.Rollback()
															c.ServeDynamicFailJsonSend(drug.DrugName + "库存不足,保存失败")
															return
														}
													}

												}
											} else {
												if prescribingNumberUnit == drug.MaxUnit {
													num := prescribing_number * float64(drug.MinNumber)
													if drug.IsUse != 1 {
														if drug.IsProject == 0 || drug.IsProject == 2 {
															if all_count == 0 {
																tx.Rollback()
																c.ServeDynamicFailJsonSend(drug.DrugName + "库存不足")
																return
															}
															if num > all_count {
																tx.Rollback()
																c.ServeDynamicFailJsonSend(drug.DrugName + "库存不足")
																return
															}
														}

													}

												}
											}
										}
										//修改处方
										if advicelist.ID > 0 {

											var device_number int64

											if advicelist.PrescribingNumberUnit == drug.MaxUnit {
												prescribingNumberOne := strconv.FormatFloat(advicelist.PrescribingNumber, 'f', -1, 64)
												prescribingNumberInt, _ := strconv.ParseInt(prescribingNumberOne, 10, 64)
												device_number = prescribingNumberInt * drug.MinNumber
											}
											if advicelist.PrescribingNumberUnit == drug.MinUnit {
												prescribingNumberOne := strconv.FormatFloat(advicelist.PrescribingNumber, 'f', -1, 64)
												prescribingNumberInt, _ := strconv.ParseInt(prescribingNumberOne, 10, 64)
												device_number = prescribingNumberInt
											}

											var number_count int64
											if prescribingNumberUnit == drug.MaxUnit {
												prescribingNumberInt, _ := strconv.ParseInt(prescribingNumber, 10, 64)
												number_count = prescribingNumberInt * drug.MinNumber
											}
											if prescribingNumberUnit == drug.MinUnit {
												prescribingNumberInt, _ := strconv.ParseInt(prescribingNumber, 10, 64)
												number_count = prescribingNumberInt
											}

											//如果修改的数量大于之前修改的数量
											if (number_count - device_number) > 0 {
												//如果修改的差数量 大于库存数量
												if drug.IsUse != 1 {
													if (number_count - device_number) > total_count {
														tx.Rollback()
														c.ServeDynamicFailJsonSend(drug.DrugName + "库存不足")
														return
													}
												}
											}
										}
									}
								}
							}
						}
					}
				}
			}
		}
	}

	//已发药和已收费限制逻辑
	//执行出库的逻辑
	if drugStockConfig.IsOpen == 1 || settleConfig.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

								var adviceId int64
								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_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)
								}

								if advice.(map[string]interface{})["advice_id"] != nil || reflect.TypeOf(advice.(map[string]interface{})["advice_id"]).String() == "float64" {
									adviceId = int64(advice.(map[string]interface{})["advice_id"].(float64))
								}

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

								//查询药品的所有库存
								list, _ := service.GetDrugWarehouseInfoPrescriptionSeven(drug_id, adminInfo.CurrentOrgId, storeConfig.DrugStorehouseOut)

								var total_count int64
								for _, it := range list {
									total_count += it.StockMaxNumber*drug.MinNumber + it.StockMinNumber
								}
								totals := strconv.FormatInt(total_count, 10)
								//查询该药品是否存在开药记录
								advicelist, _ := service.GetHisAdviceListByDrugIdEight(drug_id, patient_id, recordDateTime, adviceId)

								//查询最新批次库存
								info, _ := service.FindLastDrugWarehousingInfoByID(drug_id, storeConfig.DrugStorehouseOut)
								var batch_number_count int64
								batch_number_count = info.StockMaxNumber*drug.MinNumber + info.StockMinNumber
								batch_number_counts := strconv.FormatInt(batch_number_count, 10)

								//新增处方
								if advicelist.ID == 0 {
									all_count, _ := strconv.ParseFloat(totals, 64)

									batch_number_all_count, _ := strconv.ParseFloat(batch_number_counts, 64)

									if prescribingNumberUnit == drug.MinUnit {

										if drug.IsUse != 1 {

											if drug.IsProject == 0 || drug.IsProject == 2 {
												if all_count == 0 {
													tx.Rollback()
													c.ServeDynamicFailJsonSend(drug.DrugName + "库存不足")
													return
												}
												if prescribing_number > all_count {
													tx.Rollback()
													c.ServeDynamicFailJsonSend(drug.DrugName + "库存不足")
													return
												}
											}

											if adminInfo.CurrentOrgId == 10215 {
												if prescribing_number > batch_number_all_count {
													tx.Rollback()
													c.ServeDynamicFailJsonSend(drug.DrugName + "该批次剩余库存不足,剩余库存:" + strconv.FormatInt(info.StockMaxNumber, 10) + drug.MaxUnit + strconv.FormatInt(info.StockMinNumber, 10) + drug.MinUnit)
													return
												}
											}

										}

									}
									if prescribingNumberUnit == drug.MaxUnit {
										num := prescribing_number * float64(drug.MinNumber)
										if drug.IsUse != 1 {
											if drug.IsProject == 0 || drug.IsProject == 2 {
												if all_count == 0 {
													tx.Rollback()
													c.ServeDynamicFailJsonSend(drug.DrugName + "库存不足")
													return
												}
												if num > all_count {
													tx.Rollback()
													c.ServeDynamicFailJsonSend(drug.DrugName + "库存不足")
													return
												}
											}

											if adminInfo.CurrentOrgId == 10215 {
												if num > batch_number_all_count {
													tx.Rollback()
													c.ServeDynamicFailJsonSend(drug.DrugName + "该批次剩余库存不足,剩余库存:" + strconv.FormatInt(info.StockMaxNumber, 10) + drug.MaxUnit + strconv.FormatInt(info.StockMinNumber, 10) + drug.MinUnit)
													return
												}
											}

										}
									}
								}

								//不是保存处方出库
								drugOutConfig, _ := service.GetDrugOpenConfigOne(adminInfo.CurrentOrgId)
								if drugOutConfig.IsOpen != 1 {
									//修改处方
									for _, advice := range advices {
										var drug_id int64
										var prescribing_number float64
										var prescribingNumberUnit string
										var prescribingNumber string

										var adviceId int64
										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_str := advice.(map[string]interface{})["prescribing_number"].(string)
											prescribing_number, _ = strconv.ParseFloat(prescribing_number_str, 64)
											prescribingNumber = advice.(map[string]interface{})["prescribing_number"].(string)
										}

										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)
										}

										if advice.(map[string]interface{})["advice_id"] != nil || reflect.TypeOf(advice.(map[string]interface{})["advice_id"]).String() == "float64" {
											adviceId = int64(advice.(map[string]interface{})["advice_id"].(float64))
										}

										drug, _ := service.FindBaseDrugLibRecordSeven(adminInfo.CurrentOrgId, drug_id)
										if drug.ID == 0 {
											tx.Rollback()
											c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
											return
										}
										//查询药品的所有库存
										list, _ := service.GetDrugWarehouseInfoPrescriptionSeven(drug_id, adminInfo.CurrentOrgId, storeConfig.DrugStorehouseOut)
										var total_count int64
										for _, it := range list {
											total_count += it.StockMaxNumber*drug.MinNumber + it.StockMinNumber
										}
										totals := strconv.FormatInt(total_count, 10)
										//查询该药品是否存在开药记录
										advicelist, _ := service.GetHisAdviceListByDrugIdEight(drug_id, patient_id, recordDateTime, adviceId)

										//新增处方
										if advicelist.ID == 0 {
											//查询最新批次库存
											info, _ := service.FindLastDrugWarehousingInfoByID(drug_id, storeConfig.DrugStorehouseOut)
											var batch_number_count int64
											batch_number_count = info.StockMaxNumber*drug.MinNumber + info.StockMinNumber
											batch_number_counts := strconv.FormatInt(batch_number_count, 10)

											all_count, _ := strconv.ParseFloat(totals, 64)

											if all_count == 0 {
												tx.Rollback()
												c.ServeDynamicFailJsonSend(drug.DrugName + "库存不足")
												return
											}
											if prescribingNumberUnit == drug.MinUnit {
												batch_number_all_count, _ := strconv.ParseFloat(batch_number_counts, 64)
												if drug.IsUse != 1 {
													if drug.IsProject == 0 || drug.IsProject == 2 {
														if all_count == 0 {
															tx.Rollback()
															c.ServeDynamicFailJsonSend(drug.DrugName + "库存不足")
															return
														}
														if prescribing_number > all_count {
															tx.Rollback()
															c.ServeDynamicFailJsonSend(drug.DrugName + "库存不足")
															return
														}
													}

													if adminInfo.CurrentOrgId == 10215 {
														if prescribing_number > batch_number_all_count {
															tx.Rollback()
															c.ServeDynamicFailJsonSend(drug.DrugName + "该批次剩余库存不足,剩余库存:" + strconv.FormatInt(info.StockMaxNumber, 10) + drug.MaxUnit + strconv.FormatInt(info.StockMinNumber, 10) + drug.MinUnit)
															return
														}
													}

												}

											} else {
												if prescribingNumberUnit == drug.MaxUnit {
													batch_number_all_count, _ := strconv.ParseFloat(batch_number_counts, 64)
													num := prescribing_number * float64(drug.MinNumber)
													if drug.IsUse != 1 {
														if drug.IsProject == 0 || drug.IsProject == 2 {
															if all_count == 0 {
																tx.Rollback()
																c.ServeDynamicFailJsonSend(drug.DrugName + "库存不足")
																return
															}
															if num > all_count {
																tx.Rollback()
																c.ServeDynamicFailJsonSend(drug.DrugName + "库存不足")
																return
															}
														}

														if adminInfo.CurrentOrgId == 10215 {
															if prescribing_number > batch_number_all_count {
																tx.Rollback()
																c.ServeDynamicFailJsonSend(drug.DrugName + "该批次剩余库存不足,剩余库存:" + strconv.FormatInt(info.StockMaxNumber, 10) + drug.MaxUnit + strconv.FormatInt(info.StockMinNumber, 10) + drug.MinUnit)
																return
															}
														}

													}

												}
											}
										}
										//修改处方
										if advicelist.ID > 0 {

											//查询最新批次库存
											info, _ := service.FindLastDrugWarehousingInfoByID(drug_id, storeConfig.DrugStorehouseOut)
											var batch_number_count int64
											batch_number_count = info.StockMaxNumber*drug.MinNumber + info.StockMinNumber

											var device_number int64

											if advicelist.PrescribingNumberUnit == drug.MaxUnit {
												prescribingNumberOne := strconv.FormatFloat(advicelist.PrescribingNumber, 'f', -1, 64)
												prescribingNumberInt, _ := strconv.ParseInt(prescribingNumberOne, 10, 64)
												device_number = prescribingNumberInt * drug.MinNumber

											}
											if advicelist.PrescribingNumberUnit == drug.MinUnit {
												prescribingNumberOne := strconv.FormatFloat(advicelist.PrescribingNumber, 'f', -1, 64)
												prescribingNumberInt, _ := strconv.ParseInt(prescribingNumberOne, 10, 64)
												device_number = prescribingNumberInt

												//回退库存
											}

											var number_count int64
											if prescribingNumberUnit == drug.MaxUnit {
												prescribingNumberInt, _ := strconv.ParseInt(prescribingNumber, 10, 64)
												number_count = prescribingNumberInt * drug.MinNumber
												//回退库存
											}
											if prescribingNumberUnit == drug.MinUnit {
												prescribingNumberInt, _ := strconv.ParseInt(prescribingNumber, 10, 64)
												number_count = prescribingNumberInt
												//回退库存
											}

											//如果修改的数量大于之前修改的数量
											if (number_count - device_number) > 0 {
												//如果修改的差数量 大于库存数量
												if drug.IsUse != 1 {
													if drug.IsProject == 0 || drug.IsProject == 2 {
														if total_count == 0 {
															tx.Rollback()
															c.ServeDynamicFailJsonSend(drug.DrugName + "库存不足")
															return
														}
														if (number_count - device_number) > total_count {
															tx.Rollback()
															c.ServeDynamicFailJsonSend(drug.DrugName + "库存不足")
															return
														}

														if (number_count - device_number) > batch_number_count {
															tx.Rollback()
															c.ServeDynamicFailJsonSend(drug.DrugName + "该批次剩余库存不足,剩余库存:" + strconv.FormatInt(info.StockMaxNumber, 10) + drug.MaxUnit + strconv.FormatInt(info.StockMinNumber, 10) + drug.MinUnit)
															return
														}
													}

													if adminInfo.CurrentOrgId == 10215 {
														// 查询该药品最后一次出库记录
														outInfo, _ := service.GetLastDrugWarehouseOutByDrugIdTwenty(drug_id, patient_id, recordDateTime, adviceId)

														var out_count int64
														var in_count int64
														var stock_max_number int64
														var stock_min_number int64
														for _, it := range outInfo {
															if it.CountUnit == drug.MaxUnit {
																it.Count = it.Count * drug.MinNumber
															}
															out_count += it.Count
															warehouseInfoList, _ := service.GetDrugWarehouseInfoById(it.WarehouseInfoId)

															stock_max_number = warehouseInfoList.StockMaxNumber
															stock_min_number = warehouseInfoList.StockMinNumber
															in_count = warehouseInfoList.StockMaxNumber*drug.MinNumber + warehouseInfoList.StockMinNumber

														}

														if out_count > 0 {
															if (number_count - device_number) > in_count {
																tx.Rollback()
																c.ServeDynamicFailJsonSend(drug.DrugName + "该批次剩余库存不足,剩余库存:" + strconv.FormatInt(stock_max_number, 10) + drug.MaxUnit + strconv.FormatInt(stock_min_number, 10) + drug.MinUnit)
																return
															}
														}
														// 未出库
														if out_count == 0 {
															var sum_in_count int64
															warehouseInfo, _ := service.FindLastDrugWarehousingInfoByID(drug_id, storeConfig.DrugStorehouseOut)
															sum_in_count = warehouseInfo.StockMaxNumber*drug.MinNumber + warehouseInfo.StockMinNumber
															//如果修改的数量大于有库存的第一个批次
															if number_count > sum_in_count {
																tx.Rollback()
																c.ServeDynamicFailJsonSend(drug.DrugName + "该批次剩余库存不足,剩余库存:" + strconv.FormatInt(warehouseInfo.StockMaxNumber, 10) + drug.MaxUnit + strconv.FormatInt(warehouseInfo.StockMinNumber, 10) + drug.MinUnit)
																return
															}
														}
													}

												}

											}

											//药品发药
											//pharmacyConfig, _ := service.FindPharmacyConfig(adminInfo.CurrentOrgId)
											//不使用药品发药的功能
											//if pharmacyConfig.IsOpen != 1 {
											//	if device_number != number_count {
											//
											//		//查询该药品的出库记录
											//		outListExport, _ := service.GetWarehouseOutListExport(drug_id, patient_id, recordDateTime, adviceId)
											//		if len(outListExport) > 0 {
											//			//
											//			for _, item := range outListExport {
											//				//回退库存
											//				if item.CountUnit == drug.MaxUnit && drug.MaxUnit != drug.MinUnit {
											//					service.ModefyDrugByWarehouseInfo(item.WarehouseInfoId, number_count)
											//				}
											//				if item.CountUnit == drug.MinUnit && drug.MaxUnit != drug.MinUnit {
											//					var stock_max_number int64
											//					var stock_min_number int64
											//
											//					if number_count >= drug.MinNumber {
											//
											//						stock_max_number = device_number / drug.MinNumber
											//						service.ModefyDrugByWarehouseInfo(item.WarehouseInfoId, stock_max_number)
											//
											//						stock_min_number = device_number % drug.MinNumber
											//						service.ModefyDrugByWarehouseInfoOne(item.WarehouseInfoId, stock_min_number)
											//
											//					} else {
											//
											//						service.ModefyDrugByWarehouseInfoOne(item.WarehouseInfoId, device_number)
											//
											//					}
											//				}
											//
											//				if item.CountUnit == drug.MaxUnit && item.CountUnit == drug.MinUnit && drug.MaxUnit == drug.MinUnit {
											//					service.ModefyDrugByWarehouseInfo(item.WarehouseInfoId, device_number)
											//				}
											//			}
											//		}
											//
											//		service.DeleteDrugAutoWarehouseSeven(drug_id, patient_id, recordDateTime, adviceId)
											//		var sum_count int64
											//		orgId := c.GetAdminUserInfo().CurrentOrgId
											//		stockInfo, _ := service.GetDrugAllStockInfo(storeConfig.DrugStorehouseOut, orgId, drug_id)
											//		for _, its := range stockInfo {
											//			if its.MaxUnit == drug.MaxUnit {
											//				its.StockMaxNumber = its.StockMaxNumber * drug.MinNumber
											//			}
											//			sum_count += its.StockMaxNumber + its.StockMinNumber
											//		}
											//		//更新字典里面的库存
											//		service.UpdateBaseDrugSumTwo(drug_id, sum_count, orgId)
											//
											//		//剩余库存
											//		service.UpdateDrugStockCount(drug_id, orgId, storeConfig.DrugStorehouseOut, sum_count)
											//
											//		over, _ := service.FindOverCount(drug_id, orgId, storeConfig.DrugStorehouseOut)
											//		//减少出库数量
											//		service.UpdateActOut(over.ID, over.SumInCount, over.FlushCount, over.SumCancelCount)
											//
											//	}
											//}

										}
									}
								}

								//保存处方开药
								if drugOutConfig.IsOpen == 1 {
									//修改处方
									for _, advice := range advices {
										var drug_id int64
										var prescribing_number float64
										var prescribingNumberUnit string
										var prescribingNumber string

										var adviceId int64
										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_str := advice.(map[string]interface{})["prescribing_number"].(string)
											prescribing_number, _ = strconv.ParseFloat(prescribing_number_str, 64)
											prescribingNumber = advice.(map[string]interface{})["prescribing_number"].(string)
										}

										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)
										}

										if advice.(map[string]interface{})["advice_id"] != nil || reflect.TypeOf(advice.(map[string]interface{})["advice_id"]).String() == "float64" {
											adviceId = int64(advice.(map[string]interface{})["advice_id"].(float64))
										}

										drug, _ := service.FindBaseDrugLibRecordSeven(adminInfo.CurrentOrgId, drug_id)
										if drug.ID == 0 {
											c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
											return
										}
										//查询药品的所有库存
										list, _ := service.GetDrugWarehouseInfoPrescriptionSeven(drug_id, adminInfo.CurrentOrgId, storeConfig.DrugStorehouseOut)
										var total_count int64
										for _, it := range list {
											total_count += it.StockMaxNumber*drug.MinNumber + it.StockMinNumber
										}
										totals := strconv.FormatInt(total_count, 10)
										//查询该药品是否存在开药记录
										advicelist, _ := service.GetHisAdviceListByDrugIdEight(drug_id, patient_id, recordDateTime, adviceId)

										//新增处方
										if advicelist.ID == 0 {
											//查询最新批次库存
											info, _ := service.FindLastDrugWarehousingInfoByID(drug_id, storeConfig.DrugStorehouseOut)
											var batch_number_count int64
											batch_number_count = info.StockMaxNumber*drug.MinNumber + info.StockMinNumber
											batch_number_counts := strconv.FormatInt(batch_number_count, 10)
											all_count, _ := strconv.ParseFloat(totals, 64)
											if prescribingNumberUnit == drug.MinUnit {
												batch_number_all_count, _ := strconv.ParseFloat(batch_number_counts, 64)
												if drug.IsUse != 1 {
													if drug.IsProject == 0 || drug.IsProject == 2 {
														if all_count == 0 {
															tx.Rollback()
															c.ServeDynamicFailJsonSend(drug.DrugName + "库存不足")
															return
														}
														if prescribing_number > all_count {
															tx.Rollback()
															c.ServeDynamicFailJsonSend(drug.DrugName + "库存不足")
															return
														}
													}

													if adminInfo.CurrentOrgId == 10215 {
														if prescribing_number > batch_number_all_count {
															tx.Rollback()
															c.ServeDynamicFailJsonSend(drug.DrugName + "该批次剩余库存不足,剩余库存:" + strconv.FormatInt(info.StockMaxNumber, 10) + drug.MaxUnit + strconv.FormatInt(info.StockMinNumber, 10) + drug.MinUnit)
															return
														}
													}

												}

											} else {
												if prescribingNumberUnit == drug.MaxUnit {
													batch_number_all_count, _ := strconv.ParseFloat(batch_number_counts, 64)
													num := prescribing_number * float64(drug.MinNumber)
													if drug.IsUse != 1 {
														if drug.IsProject == 0 || drug.IsProject == 2 {
															if all_count == 0 {
																tx.Rollback()
																c.ServeDynamicFailJsonSend(drug.DrugName + "库存不足")
																return
															}
															if num > all_count {
																tx.Rollback()
																c.ServeDynamicFailJsonSend(drug.DrugName + "库存不足")
																return
															}
														}

														if adminInfo.CurrentOrgId == 10215 {
															if prescribing_number > batch_number_all_count {
																tx.Rollback()
																c.ServeDynamicFailJsonSend(drug.DrugName + "该批次剩余库存不足,剩余库存:" + strconv.FormatInt(info.StockMaxNumber, 10) + drug.MaxUnit + strconv.FormatInt(info.StockMinNumber, 10) + drug.MinUnit)
																return
															}
														}

													}

												}
											}
										}
										//修改处方
										if advicelist.ID > 0 {
											//查询最新批次库存
											info, _ := service.FindLastDrugWarehousingInfoByID(drug_id, storeConfig.DrugStorehouseOut)
											var batch_number_count int64
											batch_number_count = info.StockMaxNumber*drug.MinNumber + info.StockMinNumber

											var device_number int64

											if advicelist.PrescribingNumberUnit == drug.MaxUnit {
												prescribingNumberOne := strconv.FormatFloat(advicelist.PrescribingNumber, 'f', -1, 64)
												prescribingNumberInt, _ := strconv.ParseInt(prescribingNumberOne, 10, 64)
												device_number = prescribingNumberInt * drug.MinNumber
											}
											if advicelist.PrescribingNumberUnit == drug.MinUnit {
												prescribingNumberOne := strconv.FormatFloat(advicelist.PrescribingNumber, 'f', -1, 64)
												prescribingNumberInt, _ := strconv.ParseInt(prescribingNumberOne, 10, 64)
												device_number = prescribingNumberInt
											}

											var number_count int64
											if prescribingNumberUnit == drug.MaxUnit {
												prescribingNumberInt, _ := strconv.ParseInt(prescribingNumber, 10, 64)
												number_count = prescribingNumberInt * drug.MinNumber
											}
											if prescribingNumberUnit == drug.MinUnit {
												prescribingNumberInt, _ := strconv.ParseInt(prescribingNumber, 10, 64)
												number_count = prescribingNumberInt
											}

											//如果修改的数量大于之前修改的数量
											if (number_count - device_number) > 0 {
												//如果修改的差数量 大于库存数量
												if drug.IsUse != 1 {
													if drug.IsProject == 0 || drug.IsProject == 2 {
														if total_count == 0 {
															tx.Rollback()
															c.ServeDynamicFailJsonSend(drug.DrugName + "库存不足")
															return
														}
														if (number_count - device_number) > total_count {
															tx.Rollback()
															c.ServeDynamicFailJsonSend(drug.DrugName + "库存不足")
															return
														}
													}

													if adminInfo.CurrentOrgId == 10215 {
														if (number_count - device_number) > batch_number_count {
															tx.Rollback()
															c.ServeDynamicFailJsonSend(drug.DrugName + "该批次剩余库存不足,剩余库存:" + strconv.FormatInt(info.StockMaxNumber, 10) + drug.MaxUnit + strconv.FormatInt(info.StockMinNumber, 10) + drug.MinUnit)
															return
														}
													}

													if adminInfo.CurrentOrgId == 10215 || adminInfo.CurrentOrgId == 10164 || adminInfo.CurrentOrgId == 3877 {
														//查询历史出库数据总批次
														// 查询该药品最后一次出库记录
														outInfo, _ := service.GetLastDrugWarehouseOutByDrugIdTwenty(drug_id, patient_id, recordDateTime, adviceId)
														var out_count int64
														var in_count int64
														var stock_max_number int64
														var stock_min_number int64
														for _, it := range outInfo {
															if it.CountUnit == drug.MaxUnit {
																it.Count = it.Count * drug.MinNumber
															}
															out_count += it.Count
															warehouseInfoList, _ := service.GetDrugWarehouseInfoById(it.WarehouseInfoId)
															stock_max_number = warehouseInfoList.StockMaxNumber
															stock_min_number = warehouseInfoList.StockMinNumber
															in_count = warehouseInfoList.StockMaxNumber*drug.MinNumber + warehouseInfoList.StockMinNumber

														}

														if out_count > 0 {
															if (number_count - device_number) > in_count {
																tx.Rollback()
																c.ServeDynamicFailJsonSend(drug.DrugName + "该批次剩余库存不足,剩余库存:" + strconv.FormatInt(stock_max_number, 10) + drug.MaxUnit + strconv.FormatInt(stock_min_number, 10) + drug.MinUnit)
																return
															}
														}

														// 未出库
														if out_count == 0 {
															var sum_in_count int64
															warehouseInfo, _ := service.FindLastDrugWarehousingInfoByID(drug_id, storeConfig.DrugStorehouseOut)
															sum_in_count = warehouseInfo.StockMaxNumber*drug.MinNumber + warehouseInfo.StockMinNumber
															if sum_in_count == 0 {
																tx.Rollback()
																c.ServeDynamicFailJsonSend(drug.DrugName + "该批次剩余库存不足,剩余库存:" + strconv.FormatInt(warehouseInfo.StockMaxNumber, 10) + drug.MaxUnit + strconv.FormatInt(warehouseInfo.StockMinNumber, 10) + drug.MinUnit)
																return
															}
															//如果修改的数量大于有库存的第一个批次
															if number_count > sum_in_count {
																tx.Rollback()
																c.ServeDynamicFailJsonSend(drug.DrugName + "该批次剩余库存不足,剩余库存:" + strconv.FormatInt(warehouseInfo.StockMaxNumber, 10) + drug.MaxUnit + strconv.FormatInt(warehouseInfo.StockMinNumber, 10) + drug.MinUnit)
																return
															}
														}
													}

												}
											}
										}
									}
								}

							}
						}
					}
				}
			}
		}
	}

	//校验耗材库存
	if goodOutConfig.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
								var project_name string
								var parsetotal int64
								var id int64
								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.(map[string]interface{})["project_name"] != nil || reflect.TypeOf(project.(map[string]interface{})["project_name"]).String() == "string" {
									project_name = project.(map[string]interface{})["project_name"].(string)

								}
								if project_type == 3 {

									//查找该耗材的出库记录
									goodWarehouseInfo, _ := service.GetAutoRecordByGoodIdSevenEight(project_id, patient_id, recordDateTime)

									if len(goodWarehouseInfo) == 0 {
										//查询耗材库存
										list, _ := service.GetGoodWarehouseInfoSevenTen(project_id, storeConfig.StorehouseOutInfo)
										var stock_count int64
										for _, it := range list {
											stock_count += it.StockCount
										}
										stock_counts := strconv.FormatInt(stock_count, 10)
										stock_total_count, _ := strconv.ParseFloat(stock_counts, 64)
										if stock_total_count == 0 {
											tx.Rollback()
											c.ServeDynamicFailJsonSend(project_name + "库存不足")
											return
										}
										if totals > stock_total_count {
											tx.Rollback()
											c.ServeDynamicFailJsonSend(project_name + "库存不足")
											return
										}
									}

									if len(goodWarehouseInfo) > 0 {
										//查询该患者耗材的历史数据
										ordProject, _ := service.GetHisProjectPrescriptionByPatientIdOne(id)
										count, _ := strconv.ParseInt(ordProject.Count, 10, 64)
										//数量发生改变
										if parsetotal != count {
											//如果现在的数量大于历史数量,就要看库存是否足够
											if parsetotal > count {

												//查询耗材所有库存
												list, _ := service.GetGoodWarehouseInfoSevenTen(project_id, storeConfig.StorehouseOutInfo)
												var stock_count int64
												for _, it := range list {
													stock_count += it.StockCount
												}

												//库存不足
												if stock_count == 0 {
													tx.Rollback()
													c.ServeDynamicFailJsonSend(project_name + "库存不足")
													return
												}
												if (parsetotal - count) > stock_count {
													tx.Rollback()
													c.ServeDynamicFailJsonSend(project_name + "库存不足")
													return
												}
											}
										}
									}

								}

							}
						}
					}
				}
			}
		}
	}

	//不使用耗材保存处方出库
	if goodOutConfig.IsOpen != 1 {
		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
									var project_name string
									var parsetotal int64
									var id int64

									if project.(map[string]interface{})["id"] != nil || reflect.TypeOf(project.(map[string]interface{})["id"]).String() == "float64" {
										id = int64(project.(map[string]interface{})["id"].(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)
										parsetotal, _ = strconv.ParseInt(total, 10, 64)
									}

									if project.(map[string]interface{})["project_name"] != nil || reflect.TypeOf(project.(map[string]interface{})["project_name"]).String() == "string" {
										project_name = project.(map[string]interface{})["project_name"].(string)

									}
									if project_type == 3 {

										//查找该耗材的出库记录
										goodWarehouseInfo, _ := service.GetAutoRecordByGoodIdSevenEight(project_id, patient_id, recordDateTime)

										//没有出库记录
										if len(goodWarehouseInfo) == 0 {
											//查询耗材库存
											list, _ := service.GetGoodWarehouseInfoSeven(project_id)
											var stock_count int64
											for _, it := range list {
												stock_count += it.StockCount
											}
											stock_counts := strconv.FormatInt(stock_count, 10)
											stock_total_count, _ := strconv.ParseFloat(stock_counts, 64)
											if stock_total_count == 0 {
												tx.Rollback()
												c.ServeDynamicFailJsonSend(project_name + "库存不足")
												return
											}
											if totals > stock_total_count {
												tx.Rollback()
												c.ServeDynamicFailJsonSend(project_name + "库存不足")
												return
											}
											//查找今日该患者已经出库的所有耗材
											goodList, _ := service.GetAllAutoRecordByPatient(patient_id, recordDateTime)

											for _, item := range goodList {

												goodListSix, _ := service.GetSumGoodList(item.OrgId, item.StorehouseId, item.GoodId)
												var flush_count int64
												for _, it := range goodListSix {
													flush_count += it.StockCount
												}
												errs := service.UpdateSumGood(item.OrgId, item.StorehouseId, item.GoodId, flush_count)
												creater := adminInfo.AdminUser.Id
												if errs != nil {
													goodErrcode := models.XtGoodErrcode{
														UserOrgId:      item.OrgId,
														Errcode:        "手动出库更新剩余出库失败",
														GoodId:         item.GoodId,
														Status:         1,
														Ctime:          time.Now().Unix(),
														Mtime:          0,
														Count:          0,
														StockCount:     0,
														Creater:        creater,
														BatchNumberId:  0,
														WarehouseOutId: 0,
													}
													service.CreateGoodErrcode(goodErrcode)
												}

											}

											service.DeleteAutoWarehouse(patient_id, recordDateTime)

										}

										//有出库记录
										if len(goodWarehouseInfo) > 0 {
											//查询该患者耗材的历史数据
											ordProject, _ := service.GetHisProjectPrescriptionByPatientIdOne(id)

											fmt.Println("ordProject-----------------------", ordProject.ProjectId)

											count, _ := strconv.ParseInt(ordProject.Count, 10, 64)

											//数量发生改变
											if parsetotal != count {
												//查找今日该患者已经出库的所有耗材
												goodList, _ := service.GetAllAutoRecordByPatient(patient_id, recordDateTime)

												for _, item := range goodList {

													goodListSix, _ := service.GetSumGoodList(item.OrgId, item.StorehouseId, item.GoodId)
													var flush_count int64
													for _, it := range goodListSix {
														flush_count += it.StockCount
													}
													errs := service.UpdateSumGood(item.OrgId, item.StorehouseId, item.GoodId, flush_count)

													//减少出库数量
													creater := adminInfo.AdminUser.Id
													if errs != nil {
														goodErrcode := models.XtGoodErrcode{
															UserOrgId:      item.OrgId,
															Errcode:        "手动出库更新剩余出库失败",
															GoodId:         item.GoodId,
															Status:         1,
															Ctime:          time.Now().Unix(),
															Mtime:          0,
															Count:          0,
															StockCount:     0,
															Creater:        creater,
															BatchNumberId:  0,
															WarehouseOutId: 0,
														}
														service.CreateGoodErrcode(goodErrcode)
													}
													//查询默认仓库
													stockList, _ := service.GetStockCountByGoodId(item.GoodId, storeConfig.StorehouseOutInfo, item.OrgId)
													var total_count int64
													for _, it := range stockList {
														total_count += it.StockCount
													}
													//基础库插入数据
													service.UpdateGoodInfoReduceSumCount(item.GoodId, total_count, item.OrgId)
												}

												service.DeleteAutoWarehouse(patient_id, recordDateTime)

											}

										}
									}
								}
							}
						}
					}
				}
			}
		}
	}

	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,
			PatientDiagnosis:   patient_diagnose,
		}
		service.SavePatientPrescriptionInfo(hpInfo)
		//创建步骤表
		finish := models.XtDialysisFinish{
			IsFinish:   1,
			UserOrgId:  adminInfo.CurrentOrgId,
			Status:     1,
			Ctime:      time.Now().Unix(),
			Mtime:      0,
			Module:     4,
			RecordDate: theTime.Unix(),
			Sourse:     1,
			PatientId:  patient_id,
		}

		dialysisFinish, _ := service.GetDialysisFinish(adminInfo.CurrentOrgId, theTime.Unix(), 4, patient_id)
		if dialysisFinish.ID == 0 {
			service.CreateDialysisFinish(finish)
		}
		redis := service.RedisClient()
		key := strconv.FormatInt(adminInfo.CurrentOrgId, 10) + ":" + strconv.FormatInt(theTime.Unix(), 10) + ":his_advices_list_all"
		redis.Set(key, "", time.Second)
		keyOne := strconv.FormatInt(adminInfo.CurrentOrgId, 10) + ":" + strconv.FormatInt(patient_id, 10) + ":" + strconv.FormatInt(recordDateTime, 10) + ":his_doctor_advice"
		redis.Set(keyOne, "", time.Second)
		keySeven := "scheduals_" + record_date + "_" + strconv.FormatInt(adminInfo.CurrentOrgId, 10)
		redis.Set(keySeven, "", time.Second)
		defer redis.Close()
	} 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,
			PatientDiagnosis:   patient_diagnose,
		}
		service.SavePatientPrescriptionInfo(hpInfo)
		//创建步骤表
		finish := models.XtDialysisFinish{
			IsFinish:   1,
			UserOrgId:  adminInfo.CurrentOrgId,
			Status:     1,
			Ctime:      time.Now().Unix(),
			Mtime:      0,
			Module:     4,
			RecordDate: info.RecordDate,
			Sourse:     1,
			PatientId:  info.PatientId,
		}

		dialysisFinish, _ := service.GetDialysisFinish(adminInfo.CurrentOrgId, info.RecordDate, 4, info.PatientId)
		if dialysisFinish.ID == 0 {
			service.CreateDialysisFinish(finish)
		}
		redis := service.RedisClient()
		key := strconv.FormatInt(adminInfo.CurrentOrgId, 10) + ":" + strconv.FormatInt(theTime.Unix(), 10) + ":his_advices_list_all"
		redis.Set(key, "", time.Second)
		keyOne := strconv.FormatInt(adminInfo.CurrentOrgId, 10) + ":" + strconv.FormatInt(patient_id, 10) + ":" + strconv.FormatInt(recordDateTime, 10) + ":his_doctor_advice"
		redis.Set(keyOne, "", time.Second)
		keySeven := "scheduals_" + record_date + "_" + strconv.FormatInt(adminInfo.CurrentOrgId, 10)
		redis.Set(keySeven, "", time.Second)
		defer redis.Close()
	}

	//定义切片
	var adviceList []models.HisDoctorAdviceInfo
	var projectList []models.HisPrescriptionProject

	if adminInfo.CurrentOrgId == 10489 || adminInfo.CurrentOrgId == 10510 || adminInfo.CurrentOrgId == 10164 || adminInfo.CurrentOrgId == 10478 || adminInfo.CurrentOrgId == 10318 || adminInfo.CurrentOrgId == 10480 || adminInfo.CurrentOrgId == 10633 || adminInfo.CurrentOrgId == 10610 || adminInfo.CurrentOrgId == 10402 || adminInfo.CurrentOrgId == 10138 || adminInfo.CurrentOrgId == 10278 || adminInfo.CurrentOrgId == 10537 || adminInfo.CurrentOrgId == 10265 || adminInfo.CurrentOrgId == 10644 || adminInfo.CurrentOrgId == 10635 || adminInfo.CurrentOrgId == 10598 || adminInfo.CurrentOrgId == 10028 || adminInfo.CurrentOrgId == 10721 || adminInfo.CurrentOrgId == 10726 || adminInfo.CurrentOrgId == 10731 || adminInfo.CurrentOrgId == 10571 || adminInfo.CurrentOrgId == 10724 || adminInfo.CurrentOrgId == 9671 || adminInfo.CurrentOrgId == 10731 || adminInfo.CurrentOrgId == 10653 || adminInfo.CurrentOrgId == 10567 || adminInfo.CurrentOrgId == 10751 || adminInfo.CurrentOrgId == 10752 || adminInfo.CurrentOrgId == 9478 || adminInfo.CurrentOrgId == 10567 || adminInfo.CurrentOrgId == 10768 {
		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 {
					// 开始外部循环的事务
					tx := db.Begin()

					// 在函数结束时处理事务回滚
					defer func() {
						if r := recover(); r != nil {
							tx.Rollback()
						}
					}()

					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["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 items["diagnoses"] == nil || reflect.TypeOf(items["diagnoses"]).String() != "string" {
					//	utils.ErrorLog("diagnoses")
					//	c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
					//	return
					//}
					//med_type := strconv.Itoa(int(items["med_type"].(float64)))
					diagnoses, _ := items["diagnoses"].(string)

					//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)
					fmt.Println("preTime", preTime)
					timeLayout := "2006-01-02"
					loc, _ := time.LoadLocation("Local")
					theTime2, err := time.ParseInLocation(timeLayout+" 15:04", preTime, loc)
					//result := strings.Split(preTime, " ")
					theTime3, _ := time.ParseInLocation(timeLayout, record_date, 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:        1,
							BatchNumber:        "",
							PrescriptionNumber: hpInfo.PrescriptionNumber,
							PreTime:            pTime,
							PType:              p_type,
							MedType:            med_type,
							Diagnose:           diagnoses,
						}
						tempPrescription = prescription
						service.SaveHisPrescriptionOne(tx, tempPrescription)
						redis := service.RedisClient()
						key := strconv.FormatInt(adminInfo.CurrentOrgId, 10) + ":" + strconv.FormatInt(theTime.Unix(), 10) + ":his_advices_list_all"
						redis.Set(key, "", time.Second)

						keyOne := strconv.FormatInt(adminInfo.CurrentOrgId, 10) + ":" + strconv.FormatInt(patient_id, 10) + ":" + strconv.FormatInt(recordDateTime, 10) + ":his_doctor_advice"
						redis.Set(keyOne, "", time.Second)
						keySeven := "scheduals_" + record_date + "_" + strconv.FormatInt(adminInfo.CurrentOrgId, 10)
						redis.Set(keySeven, "", time.Second)
						defer redis.Close()
					} 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
						tempPrescription.Diagnose = diagnoses

						service.SaveHisPrescriptionOne(tx, tempPrescription)
						redis := service.RedisClient()
						key := strconv.FormatInt(adminInfo.CurrentOrgId, 10) + ":" + strconv.FormatInt(theTime.Unix(), 10) + ":his_advices_list_all"

						redis.Set(key, "", time.Second)
						keyOne := strconv.FormatInt(adminInfo.CurrentOrgId, 10) + ":" + strconv.FormatInt(patient_id, 10) + ":" + strconv.FormatInt(recordDateTime, 10) + ":his_doctor_advice"
						redis.Set(keyOne, "", time.Second)
						keySeven := "scheduals_" + record_date + "_" + strconv.FormatInt(adminInfo.CurrentOrgId, 10)
						redis.Set(keySeven, "", time.Second)
						defer redis.Close()
					}
					//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{})
						groupNo := int64(0)
						if len(advices) > 0 {
							for _, advice := range advices {
								tx := db.Begin()

								// 在函数结束时处理事务回滚
								defer func() {
									if r := recover(); r != nil {
										tx.Rollback()
									}
								}()

								var s models.HisDoctorAdviceInfo
								s.PrescriptionId = tempPrescription.ID
								s.AdviceType = 2
								s.AdviceDoctor = doctor_id
								s.StopState = 2
								s.ExecutionState = 2
								s.AdviceDate = theTime3.Unix()
								s.Status = 1
								s.UserOrgId = adminInfo.CurrentOrgId
								s.RecordDate = theTime3.Unix()
								s.StartTime = tempPrescription.PreTime
								s.Groupno = groupNo

								s.PatientId = patient_id
								s.HisPatientId = his_patient_id
								s.StartTime = pTime
								s.IsSettle = 2
								errcode := c.setAdviceWithJSON(&s, advice.(map[string]interface{}))
								if errcode > 0 {
									c.ServeFailJSONWithSGJErrorCode(errcode)
									return
								}

								s.StartTime = pTime
								var total_count int64 //处方总库存
								//查询改药品信息
								medical, _ := service.GetBaseDrugMedical(s.DrugId)
								prescribingNumberSix := strconv.FormatFloat(s.PrescribingNumber, 'f', -1, 64)
								prescribingNumberSeven, _ := strconv.ParseInt(prescribingNumberSix, 10, 64)

								if s.PrescribingNumberUnit == medical.MaxUnit && medical.MaxUnit != medical.MinUnit {
									total_count += prescribingNumberSeven * medical.MinNumber
								}

								if s.PrescribingNumberUnit == medical.MinUnit && medical.MaxUnit != medical.MinUnit {
									total_count += prescribingNumberSeven
								}

								if s.PrescribingNumberUnit == medical.MaxUnit && medical.MaxUnit == medical.MinUnit {
									total_count += prescribingNumberSeven
								}
								//if adminInfo.CurrentOrgId == 10215 || adminInfo.CurrentOrgId == 3877 {
								//	storeConfig, _ := service.GetAllStoreHouseConfig(adminInfo.CurrentOrgId)
								//	lastWarehouse, _ := service.FindLastDrugWarehousingInfoByID(s.DrugId, storeConfig.DrugStorehouseOut)
								//	if s.Price != lastWarehouse.RetailPrice {
								//		s.Price = lastWarehouse.RetailPrice
								//	}
								//	if s.Price == 0 {
								//		if lastWarehouse.ID == 0 {
								//			lastWarehouseTwo, _ := service.FindLastDrugWarehousingInfoByIDTwo(s.DrugId, storeConfig.DrugStorehouseOut)
								//			s.Price = lastWarehouseTwo.RetailPrice
								//		}
								//
								//	}
								//}

								//查询保存处方出库开关是否打开
								drugOutConfig, _ := service.GetDrugOpenConfigOne(adminInfo.CurrentOrgId)

								if s.PatientId != 30038 {
									if drugOutConfig.IsOpen == 1 {

										drug, _ := service.FindBaseDrugLibRecordSeven(adminInfo.CurrentOrgId, s.DrugId)

										// 查询该药品最后一次出库记录
										druginfo, _ := service.GetLastDrugWarehouseOutByDrugIdTwenty(s.DrugId, patient_id, recordDateTime, s.ID)

										var is_user_total int64
										var no_user_total int64

										if s.PrescribingNumberUnit == drug.MaxUnit && drug.MaxUnit != drug.MinUnit {

											prescribingNumberTenty := strconv.FormatFloat(s.PrescribingNumber, 'f', -1, 64)
											prescribingNumberSevenTy, _ := strconv.ParseInt(prescribingNumberTenty, 10, 64)

											no_user_total += prescribingNumberSevenTy * drug.MinNumber
										}

										if s.PrescribingNumberUnit == drug.MinUnit && drug.MaxUnit != drug.MinUnit {

											prescribingNumberTenty := strconv.FormatFloat(s.PrescribingNumber, 'f', -1, 64)
											prescribingNumberSevenTy, _ := strconv.ParseInt(prescribingNumberTenty, 10, 64)
											no_user_total += prescribingNumberSevenTy
										}

										if s.PrescribingNumberUnit == drug.MaxUnit && drug.MaxUnit == drug.MinUnit {

											prescribingNumberTenty := strconv.FormatFloat(s.PrescribingNumber, 'f', -1, 64)
											prescribingNumberSevenTy, _ := strconv.ParseInt(prescribingNumberTenty, 10, 64)
											no_user_total += prescribingNumberSevenTy
										}
										if len(druginfo) > 0 {
											for _, it := range druginfo {
												if it.CountUnit == drug.MaxUnit && drug.MaxUnit != drug.MinUnit {
													it.Count = it.Count * drug.MinNumber
													is_user_total += it.Count
												}

												if it.CountUnit == drug.MinUnit && drug.MaxUnit != drug.MinUnit {
													is_user_total += it.Count
												}

												if it.CountUnit == drug.MaxUnit && drug.MaxUnit == drug.MinUnit {
													is_user_total += it.Count

												}
											}

										}

										//库存不足
										if s.UserOrgId != 10206 {

											//判断库存不足的地方
											if s.ID == 0 {
												//查询改药品是否已经停用
												base, _ := service.GetBasedrugById(s.DrugId, s.UserOrgId)

												if base.ID > 0 {
													tx.Rollback()
													c.ServeDynamicFailJsonSend(base.DrugName + "已停用!请更换其他药品")
													return

												}

												drugMedical, _ := service.GetBaseDrugMedical(s.DrugId)

												if drugMedical.SumCount == 0 {
													tx.Rollback()
													c.ServeDynamicFailJsonSend(drugMedical.DrugName + "库存不足,保存失败!")
													return

												}

												list, _ := service.GetLastDrugWarehouseInfoList(s.DrugId)

												if len(list) == 0 {
													tx.Rollback()
													c.ServeDynamicFailJsonSend(drugMedical.DrugName + "库存不足,保存失败!")
													return
												}

												//针对康德
												//if s.UserOrgId == 10402 || s.UserOrgId == 10164 {
												//	//获取该药品的总入库数量
												//	drugWarehouseinfo, _ := service.GetAllDrugInfoList(s.DrugId, s.UserOrgId)
												//
												//	//获取该药品总共开了多少支医嘱
												//	hisDocInfoList, _ := service.GetHisDocInfoList(s.DrugId, s.UserOrgId)
												//	var in_count int64
												//	var in_prescription_number_total int64
												//	if len(drugWarehouseinfo) > 0 {
												//		for _, item := range drugWarehouseinfo {
												//			if item.MaxUnit == drugMedical.MaxUnit && drugMedical.MaxUnit != drugMedical.MinUnit {
												//
												//				in_count += item.WarehousingCount * drugMedical.MinNumber
												//			}
												//
												//			if item.MaxUnit == drugMedical.MinUnit && drugMedical.MaxUnit != drugMedical.MinUnit {
												//
												//				in_count += item.WarehousingCount
												//			}
												//
												//			if item.MaxUnit == drugMedical.MinUnit && drugMedical.MaxUnit == drugMedical.MinUnit {
												//
												//				in_count += item.WarehousingCount
												//			}
												//
												//		}
												//	}
												//
												//	if len(hisDocInfoList) > 0 {
												//
												//		for _, item := range hisDocInfoList {
												//			if item.PrescribingNumberUnit == drugMedical.MaxUnit && drugMedical.MaxUnit != drugMedical.MinUnit {
												//				prescribingNumberTenty := strconv.FormatFloat(s.PrescribingNumber, 'f', -1, 64)
												//				prescribingNumberSevenTy, _ := strconv.ParseInt(prescribingNumberTenty, 10, 64)
												//
												//				in_prescription_number_total += prescribingNumberSevenTy * drug.MinNumber
												//			}
												//
												//			if item.PrescribingNumberUnit == drugMedical.MinUnit && drugMedical.MaxUnit != drugMedical.MinUnit {
												//				prescribingNumberTenty := strconv.FormatFloat(s.PrescribingNumber, 'f', -1, 64)
												//				prescribingNumberSevenTy, _ := strconv.ParseInt(prescribingNumberTenty, 10, 64)
												//				in_prescription_number_total += prescribingNumberSevenTy
												//			}
												//
												//			if item.PrescribingNumberUnit == drugMedical.MinUnit && drugMedical.MaxUnit == drugMedical.MinUnit {
												//				prescribingNumberTenty := strconv.FormatFloat(s.PrescribingNumber, 'f', -1, 64)
												//				prescribingNumberSevenTy, _ := strconv.ParseInt(prescribingNumberTenty, 10, 64)
												//				in_prescription_number_total += prescribingNumberSevenTy
												//			}
												//		}
												//	}
												//	//
												//	//fmt.Println("no_user_total------------------------------", no_user_total)
												//	//fmt.Println("in_prescription_number_total---------------------------", in_prescription_number_total)
												//	//fmt.Println("in_count----------------------------------", in_count)
												//
												//	//如果已经开过的医嘱 加上未开的医嘱数量 大于 入库总数量则提示库存不足
												//	if no_user_total+in_prescription_number_total > in_count {
												//		tx.Rollback()
												//		c.ServeDynamicFailJsonSend(drugMedical.DrugName + "库存不足,保存失败!")
												//		return
												//	}
												//
												//}

												//查询该药品所有入库数量

											}

											if s.ID > 0 {
												//查询改药品是否已经停用
												base, _ := service.GetBasedrugById(s.DrugId, s.UserOrgId)

												if base.ID > 0 {
													tx.Rollback()
													c.ServeDynamicFailJsonSend(base.DrugName + "已停用!请更换其他药品")
													return

												}
											}
										}

										//fmt.Println("药品名称----------------------", drug.DrugName)
										//fmt.Println("药品名称----------------------", drug.IsUse)
										//fmt.Println("drug_iiiiiiiiiiiiiiiiiiii", drug.ID)
										//fmt.Println("is_user_total-------------------------", is_user_total)
										//fmt.Println("no_user_total-------------------------", no_user_total)
										//fmt.Println("drug.IsUse---------------", drug.IsUse)
										//fmt.Println("00000000000000000000", s.UserOrgId)

										if is_user_total != no_user_total {
											//出库
											//针对御享天源
											if drug.IsUse == 1 && s.UserOrgId == 10635 {

												//查询改药品是否已经停用
												base, _ := service.GetBasedrugById(s.DrugId, s.UserOrgId)

												if base.ID > 0 {
													tx.Rollback()
													c.ServeDynamicFailJsonSend(base.DrugName + "已停用!请更换其他药品")
													return

												}

												drugMedical, _ := service.GetBaseDrugMedical(s.DrugId)

												if drugMedical.SumCount == 0 {
													tx.Rollback()
													c.ServeDynamicFailJsonSend(drugMedical.DrugName + "库存不足,保存失败!")
													return

												}

												creater := adminInfo.AdminUser.Id
												newadviceInfo := &models.HisDoctorAdviceInfo{
													ID:                    s.ID,
													UserOrgId:             s.UserOrgId,
													PatientId:             s.PatientId,
													HisPatientId:          s.HisPatientId,
													AdviceType:            s.AdviceType,
													AdviceDate:            s.AdviceDate,
													StartTime:             s.StartTime,
													AdviceName:            s.AdviceName,
													AdviceDesc:            s.AdviceDesc,
													ReminderDate:          s.ReminderDate,
													SingleDose:            s.SingleDose,
													SingleDoseUnit:        s.SingleDoseUnit,
													PrescribingNumber:     s.PrescribingNumber,
													PrescribingNumberUnit: s.PrescribingNumberUnit,
													DeliveryWay:           s.DeliveryWay,
													ExecutionFrequency:    s.ExecutionFrequency,
													AdviceDoctor:          s.AdviceDoctor,
													Status:                s.Status,
													CreatedTime:           s.CreatedTime,
													UpdatedTime:           s.UpdatedTime,
													AdviceAffirm:          s.AdviceAffirm,
													Remark:                s.Remark,
													StopTime:              s.StopTime,
													StopReason:            s.StopReason,
													StopDoctor:            s.StopDoctor,
													StopState:             s.StopState,
													ParentId:              s.ParentId,
													ExecutionTime:         s.ExecutionTime,
													ExecutionStaff:        s.ExecutionStaff,
													ExecutionState:        s.ExecutionState,
													Checker:               s.Checker,
													RecordDate:            s.RecordDate,
													DialysisOrderId:       s.DialysisOrderId,
													CheckTime:             s.CheckTime,
													CheckState:            s.CheckState,
													DrugSpec:              s.DrugSpec,
													DrugSpecUnit:          s.DrugSpecUnit,
													Groupno:               s.Groupno,
													RemindType:            s.RemindType,
													FrequencyType:         s.FrequencyType,
													DayCount:              s.DayCount,
													WeekDay:               s.WeekDay,
													TemplateId:            s.TemplateId,
													Modifier:              s.Modifier,
													DrugId:                s.DrugId,
													Price:                 s.Price,
													PrescriptionId:        s.PrescriptionId,
													MedListCodg:           s.MedListCodg,
													FeedetlSn:             s.FeedetlSn,
													Day:                   s.DayCount,
													ChildDoctorAdvice:     nil,
													Drug:                  models.Drug{},
													Diagnosis:             s.Diagnosis,
													Way:                   s.Way,
													HospApprFlag:          s.HospApprFlag,
													LmtUsedFlag:           s.LmtUsedFlag,
													HisOrderInfo:          models.HisOrderInfo{},
													IsMedicine:            s.IsMedicine,
													ExecutionFrequencyId:  s.ExecutionFrequencyId,
													Child:                 nil,
													IsSettle:              s.IsSettle,
													IsMobile:              s.IsMobile,
													IsSelfDrug:            s.IsSelfDrug,
													DrugWayCount:          s.DrugWayCount,
												}

												var history_count int64
												var local_count int64
												//查找已经开过的医嘱信息
												adviceHistory, _ := service.GetHistory(s.ID, s.UserOrgId, tx)

												if s.PrescribingNumberUnit == drug.MaxUnit && drug.MaxUnit != drug.MinUnit {

													prescribingNumberTenty := strconv.FormatFloat(s.PrescribingNumber, 'f', -1, 64)
													prescribingNumberSevenTy, _ := strconv.ParseInt(prescribingNumberTenty, 10, 64)

													local_count += prescribingNumberSevenTy * drug.MinNumber
												}

												if s.PrescribingNumberUnit == drug.MinUnit && drug.MaxUnit != drug.MinUnit {

													prescribingNumberTenty := strconv.FormatFloat(s.PrescribingNumber, 'f', -1, 64)
													prescribingNumberSevenTy, _ := strconv.ParseInt(prescribingNumberTenty, 10, 64)
													local_count += prescribingNumberSevenTy
												}

												if s.PrescribingNumberUnit == drug.MaxUnit && drug.MaxUnit == drug.MinUnit {

													prescribingNumberTenty := strconv.FormatFloat(s.PrescribingNumber, 'f', -1, 64)
													prescribingNumberSevenTy, _ := strconv.ParseInt(prescribingNumberTenty, 10, 64)
													local_count += prescribingNumberSevenTy
												}

												if adviceHistory.PrescribingNumberUnit == drug.MaxUnit && drug.MaxUnit != drug.MinUnit {

													prescribingNumberTenty := strconv.FormatFloat(adviceHistory.PrescribingNumber, 'f', -1, 64)
													prescribingNumberSevenTy, _ := strconv.ParseInt(prescribingNumberTenty, 10, 64)

													history_count += prescribingNumberSevenTy * drug.MinNumber
												}

												if adviceHistory.PrescribingNumberUnit == drug.MinUnit && drug.MaxUnit != drug.MinUnit {

													prescribingNumberTenty := strconv.FormatFloat(adviceHistory.PrescribingNumber, 'f', -1, 64)
													prescribingNumberSevenTy, _ := strconv.ParseInt(prescribingNumberTenty, 10, 64)
													history_count += prescribingNumberSevenTy
												}

												if adviceHistory.PrescribingNumberUnit == drug.MaxUnit && drug.MaxUnit == drug.MinUnit {

													prescribingNumberTenty := strconv.FormatFloat(adviceHistory.PrescribingNumber, 'f', -1, 64)
													prescribingNumberSevenTy, _ := strconv.ParseInt(prescribingNumberTenty, 10, 64)
													history_count += prescribingNumberSevenTy
												}

												//fmt.Println("local_count---------------", local_count)
												//fmt.Println("history_count---------------", history_count)

												//如果当前出库数量大于历史出库数量则需要出库
												if local_count > history_count {
													//按最小单位出库
													var cha_count = local_count - history_count

													newadviceInfo.PrescribingNumber = float64(cha_count)
													newadviceInfo.PrescribingNumberUnit = drug.MinUnit

													service.NewHisDrugsDelivery(s.UserOrgId, creater, newadviceInfo, tx)
												}

												//如果当前出库数量小于历史出库数量则需要退库
												if local_count < history_count {

													var cha_count = history_count - local_count

													service.NewHisDrugCancelInfo(s.UserOrgId, creater, newadviceInfo, cha_count, drug, tx)

													service.NewHisDrugAutoCancelInfo(s.UserOrgId, creater, newadviceInfo, cha_count, drug, tx)
												}

												if local_count == history_count {
													if is_user_total == 0 {
														service.NewHisDrugsDelivery(s.UserOrgId, creater, newadviceInfo, tx)
													}

												}
											}

											if drug.IsUse == 2 {

												creater := adminInfo.AdminUser.Id
												newadviceInfo := &models.HisDoctorAdviceInfo{
													ID:                    s.ID,
													UserOrgId:             s.UserOrgId,
													PatientId:             s.PatientId,
													HisPatientId:          s.HisPatientId,
													AdviceType:            s.AdviceType,
													AdviceDate:            s.AdviceDate,
													StartTime:             s.StartTime,
													AdviceName:            s.AdviceName,
													AdviceDesc:            s.AdviceDesc,
													ReminderDate:          s.ReminderDate,
													SingleDose:            s.SingleDose,
													SingleDoseUnit:        s.SingleDoseUnit,
													PrescribingNumber:     s.PrescribingNumber,
													PrescribingNumberUnit: s.PrescribingNumberUnit,
													DeliveryWay:           s.DeliveryWay,
													ExecutionFrequency:    s.ExecutionFrequency,
													AdviceDoctor:          s.AdviceDoctor,
													Status:                s.Status,
													CreatedTime:           s.CreatedTime,
													UpdatedTime:           s.UpdatedTime,
													AdviceAffirm:          s.AdviceAffirm,
													Remark:                s.Remark,
													StopTime:              s.StopTime,
													StopReason:            s.StopReason,
													StopDoctor:            s.StopDoctor,
													StopState:             s.StopState,
													ParentId:              s.ParentId,
													ExecutionTime:         s.ExecutionTime,
													ExecutionStaff:        s.ExecutionStaff,
													ExecutionState:        s.ExecutionState,
													Checker:               s.Checker,
													RecordDate:            s.RecordDate,
													DialysisOrderId:       s.DialysisOrderId,
													CheckTime:             s.CheckTime,
													CheckState:            s.CheckState,
													DrugSpec:              s.DrugSpec,
													DrugSpecUnit:          s.DrugSpecUnit,
													Groupno:               s.Groupno,
													RemindType:            s.RemindType,
													FrequencyType:         s.FrequencyType,
													DayCount:              s.DayCount,
													WeekDay:               s.WeekDay,
													TemplateId:            s.TemplateId,
													Modifier:              s.Modifier,
													DrugId:                s.DrugId,
													Price:                 s.Price,
													PrescriptionId:        s.PrescriptionId,
													MedListCodg:           s.MedListCodg,
													FeedetlSn:             s.FeedetlSn,
													Day:                   s.DayCount,
													ChildDoctorAdvice:     nil,
													Drug:                  models.Drug{},
													Diagnosis:             s.Diagnosis,
													Way:                   s.Way,
													HospApprFlag:          s.HospApprFlag,
													LmtUsedFlag:           s.LmtUsedFlag,
													HisOrderInfo:          models.HisOrderInfo{},
													IsMedicine:            s.IsMedicine,
													ExecutionFrequencyId:  s.ExecutionFrequencyId,
													Child:                 nil,
													IsSettle:              s.IsSettle,
													IsMobile:              s.IsMobile,
													IsSelfDrug:            s.IsSelfDrug,
													DrugWayCount:          s.DrugWayCount,
												}

												var history_count int64
												var local_count int64
												//查找已经开过的医嘱信息
												adviceHistory, _ := service.GetHistory(s.ID, s.UserOrgId, tx)

												if s.PrescribingNumberUnit == drug.MaxUnit && drug.MaxUnit != drug.MinUnit {

													prescribingNumberTenty := strconv.FormatFloat(s.PrescribingNumber, 'f', -1, 64)
													prescribingNumberSevenTy, _ := strconv.ParseInt(prescribingNumberTenty, 10, 64)

													local_count += prescribingNumberSevenTy * drug.MinNumber
												}

												if s.PrescribingNumberUnit == drug.MinUnit && drug.MaxUnit != drug.MinUnit {

													prescribingNumberTenty := strconv.FormatFloat(s.PrescribingNumber, 'f', -1, 64)
													prescribingNumberSevenTy, _ := strconv.ParseInt(prescribingNumberTenty, 10, 64)
													local_count += prescribingNumberSevenTy
												}

												if s.PrescribingNumberUnit == drug.MaxUnit && drug.MaxUnit == drug.MinUnit {

													prescribingNumberTenty := strconv.FormatFloat(s.PrescribingNumber, 'f', -1, 64)
													prescribingNumberSevenTy, _ := strconv.ParseInt(prescribingNumberTenty, 10, 64)
													local_count += prescribingNumberSevenTy
												}

												if adviceHistory.PrescribingNumberUnit == drug.MaxUnit && drug.MaxUnit != drug.MinUnit {

													prescribingNumberTenty := strconv.FormatFloat(adviceHistory.PrescribingNumber, 'f', -1, 64)
													prescribingNumberSevenTy, _ := strconv.ParseInt(prescribingNumberTenty, 10, 64)

													history_count += prescribingNumberSevenTy * drug.MinNumber
												}

												if adviceHistory.PrescribingNumberUnit == drug.MinUnit && drug.MaxUnit != drug.MinUnit {

													prescribingNumberTenty := strconv.FormatFloat(adviceHistory.PrescribingNumber, 'f', -1, 64)
													prescribingNumberSevenTy, _ := strconv.ParseInt(prescribingNumberTenty, 10, 64)
													history_count += prescribingNumberSevenTy
												}

												if adviceHistory.PrescribingNumberUnit == drug.MaxUnit && drug.MaxUnit == drug.MinUnit {

													prescribingNumberTenty := strconv.FormatFloat(adviceHistory.PrescribingNumber, 'f', -1, 64)
													prescribingNumberSevenTy, _ := strconv.ParseInt(prescribingNumberTenty, 10, 64)
													history_count += prescribingNumberSevenTy
												}

												fmt.Println("local_count---------------", local_count)
												fmt.Println("history_count---------------", history_count)

												//如果当前出库数量大于历史出库数量则需要出库
												if local_count > history_count {
													//按最小单位出库
													var cha_count = local_count - history_count

													newadviceInfo.PrescribingNumber = float64(cha_count)
													newadviceInfo.PrescribingNumberUnit = drug.MinUnit

													service.NewHisDrugsDelivery(s.UserOrgId, creater, newadviceInfo, tx)
												}

												//如果当前出库数量小于历史出库数量则需要退库
												if local_count < history_count {

													var cha_count = history_count - local_count

													service.NewHisDrugCancelInfo(s.UserOrgId, creater, newadviceInfo, cha_count, drug, tx)

													service.NewHisDrugAutoCancelInfo(s.UserOrgId, creater, newadviceInfo, cha_count, drug, tx)
												}

												if local_count == history_count {
													if is_user_total == 0 {
														service.NewHisDrugsDelivery(s.UserOrgId, creater, newadviceInfo, tx)
													}

												}
											}

											//更新字典里面的库存
											stockInfo, _ := service.GetNewDrugAllStockInfo(storeConfig.DrugStorehouseOut, s.UserOrgId, s.DrugId, tx)
											var sum_count int64
											for _, its := range stockInfo {
												baseDrug, _ := service.GetNewBaseDrugMedical(its.DrugId, tx)
												if its.MaxUnit == baseDrug.MaxUnit {
													its.StockMaxNumber = its.StockMaxNumber * baseDrug.MinNumber
												}
												sum_count += its.StockMaxNumber + its.StockMinNumber
											}
											//更新基础库存
											service.UpdateNewBaseDrugSumTwo(s.DrugId, sum_count, s.UserOrgId, tx)
											//剩余库存
											service.UpdateNewDrugStockCount(s.DrugId, s.UserOrgId, storeConfig.DrugStorehouseOut, sum_count, tx)

											over, _ := service.FindNewOverCount(s.DrugId, s.UserOrgId, storeConfig.DrugStorehouseOut, tx)
											service.UpdateNewActOut(over.ID, over.SumInCount, over.FlushCount, over.SumCancelCount, tx)

											//创建医嘱
											service.CreateHisDoctorAdviceOne(&s, tx)

											adviceObj, _ := service.GetLastHisDoctorAdviceById(s.PatientId, s.UserOrgId, s.AdviceDate, s.DrugId, tx)

											outInfoTwo, _ := service.GetDrugWarehouseOutInfoByAdviceId(s.PatientId, s.UserOrgId, s.AdviceDate, s.DrugId, tx)

											if len(outInfoTwo) > 0 {
												for _, item := range outInfoTwo {
													service.UpdateDrugOutInfoByAdviceId(item.ID, adviceObj.ID, tx)
												}
											}

											drugAutoDetail, _ := service.GetDrugAutoDetail(s.PatientId, s.UserOrgId, s.AdviceDate, s.DrugId, tx)
											if len(drugAutoDetail) > 0 {
												for _, item := range drugAutoDetail {
													service.UpdateDrugAutoDetail(item.ID, adviceObj.ID, tx)
												}
											}
										}
									}
								}

								//记录日志
								byterequest, _ := json.Marshal(s)
								adviceLog := models.XtDoctorAdviceLog{
									UserOrgId:   s.UserOrgId,
									PatientId:   s.PatientId,
									AdminUserId: adminInfo.AdminUser.Id,
									Module:      1,
									ErrLog:      string(byterequest),
									Status:      1,
									Ctime:       time.Now().Unix(),
									Mtime:       0,
									Source:      "电脑端新建his医嘱",
									RecordDate:  s.AdviceDate,
								}
								service.CreateDoctorAdviceLog(adviceLog)

								//存储切片中
								adviceList = append(adviceList, s)

								redis := service.RedisClient()
								key := strconv.FormatInt(adminInfo.CurrentOrgId, 10) + ":" + strconv.FormatInt(theTime.Unix(), 10) + ":his_advices_list_all"
								redis.Set(key, "", time.Second)
								keyOne := strconv.FormatInt(adminInfo.CurrentOrgId, 10) + ":" + strconv.FormatInt(patient_id, 10) + ":" + strconv.FormatInt(recordDateTime, 10) + ":his_doctor_advice"
								redis.Set(keyOne, "", time.Second)
								keySeven := "scheduals_" + record_date + "_" + strconv.FormatInt(adminInfo.CurrentOrgId, 10)
								redis.Set(keySeven, "", time.Second)
								var randNum int
								randNum = rand.Intn(1000) + 1000
								//timestamp := time.Now().Unix()
								//tempTime := time.Unix(timestamp, 0)
								//timeFormat := tempTime.Format("20060102150405")
								s.FeedetlSn = strconv.FormatInt(int64(randNum), 10) + "-" + "1" + "-" + strconv.FormatInt(s.ID, 10)

								//赤峰
								if adminInfo.CurrentOrgId == 10265 || adminInfo.CurrentOrgId == 10489 {

									drug, _ := service.FindNewBaseDrugLibRecord(adminInfo.CurrentOrgId, s.DrugId, tx)

									info, _ := service.FindNewLastDrugWarehousingInfoByID(s.DrugId, storeConfig.DrugStorehouseOut, tx)

									if info.RetailPrice > 0 {
										if s.DeliveryWay == "口服" {
											if s.PrescribingNumberUnit == drug.MaxUnit && drug.MaxUnit != drug.MinUnit {
												s.Price = drug.RetailPrice
											}
											if s.PrescribingNumberUnit == drug.MinUnit && drug.MaxUnit != drug.MinUnit {
												s.Price = info.RetailPrice
											}

											if s.PrescribingNumberUnit == drug.MaxUnit && drug.MaxUnit == drug.MinUnit {
												s.Price = info.RetailPrice
											}
										}

									}
								}

								service.CreateHisDoctorAdviceOne(&s, tx)

								tx.Commit()

								keySix := strconv.FormatInt(adminInfo.CurrentOrgId, 10) + ":" + strconv.FormatInt(theTime.Unix(), 10) + ":his_advices_list_all"
								redis.Set(keySix, "", time.Second)
								keyFive := strconv.FormatInt(adminInfo.CurrentOrgId, 10) + ":" + strconv.FormatInt(patient_id, 10) + ":" + strconv.FormatInt(recordDateTime, 10) + ":his_doctor_advice"
								redis.Set(keyFive, "", time.Second)
								keyEight := "scheduals_" + record_date + "_" + strconv.FormatInt(adminInfo.CurrentOrgId, 10)
								redis.Set(keyEight, "", time.Second)
								defer redis.Close()

							}
						}

					}
					if items["project"] != nil && reflect.TypeOf(items["project"]).String() == "[]interface {}" {
						projects := items["project"].([]interface{})
						if len(projects) > 0 {
							for _, project := range projects {
								tx := db.Begin()

								// 在函数结束时处理事务回滚
								defer func() {
									if r := recover(); r != nil {
										tx.Rollback()
									}
								}()

								var p models.HisPrescriptionProject
								p.PrescriptionId = tempPrescription.ID

								p.PatientId = patient_id
								p.RecordDate = theTime3.Unix()
								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 {
									tx.Rollback()
									c.ServeFailJSONWithSGJErrorCode(errcode)
									return
								}

								if p.ID == 0 {
									p.IsOut = 2
								}
								if p.ID > 0 {
									projectDetail, _ := service.GetHisPrescriptonProjectById(p.ID)
									p.IsOut = projectDetail.IsOut
								}
								if adminInfo.CurrentOrgId == 10215 || adminInfo.CurrentOrgId == 3877 || adminInfo.CurrentOrgId == 10265 || adminInfo.CurrentOrgId == 10489 {
									storeConfig, _ := service.GetAllStoreHouseConfig(adminInfo.CurrentOrgId)
									if p.Type == 3 {
										lastWarehouse, _ := service.FindFirstWarehousingInfoByStockThree(p.ProjectId, storeConfig.DrugStorehouseOut)

										if p.Price != lastWarehouse.PackingPrice {
											p.Price = lastWarehouse.PackingPrice
										}
										if p.Price == 0 {
											lastWarehouseTwo, _ := service.FindFirstWarehousingInfoByStockFour(p.ProjectId, storeConfig.DrugStorehouseOut)
											p.Price = lastWarehouseTwo.PackingPrice
										}
										if p.Unit == "" {
											goodInfoOne, _ := service.GetGoodInformationByGoodIdOne(p.ProjectId)
											p.Unit = goodInfoOne.PackingUnit
										}
									}

								}

								if adminInfo.CurrentOrgId != 10206 {
									if p.Type == 3 {

										//判断耗材库存充不充足
										if p.ID == 0 {
											//查询该耗材是否停用
											goodInfoSeven, _ := service.GetGoodByIdIsStop(p.ProjectId, adminInfo.CurrentOrgId)
											//表示该耗材已经停用,不能保存
											if goodInfoSeven.ID == 0 {
												tx.Rollback()
												goodInfoOne, _ := service.GetGoodInformationByGoodIdOne(p.ProjectId)
												c.ServeDynamicFailJsonSend(goodInfoOne.GoodName + "耗材已经停用,保存失败!")

												return

											}

											goodInfoOne, _ := service.GetGoodInformationByGoodIdOne(p.ProjectId)
											if goodInfoOne.SumCount == 0 {
												tx.Rollback()
												c.ServeDynamicFailJsonSend(goodInfoOne.GoodName + "耗材无库存,保存失败!")

												return
											}

											goodListOne, _ := service.GetGoodWarehouseInfoByGoodList(p.ProjectId)
											if len(goodListOne) == 0 {
												tx.Rollback()
												c.ServeDynamicFailJsonSend(goodInfoOne.GoodName + "耗材无库存,保存失败!")
												return
											}

										}

										if p.ID > 0 {
											//查询该耗材是否停用
											goodInfoSeven, _ := service.GetGoodByIdIsStop(p.ProjectId, adminInfo.CurrentOrgId)
											//表示该耗材已经停用,不能保存
											if goodInfoSeven.ID == 0 {
												tx.Rollback()
												goodInfoOne, _ := service.GetGoodInformationByGoodIdOne(p.ProjectId)
												c.ServeDynamicFailJsonSend(goodInfoOne.GoodName + "耗材已经停用,保存失败!")

												return

											}

											//查询该耗材今日是否已经出过库
											goodOutList, _ := service.GetGoodWareHouseOutInfoByGood(p.ProjectId, p.RecordDate, p.UserOrgId)

											var his_count int64
											if len(goodOutList) > 0 {
												for _, item := range goodOutList {
													his_count += item.Count
												}
											}

											nowCount, _ := strconv.ParseInt(p.Count, 10, 64)

											//如果当前的处方数量大于 历史出库数量 要判断库存够不够
											if nowCount > his_count {
												goodInfoOne, _ := service.GetGoodInformationByGoodIdOne(p.ProjectId)
												if goodInfoOne.SumCount == 0 {
													tx.Rollback()
													c.ServeDynamicFailJsonSend(goodInfoOne.GoodName + "耗材无库存,保存失败!")

													return
												}
												goodListOne, _ := service.GetGoodWarehouseInfoByGoodList(p.ProjectId)
												if len(goodListOne) == 0 {
													tx.Rollback()
													c.ServeDynamicFailJsonSend(goodInfoOne.GoodName + "耗材无库存,保存失败!")
													return
												}
											}

											if len(goodOutList) == 0 {
												goodInfoOne, _ := service.GetGoodInformationByGoodIdOne(p.ProjectId)
												if goodInfoOne.SumCount == 0 {
													tx.Rollback()
													c.ServeDynamicFailJsonSend(goodInfoOne.GoodName + "耗材无库存,保存失败!")

													return
												}
												goodListOne, _ := service.GetGoodWarehouseInfoByGoodList(p.ProjectId)
												if len(goodListOne) == 0 {
													tx.Rollback()
													c.ServeDynamicFailJsonSend(goodInfoOne.GoodName + "耗材无库存,保存失败!")
													return
												}

											}

										}

									}
								}

								//查询保存耗材出库开关是否打开
								if p.PatientId != 30038 {

									//用机构ID区分
									if adminInfo.CurrentOrgId != 9671 {

										if goodOutConfig.IsOpen == 1 {
											//耗材出库
											if p.Type == 3 {

												//对比当前数据和历史出库数据

												historyProject, _ := service.GetHistoryProject(p.PatientId, p.UserOrgId, p.RecordDate, p.ID, p.ProjectId, tx)

												historyCount, _ := strconv.ParseInt(historyProject.Count, 10, 64)

												nowCount, _ := strconv.ParseInt(p.Count, 10, 64)

												////针对康德
												//if p.UserOrgId == 10164 || p.UserOrgId == 10402 {
												//
												//	//查询耗材的总入库数量
												//	warehouseInfo, _ := service.GetAllWarehouseInfo(p.ProjectId, adminInfo.CurrentOrgId)
												//
												//	//查询该耗材的总出库数量
												//	prescriptionGood, _ := service.GetHisPrescriptionByGoodId(p.ProjectId, adminInfo.CurrentOrgId)
												//
												//	var all_good_count int64
												//
												//	var prescription_count int64
												//	if len(warehouseInfo) > 0 {
												//
												//		for _, item := range warehouseInfo {
												//			all_good_count += item.WarehousingCount
												//		}
												//	}
												//	if len(prescriptionGood) > 0 {
												//		for _, item := range prescriptionGood {
												//
												//			hisCount, _ := strconv.ParseInt(item.Count, 10, 64)
												//			prescription_count += hisCount
												//		}
												//	}
												//
												//	//fmt.Println("prescription_count-------------------------", prescription_count)
												//	//fmt.Println("nowCount-------------------------", nowCount)
												//	//fmt.Println("all_good_count-------------------------", all_good_count)
												//
												//	if prescription_count+nowCount > all_good_count {
												//		goodInfoOne, _ := service.GetGoodInformationByGoodIdOne(p.ProjectId)
												//		tx.Rollback()
												//		c.ServeDynamicFailJsonSend(goodInfoOne.GoodName + "耗材无库存,保存失败!")
												//		return
												//	}
												//}

												fmt.Println("nowCount222=================", nowCount)
												fmt.Println("historyCount-333----------------", historyCount)
												//如果当前处方数量大于历史数据,则需要出库

												if nowCount > historyCount {

													var cha_count int64
													cha_count = nowCount - historyCount

													timeStr := time.Now().Format("2006-01-02")
													timeArr := strings.Split(timeStr, "-")
													total, _ := service.FindAllWarehouseOut(adminInfo.CurrentOrgId)

													total = total + 1
													warehousing_out_order := strconv.FormatInt(adminInfo.CurrentOrgId, 10) + timeArr[0] + timeArr[1] + timeArr[2] + "000"
													number, _ := strconv.ParseInt(warehousing_out_order, 10, 64)
													number = number + total
													warehousing_out_order = "CKD" + strconv.FormatInt(number, 10)

													operation_time := time.Now().Unix()
													creater := c.GetAdminUserInfo().AdminUser.Id

													recordDateStr := time.Now().Format("2006-01-02")
													recordDate, _ := utils.ParseTimeStringToTime("2006-01-02", recordDateStr)
													nowtime := recordDate.Unix()
													warehouseOut := models.WarehouseOut{
														WarehouseOutOrderNumber: warehousing_out_order,
														OperationTime:           operation_time,
														OrgId:                   adminInfo.CurrentOrgId,
														Creater:                 creater,
														Ctime:                   time.Now().Unix(),
														Status:                  1,
														WarehouseOutTime:        nowtime,
														Type:                    1,
														StorehouseId:            storeConfig.StorehouseOutInfo,
														IsCheck:                 1,
														IsSys:                   1,
													}
													//查询是否生成出库单
													out, _ := service.FindNewPrescriptionWarehouseOut(adminInfo.CurrentOrgId, nowtime, tx)
													if out.ID == 0 {
														service.AddNewSigleWarehouseOut(&warehouseOut, tx)
													}

													lastOut, _ := service.FindNewLastPrescriptionWarehouseOut(adminInfo.CurrentOrgId, nowtime, tx)

													goodObj, _ := service.GetNewGoodInformationByGoodIdThirty(p.ProjectId, tx)
													houseConfig, _ := service.GetNewAllStoreHouseConfig(p.UserOrgId, tx)

													dialyPrepareOne := models.DialysisBeforePrepare{
														GoodTypeId:   goodObj.GoodTypeId,
														GoodId:       p.ProjectId,
														PatientId:    p.PatientId,
														RecordDate:   p.RecordDate,
														UserOrgId:    adminInfo.CurrentOrgId,
														Count:        cha_count,
														Ctime:        time.Now().Unix(),
														Creater:      creater,
														Status:       1,
														StorehouseId: houseConfig.StorehouseOutInfo,
														ProjectId:    p.ID,
													}
													//出库
													service.ConsumableNewHisPrescriptionDelivery(adminInfo.CurrentOrgId, p.PatientId, p.RecordDate, &dialyPrepareOne, &lastOut, creater, tx)

												}

												//如果当前处方数量小于历史数据,怎需要退库
												if nowCount < historyCount {

													var cha_count int64
													cha_count = historyCount - nowCount
													goodObj, _ := service.GetNewGoodInformationByGoodIdThirty(p.ProjectId, tx)
													creater := c.GetAdminUserInfo().AdminUser.Id

													newPrescriptionProject := &models.HisPrescriptionProject{
														ID:                   p.ID,
														ProjectId:            p.ProjectId,
														Price:                p.Price,
														UserOrgId:            p.UserOrgId,
														Status:               1,
														Ctime:                time.Now().Unix(),
														Mtime:                time.Now().Unix(),
														PatientId:            p.PatientId,
														HisPatientId:         p.HisPatientId,
														RecordDate:           p.RecordDate,
														PrescriptionId:       p.PrescriptionId,
														Count:                p.Count,
														FeedetlSn:            p.FeedetlSn,
														MedListCodg:          p.MedListCodg,
														SingleDose:           p.SingleDose,
														DeliveryWay:          p.DeliveryWay,
														ExecutionFrequency:   p.ExecutionFrequency,
														Day:                  p.Day,
														HisProject:           models.HisProject{},
														GoodInfo:             models.GoodInfo{},
														Remark:               p.Remark,
														Unit:                 p.Unit,
														Type:                 p.Type,
														Doctor:               p.Doctor,
														ExecutionTime:        p.ExecutionTime,
														ExecutionStaff:       p.ExecutionStaff,
														ExecutionState:       p.ExecutionState,
														CheckTime:            p.CheckTime,
														CheckState:           p.CheckState,
														Checker:              p.Checker,
														StartTime:            p.StartTime,
														TeamId:               p.TeamId,
														XtHisProjectTeam:     models.XtHisProjectTeam{},
														FrequencyType:        p.FrequencyType,
														DayCount:             p.DayCount,
														WeekDay:              p.WeekDay,
														IsCheckTeam:          p.IsCheckTeam,
														HisOrderInfo:         models.HisOrderInfo{},
														ExecutionFrequencyId: p.ExecutionFrequencyId,
														IsOut:                p.IsOut,
														YbSyncStatus:         p.YbSyncStatus,
													}

													service.NewHisGoodCancelInfo(adminInfo.CurrentOrgId, creater, newPrescriptionProject, cha_count, goodObj, tx)

													service.NewHisGoodAutoCancelInfo(adminInfo.CurrentOrgId, creater, newPrescriptionProject, cha_count, goodObj, tx)

												}

												if nowCount == historyCount {

													if historyCount == 0 {
														recordDateStr := time.Now().Format("2006-01-02")
														recordDate, _ := utils.ParseTimeStringToTime("2006-01-02", recordDateStr)
														nowtime := recordDate.Unix()
														lastOut, _ := service.FindNewLastPrescriptionWarehouseOut(adminInfo.CurrentOrgId, nowtime, tx)
														goodObj, _ := service.GetNewGoodInformationByGoodIdThirty(p.ProjectId, tx)
														houseConfig, _ := service.GetNewAllStoreHouseConfig(p.UserOrgId, tx)
														creater := c.GetAdminUserInfo().AdminUser.Id
														dialyPrepareOne := models.DialysisBeforePrepare{
															GoodTypeId:   goodObj.GoodTypeId,
															GoodId:       p.ProjectId,
															PatientId:    p.PatientId,
															RecordDate:   p.RecordDate,
															UserOrgId:    adminInfo.CurrentOrgId,
															Count:        nowCount,
															Ctime:        time.Now().Unix(),
															Creater:      creater,
															Status:       1,
															StorehouseId: houseConfig.StorehouseOutInfo,
															ProjectId:    p.ID,
														}
														//出库
														service.ConsumableNewHisPrescriptionDelivery(adminInfo.CurrentOrgId, p.PatientId, p.RecordDate, &dialyPrepareOne, &lastOut, creater, tx)
													}
												}

												lastHisProject, _ := service.GetLastHisProject(p.PatientId, p.UserOrgId, p.RecordDate, tx, p.ProjectId)
												//查询历史出库数据
												flowGood, _ := service.GetStockFlowIsBatchNumberSeventy(p.PatientId, p.RecordDate, p.ProjectId, lastHisProject.ID)

												var out_count_five int64
												for _, item := range flowGood {
													out_count_five += item.Count
												}
												parseIntCount, _ := strconv.ParseInt(p.Count, 10, 64)

												//如果当前处方的出库数量和已经出库的数量不一致,需要进行退库或者出库
												if out_count_five != parseIntCount {
													service.UpdateNewAutomaticReduce(p.PatientId, p.RecordDate, p.ProjectId, lastHisProject.ID, tx)
													detail := models.AutomaticReduceDetail{
														WarehouseOutId:          0,
														WarehouseOutOrderNumber: "",
														PatientId:               p.PatientId,
														Ctime:                   time.Now().Unix(),
														Mtime:                   0,
														Status:                  1,
														RecordTime:              p.RecordDate,
														OrgId:                   p.UserOrgId,
														GoodId:                  p.ProjectId,
														GoodTypeId:              0,
														Count:                   parseIntCount,
														Type:                    0,
														ProjectId:               lastHisProject.ID,
														StorehouseId:            0,
													}

													service.CreateNewAutoDetail(detail, tx)
												}
												//	//查询耗材最后一次出库记录
												//	wareOut, _ := service.GetLastGoodWarehouseOutInfoByProjectId(p.ProjectId, patient_id, recordDateTime, lastHisProject.ID)
												//	//查询默认出库仓库库存
												//	storeConfig, _ := service.GetAllStoreHouseConfig(adminInfo.CurrentOrgId)
												//	if len(wareOut) > 0 {
												//
												//		for _, it := range wareOut {
												//			//回退库存
												//			service.ModifyGoodWarehouseInfo(it.GoodId, it.WarehouseInfotId, it.OrgId, it.Count)
												//
												//			//删除出库记录
												//			service.DeleteGoodWarehouseOutInfo(it.GoodId, it.SysRecordTime, it.OrgId, it.ProjectId)
												//
												//		}
												//	}
												//
												//	timeStr := time.Now().Format("2006-01-02")
												//	timeArr := strings.Split(timeStr, "-")
												//	total, _ := service.FindAllWarehouseOut(adminInfo.CurrentOrgId)
												//
												//	total = total + 1
												//	warehousing_out_order := strconv.FormatInt(adminInfo.CurrentOrgId, 10) + timeArr[0] + timeArr[1] + timeArr[2] + "000"
												//	number, _ := strconv.ParseInt(warehousing_out_order, 10, 64)
												//	number = number + total
												//	warehousing_out_order = "CKD" + strconv.FormatInt(number, 10)
												//
												//	operation_time := time.Now().Unix()
												//	creater := c.GetAdminUserInfo().AdminUser.Id
												//
												//	recordDateStr := time.Now().Format("2006-01-02")
												//	recordDate, _ := utils.ParseTimeStringToTime("2006-01-02", recordDateStr)
												//	nowtime := recordDate.Unix()
												//	warehouseOut := models.WarehouseOut{
												//		WarehouseOutOrderNumber: warehousing_out_order,
												//		OperationTime:           operation_time,
												//		OrgId:                   adminInfo.CurrentOrgId,
												//		Creater:                 creater,
												//		Ctime:                   time.Now().Unix(),
												//		Status:                  1,
												//		WarehouseOutTime:        nowtime,
												//		Type:                    1,
												//		StorehouseId:            storeConfig.StorehouseOutInfo,
												//		IsCheck:                 1,
												//		IsSys:                   1,
												//	}
												//	//查询是否生成出库单
												//	out, _ := service.FindNewPrescriptionWarehouseOut(adminInfo.CurrentOrgId, nowtime, tx)
												//	if out.ID == 0 {
												//		service.AddNewSigleWarehouseOut(&warehouseOut, tx)
												//	}
												//
												//	lastOut, _ := service.FindNewLastPrescriptionWarehouseOut(adminInfo.CurrentOrgId, nowtime, tx)
												//
												//	goodObj, _ := service.GetNewGoodInformationByGoodIdThirty(p.ProjectId, tx)
												//	houseConfig, _ := service.GetNewAllStoreHouseConfig(p.UserOrgId, tx)
												//
												//	dialyPrepareOne := models.DialysisBeforePrepare{
												//		GoodTypeId:   goodObj.GoodTypeId,
												//		GoodId:       p.ProjectId,
												//		PatientId:    p.PatientId,
												//		RecordDate:   p.RecordDate,
												//		UserOrgId:    adminInfo.CurrentOrgId,
												//		Count:        parseIntCount,
												//		Ctime:        time.Now().Unix(),
												//		Creater:      creater,
												//		Status:       1,
												//		StorehouseId: houseConfig.StorehouseOutInfo,
												//		ProjectId:    lastHisProject.ID,
												//	}
												//	//判断是否是零用耗材(非零用)
												//	if goodObj.IsUse == 2 || goodObj.IsUse == 0 {
												//
												//		//查询历史出库数据
												//		flowGood, _ := service.GetNewStockFlowIsBatchNumberSeventy(p.PatientId, p.RecordDate, p.ProjectId, lastHisProject.ID, tx)
												//		var out_count int64
												//		for _, item := range flowGood {
												//			out_count += item.Count
												//		}
												//		//如果历史数和当前数据不想等才进行退库出库
												//		if out_count != parseIntCount {
												//			service.ConsumableNewPrescriptionDelivery(adminInfo.CurrentOrgId, p.PatientId, p.RecordDate, &dialyPrepareOne, &lastOut, creater, parseIntCount, tx)
												//
												//			service.UpdateNewAutomaticReduce(p.PatientId, p.RecordDate, p.ProjectId, lastHisProject.ID, tx)
												//			detail := models.AutomaticReduceDetail{
												//				WarehouseOutId:          0,
												//				WarehouseOutOrderNumber: "",
												//				PatientId:               p.PatientId,
												//				Ctime:                   time.Now().Unix(),
												//				Mtime:                   0,
												//				Status:                  1,
												//				RecordTime:              p.RecordDate,
												//				OrgId:                   p.UserOrgId,
												//				GoodId:                  p.ProjectId,
												//				GoodTypeId:              0,
												//				Count:                   parseIntCount,
												//				Type:                    0,
												//				ProjectId:               lastHisProject.ID,
												//				StorehouseId:            0,
												//			}
												//
												//			service.CreateNewAutoDetail(detail, tx)
												//
												//			//查询剩余库存
												//			goodList, _ := service.GetNewAllGoodSumCount(p.ProjectId, adminInfo.CurrentOrgId, houseConfig.StorehouseOutInfo, tx)
												//			var sum_count int64
												//			for _, item := range goodList {
												//				sum_count += item.StockCount
												//			}
												//
												//			//更新剩余库存
												//			service.UpdateNewGoodFlushCount(houseConfig.StorehouseOutInfo, p.ProjectId, adminInfo.CurrentOrgId, sum_count, tx)
												//
												//			//耗材
												//			service.UpdateNewGoodSumCountSeven(sum_count, p.ProjectId, adminInfo.CurrentOrgId, tx)
												//
												//		}
												//		//判断是否是零用耗材(零用但是是出库耗材)
												//		if goodObj.IsUse == 1 && goodObj.IsWarehouse == 1 {
												//
												//			//查询历史出库数据
												//			flowGood, _ := service.GetStockFlowIsBatchNumberSeventy(p.PatientId, p.RecordDate, p.ProjectId, lastHisProject.ID)
												//			var out_count int64
												//			for _, item := range flowGood {
												//				out_count += item.Count
												//			}
												//			//如果历史数和当前数据不想等才进行退库出库
												//			if out_count != parseIntCount {
												//				service.ConsumableNewPrescriptionDelivery(adminInfo.CurrentOrgId, p.PatientId, p.RecordDate, &dialyPrepareOne, &lastOut, creater, parseIntCount, tx)
												//
												//				service.UpdateNewAutomaticReduce(p.PatientId, p.RecordDate, p.ProjectId, lastHisProject.ID, tx)
												//				detail := models.AutomaticReduceDetail{
												//					WarehouseOutId:          0,
												//					WarehouseOutOrderNumber: "",
												//					PatientId:               p.PatientId,
												//					Ctime:                   time.Now().Unix(),
												//					Mtime:                   0,
												//					Status:                  1,
												//					RecordTime:              p.RecordDate,
												//					OrgId:                   p.UserOrgId,
												//					GoodId:                  p.ProjectId,
												//					GoodTypeId:              0,
												//					Count:                   parseIntCount,
												//					Type:                    0,
												//					ProjectId:               p.ID,
												//					StorehouseId:            0,
												//				}
												//
												//				service.CreateNewAutoDetail(detail, tx)
												//
												//				//查询剩余库存
												//				goodList, _ := service.GetNewAllGoodSumCount(p.ProjectId, adminInfo.CurrentOrgId, houseConfig.StorehouseOutInfo, tx)
												//				var sum_count int64
												//				for _, item := range goodList {
												//					sum_count += item.StockCount
												//				}
												//
												//				//更新剩余库存
												//				service.UpdateNewGoodFlushCount(houseConfig.StorehouseOutInfo, p.ProjectId, adminInfo.CurrentOrgId, sum_count, tx)
												//
												//				//耗材
												//				service.UpdateNewGoodSumCountSeven(sum_count, p.ProjectId, adminInfo.CurrentOrgId, tx)
												//			}
												//
												//		}
												//
												//	}
												//
												//}

												//记录日志
												byterequest, _ := json.Marshal(p)
												adviceLog := models.XtDoctorAdviceLog{
													UserOrgId:   p.UserOrgId,
													PatientId:   p.PatientId,
													AdminUserId: adminInfo.AdminUser.Id,
													Module:      1,
													ErrLog:      string(byterequest),
													Status:      1,
													Ctime:       time.Now().Unix(),
													Mtime:       0,
													Source:      "电脑端新建his项目",
													RecordDate:  p.RecordDate,
												}
												service.CreateDoctorAdviceLog(adviceLog)

												projectList = append(projectList, p)

												if p.Type == 2 { //因为项目和耗材的基础库存在id相同的情况,所以需要根据该字段来判断,type为2的话为从项目开出来的
													//新增或者编辑项目,修改对应的标签数据
													labelOrigin, _ := service.GetProjectById(p.UserOrgId, p.ID, patient_id, recordDateTime)
													if labelOrigin.ID == 0 { //当天某个人的处方中的项目不存在
														var label models.HisLabelPrintInfo
														project, _ := service.GetProjectDetail(p.ProjectId)
														if project.CostClassify == 3 { //类别为检验检查
															if p.TeamId > 0 { //检验检查组套
																tempLabel, _ := service.GetProjectByTeamId(p.UserOrgId, p.TeamId, patient_id, recordDateTime)
																if tempLabel.ID == 0 {
																	team, _ := service.GetProjectTeamDetail(p.TeamId)
																	label.Number = tempPrescription.PrescriptionNumber
																	label.ProjectId = project.ID
																	label.Status = 1
																	label.IsPrint = 2
																	label.DoctorId = info.DoctorId
																	label.UserOrgId = p.UserOrgId
																	label.PatientId = patient_id
																	label.RecordDate = recordDateTime
																	label.Ctime = time.Now().Unix()
																	label.Mtime = time.Now().Unix()
																	label.ItemId = p.TeamId
																	label.FeedetlSn = p.FeedetlSn
																	label.PProjectId = p.ID
																	label.ProjectName = team.ProjectTeam
																	label.PatientName = patient.Name
																	service.CreateNewHisLabelRecord(&label, tx)
																}
															} else { //单条检验检查项目
																label.Number = tempPrescription.PrescriptionNumber
																label.ProjectId = project.ID
																label.Status = 1
																label.DoctorId = info.DoctorId
																label.UserOrgId = p.UserOrgId
																label.PatientId = patient_id
																label.RecordDate = recordDateTime
																label.IsPrint = 2
																label.Ctime = time.Now().Unix()
																label.Mtime = time.Now().Unix()
																label.FeedetlSn = p.FeedetlSn
																label.PProjectId = p.ID
																label.ItemId = p.TeamId
																label.ProjectName = project.ProjectName
																label.PatientName = patient.Name
																service.CreateNewHisLabelRecord(&label, tx)
															}
														}
													}
												}

											}
										}
									}

									//if adminInfo.CurrentOrgId == 9671 || adminInfo.CurrentOrgId == 10164 {
									//
									//	//耗材出库
									//	if p.Type == 3 {
									//
									//		//对比当前数据和历史出库数据
									//
									//		historyProject, _ := service.GetHistoryProject(p.PatientId, p.UserOrgId, p.RecordDate, p.ID, p.ProjectId, tx)
									//
									//		historyCount, _ := strconv.ParseInt(historyProject.Count, 10, 64)
									//
									//		nowCount, _ := strconv.ParseInt(p.Count, 10, 64)
									//
									//		//如果当前处方数量大于历史数据,则需要出库
									//		if nowCount > historyCount {
									//
									//			var cha_count int64
									//			cha_count = nowCount - historyCount
									//
									//			timeStr := time.Now().Format("2006-01-02")
									//			timeArr := strings.Split(timeStr, "-")
									//			total, _ := service.FindAllWarehouseOut(adminInfo.CurrentOrgId)
									//
									//			total = total + 1
									//			warehousing_out_order := strconv.FormatInt(adminInfo.CurrentOrgId, 10) + timeArr[0] + timeArr[1] + timeArr[2] + "000"
									//			number, _ := strconv.ParseInt(warehousing_out_order, 10, 64)
									//			number = number + total
									//			warehousing_out_order = "CKD" + strconv.FormatInt(number, 10)
									//
									//			operation_time := time.Now().Unix()
									//			creater := c.GetAdminUserInfo().AdminUser.Id
									//
									//			recordDateStr := time.Now().Format("2006-01-02")
									//			recordDate, _ := utils.ParseTimeStringToTime("2006-01-02", recordDateStr)
									//			nowtime := recordDate.Unix()
									//			warehouseOut := models.WarehouseOut{
									//				WarehouseOutOrderNumber: warehousing_out_order,
									//				OperationTime:           operation_time,
									//				OrgId:                   adminInfo.CurrentOrgId,
									//				Creater:                 creater,
									//				Ctime:                   time.Now().Unix(),
									//				Status:                  1,
									//				WarehouseOutTime:        nowtime,
									//				Type:                    1,
									//				StorehouseId:            storeConfig.StorehouseOutInfo,
									//				IsCheck:                 1,
									//				IsSys:                   1,
									//			}
									//			//查询是否生成出库单
									//			out, _ := service.FindNewPrescriptionWarehouseOut(adminInfo.CurrentOrgId, nowtime, tx)
									//			if out.ID == 0 {
									//				service.AddNewSigleWarehouseOut(&warehouseOut, tx)
									//			}
									//
									//			lastOut, _ := service.FindNewLastPrescriptionWarehouseOut(adminInfo.CurrentOrgId, nowtime, tx)
									//
									//			goodObj, _ := service.GetNewGoodInformationByGoodIdThirty(p.ProjectId, tx)
									//			houseConfig, _ := service.GetNewAllStoreHouseConfig(p.UserOrgId, tx)
									//
									//			dialyPrepareOne := models.DialysisBeforePrepare{
									//				GoodTypeId:   goodObj.GoodTypeId,
									//				GoodId:       p.ProjectId,
									//				PatientId:    p.PatientId,
									//				RecordDate:   p.RecordDate,
									//				UserOrgId:    adminInfo.CurrentOrgId,
									//				Count:        cha_count,
									//				Ctime:        time.Now().Unix(),
									//				Creater:      creater,
									//				Status:       1,
									//				StorehouseId: houseConfig.StorehouseOutInfo,
									//				ProjectId:    p.ID,
									//			}
									//			//出库
									//			service.ConsumableNewHisPrescriptionDelivery(adminInfo.CurrentOrgId, p.PatientId, p.RecordDate, &dialyPrepareOne, &lastOut, creater, tx)
									//
									//		}
									//
									//		//如果当前处方数量小于历史数据,怎需要退库
									//		if nowCount < historyCount {
									//
									//			var cha_count int64
									//			cha_count = historyCount - nowCount
									//			goodObj, _ := service.GetNewGoodInformationByGoodIdThirty(p.ProjectId, tx)
									//			creater := c.GetAdminUserInfo().AdminUser.Id
									//
									//			newPrescriptionProject := &models.HisPrescriptionProject{
									//				ID:                   p.ID,
									//				ProjectId:            p.ProjectId,
									//				Price:                p.Price,
									//				UserOrgId:            p.UserOrgId,
									//				Status:               1,
									//				Ctime:                time.Now().Unix(),
									//				Mtime:                time.Now().Unix(),
									//				PatientId:            p.PatientId,
									//				HisPatientId:         p.HisPatientId,
									//				RecordDate:           p.RecordDate,
									//				PrescriptionId:       p.PrescriptionId,
									//				Count:                p.Count,
									//				FeedetlSn:            p.FeedetlSn,
									//				MedListCodg:          p.MedListCodg,
									//				SingleDose:           p.SingleDose,
									//				DeliveryWay:          p.DeliveryWay,
									//				ExecutionFrequency:   p.ExecutionFrequency,
									//				Day:                  p.Day,
									//				HisProject:           models.HisProject{},
									//				GoodInfo:             models.GoodInfo{},
									//				Remark:               p.Remark,
									//				Unit:                 p.Unit,
									//				Type:                 p.Type,
									//				Doctor:               p.Doctor,
									//				ExecutionTime:        p.ExecutionTime,
									//				ExecutionStaff:       p.ExecutionStaff,
									//				ExecutionState:       p.ExecutionState,
									//				CheckTime:            p.CheckTime,
									//				CheckState:           p.CheckState,
									//				Checker:              p.Checker,
									//				StartTime:            p.StartTime,
									//				TeamId:               p.TeamId,
									//				XtHisProjectTeam:     models.XtHisProjectTeam{},
									//				FrequencyType:        p.FrequencyType,
									//				DayCount:             p.DayCount,
									//				WeekDay:              p.WeekDay,
									//				IsCheckTeam:          p.IsCheckTeam,
									//				HisOrderInfo:         models.HisOrderInfo{},
									//				ExecutionFrequencyId: p.ExecutionFrequencyId,
									//				IsOut:                p.IsOut,
									//				YbSyncStatus:         p.YbSyncStatus,
									//			}
									//
									//			service.NewHisGoodCancelInfo(adminInfo.CurrentOrgId, creater, newPrescriptionProject, cha_count, goodObj, tx)
									//
									//			service.NewHisGoodAutoCancelInfo(adminInfo.CurrentOrgId, creater, newPrescriptionProject, cha_count, goodObj, tx)
									//
									//		}
									//
									//		if nowCount == historyCount {
									//			if historyCount == 0 {
									//				recordDateStr := time.Now().Format("2006-01-02")
									//				recordDate, _ := utils.ParseTimeStringToTime("2006-01-02", recordDateStr)
									//				nowtime := recordDate.Unix()
									//				lastOut, _ := service.FindNewLastPrescriptionWarehouseOut(adminInfo.CurrentOrgId, nowtime, tx)
									//				goodObj, _ := service.GetNewGoodInformationByGoodIdThirty(p.ProjectId, tx)
									//				houseConfig, _ := service.GetNewAllStoreHouseConfig(p.UserOrgId, tx)
									//				creater := c.GetAdminUserInfo().AdminUser.Id
									//				dialyPrepareOne := models.DialysisBeforePrepare{
									//					GoodTypeId:   goodObj.GoodTypeId,
									//					GoodId:       p.ProjectId,
									//					PatientId:    p.PatientId,
									//					RecordDate:   p.RecordDate,
									//					UserOrgId:    adminInfo.CurrentOrgId,
									//					Count:        nowCount,
									//					Ctime:        time.Now().Unix(),
									//					Creater:      creater,
									//					Status:       1,
									//					StorehouseId: houseConfig.StorehouseOutInfo,
									//					ProjectId:    p.ID,
									//				}
									//				//出库
									//				service.ConsumableNewHisPrescriptionDelivery(adminInfo.CurrentOrgId, p.PatientId, p.RecordDate, &dialyPrepareOne, &lastOut, creater, tx)
									//			}
									//		}
									//
									//		lastHisProject, _ := service.GetLastHisProject(p.PatientId, p.UserOrgId, p.RecordDate, tx, p.ProjectId)
									//		//查询历史出库数据
									//		flowGood, _ := service.GetStockFlowIsBatchNumberSeventy(p.PatientId, p.RecordDate, p.ProjectId, lastHisProject.ID)
									//
									//		var out_count_five int64
									//		for _, item := range flowGood {
									//			out_count_five += item.Count
									//		}
									//		parseIntCount, _ := strconv.ParseInt(p.Count, 10, 64)
									//
									//		//如果当前处方的出库数量和已经出库的数量不一致,需要进行退库或者出库
									//		if out_count_five != parseIntCount {
									//			service.UpdateNewAutomaticReduce(p.PatientId, p.RecordDate, p.ProjectId, lastHisProject.ID, tx)
									//			detail := models.AutomaticReduceDetail{
									//				WarehouseOutId:          0,
									//				WarehouseOutOrderNumber: "",
									//				PatientId:               p.PatientId,
									//				Ctime:                   time.Now().Unix(),
									//				Mtime:                   0,
									//				Status:                  1,
									//				RecordTime:              p.RecordDate,
									//				OrgId:                   p.UserOrgId,
									//				GoodId:                  p.ProjectId,
									//				GoodTypeId:              0,
									//				Count:                   parseIntCount,
									//				Type:                    0,
									//				ProjectId:               lastHisProject.ID,
									//				StorehouseId:            0,
									//			}
									//
									//			service.CreateNewAutoDetail(detail, tx)
									//		}
									//		//	//查询耗材最后一次出库记录
									//		//	wareOut, _ := service.GetLastGoodWarehouseOutInfoByProjectId(p.ProjectId, patient_id, recordDateTime, lastHisProject.ID)
									//		//	//查询默认出库仓库库存
									//		//	storeConfig, _ := service.GetAllStoreHouseConfig(adminInfo.CurrentOrgId)
									//		//	if len(wareOut) > 0 {
									//		//
									//		//		for _, it := range wareOut {
									//		//			//回退库存
									//		//			service.ModifyGoodWarehouseInfo(it.GoodId, it.WarehouseInfotId, it.OrgId, it.Count)
									//		//
									//		//			//删除出库记录
									//		//			service.DeleteGoodWarehouseOutInfo(it.GoodId, it.SysRecordTime, it.OrgId, it.ProjectId)
									//		//
									//		//		}
									//		//	}
									//		//
									//		//	timeStr := time.Now().Format("2006-01-02")
									//		//	timeArr := strings.Split(timeStr, "-")
									//		//	total, _ := service.FindAllWarehouseOut(adminInfo.CurrentOrgId)
									//		//
									//		//	total = total + 1
									//		//	warehousing_out_order := strconv.FormatInt(adminInfo.CurrentOrgId, 10) + timeArr[0] + timeArr[1] + timeArr[2] + "000"
									//		//	number, _ := strconv.ParseInt(warehousing_out_order, 10, 64)
									//		//	number = number + total
									//		//	warehousing_out_order = "CKD" + strconv.FormatInt(number, 10)
									//		//
									//		//	operation_time := time.Now().Unix()
									//		//	creater := c.GetAdminUserInfo().AdminUser.Id
									//		//
									//		//	recordDateStr := time.Now().Format("2006-01-02")
									//		//	recordDate, _ := utils.ParseTimeStringToTime("2006-01-02", recordDateStr)
									//		//	nowtime := recordDate.Unix()
									//		//	warehouseOut := models.WarehouseOut{
									//		//		WarehouseOutOrderNumber: warehousing_out_order,
									//		//		OperationTime:           operation_time,
									//		//		OrgId:                   adminInfo.CurrentOrgId,
									//		//		Creater:                 creater,
									//		//		Ctime:                   time.Now().Unix(),
									//		//		Status:                  1,
									//		//		WarehouseOutTime:        nowtime,
									//		//		Type:                    1,
									//		//		StorehouseId:            storeConfig.StorehouseOutInfo,
									//		//		IsCheck:                 1,
									//		//		IsSys:                   1,
									//		//	}
									//		//	//查询是否生成出库单
									//		//	out, _ := service.FindNewPrescriptionWarehouseOut(adminInfo.CurrentOrgId, nowtime, tx)
									//		//	if out.ID == 0 {
									//		//		service.AddNewSigleWarehouseOut(&warehouseOut, tx)
									//		//	}
									//		//
									//		//	lastOut, _ := service.FindNewLastPrescriptionWarehouseOut(adminInfo.CurrentOrgId, nowtime, tx)
									//		//
									//		//	goodObj, _ := service.GetNewGoodInformationByGoodIdThirty(p.ProjectId, tx)
									//		//	houseConfig, _ := service.GetNewAllStoreHouseConfig(p.UserOrgId, tx)
									//		//
									//		//	dialyPrepareOne := models.DialysisBeforePrepare{
									//		//		GoodTypeId:   goodObj.GoodTypeId,
									//		//		GoodId:       p.ProjectId,
									//		//		PatientId:    p.PatientId,
									//		//		RecordDate:   p.RecordDate,
									//		//		UserOrgId:    adminInfo.CurrentOrgId,
									//		//		Count:        parseIntCount,
									//		//		Ctime:        time.Now().Unix(),
									//		//		Creater:      creater,
									//		//		Status:       1,
									//		//		StorehouseId: houseConfig.StorehouseOutInfo,
									//		//		ProjectId:    lastHisProject.ID,
									//		//	}
									//		//	//判断是否是零用耗材(非零用)
									//		//	if goodObj.IsUse == 2 || goodObj.IsUse == 0 {
									//		//
									//		//		//查询历史出库数据
									//		//		flowGood, _ := service.GetNewStockFlowIsBatchNumberSeventy(p.PatientId, p.RecordDate, p.ProjectId, lastHisProject.ID, tx)
									//		//		var out_count int64
									//		//		for _, item := range flowGood {
									//		//			out_count += item.Count
									//		//		}
									//		//		//如果历史数和当前数据不想等才进行退库出库
									//		//		if out_count != parseIntCount {
									//		//			service.ConsumableNewPrescriptionDelivery(adminInfo.CurrentOrgId, p.PatientId, p.RecordDate, &dialyPrepareOne, &lastOut, creater, parseIntCount, tx)
									//		//
									//		//			service.UpdateNewAutomaticReduce(p.PatientId, p.RecordDate, p.ProjectId, lastHisProject.ID, tx)
									//		//			detail := models.AutomaticReduceDetail{
									//		//				WarehouseOutId:          0,
									//		//				WarehouseOutOrderNumber: "",
									//		//				PatientId:               p.PatientId,
									//		//				Ctime:                   time.Now().Unix(),
									//		//				Mtime:                   0,
									//		//				Status:                  1,
									//		//				RecordTime:              p.RecordDate,
									//		//				OrgId:                   p.UserOrgId,
									//		//				GoodId:                  p.ProjectId,
									//		//				GoodTypeId:              0,
									//		//				Count:                   parseIntCount,
									//		//				Type:                    0,
									//		//				ProjectId:               lastHisProject.ID,
									//		//				StorehouseId:            0,
									//		//			}
									//		//
									//		//			service.CreateNewAutoDetail(detail, tx)
									//		//
									//		//			//查询剩余库存
									//		//			goodList, _ := service.GetNewAllGoodSumCount(p.ProjectId, adminInfo.CurrentOrgId, houseConfig.StorehouseOutInfo, tx)
									//		//			var sum_count int64
									//		//			for _, item := range goodList {
									//		//				sum_count += item.StockCount
									//		//			}
									//		//
									//		//			//更新剩余库存
									//		//			service.UpdateNewGoodFlushCount(houseConfig.StorehouseOutInfo, p.ProjectId, adminInfo.CurrentOrgId, sum_count, tx)
									//		//
									//		//			//耗材
									//		//			service.UpdateNewGoodSumCountSeven(sum_count, p.ProjectId, adminInfo.CurrentOrgId, tx)
									//		//
									//		//		}
									//		//		//判断是否是零用耗材(零用但是是出库耗材)
									//		//		if goodObj.IsUse == 1 && goodObj.IsWarehouse == 1 {
									//		//
									//		//			//查询历史出库数据
									//		//			flowGood, _ := service.GetStockFlowIsBatchNumberSeventy(p.PatientId, p.RecordDate, p.ProjectId, lastHisProject.ID)
									//		//			var out_count int64
									//		//			for _, item := range flowGood {
									//		//				out_count += item.Count
									//		//			}
									//		//			//如果历史数和当前数据不想等才进行退库出库
									//		//			if out_count != parseIntCount {
									//		//				service.ConsumableNewPrescriptionDelivery(adminInfo.CurrentOrgId, p.PatientId, p.RecordDate, &dialyPrepareOne, &lastOut, creater, parseIntCount, tx)
									//		//
									//		//				service.UpdateNewAutomaticReduce(p.PatientId, p.RecordDate, p.ProjectId, lastHisProject.ID, tx)
									//		//				detail := models.AutomaticReduceDetail{
									//		//					WarehouseOutId:          0,
									//		//					WarehouseOutOrderNumber: "",
									//		//					PatientId:               p.PatientId,
									//		//					Ctime:                   time.Now().Unix(),
									//		//					Mtime:                   0,
									//		//					Status:                  1,
									//		//					RecordTime:              p.RecordDate,
									//		//					OrgId:                   p.UserOrgId,
									//		//					GoodId:                  p.ProjectId,
									//		//					GoodTypeId:              0,
									//		//					Count:                   parseIntCount,
									//		//					Type:                    0,
									//		//					ProjectId:               p.ID,
									//		//					StorehouseId:            0,
									//		//				}
									//		//
									//		//				service.CreateNewAutoDetail(detail, tx)
									//		//
									//		//				//查询剩余库存
									//		//				goodList, _ := service.GetNewAllGoodSumCount(p.ProjectId, adminInfo.CurrentOrgId, houseConfig.StorehouseOutInfo, tx)
									//		//				var sum_count int64
									//		//				for _, item := range goodList {
									//		//					sum_count += item.StockCount
									//		//				}
									//		//
									//		//				//更新剩余库存
									//		//				service.UpdateNewGoodFlushCount(houseConfig.StorehouseOutInfo, p.ProjectId, adminInfo.CurrentOrgId, sum_count, tx)
									//		//
									//		//				//耗材
									//		//				service.UpdateNewGoodSumCountSeven(sum_count, p.ProjectId, adminInfo.CurrentOrgId, tx)
									//		//			}
									//		//
									//		//		}
									//		//
									//		//	}
									//		//
									//		//}
									//
									//		//记录日志
									//		byterequest, _ := json.Marshal(p)
									//		adviceLog := models.XtDoctorAdviceLog{
									//			UserOrgId:   p.UserOrgId,
									//			PatientId:   p.PatientId,
									//			AdminUserId: adminInfo.AdminUser.Id,
									//			Module:      1,
									//			ErrLog:      string(byterequest),
									//			Status:      1,
									//			Ctime:       time.Now().Unix(),
									//			Mtime:       0,
									//			Source:      "电脑端新建his项目",
									//			RecordDate:  p.RecordDate,
									//		}
									//		service.CreateDoctorAdviceLog(adviceLog)
									//
									//		projectList = append(projectList, p)
									//
									//		if p.Type == 2 { //因为项目和耗材的基础库存在id相同的情况,所以需要根据该字段来判断,type为2的话为从项目开出来的
									//			//新增或者编辑项目,修改对应的标签数据
									//			labelOrigin, _ := service.GetProjectById(p.UserOrgId, p.ID, patient_id, recordDateTime)
									//			if labelOrigin.ID == 0 { //当天某个人的处方中的项目不存在
									//				var label models.HisLabelPrintInfo
									//				project, _ := service.GetProjectDetail(p.ProjectId)
									//				if project.CostClassify == 3 { //类别为检验检查
									//					if p.TeamId > 0 { //检验检查组套
									//						tempLabel, _ := service.GetProjectByTeamId(p.UserOrgId, p.TeamId, patient_id, recordDateTime)
									//						if tempLabel.ID == 0 {
									//							team, _ := service.GetProjectTeamDetail(p.TeamId)
									//							label.Number = tempPrescription.PrescriptionNumber
									//							label.ProjectId = project.ID
									//							label.Status = 1
									//							label.IsPrint = 2
									//							label.DoctorId = info.DoctorId
									//							label.UserOrgId = p.UserOrgId
									//							label.PatientId = patient_id
									//							label.RecordDate = recordDateTime
									//							label.Ctime = time.Now().Unix()
									//							label.Mtime = time.Now().Unix()
									//							label.ItemId = p.TeamId
									//							label.FeedetlSn = p.FeedetlSn
									//							label.PProjectId = p.ID
									//							label.ProjectName = team.ProjectTeam
									//							label.PatientName = patient.Name
									//							service.CreateNewHisLabelRecord(&label, tx)
									//						}
									//					} else { //单条检验检查项目
									//						label.Number = tempPrescription.PrescriptionNumber
									//						label.ProjectId = project.ID
									//						label.Status = 1
									//						label.DoctorId = info.DoctorId
									//						label.UserOrgId = p.UserOrgId
									//						label.PatientId = patient_id
									//						label.RecordDate = recordDateTime
									//						label.IsPrint = 2
									//						label.Ctime = time.Now().Unix()
									//						label.Mtime = time.Now().Unix()
									//						label.FeedetlSn = p.FeedetlSn
									//						label.PProjectId = p.ID
									//						label.ItemId = p.TeamId
									//						label.ProjectName = project.ProjectName
									//						label.PatientName = patient.Name
									//						service.CreateNewHisLabelRecord(&label, tx)
									//					}
									//				}
									//			}
									//		}
									//
									//	}
									//}

								}

								//插入检验数据
								if p.Type == 2 { //因为项目和耗材的基础库存在id相同的情况,所以需要根据该字段来判断,type为2的话为从项目开出来的
									//新增或者编辑项目,修改对应的标签数据
									labelOrigin, _ := service.GetProjectById(p.UserOrgId, p.ID, patient_id, recordDateTime)
									if labelOrigin.ID == 0 { //当天某个人的处方中的项目不存在
										var label models.HisLabelPrintInfo
										project, _ := service.GetProjectDetail(p.ProjectId)
										if project.CostClassify == 3 { //类别为检验检查
											if p.TeamId > 0 { //检验检查组套
												tempLabel, _ := service.GetProjectByTeamId(p.UserOrgId, p.TeamId, patient_id, recordDateTime)
												if tempLabel.ID == 0 {
													team, _ := service.GetProjectTeamDetail(p.TeamId)
													label.Number = tempPrescription.PrescriptionNumber
													label.ProjectId = project.ID
													label.Status = 1
													label.IsPrint = 2
													label.DoctorId = info.DoctorId
													label.UserOrgId = p.UserOrgId
													label.PatientId = patient_id
													label.RecordDate = recordDateTime
													label.Ctime = time.Now().Unix()
													label.Mtime = time.Now().Unix()
													label.ItemId = p.TeamId
													label.FeedetlSn = p.FeedetlSn
													label.PProjectId = p.ID
													label.ProjectName = team.ProjectTeam
													label.PatientName = patient.Name
													service.CreateHisLabelRecord(&label)
												}
											} else { //单条检验检查项目
												label.Number = tempPrescription.PrescriptionNumber
												label.ProjectId = project.ID
												label.Status = 1
												label.DoctorId = info.DoctorId
												label.UserOrgId = p.UserOrgId
												label.PatientId = patient_id
												label.RecordDate = recordDateTime
												label.IsPrint = 2
												label.Ctime = time.Now().Unix()
												label.Mtime = time.Now().Unix()
												label.FeedetlSn = p.FeedetlSn
												label.PProjectId = p.ID
												label.ItemId = p.TeamId
												label.ProjectName = project.ProjectName
												label.PatientName = patient.Name
												service.CreateHisLabelRecord(&label)
											}
										}
									}
								}

								service.CreateNewHisProjectTwo(&p, tx)
								var randNum int
								randNum = rand.Intn(1000) + 1000
								p.FeedetlSn = strconv.FormatInt(int64(randNum), 10) + "-" + "2" + "-" + strconv.FormatInt(p.ID, 10)

								goodBase, _ := service.GetBaseGoodById(p.ProjectId, p.UserOrgId)

								if goodBase.ID > 0 {
									tx.Rollback()
									c.ServeDynamicFailJsonSend(goodBase.SpecificationName + "已停用!请更换其他耗材")
									return
								}
								service.CreateNewHisProjectTwo(&p, tx)

								houseConfig, _ := service.GetNewAllStoreHouseConfig(p.UserOrgId, tx)

								//查询剩余库存
								goodList, _ := service.GetNewAllGoodSumCount(p.ProjectId, adminInfo.CurrentOrgId, houseConfig.StorehouseOutInfo, tx)
								var sum_count int64
								for _, item := range goodList {
									sum_count += item.StockCount
								}

								//更新剩余库存
								service.UpdateNewGoodFlushCount(houseConfig.StorehouseOutInfo, p.ProjectId, adminInfo.CurrentOrgId, sum_count, tx)

								//耗材
								service.UpdateNewGoodSumCountSeven(sum_count, p.ProjectId, adminInfo.CurrentOrgId, tx)

								adviceObj, _ := service.GetLastHisProjectById(p.PatientId, p.UserOrgId, p.RecordDate, p.ProjectId, tx)

								outInfoTwo, _ := service.GetGoodWarehouseOutInfoByAdviceId(p.PatientId, p.UserOrgId, p.RecordDate, p.ProjectId, tx)

								if len(outInfoTwo) > 0 {
									for _, item := range outInfoTwo {
										service.UpdateGoodOutInfoByAdviceId(item.ID, adviceObj.ID, tx)
									}
								}

								drugAutoDetail, _ := service.GetGoodAutoDetail(p.PatientId, p.UserOrgId, p.RecordDate, p.ProjectId, tx)
								if len(drugAutoDetail) > 0 {
									for _, item := range drugAutoDetail {
										service.UpdateGoodAutoDetail(item.ID, adviceObj.ID, tx)
									}
								}

								tx.Commit()
							}
						}
					}
					//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)
					//
					//		}
					//	}
					//}

				}

			}
		}

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

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

		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["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["diagnoses"] == nil || reflect.TypeOf(items["diagnoses"]).String() != "string" {
					//	utils.ErrorLog("diagnoses")
					//}
					diagnoses, _ := items["diagnoses"].(string)

					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)
					//result := strings.Split(preTime, " ")
					theTime3, _ := time.ParseInLocation(timeLayout, record_date, 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:        1,
							BatchNumber:        "",
							PrescriptionNumber: hpInfo.PrescriptionNumber,
							PreTime:            pTime,
							PType:              p_type,
							MedType:            med_type,
							Diagnose:           diagnoses,
						}
						tempPrescription = prescription
						service.SaveHisPrescription(tempPrescription)
						redis := service.RedisClient()
						key := strconv.FormatInt(adminInfo.CurrentOrgId, 10) + ":" + strconv.FormatInt(theTime.Unix(), 10) + ":his_advices_list_all"
						redis.Set(key, "", time.Second)

						keyOne := strconv.FormatInt(adminInfo.CurrentOrgId, 10) + ":" + strconv.FormatInt(patient_id, 10) + ":" + strconv.FormatInt(recordDateTime, 10) + ":his_doctor_advice"
						redis.Set(keyOne, "", time.Second)
						keySeven := "scheduals_" + record_date + "_" + strconv.FormatInt(adminInfo.CurrentOrgId, 10)
						redis.Set(keySeven, "", time.Second)
						defer redis.Close()
					} 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
						tempPrescription.Diagnose = diagnoses

						service.SaveHisPrescription(tempPrescription)
						redis := service.RedisClient()
						key := strconv.FormatInt(adminInfo.CurrentOrgId, 10) + ":" + strconv.FormatInt(theTime.Unix(), 10) + ":his_advices_list_all"

						redis.Set(key, "", time.Second)
						keyOne := strconv.FormatInt(adminInfo.CurrentOrgId, 10) + ":" + strconv.FormatInt(patient_id, 10) + ":" + strconv.FormatInt(recordDateTime, 10) + ":his_doctor_advice"
						redis.Set(keyOne, "", time.Second)
						keySeven := "scheduals_" + record_date + "_" + strconv.FormatInt(adminInfo.CurrentOrgId, 10)
						redis.Set(keySeven, "", time.Second)
						defer redis.Close()
					}
					//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)
						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 = theTime3.Unix()
								s.Status = 1
								s.UserOrgId = adminInfo.CurrentOrgId
								s.RecordDate = theTime3.Unix()
								s.StartTime = tempPrescription.PreTime
								s.Groupno = groupNo

								s.PatientId = patient_id
								s.HisPatientId = his_patient_id
								s.StartTime = pTime
								s.IsSettle = 2
								errcode := c.setAdviceWithJSON(&s, advice.(map[string]interface{}))
								if errcode > 0 {
									c.ServeFailJSONWithSGJErrorCode(errcode)
									return
								}

								s.StartTime = pTime
								var total_count int64 //处方总库存
								//查询改药品信息
								medical, _ := service.GetBaseDrugMedical(s.DrugId)
								prescribingNumberSix := strconv.FormatFloat(s.PrescribingNumber, 'f', -1, 64)
								prescribingNumberSeven, _ := strconv.ParseInt(prescribingNumberSix, 10, 64)

								if s.PrescribingNumberUnit == medical.MaxUnit && medical.MaxUnit != medical.MinUnit {
									total_count += prescribingNumberSeven * medical.MinNumber
								}

								if s.PrescribingNumberUnit == medical.MinUnit && medical.MaxUnit != medical.MinUnit {
									total_count += prescribingNumberSeven
								}

								if s.PrescribingNumberUnit == medical.MaxUnit && medical.MaxUnit == medical.MinUnit {
									total_count += prescribingNumberSeven
								}
								if adminInfo.CurrentOrgId == 10215 || adminInfo.CurrentOrgId == 3877 {
									storeConfig, _ := service.GetAllStoreHouseConfig(adminInfo.CurrentOrgId)
									lastWarehouse, _ := service.FindLastDrugWarehousingInfoByID(s.DrugId, storeConfig.DrugStorehouseOut)
									if s.Price != lastWarehouse.RetailPrice {
										s.Price = lastWarehouse.RetailPrice
									}
									if s.Price == 0 {
										if lastWarehouse.ID == 0 {
											lastWarehouseTwo, _ := service.FindLastDrugWarehousingInfoByIDTwo(s.DrugId, storeConfig.DrugStorehouseOut)
											s.Price = lastWarehouseTwo.RetailPrice
										}

									}
								}

								if adminInfo.CurrentOrgId != 10206 {
									if s.ID == 0 {
										//查询改药品是否已经停用
										base, _ := service.GetBasedrugById(s.DrugId, s.UserOrgId)

										if base.ID > 0 {
											c.ServeDynamicFailJsonSend(base.DrugName + "已停用!请更换其他药品")
											return

										}

										drugMedical, _ := service.GetBaseDrugMedical(s.DrugId)

										if drugMedical.SumCount == 0 {
											c.ServeDynamicFailJsonSend(drugMedical.DrugName + "库存不足,保存失败!")
											return

										}
									}
								}

								//赤峰
								if s.UserOrgId == 10265 || s.UserOrgId == 10489 {
									drug, _ := service.GetDrugByGoodId(s.DrugId)
									info, _ := service.GetWarehoseInfoByDrugId(s.DrugId, s.UserOrgId)
									if info.RetailPrice > 0 {
										if s.DeliveryWay == "口服" {
											if s.PrescribingNumberUnit == drug.MaxUnit && drug.MaxUnit != drug.MinUnit {
												s.Price = drug.RetailPrice
											}
											if s.PrescribingNumberUnit == drug.MinUnit && drug.MaxUnit != drug.MinUnit {
												s.Price = info.RetailPrice
											}

											if s.PrescribingNumberUnit == drug.MaxUnit && drug.MaxUnit == drug.MinUnit {
												s.Price = info.RetailPrice
											}
										}
									}
								}

								service.CreateHisDoctorAdvice(&s)

								//记录日志
								byterequest, _ := json.Marshal(s)
								adviceLog := models.XtDoctorAdviceLog{
									UserOrgId:   s.UserOrgId,
									PatientId:   s.PatientId,
									AdminUserId: adminInfo.AdminUser.Id,
									Module:      1,
									ErrLog:      string(byterequest),
									Status:      1,
									Ctime:       time.Now().Unix(),
									Mtime:       0,
									Source:      "电脑端新建his医嘱",
									RecordDate:  s.AdviceDate,
								}
								service.CreateDoctorAdviceLog(adviceLog)

								//存储切片中
								adviceList = append(adviceList, s)

								redis := service.RedisClient()
								key := strconv.FormatInt(adminInfo.CurrentOrgId, 10) + ":" + strconv.FormatInt(theTime.Unix(), 10) + ":his_advices_list_all"
								redis.Set(key, "", time.Second)
								keyOne := strconv.FormatInt(adminInfo.CurrentOrgId, 10) + ":" + strconv.FormatInt(patient_id, 10) + ":" + strconv.FormatInt(recordDateTime, 10) + ":his_doctor_advice"
								redis.Set(keyOne, "", time.Second)
								keySeven := "scheduals_" + record_date + "_" + strconv.FormatInt(adminInfo.CurrentOrgId, 10)
								redis.Set(keySeven, "", time.Second)
								var randNum int
								randNum = rand.Intn(1000) + 1000
								//timestamp := time.Now().Unix()
								//tempTime := time.Unix(timestamp, 0)
								//timeFormat := tempTime.Format("20060102150405")
								s.FeedetlSn = strconv.FormatInt(int64(randNum), 10) + "-" + "1" + "-" + strconv.FormatInt(s.ID, 10)
								service.CreateHisDoctorAdvice(&s)
								keySix := strconv.FormatInt(adminInfo.CurrentOrgId, 10) + ":" + strconv.FormatInt(theTime.Unix(), 10) + ":his_advices_list_all"
								redis.Set(keySix, "", time.Second)
								keyFive := strconv.FormatInt(adminInfo.CurrentOrgId, 10) + ":" + strconv.FormatInt(patient_id, 10) + ":" + strconv.FormatInt(recordDateTime, 10) + ":his_doctor_advice"
								redis.Set(keyFive, "", time.Second)
								keyEight := "scheduals_" + record_date + "_" + strconv.FormatInt(adminInfo.CurrentOrgId, 10)
								redis.Set(keyEight, "", time.Second)
								defer redis.Close()

							}
						}

					}
					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.PatientId = patient_id
								p.RecordDate = theTime3.Unix()
								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
								}

								if p.ID == 0 {
									p.IsOut = 2
								}
								if p.ID > 0 {
									projectDetail, _ := service.GetHisPrescriptonProjectById(p.ID)
									p.IsOut = projectDetail.IsOut
								}
								if adminInfo.CurrentOrgId == 10215 || adminInfo.CurrentOrgId == 3877 {
									storeConfig, _ := service.GetAllStoreHouseConfig(adminInfo.CurrentOrgId)
									if p.Type == 3 {
										lastWarehouse, _ := service.FindFirstWarehousingInfoByStockThree(p.ProjectId, storeConfig.DrugStorehouseOut)
										if p.Price != lastWarehouse.PackingPrice {
											p.Price = lastWarehouse.PackingPrice
										}
										if p.Price == 0 {
											lastWarehouseTwo, _ := service.FindFirstWarehousingInfoByStockFour(p.ProjectId, storeConfig.DrugStorehouseOut)
											p.Price = lastWarehouseTwo.PackingPrice
										}

										if p.Unit == "" {
											goodInfoOne, _ := service.GetGoodInformationByGoodIdOne(p.ProjectId)
											p.Unit = goodInfoOne.PackingUnit
										}
									}

								}

								if adminInfo.CurrentOrgId != 10206 {
									if p.Type == 3 {
										if p.ID == 0 {
											//查询该耗材是否停用
											goodInfoSeven, _ := service.GetGoodByIdIsStop(p.ProjectId, adminInfo.CurrentOrgId)
											//表示该耗材已经停用,不能保存
											if goodInfoSeven.ID == 0 {
												goodInfoOne, _ := service.GetGoodInformationByGoodIdOne(p.ProjectId)
												c.ServeDynamicFailJsonSend(goodInfoOne.GoodName + "耗材已经停用,保存失败!")
												return
											}

											goodInfoOne, _ := service.GetGoodInformationByGoodIdOne(p.ProjectId)
											if goodInfoOne.SumCount == 0 {
												c.ServeDynamicFailJsonSend(goodInfoOne.GoodName + "耗材无库存,保存失败!")
												return
											}
										}

									}
								}

								service.CreateHisProjectTwo(&p)
								//记录日志
								byterequest, _ := json.Marshal(p)
								adviceLog := models.XtDoctorAdviceLog{
									UserOrgId:   p.UserOrgId,
									PatientId:   p.PatientId,
									AdminUserId: adminInfo.AdminUser.Id,
									Module:      1,
									ErrLog:      string(byterequest),
									Status:      1,
									Ctime:       time.Now().Unix(),
									Mtime:       0,
									Source:      "电脑端新建his项目",
									RecordDate:  p.RecordDate,
								}
								service.CreateDoctorAdviceLog(adviceLog)

								projectList = append(projectList, p)
								var randNum int
								randNum = rand.Intn(1000) + 1000

								p.FeedetlSn = strconv.FormatInt(int64(randNum), 10) + "-" + "2" + "-" + strconv.FormatInt(p.ID, 10)

								if p.Type == 2 { //因为项目和耗材的基础库存在id相同的情况,所以需要根据该字段来判断,type为2的话为从项目开出来的
									//新增或者编辑项目,修改对应的标签数据
									labelOrigin, _ := service.GetProjectById(p.UserOrgId, p.ID, patient_id, recordDateTime)
									if labelOrigin.ID == 0 { //当天某个人的处方中的项目不存在
										var label models.HisLabelPrintInfo
										project, _ := service.GetProjectDetail(p.ProjectId)
										if project.CostClassify == 3 { //类别为检验检查
											if p.TeamId > 0 { //检验检查组套
												tempLabel, _ := service.GetProjectByTeamId(p.UserOrgId, p.TeamId, patient_id, recordDateTime)
												if tempLabel.ID == 0 {
													team, _ := service.GetProjectTeamDetail(p.TeamId)
													label.Number = tempPrescription.PrescriptionNumber
													label.ProjectId = project.ID
													label.Status = 1
													label.IsPrint = 2
													label.DoctorId = info.DoctorId
													label.UserOrgId = p.UserOrgId
													label.PatientId = patient_id
													label.RecordDate = recordDateTime
													label.Ctime = time.Now().Unix()
													label.Mtime = time.Now().Unix()
													label.ItemId = p.TeamId
													label.FeedetlSn = p.FeedetlSn
													label.PProjectId = p.ID
													label.ProjectName = team.ProjectTeam
													label.PatientName = patient.Name
													service.CreateHisLabelRecord(&label)
												}
											} else { //单条检验检查项目
												label.Number = tempPrescription.PrescriptionNumber
												label.ProjectId = project.ID
												label.Status = 1
												label.DoctorId = info.DoctorId
												label.UserOrgId = p.UserOrgId
												label.PatientId = patient_id
												label.RecordDate = recordDateTime
												label.IsPrint = 2
												label.Ctime = time.Now().Unix()
												label.Mtime = time.Now().Unix()
												label.FeedetlSn = p.FeedetlSn
												label.PProjectId = p.ID
												label.ItemId = p.TeamId
												label.ProjectName = project.ProjectName
												label.PatientName = patient.Name
												service.CreateHisLabelRecord(&label)
											}
										}
									}
								}

								service.SaveHisProjectTwo(&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 = 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)
					//
					//		}
					//	}
					//}

				}

			}

			//查询今日该患者开的药品处方
			hisdoctorlist, _ := service.GetHisAdviceListByDrugIdTwo(patient_id, recordDateTime, adminInfo.CurrentOrgId)

			drugOutConfig, _ := service.GetDrugOpenConfigOne(adminInfo.CurrentOrgId)
			//药品出库
			if drugOutConfig.IsOpen == 1 {
				for _, item := range hisdoctorlist {
					drug, _ := service.FindBaseDrugLibRecordSeven(adminInfo.CurrentOrgId, item.DrugId)

					// 查询该药品最后一次出库记录
					druginfo, _ := service.GetLastDrugWarehouseOutByDrugIdTwenty(item.DrugId, patient_id, recordDateTime, item.ID)

					if len(druginfo) > 0 {
						//回退库存
						for _, it := range druginfo {

							if it.CountUnit == drug.MaxUnit && drug.MaxUnit != drug.MinUnit {

								service.ModifyDrugWarehouseInfoStockMaxNumber(it.Count, it.DrugId, it.OrgId, it.WarehouseInfoId)

							}
							if it.CountUnit == drug.MinUnit && drug.MaxUnit != drug.MinUnit {

								service.ModifyDrugWarehouseInfoStockMinNumber(it.Count, it.DrugId, it.OrgId, it.WarehouseInfoId)

							}
							if it.CountUnit == drug.MaxUnit && drug.MaxUnit == drug.MinUnit {

								service.ModifyDrugWarehouseInfoStockMaxNumber(it.Count, it.DrugId, it.OrgId, it.WarehouseInfoId)

							}
						}
					}

					//删除记录
					service.DeleteDrugAutoWarehouseSeven(item.DrugId, patient_id, recordDateTime, item.ID)
					//查询最后一次数据
					if drugOutConfig.IsOpen == 1 {
						//出库
						if drug.IsUse == 2 {
							creater := adminInfo.AdminUser.Id
							service.HisDrugsDelivery(item.UserOrgId, creater, item)

						}

						//更新字典里面的库存
						stockInfo, _ := service.GetDrugAllStockInfo(storeConfig.DrugStorehouseOut, item.UserOrgId, item.DrugId)
						var sum_count int64
						for _, its := range stockInfo {
							baseDrug, _ := service.GetBaseDrugMedical(its.DrugId)
							if its.MaxUnit == baseDrug.MaxUnit {
								its.StockMaxNumber = its.StockMaxNumber * baseDrug.MinNumber
							}
							sum_count += its.StockMaxNumber + its.StockMinNumber
						}
						//更新基础库存
						service.UpdateBaseDrugSumTwo(item.DrugId, sum_count, item.UserOrgId)
						//剩余库存
						service.UpdateDrugStockCount(item.DrugId, item.UserOrgId, storeConfig.DrugStorehouseOut, sum_count)

						over, _ := service.FindOverCount(item.DrugId, item.UserOrgId, storeConfig.DrugStorehouseOut)
						service.UpdateActOut(over.ID, over.SumInCount, over.FlushCount, over.SumCancelCount)

					}
				}
			}

			fmt.Println("耗材----------------------------------", goodOutConfig.IsOpen)
			//耗材保存处方出库
			if goodOutConfig.IsOpen == 1 {

				//查询今日耗材出库数量
				hisgoodlist, _ := service.GetHisGoodList(patient_id, recordDateTime, adminInfo.CurrentOrgId)

				for _, item := range hisgoodlist {

					//查询历史出库数据
					flowGood, _ := service.GetStockFlowIsBatchNumberSeventy(item.PatientId, item.RecordDate, item.ProjectId, item.ID)
					var out_count_five int64
					for _, item := range flowGood {
						out_count_five += item.Count
					}

					parseIntCount, _ := strconv.ParseInt(item.Count, 10, 64)

					fmt.Println("out_count_five-------------------", out_count_five)
					fmt.Println("parseIntCount---------------", parseIntCount)
					if out_count_five != parseIntCount {

						//查询耗材最后一次出库记录
						wareOut, _ := service.GetLastGoodWarehouseOutInfoByProjectId(item.ProjectId, patient_id, recordDateTime, item.ID)
						//查询默认出库仓库库存
						storeConfig, _ := service.GetAllStoreHouseConfig(adminInfo.CurrentOrgId)
						if len(wareOut) > 0 {

							for _, it := range wareOut {
								//回退库存
								service.ModifyGoodWarehouseInfo(it.GoodId, it.WarehouseInfotId, it.OrgId, it.Count)

								//删除出库记录
								service.DeleteGoodWarehouseOutInfo(it.GoodId, it.SysRecordTime, it.OrgId, it.ProjectId)

							}
						}

						timeStr := time.Now().Format("2006-01-02")
						timeArr := strings.Split(timeStr, "-")
						total, _ := service.FindAllWarehouseOut(adminInfo.CurrentOrgId)

						total = total + 1
						warehousing_out_order := strconv.FormatInt(adminInfo.CurrentOrgId, 10) + timeArr[0] + timeArr[1] + timeArr[2] + "000"
						number, _ := strconv.ParseInt(warehousing_out_order, 10, 64)
						number = number + total
						warehousing_out_order = "CKD" + strconv.FormatInt(number, 10)

						operation_time := time.Now().Unix()
						creater := c.GetAdminUserInfo().AdminUser.Id

						recordDateStr := time.Now().Format("2006-01-02")
						recordDate, _ := utils.ParseTimeStringToTime("2006-01-02", recordDateStr)
						nowtime := recordDate.Unix()
						warehouseOut := models.WarehouseOut{
							WarehouseOutOrderNumber: warehousing_out_order,
							OperationTime:           operation_time,
							OrgId:                   adminInfo.CurrentOrgId,
							Creater:                 creater,
							Ctime:                   time.Now().Unix(),
							Status:                  1,
							WarehouseOutTime:        nowtime,
							Type:                    1,
							StorehouseId:            storeConfig.StorehouseOutInfo,
							IsCheck:                 1,
							IsSys:                   1,
						}
						//查询是否生成出库单
						out, _ := service.FindPrescriptionWarehouseOut(adminInfo.CurrentOrgId, nowtime)

						if out.ID == 0 {
							service.AddSigleWarehouseOutOne(&warehouseOut)
						}

						lastOut, _ := service.FindLastPrescriptionWarehouseOut(adminInfo.CurrentOrgId, nowtime)

						goodObj, _ := service.GetGoodInformationByGoodIdThirty(item.ProjectId)
						houseConfig, _ := service.GetAllStoreHouseConfig(item.UserOrgId)

						dialyPrepareOne := models.DialysisBeforePrepare{
							GoodTypeId:   goodObj.GoodTypeId,
							GoodId:       item.ProjectId,
							PatientId:    item.PatientId,
							RecordDate:   item.RecordDate,
							UserOrgId:    adminInfo.CurrentOrgId,
							Count:        parseIntCount,
							Ctime:        time.Now().Unix(),
							Creater:      creater,
							Status:       1,
							StorehouseId: houseConfig.StorehouseOutInfo,
							ProjectId:    item.ID,
						}
						goodinfo, _ := service.GetGoodInformationByGoodIdThirty(item.ProjectId)
						if goodinfo.IsUser == 2 || goodinfo.IsUser == 0 {

							//查询历史出库数据
							flowGood, _ := service.GetStockFlowIsBatchNumberSeventy(item.PatientId, item.RecordDate, item.ProjectId, item.ID)
							var out_count int64
							for _, item := range flowGood {
								out_count += item.Count
							}

							//如果历史数和当前数据不想等才进行退库出库
							if out_count != parseIntCount {
								service.ConsumablePrescriptionDelivery(adminInfo.CurrentOrgId, item.PatientId, item.RecordDate, &dialyPrepareOne, &lastOut, creater, parseIntCount)

								service.UpdateAutomaticReduce(item.PatientId, item.RecordDate, item.ProjectId, item.ID)
								detail := models.AutomaticReduceDetail{
									WarehouseOutId:          0,
									WarehouseOutOrderNumber: "",
									PatientId:               item.PatientId,
									Ctime:                   time.Now().Unix(),
									Mtime:                   0,
									Status:                  1,
									RecordTime:              item.RecordDate,
									OrgId:                   item.UserOrgId,
									GoodId:                  item.ProjectId,
									GoodTypeId:              0,
									Count:                   parseIntCount,
									Type:                    0,
									ProjectId:               item.ID,
									StorehouseId:            0,
								}

								service.CreateAutoDetail(detail)

								//查询剩余库存
								goodList, _ := service.GetAllGoodSumCount(item.ProjectId, adminInfo.CurrentOrgId, houseConfig.StorehouseOutInfo)
								var sum_count int64
								for _, item := range goodList {
									sum_count += item.StockCount
								}

								//更新剩余库存
								service.UpdateGoodFlushCount(houseConfig.StorehouseOutInfo, item.ProjectId, adminInfo.CurrentOrgId, sum_count)

								//耗材
								service.UpdateGoodSumCountSeven(sum_count, item.ProjectId, adminInfo.CurrentOrgId)
							}

						}

						if goodinfo.IsUser == 1 && goodinfo.IsWarehouse == 1 {
							//查询历史出库数据
							flowGood, _ := service.GetStockFlowIsBatchNumberSeventy(item.PatientId, item.RecordDate, item.ProjectId, item.ID)
							var out_count int64
							for _, item := range flowGood {
								out_count += item.Count
							}
							//如果历史数和当前数据不想等才进行退库出库
							if out_count != parseIntCount {
								service.ConsumablePrescriptionDelivery(adminInfo.CurrentOrgId, item.PatientId, item.RecordDate, &dialyPrepareOne, &lastOut, creater, parseIntCount)

								service.UpdateAutomaticReduce(item.PatientId, item.RecordDate, item.ProjectId, item.ID)
								detail := models.AutomaticReduceDetail{
									WarehouseOutId:          0,
									WarehouseOutOrderNumber: "",
									PatientId:               item.PatientId,
									Ctime:                   time.Now().Unix(),
									Mtime:                   0,
									Status:                  1,
									RecordTime:              item.RecordDate,
									OrgId:                   item.UserOrgId,
									GoodId:                  item.ProjectId,
									GoodTypeId:              0,
									Count:                   parseIntCount,
									Type:                    0,
									ProjectId:               item.ID,
									StorehouseId:            0,
								}

								service.CreateAutoDetail(detail)

								//查询剩余库存
								goodList, _ := service.GetAllGoodSumCount(item.ProjectId, adminInfo.CurrentOrgId, houseConfig.StorehouseOutInfo)
								var sum_count int64
								for _, item := range goodList {
									sum_count += item.StockCount
								}

								//更新剩余库存
								service.UpdateGoodFlushCount(houseConfig.StorehouseOutInfo, item.ProjectId, adminInfo.CurrentOrgId, sum_count)

								//耗材
								service.UpdateGoodSumCountSeven(sum_count, item.ProjectId, adminInfo.CurrentOrgId)
							}

						}

					}
				}
			}

			////同步到自备药
			selfPrescriptionOpen, _ := service.GeteSelfPrescriptionOpen(adminInfo.CurrentOrgId)

			if selfPrescriptionOpen.IsOpen == 1 {

				timeStr := time.Now().Format("2006-01-02")
				timeArr := strings.Split(timeStr, "-")
				total, _ := service.FindSelfAllWarehouseTotal(adminInfo.CurrentOrgId, tx)
				total = total + 1

				operation_time := time.Now().Unix()
				creater := adminInfo.AdminUser.Id

				warehousing_order := "YPRKD" + strconv.FormatInt(adminInfo.CurrentOrgId, 10) + timeArr[0] + timeArr[1] + timeArr[2] + "000" + strconv.FormatInt(total, 10)

				warehousing := models.XtSelfDrugWarehouse{
					WarehousingOrder: warehousing_order,
					OperationTime:    operation_time,
					OrgId:            adminInfo.CurrentOrgId,
					Creater:          creater,
					Ctime:            time.Now().Unix(),
					Status:           1,
					WarehousingTime:  recordDateTime,
					Type:             0,
					StorehouseId:     0,
					IsCheck:          1,
					PatientId:        patient_id,
					IsSys:            1,
				}

				selfDrugWarehouse, _ := service.GetSelfDrugWarehouseByWaresingId(patient_id, recordDateTime, adminInfo.CurrentOrgId, tx)

				if selfDrugWarehouse.ID == 0 {
					service.AddSelfDrugWarehouse(&warehousing, tx)
				}
				if selfDrugWarehouse.ID > 0 {
					service.UpdateSelfDrugWarehouse(&warehousing, tx)
				}
				info, _ := service.FindLastSelfWarehousing(adminInfo.CurrentOrgId, patient_id, tx)
				fmt.Println(info)

				for _, item := range hisdoctorlist {

					//查询该病人的该药品是否已经入库
					selfdruginfo, _ := service.GetSelfDrugWarehouseInfoByInfo(item.ID, item.PatientId, item.AdviceDate, item.UserOrgId, item.DrugId, tx)
					selfBasedrug, _ := service.GetSelfBasedrugById(item.DrugId, item.UserOrgId, tx)
					var in_count int64
					if len(selfdruginfo) > 0 {
						for _, item := range selfdruginfo {
							var in_count_one int64
							if item.WarehouseingUnit != selfBasedrug.MaxUnit && selfBasedrug.MaxUnit != selfBasedrug.MinUnit {
								in_count_one = item.WarehousingCount * selfBasedrug.MinNumber
							}

							if item.WarehouseingUnit == selfBasedrug.MinUnit && selfBasedrug.MaxUnit != selfBasedrug.MinUnit {
								in_count_one = item.WarehousingCount
							}

							if item.WarehouseingUnit == selfBasedrug.MaxUnit && selfBasedrug.MaxUnit == selfBasedrug.MinUnit {
								in_count_one = item.WarehousingCount
							}

							in_count += in_count_one
						}

					}

					if selfBasedrug.IsSelfDrug == 1 {
						var total_count int64

						prescribingNumberSix := strconv.FormatFloat(item.PrescribingNumber, 'f', -1, 64)
						prescribingNumberSeven, _ := strconv.ParseInt(prescribingNumberSix, 10, 64)

						if item.PrescribingNumberUnit == selfBasedrug.MaxUnit && selfBasedrug.MaxUnit != selfBasedrug.MinUnit {
							total_count += prescribingNumberSeven * selfBasedrug.MinNumber
						}

						if item.PrescribingNumberUnit == selfBasedrug.MinUnit && selfBasedrug.MaxUnit != selfBasedrug.MinUnit {
							total_count += prescribingNumberSeven
						}

						if item.PrescribingNumberUnit == selfBasedrug.MaxUnit && selfBasedrug.MaxUnit == selfBasedrug.MinUnit {
							total_count += prescribingNumberSeven
						}

						//入库
						if total_count > in_count {

							selfwarehouseInfo := &models.XtSelfDrugWarehouseInfo{
								WarehousingOrder: warehousing_order,
								WarehousingId:    info.ID,
								DrugId:           item.DrugId,
								Number:           "",
								ProductDate:      0,
								ExpiryDate:       0,
								WarehousingCount: total_count - in_count,
								WarehouseingUnit: selfBasedrug.MinUnit,
								Price:            0,
								TotalPrice:       0,
								Status:           1,
								Ctime:            time.Now().Unix(),
								Remark:           "",
								OrgId:            adminInfo.CurrentOrgId,
								Type:             0,
								Manufacturer:     selfBasedrug.Manufacturer,
								Dealer:           selfBasedrug.Dealer,
								StockMaxNumber:   total_count - in_count,
								RetailTotalPrice: 0,
								BatchNumber:      "",
								MaxUnit:          selfBasedrug.MinUnit,
								MinUnit:          selfBasedrug.MinUnit,
								RetailPrice:      0,
								StorehouseId:     0,
								IsCheck:          1,
								StockMinNumber:   0,
								PatientId:        patient_id,
								IsSys:            1,
								RecordDate:       item.RecordDate,
								AdviceId:         item.ID,
							}

							service.CreateSelfDrugWarehouseInfo(selfwarehouseInfo, tx)

							lastDrugWarhouseInfo, _ := service.GetLastSelfDrugWarehouseInfoById(adminInfo.CurrentOrgId, tx)
							Creator := adminInfo.AdminUser.Id

							//查询默认仓库剩余多少库存
							list, _ := service.GetDrugSumCountByPatient(patient_id, adminInfo.CurrentOrgId, item.DrugId, tx)
							var sum_count int64
							for _, it := range list {
								baseDrug, _ := service.GetSelfBaseDrugMedical(it.DrugId, tx)
								if it.MaxUnit == baseDrug.MaxUnit {
									it.StockMaxNumber = it.StockMaxNumber * baseDrug.MinNumber
									it.WarehousingCount = it.WarehousingCount * baseDrug.MinNumber
								}
								sum_count += it.StockMaxNumber + it.StockMinNumber
							}
							flow := &models.XtSelfDrugFlow{
								WarehousingId:           info.ID,
								DrugId:                  item.DrugId,
								Number:                  "",
								BatchNumber:             "",
								Count:                   total_count - in_count,
								UserOrgId:               adminInfo.CurrentOrgId,
								PatientId:               item.PatientId,
								SystemTime:              time.Now().Unix(),
								ConsumableType:          1,
								IsSys:                   1,
								WarehousingOrder:        warehousing_order,
								WarehouseOutId:          0,
								WarehouseOutOrderNumber: "",
								IsEdit:                  0,
								CancelStockId:           0,
								CancelOrderNumber:       "",
								Manufacturer:            selfBasedrug.Manufacturer,
								Dealer:                  selfBasedrug.Dealer,
								Creator:                 Creator,
								UpdateCreator:           Creator,
								Status:                  1,
								Ctime:                   item.AdviceDate,
								Mtime:                   0,
								Price:                   item.Price,
								WarehousingDetailId:     lastDrugWarhouseInfo.ID,
								WarehouseOutDetailId:    0,
								CancelOutDetailId:       0,
								ExpireDate:              0,
								ProductDate:             0,
								MaxUnit:                 selfBasedrug.MinUnit,
								MinUnit:                 selfBasedrug.MinUnit,
								StorehouseId:            0,
								OverCount:               sum_count,
								OperateTime:             time.Now().Unix(),
								AdviceId:                item.ID,
							}
							service.CreateSelfDrugFlow(flow, tx)

							drugInfolist, _ := service.GetSelfDrugSumCountByStorehouseId(item.PatientId, item.UserOrgId, item.DrugId, tx)

							var total_count int64 // 入库总数量
							var over_count int64  //剩余库存
							for _, it := range drugInfolist {
								if it.MaxUnit == selfBasedrug.MaxUnit {
									it.WarehousingCount = it.WarehousingCount * selfBasedrug.MinNumber
									it.StockMaxNumber = it.StockMaxNumber * selfBasedrug.MinNumber
								}
							}
							for _, it := range drugInfolist {
								total_count += it.WarehousingCount
								over_count += it.StockMaxNumber + it.StockMinNumber

							}
							//查询该仓库是否有默认数据
							selfDrugStock, _ := service.GetSelfDrugStockCount(item.PatientId, item.DrugId, item.UserOrgId, tx)

							if selfDrugStock.ID == 0 {
								drugStock := models.XtSelfDrugStockCount{
									UserOrgId:      item.UserOrgId,
									PatientId:      item.PatientId,
									SumInCount:     total_count,
									SumOutCount:    0,
									SumCancelCount: 0,
									DrugId:         item.DrugId,
									Ctime:          time.Now().Unix(),
									Mtime:          0,
									Status:         1,
									FlushCount:     over_count,
									SumActOutCount: 0,
								}
								service.CreateSelfDrugStockSum(drugStock, tx)

							}
							if selfDrugStock.ID > 0 {
								service.UpdateSelfDrugStockSum(item.PatientId, item.DrugId, item.UserOrgId, total_count, over_count, tx)
							}

						}

						//查询这个单据的出库数量

						drugFlowList, _ := service.GetSelfDrugWarehouseOutDrugFlow(item.PatientId, item.DrugId, item.UserOrgId, item.ID, tx)

						var his_out_count int64
						for _, item := range drugFlowList {
							his_out_count += item.Count
						}

						//如果已经出库的数量加上现有的数量 小于或等于 总的入库数量
						if (total_count + his_out_count) <= in_count {
							// 出库
							if total_count < in_count {

								var cha_count int64

								cha_count = in_count - total_count

								var stock_number int64 = 0
								//查询库存是否充足
								warehouse, _ := service.FindSelfLastDrugWarehousingInfoByID(item.DrugId, item.PatientId, tx)

								// 将该批次的剩余库存数量转换为拆零数量
								if warehouse.MaxUnit == selfBasedrug.MaxUnit && selfBasedrug.MaxUnit != selfBasedrug.MinUnit {

									stock_number = warehouse.StockMaxNumber*selfBasedrug.MinNumber + warehouse.StockMinNumber

								}
								if warehouse.MaxUnit == selfBasedrug.MinUnit && selfBasedrug.MaxUnit != selfBasedrug.MinUnit {

									stock_number = warehouse.StockMaxNumber + warehouse.StockMinNumber

								}
								if warehouse.MaxUnit == selfBasedrug.MaxUnit && selfBasedrug.MaxUnit == selfBasedrug.MinUnit {

									stock_number = warehouse.StockMaxNumber*selfBasedrug.MinNumber + warehouse.StockMinNumber

								}

								if stock_number >= cha_count {

									var maxNumber int64 = 0
									var minNumber int64 = 0

									maxNumber = cha_count / selfBasedrug.MinNumber
									minNumber = cha_count % selfBasedrug.MinNumber

									if warehouse.StockMaxNumber == 0 && selfBasedrug.MaxUnit == selfBasedrug.MinUnit {
										minNumber = maxNumber
									}

									if selfBasedrug.MaxUnit != selfBasedrug.MinUnit {
										if warehouse.StockMaxNumber < maxNumber && warehouse.StockMinNumber < minNumber {
											c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeOutOfStockParamWrong)
											return
										}
									}

									if selfBasedrug.MinUnit == warehouse.MaxUnit && selfBasedrug.MaxUnit != selfBasedrug.MinUnit {

										warehouse.StockMaxNumber = warehouse.StockMaxNumber - maxNumber*selfBasedrug.MinNumber
									}

									if selfBasedrug.MaxUnit == warehouse.MaxUnit && selfBasedrug.MaxUnit != selfBasedrug.MinUnit {

										warehouse.StockMaxNumber = warehouse.StockMaxNumber - maxNumber
									}
									if selfBasedrug.MaxUnit == warehouse.MaxUnit && selfBasedrug.MaxUnit == selfBasedrug.MinUnit {

										warehouse.StockMaxNumber = warehouse.StockMaxNumber - maxNumber
									}

									if warehouse.StockMaxNumber < 0 {
										warehouse.StockMaxNumber = 0
									}
									if warehouse.StockMinNumber < 0 {
										warehouse.StockMinNumber = 0
									}

									warehouse.Mtime = time.Now().Unix()

									if warehouse.StockMinNumber < minNumber {
										warehouse.StockMaxNumber = warehouse.StockMaxNumber - 1
										if warehouse.MaxUnit != warehouse.MinUnit {
											warehouse.StockMinNumber = warehouse.StockMinNumber + selfBasedrug.MinNumber - minNumber
										}
										if minNumber == 2 && warehouse.MaxUnit == warehouse.MinUnit && warehouse.StockMinNumber == 0 {
											warehouse.StockMaxNumber = warehouse.StockMaxNumber - 1
										}
									} else {
										if minNumber > 0 {
											if (warehouse.StockMinNumber - minNumber) >= 0 {
												warehouse.StockMinNumber = warehouse.StockMinNumber - minNumber
											}

										}

										if minNumber == 0 && maxNumber != 1 && warehouse.StockMaxNumber <= 0 {

											if warehouse.StockMinNumber > 0 {
												if warehouse.StockMinNumber-cha_count >= 0 {
													warehouse.StockMinNumber = warehouse.StockMinNumber - cha_count
												}

											}

										}

									}

									if maxNumber == 1 && minNumber == 0 && selfBasedrug.MaxUnit != selfBasedrug.MinUnit && warehouse.MaxUnit != warehouse.MinUnit {
										if (warehouse.StockMinNumber - cha_count) >= 0 {
											warehouse.StockMinNumber = warehouse.StockMinNumber - cha_count
										}

									}

									if selfBasedrug.MaxUnit != selfBasedrug.MinUnit {
										if warehouse.StockMaxNumber < 0 && warehouse.StockMinNumber < 0 {
											c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeOutOfStockParamWrong)
											return
										}
									}
									if warehouse.StockMinNumber <= 0 {
										warehouse.StockMinNumber = 0
									}

									service.UpDateSelfDrugWarehouseInfoByStock(&warehouse, tx)

									//查询该药品剩余库存
									infolist, _ := service.FindSelfDrugWarehouseInfoFlushCount(item.DrugId, item.UserOrgId, tx)
									var over_count int64
									for _, its := range infolist {
										if its.MaxUnit == selfBasedrug.MaxUnit {
											its.StockMaxNumber = its.StockMaxNumber * selfBasedrug.MinNumber
										}
										over_count += its.StockMaxNumber + its.StockMinNumber
									}

									drugWareInfo, _ := service.GetSelfLastWarehouseOutInfoById(item.DrugId, tx)
									drugflow := models.XtSelfDrugFlow{
										WarehouseOutId:          0,
										WarehouseOutOrderNumber: warehousing_order,
										WarehousingOrder:        warehousing_order,
										DrugId:                  item.DrugId,
										Number:                  warehouse.Number,
										ProductDate:             warehouse.ProductDate,
										ExpireDate:              warehouse.ExpiryDate,
										Count:                   cha_count,
										Price:                   warehouse.RetailPrice,
										Status:                  1,
										Ctime:                   item.AdviceDate,
										Mtime:                   time.Now().Unix(),
										UserOrgId:               item.UserOrgId,
										Manufacturer:            warehouse.Manufacturer,
										Dealer:                  warehouse.Dealer,
										BatchNumber:             warehouse.BatchNumber,
										MaxUnit:                 selfBasedrug.MinUnit,
										ConsumableType:          20,
										IsEdit:                  1,
										Creator:                 0,
										IsSys:                   3,
										WarehouseOutDetailId:    drugWareInfo.ID,
										AdviceId:                item.ID,
										SupplyWarehouseId:       warehouse.SupplyWarehouseId,
										StorehouseId:            0,
										AdminUserId:             creater,
										LastPrice:               warehouse.Price,
										StockCount:              "",
										WarehousingDetailId:     0,
										OverCount:               over_count,
										RetailPrice:             item.Price, //手动出库出库价格
										WarehousingId:           warehouse.ID,
										SystemTime:              item.AdviceDate,
										PatientId:               item.PatientId,
										Remark:                  "保存处方入库数据差",
										OperateTime:             time.Now().Unix(),
									}
									if warehouse.RetailPrice == 0 {
										drugflow.Price = item.Price
									}
									service.CreateSelfDrugFlowOne(drugflow, tx)

									var out_count int64
									out_count = in_count - total_count
									//
									//fmt.Println("in_count------------------", in_count)
									//fmt.Println("total_count------------------", total_count)
									//添加出库数量
									service.AddSelfDrugCount(item.DrugId, item.UserOrgId, patient_id, out_count, tx)

									//查询剩余库存
									stockInfo, _ := service.GetSelfDrugAllStockInfo(item.PatientId, item.UserOrgId, item.DrugId, tx)
									var sum_count int64
									for _, its := range stockInfo {
										if its.MaxUnit == selfBasedrug.MaxUnit {
											its.StockMaxNumber = its.StockMaxNumber * selfBasedrug.MinNumber
										}
										sum_count += its.StockMaxNumber + its.StockMinNumber
									}
									service.UpdateSelfDrugStockCount(item.DrugId, item.UserOrgId, item.PatientId, sum_count, tx)
								} else {
									c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeOutOfStockParamWrong)
									return
								}
							}
						}

					}

				}
			}

		}
		tx.Commit()
		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, 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{
//			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
//							}
//
//							if adminInfo.CurrentOrgId == 10215 || adminInfo.CurrentOrgId == 3877 {
//								storeConfig, _ := service.GetAllStoreHouseConfig(adminInfo.CurrentOrgId)
//								lastWarehouse, _ := service.FindLastDrugWarehousingInfoByID(s.DrugId, storeConfig.DrugStorehouseOut)
//								if s.Price == 0 {
//									s.Price = lastWarehouse.RetailPrice
//								}
//							}
//
//							service.CreateHisDoctorAdvice(&s)
//							//记录日志
//							byterequest, _ := json.Marshal(s)
//							adviceLog := models.XtDoctorAdviceLog{
//								UserOrgId:   s.UserOrgId,
//								PatientId:   s.PatientId,
//								AdminUserId: adminInfo.AdminUser.Id,
//								Module:      1,
//								ErrLog:      string(byterequest),
//								Status:      1,
//								Ctime:       time.Now().Unix(),
//								Mtime:       0,
//								Source:      "电脑端his医嘱修改",
//								RecordDate:  s.AdviceDate,
//							}
//							service.CreateDoctorAdviceLog(adviceLog)
//							redis := service.RedisClient()
//							key := strconv.FormatInt(adminInfo.CurrentOrgId, 10) + ":" + strconv.FormatInt(theTime.Unix(), 10) + ":his_advices_list_all"
//							redis.Set(key, "", time.Second)
//							keyOne := strconv.FormatInt(adminInfo.CurrentOrgId, 10) + ":" + strconv.FormatInt(patient_id, 10) + ":" + strconv.FormatInt(recordDateTime, 10) + ":his_doctor_advice"
//							fmt.Println("keyOne", keyOne)
//							redis.Set(keyOne, "", time.Second)
//							keySeven := "scheduals_" + record_date + "_" + strconv.FormatInt(adminInfo.CurrentOrgId, 10)
//							redis.Set(keySeven, "", time.Second)
//							redis.Close()
//
//						}
//					}
//				}
//				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)
//
//							//记录日志
//							byterequest, _ := json.Marshal(p)
//							adviceLog := models.XtDoctorAdviceLog{
//								UserOrgId:   p.UserOrgId,
//								PatientId:   p.PatientId,
//								AdminUserId: adminInfo.AdminUser.Id,
//								Module:      1,
//								ErrLog:      string(byterequest),
//								Status:      1,
//								Ctime:       time.Now().Unix(),
//								Mtime:       0,
//								Source:      "电脑端his项目修改",
//								RecordDate:  p.RecordDate,
//							}
//							service.CreateDoctorAdviceLog(adviceLog)
//						}
//					}
//				}
//				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)

	////同步到自备药
	selfPrescriptionOpen, _ := service.GeteSelfPrescriptionOpen(c.GetAdminUserInfo().CurrentOrgId)

	var warehousingOutInfo []*models.XtSelfDrugWarehouseOutInfo

	if selfPrescriptionOpen.IsOpen == 1 {
		// 在函数结束时处理事务回滚
		db := service.XTWriteDB()
		tx := db.Begin()
		defer func() {
			if r := recover(); r != nil {
				tx.Rollback()
			} else {
				tx.Commit()
			}
		}()
		advicesList, _ := service.GetSelfHisPrescriptionAdviceByID(prescription_id, tx)
		for _, item := range advicesList {

			timeStr := time.Now().Format("2006-01-02")
			timeArr := strings.Split(timeStr, "-")
			total, _ := service.FindAllSelfDrugWarehouseOut(c.GetAdminUserInfo().CurrentOrgId, tx)

			total = total + 1
			warehousing_out_order := strconv.FormatInt(c.GetAdminUserInfo().CurrentOrgId, 10) + timeArr[0] + timeArr[1] + timeArr[2] + "000"

			number, _ := strconv.ParseInt(warehousing_out_order, 10, 64)
			number = number + total
			warehousing_out_order = "YPCKD" + strconv.FormatInt(number, 10)
			operation_time := time.Now().Unix()

			creater := c.GetAdminUserInfo().AdminUser.Id
			//创建一个出库单
			drugWarehouseOut := models.XtSelfDrugWarehouseOut{
				WarehouseOutOrderNumber: warehousing_out_order,
				OperationTime:           operation_time,
				OrgId:                   c.GetAdminUserInfo().CurrentOrgId,
				Creater:                 creater,
				Ctime:                   time.Now().Unix(),
				Status:                  1,
				WarehouseOutTime:        item.AdviceDate,
				Type:                    0,
				PatientId:               item.PatientId,
				IsCheck:                 1,
			}

			//查询今日是否有出库数据
			lastWarehouseOut, _ := service.GetSelfDrugLastWarehouseOutTwety(c.GetAdminUserInfo().CurrentOrgId, item.AdviceDate, tx, 1)

			fmt.Println("lastWarehouseOut-----------------------------------", lastWarehouseOut)
			if lastWarehouseOut.ID == 0 {
				service.AddSelfSigleDrugWarehouseOut(&drugWarehouseOut, tx)
			}
			selfBasedrug, _ := service.GetSelfBasedrugById(item.DrugId, item.UserOrgId, tx)

			var total_count int64
			prescribingNumberSix := strconv.FormatFloat(item.PrescribingNumber, 'f', -1, 64)
			prescribingNumberSeven, _ := strconv.ParseInt(prescribingNumberSix, 10, 64)

			if item.PrescribingNumberUnit == selfBasedrug.MaxUnit && selfBasedrug.MaxUnit != selfBasedrug.MinUnit {
				total_count += prescribingNumberSeven * selfBasedrug.MinNumber
			}

			if item.PrescribingNumberUnit == selfBasedrug.MinUnit && selfBasedrug.MaxUnit != selfBasedrug.MinUnit {
				total_count += prescribingNumberSeven
			}

			if item.PrescribingNumberUnit == selfBasedrug.MaxUnit && selfBasedrug.MaxUnit == selfBasedrug.MinUnit {
				total_count += prescribingNumberSeven
			}
			//出库
			warehouseOutInfo := &models.XtSelfDrugWarehouseOutInfo{
				WarehouseOutOrderNumber: warehousing_out_order,
				WarehouseOutId:          lastWarehouseOut.ID,
				DrugId:                  item.DrugId,
				Count:                   total_count,
				Price:                   0,
				TotalPrice:              0,
				Status:                  1,
				Ctime:                   item.AdviceDate,
				Mtime:                   item.AdviceDate,
				Remark:                  "",
				OrgId:                   item.UserOrgId,
				Type:                    0,
				Manufacturer:            selfBasedrug.Manufacturer,
				Dealer:                  selfBasedrug.Dealer,
				RetailPrice:             0,
				RetailTotalPrice:        0,
				CountUnit:               selfBasedrug.MinUnit,
				ExpiryDate:              0,
				ProductDate:             0,
				Number:                  "",
				BatchNumber:             "",
				IsSys:                   1,
				WarehouseInfoId:         0,
				AdminUserId:             0,
				StockCount:              "",
				IsCheck:                 1,
				SysRecordTime:           item.AdviceDate,
				PatientId:               item.PatientId,
				ClassType:               "",
				AdviceId:                item.ID,
			}
			warehousingOutInfo = append(warehousingOutInfo, warehouseOutInfo)
		}

		fmt.Println("长度-------------------------------", warehousingOutInfo)
		for _, it := range warehousingOutInfo {
			//查询今日是否有出库数据
			lastWarehouseOutOne, _ := service.GetSelfDrugLastWarehouseOutTwety(c.GetAdminUserInfo().CurrentOrgId, it.SysRecordTime, tx, 1)
			medical, _ := service.GetSelfBaseDrugMedical(it.DrugId, tx)
			drup, _ := service.FindSelfBaseDrugLibRecord(it.OrgId, it.DrugId, tx)
			//出库逻辑
			service.AutoSelfDrugDeliverInfoFourtyTwo(c.GetAdminUserInfo().CurrentOrgId, it.Count, &lastWarehouseOutOne, &drup, it, it.CountUnit, tx)

			//查询剩余库存
			stockInfo, _ := service.GetSelfDrugAllStockInfo(it.PatientId, it.OrgId, it.DrugId, tx)
			var sum_count int64
			for _, its := range stockInfo {
				if its.MaxUnit == medical.MaxUnit {
					its.StockMaxNumber = its.StockMaxNumber * medical.MinNumber
				}
				sum_count += its.StockMaxNumber + its.StockMinNumber
			}
			service.UpdateSelfDrugStockCount(it.DrugId, it.OrgId, it.PatientId, sum_count, tx)
		}

	}

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

	drugOutConfig, _ := service.FindDrugOutConfigById(c.GetAdminUserInfo().CurrentOrgId)
	//耗材保存处方出库
	goodOutConfig, _ := service.FindGoodOutConfigById(c.GetAdminUserInfo().CurrentOrgId)
	//已收费和已发药限制逻辑
	isCharge := false
	isMedicine := false
	new_prescription, p_err := service.GetPrescriptionById(prescription_id, c.GetAdminUserInfo().CurrentOrgId)
	new_prescriptions, _ := service.GetHisPrescription(c.GetAdminUserInfo().CurrentOrgId, new_prescription.PatientId, new_prescription.RecordDate, new_prescription.PType)

	if new_prescription.IsMedicine == 1 {
		isMedicine = true
	}

	for _, item := range new_prescriptions {
		if item.OrderStatus == 4 {
			isCharge = true
		}
	}

	if p_err != nil {
		if new_prescription.ID > 0 {
			if new_prescription.OrderStatus == 2 {
				isCharge = true
			}
		}
	}
	for _, item := range advices {
		if item.IsMedicine == 1 {
			isMedicine = true
		}
	}
	if isCharge {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDeletePChargeWrong)
		return
	}

	if isMedicine {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDeletePMedicineWrong)
		return
	}

	//已收费和已发药限制逻辑
	if len(projects) > 0 {
		for _, item := range projects {
			service.DeletePrintInfo(item.ID) //删除打印信息

			if goodOutConfig.IsOpen != 1 {
				if stockConfig.IsOpen == 1 {
					if item.Type == 3 && item.IsOut == 1 {
						good, _ := service.FindGoodInfoByIdTwo(item.ProjectId)
						f_count, _ := strconv.ParseFloat(item.Count, 64)
						good.Total = good.Total + f_count
						service.UpdateGoodInfo(&good)
						operation_time := time.Now().Unix()
						creater := c.GetAdminUserInfo().AdminUser.Id
						//创建退库单
						timeStr := time.Now().Format("2006-01-02")
						timeArr := strings.Split(timeStr, "-")
						total, _ := service.FindAllCancelStockTotal(c.GetAdminUserInfo().CurrentOrgId)
						total = total + 1
						orderNumber := "CKTKD" + strconv.FormatInt(c.GetAdminUserInfo().CurrentOrgId, 10) + timeArr[0] + timeArr[1] + timeArr[2] + "000" + strconv.FormatInt(total, 10)
						houseConfig, _ := service.GetAllStoreHouseConfig(c.GetAdminUserInfo().CurrentOrgId)
						cancelStock := models.CancelStock{
							OrderNumber:  orderNumber,
							OperaTime:    operation_time,
							OrgId:        c.GetAdminUserInfo().CurrentOrgId,
							Creater:      creater,
							Ctime:        time.Now().Unix(),
							Status:       1,
							ReturnTime:   item.RecordDate,
							Type:         1,
							StorehouseId: houseConfig.StorehouseOutInfo,
							IsCheck:      1,
						}
						_, msgerrkonde := service.GetCancelStockDetailByOrderNumberOne(item.RecordDate, c.GetAdminUserInfo().CurrentOrgId)
						if msgerrkonde == gorm.ErrRecordNotFound {
							service.AddSigleCancelStock(&cancelStock)
						}
						cancel, _ := service.GetLastCancelStockById(c.GetAdminUserInfo().CurrentOrgId)
						floatPrescrip := strconv.FormatFloat(f_count, 'f', -1, 32)
						prescribingNumber, _ := strconv.ParseInt(floatPrescrip, 10, 64)
						//查询该耗材是否出库
						info, _ := service.GetLastWarehoseByGoodId(item.ProjectId, item.PatientId, item.RecordDate)
						manufacturer, _ := service.GetManufactureById(info.Manufacturer)
						deaerler, _ := service.GetDealerById(info.Dealer)

						var total_count int64
						count, _ := strconv.ParseInt(item.Count, 10, 64)
						total_count += count

						if info.ID > 0 {
							if info.Count >= total_count {

								//回退库存
								service.UpDateWarehouseInfoByStockDelete(info.WarehouseInfotId, total_count, info.PatientId, info.SysRecordTime, item.ProjectId)
								goodList, _ := service.GetSumGoodList(c.GetAdminUserInfo().CurrentOrgId, houseConfig.StorehouseOutInfo, item.ProjectId)
								var flush_count int64
								for _, it := range goodList {
									flush_count += it.StockCount
								}
								cancelStockInfo := models.CancelStockInfo{
									GoodId:          item.ProjectId,
									CancelStockId:   cancel.ID,
									GoodTypeId:      good.GoodTypeId,
									Count:           prescribingNumber,
									Price:           info.Price,
									Total:           0,
									ProductDate:     info.ProductDate,
									ExpiryDate:      info.ExpiryDate,
									Ctime:           time.Now().Unix(),
									Status:          1,
									OrgId:           c.GetAdminUserInfo().CurrentOrgId,
									OrderNumber:     cancel.OrderNumber,
									Type:            0,
									Dealer:          deaerler.DealerName,
									Manufacturer:    manufacturer.ManufacturerName,
									Number:          info.Number,
									RegisterAccount: "",
									Remark:          "",
									WarehouseInfoId: info.WarehouseInfotId,
									PatientId:       info.PatientId,
									RecordDate:      info.SysRecordTime,
									StorehouseId:    houseConfig.StorehouseOutInfo,
									IsCheck:         1,
								}

								service.CreateCancelStockInfoOne(&cancelStockInfo)

								cancelInfo, _ := service.GetLastCancelStockInfoByGoodId(item.ProjectId)

								flow := models.VmStockFlow{
									WarehousingId:           info.WarehouseInfotId,
									GoodId:                  item.ProjectId,
									Number:                  info.Number,
									LicenseNumber:           info.LicenseNumber,
									Count:                   prescribingNumber,
									UserOrgId:               c.GetAdminUserInfo().CurrentOrgId,
									PatientId:               item.PatientId,
									SystemTime:              info.SysRecordTime,
									ConsumableType:          7,
									IsSys:                   0,
									WarehousingOrder:        "",
									WarehouseOutId:          info.WarehouseOutId,
									WarehouseOutOrderNumber: info.WarehouseOutOrderNumber,
									IsEdit:                  0,
									CancelStockId:           cancel.ID,
									CancelOrderNumber:       cancel.OrderNumber,
									Manufacturer:            manufacturer.ID,
									Dealer:                  0,
									Creator:                 c.GetAdminUserInfo().CurrentOrgId,
									UpdateCreator:           0,
									Status:                  1,
									Ctime:                   time.Now().Unix(),
									Mtime:                   0,
									Price:                   info.Price,
									WarehousingDetailId:     info.WarehouseInfotId,
									WarehouseOutDetailId:    info.ID,
									CancelOutDetailId:       cancelInfo.ID,
									ProductDate:             info.ProductDate,
									ExpireDate:              info.ExpiryDate,
									StorehouseId:            houseConfig.StorehouseOutInfo,
									OverCount:               flush_count,
									OperateTime:             time.Now().Unix(),
								}
								service.CreateStockFlowOne(flow)

								//退库数量增加
								service.UpdateSumAddCancelCount(c.GetAdminUserInfo().CurrentOrgId, item.ProjectId, houseConfig.StorehouseOutInfo, total_count)
								//出库数量减少
								service.UpdateSumCount(c.GetAdminUserInfo().CurrentOrgId, houseConfig.StorehouseOutInfo, item.ProjectId, total_count)
							}

							if info.Count < total_count {
								//回退库存
								service.UpDateWarehouseInfoByStockDelete(info.WarehouseInfotId, info.Count, info.PatientId, info.SysRecordTime, item.ProjectId)
								goodList, _ := service.GetSumGoodList(c.GetAdminUserInfo().CurrentOrgId, houseConfig.StorehouseOutInfo, item.ProjectId)
								var flush_count int64
								for _, it := range goodList {
									flush_count += it.StockCount
								}
								cancelStockInfo := models.CancelStockInfo{
									GoodId:          item.ProjectId,
									CancelStockId:   cancel.ID,
									GoodTypeId:      good.GoodTypeId,
									Count:           info.Count,
									Price:           info.Price,
									Total:           0,
									ProductDate:     info.ProductDate,
									ExpiryDate:      info.ExpiryDate,
									Ctime:           time.Now().Unix(),
									Status:          1,
									OrgId:           c.GetAdminUserInfo().CurrentOrgId,
									OrderNumber:     cancel.OrderNumber,
									Type:            0,
									Dealer:          deaerler.DealerName,
									Manufacturer:    manufacturer.ManufacturerName,
									Number:          info.Number,
									RegisterAccount: "",
									Remark:          "",
									WarehouseInfoId: info.WarehouseInfotId,
									PatientId:       info.PatientId,
									RecordDate:      info.SysRecordTime,
									StorehouseId:    houseConfig.StorehouseOutInfo,
									IsCheck:         1,
								}

								service.CreateCancelStockInfoOne(&cancelStockInfo)

								cancelInfo, _ := service.GetLastCancelStockInfoByGoodId(item.ProjectId)

								flow := models.VmStockFlow{
									WarehousingId:           info.WarehouseInfotId,
									GoodId:                  item.ProjectId,
									Number:                  info.Number,
									LicenseNumber:           info.LicenseNumber,
									Count:                   info.Count,
									UserOrgId:               c.GetAdminUserInfo().CurrentOrgId,
									PatientId:               item.PatientId,
									SystemTime:              info.SysRecordTime,
									ConsumableType:          7,
									IsSys:                   0,
									WarehousingOrder:        "",
									WarehouseOutId:          info.WarehouseOutId,
									WarehouseOutOrderNumber: info.WarehouseOutOrderNumber,
									IsEdit:                  0,
									CancelStockId:           cancel.ID,
									CancelOrderNumber:       cancel.OrderNumber,
									Manufacturer:            manufacturer.ID,
									Dealer:                  0,
									Creator:                 c.GetAdminUserInfo().CurrentOrgId,
									UpdateCreator:           0,
									Status:                  1,
									Ctime:                   time.Now().Unix(),
									Mtime:                   0,
									Price:                   info.Price,
									WarehousingDetailId:     info.WarehouseInfotId,
									WarehouseOutDetailId:    info.ID,
									CancelOutDetailId:       cancelInfo.ID,
									ProductDate:             info.ProductDate,
									ExpireDate:              info.ExpiryDate,
									StorehouseId:            houseConfig.StorehouseOutInfo,
									OverCount:               flush_count,
									OperateTime:             time.Now().Unix(),
								}
								service.CreateStockFlowOne(flow)

								//退库数量增加
								service.UpdateSumAddCancelCount(c.GetAdminUserInfo().CurrentOrgId, item.ProjectId, houseConfig.StorehouseOutInfo, info.Count)
								//出库数量减少
								service.UpdateSumCount(c.GetAdminUserInfo().CurrentOrgId, houseConfig.StorehouseOutInfo, item.ProjectId, info.Count)
							}

							goodList, _ := service.GetSumGoodList(c.GetAdminUserInfo().CurrentOrgId, houseConfig.StorehouseOutInfo, item.ProjectId)
							var flush_count int64
							for _, it := range goodList {
								flush_count += it.StockCount
							}

							//查询已出库数量
							dialysisInfo, _ := service.GetGoodDialysisOutInfoSix(c.GetAdminUserInfo().CurrentOrgId, info.PatientId, info.SysRecordTime, item.ProjectId)

							if prescribingNumber < dialysisInfo.Count {
								//改变数量
								service.UpdateAutoGood(c.GetAdminUserInfo().CurrentOrgId, info.PatientId, info.SysRecordTime, item.ProjectId, item.ID, prescribingNumber)
							}

							if prescribingNumber >= dialysisInfo.Count {
								//删除出库表
								service.DeleteAutoRedeceDetailTen(c.GetAdminUserInfo().CurrentOrgId, info.PatientId, info.SysRecordTime, item.ProjectId, item.ID)
							}

							//更新库存
							service.UpdateSumGood(c.GetAdminUserInfo().CurrentOrgId, houseConfig.StorehouseOutInfo, item.ProjectId, flush_count)

							//更新基础库库存
							service.UpdateGoodInfoSumCountSix(item.ProjectId, flush_count, c.GetAdminUserInfo().CurrentOrgId)

						}

					}
				}
			}

			//保存耗材出库
			if goodOutConfig.IsOpen == 1 {

				if item.Type == 3 {
					good, _ := service.FindGoodInfoByIdTwo(item.ProjectId)
					f_count, _ := strconv.ParseFloat(item.Count, 64)
					good.Total = good.Total + f_count
					service.UpdateGoodInfo(&good)
					operation_time := time.Now().Unix()
					creater := c.GetAdminUserInfo().AdminUser.Id
					//创建退库单
					timeStr := time.Now().Format("2006-01-02")
					timeArr := strings.Split(timeStr, "-")
					total, _ := service.FindAllCancelStockTotal(c.GetAdminUserInfo().CurrentOrgId)
					total = total + 1
					orderNumber := "CKTKD" + strconv.FormatInt(c.GetAdminUserInfo().CurrentOrgId, 10) + timeArr[0] + timeArr[1] + timeArr[2] + "000" + strconv.FormatInt(total, 10)
					houseConfig, _ := service.GetAllStoreHouseConfig(c.GetAdminUserInfo().CurrentOrgId)
					cancelStock := models.CancelStock{
						OrderNumber:  orderNumber,
						OperaTime:    operation_time,
						OrgId:        c.GetAdminUserInfo().CurrentOrgId,
						Creater:      creater,
						Ctime:        time.Now().Unix(),
						Status:       1,
						ReturnTime:   item.RecordDate,
						Type:         1,
						StorehouseId: houseConfig.StorehouseOutInfo,
						IsCheck:      1,
					}
					_, msgerrkonde := service.GetCancelStockDetailByOrderNumberOne(item.RecordDate, c.GetAdminUserInfo().CurrentOrgId)
					if msgerrkonde == gorm.ErrRecordNotFound {
						service.AddSigleCancelStock(&cancelStock)
					}
					cancel, _ := service.GetLastCancelStockById(c.GetAdminUserInfo().CurrentOrgId)
					floatPrescrip := strconv.FormatFloat(f_count, 'f', -1, 32)
					prescribingNumber, _ := strconv.ParseInt(floatPrescrip, 10, 64)
					//查询该耗材是否出库
					info, _ := service.GetLastWarehoseByGoodId(item.ProjectId, item.PatientId, item.RecordDate)
					manufacturer, _ := service.GetManufactureById(info.Manufacturer)
					deaerler, _ := service.GetDealerById(info.Dealer)

					var total_count int64
					count, _ := strconv.ParseInt(item.Count, 10, 64)
					total_count += count

					goodList, _ := service.GetSumGoodList(c.GetAdminUserInfo().CurrentOrgId, houseConfig.StorehouseOutInfo, item.ProjectId)
					var flush_count int64
					for _, it := range goodList {
						flush_count += it.StockCount
					}
					fmt.Println("历史出库数据", info.Count)
					fmt.Println("出库数量", total_count)
					if info.ID > 0 {
						cancelStockInfo := models.CancelStockInfo{
							GoodId:          item.ProjectId,
							CancelStockId:   cancel.ID,
							GoodTypeId:      good.GoodTypeId,
							Count:           prescribingNumber,
							Price:           info.Price,
							Total:           0,
							ProductDate:     info.ProductDate,
							ExpiryDate:      info.ExpiryDate,
							Ctime:           time.Now().Unix(),
							Status:          1,
							OrgId:           c.GetAdminUserInfo().CurrentOrgId,
							OrderNumber:     cancel.OrderNumber,
							Type:            0,
							Dealer:          deaerler.DealerName,
							Manufacturer:    manufacturer.ManufacturerName,
							Number:          info.Number,
							RegisterAccount: "",
							Remark:          "",
							WarehouseInfoId: info.WarehouseInfotId,
							PatientId:       info.PatientId,
							RecordDate:      info.SysRecordTime,
							StorehouseId:    houseConfig.StorehouseOutInfo,
							IsCheck:         1,
						}

						service.CreateCancelStockInfoOne(&cancelStockInfo)

						cancelInfo, _ := service.GetLastCancelStockInfoByGoodId(item.ProjectId)

						//查询出库数量
						list, _ := service.GetWarehouseOutInfoByProjectIdList(item.ID, c.GetAdminUserInfo().CurrentOrgId, houseConfig.StorehouseOutInfo, item.ProjectId, item.PatientId, info.SysRecordTime)

						//出库数据 大于 退库数量
						if len(list) > 0 {
							for _, it := range list {
								//回退库存
								service.UpDateWarehouseInfoByStockDelete(it.WarehouseInfotId, it.Count, it.PatientId, it.SysRecordTime, it.ProjectId)
								goodList, _ := service.GetSumGoodList(c.GetAdminUserInfo().CurrentOrgId, houseConfig.StorehouseOutInfo, item.ProjectId)
								var flush_count_one int64
								for _, it := range goodList {
									flush_count_one += it.StockCount
								}
								//查询该批次是否有退库数据
								//flow, _ := service.GetWarehouseStockFlow(it.WarehouseInfotId, it.GoodId, c.GetAdminUserInfo().CurrentOrgId, it.PatientId, it.SysRecordTime)
								creater := c.GetAdminUserInfo().AdminUser.Id

								flow := models.VmStockFlow{
									WarehousingId:           it.WarehouseInfotId,
									GoodId:                  it.GoodId,
									Number:                  it.Number,
									LicenseNumber:           it.LicenseNumber,
									Count:                   it.Count,
									UserOrgId:               c.GetAdminUserInfo().CurrentOrgId,
									PatientId:               it.PatientId,
									SystemTime:              it.SysRecordTime,
									ConsumableType:          7,
									IsSys:                   0,
									WarehousingOrder:        "",
									WarehouseOutId:          it.WarehouseOutId,
									WarehouseOutOrderNumber: it.WarehouseOutOrderNumber,
									IsEdit:                  0,
									CancelStockId:           cancel.ID,
									CancelOrderNumber:       cancel.OrderNumber,
									Manufacturer:            manufacturer.ID,
									Dealer:                  0,
									Creator:                 creater,
									UpdateCreator:           0,
									Status:                  1,
									Ctime:                   time.Now().Unix(),
									Mtime:                   0,
									Price:                   it.Price,
									WarehousingDetailId:     it.WarehouseInfotId,
									WarehouseOutDetailId:    it.ID,
									CancelOutDetailId:       cancelInfo.ID,
									ProductDate:             it.ProductDate,
									ExpireDate:              it.ExpiryDate,
									StorehouseId:            houseConfig.StorehouseOutInfo,
									OverCount:               flush_count_one,
									OperateTime:             time.Now().Unix(),
								}
								service.CreateStockFlowOne(flow)

								//if flow.ID > 0 {
								//	service.AddCountFlowOne(it.WarehouseInfotId, it.GoodId, c.GetAdminUserInfo().CurrentOrgId, it.PatientId, it.Count, it.SysRecordTime, flush_count_one)
								//}
							}

						}

						//flow := models.VmStockFlow{
						//	WarehousingId:           info.WarehouseInfotId,
						//	GoodId:                  item.ProjectId,
						//	Number:                  info.Number,
						//	LicenseNumber:           info.LicenseNumber,
						//	Count:                   prescribingNumber,
						//	UserOrgId:               c.GetAdminUserInfo().CurrentOrgId,
						//	PatientId:               item.PatientId,
						//	SystemTime:              info.SysRecordTime,
						//	ConsumableType:          7,
						//	IsSys:                   0,
						//	WarehousingOrder:        "",
						//	WarehouseOutId:          info.WarehouseOutId,
						//	WarehouseOutOrderNumber: info.WarehouseOutOrderNumber,
						//	IsEdit:                  0,
						//	CancelStockId:           cancel.ID,
						//	CancelOrderNumber:       cancel.OrderNumber,
						//	Manufacturer:            manufacturer.ID,
						//	Dealer:                  0,
						//	Creator:                 c.GetAdminUserInfo().CurrentOrgId,
						//	UpdateCreator:           0,
						//	Status:                  1,
						//	Ctime:                   time.Now().Unix(),
						//	Mtime:                   0,
						//	Price:                   info.Price,
						//	WarehousingDetailId:     info.WarehouseInfotId,
						//	WarehouseOutDetailId:    info.ID,
						//	CancelOutDetailId:       cancelInfo.ID,
						//	ProductDate:             info.ProductDate,
						//	ExpireDate:              info.ExpiryDate,
						//	StorehouseId:            houseConfig.StorehouseOutInfo,
						//	OverCount:               flush_count,
						//}
						//service.CreateStockFlowOne(flow)

						//退库数量增加
						service.UpdateSumAddCancelCount(c.GetAdminUserInfo().CurrentOrgId, item.ProjectId, houseConfig.StorehouseOutInfo, total_count)
						//出库数量减少
						service.UpdateSumCount(c.GetAdminUserInfo().CurrentOrgId, houseConfig.StorehouseOutInfo, item.ProjectId, total_count)

						//查询已出库数量
						dialysisInfo, _ := service.GetGoodDialysisOutInfoSix(c.GetAdminUserInfo().CurrentOrgId, info.PatientId, info.SysRecordTime, item.ProjectId)

						if prescribingNumber < dialysisInfo.Count {
							//改变数量
							service.UpdateAutoGood(c.GetAdminUserInfo().CurrentOrgId, info.PatientId, info.SysRecordTime, item.ProjectId, item.ID, prescribingNumber)
						}

						if prescribingNumber >= dialysisInfo.Count {
							//删除出库表
							service.DeleteAutoRedeceDetailTwenty(c.GetAdminUserInfo().CurrentOrgId, info.PatientId, info.SysRecordTime, item.ProjectId, item.ID)
						}

						goodList, _ := service.GetSumGoodList(c.GetAdminUserInfo().CurrentOrgId, houseConfig.StorehouseOutInfo, item.ProjectId)
						var flush_count_one int64
						for _, it := range goodList {
							flush_count_one += it.StockCount
						}

						//更新库存
						msgerrkonde := service.UpdateSumGood(c.GetAdminUserInfo().CurrentOrgId, houseConfig.StorehouseOutInfo, item.ProjectId, flush_count_one)
						fmt.Println("msgerrkonde23332323", msgerrkonde)

						//更新基础库库存
						service.UpdateGoodInfoReduceSumCount(item.ProjectId, flush_count_one, c.GetAdminUserInfo().CurrentOrgId)

					}
				}
			}
		}
		err := service.DelelteHisPrescription(prescription_id, c.GetAdminUserInfo().CurrentOrgId)
		fmt.Println(err)
	}
	err := service.DelelteHisPrescription(prescription_id, c.GetAdminUserInfo().CurrentOrgId)
	fmt.Println(err)
	if len(advices) > 0 {
		for _, item := range advices {
			redis := service.RedisClient()
			keyFive := strconv.FormatInt(item.UserOrgId, 10) + ":" + strconv.FormatInt(item.AdviceDate, 10) + ":his_advices_list_all"
			redis.Set(keyFive, "", time.Second)
			keyOne := strconv.FormatInt(item.UserOrgId, 10) + ":" + strconv.FormatInt(item.PatientId, 10) + ":" + strconv.FormatInt(item.AdviceDate, 10) + ":his_doctor_advice"
			redis.Set(keyOne, "", time.Second)
			redis.Close()

		}
	}
	if c.GetAdminUserInfo().CurrentOrgId == 10387 {

		if len(advices) > 0 {
			for _, item := range advices {
				creater := c.GetAdminUserInfo().AdminUser.Id
				service.DrugAutoAddCancelInfo(item, creater)
			}
		}

	} else {

		if drugOutConfig.IsOpen == 1 {
			if len(advices) > 0 {
				for _, item := range advices {
					creater := c.GetAdminUserInfo().AdminUser.Id
					service.DrugAutoAddCancelInfo(item, creater)
				}
			}
		} else {
			if len(advices) > 0 {
				for _, item := range advices {
					creater := c.GetAdminUserInfo().AdminUser.Id
					service.DrugAutoAddCancelInfo(item, creater)
				}
			}
		}
	}

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

}

func (c *HisApiController) DeleteDoctorAdvice() {
	id, _ := c.GetInt64("id")
	advice, _ := service.GetHisDoctorAdvicesById(id)

	////同步到自备药
	selfPrescriptionOpen, _ := service.GeteSelfPrescriptionOpen(c.GetAdminUserInfo().CurrentOrgId)
	var warehousingOutInfo []*models.XtSelfDrugWarehouseOutInfo
	if selfPrescriptionOpen.IsOpen == 1 {

		db := service.XTWriteDB()
		tx := db.Begin()
		defer func() {
			if r := recover(); r != nil {
				tx.Rollback()
			} else {
				tx.Commit()
			}
		}()

		selfBasedrug, _ := service.GetSelfBasedrugById(advice.DrugId, advice.UserOrgId, tx)

		var total_count int64
		prescribingNumberSix := strconv.FormatFloat(advice.PrescribingNumber, 'f', -1, 64)
		prescribingNumberSeven, _ := strconv.ParseInt(prescribingNumberSix, 10, 64)

		if advice.PrescribingNumberUnit == selfBasedrug.MaxUnit && selfBasedrug.MaxUnit != selfBasedrug.MinUnit {
			total_count += prescribingNumberSeven * selfBasedrug.MinNumber
		}

		if advice.PrescribingNumberUnit == selfBasedrug.MinUnit && selfBasedrug.MaxUnit != selfBasedrug.MinUnit {
			total_count += prescribingNumberSeven
		}

		if advice.PrescribingNumberUnit == selfBasedrug.MaxUnit && selfBasedrug.MaxUnit == selfBasedrug.MinUnit {
			total_count += prescribingNumberSeven
		}

		timeStr := time.Now().Format("2006-01-02")
		timeArr := strings.Split(timeStr, "-")
		total, _ := service.FindAllSelfDrugWarehouseOut(c.GetAdminUserInfo().CurrentOrgId, tx)

		total = total + 1
		warehousing_out_order := strconv.FormatInt(c.GetAdminUserInfo().CurrentOrgId, 10) + timeArr[0] + timeArr[1] + timeArr[2] + "000"
		number, _ := strconv.ParseInt(warehousing_out_order, 10, 64)
		number = number + total
		warehousing_out_order = "YPCKD" + strconv.FormatInt(number, 10)
		operation_time := time.Now().Unix()

		creater := c.GetAdminUserInfo().AdminUser.Id
		//创建一个出库单
		drugWarehouseOut := models.XtSelfDrugWarehouseOut{
			WarehouseOutOrderNumber: warehousing_out_order,
			OperationTime:           operation_time,
			OrgId:                   c.GetAdminUserInfo().CurrentOrgId,
			Creater:                 creater,
			Ctime:                   time.Now().Unix(),
			Status:                  1,
			WarehouseOutTime:        advice.AdviceDate,
			Type:                    0,
			PatientId:               advice.PatientId,
			IsCheck:                 1,
		}

		//查询今日是否有出库数据
		lastWarehouseOut, _ := service.GetSelfDrugLastWarehouseOutTwety(c.GetAdminUserInfo().CurrentOrgId, advice.AdviceDate, tx, 1)

		if lastWarehouseOut.ID == 0 {
			service.AddSelfSigleDrugWarehouseOut(&drugWarehouseOut, tx)
		}
		//出库
		warehouseOutInfo := &models.XtSelfDrugWarehouseOutInfo{
			WarehouseOutId:          lastWarehouseOut.ID,
			WarehouseOutOrderNumber: warehousing_out_order,
			DrugId:                  advice.DrugId,
			Count:                   total_count,
			Price:                   0,
			TotalPrice:              0,
			Status:                  1,
			Ctime:                   advice.AdviceDate,
			Mtime:                   advice.AdviceDate,
			Remark:                  "",
			OrgId:                   advice.UserOrgId,
			Type:                    0,
			Manufacturer:            selfBasedrug.Manufacturer,
			Dealer:                  selfBasedrug.Dealer,
			RetailPrice:             0,
			RetailTotalPrice:        0,
			CountUnit:               advice.PrescribingNumberUnit,
			ExpiryDate:              0,
			ProductDate:             0,
			Number:                  "",
			BatchNumber:             "",
			IsSys:                   0,
			WarehouseInfoId:         0,
			AdminUserId:             0,
			StockCount:              "",
			IsCheck:                 1,
			SysRecordTime:           advice.AdviceDate,
			PatientId:               advice.PatientId,
			AdviceId:                advice.ID,
			ClassType:               "",
		}
		warehousingOutInfo = append(warehousingOutInfo, warehouseOutInfo)

		for _, it := range warehousingOutInfo {

			medical, _ := service.GetSelfBaseDrugMedical(it.DrugId, tx)
			drup, _ := service.FindSelfBaseDrugLibRecord(it.OrgId, it.DrugId, tx)
			//出库逻辑
			service.AutoSelfDrugDeliverInfoFourtyTwo(c.GetAdminUserInfo().CurrentOrgId, it.Count, &lastWarehouseOut, &drup, it, it.CountUnit, tx)

			//查询剩余库存
			stockInfo, _ := service.GetSelfDrugAllStockInfo(it.PatientId, it.OrgId, it.DrugId, tx)
			var sum_count int64
			for _, its := range stockInfo {
				if its.MaxUnit == medical.MaxUnit {
					its.StockMaxNumber = its.StockMaxNumber * medical.MinNumber
				}
				sum_count += its.StockMaxNumber + its.StockMinNumber
			}
			service.UpdateSelfDrugStockCount(it.DrugId, it.OrgId, it.PatientId, sum_count, tx)
		}

	}
	drugOutConfig, _ := service.FindDrugOutConfigById(c.GetAdminUserInfo().CurrentOrgId)

	//已收费和已发药的限制逻辑
	isCharge := false
	isMedicine := false
	new_prescription, _ := service.GetPrescriptionById(advice.PrescriptionId, c.GetAdminUserInfo().CurrentOrgId)

	//获取今天该患者所有处方,判断是否发药或者收费
	new_prescriptions, _ := service.GetHisPrescription(c.GetAdminUserInfo().CurrentOrgId, new_prescription.PatientId, new_prescription.RecordDate, new_prescription.PType)
	//for _, item := range new_prescriptions {
	if new_prescription.IsMedicine == 1 {
		isMedicine = true
	}
	//}
	for _, item := range new_prescriptions {
		if item.OrderStatus == 4 {
			isCharge = true
		}
	}

	if isMedicine {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDeletePMedicineWrong)
		return
	}

	if isCharge {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDeletePChargeWrong)
		return
	}

	advices, _ := service.GetHisPrescriptionAdviceByID(advice.PrescriptionId)

	creater := c.GetAdminUserInfo().AdminUser.Id
	for _, item := range advices {
		if item.IsMedicine == 1 {
			isMedicine = true
		}

		byterequest, _ := json.Marshal(item)
		adviceLog := models.XtDoctorAdviceLog{
			UserOrgId:   item.UserOrgId,
			PatientId:   item.PatientId,
			AdminUserId: creater,
			Module:      1,
			ErrLog:      string(byterequest),
			Status:      1,
			Ctime:       time.Now().Unix(),
			Mtime:       0,
			Source:      "电脑端删除医嘱",
			RecordDate:  item.AdviceDate,
		}
		service.CreateDoctorAdviceLog(adviceLog)

	}

	if isMedicine {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDeleteMedicineWrong)
		return
	}
	if new_prescription.ID > 0 {
		if new_prescription.OrderStatus == 2 {
			isCharge = true
		}
	}

	if isCharge {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDeletePChargeWrongTwo)
		return
	}
	//已收费和已发药的限制逻辑

	err := service.DelelteDoctorAdvice(id, c.GetAdminUserInfo().CurrentOrgId)

	redis := service.RedisClient()
	keyFive := strconv.FormatInt(advice.UserOrgId, 10) + ":" + strconv.FormatInt(advice.AdviceDate, 10) + ":his_advices_list_all"
	redis.Set(keyFive, "", time.Second)
	keyOne := strconv.FormatInt(advice.UserOrgId, 10) + ":" + strconv.FormatInt(advice.PatientId, 10) + ":" + strconv.FormatInt(advice.AdviceDate, 10) + ":his_doctor_advice"
	redis.Set(keyOne, "", time.Second)

	defer redis.Close()

	if err == nil {
		if c.GetAdminUserInfo().CurrentOrgId == 10387 {
			//查询是否在处方中出库
			openConfig, _ := service.GetDrugOpenConfigOne(c.GetAdminUserInfo().CurrentOrgId)

			if openConfig.IsOpen != 1 {

				//判断该医嘱是否执行了
				if advice.ExecutionState == 1 {
					creater := c.GetAdminUserInfo().AdminUser.Id
					service.DrugAutoAddCancelInfo(&advice, creater)
				}
			}

			//开启保存处方扣减功能
			if openConfig.IsOpen == 1 {
				creater := c.GetAdminUserInfo().AdminUser.Id
				service.DrugAutoAddCancelInfo(&advice, creater)
			}
		} else {

			if drugOutConfig.IsOpen == 1 {

				//查询是否在处方中出库
				openConfig, _ := service.GetDrugOpenConfigOne(c.GetAdminUserInfo().CurrentOrgId)

				if openConfig.IsOpen != 1 {

					//判断该医嘱是否执行了
					if advice.ExecutionState == 1 {
						creater := c.GetAdminUserInfo().AdminUser.Id
						service.DrugAutoAddCancelInfo(&advice, creater)

					}

				}

				//开启保存处方扣减功能
				if openConfig.IsOpen == 1 {
					creater := c.GetAdminUserInfo().AdminUser.Id
					service.DrugAutoAddCancelInfo(&advice, creater)

				}
			} else {
				//判断该医嘱是否执行了
				if advice.ExecutionState == 1 {
					creater := c.GetAdminUserInfo().AdminUser.Id
					service.DrugAutoAddCancelInfo(&advice, creater)
				}

			}
		}

		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)
	//耗材保存处方出库
	goodOutConfig, _ := service.FindGoodOutConfigById(c.GetAdminUserInfo().CurrentOrgId)
	isCharge := false
	isMedicine := false
	new_prescription, _ := service.GetPrescriptionById(project.PrescriptionId, c.GetAdminUserInfo().CurrentOrgId)
	new_prescriptions, _ := service.GetHisPrescription(c.GetAdminUserInfo().CurrentOrgId, new_prescription.PatientId, new_prescription.RecordDate, new_prescription.PType)

	creater := c.GetAdminUserInfo().AdminUser.Id
	for _, item := range new_prescriptions {
		if item.IsMedicine == 1 {
			isMedicine = true
		}
		byterequest, _ := json.Marshal(item)
		adviceLog := models.XtDoctorAdviceLog{
			UserOrgId:   item.UserOrgId,
			PatientId:   item.PatientId,
			AdminUserId: creater,
			Module:      1,
			ErrLog:      string(byterequest),
			Status:      1,
			Ctime:       time.Now().Unix(),
			Mtime:       0,
			Source:      "电脑端删除医嘱",
			RecordDate:  item.RecordDate,
		}
		service.CreateDoctorAdviceLog(adviceLog)
	}
	for _, item := range new_prescriptions {
		if item.OrderStatus == 4 {
			isCharge = true
		}
	}
	if isMedicine {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDeletePMedicineWrong)
		return
	}
	if isCharge {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDeletePChargeWrong)
		return
	}

	if new_prescription.ID > 0 {
		if new_prescription.OrderStatus == 2 {
			isCharge = true
		}
	}

	if isCharge {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDeletePChargeWrongTwo)
		return
	}

	service.DeletePrintInfo(id)
	label, _ := service.GetProjectById(adminInfo.CurrentOrgId, id, project.RecordDate, project.PatientId)
	label.Status = 0
	service.CreateHisLabelRecordTwo(&label)

	fmt.Println(goodOutConfig.IsOpen)
	if goodOutConfig.IsOpen != 1 {
		if stockConfig.IsOpen == 1 {
			if project.Type == 2 {
				err := service.DelelteProject(id, c.GetAdminUserInfo().CurrentOrgId)
				fmt.Println(err)
			}
			if project.Type == 3 && project.IsOut == 1 {

				houseConfig, _ := service.GetAllStoreHouseConfig(c.GetAdminUserInfo().CurrentOrgId)
				good, _ := service.FindGoodInfoByIdTwo(project.ProjectId)
				f_count, _ := strconv.ParseFloat(project.Count, 64)

				operation_time := time.Now().Unix()
				creater := adminInfo.AdminUser.Id
				//创建退库单
				timeStr := time.Now().Format("2006-01-02")
				timeArr := strings.Split(timeStr, "-")
				total, _ := service.FindAllCancelStockTotal(adminInfo.CurrentOrgId)
				total = total + 1
				orderNumber := "CKTKD" + strconv.FormatInt(adminInfo.CurrentOrgId, 10) + timeArr[0] + timeArr[1] + timeArr[2] + "000" + strconv.FormatInt(total, 10)

				cancelStock := models.CancelStock{
					OrderNumber:  orderNumber,
					OperaTime:    operation_time,
					OrgId:        adminInfo.CurrentOrgId,
					Creater:      creater,
					Ctime:        time.Now().Unix(),
					Status:       1,
					ReturnTime:   project.RecordDate,
					Type:         1,
					StorehouseId: houseConfig.StorehouseOutInfo,
					IsCheck:      1,
				}
				_, msgerrkonde := service.GetCancelStockDetailByOrderNumberOne(project.RecordDate, adminInfo.CurrentOrgId)
				if msgerrkonde == gorm.ErrRecordNotFound {
					service.AddSigleCancelStock(&cancelStock)
				}
				cancel, _ := service.GetLastCancelStockById(adminInfo.CurrentOrgId)
				floatPrescrip := strconv.FormatFloat(f_count, 'f', -1, 32)
				prescribingNumber, _ := strconv.ParseInt(floatPrescrip, 10, 64)
				//查询是否有出库
				info, _ := service.GetLastWarehoseByGoodId(project.ProjectId, project.PatientId, project.RecordDate)

				manufacturer, _ := service.GetManufactureById(info.Manufacturer)
				deaerler, _ := service.GetDealerById(info.Dealer)
				if info.ID > 0 {
					cancelInfo, _ := service.GetLastCancelStockInfoByGoodId(project.ProjectId)
					if info.Count >= prescribingNumber {
						cancelStockInfo := models.CancelStockInfo{
							GoodId:          project.ProjectId,
							CancelStockId:   cancel.ID,
							GoodTypeId:      good.GoodTypeId,
							Count:           prescribingNumber,
							Price:           info.Price,
							Total:           0,
							ProductDate:     info.ProductDate,
							ExpiryDate:      info.ExpiryDate,
							Ctime:           time.Now().Unix(),
							Status:          1,
							OrgId:           adminInfo.CurrentOrgId,
							OrderNumber:     cancel.OrderNumber,
							Type:            0,
							Dealer:          deaerler.DealerName,
							Manufacturer:    manufacturer.ManufacturerName,
							Number:          info.Number,
							RegisterAccount: "",
							Remark:          "",
							WarehouseInfoId: info.WarehouseInfotId,
							PatientId:       info.PatientId,
							RecordDate:      info.SysRecordTime,
							StorehouseId:    houseConfig.StorehouseOutInfo,
							IsCheck:         1,
						}

						service.CreateCancelStockInfoOne(&cancelStockInfo)
						//回退库存
						service.UpDateWarehouseInfoByStockDelete(info.WarehouseInfotId, prescribingNumber, info.PatientId, info.SysRecordTime, project.ProjectId)
						//退库数量增加
						service.UpdateSumAddCancelCount(adminInfo.CurrentOrgId, project.ProjectId, houseConfig.StorehouseOutInfo, prescribingNumber)
						//出库数量减少
						service.UpdateSumCount(adminInfo.CurrentOrgId, houseConfig.StorehouseOutInfo, project.ProjectId, prescribingNumber)
					}
					if info.Count < prescribingNumber {
						cancelStockInfo := models.CancelStockInfo{
							GoodId:          project.ProjectId,
							CancelStockId:   cancel.ID,
							GoodTypeId:      good.GoodTypeId,
							Count:           info.Count,
							Price:           info.Price,
							Total:           0,
							ProductDate:     info.ProductDate,
							ExpiryDate:      info.ExpiryDate,
							Ctime:           time.Now().Unix(),
							Status:          1,
							OrgId:           adminInfo.CurrentOrgId,
							OrderNumber:     cancel.OrderNumber,
							Type:            0,
							Dealer:          deaerler.DealerName,
							Manufacturer:    manufacturer.ManufacturerName,
							Number:          info.Number,
							RegisterAccount: "",
							Remark:          "",
							WarehouseInfoId: info.WarehouseInfotId,
							PatientId:       info.PatientId,
							RecordDate:      info.SysRecordTime,
							StorehouseId:    houseConfig.StorehouseOutInfo,
							IsCheck:         1,
						}

						service.CreateCancelStockInfoOne(&cancelStockInfo)
						//回退库存
						service.UpDateWarehouseInfoByStockDelete(info.WarehouseInfotId, info.Count, info.PatientId, info.SysRecordTime, project.ProjectId)
						//退库数量增加
						service.UpdateSumAddCancelCount(adminInfo.CurrentOrgId, project.ProjectId, houseConfig.StorehouseOutInfo, info.Count)
						//出库数量减少
						service.UpdateSumCount(adminInfo.CurrentOrgId, houseConfig.StorehouseOutInfo, project.ProjectId, info.Count)
					}

					//查询剩余库存
					goodList, _ := service.GetSumGoodList(adminInfo.CurrentOrgId, houseConfig.StorehouseOutInfo, project.ProjectId)
					var over_count int64
					for _, it := range goodList {
						over_count += it.StockCount
					}
					//出库数据 大于 退库数量
					if info.Count >= prescribingNumber {

						flow := models.VmStockFlow{
							WarehousingId:           info.WarehouseInfotId,
							GoodId:                  project.ProjectId,
							Number:                  info.Number,
							LicenseNumber:           info.LicenseNumber,
							Count:                   prescribingNumber,
							UserOrgId:               adminInfo.CurrentOrgId,
							PatientId:               project.PatientId,
							SystemTime:              info.SysRecordTime,
							ConsumableType:          7,
							IsSys:                   0,
							WarehousingOrder:        "",
							WarehouseOutId:          info.WarehouseOutId,
							WarehouseOutOrderNumber: info.WarehouseOutOrderNumber,
							IsEdit:                  0,
							CancelStockId:           cancel.ID,
							CancelOrderNumber:       cancel.OrderNumber,
							Manufacturer:            manufacturer.ID,
							Dealer:                  0,
							Creator:                 adminInfo.AdminUser.Id,
							UpdateCreator:           0,
							Status:                  1,
							Ctime:                   time.Now().Unix(),
							Mtime:                   0,
							Price:                   info.Price,
							WarehousingDetailId:     info.WarehouseInfotId,
							WarehouseOutDetailId:    info.ID,
							CancelOutDetailId:       cancelInfo.ID,
							ProductDate:             info.ProductDate,
							ExpireDate:              info.ExpiryDate,
							StorehouseId:            houseConfig.StorehouseOutInfo,
							OverCount:               over_count,
							OperateTime:             time.Now().Unix(),
						}
						service.CreateStockFlowOne(flow)
					}

					//出库数据小于退库数据
					if info.Count < prescribingNumber {
						flow := models.VmStockFlow{
							WarehousingId:           info.WarehouseInfotId,
							GoodId:                  project.ProjectId,
							Number:                  info.Number,
							LicenseNumber:           info.LicenseNumber,
							Count:                   info.Count,
							UserOrgId:               adminInfo.CurrentOrgId,
							PatientId:               project.PatientId,
							SystemTime:              info.SysRecordTime,
							ConsumableType:          7,
							IsSys:                   0,
							WarehousingOrder:        "",
							WarehouseOutId:          info.WarehouseOutId,
							WarehouseOutOrderNumber: info.WarehouseOutOrderNumber,
							IsEdit:                  0,
							CancelStockId:           cancel.ID,
							CancelOrderNumber:       cancel.OrderNumber,
							Manufacturer:            manufacturer.ID,
							Dealer:                  0,
							Creator:                 adminInfo.AdminUser.Id,
							UpdateCreator:           0,
							Status:                  1,
							Ctime:                   time.Now().Unix(),
							Mtime:                   0,
							Price:                   info.Price,
							WarehousingDetailId:     info.WarehouseInfotId,
							WarehouseOutDetailId:    info.ID,
							CancelOutDetailId:       cancelInfo.ID,
							ProductDate:             info.ProductDate,
							ExpireDate:              info.ExpiryDate,
							StorehouseId:            houseConfig.StorehouseOutInfo,
							OverCount:               over_count,
							OperateTime:             time.Now().Unix(),
						}
						service.CreateStockFlowOne(flow)
					}

					//查询已出库数量
					dialysisInfo, _ := service.GetGoodDialysisOutInfoSix(adminInfo.CurrentOrgId, info.PatientId, info.SysRecordTime, project.ProjectId)

					if prescribingNumber < dialysisInfo.Count {
						//改变数量
						service.UpdateAutoGood(adminInfo.CurrentOrgId, info.PatientId, info.SysRecordTime, project.ProjectId, id, prescribingNumber)
					}

					if prescribingNumber >= dialysisInfo.Count {
						//删除出库表
						service.DeleteAutoRedeceDetailTen(adminInfo.CurrentOrgId, info.PatientId, info.SysRecordTime, project.ProjectId, id)
					}

					//更新剩余库存
					service.UpdateSumGood(adminInfo.CurrentOrgId, houseConfig.StorehouseOutInfo, project.ProjectId, over_count)

					stockList, _ := service.GetStockCountByGoodId(project.ProjectId, houseConfig.StorehouseOutInfo, project.UserOrgId)
					var total_count_one int64
					for _, it := range stockList {
						total_count_one += it.StockCount
					}
					//基础库插入数据
					service.UpdateGoodInfoSumCountSix(project.ProjectId, total_count_one, project.UserOrgId)

					goodListOne, _ := service.GetSumGoodList(project.UserOrgId, houseConfig.StorehouseOutInfo, project.ProjectId)
					var flush_count int64
					for _, it := range goodListOne {
						flush_count += it.StockCount
					}
					errs := service.UpdateSumGood(project.UserOrgId, houseConfig.StorehouseOutInfo, project.ProjectId, flush_count)
					if errs != nil {
						goodErrcode := models.XtGoodErrcode{
							UserOrgId:      project.UserOrgId,
							Errcode:        "手动出库更新剩余出库失败",
							GoodId:         project.ProjectId,
							Status:         1,
							Ctime:          time.Now().Unix(),
							Mtime:          0,
							Count:          0,
							StockCount:     0,
							Creater:        creater,
							BatchNumberId:  0,
							WarehouseOutId: 0,
						}
						service.CreateGoodErrcode(goodErrcode)
					}
				}
				err := service.DelelteProject(id, c.GetAdminUserInfo().CurrentOrgId)
				fmt.Println(err)
			} else {
				err := service.DelelteProject(id, c.GetAdminUserInfo().CurrentOrgId)
				fmt.Println(err)
			}

		} else {
			err := service.DelelteProject(id, c.GetAdminUserInfo().CurrentOrgId)
			fmt.Println(err)

		}
	}

	//保存处方出库
	if goodOutConfig.IsOpen == 1 {
		if project.Type == 3 {
			houseConfig, _ := service.GetAllStoreHouseConfig(c.GetAdminUserInfo().CurrentOrgId)
			good, _ := service.FindGoodInfoByIdTwo(project.ProjectId)

			f_count, _ := strconv.ParseFloat(project.Count, 64)

			operation_time := time.Now().Unix()
			creater := adminInfo.AdminUser.Id
			//创建退库单
			timeStr := time.Now().Format("2006-01-02")
			timeArr := strings.Split(timeStr, "-")
			total, _ := service.FindAllCancelStockTotal(adminInfo.CurrentOrgId)
			total = total + 1
			orderNumber := "CKTKD" + strconv.FormatInt(adminInfo.CurrentOrgId, 10) + timeArr[0] + timeArr[1] + timeArr[2] + "000" + strconv.FormatInt(total, 10)

			cancelStock := models.CancelStock{
				OrderNumber:  orderNumber,
				OperaTime:    operation_time,
				OrgId:        adminInfo.CurrentOrgId,
				Creater:      creater,
				Ctime:        time.Now().Unix(),
				Status:       1,
				ReturnTime:   project.RecordDate,
				Type:         1,
				StorehouseId: houseConfig.StorehouseOutInfo,
				IsCheck:      1,
			}
			_, msgerrkonde := service.GetCancelStockDetailByOrderNumberOne(project.RecordDate, adminInfo.CurrentOrgId)
			if msgerrkonde == gorm.ErrRecordNotFound {
				service.AddSigleCancelStock(&cancelStock)
			}
			cancel, _ := service.GetLastCancelStockById(adminInfo.CurrentOrgId)
			floatPrescrip := strconv.FormatFloat(f_count, 'f', -1, 32)
			prescribingNumber, _ := strconv.ParseInt(floatPrescrip, 10, 64)
			//获取出库数据
			info, _ := service.GetLastWarehoseByGoodId(project.ProjectId, project.PatientId, project.RecordDate)

			manufacturer, _ := service.GetManufactureById(info.Manufacturer)
			deaerler, _ := service.GetDealerById(info.Dealer)
			if info.ID > 0 {
				cancelInfo, _ := service.GetLastCancelStockInfoByGoodId(project.ProjectId)
				if info.Count >= prescribingNumber {
					cancelStockInfo := models.CancelStockInfo{
						GoodId:          project.ProjectId,
						CancelStockId:   cancel.ID,
						GoodTypeId:      good.GoodTypeId,
						Count:           prescribingNumber,
						Price:           info.Price,
						Total:           0,
						ProductDate:     info.ProductDate,
						ExpiryDate:      info.ExpiryDate,
						Ctime:           time.Now().Unix(),
						Status:          1,
						OrgId:           adminInfo.CurrentOrgId,
						OrderNumber:     cancel.OrderNumber,
						Type:            0,
						Dealer:          deaerler.DealerName,
						Manufacturer:    manufacturer.ManufacturerName,
						Number:          info.Number,
						RegisterAccount: "",
						Remark:          "",
						WarehouseInfoId: info.WarehouseInfotId,
						PatientId:       info.PatientId,
						RecordDate:      info.SysRecordTime,
						StorehouseId:    houseConfig.StorehouseOutInfo,
						IsCheck:         1,
					}

					service.CreateCancelStockInfoOne(&cancelStockInfo)

					//退库数量增加
					//service.UpdateSumAddCancelCount(adminInfo.CurrentOrgId, project.ProjectId, houseConfig.StorehouseOutInfo, prescribingNumber)
					//出库数量减少
					//service.UpdateSumCount(adminInfo.CurrentOrgId, houseConfig.StorehouseOutInfo, project.ProjectId, prescribingNumber)
				}
				if info.Count < prescribingNumber {
					cancelStockInfo := models.CancelStockInfo{
						GoodId:          project.ProjectId,
						CancelStockId:   cancel.ID,
						GoodTypeId:      good.GoodTypeId,
						Count:           prescribingNumber,
						Price:           info.Price,
						Total:           0,
						ProductDate:     info.ProductDate,
						ExpiryDate:      info.ExpiryDate,
						Ctime:           time.Now().Unix(),
						Status:          1,
						OrgId:           adminInfo.CurrentOrgId,
						OrderNumber:     cancel.OrderNumber,
						Type:            0,
						Dealer:          deaerler.DealerName,
						Manufacturer:    manufacturer.ManufacturerName,
						Number:          info.Number,
						RegisterAccount: "",
						Remark:          "",
						WarehouseInfoId: info.WarehouseInfotId,
						PatientId:       info.PatientId,
						RecordDate:      info.SysRecordTime,
						StorehouseId:    houseConfig.StorehouseOutInfo,
						IsCheck:         1,
					}

					service.CreateCancelStockInfoOne(&cancelStockInfo)
					//回退库存
					//service.UpDateWarehouseInfoByStockDelete(info.WarehouseInfotId, info.Count, info.PatientId, info.SysRecordTime, project.ProjectId)

				}

				goodList, _ := service.GetSumGoodList(adminInfo.CurrentOrgId, houseConfig.StorehouseOutInfo, project.ProjectId)
				var over_count int64
				for _, it := range goodList {
					over_count += it.StockCount
				}

				//查询出库数量
				list, _ := service.GetWarehouseOutInfoByProjectIdList(id, adminInfo.CurrentOrgId, houseConfig.StorehouseOutInfo, project.ProjectId, project.PatientId, info.SysRecordTime)

				//出库数据 大于 退库数量
				if len(list) > 0 {
					for _, it := range list {
						//回退库存
						service.UpDateWarehouseInfoByStockDelete(it.WarehouseInfotId, it.Count, it.PatientId, it.SysRecordTime, it.ProjectId)
						//退库数量增加
						service.UpdateSumAddCancelCount(adminInfo.CurrentOrgId, project.ProjectId, houseConfig.StorehouseOutInfo, it.Count)
						//出库数量减少
						service.UpdateSumCount(adminInfo.CurrentOrgId, houseConfig.StorehouseOutInfo, project.ProjectId, it.Count)
						goodList, _ := service.GetSumGoodList(adminInfo.CurrentOrgId, houseConfig.StorehouseOutInfo, project.ProjectId)
						var over_count_one int64
						for _, it := range goodList {
							over_count_one += it.StockCount
						}
						//查询该批次是否有退库数据
						//flow, _ := service.GetWarehouseStockFlow(it.WarehouseInfotId, it.GoodId, adminInfo.CurrentOrgId, it.PatientId, it.SysRecordTime)

						flow := models.VmStockFlow{
							WarehousingId:           it.WarehouseInfotId,
							GoodId:                  it.GoodId,
							Number:                  it.Number,
							LicenseNumber:           it.LicenseNumber,
							Count:                   it.Count,
							UserOrgId:               adminInfo.CurrentOrgId,
							PatientId:               it.PatientId,
							SystemTime:              it.SysRecordTime,
							ConsumableType:          7,
							IsSys:                   0,
							WarehousingOrder:        "",
							WarehouseOutId:          it.WarehouseOutId,
							WarehouseOutOrderNumber: it.WarehouseOutOrderNumber,
							IsEdit:                  0,
							CancelStockId:           cancel.ID,
							CancelOrderNumber:       cancel.OrderNumber,
							Manufacturer:            manufacturer.ID,
							Dealer:                  0,
							Creator:                 adminInfo.AdminUser.Id,
							UpdateCreator:           0,
							Status:                  1,
							Ctime:                   time.Now().Unix(),
							Mtime:                   0,
							Price:                   it.Price,
							WarehousingDetailId:     it.WarehouseInfotId,
							WarehouseOutDetailId:    it.ID,
							CancelOutDetailId:       cancelInfo.ID,
							ProductDate:             it.ProductDate,
							ExpireDate:              it.ExpiryDate,
							StorehouseId:            houseConfig.StorehouseOutInfo,
							OverCount:               over_count_one,
							OperateTime:             time.Now().Unix(),
						}
						service.CreateStockFlowOne(flow)

					}

				}

				//查询已出库数量
				dialysisInfo, _ := service.GetGoodDialysisOutInfoSix(adminInfo.CurrentOrgId, info.PatientId, info.SysRecordTime, project.ProjectId)

				if prescribingNumber < dialysisInfo.Count {
					//改变数量
					service.UpdateAutoGood(adminInfo.CurrentOrgId, info.PatientId, info.SysRecordTime, project.ProjectId, id, prescribingNumber)
				}

				if prescribingNumber >= dialysisInfo.Count {
					//删除出库表
					service.DeleteAutoRedeceDetailTwenty(adminInfo.CurrentOrgId, info.PatientId, info.SysRecordTime, project.ProjectId, id)
				}

				//更新剩余库存
				service.UpdateSumGood(adminInfo.CurrentOrgId, houseConfig.StorehouseOutInfo, project.ProjectId, over_count)

				stockList, _ := service.GetStockCountByGoodId(project.ProjectId, houseConfig.StorehouseOutInfo, project.UserOrgId)
				var total_count_one int64
				for _, it := range stockList {
					total_count_one += it.StockCount
				}
				//基础库插入数据
				service.UpdateGoodInfoSumCountSix(project.ProjectId, total_count_one, project.UserOrgId)

				goodListOne, _ := service.GetSumGoodList(project.UserOrgId, houseConfig.StorehouseOutInfo, project.ProjectId)
				var flush_count int64
				for _, it := range goodListOne {
					flush_count += it.StockCount
				}
				errs := service.UpdateSumGood(project.UserOrgId, houseConfig.StorehouseOutInfo, project.ProjectId, flush_count)
				if errs != nil {
					goodErrcode := models.XtGoodErrcode{
						UserOrgId:      project.UserOrgId,
						Errcode:        "手动出库更新剩余出库失败",
						GoodId:         project.ProjectId,
						Status:         1,
						Ctime:          time.Now().Unix(),
						Mtime:          0,
						Count:          0,
						StockCount:     0,
						Creater:        creater,
						BatchNumberId:  0,
						WarehouseOutId: 0,
					}
					service.CreateGoodErrcode(goodErrcode)
				}
			}
			err := service.DelelteProject(id, c.GetAdminUserInfo().CurrentOrgId)
			fmt.Println(err)
		} else {
			err := service.DelelteProject(id, c.GetAdminUserInfo().CurrentOrgId)
			fmt.Println(err)
		}
	}

	c.ServeSuccessJSON(map[string]interface{}{
		"msg": "删除成功",
	})
	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)

	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")

	past_history := c.GetString("past_history")
	patient_id, _ := c.GetInt64("patient_id")
	his_patient_id, _ := c.GetInt64("his_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")

	sick_type, _ := strconv.ParseInt(sicktype, 10, 64)
	symptom := c.GetString("symptom")
	sick_date := c.GetString("sick_date")
	temperatures := c.GetString("temperature")

	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()

	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()

	primary_disease := c.GetString("primary_disease")
	confirm_failure_date := c.GetString("confirm_failure_date")
	confirm_failure_date_time, _ := time.ParseInLocation(timeLayout+" 15:04:05", confirm_failure_date+" 00:00:00", loc)
	drug_allergy_history := c.GetString("drug_allergy_history")
	physical_examination := c.GetString("physical_examination")
	special_inspection := c.GetString("special_inspection")
	lab_apparatus := c.GetString("lab_apparatus")
	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,
		PrimaryDisease:          primary_disease,
		ConfirmFailureDate:      confirm_failure_date_time.Unix(),
		DrugAllergyHistory:      drug_allergy_history,
		PhysicalExamination:     physical_examination,
		SpecialInspection:       special_inspection,
		LabApparatus:            lab_apparatus,
	}
	//查询该患者是否有病历
	_, errcodes := service.GetHisPatientCaseHistoryById(patient_id, recordDateTime, c.GetAdminUserInfo().CurrentOrgId)
	if errcodes == gorm.ErrRecordNotFound {
		err = service.SaveHisPatientCaseHistory(&caseHistory)
		historyInfo, _ := service.GetLastHisPatientCaseHistoryById(patient_id)
		if err != nil {
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeUpdateConfig)
			return
		}
		c.ServeSuccessJSON(map[string]interface{}{
			"caseHistory": caseHistory,
			"historyInfo": historyInfo,
		})
		return
	} else if errcodes == nil {
		err := service.UpdatePatientCaseHistory(patient_id, recordDateTime, c.GetAdminUserInfo().CurrentOrgId, &caseHistory)
		historyInfo, _ := service.GetLastHisPatientCaseHistoryById(patient_id)
		if err != nil {
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeUpdateConfig)
			return
		}
		c.ServeSuccessJSON(map[string]interface{}{
			"caseHistory": caseHistory,
			"historyInfo": historyInfo,
		})
	}

	//查询该患者是否有病历
	//_, 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["is_self_drug"] != nil && reflect.TypeOf(json["is_self_drug"]).String() == "string" {
		is_self_drug, _ := strconv.ParseInt(json["is_self_drug"].(string), 10, 64)
		advice.IsSelfDrug = is_self_drug
	}

	if json["drug_way_count"] != nil && reflect.TypeOf(json["drug_way_count"]).String() == "string" {
		//drug_way_count, _ := strconv.ParseInt(json["drug_way_count"].(string), 10, 64)
		drug_way_count, _ := json["drug_way_count"].(string)
		advice.DrugWayCount = drug_way_count
	}

	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)
		project.Count = total
	}

	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 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["is_self_drug"] != nil && reflect.TypeOf(json["is_self_drug"]).String() == "string" {
		is_self_drug, _ := strconv.ParseInt(json["is_self_drug"].(string), 10, 64)
		advice.IsSelfDrug = is_self_drug
	}
	if json["drug_way_count"] != nil && reflect.TypeOf(json["drug_way_count"]).String() == "string" {
		//drug_way_count, _ := strconv.ParseInt(json["drug_way_count"].(string), 10, 64)
		drug_way_count, _ := json["drug_way_count"].(string)
		advice.DrugWayCount = drug_way_count
	}

	if json["hosp_appr_flag"] != nil && reflect.TypeOf(json["hosp_appr_flag"]).String() == "string" {
		hosp_appr_flag, _ := strconv.ParseInt(json["hosp_appr_flag"].(string), 10, 64)
		advice.HospApprFlag = hosp_appr_flag
	}

	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["frequency_type"] != nil || reflect.TypeOf(json["frequency_type"]).String() == "float64" {
	//	frequency_type := int64(json["frequency_type"].(float64))
	//	advice.FrequencyType = frequency_type
	//}
	//
	//if json["day_count"] != nil || reflect.TypeOf(json["day_count"]).String() == "float64" {
	//	day_count := int64(json["day_count"].(float64))
	//	advice.DayCount = day_count
	//}
	//
	//if json["week_day"] != nil && reflect.TypeOf(json["week_day"]).String() == "string" {
	//	//week_day, _ := strconv.ParseFloat(json["week_day"].(string), 64)
	//	week_day, _ := json["week_day"].(string)
	//	advice.WeekDay = week_day
	//}

	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
	}

	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.HospApprFlag = hisAdvice.HospApprFlag
					advice.IsMedicine = hisAdvice.IsMedicine
					if hisAdvice.UserOrgId == 10028 {
						if hisAdvice.DeliveryWay != advice.DeliveryWay || hisAdvice.ExecutionFrequency != advice.ExecutionFrequency || hisAdvice.Day != advice.Day || hisAdvice.PrescribingNumber != advice.PrescribingNumber || hisAdvice.Price != advice.Price || hisAdvice.Remark != advice.Remark || hisAdvice.PrescribingNumberUnit != advice.PrescribingNumberUnit {
							advice.ExecutionTime = 0
							advice.ExecutionStaff = 0
							advice.ExecutionState = 2
							advice.CheckTime = 0
							advice.Checker = 0
							advice.CheckState = 2
						}
					} else {
						if hisAdvice.SingleDose != advice.SingleDose || hisAdvice.DeliveryWay != advice.DeliveryWay || hisAdvice.ExecutionFrequency != advice.ExecutionFrequency || hisAdvice.Day != advice.Day || hisAdvice.PrescribingNumber != advice.PrescribingNumber || hisAdvice.Price != advice.Price || hisAdvice.Remark != advice.Remark || hisAdvice.PrescribingNumberUnit != advice.PrescribingNumberUnit {
							advice.ExecutionTime = 0
							advice.ExecutionStaff = 0
							advice.ExecutionState = 2
							advice.CheckTime = 0
							advice.Checker = 0
							advice.CheckState = 2
							advice.UpdatedTime = time.Now().Unix()
						}
					}

					//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
	//}

	return 0
}

func 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
		project.TeamId = temp_project.TeamId
	}
	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["team_id"] != nil && reflect.TypeOf(json["team_id"]).String() == "float64" {
		team_id := int64(json["team_id"].(float64))
		project.TeamId = team_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 = total
	}

	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
	}

	//if json["frequency_type"] != nil || reflect.TypeOf(json["frequency_type"]).String() == "float64" {
	//	frequency_type := int64(json["frequency_type"].(float64))
	//	project.FrequencyType = frequency_type
	//}
	//
	//if json["day_count"] != nil || reflect.TypeOf(json["day_count"]).String() == "float64" {
	//	day_count := int64(json["day_count"].(float64))
	//	project.DayCount = day_count
	//}
	//
	//if json["week_day"] != nil && reflect.TypeOf(json["week_day"]).String() == "string" {
	//	//week_day, _ := strconv.ParseFloat(json["week_day"].(string), 64)
	//	week_day, _ := json["week_day"].(string)
	//	project.WeekDay = week_day
	//}

	//_, 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(project.Count, 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 {
	//				f_count_one, _ := strconv.ParseFloat(project.Count, 64)
	//				f_count_two, _ := strconv.ParseFloat(temp_project.Count, 64)
	//
	//				other_count := f_count_two - f_count_one
	//				other_count_two, _ := strconv.ParseFloat(strconv.FormatInt(int64(other_count), 10), 64)
	//				good.Total = good.Total + other_count_two
	//				service.UpdateGoodInfo(&good)
	//			} else if project.Count > temp_project.Count {
	//				f_count_one, _ := strconv.ParseFloat(project.Count, 64)
	//				f_count_two, _ := strconv.ParseFloat(temp_project.Count, 64)
	//
	//				other_count := f_count_one - f_count_two
	//				other_count_two, _ := strconv.ParseFloat(strconv.FormatInt(int64(other_count), 10), 64)
	//				good.Total = good.Total - other_count_two
	//				service.UpdateGoodInfo(&good)
	//			}
	//
	//		}
	//	}
	//
	//}

	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["is_self_drug"] != nil && reflect.TypeOf(json["is_self_drug"]).String() == "string" {
		is_self_drug, _ := strconv.ParseInt(json["is_self_drug"].(string), 10, 64)
		advice.IsSelfDrug = is_self_drug
	}
	if json["drug_way_count"] != nil && reflect.TypeOf(json["drug_way_count"]).String() == "string" {
		//drug_way_count, _ := strconv.ParseInt(json["drug_way_count"].(string), 10, 64)
		drug_way_count, _ := json["drug_way_count"].(string)
		advice.DrugWayCount = drug_way_count
	}

	if json["hosp_appr_flag"] != nil && reflect.TypeOf(json["hosp_appr_flag"]).String() == "string" {
		hosp_appr_flag, _ := strconv.ParseInt(json["hosp_appr_flag"].(string), 10, 64)
		advice.HospApprFlag = hosp_appr_flag
	}

	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["frequency_type"] != nil || reflect.TypeOf(json["frequency_type"]).String() == "float64" {
	//	frequency_type := int64(json["frequency_type"].(float64))
	//	advice.FrequencyType = frequency_type
	//}
	//
	//if json["day_count"] != nil || reflect.TypeOf(json["day_count"]).String() == "float64" {
	//	day_count := int64(json["day_count"].(float64))
	//	advice.DayCount = day_count
	//}
	//
	//if json["week_day"] != nil && reflect.TypeOf(json["week_day"]).String() == "string" {
	//	//week_day, _ := strconv.ParseFloat(json["week_day"].(string), 64)
	//	week_day, _ := json["week_day"].(string)
	//	advice.WeekDay = week_day
	//}

	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
	}

	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.DrugCode = hisAdvice.DrugCode
					advice.CheckState = hisAdvice.CheckState
					advice.StartTime = hisAdvice.StartTime
					advice.HospApprFlag = hisAdvice.HospApprFlag
					advice.IsMedicine = hisAdvice.IsMedicine
					if hisAdvice.UserOrgId == 10028 {
						if hisAdvice.DeliveryWay != advice.DeliveryWay || hisAdvice.ExecutionFrequency != advice.ExecutionFrequency || hisAdvice.Day != advice.Day || hisAdvice.PrescribingNumber != advice.PrescribingNumber || hisAdvice.Price != advice.Price || hisAdvice.Remark != advice.Remark || hisAdvice.PrescribingNumberUnit != advice.PrescribingNumberUnit {
							advice.ExecutionTime = 0
							advice.ExecutionStaff = 0
							advice.ExecutionState = 2
							advice.CheckTime = 0
							advice.Checker = 0
							advice.CheckState = 2
						}
					} else {
						if hisAdvice.SingleDoseUnit != advice.SingleDoseUnit || hisAdvice.SingleDose != advice.SingleDose || hisAdvice.DeliveryWay != advice.DeliveryWay || hisAdvice.ExecutionFrequency != advice.ExecutionFrequency || hisAdvice.Day != advice.Day || hisAdvice.PrescribingNumber != advice.PrescribingNumber || hisAdvice.Price != advice.Price || hisAdvice.Remark != advice.Remark || hisAdvice.PrescribingNumberUnit != advice.PrescribingNumberUnit {
							advice.ExecutionTime = 0
							advice.ExecutionStaff = 0
							advice.ExecutionState = 2
							advice.CheckTime = 0
							advice.Checker = 0
							advice.CheckState = 2
							//advice.UpdatedTime = time.Now().Unix()
							advice.CreatedTime = hisAdvice.CreatedTime
							advice.UpdatedTime = time.Now().Unix()
						} else {
							advice.CreatedTime = hisAdvice.CreatedTime
							advice.UpdatedTime = hisAdvice.UpdatedTime

						}
					}
					//advice.Groupno = hisAdvice.Groupno
				} else {
					advice.IsMedicine = 0
					ctime := time.Now().Unix()
					advice.CreatedTime = ctime
					advice.UpdatedTime = ctime
				}
			}
		} else {
			advice.IsMedicine = 0
			ctime := time.Now().Unix()
			advice.CreatedTime = ctime
			advice.UpdatedTime = ctime

		}
	}

	//_, 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
	//}

	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
		project.TeamId = temp_project.TeamId

	}
	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["team_id"] != nil && reflect.TypeOf(json["team_id"]).String() == "float64" {
		team_id := int64(json["team_id"].(float64))
		project.TeamId = team_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 = total
	}

	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
	}

	//if json["frequency_type"] != nil || reflect.TypeOf(json["frequency_type"]).String() == "float64" {
	//	frequency_type := int64(json["frequency_type"].(float64))
	//	project.FrequencyType = frequency_type
	//}
	//
	//if json["day_count"] != nil || reflect.TypeOf(json["day_count"]).String() == "float64" {
	//	day_count := int64(json["day_count"].(float64))
	//	project.DayCount = day_count
	//}
	//
	//if json["week_day"] != nil && reflect.TypeOf(json["week_day"]).String() == "string" {
	//	//week_day, _ := strconv.ParseFloat(json["week_day"].(string), 64)
	//	week_day, _ := json["week_day"].(string)
	//	project.WeekDay = week_day
	//}

	//_, 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(project.Count, 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 {
	//				f_count_one, _ := strconv.ParseFloat(project.Count, 64)
	//				f_count_two, _ := strconv.ParseFloat(temp_project.Count, 64)
	//
	//				other_count := f_count_two - f_count_one
	//				other_count_two, _ := strconv.ParseFloat(strconv.FormatInt(int64(other_count), 10), 64)
	//				good.Total = good.Total + other_count_two
	//				service.UpdateGoodInfo(&good)
	//			} else if project.Count > temp_project.Count {
	//				f_count_one, _ := strconv.ParseFloat(project.Count, 64)
	//				f_count_two, _ := strconv.ParseFloat(temp_project.Count, 64)
	//
	//				other_count := f_count_one - f_count_two
	//				other_count_two, _ := strconv.ParseFloat(strconv.FormatInt(int64(other_count), 10), 64)
	//				good.Total = good.Total - other_count_two
	//				service.UpdateGoodInfo(&good)
	//			}
	//
	//		}
	//	}
	//
	//}
	if json["id"] != nil || reflect.TypeOf(json["id"]).String() == "float64" {
		id := int64(json["id"].(float64))
		if id > 0 {
			temp_project, _ := service.GetHisPrescriptionProjectByID(id)

			if temp_project.ExecutionFrequency != project.ExecutionFrequency || temp_project.Count != project.Count || temp_project.Remark != project.Remark {
				fmt.Println("666666")
				project.Mtime = time.Now().Unix()
				project.Ctime = temp_project.Ctime

			} else {
				project.Mtime = temp_project.Mtime
				project.Ctime = temp_project.Ctime
			}
		} else {
			ctime := time.Now().Unix()
			project.Mtime = ctime
			project.Ctime = ctime
		}
	}
	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["groupno"] != nil || reflect.TypeOf(json["groupno"]).String() == "float64" {
		groupno := int64(json["groupno"].(float64))
		advice.Groupno = groupno
	}

	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
	}
	advice.FrequencyType = 1
	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 = total
	}

	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
	}
	project.FrequencyType = 1

	return 0
}

func (c *HisApiController) GetHisOrderListTwo() {
	start_time := c.GetString("start_time")
	end_time := c.GetString("end_time")

	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 := service.GetNewHisOrderListTwo(org_id, startTime, endTime)
	if err == nil {
		c.ServeSuccessJSON(map[string]interface{}{
			"order2": order,
		})

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

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)
	sort_type, _ := c.GetInt64("sort_type", 0)
	charge_type, _ := c.GetInt64("charge_type", 0)
	sch_type, _ := c.GetInt64("sch_type", 0)
	zone_type, _ := c.GetInt64("zone_type", 0)
	med_type, _ := c.GetInt64("med_type", 0)
	fee_type, _ := c.GetInt64("fee_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, sort_type, start_time, end_time, charge_type, sch_type, zone_type, med_type, fee_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")
	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()
	prescriptionOrder, err, total := service.GetNewHisPatientPrescriptionList(adminInfo.CurrentOrgId, keywords, recordDateTime, page, limit, sch_type)

	//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
	CostType         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")
	oth_desc := c.GetString("oth_desc")
	pay_way, _ := c.GetInt64("pay_way")
	pay_ways := c.GetString("pay_ways")

	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")

	cash_pay := c.GetString("cash_pay")
	wechat_pay := c.GetString("wechat_pay")
	ali_pay := c.GetString("ali_pay")
	jifen_pay := c.GetString("jifen_pay")
	card_desc := c.GetString("card_desc")

	band_card_pay := c.GetString("band_card_pay")

	dec_way := c.GetString("dec_way") //是否使用押金支付bool类型
	tmp_decimal := c.GetString("tmp_decimal")

	//last_order, _ := service.GetLastHisOrderThree(c.GetAdminUserInfo().CurrentOrgId)

	var decimal float64 //本次使用的押金
	var errmsg error
	tx := service.XTWriteDB().Begin() //开了事务
	//只检测扣费函数SpendDeposit有没有返回错误,如果有则回滚所有以TX结尾的方法(去掉TX即为原先的方法)
	defer func() {
		if errmsg != nil {
			utils.ErrorLog("事务失败,原因为: %v", errmsg.Error())
			tx.Rollback()
		} else {
			tx.Commit()
		}
	}()
	fmt.Println("dec_way", dec_way)
	if (dec_way == "true" && tmp_decimal == "0") || (dec_way == "true" && tmp_decimal == "") {
		c.ServeFailJsonSend(enums.ErrorCodeParamWrong, "押金不能为0")
		return
	}
	if len(tmp_decimal) > 0 {
		if tmp_decimal[0] == 45 {
			c.ServeFailJsonSend(enums.ErrorCodeParamWrong, "押金不能为负数")
			return
		}
	}
	tt, errs := strconv.ParseFloat(tmp_decimal, 64)
	fmt.Println(errs)

	decimal = tt

	his, _ := service.GetHisPatientByIdThreeTX(his_patient_id, tx)

	tempOrder, _ := service.GetHisOrderByIDTX(order_id, tx)

	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 prescriptionsOne []*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 || reg_type == 1111 || reg_type == 1112 {

				prescriptions, _ = service.GetPrescriptionByIdsTX(ids_arr, adminUser.CurrentOrgId, tx)

				prescriptionsOne, _ = service.GetPrescriptionByIdsTxOne(ids_arr, adminUser.CurrentOrgId, tx)
			} else {
				prescriptions, _ = service.GetSettleHisPrescriptionTX(adminUser.CurrentOrgId, id, his_patient_id, recordDateTime, reg_type, tx)

				prescriptionsOne, _ = service.GetSettleHisPrescriptionTXOne(adminUser.CurrentOrgId, id, his_patient_id, recordDateTime, reg_type, tx)
			}
		} 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.GetMonthHisPrescriptionTX(adminUser.CurrentOrgId, id, recordStartTime, recordEndTime, reg_type, tx)

			prescriptionsOne, _ = service.GetMonthHisPrescriptionTXOne(adminUser.CurrentOrgId, id, his_patient_id, recordDateTime, reg_type, tx)
		}

		var goods []*models.DialysisBeforePrepareGoods
		var newGoods []*models.NewDialysisBeforePrepareGoods
		var oldGoods []*models.OldDialysisBeforePrepareGoods
		var infos []*models.HisDoctorAdviceInfo
		var infoList []*models.HisDoctorAdviceInfo
		var hisAdvice []*models.HisDoctorAdviceInfo
		var newGoodOne []*models.NewDialysisBeforePrepareGoods
		houseConfig, _ := service.GetAllStoreHouseConfig(adminUser.CurrentOrgId)

		//判断库存不足
		//结算出库开关
		settConfig, _ := service.GetSettleOpenConfigByOrgId(adminUser.CurrentOrgId)
		if settConfig.IsOpen == 1 {
			//判断库存的地方
			for _, info := range prescriptions {
				if info.Type == 1 {
					infos = append(infos, info.HisDoctorAdviceInfo...)

				}
				if info.Type == 2 {
					for _, sumItem := range info.HisPrescriptionProject {
						if sumItem.Type == 3 {
							var good models.DialysisBeforePrepareGoods
							var newGood models.NewDialysisBeforePrepareGoods
							good.GoodId = sumItem.GoodInfo.ID
							good.GoodTypeId = sumItem.GoodInfo.GoodTypeId
							count, _ := strconv.Atoi(sumItem.Count)
							good.Count = int64(count)
							good.StorehouseId = houseConfig.StorehouseOutInfo
							good.ProjectId = sumItem.ID
							goods = append(goods, &good)

							newGood.GoodId = sumItem.GoodInfo.ID
							newGood.GoodTypeId = sumItem.GoodInfo.GoodTypeId
							count2, _ := strconv.Atoi(sumItem.Count)
							newGood.Count = int64(count2)
							newGood.StorehouseId = houseConfig.StorehouseOutInfo
							newGood.ProjectId = sumItem.ID
							newGoods = append(newGoods, &newGood)
						}
					}
				}
			}

			for _, info := range prescriptionsOne {

				if info.Type == 1 {
					hisAdvice = append(hisAdvice, info.HisDoctorAdviceInfo...)
				}

				if info.Type == 2 {
					for _, sumItem := range info.HisPrescriptionProject {
						if sumItem.Type == 3 {
							var newGood models.NewDialysisBeforePrepareGoods

							newGood.GoodId = sumItem.GoodInfo.ID
							newGood.GoodTypeId = sumItem.GoodInfo.GoodTypeId
							count2, _ := strconv.Atoi(sumItem.Count)
							newGood.Count = int64(count2)
							newGood.StorehouseId = houseConfig.StorehouseOutInfo
							newGood.ProjectId = sumItem.ID
							newGoodOne = append(newGoodOne, &newGood)
						}
					}
				}
			}

			//判断
			for _, itemOne := range infos {

				for _, itemTwo := range hisAdvice {
					if itemOne.DrugId == itemTwo.DrugId {
						itemTwo.Child = append(itemTwo.Child, itemOne)
					}
				}
			}

			for _, itemTwo := range hisAdvice {
				medical, _ := service.GetBaseDrugMedical(itemTwo.DrugId)
				var sum_out_count int64
				for _, itemThree := range itemTwo.Child {
					var prescribing_number int64
					stringPrescribingNumber := strconv.FormatFloat(itemThree.PrescribingNumber, 'f', -1, 64)
					parseIntPrescribingNumber, _ := strconv.ParseInt(stringPrescribingNumber, 10, 64)
					if itemThree.PrescribingNumberUnit == medical.MaxUnit && medical.MaxUnit != medical.MinUnit {
						prescribing_number = parseIntPrescribingNumber * medical.MinNumber
					}
					if itemThree.PrescribingNumberUnit == medical.MinUnit && medical.MaxUnit != medical.MinUnit {
						prescribing_number = parseIntPrescribingNumber
					}
					if itemThree.PrescribingNumberUnit == medical.MinUnit && medical.MaxUnit == medical.MinUnit {
						prescribing_number = parseIntPrescribingNumber
					}

					sum_out_count += prescribing_number
				}
				drugStockOut, _ := service.GetDrugSumOutCountByDrugId(itemTwo.DrugId, adminUser.CurrentOrgId, houseConfig.DrugStorehouseOut)

				if sum_out_count > drugStockOut.FlushCount {
					c.ServeSuccessJSON(map[string]interface{}{
						"msg":  "2",
						"drug": medical,
					})
					return
				}
			}
			for _, itemOne := range newGoods {
				for _, item := range newGoodOne {
					if itemOne.GoodId == item.GoodId {
						item.ChildNewDialysisBeforePrepareGoods = append(item.ChildNewDialysisBeforePrepareGoods, itemOne)
					}
				}
			}

			for _, item := range newGoodOne {
				var sum_out_count_one int64
				good, _ := service.GetGoodInformationByGoodIdOne(item.GoodId)
				for _, itemOne := range item.ChildNewDialysisBeforePrepareGoods {
					sum_out_count_one += itemOne.Count
				}
				list, _ := service.GetStockGoodList(item.GoodId, adminUser.CurrentOrgId, houseConfig.StorehouseOutInfo)
				fmt.Println("sum_out_count_one", sum_out_count_one)
				fmt.Println("list.FlushCount", list.FlushCount)
				if sum_out_count_one > list.FlushCount {
					c.ServeSuccessJSON(map[string]interface{}{
						"msg":  "3",
						"good": good,
					})
					return
				}
			}
		}

		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)
		}
		var total float64

		for _, item := range prescriptions {
			fmt.Println(item)
			if item.Type == 1 { //药品
				for _, subItem := range item.HisDoctorAdviceInfo {
					if subItem.Drug.IsUser != 1 {
						total = total + (subItem.Price * subItem.PrescribingNumber)
					}
				}

			}
			if item.Type == 2 { //项目
				for _, subItem := range item.HisPrescriptionProject {
					if subItem.Type == 2 {
						cnt, _ := strconv.ParseFloat(subItem.Count, 64)
						total = total + (subItem.Price * cnt)

					} else {
						if subItem.GoodInfo.IsUser != 1 {
							cnt, _ := strconv.ParseFloat(subItem.Count, 64)
							total = total + (subItem.Price * cnt)
						}
					}
				}
			}

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

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

		tm := time.Unix(time.Now().Unix(), 0)

		allTotal := fmt.Sprintf("%.4f", 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,
			PayWays:               pay_ways,
			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,
			PsnPartAmt:            totals,
			PsnCashPay:            totals,
			SettleType:            settle_accounts_type,
			FaPiaoCode:            fapiao_code,
			FaPiaoNumber:          fapiao_number,
			Diagnosis:             diagnosis_id,
			PType:                 2,
			SetlTime:              tm.Format("2006-01-02 15:04:05"),
			Decimal:               decimal,
			OthDesc:               oth_desc,
			CashPay:               cash_pay,
			WechatPay:             wechat_pay,
			AliPay:                ali_pay,
			JifenPay:              jifen_pay,
			BandCardPay:           band_card_pay,
			Creator:               adminUser.AdminUser.Id,
			CardDesc:              card_desc,
		}
		err = service.CreateOrderTX(order, tx)
		if err != nil {
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeCreateOrderException)
			return
		}

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

			if item.Type == 2 { //项目
				for _, subItem := range item.HisPrescriptionProject {
					if subItem.Type == 2 {
						cnt, _ := strconv.ParseFloat(subItem.Count, 64)
						cus := &Custom{
							AdviceId:         0,
							ProjectId:        subItem.ID,
							DetItemFeeSumamt: fmt.Sprintf("%.4f", subItem.Price*cnt),
							Cut:              fmt.Sprintf("%.4f", cnt),
							FeedetlSn:        subItem.FeedetlSn,
							Price:            fmt.Sprintf("%.4f", float64(subItem.Price)),
							MedListCodg:      subItem.MedListCodg,
							Type:             2,
							CostType:         subItem.HisProject.CostClassify,
						}
						customs = append(customs, cus)
					} else {
						if subItem.GoodInfo.IsUser != 1 {
							cnt, _ := strconv.ParseFloat(subItem.Count, 64)
							cus := &Custom{
								AdviceId:         0,
								ProjectId:        subItem.ID,
								DetItemFeeSumamt: fmt.Sprintf("%.4f", subItem.Price*cnt),
								Cut:              fmt.Sprintf("%.4f", cnt),
								FeedetlSn:        subItem.FeedetlSn,
								Price:            fmt.Sprintf("%.4f", float64(subItem.Price)),
								MedListCodg:      subItem.MedListCodg,
								Type:             2,
								CostType:         subItem.HisProject.CostClassify,
							}
							customs = append(customs, cus)
						}

					}

				}
			}

			for _, item := range item.HisAdditionalCharge {
				cus := &Custom{
					ItemId:           item.ID,
					AdviceId:         0,
					ProjectId:        0,
					DetItemFeeSumamt: fmt.Sprintf("%.4f", item.Price),
					Cut:              fmt.Sprintf("%.4f", float64(item.Count)),
					FeedetlSn:        item.FeedetlSn,
					Price:            fmt.Sprintf("%.4f", float64(item.Price)),
					MedListCodg:      item.XtHisAddtionConfig.Code,
					Type:             3,
					CostType:         5,
				}
				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
			var med_chrgitm_type string
			if item.Type == 1 {
				advice_id = item.AdviceId
				project_id = 0
				item_id = 0
				med_chrgitm_type = "09"
			} else if item.Type == 2 {
				med_chrgitm_type = "05"
				if item.CostType == 3 {
					med_chrgitm_type = "04"
				}
				if item.CostType == 8 {
					med_chrgitm_type = "03"
				}
				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
				med_chrgitm_type = "08"

			}
			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,
				MedChrgitmType:   med_chrgitm_type,
				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.CreateOrderInfoTX(info, tx)
		}
		his.Diagnosis = diagnosis_id
		his.SickType = sick_type
		his.RegisterType = reg_type
		his.MedicalTreatmentType = reg_type
		service.UpdataHisPateintTX(&his, tx)
		err = service.UpDatePrescriptionNumberTX(adminUser.CurrentOrgId, ids, chrg_bchno, tx)
		err = service.UpDateHisPrescriptionInfoNumberTX(adminUser.CurrentOrgId, id, chrg_bchno, recordDateTime, his_patient_id, tx)
		err = service.UpdataOrderStatusTwoTX(chrg_bchno, adminUser.CurrentOrgId, tx)
		//判断是否使用了押金
		if dec_way == "true" {

			tmpstring := strconv.FormatInt(order.ID, 10)
			//扣押金
			errmsg = service.SpendDeposit(c.GetAdminUserInfo().CurrentOrgId, id, c.GetAdminUserInfo().AdminUser.Id, tmpstring, decimal)
			order.Decimal = decimal
			service.UpDateOrderTwo(order, tx)
			if errmsg != nil {
				c.ServeFailJsonSend(enums.ErrorCodeParamWrong, errmsg.Error())
				//c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeCreateOrderException)
				return
			}
		}

		if err == nil {
			for _, info := range prescriptions {
				if info.Type == 1 {
					infoList = append(infoList, info.HisDoctorAdviceInfo...)
				}
				if info.Type == 2 {
					for _, sumItem := range info.HisPrescriptionProject {
						if sumItem.Type == 3 {
							var good models.DialysisBeforePrepareGoods
							var newGood models.NewDialysisBeforePrepareGoods
							var oldGood models.OldDialysisBeforePrepareGoods
							good.GoodId = sumItem.GoodInfo.ID
							good.GoodTypeId = sumItem.GoodInfo.GoodTypeId
							count, _ := strconv.Atoi(sumItem.Count)
							good.Count = int64(count)
							good.StorehouseId = houseConfig.StorehouseOutInfo
							good.ProjectId = sumItem.ID
							good.PatientId = sumItem.PatientId
							goods = append(goods, &good)

							newGood.GoodId = sumItem.GoodInfo.ID
							newGood.GoodTypeId = sumItem.GoodInfo.GoodTypeId
							count2, _ := strconv.Atoi(sumItem.Count)
							newGood.Count = int64(count2)
							newGood.StorehouseId = houseConfig.StorehouseOutInfo
							newGood.ProjectId = sumItem.ID
							newGood.PatientId = sumItem.HisPatientId
							newGoods = append(newGoods, &newGood)

							oldGood.GoodId = sumItem.GoodInfo.ID
							oldGood.GoodTypeId = sumItem.GoodInfo.GoodTypeId
							count3, _ := strconv.Atoi(sumItem.Count)
							oldGood.Count = int64(count3)
							oldGood.StorehouseId = houseConfig.StorehouseOutInfo
							oldGood.ProjectId = sumItem.ID
							oldGood.RecordDate = sumItem.RecordDate
							oldGood.PatientId = sumItem.HisPatientId

							oldGoods = append(oldGoods, &oldGood)
						}

					}

				}
			}
			if settConfig.IsOpen == 1 {

				for _, item := range infoList {
					medical, _ := service.GetBaseDrugMedical(item.DrugId)
					if medical.IsUse == 2 {
						//药品出库
						service.HisSettleDrugsDelivery(item.UserOrgId, adminUser.AdminUser.Id, item, order.ID)
						//查询默认仓库
						storeHouseConfig, _ := service.GetAllStoreHouseConfig(item.UserOrgId)
						//查询默认仓库剩余多少库存
						var sum_count int64
						stockInfo, _ := service.GetDrugAllStockInfo(storeHouseConfig.DrugStorehouseOut, item.UserOrgId, item.DrugId)
						for _, its := range stockInfo {
							if its.MaxUnit == medical.MaxUnit {
								its.StockMaxNumber = its.StockMaxNumber * medical.MinNumber
							}
							sum_count += its.StockMaxNumber + its.StockMinNumber
						}
						service.UpdateBaseDrugSumTwo(item.DrugId, sum_count, item.UserOrgId)
						service.UpdateDrugStockCount(item.DrugId, item.UserOrgId, storeHouseConfig.DrugStorehouseOut, sum_count)
						over, _ := service.FindOverCount(item.DrugId, item.UserOrgId, storeHouseConfig.DrugStorehouseOut)
						service.UpdateActOut(over.ID, over.SumInCount, over.FlushCount, over.SumCancelCount)

					}

				}
				orgId := c.GetAdminUserInfo().CurrentOrgId

				if len(oldGoods) > 0 {
					timeStr := time.Now().Format("2006-01-02")
					timeArr := strings.Split(timeStr, "-")
					total, _ := service.FindAllWarehouseOut(orgId)

					total = total + 1
					warehousing_out_order := strconv.FormatInt(orgId, 10) + timeArr[0] + timeArr[1] + timeArr[2] + "000"
					number, _ := strconv.ParseInt(warehousing_out_order, 10, 64)
					number = number + total
					warehousing_out_order = "CKD" + strconv.FormatInt(number, 10)

					operation_time := time.Now().Unix()
					creater := c.GetAdminUserInfo().AdminUser.Id
					//查询默认出库仓库库存
					storeConfig, _ := service.GetAllStoreHouseConfig(orgId)
					recordDateStr := time.Now().Format("2006-01-02")
					recordDate, _ := utils.ParseTimeStringToTime("2006-01-02", recordDateStr)
					nowtime := recordDate.Unix()
					warehouseOut := models.WarehouseOut{
						WarehouseOutOrderNumber: warehousing_out_order,
						OperationTime:           operation_time,
						OrgId:                   orgId,
						Creater:                 creater,
						Ctime:                   time.Now().Unix(),
						Status:                  1,
						WarehouseOutTime:        nowtime,
						Type:                    1,
						StorehouseId:            storeConfig.StorehouseOutInfo,
						IsCheck:                 1,
						OrderId:                 order.ID,
						IsSys:                   5,
					}
					//查询是否生成出库单
					out, _ := service.FindAllSettleWarehouseOut(orgId, nowtime, 5)
					if out.ID == 0 {
						service.AddSigleWarehouseOutOne(&warehouseOut)
					}

					lastOut, _ := service.FindAllSettleWarehouseOut(orgId, nowtime, 5)

					for _, item := range oldGoods {
						dialyPrepareOne := models.DialysisBeforePrepare{
							GoodTypeId:   item.GoodTypeId,
							GoodId:       item.GoodId,
							PatientId:    his.PatientId,
							RecordDate:   item.RecordDate,
							UserOrgId:    adminUser.CurrentOrgId,
							Count:        item.Count,
							Ctime:        time.Now().Unix(),
							Creater:      adminUser.AdminUser.Id,
							CommdityCode: item.CommdityCode,
							Status:       1,
							StorehouseId: houseConfig.StorehouseOutInfo,
						}
						goodInfo, _ := service.GetGoodInformationByGoodIdThirty(item.GoodId)
						//非零用
						if goodInfo.IsUser == 2 || goodInfo.IsUser == 0 {
							service.ConsumableSettleDelivery(adminUser.CurrentOrgId, his.PatientId, his.RecordDate, &dialyPrepareOne, &lastOut, adminUser.AdminUser.Id, order.ID)
							//查询剩余库存
							goodList, _ := service.GetAllGoodSumCount(item.GoodId, adminUser.CurrentOrgId, houseConfig.StorehouseOutInfo)
							var sum_count int64
							for _, item := range goodList {
								sum_count += item.StockCount
							}
							service.UpdateGoodFlushCount(houseConfig.StorehouseOutInfo, item.GoodId, adminUser.CurrentOrgId, sum_count)

							//耗材
							service.UpdateGoodSumCountSeven(sum_count, item.GoodId, adminUser.CurrentOrgId)
						}

						if goodInfo.IsUser == 1 && goodInfo.IsWarehouse == 1 {
							service.ConsumableSettleDelivery(adminUser.CurrentOrgId, his.PatientId, his.RecordDate, &dialyPrepareOne, &lastOut, adminUser.AdminUser.Id, order.ID)
							//查询剩余库存
							goodList, _ := service.GetAllGoodSumCount(item.GoodId, adminUser.CurrentOrgId, houseConfig.StorehouseOutInfo)
							var sum_count int64
							for _, item := range goodList {
								sum_count += item.StockCount
							}
							service.UpdateGoodFlushCount(houseConfig.StorehouseOutInfo, item.GoodId, adminUser.CurrentOrgId, sum_count)

							//耗材
							service.UpdateGoodSumCountSeven(sum_count, item.GoodId, adminUser.CurrentOrgId)
						}

					}
				}

			}

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

		}
	}

}

// 退款
func (c *HisApiController) Refund() {
	order_id, _ := c.GetInt64("order_id")
	order, _ := service.GetHisOrderByID(order_id)
	adminUser := c.GetAdminUserInfo()
	orgid := c.GetAdminUserInfo().CurrentOrgId

	err := service.UpdataOrderStatus(order_id, order.Number, adminUser.CurrentOrgId)
	if err != nil {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
		return
	}
	tmp := strconv.FormatInt(order.ID, 10)
	//当押金不为零时产生退费记录
	if order.Decimal != 0 {
		err = service.MoneyIncrease(orgid, order.PatientId, tmp, order.Decimal)
		if err != nil {
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
			return
		}
	}

	fapiao, _ := service.GetFaPiaoHisOrderByID(order_id)

	if fapiao.ID > 0 {
		c.ServeSuccessJSON(map[string]interface{}{
			"failed_code": -10,
			"msg":         "该结算已经开具发票无法退费,请先红冲发票",
		})
		return
	}

	orders, _ := service.GetHisOrderDetailByNumberThree(order.Number, order.UserOrgId)
	houseConfig, _ := service.GetAllStoreHouseConfig(order.UserOrgId)
	var goods []*models.DialysisBeforePrepareGoods
	var newGoods []*models.NewDialysisBeforePrepareGoods
	var infos []*models.HisDoctorAdviceInfo

	for _, info := range orders {
		if info.AdviceId > 0 && info.ProjectId == 0 {
			infos = append(infos, &info.HisDoctorAdviceInfo)
		}
		if info.ProjectId > 0 && info.AdviceId == 0 {
			if info.HisPrescriptionProject.Type == 3 {
				var good models.DialysisBeforePrepareGoods
				var newGood models.NewDialysisBeforePrepareGoods
				good.GoodId = info.HisPrescriptionProject.VMGoodInfo.ID
				good.GoodTypeId = info.HisPrescriptionProject.VMGoodInfo.GoodTypeId
				count, _ := strconv.Atoi(info.HisPrescriptionProject.Count)
				good.Count = int64(count)
				good.StorehouseId = houseConfig.StorehouseOutInfo
				good.ProjectId = info.HisPrescriptionProject.ID
				good.PatientId = info.PatientId
				good.OrderId = order_id
				goods = append(goods, &good)

				newGood.GoodId = info.HisPrescriptionProject.VMGoodInfo.ID
				newGood.GoodTypeId = info.HisPrescriptionProject.VMGoodInfo.GoodTypeId
				count2, _ := strconv.Atoi(info.HisPrescriptionProject.Count)
				newGood.Count = int64(count2)
				newGood.StorehouseId = houseConfig.StorehouseOutInfo
				newGood.ProjectId = info.HisPrescriptionProject.ID
				newGood.RecordDate = order.SettleAccountsDate
				newGood.UserOrgId = order.UserOrgId
				newGood.PatientId = info.PatientId
				newGood.OrderId = order_id
				newGoods = append(newGoods, &newGood)
			}
		}
	}
	settConfig, _ := service.GetSettleOpenConfigByOrgId(adminUser.CurrentOrgId)
	if settConfig.IsOpen == 1 {
		for _, item := range infos {

			service.DrugAutoAddCancelInfo(item, adminUser.AdminUser.Id)

		}

		for _, item := range newGoods {
			service.GoodAutoAddCancelInfo(item, adminUser.AdminUser.Id)
		}
	}

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

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 adminUserInfo.CurrentOrgId == 10265 || adminUserInfo.CurrentOrgId == 10489 {
		_, config := service.FindHisStockPriceRecordByOrgId(adminUserInfo.CurrentOrgId)
		if config.ID > 0 && config.IsOpen == 1 {
			for _, subitems := range prescriptions {
				for _, item := range subitems.VMHisPrescription {
					for _, subItem := range item.HisDoctorAdviceInfo {
						drug, _ := service.GetDrugByGoodId(subItem.DrugId)
						info, _ := service.GetWarehoseInfoByDrugId(subItem.DrugId, adminUserInfo.CurrentOrgId)
						if info.RetailPrice > 0 {
							if subItem.PrescribingNumberUnit == drug.MaxUnit && drug.MaxUnit != drug.MinUnit {
								subItem.Drug.RetailPrice = drug.RetailPrice
							}
							if subItem.PrescribingNumberUnit == drug.MinUnit {
								subItem.Drug.MinPrice = info.RetailPrice
								subItem.Drug.RetailPrice = info.RetailPrice
							}

						}
					}
				}
			}
		}

		if config.ID > 0 && config.IsOpen == 1 {
			for _, subitems := range prescriptions {
				for _, item := range subitems.VMHisPrescription {
					for _, subItem := range item.HisPrescriptionProject {
						if subItem.Type == 3 {
							info, _ := service.GetGoodWarehoseInfoByGoodId(subItem.ProjectId, adminUserInfo.CurrentOrgId)
							if info.Price > 0 {
								subItem.GoodInfo.PackingPrice = info.Price
							}
						}
					}
				}
			}
		}
	}

	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 RemoveRepeatedPurviewElementByHP(arr []service.VMOtherHisPrescriptionInfo) (newArr []service.VMOtherHisPrescriptionInfo) {
	newArr = make([]service.VMOtherHisPrescriptionInfo, 0)
	for i := 0; i < len(arr); i++ {
		repeat := false
		for j := i + 1; j < len(arr); j++ {
			if arr[i].PatientId == arr[j].PatientId && arr[i].RecordDate == arr[j].RecordDate {
				repeat = true
				break
			}
		}
		if !repeat {
			newArr = append(newArr, arr[i])
		}
	}
	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()
	new_prescriptions, err := service.GetCallHisPrescriptions(startime.Unix(), endtime.Unix(), adminUserInfo.CurrentOrgId, patient_id, p_type)

	prescriptions := RemoveRepeatedPurviewElementByHP(new_prescriptions)
	//if
	//storeConfig, _ := service.GetAllStoreHouseConfig(adminUserInfo.CurrentOrgId)
	//
	//lastWarehouse, _ := service.FindLastDrugWarehousingInfoByID(s.DrugId, storeConfig.DrugStorehouseOut)

	if adminUserInfo.CurrentOrgId == 10265 || adminUserInfo.CurrentOrgId == 10489 {
		_, config := service.FindHisStockPriceRecordByOrgId(adminUserInfo.CurrentOrgId)
		if config.ID > 0 && config.IsOpen == 1 {
			for _, subitems := range prescriptions {
				for _, item := range subitems.VMHisPrescription {
					for _, subItem := range item.HisDoctorAdviceInfo {
						drug, _ := service.GetDrugByGoodId(subItem.DrugId)
						info, _ := service.GetWarehoseInfoByDrugId(subItem.DrugId, adminUserInfo.CurrentOrgId)
						if info.RetailPrice > 0 {
							if subItem.PrescribingNumberUnit == drug.MaxUnit && drug.MaxUnit != drug.MinUnit {
								subItem.Drug.RetailPrice = drug.RetailPrice
							}
							if subItem.PrescribingNumberUnit == drug.MinUnit {
								subItem.Drug.MinPrice = info.RetailPrice
								subItem.Drug.RetailPrice = info.RetailPrice
							}

						}
					}
				}
			}
		}
		if config.ID > 0 && config.IsOpen == 1 {
			for _, subitems := range prescriptions {
				for _, item := range subitems.VMHisPrescription {
					for _, subItem := range item.HisPrescriptionProject {
						if subItem.Type == 3 {
							info, _ := service.GetGoodWarehoseInfoByGoodId(subItem.ProjectId, adminUserInfo.CurrentOrgId)
							if info.Price > 0 {
								subItem.GoodInfo.PackingPrice = info.Price
							}
						}
					}
				}
			}
		}
	}

	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)

	}

	var settle_total float64
	for _, item := range dayHisPrescription {
		if len(item.HisPrescriptionProject) > 0 {
			for _, subItem := range item.HisPrescriptionProject {
				count, _ := strconv.ParseFloat(subItem.Count, 64)
				total, _ := decimal.NewFromFloat(count * subItem.Price).Round(2).Float64()
				settle_total = settle_total + total
			}
		}
		if len(item.HisDoctorAdviceInfo) > 0 {
			for _, subItem := range item.HisDoctorAdviceInfo {
				total, _ := decimal.NewFromFloat(subItem.PrescribingNumber * subItem.Price).Round(2).Float64()
				settle_total = settle_total + total
			}
		}

	}
	settle_total, _ = decimal.NewFromFloat(settle_total).Round(2).Float64()

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

func (c *HisApiController) GetHisChargePatientList() {
	record_date := c.GetString("record_date")
	order_status, _ := c.GetInt64("type")
	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()
	var tempPatients []*service.NewTempPatients
	//tempPatients, _ := service.GetAllChargeHisPatientList(adminInfo.CurrentOrgId, "", recordDateTime)
	if c.GetAdminUserInfo().CurrentOrgId == 10206 { //针对用了坐标系统的机构
		if order_status != 2 {
			tempPatients, _ = service.GetNewAllUnChargeHisPatientList(adminInfo.CurrentOrgId, "", recordDateTime, sch_type)
		} else {
			tempPatients, _ = service.GetNewAllChargeHisPatientList(adminInfo.CurrentOrgId, "", recordDateTime, sch_type)
		}

	} else {

		if order_status != 2 {
			tempPatients, _ = service.GetNewAllUnChargeHisPatientList(adminInfo.CurrentOrgId, "", recordDateTime, sch_type)
		} else {
			tempPatients, _ = service.GetNewAllChargeHisPatientList(adminInfo.CurrentOrgId, "", recordDateTime, sch_type)
		}

	}

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

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

		} else {
			if len(item.HisPrescription) > 0 {
				patients = append(patients, 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)

	last_his_patient_info, _ := service.GetLastNewHisPatientInfo(patient_id, recordDateTime)

	xt_patient_info, _ := service.GetXTPatientInfo(admin.CurrentOrgId, patient_id)

	var prescriptions []*models.HisPrescription
	//var unChargeMonthPrescriptions []*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)
		//unChargeMonthPrescriptions, _ = service.GetUnChargeMonthHisPrescriptionThree(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, his_patient_id)

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

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

	sch, _ := service.GetScheduleByDate(c.GetAdminUserInfo().CurrentOrgId, recordDateTime, patient_id)

	c.ServeSuccessJSON(map[string]interface{}{
		"his_info":              his_patient_info,
		"last_his_patient_info": last_his_patient_info,
		"xt_info":               xt_patient_info,
		"prescription":          prescriptions,
		"case_history":          case_history,
		"info":                  patientPrescriptionInfo,
		"last_info":             lastPatientPrescriptionInfo,
		"order":                 order,
		"doctors":               doctors,
		"department":            department,
		"sch":                   sch,
	})
	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
	}
	record, _ := service.GetInHospitalRecordByNumber(order.MdtrtId)
	org_id := c.GetAdminUserInfo().CurrentOrgId
	adminInfo, _ := service.GetAdminUserInfoByID(org_id, order.Creator)
	patient, _ := service.GetFaPiaoPatientByID(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,
		"hospital_record": record,
	})
	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.GetFaPiaoPatientByID(org_id, order.PatientId)

	his, _ := service.GetHisPatientInfoThree(order.UserOrgId, order.MdtrtId)
	//his, _ := service.Get(order.UserOrgId, order.MdtrtId)
	record, _ := service.GetInHospitalRecordByNumber(order.MdtrtId)

	var bedCostTotal float64 = 0 //床位总费
	//var bedCostSelfTotal float64 = 0     //床位自费

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

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

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

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

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

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

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

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

	var zhenChaCostTotal float64 = 0 //其他费用
	//var zhenChaCostPartSelfTotal float64 = 0 //其他费用

	decimal.DivisionPrecision = 2
	var BalanceAccountsType int64
	if his.ID > 0 {
		BalanceAccountsType = his.BalanceAccountsType
	} else {
		BalanceAccountsType = record.BalanceAccountsType
	}
	if BalanceAccountsType != 2 {
		for _, item := range order_info {
			if org_id == 10215 {
				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 == "02" { //诊察费
					zhenChaCostTotal, _ = decimal.NewFromFloat(zhenChaCostTotal).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
					//zhenChaCostSelfTotal = zhenChaCostTotal
				}
				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 == "02" { //检查费
				//	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" || item.MedChrgitmType == "1402" || item.MedChrgitmType == "1403" || item.MedChrgitmType == "1401" { //材料费
					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" || item.MedChrgitmType == "0" || item.MedChrgitmType == "12" { //其他费
					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()
				}

			} else if org_id == 10188 || org_id == 10217 {
				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 == "02" { //诊察费
					zhenChaCostTotal, _ = decimal.NewFromFloat(zhenChaCostTotal).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
					//zhenChaCostSelfTotal = zhenChaCostTotal
				}
				if item.MedChrgitmType == "03" { //检查费
					laboratoryCostTotal, _ = decimal.NewFromFloat(laboratoryCostTotal).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()

					//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 == "02" { //检查费
				//	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" || item.MedChrgitmType == "1402" || item.MedChrgitmType == "1403" || item.MedChrgitmType == "1401" { //材料费
					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" || item.MedChrgitmType == "0" || item.MedChrgitmType == "12" { //其他费
					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()
				}

			} else {

				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 == "02" { //诊察费
				//	zhenChaCostTotal, _ = decimal.NewFromFloat(zhenChaCostTotal).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
				//	//zhenChaCostSelfTotal = zhenChaCostTotal
				//}

				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 == "02" { //检查费
				//	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" || item.MedChrgitmType == "1402" || item.MedChrgitmType == "1403" || item.MedChrgitmType == "1401" { //材料费
					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" || item.MedChrgitmType == "0" || item.MedChrgitmType == "12" || item.MedChrgitmType == "02" { //其他费
					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()
				}

			}

		}

		c.ServeSuccessJSON(map[string]interface{}{
			"order":                               order,
			"order_info":                          order_info,
			"patient":                             patient,
			"admin_info":                          adminInfo,
			"his_hospital":                        record,
			"bedCostTotal":                        bedCostTotal,
			"operationCostTotal":                  operationCostTotal,
			"otherCostTotal":                      otherCostTotal,
			"materialCostTotal":                   materialCostTotal,
			"westernMedicineCostTotal":            westernMedicineCostTotal,
			"chineseTraditionalMedicineCostTotal": chineseTraditionalMedicineCostTotal,
			"checkCostTotal":                      checkCostTotal,
			"zhenChaCostTotal":                    zhenChaCostTotal,
			"laboratoryCostTotal":                 laboratoryCostTotal,
			"treatCostTotal":                      treatCostTotal,
		})
	} 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 {
					if c.GetAdminUserInfo().CurrentOrgId == 10215 {
						switch item.HisPrescriptionProject.VMHisProject.CostClassify {
						case 0:
							item.MedChrgitmType = "0"
							break
						case 1:
							item.MedChrgitmType = "14"
							break
						case 2:
							item.MedChrgitmType = "05"

							break
						case 3:
							item.MedChrgitmType = "03"

							break
						case 4:
							item.MedChrgitmType = "03"

							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
						case 10:
							item.MedChrgitmType = "14"
							break
						case 11:
							item.MedChrgitmType = "06"
							break
						case 12:
							item.MedChrgitmType = "12"
							break
						case 13:
							item.MedChrgitmType = "01"
							break
						case 14:
							item.MedChrgitmType = "04"
							break
						case 15:
							item.MedChrgitmType = "14"
							break

						}

					} else {
						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 order_info {
			if org_id == 10215 {
				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 == "02" { //诊察费
					zhenChaCostTotal, _ = decimal.NewFromFloat(zhenChaCostTotal).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
					//zhenChaCostSelfTotal = zhenChaCostTotal
				}

				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 == "02" { //检查费
				//	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" || item.MedChrgitmType == "1402" || item.MedChrgitmType == "1403" || item.MedChrgitmType == "1401" { //材料费
					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" || item.MedChrgitmType == "0" || item.MedChrgitmType == "12" { //其他费
					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()
				}

			} else {

				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 == "02" { //诊察费
				//	zhenChaCostTotal, _ = decimal.NewFromFloat(zhenChaCostTotal).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
				//	//zhenChaCostSelfTotal = zhenChaCostTotal
				//}

				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 == "02" { //检查费
				//	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" || item.MedChrgitmType == "1402" || item.MedChrgitmType == "1403" || item.MedChrgitmType == "1401" { //材料费
					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" || item.MedChrgitmType == "0" || item.MedChrgitmType == "12" || item.MedChrgitmType == "02" { //其他费
					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()
				}

			}

		}

		c.ServeSuccessJSON(map[string]interface{}{
			"order":                               order,
			"order_info":                          order_info,
			"patient":                             patient,
			"admin_info":                          adminInfo,
			"his_hospital":                        record,
			"bedCostTotal":                        bedCostTotal,
			"operationCostTotal":                  operationCostTotal,
			"otherCostTotal":                      otherCostTotal,
			"materialCostTotal":                   materialCostTotal,
			"westernMedicineCostTotal":            westernMedicineCostTotal,
			"chineseTraditionalMedicineCostTotal": chineseTraditionalMedicineCostTotal,
			"checkCostTotal":                      checkCostTotal,
			"zhenChaCostTotal":                    zhenChaCostTotal,
			"laboratoryCostTotal":                 laboratoryCostTotal,
			"treatCostTotal":                      treatCostTotal,
		})

	}
}

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")
	clr_type := c.GetString("clr_type")

	timeLayout := "2006-01-02"
	loc, _ := time.LoadLocation("Local")
	var theStartTIme int64
	if len(start_time) > 0 {
		theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", start_time+" 00:00:00", loc)
		if err != nil {
			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, clr_type)
	fmt.Println(err)
	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, order.MdtrtId)

	prescriptions, _ := service.GetHisPrescriptionByBatchNumber(adminUser.CurrentOrgId, order.Number)

	doctor_info, _ := service.GetAdminUserInfoByID(adminUser.CurrentOrgId, prescriptions[0].Creator)
	his_hospital_record, _ := service.GetInHospitalRecordByNumber(order.MdtrtId)

	patient, _ := service.GetFaPiaoPatientByID(adminUser.CurrentOrgId, patient_id)

	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 hiliCostTotal float64 = 0         //护理费
	var hiliCostSelfTotal float64 = 0     //护理费
	var hiliCostPartSelfTotal 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 //治疗费用

	var zhenChaCostTotal float64 = 0         //其他费用
	var zhenChaCostSelfTotal float64 = 0     //其他费用
	var zhenChaCostPartSelfTotal float64 = 0 //其他费用

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

	var balanceAccountsType int64
	if his.ID > 0 {

		balanceAccountsType = his.BalanceAccountsType
	} else {

		balanceAccountsType = his_hospital_record.BalanceAccountsType
	}

	if 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 {
					if c.GetAdminUserInfo().CurrentOrgId == 10215 {
						switch item.HisPrescriptionProject.VMHisProject.CostClassify {
						case 0:
							item.MedChrgitmType = "0"
							break
						case 1:
							item.MedChrgitmType = "14"
							break
						case 2:
							item.MedChrgitmType = "05"

							break
						case 3:
							item.MedChrgitmType = "03"

							break
						case 4:
							item.MedChrgitmType = "03"

							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
						case 10:
							item.MedChrgitmType = "14"
							break
						case 11:
							item.MedChrgitmType = "06"
							break
						case 12:
							item.MedChrgitmType = "12"
							break
						case 13:
							item.MedChrgitmType = "01"
							break
						case 14:
							item.MedChrgitmType = "04"
							break
						case 15:
							item.MedChrgitmType = "02"
							break

						}

					} else {
						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 = "03"

							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 {
			fmt.Println(item.MedChrgitmType)
			if item.MedChrgitmType == "07" { //床位费
				hiliCostTotal, _ = decimal.NewFromFloat(hiliCostTotal).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
				hiliCostSelfTotal = hiliCostTotal
			}

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

			if item.MedChrgitmType == "02" { //诊察费
				zhenChaCostTotal, _ = decimal.NewFromFloat(zhenChaCostTotal).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
				zhenChaCostSelfTotal = zhenChaCostTotal
			}

			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" || item.MedChrgitmType == "14" || item.MedChrgitmType == "201" { //治疗费
				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" || item.MedChrgitmType == "1402" || item.MedChrgitmType == "1403" || item.MedChrgitmType == "1401" || item.MedChrgitmType == "301" { //材料费
				materialCostTotal, _ = decimal.NewFromFloat(materialCostTotal).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
				materialCostSelfTotal = materialCostTotal
			}

			if item.MedChrgitmType == "09" || item.MedChrgitmType == "101" { //西药费
				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 c.GetAdminUserInfo().CurrentOrgId == 10106 {
				if item.MedChrgitmType == "0" || item.MedChrgitmType == "12" || item.MedChrgitmType == "02" { //其他费
					otherCostTotal, _ = decimal.NewFromFloat(otherCostTotal).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
					otherCostSelfTotal = otherCostTotal
				}
			} else {
				if item.MedChrgitmType == "0" || item.MedChrgitmType == "12" { //其他费
					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 == "02" { //诊察费
				zhenChaCostTotal, _ = decimal.NewFromFloat(zhenChaCostTotal).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
				zhenChaCostSelfTotal, _ = decimal.NewFromFloat(zhenChaCostSelfTotal).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
				zhenChaCostPartSelfTotal, _ = decimal.NewFromFloat(zhenChaCostPartSelfTotal).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()
			}

			if c.GetAdminUserInfo().CurrentOrgId == 10188 || c.GetAdminUserInfo().CurrentOrgId == 10217 {
				if item.MedChrgitmType == "03" { //检查费
					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()

				}
			} else {
				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" || item.MedChrgitmType == "14" || item.MedChrgitmType == "201" { //治疗费
				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" || item.MedChrgitmType == "1401" || item.MedChrgitmType == "1402" || item.MedChrgitmType == "1403" || item.MedChrgitmType == "301" { //材料费
				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 == "07" { //护理
				hiliCostTotal, _ = decimal.NewFromFloat(hiliCostTotal).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
				hiliCostSelfTotal, _ = decimal.NewFromFloat(hiliCostSelfTotal).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
				hiliCostPartSelfTotal, _ = decimal.NewFromFloat(hiliCostPartSelfTotal).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()
			}

			if item.MedChrgitmType == "09" || item.MedChrgitmType == "101" { //西药费
				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 == "0" || item.MedChrgitmType == "12" { //其他费
				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()
			}

		}

	}

	timeLayout := "2006-01-02"
	loc, _ := time.LoadLocation("Local")
	startTime, err := time.ParseInLocation(timeLayout+" 15:04:05", his_hospital_record.InHosptialTime, loc)
	if err != nil {

	}
	startRecordDateTime := startTime.Unix()

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

	}
	endRecordDateTime := endTime.Unix()

	pre_pay_money := service.GetUserMoney(order.PatientId, adminUser.CurrentOrgId)
	sum, _ := service.RefundListSum(adminUser.CurrentOrgId, startRecordDateTime, endRecordDateTime, order.PatientId)
	admin, _ := service.GetAdminUserInfoByID(adminUser.CurrentOrgId, adminUser.AdminUser.Id)
	charge_admin, _ := service.GetAdminUserInfoByID(adminUser.CurrentOrgId, order.Creator)

	c.ServeSuccessJSON(map[string]interface{}{
		"charge_admin_name":                   charge_admin.UserName,
		"order_number":                        order.Number, //业务流水号
		"id_card_no":                          his.IdCardNo, //社会保障号
		"patient":                             patient,
		"department_name":                     department.Name,          //科室
		"number":                              his.Number,               //门诊号
		"date":                                order.SettleAccountsDate, //结算日期
		"name":                                order.PsnName,            //姓名
		"gender":                              patient.Gender,           //性别
		"psn_cash_money":                      order.PsnCashPay,         //个人支付
		"pay_way":                             "门诊",                     //结算方式
		"medfee_sumamt":                       order.MedfeeSumamt,       //总费用
		"admin_user_name":                     admin.UserName,           //收款员
		"order":                               order,
		"order_info":                          orderInfos_two,
		"his":                                 his,
		"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,
		"zhenChaCostTotal":            zhenChaCostTotal,
		"zhenChaCostSelfTotal":        zhenChaCostSelfTotal,
		"zhenChaCostPartSelfTotal":    zhenChaCostPartSelfTotal,
		"his_hospital_record":         his_hospital_record,
		"pre_pay_money":               pre_pay_money,
		"refund_sum":                  sum,
		"doctor_info":                 doctor_info,
		"hiliCostTotal":               hiliCostTotal,
		"hiliCostSelfTotal":           hiliCostSelfTotal,
		"hiliCostPartSelfTotal":       hiliCostPartSelfTotal,
	})

}

//func (c *HisApiController) GetFaPiaoDatas() {
//	order_ids := c.GetString("order_ids")
//	patient_id, _ := c.GetInt64("patient_id")
//	adminUser := c.GetAdminUserInfo()
//
//	orders := strings.Split(order_ids, ",")
//	patient, _ := service.GetFaPiaoPatientByID(adminUser.CurrentOrgId, patient_id)
//
//	for _, item := range orders {
//		order_id, _ := strconv.ParseInt(item, 10, 64)
//		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, order.MdtrtId)
//		his_hospital_record, _ := service.GetInHospitalRecordByNumber(order.MdtrtId)
//
//	}
//
//	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 //治疗费用
//
//	var zhenChaCostTotal float64 = 0         //其他费用
//	var zhenChaCostSelfTotal float64 = 0     //其他费用
//	var zhenChaCostPartSelfTotal float64 = 0 //其他费用
//
//	decimal.DivisionPrecision = 2
//	orderInfos_two, _ := service.GetHisOrderDetailByNumber(order.Number, adminUser.CurrentOrgId)
//
//	var balanceAccountsType int64
//	if his.ID > 0 {
//		balanceAccountsType = his.BalanceAccountsType
//	} else {
//		balanceAccountsType = his_hospital_record.BalanceAccountsType
//	}
//	if 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 {
//					if c.GetAdminUserInfo().CurrentOrgId == 10215 {
//						switch item.HisPrescriptionProject.VMHisProject.CostClassify {
//						case 0:
//							item.MedChrgitmType = "0"
//							break
//						case 1:
//							item.MedChrgitmType = "14"
//							break
//						case 2:
//							item.MedChrgitmType = "05"
//
//							break
//						case 3:
//							item.MedChrgitmType = "03"
//
//							break
//						case 4:
//							item.MedChrgitmType = "03"
//
//							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
//						case 10:
//							item.MedChrgitmType = "14"
//							break
//						case 11:
//							item.MedChrgitmType = "06"
//							break
//						case 12:
//							item.MedChrgitmType = "12"
//							break
//						case 13:
//							item.MedChrgitmType = "01"
//							break
//						case 14:
//							item.MedChrgitmType = "04"
//							break
//						case 15:
//							item.MedChrgitmType = "02"
//							break
//
//						}
//
//					} else {
//						switch item.HisPrescriptionProject.VMHisProject.CostClassify {
//
//						case 1:
//							item.MedChrgitmType = "14"
//							break
//						case 2:
//							item.MedChrgitmType = "05"
//
//							break
//						case 3:
//							item.MedChrgitmType = "03"
//
//							break
//						case 4:
//							item.MedChrgitmType = "03"
//
//							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 {
//			fmt.Println(item.MedChrgitmType)
//			if item.MedChrgitmType == "01" { //床位费
//				bedCostTotal, _ = decimal.NewFromFloat(bedCostTotal).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
//				bedCostSelfTotal = bedCostTotal
//			}
//
//			if item.MedChrgitmType == "02" { //诊察费
//				zhenChaCostTotal, _ = decimal.NewFromFloat(zhenChaCostTotal).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
//				zhenChaCostSelfTotal = zhenChaCostTotal
//			}
//
//			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" || item.MedChrgitmType == "14" { //治疗费
//				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 c.GetAdminUserInfo().CurrentOrgId == 10106 {
//				if item.MedChrgitmType == "0" || item.MedChrgitmType == "12" || item.MedChrgitmType == "02" { //其他费
//					otherCostTotal, _ = decimal.NewFromFloat(otherCostTotal).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
//					otherCostSelfTotal = otherCostTotal
//				}
//			} else {
//				if item.MedChrgitmType == "0" || item.MedChrgitmType == "12" { //其他费
//					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 == "02" { //诊察费
//				zhenChaCostTotal, _ = decimal.NewFromFloat(zhenChaCostTotal).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
//				zhenChaCostSelfTotal, _ = decimal.NewFromFloat(zhenChaCostSelfTotal).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
//				zhenChaCostPartSelfTotal, _ = decimal.NewFromFloat(zhenChaCostPartSelfTotal).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()
//			}
//
//			if c.GetAdminUserInfo().CurrentOrgId == 10188 || c.GetAdminUserInfo().CurrentOrgId == 10217 {
//				if item.MedChrgitmType == "03" { //检查费
//					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()
//
//				}
//			} else {
//				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" || item.MedChrgitmType == "14" || item.MedChrgitmType == "1402" || item.MedChrgitmType == "1403" { //治疗费
//				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" || item.MedChrgitmType == "1401" { //材料费
//				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 == "0" || item.MedChrgitmType == "12" { //其他费
//				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()
//			}
//
//		}
//	}
//	timeLayout := "2006-01-02"
//	loc, _ := time.LoadLocation("Local")
//	startTime, err := time.ParseInLocation(timeLayout+" 15:04:05", his_hospital_record.InHosptialTime, loc)
//	if err != nil {
//	}
//	startRecordDateTime := startTime.Unix()
//	endTime, err := time.ParseInLocation(timeLayout+" 15:04:05", his_hospital_record.OutHosptialTime, loc)
//	if err != nil {
//	}
//	endRecordDateTime := endTime.Unix()
//	pre_pay_money := service.GetUserMoney(order.PatientId, adminUser.CurrentOrgId)
//	sum, _ := service.RefundListSum(adminUser.CurrentOrgId, startRecordDateTime, endRecordDateTime, order.PatientId)
//	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.SettleAccountsDate, //结算日期
//		"name":                                order.PsnName,            //姓名
//		"gender":                              patient.Gender,           //性别
//		"psn_cash_money":                      order.PsnCashPay,         //个人支付
//		"pay_way":                             "门诊",                   //结算方式
//		"medfee_sumamt":                       order.MedfeeSumamt,       //总费用
//		"admin_user_name":                     admin.UserName,           //收款员
//		"order":                               order,
//		"order_info":                          orderInfos_two,
//		"his":                                 his,
//		"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,
//		"zhenChaCostTotal":            zhenChaCostTotal,
//		"zhenChaCostSelfTotal":        zhenChaCostSelfTotal,
//		"zhenChaCostPartSelfTotal":    zhenChaCostPartSelfTotal,
//		"his_hospital_record":         his_hospital_record,
//		"pre_pay_money":               pre_pay_money,
//		"refund_sum":                  sum,
//	})
//
//}

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 {

			hans := item.ProjectName // 要转换的汉字字符串
			// 创建一个拼音转换器
			p := pinyin.NewArgs()

			// 将汉字转为拼音
			pinyinSlice := pinyin.Pinyin(hans, p)

			// 输出拼音
			fmt.Println("Pinyin:", pinyinSlice)

			// 获取首字母
			firstLetter := ""
			for _, py := range pinyinSlice {
				if len(py) > 0 {
					firstLetter += string(py[0][0])
				}
			}

			item.FirstLetter = firstLetter
			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,
				FirstLetter:                 item.FirstLetter,
			}

			_, 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
	}

	template_one, _ := service.GetHisPrescriptionTemplateByModeId(mode_id, patient_id, c.GetAdminUserInfo().CurrentOrgId)

	//如果已经存在记录则删除处方
	if template_one.ID > 0 {
		ps, _ := service.GetHisPrescriptionInfoTemplates(template_one.ID, template_one.UserOrgId)
		var ids []int64
		var org_id int64
		for _, item := range ps {
			org_id = c.GetAdminUserInfo().CurrentOrgId
			ids = append(ids, item.ID)
		}
		err2 := service.BatchDelelteHisPrescriptionInfoTemplate(ids, org_id)

		if err2 == nil {
			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_one.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)
							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.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": "创建成功",
					})
				}
			}
		} else {
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeSystemError)
			return
		}

	} else {
		err3 := service.CreateHisPrescriptionTemplate(template)
		if err3 == nil {
			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)
							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.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": "创建成功",
					})
				}
			}
		} else {
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeSystemError)
			return
		}
	}

}

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 || reg_type == 1111 || reg_type == 1112 {

			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 {
				cnt, _ := strconv.ParseFloat(subItem.Count, 64)
				total = total + (subItem.Price * cnt)
			}
		}

		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,
		PsnPartAmt:         totals,
		PsnCashPay:         totals,
		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 {
				cnt, _ := strconv.ParseFloat(subItem.Count, 64)
				cus := &Custom{
					AdviceId:         0,
					ProjectId:        subItem.ID,
					DetItemFeeSumamt: fmt.Sprintf("%.2f", subItem.Price*cnt),
					Cut:              fmt.Sprintf("%.2f", cnt),
					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": "结算成功",
		})
	}
}

type CustomOrderInfo struct {
	Name  string
	Spec  string
	Unit  string
	Count float64
	Price float64
	Total float64
}

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)

	orderInfos, _ := service.GetHisOrderInfoByNumberOne(order.Number)
	orderInfos_two, _ := service.GetHisOrderInfoByNumberTwo(order.Number)
	//orderInfos_three, _ := service.GetHisOrderInfoByNumberThree(order.Number)

	//var orderInfos_four []*models.HisOrderInfoTwo
	//for _, item := range orderInfos_three {
	//	if item.HisPrescriptionProject.HisProject.CostClassify == 3 {
	//		item.HisPrescriptionProject.IsCheckTeam = 1
	//		orderInfos_four = append(orderInfos_four, item)
	//
	//	}
	//	if item.HisPrescriptionProject.HisProject.CostClassify != 3 {
	//		item.HisPrescriptionProject.IsCheckTeam = 2
	//		orderInfos_two = append(orderInfos_two, item)
	//	}
	//}

	//new_order_info := RemoveRepeatedTeam(orderInfos_four)
	//var cus_slice []CustomOrderInfo
	//for _, item := range new_order_info {
	//	var cus CustomOrderInfo
	//	cus.Name = item.HisPrescriptionProject.XtHisProjectTeam.ProjectTeam
	//	cus.Unit = ""
	//	cus.Spec = ""
	//	var total float64
	//	for _, subItem := range orderInfos_four {
	//		if item.HisPrescriptionProject.TeamId == subItem.HisPrescriptionProject.TeamId {
	//			total = total + subItem.DetItemFeeSumamt
	//			fmt.Println(subItem.DetItemFeeSumamt)
	//		}
	//	}
	//	cus.Count = 1
	//	cus.Total = total
	//	cus_slice = append(cus_slice, cus)
	//}

	orderInfos = append(orderInfos, orderInfos_two...)
	//if c.GetAdminUserInfo().CurrentOrgId != 10138 || c.GetAdminUserInfo().CurrentOrgId != 10278 {
	//orderInfos = append(orderInfos, orderInfos_three...)

	//}/**/

	patient, _ := service.GetFaPiaoPatientByID(org_id, order.PatientId)
	c.ServeSuccessJSON(map[string]interface{}{
		"order":         order,
		"order_info":    orderInfos,
		"patient":       patient,
		"admin_info":    adminInfo,
		"his":           his,
		"current_admin": role,
		"org_config":    miConfig,
		//"new_order_info": cus_slice,
	})

}

func (this *HisApiController) ChangeMedType() {
	med_type := this.GetString("med_type")
	old_med_type := this.GetString("old_med_type")
	ids := this.GetString("ids")
	settle_type, _ := this.GetInt64("settle_type")
	start_time := this.GetString("start_time")
	end_time := this.GetString("end_time")
	ids_arr := strings.Split(ids, ",")
	if settle_type == 1 { //日结
		id, _ := strconv.ParseInt(ids_arr[0], 10, 64)
		prescription, _ := service.GetPrescriptionById(id, this.GetAdminUserInfo().CurrentOrgId)
		prescription.MedType = med_type
		err := service.SaveHisPrescriptionTwo(&prescription)

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

		} else {

			this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeSystemError)
			return

		}

	} else if settle_type == 2 {
		timeLayout := "2006-01-02"
		loc, _ := time.LoadLocation("Local")
		theStartTime, err := time.ParseInLocation(timeLayout+" 15:04:05", start_time+" 00:00:00", loc)
		if err != nil {
			this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
			return
		}
		recordStartTime := theStartTime.Unix()
		start_time_timestamp := recordStartTime
		theEndTime, err := time.ParseInLocation(timeLayout+" 15:04:05", end_time+" 00:00:00", loc)
		if err != nil {
			this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
			return
		}
		recordEndTime := theEndTime.Unix()
		end_time_timestamp := recordEndTime
		updateErr := service.UpdateBatchHisPrescriptionMedType(ids_arr, med_type, start_time_timestamp, end_time_timestamp, this.GetAdminUserInfo().CurrentOrgId, old_med_type)
		if updateErr == 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)
	}

	var settle_total float64
	for _, item := range monthPrescriptions {
		if len(item.HisPrescriptionProject) > 0 {
			for _, subItem := range item.HisPrescriptionProject {
				count, _ := strconv.ParseFloat(subItem.Count, 64)
				total, _ := decimal.NewFromFloat(count * subItem.Price).Round(2).Float64()
				settle_total = settle_total + total
			}
		}
		if len(item.HisDoctorAdviceInfo) > 0 {
			for _, subItem := range item.HisDoctorAdviceInfo {
				total, _ := decimal.NewFromFloat(subItem.PrescribingNumber * subItem.Price).Round(2).Float64()
				settle_total = settle_total + total
			}
		}

	}
	settle_total, _ = decimal.NewFromFloat(settle_total).Round(2).Float64()

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

	month_p_info, _ := service.FindPatientPrescriptionInfoTen(admin.CurrentOrgId, patient_id, startRecordDateTime, endRecordDateTime, p_type)

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

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

	var dia string
	for _, item := range month_p_info {
		if len(dia) == 0 {
			dia = item.Diagnosis
		} else {
			dia = dia + "," + item.Diagnosis
		}
	}

	dia_arr := removeDuplicates(strings.Split(dia, ","))
	dia_arr = removeEmptyStrings(dia_arr)
	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,
		"settle_total":        settle_total,
		"dia_arr":             dia_arr,
	})
	return
}

func removeEmptyStrings(input []string) []string {
	var output []string

	for _, s := range input {
		if s != "" {
			output = append(output, s)
		}
	}

	return output
}

func removeDuplicates(input []string) []string {
	seen := make(map[string]bool)
	output := []string{}

	for _, s := range input {
		if _, exists := seen[s]; !exists {
			seen[s] = true
			output = append(output, s)
		}
	}

	return output
}

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)
	var settle_total float64
	for _, item := range monthPrescriptions {
		if len(item.HisPrescriptionProject) > 0 {
			for _, subItem := range item.HisPrescriptionProject {
				count, _ := strconv.ParseFloat(subItem.Count, 64)
				total, _ := decimal.NewFromFloat(count * subItem.Price).Round(2).Float64()
				settle_total = settle_total + total
			}
		}
		if len(item.HisDoctorAdviceInfo) > 0 {
			for _, subItem := range item.HisDoctorAdviceInfo {
				total, _ := decimal.NewFromFloat(subItem.PrescribingNumber * subItem.Price).Round(2).Float64()
				settle_total = settle_total + total
			}
		}

	}
	settle_total, _ = decimal.NewFromFloat(settle_total).Round(2).Float64()

	case_history, _ := service.GetHisPatientCaseHistoryInfo(admin.CurrentOrgId, patient_id, recordDateTime)
	patientPrescriptionInfo, _ := service.FindPatientPrescriptionInfo(admin.CurrentOrgId, patient_id, recordDateTime, p_type, his_patient_id)
	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,
		"settle_total":        settle_total,
	})
	return

}

func (c *HisApiController) GetAllOrder() {
	org_id := c.GetAdminUserInfo().CurrentOrgId
	orders, _ := service.GetNewHisOrderList(org_id)
	c.ServeSuccessJSON(map[string]interface{}{
		"order": orders,
	})
	return

}

func RemoveRepeatedTeam(arr []*models.HisOrderInfoTwo) (newArr []*models.HisOrderInfoTwo) {
	newArr = make([]*models.HisOrderInfoTwo, 0)
	for i := 0; i < len(arr); i++ {
		repeat := false
		for j := i + 1; j < len(arr); j++ {
			if arr[i].HisPrescriptionProject.TeamId == arr[j].HisPrescriptionProject.TeamId {
				repeat = true
				break
			}
		}
		if !repeat {
			newArr = append(newArr, arr[i])
		}
	}
	return
}

// 修改处方退库操作 参数传修改之前的处方数据
func DeleteDrugWarehosueInfo(advice models.HisDoctorAdviceInfo) (err error) {

	if advice.ExecutionState == 1 {
		//查询该病人该药品是否有库存记录
		info, errcode := service.GetDrugAutoWarehouseOut(advice.PatientId, advice.AdviceDate, advice.DrugId)
		if errcode == gorm.ErrRecordNotFound {

		} else {
			//退库
			drug, _ := service.FindBaseDrugLibRecord(advice.UserOrgId, advice.DrugId)
			if advice.PrescribingNumberUnit == drug.MinUnit {

				floatPrescrip := strconv.FormatFloat(advice.PrescribingNumber, 'f', -1, 32)
				prescribingNumber, _ := strconv.ParseInt(floatPrescrip, 10, 64)

				//退库
				warehouseInfo := models.DrugWarehouseInfo{
					StockMinNumber: prescribingNumber,
				}

				service.UpdateDrugWarehouse(info.WarehouseInfoId, warehouseInfo)

				operation_time := time.Now().Unix()
				creater := advice.AdviceDoctor

				ctime := time.Now().Unix()
				timeStr := time.Now().Format("2006-01-02")
				timeArr := strings.Split(timeStr, "-")
				total, _ := service.FindAllDrugCancelStockTotal(advice.UserOrgId)
				total = total + 1
				orderNumber := "CKTKD" + strconv.FormatInt(advice.UserOrgId, 10) + timeArr[0] + timeArr[1] + timeArr[2] + "000" + strconv.FormatInt(total, 10)

				cancelStock := models.DrugCancelStock{
					OrderNumber:  orderNumber,
					OperaTime:    operation_time,
					OrgId:        advice.UserOrgId,
					Creater:      creater,
					Ctime:        ctime,
					Status:       1,
					ReturnTime:   advice.AdviceDate,
					Dealer:       info.Dealer,
					Manufacturer: info.Manufacturer,
					Type:         1,
				}
				service.AddSigleDrugCancelStock(&cancelStock)

				manufactureName, _ := service.GetManufactureById(info.Manufacturer)
				dealer, _ := service.GetDealerById(info.Dealer)
				cancelInfo, _ := service.GetLastDrugCancelStockById(advice.UserOrgId)
				cancelStockInfo := models.DrugCancelStockInfo{
					OrderNumber:      cancelInfo.OrderNumber,
					CancelStockId:    cancelInfo.ID,
					DrugId:           info.DrugId,
					Count:            info.Count,
					Status:           1,
					Ctime:            ctime,
					OrgId:            advice.UserOrgId,
					Type:             1,
					Manufacturer:     manufactureName.ManufacturerName,
					Dealer:           dealer.DealerName,
					Total:            0,
					RetailPrice:      info.RetailPrice,
					RetailTotalPrice: info.RetailTotalPrice,
					Price:            info.Price,
					RegisterAccount:  "",
					Remark:           info.Remark,
					BatchNumber:      info.BatchNumber,
					MaxUnit:          info.CountUnit,
					ProductDate:      info.ProductDate,
					ExpiryDate:       info.ExpiryDate,
					BatchNumberId:    info.WarehouseInfoId,
				}

				flow := models.DrugFlow{
					WarehousingId:           0,
					DrugId:                  info.DrugId,
					Number:                  "",
					BatchNumber:             info.BatchNumber,
					Count:                   info.Count,
					UserOrgId:               advice.UserOrgId,
					PatientId:               0,
					SystemTime:              ctime,
					ConsumableType:          4,
					IsSys:                   0,
					WarehousingOrder:        "",
					WarehouseOutId:          0,
					WarehouseOutOrderNumber: "",
					IsEdit:                  0,
					CancelStockId:           cancelStock.ID,
					CancelOrderNumber:       cancelStock.OrderNumber,
					Manufacturer:            info.Manufacturer,
					Dealer:                  info.Dealer,
					Creator:                 advice.UserOrgId,
					UpdateCreator:           0,
					Status:                  1,
					Ctime:                   time.Now().Unix(),
					Mtime:                   0,
					Price:                   info.Price,
					WarehousingDetailId:     0,
					WarehouseOutDetailId:    0,
					CancelOutDetailId:       0,
					ExpireDate:              info.ExpiryDate,
					ProductDate:             info.ProductDate,
					MaxUnit:                 info.CountUnit,
					MinUnit:                 "",
				}
				service.CreatedCancelStock(cancelStockInfo)
				service.CreateDrugFlowOne(flow)
			} else {

				floatPrescrip := strconv.FormatFloat(advice.PrescribingNumber, 'f', -1, 32)

				prescribingNumber, _ := strconv.ParseInt(floatPrescrip, 10, 64)

				if advice.PrescribingNumberUnit == drug.MaxUnit {
					warehouseInfo := models.DrugWarehouseInfo{
						StockMinNumber: prescribingNumber,
					}
					service.UpdateDrugWarehouseOne(info.WarehouseInfoId, warehouseInfo)

				}

				operation_time := time.Now().Unix()
				creater := advice.AdviceDoctor

				ctime := time.Now().Unix()
				timeStr := time.Now().Format("2006-01-02")
				timeArr := strings.Split(timeStr, "-")
				total, _ := service.FindAllDrugCancelStockTotal(advice.UserOrgId)
				total = total + 1
				orderNumber := "CKTKD" + strconv.FormatInt(advice.UserOrgId, 10) + timeArr[0] + timeArr[1] + timeArr[2] + "000" + strconv.FormatInt(total, 10)

				cancelStock := models.DrugCancelStock{
					OrderNumber:  orderNumber,
					OperaTime:    operation_time,
					OrgId:        advice.UserOrgId,
					Creater:      creater,
					Ctime:        ctime,
					Status:       1,
					ReturnTime:   advice.AdviceDate,
					Dealer:       info.Dealer,
					Manufacturer: info.Manufacturer,
					Type:         1,
				}
				service.AddSigleDrugCancelStock(&cancelStock)

				manufactureName, _ := service.GetManufactureById(info.Manufacturer)
				dealer, _ := service.GetDealerById(info.Dealer)
				cancelInfo, _ := service.GetLastDrugCancelStockById(advice.UserOrgId)
				cancelStockInfo := models.DrugCancelStockInfo{
					OrderNumber:      cancelInfo.OrderNumber,
					CancelStockId:    cancelInfo.ID,
					DrugId:           info.DrugId,
					Count:            info.Count,
					Status:           1,
					Ctime:            ctime,
					OrgId:            advice.UserOrgId,
					Type:             1,
					Manufacturer:     manufactureName.ManufacturerName,
					Dealer:           dealer.DealerName,
					Total:            0,
					RetailPrice:      info.RetailPrice,
					RetailTotalPrice: info.RetailTotalPrice,
					Price:            info.Price,
					RegisterAccount:  "",
					Remark:           info.Remark,
					BatchNumber:      info.BatchNumber,
					MaxUnit:          info.CountUnit,
					ProductDate:      info.ProductDate,
					ExpiryDate:       info.ExpiryDate,
					BatchNumberId:    info.WarehouseInfoId,
				}

				flow := models.DrugFlow{
					WarehousingId:           0,
					DrugId:                  info.DrugId,
					Number:                  "",
					BatchNumber:             info.BatchNumber,
					Count:                   info.Count,
					UserOrgId:               advice.UserOrgId,
					PatientId:               0,
					SystemTime:              ctime,
					ConsumableType:          4,
					IsSys:                   0,
					WarehousingOrder:        "",
					WarehouseOutId:          0,
					WarehouseOutOrderNumber: "",
					IsEdit:                  0,
					CancelStockId:           cancelStock.ID,
					CancelOrderNumber:       cancelStock.OrderNumber,
					Manufacturer:            info.Manufacturer,
					Dealer:                  info.Dealer,
					Creator:                 advice.AdviceDoctor,
					UpdateCreator:           0,
					Status:                  1,
					Ctime:                   time.Now().Unix(),
					Mtime:                   0,
					Price:                   info.Price,
					WarehousingDetailId:     0,
					WarehouseOutDetailId:    0,
					CancelOutDetailId:       0,
					ExpireDate:              info.ExpiryDate,
					ProductDate:             info.ProductDate,
					MaxUnit:                 info.CountUnit,
					MinUnit:                 "",
				}
				service.CreatedCancelStock(cancelStockInfo)
				service.CreateDrugFlowOne(flow)
			}
		}
	}
	return err
}

func (this *HisApiController) DeleteNCDS() {
	id, _ := this.GetInt64("id", 0)
	if id > 0 {
		service.DeletePsnNCDSRecordById(id)
		this.ServeSuccessJSON(map[string]interface{}{
			"msg": "删除成功",
		})
	} else {
		this.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeRecordFailedException)
		return
	}

}

func (c *HisApiController) GetHisDoctorAdviceInfo() {

	id, _ := c.GetInt64("id")
	advice, _ := service.GetHisDoctorAdviceInfo(id)
	c.ServeSuccessJSON(map[string]interface{}{
		"advice": advice,
	})
	return
}

func (c *HisApiController) GetHisMonthChargePatientList() {
	record_date := c.GetString("record_date")
	start_time := c.GetString("start_time")
	end_time := c.GetString("end_time")
	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
	}

	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()
	adminInfo := c.GetAdminUserInfo()
	var tempMonthChargePatients []*service.MonthChargePatients
	tempPatients, _ := service.GetMonthUnChargeHisPatientList(adminInfo.CurrentOrgId, recordDateTime, startRecordDateTime, endRecordDateTime)
	for _, item := range tempPatients {
		//过滤没有处方的
		if len(item.HisPrescription) == 0 {
			tempMonthChargePatients = append(tempMonthChargePatients, item)
		}
	}
	c.ServeSuccessJSON(map[string]interface{}{
		"list": tempMonthChargePatients,
	})

}

// PrescriptionDifference 医嘱数量差值结构体
type PrescriptionDrugDifference struct {
	DrugID     int64   //基础库药品id
	ID         int64   //医嘱id
	Difference float64 //差值
	Unit       string  //单位
}

type PrescriptionGoodDifference struct {
	GoodID     int64  //基础库项目耗材id
	ID         int64  //医嘱id
	Difference int64  //差值
	Unit       string //单位
	Type       int64  //类型
}

type EditCustomData struct {
	adviceList  []*models.HisDoctorAdviceInfo
	projectList []*models.HisPrescriptionProject
}

type SrcCustomData struct {
	adviceList  []*models.HisDoctorAdviceInfo
	projectList []*models.HisPrescriptionProject
}

// ComparePrescriptions 比较两个医嘱切片中相同药品的数量差值
func ComparePrescriptions(firstPrescription, secondPrescription []*models.HisDoctorAdviceInfo) []*PrescriptionDrugDifference {
	differences := make([]*PrescriptionDrugDifference, 0)
	// 创建一个 map 来存储第一个切片中的药品信息
	firstMap := make(map[int64]*models.HisDoctorAdviceInfo)
	for _, advice := range firstPrescription {
		firstMap[advice.DrugId] = advice
	}

	// 遍历第二个切片中的药品信息,并比较数量差值
	for _, advice := range secondPrescription {
		if firstAdvice, ok := firstMap[advice.DrugId]; ok {
			diff := &PrescriptionDrugDifference{
				DrugID:     advice.DrugId,
				ID:         firstAdvice.ID,
				Difference: advice.PrescribingNumber - firstAdvice.PrescribingNumber,
				Unit:       firstAdvice.PrescribingNumberUnit,
			}
			differences = append(differences, diff)
		}
	}

	return differences
}

// CompareGoodPrescriptions 比较两个医嘱切片中相同耗材项目的数量差值
func CompareGoodPrescriptions(firstPrescription, secondPrescription []*models.HisPrescriptionProject) []*PrescriptionGoodDifference {
	differences := make([]*PrescriptionGoodDifference, 0)
	// 创建一个 map 来存储第一个切片中的耗材信息
	firstMap := make(map[int64]*models.HisPrescriptionProject)
	for _, good := range firstPrescription {
		firstMap[good.ProjectId] = good
	}

	// 遍历第二个切片中的耗材信息,并比较数量差值
	for _, good := range secondPrescription {
		if firstGood, ok := firstMap[good.ProjectId]; ok {

			count, _ := strconv.ParseInt(good.Count, 10, 64)
			firstCount, _ := strconv.ParseInt(firstGood.Count, 10, 64)
			diff := &PrescriptionGoodDifference{
				GoodID:     good.ProjectId,
				ID:         firstGood.ID,
				Difference: count - firstCount,
				Unit:       firstGood.Unit,
				Type:       firstGood.Type,
			}
			differences = append(differences, diff)
		}
	}

	return differences
}
func GetCompareData(dataBody map[string]interface{}) (editCustomData EditCustomData, srcCustomData SrcCustomData) {
	var adviceList []*models.HisDoctorAdviceInfo
	var projectList []*models.HisPrescriptionProject

	var advice_ids []int64
	var project_ids []int64

	if dataBody["prescriptions"] != nil && reflect.TypeOf(dataBody["prescriptions"]).String() == "[]interface {}" {
		prescriptions, _ := dataBody["prescriptions"].([]interface{})
		//var tempPrescription *models.HisPrescriptionProjectscription
		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{})
					//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.AdviceType = 2
							s.StopState = 2
							s.ExecutionState = 2
							s.Status = 1
							s.Groupno = groupNo
							s.CreatedTime = ctime
							s.UpdatedTime = mtime
							s.IsSettle = 2
							SetAdviceWithJSON(&s, advice.(map[string]interface{}))
							//存储切片中
							if s.ID > 0 {
								advice_ids = append(advice_ids, s.ID)
								adviceList = append(adviceList, &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.Ctime = time.Now().Unix()
							p.Mtime = time.Now().Unix()
							p.Status = 1
							SetProjectWithJSON(&p, project.(map[string]interface{}))
							if p.ID > 0 {
								project_ids = append(project_ids, p.ID)
								projectList = append(projectList, &p)
							}
						}
					}
				}
			}

		}
	}
	editCustomData.projectList = projectList
	editCustomData.adviceList = adviceList

	list, _ := service.GetBatchHisDoctorAdviceByIDs(advice_ids)
	list2, _ := service.GetBatchHisProjectByIDs(project_ids)

	srcCustomData.adviceList = list
	srcCustomData.projectList = list2

	return
}

func (c *HisApiController) GetAllGoodInforList() {

	orgId := c.GetAdminUserInfo().CurrentOrgId
	goodList, _ := service.GetAllGoodList(orgId)

	c.ServeSuccessJSON(map[string]interface{}{
		"goodList": goodList,
	})
	return
}

func (this *HisApiController) SaveGoodList() {

	project_name := this.GetString("project_name")
	sort, _ := this.GetInt64("sort")
	orgId := this.GetAdminUserInfo().CurrentOrgId

	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
	}

	goodTeam := models.XtGoodTeam{
		ProjectName: project_name,
		Sort:        sort,
		UserOrgId:   orgId,
		Status:      1,
		Ctime:       time.Now().Unix(),
		Mtime:       time.Now().Unix(),
	}

	service.CreateGoodTeam(goodTeam)

	lastGoodTeam, _ := service.GetLastGoodTeam(orgId)

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

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

				number := int64(items["number"].(float64))

				xtGoodTeamList := models.XtGoodTeamList{
					GoodId:    good_id,
					Count:     number,
					TeamId:    lastGoodTeam.ID,
					UserOrgId: orgId,
					Status:    1,
					Ctime:     time.Now().Unix(),
					Mtime:     time.Now().Unix(),
				}

				service.CreateGoodList(xtGoodTeamList)
			}
			this.ServeSuccessJSON(map[string]interface{}{
				"lastGoodTeam": lastGoodTeam,
			})
		}
	}
	return
}

func (this *HisApiController) GetGoodList() {

	orgId := this.GetAdminUserInfo().CurrentOrgId
	limit, _ := this.GetInt64("limit")
	page, _ := this.GetInt64("page")
	keyword := this.GetString("keyword")
	list, total, _ := service.GetGoodList(orgId, limit, page, keyword)

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

func (this *HisApiController) GetGoodNameDetail() {

	id, _ := this.GetInt64("id")

	orgId := this.GetAdminUserInfo().CurrentOrgId
	goodNameDetail, _ := service.GetGoodNameDetail(id, orgId)
	goodList, _ := service.GetAllGoodList(orgId)
	this.ServeSuccessJSON(map[string]interface{}{
		"goodNameDetail": goodNameDetail,
		"goodList":       goodList,
	})
}

func (this *HisApiController) UpdateGoodList() {

	project_name := this.GetString("project_name")
	sort, _ := this.GetInt64("sort")
	id, _ := this.GetInt64("id")
	orgId := this.GetAdminUserInfo().CurrentOrgId

	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
	}

	goodTeam := models.XtGoodTeam{
		ProjectName: project_name,
		Sort:        sort,
		UserOrgId:   orgId,
		Status:      1,
		Ctime:       time.Now().Unix(),
		Mtime:       time.Now().Unix(),
		ID:          id,
	}

	service.SaveGoodTeam(goodTeam)

	lastGoodTeam, _ := service.GetLastGoodTeam(orgId)

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

				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["number"] == nil || reflect.TypeOf(items["number"]).String() != "float64" {
					utils.ErrorLog("number")
				}

				number := int64(items["number"].(float64))

				xtGoodTeamList := models.XtGoodTeamList{
					ID:        id,
					GoodId:    good_id,
					Count:     number,
					TeamId:    lastGoodTeam.ID,
					UserOrgId: orgId,
					Status:    1,
					Ctime:     time.Now().Unix(),
					Mtime:     time.Now().Unix(),
				}

				service.SaveGoodList(xtGoodTeamList)
			}
			this.ServeSuccessJSON(map[string]interface{}{
				"lastGoodTeam": lastGoodTeam,
			})
		}
	}
	return
}

func (this *HisApiController) DeleteGoodTeam() {

	id, _ := this.GetInt64("id")
	team, _ := service.DeleteGoodTeam(id)
	this.ServeSuccessJSON(map[string]interface{}{
		"team": team,
	})
}

func (this *HisApiController) DeleteGood() {

	id, _ := this.GetInt64("id")

	good, _ := service.DeleteGood(id)

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