|
@@ -134,7 +134,7 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
|
|
|
@SuppressWarnings("all")
|
|
|
@Autowired
|
|
|
private YpBaseYfMapper ypBaseYfMapper;
|
|
|
-// @SuppressWarnings("all")
|
|
|
+ // @SuppressWarnings("all")
|
|
|
// @Autowired
|
|
|
// private MzChargeDetailYbMapper mzChargeDetailYbMapper;
|
|
|
@SuppressWarnings("all")
|
|
@@ -342,9 +342,16 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
|
|
|
//maxOrderNo++;
|
|
|
Map<String, MzYjReq> mzYjReqMap = new HashMap<>();
|
|
|
Map<String, MzChargeDetail> tcNoMap = new HashMap<>();
|
|
|
+ //医技申请码对应的处方总金额
|
|
|
+ Map<String, BigDecimal> reqAmountMap = null;
|
|
|
+ //项目明细编码和明细项目的map集合
|
|
|
+ Map<String, Object> zdChargeItemMap = null;
|
|
|
if (mzYjReqs != null && mzYjReqs.size() > 0) {
|
|
|
List<String> jianYans = new ArrayList<>();
|
|
|
List<String> jianChas = new ArrayList<>();
|
|
|
+ //医技医嘱码对应的处方明细
|
|
|
+ //医技申请码对应的处方总金额
|
|
|
+ reqAmountMap = new HashMap<>();
|
|
|
Integer index = 1;
|
|
|
for (MzYjReq mzYjReq : mzYjReqs) {
|
|
|
//不为空且没有划价
|
|
@@ -356,6 +363,15 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
|
|
|
temp = temp + index++;
|
|
|
itemNo = formatYjChargeDetail(mzChargeDetail, mzChargeDetails, maxOrderNo, mzPatientMi, itemNo, jianYans, jianChas, mzYjReq, temp, priceId, priceTime, tcNoMap, receiptNo);
|
|
|
mzYjReqMap.put(mzYjReq.getOrderCode(), mzYjReq);
|
|
|
+ Integer reqType = Integer.valueOf(mzYjReq.getReqType());
|
|
|
+ List<ZdChargeItem> zdChargeItemList = jcJyItemChargeService.queryJcJyItemChargeByCode(mzYjReq.getOrderCode(), reqType - 1);
|
|
|
+ if (zdChargeItemList != null && zdChargeItemList.size() > 0) {
|
|
|
+ BigDecimal amount = BigDecimal.ZERO;
|
|
|
+ for (ZdChargeItem zd : zdChargeItemList) {
|
|
|
+ amount = amount.add(zd.getChargeAmount());
|
|
|
+ }
|
|
|
+ reqAmountMap.put(mzYjReq.getOrderCode(), amount);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
List<JcJyItemCharge> jcJyItemCharges = null;
|
|
@@ -376,38 +392,154 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
|
|
|
}
|
|
|
}
|
|
|
if (jcJyItemCharges != null && jcJyItemCharges.size() > 0) {
|
|
|
- Map<String, Map<String, Object>> jcHalfFareMap = new HashMap<>();
|
|
|
+ zdChargeItemMap = new HashMap<>();
|
|
|
for (JcJyItemCharge jcJyItemCharge : jcJyItemCharges) {
|
|
|
Integer count = jyjcCount.get(jcJyItemCharge.getCode());
|
|
|
for (int i = 0; i < count; i++) {
|
|
|
- itemNo = formatYjDetailChargeDetail(mzChargeDetail, mzChargeDetails, maxOrderNo, mzPatientMi, itemNo, mzYjReqMap, jcJyItemCharge, tcNoMap, priceId, priceTime, receiptNo, jcHalfFareMap);
|
|
|
+ itemNo = formatYjDetailChargeDetail(mzChargeDetail, mzChargeDetails, maxOrderNo, mzPatientMi, itemNo, mzYjReqMap, jcJyItemCharge, tcNoMap, priceId, priceTime, receiptNo, zdChargeItemMap);
|
|
|
}
|
|
|
}
|
|
|
- Map<String, Object> zdChargeItemMap = jcHalfFareMap.get("zdChargeItemMap");
|
|
|
- //划价 1、数字化摄影(DR) 曝光次数同一时间最高不超过4次(160元); 其他是第二部位打折,折扣率在字典里维护
|
|
|
- //DR曝光次数
|
|
|
- int drCount = 0;
|
|
|
- for (String key : jcHalfFareMap.keySet()) {
|
|
|
- if (key.equals("zdChargeItemMap")) {
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //計算第二部位和DR费用
|
|
|
+ setSecondPartAndDrFeeForCharge(mzChargeDetails, mzYjReqMap, tcNoMap, reqAmountMap, zdChargeItemMap);
|
|
|
+ //预览的时候获取费用明细,需要打折,不是预览而是入库的时候不打折,因为入库后会有一次重新计算
|
|
|
+ formatPriceRoundDetail(mzChargeDetail, mzChargeDetails, mzPatientMi, mzChargeDetailList, maxOrderNo, itemNo, receiptNo, YesNoEnum.YES.equals(yesNo) ? true : false);
|
|
|
+ //yes 预览需要将原数据库中已存在的明细与临时生成的一起返回
|
|
|
+ if (YesNoEnum.YES.equals(yesNo)) {
|
|
|
+ for (MzChargeDetail mcd : mzChargeDetailList) {
|
|
|
+ mcd.setReceiptNo(receiptNo);
|
|
|
+ mzChargeDetails.add(mcd);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ //判断新生产的服务项是否已经入库了,如果存在相同的组合键,则重新生成iemNo
|
|
|
+ Set<String> tempSet = new HashSet<>();
|
|
|
+ StringBuffer sbf = new StringBuffer();
|
|
|
+ for (MzChargeDetail mz : mzChargeDetailList) {
|
|
|
+ sbf.append(mz.getPatientId()).append("_").append(mz.getTimes()).append("_").append(receiptNo).append("_").append(mz.getOrderNo()).append("_").append(mz.getItemNo()).append("_").append(mz.getChargeItemCode());
|
|
|
+ tempSet.add(sbf.toString());
|
|
|
+ sbf.setLength(0);
|
|
|
+ }
|
|
|
+ for (MzChargeDetail mz : mzChargeDetails) {
|
|
|
+ sbf.append(mz.getPatientId()).append("_").append(mz.getTimes()).append("_").append(receiptNo).append("_").append(mz.getOrderNo()).append("_").append(mz.getItemNo()).append("_").append(mz.getChargeItemCode());
|
|
|
+ if (tempSet.contains(sbf.toString())) {
|
|
|
+ mz.setItemNo(itemNo++);
|
|
|
+ }
|
|
|
+ sbf.setLength(0);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return mzChargeDetails;
|
|
|
+ }
|
|
|
+
|
|
|
+ //缴费或者计算金额时设置第二部位半价或者DR费用
|
|
|
+ private void setSecondPartAndDrFeeForCharge(List<MzChargeDetail> mzChargeDetails, Map<String, MzYjReq> mzYjReqMap, Map<String, MzChargeDetail> tcNoMap, Map<String, BigDecimal> reqAmountMap, Map<String, Object> zdChargeItemMap) {
|
|
|
+ //将tc编码与门诊编码转换
|
|
|
+ Map<String, String> orderCodeToBillCodeMap = null;
|
|
|
+ if (tcNoMap.size() > 0) {
|
|
|
+ orderCodeToBillCodeMap = new HashMap<>();
|
|
|
+ for (String key : tcNoMap.keySet()) {
|
|
|
+ MzYjReq tcMzYjReq = mzYjReqMap.get(key);
|
|
|
+ if (tcMzYjReq == null || ReqTypeEnum.JIAN_YAN.code.equals(tcMzYjReq.getReqType())) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ MzChargeDetail tcMzChargeDetail = tcNoMap.get(key);
|
|
|
+ orderCodeToBillCodeMap.put(tcMzChargeDetail.getChargeItemCode(), key);
|
|
|
+ }
|
|
|
+ Set<String> tcNoSet = orderCodeToBillCodeMap.keySet();
|
|
|
+ Map<String, List<MzChargeDetail>> jcMzChargeDetailMap = new HashMap<>();
|
|
|
+ Map<String, Map<String, Object>> jcHalfFareMap = new HashMap<>();
|
|
|
+ for (MzChargeDetail fmd : mzChargeDetails) {
|
|
|
+ if (StringUtils.isBlank(fmd.getTcNo()) || !tcNoSet.contains(fmd.getTcNo())) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ String tcNo = orderCodeToBillCodeMap.get(fmd.getTcNo());
|
|
|
+ List<MzChargeDetail> tempList = jcMzChargeDetailMap.get(tcNo);
|
|
|
+ if (tempList == null) {
|
|
|
+ tempList = new ArrayList<>();
|
|
|
+ jcMzChargeDetailMap.put(tcNo, tempList);
|
|
|
+ JcZdItem jcZdItem = jcZdItemMapper.selectJcZdItemByCode(tcNo);
|
|
|
+ if (jcZdItem == null) {
|
|
|
continue;
|
|
|
}
|
|
|
- Map<String, Object> tempMap = jcHalfFareMap.get(key);
|
|
|
- if (tempMap == null) {
|
|
|
+ //ZdChargeItem zdChargeItem = (ZdChargeItem) zdChargeItemMap.get(fmd.getChargeItemCode());
|
|
|
+ String auditCode = jcZdItem.getClassCode();
|
|
|
+ if (auditCode == null || StringUtils.isBlank(auditCode)) {
|
|
|
continue;
|
|
|
}
|
|
|
- List<MzChargeDetail> tempList = (List<MzChargeDetail>) tempMap.get("second");
|
|
|
- if (tempList == null || tempList.size() == 0) {
|
|
|
- continue;
|
|
|
+ Map<String, Object> tempMap = jcHalfFareMap.get(auditCode);
|
|
|
+ if (tempMap == null) {
|
|
|
+ tempMap = new HashMap<>();
|
|
|
+ jcHalfFareMap.put(auditCode, tempMap);
|
|
|
+ }
|
|
|
+ List<MzChargeDetail> first = (List<MzChargeDetail>) tempMap.get("first");
|
|
|
+ BigDecimal currentReqAmount = reqAmountMap.get(tcNo);
|
|
|
+ if (first == null) {
|
|
|
+ first = tempList;
|
|
|
+ tempMap.put("first", first);
|
|
|
+ tempMap.put("firstReqAmount", currentReqAmount);
|
|
|
+ } else {
|
|
|
+ List<List<MzChargeDetail>> second = (List<List<MzChargeDetail>>) tempMap.get("second");
|
|
|
+ if (second == null) {
|
|
|
+ second = new ArrayList<>();
|
|
|
+ tempMap.put("second", second);
|
|
|
+ }
|
|
|
+ BigDecimal firstReqAmount = (BigDecimal) tempMap.get("firstReqAmount");
|
|
|
+ if (firstReqAmount.compareTo(currentReqAmount) == -1) {
|
|
|
+ second.add(first);
|
|
|
+ tempMap.put("first", tempList);
|
|
|
+ tempMap.put("firstReqAmount", currentReqAmount);
|
|
|
+ } else {
|
|
|
+ second.add(tempList);
|
|
|
+ }
|
|
|
}
|
|
|
- if (Constants.AUDIT_ITEM_DR.equals(key)) {
|
|
|
- MzChargeDetail first = (MzChargeDetail) tempMap.get("first");
|
|
|
- drCount += first.getQuantity().intValue();
|
|
|
- if (drCount > 4) {
|
|
|
+ }
|
|
|
+ tempList.add(fmd);
|
|
|
+ }
|
|
|
+ //划价 1、数字化摄影(DR) 曝光次数同一时间最高不超过4次(160元); 其他是第二部位打折,折扣率在字典里维护
|
|
|
+ //DR曝光次数
|
|
|
+ int drCount = 0;
|
|
|
+ for (String key : jcHalfFareMap.keySet()) {
|
|
|
+ Map<String, Object> tempMap = jcHalfFareMap.get(key);
|
|
|
+ if (tempMap == null) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ List<List<MzChargeDetail>> tempList = (List<List<MzChargeDetail>>) tempMap.get("second");
|
|
|
+ if (Constants.MZ_AUDIT_ITEM_DR.equals(key)) {
|
|
|
+ List<MzChargeDetail> first = (List<MzChargeDetail>) tempMap.get("first");
|
|
|
+ for (int i = 0; i < first.size(); i++) {
|
|
|
+ MzChargeDetail tempMzChargeDetail = first.get(i);
|
|
|
+ ZdChargeItem zdChargeItem = (ZdChargeItem) zdChargeItemMap.get(tempMzChargeDetail.getChargeItemCode());
|
|
|
+ if (!Constants.AUDIT_ITEM_DR.equals(zdChargeItem.getAuditCode())) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if (drCount >= 4) {
|
|
|
//曝光次数同一时间最高不超过4次
|
|
|
- first.setQuantity(4D);
|
|
|
+ //tempMzChargeDetail.setUnitPrice(BigDecimal.ZERO);
|
|
|
+ tempMzChargeDetail.setQuantity(0D);
|
|
|
+ } else {
|
|
|
+ if (Double.valueOf(1).equals(tempMzChargeDetail.getQuantity())) {
|
|
|
+ drCount++;
|
|
|
+ } else if (tempMzChargeDetail.getQuantity().intValue() > 1) {
|
|
|
+ if (drCount + tempMzChargeDetail.getQuantity().intValue() > 4) {
|
|
|
+ tempMzChargeDetail.setQuantity(Double.valueOf(4 - drCount));
|
|
|
+ drCount = 4;
|
|
|
+ } else {
|
|
|
+ drCount += tempMzChargeDetail.getQuantity();
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
- for (int i = 0; i < tempList.size(); i++) {
|
|
|
- MzChargeDetail tempMzChargeDetail = tempList.get(i);
|
|
|
+ }
|
|
|
+ if (tempList == null || tempList.size() == 0) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ for (int j = 0; j < tempList.size(); j++) {
|
|
|
+ List<MzChargeDetail> secondTempMzChargeDetailList = tempList.get(j);
|
|
|
+ for (int i = 0; i < secondTempMzChargeDetailList.size(); i++) {
|
|
|
+ MzChargeDetail tempMzChargeDetail = secondTempMzChargeDetailList.get(i);
|
|
|
+ ZdChargeItem zdChargeItem = (ZdChargeItem) zdChargeItemMap.get(tempMzChargeDetail.getChargeItemCode());
|
|
|
+ if (!Constants.AUDIT_ITEM_DR.equals(zdChargeItem.getAuditCode())) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
if (drCount >= 4) {
|
|
|
//曝光次数同一时间最高不超过4次
|
|
|
//tempMzChargeDetail.setUnitPrice(BigDecimal.ZERO);
|
|
@@ -425,10 +557,16 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- } else {
|
|
|
- //替换收费项目
|
|
|
- for (int i = 0; i < tempList.size(); i++) {
|
|
|
- MzChargeDetail tempMzChargeDetail = tempList.get(i);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ if (tempList == null || tempList.size() == 0) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ //替换收费项目
|
|
|
+ for (int j = 0; j < tempList.size(); j++) {
|
|
|
+ List<MzChargeDetail> secondTempMzChargeDetailList = tempList.get(j);
|
|
|
+ for (int i = 0; i < secondTempMzChargeDetailList.size(); i++) {
|
|
|
+ MzChargeDetail tempMzChargeDetail = secondTempMzChargeDetailList.get(i);
|
|
|
ZdChargeItem zdChargeItem = (ZdChargeItem) zdChargeItemMap.get(tempMzChargeDetail.getChargeItemCode());
|
|
|
BigDecimal percentag2 = BigDecimal.ONE;
|
|
|
if (zdChargeItem != null && zdChargeItem.getPercentag2() != null) {
|
|
@@ -440,32 +578,6 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- //预览的时候获取费用明细,需要打折,不是预览而是入库的时候不打折,因为入库后会有一次重新计算
|
|
|
- formatPriceRoundDetail(mzChargeDetail, mzChargeDetails, mzPatientMi, mzChargeDetailList, maxOrderNo, itemNo, receiptNo, YesNoEnum.YES.equals(yesNo) ? true : false);
|
|
|
- //yes 预览需要将原数据库中已存在的明细与临时生成的一起返回
|
|
|
- if (YesNoEnum.YES.equals(yesNo)) {
|
|
|
- for (MzChargeDetail mcd : mzChargeDetailList) {
|
|
|
- mcd.setReceiptNo(receiptNo);
|
|
|
- mzChargeDetails.add(mcd);
|
|
|
- }
|
|
|
- } else {
|
|
|
- //判断新生产的服务项是否已经入库了,如果存在相同的组合键,则重新生成iemNo
|
|
|
- Set<String> tempSet = new HashSet<>();
|
|
|
- StringBuffer sbf = new StringBuffer();
|
|
|
- for (MzChargeDetail mz : mzChargeDetailList) {
|
|
|
- sbf.append(mz.getPatientId()).append("_").append(mz.getTimes()).append("_").append(receiptNo).append("_").append(mz.getOrderNo()).append("_").append(mz.getItemNo()).append("_").append(mz.getChargeItemCode());
|
|
|
- tempSet.add(sbf.toString());
|
|
|
- sbf.setLength(0);
|
|
|
- }
|
|
|
- for (MzChargeDetail mz : mzChargeDetails) {
|
|
|
- sbf.append(mz.getPatientId()).append("_").append(mz.getTimes()).append("_").append(receiptNo).append("_").append(mz.getOrderNo()).append("_").append(mz.getItemNo()).append("_").append(mz.getChargeItemCode());
|
|
|
- if (tempSet.contains(sbf.toString())) {
|
|
|
- mz.setItemNo(itemNo++);
|
|
|
- }
|
|
|
- sbf.setLength(0);
|
|
|
- }
|
|
|
- }
|
|
|
- return mzChargeDetails;
|
|
|
}
|
|
|
|
|
|
private void countSameYjCode(List<String> jianChas, Map<String, Integer> jyjcCount) {
|
|
@@ -995,8 +1107,14 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
|
|
|
Map<String, Object> yjMap = new HashMap<>();
|
|
|
yjMap.put("amount", BigDecimal.ZERO);
|
|
|
List<String> detail = new ArrayList<>();
|
|
|
- Map<String, Object> jcHalfFareMap = new HashMap<>();
|
|
|
- List<ZdChargeItem> fullZdChargeItemList = new ArrayList<>();
|
|
|
+ Map<String, Object> jcHalfFareMap = null;
|
|
|
+ //List<Map<String, List<ZdChargeItem>>> fullZdChargeItemList = new ArrayList<>();
|
|
|
+ //医技医嘱码对应的处方明细
|
|
|
+ Map<String, List<ZdChargeItem>> reqMap = null;
|
|
|
+ //医技申请码对应的处方总金额
|
|
|
+ Map<String, BigDecimal> reqAmountMap = null;
|
|
|
+ //医技申请码与医技申请的关系
|
|
|
+ Map<String, MzYjReq> mzYjReqMap = null;
|
|
|
for (int i = 0; i < mzPrescriptionVo.getMzYjReqList().size(); i++) {
|
|
|
MzYjReq mzYjReq = mzPrescriptionVo.getMzYjReqList().get(i);
|
|
|
int index = i + 1;
|
|
@@ -1011,140 +1129,34 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
|
|
|
emrFzjc += "," + name;
|
|
|
}
|
|
|
if (YesNoEnum.YES.equals(savePrescription)) {
|
|
|
- List<ZdChargeItem> zdChargeItemList = null;
|
|
|
- zdChargeItemList = jcJyItemChargeService.queryJcJyItemChargeByCode(mzYjReq.getOrderCode());
|
|
|
- if (zdChargeItemList != null && zdChargeItemList.size() > 0) {
|
|
|
- fullZdChargeItemList.addAll(zdChargeItemList);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- BigDecimal totalAmount = BigDecimal.ZERO;
|
|
|
- if (fullZdChargeItemList.size() > 0) {
|
|
|
- List<ZdChargeItem> otherList = new ArrayList<>();
|
|
|
- for (ZdChargeItem zd : fullZdChargeItemList) {
|
|
|
- if (zd.getChargeAmount() == null) {
|
|
|
- zd.setChargeAmount(BigDecimal.ZERO);
|
|
|
+ if (jcHalfFareMap == null) {
|
|
|
+ jcHalfFareMap = new HashMap<>();
|
|
|
}
|
|
|
- if (!Constants.JC_CLASS_CODE.equals(zd.getClassCode())) {
|
|
|
- otherList.add(zd);
|
|
|
- continue;
|
|
|
+ if (reqMap == null) {
|
|
|
+ reqMap = new HashMap<>();
|
|
|
}
|
|
|
- String auditCode = zd.getAuditCode();
|
|
|
- if (auditCode == null || StringUtils.isBlank(auditCode)) {
|
|
|
- otherList.add(zd);
|
|
|
- continue;
|
|
|
+ if (reqAmountMap == null) {
|
|
|
+ reqAmountMap = new HashMap<>();
|
|
|
}
|
|
|
- Map<String, Object> tempMap = (Map<String, Object>) jcHalfFareMap.get(auditCode);
|
|
|
- if (tempMap == null) {
|
|
|
- tempMap = new HashMap<>();
|
|
|
- jcHalfFareMap.put(auditCode, tempMap);
|
|
|
+ if (mzYjReqMap == null) {
|
|
|
+ mzYjReqMap = new HashMap<>();
|
|
|
}
|
|
|
- ZdChargeItem first = (ZdChargeItem) tempMap.get("first");
|
|
|
- if (first == null) {
|
|
|
- first = zd;
|
|
|
- tempMap.put("first", first);
|
|
|
- } else {
|
|
|
- List<ZdChargeItem> second = (List<ZdChargeItem>) tempMap.get("second");
|
|
|
- if (second == null) {
|
|
|
- second = new ArrayList<>();
|
|
|
- tempMap.put("second", second);
|
|
|
- }
|
|
|
- if (first.getChargeAmount().compareTo(zd.getChargeAmount()) == -1) {
|
|
|
- second.add(first);
|
|
|
- tempMap.put("first", zd);
|
|
|
- } else {
|
|
|
- second.add(zd);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- //划价 1、数字化摄影(DR) 曝光次数同一时间最高不超过4次(160元); 其他是第二部位打折,折扣率在字典里维护
|
|
|
- //DR曝光次数
|
|
|
- int drCount = 0;
|
|
|
- BigDecimal tempAmount;
|
|
|
- for (String key : jcHalfFareMap.keySet()) {
|
|
|
- Map<String, Object> tempMap = (Map<String, Object>) jcHalfFareMap.get(key);
|
|
|
- if (tempMap == null) {
|
|
|
- continue;
|
|
|
- }
|
|
|
- ZdChargeItem first = (ZdChargeItem) tempMap.get("first");
|
|
|
- if (first == null) {
|
|
|
- continue;
|
|
|
- }
|
|
|
- tempAmount = (first.getChargeAmount() == null ? BigDecimal.ZERO : first.getChargeAmount()).multiply(first.getNum() == null ? BigDecimal.ONE : first.getNum());
|
|
|
- //项目加价且加收比例不为空
|
|
|
- tempAmount = getRaisePrice(birthDay, tempAmount, first);
|
|
|
- totalAmount = totalAmount.add(tempAmount);
|
|
|
- if (Constants.AUDIT_ITEM_DR.equals(key)) {
|
|
|
- drCount = first.getNum().intValue();
|
|
|
- if (drCount > 4) {
|
|
|
- //曝光次数同一时间最高不超过4次
|
|
|
- first.setNum(BigDecimal.valueOf(4));
|
|
|
- }
|
|
|
- }
|
|
|
- List<ZdChargeItem> tempList = (List<ZdChargeItem>) tempMap.get("second");
|
|
|
- if (tempList == null || tempList.size() == 0) {
|
|
|
- continue;
|
|
|
- }
|
|
|
- if (Constants.AUDIT_ITEM_DR.equals(key)) {
|
|
|
- for (int i = 0; i < tempList.size(); i++) {
|
|
|
- ZdChargeItem tempZdChargeItem = tempList.get(i);
|
|
|
- if (drCount >= 4) {
|
|
|
- //曝光次数同一时间最高不超过4次
|
|
|
- //tempZdChargeItem.setTotalAmount(BigDecimal.ZERO);
|
|
|
- tempZdChargeItem.setNum(BigDecimal.ZERO);
|
|
|
- } else {
|
|
|
- if (tempZdChargeItem.getNum().intValue() == 1) {
|
|
|
- tempAmount = (tempZdChargeItem.getChargeAmount() == null ? BigDecimal.ZERO : tempZdChargeItem.getChargeAmount()).multiply(tempZdChargeItem.getNum() == null ? BigDecimal.ONE : tempZdChargeItem.getNum());
|
|
|
- tempAmount = getRaisePrice(birthDay, tempAmount, tempZdChargeItem);
|
|
|
- if (tempZdChargeItem.getPercentag2() != null) {
|
|
|
- tempAmount = tempAmount.multiply(tempZdChargeItem.getPercentag2());
|
|
|
- }
|
|
|
- totalAmount = totalAmount.add(tempAmount);
|
|
|
- drCount++;
|
|
|
- } else if (tempZdChargeItem.getNum().intValue() > 1) {
|
|
|
- if (drCount + tempZdChargeItem.getNum().intValue() > 4) {
|
|
|
- tempZdChargeItem.setNum(BigDecimal.valueOf(4 - drCount));
|
|
|
- tempAmount = (tempZdChargeItem.getChargeAmount() == null ? BigDecimal.ZERO : tempZdChargeItem.getChargeAmount()).multiply(tempZdChargeItem.getNum() == null ? BigDecimal.ONE : tempZdChargeItem.getNum());
|
|
|
- tempAmount = getRaisePrice(birthDay, tempAmount, tempZdChargeItem);
|
|
|
- if (tempZdChargeItem.getPercentag2() != null) {
|
|
|
- tempAmount = tempAmount.multiply(tempZdChargeItem.getPercentag2());
|
|
|
- }
|
|
|
- totalAmount = totalAmount.add(tempAmount);
|
|
|
- drCount = 4;
|
|
|
- } else {
|
|
|
- drCount += tempZdChargeItem.getNum().intValue();
|
|
|
- tempAmount = (tempZdChargeItem.getChargeAmount() == null ? BigDecimal.ZERO : tempZdChargeItem.getChargeAmount()).multiply(tempZdChargeItem.getNum() == null ? BigDecimal.ONE : tempZdChargeItem.getNum());
|
|
|
- tempAmount = getRaisePrice(birthDay, tempAmount, tempZdChargeItem);
|
|
|
- if (tempZdChargeItem.getPercentag2() != null) {
|
|
|
- tempAmount = tempAmount.multiply(tempZdChargeItem.getPercentag2());
|
|
|
- }
|
|
|
- totalAmount = totalAmount.add(tempAmount);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- } else {
|
|
|
- for (int i = 0; i < tempList.size(); i++) {
|
|
|
- ZdChargeItem tempZdChargeItem = tempList.get(i);
|
|
|
- tempAmount = (tempZdChargeItem.getChargeAmount() == null ? BigDecimal.ZERO : tempZdChargeItem.getChargeAmount()).multiply(tempZdChargeItem.getNum() == null ? BigDecimal.ONE : tempZdChargeItem.getNum());
|
|
|
- tempAmount = getRaisePrice(birthDay, tempAmount, tempZdChargeItem);
|
|
|
- if (tempZdChargeItem.getPercentag2() != null) {
|
|
|
- tempAmount = tempAmount.multiply(tempZdChargeItem.getPercentag2());
|
|
|
- }
|
|
|
- totalAmount = totalAmount.add(tempAmount);
|
|
|
+ Integer reqType = Integer.valueOf(mzYjReq.getReqType());
|
|
|
+ List<ZdChargeItem> zdChargeItemList = jcJyItemChargeService.queryJcJyItemChargeByCode(mzYjReq.getOrderCode(), reqType - 1);
|
|
|
+ if (zdChargeItemList != null && zdChargeItemList.size() > 0) {
|
|
|
+ reqMap.put(mzYjReq.getOrderCode(), zdChargeItemList);
|
|
|
+ BigDecimal amount = BigDecimal.ZERO;
|
|
|
+ for (ZdChargeItem zd : zdChargeItemList) {
|
|
|
+ amount = amount.add(zd.getChargeAmount());
|
|
|
}
|
|
|
+ reqAmountMap.put(mzYjReq.getOrderCode(), amount);
|
|
|
+ mzYjReqMap.put(mzYjReq.getOrderCode(), mzYjReq);
|
|
|
+ //fullZdChargeItemList.add(reqMap);
|
|
|
}
|
|
|
}
|
|
|
- if (otherList.size() > 0) {
|
|
|
- for (ZdChargeItem zd : otherList) {
|
|
|
- tempAmount = (zd.getChargeAmount() == null ? BigDecimal.ZERO : zd.getChargeAmount()).multiply(zd.getNum() == null ? BigDecimal.ONE : zd.getNum());
|
|
|
- //项目加价且加收比例不为空
|
|
|
- tempAmount = getRaisePrice(birthDay, tempAmount, zd);
|
|
|
- totalAmount = totalAmount.add(tempAmount);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
}
|
|
|
+ BigDecimal totalAmount = BigDecimal.ZERO;
|
|
|
+ totalAmount = setSecondPartAndDrFeeForSavePrescription(birthDay, jcHalfFareMap, reqMap, reqAmountMap, totalAmount, mzYjReqMap);
|
|
|
BigDecimal amount = (BigDecimal) yjMap.get("amount");
|
|
|
amount = amount.add(totalAmount);
|
|
|
yjMap.put("amount", amount);
|
|
@@ -1388,6 +1400,199 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
|
|
|
mzPrescriptionVo.getMzBlRecord().setEmrProcess(sbd.toString());
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 构造处方或者保存处方时设置第二部位半价或者DR费用
|
|
|
+ *
|
|
|
+ * @param birthDay
|
|
|
+ * @param jcHalfFareMap
|
|
|
+ * @param reqMap
|
|
|
+ * @param reqAmountMap
|
|
|
+ * @param totalAmount
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private BigDecimal setSecondPartAndDrFeeForSavePrescription(Date birthDay, Map<String, Object> jcHalfFareMap, Map<String, List<ZdChargeItem>> reqMap, Map<String, BigDecimal> reqAmountMap, BigDecimal totalAmount, Map<String, MzYjReq> mzYjReqMap) {
|
|
|
+ if (reqMap != null && reqMap.size() > 0) {
|
|
|
+ List<ZdChargeItem> otherList = new ArrayList<>();
|
|
|
+ for (String key : reqMap.keySet()) {
|
|
|
+ List<ZdChargeItem> zdChargeItemList = reqMap.get(key);
|
|
|
+ if (zdChargeItemList == null || zdChargeItemList.size() == 0) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ JcZdItem jcZdItem = jcZdItemMapper.selectJcZdItemByCode(key);
|
|
|
+ for (ZdChargeItem zd : zdChargeItemList) {
|
|
|
+ if (jcZdItem == null) {
|
|
|
+ otherList.add(zd);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if (zd.getChargeAmount() == null) {
|
|
|
+ zd.setChargeAmount(BigDecimal.ZERO);
|
|
|
+ }
|
|
|
+// if (!Constants.JC_CLASS_CODE.equals(zd.getClassCode())) {
|
|
|
+// //otherList.add(zd);
|
|
|
+// continue;
|
|
|
+// }
|
|
|
+// //String auditCode = zd.getAuditCode();
|
|
|
+// if (zd.getAuditCode() == null || StringUtils.isBlank(zd.getAuditCode())) {
|
|
|
+// //otherList.add(zd);
|
|
|
+// continue;
|
|
|
+// }
|
|
|
+ }
|
|
|
+ MzYjReq mzYjReq = mzYjReqMap.get(key);
|
|
|
+ //当临时项目编码是检查时
|
|
|
+ if (ReqTypeEnum.JIAN_CHA.code.equals(mzYjReq.getReqType())) {
|
|
|
+ String auditCode = jcZdItem.getClassCode();
|
|
|
+ Map<String, Object> tempMap = (Map<String, Object>) jcHalfFareMap.get(auditCode);
|
|
|
+ if (tempMap == null) {
|
|
|
+ tempMap = new HashMap<>();
|
|
|
+ jcHalfFareMap.put(auditCode, tempMap);
|
|
|
+ }
|
|
|
+ String first = (String) tempMap.get("first");
|
|
|
+ if (first == null) {
|
|
|
+ first = key;
|
|
|
+ tempMap.put("first", first);
|
|
|
+ } else {
|
|
|
+ List<String> second = (List<String>) tempMap.get("second");
|
|
|
+ if (second == null) {
|
|
|
+ second = new ArrayList<>();
|
|
|
+ tempMap.put("second", second);
|
|
|
+ }
|
|
|
+ if (reqAmountMap.get(first).compareTo(reqAmountMap.get(key)) == -1) {
|
|
|
+ second.add(first);
|
|
|
+ tempMap.put("first", key);
|
|
|
+ } else {
|
|
|
+ second.add(key);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //划价 1、数字化摄影(DR) 曝光次数同一时间最高不超过4次(160元); 其他是第二部位打折,折扣率在字典里维护
|
|
|
+ //DR曝光次数
|
|
|
+ int drCount = 0;
|
|
|
+ BigDecimal tempAmount;
|
|
|
+ for (String key : jcHalfFareMap.keySet()) {
|
|
|
+ Map<String, Object> tempMap = (Map<String, Object>) jcHalfFareMap.get(key);
|
|
|
+ if (tempMap == null) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ String first = (String) tempMap.get("first");
|
|
|
+ if (first == null) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ List<ZdChargeItem> firstZdChargeItems = reqMap.get(first);
|
|
|
+ if (firstZdChargeItems == null || firstZdChargeItems.size() == 0) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ for (int i = 0; i < firstZdChargeItems.size(); i++) {
|
|
|
+ ZdChargeItem tempZdChargeItem = firstZdChargeItems.get(i);
|
|
|
+ if (Constants.MZ_AUDIT_ITEM_DR.equals(key) && Constants.AUDIT_ITEM_DR.equals(tempZdChargeItem.getAuditCode())) {
|
|
|
+ if (drCount >= 4) {
|
|
|
+ //曝光次数同一时间最高不超过4次
|
|
|
+ tempZdChargeItem.setNum(BigDecimal.ZERO);
|
|
|
+ } else {
|
|
|
+ if (tempZdChargeItem.getNum().intValue() == 1) {
|
|
|
+ tempAmount = (tempZdChargeItem.getChargeAmount() == null ? BigDecimal.ZERO : tempZdChargeItem.getChargeAmount()).multiply(tempZdChargeItem.getNum() == null ? BigDecimal.ONE : tempZdChargeItem.getNum());
|
|
|
+ tempAmount = getRaisePrice(birthDay, tempAmount, tempZdChargeItem);
|
|
|
+ if (tempZdChargeItem.getPercentag2() != null) {
|
|
|
+ tempAmount = tempAmount.multiply(tempZdChargeItem.getPercentag2());
|
|
|
+ }
|
|
|
+ totalAmount = totalAmount.add(tempAmount);
|
|
|
+ drCount++;
|
|
|
+ } else if (tempZdChargeItem.getNum().intValue() > 1) {
|
|
|
+ if (drCount + tempZdChargeItem.getNum().intValue() > 4) {
|
|
|
+ tempZdChargeItem.setNum(BigDecimal.valueOf(4 - drCount));
|
|
|
+ tempAmount = (tempZdChargeItem.getChargeAmount() == null ? BigDecimal.ZERO : tempZdChargeItem.getChargeAmount()).multiply(tempZdChargeItem.getNum() == null ? BigDecimal.ONE : tempZdChargeItem.getNum());
|
|
|
+ tempAmount = getRaisePrice(birthDay, tempAmount, tempZdChargeItem);
|
|
|
+ if (tempZdChargeItem.getPercentag2() != null) {
|
|
|
+ tempAmount = tempAmount.multiply(tempZdChargeItem.getPercentag2());
|
|
|
+ }
|
|
|
+ totalAmount = totalAmount.add(tempAmount);
|
|
|
+ drCount = 4;
|
|
|
+ } else {
|
|
|
+ drCount += tempZdChargeItem.getNum().intValue();
|
|
|
+ tempAmount = (tempZdChargeItem.getChargeAmount() == null ? BigDecimal.ZERO : tempZdChargeItem.getChargeAmount()).multiply(tempZdChargeItem.getNum() == null ? BigDecimal.ONE : tempZdChargeItem.getNum());
|
|
|
+ tempAmount = getRaisePrice(birthDay, tempAmount, tempZdChargeItem);
|
|
|
+ if (tempZdChargeItem.getPercentag2() != null) {
|
|
|
+ tempAmount = tempAmount.multiply(tempZdChargeItem.getPercentag2());
|
|
|
+ }
|
|
|
+ totalAmount = totalAmount.add(tempAmount);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ tempAmount = (tempZdChargeItem.getChargeAmount() == null ? BigDecimal.ZERO : tempZdChargeItem.getChargeAmount()).multiply(tempZdChargeItem.getNum() == null ? BigDecimal.ONE : tempZdChargeItem.getNum());
|
|
|
+ tempAmount = getRaisePrice(birthDay, tempAmount, tempZdChargeItem);
|
|
|
+ totalAmount = totalAmount.add(tempAmount);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ List<String> secondList = (List<String>) tempMap.get("second");
|
|
|
+ if (secondList == null || secondList.size() == 0) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ for (String secondOrderCode : secondList) {
|
|
|
+ List<ZdChargeItem> tempList = reqMap.get(secondOrderCode);
|
|
|
+ if (tempList == null || tempList.size() == 0) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ for (int i = 0; i < tempList.size(); i++) {
|
|
|
+ ZdChargeItem tempZdChargeItem = tempList.get(i);
|
|
|
+ if (Constants.MZ_AUDIT_ITEM_DR.equals(key) && Constants.AUDIT_ITEM_DR.equals(tempZdChargeItem.getAuditCode())) {
|
|
|
+ if (drCount >= 4) {
|
|
|
+ //曝光次数同一时间最高不超过4次
|
|
|
+ tempZdChargeItem.setNum(BigDecimal.ZERO);
|
|
|
+ } else {
|
|
|
+ if (tempZdChargeItem.getNum().intValue() == 1) {
|
|
|
+ tempAmount = (tempZdChargeItem.getChargeAmount() == null ? BigDecimal.ZERO : tempZdChargeItem.getChargeAmount()).multiply(tempZdChargeItem.getNum() == null ? BigDecimal.ONE : tempZdChargeItem.getNum());
|
|
|
+ tempAmount = getRaisePrice(birthDay, tempAmount, tempZdChargeItem);
|
|
|
+ if (tempZdChargeItem.getPercentag2() != null) {
|
|
|
+ tempAmount = tempAmount.multiply(tempZdChargeItem.getPercentag2());
|
|
|
+ }
|
|
|
+ totalAmount = totalAmount.add(tempAmount);
|
|
|
+ drCount++;
|
|
|
+ } else if (tempZdChargeItem.getNum().intValue() > 1) {
|
|
|
+ if (drCount + tempZdChargeItem.getNum().intValue() > 4) {
|
|
|
+ tempZdChargeItem.setNum(BigDecimal.valueOf(4 - drCount));
|
|
|
+ tempAmount = (tempZdChargeItem.getChargeAmount() == null ? BigDecimal.ZERO : tempZdChargeItem.getChargeAmount()).multiply(tempZdChargeItem.getNum() == null ? BigDecimal.ONE : tempZdChargeItem.getNum());
|
|
|
+ tempAmount = getRaisePrice(birthDay, tempAmount, tempZdChargeItem);
|
|
|
+ if (tempZdChargeItem.getPercentag2() != null) {
|
|
|
+ tempAmount = tempAmount.multiply(tempZdChargeItem.getPercentag2());
|
|
|
+ }
|
|
|
+ totalAmount = totalAmount.add(tempAmount);
|
|
|
+ drCount = 4;
|
|
|
+ } else {
|
|
|
+ drCount += tempZdChargeItem.getNum().intValue();
|
|
|
+ tempAmount = (tempZdChargeItem.getChargeAmount() == null ? BigDecimal.ZERO : tempZdChargeItem.getChargeAmount()).multiply(tempZdChargeItem.getNum() == null ? BigDecimal.ONE : tempZdChargeItem.getNum());
|
|
|
+ tempAmount = getRaisePrice(birthDay, tempAmount, tempZdChargeItem);
|
|
|
+ if (tempZdChargeItem.getPercentag2() != null) {
|
|
|
+ tempAmount = tempAmount.multiply(tempZdChargeItem.getPercentag2());
|
|
|
+ }
|
|
|
+ totalAmount = totalAmount.add(tempAmount);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ tempAmount = (tempZdChargeItem.getChargeAmount() == null ? BigDecimal.ZERO : tempZdChargeItem.getChargeAmount()).multiply(tempZdChargeItem.getNum() == null ? BigDecimal.ONE : tempZdChargeItem.getNum());
|
|
|
+ tempAmount = getRaisePrice(birthDay, tempAmount, tempZdChargeItem);
|
|
|
+ if (tempZdChargeItem.getPercentag2() != null) {
|
|
|
+ tempAmount = tempAmount.multiply(tempZdChargeItem.getPercentag2());
|
|
|
+ }
|
|
|
+ totalAmount = totalAmount.add(tempAmount);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (otherList.size() > 0) {
|
|
|
+ for (ZdChargeItem zd : otherList) {
|
|
|
+ tempAmount = (zd.getChargeAmount() == null ? BigDecimal.ZERO : zd.getChargeAmount()).multiply(zd.getNum() == null ? BigDecimal.ONE : zd.getNum());
|
|
|
+ //项目加价且加收比例不为空
|
|
|
+ tempAmount = getRaisePrice(birthDay, tempAmount, zd);
|
|
|
+ totalAmount = totalAmount.add(tempAmount);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ return totalAmount;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 儿童加收
|
|
|
*
|
|
@@ -1520,7 +1725,7 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
|
|
|
mzYjReq.setOrderName(jcZdItem.getName());
|
|
|
mzYjReq.setGroupName(jcZdItem.getName());
|
|
|
mzYjReq.setReqType(ReqTypeEnum.JIAN_CHA.code);
|
|
|
- if(StringUtils.isBlank(mzYjReq.getExecDept())){
|
|
|
+ if (StringUtils.isBlank(mzYjReq.getExecDept())) {
|
|
|
mzYjReq.setExecDept(jcZdItem.getExecUnit());
|
|
|
}
|
|
|
mzYjReq.setReqComment(mzPrescriptionVo.getMzBlRecord().getEmrChiefComplaint());
|
|
@@ -1533,7 +1738,7 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
|
|
|
mzYjReq.setOrderName(jyZdItem.getName());
|
|
|
mzYjReq.setGroupName(jyZdItem.getName());
|
|
|
mzYjReq.setReqType(ReqTypeEnum.JIAN_YAN.code);
|
|
|
- if(StringUtils.isBlank(mzYjReq.getExecDept())){
|
|
|
+ if (StringUtils.isBlank(mzYjReq.getExecDept())) {
|
|
|
mzYjReq.setExecDept(jyZdItem.getExecUnit());
|
|
|
}
|
|
|
}
|
|
@@ -1715,7 +1920,7 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
|
|
|
mzChargeDetail.setBillItemCode(zdChargeItem.getBillItemMz());
|
|
|
mzChargeDetail.setTcName(zdChargeItem.getName());
|
|
|
mzChargeDetail.setGroupNo(Constants.YJ_GROUP_NO);
|
|
|
- if(StringUtils.isBlank(mzChargeDetail.getExecDept())){
|
|
|
+ if (StringUtils.isBlank(mzChargeDetail.getExecDept())) {
|
|
|
mzChargeDetail.setExecDept(mzChargeDetail.getExecDept());
|
|
|
}
|
|
|
mzChargeDetail.setDrugWin(1);
|
|
@@ -2121,7 +2326,7 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public List<MzChargeDetail> queryMzPrescription(Integer printFlag,String groupNo) {
|
|
|
+ public List<MzChargeDetail> queryMzPrescription(Integer printFlag, String groupNo) {
|
|
|
return mzChargeDetailMapper.selectMzPrescription(printFlag, groupNo);
|
|
|
}
|
|
|
|
|
@@ -2207,8 +2412,8 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public Map<String, Object> printYjReq(String patientId, Integer times,String reqType) throws MzException {
|
|
|
- MzYjReq mzR=new MzYjReq(patientId, times);
|
|
|
+ public Map<String, Object> printYjReq(String patientId, Integer times, String reqType) throws MzException {
|
|
|
+ MzYjReq mzR = new MzYjReq(patientId, times);
|
|
|
mzR.setReqType(reqType);
|
|
|
List<MzYjReq> mzYjReqList = mzYjReqMapper.selectMzYjReqByTimesAndPayMark(mzR);
|
|
|
if (mzYjReqList == null || mzYjReqList.size() == 0) {
|
|
@@ -2478,7 +2683,7 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
|
|
|
times = 0;
|
|
|
if (count > 0) {
|
|
|
//PayInfo result=
|
|
|
- PayInfo result =tsmzService.retractFees(opId, mzChargeDetailYb.getPatientId(), mzChargeDetailYb.getTimes(), mzChargeDetailYb.getReceiptNo());
|
|
|
+ PayInfo result = tsmzService.retractFees(opId, mzChargeDetailYb.getPatientId(), mzChargeDetailYb.getTimes(), mzChargeDetailYb.getReceiptNo());
|
|
|
if (result == null || result.getCode() != 0) {
|
|
|
throw new MzException("退费失败,特门退费失败!");
|
|
|
}
|
|
@@ -2967,10 +3172,10 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
|
|
|
if (mzChargeDetails.size() == 0) {
|
|
|
return;
|
|
|
}
|
|
|
- for(MzChargeDetail mzChargeDetail:mzChargeDetails){
|
|
|
- if(StringUtils.isNotBlank(mzChargeDetail.getTcName()) && mzChargeDetail.getTcName().length()>14){
|
|
|
- mzChargeDetail.setTcName(mzChargeDetail.getTcName().substring(0,14));
|
|
|
- }else {
|
|
|
+ for (MzChargeDetail mzChargeDetail : mzChargeDetails) {
|
|
|
+ if (StringUtils.isNotBlank(mzChargeDetail.getTcName()) && mzChargeDetail.getTcName().length() > 14) {
|
|
|
+ mzChargeDetail.setTcName(mzChargeDetail.getTcName().substring(0, 14));
|
|
|
+ } else {
|
|
|
mzChargeDetail.setTcName(mzChargeDetail.getTcName());
|
|
|
}
|
|
|
}
|
|
@@ -3616,11 +3821,12 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
|
|
|
}
|
|
|
newMzChargeDetail.setItemNo(itemNo++);
|
|
|
newMzChargeDetail.setChargeItemCode(Constants.JM_CAI_XUE_CODE);
|
|
|
- if (zdChargeItem.getChargeAmount() == null || zdChargeItem.getPercentag1() == null) {
|
|
|
+ if (zdChargeItem.getChargeAmount() == null) {
|
|
|
newMzChargeDetail.setUnitPrice(BigDecimal.ZERO);
|
|
|
newMzChargeDetail.setOrigPrice(BigDecimal.ZERO);
|
|
|
} else {
|
|
|
- newMzChargeDetail.setUnitPrice(zdChargeItem.getChargeAmount().multiply(zdChargeItem.getPercentag1()));
|
|
|
+ //newMzChargeDetail.setUnitPrice(zdChargeItem.getChargeAmount().multiply(zdChargeItem.getPercentag1()));
|
|
|
+ newMzChargeDetail.setUnitPrice(zdChargeItem.getChargeAmount());
|
|
|
newMzChargeDetail.setBillItemCode(zdChargeItem.getBillItemMz());
|
|
|
newMzChargeDetail.setOrigPrice(zdChargeItem.getChargeAmount());
|
|
|
}
|
|
@@ -3699,11 +3905,12 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
|
|
|
}
|
|
|
newMzChargeDetail.setItemNo(itemNo++);
|
|
|
newMzChargeDetail.setChargeItemCode(jyZdTubeCharge.getChargeCode());
|
|
|
- if (zdChargeItem.getChargeAmount() == null || zdChargeItem.getPercentag1() == null) {
|
|
|
+ if (zdChargeItem.getChargeAmount() == null) {
|
|
|
newMzChargeDetail.setUnitPrice(BigDecimal.ZERO);
|
|
|
newMzChargeDetail.setOrigPrice(BigDecimal.ZERO);
|
|
|
} else {
|
|
|
- newMzChargeDetail.setUnitPrice(zdChargeItem.getChargeAmount().multiply(zdChargeItem.getPercentag1()));
|
|
|
+ //newMzChargeDetail.setUnitPrice(zdChargeItem.getChargeAmount().multiply(zdChargeItem.getPercentag1()));
|
|
|
+ newMzChargeDetail.setUnitPrice(zdChargeItem.getChargeAmount());
|
|
|
newMzChargeDetail.setBillItemCode(zdChargeItem.getBillItemMz());
|
|
|
newMzChargeDetail.setOrigPrice(zdChargeItem.getChargeAmount());
|
|
|
}
|
|
@@ -3727,10 +3934,10 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
|
|
|
newMzChargeDetail.setRealNo(0);
|
|
|
newMzChargeDetail.setYbbxFlag(YesNoEnum.NO.code.toString());
|
|
|
newMzChargeDetail.setTcNo(tcNoMap.get(jyZdItem.getCode()).getTcNo());
|
|
|
- String tcName=tcNoMap.get(jyZdItem.getCode()).getTcName();
|
|
|
- if(StringUtils.isNotBlank(tcName) && tcName.length()>14){
|
|
|
- newMzChargeDetail.setTcName(tcName.substring(0,14));
|
|
|
- }else {
|
|
|
+ String tcName = tcNoMap.get(jyZdItem.getCode()).getTcName();
|
|
|
+ if (StringUtils.isNotBlank(tcName) && tcName.length() > 14) {
|
|
|
+ newMzChargeDetail.setTcName(tcName.substring(0, 14));
|
|
|
+ } else {
|
|
|
newMzChargeDetail.setTcName(tcName);
|
|
|
}
|
|
|
newMzChargeDetail.setDetailFlag(YesNoEnum.NO.code.toString());
|
|
@@ -3815,10 +4022,10 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
|
|
|
newMzChargeDetail.setItemNo(itemNo++);
|
|
|
newMzChargeDetail.setChargeItemCode(zdChargeItem.getCode());
|
|
|
newMzChargeDetail.setBillItemCode(zdChargeItem.getBillItemMz());
|
|
|
- if (zdChargeItem.getChargeAmount() == null || zdChargeItem.getPercentag1() == null) {
|
|
|
+ if (zdChargeItem.getChargeAmount() == null) {
|
|
|
newMzChargeDetail.setUnitPrice(BigDecimal.ZERO);
|
|
|
} else {
|
|
|
- newMzChargeDetail.setUnitPrice(zdChargeItem.getChargeAmount().multiply(zdChargeItem.getPercentag1()));
|
|
|
+ newMzChargeDetail.setUnitPrice(zdChargeItem.getChargeAmount());
|
|
|
}
|
|
|
newMzChargeDetail.setExecDept(zdChargeItem.getExecUnit());
|
|
|
newMzChargeDetail.setReceiptNo(receiptNo);
|
|
@@ -3885,10 +4092,10 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
|
|
|
newMzChargeDetail.setItemNo(itemNo++);
|
|
|
newMzChargeDetail.setChargeItemCode(zdChargeItem.getCode());
|
|
|
newMzChargeDetail.setBillItemCode(zdChargeItem.getBillItemMz());
|
|
|
- if (zdChargeItem.getChargeAmount() == null || zdChargeItem.getPercentag1() == null) {
|
|
|
+ if (zdChargeItem.getChargeAmount() == null) {
|
|
|
newMzChargeDetail.setUnitPrice(BigDecimal.ZERO);
|
|
|
} else {
|
|
|
- newMzChargeDetail.setUnitPrice(zdChargeItem.getChargeAmount().multiply(zdChargeItem.getPercentag1()));
|
|
|
+ newMzChargeDetail.setUnitPrice(zdChargeItem.getChargeAmount());
|
|
|
}
|
|
|
newMzChargeDetail.setExecDept(zdChargeItem.getExecUnit());
|
|
|
newMzChargeDetail.setReceiptNo(receiptNo);
|
|
@@ -3950,10 +4157,10 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
|
|
|
newMzChargeDetail.setItemNo(itemNo++);
|
|
|
newMzChargeDetail.setChargeItemCode(zdChargeItem.getCode());
|
|
|
newMzChargeDetail.setBillItemCode(zdChargeItem.getBillItemMz());
|
|
|
- if (zdChargeItem.getChargeAmount() == null || zdChargeItem.getPercentag1() == null) {
|
|
|
+ if (zdChargeItem.getChargeAmount() == null) {
|
|
|
newMzChargeDetail.setUnitPrice(BigDecimal.ZERO);
|
|
|
} else {
|
|
|
- newMzChargeDetail.setUnitPrice(zdChargeItem.getChargeAmount().multiply(zdChargeItem.getPercentag1()));
|
|
|
+ newMzChargeDetail.setUnitPrice(zdChargeItem.getChargeAmount());
|
|
|
}
|
|
|
newMzChargeDetail.setExecDept(zdChargeItem.getExecUnit());
|
|
|
newMzChargeDetail.setReceiptNo(receiptNo);
|
|
@@ -4083,7 +4290,7 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
|
|
|
* @param jcJyItemCharge
|
|
|
* @return
|
|
|
*/
|
|
|
- private Integer formatYjDetailChargeDetail(MzChargeDetail mzChargeDetail, List<MzChargeDetail> mzChargeDetails, Integer maxOrderNo, MzPatientMi mzPatientMi, Integer itemNo, Map<String, MzYjReq> mzYjReqMap, JcJyItemCharge jcJyItemCharge, Map<String, MzChargeDetail> tcNoMap, String priceId, Date priceTime, Integer receiptNo, Map<String, Map<String, Object>> jcHalfFareMap) throws MzException {
|
|
|
+ private Integer formatYjDetailChargeDetail(MzChargeDetail mzChargeDetail, List<MzChargeDetail> mzChargeDetails, Integer maxOrderNo, MzPatientMi mzPatientMi, Integer itemNo, Map<String, MzYjReq> mzYjReqMap, JcJyItemCharge jcJyItemCharge, Map<String, MzChargeDetail> tcNoMap, String priceId, Date priceTime, Integer receiptNo, Map<String, Object> zdChargeItemMap) throws MzException {
|
|
|
MzYjReq mzYjReq = mzYjReqMap.get(jcJyItemCharge.getCode());
|
|
|
ZdChargeItem zdChargeItem = zdChargeItemService.queryZdChargeItemByCode(jcJyItemCharge.getChargeCode());
|
|
|
if (zdChargeItem == null) {
|
|
@@ -4109,10 +4316,10 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
|
|
|
BigDecimal quantity = jcJyItemCharge.getAmount() == null ? BigDecimal.ONE : jcJyItemCharge.getAmount();
|
|
|
quantity = quantity.multiply(mzYjReq.getPercentFt() == null ? BigDecimal.ONE : mzYjReq.getPercentFt());
|
|
|
newMzChargeDetail.setQuantity(quantity.doubleValue());
|
|
|
- if (zdChargeItem.getChargeAmount() == null || zdChargeItem.getPercentag1() == null) {
|
|
|
+ if (zdChargeItem.getChargeAmount() == null) {
|
|
|
newMzChargeDetail.setUnitPrice(BigDecimal.ZERO);
|
|
|
} else {
|
|
|
- newMzChargeDetail.setUnitPrice(zdChargeItem.getChargeAmount().multiply(zdChargeItem.getPercentag1()));
|
|
|
+ newMzChargeDetail.setUnitPrice(zdChargeItem.getChargeAmount());
|
|
|
}
|
|
|
newMzChargeDetail.setPayMark(PayMarkEnum.NO_CHARGE.code);
|
|
|
newMzChargeDetail.setSerial("");
|
|
@@ -4151,68 +4358,13 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
|
|
|
//是否需要加价
|
|
|
setUnitPrice(mzPatientMi, zdChargeItem, newMzChargeDetail);
|
|
|
mzChargeDetails.add(newMzChargeDetail);
|
|
|
- if (jcHalfFareMap(jcHalfFareMap, mzYjReq, zdChargeItem, newMzChargeDetail)) {
|
|
|
- return itemNo;
|
|
|
- }
|
|
|
+// if (jcHalfFareMap(jcHalfFareMap, mzYjReq, zdChargeItem, newMzChargeDetail)) {
|
|
|
+// return itemNo;
|
|
|
+// }
|
|
|
+ zdChargeItemMap.put(zdChargeItem.getCode(), zdChargeItem);
|
|
|
return itemNo;
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * 构建检查项目第二部位半价结构
|
|
|
- *
|
|
|
- * @param jcHalfFareMap
|
|
|
- * @param mzYjReq
|
|
|
- * @param zdChargeItem
|
|
|
- * @param newMzChargeDetail
|
|
|
- * @return
|
|
|
- */
|
|
|
- private boolean jcHalfFareMap(Map<String, Map<String, Object>> jcHalfFareMap, MzYjReq mzYjReq, ZdChargeItem zdChargeItem, MzChargeDetail newMzChargeDetail) {
|
|
|
- if (!"3".equals(mzYjReq.getReqType()) || jcHalfFareMap == null) {
|
|
|
- return true;
|
|
|
- }
|
|
|
- String auditCode = zdChargeItem.getAuditCode();
|
|
|
- if (auditCode == null || StringUtils.isBlank(auditCode)) {
|
|
|
- return true;
|
|
|
- }
|
|
|
- Map<String, Object> tempMap = jcHalfFareMap.get(auditCode);
|
|
|
- if (tempMap == null) {
|
|
|
- tempMap = new HashMap<>();
|
|
|
- jcHalfFareMap.put(auditCode, tempMap);
|
|
|
- }
|
|
|
- //项目明细编码和明细项目的map集合
|
|
|
- Map<String, Object> zdChargeItemMap = jcHalfFareMap.get("zdChargeItemMap");
|
|
|
- if (zdChargeItemMap == null) {
|
|
|
- zdChargeItemMap = new HashMap<>();
|
|
|
- jcHalfFareMap.put("zdChargeItemMap", zdChargeItemMap);
|
|
|
- }
|
|
|
-
|
|
|
- zdChargeItemMap.put(zdChargeItem.getCode(), zdChargeItem);
|
|
|
- MzChargeDetail first = (MzChargeDetail) tempMap.get("first");
|
|
|
- if (first == null) {
|
|
|
- first = newMzChargeDetail;
|
|
|
- tempMap.put("first", first);
|
|
|
- } else {
|
|
|
- List<MzChargeDetail> second = (List<MzChargeDetail>) tempMap.get("second");
|
|
|
- if (second == null) {
|
|
|
- second = new ArrayList<>();
|
|
|
- tempMap.put("second", second);
|
|
|
- }
|
|
|
- if (first.getUnitPrice().compareTo(newMzChargeDetail.getUnitPrice()) == -1) {
|
|
|
- ZdChargeItem firstZdChargeItem = (ZdChargeItem) zdChargeItemMap.get(first.getChargeItemCode());
|
|
|
- if (Constants.AUDIT_ITEM_DR.equals(firstZdChargeItem.getAuditCode()) || (firstZdChargeItem != null && firstZdChargeItem.getPercentag2().compareTo(BigDecimal.ONE) == -1)) {
|
|
|
- //当该项目时DR 或者( 当原第一部位的金额小于新的收费项目的,第一项目换成当前的项目,且当原第一项目的第二部位折扣率小于1的时候),才放进折扣队列,因为如果没有折扣的话,是不需要进行替换原项目的
|
|
|
- second.add(first);
|
|
|
- }
|
|
|
- tempMap.put("first", newMzChargeDetail);
|
|
|
- } else {
|
|
|
- if (Constants.AUDIT_ITEM_DR.equals(zdChargeItem.getAuditCode()) || zdChargeItem.getPercentag2().compareTo(BigDecimal.ONE) == -1) {
|
|
|
- //当该项目时DR 或者 当前目的第二部位折扣率小于1的时候 ,才放进折扣队列,因为如果没有折扣的话,是不需要进行替换原项目的
|
|
|
- second.add(newMzChargeDetail);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- return false;
|
|
|
- }
|
|
|
|
|
|
/**
|
|
|
* 是否需要加价
|