package sg

import (
	"archive/zip"
	"bytes"
	"encoding/json"
	"fmt"
	"gdyb/controllers"
	"gdyb/enums"
	"gdyb/models"
	"gdyb/service"
	"gdyb/utils"
	"github.com/astaxie/beego"
	"github.com/axgle/mahonia"
	"github.com/jinzhu/gorm"
	"github.com/shopspring/decimal"
	"io"
	"io/ioutil"
	"math/rand"
	"net/http"
	"os"
	"path/filepath"
	"regexp"
	"strconv"
	"strings"
	"syscall"
	"time"
	"unsafe"
)

type HisApiController struct {
	controllers.BaseAuthAPIController
}

func HisManagerApiRegistRouters() {
	//挂号
	beego.Router("/api/register/get", &HisApiController{}, "get:GetRegisterInfo")
	//上传就诊信息-上传明细-结算
	beego.Router("/api/upload/get", &HisApiController{}, "get:GetUploadInfo")
	//查询
	beego.Router("/api/settle/query", &HisApiController{}, "get:GetSettleAccounts")
	//对总账
	beego.Router("/api/checkaccount/get", &HisApiController{}, "get:GetCheckAccount")
	//对明细
	beego.Router("/api/checkdetailaccount/get", &HisApiController{}, "get:GetCheckDetailAccount")
	//退费,退明细
	beego.Router("/api/refund/post", &HisApiController{}, "get:Refund")
	//退号
	beego.Router("/api/refundnumber/post", &HisApiController{}, "get:RefundNumber")
	//退明细
	beego.Router("/api/refunddetail/post", &HisApiController{}, "get:RefundDetail")
	//上传就诊信息-上传明细-预结算
	beego.Router("/api/presettle/get", &HisApiController{}, "get:GetPreUploadInfo")

	beego.Router("/api/treatment/check", &HisApiController{}, "get:CheckTreatment")
	beego.Router("/api/org/info", &HisApiController{}, "get:GetOrgInfo")
	beego.Router("/api/readcard", &HisApiController{}, "get:ReadCard")
	beego.Router("/api/310", &HisApiController{}, "get:Check310")
	beego.Router("/api/390", &HisApiController{}, "get:Check390")
	beego.Router("/api/patient/info", &HisApiController{}, "get:GetPatientInfo")
	beego.Router("/api/checkcode/get", &HisApiController{}, "get:GetCheckCode")
	beego.Router("/api/uncheckcode/get", &HisApiController{}, "get:UnCheckCode")
	beego.Router("/api/psn/putonrecord", &HisApiController{}, "get:PsnPutOnRecord")
	beego.Router("/api/psn/unputonrecord", &HisApiController{}, "get:PsnUnPutOnRecord")
	beego.Router("/api/psn/ncds/putonrecord", &HisApiController{}, "get:PsnPutNCDSOnRecord")
	beego.Router("/api/psn/ncds/unputonrecord", &HisApiController{}, "get:PsnPutUnNCDSOnRecord")
	beego.Router("/api/reversal", &HisApiController{}, "get:ReversalData")
	beego.Router("/api/reversal/other", &HisApiController{}, "get:ReversalOtherData")
	beego.Router("/api/settlelist/get", &HisApiController{}, "get:GetSettleList")
	beego.Router("/api/settlelisthosptial/get", &HisApiController{}, "get:GetSettleListHospital")

	beego.Router("/api/pwd/check", &HisApiController{}, "get:CheckCardPWD")
	beego.Router("/api/insutype/check", &HisApiController{}, "get:CheckInsutype")
	beego.Router("/api/batchsettlelist/get", &HisApiController{}, "get:GetBatchSettleList")
	beego.Router("/api/psn/info", &HisApiController{}, "get:GetPsnNcdsInfo")
	beego.Router("/api/allopatry/refund", &HisApiController{}, "post:RefundAllopatry")
	beego.Router("/api/check", &HisApiController{}, "get:Check")
	//beego.Router("/api/check3101", &HisApiController{}, "get:Check3101")
	//beego.Router("/api/check3102", &HisApiController{}, "get:Check3102")

	beego.Router("/90990", &HisApiController{}, "get:CheckCardPWDTwo")
	beego.Router("/9001", &HisApiController{}, "get:Get9001")

	beego.Router("/api/readelecard", &HisApiController{}, "get:ReadEleCard")

}

type Result3101 struct {
	Infcode     string      `json:"infcode"`
	InfRefmsgid string      `json:"inf_refmsgid"`
	RefmsgTime  string      `json:"refmsg_time"`
	RespondTime string      `json:"respond_time"`
	Enctype     string      `json:"enctype"`
	Signtype    string      `json:"signtype"`
	ErrMsg      interface{} `json:"err_msg"`
	Output      struct {
		Result []struct {
			JudgeResultDetailDtos []struct {
				VolaItemType string      `json:"vola_item_type"`
				MdtrtID      string      `json:"mdtrt_id"`
				JrdID        string      `json:"jrd_id"`
				PatnID       string      `json:"patn_id"`
				RxID         string      `json:"rx_id"`
				VolaAmt      interface{} `json:"vola_amt"`
			} `json:"judge_result_detail_dtos"`
			RuleID       string  `json:"rule_id"`
			VolaEvid     string  `json:"vola_evid"`
			MdtrtID      string  `json:"mdtrt_id"`
			RuleName     string  `json:"rule_name"`
			VolaAmtStas  string  `json:"vola_amt_stas"`
			JrID         string  `json:"jr_id"`
			PatnID       string  `json:"patn_id"`
			SevDeg       string  `json:"sev_deg"`
			VolaAmt      float64 `json:"vola_amt"`
			VolaBhvrType string  `json:"vola_bhvr_type"`
			VolaCont     string  `json:"vola_cont"`
		} `json:"result"`
	} `json:"output"`
}

func (c *HisApiController) Get9001() {
	adminUser := c.GetAdminUserInfo()
	miConfig, _ := service.FindMedicalInsuranceInfo(adminUser.CurrentOrgId)
	roles, _ := service.GetAdminUserInfoByID(adminUser.CurrentOrgId, 185)

	if miConfig.MdtrtareaAdmvs == "350500" {
		service.GetFjAuthorizationInfo(miConfig.Code)
	} else {
		result, _ := service.Gdyb9001(miConfig.OrgName, roles.UserName, miConfig.Code, miConfig.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey, 1669)

		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 models.Result9001
		if err := json.Unmarshal(userJSONBytes, &res); err != nil {
			utils.ErrorLog("解析失败:%v", err)
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
			return
		}

	}

}
func Check3101(c *HisApiController, patient_id int64, his_patient_id int64, admin_user_id int64, trig_scen string, record_time string, prescriptions []*models.HisPrescription) (res Result3101) {

	adminUser := c.GetAdminUserInfo()
	roles, _ := service.GetAdminUserInfoByID(c.GetAdminUserInfo().CurrentOrgId, admin_user_id)
	his, _ := service.GetNewHisPatientInfoFour(c.GetAdminUserInfo().CurrentOrgId, his_patient_id)
	miConfig, _ := service.FindMedicalInsuranceInfo(c.GetAdminUserInfo().CurrentOrgId)
	//record_time := c.GetString("record_time")
	//trig_scen := c.GetString("trig_scen")

	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 res
	}
	recordDateTime := theTime.Unix()

	var patientPrescription models.HisPrescriptionInfo
	patientPrescription, _ = service.FindHisPatientPrescriptionInfo(adminUser.CurrentOrgId, his_patient_id, recordDateTime)
	if patientPrescription.ID == 0 {
		patientPrescription, _ = service.FindLastPatientPrescriptionInfo(adminUser.CurrentOrgId, patient_id, recordDateTime)
	}
	department, _ := service.GetDepartMentDetail(patientPrescription.Departments)
	doctor_info, _ := service.GetAdminUserInfoByID(adminUser.CurrentOrgId, patientPrescription.DoctorId)
	//
	diagnosis_ids := strings.Split(patientPrescription.Diagnosis, ",")

	//prescriptions, _ := service.GetNewHisPrescriptionTen(adminUser.CurrentOrgId, his_patient_id, recordDateTime)

	var pp models.PublicParams
	pp.InsuplcAdmdvs = miConfig.InsuplcAdmdvs
	pp.MdtrtareaAdmvs = miConfig.MdtrtareaAdmvs
	pp.FixmedinsName = miConfig.OrgName
	pp.FixmedinsCode = miConfig.Code

	pp.RequestUrl = miConfig.Url
	pp.Cainfo = miConfig.Cainfo
	pp.SecretKey = miConfig.SecretKey
	pp.AccessKey = miConfig.AccessKey
	pp.OpterName = roles.UserName

	var config []*models.HisXtDiagnoseConfig
	for _, item := range diagnosis_ids {
		id, _ := strconv.ParseInt(item, 10, 64)
		diagnosisConfig, _ := service.FindDiagnoseById(id)
		config = append(config, &diagnosisConfig)
	}

	var pd models.PatientDtos
	pd.PatnID = his.PsnNo
	pd.PatnName = his.Name
	pd.Gend = his.Gend
	pd.Brdy = his.Brdy
	pd.Poolarea = his.InsuplcAdmdvs
	pd.CurrMdtrtID = his.Number

	var fed models.FsiEncounterDtos
	fed.MdtrtID = his.Number
	fed.MedinsID = miConfig.Code
	fed.MedinsName = miConfig.OrgName
	fed.MedinsAdmdvs = miConfig.MdtrtareaAdmvs
	fed.MedMdtrtType = "1"
	fed.MedinsType = "1"
	fed.MedinsLv = "11"
	tm := time.Unix(his.RecordDate, 0)
	s_tm := tm.Format("2006-01-02 15:04:05")
	fed.AdmDate = s_tm
	fed.DscgDate = s_tm
	fed.DscgMainDiseCodg = config[0].CountryCode
	fed.DscgMainDiseName = config[0].CountryContentName
	//诊断信息
	var fdds []*models.FsiDiagnoseDtos
	for index, item := range config {
		if index == 0 {
			var fdd models.FsiDiagnoseDtos
			fdd.DiseID = strconv.FormatInt(item.ID, 10)
			fdd.InoutDiseType = "1"
			fdd.MaindiseFlag = "1"
			fdd.DiseDate = s_tm
			fdd.DiasSrtNo = "1"
			fdd.DiseName = item.CountryContentName
			fdd.DiseCodg = item.CountryCode
			fdds = append(fdds, &fdd)

		} else {
			var fdd models.FsiDiagnoseDtos
			fdd.DiseID = strconv.FormatInt(item.ID, 10)
			fdd.InoutDiseType = "1"
			fdd.MaindiseFlag = "1"
			fdd.DiseDate = s_tm
			fdd.DiasSrtNo = strconv.FormatInt(int64(index), 10)
			fdd.DiseName = item.CountryContentName
			fdd.DiseCodg = item.CountryCode
			fdds = append(fdds, &fdd)
		}
	}
	fed.DrCodg = strconv.FormatInt(doctor_info.ID, 10)
	fed.AdmDeptCodg = strconv.FormatInt(department.ID, 10)
	fed.AdmDeptName = department.Name
	fed.DscgDeptCodg = strconv.FormatInt(department.ID, 10)
	fed.DscgDeptName = department.Name
	fed.MedMdtrtType = "1"
	fed.MedType = "11"
	//if his.Insutype == "390" {
	//	fed.MedType = "1402"
	//} else {
	//	fed.MedType = "9933"
	//}
	var orders []*models.FsiOrderDtos

	if trig_scen == "2" {
		//处方医嘱信息
		for _, item := range prescriptions {
			for _, subItem := range item.HisDoctorAdviceInfo {
				var order models.FsiOrderDtos
				order.RxID = strconv.FormatInt(item.ID, 10)
				order.Rxno = strconv.FormatInt(item.ID, 10)
				order.LongDrordFlag = "0"
				order.HilistType = "1"
				order.ChrgType = "1"
				order.DrordBhvr = "-"
				order.HilistCode = subItem.BaseDrugLib.MedicalInsuranceNumber
				order.HosplistName = subItem.BaseDrugLib.DrugName
				order.HilistLv = "1"
				order.HilistPric = fmt.Sprintf("%.2f", subItem.Price)
				order.HosplistCode = subItem.BaseDrugLib.MedicalInsuranceNumber
				order.HosplistName = subItem.BaseDrugLib.DrugName
				order.Cnt = fmt.Sprintf("%.2f", subItem.PrescribingNumber)
				order.Pric = fmt.Sprintf("%.2f", subItem.Price)
				order.Sumamt = fmt.Sprintf("%.2f", (subItem.PrescribingNumber * subItem.Price))
				order.OwnpayAmt = ""
				order.SelfpayAmt = ""
				order.Spec = ""
				order.SpecUnt = ""
				order.DrordBegnDate = s_tm
				order.DrordStopDate = ""
				order.DrordDrCodg = "1"
				order.DrordDeptName = department.Name
				order.DrordDrCodg = "1"
				order.DrordDrName = doctor_info.UserName
				order.DrordDrProfttl = ""
				order.CurrDrordFlag = "1"
				orders = append(orders, &order)
			}
			for _, subItem := range item.HisPrescriptionProject {
				if subItem.Type == 2 {
					var order models.FsiOrderDtos
					order.RxID = strconv.FormatInt(item.ID, 10)
					order.Rxno = strconv.FormatInt(item.ID, 10)
					order.LongDrordFlag = "0"
					order.HilistType = "1"
					order.ChrgType = "1"
					order.DrordBhvr = "-"
					order.HilistCode = subItem.HisProject.MedicalCode
					order.HosplistName = subItem.HisProject.ProjectName
					order.HilistLv = "1"
					order.HilistPric = fmt.Sprintf("%.2f", subItem.Price)
					order.HosplistCode = subItem.HisProject.MedicalCode
					order.HosplistName = subItem.HisProject.ProjectName
					order.Cnt = subItem.Count
					cnt, _ := strconv.ParseFloat(subItem.Count, 64)
					order.Pric = fmt.Sprintf("%.2f", subItem.Price)
					order.Sumamt = fmt.Sprintf("%.2f", subItem.Price*cnt)
					order.OwnpayAmt = ""
					order.SelfpayAmt = ""
					order.Spec = ""
					order.SpecUnt = ""
					order.DrordBegnDate = s_tm
					order.DrordStopDate = ""
					order.DrordDrCodg = "1"
					order.DrordDeptName = department.Name
					order.DrordDrCodg = "1"
					order.DrordDrName = doctor_info.UserName
					order.DrordDrProfttl = ""
					order.CurrDrordFlag = "1"
					orders = append(orders, &order)

				}
				if subItem.Type == 3 {

					var order models.FsiOrderDtos
					order.RxID = strconv.FormatInt(item.ID, 10)
					order.Rxno = strconv.FormatInt(item.ID, 10)
					order.LongDrordFlag = "0"
					order.HilistType = "1"
					order.ChrgType = "1"
					order.DrordBhvr = "-"
					order.HilistCode = subItem.GoodInfo.MedicalInsuranceNumber
					order.HosplistName = subItem.GoodInfo.GoodName
					order.HilistLv = "1"
					order.HilistPric = fmt.Sprintf("%.2f", subItem.Price)
					order.HosplistCode = subItem.GoodInfo.MedicalInsuranceNumber
					order.HosplistName = subItem.GoodInfo.GoodName
					order.Cnt = subItem.Count
					cnt, _ := strconv.ParseFloat(subItem.Count, 64)
					order.Pric = fmt.Sprintf("%.2f", subItem.Price)
					order.Sumamt = fmt.Sprintf("%.2f", subItem.Price*cnt)
					order.OwnpayAmt = ""
					order.SelfpayAmt = ""
					order.Spec = ""
					order.SpecUnt = ""
					order.DrordBegnDate = s_tm
					order.DrordStopDate = ""
					order.DrordDrCodg = "1"
					order.DrordDeptName = department.Name
					order.DrordDrCodg = "1"
					order.DrordDrName = doctor_info.UserName
					order.DrordDrProfttl = ""
					order.CurrDrordFlag = "1"
					orders = append(orders, &order)

				}
			}
		}
		//处方医嘱信息
	}
	fed.MatnStas = "0"
	fed.MedfeeSumamt = "0"
	fed.OwnpayAmt = "0"
	fed.SelfpayAmt = "0"
	fed.AcctPayamt = "0"
	fed.MaAmt = "0"
	fed.HifpPayamt = "0"
	fed.SetlTotlnum = "1"
	fed.Insutype = his.Insutype
	fed.ReimFlag = "0"
	fed.OutSetlFlag = "0"

	var fopd []*models.FsiOperationDtosData
	data := make(map[string]interface{})
	data["fed"] = fed
	data["fdd"] = fdds
	data["fod"] = orders
	data["pd"] = pd
	data["pp"] = pp
	data["fopd"] = fopd
	data["trig_scen"] = trig_scen
	fmt.Println(data)
	fmt.Println(fed)
	fmt.Println(fdds)
	fmt.Println(orders)
	fmt.Println(pd)
	fmt.Println(pp)
	fmt.Println(fopd)

	client := &http.Client{}
	bytesData, _ := json.Marshal(data)
	var req *http.Request

	if miConfig.MdtrtareaAdmvs == "320921" {
		req, _ = http.NewRequest("POST", "http://192.168.2.110:9532/"+"jsyb/3101", bytes.NewReader(bytesData))
	} else {
		req, _ = http.NewRequest("POST", "http://192.168.5.251:9532/"+"jsyb/3101", bytes.NewReader(bytesData))
	}

	resp, _ := client.Do(req)
	defer resp.Body.Close()
	body, ioErr := ioutil.ReadAll(resp.Body)
	if ioErr != nil {
		utils.ErrorLog("接口返回数据读取失败: %v", ioErr)
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
		return res
	}
	var respJSON map[string]interface{}
	if err := json.Unmarshal([]byte(body), &respJSON); err != nil {
		utils.ErrorLog("接口返回数据解析JSON失败: %v", err)
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
		return res
	}
	respJSON = respJSON["data"].(map[string]interface{})["pre"].(map[string]interface{})
	result, _ := json.Marshal(respJSON)
	if err := json.Unmarshal([]byte(result), &res); err != nil {
		utils.ErrorLog("解析失败:%v", err)
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
		return res
	}

	return res

}

func Check3102(c *HisApiController, patient_id int64, his_patient_id int64, admin_user_id int64, trig_scen string, order_id int64) (res Result3101) {
	////patient_id, _ := c.GetInt64("patient_id")
	//order_id, _ := c.GetInt64("order_id")
	////his_patient_id, _ := c.GetInt64("his_patient_id")
	////admin_user_id, _ := c.GetInt64("admin_user_id")
	//trig_scen := c.GetString("trig_scen")

	adminUser := c.GetAdminUserInfo()
	roles, _ := service.GetAdminUserInfoByID(c.GetAdminUserInfo().CurrentOrgId, admin_user_id)
	his, _ := service.GetNewHisPatientInfoFour(c.GetAdminUserInfo().CurrentOrgId, his_patient_id)
	miConfig, _ := service.FindMedicalInsuranceInfo(c.GetAdminUserInfo().CurrentOrgId)
	record_time := c.GetString("record_time")
	order, _ := service.GetHisOrderByID(order_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()

	var patientPrescription models.HisPrescriptionInfo
	patientPrescription, _ = service.FindHisPatientPrescriptionInfo(adminUser.CurrentOrgId, his_patient_id, recordDateTime)
	if patientPrescription.ID == 0 {
		patientPrescription, _ = service.FindLastPatientPrescriptionInfo(adminUser.CurrentOrgId, patient_id, recordDateTime)
	}
	department, _ := service.GetDepartMentDetail(patientPrescription.Departments)
	doctor_info, _ := service.GetAdminUserInfoByID(adminUser.CurrentOrgId, patientPrescription.DoctorId)
	//
	diagnosis_ids := strings.Split(his.Diagnosis, ",")

	prescriptions, _ := service.GetNewHisPrescriptionTen(adminUser.CurrentOrgId, his_patient_id, recordDateTime)

	var pp models.PublicParams
	pp.InsuplcAdmdvs = miConfig.InsuplcAdmdvs
	pp.MdtrtareaAdmvs = miConfig.MdtrtareaAdmvs
	pp.FixmedinsName = miConfig.OrgName
	pp.FixmedinsCode = miConfig.Code
	pp.RequestUrl = miConfig.Url
	pp.Cainfo = miConfig.Cainfo
	pp.SecretKey = miConfig.SecretKey
	pp.AccessKey = miConfig.AccessKey
	pp.OpterName = roles.UserName

	var config []*models.HisXtDiagnoseConfig
	for _, item := range diagnosis_ids {
		id, _ := strconv.ParseInt(item, 10, 64)
		diagnosisConfig, _ := service.FindDiagnoseById(id)
		config = append(config, &diagnosisConfig)
	}

	var pd models.PatientDtos
	pd.PatnID = his.PsnNo
	pd.PatnName = his.Name
	pd.Gend = his.Gend
	pd.Brdy = his.Brdy
	pd.Poolarea = his.InsuplcAdmdvs
	pd.CurrMdtrtID = his.Number

	var fed models.FsiEncounterDtos
	fed.MdtrtID = his.Number
	fed.MedinsID = miConfig.Code
	fed.MedinsName = miConfig.OrgName
	fed.MedinsAdmdvs = miConfig.MdtrtareaAdmvs
	fed.MedMdtrtType = "1"
	fed.MedinsType = "1"
	fed.MedinsLv = "11"
	tm := time.Unix(his.RecordDate, 0)
	s_tm := tm.Format("2006-01-02 15:04:05")
	fed.AdmDate = s_tm
	fed.DscgDate = s_tm
	fed.DscgMainDiseCodg = config[0].CountryCode
	fed.DscgMainDiseName = config[0].CountryContentName
	//诊断信息
	var fdds []*models.FsiDiagnoseDtos
	for index, item := range config {
		if index == 0 {
			var fdd models.FsiDiagnoseDtos
			fdd.DiseID = strconv.FormatInt(item.ID, 10)
			fdd.InoutDiseType = "1"
			fdd.MaindiseFlag = "1"
			fdd.DiseDate = s_tm
			fdd.DiasSrtNo = "1"
			fdd.DiseName = item.CountryContentName
			fdd.DiseCodg = item.CountryCode
			fdds = append(fdds, &fdd)

		} else {
			var fdd models.FsiDiagnoseDtos
			fdd.DiseID = strconv.FormatInt(item.ID, 10)
			fdd.InoutDiseType = "1"
			fdd.MaindiseFlag = "1"
			fdd.DiseDate = s_tm
			fdd.DiasSrtNo = strconv.FormatInt(int64(index), 10)
			fdd.DiseName = item.CountryContentName
			fdd.DiseCodg = item.CountryCode
			fdds = append(fdds, &fdd)
		}
	}
	fed.DrCodg = strconv.FormatInt(doctor_info.ID, 10)
	fed.AdmDeptCodg = strconv.FormatInt(department.ID, 10)
	fed.AdmDeptName = department.Name
	fed.DscgDeptCodg = strconv.FormatInt(department.ID, 10)
	fed.DscgDeptName = department.Name

	fed.MedType = order.MedType
	//处方医嘱信息
	var orders []*models.FsiOrderDtos
	//for _, item := range prescriptions {
	//	for _, subItem := range item.HisDoctorAdviceInfo {
	//		var order models.FsiOrderDtos
	//		order.RxID = strconv.FormatInt(item.ID, 10)
	//		order.Rxno = strconv.FormatInt(item.ID, 10)
	//		order.LongDrordFlag = "0"
	//		order.HilistType = "1"
	//		order.ChrgType = "1"
	//		order.DrordBhvr = "-"
	//		order.HilistCode = subItem.BaseDrugLib.MedicalInsuranceNumber
	//		order.HosplistName = subItem.BaseDrugLib.DrugName
	//		order.HilistLv = "1"
	//		order.HilistPric = strconv.FormatFloat(subItem.Price, 'E', -1, 64)
	//		order.HosplistCode = subItem.BaseDrugLib.MedicalInsuranceNumber
	//		order.HosplistName = subItem.BaseDrugLib.DrugName
	//		order.Cnt = strconv.FormatFloat(subItem.PrescribingNumber, 'E', -1, 64)
	//		order.Pric = strconv.FormatFloat(subItem.Price, 'E', -1, 64)
	//		order.Sumamt = strconv.FormatFloat((subItem.Price * subItem.PrescribingNumber), 'E', -1, 64)
	//		order.OwnpayAmt = ""
	//		order.SelfpayAmt = ""
	//		order.Spec = ""
	//		order.SpecUnt = ""
	//		order.DrordBegnDate = s_tm
	//		order.DrordStopDate = ""
	//		order.DrordDrCodg = "1"
	//		order.DrordDeptName = department.Name
	//		order.DrordDrCodg = "1"
	//		order.DrordDrName = doctor_info.UserName
	//		order.DrordDrProfttl = ""
	//		order.CurrDrordFlag = "1"
	//		orders = append(orders, &order)
	//	}
	//	for _, subItem := range item.HisPrescriptionProject {
	//		if subItem.Type == 2 {
	//			var order models.FsiOrderDtos
	//			order.RxID = strconv.FormatInt(item.ID, 10)
	//			order.Rxno = strconv.FormatInt(item.ID, 10)
	//			order.LongDrordFlag = "0"
	//			order.HilistType = "1"
	//			order.ChrgType = "1"
	//			order.DrordBhvr = "-"
	//			order.HilistCode = subItem.HisProject.MedicalCode
	//			order.HosplistName = subItem.HisProject.ProjectName
	//			order.HilistLv = "1"
	//			order.HilistPric = strconv.FormatFloat(subItem.Price, 'E', -1, 64)
	//			order.HosplistCode = subItem.HisProject.MedicalCode
	//			order.HosplistName = subItem.HisProject.ProjectName
	//			order.Cnt = subItem.Count
	//			cnt, _ := strconv.ParseFloat(subItem.Count, 64)
	//
	//			order.Pric = strconv.FormatFloat(subItem.Price, 'E', -1, 64)
	//			order.Sumamt = strconv.FormatFloat((subItem.Price * cnt), 'E', -1, 64)
	//			order.OwnpayAmt = ""
	//			order.SelfpayAmt = ""
	//			order.Spec = ""
	//			order.SpecUnt = ""
	//			order.DrordBegnDate = s_tm
	//			order.DrordStopDate = ""
	//			order.DrordDrCodg = "1"
	//			order.DrordDeptName = department.Name
	//			order.DrordDrCodg = "1"
	//			order.DrordDrName = doctor_info.UserName
	//			order.DrordDrProfttl = ""
	//			order.CurrDrordFlag = "1"
	//			orders = append(orders, &order)
	//
	//		}
	//		if subItem.Type == 3 {
	//
	//			var order models.FsiOrderDtos
	//			order.RxID = strconv.FormatInt(item.ID, 10)
	//			order.Rxno = strconv.FormatInt(item.ID, 10)
	//			order.LongDrordFlag = "0"
	//			order.HilistType = "1"
	//			order.ChrgType = "1"
	//			order.DrordBhvr = "-"
	//			order.HilistCode = subItem.GoodInfo.MedicalInsuranceNumber
	//			order.HosplistName = subItem.GoodInfo.GoodName
	//			order.HilistLv = "1"
	//			order.HilistPric = strconv.FormatFloat(subItem.Price, 'E', -1, 64)
	//			order.HosplistCode = subItem.GoodInfo.MedicalInsuranceNumber
	//			order.HosplistName = subItem.GoodInfo.GoodName
	//			order.Cnt = subItem.Count
	//			cnt, _ := strconv.ParseFloat(subItem.Count, 64)
	//			order.Pric = strconv.FormatFloat(subItem.Price, 'E', -1, 64)
	//			order.Sumamt = strconv.FormatFloat((subItem.Price * cnt), 'E', -1, 64)
	//			order.OwnpayAmt = ""
	//			order.SelfpayAmt = ""
	//			order.Spec = ""
	//			order.SpecUnt = ""
	//			order.DrordBegnDate = s_tm
	//			order.DrordStopDate = ""
	//			order.DrordDrCodg = "1"
	//			order.DrordDeptName = department.Name
	//			order.DrordDrCodg = "1"
	//			order.DrordDrName = doctor_info.UserName
	//			order.DrordDrProfttl = ""
	//			order.CurrDrordFlag = "1"
	//			orders = append(orders, &order)
	//
	//		}
	//	}
	//}
	for _, item := range prescriptions {
		for _, subItem := range item.HisDoctorAdviceInfo {
			var order models.FsiOrderDtos
			order.RxID = strconv.FormatInt(item.ID, 10)
			order.Rxno = strconv.FormatInt(item.ID, 10)
			order.LongDrordFlag = "0"
			order.HilistType = "1"
			order.ChrgType = "1"
			order.DrordBhvr = "-"
			order.HilistCode = subItem.BaseDrugLib.MedicalInsuranceNumber
			order.HosplistName = subItem.BaseDrugLib.DrugName
			order.HilistLv = "1"
			order.HilistPric = fmt.Sprintf("%.2f", subItem.Price)
			order.HosplistCode = subItem.BaseDrugLib.MedicalInsuranceNumber
			order.HosplistName = subItem.BaseDrugLib.DrugName
			order.Cnt = fmt.Sprintf("%.2f", subItem.PrescribingNumber)
			order.Pric = fmt.Sprintf("%.2f", subItem.Price)
			order.Sumamt = fmt.Sprintf("%.2f", (subItem.PrescribingNumber * subItem.Price))
			order.OwnpayAmt = ""
			order.SelfpayAmt = ""
			order.Spec = ""
			order.SpecUnt = ""
			order.DrordBegnDate = s_tm
			order.DrordStopDate = ""
			order.DrordDrCodg = "1"
			order.DrordDeptName = department.Name
			order.DrordDrCodg = "1"
			order.DrordDrName = doctor_info.UserName
			order.DrordDrProfttl = ""
			order.CurrDrordFlag = "1"
			orders = append(orders, &order)
		}
		for _, subItem := range item.HisPrescriptionProject {
			if subItem.Type == 2 {
				var order models.FsiOrderDtos
				order.RxID = strconv.FormatInt(item.ID, 10)
				order.Rxno = strconv.FormatInt(item.ID, 10)
				order.LongDrordFlag = "0"
				order.HilistType = "1"
				order.ChrgType = "1"
				order.DrordBhvr = "-"
				order.HilistCode = subItem.HisProject.MedicalCode
				order.HosplistName = subItem.HisProject.ProjectName
				order.HilistLv = "1"
				order.HilistPric = fmt.Sprintf("%.2f", subItem.Price)
				order.HosplistCode = subItem.HisProject.MedicalCode
				order.HosplistName = subItem.HisProject.ProjectName
				order.Cnt = subItem.Count
				cnt, _ := strconv.ParseFloat(subItem.Count, 64)
				order.Pric = fmt.Sprintf("%.2f", subItem.Price)
				order.Sumamt = fmt.Sprintf("%.2f", subItem.Price*cnt)
				order.OwnpayAmt = ""
				order.SelfpayAmt = ""
				order.Spec = ""
				order.SpecUnt = ""
				order.DrordBegnDate = s_tm
				order.DrordStopDate = ""
				order.DrordDrCodg = "1"
				order.DrordDeptName = department.Name
				order.DrordDrCodg = "1"
				order.DrordDrName = doctor_info.UserName
				order.DrordDrProfttl = ""
				order.CurrDrordFlag = "1"
				orders = append(orders, &order)

			}
			if subItem.Type == 3 {

				var order models.FsiOrderDtos
				order.RxID = strconv.FormatInt(item.ID, 10)
				order.Rxno = strconv.FormatInt(item.ID, 10)
				order.LongDrordFlag = "0"
				order.HilistType = "1"
				order.ChrgType = "1"
				order.DrordBhvr = "-"
				order.HilistCode = subItem.GoodInfo.MedicalInsuranceNumber
				order.HosplistName = subItem.GoodInfo.GoodName
				order.HilistLv = "1"
				order.HilistPric = fmt.Sprintf("%.2f", subItem.Price)
				order.HosplistCode = subItem.GoodInfo.MedicalInsuranceNumber
				order.HosplistName = subItem.GoodInfo.GoodName
				order.Cnt = subItem.Count
				cnt, _ := strconv.ParseFloat(subItem.Count, 64)
				order.Pric = fmt.Sprintf("%.2f", subItem.Price)
				order.Sumamt = fmt.Sprintf("%.2f", subItem.Price*cnt)
				order.OwnpayAmt = ""
				order.SelfpayAmt = ""
				order.Spec = ""
				order.SpecUnt = ""
				order.DrordBegnDate = s_tm
				order.DrordStopDate = ""
				order.DrordDrCodg = "1"
				order.DrordDeptName = department.Name
				order.DrordDrCodg = "1"
				order.DrordDrName = doctor_info.UserName
				order.DrordDrProfttl = ""
				order.CurrDrordFlag = "1"
				orders = append(orders, &order)

			}
		}
	}
	//处方医嘱信息
	fed.MatnStas = "0"
	fed.MedfeeSumamt = fmt.Sprintf("%.2f", order.MedfeeSumamt)
	fed.OwnpayAmt = fmt.Sprintf("%.2f", order.FulamtOwnpayAmt)
	fed.SelfpayAmt = fmt.Sprintf("%.2f", order.PreselfpayAmt)
	fed.AcctPayamt = fmt.Sprintf("%.2f", order.AcctPay)
	fed.MaAmt = fmt.Sprintf("%.2f", order.MafPay)
	fed.HifpPayamt = fmt.Sprintf("%.2f", order.HifpPay)
	fed.SetlTotlnum = "1"
	fed.Insutype = his.Insutype
	fed.ReimFlag = "0"
	fed.OutSetlFlag = "0"

	var fopd []*models.FsiOperationDtosData
	data := make(map[string]interface{})
	data["fed"] = fed
	data["fdd"] = fdds
	data["fod"] = orders
	data["pd"] = pd
	data["pp"] = pp
	data["fopd"] = fopd
	data["trig_scen"] = trig_scen

	client := &http.Client{}
	bytesData, _ := json.Marshal(data)
	var req *http.Request
	if miConfig.MdtrtareaAdmvs == "320921" {
		req, _ = http.NewRequest("POST", "http://192.168.2.110:9532/"+"jsyb/3102", bytes.NewReader(bytesData))
	} else {
		req, _ = http.NewRequest("POST", "http://192.168.5.251:9532/"+"jsyb/3102", bytes.NewReader(bytesData))
	}

	resp, _ := client.Do(req)
	defer resp.Body.Close()
	body, ioErr := ioutil.ReadAll(resp.Body)
	if ioErr != nil {
		utils.ErrorLog("接口返回数据读取失败: %v", ioErr)
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
		return res
	}
	var respJSON map[string]interface{}
	if err := json.Unmarshal([]byte(body), &respJSON); err != nil {
		utils.ErrorLog("接口返回数据解析JSON失败: %v", err)
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
		return res
	}

	respJSON = respJSON["data"].(map[string]interface{})["pre"].(map[string]interface{})
	result, _ := json.Marshal(respJSON)
	if err := json.Unmarshal([]byte(result), &res); err != nil {
		utils.ErrorLog("解析失败:%v", err)
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
		return res
	}

	return res
	//手术操作集合

	//手术操作集合

}

func (c *HisApiController) Check() {
	psn_no := c.GetString("psn_no")
	in := c.GetString("in")
	mt := c.GetString("mt")

	baseParams := models.BaseParams{
		SecretKey:      "MSDBYGxXm1Mtyi3PtOUB7n1ktcxwyW57",
		FixmedinsCode:  "H15049901371",
		InsuplcAdmdvs:  "150499",
		MdtrtareaAdmvs: "150499",
		OrgName:        "赤峰费森血液透析中心",
		Doctor:         "1111",
	}
	service.Gdyb2001(baseParams, psn_no, in, mt)

}
func (c *HisApiController) GetPsnNcdsInfo() {
	admin_user_id, _ := c.GetInt64("admin_user_id")
	patient_id, _ := c.GetInt64("patient_id")

	id, _ := c.GetInt64("id")
	adminUser := c.GetAdminUserInfo()
	miConfig, _ := service.FindMedicalInsuranceInfo(adminUser.CurrentOrgId)
	//config, _ := service.GetMedicalInsuranceConfig(adminUser.CurrentOrgId)
	//patient, _ := service.GetPatientByID(c.GetAdminUserInfo().CurrentOrgId, id)
	role, _ := service.GetAdminUserInfoByID(adminUser.CurrentOrgId, admin_user_id)
	psn_record, _ := service.GetPsnNCDSRecordById(id)
	//
	//if psn_record.ID == 0 {
	//	c.ServeFailJSONWithSGJErrorCode(enums.ErrorPsnRecordNoExistWrong)
	//	return
	//}

	var res Result5301
	var res10265 Result5301For10265

	if miConfig.MdtrtareaAdmvs == "320921" || miConfig.MdtrtareaAdmvs == "320982" {

		psn_info, _ := service.GetPsnByPatientId(patient_id)
		var api string
		if miConfig.MdtrtareaAdmvs == "320921" {
			api = "http://192.168.2.110:9532/" + "jsyb/5301?" + "fixmedins_code=" + miConfig.Code + "&secret_key=" + miConfig.SecretKey + "&ak=" + miConfig.AccessKey + "&org_name=" + miConfig.OrgName + "&doctor=" + role.UserName +
				"&insuplc_admdvs=" + miConfig.InsuplcAdmdvs + "&mdtrtarea_admvs=" + miConfig.MdtrtareaAdmvs + "&secret_key=" + miConfig.SecretKey + "&url=" + miConfig.Url + "&psn_no=" + psn_info.PsnNo + "&cainfo=" + miConfig.Cainfo

		} else {
			api = "http://192.168.5.251:9532/" + "jsyb/5301?" + "fixmedins_code=" + miConfig.Code + "&secret_key=" + miConfig.SecretKey + "&ak=" + miConfig.AccessKey + "&org_name=" + miConfig.OrgName + "&doctor=" + role.UserName +
				"&insuplc_admdvs=" + miConfig.InsuplcAdmdvs + "&mdtrtarea_admvs=" + miConfig.MdtrtareaAdmvs + "&secret_key=" + miConfig.SecretKey + "&url=" + miConfig.Url + "&psn_no=" + psn_info.PsnNo + "&cainfo=" + miConfig.Cainfo

		}

		resp, requestErr := http.Get(api)
		if requestErr != nil {
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
			return
		}

		body, ioErr := ioutil.ReadAll(resp.Body)
		if ioErr != nil {
			utils.ErrorLog("接口返回数据读取失败: %v", ioErr)
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
			return
		}
		var respJSON map[string]interface{}
		if err := json.Unmarshal([]byte(string(body)), &respJSON); err != nil {
			utils.ErrorLog("接口返回数据解析JSON失败: %v", err)
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
			return
		}
		respJSON = respJSON["data"].(map[string]interface{})["pre"].(map[string]interface{})
		result, _ := json.Marshal(respJSON)
		if err := json.Unmarshal([]byte(result), &res10265); err != nil {
			utils.ErrorLog("解析失败:%v", err)
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
			return
		}
		res.ErrMsg = res10265.ErrMsg
		res.Output = res10265.Output
		res.InfRefmsgid = res10265.InfRefmsgid
		infocode, _ := strconv.ParseInt(res10265.Infcode, 10, 64)
		res.Infcode = infocode

	} else {

		result := service.Gdyb5301(psn_record.PsnNo, miConfig.OrgName, role.UserName, miConfig.Code, miConfig.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey)

		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)

		if miConfig.Code == "H15049901371" {
			if err := json.Unmarshal(userJSONBytes, &res10265); err != nil {
				utils.ErrorLog("解析失败:%v", err)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}
			res.InfRefmsgid = res10265.InfRefmsgid
			res.Output = res10265.Output
			res.ErrMsg = res10265.ErrMsg
			infocode, _ := strconv.ParseInt(res10265.Infcode, 10, 64)
			res.Infcode = infocode
		} else {
			if err := json.Unmarshal(userJSONBytes, &res); err != nil {
				utils.ErrorLog("解析失败:%v", err)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}

		}

	}

	if res.Infcode == 0 {
		c.ServeSuccessJSON(map[string]interface{}{
			"result": res.Output.Result,
		})
	}

}
func (c *HisApiController) CheckInsutype() {
	his_patient_id, _ := c.GetInt64("his_patient_id")
	admin_user_id, _ := c.GetInt64("admin_user_id")
	roles, _ := service.GetAdminUserInfoByID(c.GetAdminUserInfo().CurrentOrgId, admin_user_id)
	his, _ := service.GetNewHisPatientInfoFour(c.GetAdminUserInfo().CurrentOrgId, his_patient_id)
	miConfig, _ := service.FindMedicalInsuranceInfo(c.GetAdminUserInfo().CurrentOrgId)
	result := service.Gdyb90100(his.PsnNo, miConfig.OrgName, roles.UserName, miConfig.Code, miConfig.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey)

	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 Result90100
	if err := json.Unmarshal(userJSONBytes, &res); err != nil {
		utils.ErrorLog("解析失败:%v", err)
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
		return
	}

	if res.Infcode != 0 {
		c.ServeSuccessJSON(map[string]interface{}{
			"failed_code": -10,
			"msg":         res.ErrMsg,
		})
		return
	} else {
		fmt.Println(res)

	}

}
func (c *HisApiController) CheckCardPWD() {
	card_pwd := c.GetString("card_pwd")
	his_patient_id, _ := c.GetInt64("his_patient_id")
	admin_user_id, _ := c.GetInt64("admin_user_id")
	roles, _ := service.GetAdminUserInfoByID(c.GetAdminUserInfo().CurrentOrgId, admin_user_id)
	miConfig, _ := service.FindMedicalInsuranceInfo(c.GetAdminUserInfo().CurrentOrgId)
	his, _ := service.GetNewHisPatientInfoFour(c.GetAdminUserInfo().CurrentOrgId, his_patient_id)
	psn, _ := service.GetPsnByPatientId(his.PatientId)
	bas := strings.Split(psn.CardInfo, "|")
	basNumber := bas[2]
	result := service.Gdyb90991(his.PsnNo, miConfig.OrgName, roles.UserName, miConfig.Code, miConfig.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey, card_pwd, basNumber)

	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 Result90991
	if err := json.Unmarshal(userJSONBytes, &res); err != nil {
		utils.ErrorLog("解析失败:%v", err)
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
		return
	}

	if res.Infcode != 0 {
		c.ServeSuccessJSON(map[string]interface{}{
			"failed_code": -10,
			"msg":         res.ErrMsg,
		})
		return
	} else {
		if res.Output.Result.SscnoCheckStat == "0" {
			var msg string
			switch res.Output.Result.CardStat {
			case "00":
				msg = "未激活"
				break
			case "10":
				msg = "激活"
				break
			case "20":
				msg = "窗口挂失"
				break
			case "21":
				msg = "电话挂失"
				break
			case "22":
				msg = "单位网上申报挂失"
				break
			case "23":
				msg = "保健办挂失"

				break
			case "24":
				msg = "个人网上挂失"

				break
			case "25":
				msg = "网上服务大厅挂失"
				break
			case "30":
				msg = "注销"
				break
			case "40":
				msg = "回收"
				break
			case "99":
				msg = "制卡中(无效卡)"
				break
			}
			c.ServeSuccessJSON(map[string]interface{}{
				"failed_code": -10,
				"msg":         msg,
			})
			return

		} else {
			c.ServeSuccessJSON(map[string]interface{}{
				"msg": "校验成功",
			})
			return
		}
	}

}

func (c *HisApiController) CheckCardPWDTwo() {
	//card_pwd := c.GetString("card_pwd")
	//his_patient_id, _ := c.GetInt64("his_patient_id")
	admin_user_id, _ := c.GetInt64("admin_user_id")
	roles, _ := service.GetAdminUserInfoByID(c.GetAdminUserInfo().CurrentOrgId, admin_user_id)
	miConfig, _ := service.FindMedicalInsuranceInfo(c.GetAdminUserInfo().CurrentOrgId)

	result := service.Gdyb90991("44030000000629690364", miConfig.OrgName, roles.UserName, miConfig.Code, miConfig.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey, "000000", "BDM421363")

	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 Result90991
	if err := json.Unmarshal(userJSONBytes, &res); err != nil {
		utils.ErrorLog("解析失败:%v", err)
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
		return
	}

	if res.Infcode != 0 {
		c.ServeSuccessJSON(map[string]interface{}{
			"failed_code": -10,
			"msg":         res.ErrMsg,
		})
		return
	} else {
		if res.Output.Result.SscnoCheckStat == "0" {
			var msg string
			switch res.Output.Result.CardStat {
			case "00":
				msg = "未激活"
				break
			case "10":
				msg = "激活"
				break
			case "20":
				msg = "窗口挂失"
				break
			case "21":
				msg = "电话挂失"
				break
			case "22":
				msg = "单位网上申报挂失"
				break
			case "23":
				msg = "保健办挂失"

				break
			case "24":
				msg = "个人网上挂失"

				break
			case "25":
				msg = "网上服务大厅挂失"
				break
			case "30":
				msg = "注销"
				break
			case "40":
				msg = "回收"
				break
			case "99":
				msg = "制卡中(无效卡)"
				break
			}
			c.ServeSuccessJSON(map[string]interface{}{
				"failed_code": -10,
				"msg":         msg,
			})
			return

		} else {
			c.ServeSuccessJSON(map[string]interface{}{
				"msg": "校验成功",
			})
			return
		}
	}

}

type ELeCertData struct {
	Data struct {
		Extra       string `json:"extra"`
		IDNo        string `json:"idNo"`
		IDType      string `json:"idType"`
		EcToken     string `json:"ecToken"`
		InsuOrg     string `json:"insuOrg"`
		UserName    string `json:"userName"`
		EcIndexNo   string `json:"ecIndexNo"`
		Gender      string `json:"gender"`
		Birthday    string `json:"birthday"`
		Nationality string `json:"nationality"`
		Email       string `json:"email"`
	} `json:"OutData"`
}

func (c *HisApiController) ReadCard() {
	id_card_type, _ := c.GetInt64("id_card_type")
	admin_user_id, _ := c.GetInt64("admin_user_id")
	certificates, _ := c.GetInt64("certificates")
	fmt.Println(c.GetAdminUserInfo().CurrentOrgId)
	roles, _ := service.GetAdminUserInfoByID(c.GetAdminUserInfo().CurrentOrgId, admin_user_id)
	miConfig, _ := service.FindMedicalInsuranceInfo(c.GetAdminUserInfo().CurrentOrgId)

	switch id_card_type {
	case 1:
		if miConfig.MdtrtareaAdmvs == "421300" {
			var res ResultTwo
			api := "http://192.168.124.4:9532/" + "hbyb/1101?cert_no=" + "" +
				"&org_name=" + miConfig.OrgName + "&doctor=" + roles.UserName + "&fixmedins_code=" + miConfig.Code +
				"&insuplc_admdvs=" + miConfig.InsuplcAdmdvs + "&mdtrtarea_admvs=" + miConfig.MdtrtareaAdmvs + "&secret_key=" + miConfig.SecretKey + "&id_card_type=" + strconv.FormatInt(id_card_type, 10) + "&card_sn=" + "" + "&certificates=" + strconv.FormatInt(certificates, 10)

			resp, requestErr := http.Get(api)
			if requestErr != nil {
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}

			body, ioErr := ioutil.ReadAll(resp.Body)
			if ioErr != nil {
				utils.ErrorLog("接口返回数据读取失败: %v", ioErr)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}
			var respJSON map[string]interface{}
			if err := json.Unmarshal([]byte(string(body)), &respJSON); err != nil {
				utils.ErrorLog("接口返回数据解析JSON失败: %v", err)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}

			respJSON = respJSON["data"].(map[string]interface{})["pre"].(map[string]interface{})
			result, _ := json.Marshal(respJSON)
			fmt.Println("log")
			fmt.Println(string(result))

			if err := json.Unmarshal([]byte(result), &res); err != nil {
				utils.ErrorLog("解析失败:%v", err)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}

			if res.Infcode == 0 {
				patient, err := service.GetPatientByIDCard(res.Output.Baseinfo.Certno, c.GetAdminUserInfo().CurrentOrgId)
				if err == gorm.ErrRecordNotFound {
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeNoPateintException)
					return
				} else if err != nil {
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeSystemError)
					return

				} else {

					Iinfos, _ := json.Marshal(res.Output.Iinfo)
					Idetinfos, _ := json.Marshal(res.Output.Idetinfo)
					infoStr := string(Iinfos)
					idetinfoStr := string(Idetinfos)
					psn := &models.HisPsn{
						PsnNo:       res.Output.Baseinfo.PsnNo,
						Age:         res.Output.Baseinfo.Age,
						PatientId:   patient.ID,
						Certno:      res.Output.Baseinfo.Certno,
						Brdy:        res.Output.Baseinfo.Brdy,
						Gend:        res.Output.Baseinfo.Gend,
						Naty:        res.Output.Baseinfo.Naty,
						PsnCertType: res.Output.Baseinfo.PsnCertType,
						PsnName:     res.Output.Baseinfo.PsnName,
						Idetinfo:    idetinfoStr,
						Insuinfo:    infoStr,
						UserOrgId:   c.GetAdminUserInfo().CurrentOrgId,
					}
					service.CreateHisPsn(psn)

					c.ServeSuccessJSON(map[string]interface{}{
						"patient": patient,
						"number":  res.Output.Baseinfo.Certno,
					})
				}
			} else {
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeHisFailedException)
				return
			}

		} else if miConfig.MdtrtareaAdmvs == "320921" || miConfig.MdtrtareaAdmvs == "320982" {
			var api string
			if miConfig.MdtrtareaAdmvs == "320921" {
				api = "http://192.168.2.110:9532/" + "jsyb/readcard?" + "fixmedins_code=" + miConfig.Code + "&secret_key=" + miConfig.SecretKey + "&ak=" + miConfig.AccessKey + "&org_name=" + miConfig.OrgName + "&doctor=" + roles.UserName +
					"&insuplc_admdvs=" + miConfig.InsuplcAdmdvs + "&mdtrtarea_admvs=" + miConfig.MdtrtareaAdmvs + "&secret_key=" + miConfig.SecretKey + "&url=" + miConfig.Url + "&cainfo=" + miConfig.Cainfo + "&id_card_type=" + strconv.FormatInt(id_card_type, 10) + "&operator_id=" + strconv.FormatInt(admin_user_id, 10) + "&operator=" + roles.UserName
				fmt.Println(api)
			} else {
				api = "http://192.168.5.251:9532/" + "jsyb/readcard?" + "fixmedins_code=" + miConfig.Code + "&secret_key=" + miConfig.SecretKey + "&ak=" + miConfig.AccessKey + "&org_name=" + miConfig.OrgName + "&doctor=" + roles.UserName +
					"&insuplc_admdvs=" + miConfig.InsuplcAdmdvs + "&mdtrtarea_admvs=" + miConfig.MdtrtareaAdmvs + "&secret_key=" + miConfig.SecretKey + "&url=" + miConfig.Url + "&cainfo=" + miConfig.Cainfo + "&id_card_type=" + strconv.FormatInt(id_card_type, 10)
			}

			resp, requestErr := http.Get(api)
			if requestErr != nil {
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}

			body, ioErr := ioutil.ReadAll(resp.Body)
			if ioErr != nil {
				utils.ErrorLog("接口返回数据读取失败: %v", ioErr)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}
			var respJSON map[string]interface{}
			if err := json.Unmarshal([]byte(string(body)), &respJSON); err != nil {
				utils.ErrorLog("接口返回数据解析JSON失败: %v", err)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}
			var status string
			status = respJSON["data"].(map[string]interface{})["status"].(string)
			card_type := respJSON["data"].(map[string]interface{})["type"].(string)
			//console.log()
			fmt.Println("type===")

			fmt.Println(card_type)

			var token string
			var res ResultTwo           //1101结果
			var res10265 ResultTwo10265 //1101结果
			var card_info string        //卡信息
			var busi_card_info string

			card_info = respJSON["data"].(map[string]interface{})["card_info"].(string)
			busi_card_info = respJSON["data"].(map[string]interface{})["busi_card_info"].(string)

			if status == "0" { //读卡成功
				if card_type == "1" {

					respJSON = respJSON["data"].(map[string]interface{})["result"].(map[string]interface{})
					result, _ := json.Marshal(respJSON)

					if err := json.Unmarshal([]byte(result), &res10265); err != nil {
						utils.ErrorLog("解析失败:%v", err)
						c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
						return
					}
					res.ErrMsg = res10265.ErrMsg
					infocode, _ := strconv.ParseInt(res10265.Infcode, 10, 64)
					res.Infcode = infocode
					res.Output = res10265.Output
					res.InfRefmsgid = res10265.InfRefmsgid

				} else {
					//var card_info string //卡信息
					//var busi_card_info string

					token = respJSON["data"].(map[string]interface{})["token"].(string)
					//busi_card_info = respJSON["data"].(map[string]interface{})["busi_card_info"].(string)

					//fmt.Println(card_info)
					//fmt.Println(busi_card_info)

					respJSON = respJSON["data"].(map[string]interface{})["result"].(map[string]interface{})
					result, _ := json.Marshal(respJSON)

					if err := json.Unmarshal([]byte(result), &res10265); err != nil {
						utils.ErrorLog("解析失败:%v", err)
						c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
						return
					}
					res.ErrMsg = res10265.ErrMsg
					infocode, _ := strconv.ParseInt(res10265.Infcode, 10, 64)
					res.Infcode = infocode
					res.Output = res10265.Output
					res.InfRefmsgid = res10265.InfRefmsgid

				}

				if res.Infcode == 0 {
					patient, err := service.GetPatientByIDCard(res.Output.Baseinfo.Certno, c.GetAdminUserInfo().CurrentOrgId)
					if err == gorm.ErrRecordNotFound {
						c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeNoPateintException)
						return
					} else if err != nil {
						c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeSystemError)
						return

					} else {

						if card_type == "1" {
							bas := strings.Split(card_info, "|")
							basNumber := bas[2]
							Iinfos, _ := json.Marshal(res.Output.Iinfo)
							Idetinfos, _ := json.Marshal(res.Output.Idetinfo)
							infoStr := string(Iinfos)
							idetinfoStr := string(Idetinfos)
							psn := &models.HisPsn{
								PsnNo:        res.Output.Baseinfo.PsnNo,
								Age:          res.Output.Baseinfo.Age,
								PatientId:    patient.ID,
								Certno:       res.Output.Baseinfo.Certno,
								Brdy:         res.Output.Baseinfo.Brdy,
								Gend:         res.Output.Baseinfo.Gend,
								Naty:         res.Output.Baseinfo.Naty,
								PsnCertType:  res.Output.Baseinfo.PsnCertType,
								PsnName:      res.Output.Baseinfo.PsnName,
								Idetinfo:     idetinfoStr,
								Insuinfo:     infoStr,
								UserOrgId:    c.GetAdminUserInfo().CurrentOrgId,
								CardInfo:     card_info,
								VerifyNumber: busi_card_info,
							}
							service.CreateHisPsn(psn)

							var rf []*ResultFive
							json.Unmarshal([]byte(infoStr), &rf)

							var insutypes []*ResultFive
							var insutype string
							var is390 int = 0
							var is310 int = 0

							for _, item := range rf {
								if (item.Insutype == "390" && item.PsnInsuStas == "1") || (item.Insutype == "310" && item.PsnInsuStas == "1") {
									insutypes = append(insutypes, item)
								}
							}

							if len(insutypes) == 1 {
								insutype = insutypes[0].Insutype
								//insuplc_admdvs = insutypes[0].InsuplcAdmdvs
							} else {
								for _, i := range insutypes {
									if i.Insutype == "390" {
										is390 = 1
									}

									if i.Insutype == "310" {
										is310 = 1
									}
								}
							}
							if is390 == 1 {
								insutype = "390"
							}

							if is310 == 1 {
								insutype = "310"
							}

							if len(insutypes) == 0 {
								insutype = "310"
							}

							c.ServeSuccessJSON(map[string]interface{}{
								"patient":  patient,
								"number":   basNumber,
								"insutype": insutype,
							})
						} else {
							Iinfos, _ := json.Marshal(res.Output.Iinfo)
							Idetinfos, _ := json.Marshal(res.Output.Idetinfo)
							infoStr := string(Iinfos)
							idetinfoStr := string(Idetinfos)
							psn := &models.HisPsn{
								PsnNo:        res.Output.Baseinfo.PsnNo,
								Age:          res.Output.Baseinfo.Age,
								PatientId:    patient.ID,
								Certno:       res.Output.Baseinfo.Certno,
								Brdy:         res.Output.Baseinfo.Brdy,
								Gend:         res.Output.Baseinfo.Gend,
								Naty:         res.Output.Baseinfo.Naty,
								PsnCertType:  res.Output.Baseinfo.PsnCertType,
								PsnName:      res.Output.Baseinfo.PsnName,
								Idetinfo:     idetinfoStr,
								Insuinfo:     infoStr,
								UserOrgId:    c.GetAdminUserInfo().CurrentOrgId,
								CardInfo:     card_info,
								VerifyNumber: token,
							}
							service.CreateHisPsn(psn)
							c.ServeSuccessJSON(map[string]interface{}{
								"patient": patient,
								"number":  token,
							})
						}
					}
				} else {
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeHisFailedException)
					return
				}
			} else { //读卡失败
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeHisFailedException)
				return

			}

		} else if miConfig.MdtrtareaAdmvs == "350500" {
			cardnum, cardCode, id_card_no, name, errmsg := c.GetFjBasBaseInfo()

			cardnum = DeleteExtraSpaceTwo(cardnum)
			cardCode = DeleteExtraSpaceTwo(cardCode)
			id_card_no = DeleteExtraSpaceTwo(id_card_no)
			name = DeleteExtraSpaceTwo(name)
			errmsg = DeleteExtraSpaceTwo(errmsg)

			cardnum = Remove0000(cardnum)
			cardCode = Remove0000(cardCode)
			id_card_no = Remove0000(id_card_no)
			name = Remove0000(name)
			errmsg = Remove0000(errmsg)

			basStr := cardnum + "|" + cardCode + "|" + id_card_no + "|" + name
			result, requestLog, errMsgLog := service.FJyb1101(cardnum, miConfig.OrgName, roles.UserName, miConfig.Code, miConfig.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, id_card_type, cardCode, certificates, miConfig.Url, miConfig.Cainfo, miConfig.AppSecret, miConfig.SignKey, miConfig.EncKey)
			saveLog(result, requestLog, "1101", "获取人员信息")
			fmt.Println(errMsgLog)

			if len(errMsgLog) > 0 {

			} else {

				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 ResultTwo
				if err := json.Unmarshal(userJSONBytes, &res); err != nil {
					utils.ErrorLog("解析失败:%v", err)
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
					return
				}
				res.ErrMsg = errMsgLog
				if res.Infcode == 0 {
					patient, err := service.GetPatientByNumber(id_card_no, c.GetAdminUserInfo().CurrentOrgId)
					if err == gorm.ErrRecordNotFound {
						c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeNoPateintException)
						return
					} else if err != nil {
						c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeSystemError)
						return

					} else {
						fmt.Println(res)
						Iinfos, _ := json.Marshal(res.Output.Iinfo)
						Idetinfos, _ := json.Marshal(res.Output.Idetinfo)
						infoStr := string(Iinfos)
						idetinfoStr := string(Idetinfos)
						psn := &models.HisPsn{
							PsnNo:        res.Output.Baseinfo.PsnNo,
							Age:          res.Output.Baseinfo.Age,
							PatientId:    patient.ID,
							Certno:       res.Output.Baseinfo.Certno,
							Brdy:         res.Output.Baseinfo.Brdy,
							Gend:         res.Output.Baseinfo.Gend,
							Naty:         res.Output.Baseinfo.Naty,
							PsnCertType:  res.Output.Baseinfo.PsnCertType,
							PsnName:      res.Output.Baseinfo.PsnName,
							Idetinfo:     idetinfoStr,
							Insuinfo:     infoStr,
							UserOrgId:    c.GetAdminUserInfo().CurrentOrgId,
							CardInfo:     basStr,
							VerifyNumber: "",
						}
						service.CreateHisPsn(psn)

						var rf []*ResultFive
						json.Unmarshal([]byte(infoStr), &rf)

						var insutypes []*ResultFive
						var insutype string
						var is390 int = 0
						var is310 int = 0

						for _, item := range rf {
							if (item.Insutype == "390" && item.PsnInsuStas == "1") || (item.Insutype == "310" && item.PsnInsuStas == "1") {
								insutypes = append(insutypes, item)
							}
						}

						if len(insutypes) == 1 {
							insutype = insutypes[0].Insutype
							//insuplc_admdvs = insutypes[0].InsuplcAdmdvs
						} else {
							for _, i := range insutypes {
								if i.Insutype == "390" {
									is390 = 1
								}

								if i.Insutype == "310" {
									is310 = 1
								}
							}
						}
						if is390 == 1 {
							insutype = "390"
						}

						if is310 == 1 {
							insutype = "310"
						}

						if len(insutypes) == 0 {
							insutype = "310"
						}

						c.ServeSuccessJSON(map[string]interface{}{
							"patient":  patient,
							"number":   cardnum,
							"insutype": insutype,
						})
					}
				} else {
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeHisFailedException)
					return
				}
			}

		} else {
			if initFlag == 0 {
				c.TestGetBasBaseInit()
			}
			basStr := c.GetBasBaseInfo()
			if len(basStr) == 0 {
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeReadCardException)
				return
			}
			fmt.Println(basStr)
			bas := strings.Split(basStr, "|")
			basNumber := bas[1]
			fmt.Println(basNumber)
			card_sn := bas[3]
			fmt.Println(card_sn)
			result := service.Gdyb1101B(basNumber, miConfig.OrgName, roles.UserName, miConfig.Code, miConfig.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey, id_card_type, card_sn, certificates)
			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 ResultTwo
			if err := json.Unmarshal(userJSONBytes, &res); err != nil {
				utils.ErrorLog("解析失败:%v", err)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}

			if res.Infcode == 0 {
				patient, err := service.GetPatientByNumber(basNumber, c.GetAdminUserInfo().CurrentOrgId)
				if err == gorm.ErrRecordNotFound {
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeNoPateintException)
					return
				} else if err != nil {
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeSystemError)
					return

				} else {
					Iinfos, _ := json.Marshal(res.Output.Iinfo)
					Idetinfos, _ := json.Marshal(res.Output.Idetinfo)
					infoStr := string(Iinfos)
					idetinfoStr := string(Idetinfos)
					psn := &models.HisPsn{
						PsnNo:        res.Output.Baseinfo.PsnNo,
						Age:          res.Output.Baseinfo.Age,
						PatientId:    patient.ID,
						Certno:       res.Output.Baseinfo.Certno,
						Brdy:         res.Output.Baseinfo.Brdy,
						Gend:         res.Output.Baseinfo.Gend,
						Naty:         res.Output.Baseinfo.Naty,
						PsnCertType:  res.Output.Baseinfo.PsnCertType,
						PsnName:      res.Output.Baseinfo.PsnName,
						Idetinfo:     idetinfoStr,
						Insuinfo:     infoStr,
						UserOrgId:    c.GetAdminUserInfo().CurrentOrgId,
						CardInfo:     basStr,
						VerifyNumber: "",
					}
					service.CreateHisPsn(psn)

					c.ServeSuccessJSON(map[string]interface{}{
						"patient": patient,
						"number":  basNumber,
					})
				}
			} else {
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeHisFailedException)
				return
			}
			break
		}
	case 2:
		SFZStr := c.GetSFZBaseInfo()
		id_card_str := strings.Split(SFZStr, "^")
		id_card_number := id_card_str[0]
		card_sn := ""
		result := service.Gdyb1101B(id_card_number, miConfig.OrgName, roles.UserName, miConfig.Code, miConfig.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey, id_card_type, card_sn, certificates)
		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 ResultTwo
		if err := json.Unmarshal(userJSONBytes, &res); err != nil {
			utils.ErrorLog("解析失败:%v", err)
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
			return
		}

		if res.Infcode == 0 {
			patient, err := service.GetPatientByNumber(id_card_number, c.GetAdminUserInfo().CurrentOrgId)
			if err == gorm.ErrRecordNotFound {
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeNoPateintException)
				return
			} else if err != nil {
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeSystemError)
				return

			} else {
				c.ServeSuccessJSON(map[string]interface{}{
					"patient": patient,
					"number":  id_card_number,
				})
			}
		} else {
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeHisFailedException)
			return
		}

		break
	case 3:
		if miConfig.MdtrtareaAdmvs == "320921" || miConfig.MdtrtareaAdmvs == "320982" {
			var api string
			if miConfig.MdtrtareaAdmvs == "320921" {
				api = "http://192.168.2.110:9532/" + "jsyb/readcard?" + "fixmedins_code=" + miConfig.Code + "&secret_key=" + miConfig.SecretKey + "&ak=" + miConfig.AccessKey + "&org_name=" + miConfig.OrgName + "&doctor=" + roles.UserName +
					"&insuplc_admdvs=" + miConfig.InsuplcAdmdvs + "&mdtrtarea_admvs=" + miConfig.MdtrtareaAdmvs + "&secret_key=" + miConfig.SecretKey + "&url=" + miConfig.Url + "&cainfo=" + miConfig.Cainfo + "&id_card_type=" + strconv.FormatInt(id_card_type, 10) + "&operator_id=" + strconv.FormatInt(admin_user_id, 10) + "&operator=" + roles.UserName
				fmt.Println(api)

			} else {
				api = "http://192.168.5.251:9532/" + "jsyb/readcard?" + "fixmedins_code=" + miConfig.Code + "&secret_key=" + miConfig.SecretKey + "&ak=" + miConfig.AccessKey + "&org_name=" + miConfig.OrgName + "&doctor=" + roles.UserName +
					"&insuplc_admdvs=" + miConfig.InsuplcAdmdvs + "&mdtrtarea_admvs=" + miConfig.MdtrtareaAdmvs + "&secret_key=" + miConfig.SecretKey + "&url=" + miConfig.Url + "&cainfo=" + miConfig.Cainfo + "&id_card_type=" + strconv.FormatInt(id_card_type, 10)
			}

			resp, requestErr := http.Get(api)
			if requestErr != nil {
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}

			body, ioErr := ioutil.ReadAll(resp.Body)
			if ioErr != nil {
				utils.ErrorLog("接口返回数据读取失败: %v", ioErr)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}
			var respJSON map[string]interface{}
			if err := json.Unmarshal([]byte(string(body)), &respJSON); err != nil {
				utils.ErrorLog("接口返回数据解析JSON失败: %v", err)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}
			var status string
			status = respJSON["data"].(map[string]interface{})["status"].(string)
			card_type := respJSON["data"].(map[string]interface{})["type"].(string)

			var token string
			var res ResultTwo           //1101结果
			var res10265 ResultTwo10265 //1101结果
			var card_info string        //卡信息
			var busi_card_info string

			//card_info = respJSON["data"].(map[string]interface{})["card_info"].(string)
			busi_card_info = respJSON["data"].(map[string]interface{})["busi_card_info"].(string)

			if status == "0" { //读卡成功
				if card_type == "1" {

					respJSON = respJSON["data"].(map[string]interface{})["result"].(map[string]interface{})
					result, _ := json.Marshal(respJSON)

					if err := json.Unmarshal([]byte(result), &res10265); err != nil {
						utils.ErrorLog("解析失败:%v", err)
						c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
						return
					}
					res.ErrMsg = res10265.ErrMsg
					infocode, _ := strconv.ParseInt(res10265.Infcode, 10, 64)
					res.Infcode = infocode
					res.Output = res10265.Output
					res.InfRefmsgid = res10265.InfRefmsgid

				} else {
					//var card_info string //卡信息
					//var busi_card_info string

					token = respJSON["data"].(map[string]interface{})["token"].(string)
					//busi_card_info = respJSON["data"].(map[string]interface{})["busi_card_info"].(string)

					//fmt.Println(card_info)
					//fmt.Println(busi_card_info)

					respJSON = respJSON["data"].(map[string]interface{})["result"].(map[string]interface{})
					result, _ := json.Marshal(respJSON)

					if err := json.Unmarshal([]byte(result), &res10265); err != nil {
						utils.ErrorLog("解析失败:%v", err)
						c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
						return
					}
					res.ErrMsg = res10265.ErrMsg
					infocode, _ := strconv.ParseInt(res10265.Infcode, 10, 64)
					res.Infcode = infocode
					res.Output = res10265.Output
					res.InfRefmsgid = res10265.InfRefmsgid

				}

				if res.Infcode == 0 {
					patient, err := service.GetPatientByIDCard(res.Output.Baseinfo.Certno, c.GetAdminUserInfo().CurrentOrgId)
					if err == gorm.ErrRecordNotFound {
						c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeNoPateintException)
						return
					} else if err != nil {
						c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeSystemError)
						return

					} else {

						if card_type == "1" {
							bas := strings.Split(card_info, "|")
							basNumber := bas[2]
							Iinfos, _ := json.Marshal(res.Output.Iinfo)
							Idetinfos, _ := json.Marshal(res.Output.Idetinfo)
							infoStr := string(Iinfos)
							idetinfoStr := string(Idetinfos)
							psn := &models.HisPsn{
								PsnNo:        res.Output.Baseinfo.PsnNo,
								Age:          res.Output.Baseinfo.Age,
								PatientId:    patient.ID,
								Certno:       res.Output.Baseinfo.Certno,
								Brdy:         res.Output.Baseinfo.Brdy,
								Gend:         res.Output.Baseinfo.Gend,
								Naty:         res.Output.Baseinfo.Naty,
								PsnCertType:  res.Output.Baseinfo.PsnCertType,
								PsnName:      res.Output.Baseinfo.PsnName,
								Idetinfo:     idetinfoStr,
								Insuinfo:     infoStr,
								UserOrgId:    c.GetAdminUserInfo().CurrentOrgId,
								CardInfo:     card_info,
								VerifyNumber: busi_card_info,
							}

							service.CreateHisPsn(psn)
							c.ServeSuccessJSON(map[string]interface{}{
								"patient": patient,
								"number":  basNumber,
							})
						} else {
							Iinfos, _ := json.Marshal(res.Output.Iinfo)
							Idetinfos, _ := json.Marshal(res.Output.Idetinfo)
							infoStr := string(Iinfos)
							idetinfoStr := string(Idetinfos)
							psn := &models.HisPsn{
								PsnNo:        res.Output.Baseinfo.PsnNo,
								Age:          res.Output.Baseinfo.Age,
								PatientId:    patient.ID,
								Certno:       res.Output.Baseinfo.Certno,
								Brdy:         res.Output.Baseinfo.Brdy,
								Gend:         res.Output.Baseinfo.Gend,
								Naty:         res.Output.Baseinfo.Naty,
								PsnCertType:  res.Output.Baseinfo.PsnCertType,
								PsnName:      res.Output.Baseinfo.PsnName,
								Idetinfo:     idetinfoStr,
								Insuinfo:     infoStr,
								UserOrgId:    c.GetAdminUserInfo().CurrentOrgId,
								CardInfo:     card_info,
								VerifyNumber: token,
							}
							service.CreateHisPsn(psn)
							var rf []*ResultFive
							json.Unmarshal([]byte(infoStr), &rf)
							var insutypes []*ResultFive
							var insutype string
							var is390 int = 0
							var is310 int = 0

							for _, item := range rf {
								if (item.Insutype == "390" && item.PsnInsuStas == "1") || (item.Insutype == "310" && item.PsnInsuStas == "1") {
									insutypes = append(insutypes, item)
								}
							}

							if len(insutypes) == 1 {
								insutype = insutypes[0].Insutype
								//insuplc_admdvs = insutypes[0].InsuplcAdmdvs
							} else {
								for _, i := range insutypes {
									if i.Insutype == "390" {
										is390 = 1
									}

									if i.Insutype == "310" {
										is310 = 1
									}
								}
							}

							if is390 == 1 {
								insutype = "390"
							}

							if is310 == 1 {
								insutype = "310"
							}

							if len(insutypes) == 0 {
								insutype = "310"
							}
							c.ServeSuccessJSON(map[string]interface{}{
								"patient":  patient,
								"number":   token,
								"insutype": insutype,
							})
						}
					}
				} else {
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeHisFailedException)
					return
				}
			} else { //读卡失败
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeHisFailedException)
				return

			}

		}

		break
	case 4:
		if miConfig.MdtrtareaAdmvs == "320921" || miConfig.MdtrtareaAdmvs == "320982" {
			var api string
			if miConfig.MdtrtareaAdmvs == "320921" {
				api = "http://192.168.2.110:9532/" + "jsyb/readcard?" + "fixmedins_code=" + miConfig.Code + "&secret_key=" + miConfig.SecretKey + "&ak=" + miConfig.AccessKey + "&org_name=" + miConfig.OrgName + "&doctor=" + roles.UserName +
					"&insuplc_admdvs=" + miConfig.InsuplcAdmdvs + "&mdtrtarea_admvs=" + miConfig.MdtrtareaAdmvs + "&secret_key=" + miConfig.SecretKey + "&url=" + miConfig.Url + "&cainfo=" + miConfig.Cainfo + "&id_card_type=" + strconv.FormatInt(id_card_type, 10) + "&operator_id=" + strconv.FormatInt(admin_user_id, 10) + "&operator=" + roles.UserName
				fmt.Println(api)

			} else {
				api = "http://192.168.5.251:9532/" + "jsyb/readcard?" + "fixmedins_code=" + miConfig.Code + "&secret_key=" + miConfig.SecretKey + "&ak=" + miConfig.AccessKey + "&org_name=" + miConfig.OrgName + "&doctor=" + roles.UserName +
					"&insuplc_admdvs=" + miConfig.InsuplcAdmdvs + "&mdtrtarea_admvs=" + miConfig.MdtrtareaAdmvs + "&secret_key=" + miConfig.SecretKey + "&url=" + miConfig.Url + "&cainfo=" + miConfig.Cainfo + "&id_card_type=" + strconv.FormatInt(id_card_type, 10)
			}

			resp, requestErr := http.Get(api)
			if requestErr != nil {
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}

			body, ioErr := ioutil.ReadAll(resp.Body)
			if ioErr != nil {
				utils.ErrorLog("接口返回数据读取失败: %v", ioErr)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}
			var respJSON map[string]interface{}
			if err := json.Unmarshal([]byte(string(body)), &respJSON); err != nil {
				utils.ErrorLog("接口返回数据解析JSON失败: %v", err)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}
			var status string
			status = respJSON["data"].(map[string]interface{})["status"].(string)
			//card_type := respJSON["data"].(map[string]interface{})["type"].(string)

			var token string
			var res ResultTwo           //1101结果
			var res10265 ResultTwo10265 //1101结果

			if status == "0" { //读卡成功
				var card_info string //卡信息
				var busi_card_info string

				token = respJSON["data"].(map[string]interface{})["token"].(string)
				busi_card_info = respJSON["data"].(map[string]interface{})["busi_card_info"].(string)
				card_info = respJSON["data"].(map[string]interface{})["card_info"].(string)

				fmt.Println(card_info)
				fmt.Println(busi_card_info)

				respJSON = respJSON["data"].(map[string]interface{})["result"].(map[string]interface{})
				result, _ := json.Marshal(respJSON)

				if err := json.Unmarshal([]byte(result), &res10265); err != nil {
					utils.ErrorLog("解析失败:%v", err)
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
					return
				}
				res.ErrMsg = res10265.ErrMsg
				infocode, _ := strconv.ParseInt(res10265.Infcode, 10, 64)
				res.Infcode = infocode
				res.Output = res10265.Output
				res.InfRefmsgid = res10265.InfRefmsgid

				if res.Infcode == 0 {
					patient, err := service.GetPatientByIDCard(res.Output.Baseinfo.Certno, c.GetAdminUserInfo().CurrentOrgId)
					if err == gorm.ErrRecordNotFound {
						c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeNoPateintException)
						return
					} else if err != nil {
						c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeSystemError)
						return

					} else {
						Iinfos, _ := json.Marshal(res.Output.Iinfo)
						Idetinfos, _ := json.Marshal(res.Output.Idetinfo)
						infoStr := string(Iinfos)
						idetinfoStr := string(Idetinfos)
						psn := &models.HisPsn{
							PsnNo:        res.Output.Baseinfo.PsnNo,
							Age:          res.Output.Baseinfo.Age,
							PatientId:    patient.ID,
							Certno:       res.Output.Baseinfo.Certno,
							Brdy:         res.Output.Baseinfo.Brdy,
							Gend:         res.Output.Baseinfo.Gend,
							Naty:         res.Output.Baseinfo.Naty,
							PsnCertType:  res.Output.Baseinfo.PsnCertType,
							PsnName:      res.Output.Baseinfo.PsnName,
							Idetinfo:     idetinfoStr,
							Insuinfo:     infoStr,
							UserOrgId:    c.GetAdminUserInfo().CurrentOrgId,
							CardInfo:     card_info,
							VerifyNumber: token,
						}
						service.CreateHisPsn(psn)
						c.ServeSuccessJSON(map[string]interface{}{
							"patient": patient,
							"number":  token,
						})
					}
				} else {
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeHisFailedException)
					return
				}
			} else { //读卡失败
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeHisFailedException)
				return
			}
		} else if miConfig.MdtrtareaAdmvs == "440300" || miConfig.MdtrtareaAdmvs == "440305" {
			result, requestLog := service.Gdyb6101(miConfig.OrgName, roles.UserName, miConfig.Code, miConfig.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey)
			saveLog(result, requestLog, "6101", "电子凭证")
			var ele ELeCertData
			err := json.Unmarshal([]byte(result), &ele)
			if err != nil {
				utils.ErrorLog("解析失败:%v", err)
			}
			result2, requestLog2 := service.Gdyb1101ForEleCert(miConfig.OrgName, roles.UserName, miConfig.Code, miConfig.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey, ele.Data.EcToken)
			saveLog(result2, requestLog2, "1101", "获取人员信息")

			var res ResultTwo
			if err := json.Unmarshal([]byte(result2), &res); err != nil {
				utils.ErrorLog("解析失败:%v", err)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}

			if res.Infcode == 0 {
				patient, err := service.GetPatientByNumber(ele.Data.IDNo, c.GetAdminUserInfo().CurrentOrgId)
				if err == gorm.ErrRecordNotFound {
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeNoPateintException)
					return
				} else if err != nil {
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeSystemError)
					return

				} else {
					Iinfos, _ := json.Marshal(res.Output.Iinfo)
					Idetinfos, _ := json.Marshal(res.Output.Idetinfo)
					infoStr := string(Iinfos)
					idetinfoStr := string(Idetinfos)
					psn := &models.HisPsn{
						PsnNo:        res.Output.Baseinfo.PsnNo,
						Age:          res.Output.Baseinfo.Age,
						PatientId:    patient.ID,
						Certno:       res.Output.Baseinfo.Certno,
						Brdy:         res.Output.Baseinfo.Brdy,
						Gend:         res.Output.Baseinfo.Gend,
						Naty:         res.Output.Baseinfo.Naty,
						PsnCertType:  res.Output.Baseinfo.PsnCertType,
						PsnName:      res.Output.Baseinfo.PsnName,
						Idetinfo:     idetinfoStr,
						Insuinfo:     infoStr,
						UserOrgId:    c.GetAdminUserInfo().CurrentOrgId,
						CardInfo:     "",
						VerifyNumber: ele.Data.EcToken,
					}
					service.CreateHisPsn(psn)

					c.ServeSuccessJSON(map[string]interface{}{
						"patient": patient,
						"number":  ele.Data.EcToken,
					})
				}
			} else {
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeHisFailedException)
				return
			}

		}
		break
	}
}

var initFlag int64 = 0

func (c *HisApiController) TestGetBasBaseInit() {
	DllDef := syscall.MustLoadDLL("SSCard.dll")
	Iinit := DllDef.MustFindProc("Init")
	miConfig, _ := service.FindMedicalInsuranceInfo(c.GetAdminUserInfo().CurrentOrgId)

	ret, _, err := Iinit.Call(StrPtr("http://igb.hsa.gdgov.cn/gdyb_api/prd/api/card/initDll"), StrPtr(miConfig.InsuplcAdmdvs))
	if ret != 0 {
		fmt.Println("SSCard的报错原因:", err)
		fmt.Println("SSCard的运算结果为:", ret)
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeReadCardException)
		return
	}

	result := int(ret)
	fmt.Println("SSCard的运算结果为1:", result)
	initFlag = 1
	return
}

func (c *HisApiController) GetSFZBaseInfo() string {
	DllDef := syscall.MustLoadDLL("SSCard.dll")
	readCard := DllDef.MustFindProc("ReadSFZ")
	if readCard == nil {
		fmt.Println("readcard is nil")
		readCard = DllDef.MustFindProc("ReadSFZ")
	}

	str := make([]byte, 256)
	str1 := make([]byte, 256)
	r, _, _ := readCard.Call((uintptr)(unsafe.Pointer(&str[0])), IntPtr(1024), (uintptr)(unsafe.Pointer(&str1[0])), IntPtr(1024))

	fmt.Println(r)
	return string(str)
}

func (c *HisApiController) GetBasBaseInfo() string {
	DllDef := syscall.MustLoadDLL("SSCard.dll")
	readCard := DllDef.MustFindProc("ReadCardBas")
	if readCard == nil {
		fmt.Println("readcard is nil")
		readCard = DllDef.MustFindProc("ReadCardBas")
	}
	str := make([]byte, 1024)
	str1 := make([]byte, 1024)
	ret2, _, _ := readCard.Call((uintptr)(unsafe.Pointer(&str[0])), uintptr(1024), (uintptr)(unsafe.Pointer(&str1[0])), uintptr(1024))
	fmt.Println(string(str1))
	fmt.Println(string(str))
	fmt.Println(":", ConvertToString(string(str1), "gbk", "utf-8"))
	fmt.Println(":", ConvertToString(string(str), "gbk", "utf-8"))
	if ret2 != 0 {
		return ""
	}
	return string(str)
}

func (c *HisApiController) GetFjBasBaseInfo() (string, string, string, string, string) {
	DllDef := syscall.MustLoadDLL("chs_fjs_standard.dll")
	readCard := DllDef.MustFindProc("read_cardinfo")
	if readCard == nil {
		fmt.Println("readcard is nil")
		readCard = DllDef.MustFindProc("read_cardinfo")
	}
	str := make([]byte, 1024)  //卡号
	str1 := make([]byte, 1024) //卡识别码
	str2 := make([]byte, 1024) //身份证号
	str3 := make([]byte, 1024) //姓名
	str4 := make([]byte, 1024) //错误信息

	ret2, _, _ := readCard.Call((uintptr)(unsafe.Pointer(&str[0])), (uintptr)(unsafe.Pointer(&str1[0])), (uintptr)(unsafe.Pointer(&str2[0])), (uintptr)(unsafe.Pointer(&str3[0])), (uintptr)(unsafe.Pointer(&str4[0])))
	fmt.Println(string(str1))
	fmt.Println(string(str))
	fmt.Println(string(str2))
	fmt.Println(string(str3))
	fmt.Println(string(str4))
	fmt.Println(":", ConvertToString(string(str1), "gbk", "utf-8"))
	fmt.Println(":", ConvertToString(string(str), "gbk", "utf-8"))
	fmt.Println(":", ConvertToString(string(str2), "gbk", "utf-8"))
	fmt.Println(":", ConvertToString(string(str3), "gbk", "utf-8"))
	fmt.Println(":", ConvertToString(string(str4), "gbk", "utf-8"))

	if ret2 != 0 {
		return "", "", "", "", ""
	}
	return string(str), string(str1), string(str2), string(str3), string(str4)
}

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

func (c *HisApiController) GetSettleList() {
	order_id, _ := c.GetInt64("order_id")
	admin_user_id, _ := c.GetInt64("admin_user_id")
	order, _ := service.GetHisOrderByIDTwo(order_id)
	roles, _ := service.GetDoctorListTwo(c.GetAdminUserInfo().CurrentOrgId)
	his, _ := service.GetHisPatientByNumber(order.MdtrtId)
	admin, _ := service.GetAdminUserByUserID(roles[0].AdminUserId)
	curRoles, _ := service.GetAdminUserInfoByID(c.GetAdminUserInfo().CurrentOrgId, admin_user_id)
	depart, _ := service.GetDepartMentDetail(curRoles.DepartmentId)
	miConfig, _ := service.FindMedicalInsuranceInfo(c.GetAdminUserInfo().CurrentOrgId)

	if order.ID == 0 {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeHisOrderNoExistParamWrong)
		return
	}

	last_order, _ := service.GetLastHisOrder(c.GetAdminUserInfo().CurrentOrgId)
	max_order, _ := service.GetLastHisOrderTwo(c.GetAdminUserInfo().CurrentOrgId)
	count, _ := strconv.ParseInt(max_order.FaPiaoNumber, 10, 64)
	fmt.Println(count)
	var zero string
	number := count + 1
	if number >= 1000 {
		zero = "0000" + strconv.FormatInt(number, 10)
	} else if number >= 10000 {
		zero = "000" + strconv.FormatInt(number, 10)
	} else if number >= 100000 {
		zero = "00" + strconv.FormatInt(number, 10)
	} else if number >= 1000000 {
		zero = "0" + strconv.FormatInt(number, 10)
	} else {
		zero = strconv.FormatInt(number, 10)
	}
	fmt.Println(zero)

	struct4101 := service.Struct4101{
		PsnNo:          order.PsnNo,
		MdtrtId:        order.MdtrtId,
		SetlId:         order.SetlId,
		PsnName:        order.PsnName,
		Gend:           order.Gend,
		Brdy:           his.Brdy,
		Age:            his.Age,
		Naty:           order.Naty,
		PatnCertType:   "01",
		Certno:         order.Certno,
		Prfs:           "90",
		ConerName:      roles[0].UserName,
		PatnRlts:       "99",
		ConerAddr:      miConfig.OrgName,
		ConerTel:       admin.Mobile,
		HiType:         order.Insutype,
		Insuplc:        miConfig.InsuplcAdmdvs,
		MaindiagFlag:   "1",
		BillCode:       last_order.FaPiaoCode,
		BillNo:         zero,
		BizSn:          order.Number,
		PsnSelfPay:     order.PsnPartAmt,
		PsnOwnPay:      order.PsnPartAmt,
		AcctPay:        order.AcctPay,
		PsnCashpay:     order.PsnCashPay,
		HiPaymtd:       "1",
		Hsorg:          miConfig.InsuplcAdmdvs,
		HsorgOpter:     miConfig.InsuplcAdmdvs,
		MedinsFillPsn:  curRoles.UserName,
		MedinsFillDept: depart.Name,
		IptMedType:     "2",
	}
	struct4101.SetlBegnDate = order.SetlTime
	struct4101.SetlEndDate = order.SetlTime
	time_arr := strings.Split(order.SetlTime, " ")
	struct4101.AdmTime = time_arr[0]
	struct4101.AdmEndTime = time_arr[0]

	var rf []CustomFundPay
	json.Unmarshal([]byte(order.SetlDetail), &rf)

	var tempFunPays []service.CustomStruct
	for _, item := range rf {
		var tempFunPay service.CustomStruct
		tempFunPay.FundPayamt = item.FundPayamt
		tempFunPay.FundPayType = item.FundPayType
		tempFunPays = append(tempFunPays, tempFunPay)
	}
	struct4101.CustomStruct = tempFunPays

	var tempDiaginfos []service.DiaginfoStructTwo
	var tempOpspdiseinfo2 service.OpspdiseinfoStruct
	var tempOpspdiseinfos []service.OpspdiseinfoStruct

	diagnosis_ids := strings.Split(order.Diagnosis, ",")
	var config []*models.HisXtDiagnoseConfig
	for _, item := range diagnosis_ids {
		id, _ := strconv.ParseInt(item, 10, 64)
		diagnosisConfig, _ := service.FindDiagnoseById(id)
		config = append(config, &diagnosisConfig)
	}

	for index, item := range config {
		if index == 0 {
			var tempDiaginfo service.DiaginfoStructTwo
			tempDiaginfo.DiagCode = item.CountryCode
			tempDiaginfo.DiagName = item.CountryContentName
			tempDiaginfo.DiagType = "1"
			tempDiaginfo.MaindiagFlag = "1"
			tempDiaginfos = append(tempDiaginfos, tempDiaginfo)
		} else {

			var tempDiaginfo service.DiaginfoStructTwo
			tempDiaginfo.DiagCode = item.CountryCode
			tempDiaginfo.DiagName = item.CountryContentName
			tempDiaginfo.DiagType = "2"
			tempDiaginfo.MaindiagFlag = "0"
			tempDiaginfos = append(tempDiaginfos, tempDiaginfo)
		}
	}
	struct4101.Diseinfo = tempDiaginfos

	sickConfigTwo, _ := service.FindSickById(his.SickType)
	tempOpspdiseinfo2.DiagCode = sickConfigTwo.ContentCode
	tempOpspdiseinfo2.DiagName = sickConfigTwo.CountryContentName
	tempOpspdiseinfo2.OprnOprtCode = sickConfigTwo.ContentCode
	tempOpspdiseinfo2.OprnOprtName = sickConfigTwo.CountryContentName
	tempOpspdiseinfos = append(tempOpspdiseinfos, tempOpspdiseinfo2)
	struct4101.OpspdiseinfoStruct = tempOpspdiseinfos

	var iteminfo service.IteminfoStruct

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

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

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

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

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

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

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

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

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

	decimal.DivisionPrecision = 2

	var bed_fulamt_ownpay_amt float64 = 0
	var operation_fulamt_ownpay_amt float64 = 0
	var other_fulamt_ownpay_amt float64 = 0
	var westernMedicine_fulamt_ownpay_amt float64 = 0
	var chineseTraditional_fulamt_ownpay_amt float64 = 0
	var check_fulamt_ownpay_amt float64 = 0
	var material_fulamt_ownpay_amt float64 = 0
	var laboratory_fulamt_ownpay_amt float64 = 0
	var treat_fulamt_ownpay_amt float64 = 0

	var bed_claa_sunmfee float64 = 0
	var bed_clab_amt float64 = 0
	var bed_other_amt float64 = 0

	var operation_claa_sunmfee float64 = 0
	var operation_clab_amt float64 = 0
	var operation_other_amt float64 = 0

	var other_claa_sunmfee float64 = 0
	var other_clab_amt float64 = 0
	var other_other_amt float64 = 0

	var westernMedicine_claa_sunmfee float64 = 0
	var westernMedicine_clab_amt float64 = 0
	var westernMedicine_other_amt float64 = 0

	var chineseTraditional_claa_sunmfee float64 = 0
	var chineseTraditional_clab_amt float64 = 0
	var chineseTraditional_other_amt float64 = 0

	var check_claa_sunmfee float64 = 0
	var check_clab_amt float64 = 0
	var check_other_amt float64 = 0

	var material_claa_sunmfee float64 = 0
	var material_clab_amt float64 = 0
	var material_other_amt float64 = 0

	var laboratory_claa_sunmfee float64 = 0
	var laboratory_clab_amt float64 = 0
	var laboratory_other_amt float64 = 0

	var treat_claa_sunmfee float64 = 0
	var treat_clab_amt float64 = 0
	var treat_other_amt float64 = 0

	for _, item := range order.HisOrderInfo {
		if item.MedChrgitmType == "01" { //床位费
			bedCostTotal, _ = decimal.NewFromFloat(bedCostTotal).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
			bedCostSelfTotal, _ = decimal.NewFromFloat(bedCostSelfTotal).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
			bedCostPartSelfTotal, _ = decimal.NewFromFloat(bedCostPartSelfTotal).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()
			bed_fulamt_ownpay_amt, _ = decimal.NewFromFloat(bed_fulamt_ownpay_amt).Add(decimal.NewFromFloat(item.FulamtOwnpayAmt)).Float64()
			if item.ChrgitmLv == "1" {
				bed_claa_sunmfee, _ = decimal.NewFromFloat(bed_claa_sunmfee).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
			}
			if item.ChrgitmLv == "2" {
				bed_clab_amt, _ = decimal.NewFromFloat(bed_clab_amt).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()

			}
			if item.ChrgitmLv == "3" {
				bed_other_amt, _ = decimal.NewFromFloat(bed_other_amt).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
			}

		}

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

				check_claa_sunmfee, _ = decimal.NewFromFloat(check_claa_sunmfee).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()

			}
			if item.ChrgitmLv == "2" {
				check_clab_amt, _ = decimal.NewFromFloat(check_clab_amt).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()

			}
			if item.ChrgitmLv == "3" {
				check_other_amt, _ = decimal.NewFromFloat(check_other_amt).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
			}
		}

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

				laboratory_claa_sunmfee, _ = decimal.NewFromFloat(laboratory_claa_sunmfee).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()

			}
			if item.ChrgitmLv == "2" {
				laboratory_clab_amt, _ = decimal.NewFromFloat(laboratory_clab_amt).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()

			}
			if item.ChrgitmLv == "3" {
				laboratory_other_amt, _ = decimal.NewFromFloat(laboratory_other_amt).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
			}
		}

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

				treat_claa_sunmfee, _ = decimal.NewFromFloat(treat_claa_sunmfee).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()

			}
			if item.ChrgitmLv == "2" {
				treat_clab_amt, _ = decimal.NewFromFloat(treat_clab_amt).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()

			}
			if item.ChrgitmLv == "3" {
				treat_other_amt, _ = decimal.NewFromFloat(treat_other_amt).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
			}
		}

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

			if item.ChrgitmLv == "1" {

				operation_claa_sunmfee, _ = decimal.NewFromFloat(operation_claa_sunmfee).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()

			}
			if item.ChrgitmLv == "2" {
				operation_clab_amt, _ = decimal.NewFromFloat(operation_clab_amt).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()

			}
			if item.ChrgitmLv == "3" {
				operation_other_amt, _ = decimal.NewFromFloat(operation_other_amt).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
			}
		}

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

				material_claa_sunmfee, _ = decimal.NewFromFloat(material_claa_sunmfee).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()

			}
			if item.ChrgitmLv == "2" {
				material_clab_amt, _ = decimal.NewFromFloat(material_clab_amt).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()

			}
			if item.ChrgitmLv == "3" {
				material_other_amt, _ = decimal.NewFromFloat(material_other_amt).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
			}
		}

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

				westernMedicine_claa_sunmfee, _ = decimal.NewFromFloat(westernMedicine_claa_sunmfee).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()

			}
			if item.ChrgitmLv == "2" {
				westernMedicine_clab_amt, _ = decimal.NewFromFloat(westernMedicine_clab_amt).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()

			}
			if item.ChrgitmLv == "3" {
				westernMedicine_other_amt, _ = decimal.NewFromFloat(westernMedicine_other_amt).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
			}
		}

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

				chineseTraditional_claa_sunmfee, _ = decimal.NewFromFloat(chineseTraditional_claa_sunmfee).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()

			}
			if item.ChrgitmLv == "2" {
				chineseTraditional_clab_amt, _ = decimal.NewFromFloat(chineseTraditional_clab_amt).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()

			}
			if item.ChrgitmLv == "3" {
				chineseTraditional_other_amt, _ = decimal.NewFromFloat(chineseTraditional_other_amt).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
			}
		}

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

			}
			if item.ChrgitmLv == "2" {
				other_clab_amt, _ = decimal.NewFromFloat(other_clab_amt).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()

			}
			if item.ChrgitmLv == "3" {
				other_other_amt, _ = decimal.NewFromFloat(other_other_amt).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
			}
		}

	}

	var iteminfoStructs []service.IteminfoStruct

	if bedCostTotal != 0 {
		iteminfo.MedChrgitm = "01"
		iteminfo.FulamtOwnpayAmt = bed_fulamt_ownpay_amt
		iteminfo.Amt = bedCostTotal
		iteminfo.ClaaSumfee = bed_claa_sunmfee
		iteminfo.ClabAmt = bed_clab_amt
		iteminfo.OthAmt = bed_other_amt
		iteminfoStructs = append(iteminfoStructs, iteminfo)
	}

	if checkCostTotal != 0 {
		iteminfo.MedChrgitm = "03"
		iteminfo.FulamtOwnpayAmt = check_fulamt_ownpay_amt
		iteminfo.Amt = checkCostTotal
		iteminfo.ClaaSumfee = check_claa_sunmfee
		iteminfo.ClabAmt = check_clab_amt
		iteminfo.OthAmt = check_other_amt
		iteminfoStructs = append(iteminfoStructs, iteminfo)

	}

	if laboratoryCostTotal != 0 {
		iteminfo.MedChrgitm = "04"
		iteminfo.FulamtOwnpayAmt = laboratory_fulamt_ownpay_amt
		iteminfo.Amt = laboratoryCostTotal
		iteminfo.ClaaSumfee = laboratory_claa_sunmfee
		iteminfo.ClabAmt = laboratory_clab_amt
		iteminfo.OthAmt = laboratory_other_amt
		iteminfoStructs = append(iteminfoStructs, iteminfo)

		//struct4101.IteminfoStruct = append(struct4101.IteminfoStruct, iteminfo)

	}

	if treatCostTotal != 0 {
		iteminfo.MedChrgitm = "05"
		iteminfo.FulamtOwnpayAmt = treat_fulamt_ownpay_amt
		iteminfo.Amt = treatCostTotal
		iteminfo.ClaaSumfee = treat_claa_sunmfee
		iteminfo.ClabAmt = treat_clab_amt
		iteminfo.OthAmt = treat_other_amt
		iteminfoStructs = append(iteminfoStructs, iteminfo)
		//(struct4101.IteminfoStruct, iteminfo)
		//struct4101.IteminfoStruct = append(struct4101.IteminfoStruct, iteminfo)
	}

	if operationCostTotal != 0 {
		iteminfo.MedChrgitm = "06"
		iteminfo.FulamtOwnpayAmt = bed_fulamt_ownpay_amt
		iteminfo.Amt = operationCostTotal
		iteminfo.ClaaSumfee = operation_claa_sunmfee
		iteminfo.ClabAmt = operation_clab_amt
		iteminfo.OthAmt = operation_other_amt
		//struct4101.IteminfoStruct = append(struct4101.IteminfoStruct, iteminfo)
		iteminfoStructs = append(iteminfoStructs, iteminfo)
	}

	if materialCostTotal != 0 {
		iteminfo.MedChrgitm = "08"
		iteminfo.FulamtOwnpayAmt = material_fulamt_ownpay_amt
		iteminfo.Amt = materialCostTotal
		iteminfo.ClaaSumfee = material_claa_sunmfee
		iteminfo.ClabAmt = material_clab_amt
		iteminfo.OthAmt = material_other_amt
		//struct4101.IteminfoStruct = append(struct4101.IteminfoStruct, iteminfo)
		iteminfoStructs = append(iteminfoStructs, iteminfo)
	}

	if westernMedicineCostTotal != 0 {
		iteminfo.MedChrgitm = "09"
		iteminfo.FulamtOwnpayAmt = westernMedicine_fulamt_ownpay_amt
		iteminfo.Amt = westernMedicineCostTotal
		iteminfo.ClaaSumfee = westernMedicine_claa_sunmfee
		iteminfo.ClabAmt = westernMedicine_clab_amt
		iteminfo.OthAmt = westernMedicine_other_amt
		//struct4101.IteminfoStruct = append(struct4101.IteminfoStruct, iteminfo)
		iteminfoStructs = append(iteminfoStructs, iteminfo)

	}
	if chineseTraditionalMedicineCostTotal != 0 {
		iteminfo.MedChrgitm = "11"
		iteminfo.FulamtOwnpayAmt = westernMedicine_fulamt_ownpay_amt
		iteminfo.Amt = westernMedicineCostTotal
		iteminfo.ClaaSumfee = westernMedicine_claa_sunmfee
		iteminfo.ClabAmt = westernMedicine_clab_amt
		iteminfo.OthAmt = westernMedicine_other_amt
		//struct4101.IteminfoStruct = append(struct4101.IteminfoStruct, iteminfo)
		iteminfoStructs = append(iteminfoStructs, iteminfo)

	}
	if otherCostTotal != 0 {
		iteminfo.MedChrgitm = "14"
		iteminfo.FulamtOwnpayAmt = other_fulamt_ownpay_amt
		iteminfo.Amt = otherCostTotal
		iteminfo.ClaaSumfee = other_claa_sunmfee
		iteminfo.ClabAmt = other_clab_amt
		iteminfo.OthAmt = other_other_amt
		//struct4101.IteminfoStruct = append(struct4101.IteminfoStruct, iteminfo)
		iteminfoStructs = append(iteminfoStructs, iteminfo)

	}
	struct4101.IteminfoStruct = iteminfoStructs
	struct4101.Ntly = "中国"
	struct4101.AdmCaty = "A03.06"

	var res ResultSeventeen

	if miConfig.MdtrtareaAdmvs == "320921" || miConfig.MdtrtareaAdmvs == "320982" {
		var resOther ResultSeventeenOther
		var pp models.PublicParams
		pp.InsuplcAdmdvs = miConfig.InsuplcAdmdvs
		pp.MdtrtareaAdmvs = miConfig.MdtrtareaAdmvs
		pp.FixmedinsName = miConfig.OrgName
		pp.FixmedinsCode = miConfig.Code
		pp.RequestUrl = miConfig.Url
		pp.Cainfo = miConfig.Cainfo
		pp.SecretKey = miConfig.SecretKey
		pp.AccessKey = miConfig.AccessKey
		pp.OpterName = curRoles.UserName

		client := &http.Client{}
		var req *http.Request
		data := make(map[string]interface{})
		data["struct4101"] = struct4101
		data["pp"] = pp
		bytesData, _ := json.Marshal(data)
		if miConfig.MdtrtareaAdmvs == "320921" {
			req, _ = http.NewRequest("POST", "http://192.168.2.110:9532/"+"jsyb/4101", bytes.NewReader(bytesData))
		} else {
			req, _ = http.NewRequest("POST", "http://192.168.5.251:9532/"+"jsyb/4101", bytes.NewReader(bytesData))
		}
		resp, _ := client.Do(req)
		defer resp.Body.Close()
		body, ioErr := ioutil.ReadAll(resp.Body)
		if ioErr != nil {
			utils.ErrorLog("接口返回数据读取失败: %v", ioErr)
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
			return
		}
		var respJSON map[string]interface{}
		if err := json.Unmarshal([]byte(body), &respJSON); err != nil {
			utils.ErrorLog("接口返回数据解析JSON失败: %v", err)
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
			return
		}

		respJSON = respJSON["data"].(map[string]interface{})["pre"].(map[string]interface{})
		userJSONBytes, _ := json.Marshal(respJSON)
		fmt.Println("log")
		fmt.Println(string(userJSONBytes))
		if err := json.Unmarshal(userJSONBytes, &resOther); err != nil {
			utils.ErrorLog("解析失败:%v", err)
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
			return
		}
		res.InfRefmsgid = resOther.InfRefmsgid
		res.Output = resOther.Output
		res.ErrMsg = resOther.ErrMsg
		infocode, _ := strconv.ParseInt(resOther.Infcode, 10, 64)
		res.Infcode = infocode
	} else {

		result := service.Gdyb4101(struct4101, miConfig.SecretKey, miConfig.OrgName, curRoles.UserName, miConfig.Code, miConfig.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.UserOrgId)
		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)
		if err := json.Unmarshal(userJSONBytes, &res); err != nil {
			utils.ErrorLog("解析失败:%v", err)
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
			return
		}
	}

	if res.Infcode != 0 {

		c.ServeSuccessJSON(map[string]interface{}{
			"failed_code": -10,
			"msg":         res.ErrMsg,
		})
		return
	} else {
		order.FaPiaoNumber = zero
		order.FaPiaoCode = last_order.FaPiaoCode
		service.UpdateOrder(order)
		hisFundSettleListResult := &models.HisFundSettleListResult{
			Number:    res.Output.SetlListId,
			Status:    1,
			Ctime:     time.Now().Unix(),
			Mtime:     time.Now().Unix(),
			UserOrgId: c.GetAdminUserInfo().CurrentOrgId,
			IsUpload:  1,
			OrderId:   order_id,
		}
		service.CreateUploadRecord(hisFundSettleListResult)
		c.ServeSuccessJSON(map[string]interface{}{
			"msg":    "上传成功",
			"result": hisFundSettleListResult,
		})
		return
	}
}

func (c *HisApiController) GetSettleListHospital() {

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

	order, _ := service.GetHisOrderByIDTwo(order_id)
	roles, _ := service.GetDoctorListTwo(c.GetAdminUserInfo().CurrentOrgId)
	his, _ := service.GetInHospitalRecordByNumber(order.MdtrtId)
	admin, _ := service.GetAdminUserByUserID(roles[0].AdminUserId)
	curRoles, _ := service.GetAdminUserInfoByID(c.GetAdminUserInfo().CurrentOrgId, admin_user_id)
	depart, _ := service.GetDepartMentDetail(curRoles.DepartmentId)
	miConfig, _ := service.FindMedicalInsuranceInfo(c.GetAdminUserInfo().CurrentOrgId)

	if order.ID == 0 {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeHisOrderNoExistParamWrong)
		return
	}

	last_order, _ := service.GetLastHisOrder(c.GetAdminUserInfo().CurrentOrgId)
	max_order, _ := service.GetLastHisOrderTwo(c.GetAdminUserInfo().CurrentOrgId)
	count, _ := strconv.ParseInt(max_order.FaPiaoNumber, 10, 64)
	fmt.Println(count)
	var zero string
	number := count + 1
	if number >= 1000 {
		zero = "0000" + strconv.FormatInt(number, 10)
	} else if number >= 10000 {
		zero = "000" + strconv.FormatInt(number, 10)
	} else if number >= 100000 {
		zero = "00" + strconv.FormatInt(number, 10)
	} else if number >= 1000000 {
		zero = "0" + strconv.FormatInt(number, 10)
	} else {
		zero = strconv.FormatInt(number, 10)
	}
	fmt.Println(zero)

	struct4101 := service.Struct4101{
		PsnNo:          order.PsnNo,
		MdtrtId:        order.MdtrtId,
		SetlId:         order.SetlId,
		PsnName:        order.PsnName,
		Gend:           order.Gend,
		Brdy:           his.Brdy,
		Age:            int64(order.Age),
		Naty:           order.Naty,
		PatnCertType:   "01",
		Certno:         order.Certno,
		Prfs:           "90",
		ConerName:      roles[0].UserName,
		PatnRlts:       "99",
		ConerAddr:      miConfig.OrgName,
		ConerTel:       admin.Mobile,
		HiType:         order.Insutype,
		Insuplc:        miConfig.InsuplcAdmdvs,
		MaindiagFlag:   "1",
		BillCode:       last_order.FaPiaoCode,
		BillNo:         zero,
		BizSn:          order.Number,
		PsnSelfPay:     order.PsnPartAmt,
		PsnOwnPay:      order.PsnPartAmt,
		AcctPay:        order.AcctPay,
		PsnCashpay:     order.PsnCashPay,
		HiPaymtd:       "1",
		Hsorg:          miConfig.InsuplcAdmdvs,
		HsorgOpter:     miConfig.InsuplcAdmdvs,
		MedinsFillPsn:  curRoles.UserName,
		MedinsFillDept: depart.Name,
		IptMedType:     "2",
		AdmTime:        his.InHosptialTime,
		AdmEndTime:     his.OutHosptialTime,
	}
	struct4101.SetlBegnDate = order.SetlTime
	struct4101.SetlEndDate = order.SetlTime

	var rf []CustomFundPay
	json.Unmarshal([]byte(order.SetlDetail), &rf)

	var tempFunPays []service.CustomStruct
	for _, item := range rf {
		var tempFunPay service.CustomStruct
		tempFunPay.FundPayamt = item.FundPayamt
		tempFunPay.FundPayType = item.FundPayType
		tempFunPays = append(tempFunPays, tempFunPay)
	}
	struct4101.CustomStruct = tempFunPays

	var tempDiaginfos []service.DiaginfoStructTwo
	var tempOpspdiseinfo2 service.OpspdiseinfoStruct
	var tempOpspdiseinfos []service.OpspdiseinfoStruct
	diagnosis_ids := strings.Split(his.Diagnosis, ",")
	var config []*models.HisXtDiagnoseConfig
	for _, item := range diagnosis_ids {
		id, _ := strconv.ParseInt(item, 10, 64)
		diagnosisConfig, _ := service.FindDiagnoseById(id)
		config = append(config, &diagnosisConfig)
	}

	for index, item := range config {
		if index == 0 {
			var tempDiaginfo service.DiaginfoStructTwo
			tempDiaginfo.DiagCode = item.CountryCode
			tempDiaginfo.DiagName = item.CountryContentName
			tempDiaginfo.DiagType = "1"
			tempDiaginfo.MaindiagFlag = "1"
			tempDiaginfos = append(tempDiaginfos, tempDiaginfo)
		} else {

			var tempDiaginfo service.DiaginfoStructTwo
			tempDiaginfo.DiagCode = item.CountryCode
			tempDiaginfo.DiagName = item.CountryContentName
			tempDiaginfo.DiagType = "2"
			tempDiaginfo.MaindiagFlag = "0"
			tempDiaginfos = append(tempDiaginfos, tempDiaginfo)
		}
	}
	struct4101.Diseinfo = tempDiaginfos

	sickConfigTwo, _ := service.FindSickById(his.SickType)
	tempOpspdiseinfo2.DiagCode = sickConfigTwo.ContentCode
	tempOpspdiseinfo2.DiagName = sickConfigTwo.CountryContentName
	tempOpspdiseinfo2.OprnOprtCode = ""
	tempOpspdiseinfo2.OprnOprtName = ""
	tempOpspdiseinfos = append(tempOpspdiseinfos, tempOpspdiseinfo2)
	struct4101.OpspdiseinfoStruct = tempOpspdiseinfos

	var iteminfo service.IteminfoStruct

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

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

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

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

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

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

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

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

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

	decimal.DivisionPrecision = 2

	var bed_fulamt_ownpay_amt float64 = 0
	var operation_fulamt_ownpay_amt float64 = 0
	var other_fulamt_ownpay_amt float64 = 0
	var westernMedicine_fulamt_ownpay_amt float64 = 0
	var chineseTraditional_fulamt_ownpay_amt float64 = 0
	var check_fulamt_ownpay_amt float64 = 0
	var material_fulamt_ownpay_amt float64 = 0
	var laboratory_fulamt_ownpay_amt float64 = 0
	var treat_fulamt_ownpay_amt float64 = 0

	var bed_claa_sunmfee float64 = 0
	var bed_clab_amt float64 = 0
	var bed_other_amt float64 = 0

	var operation_claa_sunmfee float64 = 0
	var operation_clab_amt float64 = 0
	var operation_other_amt float64 = 0

	var other_claa_sunmfee float64 = 0
	var other_clab_amt float64 = 0
	var other_other_amt float64 = 0

	var westernMedicine_claa_sunmfee float64 = 0
	var westernMedicine_clab_amt float64 = 0
	var westernMedicine_other_amt float64 = 0

	var chineseTraditional_claa_sunmfee float64 = 0
	var chineseTraditional_clab_amt float64 = 0
	var chineseTraditional_other_amt float64 = 0

	var check_claa_sunmfee float64 = 0
	var check_clab_amt float64 = 0
	var check_other_amt float64 = 0

	var material_claa_sunmfee float64 = 0
	var material_clab_amt float64 = 0
	var material_other_amt float64 = 0

	var laboratory_claa_sunmfee float64 = 0
	var laboratory_clab_amt float64 = 0
	var laboratory_other_amt float64 = 0

	var treat_claa_sunmfee float64 = 0
	var treat_clab_amt float64 = 0
	var treat_other_amt float64 = 0

	for _, item := range order.HisOrderInfo {
		if item.MedChrgitmType == "01" { //床位费
			bedCostTotal, _ = decimal.NewFromFloat(bedCostTotal).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
			bedCostSelfTotal, _ = decimal.NewFromFloat(bedCostSelfTotal).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
			bedCostPartSelfTotal, _ = decimal.NewFromFloat(bedCostPartSelfTotal).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()
			bed_fulamt_ownpay_amt, _ = decimal.NewFromFloat(bed_fulamt_ownpay_amt).Add(decimal.NewFromFloat(item.FulamtOwnpayAmt)).Float64()
			if item.ChrgitmLv == "1" {
				bed_claa_sunmfee, _ = decimal.NewFromFloat(bed_claa_sunmfee).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
			}
			if item.ChrgitmLv == "2" {
				bed_clab_amt, _ = decimal.NewFromFloat(bed_clab_amt).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()

			}
			if item.ChrgitmLv == "3" {
				bed_other_amt, _ = decimal.NewFromFloat(bed_other_amt).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
			}

		}

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

				check_claa_sunmfee, _ = decimal.NewFromFloat(check_claa_sunmfee).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()

			}
			if item.ChrgitmLv == "2" {
				check_clab_amt, _ = decimal.NewFromFloat(check_clab_amt).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()

			}
			if item.ChrgitmLv == "3" {
				check_other_amt, _ = decimal.NewFromFloat(check_other_amt).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
			}
		}

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

				laboratory_claa_sunmfee, _ = decimal.NewFromFloat(laboratory_claa_sunmfee).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()

			}
			if item.ChrgitmLv == "2" {
				laboratory_clab_amt, _ = decimal.NewFromFloat(laboratory_clab_amt).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()

			}
			if item.ChrgitmLv == "3" {
				laboratory_other_amt, _ = decimal.NewFromFloat(laboratory_other_amt).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
			}
		}

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

				treat_claa_sunmfee, _ = decimal.NewFromFloat(treat_claa_sunmfee).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()

			}
			if item.ChrgitmLv == "2" {
				treat_clab_amt, _ = decimal.NewFromFloat(treat_clab_amt).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()

			}
			if item.ChrgitmLv == "3" {
				treat_other_amt, _ = decimal.NewFromFloat(treat_other_amt).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
			}
		}

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

			if item.ChrgitmLv == "1" {

				operation_claa_sunmfee, _ = decimal.NewFromFloat(operation_claa_sunmfee).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()

			}
			if item.ChrgitmLv == "2" {
				operation_clab_amt, _ = decimal.NewFromFloat(operation_clab_amt).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()

			}
			if item.ChrgitmLv == "3" {
				operation_other_amt, _ = decimal.NewFromFloat(operation_other_amt).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
			}
		}

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

				material_claa_sunmfee, _ = decimal.NewFromFloat(material_claa_sunmfee).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()

			}
			if item.ChrgitmLv == "2" {
				material_clab_amt, _ = decimal.NewFromFloat(material_clab_amt).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()

			}
			if item.ChrgitmLv == "3" {
				material_other_amt, _ = decimal.NewFromFloat(material_other_amt).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
			}
		}

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

				westernMedicine_claa_sunmfee, _ = decimal.NewFromFloat(westernMedicine_claa_sunmfee).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()

			}
			if item.ChrgitmLv == "2" {
				westernMedicine_clab_amt, _ = decimal.NewFromFloat(westernMedicine_clab_amt).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()

			}
			if item.ChrgitmLv == "3" {
				westernMedicine_other_amt, _ = decimal.NewFromFloat(westernMedicine_other_amt).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
			}
		}

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

				chineseTraditional_claa_sunmfee, _ = decimal.NewFromFloat(chineseTraditional_claa_sunmfee).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()

			}
			if item.ChrgitmLv == "2" {
				chineseTraditional_clab_amt, _ = decimal.NewFromFloat(chineseTraditional_clab_amt).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()

			}
			if item.ChrgitmLv == "3" {
				chineseTraditional_other_amt, _ = decimal.NewFromFloat(chineseTraditional_other_amt).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
			}
		}

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

			}
			if item.ChrgitmLv == "2" {
				other_clab_amt, _ = decimal.NewFromFloat(other_clab_amt).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()

			}
			if item.ChrgitmLv == "3" {
				other_other_amt, _ = decimal.NewFromFloat(other_other_amt).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
			}
		}

	}

	var iteminfoStructs []service.IteminfoStruct

	if bedCostTotal != 0 {
		iteminfo.MedChrgitm = "01"
		iteminfo.FulamtOwnpayAmt = bed_fulamt_ownpay_amt
		iteminfo.Amt = bedCostTotal
		iteminfo.ClaaSumfee = bed_claa_sunmfee
		iteminfo.ClabAmt = bed_clab_amt
		iteminfo.OthAmt = bed_other_amt
		iteminfoStructs = append(iteminfoStructs, iteminfo)
	}

	if checkCostTotal != 0 {
		iteminfo.MedChrgitm = "03"
		iteminfo.FulamtOwnpayAmt = check_fulamt_ownpay_amt
		iteminfo.Amt = checkCostTotal
		iteminfo.ClaaSumfee = check_claa_sunmfee
		iteminfo.ClabAmt = check_clab_amt
		iteminfo.OthAmt = check_other_amt
		iteminfoStructs = append(iteminfoStructs, iteminfo)

	}

	if laboratoryCostTotal != 0 {
		iteminfo.MedChrgitm = "04"
		iteminfo.FulamtOwnpayAmt = laboratory_fulamt_ownpay_amt
		iteminfo.Amt = laboratoryCostTotal
		iteminfo.ClaaSumfee = laboratory_claa_sunmfee
		iteminfo.ClabAmt = laboratory_clab_amt
		iteminfo.OthAmt = laboratory_other_amt
		iteminfoStructs = append(iteminfoStructs, iteminfo)

		//struct4101.IteminfoStruct = append(struct4101.IteminfoStruct, iteminfo)

	}

	if treatCostTotal != 0 {
		iteminfo.MedChrgitm = "05"
		iteminfo.FulamtOwnpayAmt = treat_fulamt_ownpay_amt
		iteminfo.Amt = treatCostTotal
		iteminfo.ClaaSumfee = treat_claa_sunmfee
		iteminfo.ClabAmt = treat_clab_amt
		iteminfo.OthAmt = treat_other_amt
		iteminfoStructs = append(iteminfoStructs, iteminfo)
		//(struct4101.IteminfoStruct, iteminfo)
		//struct4101.IteminfoStruct = append(struct4101.IteminfoStruct, iteminfo)
	}

	if operationCostTotal != 0 {
		iteminfo.MedChrgitm = "06"
		iteminfo.FulamtOwnpayAmt = bed_fulamt_ownpay_amt
		iteminfo.Amt = operationCostTotal
		iteminfo.ClaaSumfee = operation_claa_sunmfee
		iteminfo.ClabAmt = operation_clab_amt
		iteminfo.OthAmt = operation_other_amt
		//struct4101.IteminfoStruct = append(struct4101.IteminfoStruct, iteminfo)
		iteminfoStructs = append(iteminfoStructs, iteminfo)
	}

	if materialCostTotal != 0 {
		iteminfo.MedChrgitm = "08"
		iteminfo.FulamtOwnpayAmt = material_fulamt_ownpay_amt
		iteminfo.Amt = materialCostTotal
		iteminfo.ClaaSumfee = material_claa_sunmfee
		iteminfo.ClabAmt = material_clab_amt
		iteminfo.OthAmt = material_other_amt
		//struct4101.IteminfoStruct = append(struct4101.IteminfoStruct, iteminfo)
		iteminfoStructs = append(iteminfoStructs, iteminfo)
	}

	if westernMedicineCostTotal != 0 {
		iteminfo.MedChrgitm = "09"
		iteminfo.FulamtOwnpayAmt = westernMedicine_fulamt_ownpay_amt
		iteminfo.Amt = westernMedicineCostTotal
		iteminfo.ClaaSumfee = westernMedicine_claa_sunmfee
		iteminfo.ClabAmt = westernMedicine_clab_amt
		iteminfo.OthAmt = westernMedicine_other_amt
		//struct4101.IteminfoStruct = append(struct4101.IteminfoStruct, iteminfo)
		iteminfoStructs = append(iteminfoStructs, iteminfo)

	}
	if chineseTraditionalMedicineCostTotal != 0 {
		iteminfo.MedChrgitm = "11"
		iteminfo.FulamtOwnpayAmt = westernMedicine_fulamt_ownpay_amt
		iteminfo.Amt = westernMedicineCostTotal
		iteminfo.ClaaSumfee = westernMedicine_claa_sunmfee
		iteminfo.ClabAmt = westernMedicine_clab_amt
		iteminfo.OthAmt = westernMedicine_other_amt
		//struct4101.IteminfoStruct = append(struct4101.IteminfoStruct, iteminfo)
		iteminfoStructs = append(iteminfoStructs, iteminfo)

	}
	if otherCostTotal != 0 {
		iteminfo.MedChrgitm = "14"
		iteminfo.FulamtOwnpayAmt = other_fulamt_ownpay_amt
		iteminfo.Amt = otherCostTotal
		iteminfo.ClaaSumfee = other_claa_sunmfee
		iteminfo.ClabAmt = other_clab_amt
		iteminfo.OthAmt = other_other_amt
		//struct4101.IteminfoStruct = append(struct4101.IteminfoStruct, iteminfo)
		iteminfoStructs = append(iteminfoStructs, iteminfo)

	}
	struct4101.IteminfoStruct = iteminfoStructs
	struct4101.Ntly = "中国"
	struct4101.AdmCaty = "A03.06"
	result := service.Gdyb4101(struct4101, miConfig.SecretKey, miConfig.OrgName, curRoles.UserName, miConfig.Code, miConfig.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.UserOrgId)
	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 ResultSeventeen
	if err := json.Unmarshal(userJSONBytes, &res); err != nil {
		utils.ErrorLog("解析失败:%v", err)
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
		return
	}
	if res.Infcode != 0 {

		c.ServeSuccessJSON(map[string]interface{}{
			"failed_code": -10,
			"msg":         res.ErrMsg,
		})
		return
	} else {
		order.FaPiaoNumber = zero
		order.FaPiaoCode = last_order.FaPiaoCode
		service.UpdateOrder(order)
		hisFundSettleListResult := &models.HisFundSettleListResult{
			Number:    res.Output.SetlListId,
			Status:    1,
			Ctime:     time.Now().Unix(),
			Mtime:     time.Now().Unix(),
			UserOrgId: c.GetAdminUserInfo().CurrentOrgId,
			IsUpload:  1,
			OrderId:   order_id,
		}
		service.CreateUploadRecord(hisFundSettleListResult)
		c.ServeSuccessJSON(map[string]interface{}{
			"msg":    "上传成功",
			"result": hisFundSettleListResult,
		})
		return
	}
}

func (c *HisApiController) GetBatchSettleList() {
	orders, _ := service.GetAllHisOrder(10088)
	for _, item := range orders {
		order_id := item.ID
		order, _ := service.GetHisOrderByIDTwo(order_id)
		roles, _ := service.GetDoctorListTwo(c.GetAdminUserInfo().CurrentOrgId)
		his, _ := service.GetHisPatientByNumber(order.MdtrtId)
		admin, _ := service.GetAdminUserByUserID(roles[0].AdminUserId)
		curRoles, _ := service.GetAdminUserInfoByID(c.GetAdminUserInfo().CurrentOrgId, 2273)
		depart, _ := service.GetDepartMentDetail(curRoles.DepartmentId)
		miConfig, _ := service.FindMedicalInsuranceInfo(c.GetAdminUserInfo().CurrentOrgId)

		if order.ID == 0 {
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeHisOrderNoExistParamWrong)
			return
		}
		if his.BalanceAccountsType == 2 {
			continue
		}
		struct4101 := service.Struct4101{
			PsnNo:          order.PsnNo,
			MdtrtId:        order.MdtrtId,
			SetlId:         order.SetlId,
			PsnName:        order.PsnName,
			Gend:           order.Gend,
			Brdy:           his.Brdy,
			Age:            his.Age,
			Naty:           order.Naty,
			PatnCertType:   "01",
			Certno:         order.Certno,
			Prfs:           "90",
			ConerName:      roles[0].UserName,
			PatnRlts:       "99",
			ConerAddr:      miConfig.OrgName,
			ConerTel:       admin.Mobile,
			HiType:         order.Insutype,
			Insuplc:        his.InsuplcAdmdvs,
			MaindiagFlag:   "1",
			BillCode:       order.FaPiaoCode,
			BillNo:         order.FaPiaoNumber,
			BizSn:          order.Number,
			PsnSelfPay:     order.PsnPartAmt,
			PsnOwnPay:      order.PsnPartAmt,
			AcctPay:        order.AcctPay,
			PsnCashpay:     order.PsnCashPay,
			HiPaymtd:       "1",
			Hsorg:          his.InsuplcAdmdvs,
			HsorgOpter:     his.InsuplcAdmdvs,
			MedinsFillPsn:  curRoles.UserName,
			MedinsFillDept: depart.Name,
			IptMedType:     "2",
		}
		struct4101.SetlBegnDate = order.SetlTime
		struct4101.SetlEndDate = order.SetlTime
		//if order.SettleType == 1 {
		//	t := time.Unix(int64(order.SettleAccountsDate), 0)
		//	dateStr := t.Format("2006-01-02")
		//	struct4101.SetlBegnDate = dateStr
		//	struct4101.SetlEndDate = dateStr
		//} else {
		//	t := time.Unix(int64(order.SettleStartTime), 0)
		//	t2 := time.Unix(int64(order.SettleEndTime), 0)
		//	dateStartStr := t.Format("2006-01-02")
		//	dateEndStr := t2.Format("2006-01-02")
		//	struct4101.SetlBegnDate = dateStartStr
		//	struct4101.SetlEndDate = dateEndStr
		//}

		var rf []CustomFundPay
		json.Unmarshal([]byte(order.SetlDetail), &rf)

		var tempFunPays []service.CustomStruct
		var tempFunPay610100 service.CustomStruct

		for _, item := range rf {
			if item.FundPayType == "610100" {
				tempFunPay610100.FundPayamt, _ = decimal.NewFromFloat(tempFunPay610100.FundPayamt).Add(decimal.NewFromFloat(item.FundPayamt)).Float64()
				tempFunPay610100.FundPayType = item.FundPayType
			} else {
				var tempFunPay service.CustomStruct
				tempFunPay.FundPayamt = item.FundPayamt
				tempFunPay.FundPayType = item.FundPayType
				tempFunPays = append(tempFunPays, tempFunPay)
			}
		}
		tempFunPays = append(tempFunPays, tempFunPay610100)
		struct4101.CustomStruct = tempFunPays

		var tempDiaginfos []service.DiaginfoStructTwo
		var tempOpspdiseinfo2 service.OpspdiseinfoStruct
		var tempOpspdiseinfos []service.OpspdiseinfoStruct

		diagnosis_ids := strings.Split(his.Diagnosis, ",")
		var config []*models.HisXtDiagnoseConfig
		for _, item := range diagnosis_ids {
			id, _ := strconv.ParseInt(item, 10, 64)
			diagnosisConfig, _ := service.FindDiagnoseById(id)
			config = append(config, &diagnosisConfig)
		}

		for index, item := range config {
			if index == 0 {
				var tempDiaginfo service.DiaginfoStructTwo
				tempDiaginfo.DiagCode = item.CountryCode
				tempDiaginfo.DiagName = item.CountryContentName
				tempDiaginfo.DiagType = "1"
				tempDiaginfo.MaindiagFlag = "1"
				tempDiaginfos = append(tempDiaginfos, tempDiaginfo)
			} else {

				var tempDiaginfo service.DiaginfoStructTwo
				tempDiaginfo.DiagCode = item.CountryCode
				tempDiaginfo.DiagName = item.CountryContentName
				tempDiaginfo.DiagType = "2"
				tempDiaginfo.MaindiagFlag = "0"
				tempDiaginfos = append(tempDiaginfos, tempDiaginfo)
			}
		}
		struct4101.Diseinfo = tempDiaginfos

		sickConfigTwo, _ := service.FindSickById(his.SickType)
		tempOpspdiseinfo2.DiagCode = sickConfigTwo.ContentCode
		tempOpspdiseinfo2.DiagName = sickConfigTwo.CountryContentName
		tempOpspdiseinfo2.OprnOprtCode = ""
		tempOpspdiseinfo2.OprnOprtName = ""
		tempOpspdiseinfos = append(tempOpspdiseinfos, tempOpspdiseinfo2)
		struct4101.OpspdiseinfoStruct = tempOpspdiseinfos

		var iteminfo service.IteminfoStruct

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

		var examineCostTotal float64 = 0         //诊查总费
		var examineCostSelfTotal float64 = 0     //诊查自费
		var examineCostPartSelfTotal float64 = 0 //诊查部分项目自费

		var nursingCostTotal float64 = 0         //护理总费
		var nursingCostSelfTotal float64 = 0     //护理自费
		var nursingCostPartSelfTotal float64 = 0 //护理部分项目自费

		var chineseMedicineCostTotal float64 = 0         //中成药
		var chineseMedicineCostSelfTotal float64 = 0     //中成药
		var chineseMedicineCostPartSelfTotal float64 = 0 //中成药

		var commonlyTreatmentCostTotal float64 = 0         //一般诊疗费
		var commonlyTreatmentCostSelfTotal float64 = 0     //一般诊疗费
		var commonlyTreatmentCostPartSelfTotal float64 = 0 //一般诊疗费

		var registerCostTotal float64 = 0     //一般诊疗费
		var registerCostSelfTotal float64 = 0 //一般诊疗费
		var registerPartSelfTotal float64 = 0 //一般诊疗费

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

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

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

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

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

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

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

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

		decimal.DivisionPrecision = 2

		var bed_fulamt_ownpay_amt float64 = 0

		var examine_fulamt_ownpay_amt float64 = 0

		var nursing_fulamt_ownpay_amt float64 = 0

		var chinese_medicine_fulamt_ownpay_amt float64 = 0

		var commonly_treatment_fulamt_ownpay_amt float64 = 0

		var register_fulamt_ownpay_amt float64 = 0

		var operation_fulamt_ownpay_amt float64 = 0
		var other_fulamt_ownpay_amt float64 = 0
		var westernMedicine_fulamt_ownpay_amt float64 = 0
		var chineseTraditional_fulamt_ownpay_amt float64 = 0
		var check_fulamt_ownpay_amt float64 = 0
		var material_fulamt_ownpay_amt float64 = 0
		var laboratory_fulamt_ownpay_amt float64 = 0
		var treat_fulamt_ownpay_amt float64 = 0

		var bed_claa_sunmfee float64 = 0
		var bed_clab_amt float64 = 0
		var bed_other_amt float64 = 0

		var examine_claa_sunmfee float64 = 0
		var examine_clab_amt float64 = 0
		var examine_other_amt float64 = 0

		var nursing_claa_sunmfee float64 = 0
		var nursing_clab_amt float64 = 0
		var nursing_other_amt float64 = 0

		var chinese_medicine_claa_sunmfee float64 = 0
		var chinese_medicine_clab_amt float64 = 0
		var chinese_medicine_other_amt float64 = 0

		var commonly_treatment_claa_sunmfee float64 = 0
		var commonly_treatment_clab_amt float64 = 0
		var commonly_treatment_other_amt float64 = 0

		var operation_claa_sunmfee float64 = 0
		var operation_clab_amt float64 = 0
		var operation_other_amt float64 = 0

		var other_claa_sunmfee float64 = 0
		var other_clab_amt float64 = 0
		var other_other_amt float64 = 0

		var westernMedicine_claa_sunmfee float64 = 0
		var westernMedicine_clab_amt float64 = 0
		var westernMedicine_other_amt float64 = 0

		var chineseTraditional_claa_sunmfee float64 = 0
		var chineseTraditional_clab_amt float64 = 0
		var chineseTraditional_other_amt float64 = 0

		var check_claa_sunmfee float64 = 0
		var check_clab_amt float64 = 0
		var check_other_amt float64 = 0

		var material_claa_sunmfee float64 = 0
		var material_clab_amt float64 = 0
		var material_other_amt float64 = 0

		var laboratory_claa_sunmfee float64 = 0
		var laboratory_clab_amt float64 = 0
		var laboratory_other_amt float64 = 0

		var treat_claa_sunmfee float64 = 0
		var treat_clab_amt float64 = 0
		var treat_other_amt float64 = 0

		var register_claa_sunmfee float64 = 0
		var register_clab_amt float64 = 0
		var register_other_amt float64 = 0

		for _, item := range order.HisOrderInfo {
			if item.MedChrgitmType == "01" { //床位费
				bedCostTotal, _ = decimal.NewFromFloat(bedCostTotal).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
				bedCostSelfTotal, _ = decimal.NewFromFloat(bedCostSelfTotal).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
				bedCostPartSelfTotal, _ = decimal.NewFromFloat(bedCostPartSelfTotal).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()
				bed_fulamt_ownpay_amt, _ = decimal.NewFromFloat(bed_fulamt_ownpay_amt).Add(decimal.NewFromFloat(item.FulamtOwnpayAmt)).Float64()
				if item.ChrgitmLv == "1" {
					bed_claa_sunmfee, _ = decimal.NewFromFloat(bed_claa_sunmfee).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
				}
				if item.ChrgitmLv == "2" {
					bed_clab_amt, _ = decimal.NewFromFloat(bed_clab_amt).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()

				}
				if item.ChrgitmLv == "3" {
					bed_other_amt, _ = decimal.NewFromFloat(bed_other_amt).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
				}

			}

			if item.MedChrgitmType == "02" { //诊查
				examineCostTotal, _ = decimal.NewFromFloat(examineCostTotal).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
				examineCostSelfTotal, _ = decimal.NewFromFloat(examineCostSelfTotal).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
				examineCostPartSelfTotal, _ = decimal.NewFromFloat(examineCostPartSelfTotal).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()
				examine_fulamt_ownpay_amt, _ = decimal.NewFromFloat(examine_fulamt_ownpay_amt).Add(decimal.NewFromFloat(item.FulamtOwnpayAmt)).Float64()
				if item.ChrgitmLv == "1" {
					examine_claa_sunmfee, _ = decimal.NewFromFloat(examine_claa_sunmfee).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
				}
				if item.ChrgitmLv == "2" {
					examine_clab_amt, _ = decimal.NewFromFloat(examine_clab_amt).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()

				}
				if item.ChrgitmLv == "3" {
					examine_other_amt, _ = decimal.NewFromFloat(examine_other_amt).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
				}

			}

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

					check_claa_sunmfee, _ = decimal.NewFromFloat(check_claa_sunmfee).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()

				}
				if item.ChrgitmLv == "2" {
					check_clab_amt, _ = decimal.NewFromFloat(check_clab_amt).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()

				}
				if item.ChrgitmLv == "3" {
					check_other_amt, _ = decimal.NewFromFloat(check_other_amt).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
				}
			}

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

					laboratory_claa_sunmfee, _ = decimal.NewFromFloat(laboratory_claa_sunmfee).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()

				}
				if item.ChrgitmLv == "2" {
					laboratory_clab_amt, _ = decimal.NewFromFloat(laboratory_clab_amt).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()

				}
				if item.ChrgitmLv == "3" {
					laboratory_other_amt, _ = decimal.NewFromFloat(laboratory_other_amt).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
				}
			}

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

					treat_claa_sunmfee, _ = decimal.NewFromFloat(treat_claa_sunmfee).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()

				}
				if item.ChrgitmLv == "2" {
					treat_clab_amt, _ = decimal.NewFromFloat(treat_clab_amt).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()

				}
				if item.ChrgitmLv == "3" {
					treat_other_amt, _ = decimal.NewFromFloat(treat_other_amt).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
				}
			}

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

				if item.ChrgitmLv == "1" {

					operation_claa_sunmfee, _ = decimal.NewFromFloat(operation_claa_sunmfee).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()

				}
				if item.ChrgitmLv == "2" {
					operation_clab_amt, _ = decimal.NewFromFloat(operation_clab_amt).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()

				}
				if item.ChrgitmLv == "3" {
					operation_other_amt, _ = decimal.NewFromFloat(operation_other_amt).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
				}
			}

			if item.MedChrgitmType == "07" { //手术费
				nursingCostTotal, _ = decimal.NewFromFloat(nursingCostTotal).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
				nursingCostSelfTotal, _ = decimal.NewFromFloat(nursingCostSelfTotal).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
				nursingCostPartSelfTotal, _ = decimal.NewFromFloat(nursingCostPartSelfTotal).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()
				nursing_fulamt_ownpay_amt, _ = decimal.NewFromFloat(nursing_fulamt_ownpay_amt).Add(decimal.NewFromFloat(item.FulamtOwnpayAmt)).Float64()

				if item.ChrgitmLv == "1" {

					nursing_claa_sunmfee, _ = decimal.NewFromFloat(nursing_claa_sunmfee).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()

				}
				if item.ChrgitmLv == "2" {
					nursing_clab_amt, _ = decimal.NewFromFloat(nursing_clab_amt).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()

				}
				if item.ChrgitmLv == "3" {
					nursing_other_amt, _ = decimal.NewFromFloat(nursing_other_amt).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
				}
			}

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

					material_claa_sunmfee, _ = decimal.NewFromFloat(material_claa_sunmfee).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()

				}
				if item.ChrgitmLv == "2" {
					material_clab_amt, _ = decimal.NewFromFloat(material_clab_amt).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()

				}
				if item.ChrgitmLv == "3" {
					material_other_amt, _ = decimal.NewFromFloat(material_other_amt).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
				}
			}
			if item.MedChrgitmType == "09" { //西药费
				westernMedicineCostTotal, _ = decimal.NewFromFloat(westernMedicineCostTotal).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
				westernMedicineCostSelfTotal, _ = decimal.NewFromFloat(westernMedicineCostSelfTotal).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
				westernMedicineCostPartSelfTotal, _ = decimal.NewFromFloat(westernMedicineCostPartSelfTotal).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()
				westernMedicine_fulamt_ownpay_amt, _ = decimal.NewFromFloat(westernMedicine_fulamt_ownpay_amt).Add(decimal.NewFromFloat(item.FulamtOwnpayAmt)).Float64()
				if item.ChrgitmLv == "1" {
					westernMedicine_claa_sunmfee, _ = decimal.NewFromFloat(westernMedicine_claa_sunmfee).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
				}
				if item.ChrgitmLv == "2" {
					westernMedicine_clab_amt, _ = decimal.NewFromFloat(westernMedicine_clab_amt).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()
				}
				if item.ChrgitmLv == "3" {
					westernMedicine_other_amt, _ = decimal.NewFromFloat(westernMedicine_other_amt).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
				}
			}
			if item.MedChrgitmType == "10" { //中药饮片
				chineseMedicineCostTotal, _ = decimal.NewFromFloat(chineseMedicineCostTotal).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
				chineseMedicineCostSelfTotal, _ = decimal.NewFromFloat(chineseMedicineCostSelfTotal).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
				chineseMedicineCostPartSelfTotal, _ = decimal.NewFromFloat(chineseMedicineCostPartSelfTotal).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()
				chinese_medicine_fulamt_ownpay_amt, _ = decimal.NewFromFloat(chinese_medicine_fulamt_ownpay_amt).Add(decimal.NewFromFloat(item.FulamtOwnpayAmt)).Float64()
				if item.ChrgitmLv == "1" {
					chinese_medicine_claa_sunmfee, _ = decimal.NewFromFloat(chinese_medicine_claa_sunmfee).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
				}
				if item.ChrgitmLv == "2" {
					chinese_medicine_clab_amt, _ = decimal.NewFromFloat(chinese_medicine_clab_amt).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()
				}
				if item.ChrgitmLv == "3" {
					chinese_medicine_other_amt, _ = decimal.NewFromFloat(chinese_medicine_other_amt).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
				}
			}

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

					chineseTraditional_claa_sunmfee, _ = decimal.NewFromFloat(chineseTraditional_claa_sunmfee).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()

				}
				if item.ChrgitmLv == "2" {
					chineseTraditional_clab_amt, _ = decimal.NewFromFloat(chineseTraditional_clab_amt).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()

				}
				if item.ChrgitmLv == "3" {
					chineseTraditional_other_amt, _ = decimal.NewFromFloat(chineseTraditional_other_amt).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
				}
			}

			if item.MedChrgitmType == "12" { //中成费
				commonlyTreatmentCostTotal, _ = decimal.NewFromFloat(commonlyTreatmentCostTotal).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
				commonlyTreatmentCostSelfTotal, _ = decimal.NewFromFloat(commonlyTreatmentCostSelfTotal).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
				commonlyTreatmentCostPartSelfTotal, _ = decimal.NewFromFloat(commonlyTreatmentCostPartSelfTotal).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()
				commonly_treatment_fulamt_ownpay_amt, _ = decimal.NewFromFloat(commonly_treatment_fulamt_ownpay_amt).Add(decimal.NewFromFloat(item.FulamtOwnpayAmt)).Float64()
				if item.ChrgitmLv == "1" {

					commonly_treatment_claa_sunmfee, _ = decimal.NewFromFloat(commonly_treatment_claa_sunmfee).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()

				}
				if item.ChrgitmLv == "2" {
					commonly_treatment_clab_amt, _ = decimal.NewFromFloat(commonly_treatment_clab_amt).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()

				}
				if item.ChrgitmLv == "3" {
					commonly_treatment_other_amt, _ = decimal.NewFromFloat(commonly_treatment_other_amt).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
				}
			}

			if item.MedChrgitmType == "13" { //中成费
				registerCostTotal, _ = decimal.NewFromFloat(registerCostTotal).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
				registerCostSelfTotal, _ = decimal.NewFromFloat(registerCostSelfTotal).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
				registerPartSelfTotal, _ = decimal.NewFromFloat(registerPartSelfTotal).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()
				register_fulamt_ownpay_amt, _ = decimal.NewFromFloat(register_fulamt_ownpay_amt).Add(decimal.NewFromFloat(item.FulamtOwnpayAmt)).Float64()
				if item.ChrgitmLv == "1" {

					register_claa_sunmfee, _ = decimal.NewFromFloat(register_claa_sunmfee).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()

				}
				if item.ChrgitmLv == "2" {
					register_clab_amt, _ = decimal.NewFromFloat(register_clab_amt).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()

				}
				if item.ChrgitmLv == "3" {
					register_other_amt, _ = decimal.NewFromFloat(register_other_amt).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
				}
			}

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

				}
				if item.ChrgitmLv == "2" {
					other_clab_amt, _ = decimal.NewFromFloat(other_clab_amt).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()

				}
				if item.ChrgitmLv == "3" {
					other_other_amt, _ = decimal.NewFromFloat(other_other_amt).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
				}
			}

		}

		var iteminfoStructs []service.IteminfoStruct

		if bedCostTotal != 0 {
			iteminfo.MedChrgitm = "01"
			iteminfo.FulamtOwnpayAmt = bed_fulamt_ownpay_amt
			iteminfo.Amt = bedCostTotal
			iteminfo.ClaaSumfee = bed_claa_sunmfee
			iteminfo.ClabAmt = bed_clab_amt
			iteminfo.OthAmt = bed_other_amt
			iteminfoStructs = append(iteminfoStructs, iteminfo)
		}

		if examineCostTotal != 0 {
			iteminfo.MedChrgitm = "02"
			iteminfo.FulamtOwnpayAmt = examine_fulamt_ownpay_amt
			iteminfo.Amt = examineCostTotal
			iteminfo.ClaaSumfee = examine_claa_sunmfee
			iteminfo.ClabAmt = examine_clab_amt
			iteminfo.OthAmt = examine_other_amt
			//struct4101.IteminfoStruct = append(struct4101.IteminfoStruct, iteminfo)
			iteminfoStructs = append(iteminfoStructs, iteminfo)
		}

		if checkCostTotal != 0 {
			iteminfo.MedChrgitm = "03"
			iteminfo.FulamtOwnpayAmt = check_fulamt_ownpay_amt
			iteminfo.Amt = checkCostTotal
			iteminfo.ClaaSumfee = check_claa_sunmfee
			iteminfo.ClabAmt = check_clab_amt
			iteminfo.OthAmt = check_other_amt
			iteminfoStructs = append(iteminfoStructs, iteminfo)

		}

		if laboratoryCostTotal != 0 {
			iteminfo.MedChrgitm = "04"
			iteminfo.FulamtOwnpayAmt = laboratory_fulamt_ownpay_amt
			iteminfo.Amt = laboratoryCostTotal
			iteminfo.ClaaSumfee = laboratory_claa_sunmfee
			iteminfo.ClabAmt = laboratory_clab_amt
			iteminfo.OthAmt = laboratory_other_amt
			iteminfoStructs = append(iteminfoStructs, iteminfo)

			//struct4101.IteminfoStruct = append(struct4101.IteminfoStruct, iteminfo)

		}

		if treatCostTotal != 0 {
			iteminfo.MedChrgitm = "05"
			iteminfo.FulamtOwnpayAmt = treat_fulamt_ownpay_amt
			iteminfo.Amt = treatCostTotal
			iteminfo.ClaaSumfee = treat_claa_sunmfee
			iteminfo.ClabAmt = treat_clab_amt
			iteminfo.OthAmt = treat_other_amt
			iteminfoStructs = append(iteminfoStructs, iteminfo)
			//(struct4101.IteminfoStruct, iteminfo)
			//struct4101.IteminfoStruct = append(struct4101.IteminfoStruct, iteminfo)
		}

		if operationCostTotal != 0 {
			iteminfo.MedChrgitm = "06"
			iteminfo.FulamtOwnpayAmt = bed_fulamt_ownpay_amt
			iteminfo.Amt = operationCostTotal
			iteminfo.ClaaSumfee = operation_claa_sunmfee
			iteminfo.ClabAmt = operation_clab_amt
			iteminfo.OthAmt = operation_other_amt
			//struct4101.IteminfoStruct = append(struct4101.IteminfoStruct, iteminfo)
			iteminfoStructs = append(iteminfoStructs, iteminfo)
		}

		if nursingCostTotal != 0 {
			iteminfo.MedChrgitm = "07"
			iteminfo.FulamtOwnpayAmt = nursing_fulamt_ownpay_amt
			iteminfo.Amt = nursingCostTotal
			iteminfo.ClaaSumfee = nursing_claa_sunmfee
			iteminfo.ClabAmt = nursing_clab_amt
			iteminfo.OthAmt = nursing_other_amt
			iteminfoStructs = append(iteminfoStructs, iteminfo)
		}

		if materialCostTotal != 0 {
			iteminfo.MedChrgitm = "08"
			iteminfo.FulamtOwnpayAmt = material_fulamt_ownpay_amt
			iteminfo.Amt = materialCostTotal
			iteminfo.ClaaSumfee = material_claa_sunmfee
			iteminfo.ClabAmt = material_clab_amt
			iteminfo.OthAmt = material_other_amt
			//struct4101.IteminfoStruct = append(struct4101.IteminfoStruct, iteminfo)
			iteminfoStructs = append(iteminfoStructs, iteminfo)
		}

		if westernMedicineCostTotal != 0 {
			iteminfo.MedChrgitm = "09"
			iteminfo.FulamtOwnpayAmt = westernMedicine_fulamt_ownpay_amt
			iteminfo.Amt = westernMedicineCostTotal
			iteminfo.ClaaSumfee = westernMedicine_claa_sunmfee
			iteminfo.ClabAmt = westernMedicine_clab_amt
			iteminfo.OthAmt = westernMedicine_other_amt
			//struct4101.IteminfoStruct = append(struct4101.IteminfoStruct, iteminfo)
			iteminfoStructs = append(iteminfoStructs, iteminfo)

		}

		if chineseMedicineCostTotal != 0 {
			iteminfo.MedChrgitm = "10"
			iteminfo.FulamtOwnpayAmt = chinese_medicine_fulamt_ownpay_amt
			iteminfo.Amt = chineseMedicineCostTotal
			iteminfo.ClaaSumfee = chinese_medicine_claa_sunmfee
			iteminfo.ClabAmt = chinese_medicine_clab_amt
			iteminfo.OthAmt = chinese_medicine_other_amt
			//struct4101.IteminfoStruct = append(struct4101.IteminfoStruct, iteminfo)
			iteminfoStructs = append(iteminfoStructs, iteminfo)

		}

		if chineseTraditionalMedicineCostTotal != 0 {
			iteminfo.MedChrgitm = "11"
			iteminfo.FulamtOwnpayAmt = westernMedicine_fulamt_ownpay_amt
			iteminfo.Amt = westernMedicineCostTotal
			iteminfo.ClaaSumfee = westernMedicine_claa_sunmfee
			iteminfo.ClabAmt = westernMedicine_clab_amt
			iteminfo.OthAmt = westernMedicine_other_amt
			//struct4101.IteminfoStruct = append(struct4101.IteminfoStruct, iteminfo)
			iteminfoStructs = append(iteminfoStructs, iteminfo)

		}

		if commonlyTreatmentCostTotal != 0 {
			iteminfo.MedChrgitm = "12"
			iteminfo.FulamtOwnpayAmt = commonly_treatment_fulamt_ownpay_amt
			iteminfo.Amt = commonlyTreatmentCostTotal
			iteminfo.ClaaSumfee = commonly_treatment_claa_sunmfee
			iteminfo.ClabAmt = commonly_treatment_clab_amt
			iteminfo.OthAmt = commonly_treatment_other_amt
			//struct4101.IteminfoStruct = append(struct4101.IteminfoStruct, iteminfo)
			iteminfoStructs = append(iteminfoStructs, iteminfo)

		}

		if registerCostTotal != 0 {
			iteminfo.MedChrgitm = "13"
			iteminfo.FulamtOwnpayAmt = register_fulamt_ownpay_amt
			iteminfo.Amt = registerCostTotal
			iteminfo.ClaaSumfee = register_claa_sunmfee
			iteminfo.ClabAmt = register_clab_amt
			iteminfo.OthAmt = register_other_amt
			//struct4101.IteminfoStruct = append(struct4101.IteminfoStruct, iteminfo)
			iteminfoStructs = append(iteminfoStructs, iteminfo)

		}

		if otherCostTotal != 0 {
			iteminfo.MedChrgitm = "14"
			iteminfo.FulamtOwnpayAmt = other_fulamt_ownpay_amt
			iteminfo.Amt = otherCostTotal
			iteminfo.ClaaSumfee = other_claa_sunmfee
			iteminfo.ClabAmt = other_clab_amt
			iteminfo.OthAmt = other_other_amt
			//struct4101.IteminfoStruct = append(struct4101.IteminfoStruct, iteminfo)
			iteminfoStructs = append(iteminfoStructs, iteminfo)

		}
		struct4101.IteminfoStruct = iteminfoStructs

		struct4101.Ntly = "中国"
		struct4101.AdmCaty = "A03.06"
		var res ResultSeventeen
		if miConfig.MdtrtareaAdmvs == "421300" {
			data := make(map[string]interface{})
			data["struct4101"] = struct4101
			data["secret_key"] = miConfig.SecretKey
			data["org_name"] = miConfig.OrgName
			data["opera"] = curRoles.UserName
			data["code"] = miConfig.Code
			data["insuplc_admdvs"] = miConfig.InsuplcAdmdvs
			data["mdtrtarea_admvs"] = miConfig.MdtrtareaAdmvs

			client := &http.Client{}
			bytesData, _ := json.Marshal(data)
			req, _ := http.NewRequest("POST", "http://192.168.124.4:9532/"+"hbyb/4101", bytes.NewReader(bytesData))
			resp, _ := client.Do(req)
			defer resp.Body.Close()
			body, ioErr := ioutil.ReadAll(resp.Body)
			if ioErr != nil {
				utils.ErrorLog("接口返回数据读取失败: %v", ioErr)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}
			var respJSON map[string]interface{}
			if err := json.Unmarshal([]byte(body), &respJSON); err != nil {
				utils.ErrorLog("接口返回数据解析JSON失败: %v", err)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}

			respJSON = respJSON["data"].(map[string]interface{})["pre"].(map[string]interface{})
			userJSONBytes, _ := json.Marshal(respJSON)
			if err := json.Unmarshal(userJSONBytes, &res); err != nil {
				utils.ErrorLog("解析失败:%v", err)
				//c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				adminUser := c.GetAdminUserInfo()
				errlog := &models.HisOrderError{
					UserOrgId: adminUser.CurrentOrgId,
					Ctime:     time.Now().Unix(),
					Mtime:     time.Now().Unix(),
					ErrMsg:    res.ErrMsg + "解析失败",
					Status:    1,
					PatientId: order_id,
					Stage:     10088,
				}
				service.CreateErrMsgLog(errlog)
				continue
			}

		} else {
			result := service.Gdyb4101(struct4101, miConfig.SecretKey, miConfig.OrgName, curRoles.UserName, miConfig.Code, miConfig.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, c.GetAdminUserInfo().CurrentOrgId)
			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)
			if err := json.Unmarshal(userJSONBytes, &res); err != nil {
				utils.ErrorLog("解析失败:%v", err)
				//c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				adminUser := c.GetAdminUserInfo()
				errlog := &models.HisOrderError{
					UserOrgId: adminUser.CurrentOrgId,
					Ctime:     time.Now().Unix(),
					Mtime:     time.Now().Unix(),
					ErrMsg:    res.ErrMsg + "解析失败",
					Status:    1,
					PatientId: order_id,
					Stage:     10088,
				}
				service.CreateErrMsgLog(errlog)
				continue
			}
		}

		if res.Infcode != 0 {
			adminUser := c.GetAdminUserInfo()
			errlog := &models.HisOrderError{
				UserOrgId: adminUser.CurrentOrgId,
				Ctime:     time.Now().Unix(),
				Mtime:     time.Now().Unix(),
				ErrMsg:    res.ErrMsg,
				Status:    1,
				PatientId: order_id,
				Stage:     10088,
			}
			service.CreateErrMsgLog(errlog)
			continue
		} else {
			hisFundSettleListResult := &models.HisFundSettleListResult{
				Number:    res.Output.SetlListId,
				Status:    1,
				Ctime:     time.Now().Unix(),
				Mtime:     time.Now().Unix(),
				UserOrgId: c.GetAdminUserInfo().CurrentOrgId,
				IsUpload:  1,
				OrderId:   order_id,
			}
			service.CreateUploadRecord(hisFundSettleListResult)
			continue
		}
	}
}

func (c *HisApiController) GetOrgInfo() {
	miConfig, _ := service.FindMedicalInsuranceInfo(4)
	service.Gdyb1201("", miConfig.OrgName, "1122", miConfig.Code, miConfig.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey, 1, "")

}

func (c *HisApiController) GetHisPatientInfo() {

	medical_insurance_card := c.GetString("medical_insurance_card")
	id_card_type, _ := c.GetInt64("id_card_type")
	id_card := c.GetString("id_card")

	adminInfo := c.GetAdminUserInfo()
	config, _ := service.GetMedicalInsuranceConfig(adminInfo.CurrentOrgId)
	miConfig, _ := service.FindMedicalInsuranceInfo(adminInfo.CurrentOrgId)

	appRole, _ := service.GetAppRole(adminInfo.CurrentOrgId)

	IdCardNo := ""

	if id_card_type == 1 {
		IdCardNo = medical_insurance_card
	} else if id_card_type == 2 {
		IdCardNo = id_card
	}

	if config.IsOpen == 1 {
		api := "http://127.0.0.1:9532/" + "gdyb/one?cert_no=" + IdCardNo + "&org_name=" + miConfig.OrgName + "&doctor=" + appRole.UserName + "&fixmedins_code=" + miConfig.Code + "&insuplc_admdvs=" + miConfig.InsuplcAdmdvs + "&mdtrtarea_admvs=" + miConfig.MdtrtareaAdmvs + "&secret_key=" + miConfig.SecretKey
		resp, requestErr := http.Get(api)
		if requestErr != nil {
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
			return
		}

		defer resp.Body.Close()
		body, ioErr := ioutil.ReadAll(resp.Body)
		if ioErr != nil {
			utils.ErrorLog("接口返回数据读取失败: %v", ioErr)
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
			return
		}
		var respJSON map[string]interface{}

		if err := json.Unmarshal([]byte(string(body)), &respJSON); err != nil {
			utils.ErrorLog("接口返回数据解析JSON失败: %v", err)
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
			return
		}

		userJSON := respJSON["data"].(map[string]interface{})["pre"].(map[string]interface{})
		userJSONBytes, _ := json.Marshal(userJSON)
		var res ResultTwo
		if err := json.Unmarshal(userJSONBytes, &res); err != nil {
			utils.ErrorLog("解析失败:%v", err)
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
			return
		}
		Iinfos, _ := json.Marshal(res.Output.Iinfo)
		Idetinfos, _ := json.Marshal(res.Output.Idetinfo)
		infoStr := string(Iinfos)
		idetinfoStr := string(Idetinfos)
		if res.Infcode == 0 {
			his := models.VMHisPatient{
				Status:      1,
				Ctime:       time.Now().Unix(),
				Mtime:       time.Now().Unix(),
				PsnNo:       res.Output.Baseinfo.PsnNo,
				PsnCertType: res.Output.Baseinfo.PsnCertType,
				Certno:      res.Output.Baseinfo.Certno,
				PsnName:     res.Output.Baseinfo.PsnName,
				Gend:        res.Output.Baseinfo.Gend,
				Naty:        res.Output.Baseinfo.Naty,
				Brdy:        res.Output.Baseinfo.Brdy,
				Age:         res.Output.Baseinfo.Age,
				Iinfo:       infoStr,
				Idetinfo:    idetinfoStr,
				UserOrgId:   adminInfo.CurrentOrgId,
				IsReturn:    1,
				IdCardType:  id_card_type,
			}
			c.ServeSuccessJSON(map[string]interface{}{
				"info": his,
			})
		} else {
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeHisFailedException)
			return
		}
	}
}

//func GetBasBaseInfo() (jsonStr string, err error) {
//
//	handle := syscall.NewLazyDLL("SSCard.dll")
//	add := handle.NewProc("ReadCardBas")
//	str := make([]byte, 1024)
//	str1 := make([]byte, 1024)
//	ret, _, _ := add.Call((uintptr)(unsafe.Pointer(&str[0])), IntPtr(1024), (uintptr)(unsafe.Pointer(&str1[0])), IntPtr(1024))
//	fmt.Println(ConvertToString(string(str), "gbk", "utf-8"))
//
//	fmt.Println(ConvertToString(string(str1), "gbk", "utf-8"))
//
//	fmt.Println("> Add(4,5)的结果为:", ret)
//	handle.Release()
//
//	return "", nil
//
//}

//func GetQRBaseInfo() (jsonStr string, err error) {
//	handle := syscall.LoadDLL("SSCard.dll")
//	ReadCardBas := handle.FindProc("GetQRBase")
//
//	str := make([]byte, 256)
//	str1 := make([]byte, 256)
//	r, _, _ := ReadCardBas.Call((uintptr)(unsafe.Pointer(&str[0])), IntPtr(1024), (uintptr)(unsafe.Pointer(&str1[0])), IntPtr(1024))
//
//	fmt.Println(string(str))
//	fmt.Println(r)
//	return string(str), nil
//}

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

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

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

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

type Result2001 struct {
	Cainfo      interface{} `json:"cainfo"`
	ErrMsg      string      `json:"err_msg"`
	InfRefmsgid string      `json:"inf_refmsgid"`
	Infcode     int64       `json:"infcode"`
	Output      struct {
		Trtinfo struct {
			PsnNo          string `json:"psn_no"`
			TrtChkType     string `json:"trt_chk_type"`
			FundPayType    string `json:"fund_pay_type"`
			TrtEnjymntFlag string `json:"trt_enjymnt_flag"`
			Begndate       string `json:"begndate"`
			Enddate        string `json:"enddate"`
			TrtChkRslt     string `json:"trt_chk_rslt"`
		} `json:"trtinfo"`
	} `json:"output"`
	RefmsgTime  string      `json:"refmsg_time"`
	RespondTime string      `json:"respond_time"`
	Signtype    interface{} `json:"signtype"`
	WarnMsg     interface{} `json:"warn_msg"`
}
type Result2001Org10265 struct {
	Cainfo      interface{} `json:"cainfo"`
	ErrMsg      string      `json:"err_msg"`
	InfRefmsgid string      `json:"inf_refmsgid"`
	Infcode     string      `json:"infcode"`
	Output      struct {
		Trtinfo struct {
			PsnNo          string `json:"psn_no"`
			TrtChkType     string `json:"trt_chk_type"`
			FundPayType    string `json:"fund_pay_type"`
			TrtEnjymntFlag string `json:"trt_enjymnt_flag"`
			Begndate       string `json:"begndate"`
			Enddate        string `json:"enddate"`
			TrtChkRslt     string `json:"trt_chk_rslt"`
		} `json:"trtinfo"`
	} `json:"output"`
	RefmsgTime  string      `json:"refmsg_time"`
	RespondTime string      `json:"respond_time"`
	Signtype    interface{} `json:"signtype"`
	WarnMsg     interface{} `json:"warn_msg"`
}

type ResultTwo struct {
	ErrMsg      string `json:"err_msg"`
	InfRefmsgid string `json:"inf_refmsgid"`
	Infcode     int64  `json:"infcode"`
	Output      struct {
		Baseinfo struct {
			Age         float64 `json:"age"`
			Brdy        string  `json:"brdy"`
			Certno      string  `json:"certno"`
			Gend        string  `json:"gend"`
			Naty        string  `json:"naty"`
			PsnCertType string  `json:"psn_cert_type"`
			PsnName     string  `json:"psn_name"`
			PsnNo       string  `json:"psn_no"`
		} `json:"baseinfo"`
		Idetinfo []interface{} `json:"idetinfo"`
		Iinfo    []struct {
			Balc                   float64 `json:"balc"`
			CvlservFlag            string  `json:"cvlserv_flag"`
			EmpName                string  `json:"emp_name"`
			InsuplcAdmdvs          string  `json:"insuplc_admdvs"`
			Insutype               string  `json:"insutype"`
			PausInsuDansuplcAdmdvs string  `json:"paus_insu_dansuplc_admdvs"`
			PausInsuDate           string  `json:"paus_insu_date"`
			PsnInsuDate            string  `json:"psn_insu_date"`
			PsnInsuStas            string  `json:"psn_insu_stas"`
			PsnType                string  `json:"psn_type"`
		} `json:"insuinfo"`
	} `json:"output"`
	RefmsgTime  string      `json:"refmsg_time"`
	RespondTime string      `json:"respond_time"`
	Signtype    interface{} `json:"signtype"`
	WarnInfo    interface{} `json:"warn_info"`
}

type ResultTwo10265 struct {
	ErrMsg      string `json:"err_msg"`
	InfRefmsgid string `json:"inf_refmsgid"`
	Infcode     string `json:"infcode"`
	Output      struct {
		Baseinfo struct {
			Age         float64 `json:"age"`
			Brdy        string  `json:"brdy"`
			Certno      string  `json:"certno"`
			Gend        string  `json:"gend"`
			Naty        string  `json:"naty"`
			PsnCertType string  `json:"psn_cert_type"`
			PsnName     string  `json:"psn_name"`
			PsnNo       string  `json:"psn_no"`
		} `json:"baseinfo"`
		Idetinfo []interface{} `json:"idetinfo"`
		Iinfo    []struct {
			Balc                   float64 `json:"balc"`
			CvlservFlag            string  `json:"cvlserv_flag"`
			EmpName                string  `json:"emp_name"`
			InsuplcAdmdvs          string  `json:"insuplc_admdvs"`
			Insutype               string  `json:"insutype"`
			PausInsuDansuplcAdmdvs string  `json:"paus_insu_dansuplc_admdvs"`
			PausInsuDate           string  `json:"paus_insu_date"`
			PsnInsuDate            string  `json:"psn_insu_date"`
			PsnInsuStas            string  `json:"psn_insu_stas"`
			PsnType                string  `json:"psn_type"`
		} `json:"insuinfo"`
	} `json:"output"`
	RefmsgTime  string      `json:"refmsg_time"`
	RespondTime string      `json:"respond_time"`
	Signtype    interface{} `json:"signtype"`
	WarnInfo    interface{} `json:"warn_info"`
}

type ResultThree struct {
	Cainfo      interface{} `json:"cainfo"`
	ErrMsg      string      `json:"err_msg"`
	InfRefmsgid string      `json:"inf_refmsgid"`
	Infcode     int64       `json:"infcode"`
	Output      struct {
		Data struct {
			IptOtpNo string `json:"ipt_otp_no"`
			MdtrtID  string `json:"mdtrt_id"`
			PsnNo    string `json:"psn_no"`
		} `json:"data"`
	} `json:"output"`
	RefmsgTime  string      `json:"refmsg_time"`
	RespondTime string      `json:"respond_time"`
	Signtype    interface{} `json:"signtype"`
	WarnMsg     interface{} `json:"warn_msg"`
}

type ResultThree10265 struct {
	Cainfo      interface{} `json:"cainfo"`
	ErrMsg      string      `json:"err_msg"`
	InfRefmsgid string      `json:"inf_refmsgid"`
	Infcode     string      `json:"infcode"`
	Output      struct {
		Data struct {
			IptOtpNo string `json:"ipt_otp_no"`
			MdtrtID  string `json:"mdtrt_id"`
			PsnNo    string `json:"psn_no"`
		} `json:"data"`
	} `json:"output"`
	RefmsgTime  string      `json:"refmsg_time"`
	RespondTime string      `json:"respond_time"`
	Signtype    interface{} `json:"signtype"`
	WarnMsg     interface{} `json:"warn_msg"`
}

type ResultFour struct {
	Cainfo      string `json:"cainfo"`
	ErrMsg      string `json:"err_msg"`
	InfRefmsgid string `json:"inf_refmsgid"`
	Infcode     int64  `json:"infcode"`
	Output      struct {
		Result []struct {
			BasMednFlag      string  `json:"bas_medn_flag"`
			ChldMedcFlag     string  `json:"chld_medc_flag"`
			ChrgitmLv        string  `json:"chrgitm_lv"`
			Cnt              float64 `json:"cnt"`
			DetItemFeeSumamt float64 `json:"det_item_fee_sumamt"`
			DrtReimFlag      string  `json:"drt_reim_flag"`
			FeedetlSn        string  `json:"feedetl_sn"`
			FulamtOwnpayAmt  float64 `json:"fulamt_ownpay_amt"`
			HiNegoDrugFlag   string  `json:"hi_nego_drug_flag"`
			InscpScpAmt      float64 `json:"inscp_scp_amt"`
			ListSpItemFlag   string  `json:"list_sp_item_flag"`
			LmtUsedFlag      string  `json:"lmt_used_flag"`
			MedChrgitmType   string  `json:"med_chrgitm_type"`
			Memo             string  `json:"memo"`
			OverlmtAmt       float64 `json:"overlmt_amt"`
			PreselfpayAmt    float64 `json:"preselfpay_amt"`
			Pric             float64 `json:"pric"`
			PricUplmtAmt     float64 `json:"pric_uplmt_amt"`
			SelfpayProp      float64 `json:"selfpay_prop"`
		} `json:"result"`
	} `json:"output"`
	RefmsgTime  string `json:"refmsg_time"`
	RespondTime string `json:"respond_time"`
	Signtype    string `json:"signtype"`
	WarnMsg     string `json:"warn_msg"`
}
type ResultFour10265 struct {
	Cainfo      string `json:"cainfo"`
	ErrMsg      string `json:"err_msg"`
	InfRefmsgid string `json:"inf_refmsgid"`
	Infcode     string `json:"infcode"`
	Output      struct {
		Result []struct {
			BasMednFlag      string  `json:"bas_medn_flag"`
			ChldMedcFlag     string  `json:"chld_medc_flag"`
			ChrgitmLv        string  `json:"chrgitm_lv"`
			Cnt              float64 `json:"cnt"`
			DetItemFeeSumamt float64 `json:"det_item_fee_sumamt"`
			DrtReimFlag      string  `json:"drt_reim_flag"`
			FeedetlSn        string  `json:"feedetl_sn"`
			FulamtOwnpayAmt  float64 `json:"fulamt_ownpay_amt"`
			HiNegoDrugFlag   string  `json:"hi_nego_drug_flag"`
			InscpScpAmt      float64 `json:"inscp_scp_amt"`
			ListSpItemFlag   string  `json:"list_sp_item_flag"`
			LmtUsedFlag      string  `json:"lmt_used_flag"`
			MedChrgitmType   string  `json:"med_chrgitm_type"`
			Memo             string  `json:"memo"`
			OverlmtAmt       float64 `json:"overlmt_amt"`
			PreselfpayAmt    float64 `json:"preselfpay_amt"`
			Pric             float64 `json:"pric"`
			PricUplmtAmt     float64 `json:"pric_uplmt_amt"`
			SelfpayProp      float64 `json:"selfpay_prop"`
		} `json:"result"`
	} `json:"output"`
	RefmsgTime  string `json:"refmsg_time"`
	RespondTime string `json:"respond_time"`
	Signtype    string `json:"signtype"`
	WarnMsg     string `json:"warn_msg"`
}

type ResultFive struct {
	Balc                   float64 `json:"balc"`
	CvlservFlag            string  `json:"cvlserv_flag"`
	EmpName                string  `json:"emp_name"`
	InsuplcAdmdvs          string  `json:"insuplc_admdvs"`
	Insutype               string  `json:"insutype"`
	PausInsuDansuplcAdmdvs string  `json:"paus_insu_dansuplc_admdvs"`
	PausInsuDate           string  `json:"paus_insu_date"`
	PsnInsuDate            string  `json:"psn_insu_date"`
	PsnInsuStas            string  `json:"psn_insu_stas"`
	PsnType                string  `json:"psn_type"`
}
type ResultSix struct {
	Cainfo      interface{} `json:"cainfo"`
	ErrMsg      string      `json:"err_msg"`
	InfRefmsgid string      `json:"inf_refmsgid"`
	Infcode     int64       `json:"infcode"`
	Output      struct {
	} `json:"output"`
	RefmsgTime  string      `json:"refmsg_time"`
	RespondTime string      `json:"respond_time"`
	Signtype    interface{} `json:"signtype"`
	WarnMsg     interface{} `json:"warn_msg"`
}

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

type ResultSeven struct {
	Cainfo      string `json:"cainfo"`
	ErrMsg      string `json:"err_msg"`
	InfRefmsgid string `json:"inf_refmsgid"`
	Infcode     int64  `json:"infcode"`
	Output      struct {
		Setldetail []interface{} `json:"setldetail"`
		Setlinfo   struct {
			AcctMulaidPay   float64 `json:"acct_mulaid_pay"`
			AcctPay         float64 `json:"acct_pay"`
			ActPayDedc      float64 `json:"act_pay_dedc"`
			Age             float64 `json:"age"`
			Balc            float64 `json:"balc"`
			Brdy            string  `json:"brdy"`
			Certno          string  `json:"certno"`
			ClrOptins       string  `json:"clr_optins"`
			ClrType         string  `json:"clr_type"`
			ClrWay          string  `json:"clr_way"`
			CvlservFlag     string  `json:"cvlserv_flag"`
			CvlservPay      float64 `json:"cvlserv_pay"`
			FulamtOwnpayAmt float64 `json:"fulamt_ownpay_amt"`
			FundPaySumamt   float64 `json:"fund_pay_sumamt"`
			Gend            string  `json:"gend"`
			HifesPay        float64 `json:"hifes_pay"`
			HifmiPay        float64 `json:"hifmi_pay"`
			HifpPay         float64 `json:"hifp_pay"`
			HospPartAmt     float64 `json:"hosp_part_amt"`
			InscpScpAmt     float64 `json:"inscp_scp_amt"`
			Insutype        string  `json:"insutype"`
			MafPay          float64 `json:"maf_pay"`
			MdtrtCertType   string  `json:"mdtrt_cert_type"`
			HifobPay        float64 `json:"hifob_pay"`

			MdtrtID         string  `json:"mdtrt_id"`
			MedType         string  `json:"med_type"`
			MedfeeSumamt    float64 `json:"medfee_sumamt"`
			MedinsSetlID    string  `json:"medins_setl_id"`
			Naty            string  `json:"naty"`
			OthPay          float64 `json:"oth_pay"`
			OverlmtSelfpay  float64 `json:"overlmt_selfpay"`
			PoolPropSelfpay float64 `json:"pool_prop_selfpay"`
			PreselfpayAmt   float64 `json:"preselfpay_amt"`
			PsnCashPay      float64 `json:"psn_cash_pay"`
			PsnCertType     string  `json:"psn_cert_type"`
			PsnName         string  `json:"psn_name"`
			PsnNo           string  `json:"psn_no"`
			PsnPartAmt      float64 `json:"psn_part_amt"`
			PsnType         string  `json:"psn_type"`
			SetlID          string  `json:"setl_id"`
			SetlTime        string  `json:"setl_time"`
		} `json:"setlinfo"`
	} `json:"output"`
	RefmsgTime  string      `json:"refmsg_time"`
	RespondTime string      `json:"respond_time"`
	Signtype    interface{} `json:"signtype"`
	WarnMsg     interface{} `json:"warn_msg"`
}
type ResultSeven10265 struct {
	Cainfo      string `json:"cainfo"`
	ErrMsg      string `json:"err_msg"`
	InfRefmsgid string `json:"inf_refmsgid"`
	Infcode     string `json:"infcode"`
	Output      struct {
		Setldetail []interface{} `json:"setldetail"`
		Setlinfo   struct {
			AcctMulaidPay   float64 `json:"acct_mulaid_pay"`
			AcctPay         float64 `json:"acct_pay"`
			ActPayDedc      float64 `json:"act_pay_dedc"`
			Age             float64 `json:"age"`
			Balc            float64 `json:"balc"`
			Brdy            string  `json:"brdy"`
			Certno          string  `json:"certno"`
			ClrOptins       string  `json:"clr_optins"`
			ClrType         string  `json:"clr_type"`
			ClrWay          string  `json:"clr_way"`
			CvlservFlag     string  `json:"cvlserv_flag"`
			CvlservPay      float64 `json:"cvlserv_pay"`
			FulamtOwnpayAmt float64 `json:"fulamt_ownpay_amt"`
			FundPaySumamt   float64 `json:"fund_pay_sumamt"`
			Gend            string  `json:"gend"`
			HifesPay        float64 `json:"hifes_pay"`
			HifmiPay        float64 `json:"hifmi_pay"`
			HifpPay         float64 `json:"hifp_pay"`
			HospPartAmt     float64 `json:"hosp_part_amt"`
			InscpScpAmt     float64 `json:"inscp_scp_amt"`
			Insutype        string  `json:"insutype"`
			MafPay          float64 `json:"maf_pay"`
			MdtrtCertType   string  `json:"mdtrt_cert_type"`
			HifobPay        float64 `json:"hifob_pay"`

			MdtrtID         string  `json:"mdtrt_id"`
			MedType         string  `json:"med_type"`
			MedfeeSumamt    float64 `json:"medfee_sumamt"`
			MedinsSetlID    string  `json:"medins_setl_id"`
			Naty            string  `json:"naty"`
			OthPay          float64 `json:"oth_pay"`
			OverlmtSelfpay  float64 `json:"overlmt_selfpay"`
			PoolPropSelfpay float64 `json:"pool_prop_selfpay"`
			PreselfpayAmt   float64 `json:"preselfpay_amt"`
			PsnCashPay      float64 `json:"psn_cash_pay"`
			PsnCertType     string  `json:"psn_cert_type"`
			PsnName         string  `json:"psn_name"`
			PsnNo           string  `json:"psn_no"`
			PsnPartAmt      float64 `json:"psn_part_amt"`
			PsnType         string  `json:"psn_type"`
			SetlID          string  `json:"setl_id"`
			SetlTime        string  `json:"setl_time"`
		} `json:"setlinfo"`
	} `json:"output"`
	RefmsgTime  string      `json:"refmsg_time"`
	RespondTime string      `json:"respond_time"`
	Signtype    interface{} `json:"signtype"`
	WarnMsg     interface{} `json:"warn_msg"`
}

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

type ResultEightFor10188 struct {
	Cainfo      string `json:"cainfo"`
	ErrMsg      string `json:"err_msg"`
	InfRefmsgid string `json:"inf_refmsgid"`
	Infcode     string `json:"infcode"`
	Output      struct {
		Stmtinfo struct {
			SetlOptins   string `json:"setl_optins"`
			StmtRslt     string `json:"stmt_rslt"`
			StmtRsltDscr string `json:"stmt_rslt_dscr"`
		} `json:"stmtinfo"`
	} `json:"output"`
	RefmsgTime  string      `json:"refmsg_time"`
	RespondTime string      `json:"respond_time"`
	Signtype    interface{} `json:"signtype"`
	WarnMsg     interface{} `json:"warn_msg"`
}
type ResultNine struct {
	Cainfo      string `json:"cainfo"`
	ErrMsg      string `json:"err_msg"`
	InfRefmsgid string `json:"inf_refmsgid"`
	Infcode     int64  `json:"infcode"`
	Output      struct {
		FileQuryNo string `json:"file_qury_no"`
	} `json:"output"`
	RefmsgTime  string      `json:"refmsg_time"`
	RespondTime string      `json:"respond_time"`
	Signtype    interface{} `json:"signtype"`
	WarnMsg     interface{} `json:"warn_msg"`
}
type ResultTen struct {
	Cainfo      string `json:"cainfo"`
	ErrMsg      string `json:"err_msg"`
	InfRefmsgid string `json:"inf_refmsgid"`
	Infcode     int64  `json:"infcode"`
	Output      struct {
		DldEndtime string `json:"dld_endtime"`
		FileQuryNo string `json:"file_qury_no"`
		Filename   string `json:"filename"`
	} `json:"output"`
	RefmsgTime  string      `json:"refmsg_time"`
	RespondTime string      `json:"respond_time"`
	Signtype    interface{} `json:"signtype"`
	WarnMsg     interface{} `json:"warn_msg"`
}

//type Autogenerated struct {
//	Output struct {
//		Setlinfo struct {
//			SetlTime          string      `json:"setl_time"`
//			CvlservPay        float64     `json:"cvlserv_pay"`
//			Year              string      `json:"year"`
//			MedType           string      `json:"med_type"`
//			PsnPay            float64     `json:"psn_pay"`
//			OpterID           string      `json:"opter_id"`
//			Begndate          string      `json:"begndate"`
//			FlxempeFlag       string      `json:"flxempe_flag"`
//			HifmiPay          float64     `json:"hifmi_pay"`
//			PsnNo             string      `json:"psn_no"`
//			ActPayDedc        float64     `json:"act_pay_dedc"`
//			MedinsSetlID      interface{} `json:"medins_setl_id"`
//			AcctMulaidPay     interface{} `json:"acct_mulaid_pay"`
//			ClrWay            string      `json:"clr_way"`
//			OthPay            float64     `json:"oth_pay"`
//			Gend              string      `json:"gend"`
//			MdtrtID           string      `json:"mdtrt_id"`
//			AcctPay           float64     `json:"acct_pay"`
//			InscpScpAmt       float64     `json:"inscp_scp_amt"`
//			Insutype          string      `json:"insutype"`
//			Invono            interface{} `json:"invono"`
//			Enddate           string      `json:"enddate"`
//			CashPayamt        float64     `json:"cash_payamt"`
//			PsnType           string      `json:"psn_type"`
//			FixmedinsName     string      `json:"fixmedins_name"`
//			HifpPay           float64     `json:"hifp_pay"`
//			NewFlag           interface{} `json:"new_flag"`
//			OverlmtSelfpay    float64     `json:"overlmt_selfpay"`
//			PreselfpayAmt     float64     `json:"preselfpay_amt"`
//			PayLoc            string      `json:"pay_loc"`
//			ClrType           string      `json:"clr_type"`
//			RefdSetlFlag      string      `json:"refd_setl_flag"`
//			CvlservFlag       string      `json:"cvlserv_flag"`
//			EmpName           string      `json:"emp_name"`
//			Brdy              string      `json:"brdy"`
//			Naty              string      `json:"naty"`
//			Certno            string      `json:"certno"`
//			DiseCode          string      `json:"dise_code"`
//			FixmedinsCode     string      `json:"fixmedins_code"`
//			DedcHospLv        string      `json:"dedc_hosp_lv"`
//			OpterName         string      `json:"opter_name"`
//			Balc              float64     `json:"balc"`
//			FixmedinsPoolarea string      `json:"fixmedins_poolarea"`
//			PsnCertType       string      `json:"psn_cert_type"`
//			HifobPay          float64     `json:"hifob_pay"`
//			MedfeeSumamt      float64     `json:"medfee_sumamt"`
//			HifesPay          float64     `json:"hifes_pay"`
//			FundPaySumamt     float64     `json:"fund_pay_sumamt"`
//			OptTime           string      `json:"opt_time"`
//			FulamtOwnpayAmt   float64     `json:"fulamt_ownpay_amt"`
//			SetlID            string      `json:"setl_id"`
//			MafPay            float64     `json:"maf_pay"`
//			PsnName           string      `json:"psn_name"`
//			InsuOptins        interface{} `json:"insu_optins"`
//			PrefFundPay       interface{} `json:"pref_fund_pay"`
//			ClrOptins         string      `json:"clr_optins"`
//			PoolPropSelfpay   float64     `json:"pool_prop_selfpay"`
//			DiseName          string      `json:"dise_name"`
//			LmtpricHospLv     string      `json:"lmtpric_hosp_lv"`
//			Age               float64     `json:"age"`
//			DtrtCertType      string      `json:"dtrt_cert_type"`
//			HospLv            string      `json:"hosp_lv"`
//		} `json:"setlinfo"`
//		Setldetail []struct {
//			FundPayType     string      `json:"fund_pay_type"`
//			FundPayamt      float64     `json:"fund_payamt"`
//			SetlProcInfo    interface{} `json:"setl_proc_info"`
//			CrtPaybLmtAmt   interface{} `json:"crt_payb_lmt_amt"`
//			InscpScpAmt     interface{} `json:"inscp_scp_amt"`
//			FundPayTypeName interface{} `json:"fund_pay_type_name"`
//			PrefFundPay     interface{} `json:"pref_fund_pay"`
//		} `json:"setldetail"`
//	} `json:"output"`
//	Infcode     int         `json:"infcode"`
//	WarnMsg     interface{} `json:"warn_msg"`
//	Cainfo      interface{} `json:"cainfo"`
//	ErrMsg      interface{} `json:"err_msg"`
//	RefmsgTime  string      `json:"refmsg_time"`
//	Signtype    interface{} `json:"signtype"`
//	RespondTime string      `json:"respond_time"`
//	InfRefmsgid string      `json:"inf_refmsgid"`
//}

type ResultEleven struct {
	Cainfo      string `json:"cainfo"`
	ErrMsg      string `json:"err_msg"`
	InfRefmsgid string `json:"inf_refmsgid"`
	Infcode     int64  `json:"infcode"`
	Output      struct {
		Setlinfo struct {
			SetlTime          string      `json:"setl_time"`
			CvlservPay        float64     `json:"cvlserv_pay"`
			Year              string      `json:"year"`
			MedType           string      `json:"med_type"`
			PsnPay            float64     `json:"psn_pay"`
			OpterID           string      `json:"opter_id"`
			Begndate          string      `json:"begndate"`
			FlxempeFlag       string      `json:"flxempe_flag"`
			HifmiPay          float64     `json:"hifmi_pay"`
			PsnNo             string      `json:"psn_no"`
			ActPayDedc        float64     `json:"act_pay_dedc"`
			MedinsSetlID      interface{} `json:"medins_setl_id"`
			AcctMulaidPay     interface{} `json:"acct_mulaid_pay"`
			ClrWay            string      `json:"clr_way"`
			OthPay            float64     `json:"oth_pay"`
			Gend              string      `json:"gend"`
			MdtrtID           string      `json:"mdtrt_id"`
			AcctPay           float64     `json:"acct_pay"`
			InscpScpAmt       float64     `json:"inscp_scp_amt"`
			Insutype          string      `json:"insutype"`
			Invono            interface{} `json:"invono"`
			Enddate           string      `json:"enddate"`
			CashPayamt        float64     `json:"cash_payamt"`
			PsnType           string      `json:"psn_type"`
			FixmedinsName     string      `json:"fixmedins_name"`
			HifpPay           float64     `json:"hifp_pay"`
			NewFlag           interface{} `json:"new_flag"`
			OverlmtSelfpay    float64     `json:"overlmt_selfpay"`
			PreselfpayAmt     float64     `json:"preselfpay_amt"`
			PayLoc            string      `json:"pay_loc"`
			ClrType           string      `json:"clr_type"`
			RefdSetlFlag      string      `json:"refd_setl_flag"`
			CvlservFlag       string      `json:"cvlserv_flag"`
			EmpName           string      `json:"emp_name"`
			Brdy              string      `json:"brdy"`
			Naty              string      `json:"naty"`
			Certno            string      `json:"certno"`
			DiseCode          string      `json:"dise_code"`
			FixmedinsCode     string      `json:"fixmedins_code"`
			DedcHospLv        string      `json:"dedc_hosp_lv"`
			OpterName         string      `json:"opter_name"`
			Balc              float64     `json:"balc"`
			FixmedinsPoolarea string      `json:"fixmedins_poolarea"`
			PsnCertType       string      `json:"psn_cert_type"`
			HifobPay          float64     `json:"hifob_pay"`
			MedfeeSumamt      float64     `json:"medfee_sumamt"`
			HifesPay          float64     `json:"hifes_pay"`
			FundPaySumamt     float64     `json:"fund_pay_sumamt"`
			OptTime           string      `json:"opt_time"`
			FulamtOwnpayAmt   float64     `json:"fulamt_ownpay_amt"`
			SetlID            string      `json:"setl_id"`
			MafPay            float64     `json:"maf_pay"`
			PsnName           string      `json:"psn_name"`
			InsuOptins        interface{} `json:"insu_optins"`
			PrefFundPay       interface{} `json:"pref_fund_pay"`
			ClrOptins         string      `json:"clr_optins"`
			PoolPropSelfpay   float64     `json:"pool_prop_selfpay"`
			DiseName          string      `json:"dise_name"`
			LmtpricHospLv     string      `json:"lmtpric_hosp_lv"`
			Age               float64     `json:"age"`
			DtrtCertType      string      `json:"dtrt_cert_type"`
			HospLv            string      `json:"hosp_lv"`
		} `json:"setlinfo"`
	} `json:"output"`
	RefmsgTime  string      `json:"refmsg_time"`
	RespondTime string      `json:"respond_time"`
	Signtype    interface{} `json:"signtype"`
	WarnMsg     interface{} `json:"warn_msg"`
}
type ResultEleven10265 struct {
	Cainfo      string `json:"cainfo"`
	ErrMsg      string `json:"err_msg"`
	InfRefmsgid string `json:"inf_refmsgid"`
	Infcode     string `json:"infcode"`
	Output      struct {
		Setlinfo struct {
			SetlTime          string      `json:"setl_time"`
			CvlservPay        float64     `json:"cvlserv_pay"`
			Year              string      `json:"year"`
			MedType           string      `json:"med_type"`
			PsnPay            float64     `json:"psn_pay"`
			OpterID           string      `json:"opter_id"`
			Begndate          string      `json:"begndate"`
			FlxempeFlag       string      `json:"flxempe_flag"`
			HifmiPay          float64     `json:"hifmi_pay"`
			PsnNo             string      `json:"psn_no"`
			ActPayDedc        float64     `json:"act_pay_dedc"`
			MedinsSetlID      interface{} `json:"medins_setl_id"`
			AcctMulaidPay     interface{} `json:"acct_mulaid_pay"`
			ClrWay            string      `json:"clr_way"`
			OthPay            float64     `json:"oth_pay"`
			Gend              string      `json:"gend"`
			MdtrtID           string      `json:"mdtrt_id"`
			AcctPay           float64     `json:"acct_pay"`
			InscpScpAmt       float64     `json:"inscp_scp_amt"`
			Insutype          string      `json:"insutype"`
			Invono            interface{} `json:"invono"`
			Enddate           string      `json:"enddate"`
			CashPayamt        float64     `json:"cash_payamt"`
			PsnType           string      `json:"psn_type"`
			FixmedinsName     string      `json:"fixmedins_name"`
			HifpPay           float64     `json:"hifp_pay"`
			NewFlag           interface{} `json:"new_flag"`
			OverlmtSelfpay    float64     `json:"overlmt_selfpay"`
			PreselfpayAmt     float64     `json:"preselfpay_amt"`
			PayLoc            string      `json:"pay_loc"`
			ClrType           string      `json:"clr_type"`
			RefdSetlFlag      string      `json:"refd_setl_flag"`
			CvlservFlag       string      `json:"cvlserv_flag"`
			EmpName           string      `json:"emp_name"`
			Brdy              string      `json:"brdy"`
			Naty              string      `json:"naty"`
			Certno            string      `json:"certno"`
			DiseCode          string      `json:"dise_code"`
			FixmedinsCode     string      `json:"fixmedins_code"`
			DedcHospLv        string      `json:"dedc_hosp_lv"`
			OpterName         string      `json:"opter_name"`
			Balc              float64     `json:"balc"`
			FixmedinsPoolarea string      `json:"fixmedins_poolarea"`
			PsnCertType       string      `json:"psn_cert_type"`
			HifobPay          float64     `json:"hifob_pay"`
			MedfeeSumamt      float64     `json:"medfee_sumamt"`
			HifesPay          float64     `json:"hifes_pay"`
			FundPaySumamt     float64     `json:"fund_pay_sumamt"`
			OptTime           string      `json:"opt_time"`
			FulamtOwnpayAmt   float64     `json:"fulamt_ownpay_amt"`
			SetlID            string      `json:"setl_id"`
			MafPay            float64     `json:"maf_pay"`
			PsnName           string      `json:"psn_name"`
			InsuOptins        interface{} `json:"insu_optins"`
			PrefFundPay       interface{} `json:"pref_fund_pay"`
			ClrOptins         string      `json:"clr_optins"`
			PoolPropSelfpay   float64     `json:"pool_prop_selfpay"`
			DiseName          string      `json:"dise_name"`
			LmtpricHospLv     string      `json:"lmtpric_hosp_lv"`
			Age               float64     `json:"age"`
			DtrtCertType      string      `json:"dtrt_cert_type"`
			HospLv            string      `json:"hosp_lv"`
		} `json:"setlinfo"`
	} `json:"output"`
	RefmsgTime  string      `json:"refmsg_time"`
	RespondTime string      `json:"respond_time"`
	Signtype    interface{} `json:"signtype"`
	WarnMsg     interface{} `json:"warn_msg"`
}

type ResultTwelve struct {
	Cainfo      string `json:"cainfo"`
	ErrMsg      string `json:"err_msg"`
	InfRefmsgid string `json:"inf_refmsgid"`
	Infcode     int64  `json:"infcode"`
	Output      struct {
		MdtrtId   string `json:"mdtrt_id"`
		ChrgBchno string `json:"chrg_bchno"`
		PsnNo     string `json:"psn_no"`
	} `json:"output"`
	RefmsgTime  string      `json:"refmsg_time"`
	RespondTime string      `json:"respond_time"`
	Signtype    interface{} `json:"signtype"`
	WarnMsg     interface{} `json:"warn_msg"`
}

type ResultThirteen struct {
	ErrMsg      string `json:"err_msg"`
	InfRefmsgid string `json:"inf_refmsgid"`
	Infcode     int64  `json:"infcode"`
	Output      struct {
		Result struct {
			TrtDclaDetlSn string `json:"trt_dcla_detl_sn"`
		} `json:"result"`
	} `json:"output"`
	RefmsgTime  string      `json:"refmsg_time"`
	RespondTime string      `json:"respond_time"`
	Signtype    interface{} `json:"signtype"`
	WarnInfo    interface{} `json:"warn_info"`
}

type ResultThirteen10265 struct {
	ErrMsg      string `json:"err_msg"`
	InfRefmsgid string `json:"inf_refmsgid"`
	Infcode     string `json:"infcode"`
	Output      struct {
		Result struct {
			TrtDclaDetlSn string `json:"trt_dcla_detl_sn"`
		} `json:"result"`
	} `json:"output"`
	RefmsgTime  string      `json:"refmsg_time"`
	RespondTime string      `json:"respond_time"`
	Signtype    interface{} `json:"signtype"`
	WarnInfo    interface{} `json:"warn_info"`
}

type ResultFourteen struct {
	ErrMsg      string `json:"err_msg"`
	InfRefmsgid string `json:"inf_refmsgid"`
	Infcode     int64  `json:"infcode"`
	Output      struct {
	} `json:"output"`
	RefmsgTime  string      `json:"refmsg_time"`
	RespondTime string      `json:"respond_time"`
	Signtype    interface{} `json:"signtype"`
	WarnInfo    interface{} `json:"warn_info"`
}

type ResultFourteen10265 struct {
	ErrMsg      string `json:"err_msg"`
	InfRefmsgid string `json:"inf_refmsgid"`
	Infcode     string `json:"infcode"`
	Output      struct {
	} `json:"output"`
	RefmsgTime  string      `json:"refmsg_time"`
	RespondTime string      `json:"respond_time"`
	Signtype    interface{} `json:"signtype"`
	WarnInfo    interface{} `json:"warn_info"`
}

type ResultSixteen struct {
	Cainfo      string `json:"cainfo"`
	ErrMsg      string `json:"err_msg"`
	InfRefmsgid string `json:"inf_refmsgid"`
	Infcode     int64  `json:"infcode"`
	Output      struct {
		Setldetail []interface{} `json:"setldetail"`
		Setlinfo   struct {
			MdtrtID         string  `json:"mdtrt_id"`
			SetlID          string  `json:"setl_id"`
			ClrOptins       string  `json:"clr_optins"`
			SetlTime        string  `json:"setl_time"`
			MedfeeSumamt    float64 `json:"medfee_sumamt"`
			FulamtOwnpayAmt float64 `json:"fulamt_ownpay_amt"`
			OverlmtSelfpay  float64 `json:"overlmt_selfpay"`
			PreselfpayAmt   float64 `json:"preselfpay_amt"`
			InscpScpAmt     float64 `json:"inscp_scp_amt"`
			ActPayDedc      float64 `json:"act_pay_dedc"`
			HifpPay         float64 `json:"hifp_pay"`
			PoolPropSe      float64 `json:"pool_prop_selfpay"`
			Lfpay           float64 `json:"selfpay"`
			CvlservPay      float64 `json:"cvlserv_pay"`
			HifesPay        float64 `json:"hifes_pay"`
			HifmiPay        float64 `json:"hifmi_pay"`
			HifobPay        float64 `json:"hifob_pay"`
			MafPay          float64 `json:"maf_pay"`
			OthPay          float64 `json:"oth_pay"`
			FundPaySumamt   float64 `json:"fund_pay_sumamt"`
			PsnPartAmt      float64 `json:"psn_part_amt"`
			AcctPay         float64 `json:"acct_pay"`
			Balc            float64 `json:"balc"`
			AcctMulaidPay   float64 `json:"acct_mulaid_pay"`
			HospPartAmt     float64 `json:"hosp_part_amt"`
			MedinsSetlID    string  `json:"medins_setl_id"`
			PdnCashPay      string  `json:"pdn_cash_pay"`
		} `json:"setlinfo"`
	} `json:"output"`
	RefmsgTime  string      `json:"refmsg_time"`
	RespondTime string      `json:"respond_time"`
	Signtype    interface{} `json:"signtype"`
	WarnMsg     interface{} `json:"warn_msg"`
}
type ResultSixteen10265 struct {
	Cainfo      string `json:"cainfo"`
	ErrMsg      string `json:"err_msg"`
	InfRefmsgid string `json:"inf_refmsgid"`
	Infcode     string `json:"infcode"`
	Output      struct {
		Setldetail []interface{} `json:"setldetail"`
		Setlinfo   struct {
			MdtrtID         string  `json:"mdtrt_id"`
			SetlID          string  `json:"setl_id"`
			ClrOptins       string  `json:"clr_optins"`
			SetlTime        string  `json:"setl_time"`
			MedfeeSumamt    float64 `json:"medfee_sumamt"`
			FulamtOwnpayAmt float64 `json:"fulamt_ownpay_amt"`
			OverlmtSelfpay  float64 `json:"overlmt_selfpay"`
			PreselfpayAmt   float64 `json:"preselfpay_amt"`
			InscpScpAmt     float64 `json:"inscp_scp_amt"`
			ActPayDedc      float64 `json:"act_pay_dedc"`
			HifpPay         float64 `json:"hifp_pay"`
			PoolPropSe      float64 `json:"pool_prop_selfpay"`
			Lfpay           float64 `json:"selfpay"`
			CvlservPay      float64 `json:"cvlserv_pay"`
			HifesPay        float64 `json:"hifes_pay"`
			HifmiPay        float64 `json:"hifmi_pay"`
			HifobPay        float64 `json:"hifob_pay"`
			MafPay          float64 `json:"maf_pay"`
			OthPay          float64 `json:"oth_pay"`
			FundPaySumamt   float64 `json:"fund_pay_sumamt"`
			PsnPartAmt      float64 `json:"psn_part_amt"`
			AcctPay         float64 `json:"acct_pay"`
			Balc            float64 `json:"balc"`
			AcctMulaidPay   float64 `json:"acct_mulaid_pay"`
			HospPartAmt     float64 `json:"hosp_part_amt"`
			MedinsSetlID    string  `json:"medins_setl_id"`
			PdnCashPay      string  `json:"pdn_cash_pay"`
		} `json:"setlinfo"`
	} `json:"output"`
	RefmsgTime  string      `json:"refmsg_time"`
	RespondTime string      `json:"respond_time"`
	Signtype    interface{} `json:"signtype"`
	WarnMsg     interface{} `json:"warn_msg"`
}

type ResultSeventeen struct {
	ErrMsg      string `json:"err_msg"`
	InfRefmsgid string `json:"inf_refmsgid"`
	Infcode     int64  `json:"infcode"`
	Output      struct {
		SetlListId string `json:"setl_list_id"`
	} `json:"output"`
	RefmsgTime  string `json:"refmsg_time"`
	RespondTime string `json:"respond_time"`
	Signtype    string `json:"signtype"`
	WarnInfo    string `json:"warn_info"`
}

type ResultSeventeenOther struct {
	ErrMsg      string `json:"err_msg"`
	InfRefmsgid string `json:"inf_refmsgid"`
	Infcode     string `json:"infcode"`
	Output      struct {
		SetlListId string `json:"setl_list_id"`
	} `json:"output"`
	RefmsgTime  string `json:"refmsg_time"`
	RespondTime string `json:"respond_time"`
	Signtype    string `json:"signtype"`
	WarnInfo    string `json:"warn_info"`
}

type Result90991 struct {
	ErrMsg      string `json:"err_msg"`
	InfRefmsgid string `json:"inf_refmsgid"`
	Infcode     int64  `json:"infcode"`
	Output      struct {
		Result struct {
			PsnNo          string `json:"psn_no"`
			CardStat       string `json:"card_stat"`
			Certno         string `json:"certno"`
			PsnName        string `json:"psn_name"`
			CheckStat      string `json:"check_stat"`
			SscnoCheckStat string `json:"sscno_check_stat"`
		} `json:"result"`
	} `json:"output"`
	RefmsgTime  string      `json:"refmsg_time"`
	RespondTime string      `json:"respond_time"`
	Signtype    interface{} `json:"signtype"`
	WarnInfo    interface{} `json:"warn_info"`
}

type Result90100 struct {
	ErrMsg      string `json:"err_msg"`
	InfRefmsgid string `json:"inf_refmsgid"`
	Infcode     int64  `json:"infcode"`
	Output      struct {
		PoolareaNo          string `json:"poolarea_no"`
		PoolareaNoName      string `json:"poolarea_no_name"`
		Insutype            string `json:"insutype"`
		InsutypeName        string `json:"insutype_name"`
		ClctType            string `json:"clct_type"`
		ClctTypeName        string `json:"clct_type_name"`
		ClctFlag            string `json:"clct_flag"`
		ClctFlagName        string `json:"clct_flag_name"`
		AccrymBegn          string `json:"accrym_begn"`
		AccrymEnd           string `json:"accrym_end"`
		ClctTime            string `json:"clct_time"`
		ClctstdCrtfRuleCodg string `json:"clctstd_crtf_rule_codg"`
	} `json:"output"`
	RefmsgTime  string      `json:"refmsg_time"`
	RespondTime string      `json:"respond_time"`
	Signtype    interface{} `json:"signtype"`
	WarnInfo    interface{} `json:"warn_info"`
}

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

type Result5301 struct {
	ErrMsg      string `json:"err_msg"`
	InfRefmsgid string `json:"inf_refmsgid"`
	Infcode     int64  `json:"infcode"`
	Output      struct {
		Result []struct {
			OpspDiseCode string `json:"opsp_dise_code"`
			OpspDiseName string `json:"opsp_dise_name"`
			Begndate     string `json:"begndate"`
			Enddate      string `json:"enddate"`
		} `json:"feedetail"`
	} `json:"output"`
	RefmsgTime  string      `json:"refmsg_time"`
	RespondTime string      `json:"respond_time"`
	Signtype    interface{} `json:"signtype"`
	WarnInfo    interface{} `json:"warn_info"`
}

type Result5301For10265 struct {
	ErrMsg      string `json:"err_msg"`
	InfRefmsgid string `json:"inf_refmsgid"`
	Infcode     string `json:"infcode"`
	Output      struct {
		Result []struct {
			OpspDiseCode string `json:"opsp_dise_code"`
			OpspDiseName string `json:"opsp_dise_name"`
			Begndate     string `json:"begndate"`
			Enddate      string `json:"enddate"`
		} `json:"feedetail"`
	} `json:"output"`
	RefmsgTime  string      `json:"refmsg_time"`
	RespondTime string      `json:"respond_time"`
	Signtype    interface{} `json:"signtype"`
	WarnInfo    interface{} `json:"warn_info"`
}

//获取个人信息----挂号-----上传就诊信息

func (c *HisApiController) GetRegisterInfo() {
	id, _ := c.GetInt64("id")
	record_time := c.GetString("record_time")
	settlementValue, _ := c.GetInt64("settlement_value")
	medical_insurance_card := c.GetString("medical_insurance_card")
	name := c.GetString("name")
	id_card_type, _ := c.GetInt64("id_card_type")
	certificates, _ := c.GetInt64("certificates")
	medical_care, _ := c.GetInt64("medical_care")
	birthday := c.GetString("birthday")
	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")
	med_type := c.GetString("social_type")
	admin_user_id, _ := c.GetInt64("admin_user_id")
	insuplc_admdvs := c.GetString("insuplc_admdvs")

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

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

	adminInfo := c.GetAdminUserInfo()
	var patient service.Patients
	if id == 0 {
		patient, _ = service.GetPatientByIDCard(id_card, adminInfo.CurrentOrgId)
	} else {
		patient, _ = service.GetPatientByIDTwo(adminInfo.CurrentOrgId, id)
	}
	patientPrescription, _ := service.FindPatientPrescriptionInfo(adminInfo.CurrentOrgId, id, recordDateTime)
	if patientPrescription.ID == 0 {
		patientPrescription, _ = service.FindLastPatientPrescriptionInfo(adminInfo.CurrentOrgId, id, recordDateTime)
	}

	miConfig, _ := service.FindMedicalInsuranceInfo(adminInfo.CurrentOrgId)
	if patient.ID == 0 {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodePatientNoExist)
		return
	}
	if len(patient.IdCardNo) == 0 {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeIDCartNo)
		return
	}
	config, _ := service.GetMedicalInsuranceConfig(adminInfo.CurrentOrgId)
	roles, _ := service.GetAdminUserInfoByID(adminInfo.CurrentOrgId, admin_user_id)

	doctor_info, _ := service.GetAdminUserInfoByID(adminInfo.CurrentOrgId, doctor)

	//就诊结算未完成,不能进行二次挂号
	his, _ := service.GetHisPatientInfoTwo(adminInfo.CurrentOrgId, patient.ID, recordDateTime)
	if len(his) >= 1 {
		order, _ := service.GetNewHisOrderTwo(adminInfo.CurrentOrgId, his[len(his)-1].Number, his[len(his)-1].PatientId, recordDateTime)
		if len(his) >= 1 && order.ID == 0 {
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeHisPatientParamWrong)
			return
		}
	}

	//var register_log string

	if config.IsOpen == 1 {
		var res ResultTwo
		var res10265 ResultTwo10265
		var PsnNo string
		var PsnCertType string
		var Certno string
		var PsnName string
		var Gend string
		var Naty string
		var Brdy string
		var Age float64
		var infoStr string
		var idetinfoStr string
		var infocode int64
		var verify_number string
		fmt.Println(verify_number)
		if miConfig.MdtrtareaAdmvs == "421300" {
			psn_info, _ := service.GetPsnByPatientId(id)
			PsnNo = psn_info.PsnNo
			PsnCertType = psn_info.PsnCertType
			Certno = psn_info.Certno
			PsnName = psn_info.PsnName
			Gend = psn_info.Gend
			Naty = psn_info.Naty
			Brdy = psn_info.Brdy
			Age = psn_info.Age
			infoStr = psn_info.Insuinfo
			idetinfoStr = psn_info.Idetinfo
			infocode = 0

		} else if miConfig.MdtrtareaAdmvs == "320921" || miConfig.MdtrtareaAdmvs == "320982" {
			psn_info, _ := service.GetPsnByPatientId(id)
			PsnNo = psn_info.PsnNo
			PsnCertType = psn_info.PsnCertType
			Certno = psn_info.Certno
			PsnName = psn_info.PsnName
			Gend = psn_info.Gend
			Naty = psn_info.Naty
			Brdy = psn_info.Brdy
			Age = psn_info.Age
			infoStr = psn_info.Insuinfo
			idetinfoStr = psn_info.Idetinfo
			infocode = 0
			verify_number = psn_info.VerifyNumber

		} else if miConfig.MdtrtareaAdmvs == "350500" {
			if id_card_type == 1 {
				psn_info, _ := service.GetPsnByPatientId(id)
				PsnNo = psn_info.PsnNo
				PsnCertType = psn_info.PsnCertType
				Certno = psn_info.Certno
				PsnName = psn_info.PsnName
				Gend = psn_info.Gend
				Naty = psn_info.Naty
				Brdy = psn_info.Brdy
				Age = psn_info.Age
				infoStr = psn_info.Insuinfo
				idetinfoStr = psn_info.Idetinfo
				infocode = 0
				verify_number = psn_info.VerifyNumber
			} else if id_card_type == 2 {

				result, requestLog, errMsgLog := service.FJyb1101(patient.IdCardNo, miConfig.OrgName, roles.UserName, miConfig.Code, miConfig.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, id_card_type, patient.IdCardNo, certificates, miConfig.Url, miConfig.Cainfo, miConfig.AppSecret, miConfig.SignKey, miConfig.EncKey)
				fmt.Println(errMsgLog)
				saveLog(result, requestLog, "1101", "人员基本信息获取")

				if err := json.Unmarshal([]byte(result), &res); err != nil {
					utils.ErrorLog("解析失败:%v", err)
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
					return
				}

				PsnNo = res.Output.Baseinfo.PsnNo
				PsnCertType = res.Output.Baseinfo.PsnCertType
				Certno = res.Output.Baseinfo.Certno
				PsnName = res.Output.Baseinfo.PsnName
				Gend = res.Output.Baseinfo.Gend
				Naty = res.Output.Baseinfo.Naty
				Brdy = res.Output.Baseinfo.Brdy
				Age = res.Output.Baseinfo.Age
				Iinfos, _ := json.Marshal(res.Output.Iinfo)
				Idetinfos, _ := json.Marshal(res.Output.Idetinfo)
				infoStr = string(Iinfos)
				idetinfoStr = string(Idetinfos)
				infocode = res.Infcode
			}
		} else {
			var result string
			var requestLog string
			if miConfig.UserOrgId == 10138 {
				if id_card_type == 4 {
					psn_info, _ := service.GetPsnByPatientId(id)
					result, requestLog = service.Gdyb1101ForEleCert(miConfig.OrgName, roles.UserName, miConfig.Code, miConfig.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey, psn_info.VerifyNumber)
				} else {
					result, requestLog = service.Gdyb1101D(patient.IdCardNo, miConfig.OrgName, roles.UserName, miConfig.Code, miConfig.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey, id_card_type, "", strconv.FormatInt(certificates, 10), name, record_time)
				}
			} else {
				result, requestLog = service.Gdyb1101(patient.IdCardNo, miConfig.OrgName, roles.UserName, miConfig.Code, miConfig.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey, id_card_type, "", strconv.FormatInt(certificates, 10), name)
			}
			saveLog(result, requestLog, "1101", "人员基本信息获取")
			if miConfig.Code == "H15049901371" {

				if err := json.Unmarshal([]byte(result), &res10265); err != nil {
					utils.ErrorLog("解析失败:%v", err)
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
					return
				}
				res.ErrMsg = res10265.ErrMsg
				res.Output = res10265.Output
				res.InfRefmsgid = res10265.InfRefmsgid

			} else {
				if err := json.Unmarshal([]byte(result), &res); err != nil {
					utils.ErrorLog("解析失败:%v", err)
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
					return
				}
			}

			PsnNo = res.Output.Baseinfo.PsnNo
			PsnCertType = res.Output.Baseinfo.PsnCertType
			Certno = res.Output.Baseinfo.Certno
			PsnName = res.Output.Baseinfo.PsnName
			Gend = res.Output.Baseinfo.Gend
			Naty = res.Output.Baseinfo.Naty
			Brdy = res.Output.Baseinfo.Brdy
			Age = res.Output.Baseinfo.Age
			Iinfos, _ := json.Marshal(res.Output.Iinfo)
			Idetinfos, _ := json.Marshal(res.Output.Idetinfo)
			infoStr = string(Iinfos)
			idetinfoStr = string(Idetinfos)
			if miConfig.Code == "H15049901371" {
				infocode, _ = strconv.ParseInt(res10265.Infcode, 10, 64)
			} else {
				infocode = res.Infcode
			}
		}
		if infocode == 0 {
			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(),
				PsnNo:                  PsnNo,
				PsnCertType:            PsnCertType,
				Certno:                 Certno,
				PsnName:                PsnName,
				Gend:                   Gend,
				Naty:                   Naty,
				Brdy:                   Brdy,
				Age:                    Age,
				Iinfo:                  infoStr,
				Idetinfo:               idetinfoStr,
				PatientId:              patient.ID,
				RecordDate:             theTime.Unix(),
				UserOrgId:              adminInfo.CurrentOrgId,
				AdminUserId:            admin_user_id,
				IsReturn:               1,
				IdCardType:             id_card_type,
				Doctor:                 doctor,
				Departments:            department,
			}

			timestamp := time.Now().Unix()
			tempTime := time.Unix(timestamp, 0)
			timeFormat := tempTime.Format("20060102150405")
			chrgBchno := rand.Intn(100000) + 10000
			ipt_otp_no := timeFormat + strconv.FormatInt(int64(chrgBchno), 10) + strconv.FormatInt(his.PatientId, 10)
			//count, _ := service.FindHisRegisterRecord(theTime.Unix(), patient.ID, adminInfo.CurrentOrgId)
			department, _ := service.GetDepartMentDetail(department)
			//doctor_id := strconv.FormatInt(patientPrescription., 10)

			IdCardNo := ""
			if id_card_type == 1 {
				// IdCardNo = medical_insurance_card
				IdCardNo = patient.IdCardNo
			} else {
				IdCardNo = patient.IdCardNo
			}

			var rf []*ResultFive
			json.Unmarshal([]byte(his.Iinfo), &rf)
			var insutypes []*ResultFive
			var insutype string
			var insuplc_admdvs_temp string
			var is390 int = 0
			var is310 int = 0

			for _, item := range rf {
				if (item.Insutype == "390" && item.PsnInsuStas == "1") || (item.Insutype == "310" && item.PsnInsuStas == "1") {
					insutypes = append(insutypes, item)
				}
			}

			if len(insutypes) == 1 {
				insutype = insutypes[0].Insutype
				//insuplc_admdvs = insutypes[0].InsuplcAdmdvs
			} else {
				for _, i := range insutypes {
					if i.Insutype == "390" {
						is390 = 1
					}

					if i.Insutype == "310" {
						is310 = 1
					}
				}
			}
			if is390 == 1 {
				insutype = "390"
			}

			if is310 == 1 {
				insutype = "310"
			}

			if len(insutypes) == 0 {
				insutype = "310"
			}

			if len(insutypes) == 2 {
				insutype = med_type
			}

			if len(med_type) > 0 {

				insutype = med_type
			}

			//for _, item := range rf {
			//	if item.Insutype == insutype {
			//		insuplc_admdvs = item.InsuplcAdmdvs
			//	}
			//}
			var infocode int64
			var resThree ResultThree
			var resThree10265 ResultThree10265

			if len(insuplc_admdvs) == 0 {
				insuplc_admdvs_temp = miConfig.InsuplcAdmdvs
			} else {

				insuplc_admdvs_temp = insuplc_admdvs

			}

			if miConfig.MdtrtareaAdmvs == "421300" {
				hb_doctor_info, _ := service.GetAdminUserInfoByID(adminInfo.CurrentOrgId, patientPrescription.DoctorId)

				api := "http://192.168.124.4:9532/" + "hbyb/2201?psn_no=" + PsnNo + "&insutype=" + insutype + "&cert_no=" + Certno + "&ipt_otp_no=" + ipt_otp_no +
					"&org_name=" + miConfig.OrgName + "&doctor=" + hb_doctor_info.UserName + "&fixmedins_code=" + miConfig.Code +
					"&insuplc_admdvs=" + insuplc_admdvs_temp + "&mdtrtarea_admvs=" + miConfig.MdtrtareaAdmvs + "&secret_key=" + miConfig.SecretKey + "&id_card_type=" + strconv.FormatInt(id_card_type, 10) + "&dept_code=" + department.Number + "&dept=" + department.Name + "&doctor_id=" + hb_doctor_info.DoctorNumber + "&doctor_name=" + hb_doctor_info.UserName + "&opter=" + roles.UserName
				resp, requestErr := http.Get(api)
				if requestErr != nil {
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
					return
				}

				body, ioErr := ioutil.ReadAll(resp.Body)
				if ioErr != nil {
					utils.ErrorLog("接口返回数据读取失败: %v", ioErr)
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
					return
				}
				var respJSON map[string]interface{}
				if err := json.Unmarshal([]byte(string(body)), &respJSON); err != nil {
					utils.ErrorLog("接口返回数据解析JSON失败: %v", err)
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
					return
				}

				respJSON = respJSON["data"].(map[string]interface{})["pre"].(map[string]interface{})
				result, _ := json.Marshal(respJSON)

				if err := json.Unmarshal([]byte(result), &resThree); err != nil {
					utils.ErrorLog("解析失败:%v", err)
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
					return
				}
				infocode = resThree.Infcode

			} else if miConfig.MdtrtareaAdmvs == "320921" || miConfig.MdtrtareaAdmvs == "320982" {
				psn_info, _ := service.GetPsnByPatientId(id)

				psn_info.VerifyNumber = strings.Replace(psn_info.VerifyNumber, "+", "%2B", -1)
				var cert_no string
				if id_card_type == 3 {
					psn_info.VerifyNumber = IdCardNo + "|" + psn_info.VerifyNumber
					cert_no = IdCardNo
				} else if id_card_type == 4 {
					cert_no = IdCardNo
					psn_info.VerifyNumber = psn_info.VerifyNumber
				} else {

					bas := strings.Split(psn_info.CardInfo, "|")
					cert_no = bas[2]
				}

				var api string
				if miConfig.MdtrtareaAdmvs == "320921" {

					api = "http://192.168.2.110:9532/" + "jsyb/2201?psn_no=" + PsnNo + "&insutype=" + insutype + "&cert_no=" + cert_no + "&ipt_otp_no=" + ipt_otp_no +
						"&org_name=" + miConfig.OrgName + "&doctor=" + roles.UserName + "&doctor_name=" + doctor_info.UserName + "&fixmedins_code=" + miConfig.Code +
						"&insuplc_admdvs=" + insuplc_admdvs_temp + "&mdtrtarea_admvs=" + miConfig.MdtrtareaAdmvs + "&secret_key=" + miConfig.SecretKey + "&id_card_type=" + strconv.FormatInt(id_card_type, 10) + "&dept_code=" + department.Number + "&dept=" + department.Name + "&doctor_id=" + doctor_info.DoctorNumber + "&url=" + miConfig.Url + "&ak=" + miConfig.AccessKey + "&verify_number=" + psn_info.VerifyNumber + "&cainfo=" + miConfig.Cainfo

				} else {
					api = "http://192.168.5.251:9532/" + "jsyb/2201?psn_no=" + PsnNo + "&insutype=" + insutype + "&cert_no=" + cert_no + "&ipt_otp_no=" + ipt_otp_no +
						"&org_name=" + miConfig.OrgName + "&doctor=" + roles.UserName + "&doctor_name=" + doctor_info.UserName + "&fixmedins_code=" + miConfig.Code +
						"&insuplc_admdvs=" + insuplc_admdvs_temp + "&mdtrtarea_admvs=" + miConfig.MdtrtareaAdmvs + "&secret_key=" + miConfig.SecretKey + "&id_card_type=" + strconv.FormatInt(id_card_type, 10) + "&dept_code=" + department.Number + "&dept=" + department.Name + "&doctor_id=" + doctor_info.DoctorNumber + "&url=" + miConfig.Url + "&ak=" + miConfig.AccessKey + "&verify_number=" + psn_info.VerifyNumber + "&cainfo=" + miConfig.Cainfo

				}

				resp, requestErr := http.Get(api)
				if requestErr != nil {
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
					return
				}

				body, ioErr := ioutil.ReadAll(resp.Body)

				if ioErr != nil {
					utils.ErrorLog("接口返回数据读取失败: %v", ioErr)
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
					return
				}

				var respJSON map[string]interface{}

				if err := json.Unmarshal([]byte(string(body)), &respJSON); err != nil {
					utils.ErrorLog("接口返回数据解析JSON失败: %v", err)
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
					return
				}

				respJSON = respJSON["data"].(map[string]interface{})["pre"].(map[string]interface{})

				result, _ := json.Marshal(respJSON)

				if err := json.Unmarshal([]byte(result), &resThree10265); err != nil {
					utils.ErrorLog("解析失败:%v", err)
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
					return
				}

				resThree.ErrMsg = resThree10265.ErrMsg

				resThree.Output = resThree10265.Output

				resThree.InfRefmsgid = resThree10265.InfRefmsgid

				infocode, _ = strconv.ParseInt(resThree10265.Infcode, 10, 64)
			} else if miConfig.MdtrtareaAdmvs == "350500" {

				psn_info, _ := service.GetPsnByPatientId(id)
				var cert_no string
				if id_card_type == 1 {
					cert_no = strings.Split(psn_info.CardInfo, "|")[0]
				} else {
					cert_no = strings.Split(psn_info.CardInfo, "|")[1]

				}
				fmt.Println(cert_no)
				result, requestLog, _ := service.FJyb2201(psn_info.PsnNo, insutype, IdCardNo, miConfig.OrgName, doctor_info.UserName, ipt_otp_no, department.Name, miConfig.Code, department.Number, doctor_info.DoctorNumber, insuplc_admdvs_temp, miConfig.MdtrtareaAdmvs, miConfig.SecretKey, id_card_type, roles.UserName, doctor_info.UserName, miConfig.Url, miConfig.Code, miConfig.AppSecret, miConfig.SignKey, miConfig.EncKey, cert_no)
				saveLog(result, requestLog, "2201", "挂号")
				if miConfig.Code == "H15049901371" {

					if err := json.Unmarshal([]byte(result), &resThree10265); err != nil {
						utils.ErrorLog("解析失败:%v", err)
						c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
						return
					}
					resThree.ErrMsg = resThree10265.ErrMsg
					resThree.Output = resThree10265.Output
					resThree.InfRefmsgid = resThree10265.InfRefmsgid
				} else {
					if err := json.Unmarshal([]byte(result), &resThree); err != nil {
						utils.ErrorLog("解析失败:%v", err)
						c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
						return
					}
				}
				infocode, _ = strconv.ParseInt(resThree10265.Infcode, 10, 64)
			} else {
				psn_info, _ := service.GetPsnByPatientId(id)
				result, requestLog := service.Gdyb2201A(res.Output.Baseinfo.PsnNo, insutype, IdCardNo, miConfig.OrgName, roles.UserName, ipt_otp_no, department.Name, miConfig.Code, department.Number, doctor_info.DoctorNumber, insuplc_admdvs_temp, miConfig.MdtrtareaAdmvs, miConfig.SecretKey, id_card_type, doctor_info.UserName, record_time, psn_info.VerifyNumber)
				saveLog(result, requestLog, "2201A", "挂号")
				if miConfig.Code == "H15049901371" {

					if err := json.Unmarshal([]byte(result), &resThree10265); err != nil {
						utils.ErrorLog("解析失败:%v", err)
						c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
						return
					}
					resThree.ErrMsg = resThree10265.ErrMsg
					resThree.Output = resThree10265.Output
					resThree.InfRefmsgid = resThree10265.InfRefmsgid
				} else {
					if err := json.Unmarshal([]byte(result), &resThree); err != nil {
						utils.ErrorLog("解析失败:%v", err)
						c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
						return
					}
				}

				if miConfig.Code == "H15049901371" {
					infocode, _ = strconv.ParseInt(resThree10265.Infcode, 10, 64)
				} else {
					infocode = resThree.Infcode

				}

			}

			if infocode != 0 {

				adminUser := c.GetAdminUserInfo()
				errlog := &models.HisOrderError{
					UserOrgId:  adminUser.CurrentOrgId,
					Ctime:      time.Now().Unix(),
					Mtime:      time.Now().Unix(),
					ErrMsg:     resThree.ErrMsg,
					Status:     1,
					PatientId:  id,
					RecordTime: recordDateTime,
					Stage:      2,
				}
				service.CreateErrMsgLog(errlog)
				c.ServeSuccessJSON(map[string]interface{}{
					"failed_code": -10,
					"msg":         resThree.ErrMsg,
				})
				return
			}

			his.Number = resThree.Output.Data.MdtrtID
			his.PsnNo = resThree.Output.Data.PsnNo
			his.IptOtpNo = resThree.Output.Data.IptOtpNo
			his.IdCardNo = patient.IdCardNo
			his.PhoneNumber = patient.Phone
			his.UserOrgId = adminInfo.CurrentOrgId
			his.Insutype = insutype
			his.Ctime = time.Now().Unix()
			his.Mtime = time.Now().Unix()
			his.InsuplcAdmdvs = insuplc_admdvs_temp
			his.Status = 1
			service.UpdateHisPatientStatus(&his)
			service.UpdateHisPrescriptionHisID(his.ID, patient.ID, recordDateTime, adminInfo.CurrentOrgId)

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

		} else {
			adminUser := c.GetAdminUserInfo()
			errlog := &models.HisOrderError{
				UserOrgId:  adminUser.CurrentOrgId,
				Ctime:      time.Now().Unix(),
				Mtime:      time.Now().Unix(),
				ErrMsg:     res.ErrMsg,
				Status:     1,
				PatientId:  id,
				RecordTime: recordDateTime,
				Stage:      1,
			}
			service.CreateErrMsgLog(errlog)

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

			//c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeGdybOneException)
		}
	}
}

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

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

	pay_way, _ := c.GetInt64("pay_way")
	pay_price, _ := c.GetFloat("pay_price")
	pay_card_no := c.GetString("pay_card_no")
	token := c.GetString("token")

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

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

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

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

	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 tempOrder models.HisOrder
	tempOrder, _ = service.GetHisOrderByID(order_id)

	var prescriptions []*models.HisPrescription

	var start_time int64
	var end_time int64

	//押金模块
	dec_way := c.GetString("dec_way") //是否使用押金支付bool类型
	tmp_decimal := c.GetString("tmp_decimal")
	var decimal float64 //本次使用的押金
	var errmsg error

	if dec_way == "true" && tmp_decimal == "0" || dec_way == "true" && tmp_decimal == "" {
		c.ServeFailJsonSend(enums.ErrorCodeParamWrong, "押金不能为0")
		return
	}
	if len(tmp_decimal) > 0 {
		if tmp_decimal[0] == 45 {
			c.ServeFailJsonSend(enums.ErrorCodeParamWrong, "押金不能为负数")
			return
		}
	}
	tt, errs := strconv.ParseFloat(tmp_decimal, 64)
	fmt.Println(errs)
	decimal = tt

	//if adminUser.CurrentOrgId == 10106{
	//	if len(fapiao_code) == 0{
	//		fapiao_code = "144072080589"
	//	}
	//	if len(fapiao_number) == 0{
	//		order, _ := service.GetLastHisOrder(adminUser.CurrentOrgId)
	//		if order.ID == 0{
	//			fapiao_number = "00001520"
	//		}else{
	//			//fapiao_code = "00001520"
	//			fpNumber, _ := strconv.Atoi(order.FaPiaoNumber)
	//			var zero string
	//			if fpNumber >= 1000{
	//				zero = "0000" + strconv.Itoa(fpNumber)
	//			}else if fpNumber >= 10000{
	//				zero = "000" + strconv.Itoa(fpNumber)
	//			} else if fpNumber >= 100000{
	//				zero = "00" + strconv.Itoa(fpNumber)
	//			} else if fpNumber >= 1000000{
	//				zero = "0" + strconv.Itoa(fpNumber)
	//			}else {
	//				zero =  strconv.Itoa(fpNumber)
	//			}
	//			fapiao_number = zero
	//		}
	//	}
	//}

	roles, _ := service.GetAdminUserInfoByID(adminUser.CurrentOrgId, admin_user_id)
	his, _ := service.GetNewHisPatientInfo(adminUser.CurrentOrgId, his_patient_id, recordDateTime)
	var patientPrescription models.HisPrescriptionInfo
	patientPrescription, _ = service.FindHisPatientPrescriptionInfo(adminUser.CurrentOrgId, his_patient_id, recordDateTime)
	if patientPrescription.ID == 0 {
		patientPrescription, _ = service.FindLastPatientPrescriptionInfo(adminUser.CurrentOrgId, id, recordDateTime)
	}
	miConfig, _ := service.FindMedicalInsuranceInfo(adminUser.CurrentOrgId)
	department, _ := service.GetDepartMentDetail(patientPrescription.Departments)

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

	diagnosis_ids := strings.Split(diagnosis_id, ",")

	var config []*models.HisXtDiagnoseConfig
	for _, item := range diagnosis_ids {
		id, _ := strconv.ParseInt(item, 10, 64)
		diagnosisConfig, _ := service.FindDiagnoseById(id)
		config = append(config, &diagnosisConfig)
	}

	sickConfig, _ := service.FindSickById(sick_type)

	//if tempOrder.ID == 0 {
	//	tempOrder, _ = service.GetTodayHisOrder(adminUser.CurrentOrgId, id, recordDateTime, his.Number)
	//}

	if tempOrder.ID == 0 {
		var result string
		var requestLog string
		var res2 ResultSix
		var ressix10265 ResultSix10265

		if miConfig.MdtrtareaAdmvs == "421300" {

			data := make(map[string]interface{})
			client := &http.Client{}
			data["psn_no"] = his.PsnNo
			data["mdtrt_id"] = his.Number
			data["opter"] = roles.UserName
			data["org_name"] = miConfig.OrgName
			data["med_type"] = strconv.FormatInt(reg_type, 10)
			data["doctor_id"] = doctor_info.DoctorNumber
			data["doctor_name"] = doctor_info.UserName
			data["department"] = department.Name

			data["fixmedins_code"] = miConfig.Code
			data["insuplc_admdvs"] = his.InsuplcAdmdvs
			data["mdtrtarea_admvs"] = miConfig.MdtrtareaAdmvs
			data["secret_key"] = miConfig.SecretKey
			data["sick_code"] = sickConfig.CountryCode
			data["sick_name"] = sickConfig.ClassName
			data["dept"] = strconv.FormatInt(department.ID, 10)
			data["config"] = config
			data["begin_time"] = begin_time

			bytesData, _ := json.Marshal(data)
			req, _ := http.NewRequest("POST", "http://192.168.124.4:9532/"+"hbyb/2203", bytes.NewReader(bytesData))
			resp, _ := client.Do(req)
			defer resp.Body.Close()
			body, ioErr := ioutil.ReadAll(resp.Body)
			if ioErr != nil {
				utils.ErrorLog("接口返回数据读取失败: %v", ioErr)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}
			var respJSON map[string]interface{}
			if err := json.Unmarshal([]byte(body), &respJSON); err != nil {
				utils.ErrorLog("接口返回数据解析JSON失败: %v", err)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}

			respJSON = respJSON["data"].(map[string]interface{})["pre"].(map[string]interface{})
			userJSONBytes, _ := json.Marshal(respJSON)
			fmt.Println("log")
			fmt.Println(string(userJSONBytes))

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

		} else if miConfig.MdtrtareaAdmvs == "320921" || miConfig.MdtrtareaAdmvs == "320982" {

			//江苏地区国家医保医疗类别
			//职工透析:医疗类别选特殊情况门诊9933
			//居民血透门慢: 医疗类别选门诊慢病1402
			//var med_type string
			//if his.Insutype == "310" {
			//	if reg_type == 14 {
			//		med_type = "9933"
			//	} else if reg_type == 11 {
			//		med_type = "11"
			//
			//	}
			//} else if his.Insutype == "390" {
			//	if reg_type == 14 {
			//		med_type = "1402"
			//	} else if reg_type == 11 {
			//		med_type = "11"
			//	}
			//}

			data := make(map[string]interface{})
			client := &http.Client{}
			data["psn_no"] = his.PsnNo
			data["mdtrt_id"] = his.Number
			data["doctor"] = roles.UserName
			data["department"] = department.Name
			data["org_name"] = miConfig.OrgName
			data["med_type"] = strconv.FormatInt(reg_type, 10)
			data["doctor_id"] = doctor_info.DoctorNumber
			data["new_doctor_name"] = doctor_info.UserName
			data["fixmedins_code"] = miConfig.Code
			data["insuplc_admdvs"] = his.InsuplcAdmdvs
			data["mdtrtarea_admvs"] = miConfig.MdtrtareaAdmvs
			data["secret_key"] = miConfig.SecretKey
			data["sick_code"] = sickConfig.CountryCode
			data["sick_name"] = sickConfig.ClassName
			data["url"] = miConfig.Url
			data["ak"] = miConfig.AccessKey
			data["begin_time"] = begin_time
			data["cainfo"] = miConfig.Cainfo

			data["dept"] = strconv.FormatInt(department.ID, 10)
			data["config"] = config
			bytesData, _ := json.Marshal(data)

			var req *http.Request
			if miConfig.MdtrtareaAdmvs == "320921" {
				req, _ = http.NewRequest("POST", "http://192.168.2.110:9532/"+"jsyb/2203", bytes.NewReader(bytesData))

				//api = "http://192.168.2.110:9532/" + "jsyb/readcard?" + "fixmedins_code=" + miConfig.Code + "&secret_key=" + miConfig.SecretKey + "&ak=" + miConfig.AccessKey + "&org_name=" + miConfig.OrgName + "&doctor=" + roles.UserName +
				//	"&insuplc_admdvs=" + miConfig.InsuplcAdmdvs + "&mdtrtarea_admvs=" + miConfig.MdtrtareaAdmvs + "&secret_key=" + miConfig.SecretKey + "&url=" + miConfig.Url + "&cainfo=" + miConfig.Cainfo

			} else {
				req, _ = http.NewRequest("POST", "http://192.168.5.251:9532/"+"jsyb/2203", bytes.NewReader(bytesData))

			}

			resp, _ := client.Do(req)
			defer resp.Body.Close()
			body, ioErr := ioutil.ReadAll(resp.Body)
			if ioErr != nil {
				utils.ErrorLog("接口返回数据读取失败: %v", ioErr)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}
			var respJSON map[string]interface{}
			if err := json.Unmarshal([]byte(body), &respJSON); err != nil {
				utils.ErrorLog("接口返回数据解析JSON失败: %v", err)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}

			respJSON = respJSON["data"].(map[string]interface{})["pre"].(map[string]interface{})
			userJSONBytes, _ := json.Marshal(respJSON)
			fmt.Println("log")
			fmt.Println(string(userJSONBytes))

			if err := json.Unmarshal(userJSONBytes, &ressix10265); err != nil {
				utils.ErrorLog("解析失败:%v", err)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}
			res2.InfRefmsgid = ressix10265.InfRefmsgid
			res2.Output = ressix10265.Output
			res2.ErrMsg = ressix10265.ErrMsg
			res2.Cainfo = ressix10265.Cainfo
			res2.WarnMsg = ressix10265.WarnMsg
			infocode, _ := strconv.ParseInt(ressix10265.Infcode, 10, 64)
			res2.Infcode = infocode

		} else if miConfig.MdtrtareaAdmvs == "350500" {
			result, requestLog, _ = service.FJyb2203(his.PsnNo, his.Number, doctor_info.UserName, department.Name, miConfig.OrgName, strconv.FormatInt(reg_type, 10), doctor_info.DoctorNumber, miConfig.Code, his.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey, sickConfig.ContentCode, sickConfig.ClassName, roles.UserName, config, begin_time, doctor_info.UserName, roles.UserName, miConfig.Url, miConfig.Code, miConfig.AppSecret, miConfig.SignKey, miConfig.EncKey)
			saveLog(result, requestLog, "2203", "上传就诊信息")
			var respJSON2 map[string]interface{}
			if err := json.Unmarshal([]byte(string(result)), &respJSON2); err != nil {
				utils.ErrorLog("接口返回数据解析JSON失败: %v", err)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}
			userJSONBytes2, _ := json.Marshal(respJSON2)
			if err := json.Unmarshal(userJSONBytes2, &res2); err != nil {
				utils.ErrorLog("解析失败:%v", err)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}
		} else {
			if miConfig.MdtrtareaAdmvs == "440781" { //
				result, requestLog = service.Gdyb2203A(his.PsnNo, his.Number, doctor_info.UserName, department.Name, miConfig.OrgName, strconv.FormatInt(reg_type, 10), doctor_info.DoctorNumber, miConfig.Code, his.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey, sickConfig.ContentCode, sickConfig.ClassName, roles.UserName, config, begin_time)
			} else {
				if miConfig.Code == "H15049901371" {
					//赤峰地区国家医保医疗类别
					//职工透析:医疗类别选特殊情况门诊990502
					//居民定额血透门慢: 医疗类别选门诊慢病140104
					var med_type string
					if his.Insutype == "390" {
						if reg_type == 14 {
							med_type = "9933"
						} else if reg_type == 11 {
							med_type = "11"

						}
					} else if his.Insutype == "310" {
						if reg_type == 14 {
							med_type = "990502"
						} else if reg_type == 11 {
							med_type = "11"
						}
					}
					result, requestLog = service.Gdyb2203A(his.PsnNo, his.Number, doctor_info.UserName, department.Name, miConfig.OrgName, med_type, doctor_info.DoctorNumber, miConfig.Code, his.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey, sickConfig.ContentCode, sickConfig.ClassName, roles.UserName, config, begin_time)

				} else {
					result, requestLog = service.Gdyb2203(his.PsnNo, his.Number, doctor_info.UserName, department.Name, miConfig.OrgName, strconv.FormatInt(reg_type, 10), doctor_info.DoctorNumber, miConfig.Code, his.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey, sickConfig.ContentCode, sickConfig.ClassName, roles.UserName, config, begin_time)

				}
			}

			saveLog(result, requestLog, "2203", "上传就诊信息")
			var respJSON2 map[string]interface{}
			if err := json.Unmarshal([]byte(string(result)), &respJSON2); err != nil {
				utils.ErrorLog("接口返回数据解析JSON失败: %v", err)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}
			userJSONBytes2, _ := json.Marshal(respJSON2)
			if miConfig.Code == "H15049901371" {
				if err := json.Unmarshal(userJSONBytes2, &ressix10265); err != nil {
					utils.ErrorLog("解析失败:%v", err)
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
					return
				}
				res2.InfRefmsgid = ressix10265.InfRefmsgid
				res2.Output = ressix10265.Output
				res2.ErrMsg = ressix10265.ErrMsg
				res2.Cainfo = ressix10265.Cainfo
				res2.WarnMsg = ressix10265.WarnMsg
				infocode, _ := strconv.ParseInt(ressix10265.Infcode, 10, 64)
				res2.Infcode = infocode
			} else {
				if err := json.Unmarshal(userJSONBytes2, &res2); err != nil {
					utils.ErrorLog("解析失败:%v", err)
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
					return
				}
			}
		}

		if res2.Infcode != 0 {
			adminUser := c.GetAdminUserInfo()
			errlog := &models.HisOrderError{
				UserOrgId:  adminUser.CurrentOrgId,
				Ctime:      time.Now().Unix(),
				Mtime:      time.Now().Unix(),
				ErrMsg:     res2.ErrMsg,
				Status:     1,
				PatientId:  id,
				RecordTime: recordDateTime,
				Stage:      3,
			}
			service.CreateErrMsgLog(errlog)
			c.ServeSuccessJSON(map[string]interface{}{
				"failed_code": -10,
				"msg":         res2.ErrMsg,
			})
			return

		} else {
			his.Diagnosis = diagnosis_id
			his.SickType = sickConfig.ID
			//var p_type int64
			//if reg_type == 1111 || reg_type == 1112 {
			//	p_type = 11
			//
			//}
			his.PType = fmt.Sprintf("%d", reg_type)
			service.UpdateHisPatientThree(&his)

			data := make(map[string]interface{})
			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)))
				}
				//prescriptions, _ = service.GetNewHisPrescriptionTwo(adminUser.CurrentOrgId, his_patient_id, recordDateTime, reg_type)
				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()
				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, id, recordStartTime, recordEndTime, reg_type)
				data["pre"] = prescriptions

			}

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

			data["psn_no"] = his.PsnNo
			data["mdtrt_id"] = his.Number
			data["chrg_bchno"] = chrg_bchno
			data["org_name"] = miConfig.OrgName
			data["doctor"] = doctor_info.UserName
			data["doctor_id"] = doctor_info.DoctorNumber
			data["dept"] = strconv.FormatInt(patientPrescription.Departments, 10)
			data["fixmedins_code"] = miConfig.Code
			data["opter"] = roles.UserName
			data["dept_code"] = department.Number
			data["insuplc_admdvs"] = his.InsuplcAdmdvs
			data["mdtrtarea_admvs"] = miConfig.MdtrtareaAdmvs
			data["secret_key"] = miConfig.SecretKey
			data["balance_accounts_type"] = strconv.FormatInt(his.BalanceAccountsType, 10)
			data["url"] = miConfig.Url
			data["ak"] = miConfig.AccessKey
			data["new_doctor_name"] = patientPrescription.Doctor
			data["diag_code"] = sickConfig.CountryCode
			data["cainfo"] = miConfig.Cainfo

			var ids []int64

			for _, item := range prescriptions {
				ids = append(ids, item.ID)
			}
			config, _ := service.GetMedicalInsuranceConfig(adminUser.CurrentOrgId)
			if config.IsOpen == 1 { //对接了医保,走医保流程
				var res ResultFour
				var resFour10265 ResultFour10265

				if miConfig.MdtrtareaAdmvs == "421300" {

					bytesData, _ := json.Marshal(data)
					req, _ := http.NewRequest("POST", "http://192.168.124.4:9532/"+"hbyb/2204", bytes.NewReader(bytesData))
					resp, _ := client.Do(req)
					defer resp.Body.Close()
					body, ioErr := ioutil.ReadAll(resp.Body)
					if ioErr != nil {
						utils.ErrorLog("接口返回数据读取失败: %v", ioErr)
						c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
						return
					}
					var respJSON map[string]interface{}
					if err := json.Unmarshal([]byte(body), &respJSON); err != nil {
						utils.ErrorLog("接口返回数据解析JSON失败: %v", err)
						c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
						return
					}

					respJSON = respJSON["data"].(map[string]interface{})["pre"].(map[string]interface{})
					userJSONBytes, _ := json.Marshal(respJSON)
					fmt.Println("log")
					fmt.Println(string(userJSONBytes))
					if err := json.Unmarshal(userJSONBytes, &res); err != nil {
						utils.ErrorLog("解析失败:%v", err)
						c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
						return
					}

				} else if miConfig.MdtrtareaAdmvs == "320921" || miConfig.MdtrtareaAdmvs == "320982" {
					result3101 := Check3101(c, id, his_patient_id, admin_user_id, "2", record_time, prescriptions)
					if result3101.Infcode == "0" {
						if len(result3101.Output.Result) > 0 {
							var errMsgs []string
							for _, item := range result3101.Output.Result {
								errMsgs = append(errMsgs, item.VolaCont)

							}
							c.ServeSuccessJSON(map[string]interface{}{
								"failed_code": -10,
								"msg":         errMsgs,
							})
							return
						}
					}
					bytesData, _ := json.Marshal(data)
					var req *http.Request
					if miConfig.MdtrtareaAdmvs == "320921" {
						req, _ = http.NewRequest("POST", "http://192.168.2.110:9532/"+"jsyb/2204", bytes.NewReader(bytesData))

					} else {
						req, _ = http.NewRequest("POST", "http://192.168.5.251:9532/"+"jsyb/2204", bytes.NewReader(bytesData))
					}

					resp, _ := client.Do(req)
					defer resp.Body.Close()
					body, ioErr := ioutil.ReadAll(resp.Body)
					if ioErr != nil {
						utils.ErrorLog("接口返回数据读取失败: %v", ioErr)
						c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
						return
					}
					var respJSON map[string]interface{}
					if err := json.Unmarshal([]byte(body), &respJSON); err != nil {
						utils.ErrorLog("接口返回数据解析JSON失败: %v", err)
						c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
						return
					}

					respJSON = respJSON["data"].(map[string]interface{})["pre"].(map[string]interface{})
					userJSONBytes, _ := json.Marshal(respJSON)
					fmt.Println("log")
					fmt.Println(string(userJSONBytes))
					if err := json.Unmarshal(userJSONBytes, &resFour10265); err != nil {
						utils.ErrorLog("解析失败:%v", err)
						c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
						return
					}
					res.InfRefmsgid = resFour10265.InfRefmsgid
					res.Output = resFour10265.Output
					res.ErrMsg = resFour10265.ErrMsg
					res.Cainfo = resFour10265.Cainfo
					res.WarnMsg = resFour10265.WarnMsg
					infocode, _ := strconv.ParseInt(resFour10265.Infcode, 10, 64)
					res.Infcode = infocode

				} else if miConfig.MdtrtareaAdmvs == "350500" {

					result, request_log, _ := service.FJyb2204(his.PsnNo, his.Number, prescriptions, chrg_bchno, miConfig.OrgName, roles.UserName, strconv.FormatInt(patientPrescription.Departments, 10), miConfig.Code, department.Number, strconv.FormatInt(roles.AdminUserId, 10), his.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey, strconv.FormatInt(his.BalanceAccountsType, 10), roles.UserName, miConfig.Url, miConfig.Code, miConfig.AppSecret, miConfig.SignKey, miConfig.EncKey, sickConfig.CountryCode)
					var dat map[string]interface{}
					if err := json.Unmarshal([]byte(result), &dat); err == nil {
						fmt.Println(dat)
					} else {
						fmt.Println(err)
					}
					saveLog(result, request_log, "2204", "上传费用明细")
					userJSONBytes, _ := json.Marshal(dat)

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

					res.InfRefmsgid = resFour10265.InfRefmsgid
					res.Output = resFour10265.Output
					res.ErrMsg = resFour10265.ErrMsg
					res.Cainfo = resFour10265.Cainfo
					res.WarnMsg = resFour10265.WarnMsg
					infocode, _ := strconv.ParseInt(resFour10265.Infcode, 10, 64)
					res.Infcode = infocode

				} else {

					if miConfig.Code == "H15049901371" {
						result, request_log := service.Gdyb2204(his.PsnNo, his.Number, prescriptions, chrg_bchno, miConfig.OrgName, roles.UserName, strconv.FormatInt(patientPrescription.Departments, 10), miConfig.Code, department.Number, strconv.FormatInt(roles.AdminUserId, 10), his.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey, strconv.FormatInt(his.BalanceAccountsType, 10), patientPrescription.DoctorId, sickConfig.CountryCode)
						var dat map[string]interface{}
						if err := json.Unmarshal([]byte(result), &dat); err == nil {
							fmt.Println(dat)
						} else {
							fmt.Println(err)
						}
						saveLog(result, request_log, "2204", "上传费用明细")
						userJSONBytes, _ := json.Marshal(dat)

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

						res.InfRefmsgid = resFour10265.InfRefmsgid
						res.Output = resFour10265.Output
						res.ErrMsg = resFour10265.ErrMsg
						res.Cainfo = resFour10265.Cainfo
						res.WarnMsg = resFour10265.WarnMsg
						infocode, _ := strconv.ParseInt(resFour10265.Infcode, 10, 64)
						res.Infcode = infocode

					} else {
						result, request_log := service.Gdyb2204(his.PsnNo, his.Number, prescriptions, chrg_bchno, miConfig.OrgName, roles.UserName, strconv.FormatInt(patientPrescription.Departments, 10), miConfig.Code, department.Number, strconv.FormatInt(roles.AdminUserId, 10), his.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey, strconv.FormatInt(his.BalanceAccountsType, 10), patientPrescription.DoctorId, sickConfig.CountryCode)
						var dat map[string]interface{}
						if err := json.Unmarshal([]byte(result), &dat); err == nil {
							fmt.Println(dat)
						} else {
							fmt.Println(err)
						}
						saveLog(result, request_log, "2204", "上传费用明细")
						userJSONBytes, _ := json.Marshal(dat)

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

					}

				}

				if res.Infcode == 0 {
					order := &models.HisOrder{
						UserOrgId:             adminUser.CurrentOrgId,
						HisPatientId:          his.ID,
						PatientId:             his.PatientId,
						SettleAccountsDate:    recordDateTime,
						MdtrtId:               his.Number,
						PsnNo:                 his.PsnNo,
						MedType:               strconv.FormatInt(reg_type, 10),
						Ctime:                 time.Now().Unix(),
						Mtime:                 time.Now().Unix(),
						Status:                1,
						Number:                chrg_bchno,
						Infcode:               res.Infcode,
						WarnMsg:               res.WarnMsg,
						Cainfo:                res.Cainfo,
						ErrMsg:                res.ErrMsg,
						RespondTime:           res.RefmsgTime,
						InfRefmsgid:           res.InfRefmsgid,
						OrderStatus:           1,
						PayWay:                pay_way,
						PayPrice:              pay_price,
						PayCardNo:             pay_card_no,
						DiscountPrice:         discount_price,
						PreferentialPrice:     preferential_price,
						RealityPrice:          reality_price,
						FoundPrice:            found_price,
						MedicalInsurancePrice: medical_insurance_price,
						PrivatePrice:          private_price,
						IsMedicineInsurance:   1,
						SettleType:            settle_accounts_type,
						SettleStartTime:       start_time,
						SettleEndTime:         end_time,
						Creator:               roles.AdminUserId,
						Modify:                roles.AdminUserId,
						FaPiaoNumber:          fapiao_number,
						FaPiaoCode:            fapiao_code,
						PType:                 2,
						Diagnosis:             diagnosis_id,
					}
					err = service.CreateOrder(order)
					if err != nil {
						c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeCreatePreOrderException)
						return
					}

					for _, item := range res.Output.Result {
						temp := strings.Split(item.FeedetlSn, "-")
						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.FeedetlSn,
							UploadDate:       time.Now().Unix(),
							AdviceId:         advice_id,
							DetItemFeeSumamt: item.DetItemFeeSumamt,
							Cnt:              item.Cnt,
							Pric:             float64(item.Pric),
							PatientId:        his.PatientId,
							PricUplmtAmt:     item.PricUplmtAmt,
							SelfpayProp:      item.SelfpayProp,
							FulamtOwnpayAmt:  item.FulamtOwnpayAmt,
							OverlmtAmt:       item.OverlmtAmt,
							PreselfpayAmt:    item.PreselfpayAmt,
							BasMednFlag:      item.BasMednFlag,
							MedChrgitmType:   item.MedChrgitmType,
							HiNegoDrugFlag:   item.HiNegoDrugFlag,
							Status:           1,
							Memo:             item.Memo,
							Mtime:            time.Now().Unix(),
							InscpScpAmt:      item.InscpScpAmt,
							DrtReimFlag:      item.DrtReimFlag,
							Ctime:            time.Now().Unix(),
							ListSpItemFlag:   item.ListSpItemFlag,
							ChldMedcFlag:     item.ChldMedcFlag,
							LmtUsedFlag:      item.LmtUsedFlag,
							ChrgitmLv:        item.ChrgitmLv,
							UserOrgId:        adminUser.CurrentOrgId,
							HisPatientId:     his.ID,
							OrderId:          order.ID,
							ProjectId:        project_id,
							Type:             types,
						}
						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 {
								cnt, _ := strconv.ParseFloat(subItem.Count, 64)

								total = total + (subItem.Price * cnt)
							}
						}
					}

					for _, item := range prescriptions {
						for _, subItem := range item.HisAdditionalCharge {
							total = total + (subItem.Price * float64(subItem.Count))
						}
					}
					var allTotal string
					if adminUser.CurrentOrgId == 9919 {

						allTotal = fmt.Sprintf("%.4f", total)

					} else {

						allTotal = fmt.Sprintf("%.4f", total)

					}

					if res.Infcode == 0 {
						var rf []*ResultFive
						json.Unmarshal([]byte(his.Iinfo), &rf)
						chrg_bchno := chrg_bchno
						cert_no := his.Certno

						var insutypes []string

						var insutype string
						var is390 int = 0
						var is310 int = 0

						for _, item := range rf {
							if (item.Insutype == "390" && item.PsnInsuStas == "1") || (item.Insutype == "310" && item.PsnInsuStas == "1") {
								insutypes = append(insutypes, item.Insutype)
							}
						}

						if len(insutypes) == 1 {
							insutype = insutypes[0]
						} else {
							for _, i := range insutypes {
								if i == "390" {
									is390 = 1
								}

								if i == "310" {
									is310 = 1
								}
							}
						}
						if is390 == 1 {
							insutype = "390"
						}

						if is310 == 1 {
							insutype = "310"
						}

						if len(insutypes) == 0 {
							insutype = "310"
						}

						if len(insutypes) == 2 {
							insutype = strconv.FormatInt(his.SocialType, 10)
						}

						insutype = strconv.FormatInt(his.SocialType, 10)
						//insutype = "390"
						if his.IdCardType == 1 {
							// cert_no = his.MedicalInsuranceNumber
							cert_no = his.Certno

						} else {

							cert_no = his.Certno

						}
						var res ResultSeven
						var resSeven10265 ResultSeven10265

						var src_resquest string
						var result2 string
						var acct_used_flag string
						fmt.Println("pay_way")
						fmt.Println(pay_way)
						fmt.Println("pay_way")

						if pay_way == 4 {
							acct_used_flag = "1"
						} else {
							acct_used_flag = "0"
						}
						if miConfig.MdtrtareaAdmvs == "421300" {

							api := "http://192.168.124.4:9532/" + "hbyb/2207?psn_no=" + his.PsnNo + "&mdtrt_id=" +
								his.Number + "&chrg_bchno=" + chrg_bchno + "&org_name=" + miConfig.OrgName +
								"&doctor=" + roles.UserName + "&fixmedins_code=" + miConfig.Code +
								"&insuplc_admdvs=" + his.InsuplcAdmdvs + "&mdtrtarea_admvs=" + miConfig.MdtrtareaAdmvs +
								"&secret_key=" + miConfig.SecretKey + "&id_card_type=" + strconv.FormatInt(his.IdCardType, 10) +
								"&certificates=" + strconv.FormatInt(his.IdType, 10) + "&cert_no=" + cert_no +
								"&insutype=" + insutype + "&total=" + allTotal + "&med_type=" + strconv.FormatInt(reg_type, 10) + "&acct_used_flag=" + acct_used_flag

							resp, requestErr := http.Get(api)
							if requestErr != nil {
								c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
								return
							}

							body, ioErr := ioutil.ReadAll(resp.Body)
							if ioErr != nil {
								utils.ErrorLog("接口返回数据读取失败: %v", ioErr)
								c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
								return
							}
							var respJSON map[string]interface{}
							if err := json.Unmarshal([]byte(string(body)), &respJSON); err != nil {
								utils.ErrorLog("接口返回数据解析JSON失败: %v", err)
								c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
								return
							}

							respJSON = respJSON["data"].(map[string]interface{})["pre"].(map[string]interface{})
							result, _ := json.Marshal(respJSON)

							if miConfig.Code == "H15049901371" {
								if err := json.Unmarshal([]byte(result), &resSeven10265); err != nil {
									utils.ErrorLog("解析失败:%v", err)
									c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
									return
								}

								res.InfRefmsgid = resSeven10265.InfRefmsgid
								res.Output = resSeven10265.Output
								res.ErrMsg = resSeven10265.ErrMsg
								res.Cainfo = resSeven10265.Cainfo
								res.WarnMsg = resSeven10265.WarnMsg
								infocode, _ := strconv.ParseInt(resSeven10265.Infcode, 10, 64)
								res.Infcode = infocode

							} else {

								if err := json.Unmarshal([]byte(result), &res); err != nil {
									utils.ErrorLog("解析失败:%v", err)
									c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
									return
								}

							}

						} else if miConfig.MdtrtareaAdmvs == "320921" || miConfig.MdtrtareaAdmvs == "320982" {
							psn_info, _ := service.GetPsnByPatientId(his.PatientId)
							psn_info.VerifyNumber = strings.Replace(psn_info.VerifyNumber, "+", "%2B", -1)
							bas := strings.Split(psn_info.CardInfo, "|")
							if his.IdCardType == 1 {
								cert_no = bas[2]
							} else if his.IdCardType == 3 {
								cert_no = his.Certno
								psn_info.VerifyNumber = his.Certno + "|" + psn_info.VerifyNumber
							} else if his.IdCardType == 4 {
								cert_no = his.Certno
								psn_info.VerifyNumber = token
							}
							var api string
							if miConfig.MdtrtareaAdmvs == "320921" {
								api = "http://192.168.2.110:9532/" + "jsyb/2207?psn_no=" + his.PsnNo + "&mdtrt_id=" +
									his.Number + "&chrg_bchno=" + chrg_bchno + "&org_name=" + miConfig.OrgName +
									"&doctor=" + roles.UserName + "&fixmedins_code=" + miConfig.Code +
									"&insuplc_admdvs=" + his.InsuplcAdmdvs + "&mdtrtarea_admvs=" + miConfig.MdtrtareaAdmvs +
									"&secret_key=" + miConfig.SecretKey + "&id_card_type=" + strconv.FormatInt(his.IdCardType, 10) +
									"&certificates=" + strconv.FormatInt(his.IdType, 10) + "&cert_no=" + cert_no +
									"&insutype=" + insutype + "&total=" + allTotal + "&med_type=" + strconv.FormatInt(reg_type, 10) + "&acct_used_flag=" + acct_used_flag + "&url=" + miConfig.Url + "&ak=" + miConfig.AccessKey + "&verify_number=" + psn_info.VerifyNumber + "&cainfo=" + miConfig.Cainfo
							} else {
								api = "http://192.168.5.251:9532/" + "jsyb/2207?psn_no=" + his.PsnNo + "&mdtrt_id=" +
									his.Number + "&chrg_bchno=" + chrg_bchno + "&org_name=" + miConfig.OrgName +
									"&doctor=" + roles.UserName + "&fixmedins_code=" + miConfig.Code +
									"&insuplc_admdvs=" + his.InsuplcAdmdvs + "&mdtrtarea_admvs=" + miConfig.MdtrtareaAdmvs +
									"&secret_key=" + miConfig.SecretKey + "&id_card_type=" + strconv.FormatInt(his.IdCardType, 10) +
									"&certificates=" + strconv.FormatInt(his.IdType, 10) + "&cert_no=" + cert_no +
									"&insutype=" + insutype + "&total=" + allTotal + "&med_type=" + strconv.FormatInt(reg_type, 10) + "&acct_used_flag=" + acct_used_flag + "&url=" + miConfig.Url + "&ak=" + miConfig.AccessKey + "&verify_number=" + psn_info.VerifyNumber + "&cainfo=" + miConfig.Cainfo

							}

							resp, requestErr := http.Get(api)
							if requestErr != nil {
								c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
								return
							}
							body, ioErr := ioutil.ReadAll(resp.Body)
							if ioErr != nil {
								utils.ErrorLog("接口返回数据读取失败: %v", ioErr)
								c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
								return
							}
							var respJSON map[string]interface{}
							if err := json.Unmarshal([]byte(string(body)), &respJSON); err != nil {
								utils.ErrorLog("接口返回数据解析JSON失败: %v", err)
								c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
								return
							}

							respJSON = respJSON["data"].(map[string]interface{})["pre"].(map[string]interface{})
							result, _ := json.Marshal(respJSON)

							if err := json.Unmarshal([]byte(result), &resSeven10265); err != nil {
								utils.ErrorLog("解析失败:%v", err)
								c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
								return
							}

							res.InfRefmsgid = resSeven10265.InfRefmsgid
							res.Output = resSeven10265.Output
							res.ErrMsg = resSeven10265.ErrMsg
							res.Cainfo = resSeven10265.Cainfo
							res.WarnMsg = resSeven10265.WarnMsg
							infocode, _ := strconv.ParseInt(resSeven10265.Infcode, 10, 64)
							res.Infcode = infocode

						} else if miConfig.MdtrtareaAdmvs == "350500" {
							psn_info, _ := service.GetPsnByPatientId(his.PatientId)
							var cert_no string
							if his.IdCardType == 1 {
								cert_no = strings.Split(psn_info.CardInfo, "|")[0]
							}
							fmt.Println(cert_no)
							result2, src_resquest, _ = service.FJyb2207(his.PsnNo, his.Number, chrg_bchno, cert_no, insutype, allTotal, miConfig.OrgName, roles.UserName, miConfig.Code, his.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey, strconv.FormatInt(reg_type, 10), his.IdCardType, tempOrder.FulamtOwnpayAmt, tempOrder.OverlmtSelfPay, tempOrder.PreselfpayAmt, tempOrder.InscpScpAmt, his.IdType, acct_used_flag, miConfig.Url, miConfig.Code, miConfig.AppSecret, miConfig.SignKey, miConfig.EncKey)

							//result2, src_resquest = service.Gdyb2207(his.PsnNo, his.Number, chrg_bchno, cert_no, insutype, allTotal, miConfig.OrgName, roles.UserName, miConfig.Code, miConfig.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey, strconv.FormatInt(reg_type, 10), his.IdCardType, 0, 0, 0, 0, his.IdType, acct_used_flag)
							var dat map[string]interface{}
							if err := json.Unmarshal([]byte(result2), &dat); err == nil {
								fmt.Println(dat)
							} else {
								fmt.Println(err)
							}
							saveLog(result2, src_resquest, "2207", "结算")
							userJSONBytes, _ := json.Marshal(dat)
							if err := json.Unmarshal(userJSONBytes, &resSeven10265); err != nil {
								utils.ErrorLog("解析失败:%v", err)
								c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
								return
							}

							res.InfRefmsgid = resSeven10265.InfRefmsgid
							res.Output = resSeven10265.Output
							res.ErrMsg = resSeven10265.ErrMsg
							res.Cainfo = resSeven10265.Cainfo
							res.WarnMsg = resSeven10265.WarnMsg
							infocode, _ := strconv.ParseInt(resSeven10265.Infcode, 10, 64)
							res.Infcode = infocode

						} else {
							if miConfig.Code == "H15049901371" {
								//赤峰地区国家医保医疗类别
								//职工透析:医疗类别选特殊情况门诊990502
								//居民定额血透门慢: 医疗类别选门诊慢病140104
								var med_type string
								if his.Insutype == "390" {
									if reg_type == 14 {
										med_type = "9933"
									} else if reg_type == 11 {
										med_type = "11"
									}
								} else if his.Insutype == "310" {
									if reg_type == 14 {
										med_type = "990502"
									} else if reg_type == 11 {
										med_type = "11"
									}
								}
								result2, src_resquest = service.Gdyb2207(his.PsnNo, his.Number, chrg_bchno, cert_no, insutype, allTotal, miConfig.OrgName, roles.UserName, miConfig.Code, his.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey, med_type, his.IdCardType, tempOrder.FulamtOwnpayAmt, tempOrder.OverlmtSelfPay, tempOrder.PreselfpayAmt, tempOrder.InscpScpAmt, his.IdType, acct_used_flag)
							} else {
								result2, src_resquest = service.Gdyb2207(his.PsnNo, his.Number, chrg_bchno, cert_no, insutype, allTotal, miConfig.OrgName, roles.UserName, miConfig.Code, his.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey, strconv.FormatInt(reg_type, 10), his.IdCardType, tempOrder.FulamtOwnpayAmt, tempOrder.OverlmtSelfPay, tempOrder.PreselfpayAmt, tempOrder.InscpScpAmt, his.IdType, acct_used_flag)
							}

							//result2, src_resquest = service.Gdyb2207(his.PsnNo, his.Number, chrg_bchno, cert_no, insutype, allTotal, miConfig.OrgName, roles.UserName, miConfig.Code, miConfig.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey, strconv.FormatInt(reg_type, 10), his.IdCardType, 0, 0, 0, 0, his.IdType, acct_used_flag)
							var dat map[string]interface{}
							if err := json.Unmarshal([]byte(result2), &dat); err == nil {
								fmt.Println(dat)
							} else {
								fmt.Println(err)
							}

							saveLog(result2, src_resquest, "2207", "结算")

							userJSONBytes, _ := json.Marshal(dat)
							if miConfig.Code == "H15049901371" {

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

								res.InfRefmsgid = resSeven10265.InfRefmsgid
								res.Output = resSeven10265.Output
								res.ErrMsg = resSeven10265.ErrMsg
								res.Cainfo = resSeven10265.Cainfo
								res.WarnMsg = resSeven10265.WarnMsg
								infocode, _ := strconv.ParseInt(resSeven10265.Infcode, 10, 64)
								res.Infcode = infocode

							} else {

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

							}

						}

						if res.Infcode != 0 {
							errlog := &models.HisOrderError{
								UserOrgId:  adminUser.CurrentOrgId,
								Ctime:      time.Now().Unix(),
								Mtime:      time.Now().Unix(),
								Number:     chrg_bchno,
								ErrMsg:     res.ErrMsg,
								Status:     1,
								PatientId:  id,
								RecordTime: recordDateTime,
								Stage:      6,
							}
							service.CreateErrMsgLog(errlog)
							c.ServeSuccessJSON(map[string]interface{}{
								"failed_code": -10,
								"msg":         res.ErrMsg,
							})
							return
						} else {
							order, _ := service.GetHisOrderTwo(adminUser.CurrentOrgId, chrg_bchno, id)
							order.OrderStatus = 2
							order.Status = 1
							order.MdtrtId = res.Output.Setlinfo.MdtrtID
							order.SetlId = res.Output.Setlinfo.SetlID
							order.PsnNo = res.Output.Setlinfo.PsnNo
							order.PsnName = res.Output.Setlinfo.PsnName
							order.PsnCertType = res.Output.Setlinfo.PsnCertType
							order.Certno = res.Output.Setlinfo.Certno
							order.Gend = res.Output.Setlinfo.Gend
							order.Naty = res.Output.Setlinfo.Naty
							order.Age = res.Output.Setlinfo.Age
							order.Insutype = res.Output.Setlinfo.Insutype
							order.PsnType = res.Output.Setlinfo.PsnType
							order.CvlservFlag = res.Output.Setlinfo.CvlservFlag
							order.SetlTime = res.Output.Setlinfo.SetlTime
							order.MdtrtCertType = res.Output.Setlinfo.MdtrtCertType
							if res.Output.Setlinfo.MedType == "140101" {
								order.MedType = "14"

							} else {
								order.MedType = res.Output.Setlinfo.MedType
							}
							if reg_type == 1112 {
								order.MedType = "1112"
							}
							if reg_type == 1111 {
								order.MedType = "1111"
							}
							order.MedfeeSumamt = res.Output.Setlinfo.MedfeeSumamt
							order.FulamtOwnpayAmt = res.Output.Setlinfo.FulamtOwnpayAmt
							order.OverlmtSelfPay = res.Output.Setlinfo.OverlmtSelfpay
							order.PreselfpayAmt = res.Output.Setlinfo.PreselfpayAmt
							order.InscpScpAmt = res.Output.Setlinfo.InscpScpAmt
							order.ActPayDedc = res.Output.Setlinfo.ActPayDedc
							order.HifpPay = res.Output.Setlinfo.HifpPay
							order.CvlservPay = res.Output.Setlinfo.CvlservPay
							order.PoolPropSelfpay = res.Output.Setlinfo.PoolPropSelfpay
							order.HifesPay = res.Output.Setlinfo.HifesPay
							order.HifobPay = res.Output.Setlinfo.HifobPay
							order.MafPay = res.Output.Setlinfo.MafPay
							order.HifmiPay = res.Output.Setlinfo.HifmiPay
							order.OthPay = res.Output.Setlinfo.OthPay
							order.FundPaySumamt = res.Output.Setlinfo.FundPaySumamt
							order.PsnPartAmt = res.Output.Setlinfo.PsnPartAmt
							order.AcctPay = res.Output.Setlinfo.AcctPay
							order.PsnCashPay = res.Output.Setlinfo.PsnCashPay
							order.HospPartAmt = res.Output.Setlinfo.HospPartAmt
							order.Balc = res.Output.Setlinfo.Balc
							order.AcctMulaidPay = res.Output.Setlinfo.AcctMulaidPay
							order.MedinsSetlId = res.Output.Setlinfo.MedinsSetlID
							order.ClrOptins = res.Output.Setlinfo.ClrOptins
							order.ClrType = res.Output.Setlinfo.ClrType
							order.ClrWay = res.Output.Setlinfo.ClrWay
							order.Creator = order.Creator
							order.Modify = roles.AdminUserId
							order.RequestLog = src_resquest
							setlDetail, _ := json.Marshal(res.Output.Setldetail)
							detailStr := string(setlDetail)
							order.SetlDetail = detailStr
							err := service.UpdataOrderStatusTwo(chrg_bchno, adminUser.CurrentOrgId)
							err = service.UpDateOrder(order)
							if err == nil {
								//判断是否使用了押金
								if dec_way == "true" {
									tmpstring := strconv.FormatInt(order.ID, 10)
									order.Decimal = decimal
									service.UpDateOrder(order)
									//扣押金
									errmsg = service.SpendDeposit(c.GetAdminUserInfo().CurrentOrgId, id, c.GetAdminUserInfo().AdminUser.Id, tmpstring, decimal)
									if errmsg != nil {
										c.ServeFailJsonSend(enums.ErrorCodeParamWrong, errmsg.Error())
										return
									}
								}

								c.ServeSuccessJSON(map[string]interface{}{
									"msg": "结算成功",
								})
							} else {
								c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeAmountAccountException)
								return
							}
						}
					} else {
						adminUser := c.GetAdminUserInfo()
						errlog := &models.HisOrderError{
							UserOrgId:  adminUser.CurrentOrgId,
							Ctime:      time.Now().Unix(),
							Mtime:      time.Now().Unix(),
							ErrMsg:     res.ErrMsg,
							Status:     1,
							PatientId:  id,
							RecordTime: recordDateTime,
							Stage:      4,
						}
						service.CreateErrMsgLog(errlog)

						c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeRegisterRepeatException)
						return
					}
				} else {
					adminUser := c.GetAdminUserInfo()
					errlog := &models.HisOrderError{
						UserOrgId:  adminUser.CurrentOrgId,
						Ctime:      time.Now().Unix(),
						Mtime:      time.Now().Unix(),
						ErrMsg:     res.ErrMsg,
						Status:     1,
						PatientId:  id,
						RecordTime: recordDateTime,
						Stage:      4,
					}
					service.CreateErrMsgLog(errlog)
					c.ServeSuccessJSON(map[string]interface{}{
						"failed_code": -10,
						"msg":         res.ErrMsg,
					})
					return
					//c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeCalOrderException)
					//return
				}
			}

		}

	} else if tempOrder.ID > 0 {
		if tempOrder.IsPre == 1 {
			allTotal := fmt.Sprintf("%.4f", tempOrder.MedfeeSumamt)
			var rf []*ResultFive
			json.Unmarshal([]byte(his.Iinfo), &rf)
			chrg_bchno := tempOrder.Number
			cert_no := his.Certno

			var insutypes []string

			var insutype string
			var is390 int = 0
			var is310 int = 0

			for _, item := range rf {
				if (item.Insutype == "390" && item.PsnInsuStas == "1") || (item.Insutype == "310" && item.PsnInsuStas == "1") {
					insutypes = append(insutypes, item.Insutype)
				}
			}

			if len(insutypes) == 1 {
				insutype = insutypes[0]
			} else {
				for _, i := range insutypes {
					if i == "390" {
						is390 = 1
					}

					if i == "310" {
						is310 = 1
					}
				}
			}
			if is390 == 1 {
				insutype = "390"
			}

			if is310 == 1 {
				insutype = "310"
			}

			if len(insutypes) == 0 {
				insutype = "310"
			}

			if len(insutypes) == 2 {
				insutype = strconv.FormatInt(his.SocialType, 64)
			}

			//insutype = "390"
			if his.IdCardType == 1 {
				// cert_no = his.MedicalInsuranceNumber
				cert_no = his.Certno

			} else {

				cert_no = his.Certno

			}
			var res ResultSeven
			var resSeven10265 ResultSeven10265
			var src_resquest string
			var result2 string
			var acct_used_flag string
			fmt.Println("pay_way")
			fmt.Println(pay_way)
			fmt.Println("pay_way")
			if pay_way == 4 {
				acct_used_flag = "1"
			} else {
				acct_used_flag = "0"
			}

			if miConfig.MdtrtareaAdmvs == "421300" {
				api := "http://192.168.124.4:9532/" + "hbyb/2207?psn_no=" + his.PsnNo + "&mdtrt_id=" +
					his.Number + "&chrg_bchno=" + chrg_bchno + "&org_name=" + miConfig.OrgName +
					"&doctor=" + roles.UserName + "&fixmedins_code=" + miConfig.Code +
					"&insuplc_admdvs=" + his.InsuplcAdmdvs + "&mdtrtarea_admvs=" + miConfig.MdtrtareaAdmvs +
					"&secret_key=" + miConfig.SecretKey + "&id_card_type=" + strconv.FormatInt(his.IdCardType, 10) +
					"&certificates=" + strconv.FormatInt(his.IdType, 10) + "&cert_no=" + cert_no +
					"&insutype=" + insutype + "&total=" + allTotal + "&med_type=" + strconv.FormatInt(reg_type, 10) + "&acct_used_flag=" + acct_used_flag

				resp, requestErr := http.Get(api)
				if requestErr != nil {
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
					return
				}

				body, ioErr := ioutil.ReadAll(resp.Body)
				if ioErr != nil {
					utils.ErrorLog("接口返回数据读取失败: %v", ioErr)
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
					return
				}
				var respJSON map[string]interface{}
				if err := json.Unmarshal([]byte(string(body)), &respJSON); err != nil {
					utils.ErrorLog("接口返回数据解析JSON失败: %v", err)
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
					return
				}

				respJSON = respJSON["data"].(map[string]interface{})["pre"].(map[string]interface{})
				result, _ := json.Marshal(respJSON)
				fmt.Println("log")
				fmt.Println(string(result))
				if err := json.Unmarshal([]byte(result), &res); err != nil {
					utils.ErrorLog("解析失败:%v", err)
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
					return
				}

			} else if miConfig.MdtrtareaAdmvs == "320921" || miConfig.MdtrtareaAdmvs == "320982" {
				psn_info, _ := service.GetPsnByPatientId(his.PatientId)
				psn_info.VerifyNumber = strings.Replace(psn_info.VerifyNumber, "+", "%2B", -1)

				//psn_info, _ := service.GetPsnByPatientId(id)
				bas := strings.Split(psn_info.CardInfo, "|")

				if his.IdCardType == 1 {
					cert_no = bas[2]
				} else {
					cert_no = bas[1]
				}

				//江苏地区国家医保医疗类别
				//职工透析:医疗类别选特殊情况门诊9933
				//居民血透门慢: 医疗类别选门诊慢病1402
				//var med_type string
				//if his.Insutype == "310" {
				//	if reg_type == 14 {
				//		med_type = "9933"
				//	} else if reg_type == 11 {
				//		med_type = "11"
				//
				//	}
				//} else if his.Insutype == "390" {
				//	if reg_type == 14 {
				//		med_type = "1402"
				//	} else if reg_type == 11 {
				//		med_type = "11"
				//	}
				//}

				var api string
				if miConfig.MdtrtareaAdmvs == "320921" {
					api = "http://192.168.2.110:9532/" + "jsyb/2207?psn_no=" + his.PsnNo + "&mdtrt_id=" +
						his.Number + "&chrg_bchno=" + chrg_bchno + "&org_name=" + miConfig.OrgName +
						"&doctor=" + roles.UserName + "&fixmedins_code=" + miConfig.Code +
						"&insuplc_admdvs=" + his.InsuplcAdmdvs + "&mdtrtarea_admvs=" + miConfig.MdtrtareaAdmvs +
						"&secret_key=" + miConfig.SecretKey + "&id_card_type=" + strconv.FormatInt(his.IdCardType, 10) +
						"&certificates=" + strconv.FormatInt(his.IdType, 10) + "&cert_no=" + cert_no +
						"&insutype=" + insutype + "&total=" + allTotal + "&med_type=" + tempOrder.MedType + "&acct_used_flag=" + acct_used_flag + "&url=" + miConfig.Url + "&ak=" + miConfig.AccessKey + "&verify_number=" + psn_info.VerifyNumber + "&cainfo=" + miConfig.Cainfo

					//req, _ = http.NewRequest("POST", "http://192.168.2.110:9532/"+"jsyb/2204", bytes.NewReader(bytesData))

				} else {
					//req, _ = http.NewRequest("POST", "http://192.168.5.251:9532/"+"jsyb/2204", bytes.NewReader(bytesData))
					api = "http://192.168.5.251:9532/" + "jsyb/2207?psn_no=" + his.PsnNo + "&mdtrt_id=" +
						his.Number + "&chrg_bchno=" + chrg_bchno + "&org_name=" + miConfig.OrgName +
						"&doctor=" + roles.UserName + "&fixmedins_code=" + miConfig.Code +
						"&insuplc_admdvs=" + his.InsuplcAdmdvs + "&mdtrtarea_admvs=" + miConfig.MdtrtareaAdmvs +
						"&secret_key=" + miConfig.SecretKey + "&id_card_type=" + strconv.FormatInt(his.IdCardType, 10) +
						"&certificates=" + strconv.FormatInt(his.IdType, 10) + "&cert_no=" + cert_no +
						"&insutype=" + insutype + "&total=" + allTotal + "&med_type=" + tempOrder.MedType + "&acct_used_flag=" + acct_used_flag + "&url=" + miConfig.Url + "&ak=" + miConfig.AccessKey + "&verify_number=" + psn_info.VerifyNumber + "&cainfo=" + miConfig.Cainfo

				}

				resp, requestErr := http.Get(api)
				if requestErr != nil {
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
					return
				}

				body, ioErr := ioutil.ReadAll(resp.Body)
				if ioErr != nil {
					utils.ErrorLog("接口返回数据读取失败: %v", ioErr)
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
					return
				}
				var respJSON map[string]interface{}
				if err := json.Unmarshal([]byte(string(body)), &respJSON); err != nil {
					utils.ErrorLog("接口返回数据解析JSON失败: %v", err)
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
					return
				}

				respJSON = respJSON["data"].(map[string]interface{})["pre"].(map[string]interface{})
				result, _ := json.Marshal(respJSON)
				fmt.Println("log")
				fmt.Println(string(result))
				if err := json.Unmarshal([]byte(result), &resSeven10265); err != nil {
					utils.ErrorLog("解析失败:%v", err)
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
					return
				}

				res.InfRefmsgid = resSeven10265.InfRefmsgid
				res.Output = resSeven10265.Output
				res.ErrMsg = resSeven10265.ErrMsg
				res.Cainfo = resSeven10265.Cainfo
				res.WarnMsg = resSeven10265.WarnMsg
				infocode, _ := strconv.ParseInt(resSeven10265.Infcode, 10, 64)
				res.Infcode = infocode

			} else if miConfig.MdtrtareaAdmvs == "350500" {
				psn_info, _ := service.GetPsnByPatientId(his.PatientId)
				var cert_no string
				if his.IdCardType == 1 {
					cert_no = strings.Split(psn_info.CardInfo, "|")[0]
				}
				fmt.Println(cert_no)

				result2, src_resquest, _ = service.FJyb2207(his.PsnNo, his.Number, chrg_bchno, cert_no, insutype, allTotal, miConfig.OrgName, roles.UserName, miConfig.Code, his.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey, strconv.FormatInt(reg_type, 10), his.IdCardType, tempOrder.FulamtOwnpayAmt, tempOrder.OverlmtSelfPay, tempOrder.PreselfpayAmt, tempOrder.InscpScpAmt, his.IdType, acct_used_flag, miConfig.Url, miConfig.Code, miConfig.AppSecret, miConfig.SignKey, miConfig.EncKey)
				var dat map[string]interface{}
				if err := json.Unmarshal([]byte(result2), &dat); err == nil {
					fmt.Println(dat)
				} else {
					fmt.Println(err)
				}
				saveLog(result2, src_resquest, "2207", "结算")
				userJSONBytes, _ := json.Marshal(dat)
				if err := json.Unmarshal(userJSONBytes, &res); err != nil {
					utils.ErrorLog("解析失败:%v", err)
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
					return
				}
			} else {

				var src_resquest string
				if miConfig.Code == "H15049901371" {
					//赤峰地区国家医保医疗类别
					//职工透析:医疗类别选特殊情况门诊990502
					//居民定额血透门慢: 医疗类别选门诊慢病140104
					var med_type string
					if his.Insutype == "390" {
						if reg_type == 14 {
							med_type = "9933"
						} else if reg_type == 11 {
							med_type = "11"
						}
					} else if his.Insutype == "310" {
						if reg_type == 14 {
							med_type = "990502"
						} else if reg_type == 11 {
							med_type = "11"
						}
					}
					result2, src_resquest = service.Gdyb2207(his.PsnNo, his.Number, chrg_bchno, cert_no, insutype, allTotal, miConfig.OrgName, roles.UserName, miConfig.Code, his.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey, med_type, his.IdCardType, tempOrder.FulamtOwnpayAmt, tempOrder.OverlmtSelfPay, tempOrder.PreselfpayAmt, tempOrder.InscpScpAmt, his.IdType, acct_used_flag)
				} else {
					result2, src_resquest = service.Gdyb2207(his.PsnNo, his.Number, chrg_bchno, cert_no, insutype, allTotal, miConfig.OrgName, roles.UserName, miConfig.Code, his.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey, strconv.FormatInt(reg_type, 10), his.IdCardType, tempOrder.FulamtOwnpayAmt, tempOrder.OverlmtSelfPay, tempOrder.PreselfpayAmt, tempOrder.InscpScpAmt, his.IdType, acct_used_flag)
				}

				var dat map[string]interface{}
				if err := json.Unmarshal([]byte(result2), &dat); err == nil {
					fmt.Println(dat)
				} else {
					fmt.Println(err)
				}
				saveLog(result2, src_resquest, "2207", "结算")
				userJSONBytes, _ := json.Marshal(dat)
				if miConfig.Code == "H15049901371" {

					if err := json.Unmarshal(userJSONBytes, &resSeven10265); err != nil {
						utils.ErrorLog("解析失败:%v", err)
						c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
						return
					}
					res.InfRefmsgid = resSeven10265.InfRefmsgid
					res.Output = resSeven10265.Output
					res.ErrMsg = resSeven10265.ErrMsg
					res.Cainfo = resSeven10265.Cainfo
					res.WarnMsg = resSeven10265.WarnMsg
					infocode, _ := strconv.ParseInt(resSeven10265.Infcode, 10, 64)
					res.Infcode = infocode

				} else {

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

				}
			}

			if res.Infcode != 0 {
				errlog := &models.HisOrderError{
					UserOrgId:  adminUser.CurrentOrgId,
					Ctime:      time.Now().Unix(),
					Mtime:      time.Now().Unix(),
					Number:     chrg_bchno,
					ErrMsg:     res.ErrMsg,
					Status:     1,
					PatientId:  id,
					RecordTime: recordDateTime,
					Stage:      6,
				}
				service.CreateErrMsgLog(errlog)
				c.ServeSuccessJSON(map[string]interface{}{
					"failed_code": -10,
					"msg":         res.ErrMsg,
				})
				return
			} else {

				order, _ := service.GetHisOrderTwo(adminUser.CurrentOrgId, chrg_bchno, id)
				order.OrderStatus = 2
				order.MdtrtId = res.Output.Setlinfo.MdtrtID
				order.SetlId = res.Output.Setlinfo.SetlID
				order.PsnNo = res.Output.Setlinfo.PsnNo
				order.PsnName = res.Output.Setlinfo.PsnName
				order.PsnCertType = res.Output.Setlinfo.PsnCertType
				order.Certno = res.Output.Setlinfo.Certno
				order.Gend = res.Output.Setlinfo.Gend
				order.Naty = res.Output.Setlinfo.Naty
				order.Age = res.Output.Setlinfo.Age
				order.Insutype = res.Output.Setlinfo.Insutype
				order.PsnType = res.Output.Setlinfo.PsnType
				order.CvlservFlag = res.Output.Setlinfo.CvlservFlag
				order.SetlTime = res.Output.Setlinfo.SetlTime
				order.MdtrtCertType = res.Output.Setlinfo.MdtrtCertType
				//order.MedType = res.Output.Setlinfo.MedType
				if reg_type == 1112 {
					order.MedType = "1112"
				}
				if reg_type == 1111 {
					order.MedType = "1111"
				}
				order.MedfeeSumamt = res.Output.Setlinfo.MedfeeSumamt
				order.FulamtOwnpayAmt = res.Output.Setlinfo.FulamtOwnpayAmt
				order.OverlmtSelfPay = res.Output.Setlinfo.OverlmtSelfpay
				order.PreselfpayAmt = res.Output.Setlinfo.PreselfpayAmt
				order.InscpScpAmt = res.Output.Setlinfo.InscpScpAmt
				order.ActPayDedc = res.Output.Setlinfo.ActPayDedc
				order.HifpPay = res.Output.Setlinfo.HifpPay
				order.CvlservPay = res.Output.Setlinfo.CvlservPay
				order.PoolPropSelfpay = res.Output.Setlinfo.PoolPropSelfpay
				order.HifesPay = res.Output.Setlinfo.HifesPay
				order.HifobPay = res.Output.Setlinfo.HifobPay
				order.MafPay = res.Output.Setlinfo.MafPay
				order.HifmiPay = res.Output.Setlinfo.HifmiPay
				order.OthPay = res.Output.Setlinfo.OthPay
				order.FundPaySumamt = res.Output.Setlinfo.FundPaySumamt
				order.PsnPartAmt = res.Output.Setlinfo.PsnPartAmt
				order.AcctPay = res.Output.Setlinfo.AcctPay
				order.PsnCashPay = res.Output.Setlinfo.PsnCashPay
				order.HospPartAmt = res.Output.Setlinfo.HospPartAmt
				order.Balc = res.Output.Setlinfo.Balc
				order.AcctMulaidPay = res.Output.Setlinfo.AcctMulaidPay
				order.MedinsSetlId = res.Output.Setlinfo.MedinsSetlID
				order.ClrOptins = res.Output.Setlinfo.ClrOptins
				order.ClrWay = res.Output.Setlinfo.ClrWay
				order.Creator = order.Creator
				order.Modify = roles.AdminUserId
				order.RequestLog = src_resquest
				order.Diagnosis = diagnosis_id
				setlDetail, _ := json.Marshal(res.Output.Setldetail)
				detailStr := string(setlDetail)
				order.SetlDetail = detailStr

				err := service.UpdataOrderStatusTwo(chrg_bchno, adminUser.CurrentOrgId)
				err = service.UpDateOrder(order)
				if err == nil {
					//判断是否使用了押金
					if dec_way == "true" {
						tmpstring := strconv.FormatInt(order.ID, 10)
						//扣押金
						order.Decimal = decimal
						service.UpDateOrder(order)

						errmsg = service.SpendDeposit(c.GetAdminUserInfo().CurrentOrgId, id, c.GetAdminUserInfo().AdminUser.Id, tmpstring, decimal)
						if errmsg != nil {
							c.ServeFailJsonSend(enums.ErrorCodeParamWrong, errmsg.Error())
							return
						}
					}

					c.ServeSuccessJSON(map[string]interface{}{
						"msg": "结算成功",
					})
				} else {
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeAmountAccountException)
					return
				}
			}
		}
	}
}

//func (c *HisApiController) GetPreUploadInfo() {
//	id, _ := c.GetInt64("id")
//	record_time := c.GetString("record_time")
//	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
//
//	var start_time int64
//	var end_time int64
//
//	data := make(map[string]interface{})
//	if settle_accounts_type == 1 { //日结
//		prescriptions, _ = service.GetHisPrescription(adminUser.CurrentOrgId, 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()
//		start_time = recordStartTime
//		theEndTime, err := time.ParseInLocation(timeLayout+" 15:04:05", end_time_str+" 00:00:00", loc)
//		if err != nil {
//			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
//			return
//		}
//		recordEndTime := theEndTime.Unix()
//		end_time = recordEndTime
//		prescriptions, _ = service.GetMonthHisPrescription(adminUser.CurrentOrgId, id, recordStartTime, recordEndTime)
//		data["pre"] = prescriptions
//
//	}
//
//	roles, _ := service.GetAdminUserInfoByID(adminUser.CurrentOrgId, admin_user_id)
//
//	his, _ := service.GetVMHisPatientInfo(adminUser.CurrentOrgId, id, recordDateTime)
//	timestamp := time.Now().Unix()
//	tempTime := time.Unix(timestamp, 0)
//	timeFormat := tempTime.Format("20060102150405")
//	chrgBchno := rand.Intn(100000) + 10000
//	chrg_bchno := timeFormat + strconv.FormatInt(int64(chrgBchno), 10) + strconv.FormatInt(his.PatientId, 10)
//	miConfig, _ := service.FindMedicalInsuranceInfo(adminUser.CurrentOrgId)
//	patientPrescription, _ := service.FindPatientPrescriptionInfo(adminUser.CurrentOrgId, id, recordDateTime)
//	department, _ := service.GetDepartMentDetail(patientPrescription.Departments)
//	strconv.FormatInt(his.PatientId, 10)
//	client := &http.Client{}
//	data["psn_no"] = his.PsnNo
//	data["mdtrt_id"] = his.Number
//	data["chrg_bchno"] = chrg_bchno
//	data["org_name"] = miConfig.OrgName
//	data["doctor"] = roles.UserName
//	data["doctor_id"] = strconv.FormatInt(roles.AdminUserId, 10)
//	data["dept"] = strconv.FormatInt(patientPrescription.Departments, 10)
//	data["fixmedins_code"] = miConfig.Code
//	data["dept_code"] = department.Number
//	data["insuplc_admdvs"] = miConfig.InsuplcAdmdvs
//	data["mdtrtarea_admvs"] = miConfig.MdtrtareaAdmvs
//	data["secret_key"] = miConfig.SecretKey
//	var ids []int64
//
//	for _, item := range prescriptions {
//		ids = append(ids, item.ID)
//	}
//	config, _ := service.GetMedicalInsuranceConfig(adminUser.CurrentOrgId)
//	if config.IsOpen == 1 { //对接了医保,走医保流程
//		bytesData, _ := json.Marshal(data)
//		req, _ := http.NewRequest("POST", "http://127.0.0.1:9532/"+"gdyb/five", bytes.NewReader(bytesData))
//		resp, _ := client.Do(req)
//		defer resp.Body.Close()
//		body, ioErr := ioutil.ReadAll(resp.Body)
//		if ioErr != nil {
//			utils.ErrorLog("接口返回数据读取失败: %v", ioErr)
//			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
//			return
//		}
//		var respJSON map[string]interface{}
//		if err := json.Unmarshal([]byte(body), &respJSON); err != nil {
//			utils.ErrorLog("接口返回数据解析JSON失败: %v", err)
//			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
//			return
//		}
//
//		respJSON = respJSON["data"].(map[string]interface{})["pre"].(map[string]interface{})
//		userJSONBytes, _ := json.Marshal(respJSON)
//		var res ResultFour
//		if err := json.Unmarshal(userJSONBytes, &res); err != nil {
//			utils.ErrorLog("解析失败:%v", err)
//			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
//			return
//		}
//
//		if res.Infcode == 0 {
//			order := &models.HisOrder{
//				UserOrgId:           adminUser.CurrentOrgId,
//				HisPatientId:        his.ID,
//				PatientId:           his.PatientId,
//				SettleAccountsDate:  recordDateTime,
//				Ctime:               time.Now().Unix(),
//				Mtime:               time.Now().Unix(),
//				Status:              1,
//				Number:              chrg_bchno,
//				Infcode:             res.Infcode,
//				WarnMsg:             res.WarnMsg,
//				Cainfo:              res.Cainfo,
//				ErrMsg:              res.ErrMsg,
//				RespondTime:         res.RefmsgTime,
//				InfRefmsgid:         res.InfRefmsgid,
//				OrderStatus:         1,
//				IsMedicineInsurance: 1,
//				SettleType:          settle_accounts_type,
//				SettleStartTime:     start_time,
//				SettleEndTime:       end_time,
//				Creator:             roles.ID,
//				Modify:              roles.ID,
//				PType:               2,
//			}
//			err = service.CreateOrder(order)
//			if err != nil {
//				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeCreatePreOrderException)
//				return
//			}
//
//			for _, item := range res.Output.Result {
//				temp := strings.Split(item.FeedetlSn, "-")
//				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.FeedetlSn,
//					UploadDate:       time.Now().Unix(),
//					AdviceId:         advice_id,
//					DetItemFeeSumamt: item.DetItemFeeSumamt,
//					Cnt:              item.Cnt,
//					Pric:             float64(item.Pric),
//					PatientId:        his.PatientId,
//					PricUplmtAmt:     item.PricUplmtAmt,
//					SelfpayProp:      item.SelfpayProp,
//					FulamtOwnpayAmt:  item.FulamtOwnpayAmt,
//					OverlmtAmt:       item.OverlmtAmt,
//					PreselfpayAmt:    item.PreselfpayAmt,
//					BasMednFlag:      item.BasMednFlag,
//					MedChrgitmType:   item.MedChrgitmType,
//					HiNegoDrugFlag:   item.HiNegoDrugFlag,
//					Status:           1,
//					Memo:             item.Memo,
//					Mtime:            time.Now().Unix(),
//					InscpScpAmt:      item.InscpScpAmt,
//					DrtReimFlag:      item.DrtReimFlag,
//					Ctime:            time.Now().Unix(),
//					ListSpItemFlag:   item.ListSpItemFlag,
//					ChldMedcFlag:     item.ChldMedcFlag,
//					LmtUsedFlag:      item.LmtUsedFlag,
//					ChrgitmLv:        item.ChrgitmLv,
//					UserOrgId:        adminUser.CurrentOrgId,
//					HisPatientId:     his.ID,
//					OrderId:          order.ID,
//					ProjectId:        project_id,
//					Type:             types,
//				}
//				service.CreateOrderInfo(info)
//
//			}
//			service.UpDatePrescriptionNumber(adminUser.CurrentOrgId, ids, chrg_bchno)
//			service.UpDatePrescriptionInfoNumber(adminUser.CurrentOrgId, patientPrescription.PatientId, 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))
//				}
//			}
//
//			allTotal := fmt.Sprintf("%.2f", total)
//			if res.Infcode == 0 {
//				var rf []*ResultFive
//				json.Unmarshal([]byte(his.Iinfo), &rf)
//				psn_no := his.PsnNo
//				mdtrt_id := his.Number
//				chrg_bchno := chrg_bchno
//				cert_no := his.Certno
//				insutype := rf[0].Insutype
//
//				if his.IdCardType == 1 {
//					cert_no = his.MedicalInsuranceNumber
//
//				} else {
//
//					cert_no = his.Certno
//
//				}
//
//				api := "http://127.0.0.1:9532/" + "gdyb/seven?cert_no=" + cert_no + "&insutype=" +
//					insutype + "&psn_no=" + psn_no + "&chrg_bchno=" + chrg_bchno + "&mdtrt_id=" + mdtrt_id +
//					"&total=" + allTotal + "&org_name=" + miConfig.OrgName + "&doctor=" + roles.UserName + "&fixmedins_code=" + miConfig.Code + "&insuplc_admdvs=" + miConfig.InsuplcAdmdvs + "&mdtrtarea_admvs=" + miConfig.MdtrtareaAdmvs + "&secret_key=" +
//					miConfig.SecretKey + "&med_type=" + strconv.FormatInt(patientPrescription.RegisterType, 10) + "&id_card_type=" + strconv.FormatInt(int64(his.IdCardType), 10)
//				resp, requestErr := http.Get(api)
//				if requestErr != nil {
//					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
//					return
//				}
//				defer resp.Body.Close()
//				body, ioErr := ioutil.ReadAll(resp.Body)
//				if ioErr != nil {
//					utils.ErrorLog("接口返回数据读取失败: %v", ioErr)
//					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
//					return
//				}
//				var respJSON map[string]interface{}
//				if err := json.Unmarshal([]byte(string(body)), &respJSON); err != nil {
//					utils.ErrorLog("接口返回数据解析JSON失败: %v", err)
//					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
//					return
//				}
//				fmt.Println(respJSON)
//				respJSON = respJSON["data"].(map[string]interface{})["pre"].(map[string]interface{})
//				userJSONBytes, _ := json.Marshal(respJSON)
//				var res ResultSeven
//				if err := json.Unmarshal(userJSONBytes, &res); err != nil {
//					utils.ErrorLog("解析失败:%v", err)
//					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
//					return
//				}
//				if res.Infcode != 0 {
//					errlog := &models.HisOrderError{
//						UserOrgId:  adminUser.CurrentOrgId,
//						Ctime:      time.Now().Unix(),
//						Mtime:      time.Now().Unix(),
//						Number:     chrg_bchno,
//						ErrMsg:     res.ErrMsg,
//						Status:     1,
//						PatientId:  id,
//						RecordTime: recordDateTime,
//						Stage:      7,
//					}
//					service.CreateErrMsgLog(errlog)
//					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeRegisterRepeatException)
//					return
//				} else {
//					order, _ := service.GetHisOrderTwo(adminUser.CurrentOrgId, chrg_bchno, id)
//					order.OrderStatus = 1
//					order.MdtrtId = res.Output.Setlinfo.MdtrtID
//					order.SetlId = res.Output.Setlinfo.SetlID
//					order.PsnNo = res.Output.Setlinfo.PsnNo
//					order.PsnName = res.Output.Setlinfo.PsnName
//					order.PsnCertType = res.Output.Setlinfo.PsnCertType
//					order.Certno = res.Output.Setlinfo.Certno
//					order.Gend = res.Output.Setlinfo.Gend
//					order.Naty = res.Output.Setlinfo.Naty
//					order.Age = res.Output.Setlinfo.Age
//					order.Insutype = res.Output.Setlinfo.Insutype
//					order.PsnType = res.Output.Setlinfo.PsnType
//					order.CvlservFlag = res.Output.Setlinfo.CvlservFlag
//					order.SetlTime = res.Output.Setlinfo.SetlTime
//					order.MdtrtCertType = res.Output.Setlinfo.MdtrtCertType
//					order.MedType = res.Output.Setlinfo.MedType
//					order.MedfeeSumamt = res.Output.Setlinfo.MedfeeSumamt
//					order.FulamtOwnpayAmt = res.Output.Setlinfo.FulamtOwnpayAmt
//					order.OverlmtSelfPay = res.Output.Setlinfo.OverlmtSelfpay
//					order.PreselfpayAmt = res.Output.Setlinfo.PreselfpayAmt
//					order.InscpScpAmt = res.Output.Setlinfo.InscpScpAmt
//					order.ActPayDedc = res.Output.Setlinfo.ActPayDedc
//					order.HifpPay = res.Output.Setlinfo.HifpPay
//					order.CvlservPay = res.Output.Setlinfo.CvlservPay
//					order.PoolPropSelfpay = res.Output.Setlinfo.PoolPropSelfpay
//					order.HifesPay = res.Output.Setlinfo.HifesPay
//					order.HifobPay = res.Output.Setlinfo.HifobPay
//					order.MafPay = res.Output.Setlinfo.MafPay
//					order.OthPay = res.Output.Setlinfo.OthPay
//					order.FundPaySumamt = res.Output.Setlinfo.FundPaySumamt
//					order.PsnPartAmt = res.Output.Setlinfo.PsnPartAmt
//					order.AcctPay = res.Output.Setlinfo.AcctPay
//					order.PsnCashPay = res.Output.Setlinfo.PsnCashPay
//					order.HospPartAmt = res.Output.Setlinfo.HospPartAmt
//					order.Balc = res.Output.Setlinfo.Balc
//					order.AcctMulaidPay = res.Output.Setlinfo.AcctMulaidPay
//					order.MedinsSetlId = res.Output.Setlinfo.MedinsSetlID
//					order.ClrOptins = res.Output.Setlinfo.ClrOptins
//					order.ClrWay = res.Output.Setlinfo.ClrWay
//					order.Creator = order.Creator
//					order.Modify = roles.ID
//					setlDetail, _ := json.Marshal(res.Output.Setldetail)
//					detailStr := string(setlDetail)
//					order.SetlDetail = detailStr
//					//err := service.UpdataOrderStatusTwo(chrg_bchno, adminUser.CurrentOrgId)
//					err = service.UpDateOrder(order)
//					if err == nil {
//						c.ServeSuccessJSON(map[string]interface{}{
//							"msg": "预结算成功",
//						})
//					} else {
//						c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeAmountAccountException)
//						return
//					}
//				}
//			} else {
//				adminUser := c.GetAdminUserInfo()
//				errlog := &models.HisOrderError{
//					UserOrgId:  adminUser.CurrentOrgId,
//					Ctime:      time.Now().Unix(),
//					Mtime:      time.Now().Unix(),
//					ErrMsg:     res.ErrMsg,
//					Status:     1,
//					PatientId:  id,
//					RecordTime: recordDateTime,
//					Stage:      4,
//				}
//				service.CreateErrMsgLog(errlog)
//
//				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeRegisterRepeatException)
//				return
//			}
//		} else {
//			adminUser := c.GetAdminUserInfo()
//			errlog := &models.HisOrderError{
//				UserOrgId:  adminUser.CurrentOrgId,
//				Ctime:      time.Now().Unix(),
//				Mtime:      time.Now().Unix(),
//				ErrMsg:     res.ErrMsg,
//				Status:     1,
//				PatientId:  id,
//				RecordTime: recordDateTime,
//				Stage:      4,
//			}
//			service.CreateErrMsgLog(errlog)
//			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeCalOrderException)
//			return
//		}
//
//	} else {
//		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 _, subItem := range item.HisAdditionalCharge {
//				total = total + (subItem.Price * float64(subItem.Count))
//			}
//		}
//
//		allTotal := fmt.Sprintf("%.2f", total)
//		totals, _ := strconv.ParseFloat(allTotal, 64)
//		order := &models.HisOrder{
//			UserOrgId:          adminUser.CurrentOrgId,
//			HisPatientId:       his.ID,
//			PatientId:          id,
//			SettleAccountsDate: recordDateTime,
//			Ctime:              time.Now().Unix(),
//			Mtime:              time.Now().Unix(),
//			Status:             1,
//			OrderStatus:        2,
//			Number:             chrg_bchno,
//			MedfeeSumamt:       totals,
//		}
//		err = service.CreateOrder(order)
//		if err != nil {
//			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeCreatePreOrderException)
//			return
//		}
//
//		var customs []*Custom
//		for _, item := range prescriptions {
//
//			if item.Type == 1 { //药品
//				for _, subItem := range item.HisDoctorAdviceInfo {
//					cus := &Custom{
//						AdviceId:         subItem.ID,
//						ProjectId:        0,
//						DetItemFeeSumamt: fmt.Sprintf("%.2f", subItem.Price*subItem.PrescribingNumber),
//						Cut:              fmt.Sprintf("%.2f", subItem.PrescribingNumber),
//						FeedetlSn:        subItem.FeedetlSn,
//						Price:            fmt.Sprintf("%.2f", subItem.Price),
//						MedListCodg:      subItem.MedListCodg,
//						Type:             1,
//					}
//					customs = append(customs, cus)
//				}
//			}
//
//			if item.Type == 2 { //项目
//				for _, subItem := range item.HisPrescriptionProject {
//
//					cus := &Custom{
//						AdviceId:         0,
//						ProjectId:        subItem.ID,
//						DetItemFeeSumamt: fmt.Sprintf("%.2f", subItem.Price*float64(subItem.Count)),
//						Cut:              fmt.Sprintf("%.2f", float64(subItem.Count)),
//						FeedetlSn:        subItem.FeedetlSn,
//						Price:            fmt.Sprintf("%.2f", float64(subItem.Price)),
//						MedListCodg:      subItem.MedListCodg,
//						Type:             2,
//					}
//
//					customs = append(customs, cus)
//				}
//			}
//
//			for _, item := range item.HisAdditionalCharge {
//				cus := &Custom{
//					ItemId:           item.ID,
//					AdviceId:         0,
//					ProjectId:        0,
//					DetItemFeeSumamt: fmt.Sprintf("%.2f", item.Price),
//					Cut:              fmt.Sprintf("%.2f", float64(item.Count)),
//					FeedetlSn:        item.FeedetlSn,
//					Price:            fmt.Sprintf("%.2f", float64(item.Price)),
//					MedListCodg:      item.XtHisAddtionConfig.Code,
//					Type:             3,
//				}
//
//				customs = append(customs, cus)
//			}
//
//		}
//
//		for _, item := range customs {
//			var advice_id int64 = 0
//			var project_id int64 = 0
//			var item_id int64 = 0
//
//			var types int64 = 0
//
//			if item.Type == 1 {
//				advice_id = item.AdviceId
//				project_id = 0
//				item_id = 0
//			} else if item.Type == 2 {
//				advice_id = 0
//				item_id = 0
//
//				project_id = item.ProjectId
//			} else if item.Type == 3 {
//				advice_id = 0
//				item_id = item.ItemId
//				project_id = 0
//			}
//
//			detItemFeeSumamt, _ := strconv.ParseFloat(item.DetItemFeeSumamt, 32)
//			cut, _ := strconv.ParseFloat(item.Cut, 32)
//			pric, _ := strconv.ParseFloat(item.Price, 32)
//
//			info := &models.HisOrderInfo{
//				OrderNumber:      order.Number,
//				UploadDate:       time.Now().Unix(),
//				AdviceId:         advice_id,
//				DetItemFeeSumamt: detItemFeeSumamt,
//				Cnt:              cut,
//				Pric:             pric,
//				PatientId:        id,
//				Status:           1,
//				Mtime:            time.Now().Unix(),
//				Ctime:            time.Now().Unix(),
//				UserOrgId:        adminUser.CurrentOrgId,
//				HisPatientId:     his.ID,
//				OrderId:          order.ID,
//				ProjectId:        project_id,
//				Type:             types,
//				ItemId:           item_id,
//			}
//			service.CreateOrderInfo(info)
//		}
//		//err := service.UpDateAddtionNumber(adminUser.CurrentOrgId, ids, chrg_bchno)
//		err = service.UpDatePrescriptionNumber(adminUser.CurrentOrgId, ids, chrg_bchno)
//		err = service.UpDatePrescriptionInfoNumber(adminUser.CurrentOrgId, id, chrg_bchno, recordDateTime)
//		err = service.UpdataOrderStatusTwo(chrg_bchno, adminUser.CurrentOrgId)
//		if err == nil {
//			c.ServeSuccessJSON(map[string]interface{}{
//				"msg": "结算成功",
//			})
//		} else {
//			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeAmountAccountException)
//			return
//		}
//	}
//}

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

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

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

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

	diagnosis_ids := strings.Split(diagnosis_id, ",")

	var config []*models.HisXtDiagnoseConfig
	for _, item := range diagnosis_ids {
		id, _ := strconv.ParseInt(item, 10, 64)
		diagnosisConfig, _ := service.FindDiagnoseById(id)
		config = append(config, &diagnosisConfig)
	}
	//diagnosisConfig, _ := service.FindDiagnoseById(diagnosis_id)

	sickConfig, _ := service.FindSickById(sick_type)

	var prescriptions []*models.HisPrescription

	var start_time int64
	var end_time int64

	roles, _ := service.GetAdminUserInfoByID(adminUser.CurrentOrgId, admin_user_id)
	fmt.Println(his_patient_id)
	his, _ := service.GetNewHisPatientInfo(adminUser.CurrentOrgId, his_patient_id, recordDateTime)
	timestamp := time.Now().Unix()
	tempTime := time.Unix(timestamp, 0)
	timeFormat := tempTime.Format("20060102150405")
	chrgBchno := rand.Intn(100000) + 10000
	chrg_bchno := timeFormat + strconv.FormatInt(int64(chrgBchno), 10) + strconv.FormatInt(his.PatientId, 10)
	miConfig, _ := service.FindMedicalInsuranceInfo(adminUser.CurrentOrgId)
	var patientPrescription models.HisPrescriptionInfo
	patientPrescription, _ = service.FindHisPatientPrescriptionInfo(adminUser.CurrentOrgId, his_patient_id, recordDateTime)
	if patientPrescription.ID == 0 {
		patientPrescription, _ = service.FindLastPatientPrescriptionInfo(adminUser.CurrentOrgId, id, recordDateTime)
	}
	//miConfig, _ := service.FindMedicalInsuranceInfo(adminUser.CurrentOrgId)
	department, _ := service.GetDepartMentDetail(patientPrescription.Departments)

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

	strconv.FormatInt(his.PatientId, 10)

	var res2 ResultSix
	var resSix10265 ResultSix10265
	var time_stamp string
	if miConfig.MdtrtareaAdmvs == "421300" {
		data := make(map[string]interface{})
		client := &http.Client{}
		data["psn_no"] = his.PsnNo
		data["mdtrt_id"] = his.Number
		data["department"] = department.Name
		data["org_name"] = miConfig.OrgName
		data["med_type"] = strconv.FormatInt(reg_type, 10)
		data["doctor_id"] = doctor_info.DoctorNumber
		data["doctor_name"] = roles.UserName
		data["fixmedins_code"] = miConfig.Code
		data["insuplc_admdvs"] = miConfig.InsuplcAdmdvs
		data["mdtrtarea_admvs"] = miConfig.MdtrtareaAdmvs
		data["secret_key"] = miConfig.SecretKey
		data["sick_code"] = sickConfig.CountryCode
		data["sick_name"] = sickConfig.ClassName
		data["begin_time"] = begin_time
		data["dept"] = strconv.FormatInt(department.ID, 10)
		data["config"] = config
		data["opter"] = roles.UserName

		fmt.Println(data)
		bytesData, _ := json.Marshal(data)
		req, _ := http.NewRequest("POST", "http://192.168.124.4:9532/"+"hbyb/2203", bytes.NewReader(bytesData))
		resp, _ := client.Do(req)
		defer resp.Body.Close()
		body, ioErr := ioutil.ReadAll(resp.Body)
		if ioErr != nil {
			utils.ErrorLog("接口返回数据读取失败: %v", ioErr)
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
			return
		}
		var respJSON map[string]interface{}
		if err := json.Unmarshal([]byte(body), &respJSON); err != nil {
			utils.ErrorLog("接口返回数据解析JSON失败: %v", err)
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
			return
		}

		respJSON = respJSON["data"].(map[string]interface{})["pre"].(map[string]interface{})
		userJSONBytes, _ := json.Marshal(respJSON)
		fmt.Println("log")
		fmt.Println(string(userJSONBytes))
		if err := json.Unmarshal(userJSONBytes, &res2); err != nil {
			utils.ErrorLog("解析失败:%v", err)
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
			return
		}

	} else if miConfig.MdtrtareaAdmvs == "320921" || miConfig.MdtrtareaAdmvs == "320982" {

		data := make(map[string]interface{})
		client := &http.Client{}
		data["psn_no"] = his.PsnNo
		data["mdtrt_id"] = his.Number
		data["doctor"] = roles.UserName
		data["department"] = department.Name
		data["org_name"] = miConfig.OrgName
		data["med_type"] = strconv.FormatInt(reg_type, 10)
		data["doctor_id"] = strconv.FormatInt(doctor_info.AdminUserId, 10)
		data["fixmedins_code"] = miConfig.Code
		data["insuplc_admdvs"] = his.InsuplcAdmdvs
		data["mdtrtarea_admvs"] = miConfig.MdtrtareaAdmvs
		data["secret_key"] = miConfig.SecretKey
		data["sick_code"] = sickConfig.CountryCode
		data["sick_name"] = sickConfig.ClassName
		data["begin_time"] = begin_time
		data["dept"] = strconv.FormatInt(department.ID, 10)
		data["config"] = config
		data["url"] = miConfig.Url
		data["ak"] = miConfig.AccessKey
		data["cainfo"] = miConfig.Cainfo

		bytesData, _ := json.Marshal(data)

		var req *http.Request
		if miConfig.MdtrtareaAdmvs == "320921" {
			req, _ = http.NewRequest("POST", "http://192.168.2.110:9532/"+"jsyb/2203", bytes.NewReader(bytesData))

			//api = "http://192.168.2.110:9532/" + "jsyb/readcard?" + "fixmedins_code=" + miConfig.Code + "&secret_key=" + miConfig.SecretKey + "&ak=" + miConfig.AccessKey + "&org_name=" + miConfig.OrgName + "&doctor=" + roles.UserName +
			//	"&insuplc_admdvs=" + miConfig.InsuplcAdmdvs + "&mdtrtarea_admvs=" + miConfig.MdtrtareaAdmvs + "&secret_key=" + miConfig.SecretKey + "&url=" + miConfig.Url + "&cainfo=" + miConfig.Cainfo
		} else {
			req, _ = http.NewRequest("POST", "http://192.168.5.251:9532/"+"jsyb/2203", bytes.NewReader(bytesData))

		}

		resp, _ := client.Do(req)
		defer resp.Body.Close()
		body, ioErr := ioutil.ReadAll(resp.Body)
		if ioErr != nil {
			utils.ErrorLog("接口返回数据读取失败: %v", ioErr)
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
			return
		}
		var respJSON map[string]interface{}
		if err := json.Unmarshal([]byte(body), &respJSON); err != nil {
			utils.ErrorLog("接口返回数据解析JSON失败: %v", err)
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
			return
		}

		time_stamp = strconv.FormatInt(int64(respJSON["data"].(map[string]interface{})["time_stamp"].(float64)), 10)

		//fmt.Println(respJSON["data"].(map[string]interface{})["time_stamp"].(string))
		//time_stamp = respJSON["data"].(map[string]interface{})["time_stamp"].(string)
		respJSON = respJSON["data"].(map[string]interface{})["pre"].(map[string]interface{})
		userJSONBytes, _ := json.Marshal(respJSON)
		fmt.Println("log")
		fmt.Println(string(userJSONBytes))
		if err := json.Unmarshal(userJSONBytes, &resSix10265); err != nil {
			utils.ErrorLog("解析失败:%v", err)
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
			return
		}

		res2.InfRefmsgid = resSix10265.InfRefmsgid
		res2.Output = resSix10265.Output
		res2.ErrMsg = resSix10265.ErrMsg
		res2.Cainfo = resSix10265.Cainfo
		res2.WarnMsg = resSix10265.WarnMsg
		infocode, _ := strconv.ParseInt(resSix10265.Infcode, 10, 64)
		res2.Infcode = infocode

	} else if miConfig.MdtrtareaAdmvs == "350500" {
		result, requestLog, _ := service.FJyb2203(his.PsnNo, his.Number, doctor_info.UserName, department.Name, miConfig.OrgName, strconv.FormatInt(reg_type, 10), doctor_info.DoctorNumber, miConfig.Code, his.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey, sickConfig.ContentCode, sickConfig.ClassName, roles.UserName, config, begin_time, doctor_info.UserName, roles.UserName, miConfig.Url, miConfig.Code, miConfig.AppSecret, miConfig.SignKey, miConfig.EncKey)
		saveLog(result, requestLog, "2203", "上传就诊信息")
		var respJSON2 map[string]interface{}
		if err := json.Unmarshal([]byte(string(result)), &respJSON2); err != nil {
			utils.ErrorLog("接口返回数据解析JSON失败: %v", err)
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
			return
		}
		userJSONBytes2, _ := json.Marshal(respJSON2)
		if err := json.Unmarshal(userJSONBytes2, &res2); err != nil {
			utils.ErrorLog("解析失败:%v", err)
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
			return
		}

	} else {
		var result string
		var requestLog string
		if miConfig.MdtrtareaAdmvs == "440781" { //
			result, requestLog = service.Gdyb2203A(his.PsnNo, his.Number, doctor_info.UserName, department.Name, miConfig.OrgName, strconv.FormatInt(reg_type, 10), doctor_info.DoctorNumber, miConfig.Code, miConfig.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey, sickConfig.ContentCode, sickConfig.ClassName, roles.UserName, config, begin_time)
		} else {
			if miConfig.Code == "H15049901371" {
				//赤峰地区国家医保医疗类别
				//职工透析:医疗类别选特殊情况门诊990502
				//居民定额血透门慢: 医疗类别选门诊慢病140104
				var med_type string
				if his.Insutype == "390" {
					if reg_type == 14 {
						med_type = "9933"
					} else if reg_type == 11 {
						med_type = "11"
					}
				} else if his.Insutype == "310" {
					if reg_type == 14 {
						med_type = "990502"
					} else if reg_type == 11 {
						med_type = "11"
					}
				}
				result, requestLog = service.Gdyb2203A(his.PsnNo, his.Number, doctor_info.UserName, department.Name, miConfig.OrgName, med_type, doctor_info.DoctorNumber, miConfig.Code, his.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey, sickConfig.ContentCode, sickConfig.ClassName, roles.UserName, config, begin_time)
			} else {
				result, requestLog = service.Gdyb2203(his.PsnNo, his.Number, doctor_info.UserName, department.Name, miConfig.OrgName, strconv.FormatInt(reg_type, 10), doctor_info.DoctorNumber, miConfig.Code, his.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey, sickConfig.ContentCode, sickConfig.ClassName, roles.UserName, config, begin_time)

			}
			saveLog(result, requestLog, "2203", "上传就诊信息")
			var respJSON2 map[string]interface{}
			if err := json.Unmarshal([]byte(string(result)), &respJSON2); err != nil {
				utils.ErrorLog("接口返回数据解析JSON失败: %v", err)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}
			userJSONBytes2, _ := json.Marshal(respJSON2)
			if miConfig.Code == "H15049901371" {
				if err := json.Unmarshal(userJSONBytes2, &resSix10265); err != nil {
					utils.ErrorLog("解析失败:%v", err)
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
					return
				}
				res2.InfRefmsgid = resSix10265.InfRefmsgid
				res2.Output = resSix10265.Output
				res2.ErrMsg = resSix10265.ErrMsg
				res2.Cainfo = resSix10265.Cainfo
				res2.WarnMsg = resSix10265.WarnMsg
				infocode, _ := strconv.ParseInt(resSix10265.Infcode, 10, 64)
				res2.Infcode = infocode
			} else {
				if err := json.Unmarshal(userJSONBytes2, &res2); err != nil {
					utils.ErrorLog("解析失败:%v", err)
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
					return
				}
			}
		}

	}

	if res2.Infcode != 0 {
		adminUser := c.GetAdminUserInfo()
		errlog := &models.HisOrderError{
			UserOrgId:  adminUser.CurrentOrgId,
			Ctime:      time.Now().Unix(),
			Mtime:      time.Now().Unix(),
			ErrMsg:     res2.ErrMsg,
			Status:     1,
			PatientId:  id,
			RecordTime: recordDateTime,
			Stage:      3,
		}
		service.CreateErrMsgLog(errlog)
		c.ServeSuccessJSON(map[string]interface{}{
			"failed_code": -10,
			"msg":         res2.ErrMsg,
		})
		return

	} else {
		his.Diagnosis = diagnosis_id
		his.SickType = sickConfig.ID
		his.PType = fmt.Sprintf("%d", reg_type)
		service.UpdateHisPatientThree(&his)

		data := make(map[string]interface{})
		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)))
			}
			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()
			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, id, recordStartTime, recordEndTime, reg_type)
			data["pre"] = prescriptions
		}

		client := &http.Client{}
		data["psn_no"] = his.PsnNo
		data["mdtrt_id"] = his.Number
		data["chrg_bchno"] = chrg_bchno
		data["org_name"] = miConfig.OrgName
		data["doctor"] = roles.UserName
		data["doctor_id"] = strconv.FormatInt(roles.AdminUserId, 10)
		data["dept"] = strconv.FormatInt(patientPrescription.Departments, 10)
		data["fixmedins_code"] = miConfig.Code
		data["balance_accounts_type"] = strconv.FormatInt(his.BalanceAccountsType, 10)

		if (department.ID == 0 && adminUser.CurrentOrgId == 9919) || (department.ID == 0 && adminUser.CurrentOrgId == 10106) {
			data["dept_code"] = "15"
		} else {
			data["dept_code"] = department.Number
		}

		data["insuplc_admdvs"] = his.InsuplcAdmdvs
		data["mdtrtarea_admvs"] = miConfig.MdtrtareaAdmvs
		data["secret_key"] = miConfig.SecretKey
		data["url"] = miConfig.Url
		data["ak"] = miConfig.AccessKey
		data["new_doctor_name"] = patientPrescription.Doctor
		data["diag_code"] = sickConfig.CountryCode
		data["time_stamp"] = time_stamp
		data["cainfo"] = miConfig.Cainfo

		var ids []int64

		for _, item := range prescriptions {
			ids = append(ids, item.ID)
		}
		config, _ := service.GetMedicalInsuranceConfig(adminUser.CurrentOrgId)
		if config.IsOpen == 1 { //对接了医保,走医保流程
			var res ResultFour
			var resFour10265 ResultFour10265

			if miConfig.MdtrtareaAdmvs == "421300" {
				bytesData, _ := json.Marshal(data)
				req, _ := http.NewRequest("POST", "http://192.168.124.4:9532/"+"hbyb/2204", bytes.NewReader(bytesData))
				resp, _ := client.Do(req)
				defer resp.Body.Close()
				body, ioErr := ioutil.ReadAll(resp.Body)
				if ioErr != nil {
					utils.ErrorLog("接口返回数据读取失败: %v", ioErr)
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
					return
				}
				var respJSON map[string]interface{}
				if err := json.Unmarshal([]byte(body), &respJSON); err != nil {
					utils.ErrorLog("接口返回数据解析JSON失败: %v", err)
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
					return
				}

				respJSON = respJSON["data"].(map[string]interface{})["pre"].(map[string]interface{})
				userJSONBytes, _ := json.Marshal(respJSON)
				fmt.Println("log")
				fmt.Println(string(userJSONBytes))
				if err := json.Unmarshal(userJSONBytes, &res); err != nil {
					utils.ErrorLog("解析失败:%v", err)
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
					return
				}

			} else if miConfig.MdtrtareaAdmvs == "320921" || miConfig.MdtrtareaAdmvs == "320982" {
				bytesData, _ := json.Marshal(data)
				var req *http.Request
				if miConfig.MdtrtareaAdmvs == "320921" {
					req, _ = http.NewRequest("POST", "http://192.168.2.110:9532/"+"jsyb/2204", bytes.NewReader(bytesData))

				} else {
					req, _ = http.NewRequest("POST", "http://192.168.5.251:9532/"+"jsyb/2204", bytes.NewReader(bytesData))
				}

				resp, _ := client.Do(req)
				defer resp.Body.Close()
				body, ioErr := ioutil.ReadAll(resp.Body)
				if ioErr != nil {
					utils.ErrorLog("接口返回数据读取失败: %v", ioErr)
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
					return
				}
				var respJSON map[string]interface{}
				if err := json.Unmarshal([]byte(body), &respJSON); err != nil {
					utils.ErrorLog("接口返回数据解析JSON失败: %v", err)
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
					return
				}

				respJSON = respJSON["data"].(map[string]interface{})["pre"].(map[string]interface{})
				userJSONBytes, _ := json.Marshal(respJSON)
				fmt.Println("log")
				fmt.Println(string(userJSONBytes))
				if err := json.Unmarshal(userJSONBytes, &resFour10265); err != nil {
					utils.ErrorLog("解析失败:%v", err)
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
					return
				}

				res.InfRefmsgid = resFour10265.InfRefmsgid
				res.Output = resFour10265.Output
				res.ErrMsg = resFour10265.ErrMsg
				res.Cainfo = resFour10265.Cainfo
				res.WarnMsg = resFour10265.WarnMsg
				infocode, _ := strconv.ParseInt(resFour10265.Infcode, 10, 64)
				res.Infcode = infocode

			} else if miConfig.MdtrtareaAdmvs == "350500" {

				result, request_log, _ := service.FJyb2204(his.PsnNo, his.Number, prescriptions, chrg_bchno, miConfig.OrgName, roles.UserName, strconv.FormatInt(patientPrescription.Departments, 10), miConfig.Code, department.Number, strconv.FormatInt(roles.AdminUserId, 10), his.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey, strconv.FormatInt(his.BalanceAccountsType, 10), roles.UserName, miConfig.Url, miConfig.Code, miConfig.AppSecret, miConfig.SignKey, miConfig.EncKey, sickConfig.CountryCode)
				var dat map[string]interface{}
				if err := json.Unmarshal([]byte(result), &dat); err == nil {
					fmt.Println(dat)
				} else {
					fmt.Println(err)
				}
				saveLog(result, request_log, "2204", "上传费用明细")
				userJSONBytes, _ := json.Marshal(dat)
				if err := json.Unmarshal(userJSONBytes, &res); err != nil {
					utils.ErrorLog("解析失败:%v", err)
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
					return
				}

			} else {

				if miConfig.Code == "H15049901371" {
					result, request_log := service.Gdyb2204(his.PsnNo, his.Number, prescriptions, chrg_bchno, miConfig.OrgName, roles.UserName, data["dept"].(string), data["fixmedins_code"].(string), data["dept_code"].(string), data["doctor_id"].(string), his.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey, data["balance_accounts_type"].(string), patientPrescription.DoctorId, sickConfig.CountryCode)
					var dat map[string]interface{}
					if err := json.Unmarshal([]byte(result), &dat); err == nil {
						fmt.Println(dat)
					} else {
						fmt.Println(err)
					}
					saveLog(result, request_log, "2204", "上传费用明细")

					userJSONBytes, _ := json.Marshal(dat)

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

					res.InfRefmsgid = resFour10265.InfRefmsgid
					res.Output = resFour10265.Output
					res.ErrMsg = resFour10265.ErrMsg
					res.Cainfo = resFour10265.Cainfo
					res.WarnMsg = resFour10265.WarnMsg
					infocode, _ := strconv.ParseInt(resFour10265.Infcode, 10, 64)
					res.Infcode = infocode

				} else {
					result, request_log := service.Gdyb2204(his.PsnNo, his.Number, prescriptions, chrg_bchno, miConfig.OrgName, roles.UserName, data["dept"].(string), data["fixmedins_code"].(string), data["dept_code"].(string), data["doctor_id"].(string), miConfig.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey, data["balance_accounts_type"].(string), patientPrescription.DoctorId, sickConfig.CountryCode)
					var dat map[string]interface{}
					if err := json.Unmarshal([]byte(result), &dat); err == nil {
						fmt.Println(dat)
					} else {
						fmt.Println(err)
					}
					saveLog(result, request_log, "2204", "上传费用明细")

					userJSONBytes, _ := json.Marshal(dat)

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

				}

			}

			if res.Infcode == 0 {
				order := &models.HisOrder{
					UserOrgId:           adminUser.CurrentOrgId,
					HisPatientId:        his.ID,
					PatientId:           his.PatientId,
					SettleAccountsDate:  recordDateTime,
					Ctime:               time.Now().Unix(),
					Mtime:               time.Now().Unix(),
					MdtrtId:             his.Number,
					PsnNo:               his.PsnNo,
					MedType:             strconv.FormatInt(reg_type, 10),
					Status:              1,
					Number:              chrg_bchno,
					Infcode:             res.Infcode,
					WarnMsg:             res.WarnMsg,
					Cainfo:              res.Cainfo,
					ErrMsg:              res.ErrMsg,
					RespondTime:         res.RefmsgTime,
					InfRefmsgid:         res.InfRefmsgid,
					OrderStatus:         1,
					IsMedicineInsurance: 1,
					SettleType:          settle_accounts_type,
					SettleStartTime:     start_time,
					SettleEndTime:       end_time,
					Creator:             roles.AdminUserId,
					Modify:              roles.AdminUserId,
					PType:               2,
					Diagnosis:           diagnosis_id,
				}

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

				for _, item := range res.Output.Result {
					temp := strings.Split(item.FeedetlSn, "-")
					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.FeedetlSn,
						UploadDate:       time.Now().Unix(),
						AdviceId:         advice_id,
						DetItemFeeSumamt: item.DetItemFeeSumamt,
						Cnt:              item.Cnt,
						Pric:             float64(item.Pric),
						PatientId:        his.PatientId,
						PricUplmtAmt:     item.PricUplmtAmt,
						SelfpayProp:      item.SelfpayProp,
						FulamtOwnpayAmt:  item.FulamtOwnpayAmt,
						OverlmtAmt:       item.OverlmtAmt,
						PreselfpayAmt:    item.PreselfpayAmt,
						BasMednFlag:      item.BasMednFlag,
						MedChrgitmType:   item.MedChrgitmType,
						HiNegoDrugFlag:   item.HiNegoDrugFlag,
						Status:           1,
						Memo:             item.Memo,
						Mtime:            time.Now().Unix(),
						InscpScpAmt:      item.InscpScpAmt,
						DrtReimFlag:      item.DrtReimFlag,
						Ctime:            time.Now().Unix(),
						ListSpItemFlag:   item.ListSpItemFlag,
						ChldMedcFlag:     item.ChldMedcFlag,
						LmtUsedFlag:      item.LmtUsedFlag,
						ChrgitmLv:        item.ChrgitmLv,
						UserOrgId:        adminUser.CurrentOrgId,
						HisPatientId:     his.ID,
						OrderId:          order.ID,
						ProjectId:        project_id,
						Type:             types,
					}
					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 {
							cnt, _ := strconv.ParseFloat(subItem.Count, 64)

							total = total + (subItem.Price * cnt)
						}
					}
				}

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

				allTotal := fmt.Sprintf("%.4f", total)
				if res.Infcode == 0 {
					var rf []*ResultFive
					json.Unmarshal([]byte(his.Iinfo), &rf)
					chrg_bchno := chrg_bchno
					cert_no := his.Certno

					var insutypes []string

					var insutype string
					var is390 int = 0
					var is310 int = 0

					for _, item := range rf {
						if (item.Insutype == "390" && item.PsnInsuStas == "1") || (item.Insutype == "310" && item.PsnInsuStas == "1") {
							insutypes = append(insutypes, item.Insutype)
						}
					}

					if len(insutypes) == 1 {
						insutype = insutypes[0]
					} else {
						for _, i := range insutypes {
							if i == "390" {
								is390 = 1
							}

							if i == "310" {
								is310 = 1
							}
						}
					}
					if is390 == 1 {
						insutype = "390"
					}

					if is310 == 1 {
						insutype = "310"
					}

					if len(insutypes) == 0 {
						insutype = "310"
					}
					if len(insutypes) == 2 {
						insutype = strconv.FormatInt(his.SocialType, 64)
					}

					//insutype = "390"
					if his.IdCardType == 1 {
						cert_no = his.MedicalInsuranceNumber

					} else {

						cert_no = his.Certno

					}
					var res ResultSeven
					var resSeven10265 ResultSeven10265

					if miConfig.MdtrtareaAdmvs == "421300" {

						api := "http://192.168.124.4:9532/" + "hbyb/2206?psn_no=" + his.PsnNo + "&mdtrt_id=" +
							his.Number + "&chrg_bchno=" + chrg_bchno + "&org_name=" + miConfig.OrgName +
							"&doctor=" + roles.UserName + "&fixmedins_code=" + miConfig.Code +
							"&insuplc_admdvs=" + his.InsuplcAdmdvs + "&mdtrtarea_admvs=" + miConfig.MdtrtareaAdmvs +
							"&secret_key=" + miConfig.SecretKey + "&id_card_type=" + strconv.FormatInt(his.IdCardType, 10) +
							"&certificates=" + strconv.FormatInt(his.IdType, 10) + "&cert_no=" + cert_no +
							"&insutype=" + insutype + "&total=" + allTotal + "&med_type=" + strconv.FormatInt(reg_type, 10)
						resp, requestErr := http.Get(api)
						if requestErr != nil {
							c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
							return
						}

						body, ioErr := ioutil.ReadAll(resp.Body)
						if ioErr != nil {
							utils.ErrorLog("接口返回数据读取失败: %v", ioErr)
							c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
							return
						}
						var respJSON map[string]interface{}
						if err := json.Unmarshal([]byte(string(body)), &respJSON); err != nil {
							utils.ErrorLog("接口返回数据解析JSON失败: %v", err)
							c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
							return
						}

						respJSON = respJSON["data"].(map[string]interface{})["pre"].(map[string]interface{})
						result, _ := json.Marshal(respJSON)
						fmt.Println("log")
						fmt.Println(string(result))
						if err := json.Unmarshal([]byte(result), &res); err != nil {
							utils.ErrorLog("解析失败:%v", err)
							c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
							return
						}

					} else if miConfig.MdtrtareaAdmvs == "320921" || miConfig.MdtrtareaAdmvs == "320982" {
						psn_info, _ := service.GetPsnByPatientId(his.PatientId)
						psn_info.VerifyNumber = strings.Replace(psn_info.VerifyNumber, "+", "%2B", -1)

						bas := strings.Split(psn_info.CardInfo, "|")

						if his.IdCardType == 1 {
							cert_no = bas[2]
						} else {
							cert_no = bas[1]
						}
						//江苏地区国家医保医疗类别
						//职工透析:医疗类别选特殊情况门诊9933
						//居民血透门慢: 医疗类别选门诊慢病1402
						//var med_type string
						//if his.Insutype == "310" {
						//	if reg_type == 14 {
						//		med_type = "9933"
						//	} else if reg_type == 11 {
						//		med_type = "11"
						//
						//	}
						//} else if his.Insutype == "390" {
						//	if reg_type == 14 {
						//		med_type = "1402"
						//	} else if reg_type == 11 {
						//		med_type = "11"
						//	}
						//}

						var api string

						if miConfig.MdtrtareaAdmvs == "320921" {
							api = "http://192.168.2.110:9532/" + "jsyb/2206?psn_no=" + his.PsnNo + "&mdtrt_id=" +
								his.Number + "&chrg_bchno=" + chrg_bchno + "&org_name=" + miConfig.OrgName +
								"&doctor=" + roles.UserName + "&fixmedins_code=" + miConfig.Code +
								"&insuplc_admdvs=" + his.InsuplcAdmdvs + "&mdtrtarea_admvs=" + miConfig.MdtrtareaAdmvs +
								"&secret_key=" + miConfig.SecretKey + "&id_card_type=" + strconv.FormatInt(his.IdCardType, 10) +
								"&certificates=" + strconv.FormatInt(his.IdType, 10) + "&cert_no=" + cert_no +
								"&insutype=" + insutype + "&total=" + allTotal + "&med_type=" + strconv.FormatInt(reg_type, 10) + "&verify_number=" + psn_info.VerifyNumber + "&url=" + miConfig.Url + "&ak=" + miConfig.AccessKey + "&cainfo=" + miConfig.Cainfo

							//req, _ = http.NewRequest("POST", "http://192.168.2.110:9532/"+"jsyb/2204", bytes.NewReader(bytesData))

						} else {
							//req, _ = http.NewRequest("POST", "http://192.168.5.251:9532/"+"jsyb/2204", bytes.NewReader(bytesData))
							api = "http://192.168.5.251:9532/" + "jsyb/2206?psn_no=" + his.PsnNo + "&mdtrt_id=" +
								his.Number + "&chrg_bchno=" + chrg_bchno + "&org_name=" + miConfig.OrgName +
								"&doctor=" + roles.UserName + "&fixmedins_code=" + miConfig.Code +
								"&insuplc_admdvs=" + his.InsuplcAdmdvs + "&mdtrtarea_admvs=" + miConfig.MdtrtareaAdmvs +
								"&secret_key=" + miConfig.SecretKey + "&id_card_type=" + strconv.FormatInt(his.IdCardType, 10) +
								"&certificates=" + strconv.FormatInt(his.IdType, 10) + "&cert_no=" + cert_no +
								"&insutype=" + insutype + "&total=" + allTotal + "&med_type=" + strconv.FormatInt(reg_type, 10) + "&verify_number=" + psn_info.VerifyNumber + "&url=" + miConfig.Url + "&ak=" + miConfig.AccessKey + "&cainfo=" + miConfig.Cainfo

						}

						resp, requestErr := http.Get(api)
						if requestErr != nil {
							c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
							return
						}

						body, ioErr := ioutil.ReadAll(resp.Body)
						if ioErr != nil {
							utils.ErrorLog("接口返回数据读取失败: %v", ioErr)
							c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
							return
						}
						var respJSON map[string]interface{}
						if err := json.Unmarshal([]byte(string(body)), &respJSON); err != nil {
							utils.ErrorLog("接口返回数据解析JSON失败: %v", err)
							c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
							return
						}

						respJSON = respJSON["data"].(map[string]interface{})["pre"].(map[string]interface{})
						result, _ := json.Marshal(respJSON)
						fmt.Println("log")
						fmt.Println(string(result))
						if err := json.Unmarshal([]byte(result), &resSeven10265); err != nil {
							utils.ErrorLog("解析失败:%v", err)
							c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
							return
						}

						res.InfRefmsgid = resSeven10265.InfRefmsgid
						res.Output = resSeven10265.Output
						res.ErrMsg = resSeven10265.ErrMsg
						res.Cainfo = resSeven10265.Cainfo
						res.WarnMsg = resSeven10265.WarnMsg
						infocode, _ := strconv.ParseInt(resSeven10265.Infcode, 10, 64)
						res.Infcode = infocode

					} else if miConfig.MdtrtareaAdmvs == "350500" {

						result, request_log, _ := service.FJyb2206(his.PsnNo, his.Number, chrg_bchno, cert_no, insutype, allTotal, miConfig.OrgName, roles.UserName, miConfig.Code, his.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey, strconv.FormatInt(reg_type, 10), his.IdCardType, 0, 0, 0, 0, his.IdType, miConfig.Url, miConfig.Code, miConfig.AppSecret, miConfig.SignKey, miConfig.EncKey)
						var dat map[string]interface{}
						if err := json.Unmarshal([]byte(result), &dat); err == nil {
							fmt.Println(dat)
						} else {
							fmt.Println(err)
						}
						saveLog(result, request_log, "2206", "预结算")
						userJSONBytes, _ := json.Marshal(dat)
						if err := json.Unmarshal(userJSONBytes, &res); err != nil {
							utils.ErrorLog("解析失败:%v", err)
							c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
							return
						}
					} else {

						var result string
						var request_log string
						if miConfig.Code == "H15049901371" {
							//赤峰地区国家医保医疗类别
							//职工透析:医疗类别选特殊情况门诊990502
							//居民定额血透门慢: 医疗类别选门诊慢病140104
							var med_type string
							if his.Insutype == "390" {
								if reg_type == 14 {
									med_type = "9933"
								} else if reg_type == 11 {
									med_type = "11"
								}
							} else if his.Insutype == "310" {
								if reg_type == 14 {
									med_type = "990502"
								} else if reg_type == 11 {
									med_type = "11"
								}
							}
							result, request_log = service.Gdyb2206(his.PsnNo, his.Number, chrg_bchno, cert_no, insutype, allTotal, miConfig.OrgName, roles.UserName, miConfig.Code, his.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey, med_type, his.IdCardType, 0, 0, 0, 0, his.IdType)
						} else {
							result, request_log = service.Gdyb2206(his.PsnNo, his.Number, chrg_bchno, cert_no, insutype, allTotal, miConfig.OrgName, roles.UserName, miConfig.Code, his.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey, strconv.FormatInt(reg_type, 10), his.IdCardType, 0, 0, 0, 0, his.IdType)
						}

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

						userJSONBytes, _ := json.Marshal(dat)
						if miConfig.Code == "H15049901371" {
							if err := json.Unmarshal(userJSONBytes, &resSeven10265); err != nil {
								utils.ErrorLog("解析失败:%v", err)
								c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
								return
							}
							res.InfRefmsgid = resSeven10265.InfRefmsgid
							res.Output = resSeven10265.Output
							res.ErrMsg = resSeven10265.ErrMsg
							res.Cainfo = resSeven10265.Cainfo
							res.WarnMsg = resSeven10265.WarnMsg
							infocode, _ := strconv.ParseInt(resSeven10265.Infcode, 10, 64)
							res.Infcode = infocode
						} else {
							if err := json.Unmarshal(userJSONBytes, &res); err != nil {
								utils.ErrorLog("解析失败:%v", err)
								c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
								return
							}
						}
					}

					if res.Infcode != 0 {
						errlog := &models.HisOrderError{
							UserOrgId:  adminUser.CurrentOrgId,
							Ctime:      time.Now().Unix(),
							Mtime:      time.Now().Unix(),
							Number:     chrg_bchno,
							ErrMsg:     res.ErrMsg,
							Status:     1,
							PatientId:  id,
							RecordTime: recordDateTime,
							Stage:      20,
						}
						service.CreateErrMsgLog(errlog)
						c.ServeSuccessJSON(map[string]interface{}{
							"failed_code": -10,
							"msg":         res.ErrMsg,
						})
						return
					} else {
						order, _ := service.GetHisOrderTwo(adminUser.CurrentOrgId, chrg_bchno, id)
						order.OrderStatus = 1
						order.IsPre = 1
						order.Status = 1
						order.MdtrtId = res.Output.Setlinfo.MdtrtID
						order.SetlId = res.Output.Setlinfo.SetlID
						order.PsnNo = res.Output.Setlinfo.PsnNo
						order.PsnName = res.Output.Setlinfo.PsnName
						order.PsnCertType = res.Output.Setlinfo.PsnCertType
						order.Certno = res.Output.Setlinfo.Certno
						order.Gend = res.Output.Setlinfo.Gend
						order.Naty = res.Output.Setlinfo.Naty
						order.Age = res.Output.Setlinfo.Age
						order.Insutype = res.Output.Setlinfo.Insutype
						order.PsnType = res.Output.Setlinfo.PsnType
						order.CvlservFlag = res.Output.Setlinfo.CvlservFlag
						order.SetlTime = res.Output.Setlinfo.SetlTime
						order.MdtrtCertType = res.Output.Setlinfo.MdtrtCertType
						if res.Output.Setlinfo.MedType == "140101" {
							order.MedType = "14"

						} else {
							order.MedType = res.Output.Setlinfo.MedType
						}
						if reg_type == 1112 {
							order.MedType = "1112"
						}
						if reg_type == 1111 {
							order.MedType = "1111"
						}
						order.MedfeeSumamt = res.Output.Setlinfo.MedfeeSumamt
						order.FulamtOwnpayAmt = res.Output.Setlinfo.FulamtOwnpayAmt
						order.OverlmtSelfPay = res.Output.Setlinfo.OverlmtSelfpay
						order.PreselfpayAmt = res.Output.Setlinfo.PreselfpayAmt
						order.InscpScpAmt = res.Output.Setlinfo.InscpScpAmt
						order.ActPayDedc = res.Output.Setlinfo.ActPayDedc
						order.HifpPay = res.Output.Setlinfo.HifpPay
						order.CvlservPay = res.Output.Setlinfo.CvlservPay
						order.PoolPropSelfpay = res.Output.Setlinfo.PoolPropSelfpay
						order.HifesPay = res.Output.Setlinfo.HifesPay
						order.HifobPay = res.Output.Setlinfo.HifobPay
						order.MafPay = res.Output.Setlinfo.MafPay
						order.HifmiPay = res.Output.Setlinfo.HifmiPay
						order.OthPay = res.Output.Setlinfo.OthPay
						order.FundPaySumamt = res.Output.Setlinfo.FundPaySumamt
						order.PsnPartAmt = res.Output.Setlinfo.PsnPartAmt
						order.AcctPay = res.Output.Setlinfo.AcctPay
						order.PsnCashPay = res.Output.Setlinfo.PsnCashPay
						order.HospPartAmt = res.Output.Setlinfo.HospPartAmt
						order.Balc = res.Output.Setlinfo.Balc
						order.AcctMulaidPay = res.Output.Setlinfo.AcctMulaidPay
						order.MedinsSetlId = res.Output.Setlinfo.MedinsSetlID
						order.ClrOptins = res.Output.Setlinfo.ClrOptins
						order.ClrWay = res.Output.Setlinfo.ClrWay
						order.Creator = order.Creator
						order.Modify = roles.AdminUserId
						setlDetail, _ := json.Marshal(res.Output.Setldetail)
						detailStr := string(setlDetail)
						order.SetlDetail = detailStr
						//err := service.UpdataOrderStatusTwo(chrg_bchno, adminUser.CurrentOrgId)
						err = service.UpDateOrder(order)
						if err == nil {
							c.ServeSuccessJSON(map[string]interface{}{
								"msg": "预结算成功",
							})
						} else {
							c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeAmountAccountException)
							return
						}
					}
				} else {
					adminUser := c.GetAdminUserInfo()
					errlog := &models.HisOrderError{
						UserOrgId:  adminUser.CurrentOrgId,
						Ctime:      time.Now().Unix(),
						Mtime:      time.Now().Unix(),
						ErrMsg:     res.ErrMsg,
						Status:     1,
						PatientId:  id,
						RecordTime: recordDateTime,
						Stage:      4,
					}
					service.CreateErrMsgLog(errlog)

					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeRegisterRepeatException)
					return
				}
			} else {
				adminUser := c.GetAdminUserInfo()
				errlog := &models.HisOrderError{
					UserOrgId:  adminUser.CurrentOrgId,
					Ctime:      time.Now().Unix(),
					Mtime:      time.Now().Unix(),
					ErrMsg:     res.ErrMsg,
					Status:     1,
					PatientId:  id,
					RecordTime: recordDateTime,
					Stage:      4,
				}
				service.CreateErrMsgLog(errlog)
				c.ServeSuccessJSON(map[string]interface{}{
					"failed_code": -10,
					"msg":         res.ErrMsg,
				})
				return
			}
		}
	}
}

//退款
func (c *HisApiController) Refund() {
	order_id, _ := c.GetInt64("order_id")
	admin_user_id, _ := c.GetInt64("admin_user_id")
	adminUser := c.GetAdminUserInfo()
	var order models.HisOrder
	order, _ = service.GetHisOrderByID(order_id)
	roles, _ := service.GetAdminUserInfoByID(adminUser.CurrentOrgId, admin_user_id)
	if order.ID == 0 {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
		return
	}
	his, _ := service.GetHisPatientByNumber(order.MdtrtId)

	miConfig, _ := service.FindMedicalInsuranceInfo(adminUser.CurrentOrgId)
	config, _ := service.GetMedicalInsuranceConfig(adminUser.CurrentOrgId)
	if config.IsOpen == 1 { //对接了医保,走医保流程
		var res ResultSixteen
		var resSixteen10265 ResultSixteen10265
		var src_resquest string
		var result string

		if miConfig.MdtrtareaAdmvs == "421300" {
			api3 := "http://192.168.124.4:9532/" + "hbyb/2208?psn_no=" + order.PsnNo +
				"&mdtrt_id=" + order.MdtrtId + "&setl_id=" + order.SetlId + "&doctor=" + roles.UserName + "&org_name=" + miConfig.OrgName + "&fixmedins_code=" + miConfig.Code +
				"&insuplc_admdvs=" + miConfig.InsuplcAdmdvs + "&mdtrtarea_admvs=" + miConfig.MdtrtareaAdmvs + "&secret_key=" + miConfig.SecretKey
			resp3, requestErr3 := http.Get(api3)
			if requestErr3 != nil {
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}
			body3, ioErr3 := ioutil.ReadAll(resp3.Body)
			if ioErr3 != nil {
				utils.ErrorLog("接口返回数据读取失败: %v", ioErr3)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}
			var respJSON3 map[string]interface{}
			if err := json.Unmarshal([]byte(string(body3)), &respJSON3); err != nil {
				utils.ErrorLog("接口返回数据解析JSON失败: %v", err)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}

			respJSON3 = respJSON3["data"].(map[string]interface{})["pre"].(map[string]interface{})
			userJSONBytes3, _ := json.Marshal(respJSON3)
			fmt.Println("log")
			fmt.Println(string(userJSONBytes3))
			if err := json.Unmarshal(userJSONBytes3, &res); err != nil {
				utils.ErrorLog("解析失败:%v", err)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}

		} else if miConfig.MdtrtareaAdmvs == "320921" || miConfig.MdtrtareaAdmvs == "320982" {

			var api3 string
			if miConfig.MdtrtareaAdmvs == "320921" {
				api3 = "http://192.168.2.110:9532/" + "jsyb/2208?psn_no=" + order.PsnNo +
					"&mdtrt_id=" + order.MdtrtId + "&setl_id=" + order.SetlId + "&doctor=" + roles.UserName + "&org_name=" + miConfig.OrgName + "&fixmedins_code=" + miConfig.Code +
					"&insuplc_admdvs=" + miConfig.InsuplcAdmdvs + "&mdtrtarea_admvs=" + miConfig.MdtrtareaAdmvs + "&secret_key=" + miConfig.SecretKey + "&url=" + miConfig.Url + "&ak=" + miConfig.AccessKey + "&cainfo=" + miConfig.Cainfo

				//req, _ = http.NewRequest("POST", "http://192.168.2.110:9532/"+"jsyb/2204", bytes.NewReader(bytesData))

			} else {
				//req, _ = http.NewRequest("POST", "http://192.168.5.251:9532/"+"jsyb/2204", bytes.NewReader(bytesData))
				api3 = "http://192.168.5.251:9532/" + "jsyb/2208?psn_no=" + order.PsnNo +
					"&mdtrt_id=" + order.MdtrtId + "&setl_id=" + order.SetlId + "&doctor=" + roles.UserName + "&org_name=" + miConfig.OrgName + "&fixmedins_code=" + miConfig.Code +
					"&insuplc_admdvs=" + miConfig.InsuplcAdmdvs + "&mdtrtarea_admvs=" + miConfig.MdtrtareaAdmvs + "&secret_key=" + miConfig.SecretKey + "&url=" + miConfig.Url + "&ak=" + miConfig.AccessKey + "&cainfo=" + miConfig.Cainfo

			}

			resp3, requestErr3 := http.Get(api3)
			if requestErr3 != nil {
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}
			body3, ioErr3 := ioutil.ReadAll(resp3.Body)
			if ioErr3 != nil {
				utils.ErrorLog("接口返回数据读取失败: %v", ioErr3)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}
			var respJSON3 map[string]interface{}
			if err := json.Unmarshal([]byte(string(body3)), &respJSON3); err != nil {
				utils.ErrorLog("接口返回数据解析JSON失败: %v", err)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}

			respJSON3 = respJSON3["data"].(map[string]interface{})["pre"].(map[string]interface{})
			userJSONBytes3, _ := json.Marshal(respJSON3)
			if err := json.Unmarshal(userJSONBytes3, &resSixteen10265); err != nil {
				utils.ErrorLog("解析失败:%v", err)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}

			res.InfRefmsgid = resSixteen10265.InfRefmsgid
			res.Output = resSixteen10265.Output
			res.ErrMsg = resSixteen10265.ErrMsg
			res.Cainfo = resSixteen10265.Cainfo
			res.WarnMsg = resSixteen10265.WarnMsg
			infocode, _ := strconv.ParseInt(resSixteen10265.Infcode, 10, 64)
			res.Infcode = infocode

		} else if miConfig.MdtrtareaAdmvs == "350500" {
			result, src_resquest, _ = service.FJyb2208(order.PsnNo, order.MdtrtId, order.SetlId, miConfig.OrgName, roles.UserName, miConfig.SecretKey, miConfig.Code, his.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.Url, miConfig.Code, miConfig.AppSecret, miConfig.SignKey, miConfig.EncKey)
			var dat map[string]interface{}
			if err := json.Unmarshal([]byte(result), &dat); err == nil {
				fmt.Println(dat)
			} else {
				fmt.Println(err)
			}
			saveLog(result, src_resquest, "2208", "退费")

			userJSONBytes, _ := json.Marshal(dat)

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

		} else {

			if miConfig.Code == "H15049901371" {
				result, src_resquest = service.Gdyb2208(order.PsnNo, order.MdtrtId, order.SetlId, miConfig.OrgName, roles.UserName, miConfig.SecretKey, miConfig.Code, his.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs)
				var dat map[string]interface{}
				if err := json.Unmarshal([]byte(result), &dat); err == nil {
					fmt.Println(dat)
				} else {
					fmt.Println(err)
				}
				saveLog(result, src_resquest, "2208", "退费")

				userJSONBytes, _ := json.Marshal(dat)

				if err := json.Unmarshal(userJSONBytes, &resSixteen10265); err != nil {
					utils.ErrorLog("解析失败:%v", err)
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
					return
				}
				res.InfRefmsgid = resSixteen10265.InfRefmsgid
				res.Output = resSixteen10265.Output
				res.ErrMsg = resSixteen10265.ErrMsg
				res.Cainfo = resSixteen10265.Cainfo
				res.WarnMsg = resSixteen10265.WarnMsg
				infocode, _ := strconv.ParseInt(resSixteen10265.Infcode, 10, 64)
				res.Infcode = infocode
			} else {
				result, src_resquest = service.Gdyb2208(order.PsnNo, order.MdtrtId, order.SetlId, miConfig.OrgName, roles.UserName, miConfig.SecretKey, miConfig.Code, his.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs)
				var dat map[string]interface{}
				if err := json.Unmarshal([]byte(result), &dat); err == nil {
					fmt.Println(dat)
				} else {
					fmt.Println(err)
				}
				saveLog(result, src_resquest, "2208", "退费")

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

			}

		}

		if res.Infcode == 0 {
			var res2 ResultSix
			var resSix10265 ResultSix10265

			if miConfig.MdtrtareaAdmvs == "421300" {

				api3 := "http://192.168.124.4:9532/" + "hbyb/2205?psn_no=" + order.PsnNo +
					"&mdtrt_id=" + order.MdtrtId + "&chrg_bchno=" + order.Number + "&doctor=" + roles.UserName + "&org_name=" + miConfig.OrgName + "&fixmedins_code=" + miConfig.Code +
					"&insuplc_admdvs=" + his.InsuplcAdmdvs + "&mdtrtarea_admvs=" + miConfig.MdtrtareaAdmvs + "&secret_key=" + miConfig.SecretKey
				resp3, requestErr3 := http.Get(api3)
				if requestErr3 != nil {
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
					return
				}
				body3, ioErr3 := ioutil.ReadAll(resp3.Body)
				if ioErr3 != nil {
					utils.ErrorLog("接口返回数据读取失败: %v", ioErr3)
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
					return
				}
				var respJSON3 map[string]interface{}
				if err := json.Unmarshal([]byte(string(body3)), &respJSON3); err != nil {
					utils.ErrorLog("接口返回数据解析JSON失败: %v", err)
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
					return
				}

				respJSON3 = respJSON3["data"].(map[string]interface{})["pre"].(map[string]interface{})
				userJSONBytes3, _ := json.Marshal(respJSON3)
				fmt.Println("log")
				fmt.Println(string(userJSONBytes3))
				if err := json.Unmarshal(userJSONBytes3, &res2); err != nil {
					utils.ErrorLog("解析失败:%v", err)
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
					return
				}

			} else if miConfig.MdtrtareaAdmvs == "320921" || miConfig.MdtrtareaAdmvs == "320982" {
				var api3 string
				if miConfig.MdtrtareaAdmvs == "320921" {
					api3 = "http://192.168.2.110:9532/" + "jsyb/2205?psn_no=" + order.PsnNo +
						"&mdtrt_id=" + order.MdtrtId + "&chrg_bchno=" + order.Number + "&doctor=" + roles.UserName + "&org_name=" + miConfig.OrgName + "&fixmedins_code=" + miConfig.Code +
						"&insuplc_admdvs=" + his.InsuplcAdmdvs + "&mdtrtarea_admvs=" + miConfig.MdtrtareaAdmvs + "&secret_key=" + miConfig.SecretKey + "&url=" + miConfig.Url + "&ak=" + miConfig.AccessKey + "&cainfo=" + miConfig.Cainfo

					//req, _ = http.NewRequest("POST", "http://192.168.2.110:9532/"+"jsyb/2204", bytes.NewReader(bytesData))

				} else {
					//req, _ = http.NewRequest("POST", "http://192.168.5.251:9532/"+"jsyb/2204", bytes.NewReader(bytesData))
					api3 = "http://192.168.5.251:9532/" + "jsyb/2205?psn_no=" + order.PsnNo +
						"&mdtrt_id=" + order.MdtrtId + "&chrg_bchno=" + order.Number + "&doctor=" + roles.UserName + "&org_name=" + miConfig.OrgName + "&fixmedins_code=" + miConfig.Code +
						"&insuplc_admdvs=" + his.InsuplcAdmdvs + "&mdtrtarea_admvs=" + miConfig.MdtrtareaAdmvs + "&secret_key=" + miConfig.SecretKey + "&url=" + miConfig.Url + "&ak=" + miConfig.AccessKey + "&cainfo=" + miConfig.Cainfo

				}

				resp3, requestErr3 := http.Get(api3)
				if requestErr3 != nil {
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
					return
				}
				body3, ioErr3 := ioutil.ReadAll(resp3.Body)
				if ioErr3 != nil {
					utils.ErrorLog("接口返回数据读取失败: %v", ioErr3)
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
					return
				}
				var respJSON3 map[string]interface{}
				if err := json.Unmarshal([]byte(string(body3)), &respJSON3); err != nil {
					utils.ErrorLog("接口返回数据解析JSON失败: %v", err)
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
					return
				}

				respJSON3 = respJSON3["data"].(map[string]interface{})["pre"].(map[string]interface{})
				userJSONBytes3, _ := json.Marshal(respJSON3)
				fmt.Println("log")
				fmt.Println(string(userJSONBytes3))
				if err := json.Unmarshal(userJSONBytes3, &resSix10265); err != nil {
					utils.ErrorLog("解析失败:%v", err)
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
					return
				}

				res2.InfRefmsgid = resSix10265.InfRefmsgid
				res2.Output = resSix10265.Output
				res2.ErrMsg = resSix10265.ErrMsg
				res2.Cainfo = resSix10265.Cainfo
				res2.WarnMsg = resSix10265.WarnMsg
				infocode, _ := strconv.ParseInt(resSix10265.Infcode, 10, 64)
				res2.Infcode = infocode

			} else if miConfig.MdtrtareaAdmvs == "350500" {
				result2, src_request, _ := service.FJyb2205(order.PsnNo, order.MdtrtId, order.Number, miConfig.OrgName, roles.UserName, his.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey, miConfig.Code, miConfig.Url, miConfig.Code, miConfig.AppSecret, miConfig.SignKey, miConfig.EncKey)
				var dat map[string]interface{}
				if err := json.Unmarshal([]byte(result2), &dat); err == nil {
					fmt.Println(dat)
				} else {
					fmt.Println(err)
				}

				saveLog(result2, src_request, "2205", "撤销明细")
				userJSONBytes, _ := json.Marshal(dat)
				if err := json.Unmarshal(userJSONBytes, &res2); err != nil {
					utils.ErrorLog("解析失败:%v", err)
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
					return
				}
			} else {

				if miConfig.Code == "H15049901371" {
					result2, src_request := service.Gdyb2205(order.PsnNo, order.MdtrtId, order.Number, miConfig.OrgName, roles.UserName, his.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey, miConfig.Code)
					var dat map[string]interface{}
					if err := json.Unmarshal([]byte(result2), &dat); err == nil {
						fmt.Println(dat)
					} else {
						fmt.Println(err)
					}

					saveLog(result2, src_request, "2205", "撤销明细")
					userJSONBytes, _ := json.Marshal(dat)
					if err := json.Unmarshal(userJSONBytes, &resSix10265); err != nil {
						utils.ErrorLog("解析失败:%v", err)
						c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
						return
					}
					res2.InfRefmsgid = resSix10265.InfRefmsgid
					res2.Output = resSix10265.Output
					res2.ErrMsg = resSix10265.ErrMsg
					res2.Cainfo = resSix10265.Cainfo
					res2.WarnMsg = resSix10265.WarnMsg
					infocode, _ := strconv.ParseInt(resSix10265.Infcode, 10, 64)
					res2.Infcode = infocode
				} else {
					result2, src_request := service.Gdyb2205(order.PsnNo, order.MdtrtId, order.Number, miConfig.OrgName, roles.UserName, his.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey, miConfig.Code)
					var dat map[string]interface{}
					if err := json.Unmarshal([]byte(result2), &dat); err == nil {
						fmt.Println(dat)
					} else {
						fmt.Println(err)
					}

					saveLog(result2, src_request, "2205", "撤销明细")
					userJSONBytes, _ := json.Marshal(dat)
					if err := json.Unmarshal(userJSONBytes, &res2); err != nil {
						utils.ErrorLog("解析失败:%v", err)
						c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
						return
					}

				}

			}

			if res2.Infcode == 0 {
				err := service.UpdataOrderStatus(order_id, order.Number, adminUser.CurrentOrgId, src_resquest, result)
				if err == nil {
					//当押金不为零时产生退费记录
					if order.Decimal != 0 {
						tmp := strconv.FormatInt(order.ID, 10)
						err = service.MoneyIncrease(adminUser.CurrentOrgId, order.PatientId, tmp, order.Decimal)
						if err != nil {
							c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
							return
						}
					}
					c.ServeSuccessJSON(map[string]interface{}{
						"msg": "退费成功",
					})
				} else {
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
					return
				}
			} else {
				c.ServeSuccessJSON(map[string]interface{}{
					"code": -10,
					"msg":  res2.ErrMsg,
				})
			}
		} else {
			c.ServeSuccessJSON(map[string]interface{}{
				"code": -10,
				"msg":  res.ErrMsg,
			})
		}
	}
}

func (c *HisApiController) RefundNumber() {
	record_time := c.GetString("record_time")
	//patient_id, _ := c.GetInt64("patient_id")
	admin_user_id, _ := c.GetInt64("admin_user_id")
	his_patient_id, _ := c.GetInt64("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()
	//his, _ := service.GetVMHisPatientInfo(adminUser.CurrentOrgId, patient_id, recordDateTime)

	his, _ := service.GetHisPatientRecord(adminUser.CurrentOrgId, his_patient_id)
	//patientPrescription, _ := service.FindPatientPrescriptionInfo(adminUser.CurrentOrgId, patient_id, recordDateTime)
	//order, _ := service.GetHisOrderByID(order_id)
	miConfig, _ := service.FindMedicalInsuranceInfo(adminUser.CurrentOrgId)
	config, _ := service.GetMedicalInsuranceConfig(adminUser.CurrentOrgId)
	roles, _ := service.GetAdminUserInfoByID(adminUser.CurrentOrgId, admin_user_id)

	count, _ := service.GetOrderCountByNumber(adminUser.CurrentOrgId, his.PatientId, recordDateTime, his.Number)

	if count > 0 {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeOrderParamWrong)
		return
	}

	if config.IsOpen == 1 { //对接了医保,走医保流程
		var res2 ResultSix
		var resSix10265 ResultSix10265

		if miConfig.MdtrtareaAdmvs == "421300" {

			api3 := "http://192.168.124.4:9532/" + "hbyb/2202?psn_no=" + his.PsnNo +
				"&mdtrt_id=" + his.Number + "&ipt_otp_no=" + his.IptOtpNo + "&doctor=" + roles.UserName + "&org_name=" + miConfig.OrgName + "&fixmedins_code=" + miConfig.Code +
				"&insuplc_admdvs=" + his.InsuplcAdmdvs + "&mdtrtarea_admvs=" + miConfig.MdtrtareaAdmvs + "&secret_key=" + miConfig.SecretKey
			resp3, requestErr3 := http.Get(api3)
			if requestErr3 != nil {
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}

			body3, ioErr3 := ioutil.ReadAll(resp3.Body)
			if ioErr3 != nil {
				utils.ErrorLog("接口返回数据读取失败: %v", ioErr3)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}
			var respJSON3 map[string]interface{}
			if err := json.Unmarshal([]byte(string(body3)), &respJSON3); err != nil {
				utils.ErrorLog("接口返回数据解析JSON失败: %v", err)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}

			respJSON3 = respJSON3["data"].(map[string]interface{})["pre"].(map[string]interface{})
			userJSONBytes3, _ := json.Marshal(respJSON3)
			fmt.Println("log")
			fmt.Println(string(userJSONBytes3))
			if err := json.Unmarshal(userJSONBytes3, &res2); err != nil {
				utils.ErrorLog("解析失败:%v", err)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}

		} else if miConfig.MdtrtareaAdmvs == "320921" || miConfig.MdtrtareaAdmvs == "320982" {
			var api3 string
			if miConfig.MdtrtareaAdmvs == "320921" {
				api3 = "http://192.168.2.110:9532/" + "jsyb/2202?psn_no=" + his.PsnNo +
					"&mdtrt_id=" + his.Number + "&ipt_otp_no=" + his.IptOtpNo + "&doctor=" + roles.UserName + "&org_name=" + miConfig.OrgName + "&fixmedins_code=" + miConfig.Code +
					"&insuplc_admdvs=" + his.InsuplcAdmdvs + "&mdtrtarea_admvs=" + miConfig.MdtrtareaAdmvs + "&secret_key=" + miConfig.SecretKey + "&url=" + miConfig.Url + "&ak=" + miConfig.AccessKey + "&cainfo=" + miConfig.Cainfo

				//req, _ = http.NewRequest("POST", "http://192.168.2.110:9532/"+"jsyb/2204", bytes.NewReader(bytesData))

			} else {
				//req, _ = http.NewRequest("POST", "http://192.168.5.251:9532/"+"jsyb/2204", bytes.NewReader(bytesData))
				api3 = "http://192.168.5.251:9532/" + "jsyb/2202?psn_no=" + his.PsnNo +
					"&mdtrt_id=" + his.Number + "&ipt_otp_no=" + his.IptOtpNo + "&doctor=" + roles.UserName + "&org_name=" + miConfig.OrgName + "&fixmedins_code=" + miConfig.Code +
					"&insuplc_admdvs=" + his.InsuplcAdmdvs + "&mdtrtarea_admvs=" + miConfig.MdtrtareaAdmvs + "&secret_key=" + miConfig.SecretKey + "&url=" + miConfig.Url + "&ak=" + miConfig.AccessKey + "&cainfo=" + miConfig.Cainfo
			}

			resp3, requestErr3 := http.Get(api3)
			if requestErr3 != nil {
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}

			body3, ioErr3 := ioutil.ReadAll(resp3.Body)
			if ioErr3 != nil {
				utils.ErrorLog("接口返回数据读取失败: %v", ioErr3)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}
			var respJSON3 map[string]interface{}
			if err := json.Unmarshal([]byte(string(body3)), &respJSON3); err != nil {
				utils.ErrorLog("接口返回数据解析JSON失败: %v", err)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}

			respJSON3 = respJSON3["data"].(map[string]interface{})["pre"].(map[string]interface{})
			userJSONBytes3, _ := json.Marshal(respJSON3)
			if err := json.Unmarshal(userJSONBytes3, &resSix10265); err != nil {
				utils.ErrorLog("解析失败:%v", err)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}

			res2.InfRefmsgid = resSix10265.InfRefmsgid
			res2.Output = resSix10265.Output
			res2.ErrMsg = resSix10265.ErrMsg
			res2.Cainfo = resSix10265.Cainfo
			res2.WarnMsg = resSix10265.WarnMsg
			infocode, _ := strconv.ParseInt(resSix10265.Infcode, 10, 64)
			res2.Infcode = infocode

		} else if miConfig.MdtrtareaAdmvs == "350500" {

			result, request, _ := service.FJyb2202(his.PsnNo, his.Number, his.IptOtpNo, miConfig.OrgName, roles.UserName, his.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey, miConfig.Code, miConfig.Url, miConfig.Code, miConfig.AppSecret, miConfig.SignKey, miConfig.EncKey)
			var dat map[string]interface{}
			if err := json.Unmarshal([]byte(result), &dat); err == nil {
				fmt.Println(dat)
			} else {
				fmt.Println(err)
			}
			saveLog(result, request, "2202", "退号")
			userJSONBytes, _ := json.Marshal(dat)
			if err := json.Unmarshal(userJSONBytes, &res2); err != nil {
				utils.ErrorLog("解析失败:%v", err)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}

		} else {
			var api3 string

			if miConfig.Code == "H15049901371" {

				api3 = "http://127.0.0.1:9532/" + "gdyb/three?psn_no=" + his.PsnNo +
					"&mdtrt_id=" + his.Number + "&ipt_otp_no=" + his.IptOtpNo + "&doctor=" + roles.UserName + "&org_name=" + miConfig.OrgName + "&fixmedins_code=" + miConfig.Code +
					"&insuplc_admdvs=" + his.InsuplcAdmdvs + "&mdtrtarea_admvs=" + miConfig.MdtrtareaAdmvs + "&secret_key=" + miConfig.SecretKey
			} else {
				api3 = "http://127.0.0.1:9532/" + "gdyb/three?psn_no=" + his.PsnNo +
					"&mdtrt_id=" + his.Number + "&ipt_otp_no=" + his.IptOtpNo + "&doctor=" + roles.UserName + "&org_name=" + miConfig.OrgName + "&fixmedins_code=" + miConfig.Code +
					"&insuplc_admdvs=" + his.InsuplcAdmdvs + "&mdtrtarea_admvs=" + miConfig.MdtrtareaAdmvs + "&secret_key=" + miConfig.SecretKey

			}

			resp3, requestErr3 := http.Get(api3)
			if requestErr3 != nil {
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}

			body3, ioErr3 := ioutil.ReadAll(resp3.Body)
			if ioErr3 != nil {
				utils.ErrorLog("接口返回数据读取失败: %v", ioErr3)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}
			var respJSON3 map[string]interface{}
			if err := json.Unmarshal([]byte(string(body3)), &respJSON3); err != nil {
				utils.ErrorLog("接口返回数据解析JSON失败: %v", err)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}

			respJSON3 = respJSON3["data"].(map[string]interface{})["pre"].(map[string]interface{})
			userJSONBytes3, _ := json.Marshal(respJSON3)

			if miConfig.Code == "H15049901371" {
				if err := json.Unmarshal(userJSONBytes3, &resSix10265); err != nil {
					utils.ErrorLog("解析失败:%v", err)
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
					return
				}
				res2.InfRefmsgid = resSix10265.InfRefmsgid
				res2.Output = resSix10265.Output
				res2.ErrMsg = resSix10265.ErrMsg
				res2.Cainfo = resSix10265.Cainfo
				res2.WarnMsg = resSix10265.WarnMsg
				infocode, _ := strconv.ParseInt(resSix10265.Infcode, 10, 64)
				res2.Infcode = infocode
			} else {

				if err := json.Unmarshal(userJSONBytes3, &res2); err != nil {
					utils.ErrorLog("解析失败:%v", err)
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
					return
				}
			}

		}

		if res2.Infcode == 0 {
			if err == nil {
				c.ServeSuccessJSON(map[string]interface{}{
					"msg": "退号成功",
				})
				service.UpdataRegStatusTwo(his_patient_id, recordDateTime, adminUser.CurrentOrgId)

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

		} else {
			c.ServeSuccessJSON(map[string]interface{}{
				"code": -10,
				"msg":  res2.ErrMsg,
			})

		}

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

	//his_patient_id, _ := c.GetInt64("his_patient_id")

	number := c.GetString("number")
	record_time := c.GetString("record_time")
	patient_id, _ := c.GetInt64("patient_id")
	//med_type, _ := c.GetInt64("med_type")

	timeLayout := "2006-01-02"
	loc, _ := time.LoadLocation("Local")
	adminUser := c.GetAdminUserInfo()
	roles, _ := service.GetAdminUserInfoByID(adminUser.CurrentOrgId, admin_user_id)
	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, _ := service.GetNewVMHisPatientInfo(adminUser.CurrentOrgId, his_patient_id, recordDateTime)

	patientPrescription, _ := service.FindPatientPrescriptionInfo(adminUser.CurrentOrgId, patient_id, recordDateTime)
	miConfig, _ := service.FindMedicalInsuranceInfo(adminUser.CurrentOrgId)
	config, _ := service.GetMedicalInsuranceConfig(adminUser.CurrentOrgId)

	var order models.HisOrder
	order, _ = service.GetHisOrderByID(order_id)
	his, _ := service.GetHisPatientByNumber(order.MdtrtId)
	if config.IsOpen == 1 { //对接了医保,走医保流程
		var res2 ResultSix

		if miConfig.MdtrtareaAdmvs == "421300" {
			api3 := "http://192.168.124.4:9532/" + "hbyb/2205?psn_no=" + order.PsnNo +
				"&mdtrt_id=" + order.MdtrtId + "&chrg_bchno=" + order.Number + "&doctor=" + patientPrescription.Doctor + "&org_name=" + miConfig.OrgName + "&fixmedins_code=" + miConfig.Code +
				"&insuplc_admdvs=" + his.InsuplcAdmdvs + "&mdtrtarea_admvs=" + miConfig.MdtrtareaAdmvs + "&secret_key=" + miConfig.SecretKey
			resp3, requestErr3 := http.Get(api3)
			if requestErr3 != nil {
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}
			body3, ioErr3 := ioutil.ReadAll(resp3.Body)
			if ioErr3 != nil {
				utils.ErrorLog("接口返回数据读取失败: %v", ioErr3)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}
			var respJSON3 map[string]interface{}
			if err := json.Unmarshal([]byte(string(body3)), &respJSON3); err != nil {
				utils.ErrorLog("接口返回数据解析JSON失败: %v", err)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}

			respJSON3 = respJSON3["data"].(map[string]interface{})["pre"].(map[string]interface{})
			userJSONBytes3, _ := json.Marshal(respJSON3)
			fmt.Println("log")
			fmt.Println(string(userJSONBytes3))
			if err := json.Unmarshal(userJSONBytes3, &res2); err != nil {
				utils.ErrorLog("解析失败:%v", err)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}

			err := service.UpdataOrderStatus(order_id, number, adminUser.CurrentOrgId, "", "")
			if err == nil {
				c.ServeSuccessJSON(map[string]interface{}{
					"msg": "撤销明细成功",
				})
				return
			} else {
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}
		} else if miConfig.MdtrtareaAdmvs == "320921" || miConfig.MdtrtareaAdmvs == "320982" {
			var resSix10265 ResultSix10265

			var api3 string
			if miConfig.MdtrtareaAdmvs == "320921" {
				api3 = "http://192.168.2.110:9532/" + "jsyb/2205?psn_no=" + order.PsnNo +
					"&mdtrt_id=" + order.MdtrtId + "&chrg_bchno=" + order.Number + "&doctor=" + patientPrescription.Doctor + "&org_name=" + miConfig.OrgName + "&fixmedins_code=" + miConfig.Code +
					"&insuplc_admdvs=" + his.InsuplcAdmdvs + "&mdtrtarea_admvs=" + miConfig.MdtrtareaAdmvs + "&secret_key=" + miConfig.SecretKey + "&url=" + miConfig.Url + "&ak=" + miConfig.AccessKey + "&cainfo=" + miConfig.Cainfo

				//req, _ = http.NewRequest("POST", "http://192.168.2.110:9532/"+"jsyb/2204", bytes.NewReader(bytesData))

			} else {
				//req, _ = http.NewRequest("POST", "http://192.168.5.251:9532/"+"jsyb/2204", bytes.NewReader(bytesData))
				api3 = "http://192.168.5.251:9532/" + "jsyb/2205?psn_no=" + order.PsnNo +
					"&mdtrt_id=" + order.MdtrtId + "&chrg_bchno=" + order.Number + "&doctor=" + patientPrescription.Doctor + "&org_name=" + miConfig.OrgName + "&fixmedins_code=" + miConfig.Code +
					"&insuplc_admdvs=" + his.InsuplcAdmdvs + "&mdtrtarea_admvs=" + miConfig.MdtrtareaAdmvs + "&secret_key=" + miConfig.SecretKey + "&url=" + miConfig.Url + "&ak=" + miConfig.AccessKey + "&cainfo=" + miConfig.Cainfo

			}

			resp3, requestErr3 := http.Get(api3)
			if requestErr3 != nil {
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}
			body3, ioErr3 := ioutil.ReadAll(resp3.Body)
			if ioErr3 != nil {
				utils.ErrorLog("接口返回数据读取失败: %v", ioErr3)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}
			var respJSON3 map[string]interface{}
			if err := json.Unmarshal([]byte(string(body3)), &respJSON3); err != nil {
				utils.ErrorLog("接口返回数据解析JSON失败: %v", err)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}

			respJSON3 = respJSON3["data"].(map[string]interface{})["pre"].(map[string]interface{})
			userJSONBytes3, _ := json.Marshal(respJSON3)
			fmt.Println("log")
			fmt.Println(string(userJSONBytes3))
			if err := json.Unmarshal(userJSONBytes3, &resSix10265); err != nil {
				utils.ErrorLog("解析失败:%v", err)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}

			res2.InfRefmsgid = resSix10265.InfRefmsgid
			res2.Output = resSix10265.Output
			res2.ErrMsg = resSix10265.ErrMsg
			res2.Cainfo = resSix10265.Cainfo
			res2.WarnMsg = resSix10265.WarnMsg
			infocode, _ := strconv.ParseInt(resSix10265.Infcode, 10, 64)
			res2.Infcode = infocode

			err := service.UpdataOrderStatus(order_id, number, adminUser.CurrentOrgId, "", "")
			if err == nil {
				c.ServeSuccessJSON(map[string]interface{}{
					"msg": "撤销明细成功",
				})
				return
			} else {
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}
		} else if miConfig.MdtrtareaAdmvs == "350500" {
			result2, src_request, _ := service.FJyb2205(his.PsnNo, his.Number, order.Number, miConfig.OrgName, roles.UserName, his.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey, miConfig.Code, miConfig.Url, miConfig.Code, miConfig.AppSecret, miConfig.SignKey, miConfig.EncKey)
			var dat map[string]interface{}
			if err := json.Unmarshal([]byte(result2), &dat); err == nil {
				fmt.Println(dat)
			} else {
				fmt.Println(err)
			}

			saveLog(result2, src_request, "2205", "撤销明细")
			userJSONBytes, _ := json.Marshal(dat)
			if err := json.Unmarshal(userJSONBytes, &res2); err != nil {
				utils.ErrorLog("解析失败:%v", err)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}
			if res2.Infcode == 0 {
				err := service.UpdataOrderStatus(order_id, number, adminUser.CurrentOrgId, "", "")
				if err == nil {
					c.ServeSuccessJSON(map[string]interface{}{
						"msg": "撤销明细成功",
					})
					return
				} else {
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
					return
				}
			} else {
				c.ServeSuccessJSON(map[string]interface{}{
					"code": -10,
					"msg":  res2.ErrMsg,
				})
			}

		} else {
			api2 := "http://127.0.0.1:9532/" + "gdyb/six?psn_no=" + his.PsnNo +
				"&mdtrt_id=" + his.Number + "&chrg_bchno=" + order.Number + "&doctor=" + roles.UserName + "&org_name=" + miConfig.OrgName + "&fixmedins_code=" + miConfig.Code +
				"&insuplc_admdvs=" + his.InsuplcAdmdvs + "&mdtrtarea_admvs=" + miConfig.MdtrtareaAdmvs + "&secret_key=" + miConfig.SecretKey
			resp2, requestErr2 := http.Get(api2)
			if requestErr2 != nil {
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}

			body2, ioErr2 := ioutil.ReadAll(resp2.Body)
			if ioErr2 != nil {
				utils.ErrorLog("接口返回数据读取失败: %v", ioErr2)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}
			var respJSON2 map[string]interface{}
			if err := json.Unmarshal([]byte(string(body2)), &respJSON2); err != nil {
				utils.ErrorLog("接口返回数据解析JSON失败: %v", err)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}

			err := service.UpdataOrderStatus(order_id, number, adminUser.CurrentOrgId, "", "")
			if err == nil {
				c.ServeSuccessJSON(map[string]interface{}{
					"msg": "撤销明细成功",
				})
				return

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

		}
	} else {
		err := service.UpdataOrderStatus(order_id, number, adminUser.CurrentOrgId, "", "")
		if err == nil {
			c.ServeSuccessJSON(map[string]interface{}{
				"msg": "退费成功",
			})
		} else {
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
			return
		}
	}
}

//对账
func (c *HisApiController) GetCheckAccount() {
	start_time := c.GetString("start_time")
	end_time := c.GetString("end_time")
	insutype := c.GetString("insutype")
	clr_type := c.GetString("clr_type")
	clr_org := c.GetString("clr_optins")

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

	adminUser := c.GetAdminUserInfo()
	miConfig, _ := service.FindMedicalInsuranceInfo(adminUser.CurrentOrgId)
	config, _ := service.GetMedicalInsuranceConfig(adminUser.CurrentOrgId)
	if len(clr_org) == 0 {
		clr_org = miConfig.MdtrtareaAdmvs
	}
	timeLayout := "2006-01-02"
	loc, _ := time.LoadLocation("Local")
	startime, _ := time.ParseInLocation(timeLayout+" 15:04:05", start_time+" 00:00:00", loc)
	endtime, _ := time.ParseInLocation(timeLayout+" 15:04:05", end_time+" 23:59:59", loc)
	orders, _ := service.GetOrderByTime(startime.Unix(), endtime.Unix(), adminUser.CurrentOrgId, insutype, "", clr_type)
	fixmedins_setl_cnt := int64(len(orders))
	var medfee_sumamt float64
	var acct_pay float64
	var fund_pay_sumamt float64
	for _, item := range orders {
		medfee_sumamt = medfee_sumamt + item.MedfeeSumamt
		acct_pay = acct_pay + item.AcctPay
		fund_pay_sumamt = fund_pay_sumamt + item.FundPaySumamt
	}
	var user_name string
	role, _ := service.GetAdminUserInfoByID(adminUser.CurrentOrgId, admin_user_id)
	if role.ID == 0 {
		user_name = "xxx"
	} else {
		user_name = role.UserName
	}
	var res ResultEight
	var res10188 ResultEightFor10188
	if config.IsOpen == 1 {
		if miConfig.MdtrtareaAdmvs == "320921" || miConfig.MdtrtareaAdmvs == "320982" {
			api := "http://192.168.2.110:9532/" + "jsyb/3201?" +
				"insutype=" + insutype +
				"&clr_type=" + clr_type +
				"&setl_optins=" + clr_org +
				"&stmt_begndate=" + start_time +
				"&stm_enddate=" + end_time +
				"&medfee_sumamt=" + fmt.Sprintf("%.4f", medfee_sumamt) +
				"&fund_pay_sumamt=" + fmt.Sprintf("%.4f", fund_pay_sumamt) +
				"&acct_pay=" + fmt.Sprintf("%.4f", acct_pay) +
				"&fixmedins_setl_cnt=" + strconv.FormatInt(fixmedins_setl_cnt, 10) +
				"&fixmedins_code=" + miConfig.Code +
				"&insuplc_admdvs=" + miConfig.InsuplcAdmdvs +
				"&mdtrtarea_admvs=" + miConfig.MdtrtareaAdmvs +
				"&secret_key=" + miConfig.SecretKey +
				"&org_name=" + miConfig.OrgName +
				"&doctor=" + user_name +
				"&url=" + miConfig.Url + "&ak=" + miConfig.AccessKey + "&cainfo=" + miConfig.Cainfo

			fmt.Println(api)
			resp, requestErr := http.Get(api)
			if requestErr != nil {
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}
			body, ioErr := ioutil.ReadAll(resp.Body)
			fmt.Println(body)
			if ioErr != nil {
				utils.ErrorLog("接口返回数据读取失败: %v", ioErr)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}
			var respJSON map[string]interface{}
			if err := json.Unmarshal([]byte(string(body)), &respJSON); err != nil {
				utils.ErrorLog("接口返回数据解析JSON失败: %v", err)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}
			respJSON = respJSON["data"].(map[string]interface{})["pre"].(map[string]interface{})
			userJSONBytes, _ := json.Marshal(respJSON)
			if err := json.Unmarshal(userJSONBytes, &res); err != nil {
				utils.ErrorLog("解析失败:%v", err)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}

			res.InfRefmsgid = res10188.InfRefmsgid
			res.Output = res10188.Output
			res.ErrMsg = res10188.ErrMsg
			res.Cainfo = res10188.Cainfo
			res.WarnMsg = res10188.WarnMsg
			infocode, _ := strconv.ParseInt(res10188.Infcode, 10, 64)
			res.Infcode = infocode

		} else if miConfig.MdtrtareaAdmvs == "150499" {

			api := "http://172.16.13.254:9532/" + "nmyb/3201?" +
				"insutype=" + insutype +
				"&clr_type=" + clr_type +
				"&setl_optins=" + clr_org +
				"&stmt_begndate=" + start_time +
				"&stm_enddate=" + end_time +
				"&medfee_sumamt=" + fmt.Sprintf("%.4f", medfee_sumamt) +
				"&fund_pay_sumamt=" + fmt.Sprintf("%.4f", fund_pay_sumamt) +
				"&acct_pay=" + fmt.Sprintf("%.4f", acct_pay) +
				"&fixmedins_setl_cnt=" + strconv.FormatInt(fixmedins_setl_cnt, 10) +
				"&fixmedins_code=" + miConfig.Code +
				"&insuplc_admdvs=" + miConfig.InsuplcAdmdvs +
				"&mdtrtarea_admvs=" + miConfig.MdtrtareaAdmvs +
				"&secret_key=" + miConfig.SecretKey +
				"&org_name=" + miConfig.OrgName +
				"&doctor=" + user_name
			resp, requestErr := http.Get(api)
			if requestErr != nil {
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}
			body, ioErr := ioutil.ReadAll(resp.Body)
			if ioErr != nil {
				utils.ErrorLog("接口返回数据读取失败: %v", ioErr)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}
			var respJSON map[string]interface{}
			if err := json.Unmarshal([]byte(string(body)), &respJSON); err != nil {
				utils.ErrorLog("接口返回数据解析JSON失败: %v", err)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}

			respJSON = respJSON["data"].(map[string]interface{})["pre"].(map[string]interface{})
			result, _ := json.Marshal(respJSON)
			fmt.Println("log")
			fmt.Println(string(result))
			if err := json.Unmarshal([]byte(result), &res10188); err != nil {
				utils.ErrorLog("解析失败:%v", err)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}

			res.InfRefmsgid = res10188.InfRefmsgid
			res.Output = res10188.Output
			res.ErrMsg = res10188.ErrMsg
			res.Cainfo = res10188.Cainfo
			res.WarnMsg = res10188.WarnMsg
			infocode, _ := strconv.ParseInt(res10188.Infcode, 10, 64)
			res.Infcode = infocode

		} else if miConfig.MdtrtareaAdmvs == "350500" {
			var baseParams models.BaseParams
			baseParams.InsuplcAdmdvs = miConfig.InsuplcAdmdvs
			baseParams.MdtrtareaAdmvs = miConfig.MdtrtareaAdmvs
			baseParams.SecretKey = miConfig.SecretKey
			baseParams.OrgName = miConfig.OrgName
			baseParams.EncKey = miConfig.EncKey
			baseParams.AppSecret = miConfig.AppSecret
			baseParams.SignKey = miConfig.SignKey
			baseParams.AppID = miConfig.Code
			baseParams.RequestUrl = miConfig.Url

			businessParams := models.BusinessParams{
				Insutype:         insutype,
				ClrType:          clr_type,
				SetlOptins:       clr_org,
				StmtBegndate:     start_time,
				StmtEnddate:      end_time,
				MedfeeSumamt:     medfee_sumamt,
				FundPaySumamt:    fund_pay_sumamt,
				AcctPay:          acct_pay,
				FixmedinsSetlCnt: fixmedins_setl_cnt,
			}
			result, requestLog := service.FJyb3201(baseParams, businessParams)
			fmt.Println(requestLog)
			fmt.Println(result)

		} else {
			api := "http://127.0.0.1:9532/" + "gdyb/ten?" +
				"insutype=" + insutype +
				"&clr_type=" + clr_type +
				"&setl_optins=" + clr_org +
				"&stmt_begndate=" + start_time +
				"&stm_enddate=" + end_time +
				"&medfee_sumamt=" + fmt.Sprintf("%.4f", medfee_sumamt) +
				"&fund_pay_sumamt=" + fmt.Sprintf("%.4f", fund_pay_sumamt) +
				"&acct_pay=" + fmt.Sprintf("%.4f", acct_pay) +
				"&fixmedins_setl_cnt=" + strconv.FormatInt(fixmedins_setl_cnt, 10) +
				"&fixmedins_code=" + miConfig.Code +
				"&insuplc_admdvs=" + miConfig.InsuplcAdmdvs +
				"&mdtrtarea_admvs=" + miConfig.MdtrtareaAdmvs +
				"&secret_key=" + miConfig.SecretKey +
				"&org_name=" + miConfig.OrgName +
				"&doctor=" + user_name

			fmt.Println(api)
			resp, requestErr := http.Get(api)
			if requestErr != nil {
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}
			body, ioErr := ioutil.ReadAll(resp.Body)
			fmt.Println(body)
			if ioErr != nil {
				utils.ErrorLog("接口返回数据读取失败: %v", ioErr)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}
			var respJSON map[string]interface{}
			if err := json.Unmarshal([]byte(string(body)), &respJSON); err != nil {
				utils.ErrorLog("接口返回数据解析JSON失败: %v", err)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}
			respJSON = respJSON["data"].(map[string]interface{})["pre"].(map[string]interface{})
			userJSONBytes, _ := json.Marshal(respJSON)
			if err := json.Unmarshal(userJSONBytes, &res); err != nil {
				utils.ErrorLog("解析失败:%v", err)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}
		}

		if res.Infcode == 0 {
			if res.Output.Stmtinfo.StmtRslt == "0" {
				micc := &models.MedicalInsuranceCostCompare{
					StartTime: startime.Unix(),
					EndTime:   endtime.Unix(),
					Insutype:  insutype,
					CheckType: 1,
					Num:       fixmedins_setl_cnt,
					Mtime:     time.Now().Unix(),
					Status:    1,
					UserOrgId: adminUser.CurrentOrgId,
					CostTotal: medfee_sumamt,
					FuncTotal: fund_pay_sumamt,
					PsnPay:    acct_pay,
					Creator:   admin_user_id,
					Ctime:     time.Now().Unix(),
					ClrType:   clr_type,
				}
				err := service.CreateMedicalInsuranceCostCompareRecord(micc)
				if err == nil {
					c.ServeSuccessJSON(map[string]interface{}{
						"stmt_rslt":      res.Output.Stmtinfo.StmtRslt,
						"stmt_rslt_dscr": res.Output.Stmtinfo.StmtRsltDscr,
					})
				} else {
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				}
			} else {
				c.ServeSuccessJSON(map[string]interface{}{
					"stmt_rslt":      res.Output.Stmtinfo.StmtRslt,
					"stmt_rslt_dscr": res.Output.Stmtinfo.StmtRsltDscr,
				})
			}
		} else {
			c.ServeSuccessJSON(map[string]interface{}{
				"code": -10,
				"msg":  res.ErrMsg,
			})

		}
	}
}

func (c *HisApiController) Check310() {

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

	var user_name string
	user_name = "高慧裕"
	api := "http://127.0.0.1:9532/" + "gdyb/ten?" +
		"insutype=" + "310" +
		"&clr_type=" + "" +
		"&setl_optins=" + "441202" +
		"&stmt_begndate=" + "2022-03-01" +
		"&stm_enddate=" + "2022-03-31" +
		"&medfee_sumamt=" + "194930.12" +
		"&fund_pay_sumamt=" + "188741.46" +
		"&acct_pay=" + "0" +
		"&fixmedins_setl_cnt=" + "452" +
		"&fixmedins_code=" + miConfig.Code +
		"&insuplc_admdvs=" + miConfig.InsuplcAdmdvs +
		"&mdtrtarea_admvs=" + miConfig.MdtrtareaAdmvs +
		"&secret_key=" + miConfig.SecretKey +
		"&org_name=" + miConfig.OrgName +
		"&doctor=" + user_name

	fmt.Println(api)
	resp, requestErr := http.Get(api)
	if requestErr != nil {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
		return
	}
	body, ioErr := ioutil.ReadAll(resp.Body)
	fmt.Println(body)
	if ioErr != nil {
		utils.ErrorLog("接口返回数据读取失败: %v", ioErr)
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
		return
	}
	var respJSON map[string]interface{}
	if err := json.Unmarshal([]byte(string(body)), &respJSON); err != nil {
		utils.ErrorLog("接口返回数据解析JSON失败: %v", err)
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
		return
	}

	respJSON = respJSON["data"].(map[string]interface{})["pre"].(map[string]interface{})
	userJSONBytes, _ := json.Marshal(respJSON)

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

}
func (c *HisApiController) Check390() {

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

	var user_name string
	user_name = "高慧裕"
	api := "http://127.0.0.1:9532/" + "gdyb/ten?" +
		"insutype=" + "390" +
		"&clr_type=" + "" +
		"&setl_optins=" + "441202" +
		"&stmt_begndate=" + "2022-03-01" +
		"&stm_enddate=" + "2022-03-31" +
		"&medfee_sumamt=" + "1068448.89" +
		"&fund_pay_sumamt=" + "1014677.62" +
		"&acct_pay=" + "0" +
		"&fixmedins_setl_cnt=" + "1950" +
		"&fixmedins_code=" + miConfig.Code +
		"&insuplc_admdvs=" + miConfig.InsuplcAdmdvs +
		"&mdtrtarea_admvs=" + miConfig.MdtrtareaAdmvs +
		"&secret_key=" + miConfig.SecretKey +
		"&org_name=" + miConfig.OrgName +
		"&doctor=" + user_name

	fmt.Println(api)
	resp, requestErr := http.Get(api)
	if requestErr != nil {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
		return
	}
	body, ioErr := ioutil.ReadAll(resp.Body)
	fmt.Println(body)
	if ioErr != nil {
		utils.ErrorLog("接口返回数据读取失败: %v", ioErr)
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
		return
	}
	var respJSON map[string]interface{}
	if err := json.Unmarshal([]byte(string(body)), &respJSON); err != nil {
		utils.ErrorLog("接口返回数据解析JSON失败: %v", err)
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
		return
	}

	respJSON = respJSON["data"].(map[string]interface{})["pre"].(map[string]interface{})
	userJSONBytes, _ := json.Marshal(respJSON)

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

}

//对账明细
func (c *HisApiController) GetCheckDetailAccount() {
	start_time := c.GetString("start_time")
	end_time := c.GetString("end_time")
	admin_user_id, _ := c.GetInt64("admin_user_id")

	adminUser := c.GetAdminUserInfo()
	miConfig, _ := service.FindMedicalInsuranceInfo(adminUser.CurrentOrgId)
	config, _ := service.GetMedicalInsuranceConfig(adminUser.CurrentOrgId)

	timeLayout := "2006-01-02"
	loc, _ := time.LoadLocation("Local")
	startime, _ := time.ParseInLocation(timeLayout+" 15:04:05", start_time+" 00:00:00", loc)
	endtime, _ := time.ParseInLocation(timeLayout+" 15:04:05", end_time+" 23:59:59", loc)
	orders, _ := service.GetOrderByTimeTwo(startime.Unix(), endtime.Unix(), adminUser.CurrentOrgId)

	rand.Seed(time.Now().UnixNano())

	num := rand.Intn(30000)
	Mkdir(miConfig.OrgName)
	file := strconv.FormatInt(int64(num), 10)
	file_name := file + ".txt"
	zip_name := file + ".zip"
	zip_path := miConfig.OrgName + "/" + zip_name
	file_path := miConfig.OrgName + "/" + file_name

	decimal.DivisionPrecision = 2
	var medfee_sumamt float64
	var psn_cash_pay float64
	var fund_pay_sumamt float64
	fixmedins_setl_cnt := int64(len(orders))

	for _, item := range orders {
		medfee_sumamt = medfee_sumamt + item.MedfeeSumamt
		psn_cash_pay = psn_cash_pay + item.PsnCashPay
		fund_pay_sumamt = fund_pay_sumamt + item.FundPaySumamt
	}

	f, err := os.Create(miConfig.OrgName + "/" + file_name)
	defer f.Close()
	if err != nil {
		fmt.Println(err.Error())
	} else {
		for _, item := range orders {
			var refd_setl_flag string
			if item.OrderStatus == 2 {
				refd_setl_flag = "0"
				var str string
				str = item.SetlId + "	" +
					item.MdtrtId + "	" +
					item.PsnNo + "	" +
					fmt.Sprintf("%.4f", item.MedfeeSumamt) + "	" +
					fmt.Sprintf("%.4f", item.FundPaySumamt) + "	" +
					fmt.Sprintf("%.4f", item.AcctPay) + "	" + refd_setl_flag + "\r\n"
				_, err = f.Write([]byte(str))
			}
			if item.OrderStatus == 3 {

				var str string
				str = item.SetlId + "	" +
					item.MdtrtId + "	" +
					item.PsnNo + "	" +
					fmt.Sprintf("%.4f", item.MedfeeSumamt) + "	" +
					fmt.Sprintf("%.4f", item.FundPaySumamt) + "	" +
					fmt.Sprintf("%.4f", item.AcctPay) + "	" + "1" + "\r\n"
				_, err = f.Write([]byte(str))

				var str2 string
				str2 = item.SetlId + "	" +
					item.MdtrtId + "	" +
					item.PsnNo + "	" +
					fmt.Sprintf("%.4f", 0-item.MedfeeSumamt) + "	" +
					fmt.Sprintf("%.4f", 0-item.FundPaySumamt) + "	" +
					fmt.Sprintf("%.4f", 0-item.AcctPay) + "	" + "1" + "\r\n"
				_, err = f.Write([]byte(str2))
			}

		}

	}
	Zip(file_path, zip_path)
	fmt.Println(ReadFile(zip_path))
	fmt.Println(string(ReadFile(zip_path)))

	if config.IsOpen == 1 {

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

		baseParams := models.BaseParams{
			SecretKey:      miConfig.SecretKey,
			FixmedinsCode:  miConfig.Code,
			InsuplcAdmdvs:  miConfig.InsuplcAdmdvs,
			MdtrtareaAdmvs: miConfig.MdtrtareaAdmvs,
			OrgName:        miConfig.OrgName,
			Doctor:         user_name,
		}

		result := service.Gdyb9101(baseParams, file_name, ReadFile(file_path))

		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 ResultNine
		if err := json.Unmarshal(userJSONBytes, &res); err != nil {
			utils.ErrorLog("解析失败:%v", err)
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
			return
		}

		if res.Infcode == 0 {
			fileNo := res.Output.FileQuryNo
			api := "http://127.0.0.1:9532/" + "gdyb/twelve?" +
				"file_qury_no=" + fileNo +
				"&setl_optins=" + "定点医保中心" +
				"&stmt_begndate=" + start_time +
				"&stm_enddate=" + end_time +
				"&medfee_sumamt=" + fmt.Sprintf("%.4f", medfee_sumamt) +
				"&fund_pay_sumamt=" + fmt.Sprintf("%.4f", fund_pay_sumamt) +
				"&cash_payamt=" + fmt.Sprintf("%.4f", psn_cash_pay) +
				"&fixmedins_setl_cnt=" + strconv.FormatInt(fixmedins_setl_cnt, 10) +
				"&fixmedins_code=" + miConfig.Code +
				"&insuplc_admdvs=" + miConfig.InsuplcAdmdvs +
				"&mdtrtarea_admvs=" + miConfig.MdtrtareaAdmvs +
				"&secret_key=" + miConfig.SecretKey +
				"&org_name=" + miConfig.OrgName +
				"&doctor=" + user_name
			resp, requestErr := http.Get(api)
			if requestErr != nil {
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}
			body, ioErr := ioutil.ReadAll(resp.Body)
			if ioErr != nil {
				utils.ErrorLog("接口返回数据读取失败: %v", ioErr)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}
			var respJSON map[string]interface{}
			if err := json.Unmarshal([]byte(string(body)), &respJSON); err != nil {
				utils.ErrorLog("接口返回数据解析JSON失败: %v", err)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}
			respJSON = respJSON["data"].(map[string]interface{})["pre"].(map[string]interface{})

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

			if res.Infcode == 0 {
				service.Gdyb9102(baseParams, zip_name, fileNo)

				micc := &models.MedicalInsuranceCostCompare{
					StartTime: startime.Unix(),
					EndTime:   endtime.Unix(),
					Insutype:  "0",
					CheckType: 2,
					Num:       fixmedins_setl_cnt,
					Mtime:     time.Now().Unix(),
					Status:    1,
					UserOrgId: adminUser.CurrentOrgId,
					CostTotal: medfee_sumamt,
					FuncTotal: fund_pay_sumamt,
					PsnPay:    psn_cash_pay,
					Creator:   admin_user_id,
					Ctime:     time.Now().Unix(),
				}

				service.CreateMedicalInsuranceCostCompareRecord(micc)

				c.ServeSuccessJSON(map[string]interface{}{
					"msg": "明细对账成功",
				})
			}

		} else {

		}
	}
}

type CustomOrderInfo struct {
	Name  string
	Spec  string
	Unit  string
	Count float64
	Price float64
	Total float64
}

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

	//timeLayout := "2006-01-02"
	//loc, _ := time.LoadLocation("Local")
	//
	//theTime, err := time.ParseInLocation(timeLayout+" 15:04:05", record_time+" 00:00:00", loc)
	//if err != nil {
	//	c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeParamWrong)
	//	return
	//}
	//recordDateTime := theTime.Unix()
	adminUser := c.GetAdminUserInfo()
	order, _ := service.GetHisOrderByID(order_id)
	his, _ := service.GetHisPatientByNumber(order.MdtrtId)
	orderInfos, _ := service.GetHisOrderInfoByNumber(order.Number)
	orderInfos_two, _ := service.GetHisOrderInfoByNumberTwo(order.Number)
	orderInfos = append(orderInfos, orderInfos_two...)
	his_hospital, _ := service.GetInHospitalRecordByNumber(order.MdtrtId)
	//diagnosisConfig, _ := service.FindDiagnoseById(his.Diagnosis)
	var diagnosis_ids []string
	if his.ID > 0 {
		diagnosis_ids = strings.Split(his.Diagnosis, ",")

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

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

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

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

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

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

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

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

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

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

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

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

	decimal.DivisionPrecision = 2

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

		if c.GetAdminUserInfo().CurrentOrgId == 10188 || c.GetAdminUserInfo().CurrentOrgId == 10217 {
			if item.MedChrgitmType == "03" { //检查费
				laboratoryCostTotal, _ = decimal.NewFromFloat(laboratoryCostTotal).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
				laboratoryCostSelfTotal, _ = decimal.NewFromFloat(laboratoryCostSelfTotal).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
				laboratoryCostPartSelfTotal, _ = decimal.NewFromFloat(laboratoryCostPartSelfTotal).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()
			}
		} else {

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

		}

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

		}

		if item.MedChrgitmType == "05" || item.MedChrgitmType == "1402" || item.MedChrgitmType == "1403" { //治疗费

			treatCostTotal, _ = decimal.NewFromFloat(treatCostTotal).Add(decimal.NewFromFloat(item.DetItemFeeSumamt)).Float64()
			treatCostSelfTotal, _ = decimal.NewFromFloat(treatCostSelfTotal).Add(decimal.NewFromFloat(item.OverlmtAmt)).Float64()
			treatCostPartSelfTotal, _ = decimal.NewFromFloat(treatCostPartSelfTotal).Add(decimal.NewFromFloat(item.PreselfpayAmt)).Float64()

		}

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

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

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

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

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

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

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

	baseParams := models.BaseParams{
		SecretKey:      miConfig.SecretKey,
		FixmedinsCode:  miConfig.Code,
		InsuplcAdmdvs:  miConfig.InsuplcAdmdvs,
		MdtrtareaAdmvs: miConfig.MdtrtareaAdmvs,
		OrgName:        miConfig.OrgName,
		Doctor:         user_name,
	}

	businessParams := models.BusinessParams{
		PsnNo:   order.PsnNo,
		MdtrtId: order.MdtrtId,
		SetlId:  order.SetlId,
	}
	var res ResultEleven
	var resEleven10265 ResultEleven10265

	if config.IsOpen == 1 {
		if miConfig.MdtrtareaAdmvs == "421300" {

			api := "http://192.168.124.4:9532/" + "hbyb/5203?psn_no=" + businessParams.PsnNo + "&mdtrt_id=" + businessParams.MdtrtId + "&setl_id=" + businessParams.SetlId +
				"&org_name=" + miConfig.OrgName + "&doctor=" + baseParams.Doctor + "&fixmedins_code=" + miConfig.Code +
				"&insuplc_admdvs=" + miConfig.InsuplcAdmdvs + "&mdtrtarea_admvs=" + miConfig.MdtrtareaAdmvs + "&secret_key=" + miConfig.SecretKey
			resp, requestErr := http.Get(api)
			if requestErr != nil {
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}

			body, ioErr := ioutil.ReadAll(resp.Body)
			if ioErr != nil {
				utils.ErrorLog("接口返回数据读取失败: %v", ioErr)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}
			var respJSON map[string]interface{}
			if err := json.Unmarshal([]byte(string(body)), &respJSON); err != nil {
				utils.ErrorLog("接口返回数据解析JSON失败: %v", err)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}

			respJSON = respJSON["data"].(map[string]interface{})["pre"].(map[string]interface{})
			result, _ := json.Marshal(respJSON)
			fmt.Println("log")
			fmt.Println(string(result))
			if err := json.Unmarshal([]byte(result), &res); err != nil {
				utils.ErrorLog("解析失败:%v", err)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}

		} else if miConfig.MdtrtareaAdmvs == "320921" || miConfig.MdtrtareaAdmvs == "320982" {

			var api string
			if miConfig.MdtrtareaAdmvs == "320921" {
				api = "http://192.168.2.110:9532/" + "jsyb/5203?psn_no=" + businessParams.PsnNo + "&mdtrt_id=" + businessParams.MdtrtId + "&setl_id=" + businessParams.SetlId +
					"&org_name=" + miConfig.OrgName + "&doctor=" + baseParams.Doctor + "&fixmedins_code=" + miConfig.Code +
					"&insuplc_admdvs=" + miConfig.InsuplcAdmdvs + "&mdtrtarea_admvs=" + miConfig.MdtrtareaAdmvs + "&secret_key=" + miConfig.SecretKey + "&url=" + miConfig.Url + "&ak=" + miConfig.AccessKey + "&cainfo=" + miConfig.Cainfo

				//req, _ = http.NewRequest("POST", "http://192.168.2.110:9532/"+"jsyb/2204", bytes.NewReader(bytesData))

			} else {
				//req, _ = http.NewRequest("POST", "http://192.168.5.251:9532/"+"jsyb/2204", bytes.NewReader(bytesData))
				api = "http://192.168.5.251:9532/" + "jsyb/5203?psn_no=" + businessParams.PsnNo + "&mdtrt_id=" + businessParams.MdtrtId + "&setl_id=" + businessParams.SetlId +
					"&org_name=" + miConfig.OrgName + "&doctor=" + baseParams.Doctor + "&fixmedins_code=" + miConfig.Code +
					"&insuplc_admdvs=" + miConfig.InsuplcAdmdvs + "&mdtrtarea_admvs=" + miConfig.MdtrtareaAdmvs + "&secret_key=" + miConfig.SecretKey + "&url=" + miConfig.Url + "&ak=" + miConfig.AccessKey + "&cainfo=" + miConfig.Cainfo

			}

			resp, requestErr := http.Get(api)
			if requestErr != nil {
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}

			body, ioErr := ioutil.ReadAll(resp.Body)
			if ioErr != nil {
				utils.ErrorLog("接口返回数据读取失败: %v", ioErr)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}
			var respJSON map[string]interface{}
			if err := json.Unmarshal([]byte(string(body)), &respJSON); err != nil {
				utils.ErrorLog("接口返回数据解析JSON失败: %v", err)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}

			respJSON = respJSON["data"].(map[string]interface{})["pre"].(map[string]interface{})
			result, _ := json.Marshal(respJSON)
			fmt.Println("log")
			fmt.Println(string(result))
			if err := json.Unmarshal([]byte(result), &resEleven10265); err != nil {
				utils.ErrorLog("解析失败:%v", err)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}

			res.InfRefmsgid = resEleven10265.InfRefmsgid
			res.Output = resEleven10265.Output
			res.ErrMsg = resEleven10265.ErrMsg
			res.Cainfo = resEleven10265.Cainfo
			res.WarnMsg = resEleven10265.WarnMsg
			infocode, _ := strconv.ParseInt(resEleven10265.Infcode, 10, 64)
			res.Infcode = infocode

		} else if miConfig.MdtrtareaAdmvs == "350500" {
			result, requestLog, _ := service.FJyb5203(baseParams, businessParams, miConfig.Url, miConfig.Code, miConfig.AppSecret, miConfig.SignKey, miConfig.EncKey)
			saveLog(result, requestLog, "5203", "结算单")
			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)
			if err := json.Unmarshal(userJSONBytes, &res); err != nil {
				utils.ErrorLog("解析失败:%v", err)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}
		} else if miConfig.MdtrtareaAdmvs == "150499" {

			api := "http://172.16.13.254:9532/" + "nmyb/5203?psn_no=" + businessParams.PsnNo + "&mdtrt_id=" + businessParams.MdtrtId + "&setl_id=" + businessParams.SetlId +
				"&org_name=" + miConfig.OrgName + "&doctor=" + baseParams.Doctor + "&fixmedins_code=" + miConfig.Code +
				"&insuplc_admdvs=" + miConfig.InsuplcAdmdvs + "&mdtrtarea_admvs=" + miConfig.MdtrtareaAdmvs + "&secret_key=" + miConfig.SecretKey

			resp, requestErr := http.Get(api)
			if requestErr != nil {
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}
			body, ioErr := ioutil.ReadAll(resp.Body)
			if ioErr != nil {
				utils.ErrorLog("接口返回数据读取失败: %v", ioErr)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}
			var respJSON map[string]interface{}
			if err := json.Unmarshal([]byte(string(body)), &respJSON); err != nil {
				utils.ErrorLog("接口返回数据解析JSON失败: %v", err)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}

			respJSON = respJSON["data"].(map[string]interface{})["pre"].(map[string]interface{})
			result, _ := json.Marshal(respJSON)
			fmt.Println("log")
			fmt.Println(string(result))
			if err := json.Unmarshal([]byte(result), &resEleven10265); err != nil {
				utils.ErrorLog("解析失败:%v", err)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}

			res.InfRefmsgid = resEleven10265.InfRefmsgid
			res.Output = resEleven10265.Output
			res.ErrMsg = resEleven10265.ErrMsg
			res.Cainfo = resEleven10265.Cainfo
			res.WarnMsg = resEleven10265.WarnMsg
			infocode, _ := strconv.ParseInt(resEleven10265.Infcode, 10, 64)
			res.Infcode = infocode

		} else {
			result := service.Gdyb5203(baseParams, businessParams)
			//service.Gdyb5204(baseParams, businessParams)
			//service.Gdyb5302(businessParams.PsnNo, baseParams.OrgName, baseParams.Doctor, baseParams.FixmedinsCode, baseParams.InsuplcAdmdvs, baseParams.MdtrtareaAdmvs, baseParams.SecretKey)

			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)

			if miConfig.Code == "H15049901371" {
				if err := json.Unmarshal(userJSONBytes, &resEleven10265); err != nil {
					utils.ErrorLog("解析失败:%v", err)
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
					return
				}
				res.InfRefmsgid = resEleven10265.InfRefmsgid
				res.Output = resEleven10265.Output
				res.ErrMsg = resEleven10265.ErrMsg
				res.Cainfo = resEleven10265.Cainfo
				res.WarnMsg = resEleven10265.WarnMsg
				infocode, _ := strconv.ParseInt(resEleven10265.Infcode, 10, 64)
				res.Infcode = infocode
			} else {
				if err := json.Unmarshal(userJSONBytes, &res); err != nil {
					utils.ErrorLog("解析失败:%v", err)
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
					return
				}

			}
		}

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

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

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

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

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

		yiliao_leibie := ""

		switch order.MedType {
		case "11":
			yiliao_leibie = "普通门诊"
			break
		case "12":
			yiliao_leibie = "门诊挂号"
			break
		case "13":
			yiliao_leibie = "急诊"
			break
		case "14":
			yiliao_leibie = "门诊特殊病"
			break
		case "15":
			yiliao_leibie = "门诊统筹"
			break
		case "16":
			yiliao_leibie = "门诊慢性病"
			break
		case "21":
			yiliao_leibie = "普通住院"
			break
		}
		departments, _ := service.GetDepartMentDetail(patientPrescription.Departments)

		if res.Infcode == 0 {
			c.ServeSuccessJSON(map[string]interface{}{
				"diagnosis":                               name,
				"order_infos":                             orderInfos,
				"number":                                  order.MdtrtId,
				"date":                                    order.SettleAccountsDate,
				"charge_admin":                            charge_admin,
				"printor_admin":                           printor_admin,
				"info":                                    res.Output.Setlinfo,
				"order":                                   order,
				"bedCostTotal":                            bedCostTotal,
				"bedCostSelfTotal":                        bedCostSelfTotal,
				"bedCostPartSelfTotal":                    bedCostPartSelfTotal,
				"operationCostTotal":                      operationCostTotal,
				"operationCostSelfTotal":                  operationCostSelfTotal,
				"operationCostPartSelfTotal":              operationCostPartSelfTotal,
				"otherCostTotal":                          otherCostTotal,
				"otherCostSelfTotal":                      otherCostSelfTotal,
				"otherCostPartSelfTotal":                  otherCostPartSelfTotal,
				"materialCostTotal":                       materialCostTotal,
				"materialCostSelfTotal":                   materialCostSelfTotal,
				"materialCostPartSelfTotal":               materialCostPartSelfTotal,
				"westernMedicineCostTotal":                westernMedicineCostTotal,
				"westernMedicineCostSelfTotal":            westernMedicineCostSelfTotal,
				"westernMedicineCostPartSelfTotal":        westernMedicineCostPartSelfTotal,
				"chineseTraditionalMedicineCostTotal":     chineseTraditionalMedicineCostTotal,
				"chineseTraditionalMedicineCostSelfTotal": chineseTraditionalMedicineCostSelfTotal,
				"chineseTraditionalMedicineCostPartSelfTotal": chineseTraditionalMedicineCostPartSelfTotal,
				"checkCostTotal":              checkCostTotal,
				"checkCostSelfTotal":          checkCostSelfTotal,
				"checkCostPartSelfTotal":      checkCostPartSelfTotal,
				"laboratoryCostTotal":         laboratoryCostTotal,
				"laboratoryCostSelfTotal":     laboratoryCostSelfTotal,
				"laboratoryCostPartSelfTotal": laboratoryCostPartSelfTotal,
				"treatCostTotal":              treatCostTotal,
				"treatCostSelfTotal":          treatCostSelfTotal,
				"treatCostPartSelfTotal":      treatCostPartSelfTotal,
				"doctor_info":                 doctor_info,
				"doctor_code":                 adminRole_two.DoctorCode,
				"doctor_name":                 doctor_name,
				"health_card_no":              order.PsnNo,
				"department":                  departments.Name,
				"yiliao_leibie":               yiliao_leibie,
				"after_money":                 order.AccountPrice,
				"patient":                     patient,
				"org_name":                    miConfig.OrgName,
				"org_code":                    miConfig.Code,
				"order_number":                order.Number,
				"his_hospital":                his_hospital,
				"his":                         his,
				"dia_config":                  dia_config,

				//"check_order_info":                            cus_slice,
			})
		}
	}

}

func (c *HisApiController) CheckTreatment() {
	patient_id, _ := c.GetInt64("patient_id")
	id_card_no := c.GetString("id_card_no")
	insutype := c.GetString("insutype")
	med_type := c.GetString("med_type")
	admin_user_id, _ := c.GetInt64("admin_user_id")

	adminUser := c.GetAdminUserInfo()
	patient, _ := service.GetPatientByID(adminUser.CurrentOrgId, patient_id)

	miConfig, _ := service.FindMedicalInsuranceInfo(adminUser.CurrentOrgId)
	config, _ := service.GetMedicalInsuranceConfig(adminUser.CurrentOrgId)
	roles, _ := service.GetAdminUserInfoByID(adminUser.CurrentOrgId, admin_user_id)

	if miConfig.MdtrtareaAdmvs == "421300" {
		var res ResultTwo
		api := "http://192.168.124.4:9532/" + "hbyb/1101?cert_no=" + "" +
			"&org_name=" + miConfig.OrgName + "&doctor=" + roles.UserName + "&fixmedins_code=" + miConfig.Code +
			"&insuplc_admdvs=" + miConfig.InsuplcAdmdvs + "&mdtrtarea_admvs=" + miConfig.MdtrtareaAdmvs + "&secret_key=" + miConfig.SecretKey + "&id_card_type=" + strconv.FormatInt(2, 10) + "&card_sn=" + "" + "&certificates=" + strconv.FormatInt(2, 10)
		resp, requestErr := http.Get(api)
		if requestErr != nil {
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
			return
		}

		body, ioErr := ioutil.ReadAll(resp.Body)
		if ioErr != nil {
			utils.ErrorLog("接口返回数据读取失败: %v", ioErr)
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
			return
		}
		var respJSON map[string]interface{}
		if err := json.Unmarshal([]byte(string(body)), &respJSON); err != nil {
			utils.ErrorLog("接口返回数据解析JSON失败: %v", err)
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
			return
		}

		respJSON = respJSON["data"].(map[string]interface{})["pre"].(map[string]interface{})
		result, _ := json.Marshal(respJSON)

		if err := json.Unmarshal([]byte(result), &res); err != nil {
			utils.ErrorLog("解析失败:%v", err)
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
			return
		}

		if res.Infcode == 0 {

			api := "http://192.168.124.4:9532/" + "hbyb/2001?cert_no=" + "" +
				"&org_name=" + miConfig.OrgName + "&doctor=" + roles.UserName + "&fixmedins_code=" + miConfig.Code +
				"&insuplc_admdvs=" + miConfig.InsuplcAdmdvs + "&mdtrtarea_admvs=" + miConfig.MdtrtareaAdmvs + "&secret_key=" + miConfig.SecretKey + "&psn_no=" + res.Output.Baseinfo.PsnNo + "&insutype=" + insutype + "&med_type=" + med_type
			resp, requestErr := http.Get(api)
			if requestErr != nil {
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}

			body, ioErr := ioutil.ReadAll(resp.Body)
			if ioErr != nil {
				utils.ErrorLog("接口返回数据读取失败: %v", ioErr)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}
			var respJSON map[string]interface{}
			if err := json.Unmarshal([]byte(string(body)), &respJSON); err != nil {
				utils.ErrorLog("接口返回数据解析JSON失败: %v", err)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}
			var res Result2001

			respJSON = respJSON["data"].(map[string]interface{})["pre"].(map[string]interface{})
			result2, _ := json.Marshal(respJSON)

			if err := json.Unmarshal([]byte(result2), &res); err != nil {
				utils.ErrorLog("解析失败:%v", err)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}

			if res.Infcode == 0 {
				c.ServeSuccessJSON(map[string]interface{}{
					"msg": res.Output.Trtinfo,
				})
			}

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

	} else {

		result := service.Gdyb1101A(id_card_no, miConfig.OrgName, roles.UserName, miConfig.Code, miConfig.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey, patient.Name)
		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 ResultTwo
		var res10265 ResultTwo10265
		if miConfig.Code == "H15049901371" {
			if err := json.Unmarshal(userJSONBytes, &res10265); err != nil {
				utils.ErrorLog("解析失败:%v", err)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}
			res.ErrMsg = res10265.ErrMsg
			infocode, _ := strconv.ParseInt(res10265.Infcode, 10, 64)
			res.Infcode = infocode
			res.Output = res10265.Output
			res.InfRefmsgid = res10265.InfRefmsgid
		} else {
			if err := json.Unmarshal(userJSONBytes, &res); err != nil {
				utils.ErrorLog("解析失败:%v", err)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}
		}

		var user_name string
		role, _ := service.GetAdminUserInfoByID(adminUser.CurrentOrgId, adminUser.AdminUser.Id)
		if role.ID == 0 {
			user_name = "xxx"
		} else {
			user_name = role.UserName
		}

		baseParams := models.BaseParams{
			SecretKey:      miConfig.SecretKey,
			FixmedinsCode:  miConfig.Code,
			InsuplcAdmdvs:  miConfig.InsuplcAdmdvs,
			MdtrtareaAdmvs: miConfig.MdtrtareaAdmvs,
			OrgName:        miConfig.OrgName,
			Doctor:         user_name,
		}

		if config.IsOpen == 1 {
			if miConfig.Code == "H15049901371" {
				if med_type == "14" {
					if insutype == "390" {
						med_type = "9933"
					} else if insutype == "310" {
						med_type = "990502"
					}
				} else if med_type == "11" {
					med_type = "11"
				}
			}
			result := service.Gdyb2001(baseParams, res.Output.Baseinfo.PsnNo, insutype, med_type)
			var dat map[string]interface{}
			if err := json.Unmarshal([]byte(result), &dat); err == nil {
				fmt.Println(dat)
			} else {
				fmt.Println(err)
			}
			var res Result2001
			var res10265 Result2001Org10265
			if miConfig.Code == "H15049901371" {
				if err := json.Unmarshal([]byte(result), &res10265); err != nil {
					utils.ErrorLog("解析失败:%v", err)
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
					return
				}
				res.ErrMsg = res10265.ErrMsg
				res.Output = res10265.Output
				res.InfRefmsgid = res10265.InfRefmsgid
				infocode, _ := strconv.ParseInt(res10265.Infcode, 10, 64)
				res.Infcode = infocode
			} else {
				if err := json.Unmarshal([]byte(result), &res); err != nil {
					utils.ErrorLog("解析失败:%v", err)
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
					return
				}
			}
			if res.Infcode == 0 {
				c.ServeSuccessJSON(map[string]interface{}{
					"msg": res.Output.Trtinfo,
				})
			}
		}
	}
}

//func (c *HisApiController) PutRecord() {
//	id, _ := c.GetInt64("id")
//	record_time := c.GetString("record_time")
//	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()
//
//	adminInfo := c.GetAdminUserInfo()
//	patient, _ := service.GetPatientByID(adminInfo.CurrentOrgId, id)
//	patientPrescription, _ := service.FindPatientPrescriptionInfo(adminInfo.CurrentOrgId, id, recordDateTime)
//
//	miConfig, _ := service.FindMedicalInsuranceInfo(adminInfo.CurrentOrgId)
//
//	fmt.Println(miConfig.SecretKey)
//
//	if patient == nil {
//		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodePatientNoExist)
//		return
//	}
//	if len(patient.IdCardNo) == 0 {
//		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeIDCartNo)
//		return
//	}
//	config, _ := service.GetMedicalInsuranceConfig(adminInfo.CurrentOrgId)
//	if config.IsOpen == 1 {
//		api := "http://127.0.0.1:9532/" + "gdyb/one?cert_no=" + patient.IdCardNo + "&org_name=" + miConfig.OrgName + "&doctor=" + patientPrescription.Doctor + "&fixmedins_code=" + miConfig.Code + "&insuplc_admdvs=" + miConfig.InsuplcAdmdvs + "&mdtrtarea_admvs=" + miConfig.MdtrtareaAdmvs + "&secret_key=" + miConfig.SecretKey
//		resp, requestErr := http.Get(api)
//		if requestErr != nil {
//			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
//			return
//		}
//		defer resp.Body.Close()
//		body, ioErr := ioutil.ReadAll(resp.Body)
//		if ioErr != nil {
//			utils.ErrorLog("接口返回数据读取失败: %v", ioErr)
//			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
//			return
//		}
//		var respJSON map[string]interface{}
//
//		if err := json.Unmarshal([]byte(string(body)), &respJSON); err != nil {
//			utils.ErrorLog("接口返回数据解析JSON失败: %v", err)
//			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
//			return
//		}
//
//		userJSON := respJSON["data"].(map[string]interface{})["pre"].(map[string]interface{})
//		userJSONBytes, _ := json.Marshal(userJSON)
//		var res ResultTwo
//		if err := json.Unmarshal(userJSONBytes, &res); err != nil {
//			utils.ErrorLog("解析失败:%v", err)
//			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
//			return
//		}
//		Iinfos, _ := json.Marshal(res.Output.Iinfo)
//		Idetinfos, _ := json.Marshal(res.Output.Idetinfo)
//		infoStr := string(Iinfos)
//		idetinfoStr := string(Idetinfos)
//
//		if res.Infcode == 0 {
//			his := models.VMHisPatient{
//				Status:      1,
//				Ctime:       time.Now().Unix(),
//				Mtime:       time.Now().Unix(),
//				PsnNo:       res.Output.Baseinfo.PsnNo,
//				PsnCertType: res.Output.Baseinfo.PsnCertType,
//				Certno:      res.Output.Baseinfo.Certno,
//				PsnName:     res.Output.Baseinfo.PsnName,
//				Gend:        res.Output.Baseinfo.Gend,
//				Naty:        res.Output.Baseinfo.Naty,
//				Brdy:        res.Output.Baseinfo.Brdy,
//				Age:         res.Output.Baseinfo.Age,
//				Iinfo:       infoStr,
//				Idetinfo:    idetinfoStr,
//				PatientId:   patient.ID,
//				RecordDate:  theTime.Unix(),
//				UserOrgId:   adminInfo.CurrentOrgId,
//				AdminUserId: adminInfo.AdminUser.Id,
//				IsReturn:    1,
//			}
//
//			//doctor_id := strconv.FormatInt(patientPrescription.DoctorId, 10)
//			//result := service.Gdyb2503(his.PsnNo, res.Output.Iinfo[0].Insutype, miConfig.OrgName, patientPrescription.Doctor, miConfig.Code, doctor_id, miConfig.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey, "重症尿毒症透析(血透)", "M07801")
//			//result2 := service.Gdyb5301(his.PsnNo, res.Output.Iinfo[0].Insutype, miConfig.OrgName, patientPrescription.Doctor, miConfig.Code, doctor_id, miConfig.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey, "重症尿毒症透析(血透)", "M07801")
//
//			//var dat map[string]interface{}
//			//if err := json.Unmarshal([]byte(result), &dat); err == nil {
//			//	fmt.Println(dat)
//			//} else {
//			//	fmt.Println(err)
//			//}
//
//			var dat2 map[string]interface{}
//			if err := json.Unmarshal([]byte(result2), &dat2); err == nil {
//				fmt.Println(dat2)
//			} else {
//				fmt.Println(err)
//			}
//
//		} else {
//			adminUser := c.GetAdminUserInfo()
//			errlog := &models.HisOrderError{
//				UserOrgId:  adminUser.CurrentOrgId,
//				Ctime:      time.Now().Unix(),
//				Mtime:      time.Now().Unix(),
//				ErrMsg:     res.ErrMsg,
//				Status:     1,
//				PatientId:  id,
//				RecordTime: recordDateTime,
//				Stage:      1,
//			}
//			service.CreateErrMsgLog(errlog)
//			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeGdybOneException)
//			return
//		}
//	}
//
//}

//func (c *HisApiController) GetUploadDiag() {
//	id, _ := c.GetInt64("id")
//	record_time := c.GetString("record_time")
//
//	diagnosis_id, _ := c.GetInt64("diagnosis")
//	sick_type, _ := c.GetInt64("sick_type")
//	reg_type, _ := c.GetInt64("reg_type")
//
//	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
//	}
//
//	var patientPrescription models.HisPrescriptionInfo
//	recordDateTime := theTime.Unix()
//	adminInfo := c.GetAdminUserInfo()
//	patientPrescription, _ = service.FindPatientPrescriptionInfo(adminInfo.CurrentOrgId, id, recordDateTime)
//
//	if patientPrescription.ID == 0 {
//		patientPrescription, _ = service.FindLastPatientPrescriptionInfo(adminInfo.CurrentOrgId, id, recordDateTime)
//	}
//
//	miConfig, _ := service.FindMedicalInsuranceInfo(adminInfo.CurrentOrgId)
//	diagnosisConfig, _ := service.FindDiagnoseById(diagnosis_id)
//	his, _ := service.GetVMHisPatientInfo(adminInfo.CurrentOrgId, id, recordDateTime)
//	sickConfig, _ := service.FindSickById(sick_type)
//	department, _ := service.GetDepartMentDetail(patientPrescription.Departments)
//
//	api2 := "http://127.0.0.1:9532/" + "gdyb/four?psn_no=" + his.PsnNo +
//		"&mdtrt_id=" + his.Number + "&doctor=" + patientPrescription.Doctor + "&department=" + department.Name +
//		"&diag=" + diagnosisConfig.ClassName + "&org_name=" + miConfig.OrgName + "&med_type=" + strconv.FormatInt(reg_type, 10) + "&doctor_id=" + strconv.FormatInt(patientPrescription.DoctorId, 10) + "&fixmedins_code=" + miConfig.Code + "&diag_code=" + diagnosisConfig.CountryCode +
//		"&insuplc_admdvs=" + miConfig.InsuplcAdmdvs + "&mdtrtarea_admvs=" + miConfig.MdtrtareaAdmvs + "&secret_key=" + miConfig.SecretKey + "&sick_code=" + sickConfig.ContentCode + "&sick_name=" + sickConfig.ClassName
//	resp2, requestErr2 := http.Get(api2)
//	if requestErr2 != nil {
//		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
//		return
//	}
//	body2, ioErr2 := ioutil.ReadAll(resp2.Body)
//	if ioErr2 != nil {
//		utils.ErrorLog("接口返回数据读取失败: %v", ioErr2)
//		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
//		return
//	}
//	var respJSON2 map[string]interface{}
//	if err := json.Unmarshal([]byte(string(body2)), &respJSON2); err != nil {
//		utils.ErrorLog("接口返回数据解析JSON失败: %v", err)
//		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
//		return
//	}
//	respJSON2 = respJSON2["data"].(map[string]interface{})["pre"].(map[string]interface{})
//	userJSONBytes2, _ := json.Marshal(respJSON2)
//
//	var res2 ResultSix
//	if err := json.Unmarshal(userJSONBytes2, &res2); err != nil {
//		utils.ErrorLog("解析失败:%v", err)
//		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
//		return
//	}
//	if res2.Infcode != 0 {
//		adminUser := c.GetAdminUserInfo()
//		errlog := &models.HisOrderError{
//			UserOrgId:  adminUser.CurrentOrgId,
//			Ctime:      time.Now().Unix(),
//			Mtime:      time.Now().Unix(),
//			ErrMsg:     res2.ErrMsg,
//			Status:     1,
//			PatientId:  id,
//			RecordTime: recordDateTime,
//			Stage:      3,
//		}
//		service.CreateErrMsgLog(errlog)
//
//		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeRegisterThreeException)
//		return
//	}
//
//	c.ServeSuccessJSON(map[string]interface{}{
//		"msg": "上传成功",
//	})
//
//}

type QueryResult struct {
	ID             int64
	Name           string
	Code           string
	List_type_code string
}

func (c *HisApiController) GetCheckCode() {
	ids_str := c.GetString("ids")
	record_type, _ := c.GetInt64("record_type") //1.药品 2.耗材  3.项目

	ids_arr := strings.Split(ids_str, ",")
	var queryResult []QueryResult
	ids := make([]int64, 0)
	for _, item := range ids_arr {
		id, _ := strconv.ParseInt(item, 10, 64)
		ids = append(ids, id)
	}
	if record_type == 1 {
		drugs, _ := service.GetBatchDrugList(ids)
		for _, item := range drugs {
			result := QueryResult{
				ID:             item.ID,
				Name:           item.DrugName,
				Code:           item.MedicalInsuranceNumber,
				List_type_code: "101",
			}
			queryResult = append(queryResult, result)
		}

	} else if record_type == 2 {
		goods, _ := service.GetBatchGoodInformationList(ids)

		for _, item := range goods {
			result := QueryResult{
				ID:             item.ID,
				Name:           item.GoodName,
				Code:           item.MedicalInsuranceNumber,
				List_type_code: "301",
			}
			queryResult = append(queryResult, result)
		}
	} else if record_type == 3 {
		projects, _ := service.GetBathchMyPorjecgList(ids)
		for _, item := range projects {
			result := QueryResult{
				ID:             item.ID,
				Name:           item.ProjectName,
				Code:           item.MedicalCode,
				List_type_code: "201",
			}
			queryResult = append(queryResult, result)
		}
	}

	admin_user_id, _ := c.GetInt64("admin_user_id")
	adminUser := c.GetAdminUserInfo()
	miConfig, _ := service.FindMedicalInsuranceInfo(adminUser.CurrentOrgId)
	config, _ := service.GetMedicalInsuranceConfig(adminUser.CurrentOrgId)

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

	baseParams := &models.BaseParams{
		SecretKey:      miConfig.SecretKey,
		FixmedinsCode:  miConfig.Code,
		InsuplcAdmdvs:  miConfig.InsuplcAdmdvs,
		MdtrtareaAdmvs: miConfig.MdtrtareaAdmvs,
		OrgName:        miConfig.OrgName,
		Doctor:         user_name,
	}

	if config.IsOpen == 1 {
		for _, item := range queryResult {
			var result string
			if record_type == 1 {
				result = service.Gdyb3301(baseParams, item.Name, item.Code, item.List_type_code, "2021-04-26", "", item.List_type_code)
			} else if record_type == 2 {
				result = service.Gdyb3301(baseParams, item.Name, item.Code, item.List_type_code, "2021-04-26", "", item.List_type_code)
			} else if record_type == 3 {
				result = service.Gdyb3301(baseParams, item.Name, item.Code, item.List_type_code, "2021-04-26", "", item.List_type_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 ResultSix
			if err := json.Unmarshal(userJSONBytes, &res); err != nil {
				utils.ErrorLog("解析失败:%v", err)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}
			if res.Infcode == 0 {
				if record_type == 1 {
					service.UpdateBaseDrugById(item.ID)
				} else if record_type == 2 {
					service.UpdateGoodInformaitonByDetail(item.ID)
				} else if record_type == 3 {
					service.UpdateProjectById(item.ID)
				}
				c.ServeSuccessJSON(map[string]interface{}{
					"failed_code": 0,
					"msg":         "目录对照成功",
				})
			} else {
				c.ServeSuccessJSON(map[string]interface{}{
					"failed_code": -10,
					"msg":         res.ErrMsg,
				})

			}
		}
	}
}
func (c *HisApiController) UnCheckCode() {
	ids_str := c.GetString("ids")
	record_type, _ := c.GetInt64("record_type") //1.药品 2.耗材  3.项目
	admin_user_id, _ := c.GetInt64("admin_user_id")
	ids_arr := strings.Split(ids_str, ",")
	var queryResult []QueryResult
	ids := make([]int64, 0)
	for _, item := range ids_arr {
		id, _ := strconv.ParseInt(item, 10, 64)
		ids = append(ids, id)
	}
	if record_type == 1 {
		drugs, _ := service.GetBatchDrugList(ids)
		for _, item := range drugs {
			result := QueryResult{
				ID:             item.ID,
				Name:           item.DrugName,
				Code:           item.MedicalInsuranceNumber,
				List_type_code: "101",
			}
			queryResult = append(queryResult, result)
		}

	} else if record_type == 2 {
		goods, _ := service.GetBatchGoodInformationList(ids)

		for _, item := range goods {
			result := QueryResult{
				ID:             item.ID,
				Name:           item.GoodName,
				Code:           item.MedicalInsuranceNumber,
				List_type_code: "301",
			}
			queryResult = append(queryResult, result)
		}
	} else if record_type == 3 {
		projects, _ := service.GetBathchMyPorjecgList(ids)
		for _, item := range projects {
			result := QueryResult{
				ID:             item.ID,
				Name:           item.ProjectName,
				Code:           item.MedicalCode,
				List_type_code: "201",
			}
			queryResult = append(queryResult, result)
		}
	}

	adminUser := c.GetAdminUserInfo()

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

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

	baseParams := &models.BaseParams{
		SecretKey:      miConfig.SecretKey,
		FixmedinsCode:  miConfig.Code,
		InsuplcAdmdvs:  miConfig.InsuplcAdmdvs,
		MdtrtareaAdmvs: miConfig.MdtrtareaAdmvs,
		OrgName:        miConfig.OrgName,
		Doctor:         user_name,
	}

	if config.IsOpen == 1 {
		for _, item := range queryResult {
			var result string
			if record_type == 1 {
				result = service.Gdyb3302(baseParams, item.Name, item.Code, item.List_type_code)
			} else if record_type == 2 {
				result = service.Gdyb3302(baseParams, item.Name, item.Code, item.List_type_code)
			} else if record_type == 3 {
				result = service.Gdyb3302(baseParams, item.Name, item.Code, item.List_type_code)
			}
			var dat2 map[string]interface{}
			if err := json.Unmarshal([]byte(result), &dat2); err == nil {
				fmt.Println(dat2)
			} else {
				fmt.Println(err)
			}
			userJSONBytes, _ := json.Marshal(dat2)
			var res ResultSix
			if err := json.Unmarshal(userJSONBytes, &res); err != nil {
				utils.ErrorLog("解析失败:%v", err)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}
			if res.Infcode == 0 {
				if record_type == 1 {
					service.UpdateDrugByIdDetail(item.ID)
				} else if record_type == 2 {
					service.UpdateGoodInfoById(item.ID)
				} else if record_type == 3 {
					service.UpdateMyProjectById(item.ID)
				}
				c.ServeSuccessJSON(map[string]interface{}{
					"failed_code": 0,
					"msg":         "撤销目录对照成功",
				})
			} else {
				c.ServeSuccessJSON(map[string]interface{}{
					"failed_code": -10,
					"msg":         res.ErrMsg,
				})
			}
		}
	}
}
func (c *HisApiController) GetPatientInfo() {
	id_card_no := c.GetString("id_card_no")
	admin_user_id, _ := c.GetInt64("admin_user_id")

	patient, _ := service.GetPatientByIDCard(id_card_no, c.GetAdminUserInfo().CurrentOrgId)

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

	role, _ := service.GetAdminUserInfoByID(c.GetAdminUserInfo().CurrentOrgId, admin_user_id)
	miConfig, _ := service.FindMedicalInsuranceInfo(c.GetAdminUserInfo().CurrentOrgId)
	config, _ := service.GetMedicalInsuranceConfig(c.GetAdminUserInfo().CurrentOrgId)
	if config.IsOpen == 1 {

		result := service.Gdyb1101A(id_card_no, miConfig.OrgName, role.UserName, miConfig.Code, miConfig.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey, patient.Name)
		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 ResultTwo
		var res10265 ResultTwo10265

		if miConfig.Code == "H15049901371" {
			if err := json.Unmarshal(userJSONBytes, &res10265); err != nil {
				utils.ErrorLog("解析失败:%v", err)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}
			res.ErrMsg = res10265.ErrMsg
			infocode, _ := strconv.ParseInt(res10265.Infcode, 10, 64)
			res.Infcode = infocode
			res.Output = res10265.Output
			res.InfRefmsgid = res10265.InfRefmsgid

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

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

		if res.Infcode != 0 {
			c.ServeSuccessJSON(map[string]interface{}{
				"failed_code": -10,
				"msg":         res.ErrMsg,
			})
		} else {
			c.ServeSuccessJSON(map[string]interface{}{
				"failed_code": 0,
				"info":        res,
			})
		}

	}
}
func (c *HisApiController) PsnPutOnRecord() {
	record_type, _ := c.GetInt64("type")
	patient_id, _ := c.GetInt64("patient_id")
	admin_user_id, _ := c.GetInt64("admin_user_id")
	start_time := c.GetString("start_time")
	end_time := c.GetString("end_time")

	adminUser := c.GetAdminUserInfo()
	miConfig, _ := service.FindMedicalInsuranceInfo(adminUser.CurrentOrgId)
	config, _ := service.GetMedicalInsuranceConfig(adminUser.CurrentOrgId)

	var patients []*models.Patients
	if record_type == 1 { //全部备案

		patient, _ := service.GetAllPatient(adminUser.CurrentOrgId)
		patients = append(patients, patient...)

	} else { //单个备案
		patient, _ := service.GetPatientByID(adminUser.CurrentOrgId, patient_id)
		patients = append(patients, patient)

	}

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

	if config.IsOpen == 1 {
		for _, item := range patients {
			api := "http://127.0.0.1:9532/" + "gdyb/one?cert_no=" + item.IdCardNo + "&org_name=" + miConfig.OrgName + "&doctor=" + user_name + "&fixmedins_code=" + miConfig.Code + "&insuplc_admdvs=" + miConfig.InsuplcAdmdvs + "&mdtrtarea_admvs=" + miConfig.MdtrtareaAdmvs + "&secret_key=" + miConfig.SecretKey
			resp, requestErr := http.Get(api)
			if requestErr != nil {
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}
			defer resp.Body.Close()
			body, ioErr := ioutil.ReadAll(resp.Body)
			if ioErr != nil {
				utils.ErrorLog("接口返回数据读取失败: %v", ioErr)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}
			var respJSON map[string]interface{}

			if err := json.Unmarshal([]byte(string(body)), &respJSON); err != nil {
				utils.ErrorLog("接口返回数据解析JSON失败: %v", err)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}

			userJSON := respJSON["data"].(map[string]interface{})["pre"].(map[string]interface{})
			userJSONBytes, _ := json.Marshal(userJSON)
			var res ResultTwo
			if err := json.Unmarshal(userJSONBytes, &res); err != nil {
				utils.ErrorLog("解析失败:%v", err)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}

			if res.Infcode == 0 {
				result := service.Gdyb2505(res.Output.Baseinfo.PsnNo, user_name, miConfig.OrgName, miConfig.Code, miConfig.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey, start_time, end_time)
				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 res2 ResultThirteen
				if err := json.Unmarshal(userJSONBytes, &res2); err != nil {
					utils.ErrorLog("解析失败:%v", err)
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
					return
				}
				if res2.Infcode == 0 {
					psnResult := &models.GdybPsnRecord{
						UserOrgId:     adminUser.CurrentOrgId,
						PatientId:     item.ID,
						PsnNo:         res.Output.Baseinfo.PsnNo,
						Ctime:         time.Now().Unix(),
						Mtime:         time.Now().Unix(),
						Status:        1,
						IsCancel:      1,
						TrtDclaDetlSn: res2.Output.Result.TrtDclaDetlSn,
					}
					service.CreatePsnRecord(psnResult)

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

			}

		}
	}

}
func (c *HisApiController) PsnUnPutOnRecord() {
	id, _ := c.GetInt64("id")
	//record_type, _ := c.GetInt64("type")
	admin_user_id, _ := c.GetInt64("admin_user_id")

	adminUser := c.GetAdminUserInfo()
	miConfig, _ := service.FindMedicalInsuranceInfo(adminUser.CurrentOrgId)
	config, _ := service.GetMedicalInsuranceConfig(adminUser.CurrentOrgId)

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

	psn_record, _ := service.GetPsnRecordById(id)
	if psn_record.ID == 0 {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorPsnRecordNoExistWrong)
		return
	}
	if config.IsOpen == 1 {
		result := service.Gdyb2506(psn_record.PsnNo, user_name, miConfig.OrgName, miConfig.Code, miConfig.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey, psn_record.TrtDclaDetlSn)
		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 ResultFourteen
		if err := json.Unmarshal(userJSONBytes, &res); err != nil {
			utils.ErrorLog("解析失败:%v", err)
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
			return
		}
		if res.Infcode == 0 {
			psn_record.IsCancel = 2
			service.CreatePsnRecord(&psn_record)
		} else {
			c.ServeSuccessJSON(map[string]interface{}{
				"failed_code": -10,
				"msg":         res.ErrMsg,
			})
			return
		}
	}

}
func (c *HisApiController) PsnPutNCDSOnRecord() {
	patient_id, _ := c.GetInt64("patient_id")
	insutype_two := c.GetString("insutype")
	psn_no := c.GetString("psn_no")
	doctor_id, _ := c.GetInt64("doctor_id")
	sick_id, _ := c.GetInt64("sick_id")
	department_id, _ := c.GetInt64("department_id")
	start_time := c.GetString("start_time")
	end_time := c.GetString("end_time")
	check_time := c.GetString("check_time")

	adminUser := c.GetAdminUserInfo()
	patient, _ := service.GetPatientByID(adminUser.CurrentOrgId, patient_id)
	miConfig, _ := service.FindMedicalInsuranceInfo(adminUser.CurrentOrgId)
	config, _ := service.GetMedicalInsuranceConfig(adminUser.CurrentOrgId)
	sick, _ := service.FindSickById(sick_id)
	doctor, _ := service.GetAdminUserInfoByID(adminUser.CurrentOrgId, doctor_id)

	role, _ := service.GetAdminUserInfoByID(adminUser.CurrentOrgId, doctor_id)
	var res ResultTwo
	var res10265 ResultTwo10265
	if miConfig.MdtrtareaAdmvs == "320921" || miConfig.MdtrtareaAdmvs == "320982" {
		psn_info, _ := service.GetPsnByPatientId(patient.ID)
		api := "http://192.168.2.110:9532/" + "hbyb/1101?cert_no=" + "" +
			"&org_name=" + miConfig.OrgName + "&doctor=" + role.UserName + "&fixmedins_code=" + miConfig.Code +
			"&insuplc_admdvs=" + miConfig.InsuplcAdmdvs + "&mdtrtarea_admvs=" + miConfig.MdtrtareaAdmvs + "&secret_key=" + miConfig.SecretKey + "&id_card_type=" + strconv.FormatInt(3, 10) + "&card_sn=" + "" + "&certificates=" + strconv.FormatInt(1, 10) + "&url=" + miConfig.Url + "&ak=" + miConfig.AccessKey + "&verify_number=" + psn_info.VerifyNumber + "&cainfo=" + miConfig.Cainfo
		resp, requestErr := http.Get(api)
		if requestErr != nil {
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
			return
		}

		body, ioErr := ioutil.ReadAll(resp.Body)
		if ioErr != nil {
			utils.ErrorLog("接口返回数据读取失败: %v", ioErr)
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
			return
		}
		var respJSON map[string]interface{}
		if err := json.Unmarshal([]byte(string(body)), &respJSON); err != nil {
			utils.ErrorLog("接口返回数据解析JSON失败: %v", err)
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
			return
		}

		respJSON = respJSON["data"].(map[string]interface{})["pre"].(map[string]interface{})
		result, _ := json.Marshal(respJSON)
		fmt.Println("log")
		fmt.Println(string(result))

		if err := json.Unmarshal([]byte(result), &res10265); err != nil {
			utils.ErrorLog("解析失败:%v", err)
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
			return
		}
		res.ErrMsg = res10265.ErrMsg
		infocode, _ := strconv.ParseInt(res10265.Infcode, 10, 64)
		res.Infcode = infocode
		res.Output = res10265.Output
		res.InfRefmsgid = res10265.InfRefmsgid

	} else {
		result, _ := service.Gdyb1101(patient.IdCardNo, miConfig.OrgName, role.UserName, miConfig.Code, miConfig.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey, 2, "", "0", patient.Name)
		if miConfig.Code == "H15049901371" {
			if err := json.Unmarshal([]byte(result), &res10265); err != nil {
				utils.ErrorLog("解析失败:%v", err)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}
			res.ErrMsg = res10265.ErrMsg
			infocode, _ := strconv.ParseInt(res10265.Infcode, 10, 64)
			res.Infcode = infocode
			res.Output = res10265.Output
			res.InfRefmsgid = res10265.InfRefmsgid
		} else {
			if err := json.Unmarshal([]byte(result), &res); err != nil {
				utils.ErrorLog("解析失败:%v", err)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}
		}

	}

	Iinfos, _ := json.Marshal(res.Output.Iinfo)
	infoStr := string(Iinfos)
	var rf []*ResultFive
	json.Unmarshal([]byte(infoStr), &rf)

	var insuplc_admdvs string
	var insutype string
	var is390 int = 0
	var is310 int = 0
	var insutypes []*ResultFive

	for _, item := range rf {
		if (item.Insutype == "390" && item.PsnInsuStas == "1") || (item.Insutype == "310" && item.PsnInsuStas == "1") {
			insutypes = append(insutypes, item)
		}
	}

	if len(insutypes) == 1 {
		insutype = insutypes[0].Insutype
		//insuplc_admdvs = insutypes[0].InsuplcAdmdvs
	} else {
		for _, i := range insutypes {
			if i.Insutype == "390" {
				is390 = 1
			}

			if i.Insutype == "310" {
				is310 = 1
			}
		}
	}
	if is390 == 1 {
		insutype = "390"
	}

	if is310 == 1 {
		insutype = "310"
	}

	if len(insutypes) == 2 {
		insutype = insutype_two
	}

	if len(insutypes) == 0 {
		insutype = "310"
	}

	insutype = insutype_two

	fmt.Println(insutype)
	for _, item := range rf {
		fmt.Println(item.Insutype)
		fmt.Println(insutype)
		if item.Insutype == insutype {
			fmt.Println(item.Insutype)
			fmt.Println(insutype)
			insuplc_admdvs = item.InsuplcAdmdvs
		}
	}
	fmt.Println(insuplc_admdvs)
	var res2 ResultThirteen
	var res10265_2 ResultThirteen10265
	if config.IsOpen == 1 {
		if miConfig.MdtrtareaAdmvs == "320921" || miConfig.MdtrtareaAdmvs == "320982" {

		} else {
			result := service.Gdyb2503(psn_no, insutype, miConfig.OrgName, doctor.UserName, miConfig.Code, strconv.FormatInt(doctor.ID, 10), insuplc_admdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey, sick.ClassName, sick.ContentCode, start_time, end_time, check_time)
			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)
			if miConfig.Code == "H15049901371" {
				if err := json.Unmarshal(userJSONBytes, &res10265_2); err != nil {
					utils.ErrorLog("解析失败:%v", err)
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
					return
				}
				res2.ErrMsg = res10265_2.ErrMsg
				infocode, _ := strconv.ParseInt(res10265_2.Infcode, 10, 64)
				res2.Infcode = infocode
				res2.Output = res10265_2.Output
				res2.InfRefmsgid = res10265_2.InfRefmsgid
			} else {
				if err := json.Unmarshal(userJSONBytes, &res2); err != nil {
					utils.ErrorLog("解析失败:%v", err)
					c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
					return
				}
			}
		}

		if res2.Infcode == 0 {
			psnResult := &models.GdybPsnNcdsRecord{
				UserOrgId:     adminUser.CurrentOrgId,
				PatientId:     patient.ID,
				PsnNo:         psn_no,
				DoctorId:      doctor.AdminUserId,
				DepartmentId:  department_id,
				SickType:      sick_id,
				Insutype:      insutype,
				Ctime:         time.Now().Unix(),
				Mtime:         time.Now().Unix(),
				Status:        1,
				IsCancel:      1,
				TrtDclaDetlSn: res2.Output.Result.TrtDclaDetlSn,
			}
			service.CreatePsnNCDSRecord(psnResult)
			c.ServeSuccessJSON(map[string]interface{}{
				"failed_code": 0,
				"msg":         "备案成功",
				"result":      psnResult,
			})

		} else {
			c.ServeSuccessJSON(map[string]interface{}{
				"failed_code": -10,
				"msg":         res2.ErrMsg,
			})
			return
		}
	}
}
func (c *HisApiController) PsnPutUnNCDSOnRecord() {
	id, _ := c.GetInt64("id")
	admin_user_id, _ := c.GetInt64("admin_user_id")
	adminUser := c.GetAdminUserInfo()
	miConfig, _ := service.FindMedicalInsuranceInfo(adminUser.CurrentOrgId)
	config, _ := service.GetMedicalInsuranceConfig(adminUser.CurrentOrgId)

	//config, _ := service.Ge(adminUser.CurrentOrgId)
	patient, _ := service.GetPatientByID(c.GetAdminUserInfo().CurrentOrgId, id)
	//role, _ := service.GetAdminUserInfoByID(adminUser.CurrentOrgId, admin_user_id)
	//var user_name string
	role, _ := service.GetAdminUserInfoByID(adminUser.CurrentOrgId, admin_user_id)
	//if role.ID == 0 {
	//	user_name = "xxx"
	//} else {
	//	user_name = role.UserName
	//}
	psn_record, _ := service.GetPsnNCDSRecordById(id)
	if psn_record.ID == 0 {
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorPsnRecordNoExistWrong)
		return
	}
	result, _ := service.Gdyb1101(patient.IdCardNo, miConfig.OrgName, role.UserName, miConfig.Code, miConfig.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey, 2, "", "0", patient.Name)
	var res ResultTwo
	var res10265 ResultTwo10265

	if miConfig.Code == "H15049901371" {
		if err := json.Unmarshal([]byte(result), &res10265); err != nil {
			utils.ErrorLog("解析失败:%v", err)
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
			return
		}
		res.ErrMsg = res10265.ErrMsg
		infocode, _ := strconv.ParseInt(res10265.Infcode, 10, 64)
		res.Infcode = infocode
		res.Output = res10265.Output
		res.InfRefmsgid = res10265.InfRefmsgid

	} else {
		if err := json.Unmarshal([]byte(result), &res); err != nil {
			utils.ErrorLog("解析失败:%v", err)
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
			return
		}
	}
	Iinfos, _ := json.Marshal(res.Output.Iinfo)
	infoStr := string(Iinfos)
	var rf []*ResultFive
	json.Unmarshal([]byte(infoStr), &rf)

	var insuplc_admdvs string
	var insutype string
	var is390 int = 0
	var is310 int = 0
	var insutypes []*ResultFive

	for _, item := range rf {
		if (item.Insutype == "390" && item.PsnInsuStas == "1") || (item.Insutype == "310" && item.PsnInsuStas == "1") {
			insutypes = append(insutypes, item)
		}
	}

	if len(insutypes) == 1 {
		insutype = insutypes[0].Insutype
		//insuplc_admdvs = insutypes[0].InsuplcAdmdvs
	} else {
		for _, i := range insutypes {
			if i.Insutype == "390" {
				is390 = 1
			}

			if i.Insutype == "310" {
				is310 = 1
			}
		}
	}
	if is390 == 1 {
		insutype = "390"
	}

	if is310 == 1 {
		insutype = "310"
	}

	if len(insutypes) == 0 {
		insutype = "310"
	}
	insutype = psn_record.Insutype

	for _, item := range rf {
		if item.Insutype == insutype {
			insuplc_admdvs = item.InsuplcAdmdvs
		}
	}

	if config.IsOpen == 1 {
		result := service.Gdyb2504(psn_record.PsnNo, miConfig.OrgName, role.UserName, miConfig.Code, insuplc_admdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey, psn_record.TrtDclaDetlSn)
		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 ResultFourteen
		var res10265 ResultFourteen10265

		if miConfig.Code == "H15049901371" {
			if err := json.Unmarshal(userJSONBytes, &res10265); err != nil {
				utils.ErrorLog("解析失败:%v", err)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}
			res.ErrMsg = res10265.ErrMsg
			infocode, _ := strconv.ParseInt(res10265.Infcode, 10, 64)
			res.Infcode = infocode
			res.Output = res10265.Output
			res.InfRefmsgid = res10265.InfRefmsgid

		} else {
			if err := json.Unmarshal([]byte(result), &res); err != nil {
				utils.ErrorLog("解析失败:%v", err)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}
		}

		//if err := json.Unmarshal(userJSONBytes, &res); err != nil {
		//	utils.ErrorLog("解析失败:%v", err)
		//	c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
		//	return
		//}
		if res.Infcode == 0 {
			psn_record.IsCancel = 2
			service.CreatePsnNCDSRecord(&psn_record)
			c.ServeSuccessJSON(map[string]interface{}{
				"failed_code": 0,
				"msg":         "撤销备案成功",
			})
		} else {
			c.ServeSuccessJSON(map[string]interface{}{
				"failed_code": -10,
				"msg":         res.ErrMsg,
			})
			return
		}
	}

}

func (c *HisApiController) TestTest() {
	patient, _ := service.GetHisPatientInfo(4, 456, 1619712000)
	fmt.Println(patient.Iinfo)

}

type CustomData struct {
	MsgId string
	PsnNo string
	Info  string
}

func (c *HisApiController) ReversalData() {
	var customData []*CustomData

	custom := &CustomData{
		MsgId: "H44022900158202103301714472004",
		PsnNo: "44020000001101329945",
		Info:  "2207",
	}
	customData = append(customData, custom)

	custom1 := &CustomData{
		MsgId: "H4402290015820210330172057803",
		PsnNo: "44020000001101161813",
		Info:  "2207",
	}
	customData = append(customData, custom1)
	custom2 := &CustomData{
		MsgId: "H44022900158202103301705198813",
		PsnNo: "44190000133097375417",
		Info:  "2207",
	}
	customData = append(customData, custom2)
	custom3 := &CustomData{
		MsgId: "H44022900158202103301715524756",
		PsnNo: "44020000001100187221",
		Info:  "2207",
	}
	customData = append(customData, custom3)
	custom4 := &CustomData{
		MsgId: "H44022900158202103301730376224",
		PsnNo: "44020000001101959155",
		Info:  "2207",
	}
	customData = append(customData, custom4)
	custom5 := &CustomData{
		MsgId: "H44022900158202103301748008725",
		PsnNo: "44020000001104246641",
		Info:  "2207",
	}
	customData = append(customData, custom5)
	custom6 := &CustomData{
		MsgId: "H44022900158202103301718096755",
		PsnNo: "44020000001102211860",
		Info:  "2207",
	}
	customData = append(customData, custom6)
	custom7 := &CustomData{
		MsgId: "H44022900158202103301736551640",
		PsnNo: "44020000001102687718",
		Info:  "2207",
	}

	customData = append(customData, custom7)

	custom8 := &CustomData{
		MsgId: "H44022900158202103301743097676",
		PsnNo: "44020000001102127785",
		Info:  "2207",
	}
	customData = append(customData, custom8)
	custom9 := &CustomData{
		MsgId: "H44022900158202103301712304203",
		PsnNo: "44020000001101518097",
		Info:  "2207",
	}
	customData = append(customData, custom9)
	custom10 := &CustomData{
		MsgId: "H44022900158202103301738448785",
		PsnNo: "44020000001100500813",
		Info:  "2207",
	}
	customData = append(customData, custom10)

	custom11 := &CustomData{
		MsgId: "H44022900158202103301732455843",
		PsnNo: "44020000001102690557",
		Info:  "2207",
	}

	customData = append(customData, custom11)

	custom12 := &CustomData{
		MsgId: "H44022900158202103301745421708",
		PsnNo: "44020000001102211928",
		Info:  "2207",
	}
	customData = append(customData, custom12)

	custom1212 := &CustomData{
		MsgId: "H440229001582021033017351627",
		PsnNo: "44020000001102481733",
		Info:  "2207",
	}
	customData = append(customData, custom1212)

	custom13 := &CustomData{
		MsgId: "H44022900158202103301740327951",
		PsnNo: "44020000001103174866",
		Info:  "2207",
	}
	customData = append(customData, custom13)
	custom14 := &CustomData{
		MsgId: "H4402290015820210330174922668",
		PsnNo: "44020000001102927272",
		Info:  "2207",
	}
	customData = append(customData, custom14)
	custom15 := &CustomData{
		MsgId: "H44022900158202103301752362273",
		PsnNo: "44020000001102942890",
		Info:  "2207",
	}
	customData = append(customData, custom15)

	custom16 := &CustomData{
		MsgId: "H44022900158202103301751082917",
		PsnNo: "44020000001101662162",
		Info:  "2207",
	}
	customData = append(customData, custom16)

	custom17 := &CustomData{
		MsgId: "H44022900158202103301754147728",
		PsnNo: "44020000000229014511",
		Info:  "2207",
	}
	customData = append(customData, custom17)

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

	for _, item := range customData {
		result := service.Gdyb2601(item.PsnNo, item.MsgId, item.Info, miConfig.OrgName, "张俊杰", miConfig.Code, miConfig.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey)
		fmt.Println(result)
	}
}

//func (c *HisApiController) GetAllopatry() {
//	year := c.GetString("year")
//	month := c.GetString("month")
//	admin_user_id, _ := c.GetInt64("admin_user_id")
//	adminUser := c.GetAdminUserInfo()
//	miConfig, _ := service.FindMedicalInsuranceInfo(adminUser.CurrentOrgId)
//	roles, _ := service.GetAdminUserInfoByID(adminUser.CurrentOrgId, admin_user_id)
//	result, _ := service.Gdyb9001(miConfig.OrgName, roles.UserName, miConfig.Code, miConfig.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey, 1669)
//
//	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 models.Result9001
//	if err := json.Unmarshal(userJSONBytes, &res); err != nil {
//		utils.ErrorLog("解析失败:%v", err)
//		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
//		return
//	}
//
//	result2, _ := service.Gdyb3260(miConfig.OrgName, roles.UserName, miConfig.Code, miConfig.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey, year, month, res.Output.Signinoutb.SignNo)
//	var dat2 map[string]interface{}
//	if err := json.Unmarshal([]byte(result2), &dat2); err == nil {
//		fmt.Println(dat)
//	} else {
//		fmt.Println(err)
//	}
//	userJSONBytes2, _ := json.Marshal(dat2)
//	var res2 models.Result3260
//	if err := json.Unmarshal(userJSONBytes2, &res2); err != nil {
//		utils.ErrorLog("解析失败:%v", err)
//		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
//		return
//	}
//	if res2.Infcode == 0 {
//		c.ServeSuccessJSON(map[string]interface{}{
//			"list": res2.Output.Data,
//		})
//		return
//	} else {
//		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
//		return
//	}
//
//}

//func (c *HisApiController) ComfirmAllopatry() {
//	year := c.GetString("year")
//	month := c.GetString("month")
//	admin_user_id, _ := c.GetInt64("admin_user_id")
//	adminUser := c.GetAdminUserInfo()
//	miConfig, _ := service.FindMedicalInsuranceInfo(adminUser.CurrentOrgId)
//	roles, _ := service.GetAdminUserInfoByID(adminUser.CurrentOrgId, admin_user_id)
//	result, _ := service.Gdyb9001(miConfig.OrgName, roles.UserName, miConfig.Code, miConfig.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey, 1669)
//	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 models.Result9001
//	if err := json.Unmarshal(userJSONBytes, &res); err != nil {
//		utils.ErrorLog("解析失败:%v", err)
//		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
//		return
//	}
//
//	result2, _ := service.Gdyb3260(miConfig.OrgName, roles.UserName, miConfig.Code, miConfig.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey, year, month, res.Output.Signinoutb.SignNo)
//	var dat2 map[string]interface{}
//	if err := json.Unmarshal([]byte(result2), &dat2); err == nil {
//		fmt.Println(dat)
//	} else {
//		fmt.Println(err)
//	}
//	userJSONBytes2, _ := json.Marshal(dat2)
//	var res2 models.Result3260
//	if err := json.Unmarshal(userJSONBytes2, &res2); err != nil {
//		utils.ErrorLog("解析失败:%v", err)
//		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
//		return
//	}
//
//	if res2.Infcode == 0 {
//		result, _, msgId := service.Gdyb3261(miConfig.OrgName, roles.UserName, miConfig.Code, miConfig.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey, year, month, res2)
//		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 res3 models.Result3261
//		if err := json.Unmarshal(userJSONBytes, &res3); err != nil {
//			utils.ErrorLog("解析失败:%v", err)
//			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
//			return
//		}
//
//		if res3.Infcode == 0 {
//			record := &models.HisYidiClearRecord{
//				UserOrgId: c.GetAdminUserInfo().CurrentOrgId,
//				Ctime:     time.Now().Unix(),
//				Mtime:     time.Now().Unix(),
//				Status:    1,
//				MsgId:     msgId,
//			}
//			service.SaveClearRecord(record)
//			c.ServeSuccessJSON(map[string]interface{}{
//				"msg": "提取成功",
//			})
//		}
//	}
//}

func (c *HisApiController) RefundAllopatry() {
	year := c.GetString("year")
	month := c.GetString("month")
	id, _ := c.GetInt64("id")
	admin_user_id, _ := c.GetInt64("admin_user_id")
	adminUser := c.GetAdminUserInfo()
	miConfig, _ := service.FindMedicalInsuranceInfo(adminUser.CurrentOrgId)
	roles, _ := service.GetAdminUserInfoByID(adminUser.CurrentOrgId, admin_user_id)
	record, _ := service.GetClearRecordById(id)
	result, _ := service.Gdyb3262(miConfig.OrgName, roles.UserName, miConfig.Code, miConfig.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey, year, month, record.MsgId)

	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 empty ResultFourteen
	if err := json.Unmarshal(userJSONBytes, &empty); err != nil {
		utils.ErrorLog("解析失败:%v", err)
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
		return
	}
	if empty.Infcode == 0 {
		c.ServeSuccessJSON(map[string]interface{}{
			"msg": "撤销成功",
		})
		return
	}
}

func (c *HisApiController) ReversalOtherData() {
	var customData []*CustomData

	custom := &CustomData{
		MsgId: "H44022900158202103301714472004",
		PsnNo: "44020000001101329945",
		Info:  "2208",
	}
	customData = append(customData, custom)

	custom1 := &CustomData{
		MsgId: "H4402290015820210330172057803",
		PsnNo: "44020000001101161813",
		Info:  "2208",
	}
	customData = append(customData, custom1)
	custom2 := &CustomData{
		MsgId: "H44022900158202103301705198813",
		PsnNo: "44190000133097375417",
		Info:  "2208",
	}
	customData = append(customData, custom2)
	custom3 := &CustomData{
		MsgId: "H44022900158202103301715524756",
		PsnNo: "44020000001100187221",
		Info:  "2208",
	}
	customData = append(customData, custom3)
	custom4 := &CustomData{
		MsgId: "H44022900158202103301730376224",
		PsnNo: "44020000001101959155",
		Info:  "2208",
	}
	customData = append(customData, custom4)
	custom5 := &CustomData{
		MsgId: "H44022900158202103301748008725",
		PsnNo: "44020000001104246641",
		Info:  "2208",
	}
	customData = append(customData, custom5)
	custom6 := &CustomData{
		MsgId: "H44022900158202103301718096755",
		PsnNo: "44020000001102211860",
		Info:  "2208",
	}
	customData = append(customData, custom6)
	custom7 := &CustomData{
		MsgId: "H44022900158202103301736551640",
		PsnNo: "44020000001102687718",
		Info:  "2208",
	}

	customData = append(customData, custom7)

	custom8 := &CustomData{
		MsgId: "H44022900158202103301743097676",
		PsnNo: "44020000001102127785",
		Info:  "2208",
	}
	customData = append(customData, custom8)
	custom9 := &CustomData{
		MsgId: "H44022900158202103301712304203",
		PsnNo: "44020000001101518097",
		Info:  "2208",
	}
	customData = append(customData, custom9)
	custom10 := &CustomData{
		MsgId: "H44022900158202103301738448785",
		PsnNo: "44020000001100500813",
		Info:  "2208",
	}
	customData = append(customData, custom10)

	custom11 := &CustomData{
		MsgId: "H44022900158202103301732455843",
		PsnNo: "44020000001102690557",
		Info:  "2208",
	}

	customData = append(customData, custom11)

	custom12 := &CustomData{
		MsgId: "H44022900158202103301745421708",
		PsnNo: "44020000001102211928",
		Info:  "2208",
	}
	customData = append(customData, custom12)

	custom1212 := &CustomData{
		MsgId: "H440229001582021033017351627",
		PsnNo: "44020000001102481733",
		Info:  "2208",
	}
	customData = append(customData, custom1212)

	custom13 := &CustomData{
		MsgId: "H44022900158202103301740327951",
		PsnNo: "44020000001103174866",
		Info:  "2208",
	}
	customData = append(customData, custom13)
	custom14 := &CustomData{
		MsgId: "H4402290015820210330174922668",
		PsnNo: "44020000001102927272",
		Info:  "2208",
	}
	customData = append(customData, custom14)
	custom15 := &CustomData{
		MsgId: "H44022900158202103301752362273",
		PsnNo: "44020000001102942890",
		Info:  "2208",
	}
	customData = append(customData, custom15)

	custom16 := &CustomData{
		MsgId: "H44022900158202103301751082917",
		PsnNo: "44020000001101662162",
		Info:  "2208",
	}
	customData = append(customData, custom16)

	custom17 := &CustomData{
		MsgId: "H44022900158202103301754147728",
		PsnNo: "44020000000229014511",
		Info:  "2208",
	}
	customData = append(customData, custom17)

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

	for _, item := range customData {
		result := service.Gdyb2601(item.PsnNo, item.MsgId, item.Info, miConfig.OrgName, "张俊杰", miConfig.Code, miConfig.InsuplcAdmdvs, miConfig.MdtrtareaAdmvs, miConfig.SecretKey)
		fmt.Println(result)
	}
}

func PathExists(path string) (bool, error) {
	_, err := os.Stat(path)
	if err == nil {
		return true, nil
	}
	if os.IsNotExist(err) {
		return false, nil
	}
	return false, err
}

//创建文件夹
func Mkdir(dir string) {
	// 创建文件夹
	exist, err := PathExists(dir)
	if err != nil {
		fmt.Println(err.Error())
	} else {
		if exist {
			fmt.Println(dir + "文件夹已存在!")
		} else {
			// 文件夹名称,权限
			err := os.Mkdir(dir, os.ModePerm)
			if err != nil {
				fmt.Println(dir+"文件夹创建失败:", err.Error())
			} else {
				fmt.Println(dir + "文件夹创建成功!")
			}
		}
	}
}

//压缩文件
func Zip(srcFile string, destZip string) error {
	zipfile, err := os.Create(destZip)
	if err != nil {
		return err
	}
	defer zipfile.Close()

	archive := zip.NewWriter(zipfile)
	defer archive.Close()

	filepath.Walk(srcFile, func(path string, info os.FileInfo, err error) error {
		if err != nil {
			return err
		}

		header, err := zip.FileInfoHeader(info)
		if err != nil {
			return err
		}

		header.Name = strings.TrimPrefix(path, filepath.Dir(srcFile)+"/")
		// header.Name = path
		if info.IsDir() {
			header.Name += "/"
		} else {
			header.Method = zip.Deflate
		}

		writer, err := archive.CreateHeader(header)
		if err != nil {
			return err
		}

		if !info.IsDir() {
			file, err := os.Open(path)
			if err != nil {
				return err
			}
			defer file.Close()
			_, err = io.Copy(writer, file)
		}
		return err
	})

	return err
}

func ReadFile(filePath string) []byte {
	f, err := os.Open(filePath)
	if err != nil {
		fmt.Println("read file fail", err)
		return nil
	}
	defer f.Close()

	fd, err := ioutil.ReadAll(f)
	if err != nil {
		fmt.Println("read to fd fail", err)
		return nil
	}

	return fd
}

func saveLog(result string, request string, infno string, desc string) {

	org_id, _ := beego.AppConfig.Int64("org_id")
	miConfig, _ := service.FindMedicalInsuranceInfo(org_id)
	dir := miConfig.OrgName + "日志"
	utils.Mkdir(dir)
	month := time.Unix(1557042972, 0).Format("1")
	year := time.Now().Format("2006")
	month = time.Now().Format("01")
	day := time.Now().Format("02")
	hour := time.Now().Format("15")
	min := time.Now().Format("04")
	sec := time.Now().Format("05")

	result_time := year + "-" + month + "-" + day + " " + hour + ":" + min + ":" + sec

	file := strconv.FormatInt(org_id, 10) + "_" + year + month + day + "_log"
	file_name := file + ".txt"
	file_path := miConfig.OrgName + "日志" + "/" + file_name
	exist, _ := utils.PathExists(file_path)
	if exist { //存在
		fmt.Println("存在")
		f, err := os.OpenFile(file_path, os.O_WRONLY, 0644)
		if err != nil {
			fmt.Println("read fail")
		}
		content := "\r\n" + "\r\n" + "\r\n" + result_time + " " + "【 " + desc + infno + "入参" + " 】:" + "\r\n" + request + "\r\n" + result_time + " " + "【 " + desc + infno + "出参" + " 】:" + "\r\n" + result
		n, _ := f.Seek(0, 2)
		_, err = f.WriteAt([]byte(content), n)

	} else { //不存在
		fmt.Println("文件不存在,创建文件")
		f, err := os.Create(miConfig.OrgName + "日志" + "/" + file_name)
		defer f.Close()
		if err != nil {
		} else {
			_, err = f.Write([]byte("记录日志"))
		}
	}

}

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
}

func (c *HisApiController) ReadEleCard() {
	id_card_type, _ := c.GetInt64("id_card_type")
	admin_user_id, _ := c.GetInt64("admin_user_id")
	fmt.Println(c.GetAdminUserInfo().CurrentOrgId)
	roles, _ := service.GetAdminUserInfoByID(c.GetAdminUserInfo().CurrentOrgId, admin_user_id)
	miConfig, _ := service.FindMedicalInsuranceInfo(c.GetAdminUserInfo().CurrentOrgId)

	if miConfig.MdtrtareaAdmvs == "320921" || miConfig.MdtrtareaAdmvs == "320982" {
		var api string
		if miConfig.MdtrtareaAdmvs == "320921" {
			api = "http://192.168.2.110:9532/" + "jsyb/readcard?" + "fixmedins_code=" + miConfig.Code + "&secret_key=" + miConfig.SecretKey + "&ak=" + miConfig.AccessKey + "&org_name=" + miConfig.OrgName + "&doctor=" + roles.UserName +
				"&insuplc_admdvs=" + miConfig.InsuplcAdmdvs + "&mdtrtarea_admvs=" + miConfig.MdtrtareaAdmvs + "&secret_key=" + miConfig.SecretKey + "&url=" + miConfig.Url + "&cainfo=" + miConfig.Cainfo + "&id_card_type=" + strconv.FormatInt(id_card_type, 10) + "&operator_id=" + strconv.FormatInt(admin_user_id, 10) + "&operator=" + roles.UserName
			fmt.Println(api)

		} else {
			api = "http://192.168.5.251:9532/" + "jsyb/readcard?" + "fixmedins_code=" + miConfig.Code + "&secret_key=" + miConfig.SecretKey + "&ak=" + miConfig.AccessKey + "&org_name=" + miConfig.OrgName + "&doctor=" + roles.UserName +
				"&insuplc_admdvs=" + miConfig.InsuplcAdmdvs + "&mdtrtarea_admvs=" + miConfig.MdtrtareaAdmvs + "&secret_key=" + miConfig.SecretKey + "&url=" + miConfig.Url + "&cainfo=" + miConfig.Cainfo + "&id_card_type=" + strconv.FormatInt(id_card_type, 10) + "&operator_id=" + strconv.FormatInt(admin_user_id, 10) + "&operator=" + roles.UserName
		}

		resp, requestErr := http.Get(api)
		if requestErr != nil {
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
			return
		}

		body, ioErr := ioutil.ReadAll(resp.Body)
		if ioErr != nil {
			utils.ErrorLog("接口返回数据读取失败: %v", ioErr)
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
			return
		}
		var respJSON map[string]interface{}
		if err := json.Unmarshal([]byte(string(body)), &respJSON); err != nil {
			utils.ErrorLog("接口返回数据解析JSON失败: %v", err)
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
			return
		}
		var status string
		status = respJSON["data"].(map[string]interface{})["status"].(string)
		//card_type := respJSON["data"].(map[string]interface{})["type"].(string)
		var token string
		var res ResultTwo           //1101结果
		var res10265 ResultTwo10265 //1101结果
		if status == "0" {          //读卡成功
			var card_info string //卡信息
			var busi_card_info string
			token = respJSON["data"].(map[string]interface{})["token"].(string)
			busi_card_info = respJSON["data"].(map[string]interface{})["busi_card_info"].(string)
			card_info = respJSON["data"].(map[string]interface{})["card_info"].(string)

			fmt.Println(card_info)
			fmt.Println(busi_card_info)

			respJSON = respJSON["data"].(map[string]interface{})["result"].(map[string]interface{})
			result, _ := json.Marshal(respJSON)

			if err := json.Unmarshal([]byte(result), &res10265); err != nil {
				utils.ErrorLog("解析失败:%v", err)
				c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeDataException)
				return
			}
			res.ErrMsg = res10265.ErrMsg
			infocode, _ := strconv.ParseInt(res10265.Infcode, 10, 64)
			res.Infcode = infocode
			res.Output = res10265.Output
			res.InfRefmsgid = res10265.InfRefmsgid
			if res.Infcode == 0 {
				c.ServeSuccessJSON(map[string]interface{}{
					"number": token,
				})
			}
		} else {
			c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeHisFailedException)
			return
		}
	} else { //读卡失败
		c.ServeFailJSONWithSGJErrorCode(enums.ErrorCodeHisFailedException)
		return
	}
}

func DeleteExtraSpaceTwo(s string) string {

	//删除字符串中的多余空格,有多个空格时,仅保留一个空格
	s1 := strings.Replace(s, "  ", " ", -1)      //替换tab为空格
	regstr := "\\s{2,}"                          //两个及两个以上空格的正则表达式
	reg, _ := regexp.Compile(regstr)             //编译正则表达式
	s2 := make([]byte, len(s1))                  //定义字符数组切片
	copy(s2, s1)                                 //将字符串复制到切片
	spc_index := reg.FindStringIndex(string(s2)) //在字符串中搜索
	for len(spc_index) > 0 {                     //找到适配项
		s2 = append(s2[:spc_index[0]+1], s2[spc_index[1]:]...) //删除多余空格
		spc_index = reg.FindStringIndex(string(s2))            //继续在字符串中搜索
	}
	return string(s2)
}

func Remove0000(s string) string {
	str := make([]rune, 0, len(s))
	for _, v := range []rune(s) {
		if v == 0 {
			continue
		}
		str = append(str, v)
	}
	return string(str)
}

func (c *HisApiController) GetELeCertInfo(code string, operator_id string, operator_name string) (string, string) {
	DllDef := syscall.MustLoadDLL("HeaSecReadInfo.dll")
	readCard := DllDef.MustFindProc("EcQuery")
	pCardInfo := make([]byte, 8192)
	pBusiCardInfo := make([]byte, 8192)

	data := make(map[string]interface{})
	//pData := make(map[string]interface{})

	inputData := make(map[string]interface{})
	inputData["orgId"] = code
	inputData["businessType"] = "01101"
	inputData["operatorId"] = operator_id
	inputData["operatorName"] = operator_name
	inputData["officeId"] = "001"
	inputData["officeName"] = "血透室"
	//
	data["data"] = inputData
	data["transType"] = "ec.query"
	data["orgId"] = code
	bytesData, _ := json.Marshal(data)
	pCardInfo = bytesData
	ret2, _, _ := readCard.Call((uintptr)(unsafe.Pointer(&pCardInfo[0])), (uintptr)(unsafe.Pointer(&pBusiCardInfo[0])))
	fmt.Println(ret2)
	//fmt.Println(DeleteExtraSpace(string(bytesData)))
	//fmt.Println(DeleteExtraSpace(string(pBusiCardInfo)))
	fmt.Println(":", ConvertToString(DeleteExtraSpace(string(bytesData)), "gbk", "utf-8"))
	fmt.Println(":", ConvertToString(DeleteExtraSpace(string(pBusiCardInfo)), "gbk", "utf-8"))
	if ret2 != 0 {
		return "", ""
	}
	return DeleteExtraSpace(string(bytesData)), DeleteExtraSpace(string(pBusiCardInfo))
}

func DeleteExtraSpace(s string) string {
	//删除字符串中的多余空格,有多个空格时,仅保留一个空格
	s1 := strings.Replace(s, "  ", " ", -1)      //替换tab为空格
	regstr := "\\s{2,}"                          //两个及两个以上空格的正则表达式
	reg, _ := regexp.Compile(regstr)             //编译正则表达式
	s2 := make([]byte, len(s1))                  //定义字符数组切片
	copy(s2, s1)                                 //将字符串复制到切片
	spc_index := reg.FindStringIndex(string(s2)) //在字符串中搜索
	for len(spc_index) > 0 {                     //找到适配项
		s2 = append(s2[:spc_index[0]+1], s2[spc_index[1]:]...) //删除多余空格
		spc_index = reg.FindStringIndex(string(s2))            //继续在字符串中搜索
	}
	return string(s2)
}