package sz

import (
	"encoding/json"
	"fmt"
	"gdyb/controllers"
	"gdyb/enums"
	"gdyb/models"
	"gdyb/service"
	"gdyb/utils"
	"github.com/astaxie/beego"
	"github.com/axgle/mahonia"
	"math/rand"

	//"github.com/axgle/mahonia"
	"math"
	//"math/rand"µ
	"strconv"
	"strings"
	//"strings"
	"syscall"
	"time"
	"unsafe"
)

type Result struct {
	Transtime          string `json:"transTime"`
	Transtype          string `json:"transType"`
	Transreturncode    string `json:"transReturnCode"`
	Transreturnmessage string `json:"transReturnMessage"`
	Transversion       string `json:"transVersion"`
	Serialnumber       string `json:"serialNumber"`
	Cardarea           string `json:"cardArea"`
	Hospitalcode       string `json:"hospitalCode"`
	Operatorcode       string `json:"operatorCode"`
	Operatorname       string `json:"operatorName"`
	Operatorpass       string `json:"operatorPass"`
	Transbody          struct {
		Akc190     string `json:"akc190"`
		Listsize   int    `json:"listsize"`
		Outputlist []struct {
			Aae072 string  `json:"aae072"`
			Bkc369 string  `json:"bkc369"`
			Bkf500 string  `json:"bkf500"`
			Aka111 string  `json:"aka111"`
			Ake001 string  `json:"ake001"`
			Ake002 string  `json:"ake002"`
			Bkm017 string  `json:"bkm017"`
			Ake005 string  `json:"ake005"`
			Ake006 string  `json:"ake006"`
			Akc225 float64 `json:"akc225"`
			Akc226 float64 `json:"akc226"`
			Akc264 float64 `json:"akc264"`
			Aka065 string  `json:"aka065"`
			Cka319 float64 `json:"cka319"`
			Akc268 float64 `json:"akc268"`
		} `json:"outputlist"`
	} `json:"transBody"`
	Verifycode         string `json:"verifyCode"`
	Extenddeviceid     string `json:"extendDeviceId"`
	Transchannel       string `json:"transChannel"`
	Extenduserid       string `json:"extendUserId"`
	Extendserialnumber string `json:"extendSerialNumber"`
	Caz055             string `json:"caz055"`
	Aae501             string `json:"aae501"`
}

type ResultOne struct {
	Transtime          string `json:"transTime"`
	Transtype          string `json:"transType"`
	Transreturncode    string `json:"transReturnCode"`
	Transreturnmessage string `json:"transReturnMessage"`
	Transversion       string `json:"transVersion"`
	Serialnumber       string `json:"serialNumber"`
	Cardarea           string `json:"cardArea"`
	Hospitalcode       string `json:"hospitalCode"`
	Operatorcode       string `json:"operatorCode"`
	Operatorname       string `json:"operatorName"`
	Operatorpass       string `json:"operatorPass"`
	Transbody          struct {
		Ckc618     string  `json:"ckc618"`
		Akc264     float64 `json:"akc264"`
		Akb068     int     `json:"akb068"`
		Akb066     float64 `json:"akb066"`
		Akb067     int     `json:"akb067"`
		Aae240     float64 `json:"aae240"`
		Outputlist []struct {
			Aaa036 string  `json:"aaa036"`
			Aae019 float64 `json:"aae019"`
		} `json:"outputlist"`
		Outputlist2 []interface{} `json:"outputlist2"`
	} `json:"transBody"`
	Verifycode         string `json:"verifyCode"`
	Extenddeviceid     string `json:"extendDeviceId"`
	Transchannel       string `json:"transChannel"`
	Extenduserid       string `json:"extendUserId"`
	Extendserialnumber string `json:"extendSerialNumber"`
	Caz055             string `json:"caz055"`
	Aae501             string `json:"aae501"`
}

type ResultTwo struct {
	Transtime          string `json:"transTime"`
	Transtype          string `json:"transType"`
	Transreturncode    string `json:"transReturnCode"`
	Transreturnmessage string `json:"transReturnMessage"`
	Transversion       string `json:"transVersion"`
	Serialnumber       string `json:"serialNumber"`
	Cardarea           string `json:"cardArea"`
	Hospitalcode       string `json:"hospitalCode"`
	Operatorcode       string `json:"operatorCode"`
	Operatorname       string `json:"operatorName"`
	Operatorpass       string `json:"operatorPass"`
	Transbody          struct {
		Ckc618      string  `json:"ckc618"`
		Akc264      float64 `json:"akc264"`
		Akb068      float64 `json:"akb068"`
		Akb066      float64 `json:"akb066"`
		Akb067      float64 `json:"akb067"`
		Aae240      float64 `json:"aae240"`
		Outputlist1 []struct {
			Aka111 string  `json:"aka111"`
			Bka058 float64 `json:"bka058"`
		} `json:"outputlist1"`
		Outputlist2 []struct {
			Aaa036 string  `json:"aaa036"`
			Aae019 float64 `json:"aae019"`
		} `json:"outputlist2"`
		Outputlist3 []interface{} `json:"outputlist3"`
	} `json:"transBody"`
	Verifycode         string `json:"verifyCode"`
	Extenddeviceid     string `json:"extendDeviceId"`
	Transchannel       string `json:"transChannel"`
	Extenduserid       string `json:"extendUserId"`
	Extendserialnumber string `json:"extendSerialNumber"`
	Caz055             string `json:"caz055"`
	Aae501             string `json:"aae501"`
}

type ResultThree struct {
	Transtime          string `json:"transTime"`
	Transtype          string `json:"transType"`
	Transreturncode    string `json:"transReturnCode"`
	Transreturnmessage string `json:"transReturnMessage"`
	Transversion       string `json:"transVersion"`
	Serialnumber       string `json:"serialNumber"`
	Cardarea           string `json:"cardArea"`
	Hospitalcode       string `json:"hospitalCode"`
	Operatorcode       string `json:"operatorCode"`
	Operatorname       string `json:"operatorName"`
	Operatorpass       string `json:"operatorPass"`
	Transbody          struct {
		Baz700 string `json:"baz700"`
		Ckc618 string `json:"ckc618"`
	} `json:"transBody"`
	Verifycode         string `json:"verifyCode"`
	Extenddeviceid     string `json:"extendDeviceId"`
	Transchannel       string `json:"transChannel"`
	Extenduserid       string `json:"extendUserId"`
	Extendserialnumber string `json:"extendSerialNumber"`
	Caz055             string `json:"caz055"`
	Aae501             string `json:"aae501"`
}

type ResultFive struct {
	Transtime          string `json:"transTime"`
	Transtype          string `json:"transType"`
	Transreturncode    string `json:"transReturnCode"`
	Transreturnmessage string `json:"transReturnMessage"`
	Transversion       string `json:"transVersion"`
	Serialnumber       string `json:"serialNumber"`
	Cardarea           string `json:"cardArea"`
	Hospitalcode       string `json:"hospitalCode"`
	Operatorcode       string `json:"operatorCode"`
	Operatorname       string `json:"operatorName"`
	Operatorpass       string `json:"operatorPass"`
	Transbody          struct {
		Akc190     string `json:"akc190"`
		Listsize   int    `json:"listsize"`
		Outputlist []struct {
			Aae072 string `json:"aae072"`
			Bkf500 string `json:"bkf500"`
			Baz700 string `json:"baz700"`
			Bce574 string `json:"bce574"`
		} `json:"outputlist"`
	} `json:"transBody"`
	Verifycode         string `json:"verifyCode"`
	Extenddeviceid     string `json:"extendDeviceId"`
	Transchannel       string `json:"transChannel"`
	Extenduserid       string `json:"extendUserId"`
	Extendserialnumber string `json:"extendSerialNumber"`
	Caz055             string `json:"caz055"`
	Aae501             string `json:"aae501"`
}

type ResultFour struct {
	Transtime          string `json:"transTime"`
	Transtype          string `json:"transType"`
	Transreturncode    string `json:"transReturnCode"`
	Transreturnmessage string `json:"transReturnMessage"`
	Transversion       string `json:"transVersion"`
	Serialnumber       string `json:"serialNumber"`
	Cardarea           string `json:"cardArea"`
	Hospitalcode       string `json:"hospitalCode"`
	Operatorcode       string `json:"operatorCode"`
	Operatorname       string `json:"operatorName"`
	Operatorpass       string `json:"operatorPass"`
	Transbody          struct {
		Akc190      string  `json:"akc190"`
		Akc194      int     `json:"akc194"`
		Bae917      int64   `json:"bae917"`
		Aka018      string  `json:"aka018"`
		Aka030      string  `json:"aka030"`
		Ckc618      string  `json:"ckc618"`
		Akc264      float64 `json:"akc264"`
		Akb068      float64 `json:"akb068"`
		Akb066      float64 `json:"akb066"`
		Akb067      float64 `json:"akb067"`
		Cke298      float64 `json:"cke298"`
		Aae240      float64 `json:"aae240"`
		Outputlist1 []struct {
			Aae072 string  `json:"aae072"`
			Bkc369 string  `json:"bkc369"`
			Bkf500 string  `json:"bkf500"`
			Aka111 string  `json:"aka111"`
			Ake001 string  `json:"ake001"`
			Ake002 string  `json:"ake002"`
			Bkm017 string  `json:"bkm017"`
			Ake005 string  `json:"ake005"`
			Ake006 string  `json:"ake006"`
			Ala026 string  `json:"ala026"`
			Aka070 string  `json:"aka070"`
			Aka074 string  `json:"aka074"`
			Akc226 float64 `json:"akc226"`
			Akc225 float64 `json:"akc225"`
			Akc264 float64 `json:"akc264"`
			Aka067 string  `json:"aka067"`
			Akc271 int     `json:"akc271"`
			Bkc320 string  `json:"bkc320"`
			Cke400 string  `json:"cke400"`
			Ckc618 string  `json:"ckc618"`
			Bka069 int64   `json:"bka069"`
			Aka018 string  `json:"aka018"`
			Aka030 string  `json:"aka030"`
			Aka065 string  `json:"aka065"`
			Cka319 float64 `json:"cka319"`
			Akc268 float64 `json:"akc268"`
		} `json:"outputlist1"`
		Outputlist2 []struct {
			Aka111 string  `json:"aka111"`
			Bka058 float64 `json:"bka058"`
		} `json:"outputlist2"`
		Outputlist3 []struct {
			Aaa036 string  `json:"aaa036"`
			Aae019 float64 `json:"aae019"`
		} `json:"outputlist3"`
	} `json:"transBody"`
	Verifycode         string `json:"verifyCode"`
	Extenddeviceid     string `json:"extendDeviceId"`
	Transchannel       string `json:"transChannel"`
	Extenduserid       string `json:"extendUserId"`
	Extendserialnumber string `json:"extendSerialNumber"`
	Caz055             string `json:"caz055"`
	Aae501             string `json:"aae501"`
}

type ResultMZ001 struct {
	Transtime          string `json:"transTime"`
	Transtype          string `json:"transType"`
	Transreturncode    string `json:"transReturnCode"`
	Transreturnmessage string `json:"transReturnMessage"`
	Transversion       string `json:"transVersion"`
	Serialnumber       string `json:"serialNumber"`
	Cardarea           string `json:"cardArea"`
	Hospitalcode       string `json:"hospitalCode"`
	Operatorcode       string `json:"operatorCode"`
	Operatorname       string `json:"operatorName"`
	Operatorpass       string `json:"operatorPass"`
	Transbody          struct {
		Aaz515      string  `json:"aaz515"`
		Aaz500      string  `json:"aaz500"`
		Aac001      float64 `json:"aac001"`
		Aac999      string  `json:"aac999"`
		Aac002      string  `json:"aac002"`
		Aac058      string  `json:"aac058"`
		Aac147      string  `json:"aac147"`
		Aac003      string  `json:"aac003"`
		Aac004      string  `json:"aac004"`
		Aac006      float64 `json:"aac006"`
		Bae093      float64 `json:"bae093"`
		Cac215      string  `json:"cac215"`
		Aac066      string  `json:"aac066"`
		Aac008      string  `json:"aac008"`
		Bke404      string  `json:"bke404"`
		Aae240      float64 `json:"aae240"`
		Bkc346      string  `json:"bkc346"`
		Ckc601      string  `json:"ckc601"`
		Caz574      string  `json:"caz574"`
		Caz654      string  `json:"caz654"`
		Ckc403      string  `json:"ckc403"`
		Ckc362      string  `json:"ckc362"`
		Ckc363      string  `json:"ckc363"`
		Outputlist1 []struct {
			Aab001 float64 `json:"aab001"`
			Aab999 string  `json:"aab999"`
			Aab004 string  `json:"aab004"`
			Aab019 string  `json:"aab019"`
			Aae140 string  `json:"aae140"`
			Aae030 float64 `json:"aae030"`
			Aae031 string  `json:"aae031"`
			Bcc334 string  `json:"bcc334"`
			Aac031 string  `json:"aac031"`
		} `json:"outputlist1"`
	} `json:"transBody"`
	Verifycode         string `json:"verifyCode"`
	Extenddeviceid     string `json:"extendDeviceId"`
	Transchannel       string `json:"transChannel"`
	Extenduserid       string `json:"extendUserId"`
	Extendserialnumber string `json:"extendSerialNumber"`
	Caz055             string `json:"caz055"`
	Aae501             string `json:"aae501"`
}

type SZHisApiController struct {
	controllers.BaseAuthAPIController
}

func SZHisManagerApiRegistRouters() {
	//挂号
	beego.Router("/sz/api/register/get", &SZHisApiController{}, "get:GetRegisterInfo")
	//结算
	beego.Router("/sz/api/settle/get", &SZHisApiController{}, "get:GetSettleInfo")

	//预结算
	beego.Router("/sz/api/presettle/get", &SZHisApiController{}, "get:GetPreSettleInfo")

	//退费
	beego.Router("/sz/api/refund/get", &SZHisApiController{}, "get:Refund")
	beego.Router("/sz/api/readcard", &SZHisApiController{}, "get:ReadCard")
	beego.Router("sz/api/refundnumber/get", &SZHisApiController{}, "get:RefundNumber")

	beego.Router("/sz/api/monthrefund/get", &SZHisApiController{}, "get:MonthRefund")
	//查询交易
	beego.Router("/sz/api/settle/query", &SZHisApiController{}, "get:GetSettleAccounts")
	//beego.Router("/sz/api/detail/upload", &SZHisApiController{}, "get:GetUploadDetail")
	beego.Router("/sz/api/detail/cancel", &SZHisApiController{}, "get:CancelOrderDetail")
	//
	////机构药品目录备案
	beego.Router("/sz/api/drug/get", &SZHisApiController{}, "get:GetDrugList")
	////协议机构诊疗项目
	beego.Router("/sz/api/treatment/get", &SZHisApiController{}, "get:GetTreatmentProject")
	////协议机构目录备案撤销
	beego.Router("/sz/api/revocation/get", &SZHisApiController{}, "get:GetRevocation")
	//
	////定点机构约定信息查询
	//beego.Router("/sz/api/information/query/get",&SZHisApiController{},"get:GetInformationQuery")
	////-医药师信息登记
	beego.Router("/sz/api/doctor/get", &SZHisApiController{}, "get:GetDoctorList")
	////医药师执业状态变更
	beego.Router("/sz/api/medical/get", &SZHisApiController{}, "get:GetMedicalList")
	////医药师信息更新
	//beego.Router("/sz/api/update/medical/get", &SZHisApiController{}, "get:GetUpdateMedicalList")
	////协议机构材料目录备案
	//
	beego.Router("/sz/api/goods/get", &SZHisApiController{}, "get:GetGoodsList")
}

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

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

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

func (c *SZHisApiController) ReadCard() {
	id_card_type, _ := c.GetInt64("id_card_type")
	adminInfo := c.GetAdminUserInfo()
	if id_card_type != 1 {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorNoReadCardException)
		return
	}
	month := time.Unix(1557042972, 0).Format("1")
	year := time.Now().Format("2006")
	month = time.Now().Format("01")
	day := time.Now().Format("02")

	miConfig, _ := service.FindMedicalInsuranceInfo(adminInfo.CurrentOrgId)
	number := miConfig.Code + year + month + day +
		fmt.Sprintf("%07v", rand.New(rand.NewSource(time.Now().UnixNano())).Int31n(10000000)) // 定点协议机构编码（5位）+日期（8位）+流水号（7位）
	id_card_number, health_card_no, _, ret4 := ReadBasCard("MZ002" + "|" + number + "|" + miConfig.Code + "|")
	if ret4 == 0 {
		patient, _ := service.GetPatientByNumber(id_card_number, adminInfo.CurrentOrgId)
		if patient.ID == 0 {
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeNoPateintException)
			return
		} else {
			c.ServeSuccessJSON(map[string]interface{}{
				"patient":        patient,
				"health_card_no": health_card_no,
			})
		}
	} else {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeReadCardException)
		return
	}

}

