public async Task <ApiJsonResultData> QueryMedicalInsuranceResidentInfo([FromBody] QueryMedicalInsuranceResidentInfoParam param) { return(await new ApiJsonResultData(ModelState).RunWithTryAsync(async y => { var data = await _dataBaseSqlServerService.QueryMedicalInsuranceResidentInfo(param); y.Data = data; })); }
/// <summary> /// 医保病人信息查询 /// </summary> /// <param name="param"></param> /// <returns></returns> public MedicalInsuranceResidentInfoDto QueryMedicalInsuranceResidentInfo( QueryMedicalInsuranceResidentInfoParam param) { using (var sqlConnection = new SqlConnection(_connectionString)) { string strSql = null; try { sqlConnection.Open(); strSql = @" SELECT [Id] ,[BusinessId] ,[InsuranceNo] ,[MedicalInsuranceAllAmount] ,[MedicalInsuranceHospitalizationNo] ,[SelfPayFeeAmount] ,[AdmissionInfoJson] ,[ReimbursementExpensesAmount] ,[OtherInfo] ,[OrganizationCode] ,[OrganizationName] ,[InsuranceType] ,[SettlementNo] ,[MedicalInsuranceState] ,[WorkersStrokeCardNo] ,[IsBirthHospital] ,[IdentityMark] ,[AfferentSign] FROM [dbo].[MedicalInsurance] where IsDelete=0"; if (!string.IsNullOrWhiteSpace(param.DataId)) { strSql += $" and Id='{param.DataId}'"; } if (!string.IsNullOrWhiteSpace(param.BusinessId)) { strSql += $" and BusinessId='{param.BusinessId}'"; } if (!string.IsNullOrWhiteSpace(param.OrganizationCode)) { strSql += $" and OrganizationCode='{param.OrganizationCode}'"; } var data = sqlConnection.QueryFirstOrDefault <MedicalInsuranceResidentInfoDto>(strSql); sqlConnection.Close(); return(data); } catch (Exception e) { _log.Debug(strSql); throw new Exception(e.Message); } } }
/// <summary> /// 门诊结算查询 /// </summary> /// <param name="param"></param> /// <returns></returns> public QueryOutpatientDepartmentCostjsonDto QueryOutpatientDepartmentCost(UiBaseDataParam param) { var resultData = new QueryOutpatientDepartmentCostjsonDto(); var userBase = _serviceBasicService.GetUserBaseInfo(param.UserId); userBase.TransKey = param.TransKey; var outpatientSettlementNo = _serviceBasicService.GetOutpatientSettlementNo(new GetOutpatientSettlementNoParam() { BusinessId = param.BusinessId, User = userBase }); //获取医保病人信息 var queryResidentParam = new QueryMedicalInsuranceResidentInfoParam() { BusinessId = param.BusinessId, OrganizationCode = userBase.OrganizationCode, SettlementNo = outpatientSettlementNo }; var outpatient = _hisSqlRepository.QueryOutpatient(new QueryOutpatientParam() { BusinessId = param.BusinessId }); if (outpatient == null) { throw new Exception("当前病人查找失败!!!"); } var residentData = _medicalInsuranceSqlRepository.QueryMedicalInsuranceResidentInfo(queryResidentParam); if (residentData == null) { throw new Exception("当前病人未结算,无结算数据!!!"); } if (residentData.MedicalInsuranceState != MedicalInsuranceState.HisSettlement) { throw new Exception("当前病人无结算数据!!!"); } resultData.ReimbursementExpensesAmount = residentData.ReimbursementExpensesAmount; resultData.SelfPayFeeAmount = residentData.SelfPayFeeAmount; resultData.AllAmount = residentData.MedicalInsuranceAllAmount; return(resultData); }
/// <summary> /// 获取取消结算参数 /// </summary> /// <param name="param"></param> /// <returns></returns> public string GetCancelOutpatientDepartmentCostParam(CancelOutpatientDepartmentCostUiParam param) { string resultData = null; var userBase = _serviceBasicService.GetUserBaseInfo(param.UserId); userBase.TransKey = param.TransKey; //获取医保病人信息 var queryResidentParam = new QueryMedicalInsuranceResidentInfoParam() { BusinessId = param.BusinessId, OrganizationCode = userBase.OrganizationCode }; var residentData = _medicalInsuranceSqlRepository.QueryMedicalInsuranceResidentInfo(queryResidentParam); if (residentData == null) { throw new Exception("当前病人未结算,不能取消结算!!!"); } if (residentData.MedicalInsuranceState != MedicalInsuranceState.HisSettlement) { throw new Exception("当前病人未结算,不能取消结算!!!"); } if (residentData.IsBirthHospital == 1) { var inputParam = new OutpatientPlanBirthSettlementCancelParam() { SettlementNo = residentData.SettlementNo, CancelRemarks = param.CancelSettlementRemarks }; resultData = XmlSerializeHelper.XmlSerialize(inputParam); } else { var inputParam = new CancelOutpatientDepartmentCostParam() { DocumentNo = residentData.SettlementNo }; resultData = XmlSerializeHelper.XmlSerialize(inputParam); } return(resultData); }
/// <summary> /// 医保病人信息查询 /// </summary> /// <param name="param"></param> /// <returns></returns> public async Task <MedicalInsuranceResidentInfoDto> QueryMedicalInsuranceResidentInfo( QueryMedicalInsuranceResidentInfoParam param) { using (var _sqlConnection = new SqlConnection(_connectionString)) { var resultData = new MedicalInsuranceResidentInfoDto(); _sqlConnection.Open(); string strSql = @" select [DataAllId] ,[ContentJson] ,[DataType] ,[DataId] ,[BusinessId] ,[IdCard] ,[OrgCode] ,[CreateUserId] ,[CreateTime] ,[DeleteTime] ,[DeleteUserId] from [dbo].[MedicalInsuranceResidentInfo] where"; strSql += $" IsDelete={param.IsDelete}"; if (!string.IsNullOrWhiteSpace(param.DataId)) { strSql += $" and DataId='{param.DataId}'"; } if (!string.IsNullOrWhiteSpace(param.BusinessId)) { strSql += $" and BusinessId='{param.BusinessId}'"; } if (!string.IsNullOrWhiteSpace(param.OrgCode)) { strSql += $" and OrgCode='{param.OrgCode}'"; } if (!string.IsNullOrWhiteSpace(param.IdCard)) { strSql += $" and IdCard='{param.IdCard}'"; } var data = await _sqlConnection.QueryFirstOrDefaultAsync <MedicalInsuranceResidentInfoDto>(strSql); _sqlConnection.Close(); return(data != null ? data : resultData); } }
/// <summary> /// 职工划卡 /// </summary> /// <param name="param"></param> public void WorkerStrokeCard(WorkerStrokeCardParam param) { var queryResidentParam = new QueryMedicalInsuranceResidentInfoParam() { BusinessId = param.BusinessId, }; //获取医保病人信息 var residentData = _medicalInsuranceSqlRepository.QueryMedicalInsuranceResidentInfo(queryResidentParam); var userInfoData = _residentMedicalInsuranceRepository.GetUserInfo(new ResidentUserInfoParam() { IdentityMark = residentData.IdentityMark, AfferentSign = residentData.AfferentSign }); //回参构建 var xmlData = new HospitalSettlementXml() { MedicalInsuranceHospitalizationNo = param.MedicalInsuranceHospitalizationNo, CashPayment = param.SelfPayFeeAmount, SettlementNo = param.DocumentNo, PaidAmount = 0, AllAmount = param.AllAmount, PatientName = userInfoData.PatientName, AccountBalance = userInfoData.WorkersInsuranceBalance, AccountAmountPay = param.AccountPayAmount, }; var strXmlBackParam = XmlSerializeHelper.HisXmlSerialize(xmlData); var saveXml = new SaveXmlDataParam() { User = param.User, MedicalInsuranceBackNum = param.DocumentNo, MedicalInsuranceCode = "41", BusinessId = param.BusinessId, BackParam = strXmlBackParam }; //结算存基层 _webBasicRepository.SaveXmlData(saveXml); var updateParam = new UpdateMedicalInsuranceResidentSettlementParam() { UserId = param.User.UserId, ReimbursementExpensesAmount = param.AccountPayAmount, SelfPayFeeAmount = param.SelfPayFeeAmount, OtherInfo = JsonConvert.SerializeObject(xmlData), Id = param.Id, WorkersStrokeCardNo = param.DocumentNo, WorkersStrokeCardInfo = JsonConvert.SerializeObject(xmlData), MedicalInsuranceState = MedicalInsuranceState.HisSettlement }; // 更新中间层 _medicalInsuranceSqlRepository.UpdateMedicalInsuranceResidentSettlement(updateParam); //添加日志 var logParam = new AddHospitalLogParam() { JoinOrOldJson = JsonConvert.SerializeObject(param), ReturnOrNewJson = JsonConvert.SerializeObject(xmlData), User = param.User, Remark = "职工病人划卡结算", RelationId = param.Id, }; _systemManageRepository.AddHospitalLog(logParam); //回参构建 }
/// <summary> /// 职工住院预结算 /// </summary> /// <param name="param"></param> /// <returns></returns> public WorkerHospitalizationPreSettlementDto WorkerHospitalizationPreSettlement(UiBaseDataParam param) { //获取操作人员信息 var userBase = _serviceBasicService.GetUserBaseInfo(param.UserId); userBase.TransKey = param.TransKey; var queryResidentParam = new QueryMedicalInsuranceResidentInfoParam() { BusinessId = param.BusinessId, OrganizationCode = userBase.OrganizationCode }; var infoData = new GetInpatientInfoParam() { User = userBase, BusinessId = param.BusinessId, }; //获取his预结算 var hisPreSettlementData = _serviceBasicService.GetHisHospitalizationPreSettlement(infoData); var preSettlementData = hisPreSettlementData.PreSettlementData.FirstOrDefault(); //获取医保病人信息 var residentData = _medicalInsuranceSqlRepository.QueryMedicalInsuranceResidentInfo(queryResidentParam); //获取医院等级 var gradeData = _systemManageRepository.QueryHospitalOrganizationGrade(userBase.OrganizationCode); if (string.IsNullOrWhiteSpace(preSettlementData.EndDate)) { throw new Exception("当前病人在基层中未办理出院,不能办理医保预结算!!!"); } //获取医保账号 var userData = _systemManageRepository.QueryHospitalOperator( new QueryHospitalOperatorParam() { UserId = param.UserId }); var preSettlement = new WorkerHospitalizationPreSettlementParam() { User = userBase, Id = residentData.Id, BusinessId = param.BusinessId, MedicalInsuranceHospitalizationNo = residentData.MedicalInsuranceHospitalizationNo, LeaveHospitalDate = Convert.ToDateTime(preSettlementData.EndDate).ToString("yyyyMMdd"), AdministrativeArea = gradeData.AdministrativeArea, Operators = preSettlementData.Operator, IsHospitalizationFrequency = "0", OrganizationCode = gradeData.MedicalInsuranceAccount, }; //医保结算 var resultData = _workerMedicalInsuranceRepository.WorkerHospitalizationPreSettlement(preSettlement); //报销金额 =统筹支付+补充医疗保险支付金额+专项基金支付金额+ //公务员补贴+公务员补助+其它支付金额 decimal reimbursementExpenses = resultData.BasicOverallPay + resultData.SupplementPayAmount + resultData.SpecialFundPayAmount + resultData.CivilServantsSubsidies + resultData.CivilServantsSubsidy + resultData.OtherPaymentAmount; var updateParam = new UpdateMedicalInsuranceResidentSettlementParam() { ReimbursementExpensesAmount = CommonHelp.ValueToDouble(reimbursementExpenses), SelfPayFeeAmount = resultData.CashPayment, OtherInfo = JsonConvert.SerializeObject(resultData), Id = residentData.Id, UserId = userBase.UserId, SettlementNo = resultData.DocumentNo, MedicalInsuranceAllAmount = resultData.TotalAmount, PreSettlementTransactionId = userBase.TransKey, MedicalInsuranceState = MedicalInsuranceState.MedicalInsurancePreSettlement }; //存入中间库 _medicalInsuranceSqlRepository.UpdateMedicalInsuranceResidentSettlement(updateParam); var logParam = new AddHospitalLogParam() { JoinOrOldJson = JsonConvert.SerializeObject(param), ReturnOrNewJson = JsonConvert.SerializeObject(resultData), User = userBase, Remark = "职工住院病人预结算" }; _systemManageRepository.AddHospitalLog(logParam); return(resultData); }
/// <summary> /// 门诊生育结算 /// </summary> /// <param name="param"></param> /// <returns></returns> public WorkerHospitalizationPreSettlementDto OutpatientPlanBirthSettlement( OutpatientPlanBirthSettlementUiParam param) { WorkerHospitalizationPreSettlementDto resultData = null; var userBase = _serviceBasicService.GetUserBaseInfo(param.UserId); userBase.TransKey = param.TransKey; //门诊病人信息存储 var id = Guid.NewGuid(); var outpatientParam = new GetOutpatientPersonParam() { User = userBase, UiParam = param, Id = id, }; var outpatientPerson = _serviceBasicService.GetOutpatientPerson(outpatientParam); if (outpatientPerson == null) { throw new Exception("his中未获取到当前病人!!!"); } var outpatientDetailPerson = _serviceBasicService.GetOutpatientDetailPerson(new OutpatientDetailParam() { User = userBase, BusinessId = param.BusinessId, }); var queryResidentParam = new QueryMedicalInsuranceResidentInfoParam() { BusinessId = param.BusinessId, }; //获取医保病人信息 var residentData = _medicalInsuranceSqlRepository.QueryMedicalInsuranceResidentInfo(queryResidentParam); if (residentData.MedicalInsuranceState != MedicalInsuranceState.MedicalInsurancePreSettlement) { throw new Exception("当前病人未办理预结算,不能办理结算!!!"); } if (residentData.MedicalInsuranceState == MedicalInsuranceState.HisSettlement) { throw new Exception("当前病人已办理医保结算,不能办理再次结算!!!"); } //获取数据明细 var iniParam = GetOutpatientPlanBirthSettlementParam (param); iniParam.AfferentSign = param.AfferentSign; iniParam.IdentityMark = param.IdentityMark; iniParam.OutpatientNo = CommonHelp.GuidToStr(param.BusinessId); // 医保执行 resultData = _outpatientDepartmentRepository.OutpatientPlanBirthSettlement(iniParam); _serviceBasicService.GetOutpatientPerson(outpatientParam); var updateData = new UpdateMedicalInsuranceResidentSettlementParam() { UserId = userBase.UserId, ReimbursementExpensesAmount = CommonHelp.ValueToDouble(resultData.ReimbursementExpenses), SelfPayFeeAmount = resultData.CashPayment, OtherInfo = JsonConvert.SerializeObject(resultData), Id = residentData.Id, SettlementNo = resultData.DocumentNo, MedicalInsuranceAllAmount = resultData.TotalAmount, SettlementTransactionId = userBase.UserId, MedicalInsuranceState = MedicalInsuranceState.MedicalInsuranceSettlement }; //存入中间层 _medicalInsuranceSqlRepository.UpdateMedicalInsuranceResidentSettlement(updateData); //日志写入 _systemManageRepository.AddHospitalLog(new AddHospitalLogParam() { User = userBase, JoinOrOldJson = JsonConvert.SerializeObject(iniParam), ReturnOrNewJson = JsonConvert.SerializeObject(resultData), RelationId = outpatientParam.Id, BusinessId = param.BusinessId, Remark = "[R][OutpatientDepartment]门诊生育结算" }); //获取病人的基础信息 var userInfoData = _residentMedicalInsuranceRepository.GetUserInfo(new ResidentUserInfoParam() { IdentityMark = param.IdentityMark, AfferentSign = param.AfferentSign, }); // 回参构建 var xmlData = new OutpatientDepartmentCostXml() { AccountBalance = userInfoData.InsuranceType == "342" ? userInfoData.ResidentInsuranceBalance : userInfoData.WorkersInsuranceBalance, MedicalInsuranceOutpatientNo = resultData.DocumentNo, CashPayment = resultData.CashPayment, SettlementNo = resultData.DocumentNo, AllAmount = outpatientPerson.MedicalTreatmentTotalCost, PatientName = outpatientPerson.PatientName, AccountAmountPay = resultData.AccountPayment, MedicalInsuranceType = userInfoData.InsuranceType == "310" ? "1" : userInfoData.InsuranceType, }; var strXmlBackParam = XmlSerializeHelper.HisXmlSerialize(xmlData); var saveXml = new SaveXmlDataParam() { User = userBase, MedicalInsuranceBackNum = "zydj", MedicalInsuranceCode = "48", BusinessId = param.BusinessId, BackParam = strXmlBackParam }; ////存基层 _webBasicRepository.SaveXmlData(saveXml); var updateParamData = new UpdateMedicalInsuranceResidentSettlementParam() { UserId = param.UserId, Id = residentData.Id, MedicalInsuranceState = MedicalInsuranceState.HisSettlement, IsHisUpdateState = true }; // 更新中间层 _medicalInsuranceSqlRepository.UpdateMedicalInsuranceResidentSettlement(updateParamData); return(resultData); }
//门诊取消结算 public void CancelOutpatientDepartmentCost(CancelOutpatientDepartmentCostUiParam param) { var userBase = _serviceBasicService.GetUserBaseInfo(param.UserId); userBase.TransKey = param.TransKey; //获取医保病人信息 var queryResidentParam = new QueryMedicalInsuranceResidentInfoParam() { BusinessId = param.BusinessId, OrganizationCode = userBase.OrganizationCode }; var residentData = _medicalInsuranceSqlRepository.QueryMedicalInsuranceResidentInfo(queryResidentParam); if (residentData == null) { throw new Exception("当前病人未结算,不能取消结算!!!"); } if (residentData.MedicalInsuranceState != MedicalInsuranceState.HisSettlement) { throw new Exception("当前病人未结算,不能取消结算!!!"); } //计划生育 if (residentData.IsBirthHospital == 1) { _outpatientDepartmentRepository.OutpatientPlanBirthSettlementCancel(new OutpatientPlanBirthSettlementCancelParam() { SettlementNo = residentData.SettlementNo, CancelRemarks = param.CancelSettlementRemarks }); } else //普通门诊 { _outpatientDepartmentRepository.CancelOutpatientDepartmentCost(new CancelOutpatientDepartmentCostParam() { DocumentNo = residentData.SettlementNo }); } //添加日志 var logParam = new AddHospitalLogParam() { JoinOrOldJson = JsonConvert.SerializeObject(param), User = userBase, Remark = "门诊取消结算", RelationId = residentData.Id, BusinessId = param.BusinessId, }; _systemManageRepository.AddHospitalLog(logParam); //回参构建 var xmlData = new OutpatientDepartmentCostCancelXml() { SettlementNo = residentData.SettlementNo }; var strXmlBackParam = XmlSerializeHelper.HisXmlSerialize(xmlData); var saveXml = new SaveXmlDataParam() { User = userBase, MedicalInsuranceBackNum = "Qxjs", MedicalInsuranceCode = "42MZ", BusinessId = param.BusinessId, BackParam = strXmlBackParam }; //存基层 _webBasicRepository.SaveXmlData(saveXml); var updateParamData = new UpdateMedicalInsuranceResidentSettlementParam() { UserId = param.UserId, Id = residentData.Id, CancelTransactionId = param.TransKey, MedicalInsuranceState = MedicalInsuranceState.MedicalInsuranceCancelSettlement, IsHisUpdateState = true, CancelSettlementRemarks = param.CancelSettlementRemarks }; //更新中间层 _medicalInsuranceSqlRepository.UpdateMedicalInsuranceResidentSettlement(updateParamData); }
/// <summary> /// 居民住院结算 /// </summary> /// <param name="param"></param> /// <returns></returns> public HospitalizationPresettlementDto LeaveHospitalSettlement(LeaveHospitalSettlementUiParam param) { // 获取操作人员信息 var userBase = _webserviceBasicService.GetUserBaseInfo(param.UserId); var queryResidentParam = new QueryMedicalInsuranceResidentInfoParam() { BusinessId = param.BusinessId, OrganizationCode = userBase.OrganizationCode }; userBase.TransKey = param.TransKey; var infoData = new GetInpatientInfoParam() { User = userBase, BusinessId = param.BusinessId, }; //获取his结算 var hisSettlement = _webserviceBasicService.GetHisHospitalizationSettlement(infoData); //获取医保病人信息 var residentData = _medicalInsuranceSqlRepository.QueryMedicalInsuranceResidentInfo(queryResidentParam); if (residentData.MedicalInsuranceState != MedicalInsuranceState.MedicalInsurancePreSettlement) { throw new Exception("当前病人未办理预结算,不能办理结算!!!"); } if (residentData.MedicalInsuranceState == MedicalInsuranceState.HisSettlement) { throw new Exception("当前病人已办理医保结算,不能办理再次结算!!!"); } var inpatientInfoParam = new QueryInpatientInfoParam() { BusinessId = param.BusinessId }; //获取住院病人 var inpatientInfoData = _hisSqlRepository.QueryInpatientInfo(inpatientInfoParam); if (inpatientInfoData == null) { throw new Exception("该病人未在中心库中,请检查是否办理医保入院!!!"); } var settlementParam = new LeaveHospitalSettlementParam() { MedicalInsuranceHospitalizationNo = residentData.MedicalInsuranceHospitalizationNo, LeaveHospitalDate = Convert.ToDateTime(hisSettlement.LeaveHospitalDate).ToString("yyyyMMdd"), UserId = hisSettlement.LeaveHospitalOperator, LeaveHospitalInpatientState = param.LeaveHospitalInpatientState, }; //获取诊断 var diagnosisData = CommonHelp.GetDiagnosis(param.DiagnosisList); settlementParam.LeaveHospitalMainDiagnosisIcd10 = diagnosisData.AdmissionMainDiagnosisIcd10; settlementParam.LeaveHospitalDiagnosisIcd10Two = diagnosisData.DiagnosisIcd10Two; settlementParam.LeaveHospitalDiagnosisIcd10Three = diagnosisData.DiagnosisIcd10Three; settlementParam.LeaveHospitalMainDiagnosis = diagnosisData.DiagnosisDescribe; var infoParam = new LeaveHospitalSettlementInfoParam() { User = userBase, Id = residentData.Id, InsuranceNo = residentData.InsuranceNo, BusinessId = inpatientInfoData.BusinessId, IdCardNo = inpatientInfoData.IdCardNo, }; //医保执行 var data = _residentMedicalInsuranceRepository.LeaveHospitalSettlement(settlementParam, infoParam); if (data == null) { throw new Exception("居民住院结算反馈失败"); } var updateData = new UpdateMedicalInsuranceResidentSettlementParam() { UserId = userBase.UserId, ReimbursementExpensesAmount = CommonHelp.ValueToDouble(data.ReimbursementExpenses), SelfPayFeeAmount = data.CashPayment, OtherInfo = JsonConvert.SerializeObject(data), Id = residentData.Id, SettlementNo = data.DocumentNo, MedicalInsuranceAllAmount = data.TotalAmount, SettlementTransactionId = userBase.UserId, MedicalInsuranceState = MedicalInsuranceState.MedicalInsuranceSettlement }; //存入中间层 _medicalInsuranceSqlRepository.UpdateMedicalInsuranceResidentSettlement(updateData); //添加日志 var logParam = new AddHospitalLogParam() { JoinOrOldJson = JsonConvert.SerializeObject(param), ReturnOrNewJson = JsonConvert.SerializeObject(data), User = userBase, Remark = "居民住院结算", RelationId = residentData.Id, BusinessId = param.BusinessId, }; var userInfoData = _residentMedicalInsuranceRepository.GetUserInfo(new ResidentUserInfoParam() { IdentityMark = residentData.IdentityMark, AfferentSign = residentData.AfferentSign, }); // 回参构建 var xmlData = new HospitalSettlementXml() { MedicalInsuranceHospitalizationNo = residentData.MedicalInsuranceHospitalizationNo, CashPayment = data.CashPayment, SettlementNo = data.DocumentNo, PaidAmount = data.PaidAmount, AllAmount = data.TotalAmount, PatientName = userInfoData.PatientName, AccountBalance = userInfoData.WorkersInsuranceBalance, AccountAmountPay = 0, }; var strXmlBackParam = XmlSerializeHelper.HisXmlSerialize(xmlData); var saveXml = new SaveXmlDataParam() { User = userBase, MedicalInsuranceBackNum = data.DocumentNo, MedicalInsuranceCode = "41", BusinessId = param.BusinessId, BackParam = strXmlBackParam }; //结算存基层 _webBasicRepository.SaveXmlData(saveXml); var updateParamData = new UpdateMedicalInsuranceResidentSettlementParam() { UserId = param.UserId, Id = residentData.Id, MedicalInsuranceState = MedicalInsuranceState.HisSettlement, IsHisUpdateState = true }; // 更新中间层 _medicalInsuranceSqlRepository.UpdateMedicalInsuranceResidentSettlement(updateParamData); //结算后保存信息 var saveParam = AutoMapper.Mapper.Map <SaveInpatientSettlementParam>(hisSettlement); saveParam.Id = (Guid)inpatientInfoData.Id; saveParam.User = userBase; saveParam.LeaveHospitalDiagnosisJson = JsonConvert.SerializeObject(param.DiagnosisList); _hisSqlRepository.SaveInpatientSettlement(saveParam); return(data); }
//public void PrescriptionUploadAll(UploadAllParam param) //{ // //更新费用 //} /// <summary> /// 居民住院预结算 /// </summary> /// <param name="param"></param> /// <returns></returns> public HospitalizationPresettlementDto HospitalizationPreSettlement(UiBaseDataParam param) { HospitalizationPresettlementDto resultData = null; //获取操作人员信息 var userBase = _webserviceBasicService.GetUserBaseInfo(param.UserId); userBase.TransKey = param.TransKey; var queryResidentParam = new QueryMedicalInsuranceResidentInfoParam() { BusinessId = param.BusinessId, OrganizationCode = userBase.OrganizationCode }; var infoData = new GetInpatientInfoParam() { User = userBase, BusinessId = param.BusinessId, }; //获取his预结算 var hisPreSettlementData = _webserviceBasicService.GetHisHospitalizationPreSettlement(infoData); var preSettlementData = hisPreSettlementData.PreSettlementData.FirstOrDefault(); //获取医保病人信息 var residentData = _medicalInsuranceSqlRepository.QueryMedicalInsuranceResidentInfo(queryResidentParam); if (string.IsNullOrWhiteSpace(preSettlementData.EndDate)) { throw new Exception("当前病人在基层中未办理出院,不能办理医保预结算!!!"); } //医保执行 var data = _residentMedicalInsuranceRepository.HospitalizationPreSettlement(new HospitalizationPresettlementParam() { LeaveHospitalDate = Convert.ToDateTime(preSettlementData.EndDate).ToString("yyyyMMdd"), MedicalInsuranceHospitalizationNo = residentData.MedicalInsuranceHospitalizationNo, }); resultData = data ?? throw new Exception("居民预结算返回结果有误!!!"); //报销金额 =统筹支付+补充险支付+生育补助+民政救助+民政重大疾病救助+精准扶贫+民政优抚+其它支付 decimal reimbursementExpenses = data.BasicOverallPay + data.SupplementPayAmount + data.BirthAAllowance + data.CivilAssistancePayAmount + data.CivilAssistanceSeriousIllnessPayAmount + data.AccurateAssistancePayAmount + data.CivilServicessistancePayAmount + data.OtherPaymentAmount; resultData.ReimbursementExpenses = reimbursementExpenses; var updateParam = new UpdateMedicalInsuranceResidentSettlementParam() { ReimbursementExpensesAmount = CommonHelp.ValueToDouble(reimbursementExpenses), SelfPayFeeAmount = data.CashPayment, OtherInfo = JsonConvert.SerializeObject(data), Id = residentData.Id, UserId = param.UserId, SettlementNo = data.DocumentNo, MedicalInsuranceAllAmount = data.TotalAmount, PreSettlementTransactionId = param.TransKey, MedicalInsuranceState = MedicalInsuranceState.MedicalInsurancePreSettlement }; //存入中间库 _medicalInsuranceSqlRepository.UpdateMedicalInsuranceResidentSettlement(updateParam); var logParam = new AddHospitalLogParam() { JoinOrOldJson = JsonConvert.SerializeObject(param), ReturnOrNewJson = JsonConvert.SerializeObject(data), User = userBase, BusinessId = param.BusinessId, Remark = "居民住院病人预结算" }; _systemManageRepository.AddHospitalLog(logParam); return(resultData); }
public void DeletePrescriptionUpload(BaseUiBusinessIdDataParam param) { var userBase = _webserviceBasicService.GetUserBaseInfo(param.UserId); userBase.TransKey = param.TransKey; //获取医保病人信息 var residentDataParam = new QueryMedicalInsuranceResidentInfoParam() { BusinessId = param.BusinessId, OrganizationCode = userBase.OrganizationCode, }; List <QueryInpatientInfoDetailDto> queryData; //获取病人明细 var queryDataDetail = _hisSqlRepository.InpatientInfoDetailQuery (new InpatientInfoDetailQueryParam() { BusinessId = param.BusinessId }); //获取选择 queryData = param.DataIdList != null?queryDataDetail.Where(c => param.DataIdList.Contains(c.Id.ToString())).ToList() : queryDataDetail; //获取病人医保信息 var residentData = _medicalInsuranceSqlRepository.QueryMedicalInsuranceResidentInfo(residentDataParam); if (queryData.Any()) { //获取已上传数据、 var uploadDataId = queryData.Where(c => c.UploadMark == 1).Select(d => d.Id).ToList(); var batchNumberList = queryData.Where(c => c.UploadMark == 1).GroupBy(d => d.BatchNumber).Select(b => b.Key).ToList(); if (batchNumberList.Any()) { var deleteParam = new DeletePrescriptionUploadParam() { BatchNumber = string.Join(",", batchNumberList.ToArray()), MedicalInsuranceHospitalizationNo = residentData.MedicalInsuranceHospitalizationNo }; _residentMedicalInsuranceRepository.DeletePrescriptionUpload(deleteParam, uploadDataId, userBase); //取消医保上传状态 var updateFeeParam = uploadDataId.Select(c => new UpdateHospitalizationFeeParam { Id = c }) .ToList(); _medicalInsuranceSqlRepository.UpdateHospitalizationFee(updateFeeParam, true, userBase); //日志 var joinJson = JsonConvert.SerializeObject(queryData.Select(c => c.DetailId).ToList()); var logParam = new AddHospitalLogParam { User = userBase, RelationId = Guid.Parse(param.BusinessId), JoinOrOldJson = joinJson, ReturnOrNewJson = "", BusinessId = param.BusinessId, Remark = "医保取消处方明细id执行成功" }; _systemManageRepository.AddHospitalLog(logParam); // 回参构建 var xmlData = new HospitalizationFeeUploadCancelXml() { MedicalInsuranceHospitalizationNo = residentData.MedicalInsuranceHospitalizationNo, RowDataList = queryData.Select(c => new HospitalizationFeeUploadRowXml() { SerialNumber = c.DetailId }).ToList() }; var strXmlBackParam = XmlSerializeHelper.HisXmlSerialize(xmlData); var saveXml = new SaveXmlDataParam() { User = userBase, MedicalInsuranceBackNum = "CXJB005", MedicalInsuranceCode = "32", BusinessId = param.BusinessId, BackParam = strXmlBackParam }; //存基层 _webBasicRepository.SaveXmlData(saveXml); //日志 logParam.Remark = "基层取消处方明细id执行成功"; _systemManageRepository.AddHospitalLog(logParam); } } else { throw new Exception("未获取到医保退处方数据,请核实数据的正确性!!!"); } }
/// <summary> /// 医保处方上传 /// </summary> /// <param name="param"></param> /// <param name="user"></param> /// <returns></returns> public RetrunPrescriptionUploadDto PrescriptionUpload(PrescriptionUploadUiParam param, UserInfoDto user) { //处方上传解决方案 //1.判断是id上传还是单个用户上传 //3.获取医院等级判断金额是否符合要求 //4.数据上传 //4.1 id上传 //4.1.2 获取医院等级判断金额是否符合要求 //4.1.3 数据上传 //4.1.3.1 数据上传失败,数据回写到日志 //4.1.3.2 数据上传成功,保存批次号,数据回写至基层 //4.2 单个病人整体上传 //4.2.2 获取医院等级判断金额是否符合要求 //4.2.3 数据上传 //4.2.3.1 数据上传失败,数据回写到日志 var resultData = new RetrunPrescriptionUploadDto(); List <QueryInpatientInfoDetailDto> queryData; var queryParam = new InpatientInfoDetailQueryParam(); //1.判断是id上传还是单个用户上传 if (param.DataIdList != null && param.DataIdList.Any()) { queryParam.IdList = param.DataIdList; queryParam.UploadMark = 0; } else { queryParam.BusinessId = param.BusinessId; queryParam.UploadMark = 0; } //获取病人明细 queryData = _hisSqlRepository.InpatientInfoDetailQuery(queryParam); if (queryData.Any()) { var queryBusinessId = (!string.IsNullOrWhiteSpace(queryParam.BusinessId)) ? param.BusinessId : queryData.Select(c => c.BusinessId).FirstOrDefault(); var medicalInsuranceParam = new QueryMedicalInsuranceResidentInfoParam() { BusinessId = queryBusinessId }; //获取病人医保信息 var medicalInsurance = _medicalInsuranceSqlRepository.QueryMedicalInsuranceResidentInfo(medicalInsuranceParam); if (medicalInsurance == null) { if (!string.IsNullOrWhiteSpace(queryParam.BusinessId)) { resultData.Msg += "病人未办理医保入院"; } else { throw new Exception("病人未办理医保入院"); } } else { var queryPairCodeParam = new QueryMedicalInsurancePairCodeParam() { DirectoryCodeList = queryData.Select(d => d.DirectoryCode).Distinct().ToList(), OrganizationCode = user.OrganizationCode, }; //获取医保对码数据 var queryPairCode = _medicalInsuranceSqlRepository.QueryMedicalInsurancePairCode(queryPairCodeParam); //处方上传数据金额验证 var validData = PrescriptionDataUnitPriceValidation(queryData, queryPairCode, user); var validDataList = validData.Values.FirstOrDefault(); //错误提示信息 var validDataMsg = validData.Keys.FirstOrDefault(); if (!string.IsNullOrWhiteSpace(validDataMsg)) { resultData.Msg += validDataMsg; } //获取处方上传入参 var paramIni = GetPrescriptionUploadParam(validDataList, queryPairCode, user, medicalInsurance.InsuranceType); //医保住院号 paramIni.MedicalInsuranceHospitalizationNo = medicalInsurance.MedicalInsuranceHospitalizationNo; int num = paramIni.RowDataList.Count; resultData.Count = num; int a = 0; int limit = 40; //限制条数 var count = Convert.ToInt32(num / limit) + ((num % limit) > 0 ? 1 : 0); var idList = new List <Guid>(); while (a < count) { //排除已上传数据 var rowDataListAll = paramIni.RowDataList.Where(d => !idList.Contains(d.Id)) .OrderBy(c => c.PrescriptionSort).ToList(); var sendList = rowDataListAll.Take(limit).Select(s => s.Id).ToList(); //新的数据上传参数 var uploadDataParam = paramIni; uploadDataParam.RowDataList = rowDataListAll.Where(c => sendList.Contains(c.Id)).ToList(); //数据上传 var uploadData = PrescriptionUploadData(uploadDataParam, param.BusinessId, user); if (uploadData.ReturnState != "1") { resultData.Msg += uploadData.ReturnState; } else { //更新数据上传状态 idList.AddRange(sendList); //获取总行数 resultData.Num += sendList.Count(); } a++; } } } return(resultData); }
/// <summary> /// 门诊计划生育结算 /// </summary> /// <param name="param"></param> /// <returns></returns> public WorkerBirthSettlementDto OutpatientPlanBirthSettlement( OutpatientPlanBirthSettlementUiParam param) { WorkerBirthSettlementDto resultData; var iniData = JsonConvert.DeserializeObject <WorkerBirthPreSettlementJsonDto>(param.SettlementJson); resultData = AutoMapper.Mapper.Map <WorkerBirthSettlementDto>(iniData); var userBase = _serviceBasicService.GetUserBaseInfo(param.UserId); userBase.TransKey = param.TransKey; //门诊病人信息存储 var id = Guid.NewGuid(); var outpatientParam = new GetOutpatientPersonParam() { User = userBase, UiParam = param, Id = id, }; var outpatientPerson = _serviceBasicService.GetOutpatientPerson(outpatientParam); if (outpatientPerson == null) { throw new Exception("his中未获取到当前病人!!!"); } var outpatientDetailPerson = _serviceBasicService.GetOutpatientDetailPerson(new OutpatientDetailParam() { User = userBase, BusinessId = param.BusinessId, }); var queryResidentParam = new QueryMedicalInsuranceResidentInfoParam() { BusinessId = param.BusinessId, }; //获取医保病人信息 var residentData = _medicalInsuranceSqlRepository.QueryMedicalInsuranceResidentInfo(queryResidentParam); if (residentData.MedicalInsuranceState != MedicalInsuranceState.MedicalInsurancePreSettlement) { throw new Exception("当前病人未办理预结算,不能办理结算!!!"); } if (residentData.MedicalInsuranceState == MedicalInsuranceState.HisSettlement) { throw new Exception("当前病人已办理医保结算,不能办理再次结算!!!"); } _serviceBasicService.GetOutpatientPerson(outpatientParam); var accountPayment = resultData.AccountPayment + resultData.CivilServantsSubsidies + resultData.CivilServantsSubsidy + resultData.OtherPaymentAmount + resultData.BirthAallowance + resultData.SupplementPayAmount; var updateData = new UpdateMedicalInsuranceResidentSettlementParam() { UserId = userBase.UserId, ReimbursementExpensesAmount = CommonHelp.ValueToDouble(accountPayment), SelfPayFeeAmount = resultData.CashPayment, OtherInfo = JsonConvert.SerializeObject(resultData), Id = residentData.Id, SettlementNo = resultData.DocumentNo, MedicalInsuranceAllAmount = resultData.TotalAmount, SettlementTransactionId = userBase.UserId, MedicalInsuranceState = MedicalInsuranceState.MedicalInsuranceSettlement }; //存入中间层 _medicalInsuranceSqlRepository.UpdateMedicalInsuranceResidentSettlement(updateData); var iniParam = GetOutpatientPlanBirthSettlementParam(param); //日志写入 _systemManageRepository.AddHospitalLog(new AddHospitalLogParam() { User = userBase, JoinOrOldJson = JsonConvert.SerializeObject(iniParam), ReturnOrNewJson = JsonConvert.SerializeObject(resultData), RelationId = outpatientParam.Id, Remark = "[R][OutpatientDepartment]门诊生育结算" }); // 回参构建 var xmlData = new OutpatientDepartmentCostXml() { AccountBalance = !string.IsNullOrWhiteSpace(param.AccountBalance) == true?Convert.ToDecimal(param.AccountBalance) : 0, MedicalInsuranceOutpatientNo = resultData.DocumentNo, CashPayment = resultData.CashPayment, SettlementNo = resultData.DocumentNo, AllAmount = outpatientPerson.MedicalTreatmentTotalCost, PatientName = outpatientPerson.PatientName, AccountAmountPay = resultData.AccountPayment, MedicalInsuranceType = param.InsuranceType == "310" ? "1" : param.InsuranceType, }; var strXmlBackParam = XmlSerializeHelper.HisXmlSerialize(xmlData); var saveXml = new SaveXmlDataParam() { User = userBase, MedicalInsuranceBackNum = "zydj", MedicalInsuranceCode = "48", BusinessId = param.BusinessId, BackParam = strXmlBackParam }; ////存基层 _webBasicRepository.SaveXmlData(saveXml); var updateParamData = new UpdateMedicalInsuranceResidentSettlementParam() { UserId = param.UserId, Id = residentData.Id, MedicalInsuranceState = MedicalInsuranceState.HisSettlement, IsHisUpdateState = true }; // 更新中间层 _medicalInsuranceSqlRepository.UpdateMedicalInsuranceResidentSettlement(updateParamData); return(resultData); }
/// <summary> /// 职工生育预结算 /// </summary> /// <param name="param"></param> /// <returns></returns> public WorkerHospitalizationPreSettlementDto WorkerBirthPreSettlement(WorkerBirthPreSettlementUiParam param) { //获取操作人员信息 var userBase = _serviceBasicService.GetUserBaseInfo(param.UserId); userBase.TransKey = param.TransKey; var queryResidentParam = new QueryMedicalInsuranceResidentInfoParam() { BusinessId = param.BusinessId, OrganizationCode = userBase.OrganizationCode }; var infoData = new GetInpatientInfoParam() { User = userBase, BusinessId = param.BusinessId, }; //获取his结算 var settlementData = _serviceBasicService.GetHisHospitalizationSettlement(infoData); //获取医保病人信息 var residentData = _medicalInsuranceSqlRepository.QueryMedicalInsuranceResidentInfo(queryResidentParam); if (string.IsNullOrWhiteSpace(settlementData.LeaveHospitalDate)) { throw new Exception("当前病人在基层中未办理出院,不能办理医保预结算!!!"); } var preSettlement = new WorkerBirthPreSettlementParam() { MedicalCategory = param.MedicalCategory, FetusNumber = param.FetusNumber, MedicalInsuranceHospitalizationNo = residentData.MedicalInsuranceHospitalizationNo, LeaveHospitalDate = Convert.ToDateTime(settlementData.LeaveHospitalDate).ToString("yyyyMMdd"), }; //获取诊断 var diagnosisData = CommonHelp.GetDiagnosis(param.DiagnosisList); preSettlement.AdmissionMainDiagnosisIcd10 = diagnosisData.AdmissionMainDiagnosisIcd10; preSettlement.DiagnosisIcd10Two = diagnosisData.DiagnosisIcd10Two; preSettlement.DiagnosisIcd10Three = diagnosisData.DiagnosisIcd10Three; //医保结算 var resultData = _workerMedicalInsuranceRepository.WorkerBirthPreSettlement(preSettlement); //报销金额 =统筹支付+补充医疗保险支付金额+专项基金支付金额+ //公务员补贴+公务员补助+其它支付金额 decimal reimbursementExpenses = resultData.BasicOverallPay + resultData.SupplementPayAmount + resultData.SpecialFundPayAmount + resultData.CivilServantsSubsidies + resultData.CivilServantsSubsidy + resultData.OtherPaymentAmount; var updateParam = new UpdateMedicalInsuranceResidentSettlementParam() { ReimbursementExpensesAmount = CommonHelp.ValueToDouble(reimbursementExpenses), SelfPayFeeAmount = resultData.CashPayment, OtherInfo = JsonConvert.SerializeObject(resultData), Id = residentData.Id, UserId = userBase.UserId, SettlementNo = resultData.DocumentNo, MedicalInsuranceAllAmount = resultData.TotalAmount, PreSettlementTransactionId = userBase.TransKey, MedicalInsuranceState = MedicalInsuranceState.MedicalInsurancePreSettlement }; //存入中间库 _medicalInsuranceSqlRepository.UpdateMedicalInsuranceResidentSettlement(updateParam); var logParam = new AddHospitalLogParam() { JoinOrOldJson = JsonConvert.SerializeObject(param), ReturnOrNewJson = JsonConvert.SerializeObject(resultData), User = userBase, Remark = "职工生育住院病人预结算" }; _systemManageRepository.AddHospitalLog(logParam); return(resultData); }
/// <summary> /// 职工生育结算 /// </summary> /// <param name="param"></param> /// <returns></returns> public WorkerHospitalizationPreSettlementDto WorkerBirthSettlement(WorkerBirthSettlementUiParam param) { //获取操作人员信息 var userBase = _serviceBasicService.GetUserBaseInfo(param.UserId); userBase.TransKey = param.TransKey; var infoData = new GetInpatientInfoParam() { User = userBase, BusinessId = param.BusinessId, }; //获取his结算 var hisSettlement = _serviceBasicService.GetHisHospitalizationSettlement(infoData); var queryResidentParam = new QueryMedicalInsuranceResidentInfoParam() { BusinessId = param.BusinessId, OrganizationCode = userBase.OrganizationCode }; //获取医保病人信息 var residentData = _medicalInsuranceSqlRepository.QueryMedicalInsuranceResidentInfo(queryResidentParam); if (residentData.MedicalInsuranceState == MedicalInsuranceState.HisSettlement) { throw new Exception("当前病人已办理医保结算,不能办理预结算!!!"); } if (residentData.MedicalInsuranceState != MedicalInsuranceState.MedicalInsurancePreSettlement) { throw new Exception("当前病人未办理预结算,不能办理结算!!!"); } var inpatientInfoParam = new QueryInpatientInfoParam() { BusinessId = param.BusinessId }; //获取住院病人 var inpatientInfoData = _hisSqlRepository.QueryInpatientInfo(inpatientInfoParam); if (inpatientInfoData == null) { throw new Exception("该病人未在中心库中,请检查是否办理医保入院!!!"); } var infoParam = new WorkerBirthSettlementParam() { LeaveHospitalInpatientState = param.LeaveHospitalInpatientState, FetusNumber = param.FetusNumber, MedicalCategory = param.MedicalCategory, Operator = userBase.UserName, MedicalInsuranceHospitalizationNo = residentData.MedicalInsuranceHospitalizationNo, LeaveHospitalDate = Convert.ToDateTime(hisSettlement.LeaveHospitalDate).ToString("yyyyMMdd"), }; //获取诊断 var diagnosisData = CommonHelp.GetDiagnosis(param.DiagnosisList); infoParam.AdmissionMainDiagnosisIcd10 = diagnosisData.AdmissionMainDiagnosisIcd10; infoParam.DiagnosisIcd10Two = diagnosisData.DiagnosisIcd10Two; infoParam.DiagnosisIcd10Three = diagnosisData.DiagnosisIcd10Three; infoParam.AdmissionMainDiagnosis = diagnosisData.DiagnosisDescribe; // 医保 var resultData = _workerMedicalInsuranceRepository.WorkerBirthSettlement(infoParam); //报销金额 =统筹支付+补充医疗保险支付金额+专项基金支付金额+ //公务员补贴+公务员补助+其它支付金额 decimal reimbursementExpenses = resultData.BasicOverallPay + resultData.SupplementPayAmount + resultData.SpecialFundPayAmount + resultData.CivilServantsSubsidies + resultData.CivilServantsSubsidy + resultData.OtherPaymentAmount; resultData.ReimbursementExpenses = reimbursementExpenses; var updateData = new UpdateMedicalInsuranceResidentSettlementParam() { UserId = userBase.UserId, ReimbursementExpensesAmount = CommonHelp.ValueToDouble(reimbursementExpenses), SelfPayFeeAmount = resultData.CashPayment, OtherInfo = JsonConvert.SerializeObject(resultData), Id = residentData.Id, SettlementNo = resultData.DocumentNo, MedicalInsuranceAllAmount = resultData.TotalAmount, SettlementTransactionId = userBase.UserId, MedicalInsuranceState = MedicalInsuranceState.MedicalInsuranceSettlement }; //存入中间层 _medicalInsuranceSqlRepository.UpdateMedicalInsuranceResidentSettlement(updateData); //添加日志 var logParam = new AddHospitalLogParam() { JoinOrOldJson = JsonConvert.SerializeObject(param), ReturnOrNewJson = JsonConvert.SerializeObject(resultData), User = userBase, Remark = "职工住院结算", RelationId = residentData.Id, }; //存入基层 var userInfoData = _residentMedicalInsuranceRepository.GetUserInfo(new ResidentUserInfoParam() { IdentityMark = residentData.IdentityMark, AfferentSign = residentData.AfferentSign, }); // 回参构建 var xmlData = new HospitalSettlementXml() { MedicalInsuranceHospitalizationNo = residentData.MedicalInsuranceHospitalizationNo, CashPayment = resultData.CashPayment, SettlementNo = resultData.DocumentNo, PaidAmount = resultData.PaidAmount, AllAmount = resultData.TotalAmount, PatientName = userInfoData.PatientName, AccountBalance = userInfoData.WorkersInsuranceBalance, AccountAmountPay = resultData.AccountPayment, }; var strXmlBackParam = XmlSerializeHelper.HisXmlSerialize(xmlData); var saveXml = new SaveXmlDataParam() { User = userBase, MedicalInsuranceBackNum = resultData.DocumentNo, MedicalInsuranceCode = "41", BusinessId = param.BusinessId, BackParam = strXmlBackParam }; //结算存基层 _webBasicRepository.SaveXmlData(saveXml); var updateParamData = new UpdateMedicalInsuranceResidentSettlementParam() { UserId = param.UserId, Id = residentData.Id, MedicalInsuranceState = MedicalInsuranceState.HisSettlement, IsHisUpdateState = true }; // 更新中间层 _medicalInsuranceSqlRepository.UpdateMedicalInsuranceResidentSettlement(updateParamData); //结算后保存信息 var saveParam = AutoMapper.Mapper.Map <SaveInpatientSettlementParam>(hisSettlement); saveParam.Id = (Guid)inpatientInfoData.Id; saveParam.User = userBase; saveParam.LeaveHospitalDiagnosisJson = JsonConvert.SerializeObject(param.DiagnosisList); _hisSqlRepository.SaveInpatientSettlement(saveParam); return(resultData); }
/// <summary> /// 门诊异地划卡 /// </summary> /// <param name="param"></param> public WorkerHospitalSettlementCardBackDto YdOutpatientPayCard(GetYdOutpatientPayCardParam param) { var resultData = new WorkerHospitalSettlementCardBackDto(); var outputData = XmlSerializeHelper.YdDeSerializer <YdOutpatientPayCardXml>(param.SettlementJson); //YdOutpatientPayCardXml var userBase = _serviceBasicService.GetUserBaseInfo(param.UserId); userBase.TransKey = param.TransKey; //门诊病人信息存储 var id = Guid.NewGuid(); var outpatientParam = new GetOutpatientPersonParam() { User = userBase, UiParam = param, Id = id, IsSave = true, }; var outpatientPerson = _serviceBasicService.GetOutpatientPerson(outpatientParam); if (outpatientPerson == null) { throw new Exception("his中未获取到当前病人!!!"); } //储存明细 var outpatientDetailPerson = _serviceBasicService.GetOutpatientDetailPerson(new OutpatientDetailParam() { User = userBase, BusinessId = param.BusinessId, IsSave = true, PatientId = id.ToString() }); var queryResidentParam = new QueryMedicalInsuranceResidentInfoParam() { BusinessId = param.BusinessId, }; //日志写入 _systemManageRepository.AddHospitalLog(new AddHospitalLogParam() { User = userBase, JoinOrOldJson = JsonConvert.SerializeObject(param), ReturnOrNewJson = JsonConvert.SerializeObject(outputData), RelationId = outpatientParam.Id, BusinessId = param.BusinessId, Remark = outputData.SerialNumber + "异地刷卡支付" }); //获取医保病人信息 var residentData = _medicalInsuranceSqlRepository.QueryMedicalInsuranceResidentInfo(queryResidentParam); if (residentData.MedicalInsuranceState != MedicalInsuranceState.MedicalInsurancePreSettlement) { throw new Exception("当前病人未办理预结算,不能办理结算!!!"); } //存中间库 var updateData = new UpdateMedicalInsuranceResidentSettlementParam() { UserId = userBase.UserId, SelfPayFeeAmount = CommonHelp.ValueToDouble(outpatientPerson.MedicalTreatmentTotalCost - outputData.AccountPayAmount), OtherInfo = JsonConvert.SerializeObject(resultData), Id = residentData.Id, SettlementNo = outputData.SerialNumber, MedicalInsuranceAllAmount = outpatientPerson.MedicalTreatmentTotalCost, SettlementTransactionId = userBase.UserId, MedicalInsuranceState = MedicalInsuranceState.MedicalInsuranceSettlement, SettlementType = "2", PatientId = id.ToString() }; //存入中间层 _medicalInsuranceSqlRepository.UpdateMedicalInsuranceResidentSettlement(updateData); // 回参构建 var xmlData = new OutpatientDepartmentCostXml() { AccountBalance = param.AccountBalance, MedicalInsuranceOutpatientNo = outputData.SerialNumber, CashPayment = outputData.CashPayAmount, SettlementNo = outputData.SerialNumber, AllAmount = CommonHelp.ValueToDouble(outpatientPerson.MedicalTreatmentTotalCost), PatientName = outpatientPerson.PatientName, AccountAmountPay = outputData.AccountPayAmount, MedicalInsuranceType = "1", }; var strXmlBackParam = XmlSerializeHelper.HisXmlSerialize(xmlData); var saveXml = new SaveXmlDataParam() { User = userBase, MedicalInsuranceBackNum = "zydj", MedicalInsuranceCode = "48", BusinessId = param.BusinessId, BackParam = strXmlBackParam }; //存基层 _webBasicRepository.SaveXmlData(saveXml); var updateParamData = new UpdateMedicalInsuranceResidentSettlementParam() { UserId = param.UserId, Id = residentData.Id, MedicalInsuranceState = MedicalInsuranceState.HisSettlement, IsHisUpdateState = true }; // 更新中间层 _medicalInsuranceSqlRepository.UpdateMedicalInsuranceResidentSettlement(updateParamData); resultData.AccountBalance = param.AccountBalance; resultData.AccountPayment = outputData.AccountPayAmount; resultData.CashPayment = outputData.CashPayAmount; return(resultData); }