|
|
@@ -814,12 +814,12 @@ public class StandardReportServiceImpl implements StandardReportService {
|
|
|
}
|
|
|
BigDecimal respParamValue = getParamValue(respShareParamValues, visitsBedDaysParamCode[NumberConstant.ZERO]);
|
|
|
item.setServiceCount(respParamValue);
|
|
|
- //计算每诊次的医疗全成本
|
|
|
- item.setHospitalFullCost(getPercent(item.getHospitalFullCost(),bedDaysParamValue));
|
|
|
//计算每诊次的医疗成本
|
|
|
item.setMedicalCost(getPercent(item.getMedicalCost(),bedDaysParamValue));
|
|
|
+ //计算每诊次的医疗全成本
|
|
|
+ item.setMedicalFullCost(getPercent(item.getMedicalFullCost(),bedDaysParamValue));
|
|
|
//计算每诊次的医院全成本
|
|
|
- item.setHospitalFullCost(getPercent(item.getMedicalFullCost(),bedDaysParamValue));
|
|
|
+ item.setHospitalFullCost(getPercent(item.getHospitalFullCost(),bedDaysParamValue));
|
|
|
// 将各科室金额累加到总计对象
|
|
|
addBigDecimalFields(item, grandTotal);
|
|
|
}
|
|
|
@@ -852,8 +852,6 @@ public class StandardReportServiceImpl implements StandardReportService {
|
|
|
if(CollectionUtils.isEmpty(projectCostAccountList)){
|
|
|
throw new CostException("请先计算项目成本");
|
|
|
}
|
|
|
- // 获取所有的标准字典数据
|
|
|
- StandCostDictMapVO standCostDictMaps = getStandCostDictMaps();
|
|
|
|
|
|
List<Map<String, StandItem>> standItemMapDict = getStandItemMapDict(standItemList);
|
|
|
// 记录项目类别对象
|
|
|
@@ -865,8 +863,8 @@ public class StandardReportServiceImpl implements StandardReportService {
|
|
|
continue;
|
|
|
}
|
|
|
//按项目类型累加数据
|
|
|
- DictDataVo costType = standCostDictMaps.getCostTypeMap().get(projectCostAccount.getCostType());
|
|
|
- HospitalServiceProjectCostVO vo = new HospitalServiceProjectCostVO();
|
|
|
+ String costType = projectCostAccount.getCostType();
|
|
|
+ HospitalServiceProjectCostVO vo ;
|
|
|
//已有的项目类别
|
|
|
if (projectCostMap.containsKey(projectItemType.getCode())) {
|
|
|
vo = projectCostMap.get(projectItemType.getCode());
|
|
|
@@ -875,12 +873,16 @@ public class StandardReportServiceImpl implements StandardReportService {
|
|
|
vo = convertToHospitalServiceProjectCostVO(projectItemType);
|
|
|
projectCostMap.put(projectItemType.getCode(), vo);
|
|
|
}
|
|
|
+ //没有数据时跳过
|
|
|
+ if(ObjectUtils.isEmpty(projectCostAccount.getComputeResult())){
|
|
|
+ continue;
|
|
|
+ }
|
|
|
// 医疗成本
|
|
|
- if ("1".equals(costType.getExpandOne())) {
|
|
|
+ if ("1".equals(costType)) {
|
|
|
vo.setMedicalCost(vo.getMedicalCost().add(projectCostAccount.getComputeResult()));
|
|
|
}
|
|
|
// 医疗全成本
|
|
|
- if (!"3".equals(costType.getExpandOne())) {
|
|
|
+ if (!"3".equals(costType)) {
|
|
|
vo.setMedicalFullCost(vo.getMedicalFullCost().add(projectCostAccount.getComputeResult()));
|
|
|
}
|
|
|
// 医院全成本
|
|
|
@@ -903,33 +905,59 @@ public class StandardReportServiceImpl implements StandardReportService {
|
|
|
if(CollectionUtils.isEmpty(projectCostAccountList)){
|
|
|
throw new CostException("请先计算项目成本");
|
|
|
}
|
|
|
- // 获取所有的标准字典数据
|
|
|
- StandCostDictMapVO standCostDictMaps = getStandCostDictMaps();
|
|
|
// 记录项目类别对象
|
|
|
Map<String, HospitalServiceProjectCostVO> projectCostMap = new HashMap<>();
|
|
|
for (HospitalServiceProjectCostVO projectCostAccount : projectCostAccountList) {
|
|
|
//按项目类型累加数据
|
|
|
- DictDataVo costType = standCostDictMaps.getCostTypeMap().get(projectCostAccount.getCostTypeCode());
|
|
|
+ String costType = projectCostAccount.getCostTypeCode();
|
|
|
HospitalServiceProjectCostVO vo = new HospitalServiceProjectCostVO();
|
|
|
//已有的项目类别
|
|
|
if (projectCostMap.containsKey(projectCostAccount.getItemCode())) {
|
|
|
vo = projectCostMap.get(projectCostAccount.getItemCode());
|
|
|
} else {
|
|
|
//新建一个项目类别对象
|
|
|
- projectCostMap.put(projectCostAccount.getItemCode(), projectCostAccount);
|
|
|
+ vo = BeanUtil.convertObj(projectCostAccount, HospitalServiceProjectCostVO.class) ;
|
|
|
+ // 初始化所有费用字段为0
|
|
|
+ BeanUtil.initBigDecimalFieldsToZero(vo);
|
|
|
+ projectCostMap.put(projectCostAccount.getItemCode(), vo);
|
|
|
+ }
|
|
|
+ //没有数据时跳过
|
|
|
+ if(ObjectUtils.isEmpty(projectCostAccount.getHospitalFullCost())){
|
|
|
+ continue;
|
|
|
}
|
|
|
// 医疗成本
|
|
|
- if ("1".equals(costType.getExpandOne())) {
|
|
|
+ if ("1".equals(costType)) {
|
|
|
vo.setMedicalCost(vo.getMedicalCost().add(projectCostAccount.getHospitalFullCost()));
|
|
|
}
|
|
|
// 医疗全成本
|
|
|
- if (!"3".equals(costType.getExpandOne())) {
|
|
|
+ if (!"3".equals(costType)) {
|
|
|
vo.setMedicalFullCost(vo.getMedicalFullCost().add(projectCostAccount.getHospitalFullCost()));
|
|
|
}
|
|
|
// 医院全成本
|
|
|
vo.setHospitalFullCost(vo.getHospitalFullCost().add(projectCostAccount.getHospitalFullCost()));
|
|
|
+ //服务量
|
|
|
+ if(!ObjectUtils.isEmpty(projectCostAccount.getServiceVolume())){
|
|
|
+ vo.setServiceVolume(projectCostAccount.getServiceVolume());
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
List<HospitalServiceProjectCostVO> medServiceCostDetailList =new ArrayList<>(projectCostMap.values());
|
|
|
+ // 计算每项目成本
|
|
|
+ for (HospitalServiceProjectCostVO item : medServiceCostDetailList) {
|
|
|
+ BigDecimal serviceVolume = item.getServiceVolume();
|
|
|
+ if(ObjectUtils.isEmpty(serviceVolume)){
|
|
|
+ item.setMedicalCost(BigDecimal.ZERO);
|
|
|
+ item.setMedicalFullCost(BigDecimal.ZERO);
|
|
|
+ item.setHospitalFullCost(BigDecimal.ZERO);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ //计算每项目的医疗成本
|
|
|
+ item.setMedicalCost(getPercent(item.getMedicalCost(),serviceVolume));
|
|
|
+ //计算每项目的医疗全成本
|
|
|
+ item.setMedicalFullCost(getPercent(item.getMedicalFullCost(),serviceVolume));
|
|
|
+ //计算每项目的医院全成本
|
|
|
+ item.setHospitalFullCost(getPercent(item.getHospitalFullCost(),serviceVolume));
|
|
|
+ }
|
|
|
return medServiceCostDetailList;
|
|
|
}
|
|
|
|
|
|
@@ -957,8 +985,14 @@ public class StandardReportServiceImpl implements StandardReportService {
|
|
|
if (diseaseCostMap.containsKey(projectCostAccount.getItemCode())) {
|
|
|
vo = diseaseCostMap.get(projectCostAccount.getItemCode());
|
|
|
} else {
|
|
|
+ vo= BeanUtil.convertObj(projectCostAccount, DiseaseCostDetailVO.class) ;
|
|
|
+ BeanUtil.initBigDecimalFieldsToZero(vo);
|
|
|
//新建一个项目类别对象
|
|
|
- diseaseCostMap.put(projectCostAccount.getItemCode(), projectCostAccount);
|
|
|
+ diseaseCostMap.put(projectCostAccount.getItemCode(), vo);
|
|
|
+ }
|
|
|
+ //没有数据时跳过
|
|
|
+ if(ObjectUtils.isEmpty(projectCostAccount.getHospitalFullCost())){
|
|
|
+ continue;
|
|
|
}
|
|
|
// 医疗成本
|
|
|
if ("1".equals(costType.getExpandOne())) {
|
|
|
@@ -970,16 +1004,23 @@ public class StandardReportServiceImpl implements StandardReportService {
|
|
|
}
|
|
|
// 医院全成本
|
|
|
vo.setHospitalFullCost(vo.getHospitalFullCost().add(projectCostAccount.getHospitalFullCost()));
|
|
|
- // 服务量
|
|
|
- vo.setServiceVolume(projectCostAccount.getServiceVolume());
|
|
|
+ if(!ObjectUtils.isEmpty(projectCostAccount.getServiceVolume())){
|
|
|
+ // 服务量
|
|
|
+ vo.setServiceVolume(projectCostAccount.getServiceVolume());
|
|
|
+ }
|
|
|
}
|
|
|
List<DiseaseCostDetailVO> medServiceCostDetailList =new ArrayList<>(diseaseCostMap.values());
|
|
|
- //计算单个病种的成本
|
|
|
- medServiceCostDetailList.forEach(vo -> {
|
|
|
- vo.setMedicalCost(getPercent(vo.getServiceVolume(),vo.getMedicalCost()));
|
|
|
- vo.setMedicalFullCost(getPercent(vo.getServiceVolume(),vo.getMedicalFullCost()));
|
|
|
- vo.setHospitalFullCost(getPercent(vo.getServiceVolume(),vo.getHospitalFullCost()));
|
|
|
- });
|
|
|
+ try {
|
|
|
+ //计算单个病种的成本
|
|
|
+ medServiceCostDetailList.forEach(vo -> {
|
|
|
+ vo.setMedicalCost(getPercent(vo.getServiceVolume(),vo.getMedicalCost()));
|
|
|
+ vo.setMedicalFullCost(getPercent(vo.getServiceVolume(),vo.getMedicalFullCost()));
|
|
|
+ vo.setHospitalFullCost(getPercent(vo.getServiceVolume(),vo.getHospitalFullCost()));
|
|
|
+ });
|
|
|
+ }catch (Exception e){
|
|
|
+ log.error("计算病种成本时发生异常",e);
|
|
|
+ }
|
|
|
+
|
|
|
return medServiceCostDetailList;
|
|
|
}
|
|
|
|
|
|
@@ -996,25 +1037,25 @@ public class StandardReportServiceImpl implements StandardReportService {
|
|
|
if(CollectionUtils.isEmpty(projectCostAccountList)){
|
|
|
throw new CostException("请先计算患者成本");
|
|
|
}
|
|
|
- // 获取所有的标准字典数据
|
|
|
- StandCostDictMapVO standCostDictMaps = getStandCostDictMaps();
|
|
|
// 记录项目类别对象
|
|
|
Map<String, DiseaseCostDetailVO> diseaseCostMap = new HashMap<>();
|
|
|
for (DiseaseCostDetailVO projectCostAccount : projectCostAccountList) {
|
|
|
//按项目类型累加数据
|
|
|
- DictDataVo accountType = standCostDictMaps.getAccountingTypeMap().get(projectCostAccount.getCostTypeCode());
|
|
|
- DiseaseCostDetailVO vo = new DiseaseCostDetailVO();
|
|
|
+ String accountType = projectCostAccount.getCostTypeCode();
|
|
|
+ DiseaseCostDetailVO vo ;
|
|
|
//已有的项目类别
|
|
|
if (diseaseCostMap.containsKey(projectCostAccount.getItemCode())) {
|
|
|
vo = diseaseCostMap.get(projectCostAccount.getItemCode());
|
|
|
} else {
|
|
|
+ vo = new DiseaseCostDetailVO();
|
|
|
vo.setItemCode(projectCostAccount.getItemCode());
|
|
|
vo.setItemName(projectCostAccount.getItemName());
|
|
|
+ BeanUtil.initBigDecimalFieldsToZero(vo);
|
|
|
//新建一个项目类别对象
|
|
|
diseaseCostMap.put(projectCostAccount.getItemCode(), vo);
|
|
|
}
|
|
|
//按会计科目类型累加费用
|
|
|
- addAccountTypeExpense(accountType.getExpandOne(), projectCostAccount.getHospitalFullCost(), vo);
|
|
|
+ addAccountTypeExpense(accountType, projectCostAccount.getHospitalFullCost(), vo);
|
|
|
//累加数量
|
|
|
vo.setServiceVolume(vo.getServiceVolume().add(projectCostAccount.getServiceVolume()));
|
|
|
}
|
|
|
@@ -1052,13 +1093,16 @@ public class StandardReportServiceImpl implements StandardReportService {
|
|
|
Map<String, ReportFormCustomVo> diseaseCostMap = new HashMap<>();
|
|
|
// 遍历每个项目生成科室金额
|
|
|
for (DiseaseCostDetailVO costItem : projectCostAccountList) {
|
|
|
- ReportFormCustomVo itemVo = new ReportFormCustomVo();
|
|
|
+ ReportFormCustomVo itemVo ;
|
|
|
if(diseaseCostMap.containsKey(costItem.getItemCode())){
|
|
|
itemVo=diseaseCostMap.get(costItem.getItemCode());
|
|
|
}else{
|
|
|
+ itemVo = new ReportFormCustomVo();
|
|
|
itemVo.setReportName(costItem.getItemName());
|
|
|
+ itemVo.setReportCode(costItem.getItemCode());
|
|
|
itemVo.setData(new ArrayList<>());
|
|
|
itemVo.setTotalValue(BigDecimal.ZERO);
|
|
|
+ diseaseCostMap.put(costItem.getItemCode(),itemVo);
|
|
|
}
|
|
|
//金额对象
|
|
|
ReportVo amountReportVo = new ReportVo();
|
|
|
@@ -1078,7 +1122,9 @@ public class StandardReportServiceImpl implements StandardReportService {
|
|
|
if(CollectionUtils.isEmpty(costItem.getData())){
|
|
|
continue;
|
|
|
}
|
|
|
- for (ReportVo amountReportVo : costItem.getData()) {
|
|
|
+ List<ReportVo> dataList =new ArrayList<>();
|
|
|
+ dataList.addAll(costItem.getData());
|
|
|
+ for (ReportVo amountReportVo : dataList) {
|
|
|
//占比对象
|
|
|
ReportVo percentReportVo = new ReportVo();
|
|
|
percentReportVo.setCode(amountReportVo.getCode());
|
|
|
@@ -1115,13 +1161,19 @@ public class StandardReportServiceImpl implements StandardReportService {
|
|
|
for (DiseaseCostDetailVO projectCostAccount : projectCostAccountList) {
|
|
|
//按项目类型累加数据
|
|
|
DictDataVo costType = standCostDictMaps.getCostTypeMap().get(projectCostAccount.getCostTypeCode());
|
|
|
- DiseaseCostDetailVO vo = new DiseaseCostDetailVO();
|
|
|
+ DiseaseCostDetailVO vo ;
|
|
|
//已有的项目类别
|
|
|
if (drgeCostMap.containsKey(projectCostAccount.getItemCode())) {
|
|
|
vo = drgeCostMap.get(projectCostAccount.getItemCode());
|
|
|
} else {
|
|
|
+ vo=BeanUtil.convertObj(projectCostAccount,DiseaseCostDetailVO.class);
|
|
|
+ BeanUtil.initBigDecimalFieldsToZero(vo);
|
|
|
//新建一个项目类别对象
|
|
|
- drgeCostMap.put(projectCostAccount.getItemCode(), projectCostAccount);
|
|
|
+ drgeCostMap.put(projectCostAccount.getItemCode(), vo);
|
|
|
+ }
|
|
|
+ //没有数据时跳过
|
|
|
+ if(ObjectUtils.isEmpty(projectCostAccount.getHospitalFullCost())){
|
|
|
+ continue;
|
|
|
}
|
|
|
// 医疗成本
|
|
|
if ("1".equals(costType.getExpandOne())) {
|
|
|
@@ -1139,9 +1191,9 @@ public class StandardReportServiceImpl implements StandardReportService {
|
|
|
List<DiseaseCostDetailVO> drgeCostDetailList = new ArrayList<>(drgeCostMap.values());
|
|
|
//计算单个DRG的成本
|
|
|
drgeCostDetailList.forEach(vo -> {
|
|
|
- vo.setMedicalCost(getPercent(vo.getServiceVolume(), vo.getMedicalCost()));
|
|
|
- vo.setMedicalFullCost(getPercent(vo.getServiceVolume(), vo.getMedicalFullCost()));
|
|
|
- vo.setHospitalFullCost(getPercent(vo.getServiceVolume(), vo.getHospitalFullCost()));
|
|
|
+ vo.setMedicalCost(getPercent( vo.getMedicalCost(),vo.getServiceVolume()));
|
|
|
+ vo.setMedicalFullCost(getPercent(vo.getMedicalFullCost(),vo.getServiceVolume()));
|
|
|
+ vo.setHospitalFullCost(getPercent(vo.getHospitalFullCost(),vo.getServiceVolume()));
|
|
|
});
|
|
|
return drgeCostDetailList;
|
|
|
}
|
|
|
@@ -1157,25 +1209,25 @@ public class StandardReportServiceImpl implements StandardReportService {
|
|
|
if(CollectionUtils.isEmpty(projectCostAccountList)){
|
|
|
throw new CostException("请先计算患者成本");
|
|
|
}
|
|
|
- // 获取所有的标准字典数据
|
|
|
- StandCostDictMapVO standCostDictMaps = getStandCostDictMaps();
|
|
|
// 记录项目类别对象
|
|
|
Map<String, DiseaseCostDetailVO> diseaseCostMap = new HashMap<>();
|
|
|
for (DiseaseCostDetailVO projectCostAccount : projectCostAccountList) {
|
|
|
//按项目类型累加数据
|
|
|
- DictDataVo accountType = standCostDictMaps.getAccountingTypeMap().get(projectCostAccount.getCostTypeCode());
|
|
|
- DiseaseCostDetailVO vo = new DiseaseCostDetailVO();
|
|
|
+ String accountType = projectCostAccount.getCostTypeCode();
|
|
|
+ DiseaseCostDetailVO vo ;
|
|
|
//已有的项目类别
|
|
|
if (diseaseCostMap.containsKey(projectCostAccount.getItemCode())) {
|
|
|
vo = diseaseCostMap.get(projectCostAccount.getItemCode());
|
|
|
} else {
|
|
|
+ vo = new DiseaseCostDetailVO();
|
|
|
vo.setItemCode(projectCostAccount.getItemCode());
|
|
|
vo.setItemName(projectCostAccount.getItemName());
|
|
|
+ BeanUtil.initBigDecimalFieldsToZero(vo);
|
|
|
//新建一个项目类别对象
|
|
|
diseaseCostMap.put(projectCostAccount.getItemCode(), vo);
|
|
|
}
|
|
|
//按会计科目类型累加费用
|
|
|
- addAccountTypeExpense(accountType.getExpandOne(), projectCostAccount.getHospitalFullCost(), vo);
|
|
|
+ addAccountTypeExpense(accountType, projectCostAccount.getHospitalFullCost(), vo);
|
|
|
//累加数量
|
|
|
vo.setServiceVolume(vo.getServiceVolume().add(projectCostAccount.getServiceVolume()));
|
|
|
}
|
|
|
@@ -1213,13 +1265,16 @@ public class StandardReportServiceImpl implements StandardReportService {
|
|
|
Map<String, ReportFormCustomVo> diseaseCostMap = new HashMap<>();
|
|
|
// 遍历每个项目生成科室金额
|
|
|
for (DiseaseCostDetailVO costItem : projectCostAccountList) {
|
|
|
- ReportFormCustomVo itemVo = new ReportFormCustomVo();
|
|
|
+ ReportFormCustomVo itemVo ;
|
|
|
if(diseaseCostMap.containsKey(costItem.getItemCode())){
|
|
|
itemVo=diseaseCostMap.get(costItem.getItemCode());
|
|
|
}else{
|
|
|
+ itemVo = new ReportFormCustomVo();
|
|
|
itemVo.setReportName(costItem.getItemName());
|
|
|
+ itemVo.setReportCode(costItem.getItemCode());
|
|
|
itemVo.setData(new ArrayList<>());
|
|
|
itemVo.setTotalValue(BigDecimal.ZERO);
|
|
|
+ diseaseCostMap.put(costItem.getItemCode(), itemVo);
|
|
|
}
|
|
|
//金额对象
|
|
|
ReportVo amountReportVo = new ReportVo();
|
|
|
@@ -1239,7 +1294,9 @@ public class StandardReportServiceImpl implements StandardReportService {
|
|
|
if(CollectionUtils.isEmpty(costItem.getData())){
|
|
|
continue;
|
|
|
}
|
|
|
- for (ReportVo amountReportVo : costItem.getData()) {
|
|
|
+ List<ReportVo> dataList =new ArrayList<>();
|
|
|
+ dataList.addAll(costItem.getData());
|
|
|
+ for (ReportVo amountReportVo :dataList) {
|
|
|
//占比对象
|
|
|
ReportVo percentReportVo = new ReportVo();
|
|
|
percentReportVo.setCode(amountReportVo.getCode());
|