//获取读卡信息 -- 门诊挂号
//func (c *SZHisApiController) GetRegisterInfo() {
//	adminInfo := c.GetAdminUserInfo()
//	admin_user_id, _ := c.GetInt64("admin_user_id")
//	patient_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")
//	id_card := c.GetString("id_card")
//	register_type, _ := c.GetInt64("register")
//	doctor, _ := c.GetInt64("doctor")
//	department, _ := c.GetInt64("department")
//	gender, _ := c.GetInt64("sex")
//	registration_fee, _ := c.GetFloat("registration_fee")
//	medical_expenses, _ := c.GetFloat("medical_expenses")
//	social_type, _ := c.GetInt64("social_type")
//
//	is_yidi, _ := c.GetInt64("is_yidi")
//
//	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
//	}
//
//	var patient service.Patients
//	if patient_id == 0 {
//		patient, _ = service.GetPatientByIDCard(id_card, adminInfo.CurrentOrgId)
//	} else {
//		patient, _ = service.GetPatientByIDTwo(adminInfo.CurrentOrgId, patient_id)
//	}
//
//	miConfig, _ := service.FindMedicalInsuranceInfo(adminInfo.CurrentOrgId)
//	if patient.ID == 0 {
//		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodePatientNoExist)
//		return
//	}
//	if len(patient.IdCardNo) == 0 {
//		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeIDCartNo)
//		return
//	}
//
//	adminRole, _ := service.GetAdminUserInfoByID(adminInfo.CurrentOrgId, admin_user_id)
//	his, _ := service.GetHisPatientInfo(adminInfo.CurrentOrgId, patient_id, theTime.Unix())
//
//	var custom_code string
//	var custom_project_name string
//	var allPrice float64
//
//	switch register_type {
//	case 1:
//		custom_code = "110100002"
//		custom_project_name = "普通门诊"
//		allPrice = 10
//		break
//	case 3:
//		custom_code = "110200002-2"
//		custom_project_name = "主任医师"
//		allPrice = 10
//
//		break
//	case 2:
//		custom_code = "110200002-3"
//		custom_project_name = "副主任医师"
//		allPrice = 10
//
//		break
//	case 4:
//		custom_code = "0"
//		custom_project_name = "免受诊金"
//		allPrice = 0
//		break
//	case 5:
//		custom_code = "110200002-1"
//		custom_project_name = "专家"
//		allPrice = 10
//
//		break
//	}
//
//	if his.ID == 0 {
//
//		var doctor_name string
//		var doctor_code string
//		if adminRole.ID == 0 {
//
//			doctor_name = ""
//			doctor_code = "1001"
//			doctor_name = ""
//			doctor_code = ""
//
//		} else {
//			doctor_name = adminRole.UserName
//			doctor_code = strconv.FormatInt(admin_user_id, 10)
//
//		}
//		month := time.Unix(1557042972, 0).Format("1")
//		year := time.Now().Format("2006")
//		month = time.Now().Format("01")
//		day := time.Now().Format("02")
//
//		//流水号
//		//
//		number := miConfig.Code + year + month + day +
//			fmt.Sprintf("%07v", rand.New(rand.NewSource(time.Now().UnixNano())).Int31n(10000000)) // 定点协议机构编码（5位）+日期（8位）+流水号（7位）
//		mz_number := year + month + day + strconv.FormatInt(patient_id, 10) +
//			fmt.Sprintf("%07v", rand.New(rand.NewSource(time.Now().UnixNano())).Int31n(10000000))
//		//1.判断读卡类型
//		//2.读卡 获取交易验证码，医疗证号，发卡地区行政区划代码
//		yiliao_number, id_card_number, verifyCode, version_code, _, ret4 := ReadBasCardGetNumber("MZ002" + "|" + number + "|" + miConfig.Code + "|")
//		fmt.Println(yiliao_number)
//		fmt.Println(id_card_number)
//		fmt.Println(verifyCode)
//		fmt.Println(version_code)
//		fmt.Println(ret4)
//
//		dept_code := "0305"
//		is_yidi = 1
//		tempPatient, _ := service.GetPatientByNumber(id_card_number, adminInfo.CurrentOrgId)
//		//根据业务的人员信息跟设备读社保卡获取的信息进行匹配，判断是否为同一个人，相同则进行挂号操作，不同则报错
//		if tempPatient.ID == patient_id {
//			if ret4 == 0 { //本地卡流程
//				if is_yidi == 1 {
//					//本地就医流程
//					//挂号
//				resp_result := service.SzybMZ002(doctor_name, doctor_code, miConfig.Code, dept_code, yiliao_number, verifyCode, number, mz_number, version_code, custom_code, custom_project_name, allPrice,medical_care)
//					var dat map[string]interface{}
//					if err := json.Unmarshal([]byte(resp_result), &dat); err == nil {
//						fmt.Println(dat)
//					} else {
//						fmt.Println(err)
//					}
//					userJSONBytes, _ := json.Marshal(dat)
//					var res ResultOne
//					if err := json.Unmarshal(userJSONBytes, &res); err != nil {
//						utils.ErrorLog("解析失败：%v", err)
//						c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
//						return
//					}
//					if res.Transreturncode == "00000000" {
//						his := models.VMHisPatient{
//							Name:                   name,
//							Gender:                 gender,
//							Birthday:               birthUnix,
//							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,
//							Status:                 1,
//							Ctime:                  time.Now().Unix(),
//							Mtime:                  time.Now().Unix(),
//							Iinfo:                  resp_result,
//							PatientId:              patient.ID,
//							RecordDate:             theTime.Unix(),
//							UserOrgId:              adminInfo.CurrentOrgId,
//							AdminUserId:            admin_user_id,
//							IsReturn:               1,
//							IdCardType:             id_card_type,
//							Doctor:                 doctor,
//							Departments:            department,
//							YiliaoNumber:           yiliao_number,
//							MzNumber:               number,
//							Number:                 mz_number,
//						}
//						service.CreateHisPatientTwo(&his)
//						c.ServeSuccessJSON(map[string]interface{}{
//							"msg": "挂号成功",
//						})
//					} else {
//						c.ServeSuccessJSON(map[string]interface{}{
//							"failed_code": -10,
//							"msg":         res.Transreturnmessage,
//						})
//						return
//					}
//
//				} else {
//					//异地就医流程
//					//异地走鉴权流程
//					//authResult := CardAuth(number)
//					//fmt.Println(authResult)
//
//					//tempPatient, _ := service.GetPatientByNumber(id_card_number, adminInfo.CurrentOrgId)
//					//if tempPatient.ID == patient_id {
//					resp_result := service.SzybMZ002(doctor_name, doctor_code, miConfig.Code, "0305", yiliao_number, verifyCode, number, mz_number, version_code, custom_code, custom_project_name, allPrice)
//					var dat map[string]interface{}
//					if err := json.Unmarshal([]byte(resp_result), &dat); err == nil {
//						fmt.Println(dat)
//					} else {
//						fmt.Println(err)
//					}
//
//					userJSONBytes, _ := json.Marshal(dat)
//
//					var res ResultOne
//					if err := json.Unmarshal(userJSONBytes, &res); err != nil {
//						utils.ErrorLog("解析失败：%v", err)
//						c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
//						return
//					}
//					if res.Transreturncode == "00000000" {
//						his := models.VMHisPatient{
//							Name:                   name,
//							Gender:                 gender,
//							Birthday:               birthUnix,
//							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,
//							Status:                 1,
//							Ctime:                  time.Now().Unix(),
//							Mtime:                  time.Now().Unix(),
//							Iinfo:                  resp_result,
//							PatientId:              patient.ID,
//							RecordDate:             theTime.Unix(),
//							UserOrgId:              adminInfo.CurrentOrgId,
//							AdminUserId:            admin_user_id,
//							IsReturn:               1,
//							IdCardType:             id_card_type,
//							Doctor:                 doctor,
//							Departments:            department,
//							YiliaoNumber:           yiliao_number,
//							MzNumber:               number,
//							Number:                 mz_number,
//						}
//						service.CreateHisPatientTwo(&his)
//						c.ServeSuccessJSON(map[string]interface{}{
//							"msg": "挂号成功",
//						})
//					} else {
//						c.ServeSuccessJSON(map[string]interface{}{
//							"failed_code": -10,
//							"msg":         res.Transreturnmessage,
//						})
//						return
//					}
//
//				}
//
//			} else { //异地卡流程
//				//readCardBasResult := ReadCardBasHSM(number)
//				//fmt.Println(readCardBasResult)
//				//是否异地就医，是的话走鉴权流程，不是的话走门诊挂号
//				if is_yidi == 1 { //1本地就医
//					resp_result := service.SzybMZ002(doctor_name, doctor_code, miConfig.Code, "0305", yiliao_number, verifyCode, number, mz_number, version_code, custom_code, custom_project_name, allPrice)
//					var dat map[string]interface{}
//					if err := json.Unmarshal([]byte(resp_result), &dat); err == nil {
//						fmt.Println(dat)
//					} else {
//						fmt.Println(err)
//					}
//
//					userJSONBytes, _ := json.Marshal(dat)
//
//					var res ResultOne
//					if err := json.Unmarshal(userJSONBytes, &res); err != nil {
//						utils.ErrorLog("解析失败：%v", err)
//						c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
//						return
//					}
//					if res.Transreturncode == "00000000" {
//						his := models.VMHisPatient{
//							Name:                   name,
//							Gender:                 gender,
//							Birthday:               birthUnix,
//							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,
//							Status:                 1,
//							Ctime:                  time.Now().Unix(),
//							Mtime:                  time.Now().Unix(),
//							Iinfo:                  resp_result,
//							PatientId:              patient.ID,
//							RecordDate:             theTime.Unix(),
//							UserOrgId:              adminInfo.CurrentOrgId,
//							AdminUserId:            admin_user_id,
//							IsReturn:               1,
//							IdCardType:             id_card_type,
//							Doctor:                 doctor,
//							Departments:            department,
//							YiliaoNumber:           yiliao_number,
//							MzNumber:               number,
//							Number:                 mz_number,
//						}
//						service.CreateHisPatientTwo(&his)
//						c.ServeSuccessJSON(map[string]interface{}{
//							"msg": "挂号成功",
//						})
//					} else {
//						c.ServeSuccessJSON(map[string]interface{}{
//							"failed_code": -10,
//							"msg":         res.Transreturnmessage,
//						})
//						return
//					}
//
//				} else { //异地就医需要走鉴权流程
//					//authResult := CardAuth(number)
//					//fmt.Println(authResult)
//					resp_result := service.SzybMZ002(doctor_name, doctor_code, miConfig.Code, "0305", yiliao_number, verifyCode, number, mz_number, version_code, custom_code, custom_project_name, allPrice)
//					var dat map[string]interface{}
//					if err := json.Unmarshal([]byte(resp_result), &dat); err == nil {
//						fmt.Println(dat)
//					} else {
//						fmt.Println(err)
//					}
//
//					userJSONBytes, _ := json.Marshal(dat)
//
//					var res ResultOne
//					if err := json.Unmarshal(userJSONBytes, &res); err != nil {
//						utils.ErrorLog("解析失败：%v", err)
//						c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
//						return
//					}
//					if res.Transreturncode == "00000000" {
//						his := models.VMHisPatient{
//							Name:                   name,
//							Gender:                 gender,
//							Birthday:               birthUnix,
//							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,
//							Status:                 1,
//							Ctime:                  time.Now().Unix(),
//							Mtime:                  time.Now().Unix(),
//							Iinfo:                  resp_result,
//							PatientId:              patient.ID,
//							RecordDate:             theTime.Unix(),
//							UserOrgId:              adminInfo.CurrentOrgId,
//							AdminUserId:            admin_user_id,
//							IsReturn:               1,
//							IdCardType:             id_card_type,
//							Doctor:                 doctor,
//							Departments:            department,
//							YiliaoNumber:           yiliao_number,
//							MzNumber:               number,
//							Number:                 mz_number,
//						}
//						service.CreateHisPatientTwo(&his)
//						c.ServeSuccessJSON(map[string]interface{}{
//							"msg": "挂号成功",
//						})
//					} else {
//						c.ServeSuccessJSON(map[string]interface{}{
//							"failed_code": -10,
//							"msg":         res.Transreturnmessage,
//						})
//						return
//					}
//
//				}
//			}
//		} else {
//			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeNoPateintException)
//			return
//		}
//	} else {
//		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeRegisterRepeatException)
//		return
//	}
//}
func (c *SZHisApiController) GetRegisterInfo() {
	adminInfo := c.GetAdminUserInfo()
	admin_user_id, _ := c.GetInt64("admin_user_id")
	patient_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")
	id_card := c.GetString("id_card")
	register_type, _ := c.GetInt64("register")
	doctor, _ := c.GetInt64("doctor")
	department, _ := c.GetInt64("department")
	gender, _ := c.GetInt64("sex")
	registration_fee, _ := c.GetFloat("registration_fee")
	medical_expenses, _ := c.GetFloat("medical_expenses")
	social_type, _ := c.GetInt64("social_type")

	is_yidi, _ := c.GetInt64("is_yidi")

	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
	}

	var patient service.Patients
	if patient_id == 0 {
		patient, _ = service.GetPatientByIDCard(id_card, adminInfo.CurrentOrgId)
	} else {
		patient, _ = service.GetPatientByIDTwo(adminInfo.CurrentOrgId, patient_id)
	}

	miConfig, _ := service.FindMedicalInsuranceInfo(adminInfo.CurrentOrgId)
	if patient.ID == 0 {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodePatientNoExist)
		return
	}
	if len(patient.IdCardNo) == 0 {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeIDCartNo)
		return
	}
	//doctorInfo, _ := service.GetAdminUserInfoByID(adminInfo.CurrentOrgId, doctor)
	doctorDepartment, _ := service.GetDepartMentDetail(department)
	adminRole, _ := service.GetAdminUserInfoByID(adminInfo.CurrentOrgId, admin_user_id)
	//his, _ := service.GetHisPatientInfo(adminInfo.CurrentOrgId, patient_id, theTime.Unix())

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

	var custom_code string
	var custom_project_name string
	var allPrice float64

	switch register_type {
	case 1:
		custom_code = "110100002"
		custom_project_name = "普通门诊"
		allPrice = 10
		break
	case 3:
		custom_code = "110200002-2"
		custom_project_name = "主任医师"
		allPrice = 10

		break
	case 2:
		custom_code = "110200002-3"
		custom_project_name = "副主任医师"
		allPrice = 10

		break
	case 4:
		custom_code = "0"
		custom_project_name = "免受诊金"
		allPrice = 0
		break
	case 5:
		custom_code = "110200002-1"
		custom_project_name = "专家"
		allPrice = 10

		break
	}
	var opera_name string
	var opera_code string
	if adminRole.ID == 0 {
		opera_name = "管理员"
		opera_code = "01"
	} else {
		opera_name = adminRole.UserName
		opera_code = strconv.FormatInt(admin_user_id, 10)
	}
	month := time.Unix(1557042972, 0).Format("1")
	year := time.Now().Format("2006")
	month = time.Now().Format("01")
	day := time.Now().Format("02")
	//流水号
	number := miConfig.Code + year + month + day +
		fmt.Sprintf("%07v", rand.New(rand.NewSource(time.Now().UnixNano())).Int31n(10000000)) // 定点协议机构编码（5位）+日期（8位）+流水号（7位）
	mz_number := miConfig.Code + year + month + day +
		fmt.Sprintf("%07v", rand.New(rand.NewSource(time.Now().UnixNano())).Int31n(10000000))

	//1.判断读卡类型
	//2.读卡 获取交易验证码，医疗证号，发卡地区行政区划代码
	yiliao_number, id_card_number, verifyCode, version_code, health_card_no, _, ret4 := ReadBasCardGetNumber("MZ002" + "|" + number + "|" + miConfig.Code + "|")

	dept_code := doctorDepartment.Number

	is_yidi = 1
	tempPatient, _ := service.GetPatientByNumber(id_card_number, adminInfo.CurrentOrgId)
	//根据业务的人员信息跟设备读社保卡获取的信息进行匹配，判断是否为同一个人，相同则进行挂号操作，不同则报错
	fmt.Println(tempPatient.ID)
	fmt.Println(patient_id)

	if tempPatient.ID == patient_id {
		temp_mz_number := miConfig.Code + year + month + day +
			fmt.Sprintf("%07v", rand.New(rand.NewSource(time.Now().UnixNano())).Int31n(10000000))
		tempVerifyCode, tempVersionCode := ReadCardGetCode("XX001" + "|" + temp_mz_number + "|" + miConfig.Code)

		//yiliao_number, id_card_number, verifyCode, version_code, health_card_no, _, ret4 := ReadBasCardGetNumber("MZ002" + "|" + number + "|" + miConfig.Code + "|")

		//yiliao_number = "%GALMAFXJGKUKZNKWAIUH?;07857319025346309758?"

		result001 := service.SzybXX001(opera_name, opera_code, miConfig.Code, yiliao_number, tempVerifyCode, temp_mz_number, tempVersionCode)

		if ret4 == 0 { //本地卡流程
			if is_yidi == 1 {

				//var dat2 map[string]interface{}
				//if err := json.Unmarshal([]byte(result001), &dat2); err == nil {
				//	fmt.Println(dat2)
				//} else {
				//	fmt.Println(err)
				//}
				//userJSONBytes2, _ := json.Marshal(dat2)
				//var res2 ResultMZ001
				//if err := json.Unmarshal(userJSONBytes2, &res2); err != nil {
				//	utils.ErrorLog("解析失败：%v", err)
				//}

				//本地就医流程
				//挂号
				resp_result := service.SzybMZ002(opera_name, opera_code, miConfig.Code, dept_code, yiliao_number, verifyCode, number, mz_number, version_code, custom_code, custom_project_name, allPrice, medical_care)
				var dat map[string]interface{}
				if err := json.Unmarshal([]byte(resp_result), &dat); err == nil {
					fmt.Println(dat)
				} else {
					fmt.Println(err)
				}
				userJSONBytes, _ := json.Marshal(dat)
				var res ResultOne
				if err := json.Unmarshal(userJSONBytes, &res); err != nil {
					utils.ErrorLog("解析失败：%v", err)
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
					return
				}
				if res.Transreturncode == "00000000" {
					his := models.VMHisPatient{
						Name:                   name,
						Gender:                 gender,
						Birthday:               birthUnix,
						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,
						Status:                 1,
						Ctime:                  time.Now().Unix(),
						Mtime:                  time.Now().Unix(),
						Iinfo:                  resp_result,
						PatientId:              patient.ID,
						RecordDate:             theTime.Unix(),
						UserOrgId:              adminInfo.CurrentOrgId,
						AdminUserId:            admin_user_id,
						IsReturn:               1,
						IdCardType:             id_card_type,
						Doctor:                 doctor,
						Departments:            department,
						YiliaoNumber:           yiliao_number,
						MzNumber:               number,
						Number:                 mz_number,
						PsnNo:                  health_card_no,
						PatientInfo:            result001,
					}
					service.CreateHisPatientTwo(&his)
					lists, _ := service.GetHisPatientInfoList(adminInfo.CurrentOrgId, patient.ID, theTime.Unix())
					if len(lists) == 1 {
						service.UpdateHisPrescriptionHisID(his.ID, patient.ID, theTime.Unix(), adminInfo.CurrentOrgId)
					}
					c.ServeSuccessJSON(map[string]interface{}{
						"msg": "挂号成功",
					})
				} else {
					c.ServeSuccessJSON(map[string]interface{}{
						"failed_code": -10,
						"msg":         res.Transreturnmessage,
					})
					return
				}

			} else {
				//异地就医流程
				//异地走鉴权流程
				//authResult := CardAuth(number)
				//fmt.Println(authResult)

				//tempPatient, _ := service.GetPatientByNumber(id_card_number, adminInfo.CurrentOrgId)
				//if tempPatient.ID == patient_id {
				resp_result := service.SzybMZ002(opera_name, opera_code, miConfig.Code, "0305", yiliao_number, verifyCode, number, mz_number, version_code, custom_code, custom_project_name, allPrice, medical_care)
				var dat map[string]interface{}
				if err := json.Unmarshal([]byte(resp_result), &dat); err == nil {
					fmt.Println(dat)
				} else {
					fmt.Println(err)
				}

				userJSONBytes, _ := json.Marshal(dat)

				var res ResultOne
				if err := json.Unmarshal(userJSONBytes, &res); err != nil {
					utils.ErrorLog("解析失败：%v", err)
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
					return
				}
				if res.Transreturncode == "00000000" {
					his := models.VMHisPatient{
						Name:                   name,
						Gender:                 gender,
						Birthday:               birthUnix,
						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,
						Status:                 1,
						Ctime:                  time.Now().Unix(),
						Mtime:                  time.Now().Unix(),
						Iinfo:                  resp_result,
						PatientId:              patient.ID,
						RecordDate:             theTime.Unix(),
						UserOrgId:              adminInfo.CurrentOrgId,
						AdminUserId:            admin_user_id,
						IsReturn:               1,
						IdCardType:             id_card_type,
						Doctor:                 doctor,
						Departments:            department,
						YiliaoNumber:           yiliao_number,
						MzNumber:               number,
						Number:                 mz_number,
						PsnNo:                  health_card_no,
						PatientInfo:            result001,
					}
					service.CreateHisPatientTwo(&his)
					lists, _ := service.GetHisPatientInfoList(adminInfo.CurrentOrgId, patient.ID, theTime.Unix())
					if len(lists) == 1 {
						service.UpdateHisPrescriptionHisID(his.ID, patient.ID, theTime.Unix(), adminInfo.CurrentOrgId)
					}
					c.ServeSuccessJSON(map[string]interface{}{
						"msg": "挂号成功",
					})
				} else {
					c.ServeSuccessJSON(map[string]interface{}{
						"failed_code": -10,
						"msg":         res.Transreturnmessage,
					})
					return
				}

			}

		} else { //异地卡流程
			//readCardBasResult := ReadCardBasHSM(number)
			//fmt.Println(readCardBasResult)
			//是否异地就医，是的话走鉴权流程，不是的话走门诊挂号
			if is_yidi == 1 { //1本地就医
				resp_result := service.SzybMZ002(opera_name, opera_code, miConfig.Code, "0305", yiliao_number, verifyCode, number, mz_number, version_code, custom_code, custom_project_name, allPrice, medical_care)
				var dat map[string]interface{}
				if err := json.Unmarshal([]byte(resp_result), &dat); err == nil {
					fmt.Println(dat)
				} else {
					fmt.Println(err)
				}

				userJSONBytes, _ := json.Marshal(dat)

				var res ResultOne
				if err := json.Unmarshal(userJSONBytes, &res); err != nil {
					utils.ErrorLog("解析失败：%v", err)
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
					return
				}
				if res.Transreturncode == "00000000" {
					his := models.VMHisPatient{
						Name:                   name,
						Gender:                 gender,
						Birthday:               birthUnix,
						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,
						Status:                 1,
						Ctime:                  time.Now().Unix(),
						Mtime:                  time.Now().Unix(),
						Iinfo:                  resp_result,
						PatientId:              patient.ID,
						RecordDate:             theTime.Unix(),
						UserOrgId:              adminInfo.CurrentOrgId,
						AdminUserId:            admin_user_id,
						IsReturn:               1,
						IdCardType:             id_card_type,
						Doctor:                 doctor,
						Departments:            department,
						YiliaoNumber:           yiliao_number,
						MzNumber:               number,
						Number:                 mz_number,
						PsnNo:                  health_card_no,
						PatientInfo:            result001,
					}
					service.CreateHisPatientTwo(&his)
					lists, _ := service.GetHisPatientInfoList(adminInfo.CurrentOrgId, patient.ID, theTime.Unix())
					if len(lists) == 1 {
						service.UpdateHisPrescriptionHisID(his.ID, patient.ID, theTime.Unix(), adminInfo.CurrentOrgId)
					}
					c.ServeSuccessJSON(map[string]interface{}{
						"msg": "挂号成功",
					})
				} else {
					c.ServeSuccessJSON(map[string]interface{}{
						"failed_code": -10,
						"msg":         res.Transreturnmessage,
					})
					return
				}

			} else { //异地就医需要走鉴权流程
				//authResult := CardAuth(number)
				//fmt.Println(authResult)
				resp_result := service.SzybMZ002(opera_name, opera_code, miConfig.Code, "0305", yiliao_number, verifyCode, number, mz_number, version_code, custom_code, custom_project_name, allPrice, medical_care)
				var dat map[string]interface{}
				if err := json.Unmarshal([]byte(resp_result), &dat); err == nil {
					fmt.Println(dat)
				} else {
					fmt.Println(err)
				}

				userJSONBytes, _ := json.Marshal(dat)

				var res ResultOne
				if err := json.Unmarshal(userJSONBytes, &res); err != nil {
					utils.ErrorLog("解析失败：%v", err)
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
					return
				}
				if res.Transreturncode == "00000000" {
					his := models.VMHisPatient{
						Name:                   name,
						Gender:                 gender,
						Birthday:               birthUnix,
						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,
						Status:                 1,
						Ctime:                  time.Now().Unix(),
						Mtime:                  time.Now().Unix(),
						Iinfo:                  resp_result,
						PatientId:              patient.ID,
						RecordDate:             theTime.Unix(),
						UserOrgId:              adminInfo.CurrentOrgId,
						AdminUserId:            admin_user_id,
						IsReturn:               1,
						IdCardType:             id_card_type,
						Doctor:                 doctor,
						Departments:            department,
						YiliaoNumber:           yiliao_number,
						MzNumber:               number,
						Number:                 mz_number,
						PsnNo:                  health_card_no,
						PatientInfo:            result001,
					}
					service.CreateHisPatientTwo(&his)
					lists, _ := service.GetHisPatientInfoList(adminInfo.CurrentOrgId, patient.ID, theTime.Unix())
					if len(lists) == 1 {
						service.UpdateHisPrescriptionHisID(his.ID, patient.ID, theTime.Unix(), adminInfo.CurrentOrgId)
					}
					c.ServeSuccessJSON(map[string]interface{}{
						"msg": "挂号成功",
					})
				} else {
					c.ServeSuccessJSON(map[string]interface{}{
						"failed_code": -10,
						"msg":         res.Transreturnmessage,
					})
					return
				}

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

}

//func (c *SZHisApiController) GetInfo() {
//func (c *SZHisApiController) GetRegisterInfo() {
//	adminInfo := c.GetAdminUserInfo()
//	admin_user_id, _ := c.GetInt64("admin_user_id")
//	patient_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")
//	id_card := c.GetString("id_card")
//	register_type, _ := c.GetInt64("register")
//	doctor, _ := c.GetInt64("doctor")
//	department, _ := c.GetInt64("department")
//	gender, _ := c.GetInt64("sex")
//	registration_fee, _ := c.GetFloat("registration_fee")
//	medical_expenses, _ := c.GetFloat("medical_expenses")
//	social_type, _ := c.GetInt64("social_type")
//
//	is_yidi, _ := c.GetInt64("is_yidi")
//
//	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
//	}
//
//	var patient service.Patients
//	if patient_id == 0 {
//		patient, _ = service.GetPatientByIDCard(id_card, adminInfo.CurrentOrgId)
//	} else {
//		patient, _ = service.GetPatientByIDTwo(adminInfo.CurrentOrgId, patient_id)
//	}
//
//	miConfig, _ := service.FindMedicalInsuranceInfo(adminInfo.CurrentOrgId)
//	if patient.ID == 0 {
//		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodePatientNoExist)
//		return
//	}
//	if len(patient.IdCardNo) == 0 {
//		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeIDCartNo)
//		return
//	}
//
//	adminRole, _ := service.GetAdminUserInfoByID(adminInfo.CurrentOrgId, admin_user_id)
//	his, _ := service.GetHisPatientInfo(adminInfo.CurrentOrgId, patient_id, theTime.Unix())
//
//	var custom_code string
//	var custom_project_name string
//	var allPrice float64
//
//	switch register_type {
//	case 1:
//		custom_code = "110100002"
//		custom_project_name = "普通门诊"
//		allPrice = 10
//		break
//	case 3:
//		custom_code = "110200002-2"
//		custom_project_name = "主任医师"
//		allPrice = 10
//
//		break
//	case 2:
//		custom_code = "110200002-3"
//		custom_project_name = "副主任医师"
//		allPrice = 10
//
//		break
//	case 4:
//		custom_code = "0"
//		custom_project_name = "免受诊金"
//		allPrice = 0
//		break
//	case 5:
//		custom_code = "110200002-1"
//		custom_project_name = "专家"
//		allPrice = 10
//
//		break
//	}
//
//	if his.ID == 0 {
//
//		var doctor_name string
//		var doctor_code string
//		if adminRole.ID == 0 {
//
//			doctor_name = ""
//			doctor_code = "1001"
//			doctor_name = ""
//			doctor_code = ""
//
//		} else {
//			doctor_name = adminRole.UserName
//			doctor_code = strconv.FormatInt(admin_user_id, 10)
//
//		}
//		month := time.Unix(1557042972, 0).Format("1")
//		year := time.Now().Format("2006")
//		month = time.Now().Format("01")
//		day := time.Now().Format("02")
//
//		//流水号
//		//
//		number := miConfig.Code + year + month + day +
//			fmt.Sprintf("%07v", rand.New(rand.NewSource(time.Now().UnixNano())).Int31n(10000000)) // 定点协议机构编码（5位）+日期（8位）+流水号（7位）
//		mz_number := year + month + day + strconv.FormatInt(patient_id, 10) +
//			fmt.Sprintf("%07v", rand.New(rand.NewSource(time.Now().UnixNano())).Int31n(10000000))
//		//1.判断读卡类型
//		//2.读卡 获取交易验证码，医疗证号，发卡地区行政区划代码
//		yiliao_number, id_card_number, verifyCode, version_code, _, ret4 := ReadBasCardGetNumber("MZ002" + "|" + number + "|" + miConfig.Code + "|")
//		fmt.Println(yiliao_number)
//		fmt.Println(id_card_number)
//		fmt.Println(verifyCode)
//		fmt.Println(version_code)
//		fmt.Println(ret4)
//
//		dept_code := "0305"
//		is_yidi = 1
//		tempPatient, _ := service.GetPatientByNumber(id_card_number, adminInfo.CurrentOrgId)
//		//根据业务的人员信息跟设备读社保卡获取的信息进行匹配，判断是否为同一个人，相同则进行挂号操作，不同则报错
//		if tempPatient.ID == patient_id {
//			if ret4 == 0 { //本地卡流程
//				if is_yidi == 1 {
//					//本地就医流程
//					//挂号
//					resp_result := service.SzybMZ002(doctor_name, doctor_code, miConfig.Code, dept_code, yiliao_number, verifyCode, number, mz_number, version_code, custom_code, custom_project_name, allPrice, medical_care)
//					var dat map[string]interface{}
//					if err := json.Unmarshal([]byte(resp_result), &dat); err == nil {
//						fmt.Println(dat)
//					} else {
//						fmt.Println(err)
//					}
//					userJSONBytes, _ := json.Marshal(dat)
//					var res ResultOne
//					if err := json.Unmarshal(userJSONBytes, &res); err != nil {
//						utils.ErrorLog("解析失败：%v", err)
//						c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
//						return
//					}
//					if res.Transreturncode == "00000000" {
//						his := models.VMHisPatient{
//							Name:                   name,
//							Gender:                 gender,
//							Birthday:               birthUnix,
//							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,
//							Status:                 1,
//							Ctime:                  time.Now().Unix(),
//							Mtime:                  time.Now().Unix(),
//							Iinfo:                  resp_result,
//							PatientId:              patient.ID,
//							RecordDate:             theTime.Unix(),
//							UserOrgId:              adminInfo.CurrentOrgId,
//							AdminUserId:            admin_user_id,
//							IsReturn:               1,
//							IdCardType:             id_card_type,
//							Doctor:                 doctor,
//							Departments:            department,
//							YiliaoNumber:           yiliao_number,
//							MzNumber:               number,
//							Number:                 mz_number,
//						}
//						service.CreateHisPatientTwo(&his)
//						c.ServeSuccessJSON(map[string]interface{}{
//							"msg": "挂号成功",
//						})
//					} else {
//						c.ServeSuccessJSON(map[string]interface{}{
//							"failed_code": -10,
//							"msg":         res.Transreturnmessage,
//						})
//						return
//					}
//
//				} else {
//					//异地就医流程
//					//异地走鉴权流程
//					//authResult := CardAuth(number)
//					//fmt.Println(authResult)
//
//					//tempPatient, _ := service.GetPatientByNumber(id_card_number, adminInfo.CurrentOrgId)
//					//if tempPatient.ID == patient_id {
//					resp_result := service.SzybMZ002(doctor_name, doctor_code, miConfig.Code, "0305", yiliao_number, verifyCode, number, mz_number, version_code, custom_code, custom_project_name, allPrice)
//					var dat map[string]interface{}
//					if err := json.Unmarshal([]byte(resp_result), &dat); err == nil {
//						fmt.Println(dat)
//					} else {
//						fmt.Println(err)
//					}
//
//					userJSONBytes, _ := json.Marshal(dat)
//
//					var res ResultOne
//					if err := json.Unmarshal(userJSONBytes, &res); err != nil {
//						utils.ErrorLog("解析失败：%v", err)
//						c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
//						return
//					}
//					if res.Transreturncode == "00000000" {
//						his := models.VMHisPatient{
//							Name:                   name,
//							Gender:                 gender,
//							Birthday:               birthUnix,
//							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,
//							Status:                 1,
//							Ctime:                  time.Now().Unix(),
//							Mtime:                  time.Now().Unix(),
//							Iinfo:                  resp_result,
//							PatientId:              patient.ID,
//							RecordDate:             theTime.Unix(),
//							UserOrgId:              adminInfo.CurrentOrgId,
//							AdminUserId:            admin_user_id,
//							IsReturn:               1,
//							IdCardType:             id_card_type,
//							Doctor:                 doctor,
//							Departments:            department,
//							YiliaoNumber:           yiliao_number,
//							MzNumber:               number,
//							Number:                 mz_number,
//						}
//						service.CreateHisPatientTwo(&his)
//						c.ServeSuccessJSON(map[string]interface{}{
//							"msg": "挂号成功",
//						})
//					} else {
//						c.ServeSuccessJSON(map[string]interface{}{
//							"failed_code": -10,
//							"msg":         res.Transreturnmessage,
//						})
//						return
//					}
//
//				}
//
//			} else { //异地卡流程
//				//readCardBasResult := ReadCardBasHSM(number)
//				//fmt.Println(readCardBasResult)
//				//是否异地就医，是的话走鉴权流程，不是的话走门诊挂号
//				if is_yidi == 1 { //1本地就医
//					resp_result := service.SzybMZ002(doctor_name, doctor_code, miConfig.Code, "0305", yiliao_number, verifyCode, number, mz_number, version_code, custom_code, custom_project_name, allPrice)
//					var dat map[string]interface{}
//					if err := json.Unmarshal([]byte(resp_result), &dat); err == nil {
//						fmt.Println(dat)
//					} else {
//						fmt.Println(err)
//					}
//
//					userJSONBytes, _ := json.Marshal(dat)
//
//					var res ResultOne
//					if err := json.Unmarshal(userJSONBytes, &res); err != nil {
//						utils.ErrorLog("解析失败：%v", err)
//						c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
//						return
//					}
//					if res.Transreturncode == "00000000" {
//						his := models.VMHisPatient{
//							Name:                   name,
//							Gender:                 gender,
//							Birthday:               birthUnix,
//							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,
//							Status:                 1,
//							Ctime:                  time.Now().Unix(),
//							Mtime:                  time.Now().Unix(),
//							Iinfo:                  resp_result,
//							PatientId:              patient.ID,
//							RecordDate:             theTime.Unix(),
//							UserOrgId:              adminInfo.CurrentOrgId,
//							AdminUserId:            admin_user_id,
//							IsReturn:               1,
//							IdCardType:             id_card_type,
//							Doctor:                 doctor,
//							Departments:            department,
//							YiliaoNumber:           yiliao_number,
//							MzNumber:               number,
//							Number:                 mz_number,
//						}
//						service.CreateHisPatientTwo(&his)
//						c.ServeSuccessJSON(map[string]interface{}{
//							"msg": "挂号成功",
//						})
//					} else {
//						c.ServeSuccessJSON(map[string]interface{}{
//							"failed_code": -10,
//							"msg":         res.Transreturnmessage,
//						})
//						return
//					}
//
//				} else { //异地就医需要走鉴权流程
//					//authResult := CardAuth(number)
//					//fmt.Println(authResult)
//					resp_result := service.SzybMZ002(doctor_name, doctor_code, miConfig.Code, "0305", yiliao_number, verifyCode, number, mz_number, version_code, custom_code, custom_project_name, allPrice)
//					var dat map[string]interface{}
//					if err := json.Unmarshal([]byte(resp_result), &dat); err == nil {
//						fmt.Println(dat)
//					} else {
//						fmt.Println(err)
//					}
//
//					userJSONBytes, _ := json.Marshal(dat)
//
//					var res ResultOne
//					if err := json.Unmarshal(userJSONBytes, &res); err != nil {
//						utils.ErrorLog("解析失败：%v", err)
//						c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
//						return
//					}
//					if res.Transreturncode == "00000000" {
//						his := models.VMHisPatient{
//							Name:                   name,
//							Gender:                 gender,
//							Birthday:               birthUnix,
//							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,
//							Status:                 1,
//							Ctime:                  time.Now().Unix(),
//							Mtime:                  time.Now().Unix(),
//							Iinfo:                  resp_result,
//							PatientId:              patient.ID,
//							RecordDate:             theTime.Unix(),
//							UserOrgId:              adminInfo.CurrentOrgId,
//							AdminUserId:            admin_user_id,
//							IsReturn:               1,
//							IdCardType:             id_card_type,
//							Doctor:                 doctor,
//							Departments:            department,
//							YiliaoNumber:           yiliao_number,
//							MzNumber:               number,
//							Number:                 mz_number,
//						}
//						service.CreateHisPatientTwo(&his)
//						c.ServeSuccessJSON(map[string]interface{}{
//							"msg": "挂号成功",
//						})
//					} else {
//						c.ServeSuccessJSON(map[string]interface{}{
//							"failed_code": -10,
//							"msg":         res.Transreturnmessage,
//						})
//						return
//					}
//
//				}
//			}
//		} else {
//			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeNoPateintException)
//			return
//		}
//	} else {
//		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeRegisterRepeatException)
//		return
//	}
//}

//func (c *SZHisApiController) GetRegisterInfo() {
//	adminInfo := c.GetAdminUserInfo()
//	miConfig, _ := service.FindMedicalInsuranceInfo(adminInfo.CurrentOrgId)
//	month := time.Unix(1557042972, 0).Format("1")
//	year := time.Now().Format("2006")
//	month = time.Now().Format("01")
//	day := time.Now().Format("02")
//	//流水号
//	number := miConfig.Code + year + month + day +
//		fmt.Sprintf("%07v", rand.New(rand.NewSource(time.Now().UnixNano())).Int31n(10000000)) // 定点协议机构编码（5位）+日期（8位）+流水号（7位）
//	//1.判断读卡类型
//	//2.读卡 获取交易验证码，医疗证号，发卡地区行政区划代码
//	yiliao_number, _, verifyCode, version_code, _, _, _ := ReadBasCardGetNumber("XX001" + "|" + number + "|" + miConfig.Code + "|")
//	fmt.Println(result)
//
//}

func (c *SZHisApiController) RefundNumber() {
	record_time := c.GetString("record_time")
	//patient_id, _ := c.GetInt64("patient_id")
	his_patient_id, _ := c.GetInt64("his_patient_id")

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

	his, _ := service.GetNewHisPatientInfo(adminUser.CurrentOrgId, his_patient_id, theTime.Unix())
	roles, _ := service.GetAdminUserInfoByID(adminUser.CurrentOrgId, admin_user_id)
	miConfig, _ := service.FindMedicalInsuranceInfo(adminUser.CurrentOrgId)
	//结算流程
	var doctor_name string
	var doctor_code string
	if roles.ID == 0 {
		doctor_name = "管理员"
		doctor_code = "01"
	} else {
		doctor_name = roles.UserName
		doctor_code = strconv.FormatInt(admin_user_id, 10)

	}
	month := time.Unix(1557042972, 0).Format("1")
	year := time.Now().Format("2006")
	month = time.Now().Format("01")
	day := time.Now().Format("02")
	//number := miConfig.Code  + year + month + day + "1367866"
	number := miConfig.Code + year + month + day +
		fmt.Sprintf("%07v", rand.New(rand.NewSource(time.Now().UnixNano())).Int31n(10000000)) // 定点协议机构编码（5位）+日期（8位）+流水号（7位）
	//number := miConfig.Code + year + month + day + "1590003"

	//流水号
	//number_two := miConfig.Code + "-" + year + month + day + "-" + strconv.FormatInt(patient_id, 10)
	verifyCode, version_code := ReadCardGetCode("JY002" + "|" + number + "|" + miConfig.Code)
	config, _ := service.GetMedicalInsuranceConfig(adminUser.CurrentOrgId)
	if config.IsOpen == 1 { //对接了医保，走医保流程
		result := service.SzybJY002(doctor_name, doctor_code, miConfig.Code, his.MzNumber, his.Number, verifyCode, number, version_code)
		var dat map[string]interface{}
		if err := json.Unmarshal([]byte(result), &dat); err == nil {
			fmt.Println(dat)
		} else {
			fmt.Println(err)
		}
		userJSONBytes, _ := json.Marshal(dat)
		var res ResultThree
		if err := json.Unmarshal(userJSONBytes, &res); err != nil {
			utils.ErrorLog("解析失败：%v", err)
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
			return
		}
		if res.Transreturncode == "00000000" {
			service.UpdataHisStatusSZ(adminUser.CurrentOrgId, his.MzNumber, his.Number, result, his_patient_id)
			c.ServeSuccessJSON(map[string]interface{}{
				"msg": "退号成功",
			})
		} else {
			c.ServeSuccessJSON(map[string]interface{}{
				"failed_code": -10,
				"msg":         res.Transreturnmessage,
			})

		}
	}

}

//func (c *SZHisApiController) GetRegisterInfo() {
//	adminInfo := c.GetAdminUserInfo()
//	admin_user_id, _ := c.GetInt64("admin_user_id")
//	patient_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")
//	id_card := c.GetString("id_card")
//	register_type, _ := c.GetInt64("register")
//	doctor, _ := c.GetInt64("doctor")
//	department, _ := c.GetInt64("department")
//	gender, _ := c.GetInt64("sex")
//	registration_fee, _ := c.GetFloat("registration_fee")
//	medical_expenses, _ := c.GetFloat("medical_expenses")
//	social_type, _ := c.GetInt64("social_type")
//
//	is_yidi, _ := c.GetInt64("is_yidi")
//
//	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
//	}
//
//	var patient service.Patients
//	if patient_id == 0 {
//		patient, _ = service.GetPatientByIDCard(id_card, adminInfo.CurrentOrgId)
//	} else {
//		patient, _ = service.GetPatientByIDTwo(adminInfo.CurrentOrgId, patient_id)
//	}
//
//	miConfig, _ := service.FindMedicalInsuranceInfo(adminInfo.CurrentOrgId)
//	if patient.ID == 0 {
//		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodePatientNoExist)
//		return
//	}
//	if len(patient.IdCardNo) == 0 {
//		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeIDCartNo)
//		return
//	}
//
//	adminRole, _ := service.GetAdminUserInfoByID(adminInfo.CurrentOrgId, admin_user_id)
//	his, _ := service.GetHisPatientInfo(adminInfo.CurrentOrgId, patient_id, theTime.Unix())
//
//	var custom_code string
//	var custom_project_name string
//	var allPrice float64
//
//	switch register_type {
//	case 1:
//		custom_code = "110100002"
//		custom_project_name = "普通门诊"
//		allPrice = 10
//		break
//	case 3:
//		custom_code = "110200002-2"
//		custom_project_name = "主任医师"
//		allPrice = 10
//
//		break
//	case 2:
//		custom_code = "110200002-3"
//		custom_project_name = "副主任医师"
//		allPrice = 10
//
//		break
//	case 4:
//		custom_code = "0"
//		custom_project_name = "免受诊金"
//		allPrice = 0
//		break
//	case 5:
//		custom_code = "110200002-1"
//		custom_project_name = "专家"
//		allPrice = 10
//
//		break
//	}
//
//	if his.ID == 0 {
//
//		var doctor_name string
//		var doctor_code string
//		if adminRole.ID == 0 {
//
//			doctor_name = "管理员"
//			doctor_code = "01"
//
//		} else {
//			doctor_name = adminRole.UserName
//			doctor_code = strconv.FormatInt(admin_user_id, 10)
//
//		}
//		month := time.Unix(1557042972, 0).Format("1")
//		year := time.Now().Format("2006")
//		month = time.Now().Format("01")
//		day := time.Now().Format("02")
//
//		//流水号
//		//
//		number := miConfig.Code + year + month + day +
//			fmt.Sprintf("%07v", rand.New(rand.NewSource(time.Now().UnixNano())).Int31n(10000000)) // 定点协议机构编码（5位）+日期（8位）+流水号（7位）
//		mz_number := miConfig.Code + year + month + day +
//			fmt.Sprintf("%07v", rand.New(rand.NewSource(time.Now().UnixNano())).Int31n(10000000))
//		//1.判断读卡类型
//		//2.读卡 获取交易验证码，医疗证号，发卡地区行政区划代码
//		yiliao_number, id_card_number, verifyCode, version_code, _, ret4 := ReadBasCardGetNumber("MZ002" + "|" + number + "|" + miConfig.Code + "|")
//		fmt.Println(yiliao_number)
//		fmt.Println(id_card_number)
//		fmt.Println(verifyCode)
//		fmt.Println(version_code)
//		fmt.Println(ret4)
//
//		dept_code := "0306"
//		is_yidi = 1
//		tempPatient, _ := service.GetPatientByNumber(id_card_number, adminInfo.CurrentOrgId)
//		//根据业务的人员信息跟设备读社保卡获取的信息进行匹配，判断是否为同一个人，相同则进行挂号操作，不同则报错
//		fmt.Println(tempPatient.ID)
//		fmt.Println(patient_id)
//
//		if tempPatient.ID == patient_id {
//			if ret4 == 0 { //本地卡流程
//				if is_yidi == 1 {
//					//本地就医流程
//					//挂号
//					resp_result := service.SzybMZ002(doctor_name, doctor_code, miConfig.Code, dept_code, yiliao_number, verifyCode, number, mz_number, version_code, custom_code, custom_project_name, allPrice, medical_care)
//					var dat map[string]interface{}
//					if err := json.Unmarshal([]byte(resp_result), &dat); err == nil {
//						fmt.Println(dat)
//					} else {
//						fmt.Println(err)
//					}
//					userJSONBytes, _ := json.Marshal(dat)
//					var res ResultOne
//					if err := json.Unmarshal(userJSONBytes, &res); err != nil {
//						utils.ErrorLog("解析失败：%v", err)
//						c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
//						return
//					}
//					if res.Transreturncode == "00000000" {
//						his := models.VMHisPatient{
//							Name:                   name,
//							Gender:                 gender,
//							Birthday:               birthUnix,
//							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,
//							Status:                 1,
//							Ctime:                  time.Now().Unix(),
//							Mtime:                  time.Now().Unix(),
//							Iinfo:                  resp_result,
//							PatientId:              patient.ID,
//							RecordDate:             theTime.Unix(),
//							UserOrgId:              adminInfo.CurrentOrgId,
//							AdminUserId:            admin_user_id,
//							IsReturn:               1,
//							IdCardType:             id_card_type,
//							Doctor:                 doctor,
//							Departments:            department,
//							YiliaoNumber:           yiliao_number,
//							MzNumber:               number,
//							Number:                 mz_number,
//						}
//						service.CreateHisPatientTwo(&his)
//						c.ServeSuccessJSON(map[string]interface{}{
//							"msg": "挂号成功",
//						})
//					} else {
//						c.ServeSuccessJSON(map[string]interface{}{
//							"failed_code": -10,
//							"msg":         res.Transreturnmessage,
//						})
//						return
//					}
//
//				} else {
//					//异地就医流程
//					//异地走鉴权流程
//					//authResult := CardAuth(number)
//					//fmt.Println(authResult)
//
//					//tempPatient, _ := service.GetPatientByNumber(id_card_number, adminInfo.CurrentOrgId)
//					//if tempPatient.ID == patient_id {
//					resp_result := service.SzybMZ002(doctor_name, doctor_code, miConfig.Code, "0305", yiliao_number, verifyCode, number, mz_number, version_code, custom_code, custom_project_name, allPrice, medical_care)
//					var dat map[string]interface{}
//					if err := json.Unmarshal([]byte(resp_result), &dat); err == nil {
//						fmt.Println(dat)
//					} else {
//						fmt.Println(err)
//					}
//
//					userJSONBytes, _ := json.Marshal(dat)
//
//					var res ResultOne
//					if err := json.Unmarshal(userJSONBytes, &res); err != nil {
//						utils.ErrorLog("解析失败：%v", err)
//						c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
//						return
//					}
//					if res.Transreturncode == "00000000" {
//						his := models.VMHisPatient{
//							Name:                   name,
//							Gender:                 gender,
//							Birthday:               birthUnix,
//							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,
//							Status:                 1,
//							Ctime:                  time.Now().Unix(),
//							Mtime:                  time.Now().Unix(),
//							Iinfo:                  resp_result,
//							PatientId:              patient.ID,
//							RecordDate:             theTime.Unix(),
//							UserOrgId:              adminInfo.CurrentOrgId,
//							AdminUserId:            admin_user_id,
//							IsReturn:               1,
//							IdCardType:             id_card_type,
//							Doctor:                 doctor,
//							Departments:            department,
//							YiliaoNumber:           yiliao_number,
//							MzNumber:               number,
//							Number:                 mz_number,
//						}
//						service.CreateHisPatientTwo(&his)
//						c.ServeSuccessJSON(map[string]interface{}{
//							"msg": "挂号成功",
//						})
//					} else {
//						c.ServeSuccessJSON(map[string]interface{}{
//							"failed_code": -10,
//							"msg":         res.Transreturnmessage,
//						})
//						return
//					}
//
//				}
//
//			} else { //异地卡流程
//				//readCardBasResult := ReadCardBasHSM(number)
//				//fmt.Println(readCardBasResult)
//				//是否异地就医，是的话走鉴权流程，不是的话走门诊挂号
//				if is_yidi == 1 { //1本地就医
//					resp_result := service.SzybMZ002(doctor_name, doctor_code, miConfig.Code, "0305", yiliao_number, verifyCode, number, mz_number, version_code, custom_code, custom_project_name, allPrice, medical_care)
//					var dat map[string]interface{}
//					if err := json.Unmarshal([]byte(resp_result), &dat); err == nil {
//						fmt.Println(dat)
//					} else {
//						fmt.Println(err)
//					}
//
//					userJSONBytes, _ := json.Marshal(dat)
//
//					var res ResultOne
//					if err := json.Unmarshal(userJSONBytes, &res); err != nil {
//						utils.ErrorLog("解析失败：%v", err)
//						c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
//						return
//					}
//					if res.Transreturncode == "00000000" {
//						his := models.VMHisPatient{
//							Name:                   name,
//							Gender:                 gender,
//							Birthday:               birthUnix,
//							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,
//							Status:                 1,
//							Ctime:                  time.Now().Unix(),
//							Mtime:                  time.Now().Unix(),
//							Iinfo:                  resp_result,
//							PatientId:              patient.ID,
//							RecordDate:             theTime.Unix(),
//							UserOrgId:              adminInfo.CurrentOrgId,
//							AdminUserId:            admin_user_id,
//							IsReturn:               1,
//							IdCardType:             id_card_type,
//							Doctor:                 doctor,
//							Departments:            department,
//							YiliaoNumber:           yiliao_number,
//							MzNumber:               number,
//							Number:                 mz_number,
//						}
//						service.CreateHisPatientTwo(&his)
//						c.ServeSuccessJSON(map[string]interface{}{
//							"msg": "挂号成功",
//						})
//					} else {
//						c.ServeSuccessJSON(map[string]interface{}{
//							"failed_code": -10,
//							"msg":         res.Transreturnmessage,
//						})
//						return
//					}
//
//				} else { //异地就医需要走鉴权流程
//					//authResult := CardAuth(number)
//					//fmt.Println(authResult)
//					resp_result := service.SzybMZ002(doctor_name, doctor_code, miConfig.Code, "0305", yiliao_number, verifyCode, number, mz_number, version_code, custom_code, custom_project_name, allPrice, medical_care)
//					var dat map[string]interface{}
//					if err := json.Unmarshal([]byte(resp_result), &dat); err == nil {
//						fmt.Println(dat)
//					} else {
//						fmt.Println(err)
//					}
//
//					userJSONBytes, _ := json.Marshal(dat)
//
//					var res ResultOne
//					if err := json.Unmarshal(userJSONBytes, &res); err != nil {
//						utils.ErrorLog("解析失败：%v", err)
//						c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
//						return
//					}
//					if res.Transreturncode == "00000000" {
//						his := models.VMHisPatient{
//							Name:                   name,
//							Gender:                 gender,
//							Birthday:               birthUnix,
//							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,
//							Status:                 1,
//							Ctime:                  time.Now().Unix(),
//							Mtime:                  time.Now().Unix(),
//							Iinfo:                  resp_result,
//							PatientId:              patient.ID,
//							RecordDate:             theTime.Unix(),
//							UserOrgId:              adminInfo.CurrentOrgId,
//							AdminUserId:            admin_user_id,
//							IsReturn:               1,
//							IdCardType:             id_card_type,
//							Doctor:                 doctor,
//							Departments:            department,
//							YiliaoNumber:           yiliao_number,
//							MzNumber:               number,
//							Number:                 mz_number,
//						}
//						service.CreateHisPatientTwo(&his)
//						c.ServeSuccessJSON(map[string]interface{}{
//							"msg": "挂号成功",
//						})
//					} else {
//						c.ServeSuccessJSON(map[string]interface{}{
//							"failed_code": -10,
//							"msg":         res.Transreturnmessage,
//						})
//						return
//					}
//
//				}
//			}
//		} else {
//			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeNoPateintException)
//			return
//		}
//	} else {
//		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeRegisterRepeatException)
//		return
//	}
//}q

//上传明细----结算----确认订单
func (c *SZHisApiController) GetSettleInfo() {

	pay_way, _ := c.GetInt64("pay_way")
	pay_price, _ := c.GetFloat("pay_price")
	pay_card_no := c.GetString("pay_card_no")
	discount_price, _ := c.GetFloat("discount_price")
	preferential_price, _ := c.GetFloat("preferential_price")
	reality_price, _ := c.GetFloat("reality_price")
	found_price, _ := c.GetFloat("found_price")
	medical_insurance_price, _ := c.GetFloat("medical_insurance_price")
	private_price, _ := c.GetFloat("private_price")
	settle_accounts_type, _ := c.GetInt64("settle_accounts_type")
	patient_id, _ := c.GetInt64("id")
	record_time := c.GetString("record_time")
	admin_user_id, _ := c.GetInt64("admin_user_id")
	his_patient_id, _ := c.GetInt64("his_patient_id")

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

	order_id, _ := c.GetInt64("order_id")

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

	timestamp := time.Now().Unix()
	tempTime := time.Unix(timestamp, 0)
	timeFormat := tempTime.Format("20060102150405")
	chrgBchno := rand.Intn(10000) + 1000
	chrg_bchno := timeFormat + strconv.FormatInt(int64(chrgBchno), 10) + strconv.FormatInt(1, 10)
	adminUser := c.GetAdminUserInfo()
	miConfig, _ := service.FindMedicalInsuranceInfo(adminUser.CurrentOrgId)
	month := time.Unix(1557042972, 0).Format("1")
	year := time.Now().Format("2006")
	month = time.Now().Format("01")
	day := time.Now().Format("02")

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

	his, err := service.GetNewHisPatientInfo(adminUser.CurrentOrgId, his_patient_id, recordDateTime)

	//tempOrder, _ := service.GetNewHisOrderThree(or)

	tempOrder, _ := service.GetHisOrderByID(order_id)

	if tempOrder.ID == 0 {

		var prescriptions []*models.HisPrescription

		var start_time int64
		var end_time int64

		if settle_accounts_type == 1 { //日结
			if reg_type == 11 {

				prescriptions, _ = service.GetPrescriptionByIds(ids_arr, adminUser.CurrentOrgId)
			} else {
				prescriptions, _ = service.GetNewHisPrescription(adminUser.CurrentOrgId, his_patient_id, recordDateTime, strconv.Itoa(int(reg_type)))
			}

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

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

			prescriptions, _ = service.GetMonthHisPrescriptionTwo(adminUser.CurrentOrgId, patient_id, recordStartTime, recordEndTime, his.MedicalTreatmentType)
		}

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

		patientPrescription, _ := service.FindHisPatientPrescriptionInfo(adminUser.CurrentOrgId, his_patient_id, recordDateTime)

		sick, _ := service.FindSickById(sick_type)

		if sick.ID == 0 {
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamSickTypeWrong)
			return
		}

		adminRole_two, _ := service.GetAdminUserInfoByID(adminUser.CurrentOrgId, patientPrescription.DoctorId)

		adminRole, _ := service.GetAdminUserInfoByID(adminUser.CurrentOrgId, admin_user_id)
		mz_number := his.Number
		number := miConfig.Code + year + month + day +
			fmt.Sprintf("%07v", rand.New(rand.NewSource(time.Now().UnixNano())).Int31n(10000000)) // 定点协议机构编码（5位）+日期（8位）+流水号（7位）
		var doctor_name string
		var doctor_code string
		var drug_doctor_code string
		drug_doctor_code = adminRole_two.DoctorCode
		drug_doctor_name := adminRole_two.UserName

		if adminRole.ID == 0 {
			doctor_name = "管理员"
			doctor_code = "01"
		} else {
			doctor_name = adminRole.UserName
			doctor_code = strconv.FormatInt(admin_user_id, 10)
		}

		verifyCode, version_code := ReadCardGetCode("FY001" + "|" + number + "|" + miConfig.Code)
		//verifyCode := "000000|bf885fa312a7f92861d6b61542a637fa"
		//version_code := "V0.3"
		var customs []*models.CustomDetail
		for _, item := range prescriptions {
			if item.Type == 1 { //药品
				for _, subItem := range item.HisDoctorAdviceInfo {
					fmt.Println(subItem.BaseDrugLib.MedicalInsuranceNumber)

					if len(subItem.BaseDrugLib.MedicalInsuranceNumber) > 0 {
						_, dose_code := service.GetDoseCode(subItem.BaseDrugLib.DrugDosageForm, adminUser.CurrentOrgId)
						detItemFeeSumamt, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", subItem.Price*subItem.PrescribingNumber), 64)
						price, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", subItem.Price), 64)
						temp := strings.Split(subItem.FeedetlSn, "-")
						newFl := fmt.Sprintf("%07v", rand.New(rand.NewSource(time.Now().UnixNano())).Int31n(10000000)) + "-" + temp[1] + "-" + temp[2]
						fmt.Println(111111111)
						fmt.Println(subItem.BaseDrugLib.Code)
						fmt.Println(222222222)
						cus := &models.CustomDetail{
							PrescriptionNumber: chrg_bchno,
							OrderType:          "1",
							ChargeSerialNumber: newFl,
							Code:               subItem.BaseDrugLib.MedicalInsuranceNumber,
							CodeName:           subItem.BaseDrugLib.DrugName,
							BwCode:             subItem.BaseDrugLib.Code,
							Flag:               "1",
							Price:              price,
							Count:              subItem.PrescribingNumber,
							ChargeOrderDate:    year + month + day,
							DoctorCode:         doctor_code,
							Total:              detItemFeeSumamt,
							DoseCode:           dose_code,
							Spec:               strconv.Itoa(int(subItem.BaseDrugLib.MinNumber)) + subItem.BaseDrugLib.MinUnit + ":" + fmt.Sprintf("%.2f", subItem.BaseDrugLib.Dose) + subItem.BaseDrugLib.DoseUnit,
							Unit:               subItem.PrescribingNumberUnit,
						}
						customs = append(customs, cus)
					}
				}
			}

			if item.Type == 2 { //项目
				for _, subItem := range item.HisPrescriptionProject {
					if len(subItem.HisProject.MedicalCode) > 0 {

						detItemFeeSumamt, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", subItem.Price*float64(subItem.Count)), 64)

						//count, _ := strconv.ParseFloat(fmt.Sprintf("%f", subItem.Count), 64)

						count, _ := strconv.ParseFloat(strconv.FormatInt(subItem.Count, 10), 64)
						temp := strings.Split(subItem.FeedetlSn, "-")
						newFl := fmt.Sprintf("%07v", rand.New(rand.NewSource(time.Now().UnixNano())).Int31n(10000000)) + "-" + temp[1] + "-" + temp[2]
						if subItem.Type == 2 {

							cus := &models.CustomDetail{
								PrescriptionNumber: chrg_bchno,
								OrderType:          "1",
								ChargeSerialNumber: newFl,
								Code:               subItem.HisProject.MedicalCode,
								BwCode:             subItem.HisProject.MedicalCode,
								CodeName:           subItem.HisProject.ProjectName,
								Flag:               "1",
								Price:              subItem.Price,
								Count:              count,
								ChargeOrderDate:    year + month + day,
								DoctorCode:         doctor_code,
								Total:              detItemFeeSumamt,
								DoseCode:           "",
								Spec:               "次",
								Unit:               "次",
							}
							customs = append(customs, cus)

						}

					}
					if len(subItem.GoodInfo.MedicalInsuranceNumber) > 0 {

						detItemFeeSumamt, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", subItem.Price*float64(subItem.Count)), 64)
						//count, _ := strconv.ParseFloat(fmt.Sprintf("%f", subItem.Count), 64)
						count, _ := strconv.ParseFloat(strconv.FormatInt(subItem.Count, 10), 64)
						temp := strings.Split(subItem.FeedetlSn, "-")
						newFl := fmt.Sprintf("%07v", rand.New(rand.NewSource(time.Now().UnixNano())).Int31n(10000000)) + "-" + temp[1] + "-" + temp[2]
						if subItem.Type == 3 {
							cus := &models.CustomDetail{
								PrescriptionNumber: chrg_bchno,
								OrderType:          "1",
								ChargeSerialNumber: newFl,
								Code:               subItem.GoodInfo.MedicalInsuranceNumber,
								CodeName:           subItem.GoodInfo.GoodName,
								BwCode:             subItem.GoodInfo.MedicalInsuranceNumber,
								Flag:               "1",
								Price:              subItem.Price,
								Count:              count,
								ChargeOrderDate:    year + month + day,
								DoctorCode:         doctor_code,
								Total:              detItemFeeSumamt,
								DoseCode:           "",
								Spec:               "支",
								Unit:               "支",
							}
							customs = append(customs, cus)

						}

					}

				}
			}
			//
			//for _, subItem := range item.HisAdditionalCharge {
			//	if len(subItem.XtHisAddtionConfig.Code) > 0 {
			//		detItemFeeSumamt, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", subItem.Price*float64(subItem.Count)), 64)
			//
			//		count, _ := strconv.ParseFloat(fmt.Sprintf("%f", subItem.Count), 64)
			//		cus := &models.CustomDetail{
			//			PrescriptionNumber: chrg_bchno,
			//			OrderType:          "1",
			//			ChargeSerialNumber: subItem.FeedetlSn,
			//			Code:               subItem.XtHisAddtionConfig.Code,
			//			CodeName:           subItem.XtHisAddtionConfig.Name,
			//			Flag:               "1",
			//			Price:              subItem.Price,
			//			Count:              count,
			//			ChargeOrderDate:    year + month + day,
			//			DoctorCode:         doctor_code,
			//			Total:              detItemFeeSumamt,
			//			DoseCode:           "",
			//			Spec:                subItem.XtHisAddtionConfig.,
			//		}
			//		customs = append(customs, cus)
			//	}
			//}
		}

		var pagesize int = 50
		var start int = 1
		var stop int
		var pagecount int
		var curpage int
		var isSuccess bool = true
		//总页数,向上取整,注意除之前要先转换类型为float64
		pagecount = int(math.Ceil(float64(len(customs)) / float64(pagesize)))

		var ress []*Result
		for curpage = 1; curpage <= pagecount; curpage++ {
			if curpage == 1 {
				start = 1
			} else {
				start = (curpage-1)*pagesize + 1
			}
			stop = curpage * pagesize
			if stop > len(customs) {
				stop = len(customs)
			}
			result := service.SzybFY001(doctor_name, doctor_code, miConfig.Code, customs[start-1:stop], verifyCode, number, mz_number, version_code, drug_doctor_code)
			fmt.Println(result)

			var dat map[string]interface{}
			if err := json.Unmarshal([]byte(result), &dat); err == nil {
				fmt.Println(dat)
			} else {
				fmt.Println(err)
			}

			userJSONBytes, _ := json.Marshal(dat)

			var res Result
			if err := json.Unmarshal(userJSONBytes, &res); err != nil {
				utils.ErrorLog("解析失败：%v", err)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}
			if res.Transreturncode == "00000000" {
				ress = append(ress, &res)
			} else {
				isSuccess = false
				errlog := &models.HisOrderError{
					UserOrgId:  adminUser.CurrentOrgId,
					Ctime:      time.Now().Unix(),
					Mtime:      time.Now().Unix(),
					Number:     chrg_bchno,
					ErrMsg:     res.Transreturnmessage,
					Status:     1,
					PatientId:  patient_id,
					RecordTime: recordDateTime,
					Stage:      4,
				}
				service.CreateErrMsgLog(errlog)
				c.ServeSuccessJSON(map[string]interface{}{
					"failed_code": -10,
					"msg":         res.Transreturnmessage,
				})
				return
			}
			//设置变量，根据变量的值来判断上传是否成功
		}
		if isSuccess == true {
			order := &models.HisOrder{
				UserOrgId:           adminUser.CurrentOrgId,
				HisPatientId:        0,
				PatientId:           patient_id,
				SettleAccountsDate:  recordDateTime,
				Ctime:               time.Now().Unix(),
				Mtime:               time.Now().Unix(),
				Status:              0,
				Number:              chrg_bchno,
				Infcode:             0,
				WarnMsg:             "",
				Cainfo:              "",
				ErrMsg:              "",
				RespondTime:         "",
				InfRefmsgid:         "",
				OrderStatus:         1,
				IsMedicineInsurance: 1,
				SettleType:          settle_accounts_type,
				SettleStartTime:     start_time,
				SettleEndTime:       end_time,
				Creator:             admin_user_id,
				Modify:              admin_user_id,
				OrgSetlNumber:       number,
				MdtrtId:             mz_number,
				PType:               2,
			}
			data, _ := json.Marshal(ress)
			order.DetailLog = string(data)

			err = service.CreateOrder(order)
			if err != nil {
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeCreatePreOrderException)
				return
			}

			for _, subItem := range ress {
				for _, item := range subItem.Transbody.Outputlist {

					temp := strings.Split(item.Bkf500, "-")
					var advice_id int64 = 0
					var project_id int64 = 0
					var types int64 = 0

					id, _ := strconv.ParseInt(temp[2], 10, 64)
					types, _ = strconv.ParseInt(temp[1], 10, 64)

					if temp[1] == "1" {
						advice_id = id
						project_id = 0
					} else if temp[1] == "2" {
						advice_id = 0
						project_id = id
					}

					info := &models.HisOrderInfo{
						OrderNumber:      order.Number,
						FeedetlSn:        item.Bkf500,
						UploadDate:       time.Now().Unix(),
						AdviceId:         advice_id,
						DetItemFeeSumamt: item.Akc264,
						Cnt:              item.Akc226,
						Pric:             float64(item.Akc225),
						PatientId:        patient_id,
						Status:           1,
						ChrgitmLv:        item.Aka065,
						Mtime:            time.Now().Unix(),
						Ctime:            time.Now().Unix(),
						UserOrgId:        adminUser.CurrentOrgId,
						OrderId:          order.ID,
						ProjectId:        project_id,
						Type:             types,

						OverPricPsnPay: item.Akc268,
						AllowReimburse: item.Cka319,
					}
					service.CreateOrderInfo(info)

				}
			}
			service.UpDatePrescriptionNumber(adminUser.CurrentOrgId, ids, chrg_bchno)
			service.UpDateHisPrescriptionInfoNumber(adminUser.CurrentOrgId, his_patient_id, chrg_bchno, recordDateTime)
			var total float64
			for _, item := range prescriptions {
				if item.Type == 1 { //药品
					for _, subItem := range item.HisDoctorAdviceInfo {
						total = total + (subItem.Price * subItem.PrescribingNumber)
					}
				}
				if item.Type == 2 { //项目
					for _, subItem := range item.HisPrescriptionProject {
						total = total + (subItem.Price * float64(subItem.Count))
					}
				}
			}
			for _, item := range prescriptions {
				for _, subItem := range item.HisAdditionalCharge {
					total = total + (subItem.Price * float64(subItem.Count))
				}
			}

			total, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", total), 64)

			new_number := miConfig.Code + year + month + day +
				fmt.Sprintf("%07v", rand.New(rand.NewSource(time.Now().UnixNano())).Int31n(10000000)) // 定点协议机构编码（5位）+日期（8位）+流水号（7位）

			yiliao_number, id_card_number, verifyCode, version_code, health_card_no, _, ret4 := ReadBasCardGetNumber("FY005" + "|" + new_number + "|" + miConfig.Code + "|")

			if ret4 == 0 {
				//根据业务的人员信息跟设备读社保卡获取的信息进行匹配，判断是否为同一个人，相同则进行挂号操作，不同则报错
				tempPatient, _ := service.GetPatientByNumber(id_card_number, adminUser.CurrentOrgId)
				if tempPatient.ID == patient_id {
					result_three := service.SzybFY005(doctor_name, doctor_code, miConfig.Code, total, yiliao_number, verifyCode, number, mz_number, version_code, drug_doctor_code, drug_doctor_name, reg_type, sick.CountryCode, new_number)
					var dat map[string]interface{}
					if err := json.Unmarshal([]byte(result_three), &dat); err == nil {
						fmt.Println(dat)
					} else {
						fmt.Println(err)
					}
					userJSONBytes, _ := json.Marshal(dat)
					var res ResultTwo
					if err := json.Unmarshal(userJSONBytes, &res); err != nil {
						utils.ErrorLog("解析失败：%v", err)
						c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
						return
					}

					if res.Transreturncode == "00000000" {
						order.OrderStatus = 2
						order.Status = 1
						order.PayWay = pay_way
						order.PayPrice = pay_price
						order.PayCardNo = pay_card_no
						order.PsnNo = health_card_no
						order.DiscountPrice = discount_price
						order.PreferentialPrice = preferential_price
						order.RealityPrice = reality_price
						order.FoundPrice = found_price
						order.MedicalInsurancePrice = medical_insurance_price
						order.PrivatePrice = private_price
						order.Modify = admin_user_id
						order.MedfeeSumamt = res.Transbody.Akc264
						order.SetlId = res.Transbody.Ckc618
						order.FundPaySumamt = res.Transbody.Akb068
						order.AcctPay = res.Transbody.Akb066
						order.PsnCashPay = res.Transbody.Akb067
						order.PsnPartAmt = res.Transbody.Akb067
						order.AccountPrice = res.Transbody.Aae240
						order.MedType = strconv.Itoa(int(reg_type))
						order.MzNumber = mz_number
						order.MdtrtId = mz_number
						order.YiliaoNumber = yiliao_number
						setlDetailOne, _ := json.Marshal(res.Transbody.Outputlist1)
						detailStrOne := string(setlDetailOne)
						order.SzChargeInfo = detailStrOne
						setlDetailTwo, _ := json.Marshal(res.Transbody.Outputlist2)
						detailStrTwo := string(setlDetailTwo)
						order.SzProjectInfo = detailStrTwo
						setlDetailThree, _ := json.Marshal(res.Transbody.Outputlist3)
						detailStrThree := string(setlDetailThree)
						order.SzMedicineInsuranceInfo = detailStrThree
						order.Cainfo = result_three
						err = service.UpdataOrderStatusTwo(order.Number, adminUser.CurrentOrgId)
						err = service.UpDateOrderTwo(order)
						c.ServeSuccessJSON(map[string]interface{}{
							"msg": "结算成功",
						})
					} else {
						//结算报错
						errlog := &models.HisOrderError{
							UserOrgId:  adminUser.CurrentOrgId,
							Ctime:      time.Now().Unix(),
							Mtime:      time.Now().Unix(),
							Number:     chrg_bchno,
							ErrMsg:     res.Transreturnmessage,
							Status:     1,
							PatientId:  patient_id,
							RecordTime: recordDateTime,
							Stage:      6,
						}
						service.CreateErrMsgLog(errlog)
						c.ServeSuccessJSON(map[string]interface{}{
							"failed_code": -10,
							"msg":         res.Transreturnmessage,
						})
					}
				} else {
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeNoPateintException)
					return
				}
			} else {
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeReadCardException)
				return
			}
		} else {
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodePreSettleFaildParamWrong)
			return
		}

	} else {
		if tempOrder.OrderStatus == 1 && tempOrder.IsPre == 1 {
			pay_way, _ := c.GetInt64("pay_way")
			pay_price, _ := c.GetFloat("pay_price")
			pay_card_no := c.GetString("pay_card_no")
			discount_price, _ := c.GetFloat("discount_price")
			preferential_price, _ := c.GetFloat("preferential_price")
			reality_price, _ := c.GetFloat("reality_price")
			found_price, _ := c.GetFloat("found_price")
			medical_insurance_price, _ := c.GetFloat("medical_insurance_price")
			private_price, _ := c.GetFloat("private_price")
			patient_id, _ := c.GetInt64("id")
			record_time := c.GetString("record_time")
			admin_user_id, _ := c.GetInt64("admin_user_id")
			order_id, _ := c.GetInt64("order_id")
			his_patient_id, _ := c.GetInt64("his_patient_id")

			timestamp := time.Now().Unix()
			tempTime := time.Unix(timestamp, 0)
			timeFormat := tempTime.Format("20060102150405")
			chrgBchno := rand.Intn(10000) + 1000
			chrg_bchno := timeFormat + strconv.FormatInt(int64(chrgBchno), 10) + strconv.FormatInt(1, 10)
			adminUser := c.GetAdminUserInfo()
			miConfig, _ := service.FindMedicalInsuranceInfo(adminUser.CurrentOrgId)
			month := time.Unix(1557042972, 0).Format("1")
			year := time.Now().Format("2006")
			month = time.Now().Format("01")
			day := time.Now().Format("02")

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

			patientPrescription, _ := service.FindHisPatientPrescriptionInfo(adminUser.CurrentOrgId, his_patient_id, recordDateTime)

			sick, _ := service.FindSickById(patientPrescription.SickType)

			if sick.ID == 0 {
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamSickTypeWrong)
				return
			}

			adminRole_two, _ := service.GetAdminUserInfoByID(adminUser.CurrentOrgId, patientPrescription.DoctorId)

			adminRole, _ := service.GetAdminUserInfoByID(adminUser.CurrentOrgId, admin_user_id)
			his, err := service.GetNewHisPatientInfo(adminUser.CurrentOrgId, his_patient_id, recordDateTime)
			mz_number := his.Number
			number := miConfig.Code + year + month + day +
				fmt.Sprintf("%07v", rand.New(rand.NewSource(time.Now().UnixNano())).Int31n(10000000)) // 定点协议机构编码（5位）+日期（8位）+流水号（7位）
			var doctor_name string
			var doctor_code string
			var drug_doctor_code string
			drug_doctor_code = adminRole_two.DoctorCode
			drug_doctor_name := adminRole_two.UserName

			if adminRole.ID == 0 {
				doctor_name = "管理员"
				doctor_code = "01"
			} else {
				doctor_name = adminRole.UserName
				doctor_code = strconv.FormatInt(admin_user_id, 10)
			}

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

			yiliao_number, id_card_number, verifyCode, version_code, health_card_no, _, ret4 := ReadBasCardGetNumber("FY005" + "|" + number + "|" + miConfig.Code + "|")
			if ret4 == 0 {
				//根据业务的人员信息跟设备读社保卡获取的信息进行匹配，判断是否为同一个人，相同则进行挂号操作，不同则报错
				tempPatient, _ := service.GetPatientByNumber(id_card_number, adminUser.CurrentOrgId)
				if tempPatient.ID == patient_id {
					result_three := service.SzybFY005(doctor_name, doctor_code, miConfig.Code, order.MedfeeSumamt, yiliao_number, verifyCode, order.OrgSetlNumber, mz_number, version_code, drug_doctor_code, drug_doctor_name, reg_type, sick.CountryCode, number)
					var dat map[string]interface{}
					if err := json.Unmarshal([]byte(result_three), &dat); err == nil {
						fmt.Println(dat)
					} else {
						fmt.Println(err)
					}
					userJSONBytes, _ := json.Marshal(dat)
					var res ResultTwo
					if err := json.Unmarshal(userJSONBytes, &res); err != nil {
						utils.ErrorLog("解析失败：%v", err)
						c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
						return
					}

					if res.Transreturncode == "00000000" {
						order.OrderStatus = 2
						order.Status = 1
						order.PayWay = pay_way
						order.PayPrice = pay_price
						order.PayCardNo = pay_card_no
						order.PsnNo = health_card_no
						order.DiscountPrice = discount_price
						order.PreferentialPrice = preferential_price
						order.RealityPrice = reality_price
						order.FoundPrice = found_price
						order.MedicalInsurancePrice = medical_insurance_price
						order.PrivatePrice = private_price
						order.Modify = admin_user_id
						order.MedfeeSumamt = res.Transbody.Akc264
						order.SetlId = res.Transbody.Ckc618
						order.FundPaySumamt = res.Transbody.Akb068
						order.AcctPay = res.Transbody.Akb066
						order.PsnCashPay = res.Transbody.Akb067
						order.PsnPartAmt = res.Transbody.Akb067
						order.AccountPrice = res.Transbody.Aae240
						order.MzNumber = mz_number
						order.YiliaoNumber = yiliao_number
						setlDetailOne, _ := json.Marshal(res.Transbody.Outputlist1)
						detailStrOne := string(setlDetailOne)
						order.SzChargeInfo = detailStrOne
						setlDetailTwo, _ := json.Marshal(res.Transbody.Outputlist2)
						detailStrTwo := string(setlDetailTwo)
						order.SzProjectInfo = detailStrTwo
						setlDetailThree, _ := json.Marshal(res.Transbody.Outputlist3)
						detailStrThree := string(setlDetailThree)
						order.SzMedicineInsuranceInfo = detailStrThree
						order.Cainfo = result_three
						err = service.UpdataOrderStatusTwo(order.Number, adminUser.CurrentOrgId)
						err = service.UpDateOrderTwo(&order)
						c.ServeSuccessJSON(map[string]interface{}{
							"msg": "结算成功",
						})
					} else {
						//结算报错
						errlog := &models.HisOrderError{
							UserOrgId:  adminUser.CurrentOrgId,
							Ctime:      time.Now().Unix(),
							Mtime:      time.Now().Unix(),
							Number:     chrg_bchno,
							ErrMsg:     res.Transreturnmessage,
							Status:     1,
							PatientId:  patient_id,
							RecordTime: recordDateTime,
							Stage:      6,
						}
						service.CreateErrMsgLog(errlog)
						c.ServeSuccessJSON(map[string]interface{}{
							"failed_code": -10,
							"msg":         res.Transreturnmessage,
						})
					}
				} else {
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeNoPateintException)
					return
				}
			} else {
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeReadCardException)
				return
			}

		} else {

			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeHisOrderNoExistParamWrong)
			return

		}

	}

}

