package service import ( "XT_New/models" "github.com/jinzhu/gorm" ) type ExportPatient struct { ID int64 `gorm:"column:id" json:"id" form:"id"` UserOrgId int64 `gorm:"column:user_org_id" json:"user_org_id" form:"user_org_id"` Name string `gorm:"column:name" json:"name" form:"name"` Lapseto int64 `gorm:"column:lapseto" json:"lapseto" form:"lapseto"` Status int64 `gorm:"column:status" json:"status" form:"status"` IdCardNo string `gorm:"column:id_card_no" json:"id_card_no" form:"id_card_no"` XtCount int64 `gorm:"column:-" json:"xt_count" form:"xt_count"` SettleOrder []*SettleOrder `gorm:"ForeignKey:PatientID;AssociationForeignKey:ID" json:"orders"` } func (ExportPatient) TableName() string { return "xt_patients" } type SettleOrder struct { ID int64 `gorm:"column:id" json:"id" form:"id"` UserOrgId int64 `gorm:"column:user_org_id" json:"user_org_id" form:"user_org_id"` Status int64 `gorm:"column:status" json:"status" form:"status"` PatientId int64 `gorm:"column:patient_id" json:"patient_id" form:"patient_id"` OrderStatus int64 `gorm:"column:order_status" json:"order_status" form:"order_status"` MdtrtId string `gorm:"column:mdtrt_id" json:"mdtrt_id" form:"mdtrt_id"` Number string `gorm:"column:number" json:"number" form:"number"` SetlId string `gorm:"column:setl_id" json:"setl_id" form:"setl_id"` Insutype string `gorm:"column:insutype" json:"insutype" form:"insutype"` SetlTime string `gorm:"column:setl_time" json:"setl_time" form:"setl_time"` MedfeeSumamt float64 `gorm:"column:medfee_sumamt" json:"medfee_sumamt" form:"medfee_sumamt"` FulamtOwnpayAmt float64 `gorm:"column:fulamt_ownpay_amt" json:"fulamt_ownpay_amt" form:"fulamt_ownpay_amt"` OverlmtSelfPay float64 `gorm:"column:overlmt_self_pay" json:"overlmt_self_pay" form:"overlmt_self_pay"` PreselfpayAmt float64 `gorm:"column:preselfpay_amt" json:"preselfpay_amt" form:"preselfpay_amt"` InscpScpAmt float64 `gorm:"column:inscp_scp_amt" json:"inscp_scp_amt" form:"inscp_scp_amt"` ActPayDedc float64 `gorm:"column:act_pay_dedc" json:"act_pay_dedc" form:"act_pay_dedc"` HifpPay float64 `gorm:"column:hifp_pay" json:"hifp_pay" form:"hifp_pay"` CvlservPay float64 `gorm:"column:cvlserv_pay" json:"cvlserv_pay" form:"cvlserv_pay"` PoolPropSelfpay float64 `gorm:"column:pool_prop_selfpay" json:"pool_prop_selfpay" form:"pool_prop_selfpay"` HifesPay float64 `gorm:"column:hifes_pay" json:"hifes_pay" form:"hifes_pay"` HifmiPay float64 `gorm:"column:hifmi_pay" json:"hifmi_pay" form:"hifmi_pay"` HifobPay float64 `gorm:"column:hifob_pay" json:"hifob_pay" form:"hifob_pay"` MafPay float64 `gorm:"column:maf_pay" json:"maf_pay" form:"maf_pay"` OthPay float64 `gorm:"column:oth_pay" json:"oth_pay" form:"oth_pay"` FundPaySumamt float64 `gorm:"column:fund_pay_sumamt" json:"fund_pay_sumamt" form:"fund_pay_sumamt"` PsnPartAmt float64 `gorm:"column:psn_part_amt" json:"psn_part_amt" form:"psn_part_amt"` AcctPay float64 `gorm:"column:acct_pay" json:"acct_pay" form:"acct_pay"` PsnCashPay float64 `gorm:"column:psn_cash_pay" json:"psn_cash_pay" form:"psn_cash_pay"` HospPartAmt float64 `gorm:"column:hosp_part_amt" json:"hosp_part_amt" form:"hosp_part_amt"` IsMedicineInsurance int64 `gorm:"column:is_medicine_insurance" json:"is_medicine_insurance" form:"is_medicine_insurance"` OrderInfo9919 []*OrderInfo9919 `gorm:"ForeignKey:OrderNumber;AssociationForeignKey:Number" json:"info"` } func (SettleOrder) TableName() string { return "his_order" } type OrderInfo9919 struct { ID int64 `gorm:"column:id" json:"id" form:"id"` OrderNumber string `gorm:"column:order_number" json:"order_number" form:"order_number"` UploadDate int64 `gorm:"column:upload_date" json:"upload_date" form:"upload_date"` AdviceId int64 `gorm:"column:advice_id" json:"advice_id" form:"advice_id"` DetItemFeeSumamt float64 `gorm:"column:det_item_fee_sumamt" json:"det_item_fee_sumamt" form:"det_item_fee_sumamt"` Cnt float64 `gorm:"column:cnt" json:"cnt" form:"cnt"` Pric float64 `gorm:"column:pric" json:"pric" form:"pric"` PatientId int64 `gorm:"column:patient_id" json:"patient_id" form:"patient_id"` PricUplmtAmt float64 `gorm:"column:pric_uplmt_amt" json:"pric_uplmt_amt" form:"pric_uplmt_amt"` SelfpayProp float64 `gorm:"column:selfpay_prop" json:"selfpay_prop" form:"selfpay_prop"` FulamtOwnpayAmt float64 `gorm:"column:fulamt_ownpay_amt" json:"fulamt_ownpay_amt" form:"fulamt_ownpay_amt"` OverlmtAmt float64 `gorm:"column:overlmt_amt" json:"overlmt_amt" form:"overlmt_amt"` PreselfpayAmt float64 `gorm:"column:preselfpay_amt" json:"preselfpay_amt" form:"preselfpay_amt"` BasMednFlag string `gorm:"column:bas_medn_flag" json:"bas_medn_flag" form:"bas_medn_flag"` MedChrgitmType string `gorm:"column:med_chrgitm_type" json:"med_chrgitm_type" form:"med_chrgitm_type"` HiNegoDrugFlag string `gorm:"column:hi_nego_drug_flag" json:"hi_nego_drug_flag" form:"hi_nego_drug_flag"` Status int64 `gorm:"column:status" json:"status" form:"status"` Memo string `gorm:"column:memo" json:"memo" form:"memo"` FeedetlSn string `gorm:"column:feedetl_sn" json:"feedetl_sn" form:"feedetl_sn"` Mtime int64 `gorm:"column:mtime" json:"mtime" form:"mtime"` InscpScpAmt float64 `gorm:"column:inscp_scp_amt" json:"inscp_scp_amt" form:"inscp_scp_amt"` DrtReimFlag string `gorm:"column:drt_reim_flag" json:"drt_reim_flag" form:"drt_reim_flag"` Ctime int64 `gorm:"column:ctime" json:"ctime" form:"ctime"` ListSpItemFlag string `gorm:"column:list_sp_item_flag" json:"list_sp_item_flag" form:"list_sp_item_flag"` ChldMedcFlag string `gorm:"column:chld_medc_flag" json:"chld_medc_flag" form:"chld_medc_flag"` LmtUsedFlag string `gorm:"column:lmt_used_flag" json:"lmt_used_flag" form:"lmt_used_flag"` ChrgitmLv string `gorm:"column:chrgitm_lv" json:"chrgitm_lv" form:"chrgitm_lv"` UserOrgId int64 `gorm:"column:user_org_id" json:"user_org_id" form:"user_org_id"` HisPatientId int64 `gorm:"column:his_patient_id" json:"his_patient_id" form:"his_patient_id"` OrderId int64 `gorm:"column:order_id" json:"order_id" form:"order_id"` ProjectId int64 `gorm:"column:project_id" json:"project_id" form:"project_id"` Type int64 `gorm:"column:type" json:"type" form:"type"` ItemId int64 `gorm:"column:item_id" json:"item_id" form:"item_id"` SettleType int64 `gorm:"column:settle_type" json:"settle_type" form:"settle_type"` } func (OrderInfo9919) TableName() string { return "his_order_info" } func GetHisOrderDetailFor310(start_time string, end_time string, org_id int64) (patients []*ExportPatient, err error) { err = readDb2.Table("xt_patients as p").Select("p.id,p.user_org_id,p.name,p.lapseto,p.status,p.id_card_no").Joins("JOIN his_order AS orders ON orders.patient_id = p.id AND orders.status = 1 AND FROM_UNIXTIME(orders.ctime) >= ? AND FROM_UNIXTIME(orders.ctime) <= ? AND orders.user_org_id = ? AND orders.order_status = 2 and orders.insutype = 310", start_time, end_time, org_id).Preload("SettleOrder", func(db *gorm.DB) *gorm.DB { return db.Where("status = 1 AND setl_time >= ? AND setl_time <= ? AND user_org_id = ? AND order_status = 2 and insutype = 310", start_time, end_time, org_id).Preload("OrderInfo9919", "status = 1").Order("ctime") }).Where("p.status = 1 AND p.user_org_id = ?", org_id).Group("id").Find(&patients).Error for _, item := range patients { var total int64 readDb.Model(&models.DialysisOrder{}).Where("patient_id = ? AND status = 1 AND stage = 2 AND FROM_UNIXTIME(dialysis_date) <= ? AND FROM_UNIXTIME(dialysis_date) >= ?", item.ID, end_time, start_time).Count(&total) item.XtCount = total } return } func GetHisOrderDetailFor390(start_time string, end_time string, org_id int64) (patients []*ExportPatient, err error) { err = readDb2.Table("xt_patients as p").Select("p.id,p.user_org_id,p.name,p.lapseto,p.status,p.id_card_no").Joins("JOIN his_order AS orders ON orders.patient_id = p.id AND orders.status = 1 AND FROM_UNIXTIME(orders.ctime) >= ? AND FROM_UNIXTIME(orders.ctime) <= ? AND orders.user_org_id = ? AND orders.order_status = 2 and orders.insutype = 390", start_time, end_time, org_id).Preload("SettleOrder", func(db *gorm.DB) *gorm.DB { return db.Where("status = 1 AND setl_time >= ? AND setl_time <= ? AND user_org_id = ? AND order_status = 2 and insutype = 390", start_time, end_time, org_id).Preload("OrderInfo9919", "status = 1").Order("ctime") }).Where("p.status = 1 AND p.user_org_id = ?", org_id).Group("id").Find(&patients).Error for _, item := range patients { var total int64 readDb.Model(&models.DialysisOrder{}).Where("patient_id = ? AND status = 1 AND stage = 2 AND FROM_UNIXTIME(dialysis_date) <= ? AND FROM_UNIXTIME(dialysis_date) >= ?", item.ID, end_time, start_time).Count(&total) item.XtCount = total } return } func GetHisOrderByTime(patient_id int64, start_time string, end_time string) (order []models.HisOrder, err error) { err = readDb.Model(&models.HisOrder{}).Where("patient_id = ? AND status = 1 and order_status = 2 and FROM_UNIXTIME(settle_accounts_date) >= ? and FROM_UNIXTIME(settle_accounts_date) <= ?", patient_id, start_time+" 00:00:00", end_time+" 23:59:00").Find(&order).Error return } func GetBatchHisOrderInfoByNumber(order_number string) (order []models.BatchHisOrderInfo, err error) { err = readDb.Model(&models.BatchHisOrderInfo{}).Where("order_number = ? and status = 1", order_number).Find(&order).Error return } type Results struct { SerialNo string `gorm:"column:序号"` MedicalArea string `gorm:"column:医疗区划"` CertNo string `gorm:"column:证件号码"` PsnName string `gorm:"column:姓名"` Gender string `gorm:"column:性别"` Occupation string `gorm:"column:职业"` MedicalType string `gorm:"column:医疗类别"` AdmissionTime string `gorm:"column:入院时间"` DischargeTime string `gorm:"column:出院时间"` SettlementTime string `gorm:"column:结算时间"` DischargeDiagnosis string `gorm:"column:出院诊断"` InpatientDays int `gorm:"column:住院天数"` MedicalFeeTotal float64 `gorm:"column:医疗费总额"` HifpPay float64 `gorm:"column:统筹支付金额"` ActPayDedc float64 `gorm:"column:起付线"` HifobPay float64 `gorm:"column:职工大额基金支付"` HifmiPay float64 `gorm:"column:居民大病基金支出"` HifesPay float64 `gorm:"column:企业补充"` CvlservPay float64 `gorm:"column:公务员补助"` MafPay float64 `gorm:"column:医疗救助"` OthPay float64 `gorm:"column:其他支付"` HospPartAmt float64 `gorm:"column:医院负担"` AcctPay float64 `gorm:"column:个账支付"` AcctMulaidPay float64 `gorm:"column:共济支付"` FundPaySumamt float64 `gorm:"column:基金支付金额"` PsnCashPay float64 `gorm:"column:现金支付"` } type SummaryResults struct { InsuranceType string `gorm:"column:险种类型"` // 险种类型 MedicalArea string `gorm:"column:统筹区"` // 统筹区 SettlementCategory string `gorm:"column:清算类别"` // 清算类别 PeopleCount int `gorm:"column:人数"` // 人数 VisitCount int `gorm:"column:人次"` // 人次 TotalMedicalFee float64 `gorm:"column:医保费用合计"` // 医保费用合计 PoolFundPay float64 `gorm:"column:统筹支付金额"` // 统筹支付金额 BigDiseaseFundPay float64 `gorm:"column:大病基金支付"` // 大病基金支付 PublicServantPay float64 `gorm:"column:公务员补助"` // 公务员补助 MedicalAssistance float64 `gorm:"column:医疗救助"` // 医疗救助 OtherPay float64 `gorm:"column:其他支付"` // 其他支付 AcctPay float64 `gorm:"column:个账支付"` // 个账支付 MutualAidPay float64 `gorm:"column:共济支付"` // 共济支付 CashPay float64 `gorm:"column:现金支付"` // 现金支付 } func GetHisOrderBy10726Detail(start_time string, end_time string) ([]Results, error) { //err = readDb.Model(&models.HisOrder10726{}).Select("").Where("setl_time >= ? and setl_time <= ? AND status = 1 and order_status = 2 and user_org_id = 10721", start_time+" 00:00:00", end_time+" 23:59:00").Find(&order).Error var result []Results readDb.Table("his_order").Select(` '' AS 序号, '乐安县' AS 医疗区划, certno AS 证件号码, psn_name AS 姓名, CASE WHEN gend = '1' THEN '男' WHEN gend = '2' THEN '女' END AS 性别, CASE WHEN psn_type IN ('14', '15') THEN '居民(成年)' END AS 职业, CASE WHEN med_type = '990101' THEN '单病种门诊' WHEN med_type = '14' THEN '门诊慢特病' END AS 医疗类别, setl_time AS 入院时间, setl_time AS 出院时间, setl_time AS 结算时间, CASE WHEN med_type = '990101' THEN '尿毒症(免费透析)' WHEN med_type = '14' THEN '尿毒症期' END AS 出院诊断, 1 AS 住院天数, medfee_sumamt AS 医疗费总额, hifp_pay AS 统筹支付金额, act_pay_dedc AS 起付线, hifob_pay AS 职工大额基金支付, hifmi_pay AS 居民大病基金支出, hifes_pay AS 企业补充, cvlserv_pay AS 公务员补助, maf_pay AS 医疗救助, oth_pay AS 其他支付, hosp_part_amt AS 医院负担, acct_pay AS 个账支付, acct_mulaid_pay AS 共济支付, fund_pay_sumamt AS 基金支付金额, psn_cash_pay AS 现金支付 `).Where("user_org_id = ?", 10726). Where("order_status = ?", 2). Where("setl_time >= ?", start_time). Where("setl_time <= ?", end_time). Where("is_medicine_insurance = ?", 1). Where("status = ?", 1). Scan(&result) return result, err } func GetHisOrderBy10726Summary(start_time string, end_time string) ([]SummaryResults, error) { var result []SummaryResults err = readDb.Table("his_order"). Select(` CASE WHEN insutype = "390" THEN "城乡居民" WHEN insutype = "310" THEN "职工" END AS "险种类型", "乐安县" AS 统筹区, "门诊" AS 清算类别, COUNT(DISTINCT patient_id) AS 人数, COUNT(id) AS 人次, SUM(medfee_sumamt) AS 医保费用合计, SUM(hifp_pay) AS 统筹支付金额, SUM(hifmi_pay) AS 大病基金支付, SUM(cvlserv_pay) AS 公务员补助, SUM(maf_pay) AS 医疗救助, SUM(oth_pay) AS 其他支付, SUM(acct_pay) AS 个账支付, SUM(acct_mulaid_pay) AS 共济支付, SUM(psn_cash_pay) AS 现金支付 `). Where("user_org_id = ? AND order_status = ? AND setl_time >= ? AND setl_time <= ? AND is_medicine_insurance = ? AND status = ?", 10726, 2, start_time, end_time, 1, 1). Group("insutype"). Scan(&result).Error return result, err } type MedicalCharges struct { SerialNo string `gorm:"column:编号"` // 编号 MedicalInsuranceNo string `gorm:"column:医疗保险号"` // 医疗保险号 PsnName string `gorm:"column:姓名"` // 姓名 BedsFee float64 `gorm:"column:床位费"` // 床位费 ConsultationFee float64 `gorm:"column:诊察费"` // 诊察费 ExaminationFee float64 `gorm:"column:检查费"` // 检查费 LaboratoryFee float64 `gorm:"column:化验费"` // 化验费 TreatmentFee float64 `gorm:"column:治疗费"` // 治疗费 NursingFee float64 `gorm:"column:护理费"` // 护理费 HealthMaterialsFee float64 `gorm:"column:卫生材料费"` // 卫生材料费 WesternMedicineFee float64 `gorm:"column:西药费"` // 西药费 ChineseMedicineFee float64 `gorm:"column:中药饮片费"` // 中药饮片费 ChinesePatentMedicineFee float64 `gorm:"column:中成药费"` // 中成药费 GeneralTreatmentFee float64 `gorm:"column:一般诊疗费"` // 一般诊疗费 RegistrationFee float64 `gorm:"column:挂号费"` // 挂号费 OtherFee float64 `gorm:"column:其他费"` // 其他费 TotalMedicalFee float64 `gorm:"column:医疗费总额"` // 医疗费总额 SelfPay float64 `gorm:"column:个人自付金额"` // 个人自付金额 AcctPay float64 `gorm:"column:基本账户支付"` // 基本账户支付 MutualAidAcctPay float64 `gorm:"column:共济账户支付"` // 共济账户支付 PublicServantPay float64 `gorm:"column:公务员补助"` // 公务员补助 PoolFundPay float64 `gorm:"column:统筹支付金额"` // 统筹支付金额 MedicalAssistance float64 `gorm:"column:医疗救助"` // 医疗救助 BigDiseasePay float64 `gorm:"column:大病支付"` // 大病支付 EnterpriseSupplement float64 `gorm:"column:企业补充支付"` // 企业补充支付 MajorDiseaseSupplement float64 `gorm:"column:重大疾病补充"` // 重大疾病补充 (Empty in SQL, will be left blank in Go) OtherPayment float64 `gorm:"column:其它支付"` // 其它支付 } func GetHisOrderBy10697Summary(start_time string, end_time string, ins string) (results []MedicalCharges, err error) { err = readDb.Table("his_order"). Select(` "" AS 编号, his_order.certno AS 医疗保险号, his_order.psn_name AS 姓名, SUM(CASE WHEN i.med_chrgitm_type = '01' THEN i.det_item_fee_sumamt ELSE 0 END) AS 床位费, SUM(CASE WHEN i.med_chrgitm_type = '02' THEN i.det_item_fee_sumamt ELSE 0 END) AS 诊察费, SUM(CASE WHEN i.med_chrgitm_type = '03' THEN i.det_item_fee_sumamt ELSE 0 END) AS 检查费, SUM(CASE WHEN i.med_chrgitm_type = '04' THEN i.det_item_fee_sumamt ELSE 0 END) AS 化验费, SUM(CASE WHEN i.med_chrgitm_type = '05' THEN i.det_item_fee_sumamt ELSE 0 END) AS 治疗费, SUM(CASE WHEN i.med_chrgitm_type = '07' THEN i.det_item_fee_sumamt ELSE 0 END) AS 护理费, SUM(CASE WHEN i.med_chrgitm_type = '08' THEN i.det_item_fee_sumamt ELSE 0 END) AS 卫生材料费, SUM(CASE WHEN i.med_chrgitm_type = '09' THEN i.det_item_fee_sumamt ELSE 0 END) AS 西药费, SUM(CASE WHEN i.med_chrgitm_type = '10' THEN i.det_item_fee_sumamt ELSE 0 END) AS 中药饮片费, SUM(CASE WHEN i.med_chrgitm_type = '11' THEN i.det_item_fee_sumamt ELSE 0 END) AS 中成药费, SUM(CASE WHEN i.med_chrgitm_type = '12' THEN i.det_item_fee_sumamt ELSE 0 END) AS 一般诊疗费, SUM(CASE WHEN i.med_chrgitm_type = '13' THEN i.det_item_fee_sumamt ELSE 0 END) AS 挂号费, SUM(CASE WHEN i.med_chrgitm_type = '14' THEN i.det_item_fee_sumamt ELSE 0 END) AS 其他费, SUM(his_order.medfee_sumamt) AS 医疗费总额, SUM(his_order.psn_cash_pay) AS 个人自付金额, SUM(his_order.acct_pay) AS 基本账户支付, SUM(his_order.acct_mulaid_pay) AS 共济账户支付, SUM(his_order.cvlserv_pay) AS 公务员补助, SUM(his_order.hifp_pay) AS 统筹支付金额, SUM(his_order.maf_pay) AS 医疗救助, SUM(his_order.hifmi_pay) AS 大病支付, SUM(his_order.hifes_pay) AS 企业补充支付, "" AS 重大疾病补充, SUM(his_order.oth_pay) AS 其它支付 `). Joins("JOIN his_order_info i ON his_order.number = i.order_number"). Where("his_order.user_org_id = ? AND his_order.order_status = ? AND his_order.setl_time >= ? AND his_order.setl_time <= ? AND his_order.is_medicine_insurance = ? AND his_order.insutype = ? AND his_order.STATUS = ?", 10697, 2, start_time+" 00:00:00", end_time+" 23:59:59", 1, ins, 1). Group("his_order.patient_id"). Scan(&results).Error return }