| 
					
				 | 
			
			
				@@ -3,7 +3,6 @@ package cn.hnthyy.thmz.service.impl.his.mz; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import cn.hnthyy.thmz.Utils.CloneUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import cn.hnthyy.thmz.Utils.DateUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import cn.hnthyy.thmz.Utils.JsonUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import cn.hnthyy.thmz.Utils.StringUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import cn.hnthyy.thmz.common.Constants; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import cn.hnthyy.thmz.common.SpringUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import cn.hnthyy.thmz.entity.MzException; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -293,7 +292,7 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             throw new MzException("病人编号和就诊次数不能为空!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         List<MzYjReq> mzYjReqs = mzYjReqService.queryNotPayMzYjReq(new MzYjReq(mzChargeDetail.getPatientId(), mzChargeDetail.getTimes())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        List<MzChargeDetail> mzChargeDetailList = mzChargeDetailMapper.selectMzChargeDetailByPatientId(mzChargeDetail.getPatientId(), mzChargeDetail.getTimes(), null, PayMarkEnum.NO_CHARGE.code); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<MzChargeDetail> mzChargeDetailList = mzChargeDetailMapper.selectMzChargeDetailByPatientId("mz_charge_detail",mzChargeDetail.getPatientId(), mzChargeDetail.getTimes(), null, PayMarkEnum.NO_CHARGE.code); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return getMzChargeDetails(mzChargeDetail, yesNo, receiptNo, mzYjReqs, mzChargeDetailList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -475,7 +474,7 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         mzChargeDetailMapper.setTempDataReceiptNo(mzChargeDetail.getPatientId(), mzChargeDetail.getTimes(), receiptNo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         mzChargeDetailMapper.updateMzChargeDetailFull(mzChargeDetail); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //入库收费明细数据结束 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        List<MzChargeDetail> mzChargeDetailList = mzChargeDetailMapper.selectMzChargeDetailByPatientId(mzDepositFileVo.getPatientId(), mzDepositFileVo.getTimes(), null, PayMarkEnum.NO_CHARGE.code); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<MzChargeDetail> mzChargeDetailList = mzChargeDetailMapper.selectMzChargeDetailByPatientId("mz_charge_detail",mzDepositFileVo.getPatientId(), mzDepositFileVo.getTimes(), null, PayMarkEnum.NO_CHARGE.code); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //所有应收费用的明细 将所有费用按照类型归类 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         Map<String, BigDecimal> feeMap = new HashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         //实际应付金额 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -949,7 +948,7 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         tempMap.put("cyJssm", mzChargeDetail.getCyJssm() != null ? mzChargeDetail.getCyJssm() : ""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         SupplyTypeEnum supplyTypeEnum = SupplyTypeEnum.getSupplyTypeByCode(mzChargeDetail.getCyDj()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         tempMap.put("cyDj", supplyTypeEnum != null ? supplyTypeEnum.name : ""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                        CyFysmEnum cyFysmEnum = CyFysmEnum.geteCyFysmByCode(mzChargeDetail.getCyFysm().toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        CyFysmEnum cyFysmEnum = CyFysmEnum.geteCyFysmByCode(mzChargeDetail.getCyFysm()==null?null:mzChargeDetail.getCyFysm().toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         tempMap.put("cyFysm", cyFysmEnum != null ? cyFysmEnum.name : ""); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         tempMap.put("detail", new ArrayList<>()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                         zyPrescription.add(tempMap); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1084,8 +1083,11 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             getIndex(zyPrescription, sbd, 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if(zlPrescription.size()>0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            sbd.append("医技与诊疗:"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            getIndex(zlPrescription, sbd, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<String> detail = (List<String>) zlPrescription.get(0).get("detail"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(detail!=null && detail.size()>0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sbd.append("医技与诊疗:"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                getIndex(zlPrescription, sbd, 0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         mzPrescriptionVo.getMzBlRecord().setEmrProcess(sbd.toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1685,22 +1687,56 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             //只需要构造病历信息,不需要设置用药和诊疗信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return mzPrescriptionVo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        List<MzChargeDetail> mzChargeDetailList = mzChargeDetailMapper.selectMzChargeDetailByPatientId(patientId, times, null, payMark); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        List<MzChargeDetail> removeList = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        for (MzChargeDetail mzChargeDetail : mzChargeDetailList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (PayMarkEnum.CHARGED.code.equals(payMark)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                //对于已经收费的药品记录查询,只需要查询医生开立的药品,给要方式等记录需要过滤 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (removeList == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    removeList = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<MzChargeDetail> mzChargeDetailList = mzChargeDetailMapper.selectMzChargeDetailByPatientId("mz_charge_detail",patientId, times, null, payMark); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(PayMarkEnum.CHARGED.code.equals(payMark)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<MzChargeDetail> hisMzChargeDetailList = mzChargeDetailMapper.selectMzChargeDetailByPatientId("mz_charge_detail_b",patientId, times, null, payMark); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Set<String> temSet = new HashSet<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            StringBuilder sbd = new StringBuilder(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(mzChargeDetailList!=null && mzChargeDetailList.size()>0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                for(MzChargeDetail mzChargeDetail : mzChargeDetailList){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    sbd.setLength(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    temSet.add(sbd.append(mzChargeDetail.getPatientId()).append("_").append(mzChargeDetail.getTimes()).append("_").append(mzChargeDetail.getReceiptNo()).append("_").append(mzChargeDetail.getItemNo()).append("_").append(mzChargeDetail.getChargeItemCode()).toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                if (YesNoEnum.YES.code != (mzChargeDetail.getGroupId())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    removeList.add(mzChargeDetail); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if(hisMzChargeDetailList!=null && hisMzChargeDetailList.size()>0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                for(MzChargeDetail mzChargeDetail : hisMzChargeDetailList){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if(temSet.contains(sbd.append(mzChargeDetail.getPatientId()).append("_").append(mzChargeDetail.getTimes()).append("_").append(mzChargeDetail.getReceiptNo()).append("_").append(mzChargeDetail.getItemNo()).append("_").append(mzChargeDetail.getChargeItemCode()).toString())){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    mzChargeDetailList.add(mzChargeDetail); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if ("2".equals(mzChargeDetail.getJzFlag())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                mzChargeDetail.setGroupNo("111"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } else if ("3".equals(mzChargeDetail.getJzFlag())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                mzChargeDetail.setGroupNo("131"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<MzChargeDetail> removeList = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if(mzChargeDetailList!=null && mzChargeDetailList.size()>0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //麻、精一 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<MzZdYpYsh> mjyList = mzZdYpYshMapper.selectMjyByCommonParams(null, null, null, null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Set<String> mjySet = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (mjyList != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                mjySet = mjyList.stream().map(m -> m.getCode()).collect(Collectors.toSet()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //精二 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<MzZdYpYsh> jeList = mzZdYpYshMapper.selectJeByCommonParams(null, null, null, null); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Set<String> jeSet = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (jeList != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                jeSet = jeList.stream().map(m -> m.getCode()).collect(Collectors.toSet()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (MzChargeDetail mzChargeDetail : mzChargeDetailList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (PayMarkEnum.CHARGED.code.equals(payMark)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    //对于已经收费的药品记录查询,只需要查询医生开立的药品,给要方式等记录需要过滤 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if (removeList == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        removeList = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    if ((Constants.YJ_GROUP_NO.equals(mzChargeDetail.getGroupNo()) && !(mzChargeDetail.getReqNo()==null || Integer.valueOf(0).equals(mzChargeDetail.getReqNo()))) || Constants.SSWRF.equals(mzChargeDetail.getBillItemCode())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        //医技收费 和四舍五入的目录移除 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                        removeList.add(mzChargeDetail); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                if (mjySet.contains(mzChargeDetail.getChargeItemCode())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    mzChargeDetail.setGroupNo("111"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } else if (jeSet.contains(mzChargeDetail.getChargeItemCode())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    mzChargeDetail.setGroupNo("131"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (PayMarkEnum.CHARGED.code.equals(payMark) && removeList != null) { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -1964,7 +2000,7 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public List<MzChargeDetail> queryChargeDetail(MzChargeDetail mzChargeDetail) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        return mzChargeDetailMapper.selectMzChargeDetailByPatientId(mzChargeDetail.getPatientId(), mzChargeDetail.getTimes(), mzChargeDetail.getReceiptNo(), mzChargeDetail.getPayMark()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        return mzChargeDetailMapper.selectMzChargeDetailByPatientId("mz_charge_detail",mzChargeDetail.getPatientId(), mzChargeDetail.getTimes(), mzChargeDetail.getReceiptNo(), mzChargeDetail.getPayMark()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Override 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -2005,7 +2041,7 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             throw new MzException("退费失败,特门收费必须全退!"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         List<String> chargeItemCodeList = mzChargeDetails.stream().filter(u -> StringUtils.isNotBlank(u.getChargeItemCode())).map(u -> u.getChargeItemCode()).collect(Collectors.toList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        List<MzChargeDetail> oriMzChargeDetails = mzChargeDetailMapper.selectMzChargeDetailByPatientId(mzDepositFileVo.getPatientId(), mzDepositFileVo.getTimes(), mzDepositFileVo.getReceiptNo(), PayMarkEnum.CHARGED.code); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<MzChargeDetail> oriMzChargeDetails = mzChargeDetailMapper.selectMzChargeDetailByPatientId("mz_charge_detail",mzDepositFileVo.getPatientId(), mzDepositFileVo.getTimes(), mzDepositFileVo.getReceiptNo(), PayMarkEnum.CHARGED.code); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         Date now = new Date(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         List<MzChargeDetail> tcMzChargeDetails = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         List<MzChargeDetail> removeMzChargeDetails = new ArrayList<>(); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -2429,7 +2465,7 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (chargeItemCodeList == null || chargeItemCodeList.size() == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             throw new MzException("没有选择需要退费的收费明细,无法退费"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        List<MzChargeDetail> mzChargeDetails = mzChargeDetailMapper.selectMzChargeDetailByPatientId(mzDepositFileVo.getPatientId(), mzDepositFileVo.getTimes(), mzDepositFileVo.getReceiptNo(), PayMarkEnum.CHARGED.code); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<MzChargeDetail> mzChargeDetails = mzChargeDetailMapper.selectMzChargeDetailByPatientId("mz_charge_detail",mzDepositFileVo.getPatientId(), mzDepositFileVo.getTimes(), mzDepositFileVo.getReceiptNo(), PayMarkEnum.CHARGED.code); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (mzChargeDetails == null || mzChargeDetails.size() == 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             throw new MzException("当前病人无可退费用,无法退费"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 |