//结算
//func (c *SZHisApiController) GetSettleInfo() {
//	pay_way, _ := c.GetInt64("pay_way")
//	pay_price, _ := c.GetFloat("pay_price")
//	pay_card_no := c.GetString("pay_card_no")
//	discount_price, _ := c.GetFloat("discount_price")
//	preferential_price, _ := c.GetFloat("preferential_price")
//	reality_price, _ := c.GetFloat("reality_price")
//	found_price, _ := c.GetFloat("found_price")
//	medical_insurance_price, _ := c.GetFloat("medical_insurance_price")
//	private_price, _ := c.GetFloat("private_price")
//	patient_id, _ := c.GetInt64("id")
//	record_time := c.GetString("record_time")
//	admin_user_id, _ := c.GetInt64("admin_user_id")
//	order_id, _ := c.GetInt64("order_id")
//	his_patient_id, _ := c.GetInt64("his_patient_id")
//
//	timestamp := time.Now().Unix()
//	tempTime := time.Unix(timestamp, 0)
//	timeFormat := tempTime.Format("20060102150405")
//	chrgBchno := rand.Intn(10000) + 1000
//	chrg_bchno := timeFormat + strconv.FormatInt(int64(chrgBchno), 10) + strconv.FormatInt(1, 10)
//	adminUser := c.GetAdminUserInfo()
//	miConfig, _ := service.FindMedicalInsuranceInfo(adminUser.CurrentOrgId)
//	month := time.Unix(1557042972, 0).Format("1")
//	year := time.Now().Format("2006")
//	month = time.Now().Format("01")
//	day := time.Now().Format("02")
//
//	timeLayout := "2006-01-02"
//	loc, _ := time.LoadLocation("Local")
//	theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", record_time+" 00:00:00", loc)
//	fmt.Println(err)
//	if err != nil {
//		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
//		return
//	}
//	recordDateTime := theTime.Unix()
//
//	patientPrescription, _ := service.FindHisPatientPrescriptionInfo(adminUser.CurrentOrgId, his_patient_id, recordDateTime)
//
//	sick, _ := service.FindSickById(patientPrescription.SickType)
//
//	if sick.ID == 0 {
//		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamSickTypeWrong)
//		return
//	}
//
//	adminRole_two, _ := service.GetAdminUserInfoByID(adminUser.CurrentOrgId, patientPrescription.DoctorId)
//
//	adminRole, _ := service.GetAdminUserInfoByID(adminUser.CurrentOrgId, admin_user_id)
//	his, err := service.GetNewHisPatientInfo(adminUser.CurrentOrgId, his_patient_id, recordDateTime)
//	mz_number := his.Number
//	number := miConfig.Code + year + month + day +
//		fmt.Sprintf("%07v", rand.New(rand.NewSource(time.Now().UnixNano())).Int31n(10000000)) // 定点协议机构编码（5位）+日期（8位）+流水号（7位）
//	var doctor_name string
//	var doctor_code string
//	var drug_doctor_code string
//	drug_doctor_code = adminRole_two.DoctorCode
//	drug_doctor_name := adminRole_two.UserName
//
//	if adminRole.ID == 0 {
//		doctor_name = "管理员"
//		doctor_code = "01"
//	} else {
//		doctor_name = adminRole.UserName
//		doctor_code = strconv.FormatInt(admin_user_id, 10)
//	}
//
//	order, _ := service.GetHisOrderByID(order_id)
//	if order.ID == 0 {
//		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeHisOrderNoExistParamWrong)
//		return
//	}
//
//	yiliao_number, id_card_number, verifyCode, version_code, health_card_no, _, ret4 := ReadBasCardGetNumber("FY005" + "|" + number + "|" + miConfig.Code + "|")
//	if ret4 == 0 {
//		//根据业务的人员信息跟设备读社保卡获取的信息进行匹配，判断是否为同一个人，相同则进行挂号操作，不同则报错
//		tempPatient, _ := service.GetPatientByNumber(id_card_number, adminUser.CurrentOrgId)
//		if tempPatient.ID == patient_id {
//			result_three := service.SzybFY005(doctor_name, doctor_code, miConfig.Code, order.MedfeeSumamt, yiliao_number, verifyCode, number, mz_number, version_code, drug_doctor_code, drug_doctor_name, his.MedicalTreatmentType, sick.CountryCode)
//			var dat map[string]interface{}
//			if err := json.Unmarshal([]byte(result_three), &dat); err == nil {
//				fmt.Println(dat)
//			} else {
//				fmt.Println(err)
//			}
//			userJSONBytes, _ := json.Marshal(dat)
//			var res ResultTwo
//			if err := json.Unmarshal(userJSONBytes, &res); err != nil {
//				utils.ErrorLog("解析失败：%v", err)
//				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
//				return
//			}
//
//			if res.Transreturncode == "00000000" {
//				order.OrderStatus = 2
//				order.Status = 1
//				order.PayWay = pay_way
//				order.PayPrice = pay_price
//				order.PayCardNo = pay_card_no
//				order.PsnNo = health_card_no
//				order.DiscountPrice = discount_price
//				order.PreferentialPrice = preferential_price
//				order.RealityPrice = reality_price
//				order.FoundPrice = found_price
//				order.MedicalInsurancePrice = medical_insurance_price
//				order.PrivatePrice = private_price
//				order.Modify = admin_user_id
//				order.MedfeeSumamt = res.Transbody.Akc264
//				order.SetlId = res.Transbody.Ckc618
//				order.FundPaySumamt = res.Transbody.Akb068
//				order.AcctPay = res.Transbody.Akb066
//				order.PsnCashPay = res.Transbody.Akb067
//				order.PsnPartAmt = res.Transbody.Akb067
//				order.AccountPrice = res.Transbody.Aae240
//				order.MzNumber = mz_number
//				order.YiliaoNumber = yiliao_number
//				setlDetailOne, _ := json.Marshal(res.Transbody.Outputlist1)
//				detailStrOne := string(setlDetailOne)
//				order.SzChargeInfo = detailStrOne
//				setlDetailTwo, _ := json.Marshal(res.Transbody.Outputlist2)
//				detailStrTwo := string(setlDetailTwo)
//				order.SzProjectInfo = detailStrTwo
//				setlDetailThree, _ := json.Marshal(res.Transbody.Outputlist3)
//				detailStrThree := string(setlDetailThree)
//				order.SzMedicineInsuranceInfo = detailStrThree
//				order.Cainfo = result_three
//				err = service.UpdataOrderStatusTwo(order.Number, adminUser.CurrentOrgId)
//				err = service.UpDateOrderTwo(&order)
//				c.ServeSuccessJSON(map[string]interface{}{
//					"msg": "结算成功",
//				})
//			} else {
//				//结算报错
//				errlog := &models.HisOrderError{
//					UserOrgId:  adminUser.CurrentOrgId,
//					Ctime:      time.Now().Unix(),
//					Mtime:      time.Now().Unix(),
//					Number:     chrg_bchno,
//					ErrMsg:     res.Transreturnmessage,
//					Status:     1,
//					PatientId:  patient_id,
//					RecordTime: recordDateTime,
//					Stage:      6,
//				}
//				service.CreateErrMsgLog(errlog)
//				c.ServeSuccessJSON(map[string]interface{}{
//					"failed_code": -10,
//					"msg":         res.Transreturnmessage,
//				})
//			}
//		} else {
//			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeNoPateintException)
//			return
//		}
//	} else {
//		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeReadCardException)
//		return
//	}
//}

