lihong 1 year ago
parent
commit
f6e7106ead

+ 14 - 1
src/main/java/cn/hnthyy/thmz/Utils/Tools.java

@@ -1,5 +1,6 @@
 package cn.hnthyy.thmz.Utils;
 
+import cn.hnthyy.thmz.entity.his.mz.MzYjReq;
 import cn.hnthyy.thmz.entity.thmz.Config;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
@@ -613,11 +614,23 @@ public class Tools {
             str = format + num;
         } else {
             String idStr = IdUtil.getSnowflake(2, 2).nextIdStr();
-            str = idStr.substring(str.length() - 6) + num;
+            str = idStr.substring(idStr.length() - 6) + num;
         }
         ++num;
         return str;
     }
+
+    public static void setReqNo(List<MzYjReq> mzYjReqList) {
+        if (CollUtil.isNotEmpty(mzYjReqList)) {
+            for (MzYjReq mzYjReq : mzYjReqList) {
+                if (mzYjReq !=null && mzYjReq.getReqNo() == null) {
+                    Integer reqNo = Convert.toInt(Tools.getIcCardNo(false));
+                    mzYjReq.setReqNo(reqNo);
+                }
+            }
+        }
+    }
+
     /**
      * @description: 发送集群其他的刷新缓存
      * @author: lihong

+ 2 - 0
src/main/java/cn/hnthyy/thmz/controller/mz/MzChargeDetailController.java

@@ -6,6 +6,7 @@ import cn.hnthyy.thmz.Utils.HttpUtil;
 import cn.hnthyy.thmz.Utils.JsonUtil;
 import cn.hnthyy.thmz.Utils.R;
 import cn.hnthyy.thmz.Utils.TokenUtil;
+import cn.hnthyy.thmz.Utils.Tools;
 import cn.hnthyy.thmz.comment.UserLoginToken;
 import cn.hnthyy.thmz.common.Constants;
 import cn.hnthyy.thmz.common.exception.BizException;
@@ -1879,6 +1880,7 @@ public class MzChargeDetailController {
             if(StringUtils.isBlank(mzPrescriptionVo.getDoctorCode())){
                 mzPrescriptionVo.setDoctorCode(Constants.BRZZJF_CODE);
             }
+            Tools.setReqNo(mzPrescriptionVo.getMzYjReqList());
             resultMap.put("code", 0);
             resultMap.put("data", mzChargeDetailService.getAmountForTempPrescription(mzPrescriptionVo));
             resultMap.put("message", "计算临时处方的中药,西药,诊疗以及总金额成功");

+ 13 - 0
src/main/java/cn/hnthyy/thmz/mapper/his/mz/MzYjReqMapper.java

@@ -504,4 +504,17 @@ public interface MzYjReqMapper {
     int updateChargeFee(MzYjReq item);
     @Delete( " delete  from  mz_yj_req where patient_id =#{patientId,jdbcType=CHAR} and times=#{times} ")
     int deleteByPatientIdAndTimes(@Param("patientId") String patientId,@Param("times") Integer times);
+    @Select({"<script>",
+            "select req_no,patient_id,p_name patient_name,birth_date,times,receipt_no,order_no,item_no,p_bar_code,group_name,order_code,order_name,page_no,req_comment,req_doctor,",
+            "req_ward,exec_dept,req_date,inspect_part,inspect_stuff,sample_status,rtrim(print_flag) print_flag,rtrim(receive_flag) receive_flag,req_type,result_comment,sys_date,",
+            "rtrim(pay_mark) pay_mark,rtrim(status_flag) status_flag,serial_no,cash_id,jy_remark,req_other_result,original_list_no,req_tz_comment,rtrim(jz_flag) jz_flag,req_studyid,",
+            "percent_ft,rtrim(confirm_flag) confirm_flag,confirm_time,confirm_id,rtrim(print_flag_yj) print_flag_yj,quantity from mz_yj_req WITH(NOLOCK) where   status_flag <![CDATA[<>]]> 'z' ",
+            "<when test='times!=null'>",
+            " and times =#{times,jdbcType=SMALLINT}",
+            "</when>",
+            "<when test='patientId!=null'>",
+            " and patient_id =#{patientId,jdbcType=VARCHAR}",
+            "</when>",
+            "</script>"})
+    List<MzYjReq> selectPatientIdAndTimes(@Param("patientId") String patientId, @Param("times") Integer times);
 }

+ 2 - 0
src/main/java/cn/hnthyy/thmz/service/his/mz/MzYjReqService.java

@@ -74,4 +74,6 @@ public interface MzYjReqService {
     int updateChargeFee(MzYjReq item);
 
     int deleteByPatientIdAndTimes(String patientId, Integer times);
+
+    List<MzYjReq> queryPatientIdAndTimes(String patientId, Integer times);
 }

+ 71 - 23
src/main/java/cn/hnthyy/thmz/service/impl/his/mz/MzChargeDetailServiceImpl.java

@@ -68,6 +68,7 @@ import java.math.BigDecimal;
 import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 @Slf4j
 @Service
@@ -536,7 +537,7 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
         //計算第二部位和DR费用
         setSecondPartAndDrFeeForCharge(mzChargeDetails, mzYjReqMap, tcNoMap, reqAmountMap, zdChargeItemMap);
         //预览的时候获取费用明细,需要打折,不是预览而是入库的时候不打折,因为入库后会有一次重新计算 计算惠民活动
-        formatPriceRoundDetail(mzChargeDetail, mzChargeDetails, mzPatientMi, mzChargeDetailList, maxOrderNo, itemNo, receiptNo, YesNoEnum.YES.equals(yesNo)?true:false,zgmztczf);
+        formatPriceRoundDetail(mzChargeDetail, mzChargeDetails, mzPatientMi, mzChargeDetailList, maxOrderNo, itemNo, receiptNo, YesNoEnum.YES.equals(yesNo)?true:false,zgmztczf,mzYjReqs);
         //yes 预览需要将原数据库中已存在的明细与临时生成的一起返回
         if (YesNoEnum.YES.equals(yesNo)) {
             for (MzChargeDetail mcd : mzChargeDetailList) {
@@ -816,7 +817,7 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
         //所有应收费用的明细 将所有费用按照类型归类
         Map<String, BigDecimal> feeMap = new HashMap<>();
         //实际应付金额
-        BigDecimal totalPayable = getTotalPayable(mzChargeDetailList, feeMap, true,null);
+        BigDecimal totalPayable = getTotalPayable(mzChargeDetailList, feeMap, true,null,null);
         //实际应付金额  四舍五入后的值 收费员收的钱小数点后只有一位有效值
         BigDecimal totalPayableRound = totalPayable.setScale(2, BigDecimal.ROUND_HALF_UP);
         //单病种收费不设置金额,所以自动设置金额
@@ -3894,7 +3895,7 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
         //所有应收费用的明细 将所有费用按照类型归类
         Map<String, BigDecimal> feeMap = new HashMap<>();
         //实际应付金额
-        BigDecimal totalPayable = getTotalPayable(mzChargeDetails, feeMap, false,null);
+        BigDecimal totalPayable = getTotalPayable(mzChargeDetails, feeMap, false,null,null);
         MzReceiptSerial mzReceiptSerial = new MzReceiptSerial();
         ReceiptSerialFee receiptSerialFee = new ReceiptSerialFee();
         //退费后新的收款方式
@@ -4172,7 +4173,7 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
             //所有应收费用的明细 将所有费用按照类型归类
             Map<String, BigDecimal> feeMap = new HashMap<>();
             //实际应付金额
-            BigDecimal totalPayable = getTotalPayable(mzChargeDetails, feeMap, false,null);
+            BigDecimal totalPayable = getTotalPayable(mzChargeDetails, feeMap, false,null,null);
             MzReceiptSerial mzReceiptSerial = new MzReceiptSerial();
             ReceiptSerialFee receiptSerialFee = new ReceiptSerialFee();
             //退费后新的收款方式
@@ -5007,7 +5008,7 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
         List<MzChargeDetail> supplyFeeMzChargeDetails = new ArrayList<>();
         //重新计算给药方式费用
         //   itemNo = formatSupplyFee(supplyFeeMzChargeDetails, newMzChargeDetailList, itemNo);
-        formatPriceRoundDetail(new MzChargeDetail(mzDepositFileVo.getPatientId(), times), supplyFeeMzChargeDetails, mzPatientMi, newMzChargeDetailList, 127, ++itemNo, receiptNo, false,null);
+        formatPriceRoundDetail(new MzChargeDetail(mzDepositFileVo.getPatientId(), times), supplyFeeMzChargeDetails, mzPatientMi, newMzChargeDetailList, 127, ++itemNo, receiptNo, false,null,null);
 //        List<String> supplyList = supplyFeeMzChargeDetails.stream().filter(u -> StringUtils.isNotBlank(u.getChargeItemCode())).map-util.js(u -> u.getChargeItemCode()).collect(Collectors.toList());
 //        List<MzChargeDetail> removeList = new ArrayList<>();
 //        for (MzChargeDetail md : newMzChargeDetailList) {
@@ -5801,12 +5802,33 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
      * @param needDiscount       是否需要做优惠计算
      * @return
      */
