/// <summary> /// 处方自动上传 /// </summary> /// <param name="param"></param> /// <param name="user"></param> public void PrescriptionUploadAutomatic(PrescriptionUploadAutomaticParam param, UserInfoDto user) {//获取所有未传费用病人 var allPatients = _hisSqlRepository.QueryAllHospitalizationPatients(param); if (allPatients.Any()) { //根据组织机构分组 var organizationGroupBy = allPatients.Select(c => c.OrganizationCode).Distinct().ToList(); foreach (var item in organizationGroupBy) { //本院获取病人列表 var ratientsList = allPatients.Where(c => c.OrganizationCode == item).ToList(); //病人传费 foreach (var items in ratientsList) { var uploadParam = new PrescriptionUploadUiParam() { BusinessId = items.BusinessId }; _residentMedicalInsuranceRepository.PrescriptionUpload(uploadParam, user); } } } }
/// <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); }