//上传明细----预结算
func (c *SZHisApiController) GetPreSettleInfo() {
	settle_accounts_type, _ := c.GetInt64("settle_accounts_type")
	patient_id, _ := c.GetInt64("id")
	record_time := c.GetString("record_time")
	admin_user_id, _ := c.GetInt64("admin_user_id")
	his_patient_id, _ := c.GetInt64("his_patient_id")

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

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

	timestamp := time.Now().Unix()
	tempTime := time.Unix(timestamp, 0)
	timeFormat := tempTime.Format("20060102150405")
	chrgBchno := rand.Intn(10000) + 1000
	chrg_bchno := timeFormat + strconv.FormatInt(int64(chrgBchno), 10) + strconv.FormatInt(1, 10)
	adminUser := c.GetAdminUserInfo()
	miConfig, _ := service.FindMedicalInsuranceInfo(adminUser.CurrentOrgId)
	month := time.Unix(1557042972, 0).Format("1")
	year := time.Now().Format("2006")
	month = time.Now().Format("01")
	day := time.Now().Format("02")

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

	var prescriptions []*models.HisPrescription

	var start_time int64
	var end_time int64

	if reg_type == 1111 || reg_type == 1112 {
		reg_type = 11
	}
	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.GetNewHisPrescription(adminUser.CurrentOrgId, his_patient_id, recordDateTime, strconv.Itoa(int(reg_type)))
		}

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

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

		prescriptions, _ = service.GetMonthHisPrescription(adminUser.CurrentOrgId, patient_id, recordStartTime, recordEndTime, strconv.Itoa(int(reg_type)))
	}

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

	patientPrescription, _ := service.FindHisPatientPrescriptionInfo(adminUser.CurrentOrgId, his_patient_id, recordDateTime)

	sick, _ := service.FindSickById(sick_type)

	if sick.ID == 0 {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamSickTypeWrong)
		return
	}

	adminRole_two, _ := service.GetAdminUserInfoByID(adminUser.CurrentOrgId, patientPrescription.DoctorId)

	adminRole, _ := service.GetAdminUserInfoByID(adminUser.CurrentOrgId, admin_user_id)
	his, err := service.GetNewHisPatientInfo(adminUser.CurrentOrgId, his_patient_id, recordDateTime)
	mz_number := his.Number
	number := miConfig.Code + year + month + day +
		fmt.Sprintf("%07v", rand.New(rand.NewSource(time.Now().UnixNano())).Int31n(10000000)) // 定点协议机构编码（5位）+日期（8位）+流水号（7位）
	var doctor_name string
	var doctor_code string
	var drug_doctor_code string
	drug_doctor_code = adminRole_two.DoctorCode
	drug_doctor_name := adminRole_two.UserName

	if adminRole.ID == 0 {
		doctor_name = "管理员"
		doctor_code = "01"
	} else {
		doctor_name = adminRole.UserName
		doctor_code = strconv.FormatInt(admin_user_id, 10)
	}

	verifyCode, version_code := ReadCardGetCode("FY001" + "|" + number + "|" + miConfig.Code)
	var customs []*models.CustomDetail
	for _, item := range prescriptions {
		if item.Type == 1 { //药品
			for _, subItem := range item.HisDoctorAdviceInfo {
				fmt.Println(subItem.BaseDrugLib.MedicalInsuranceNumber)

				if len(subItem.BaseDrugLib.MedicalInsuranceNumber) > 0 {
					_, dose_code := service.GetDoseCode(subItem.BaseDrugLib.DrugDosageForm, adminUser.CurrentOrgId)
					detItemFeeSumamt, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", subItem.Price*subItem.PrescribingNumber), 64)
					price, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", subItem.Price), 64)
					temp := strings.Split(subItem.FeedetlSn, "-")
					newFl := fmt.Sprintf("%07v", rand.New(rand.NewSource(time.Now().UnixNano())).Int31n(10000000)) + "-" + temp[1] + "-" + temp[2]

					cus := &models.CustomDetail{
						PrescriptionNumber: chrg_bchno,
						OrderType:          "1",
						ChargeSerialNumber: newFl,
						Code:               subItem.BaseDrugLib.MedicalInsuranceNumber,
						BwCode:             subItem.BaseDrugLib.Code,
						CodeName:           subItem.BaseDrugLib.DrugName,
						Flag:               "1",
						Price:              price,
						Count:              subItem.PrescribingNumber,
						ChargeOrderDate:    year + month + day,
						DoctorCode:         doctor_code,
						Total:              detItemFeeSumamt,
						DoseCode:           dose_code,
						Spec:               strconv.Itoa(int(subItem.BaseDrugLib.MinNumber)) + subItem.BaseDrugLib.MinUnit + ":" + fmt.Sprintf("%.2f", subItem.BaseDrugLib.Dose) + subItem.BaseDrugLib.DoseUnit,
						Unit:               subItem.PrescribingNumberUnit,
					}
					customs = append(customs, cus)
				}
			}
		}

		if item.Type == 2 { //项目
			for _, subItem := range item.HisPrescriptionProject {
				if len(subItem.HisProject.MedicalCode) > 0 {

					detItemFeeSumamt, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", subItem.Price*float64(subItem.Count)), 64)

					//count, _ := strconv.ParseFloat(fmt.Sprintf("%f", subItem.Count), 64)

					count, _ := strconv.ParseFloat(strconv.FormatInt(subItem.Count, 10), 64)
					temp := strings.Split(subItem.FeedetlSn, "-")
					newFl := fmt.Sprintf("%07v", rand.New(rand.NewSource(time.Now().UnixNano())).Int31n(10000000)) + "-" + temp[1] + "-" + temp[2]
					if subItem.Type == 2 {

						cus := &models.CustomDetail{
							PrescriptionNumber: chrg_bchno,
							OrderType:          "1",
							ChargeSerialNumber: newFl,
							Code:               subItem.HisProject.MedicalCode,
							CodeName:           subItem.HisProject.ProjectName,
							BwCode:             subItem.HisProject.MedicalCode,
							Flag:               "1",
							Price:              subItem.Price,
							Count:              count,
							ChargeOrderDate:    year + month + day,
							DoctorCode:         doctor_code,
							Total:              detItemFeeSumamt,
							DoseCode:           "",
							Spec:               "次",
							Unit:               "次",
						}
						customs = append(customs, cus)

					}

				}

				if len(subItem.GoodInfo.MedicalInsuranceNumber) > 0 {

					detItemFeeSumamt, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", subItem.Price*float64(subItem.Count)), 64)
					//count, _ := strconv.ParseFloat(fmt.Sprintf("%f", subItem.Count), 64)
					count, _ := strconv.ParseFloat(strconv.FormatInt(subItem.Count, 10), 64)
					temp := strings.Split(subItem.FeedetlSn, "-")
					newFl := fmt.Sprintf("%07v", rand.New(rand.NewSource(time.Now().UnixNano())).Int31n(10000000)) + "-" + temp[1] + "-" + temp[2]
					if subItem.Type == 3 {
						cus := &models.CustomDetail{
							PrescriptionNumber: chrg_bchno,
							OrderType:          "1",
							ChargeSerialNumber: newFl,
							Code:               subItem.GoodInfo.MedicalInsuranceNumber,
							BwCode:             subItem.GoodInfo.MedicalInsuranceNumber,
							CodeName:           subItem.GoodInfo.GoodName,
							Flag:               "1",
							Price:              subItem.Price,
							Count:              count,
							ChargeOrderDate:    year + month + day,
							DoctorCode:         doctor_code,
							Total:              detItemFeeSumamt,
							DoseCode:           "",
							Spec:               "支",
							Unit:               "支",
						}
						customs = append(customs, cus)

					}

				}

			}
		}
		//
		//for _, subItem := range item.HisAdditionalCharge {
		//	if len(subItem.XtHisAddtionConfig.Code) > 0 {
		//		detItemFeeSumamt, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", subItem.Price*float64(subItem.Count)), 64)
		//
		//		count, _ := strconv.ParseFloat(fmt.Sprintf("%f", subItem.Count), 64)
		//		cus := &models.CustomDetail{
		//			PrescriptionNumber: chrg_bchno,
		//			OrderType:          "1",
		//			ChargeSerialNumber: subItem.FeedetlSn,
		//			Code:               subItem.XtHisAddtionConfig.Code,
		//			CodeName:           subItem.XtHisAddtionConfig.Name,
		//			Flag:               "1",
		//			Price:              subItem.Price,
		//			Count:              count,
		//			ChargeOrderDate:    year + month + day,
		//			DoctorCode:         doctor_code,
		//			Total:              detItemFeeSumamt,
		//			DoseCode:           "",
		//			Spec:                subItem.XtHisAddtionConfig.,
		//		}
		//		customs = append(customs, cus)
		//	}
		//}
	}

	var pagesize int = 50
	var start int = 1
	var stop int
	var pagecount int
	var curpage int
	var isSuccess bool = true
	//总页数,向上取整,注意除之前要先转换类型为float64
	pagecount = int(math.Ceil(float64(len(customs)) / float64(pagesize)))

	var ress []*Result
	for curpage = 1; curpage <= pagecount; curpage++ {
		if curpage == 1 {
			start = 1
		} else {
			start = (curpage-1)*pagesize + 1
		}
		stop = curpage * pagesize
		if stop > len(customs) {
			stop = len(customs)
		}
		result := service.SzybFY001(doctor_name, doctor_code, miConfig.Code, customs[start-1:stop], verifyCode, number, mz_number, version_code, drug_doctor_code)
		fmt.Println(result)

		var dat map[string]interface{}
		if err := json.Unmarshal([]byte(result), &dat); err == nil {
			fmt.Println(dat)
		} else {
			fmt.Println(err)
		}

		userJSONBytes, _ := json.Marshal(dat)

		var res Result
		if err := json.Unmarshal(userJSONBytes, &res); err != nil {
			utils.ErrorLog("解析失败：%v", err)
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
			return
		}
		if res.Transreturncode == "00000000" {
			ress = append(ress, &res)
		} else {
			isSuccess = false
			errlog := &models.HisOrderError{
				UserOrgId:  adminUser.CurrentOrgId,
				Ctime:      time.Now().Unix(),
				Mtime:      time.Now().Unix(),
				Number:     chrg_bchno,
				ErrMsg:     res.Transreturnmessage,
				Status:     1,
				PatientId:  patient_id,
				RecordTime: recordDateTime,
				Stage:      4,
			}
			service.CreateErrMsgLog(errlog)
			c.ServeSuccessJSON(map[string]interface{}{
				"failed_code": -10,
				"msg":         res.Transreturnmessage,
			})
			return
		}
		//设置变量，根据变量的值来判断上传是否成功
	}
	if isSuccess == true {
		order := &models.HisOrder{
			UserOrgId:           adminUser.CurrentOrgId,
			HisPatientId:        0,
			PatientId:           patient_id,
			SettleAccountsDate:  recordDateTime,
			Ctime:               time.Now().Unix(),
			Mtime:               time.Now().Unix(),
			Status:              0,
			Number:              chrg_bchno,
			Infcode:             0,
			WarnMsg:             "",
			Cainfo:              "",
			ErrMsg:              "",
			RespondTime:         "",
			InfRefmsgid:         "",
			OrderStatus:         1,
			IsMedicineInsurance: 1,
			MedType:             strconv.Itoa(int(reg_type)),
			SettleType:          settle_accounts_type,
			SettleStartTime:     start_time,
			SettleEndTime:       end_time,
			Creator:             admin_user_id,
			Modify:              admin_user_id,
			OrgSetlNumber:       number,
			MdtrtId:             mz_number,
			PType:               2,
		}
		data, _ := json.Marshal(ress)
		order.DetailLog = string(data)

		err = service.CreateOrder(order)
		if err != nil {
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeCreatePreOrderException)
			return
		}

		for _, subItem := range ress {
			for _, item := range subItem.Transbody.Outputlist {

				temp := strings.Split(item.Bkf500, "-")
				var advice_id int64 = 0
				var project_id int64 = 0
				var types int64 = 0

				id, _ := strconv.ParseInt(temp[2], 10, 64)
				types, _ = strconv.ParseInt(temp[1], 10, 64)

				if temp[1] == "1" {
					advice_id = id
					project_id = 0
				} else if temp[1] == "2" {
					advice_id = 0
					project_id = id
				}

				info := &models.HisOrderInfo{
					OrderNumber:      order.Number,
					FeedetlSn:        item.Bkf500,
					UploadDate:       time.Now().Unix(),
					AdviceId:         advice_id,
					DetItemFeeSumamt: item.Akc264,
					Cnt:              item.Akc226,
					Pric:             float64(item.Akc225),
					PatientId:        patient_id,
					Status:           1,
					ChrgitmLv:        item.Aka065,
					Mtime:            time.Now().Unix(),
					Ctime:            time.Now().Unix(),
					UserOrgId:        adminUser.CurrentOrgId,
					OrderId:          order.ID,
					ProjectId:        project_id,
					Type:             types,

					OverPricPsnPay: item.Akc268,
					AllowReimburse: item.Cka319,
				}
				service.CreateOrderInfo(info)

			}
		}
		service.UpDatePrescriptionNumber(adminUser.CurrentOrgId, ids, chrg_bchno)
		service.UpDateHisPrescriptionInfoNumber(adminUser.CurrentOrgId, his_patient_id, chrg_bchno, recordDateTime)
		var total float64
		for _, item := range prescriptions {
			if item.Type == 1 { //药品
				for _, subItem := range item.HisDoctorAdviceInfo {
					total = total + (subItem.Price * subItem.PrescribingNumber)
				}
			}
			if item.Type == 2 { //项目
				for _, subItem := range item.HisPrescriptionProject {
					total = total + (subItem.Price * float64(subItem.Count))
				}
			}
		}
		for _, item := range prescriptions {
			for _, subItem := range item.HisAdditionalCharge {
				total = total + (subItem.Price * float64(subItem.Count))
			}
		}

		total, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", total), 64)

		new_number := miConfig.Code + year + month + day +
			fmt.Sprintf("%07v", rand.New(rand.NewSource(time.Now().UnixNano())).Int31n(10000000)) // 定点协议机构编码（5位）+日期（8位）+流水号（7位）

		yiliao_number, id_card_number, verifyCode, version_code, health_card_no, _, ret4 := ReadBasCardGetNumber("FY004" + "|" + new_number + "|" + miConfig.Code + "|")

		if ret4 == 0 {
			//根据业务的人员信息跟设备读社保卡获取的信息进行匹配，判断是否为同一个人，相同则进行挂号操作，不同则报错
			tempPatient, _ := service.GetPatientByNumber(id_card_number, adminUser.CurrentOrgId)
			if tempPatient.ID == patient_id {
				result_three := service.SzybFY004(doctor_name, doctor_code, miConfig.Code, total, yiliao_number, verifyCode, number, mz_number, version_code, drug_doctor_code, drug_doctor_name, reg_type, sick.CountryCode, new_number)
				var dat map[string]interface{}
				if err := json.Unmarshal([]byte(result_three), &dat); err == nil {
					fmt.Println(dat)
				} else {
					fmt.Println(err)
				}
				userJSONBytes, _ := json.Marshal(dat)
				var res ResultTwo
				if err := json.Unmarshal(userJSONBytes, &res); err != nil {
					utils.ErrorLog("解析失败：%v", err)
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
					return
				}

				if res.Transreturncode == "00000000" {
					order.OrderStatus = 1
					order.Status = 1
					order.PsnNo = health_card_no
					order.Modify = admin_user_id
					order.MedfeeSumamt = res.Transbody.Akc264
					order.FundPaySumamt = res.Transbody.Akb068
					order.AcctPay = res.Transbody.Akb066
					order.PsnCashPay = res.Transbody.Akb067
					order.PsnPartAmt = res.Transbody.Akb067
					order.AccountPrice = res.Transbody.Aae240
					order.MzNumber = mz_number
					order.YiliaoNumber = yiliao_number
					setlDetailOne, _ := json.Marshal(res.Transbody.Outputlist1)
					detailStrOne := string(setlDetailOne)
					order.SzChargeInfo = detailStrOne
					setlDetailTwo, _ := json.Marshal(res.Transbody.Outputlist2)
					detailStrTwo := string(setlDetailTwo)
					order.SzProjectInfo = detailStrTwo
					setlDetailThree, _ := json.Marshal(res.Transbody.Outputlist3)
					detailStrThree := string(setlDetailThree)
					order.SzMedicineInsuranceInfo = detailStrThree
					order.Cainfo = result_three
					order.IsPre = 1
					//err = service.UpdataOrderStatusTwo(order.Number, adminUser.CurrentOrgId)
					err = service.UpDateOrderTwo(order)
					c.ServeSuccessJSON(map[string]interface{}{
						"msg": "预结算成功",
					})
				} else {
					//预结算报错
					errlog := &models.HisOrderError{
						UserOrgId:  adminUser.CurrentOrgId,
						Ctime:      time.Now().Unix(),
						Mtime:      time.Now().Unix(),
						Number:     chrg_bchno,
						ErrMsg:     res.Transreturnmessage,
						Status:     1,
						PatientId:  patient_id,
						RecordTime: recordDateTime,
						Stage:      20,
					}
					service.CreateErrMsgLog(errlog)
					c.ServeSuccessJSON(map[string]interface{}{
						"failed_code": -10,
						"msg":         res.Transreturnmessage,
					})
				}
			} else {
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeNoPateintException)
				return
			}
		} else {
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeReadCardException)
			return
		}
	} else {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodePreSettleFaildParamWrong)
		return
	}
}

