| 
					
				 | 
			
			
				@@ -6,14 +6,17 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.baomidou.mybatisplus.core.metadata.IPage; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import lombok.extern.slf4j.Slf4j; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import org.apache.commons.collections4.ListUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.stereotype.Service; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.transaction.annotation.Transactional; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import thyyxxk.webserver.config.exception.ExceptionEnum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import thyyxxk.webserver.constants.GetDateFormat; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import thyyxxk.webserver.dao.his.inpatient.XiangMuLuRuDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import thyyxxk.webserver.dao.his.zhuyuanyisheng.CaoYaoYiZhuDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import thyyxxk.webserver.dao.his.zhuyuanyisheng.YiZhuLuRuDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import thyyxxk.webserver.entity.ResultVo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import thyyxxk.webserver.entity.datamodify.GetDropdownBox; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import thyyxxk.webserver.entity.datamodify.ZyDetailCharge; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import thyyxxk.webserver.entity.zhuyuanyisheng.caoyaoyizhu.CaoYaoChaXunTiaoJian; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import thyyxxk.webserver.entity.zhuyuanyisheng.caoyaoyizhu.YzActOrderCy; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import thyyxxk.webserver.entity.zhuyuanyisheng.caoyaoyizhu.YzActOrderCyDetail; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -43,12 +46,14 @@ public class CaoYaoYiZhuService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private final PublicServer publicServer; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private final YiZhuLuRuDao yiZhuLuRuDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private final YiZhuLuRuServer yiZhuLuRuServer; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private final XiangMuLuRuDao xiangMuLuRuDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    public CaoYaoYiZhuService(CaoYaoYiZhuDao dao, PublicServer publicServer, YiZhuLuRuDao yiZhuLuRuDao, YiZhuLuRuServer yiZhuLuRuServer) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public CaoYaoYiZhuService(CaoYaoYiZhuDao dao, PublicServer publicServer, YiZhuLuRuDao yiZhuLuRuDao, YiZhuLuRuServer yiZhuLuRuServer, XiangMuLuRuDao xiangMuLuRuDao) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         this.dao = dao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         this.publicServer = publicServer; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         this.yiZhuLuRuDao = yiZhuLuRuDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         this.yiZhuLuRuServer = yiZhuLuRuServer; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        this.xiangMuLuRuDao = xiangMuLuRuDao; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     private CaoYaoYiZhuService getThis() { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -241,15 +246,15 @@ public class CaoYaoYiZhuService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				      */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public ResultVo<String> shanChuMuBan(String name, String deptCode) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         YzOrderPatternCy mb = dao.caoYaoMuBanXiangQing(name); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        List<Integer> rolse = publicServer.getRoleCode().getData(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 如果有这个权限直接删除 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (publicServer.noNeedRule(rolse, YiZhuPublicService.MU_BAN_BIAN_JI_QUAN_XIAN)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (publicServer.needRule(YiZhuPublicService.MU_BAN_BIAN_JI_QUAN_XIAN)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             // 本人创建的也可以直接删除 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if (mb.getCreateId().equals(TokenUtil.getTokenUserId())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 return shanChuCaoYaoMuBan(name); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             // 科主任 可以删除自己科室的模板 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            if (publicServer.needRule(rolse, YiZhuPublicService.KE_ZHU_REN_BIAN_MA)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (publicServer.needRule(YiZhuPublicService.KE_ZHU_REN_BIAN_MA)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 if (mb.getDeptCode().trim().equals(deptCode)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     return shanChuCaoYaoMuBan(name); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -265,19 +270,45 @@ public class CaoYaoYiZhuService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_NOTIFICATION); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Transactional(rollbackFor = Exception.class) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public ResultVo<String> shanChuCaoYao(String patNo, Integer times, BigDecimal orderNo) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         YzActOrderCy cy = dao.caoYaoXinXi(patNo, times, orderNo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         if (cy == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "没有查询到原来的信息。"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (!"2".equals(cy.getStatusFlag().trim())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "该草药无法删除。"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         log.info("删除草药==》操作人:{},数据:{}", TokenUtil.getTokenUserId(), JSON.toJSONStringWithDateFormat(cy, GetDateFormat.DATE_TIME)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         dao.genXingCaoYaoShanChuBiaoZhi(patNo, times, orderNo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         dao.shanChuYiZhu(orderNo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        feeRefunds(cy); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         return ResultVoUtil.success(ExceptionEnum.SUCCESS_AND_NOTIFICATION); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 草药退费 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     * @param cy 草药信息 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    private void feeRefunds(YzActOrderCy cy) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        List<ZyDetailCharge> cyList = dao.caoYaoFeiYong(cy); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        int maxDetailSn = publicServer.getMaxDetailSn(cy.getInpatientNo(), cy.getAdmissTimes()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String userCode = TokenUtil.getTokenUserId(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (ListUtil.notBlank(cyList)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<ZyDetailCharge> refundArray = new ArrayList<>(cyList.size()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            for (ZyDetailCharge item : cyList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                item.setChargeFee(item.getChargeFee().negate()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                item.setChargeAmount(item.getChargeAmount().negate()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                item.setOpIdCode(userCode); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                item.setOriDetailSn(item.getDetailSn()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                // 设置 流水号 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                item.setDetailSn(maxDetailSn += 1); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                item.setOrderNo(new BigDecimal(0)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                item.setNewOrderNo(new BigDecimal(0)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                refundArray.add(item); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            List<List<ZyDetailCharge>> fenGe = ListUtils.partition(refundArray, 20); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            fenGe.forEach(xiangMuLuRuDao::xiangMuTuiFei); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            dao.modifyTheExpenseFlag(cy); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 |