-    private BigDecimal getTotalPayable(List<MzChargeDetail> mzChargeDetailList, Map<String, BigDecimal> feeMap, boolean needDiscount,Integer mztczf) {
+    private BigDecimal getTotalPayable(List<MzChargeDetail> mzChargeDetailList, Map<String, BigDecimal> feeMap, boolean needDiscount,Integer mztczf,List<MzYjReq> mzYjReqs) {
         BigDecimal totalPayable = BigDecimal.ZERO;
-        List<String> chargeItemCodes = null;
+        List<String> chargeItemCodes = new ArrayList<>();
         Map<String, ZdDiscountDetail> zdDiscountDetailMap = null;
-        if(CollUtil.isNotEmpty(mzChargeDetailList)){
-             chargeItemCodes = mzChargeDetailList.stream().filter(obj -> StrUtil.isNotBlank(obj.getChargeItemCode())).map(MzChargeDetail::getChargeItemCode).collect(Collectors.toList());
+        List<MzYjReq> tempMzYjReq = null;
+        Map<Integer, List<MzYjReq>> ReqNoGroup = new HashMap<>();
+        if(needDiscount && CollUtil.isNotEmpty(mzChargeDetailList)){
+            //医技项目拼接 医技申请号对应的检验检查号逗号
+            if(CollUtil.isEmpty(mzYjReqs)){
+                if(StrUtil.isNotBlank(mzChargeDetailList.get(0).getPatientId()) && mzChargeDetailList.get(0).getTimes() !=null){
+                    tempMzYjReq = mzYjReqService.queryPatientIdAndTimes(mzChargeDetailList.get(0).getPatientId(), mzChargeDetailList.get(0).getTimes());
+                }
+                if(CollUtil.isEmpty(tempMzYjReq)){
+                    chargeItemCodes = mzChargeDetailList.stream().filter(obj -> StrUtil.isNotBlank(obj.getChargeItemCode())).map(MzChargeDetail::getChargeItemCode).collect(Collectors.toList());
+                }else {
+                    ReqNoGroup = tempMzYjReq.stream().collect(Collectors.groupingBy(item -> item.getReqNo()));
+                    setChargeCodes(mzChargeDetailList, chargeItemCodes, tempMzYjReq);
+                }
+            }else {
+                List<MzYjReq> collect = mzYjReqs.stream().filter(item -> item.getReqNo() != null).collect(Collectors.toList());
+                if(CollUtil.isNotEmpty(collect)){
+                    ReqNoGroup = collect.stream().collect(Collectors.groupingBy(item -> item.getReqNo()));
+                    setChargeCodes(mzChargeDetailList, chargeItemCodes, collect);
+                }else {
+                    chargeItemCodes = mzChargeDetailList.stream().filter(obj -> StrUtil.isNotBlank(obj.getChargeItemCode())).map(MzChargeDetail::getChargeItemCode).collect(Collectors.toList());
+                }
+            }
         }
         if (mzChargeDetailList != null && mzChargeDetailList.size() > 0) {
             if(needDiscount){
@@ -5836,17 +5858,23 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
                         mzChargeDetail.setOrigPrice(unitPrice);
                     }
                     if(CollUtil.isNotEmpty(zdDiscountDetailMap)){
-                        if(zdDiscountDetailMap.get(mzChargeDetail.getChargeItemCode()) != null){
-                            ZdDiscountDetail zdDiscountDetail = zdDiscountDetailMap.get(mzChargeDetail.getChargeItemCode());
-                            if(NumberEnum.TWO.getCode().equals(zdDiscountDetail.getDiscountType()) && zdDiscountDetail.getDiscount() !=null && NumberUtil.isNumber(zdDiscountDetail.getDiscount())){
-                                unitPrice = Convert.toBigDecimal(zdDiscountDetail.getDiscount()).setScale(2, BigDecimal.ROUND_HALF_UP);
-                                mzChargeDetail.setUnitPrice(unitPrice);
+                            ZdDiscountDetail zdDiscountDetail = null;
+                            if("1".equals(Convert.toStr(mzChargeDetail.getReqYj(),"0"))){
+                                 zdDiscountDetail = zdDiscountDetailMap.get(mzChargeDetail.getChargeItemCode()+","+ReqNoGroup.get(mzChargeDetail.getReqNo()).get(0).getOrderCode());
+                            }else {
+                                zdDiscountDetail = zdDiscountDetailMap.get(mzChargeDetail.getChargeItemCode());
                             }
-                            else if(NumberEnum.ONE.getCode().equals(zdDiscountDetail.getDiscountType()) && zdDiscountDetail.getDiscount() !=null && NumberUtil.isNumber(zdDiscountDetail.getDiscount())){
-                                unitPrice = Convert.toBigDecimal(zdDiscountDetail.getDiscount()).multiply(mzChargeDetail.getUnitPrice()).setScale(2, BigDecimal.ROUND_HALF_UP);
-                                mzChargeDetail.setUnitPrice(unitPrice);
+                            if(zdDiscountDetail !=null){
+                                if(NumberEnum.TWO.getCode().equals(zdDiscountDetail.getDiscountType()) && zdDiscountDetail.getDiscount() !=null && NumberUtil.isNumber(zdDiscountDetail.getDiscount())){
+                                    unitPrice = Convert.toBigDecimal(zdDiscountDetail.getDiscount()).setScale(2, BigDecimal.ROUND_HALF_UP);
+                                    mzChargeDetail.setUnitPrice(unitPrice);
+                                }
+                                else if(NumberEnum.ONE.getCode().equals(zdDiscountDetail.getDiscountType()) && zdDiscountDetail.getDiscount() !=null && NumberUtil.isNumber(zdDiscountDetail.getDiscount())){
+                                    unitPrice = Convert.toBigDecimal(zdDiscountDetail.getDiscount()).multiply(mzChargeDetail.getUnitPrice()).setScale(2, BigDecimal.ROUND_HALF_UP);
+                                    mzChargeDetail.setUnitPrice(unitPrice);
+                                }
                             }
-                        }
+
                     }
                     else {
                         if(!shareholderCardService.checMzTckByPatientAndTimes(mzChargeDetail.getPatientId(),mzChargeDetail.getTimes(),mztczf)){
@@ -5855,9 +5883,17 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
                                 discountMap = discountService.getTcDiscountRate(0, mzChargeDetail.getWarnDept(), chargeItemCodes);
                             }
                             if(CollUtil.isNotEmpty(discountMap)){
-                                if(discountMap.get(mzChargeDetail.getChargeItemCode()) !=null){
-                                    unitPrice = discountMap.get(mzChargeDetail.getChargeItemCode()).multiply(mzChargeDetail.getUnitPrice()).setScale(2, BigDecimal.ROUND_HALF_UP);
-                                    mzChargeDetail.setUnitPrice(unitPrice);
+                                if("1".equals(Convert.toStr(mzChargeDetail.getReqYj(),"0"))){
+                                    String tempStr = mzChargeDetail.getChargeItemCode() + "," + ReqNoGroup.get(mzChargeDetail.getReqNo()).get(0).getOrderCode();
+                                    if(discountMap.get(tempStr)!=null){
+                                        unitPrice = discountMap.get(tempStr).multiply(mzChargeDetail.getUnitPrice()).setScale(2, BigDecimal.ROUND_HALF_UP);
+                                        mzChargeDetail.setUnitPrice(unitPrice);
+                                    }
+                                }else {
+                                    if(discountMap.get(mzChargeDetail.getChargeItemCode()) !=null){
+                                        unitPrice = discountMap.get(mzChargeDetail.getChargeItemCode()).multiply(mzChargeDetail.getUnitPrice()).setScale(2, BigDecimal.ROUND_HALF_UP);
+                                        mzChargeDetail.setUnitPrice(unitPrice);
+                                    }
                                 }
                             }else {
                                 Discount discount ;
@@ -5895,6 +5931,18 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
         return totalPayable.setScale(2, BigDecimal.ROUND_HALF_UP);
     }
 
+    private void setChargeCodes(List<MzChargeDetail> mzChargeDetailList, List<String> chargeItemCodes, List<MzYjReq> tempMzYjReq) {
+        List<Integer> collect = tempMzYjReq.stream().map(item -> item.getReqNo()).collect(Collectors.toList());
+        Map<Integer, List<MzYjReq>> ReqNoGroup = tempMzYjReq.stream().collect(Collectors.groupingBy(item -> item.getReqNo()));
+        for (MzChargeDetail mzChargeDetail : mzChargeDetailList) {
+           if(!Constants.TC.equals(mzChargeDetail.getBillItemCode()) && "1".equals(Convert.toStr(mzChargeDetail.getReqYj(), "0")) && collect.contains(mzChargeDetail.getReqNo())){
+               chargeItemCodes.add(mzChargeDetail.getChargeItemCode()+","+ReqNoGroup.get(mzChargeDetail.getReqNo()).get(0).getOrderCode());
+           }else {
+               chargeItemCodes.add(mzChargeDetail.getChargeItemCode());
+           }
+        }
+    }
+
     /**
      * 将总金额的零头转做四舍五入的收费明细记录
      *
@@ -5906,7 +5954,7 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
      * @param itemNo
      * @param needDiscount       是否需要做优惠计算
      */
-    private void formatPriceRoundDetail(MzChargeDetail mzChargeDetail, List<MzChargeDetail> mzChargeDetails, MzPatientMi mzPatientMi, List<MzChargeDetail> mzChargeDetailList, Integer maxOrderNo, Integer itemNo, Integer receiptNo, boolean needDiscount,Integer mztczf) {
+    private void formatPriceRoundDetail(MzChargeDetail mzChargeDetail, List<MzChargeDetail> mzChargeDetails, MzPatientMi mzPatientMi, List<MzChargeDetail> mzChargeDetailList, Integer maxOrderNo, Integer itemNo, Integer receiptNo, boolean needDiscount,Integer mztczf,List<MzYjReq> mzYjReqs) {
         List<MzChargeDetail> temp = new ArrayList<>();
         temp.addAll(mzChargeDetailList);
         if (mzChargeDetails != null) {
@@ -5917,7 +5965,7 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
             //所有应收费用的明细 将所有费用按照类型归类
             Map<String, BigDecimal> feeMap = new HashMap<>();
             //实际应付金额
-            getTotalPayable(temp, feeMap, needDiscount,mztczf);
+            getTotalPayable(temp, feeMap, needDiscount,mztczf,mzYjReqs);
 //            for (String key : feeMap.keySet()) {
 //                BigDecimal amount = feeMap.get(key).setScale(2, BigDecimal.ROUND_HALF_UP);
 //                totalFee = totalFee.add(amount);

+ 5 - 0
src/main/java/cn/hnthyy/thmz/service/impl/his/mz/MzYjReqServiceImpl.java

@@ -98,4 +98,9 @@ public class MzYjReqServiceImpl implements MzYjReqService {
     public int deleteByPatientIdAndTimes(String patientId, Integer times) {
         return mzYjReqMapper.deleteByPatientIdAndTimes(patientId,times);
     }
+
+    @Override
+    public List<MzYjReq> queryPatientIdAndTimes(String patientId, Integer times) {
+        return mzYjReqMapper.selectPatientIdAndTimes(patientId,times);
+    }
 }

+ 11 - 8
src/main/java/cn/hnthyy/thmz/service/impl/his/mz/ShareholderCardServiceImpl.java

@@ -20,6 +20,7 @@ import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.IdcardUtil;
 import cn.hutool.core.util.StrUtil;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.regexp.RE;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
@@ -27,6 +28,7 @@ import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * @Description: 股东卡
@@ -91,9 +93,9 @@ public class ShareholderCardServiceImpl implements ShareholderCardService {
     public Map<String, ZdDiscountDetail> getChargeItemCodesDiscountDetail(String patientId,Integer times ,Integer receiptNo,Integer mztczf,List<String> chargeItemCodes,List<String> zyItemCodes) {
         Map<String, ZdDiscountDetail> result = new HashMap<>(10);
         //有医保报销 也不享受股东卡优惠
-        if(CollUtil.isEmpty(chargeItemCodes) || StrUtil.isBlank(patientId) || times==null) return result;
+        if(Convert.toInt(mztczf,0)==1 || CollUtil.isEmpty(chargeItemCodes) || StrUtil.isBlank(patientId) || times==null) return result;
         List<Clinic> clinicList = clinicService.queryByPatientIdAndTimes(patientId, times);
-        if(Convert.toInt(mztczf,0)==1 || (CollUtil.isNotEmpty(clinicList) && clinicList.stream().anyMatch(item->Convert.toInt(item.getZgmztczf(),0)==1))) return result;
+        if(CollUtil.isNotEmpty(clinicList) && clinicList.stream().anyMatch(item->Convert.toInt(item.getZgmztczf(),0)==1)) return result;
         if (checkCurDiscount(patientId) != null) {
             String zyDiscountClass = dictDataService.queryDictVlaue("2.1", "zy_discount_class", "22");
             List<String> zyDiscountClassList = CollUtil.newArrayList(zyDiscountClass.split(","));
@@ -113,7 +115,7 @@ public class ShareholderCardServiceImpl implements ShareholderCardService {
                             List<String> zdChargeItems = dao.selectZdChargeItemByAuditCode(zdDiscountDetail.getChargeItem());
                             if (CollUtil.isNotEmpty(zdChargeItems)) {
                                 for (String code : chargeItemCodes) {
-                                    if (zdChargeItems.contains(code)) {
+                                    if (zdChargeItems.contains(code.split(",")[0])) {
                                         result.put(code, zdDiscountDetail);
                                     }
                                 }
@@ -122,18 +124,18 @@ public class ShareholderCardServiceImpl implements ShareholderCardService {
                     }
                     else if(DiscountEnum.CHARGE_CODE.getCode().equals(zdDiscountDetail.getDiscountClass())){
                         for (String code : chargeItemCodes) {
-                            if (code.equals(zdDiscountDetail.getChargeItem())) {
+                            if (code.split(",")[0].equals(zdDiscountDetail.getChargeItem())) {
                                 result.put(code, zdDiscountDetail);
                             }
                         }
                     }
                     else if(DiscountEnum.TC_NO.getCode().equals(zdDiscountDetail.getDiscountClass())){
                       List<String> tcCodes =  dao.selectMzTcDetail(zdDiscountDetail.getChargeItem());
-                        putValue(chargeItemCodes, result, zdDiscountDetail, tcCodes);
+                        putValue(chargeItemCodes.stream().map(o->o.split(",")[0]).collect(Collectors.toList()), result, zdDiscountDetail, tcCodes);
                     }
                     else if(DiscountEnum.JY_JC_CODE.getCode().equals(zdDiscountDetail.getDiscountClass())){
-                      List<String> jyjcCodes =  dao.selectJcJyZdChargeItemByCode(zdDiscountDetail.getChargeItem(), zdDiscountDetail.getJyjcType());
-                        putValue(chargeItemCodes, result, zdDiscountDetail, jyjcCodes);
+                        List<String> jyjcCodes =  dao.selectJcJyZdChargeItemByCode(zdDiscountDetail.getChargeItem(), zdDiscountDetail.getJyjcType());
+                        putValue(chargeItemCodes.stream().map(o->o.split(",")[0]).collect(Collectors.toList()), result, zdDiscountDetail, jyjcCodes);
                     }
                     else if(DiscountEnum.TEMPLATE_ID.getCode().equals(zdDiscountDetail.getDiscountClass())){
                       List<String> codes =  discountService.getItemCodes(Convert.toLong(zdDiscountDetail.getChargeItem()));
@@ -238,9 +240,10 @@ public class ShareholderCardServiceImpl implements ShareholderCardService {
      */
     @Override
     public boolean checMzTckByPatientAndTimes(String patientId, Integer times, Integer mztczf) {
+        if(Convert.toInt(mztczf,0)==1) return true;
         if( StrUtil.isBlank(patientId) || times==null) return false;
         List<Clinic> clinicList = clinicService.queryByPatientIdAndTimes(patientId, times);
-        if(Convert.toInt(mztczf,0)==1 || (CollUtil.isNotEmpty(clinicList) && clinicList.stream().anyMatch(item->Convert.toInt(item.getZgmztczf(),0)==1))) return true;
+        if(CollUtil.isNotEmpty(clinicList) && clinicList.stream().anyMatch(item->Convert.toInt(item.getZgmztczf(),0)==1)) return true;
         return false;
     }
 }

+ 18 - 1
src/main/java/cn/hnthyy/thmz/service/impl/thmz/DiscountServiceImpl.java

@@ -24,6 +24,7 @@ import cn.hnthyy.thmz.mapper.thmz.ConfigMapper;
 import cn.hnthyy.thmz.mapper.thmz.DiscountMapper;
 import cn.hnthyy.thmz.service.his.mz.MzChargeDetailService;
 import cn.hnthyy.thmz.service.his.mz.MzVisitTableService;
+import cn.hnthyy.thmz.service.his.mz.MzYjReqService;
 import cn.hnthyy.thmz.service.his.mz.ShareholderCardService;
 import cn.hnthyy.thmz.service.his.zd.DictDataService;
 import cn.hnthyy.thmz.service.his.zd.JcJyItemChargeService;
@@ -86,6 +87,8 @@ public class DiscountServiceImpl implements DiscountService {
     private MzVisitTableService mzVisitTableService;
     @Resource
     private DictDataService dictDataService;
+    @Resource
+    private MzYjReqService mzYjReqService;
 
     /**
      * 缓存
@@ -298,7 +301,7 @@ public class DiscountServiceImpl implements DiscountService {
             if(CollUtil.isNotEmpty(jcJyItemChargeList)){
                 List<ZdChargeItem> zdChargeItemList = zdChargeItemMapper.selectZdChargeItemByCodeList(jcJyItemChargeList.stream().map(item->item.getChargeCode()).collect(Collectors.toList()));
                 if(CollUtil.isNotEmpty(zdChargeItemList)){
-                    List<String> chargeCodes = zdChargeItemList.stream().filter(item -> StrUtil.isNotBlank(item.getCode())).map(ZdChargeItem::getCode).collect(Collectors.toList());
+                    List<String> chargeCodes = zdChargeItemList.stream().filter(item -> StrUtil.isNotBlank(item.getCode())).map(item->item.getCode()+","+orderCode).collect(Collectors.toList());
                     result.addAll(chargeCodes);
                 }
             }
@@ -451,6 +454,7 @@ public class DiscountServiceImpl implements DiscountService {
                 if(StringUtils.isBlank(mzPrescriptionVo.getDoctorCode())){
                     mzPrescriptionVo.setDoctorCode(Constants.BRZZJF_CODE);
                 }
+                Tools.setReqNo(mzPrescriptionVo.getMzYjReqList());
                 Map<String, Object> amountForTempPrescription = mzChargeDetailService.getAmountForTempPrescription(mzPrescriptionVo);
                 totalFee = (BigDecimal) amountForTempPrescription.get("amount");
             }catch (Exception e){
@@ -600,6 +604,19 @@ public class DiscountServiceImpl implements DiscountService {
         String zyDiscountGroup = dictDataService.queryDictVlaue("2.0","zy_discount_group","81");
         List<String> zyDiscountGroups = CollUtil.newArrayList(zyDiscountGroup.split(","));
         List<String> zyItemCodes = zdChargeItemMapper.selectZyChargeCodes(Tools.toInStringSql(zyDiscountGroups), Tools.toInStringSql(chargeCodes));
+        List<MzYjReq> mzYjReqs = mzYjReqService.queryPatientIdAndTimes(patientId, times);
+        if(CollUtil.isNotEmpty(mzYjReqs)){
+            for(MzYjReq mzYjReq : mzYjReqs){
+                List<String> itemCodes = getItemCodes(mzYjReq.getOrderCode(), mzYjReq.getReqType());
+                if(CollUtil.containsAll(chargeCodes,itemCodes)){
+                    for(String item :chargeCodes){
+                        if(itemCodes.contains(item)){
+                            item = item + "," + mzYjReq.getOrderCode();
+                        }
+                    }
+                }
+            }
+        }
         Map<String, ZdDiscountDetail> gdDiscount = shareholderCardService.getChargeItemCodesDiscountDetail(patientId, times, 0, null, chargeCodes, zyItemCodes);
         if(CollUtil.isNotEmpty(gdDiscount)){
             throw new BizException("项目有股东卡优惠",-2);

+ 3 - 0
src/main/resources/static/js/mz/clinic.js

@@ -6101,6 +6101,9 @@ function calculateTotalAmount(needRemoveLastObject) {
         $(obj).remove();
     });
     var jsonData = getParamsForpPrescription(3);
+    if(stringIsBlank(jsonData.visitDeptCode)){
+        jsonData.visitDeptCode = localStorage.getItem("currentDeptNo")
+    }
     $.ajax({
         type: "POST",
         url: '/thmz/getAmountForTempPrescription',