//func (c *SZHisApiController) GetSettleInfo() {
//	pay_way, _ := c.GetInt64("pay_way")
//	pay_price, _ := c.GetFloat("pay_price")
//	pay_card_no := c.GetString("pay_card_no")
//	discount_price, _ := c.GetFloat("discount_price")
//	preferential_price, _ := c.GetFloat("preferential_price")
//	reality_price, _ := c.GetFloat("reality_price")
//	found_price, _ := c.GetFloat("found_price")
//	medical_insurance_price, _ := c.GetFloat("medical_insurance_price")
//	private_price, _ := c.GetFloat("private_price")
//	settle_accounts_type, _ := c.GetInt64("settle_accounts_type")
//	patient_id, _ := c.GetInt64("id")
//	record_time := c.GetString("record_time")
//	admin_user_id, _ := c.GetInt64("admin_user_id")
//	timestamp := time.Now().Unix()
//	tempTime := time.Unix(timestamp, 0)
//	timeFormat := tempTime.Format("20060102150405")
//	chrgBchno := rand.Intn(10000) + 1000
//	chrg_bchno := timeFormat + strconv.FormatInt(int64(chrgBchno), 10) + strconv.FormatInt(1, 10)
//	adminUser := c.GetAdminUserInfo()
//	miConfig, _ := service.FindMedicalInsuranceInfo(adminUser.CurrentOrgId)
//	month := time.Unix(1557042972, 0).Format("1")
//	year := time.Now().Format("2006")
//	month = time.Now().Format("01")
//	day := time.Now().Format("02")
//
//	timeLayout := "2006-01-02"
//	loc, _ := time.LoadLocation("Local")
//	theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", record_time+" 00:00:00", loc)
//	fmt.Println(err)
//	if err != nil {
//		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
//		return
//	}
//	recordDateTime := theTime.Unix()
//
//	var prescriptions []*models.HisPrescription
//
//	var start_time int64
//	var end_time int64
//
//	if settle_accounts_type == 1 { //日结
//		prescriptions, _ = service.GetHisPrescription(adminUser.CurrentOrgId, patient_id, recordDateTime)
//
//	} 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, patient_id, recordStartTime, recordEndTime)
//	}
//
//	var ids []int64
//	for _, item := range prescriptions {
//		ids = append(ids, item.ID)
//	}
//
//	patientPrescription, _ := service.FindPatientPrescriptionInfo(adminUser.CurrentOrgId, patient_id, recordDateTime)
//
//	adminRole_two, _ := service.GetAdminUserInfoByID(adminUser.CurrentOrgId, patientPrescription.DoctorId)
//
//	adminRole, _ := service.GetAdminUserInfoByID(adminUser.CurrentOrgId, admin_user_id)
//	his, err := service.GetHisPatientInfo(adminUser.CurrentOrgId, patient_id, recordDateTime)
//	mz_number := his.Number
//	number := miConfig.Code + year + month + day +
//		fmt.Sprintf("%07v", rand.New(rand.NewSource(time.Now().UnixNano())).Int31n(10000000)) // 定点协议机构编码（5位）+日期（8位）+流水号（7位）
//	var doctor_name string
//	var doctor_code string
//	var drug_doctor_code string
//	drug_doctor_code = adminRole_two.DoctorCode
//	drug_doctor_name := adminRole_two.UserName
//
//	if adminRole.ID == 0 {
//		doctor_name = "黄亦轩"
//		doctor_code = "1"
//	} else {
//		doctor_name = adminRole.UserName
//		doctor_code = strconv.FormatInt(admin_user_id, 10)
//	}
//
//	verifyCode, version_code := ReadCardGetCode("FY001" + "|" + number + "|" + miConfig.Code)
//	//verifyCode := "000000|bf885fa312a7f92861d6b61542a637fa"
//	//version_code := "V0.3"
//	var customs []*models.CustomDetail
//	for _, item := range prescriptions {
//		if item.Type == 1 { //药品
//			for _, subItem := range item.HisDoctorAdviceInfo {
//				fmt.Println(subItem.BaseDrugLib.MedicalInsuranceNumber)
//
//				if len(subItem.BaseDrugLib.MedicalInsuranceNumber) > 0 {
//					_, dose_code := service.GetDoseCode(subItem.BaseDrugLib.DrugDosageForm, adminUser.CurrentOrgId)
//					detItemFeeSumamt, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", subItem.Price*subItem.PrescribingNumber), 64)
//					price, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", subItem.Price), 64)
//					temp := strings.Split(subItem.FeedetlSn, "-")
//					newFl := fmt.Sprintf("%07v", rand.New(rand.NewSource(time.Now().UnixNano())).Int31n(10000000)) + "-" + temp[1] + "-" + temp[2]
//
//					cus := &models.CustomDetail{
//						PrescriptionNumber: chrg_bchno,
//						OrderType:          "1",
//						ChargeSerialNumber: newFl,
//						Code:               subItem.BaseDrugLib.MedicalInsuranceNumber,
//						CodeName:           subItem.BaseDrugLib.DrugName,
//						Flag:               "1",
//						Price:              price,
//						Count:              subItem.PrescribingNumber,
//						ChargeOrderDate:    year + month + day,
//						DoctorCode:         doctor_code,
//						Total:              detItemFeeSumamt,
//						DoseCode:           dose_code,
//						Spec:               subItem.BaseDrugLib.DrugSpec,
//					}
//					customs = append(customs, cus)
//				}
//			}
//		}
//
//		if item.Type == 2 { //项目
//			for _, subItem := range item.HisPrescriptionProject {
//				if len(subItem.HisProject.MedicalCode) > 0 {
//					detItemFeeSumamt, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", subItem.Price*float64(subItem.Count)), 64)
//
//					count, _ := strconv.ParseFloat(fmt.Sprintf("%f", subItem.Count), 64)
//					temp := strings.Split(subItem.FeedetlSn, "-")
//					newFl := fmt.Sprintf("%07v", rand.New(rand.NewSource(time.Now().UnixNano())).Int31n(10000000)) + "-" + temp[1] + "-" + temp[2]
//
//					cus := &models.CustomDetail{
//						PrescriptionNumber: chrg_bchno,
//						OrderType:          "1",
//						ChargeSerialNumber: newFl,
//						Code:               subItem.HisProject.MedicalCode,
//						CodeName:           subItem.HisProject.ProjectName,
//						Flag:               "1",
//						Price:              subItem.Price,
//						Count:              count,
//						ChargeOrderDate:    year + month + day,
//						DoctorCode:         doctor_code,
//						Total:              detItemFeeSumamt,
//						DoseCode:           "",
//						Spec:               "次",
//					}
//					customs = append(customs, cus)
//				}
//			}
//		}
//		//
//		//for _, subItem := range item.HisAdditionalCharge {
//		//	if len(subItem.XtHisAddtionConfig.Code) > 0 {
//		//		detItemFeeSumamt, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", subItem.Price*float64(subItem.Count)), 64)
//		//
//		//		count, _ := strconv.ParseFloat(fmt.Sprintf("%f", subItem.Count), 64)
//		//		cus := &models.CustomDetail{
//		//			PrescriptionNumber: chrg_bchno,
//		//			OrderType:          "1",
//		//			ChargeSerialNumber: subItem.FeedetlSn,
//		//			Code:               subItem.XtHisAddtionConfig.Code,
//		//			CodeName:           subItem.XtHisAddtionConfig.Name,
//		//			Flag:               "1",
//		//			Price:              subItem.Price,
//		//			Count:              count,
//		//			ChargeOrderDate:    year + month + day,
//		//			DoctorCode:         doctor_code,
//		//			Total:              detItemFeeSumamt,
//		//			DoseCode:           "",
//		//			Spec:                subItem.XtHisAddtionConfig.,
//		//		}
//		//		customs = append(customs, cus)
//		//	}
//		//}
//	}
//
//	var pagesize int = 50
//	var start int = 1
//	var stop int
//	var pagecount int
//	var curpage int
//	var isSuccess bool = true
//	//总页数,向上取整,注意除之前要先转换类型为float64
//	pagecount = int(math.Ceil(float64(len(customs)) / float64(pagesize)))
//
//	var ress []*Result
//	for curpage = 1; curpage <= pagecount; curpage++ {
//		if curpage == 1 {
//			start = 1
//		} else {
//			start = (curpage-1)*pagesize + 1
//		}
//		stop = curpage * pagesize
//		if stop > len(customs) {
//			stop = len(customs)
//		}
//		result := service.SzybFY001(doctor_name, doctor_code, miConfig.Code, customs[start-1:stop], verifyCode, number, mz_number, version_code, drug_doctor_code)
//		fmt.Println(result)
//
//		var dat map[string]interface{}
//		if err := json.Unmarshal([]byte(result), &dat); err == nil {
//			fmt.Println(dat)
//		} else {
//			fmt.Println(err)
//		}
//
//		userJSONBytes, _ := json.Marshal(dat)
//
//		var res Result
//		if err := json.Unmarshal(userJSONBytes, &res); err != nil {
//			utils.ErrorLog("解析失败：%v", err)
//			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
//			return
//		}
//		if res.Transreturncode == "00000000" {
//			ress = append(ress, &res)
//		} else {
//			isSuccess = false
//			errlog := &models.HisOrderError{
//				UserOrgId:  adminUser.CurrentOrgId,
//				Ctime:      time.Now().Unix(),
//				Mtime:      time.Now().Unix(),
//				Number:     chrg_bchno,
//				ErrMsg:     res.Transreturnmessage,
//				Status:     1,
//				PatientId:  patient_id,
//				RecordTime: recordDateTime,
//				Stage:      4,
//			}
//			service.CreateErrMsgLog(errlog)
//			c.ServeSuccessJSON(map[string]interface{}{
//				"failed_code": -10,
//				"msg":         res.Transreturnmessage,
//			})
//			return
//		}
//		//设置变量，根据变量的值来判断上传是否成功
//	}
//	if isSuccess == true {
//		order := &models.HisOrder{
//			UserOrgId:           adminUser.CurrentOrgId,
//			HisPatientId:        0,
//			PatientId:           patient_id,
//			SettleAccountsDate:  recordDateTime,
//			Ctime:               time.Now().Unix(),
//			Mtime:               time.Now().Unix(),
//			Status:              1,
//			Number:              chrg_bchno,
//			Infcode:             0,
//			WarnMsg:             "",
//			Cainfo:              "",
//			ErrMsg:              "",
//			RespondTime:         "",
//			InfRefmsgid:         "",
//			OrderStatus:         1,
//			IsMedicineInsurance: 1,
//			SettleType:          settle_accounts_type,
//			SettleStartTime:     start_time,
//			SettleEndTime:       end_time,
//			Creator:             admin_user_id,
//			Modify:              admin_user_id,
//			OrgSetlNumber:       number,
//		}
//		data, _ := json.Marshal(ress)
//		order.DetailLog = string(data)
//
//		err = service.CreateOrder(order)
//		if err != nil {
//			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeCreatePreOrderException)
//			return
//		}
//
//		for _, subItem := range ress {
//			for _, item := range subItem.Transbody.Outputlist {
//
//				temp := strings.Split(item.Bkf500, "-")
//				var advice_id int64 = 0
//				var project_id int64 = 0
//				var types int64 = 0
//
//				id, _ := strconv.ParseInt(temp[2], 10, 64)
//				types, _ = strconv.ParseInt(temp[1], 10, 64)
//
//				if temp[1] == "1" {
//					advice_id = id
//					project_id = 0
//				} else if temp[1] == "2" {
//					advice_id = 0
//					project_id = id
//				}
//
//				info := &models.HisOrderInfo{
//					OrderNumber:      order.Number,
//					FeedetlSn:        item.Bkf500,
//					UploadDate:       time.Now().Unix(),
//					AdviceId:         advice_id,
//					DetItemFeeSumamt: item.Akc264,
//					Cnt:              item.Akc226,
//					Pric:             float64(item.Akc225),
//					PatientId:        patient_id,
//					Status:           1,
//					ChrgitmLv:        item.Aka065,
//					Mtime:            time.Now().Unix(),
//					Ctime:            time.Now().Unix(),
//					UserOrgId:        adminUser.CurrentOrgId,
//					OrderId:          order.ID,
//					ProjectId:        project_id,
//					Type:             types,
//
//					OverPricPsnPay: item.Akc268,
//					AllowReimburse: item.Cka319,
//				}
//				service.CreateOrderInfo(info)
//
//			}
//		}
//		service.UpDatePrescriptionNumber(adminUser.CurrentOrgId, ids, chrg_bchno)
//		service.UpDatePrescriptionInfoNumber(adminUser.CurrentOrgId, patient_id, chrg_bchno, recordDateTime)
//		var total float64
//		for _, item := range prescriptions {
//			if item.Type == 1 { //药品
//				for _, subItem := range item.HisDoctorAdviceInfo {
//					total = total + (subItem.Price * subItem.PrescribingNumber)
//				}
//			}
//			if item.Type == 2 { //项目
//				for _, subItem := range item.HisPrescriptionProject {
//					total = total + (subItem.Price * float64(subItem.Count))
//				}
//			}
//		}
//		for _, item := range prescriptions {
//			for _, subItem := range item.HisAdditionalCharge {
//				total = total + (subItem.Price * float64(subItem.Count))
//			}
//		}
//
//		yiliao_number, id_card_number, verifyCode, version_code, _, ret4 := ReadBasCardGetNumber("FY005" + "|" + number + "|" + miConfig.Code + "|")
//		if ret4 == 0 {
//			//根据业务的人员信息跟设备读社保卡获取的信息进行匹配，判断是否为同一个人，相同则进行挂号操作，不同则报错
//			tempPatient, _ := service.GetPatientByNumber(id_card_number, adminUser.CurrentOrgId)
//			if tempPatient.ID == patient_id {
//
//				result_three := service.SzybFY005(doctor_name, doctor_code, miConfig.Code, total, yiliao_number, verifyCode, number, mz_number, version_code, drug_doctor_code, drug_doctor_name, his.MedicalTreatmentType)
//				var dat map[string]interface{}
//				if err := json.Unmarshal([]byte(result_three), &dat); err == nil {
//					fmt.Println(dat)
//				} else {
//					fmt.Println(err)
//				}
//				userJSONBytes, _ := json.Marshal(dat)
//				var res ResultTwo
//				if err := json.Unmarshal(userJSONBytes, &res); err != nil {
//					utils.ErrorLog("解析失败：%v", err)
//					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
//					return
//				}
//
//				if res.Transreturncode == "00000000" {
//					order.OrderStatus = 2
//					order.PayWay = pay_way
//					order.PayPrice = pay_price
//					order.PayCardNo = pay_card_no
//					order.DiscountPrice = discount_price
//					order.PreferentialPrice = preferential_price
//					order.RealityPrice = reality_price
//					order.FoundPrice = found_price
//					order.MedicalInsurancePrice = medical_insurance_price
//					order.PrivatePrice = private_price
//					order.Modify = admin_user_id
//					order.MedfeeSumamt = res.Transbody.Akc264
//					order.SetlId = res.Transbody.Ckc618
//					order.FundPaySumamt = res.Transbody.Akb068
//					order.AcctPay = res.Transbody.Akb066
//					order.PsnCashPay = res.Transbody.Akb067
//					order.PsnPartAmt = res.Transbody.Akb067
//					order.AccountPrice = res.Transbody.Aae240
//					order.MzNumber = mz_number
//					order.YiliaoNumber = yiliao_number
//					setlDetailOne, _ := json.Marshal(res.Transbody.Outputlist1)
//					detailStrOne := string(setlDetailOne)
//					order.SzChargeInfo = detailStrOne
//					setlDetailTwo, _ := json.Marshal(res.Transbody.Outputlist2)
//					detailStrTwo := string(setlDetailTwo)
//					order.SzProjectInfo = detailStrTwo
//					setlDetailThree, _ := json.Marshal(res.Transbody.Outputlist3)
//					detailStrThree := string(setlDetailThree)
//					order.SzMedicineInsuranceInfo = detailStrThree
//					order.Cainfo = result_three
//					err = service.UpdataOrderStatusTwo(order.Number, adminUser.CurrentOrgId)
//					err = service.UpDateOrderTwo(order)
//					c.ServeSuccessJSON(map[string]interface{}{
//						"msg": "结算成功",
//					})
//				} else {
//					//结算报错
//					errlog := &models.HisOrderError{
//						UserOrgId:  adminUser.CurrentOrgId,
//						Ctime:      time.Now().Unix(),
//						Mtime:      time.Now().Unix(),
//						Number:     chrg_bchno,
//						ErrMsg:     res.Transreturnmessage,
//						Status:     1,
//						PatientId:  patient_id,
//						RecordTime: recordDateTime,
//						Stage:      6,
//					}
//					service.CreateErrMsgLog(errlog)
//					c.ServeSuccessJSON(map[string]interface{}{
//						"failed_code": -10,
//						"msg":         res.Transreturnmessage,
//					})
//				}
//			} else {
//				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeNoPateintException)
//				return
//			}
//		} else {
//			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeReadCardException)
//			return
//		}
//	} else {
//		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodePreSettleFaildParamWrong)
//		return
//	}
//}

//结算
//func (c *SZHisApiController) GetSettleInfo() {
//	patient_id, _ := c.GetInt64("id")
//	order_id, _ := c.GetInt64("order_id")
//	record_time := c.GetString("record_time")
//	pay_way, _ := c.GetInt64("pay_way")
//	pay_price, _ := c.GetFloat("pay_price")
//	pay_card_no := c.GetString("pay_card_no")
//	discount_price, _ := c.GetFloat("discount_price")
//	preferential_price, _ := c.GetFloat("preferential_price")
//	reality_price, _ := c.GetFloat("reality_price")
//	found_price, _ := c.GetFloat("found_price")
//	medical_insurance_price, _ := c.GetFloat("medical_insurance_price")
//	private_price, _ := c.GetFloat("private_price")
//	settle_accounts_type, _ := c.GetInt64("settle_accounts_type")
//	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()
//
//	var prescriptions []*models.HisPrescription
//
//	data := make(map[string]interface{})
//	if settle_accounts_type == 1 { //日结
//		prescriptions, _ = service.GetHisPrescription(adminUser.CurrentOrgId, patient_id, recordDateTime)
//		data["pre"] = 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()
//		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()
//		prescriptions, _ = service.GetMonthHisPrescription(adminUser.CurrentOrgId, patient_id, recordStartTime, recordEndTime)
//		data["pre"] = prescriptions
//
//	}
//
//	roles, _ := service.GetAdminUserInfoByID(adminUser.CurrentOrgId, admin_user_id)
//	his, _ := service.GetVMHisPatientInfo(adminUser.CurrentOrgId, patient_id, recordDateTime)
//	miConfig, _ := service.FindMedicalInsuranceInfo(adminUser.CurrentOrgId)
//	strconv.FormatInt(his.PatientId, 10)
//
//	order_src, _ := service.GetHisOrderByID(order_id)
//
//	if order_src.ID == 0 {
//		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeHisOrderNoExistParamWrong)
//		return
//	}
//
//	config, _ := service.GetMedicalInsuranceConfig(adminUser.CurrentOrgId)
//	if config.IsOpen == 1 { //对接了医保，走医保流程
//		if order_src.OrderStatus != 2 {
//			var total float64
//			for _, item := range prescriptions {
//				if item.Type == 1 { //药品
//					for _, subItem := range item.HisDoctorAdviceInfo {
//						total = total + (subItem.Price * subItem.PrescribingNumber)
//					}
//				}
//				if item.Type == 2 { //项目
//					for _, subItem := range item.HisPrescriptionProject {
//						total = total + (subItem.Price * float64(subItem.Count))
//					}
//				}
//			}
//
//			for _, item := range prescriptions {
//				for _, subItem := range item.HisAdditionalCharge {
//					total = total + (subItem.Price * float64(subItem.Count))
//				}
//			}
//
//			patientPrescription, _ := service.FindPatientPrescriptionInfo(adminUser.CurrentOrgId, patient_id, recordDateTime)
//
//			adminRole_two, _ := service.GetAdminUserInfoByID(adminUser.CurrentOrgId, patientPrescription.DoctorId)
//
//			var drug_doctor string
//			drug_doctor = adminRole_two.DoctorCode
//			drug_doctor_name := adminRole_two.UserName
//			//结算流程
//			var doctor_name string
//			var doctor_code string
//			if roles.ID == 0 {
//				doctor_name = "黄亦轩"
//				doctor_code = "1010"
//			} else {
//				doctor_name = roles.UserName
//				doctor_code = strconv.FormatInt(admin_user_id, 10)
//			}
//			number := order_src.OrgSetlNumber
//			mz_number := his.Number
//			verifyCode, version_code := ReadCardGetCode("FY005" + "|" + number + "|" + miConfig.Code)
//
//			//verifyCode := "000000|707c35a62c2f0609d7b0a811649f3913"
//			//version_code := "V0.3"
//			yiliao_number, id_card_number, verifyCode, version_code, err, ret4 := ReadBasCardGetNumber("FY005" + "|" + number + "|" + miConfig.Code)
//			yiliao_number := his.YiliaoNumber
//			result_three := service.SzybFY005(doctor_name, doctor_code, miConfig.Code, total, yiliao_number, verifyCode, number, mz_number, version_code, drug_doctor, drug_doctor_name)
//			var dat map[string]interface{}
//			if err := json.Unmarshal([]byte(result_three), &dat); err == nil {
//				fmt.Println(dat)
//			} else {
//				fmt.Println(err)
//			}
//			userJSONBytes, _ := json.Marshal(dat)
//			var res ResultTwo
//			if err := json.Unmarshal(userJSONBytes, &res); err != nil {
//				utils.ErrorLog("解析失败：%v", err)
//				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
//				return
//			}
//
//			if res.Transreturncode == "00000000" {
//				order_src.OrderStatus = 2
//				order_src.PayWay = pay_way
//				order_src.PayPrice = pay_price
//				order_src.PayCardNo = pay_card_no
//				order_src.DiscountPrice = discount_price
//				order_src.PreferentialPrice = preferential_price
//				order_src.RealityPrice = reality_price
//				order_src.FoundPrice = found_price
//				order_src.MedicalInsurancePrice = medical_insurance_price
//				order_src.PrivatePrice = private_price
//				order_src.Creator = order_src.Creator
//				order_src.Modify = roles.ID
//				order_src.MedfeeSumamt = res.Transbody.Akc264
//				order_src.SetlId = res.Transbody.Ckc618
//				order_src.FundPaySumamt = res.Transbody.Akb068
//				order_src.AcctPay = res.Transbody.Akb066
//				order_src.PsnCashPay = res.Transbody.Akb067
//				order_src.PsnPartAmt = res.Transbody.Akb067
//				order_src.AccountPrice = res.Transbody.Aae240
//				order_src.MzNumber = mz_number
//				order_src.YiliaoNumber = yiliao_number
//				setlDetailOne, _ := json.Marshal(res.Transbody.Outputlist1)
//				detailStrOne := string(setlDetailOne)
//				order_src.SzChargeInfo = detailStrOne
//				setlDetailTwo, _ := json.Marshal(res.Transbody.Outputlist2)
//				detailStrTwo := string(setlDetailTwo)
//				order_src.SzProjectInfo = detailStrTwo
//				setlDetailThree, _ := json.Marshal(res.Transbody.Outputlist3)
//				detailStrThree := string(setlDetailThree)
//				order_src.SzMedicineInsuranceInfo = detailStrThree
//				order_src.Cainfo = result_three
//
//				err = service.UpdataOrderStatusTwo(order_src.Number, adminUser.CurrentOrgId)
//				err = service.UpDateOrder(order_src)
//
//				c.ServeSuccessJSON(map[string]interface{}{
//					"msg": "结算成功",
//				})
//			} else {
//				//version_code := "0.03"
//				c.ServeSuccessJSON(map[string]interface{}{
//					"failed_code": -10,
//					"msg":         res.Transreturnmessage,
//				})
//
//			}
//		} else {
//
//			//错误提示
//
//		}
//	} else {
//		//错误提示
//
//	}
//}

//当月退费
func (c *SZHisApiController) Refund() {
	order_id, _ := c.GetInt64("order_id")
	record_time := c.GetString("record_time")
	//patient_id, _ := c.GetInt64("patient_id")
	//his_patient_id, _ := c.GetInt64("his_patient_id")

	admin_user_id, _ := c.GetInt64("admin_user_id")
	timeLayout := "2006-01-02"
	loc, _ := time.LoadLocation("Local")
	adminUser := c.GetAdminUserInfo()
	theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", record_time+" 00:00:00", loc)
	fmt.Println(err)
	if err != nil {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
		return
	}
	recordDateTime := theTime.Unix()
	fmt.Println(recordDateTime)
	var order models.HisOrder
	order, _ = service.GetHisOrderByID(order_id)
	if order.ID == 0 {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeHisOrderNoExistParamWrong)
		return
	}
	//his, _ := service.GetNewHisPatientInfo(adminUser.CurrentOrgId, his_patient_id, theTime.Unix())
	roles, _ := service.GetAdminUserInfoByID(adminUser.CurrentOrgId, admin_user_id)
	miConfig, _ := service.FindMedicalInsuranceInfo(adminUser.CurrentOrgId)
	//结算流程
	var doctor_name string
	var doctor_code string
	if roles.ID == 0 {
		doctor_name = "管理员"
		doctor_code = "01"
	} else {
		doctor_name = roles.UserName
		doctor_code = strconv.FormatInt(admin_user_id, 10)

	}
	month := time.Unix(1557042972, 0).Format("1")
	year := time.Now().Format("2006")
	month = time.Now().Format("01")
	day := time.Now().Format("02")
	//number := miConfig.Code  + year + month + day + "1367866"
	number := miConfig.Code + year + month + day +
		fmt.Sprintf("%07v", rand.New(rand.NewSource(time.Now().UnixNano())).Int31n(10000000)) // 定点协议机构编码（5位）+日期（8位）+流水号（7位）
	//number := miConfig.Code + year + month + day + "1590003"

	//流水号
	//number_two := miConfig.Code + "-" + year + month + day + "-" + strconv.FormatInt(patient_id, 10)
	verifyCode, version_code := ReadCardGetCode("JY002" + "|" + number + "|" + miConfig.Code)
	//version_code := "V0.3"
	//
	//verifyCode := "000000|9972fca7ba9471c7dbe08324b2e31f70"
	config, _ := service.GetMedicalInsuranceConfig(adminUser.CurrentOrgId)
	order_infos, _ := service.GetHisOrderInfoByNumber(order.Number)
	var customs []*models.CustomDetail

	for _, item := range order_infos {
		cus := &models.CustomDetail{
			PrescriptionNumber: item.OrderNumber,
			ChargeSerialNumber: item.FeedetlSn,
		}
		customs = append(customs, cus)
	}

	if config.IsOpen == 1 { //对接了医保，走医保流程

		result := service.SzybJY002(doctor_name, doctor_code, miConfig.Code, order.OrgSetlNumber, order.MzNumber, verifyCode, number, version_code)
		fmt.Println(result)

		var dat map[string]interface{}
		if err := json.Unmarshal([]byte(result), &dat); err == nil {
			fmt.Println(dat)
		} else {
			fmt.Println(err)
		}
		userJSONBytes, _ := json.Marshal(dat)
		var res ResultThree
		if err := json.Unmarshal(userJSONBytes, &res); err != nil {
			utils.ErrorLog("解析失败：%v", err)
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
			return
		}
		if res.Transreturncode == "00000000" {
			service.UpdataOrderlog(order_id, adminUser.CurrentOrgId, result)
			service.UpdataOrderStatusSZ(order_id, order.Number, adminUser.CurrentOrgId)
			service.UpdataOrderInfoStatus(order.ID, order.Number, adminUser.CurrentOrgId)
			c.ServeSuccessJSON(map[string]interface{}{
				"msg": "退费成功",
			})
		} else {
			c.ServeSuccessJSON(map[string]interface{}{
				"failed_code": -10,
				"msg":         res.Transreturnmessage,
			})

		}
	}
}

//跨月退费
func (c *SZHisApiController) MonthRefund() {
	order_id, _ := c.GetInt64("order_id")
	record_time := c.GetString("record_time")
	patient_id, _ := c.GetInt64("patient_id")
	admin_user_id, _ := c.GetInt64("admin_user_id")
	timeLayout := "2006-01-02"
	loc, _ := time.LoadLocation("Local")
	adminUser := c.GetAdminUserInfo()
	theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", record_time+" 00:00:00", loc)
	fmt.Println(err)
	if err != nil {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
		return
	}
	recordDateTime := theTime.Unix()
	var order models.HisOrder
	order, _ = service.GetHisOrderByID(order_id)

	if order.ID == 0 {
		order, _ = service.GetHisOrderThree(recordDateTime, patient_id, adminUser.CurrentOrgId)

	}
	roles, _ := service.GetAdminUserInfoByID(adminUser.CurrentOrgId, admin_user_id)
	miConfig, _ := service.FindMedicalInsuranceInfo(adminUser.CurrentOrgId)
	//结算流程
	var doctor_name string
	var doctor_code string
	if roles.ID == 0 {
		doctor_name = "管理员"
		doctor_code = "01"
	} else {
		doctor_name = roles.UserName
		doctor_code = strconv.FormatInt(admin_user_id, 10)

	}
	month := time.Unix(1557042972, 0).Format("1")
	year := time.Now().Format("2006")
	month = time.Now().Format("01")
	day := time.Now().Format("02")
	//流水号
	number_two := miConfig.Code + "-" + year + month + day + "-" + strconv.FormatInt(patient_id, 10)
	//verifyCode,version_code := ReadCardGetCode("JY002" + "|" + number_two + "|" + miConfig.Code)
	version_code := "0.03"

	fmt.Println(number_two)

	verifyCode := "000000|0872038667cc34efdc35ce4668589a5f"
	config, _ := service.GetMedicalInsuranceConfig(adminUser.CurrentOrgId)
	if config.IsOpen == 1 { //对接了医保，走医保流程

		result := service.SzybJY003(doctor_name, doctor_code, miConfig.Code, order.OrgSetlNumber, order.MzNumber, verifyCode, version_code)
		fmt.Println(result)

		var dat map[string]interface{}
		if err := json.Unmarshal([]byte(result), &dat); err == nil {
			fmt.Println(dat)
		} else {
			fmt.Println(err)
		}
		userJSONBytes, _ := json.Marshal(dat)
		var res ResultThree
		if err := json.Unmarshal(userJSONBytes, &res); err != nil {
			utils.ErrorLog("解析失败：%v", err)
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
			return
		}
		if res.Transreturncode == "00000000" {
			c.ServeSuccessJSON(map[string]interface{}{
				"msg": "退费成功",
			})
		} else {
		}
	}
}

//查询
func (c *SZHisApiController) GetSettleAccounts() {
	order_id, _ := c.GetInt64("order_id")
	record_time := c.GetString("record_time")
	patient_id, _ := c.GetInt64("patient_id")
	admin_user_id, _ := c.GetInt64("admin_user_id")
	timeLayout := "2006-01-02"
	loc, _ := time.LoadLocation("Local")
	adminUser := c.GetAdminUserInfo()
	theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", record_time+" 00:00:00", loc)
	fmt.Println(err)
	if err != nil {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
		return
	}
	recordDateTime := theTime.Unix()
	fmt.Println(recordDateTime)
	var order models.HisOrder
	order, _ = service.GetHisOrderByID(order_id)

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

	patientPrescription, _ := service.FindPatientPrescriptionInfo(adminUser.CurrentOrgId, patient_id, order.SettleAccountsDate)
	adminRole_two, _ := service.GetAdminUserInfoByID(adminUser.CurrentOrgId, patientPrescription.DoctorId)

	his, _ := service.GetHisPatientInfo(adminUser.CurrentOrgId, patient_id, order.SettleAccountsDate)
	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 "17":
		yiliao_leibie = "健康体检"
		break
	case "18":
		yiliao_leibie = "预防接种"
		break
	case "19":
		yiliao_leibie = "门诊输血"
		break
	case "91":
		yiliao_leibie = "新冠肺炎门诊"
		break

	}

	//departments, _ := service.Get(patientPrescription.Departments)

	departments, _ := service.GetDepartMentDetail(patientPrescription.Departments)
	if order.ID == 0 {
		//order, _ = service.GetHisOrderThree(recordDateTime, patient_id, adminUser.CurrentOrgId)

		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeHisOrderNoExistParamWrong)
		return
	}
	roles, _ := service.GetAdminUserInfoByID(adminUser.CurrentOrgId, admin_user_id)
	miConfig, _ := service.FindMedicalInsuranceInfo(adminUser.CurrentOrgId)
	//结算流程
	var doctor_name string
	var doctor_code string
	if roles.ID == 0 {
		doctor_name = "管理员"
		doctor_code = "01"
	} else {
		doctor_name = roles.UserName
		doctor_code = strconv.FormatInt(admin_user_id, 10)

	}
	//month := time.Unix(1557042972, 0).Format("1")
	//year := time.Now().Format("2006")
	//month = time.Now().Format("01")
	//day := time.Now().Format("02")
	//流水号
	//number_two := miConfig.Code + "-" + year + month + day + "-" + strconv.FormatInt(patient_id, 10)
	//fmt.Println(number_two)
	verifyCode, version_code := ReadCardGetCode("JY001" + "|" + order.OrgSetlNumber + "|" + miConfig.Code)
	//version_code := "V0.3"
	//verifyCode := "000000|2c9854287e7c3cbc34439ab8e5157816"
	config, _ := service.GetMedicalInsuranceConfig(adminUser.CurrentOrgId)
	if config.IsOpen == 1 { //对接了医保，走医保流程
		//temp_mz_number := miConfig.Code + year + month + day +
		//	fmt.Sprintf("%07v", rand.New(rand.NewSource(time.Now().UnixNano())).Int31n(10000000))
		//tempVerifyCode, tempVersionCode := ReadCardGetCode("XX001" + "|" + temp_mz_number + "|" + miConfig.Code)

		//yiliao_number, id_card_number, verifyCode, version_code, health_card_no, _, ret4 := ReadBasCardGetNumber("MZ002" + "|" + number + "|" + miConfig.Code + "|")

		//yiliao_number = "%GALMAFXJGKUKZNKWAIUH?;07857319025346309758?"

		//result001 := service.SzybXX001(opera_name, opera_code, miConfig.Code, yiliao_number, tempVerifyCode, temp_mz_number, tempVersionCode)

		result := service.SzybJY001(doctor_name, doctor_code, miConfig.Code, order.OrgSetlNumber, order.MzNumber, verifyCode, version_code)
		fmt.Println(result)

		var dat map[string]interface{}
		if err := json.Unmarshal([]byte(result), &dat); err == nil {
			fmt.Println(dat)
		} else {
			fmt.Println(err)
		}
		userJSONBytes, _ := json.Marshal(dat)
		var res ResultFour
		if err := json.Unmarshal(userJSONBytes, &res); err != nil {
			utils.ErrorLog("解析失败：%v", err)
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
			return
		}
		if res.Transreturncode == "00000000" {

			var dat2 map[string]interface{}
			if err := json.Unmarshal([]byte(his.PatientInfo), &dat2); err == nil {
				fmt.Println(dat2)
			} else {
				fmt.Println(err)
			}
			userJSONBytes2, _ := json.Marshal(dat2)
			var res2 ResultMZ001
			if err := json.Unmarshal(userJSONBytes2, &res2); err != nil {
				utils.ErrorLog("解析失败：%v", err)
			}

			c.ServeSuccessJSON(map[string]interface{}{
				"result":             res,
				"org_name":           miConfig.OrgName,
				"org_code":           miConfig.Code,
				"patient_name":       patient.Name,
				"doctor_code":        adminRole_two.DoctorCode,
				"doctor_name":        doctor_name,
				"health_card_no":     order.PsnNo,
				"health_card_no_two": res2.Transbody.Aaz500,
				"order_number":       order.Number,
				"department":         departments.Name,
				"yiliao_leibie":      yiliao_leibie,
				"before_money":       res2.Transbody.Aae240,
				"after_money":        order.AccountPrice,
				"dialysis_no":        patient.DialysisNo,
				"patient_info":       res2,
			})
		} else {
			c.ServeSuccessJSON(map[string]interface{}{
				"failed_code": -10,
				"msg":         res.Transreturnmessage,
			})
		}
	}
}

//费用录入取消
//func (c *SZHisApiController) CancelOrderDetail() {
//	order_id, _ := c.GetInt64("order_id")
//	record_time := c.GetString("record_time")
//	patient_id, _ := c.GetInt64("patient_id")
//	admin_user_id, _ := c.GetInt64("admin_user_id")
//	timeLayout := "2006-01-02"
//	loc, _ := time.LoadLocation("Local")
//	adminUser := c.GetAdminUserInfo()
//	theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", record_time+" 00:00:00", loc)
//	fmt.Println(err)
//	if err != nil {
//		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
//		return
//	}
//	recordDateTime := theTime.Unix()
//	var order models.HisOrder
//	order, _ = service.GetHisOrderByID(order_id)
//
//	if order.ID == 0 {
//		order, _ = service.GetHisOrderThree(recordDateTime, patient_id, adminUser.CurrentOrgId)
//
//	}
//
//	order_infos, _ := service.GetHisOrderInfoByNumber(order.Number)
//
//	roles, _ := service.GetAdminUserInfoByID(adminUser.CurrentOrgId, admin_user_id)
//	miConfig, _ := service.FindMedicalInsuranceInfo(adminUser.CurrentOrgId)
//	//结算流程
//	var doctor_name string
//	var doctor_code string
//	if roles.ID == 0 {
//		doctor_name = "管理员"
//		doctor_code = "1001"
//	} else {
//		doctor_name = roles.UserName
//		doctor_code = strconv.FormatInt(admin_user_id, 10)
//
//	}
//	var customs []*models.CustomDetail
//
//	for _, item := range order_infos {
//		cus := &models.CustomDetail{
//			PrescriptionNumber: item.OrderNumber,
//			ChargeSerialNumber: item.FeedetlSn,
//		}
//		customs = append(customs, cus)
//	}
//	his, _ := service.GetHisPatientInfo(adminUser.CurrentOrgId, patient_id, recordDateTime)
//
//	verifyCode, version_code := ReadCardGetCode("FY002" + "|" + order.OrgSetlNumber + "|" + miConfig.Code)
//
//	var pagesize int = 50
//	var start int = 1
//	var stop int
//	var pagecount int
//	var curpage int
//	var isSuccess bool = true
//	var ress []*ResultFive
//
//	//总页数,向上取整,注意除之前要先转换类型为float64
//	pagecount = int(math.Ceil(float64(len(customs)) / float64(pagesize)))
//
//	for curpage = 1; curpage <= pagecount; curpage++ {
//		if curpage == 1 {
//			start = 1
//		} else {
//			start = (curpage-1)*pagesize + 1
//		}
//		stop = curpage * pagesize
//		if stop > len(customs) {
//			stop = len(customs)
//		}
//
//		result := service.SzybFY002(doctor_name, doctor_code, miConfig.Code, customs[start-1:stop], verifyCode, order.OrgSetlNumber, his.Number, version_code)
//		fmt.Println(result)
//
//		var dat map[string]interface{}
//		if err := json.Unmarshal([]byte(result), &dat); err == nil {
//			fmt.Println(dat)
//		} else {
//			fmt.Println(err)
//		}
//		userJSONBytes, _ := json.Marshal(dat)
//		var res ResultFive
//		if err := json.Unmarshal(userJSONBytes, &res); err != nil {
//			utils.ErrorLog("解析失败：%v", err)
//			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
//			return
//		}
//		if res.Transreturncode == "00000000" {
//			ress = append(ress, &res)
//		} else {
//			isSuccess = false
//			//预结算报错
//			errlog := &models.HisOrderError{
//				UserOrgId:  adminUser.CurrentOrgId,
//				Ctime:      time.Now().Unix(),
//				Mtime:      time.Now().Unix(),
//				ErrMsg:     res.Transreturnmessage,
//				Status:     1,
//				PatientId:  patient_id,
//				RecordTime: recordDateTime,
//				Stage:      11,
//			}
//			service.CreateErrMsgLog(errlog)
//
//			c.ServeSuccessJSON(map[string]interface{}{
//				"faild_code": -10,
//				"msg":        res.Transreturnmessage,
//			})
//			return
//		}
//	}
//	if isSuccess == true {
//		service.UpdataOrderInfoStatus(order.ID, order.Number, adminUser.CurrentOrgId)
//		c.ServeSuccessJSON(map[string]interface{}{
//			"msg": "撤销成功",
//		})
//	}
//}
func (c *SZHisApiController) CancelOrderDetail() {
	order_id, _ := c.GetInt64("order_id")
	record_time := c.GetString("record_time")
	patient_id, _ := c.GetInt64("patient_id")
	his_patient_id, _ := c.GetInt64("his_patient_id")

	admin_user_id, _ := c.GetInt64("admin_user_id")
	timeLayout := "2006-01-02"
	loc, _ := time.LoadLocation("Local")
	adminUser := c.GetAdminUserInfo()
	theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", record_time+" 00:00:00", loc)
	fmt.Println(err)
	if err != nil {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
		return
	}
	recordDateTime := theTime.Unix()
	var order models.HisOrder
	order, _ = service.GetHisOrderByID(order_id)

	if order.ID == 0 {
		order, _ = service.GetHisOrderThree(recordDateTime, patient_id, adminUser.CurrentOrgId)

	}

	order_infos, _ := service.GetHisOrderInfoByNumber(order.Number)

	roles, _ := service.GetAdminUserInfoByID(adminUser.CurrentOrgId, admin_user_id)
	miConfig, _ := service.FindMedicalInsuranceInfo(adminUser.CurrentOrgId)
	//结算流程
	var doctor_name string
	var doctor_code string
	if roles.ID == 0 {
		doctor_name = "管理员"
		doctor_code = "1001"
	} else {
		doctor_name = roles.UserName
		doctor_code = strconv.FormatInt(admin_user_id, 10)

	}
	var customs []*models.CustomDetail

	for _, item := range order_infos {
		cus := &models.CustomDetail{
			PrescriptionNumber: item.OrderNumber,
			ChargeSerialNumber: item.FeedetlSn,
		}
		customs = append(customs, cus)
	}
	his, _ := service.GetNewHisPatientInfo(adminUser.CurrentOrgId, his_patient_id, recordDateTime)

	verifyCode, version_code := ReadCardGetCode("FY002" + "|" + order.OrgSetlNumber + "|" + miConfig.Code)

	var pagesize int = 50
	var start int = 1
	var stop int
	var pagecount int
	var curpage int
	var isSuccess bool = true
	var ress []*ResultFive

	//总页数,向上取整,注意除之前要先转换类型为float64
	pagecount = int(math.Ceil(float64(len(customs)) / float64(pagesize)))

	for curpage = 1; curpage <= pagecount; curpage++ {
		if curpage == 1 {
			start = 1
		} else {
			start = (curpage-1)*pagesize + 1
		}
		stop = curpage * pagesize
		if stop > len(customs) {
			stop = len(customs)
		}

		result := service.SzybFY002(doctor_name, doctor_code, miConfig.Code, customs[start-1:stop], verifyCode, order.OrgSetlNumber, his.Number, version_code)
		fmt.Println(result)

		var dat map[string]interface{}
		if err := json.Unmarshal([]byte(result), &dat); err == nil {
			fmt.Println(dat)
		} else {
			fmt.Println(err)
		}
		userJSONBytes, _ := json.Marshal(dat)
		var res ResultFive
		if err := json.Unmarshal(userJSONBytes, &res); err != nil {
			utils.ErrorLog("解析失败：%v", err)
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
			return
		}
		if res.Transreturncode == "00000000" {
			ress = append(ress, &res)
		} else {
			isSuccess = false
			//预结算报错
			errlog := &models.HisOrderError{
				UserOrgId:  adminUser.CurrentOrgId,
				Ctime:      time.Now().Unix(),
				Mtime:      time.Now().Unix(),
				ErrMsg:     res.Transreturnmessage,
				Status:     1,
				PatientId:  patient_id,
				RecordTime: recordDateTime,
				Stage:      11,
			}
			service.CreateErrMsgLog(errlog)

			c.ServeSuccessJSON(map[string]interface{}{
				"faild_code": -10,
				"msg":        res.Transreturnmessage,
			})
			return
		}
	}
	if isSuccess == true {
		service.UpdataOrderInfoStatus(order.ID, order.Number, adminUser.CurrentOrgId)
		c.ServeSuccessJSON(map[string]interface{}{
			"msg": "撤销成功",
		})
	}
}

//获取verifyCode
func ReadCardGetCode(request string) (string, string) {
	request = request + "|"
	DllDef2 := syscall.MustLoadDLL("SSCardDriver_SZ.dll")
	readCards := DllDef2.MustFindProc("iVerifyCode")
	str := request
	str3 := make([]byte, 256)
	ret4, _, _ := readCards.Call(StrPtr(str), (uintptr)(unsafe.Pointer(&str3[0])))
	fmt.Println(":", string(str3))
	fmt.Println(":", ConvertToString(string(str3), "gbk", "utf-8"))
	if ret4 == 0 {
		result := string(str3)
		fmt.Println(result)
		result_arr := strings.Split(result, "|")
		verifyCode := result_arr[0] + "|" + result_arr[1]
		versionCode := result_arr[2]
		return verifyCode, versionCode

	}
	return "", ""
}

////获取卡信息
func ReadBasCardGetNumber(request string) (string, string, string, string, string, error, int64) {
	DllDef2 := syscall.MustLoadDLL("SSCardDriver_SZ.dll")
	readCards := DllDef2.MustFindProc("iReadCardBas")
	str := request
	str3 := make([]byte, 1024)
	fmt.Println(":", request)
	fmt.Println(":", StrPtr(str))

	ret4, _, err := readCards.Call(IntPtr(1), StrPtr(str), (uintptr)(unsafe.Pointer(&str3[0])))
	fmt.Println(":", string(str3))
	fmt.Println(":", ConvertToString(string(str3), "gbk", "utf-8"))
	if ret4 == 0 {
		result := string(str3)
		fmt.Println(result)
		result_arr := strings.Split(result, "|")
		//医疗证号
		yiliao_number := result_arr[12]
		//根据业务的人员信息跟设备读社保卡获取的信息进行匹配，判断是否为同一个人，相同则进行挂号操作，不同则报错
		id_card_number := result_arr[1]
		verifyCode := result_arr[11] + "|" + result_arr[13]
		versionCode := result_arr[14]
		health_card_no := result_arr[2]

		return yiliao_number, id_card_number, verifyCode, versionCode, health_card_no, err, 0
	}
	return "", "", "", "", "", err, -10
}

//读卡
func ReadBasCard(request string) (string, string, error, int64) {
	DllDef2 := syscall.MustLoadDLL("SSCardDriver_SZ.dll")
	readCards := DllDef2.MustFindProc("iReadCardBas")
	str := request
	str3 := make([]byte, 1024)
	ret4, _, err := readCards.Call(IntPtr(1), StrPtr(str), (uintptr)(unsafe.Pointer(&str3[0])))
	fmt.Println(":", string(str3))
	fmt.Println(":", ConvertToString(string(str3), "gbk", "utf-8"))
	if ret4 == 0 {
		result := string(str3)
		result_arr := strings.Split(result, "|")
		//根据业务的人员信息跟设备读社保卡获取的信息进行匹配，判断是否为同一个人，相同则进行挂号操作，不同则报错
		id_card_number := result_arr[1]
		health_card_no := result_arr[2]

		return id_card_number, health_card_no, err, 0
	}
	return "", "", err, -10
}

//
////iReadCardBas_HSM_Step1 ---- 1903 iCardInnerAuthentication ---  	iReadCardBas_HSM_Step2
//func ReadCardBasHSM(number string) string {
//	DllDef2 := syscall.MustLoadDLL("SSSE32.dll")
//	readCards := DllDef2.MustFindProc("iReadCardBas_HSM_Step1")
//	str := make([]byte, 256)
//	ret, _, _ := readCards.Call(IntPtr(3), (uintptr)(unsafe.Pointer(&str[0])))
//	fmt.Println(":", string(str))
//
//	result_arr := strings.Split(string(str), "|")
//
//	if ret == 0 {
//		readCards := DllDef2.MustFindProc("iCardInnerAuthentication")
//		str2 := make([]byte, 256)
//		str3 := "" + "|" + "" + "|" + "440300" + "|" + "" + "|" + "" + "|" + result_arr[1] + "|" + result_arr[2] + "|" + result_arr[3] + "|" + result_arr[4] + "|" + result_arr[5] + "|" + "" + "|" + "" + "|"
//		ret2, _, _ := readCards.Call(StrPtr(str3), (uintptr)(unsafe.Pointer(&str2[0])))
//		fmt.Println(":", string(str2))
//
//		if ret2 == 0 {
//			result_arr := strings.Split(string(str2), "|")
//
//			if result_arr[2] == "0" {
//				readCards := DllDef2.MustFindProc("iReadCardBas_HSM_Step2")
//				str4 := result_arr[4] + "|" + result_arr[5]
//				str5 := make([]byte, 256)
//				ret3, _, _ := readCards.Call(StrPtr(str4), StrPtr(number), (uintptr)(unsafe.Pointer(&str5[0])))
//
//				if ret3 == 0 {
//					return string(str5)
//
//				} else {
//					return ""
//				}
//			} else {
//				return ""
//			}
//		}
//		return ""
//	}
//	return ""
//
//}
//
////1904卡鉴权
//func CardAuth(request string) string {
//	DllDef2 := syscall.MustLoadDLL("SSSE32.dll")
//	readCards := DllDef2.MustFindProc("iCardAuthentication")
//	str := request
//	str3 := make([]byte, 256)
//	ret4, _, _ := readCards.Call(StrPtr(str), (uintptr)(unsafe.Pointer(&str3[0])))
//	fmt.Println(":", string(str3))
//
//	if ret4 == 0 {
//		return string(str3)
//	}
//	return ""
//}

func (c *SZHisApiController) GetDrugList() {

	adminUserInfo := c.GetAdminUserInfo()
	orgId := adminUserInfo.CurrentOrgId
	admin_user_id, _ := c.GetInt64("admin_user_id")
	roles, _ := service.GetAdminUserInfoByID(orgId, admin_user_id)
	ids := c.GetString("ids")

	stringarr := strings.Split(ids, ",")
	idss := make([]int64, 0)
	for _, item := range stringarr {
		itemsss, _ := strconv.ParseInt(item, 10, 64)
		id := int64(itemsss)
		idss = append(idss, id)
	}

	//批量获取
	list, _ := service.GetBatchDrugList(idss)

	//获取药品剂型
	drugs, _ := service.GetDrugDosageForm(orgId)
	miConfig, _ := service.FindMedicalInsuranceInfo(orgId)
	var doctor_name string
	var doctor_code string

	doctor_name = roles.UserName
	doctor_code = "1001"

	var isSuccess bool = true
	timeLayout := "20060102"
	//这里就可以查看开始和结束了
	for _, item := range list {
		recordDate := time.Unix(item.RecordDate, 0).Format(timeLayout)

		detail := &models.DrugDetail{
			MedicalInsuranceNumber: item.MedicalInsuranceNumber,
			Code:                   item.Code,
			DrugName:               item.DrugName,
			DrugSpec:               item.DrugSpec,
			DrugDosageName:         item.DrugDosageName,
			ManufacturerName:       item.ManufacturerName,
			MinUnit:                item.MinUnit,
			RetailPrice:            item.RetailPrice,
			LastPrice:              item.LastPrice,
			LimitRemark:            item.LimitRemark,
			PrescriptionMark:       strconv.FormatInt(item.PrescriptionMark, 10),
			RecordDate:             recordDate,
		}

		for _, it := range drugs {
			if item.DrugDosageForm == it.Value {
				detail.DrugDosageName = it.Code
			}
		}

		result := service.SzybML008(doctor_name, doctor_code, miConfig.Code, detail)

		var dat map[string]interface{}
		if err := json.Unmarshal([]byte(result), &dat); err == nil {
			//fmt.Println(dat)
		} else {
			//fmt.Println(err)
		}

		userJSONBytes, _ := json.Marshal(dat)

		var res Result
		if err := json.Unmarshal(userJSONBytes, &res); err != nil {
			utils.ErrorLog("解析失败：%v", err)
			//c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
			c.ServeSuccessJSON(map[string]interface{}{
				"failed_code": -10,
				"msg":         res.Transreturnmessage,
			})
			return
		}
		if res.Transreturncode == "00000000" {

			//更新备案状态
			_, err := service.UpdateBaseDrugById(item.ID)
			fmt.Println("err", err)

			c.ServeSuccessJSON(map[string]interface{}{
				"failed_code": -10,
				"msg":         res.Transreturnmessage,
			})
			return
		}
		fmt.Println(isSuccess)

		c.ServeSuccessJSON(map[string]interface{}{
			"failed_code": -10,
			"msg":         res.Transreturnmessage,
		})
		return
	}
}

func (c *SZHisApiController) GetTreatmentProject() {

	adminUserInfo := c.GetAdminUserInfo()
	orgId := adminUserInfo.CurrentOrgId

	ids := c.GetString("ids")
	stringarr := strings.Split(ids, ",")
	idss := make([]int64, 0)
	admin_user_id, _ := c.GetInt64("admin_user_id")
	roles, _ := service.GetAdminUserInfoByID(orgId, admin_user_id)
	for _, item := range stringarr {
		itemsss, _ := strconv.ParseInt(item, 10, 64)
		id := int64(itemsss)
		idss = append(idss, id)
	}

	//获取项目库数据

	list, _ := service.GetBathchMyPorjecgList(idss)

	miConfig, _ := service.FindMedicalInsuranceInfo(orgId)
	var doctor_name string
	var doctor_code string
	doctor_name = roles.UserName
	doctor_code = "1001"
	var isSuccess bool = true

	for _, item := range list {

		detail := &models.MyHisProject{
			MedicalCode:                 item.MedicalCode, //社保目录
			ProjectName:                 item.ProjectName,
			Price:                       item.Price,
			Category:                    item.Category,
			Remark:                      item.Remark,
			SocialSecurityDirectoryCode: item.SocialSecurityDirectoryCode,
			SpecailProject:              item.SpecailProject,
			RecordDate:                  item.RecordDate,
		}

		result := service.SzybML009(doctor_name, doctor_code, miConfig.Code, detail)

		var dat map[string]interface{}
		if err := json.Unmarshal([]byte(result), &dat); err == nil {
			fmt.Println(dat)
		} else {
			fmt.Println(err)
		}

		userJSONBytes, _ := json.Marshal(dat)

		var res Result
		if err := json.Unmarshal(userJSONBytes, &res); err != nil {
			utils.ErrorLog("解析失败：%v", err)
			c.ServeSuccessJSON(map[string]interface{}{
				"failed_code": -10,
				"msg":         res.Transreturnmessage,
			})
			return
		}
		if res.Transreturncode == "00000000" {
			//备案成功返回状态值
			_, err := service.UpdateProjectById(item.ID)
			fmt.Println("err", err)
		} else {
			isSuccess = false
			//失败
			c.ServeSuccessJSON(map[string]interface{}{
				"failed_code": -10,
				"msg":         res.Transreturnmessage,
			})
			return
		}
		fmt.Println(isSuccess)
		c.ServeSuccessJSON(map[string]interface{}{
			"failed_code": -10,
			"msg":         res.Transreturnmessage,
		})
		return
	}

}

func (c *SZHisApiController) GetRevocation() {

	adminUserInfo := c.GetAdminUserInfo()
	orgId := adminUserInfo.CurrentOrgId
	id, _ := c.GetInt64("id")
	admin_user_id, _ := c.GetInt64("admin_user_id")
	roles, _ := service.GetAdminUserInfoByID(orgId, admin_user_id)
	//用来区分是药品的撤销还是耗材的撤销  1.药品  2.诊疗项目 3.材料 5.辅助器具项目
	is_mark, _ := c.GetInt64("is_mark")
	type_id, _ := c.GetInt64("type_id")

	if type_id == 1 {
		//撤销
		if is_mark == 1 {
			//获取药品库数据
			list, _ := service.GetDrugListByDetail(orgId, id)

			miConfig, _ := service.FindMedicalInsuranceInfo(orgId)
			var doctor_name string
			var doctor_code string

			doctor_name = roles.UserName
			doctor_code = "1001"

			var pagesize int = 50
			var start int = 1
			var stop int
			var pagecount int
			var curpage int
			var isSuccess bool = true
			//总页数,向上取整,注意除之前要先转换类型为float64
			pagecount = int(math.Ceil(float64(len(list)) / float64(pagesize)))

			for curpage = 1; curpage <= pagecount; curpage++ {
				if curpage == 1 {
					start = 1
				} else {
					start = (curpage-1)*pagesize + 1
				}
				stop = curpage * pagesize
				if stop > len(list) {
					stop = len(list)
				}
				//这里就可以查看开始和结束了
				fmt.Println(list[start-1 : stop])
				var customs []*models.DrugDetail
				for _, item := range list {

					detail := &models.DrugDetail{

						SocialSecurityDirectoryCode: item.MedicalInsuranceNumber, //社保目录
						Code:                        item.Code,                   //协议机构内部目录编码
						DrugName:                    item.DrugName,               //协议机构内部目录名称
						DrugSpec:                    item.DrugSpec,
						ManufacturerName:            item.ManufacturerName,
						MinUnit:                     item.MinUnit,
						RetailPrice:                 item.RetailPrice, //协议机构内部项目收费价格
						LimitRemark:                 item.LimitRemark,
						MedicalInsuranceNumber:      item.MedicalInsuranceNumber, //社保目录
					}
					customs = append(customs, detail)
				}
				result := service.SzybML010(doctor_name, doctor_code, miConfig.Code, customs, type_id)
				fmt.Println("reuslt", result)
				var dat map[string]interface{}
				if err := json.Unmarshal([]byte(result), &dat); err == nil {
					fmt.Println(dat)
				} else {
					fmt.Println(err)
				}

				userJSONBytes, _ := json.Marshal(dat)

				var res Result
				if err := json.Unmarshal(userJSONBytes, &res); err != nil {
					utils.ErrorLog("解析失败：%v", err)
					c.ServeSuccessJSON(map[string]interface{}{
						"failed_code": -10,
						"msg":         res.Transreturnmessage,
					})
					return
				}
				if res.Transreturncode == "00000000" {
					//撤销成功
					_, err := service.UpdateDrugByIdDetail(id)
					fmt.Println("err", err)
				} else {
					isSuccess = false
					//失败

					c.ServeSuccessJSON(map[string]interface{}{
						"failed_code": -10,
						"msg":         res.Transreturnmessage,
					})
					return
				}
				fmt.Println(isSuccess)
				c.ServeSuccessJSON(map[string]interface{}{
					"failed_code": -10,
					"msg":         res.Transreturnmessage,
				})
				return
			}

		}

		// 备案
		if is_mark == 0 {

			adminUserInfo := c.GetAdminUserInfo()
			orgId := adminUserInfo.CurrentOrgId

			//获取药品库数据
			list, _ := service.GetDrugListByDetail(orgId, id)
			//获取药品剂型
			drugs, _ := service.GetDrugDosageForm(orgId)

			miConfig, _ := service.FindMedicalInsuranceInfo(orgId)
			var doctor_name string
			var doctor_code string

			doctor_name = roles.UserName
			doctor_code = "1001"

			var isSuccess bool = true

			//这里就可以查看开始和结束了
			for _, item := range list {

				detail := &models.DrugDetail{
					MedicalInsuranceNumber:      item.MedicalInsuranceNumber,
					SocialSecurityDirectoryCode: item.MedicalInsuranceNumber,
					Code:                        item.Code,
					DrugName:                    item.DrugName,
					DrugSpec:                    item.DrugSpec,
					DrugDosageName:              item.DrugDosageName,
					ManufacturerName:            item.ManufacturerName,
					MinUnit:                     item.MinUnit,
					RetailPrice:                 item.RetailPrice,
					LastPrice:                   item.LastPrice,
					LimitRemark:                 item.LimitRemark,
				}

				for _, it := range drugs {

					if item.DrugDosageForm == it.Value {
						detail.DrugDosageName = it.Code
					}
				}

				result := service.SzybML008(doctor_name, doctor_code, miConfig.Code, detail)

				var dat map[string]interface{}
				if err := json.Unmarshal([]byte(result), &dat); err == nil {
					//fmt.Println(dat)
				} else {
					//fmt.Println(err)
				}

				userJSONBytes, _ := json.Marshal(dat)

				var res Result
				if err := json.Unmarshal(userJSONBytes, &res); err != nil {
					utils.ErrorLog("解析失败：%v", err)
					c.ServeSuccessJSON(map[string]interface{}{
						"failed_code": -10,
						"msg":         res.Transreturnmessage,
					})
					return
				}
				if res.Transreturncode == "00000000" {

					//更新备案状态
					_, err := service.UpdateBaseDrugById(item.ID)
					fmt.Println("err", err)
				}
				fmt.Println(isSuccess)
				c.ServeSuccessJSON(map[string]interface{}{
					"failed_code": -10,
					"msg":         res.Transreturnmessage,
				})
				return
			}

		}
	}

	if type_id == 2 {

		//撤销
		if is_mark == 1 {
			//获取药品库数据
			list, _ := service.GetMyPorjecgListDetail(orgId, id)

			miConfig, _ := service.FindMedicalInsuranceInfo(orgId)
			var doctor_name string
			var doctor_code string

			doctor_name = roles.UserName
			doctor_code = "1001"

			var pagesize int = 50
			var start int = 1
			var stop int
			var pagecount int
			var curpage int
			var isSuccess bool = true
			//总页数,向上取整,注意除之前要先转换类型为float64
			pagecount = int(math.Ceil(float64(len(list)) / float64(pagesize)))

			for curpage = 1; curpage <= pagecount; curpage++ {
				if curpage == 1 {
					start = 1
				} else {
					start = (curpage-1)*pagesize + 1
				}
				stop = curpage * pagesize
				if stop > len(list) {
					stop = len(list)
				}
				//这里就可以查看开始和结束了
				fmt.Println(list[start-1 : stop])
				var customs []*models.DrugDetail
				for _, item := range list {
					detail := &models.DrugDetail{
						SocialSecurityDirectoryCode: item.MedicalCode,
					}
					customs = append(customs, detail)
				}
				result := service.SzybML010(doctor_name, doctor_code, miConfig.Code, customs, type_id)
				fmt.Println("reuslt", result)
				var dat map[string]interface{}
				if err := json.Unmarshal([]byte(result), &dat); err == nil {
					fmt.Println(dat)
				} else {
					fmt.Println(err)
				}

				userJSONBytes, _ := json.Marshal(dat)

				var res Result
				if err := json.Unmarshal(userJSONBytes, &res); err != nil {
					utils.ErrorLog("解析失败：%v", err)
					c.ServeSuccessJSON(map[string]interface{}{
						"failed_code": -10,
						"msg":         res.Transreturnmessage,
					})
					return
				}
				if res.Transreturncode == "00000000" {
					//核销成功返回状态码
					_, err := service.UpdateMyProjectById(id)
					fmt.Println("err", err)
				} else {
					isSuccess = false
					//失败

					c.ServeSuccessJSON(map[string]interface{}{
						"failed_code": -10,
						"msg":         res.Transreturnmessage,
					})
					return
				}
				fmt.Println(isSuccess)
				c.ServeSuccessJSON(map[string]interface{}{
					"failed_code": -10,
					"msg":         res.Transreturnmessage,
				})
				return
			}
		}

		//备案
		if is_mark == 0 {

			adminUserInfo := c.GetAdminUserInfo()
			orgId := adminUserInfo.CurrentOrgId

			//获取药品库数据
			list, _ := service.GetMyPorjecgListDetail(orgId, id)

			miConfig, _ := service.FindMedicalInsuranceInfo(orgId)
			var doctor_name string
			var doctor_code string
			doctor_name = roles.UserName
			doctor_code = "1001"
			var isSuccess bool = true
			for _, item := range list {
				detail := &models.MyHisProject{
					MedicalCode: item.MedicalCode, //社保目录
					ProjectName: item.ProjectName,
					Price:       item.Price,
					Category:    item.Category,
					Remark:      item.Remark,
				}

				result := service.SzybML009(doctor_name, doctor_code, miConfig.Code, detail)
				fmt.Println("reuslt", result)
				var dat map[string]interface{}
				if err := json.Unmarshal([]byte(result), &dat); err == nil {
					fmt.Println(dat)
				} else {
					fmt.Println(err)
				}

				userJSONBytes, _ := json.Marshal(dat)

				var res Result
				if err := json.Unmarshal(userJSONBytes, &res); err != nil {
					utils.ErrorLog("解析失败：%v", err)
					c.ServeSuccessJSON(map[string]interface{}{
						"failed_code": -10,
						"msg":         res.Transreturnmessage,
					})
					return
				}
				if res.Transreturncode == "00000000" {
					//备案成功返回状态值
					_, err := service.UpdateProjectById(item.ID)
					fmt.Println("err", err)
				} else {
					isSuccess = false
					//失败

					c.ServeSuccessJSON(map[string]interface{}{
						"failed_code": -10,
						"msg":         res.Transreturnmessage,
					})
					return
				}
				fmt.Println(isSuccess)
				c.ServeSuccessJSON(map[string]interface{}{
					"failed_code": -10,
					"msg":         res.Transreturnmessage,
				})
				return
			}
		}
	}

	if type_id == 3 {

		//撤销
		if is_mark == 1 {
			//获取药品库数据
			list, _ := service.GetGoodListByDetail(orgId, id)

			miConfig, _ := service.FindMedicalInsuranceInfo(orgId)
			var doctor_name string
			var doctor_code string

			doctor_name = roles.UserName
			doctor_code = "1001"

			var pagesize int = 50
			var start int = 1
			var stop int
			var pagecount int
			var curpage int
			var isSuccess bool = true
			//总页数,向上取整,注意除之前要先转换类型为float64
			pagecount = int(math.Ceil(float64(len(list)) / float64(pagesize)))

			for curpage = 1; curpage <= pagecount; curpage++ {
				if curpage == 1 {
					start = 1
				} else {
					start = (curpage-1)*pagesize + 1
				}
				stop = curpage * pagesize
				if stop > len(list) {
					stop = len(list)
				}
				//这里就可以查看开始和结束了
				fmt.Println(list[start-1 : stop])
				var customs []*models.DrugDetail
				for _, item := range list {
					fmt.Println("医疗机构编码", item.SocialSecurityDirectoryCode)
					detail := &models.DrugDetail{
						SocialSecurityDirectoryCode: item.SocialSecurityDirectoryCode,
						ManufacturerName:            item.ManufacturerName,
					}
					customs = append(customs, detail)
				}
				result := service.SzybML010(doctor_name, doctor_code, miConfig.Code, customs, type_id)
				fmt.Println("reuslt", result)
				var dat map[string]interface{}
				if err := json.Unmarshal([]byte(result), &dat); err == nil {
					fmt.Println(dat)
				} else {
					fmt.Println(err)
				}

				userJSONBytes, _ := json.Marshal(dat)

				var res Result
				if err := json.Unmarshal(userJSONBytes, &res); err != nil {
					utils.ErrorLog("解析失败：%v", err)
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
					return
				}
				if res.Transreturncode == "00000000" {
					//撤销成功后改变状态
					_, err := service.UpdateGoodInfoById(id)
					fmt.Println("err", err)
				} else {
					isSuccess = false
					//失败

					c.ServeSuccessJSON(map[string]interface{}{
						"failed_code": -10,
						"msg":         res.Transreturnmessage,
					})
					return
				}
				fmt.Println(isSuccess)
				c.ServeSuccessJSON(map[string]interface{}{
					"failed_code": -10,
					"msg":         res.Transreturnmessage,
				})
				return
			}
		}
		//备案
		if is_mark == 0 {

			adminUserInfo := c.GetAdminUserInfo()
			orgId := adminUserInfo.CurrentOrgId

			//获取所有耗材信息
			list, _ := service.GetGoodListByDetail(orgId, id)

			//获取单位
			miConfig, _ := service.FindMedicalInsuranceInfo(orgId)
			var doctor_name string
			var doctor_code string

			doctor_name = roles.UserName
			doctor_code = "1001"

			var isSuccess bool = true
			for _, item := range list {

				detail := &models.XtGoodInformation{
					GoodName:                    item.GoodName,
					SocialSecurityDirectoryCode: item.SocialSecurityDirectoryCode,
					ManufacturerName:            item.ManufacturerName,
					ProductionType:              item.ProductionType,
					SpecialMedical:              item.SpecialMedical,
					BuyPrice:                    item.BuyPrice,
					SellPrice:                   item.SellPrice,
					Remark:                      item.Remark,
					SpecificationName:           item.SpecificationName,
				}

				result := service.SzybYML007(doctor_name, doctor_code, miConfig.Code, detail)
				fmt.Println("reuslt", result)
				var dat map[string]interface{}
				if err := json.Unmarshal([]byte(result), &dat); err == nil {
					fmt.Println(dat)
				} else {
					fmt.Println(err)
				}

				userJSONBytes, _ := json.Marshal(dat)

				var res Result
				if err := json.Unmarshal(userJSONBytes, &res); err != nil {
					utils.ErrorLog("解析失败：%v", err)
					c.ServeSuccessJSON(map[string]interface{}{
						"failed_code": -10,
						"msg":         res.Transreturnmessage,
					})
					return
				}
				if res.Transreturncode == "00000000" {

					//备案成功返回状态
					_, err := service.UpdateGoodInformaitonByDetail(item.ID)
					fmt.Println("err", err)
				} else {
					isSuccess = false
					//失败

					c.ServeSuccessJSON(map[string]interface{}{
						"failed_code": -10,
						"msg":         res.Transreturnmessage,
					})
					return
				}
				fmt.Println(isSuccess)
				c.ServeSuccessJSON(map[string]interface{}{
					"failed_code": -10,
					"msg":         res.Transreturnmessage,
				})
				return
			}
		}

	}

}

func (c *SZHisApiController) GetDoctorList() {

	adminUserInfo := c.GetAdminUserInfo()
	orgid := adminUserInfo.CurrentOrgId

	ids := c.GetString("ids")

	admin_user_id, _ := c.GetInt64("admin_user_id")
	roles, _ := service.GetAdminUserInfoByID(orgid, admin_user_id)
	stringarr := strings.Split(ids, ",")
	idss := make([]int64, 0)
	for _, item := range stringarr {
		itemsss, _ := strconv.ParseInt(item, 10, 64)
		id := int64(itemsss)
		idss = append(idss, id)
	}
	//获取所有医生护士信息
	//list, _ := service.GetDoctorList(orgid)
	//批量查询
	list, _ := service.GetBatchDoctorList(idss)

	//获取所有角色名称
	roleList, _ := service.GetRoleList(orgid)

	miConfig, _ := service.FindMedicalInsuranceInfo(orgid)
	for _, item := range list {
		for _, it := range roleList {
			if item.RoleId == it.ID {
				item.Name = it.RoleName
			}
		}
	}
	var doctor_name string
	var doctor_code string

	doctor_name = roles.UserName
	doctor_code = "1001"

	var isSuccess bool = true

	for _, item := range list {
		depart, _ := service.GetDepartMentDetail(item.DepartmentId)

		detail := &models.DocDetail{
			UserName:                                item.UserName,                                                       //医护姓名
			RoleId:                                  item.Name,                                                           //医护人员类别
			Sex:                                     strconv.FormatInt(item.Sex, 10),                                     //性别
			CardType:                                strconv.FormatInt(item.CardType, 10),                                //证件类型
			IdCard:                                  item.IdCard,                                                         //证件号码
			Phone:                                   item.Mobile,                                                         //联系电话
			WorkMajorName:                           item.WorkMajorName,                                                  // 现从事专业名称
			Nation:                                  "1",                                                                 //民族
			BirthDay:                                20201022,                                                            // 出生日期
			WorkTime:                                20201022,                                                            //参加工作日期
			Education:                               strconv.FormatInt(item.Education, 10),                               //学历
			StudyMajorName:                          item.StudyMajorName,                                                 //所学的专业名称
			CertificateCode:                         item.MedicalCode,                                                    //医（药）师执业证书编码
			MedicalCode:                             item.DoctorCode,                                                     //医（药）师资格证编码
			MedicalRangeCode:                        strconv.FormatInt(item.DoctorRangeCode, 10),                         //医师执业范围代码
			MedicalLevel:                            strconv.FormatInt(item.DoctorLevel, 10),                             //医生执业资格证中的医师级别
			TypeJob:                                 strconv.FormatInt(item.DoctorTypeJob, 10),                           //医生执业资格证中的执业类别
			DoctorNumber:                            item.DoctorNumber,                                                   //医保医师编号
			Licensing:                               strconv.FormatInt(item.Licensing, 10),                               //多点执业标志
			DoctorServiceStatus:                     "",                                                                  //医师医保服务资格状态
			MonitoringLevel:                         "",                                                                  //监控等级
			DrugPsychotropicSubstances:              "",                                                                  //毒麻精神药品资格
			HealthCareCode:                          "",                                                                  // 母婴保健技术考核合格证书编号
			PlanningTechnicalServiceCode:            "",                                                                  //计划生育技术服务人员合格证编号
			PharmacistType:                          "",                                                                  //药师类别
			PharmacistPracticeCategory:              "",                                                                  //药师执业类别
			PharmacistsLicensing:                    "",                                                                  //药师执业范围
			PharmacistRegistrationNumber:            "",                                                                  //执业药师注册证编号
			OfficeCode:                              depart.Number,                                                       //科室编码
			JobNumber:                               item.JobNumber,                                                      //工号
			PostName:                                "",                                                                  //职位名称
			TechnicalJobLevelCode:                   "",                                                                  //专业技术职务级别编码
			IsActive:                                strconv.FormatInt(item.IsActive, 10),                                //在职与否
			PrescriptionQualificationIdentification: strconv.FormatInt(item.PrescriptionQualificationIdentification, 10), //处方资格标识
			IdentificationOutpatients:               strconv.FormatInt(item.IdentificationOutpatients, 10),               //门诊大病医师标识
			OutpatientIllnessCategory:               item.OutpatientIllnessCategory,                                      //门诊大病类别
			StartTime:                               20201010,                                                            //开始日期
			StaffCode:                               "",                                                                  //医护人员编码
			EndTime:                                 0,                                                                   // 结束日期
		}

		result := service.SzybYS001(doctor_name, doctor_code, miConfig.Code, detail)
		fmt.Println("reuslt", result)
		var dat map[string]interface{}
		if err := json.Unmarshal([]byte(result), &dat); err == nil {
			fmt.Println(dat)
		} else {
			fmt.Println(err)
		}

		userJSONBytes, _ := json.Marshal(dat)

		var res Result
		if err := json.Unmarshal(userJSONBytes, &res); err != nil {
			utils.ErrorLog("解析失败：%v", err)
			c.ServeSuccessJSON(map[string]interface{}{
				"failed_code": -10,
				"msg":         res.Transreturnmessage,
			})
			return
		}
		if res.Transreturncode == "00000000" {
			//批量插入数据
			_, err := service.UpdateAdminUserRoleById(item.AdminUserId, orgid)
			fmt.Println("err", err)
		} else {
			isSuccess = false
			//失败

			c.ServeSuccessJSON(map[string]interface{}{
				"failed_code": -10,
				"msg":         res.Transreturnmessage,
			})
			return
		}
		fmt.Println(isSuccess)
		c.ServeSuccessJSON(map[string]interface{}{
			"failed_code": -10,
			"msg":         res.Transreturnmessage,
		})
		return
	}

}

func (c *SZHisApiController) GetMedicalList() {

	adminUserInfo := c.GetAdminUserInfo()
	orgId := adminUserInfo.CurrentOrgId

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

	is_mark, _ := c.GetInt64("is_mark")
	admin_user_id, _ := c.GetInt64("admin_user_id")
	roles, _ := service.GetAdminUserInfoByID(orgId, admin_user_id)
	//去登记
	if is_mark == 0 {
		list, _ := service.GetDoctorListByDetail(orgId, id)

		//获取所有角色名称
		roleList, _ := service.GetRoleList(orgId)

		miConfig, _ := service.FindMedicalInsuranceInfo(orgId)
		for _, item := range list {
			for _, it := range roleList {
				if item.RoleId == it.ID {
					item.Name = it.RoleName
				}
			}
		}
		var doctor_name string
		var doctor_code string

		doctor_name = roles.UserName
		doctor_code = "1001"

		var isSuccess bool = true

		for _, item := range list {

			detail := &models.DocDetail{
				UserName:                                item.UserName,                                                       //医护姓名
				RoleId:                                  item.Name,                                                           //医护人员类别
				Sex:                                     strconv.FormatInt(item.Sex, 10),                                     //性别
				CardType:                                strconv.FormatInt(item.CardType, 10),                                //证件类型
				IdCard:                                  item.IdCard,                                                         //证件号码
				Phone:                                   item.Mobile,                                                         //联系电话
				WorkMajorName:                           item.WorkMajorName,                                                  // 现从事专业名称
				Nation:                                  item.Nation,                                                         //民族
				BirthDay:                                20201022,                                                            // 出生日期
				WorkTime:                                20201022,                                                            //参加工作日期
				Education:                               strconv.FormatInt(item.Education, 10),                               //学历
				StudyMajorName:                          item.StudyMajorName,                                                 //所学的专业名称
				CertificateCode:                         item.MedicalCode,                                                    //医（药）师执业证书编码
				MedicalCode:                             item.DoctorCode,                                                     //医（药）师资格证编码
				MedicalRangeCode:                        strconv.FormatInt(item.DoctorRangeCode, 10),                         //医师执业范围代码
				MedicalLevel:                            strconv.FormatInt(item.DoctorLevel, 10),                             //医生执业资格证中的医师级别
				TypeJob:                                 strconv.FormatInt(item.DoctorTypeJob, 10),                           //医生执业资格证中的执业类别
				DoctorNumber:                            item.DoctorNumber,                                                   //医保医师编号
				Licensing:                               strconv.FormatInt(item.Licensing, 10),                               //多点执业标志
				DoctorServiceStatus:                     "",                                                                  //医师医保服务资格状态
				MonitoringLevel:                         "",                                                                  //监控等级
				DrugPsychotropicSubstances:              "",                                                                  //毒麻精神药品资格
				HealthCareCode:                          "",                                                                  // 母婴保健技术考核合格证书编号
				PlanningTechnicalServiceCode:            "",                                                                  //计划生育技术服务人员合格证编号
				PharmacistType:                          "",                                                                  //药师类别
				PharmacistPracticeCategory:              "",                                                                  //药师执业类别
				PharmacistsLicensing:                    "",                                                                  //药师执业范围
				PharmacistRegistrationNumber:            "",                                                                  //执业药师注册证编号
				OfficeCode:                              "",                                                                  //科室编码
				JobNumber:                               item.JobNumber,                                                      //工号
				PostName:                                "",                                                                  //职位名称
				TechnicalJobLevelCode:                   "",                                                                  //专业技术职务级别编码
				IsActive:                                strconv.FormatInt(item.IsActive, 10),                                //在职与否
				PrescriptionQualificationIdentification: strconv.FormatInt(item.PrescriptionQualificationIdentification, 10), //处方资格标识
				IdentificationOutpatients:               strconv.FormatInt(item.IdentificationOutpatients, 10),               //门诊大病医师标识
				OutpatientIllnessCategory:               item.OutpatientIllnessCategory,                                      //门诊大病类别
				StartTime:                               20201010,                                                            //开始日期
				StaffCode:                               "",                                                                  //医护人员编码
				EndTime:                                 0,                                                                   // 结束日期
			}
			result := service.SzybYS001(doctor_name, doctor_code, miConfig.Code, detail)

			var dat map[string]interface{}
			if err := json.Unmarshal([]byte(result), &dat); err == nil {
				fmt.Println(dat)
			} else {
				fmt.Println(err)
			}

			userJSONBytes, _ := json.Marshal(dat)

			var res Result
			if err := json.Unmarshal(userJSONBytes, &res); err != nil {
				utils.ErrorLog("解析失败：%v", err)
				c.ServeSuccessJSON(map[string]interface{}{
					"failed_code": -10,
					"msg":         res.Transreturnmessage,
				})
				return
			}
			if res.Transreturncode == "00000000" {
				//登记成功
				service.UpdateAdminUserRoleById(item.ID, orgId)

			} else {
				isSuccess = false
				//失败

				c.ServeSuccessJSON(map[string]interface{}{
					"failed_code": -10,
					"msg":         res.Transreturnmessage,
				})
				return
			}
			fmt.Println(isSuccess)
			c.ServeSuccessJSON(map[string]interface{}{
				"failed_code": -10,
				"msg":         res.Transreturnmessage,
			})
			return
		}
	}

	//去撤销
	if is_mark == 1 {
		//获取所有医生护士信息
		list, _ := service.GetDoctorListByDetail(orgId, id)
		//获取所有角色名称
		roleList, _ := service.GetRoleList(orgId)

		miConfig, _ := service.FindMedicalInsuranceInfo(orgId)
		for _, item := range list {
			for _, it := range roleList {
				if item.RoleId == it.ID {
					item.Name = it.RoleName
				}
			}
		}
		var doctor_name string
		var doctor_code string

		doctor_name = "黄亦轩"
		doctor_code = "1001"

		var isSuccess bool = true
		for _, item := range list {
			detail := &models.DocDetail{
				UserName:                                item.UserName,                                                       //医护姓名
				RoleId:                                  item.Name,                                                           //医护人员类别
				Sex:                                     strconv.FormatInt(item.Sex, 10),                                     //性别
				CardType:                                strconv.FormatInt(item.CardType, 10),                                //证件类型
				IdCard:                                  item.IdCard,                                                         //证件号码
				Phone:                                   item.Mobile,                                                         //联系电话
				WorkMajorName:                           item.WorkMajorName,                                                  // 现从事专业名称
				Nation:                                  item.Nation,                                                         //民族
				BirthDay:                                20201022,                                                            // 出生日期
				WorkTime:                                20201022,                                                            //参加工作日期
				Education:                               strconv.FormatInt(item.Education, 10),                               //学历
				StudyMajorName:                          item.StudyMajorName,                                                 //所学的专业名称
				CertificateCode:                         item.MedicalCode,                                                    //医（药）师执业证书编码
				MedicalCode:                             item.DoctorCode,                                                     //医（药）师资格证编码
				MedicalRangeCode:                        strconv.FormatInt(item.DoctorRangeCode, 10),                         //医师执业范围代码
				MedicalLevel:                            strconv.FormatInt(item.DoctorLevel, 10),                             //医生执业资格证中的医师级别
				TypeJob:                                 strconv.FormatInt(item.DoctorTypeJob, 10),                           //医生执业资格证中的执业类别
				DoctorNumber:                            item.DoctorNumber,                                                   //医保医师编号
				Licensing:                               strconv.FormatInt(item.Licensing, 10),                               //多点执业标志
				DoctorServiceStatus:                     "",                                                                  //医师医保服务资格状态
				MonitoringLevel:                         "",                                                                  //监控等级
				DrugPsychotropicSubstances:              "",                                                                  //毒麻精神药品资格
				HealthCareCode:                          "",                                                                  // 母婴保健技术考核合格证书编号
				PlanningTechnicalServiceCode:            "",                                                                  //计划生育技术服务人员合格证编号
				PharmacistType:                          "",                                                                  //药师类别
				PharmacistPracticeCategory:              "",                                                                  //药师执业类别
				PharmacistsLicensing:                    "",                                                                  //药师执业范围
				PharmacistRegistrationNumber:            "",                                                                  //执业药师注册证编号
				OfficeCode:                              "",                                                                  //科室编码
				JobNumber:                               item.JobNumber,                                                      //工号
				PostName:                                "",                                                                  //职位名称
				TechnicalJobLevelCode:                   "",                                                                  //专业技术职务级别编码
				IsActive:                                strconv.FormatInt(item.IsActive, 10),                                //在职与否
				PrescriptionQualificationIdentification: strconv.FormatInt(item.PrescriptionQualificationIdentification, 10), //处方资格标识
				IdentificationOutpatients:               strconv.FormatInt(item.IdentificationOutpatients, 10),               //门诊大病医师标识
				OutpatientIllnessCategory:               item.OutpatientIllnessCategory,                                      //门诊大病类别
				StartTime:                               20201010,                                                            //开始日期
				StaffCode:                               "",                                                                  //医护人员编码
				EndTime:                                 0,                                                                   // 结束日期
			}
			result := service.SzybYS002(doctor_name, doctor_code, miConfig.Code, detail)

			var dat map[string]interface{}
			if err := json.Unmarshal([]byte(result), &dat); err == nil {
				fmt.Println(dat)
			} else {
				fmt.Println(err)
			}

			userJSONBytes, _ := json.Marshal(dat)

			var res Result
			if err := json.Unmarshal(userJSONBytes, &res); err != nil {
				utils.ErrorLog("解析失败：%v", err)
				c.ServeSuccessJSON(map[string]interface{}{
					"failed_code": -10,
					"msg":         res.Transreturnmessage,
				})
				return
			}
			if res.Transreturncode == "00000000" {
				//去撤销
				service.UpdateAdminUserRoleById(item.ID, orgId)
			} else {
				isSuccess = false
				//失败

				c.ServeSuccessJSON(map[string]interface{}{
					"failed_code": -10,
					"msg":         res.Transreturnmessage,
				})
				return
			}
			fmt.Println(isSuccess)
			c.ServeSuccessJSON(map[string]interface{}{
				"failed_code": -10,
				"msg":         res.Transreturnmessage,
			})
			return

		}
	}
}

func (c *SZHisApiController) GetUpdateMedicalList() {

	adminUserInfo := c.GetAdminUserInfo()
	orgId := adminUserInfo.CurrentOrgId
	//获取所有医生护士信息
	list, _ := service.GetDoctorList(orgId)
	//获取所有角色名称
	roleList, _ := service.GetRoleList(orgId)

	miConfig, _ := service.FindMedicalInsuranceInfo(orgId)
	for _, item := range list {
		for _, it := range roleList {
			if item.RoleId == it.ID {
				item.Name = it.RoleName
			}
		}
	}
	var doctor_name string
	var doctor_code string

	doctor_name = "黄亦轩"
	doctor_code = "1001"

	var pagesize int = 50
	var start int = 1
	var stop int
	var pagecount int
	var curpage int
	var isSuccess bool = true
	//总页数,向上取整,注意除之前要先转换类型为float64
	pagecount = int(math.Ceil(float64(len(list)) / float64(pagesize)))

	var ress []*Result
	for curpage = 1; curpage <= pagecount; curpage++ {
		if curpage == 1 {
			start = 1
		} else {
			start = (curpage-1)*pagesize + 1
		}
		stop = curpage * pagesize
		if stop > len(list) {
			stop = len(list)
		}
		//这里就可以查看开始和结束了
		fmt.Println(list[start-1 : stop])
		var customs []*models.DocDetail
		for _, item := range list {

			detail := &models.DocDetail{
				StaffCode:                               "",            //医护人员编码
				UserName:                                item.UserName, //医护人员姓名
				RoleId:                                  item.Name,     //医护人员类别
				Sex:                                     "",            //性别
				CardType:                                "",            //证件类型
				IdCard:                                  "",            //证件号码
				Phone:                                   "",            //联系电话
				WorkMajorName:                           "",            //现从事专业名称
				Nation:                                  "",            //民族
				BirthDay:                                20201022,      //出生日期
				WorkTime:                                20201022,      //参加工作日期
				Education:                               "",            //学历
				StudyMajorName:                          "",            //所学的专业名称
				CertificateCode:                         "",            //证书编码
				MedicalCode:                             "",            //医师资格编码
				MedicalRangeCode:                        "",            //医师执业范围代码
				MedicalLevel:                            "",            //医生级别
				TypeJob:                                 "",            //职业类别
				DoctorNumber:                            "",            //医师编号
				Licensing:                               "",            //职业标志
				DoctorServiceStatus:                     "",            //医师医保服务资格状态
				MonitoringLevel:                         "",            //监控等级
				DrugPsychotropicSubstances:              "",            //毒麻精神药品资格
				HealthCareCode:                          "",            // 母婴保健技术考核合格证书编号
				PlanningTechnicalServiceCode:            "",            //计划生育技术服务人员合格证编号
				PharmacistType:                          "",            //药师类别
				PharmacistPracticeCategory:              "",            //药师执业类别
				PharmacistsLicensing:                    "",            //药师执业范围
				PharmacistRegistrationNumber:            "",            //执业药师注册证编号
				OfficeCode:                              "",            //科室编码
				JobNumber:                               "",            //工号
				PostName:                                "",            //职位名称
				TechnicalJobLevelCode:                   "",            //专业技术职务级别编码
				IsActive:                                "",            //在职与否
				PrescriptionQualificationIdentification: "",            //处方资格标识
				IdentificationOutpatients:               "",            //门诊大病医师标识
				OutpatientIllnessCategory:               "",            //门诊大病类别
				StartTime:                               20201022,      //开始日期
				EndTime:                                 20201022,
			}
			customs = append(customs, detail)
		}

		result := service.SzybYS003(doctor_name, doctor_code, miConfig.Code, customs)

		var dat map[string]interface{}
		if err := json.Unmarshal([]byte(result), &dat); err == nil {
			fmt.Println(dat)
		} else {
			fmt.Println(err)
		}

		userJSONBytes, _ := json.Marshal(dat)

		var res Result
		if err := json.Unmarshal(userJSONBytes, &res); err != nil {
			utils.ErrorLog("解析失败：%v", err)
			c.ServeSuccessJSON(map[string]interface{}{
				"failed_code": -10,
				"msg":         res.Transreturnmessage,
			})
			return
		}
		if res.Transreturncode == "00000000" {
			ress = append(ress, &res)
		} else {
			isSuccess = false
			//失败

			c.ServeSuccessJSON(map[string]interface{}{
				"failed_code": -10,
				"msg":         res.Transreturnmessage,
			})
			return
		}
		fmt.Println(isSuccess)
		c.ServeSuccessJSON(map[string]interface{}{
			"failed_code": -10,
			"msg":         res.Transreturnmessage,
		})
		return
	}
}

func (c *SZHisApiController) GetGoodsList() {

	adminUserInfo := c.GetAdminUserInfo()
	orgId := adminUserInfo.CurrentOrgId

	ids := c.GetString("ids")

	admin_user_id, _ := c.GetInt64("admin_user_id")
	roles, _ := service.GetAdminUserInfoByID(orgId, admin_user_id)
	stringarr := strings.Split(ids, ",")
	idss := make([]int64, 0)
	for _, item := range stringarr {
		itemsss, _ := strconv.ParseInt(item, 10, 64)
		id := int64(itemsss)
		idss = append(idss, id)
	}
	//批量获取所有耗材信息
	list, _ := service.GetBatchGoodInformationList(idss)

	//获取单位
	miConfig, _ := service.FindMedicalInsuranceInfo(orgId)
	var doctor_name string
	var doctor_code string

	doctor_name = roles.UserName
	doctor_code = "1001"

	var isSuccess bool = true
	for _, item := range list {
		detail := &models.XtGoodInformation{
			GoodName:                    item.GoodName,
			SocialSecurityDirectoryCode: item.SocialSecurityDirectoryCode,
			ManufacturerName:            item.ManufacturerName,
			ProductionType:              item.ProductionType,
			SpecialMedical:              item.SpecialMedical,
			BuyPrice:                    item.BuyPrice,
			SellPrice:                   item.SellPrice,
			Remark:                      item.Remark,
			SpecificationName:           item.SpecificationName,
		}

		result := service.SzybYML007(doctor_name, doctor_code, miConfig.Code, detail)
		fmt.Println("reuslt", result)
		var dat map[string]interface{}
		if err := json.Unmarshal([]byte(result), &dat); err == nil {
			fmt.Println(dat)
		} else {
			fmt.Println(err)
		}

		userJSONBytes, _ := json.Marshal(dat)

		var res Result
		if err := json.Unmarshal(userJSONBytes, &res); err != nil {
			utils.ErrorLog("解析失败：%v", err)
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
			return
		}
		if res.Transreturncode == "00000000" {

			//备案成功返回状态
			_, err := service.UpdateGoodInformaitonByDetail(item.ID)
			fmt.Println("err", err)
		} else {
			isSuccess = false
			//失败

			c.ServeSuccessJSON(map[string]interface{}{
				"failed_code": -10,
				"msg":         res.Transreturnmessage,
			})
			return
		}
		fmt.Println(isSuccess)
		c.ServeSuccessJSON(map[string]interface{}{
			"failed_code": -10,
			"msg":         res.Transreturnmessage,
		})
		return
	}
}

type Charset string

const (
	UTF8    = Charset("UTF-8")
	GB18030 = Charset("GB18030")
)

func ConvertToString(src string, srcCode string, tagCode string) string {
	srcCoder := mahonia.NewDecoder(srcCode)
	srcResult := srcCoder.ConvertString(src)
	tagCoder := mahonia.NewDecoder(tagCode)
	_, cdata, _ := tagCoder.Translate([]byte(srcResult), true)
	result := string(cdata)
	return result
}
