Просмотр исходного кода

检查自动计算第二部位的价格按套餐来实现

hurugang 3 лет назад
Родитель
Сommit
3cf93b3ae1

+ 6 - 1
src/main/java/cn/hnthyy/thmz/common/Constants.java

@@ -339,10 +339,15 @@ public class Constants {
 
 
     /**
-     * DR核算码
+     * 住院DR核算码
      */
     public static final String AUDIT_ITEM_DR="02";
 
+    /**
+     * 门诊DR核算码
+     */
+    public static final String MZ_AUDIT_ITEM_DR="07";
+
     /**
      * 检查的分类码
      */

+ 8 - 2
src/main/java/cn/hnthyy/thmz/controller/mz/MzZdYpYshController.java

@@ -108,11 +108,12 @@ public class MzZdYpYshController {
      * 查询诊疗与医技项目明细
      *
      * @param code 诊疗与医技项目明细
+     * @param jcJyZltype 项目类型 1 检验 2 检查
      * @return
      */
     @UserLoginToken
     @RequestMapping(value = "/getJcJyItemChargeByCode", method = {RequestMethod.GET})
-    public Map<String, Object> getJcJyItemChargeByCode(@RequestParam("code") String code) {
+    public Map<String, Object> getJcJyItemChargeByCode(@RequestParam("code") String code,@RequestParam("jcJyZltype") Integer jcJyZltype) {
         Map<String, Object> resultMap = new HashMap<>();
         try {
             if(StringUtils.isBlank(code)){
@@ -120,7 +121,12 @@ public class MzZdYpYshController {
                 resultMap.put("message", "项目编码不能为空");
                 return resultMap;
             }
-            List<ZdChargeItem> zdChargeItemList = jcJyItemChargeService.queryJcJyItemChargeByCode(code);
+            if(jcJyZltype==null){
+                resultMap.put("code", -1);
+                resultMap.put("message", "项目类型不能为空");
+                return resultMap;
+            }
+            List<ZdChargeItem> zdChargeItemList = jcJyItemChargeService.queryJcJyItemChargeByCode(code,jcJyZltype);
             if (zdChargeItemList == null || zdChargeItemList.size() == 0) {
                 resultMap.put("code", -1);
                 resultMap.put("message", "未查询到符合条件的诊疗与医技项目明细");

+ 8 - 2
src/main/java/cn/hnthyy/thmz/controller/mz/ZdChargeItemController.java

@@ -381,17 +381,23 @@ public class ZdChargeItemController {
     /**
      *  判断是否加收,根据项目编码或者检查检验项目编码查询对应的收费项目.医剂项目返回第一个加收的
      * @param code
+     * @param jcJyZltype 项目类型 1 检验 2 检查
      * @return
      */
     @UserLoginToken
     @RequestMapping(value = "/checkAdditionally", method = {RequestMethod.GET})
-    public Map<String, Object> checkAdditionally(@RequestParam("code") String code) {
+    public Map<String, Object> checkAdditionally(@RequestParam("code") String code,@RequestParam("jcJyZltype") Integer jcJyZltype) {
         Map<String, Object> resultMap = new HashMap<>();
         if(StringUtils.isBlank(code)){
             resultMap.put("code", -1);
             resultMap.put("message", "项目编码不能为空");
             return resultMap;
         }
+        if(jcJyZltype==null){
+            resultMap.put("code", -1);
+            resultMap.put("message", "项目类型不能为空");
+            return resultMap;
+        }
         try {
             ZdChargeItem zdChargeItem=zdChargeItemService.queryZdChargeItemByCode(code);
             if(zdChargeItem!=null){
@@ -400,7 +406,7 @@ public class ZdChargeItemController {
                 resultMap.put("data", zdChargeItem);
                 return resultMap;
             }
-            List<ZdChargeItem> zdChargeItemList = jcJyItemChargeService.queryJcJyItemChargeByCode(code);
+            List<ZdChargeItem> zdChargeItemList = jcJyItemChargeService.queryJcJyItemChargeByCode(code,jcJyZltype);
             if (zdChargeItemList == null || zdChargeItemList.size() == 0) {
                 resultMap.put("code", -1);
                 resultMap.put("message", "未查询到符合条件的收费项目");

+ 27 - 18
src/main/java/cn/hnthyy/thmz/mapper/his/zd/JcJyItemChargeMapper.java

@@ -11,17 +11,17 @@ import java.util.List;
 import java.util.Map;
 
 public interface JcJyItemChargeMapper {
-    /**
-     * 根据单个编号查询收费编码
-     *
-     * @param code
-     * @param reqType
-     * @param tableName
-     * @return
-     */
-    @Select("select rtrim(code) code,rtrim(charge_code) charge_code,amount,rtrim(charge_type) charge_type,rtrim(tc_no) tc_no,rtrim(zy_flag) zy_flag," +
-            "rtrim(mz_flag) mz_flag,${reqType} as req_type from ${tableName} WITH(NOLOCK) where code=#{code,jdbcType=CHAR} and charge_code <![CDATA[<>]]> '' and charge_code is not null ")
-    List<JcJyItemCharge> selectJcItemChargeByCode(@Param("code") String code, @Param("reqType") String reqType, @Param("tableName") String tableName);
+//    /**
+//     * 根据单个编号查询收费编码
+//     *
+//     * @param code
+//     * @param reqType
+//     * @param tableName
+//     * @return
+//     */
+//    @Select("select rtrim(code) code,rtrim(charge_code) charge_code,amount,rtrim(charge_type) charge_type,rtrim(tc_no) tc_no,rtrim(zy_flag) zy_flag," +
+//            "rtrim(mz_flag) mz_flag,${reqType} as req_type from ${tableName} WITH(NOLOCK) where code=#{code,jdbcType=CHAR} and charge_code <![CDATA[<>]]> '' and charge_code is not null ")
+//    List<JcJyItemCharge> selectJcItemChargeByCode(@Param("code") String code, @Param("reqType") String reqType, @Param("tableName") String tableName);
 
 
 
@@ -56,7 +56,7 @@ public interface JcJyItemChargeMapper {
             "<when test='commonParams==null'>",
             " top 20 ",
             "</when>",
-            "code,name,py_code,d_code wb_code,class ,exec_unit,type=1,rtrim(sample_code) sample_code,bw_code='' ",
+            "rtrim(code) code,name,py_code,d_code wb_code,class ,exec_unit,type=1,rtrim(sample_code) sample_code,bw_code='' ",
             "    FROM jy_zd_item WITH(NOLOCK) ",
             "where  isnull(del_flag,'') <![CDATA[<>]]> '1' ",
             "<when test='commonParams!=null'>",
@@ -70,7 +70,7 @@ public interface JcJyItemChargeMapper {
             "<when test='commonParams==null'>",
             " top 20 ",
             "</when>",
-            "code,name,py_code,d_code wb_code,class ,exec_unit,type=2,sample_code='',rtrim(bw_code) bw_code ",
+            "rtrim(code) code,name,py_code,d_code wb_code,class ,exec_unit,type=2,sample_code='',rtrim(bw_code) bw_code ",
             "    FROM jc_zd_item  WITH(NOLOCK) ",
             "where  isnull(del_flag,'') <![CDATA[<>]]> '1' ",
             "<when test='commonParams!=null'>",
@@ -92,7 +92,7 @@ public interface JcJyItemChargeMapper {
             "<when test='commonParams==null'>",
             " top 20 ",
             "</when>",
-            "code,name,specification,charge_amount= charge_amount1,yb_comment ",
+            "rtrim(code) code,name,specification,charge_amount= charge_amount1,yb_comment ",
             "    FROM view_mz_zd_zl WITH(NOLOCK)  ",
             "where  (case when bill_code='TC' then '00' else group_no end)='00' " +
                     " and (" +
@@ -110,16 +110,25 @@ public interface JcJyItemChargeMapper {
     List<JyZdItem> selectZlByCommonParams(@Param("commonParams") String commonParams);
 
     /**
-     * 根据检查检验编码查询对应的明细项目
+     * 根据检查编码查询对应的明细项目
+     *
+     * @param code
+     * @return
+     */
+    @Select("select rtrim(code) code,rtrim(charge_code) charge_code,amount,rtrim(charge_type) charge_type,rtrim(tc_no) tc_no,rtrim(zy_flag) zy_flag," +
+            "rtrim(mz_flag) mz_flag from jc_item_charge WITH(NOLOCK) where  charge_code <> '' and charge_code is not null and code=#{code} ")
+    List<JcJyItemCharge> selectJcItemChargeByCode(@Param("code") String code);
+
+
+    /**
+     * 根据检验编码查询对应的明细项目
      *
      * @param code
      * @return
      */
     @Select("select rtrim(code) code,rtrim(charge_code) charge_code,amount,rtrim(charge_type) charge_type,rtrim(tc_no) tc_no,rtrim(zy_flag) zy_flag," +
-            "rtrim(mz_flag) mz_flag from jc_item_charge WITH(NOLOCK) where  charge_code <> '' and charge_code is not null and code=#{code} UNION ALL " +
-            "select rtrim(code) code,rtrim(charge_code) charge_code,amount,rtrim(charge_type) charge_type,rtrim(tc_no) tc_no,rtrim(zy_flag) zy_flag," +
             "rtrim(mz_flag) mz_flag from jy_item_charge WITH(NOLOCK) where  charge_code <> '' and charge_code is not null and code=#{code} ")
-    List<JcJyItemCharge> selectJcJyItemChargeByCode(@Param("code") String code);
+    List<JcJyItemCharge> selectJyItemChargeByCode(@Param("code") String code);
 
     /**
      * 根据检查编码查询检查项目的明细

+ 6 - 6
src/main/java/cn/hnthyy/thmz/mapper/his/zd/ZdChargeItemMapper.java

@@ -20,7 +20,7 @@ public interface ZdChargeItemMapper {
      * @return
      */
     @Select({"<script>",
-            "SELECT top ${pageSize} code,name,exec_unit,audit_code,charge_amount,effective_date,effective_amount,percentag1,percentag2,percentag3,percentag4,percentag5," +
+            "SELECT top ${pageSize} rtrim(code) code,name,exec_unit,audit_code,charge_amount,effective_date,effective_amount,percentag1,percentag2,percentag3,percentag4,percentag5," +
                     "            rtrim(self_flag) self_flag,rtrim(separate_flag) separate_flag,rtrim(suppress_flag) suppress_flag,py_code,d_code wb_code,bill_item_zy,bill_item_mz," +
                     "            charge_unit,percent_group_zy,percent_group_mz,rtrim(case  when in_out_flag ='' then null else in_out_flag end) in_out_flag,n_code yn_code,class_code,s_code bz_code,discription,rtrim(del_flag) del_flag," +
                     "            rtrim(yp_flag) yp_flag,bill_item_code,rtrim(xnh_flag) xnh_flag,add_date,hnsyb_code,hnsyb_name,xnh_code,xnh_name,xnh_ratio,xnh_quotamoney,rtrim(xnh_status) xnh_status," +
@@ -97,7 +97,7 @@ public interface ZdChargeItemMapper {
      * @param code
      * @return
      */
-    @Select("select code,name,exec_unit,audit_code,charge_amount,effective_date,effective_amount,percentag1,percentag2,percentag3,percentag4,percentag5," +
+    @Select("select rtrim(code) code,name,exec_unit,audit_code,charge_amount,effective_date,effective_amount,percentag1,percentag2,percentag3,percentag4,percentag5," +
             "rtrim(self_flag) self_flag,rtrim(separate_flag) separate_flag,rtrim(suppress_flag) suppress_flag,py_code,d_code wb_code,bill_item_zy,bill_item_mz," +
             "charge_unit,percent_group_zy,percent_group_mz,rtrim(case  when in_out_flag ='' then null else in_out_flag end) in_out_flag,n_code yn_code,class_code,s_code bz_code,discription,rtrim(del_flag) del_flag, " +
             "rtrim(yp_flag) yp_flag,bill_item_code,rtrim(xnh_flag) xnh_flag,add_date,hnsyb_code,hnsyb_name,xnh_code,xnh_name,xnh_ratio,xnh_quotamoney,rtrim(xnh_status) xnh_status," +
@@ -113,7 +113,7 @@ public interface ZdChargeItemMapper {
      * @return
      */
     @Select({"<script>",
-            "select code,name,exec_unit,audit_code,charge_amount,effective_date,effective_amount,percentag1,percentag2,percentag3,percentag4,percentag5,",
+            "select rtrim(code) code,name,exec_unit,audit_code,charge_amount,effective_date,effective_amount,percentag1,percentag2,percentag3,percentag4,percentag5,",
             "rtrim(self_flag) self_flag,rtrim(separate_flag) separate_flag,rtrim(suppress_flag) suppress_flag,py_code,d_code wb_code,bill_item_zy,bill_item_mz,",
             "charge_unit,percent_group_zy,percent_group_mz,rtrim(case  when in_out_flag ='' then null else in_out_flag end) in_out_flag,n_code yn_code,class_code,s_code bz_code,discription,rtrim(del_flag) del_flag, ",
             "rtrim(yp_flag) yp_flag,bill_item_code,rtrim(xnh_flag) xnh_flag,add_date,hnsyb_code,hnsyb_name,xnh_code,xnh_name,xnh_ratio,xnh_quotamoney,rtrim(xnh_status) xnh_status,",
@@ -125,7 +125,7 @@ public interface ZdChargeItemMapper {
             "#{item}",
             "</foreach>",
             "</when>",
-            "</script>"})
+            " order by charge_amount desc </script>"})
     List<ZdChargeItem> selectZdChargeItemByCodeList(@Param("codes") List<String> codes);
 
 
@@ -251,7 +251,7 @@ public interface ZdChargeItemMapper {
      * @return
      */
     @Select({"<script>",
-            "SELECT  code,name,exec_unit,audit_code,charge_amount,effective_date,effective_amount,percentag1,percentag2,percentag3,percentag4,percentag5," +
+            "SELECT  rtrim(code) code,name,exec_unit,audit_code,charge_amount,effective_date,effective_amount,percentag1,percentag2,percentag3,percentag4,percentag5," +
                     "            rtrim(self_flag) self_flag,rtrim(separate_flag) separate_flag,rtrim(suppress_flag) suppress_flag,py_code,d_code wb_code,bill_item_zy,bill_item_mz," +
                     "            charge_unit,percent_group_zy,percent_group_mz,rtrim(case  when in_out_flag ='' then null else in_out_flag end) in_out_flag,n_code yn_code,class_code,s_code bz_code,discription,rtrim(del_flag) del_flag," +
                     "            rtrim(yp_flag) yp_flag,bill_item_code,rtrim(xnh_flag) xnh_flag,add_date,hnsyb_code,hnsyb_name,xnh_code,xnh_name,xnh_ratio,xnh_quotamoney,rtrim(xnh_status) xnh_status," +
@@ -278,7 +278,7 @@ public interface ZdChargeItemMapper {
             "</when>",
             "  code=rtrim(code),name,specification=charge_unit,charge_amount,manufactory=yb_comment,exec_unit,group_no='00' ,type=3  ",
             "    FROM zd_charge_item WITH(NOLOCK)   ",
-            "where  class_code in ('C','D','E','G','F','J')",
+            "where  class_code in ('C','E','G','F','J')",
             "<when test='commonParams!=null'>",
             " and (py_code like #{commonParams} or d_code  like #{commonParams} or code like #{commonParams} or name like #{commonParams} or class_code like #{commonParams}",
             "<when test='letterParamsLowerCase!=null'>",

+ 8 - 7
src/main/java/cn/hnthyy/thmz/service/his/zd/JcJyItemChargeService.java

@@ -11,12 +11,12 @@ import java.util.List;
 import java.util.Map;
 
 public interface JcJyItemChargeService {
-    /**根据单个编号查询收费编码
-     * @param code
-     * @param reqType
-     * @return
-     */
-    List<JcJyItemCharge> queryJcItemChargeByCode(String code, String reqType);
+//    /**根据单个编号查询收费编码
+//     * @param code
+//     * @param reqType
+//     * @return
+//     */
+//    List<JcJyItemCharge> queryJcItemChargeByCode(String code, String reqType);
 
     /**
      * 根据项目编码集合查询所含的收费编码集合
@@ -38,9 +38,10 @@ public interface JcJyItemChargeService {
     /**
      * 根据检查检验编码查询对应的收费明细项目
      * @param code
+     * @param jcJyZltype 1 检验 2 检查
      * @return
      */
-    List<ZdChargeItem> queryJcJyItemChargeByCode(String code) throws MzException;
+    List<ZdChargeItem> queryJcJyItemChargeByCode(String code,Integer jcJyZltype) throws MzException;
 
 
     /**

+ 418 - 266
src/main/java/cn/hnthyy/thmz/service/impl/his/mz/MzChargeDetailServiceImpl.java

@@ -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;
-    }
 
     /**
      * 是否需要加价

+ 11 - 6
src/main/java/cn/hnthyy/thmz/service/impl/his/zd/JcJyItemChargeServiceImpl.java

@@ -62,10 +62,10 @@ public class JcJyItemChargeServiceImpl implements JcJyItemChargeService {
     private EmployeeService employeeService;
     @Autowired
     private InspectionsService inspectionsService;
-    @Override
-    public List<JcJyItemCharge> queryJcItemChargeByCode(String code, String reqType) {
-        return jcJyItemChargeMapper.selectJcItemChargeByCode(code, reqType, ReqTypeEnum.JIAN_CHA.code.equals(reqType) ? "jc_item_charge" : "jy_item_charge");
-    }
+//    @Override
+//    public List<JcJyItemCharge> queryJcItemChargeByCode(String code, String reqType) {
+//        return jcJyItemChargeMapper.selectJcItemChargeByCode(code, reqType, ReqTypeEnum.JIAN_CHA.code.equals(reqType) ? "jc_item_charge" : "jy_item_charge");
+//    }
 
     @Override
     public List<JcJyItemCharge> queryJcItemChargeByCodeList(List<String> codes, String reqType) {
@@ -103,11 +103,16 @@ public class JcJyItemChargeServiceImpl implements JcJyItemChargeService {
     }
 
     @Override
-    public List<ZdChargeItem> queryJcJyItemChargeByCode(String code) throws MzException {
+    public List<ZdChargeItem> queryJcJyItemChargeByCode(String code,Integer jcJyZltype) throws MzException {
         if (StringUtils.isBlank(code)) {
             throw new MzException("诊疗与医技编码为空!");
         }
-        List<JcJyItemCharge> jcJyItemChargeList = jcJyItemChargeMapper.selectJcJyItemChargeByCode(code);
+        List<JcJyItemCharge> jcJyItemChargeList = null;
+        if(jcJyZltype==1){
+            jcJyItemChargeList= jcJyItemChargeMapper.selectJyItemChargeByCode(code);
+        }else if(jcJyZltype==2){
+            jcJyItemChargeList= jcJyItemChargeMapper.selectJcItemChargeByCode(code);
+        }
         if (jcJyItemChargeList == null || jcJyItemChargeList.size() == 0) {
             return null;
         }

+ 25 - 10
src/main/resources/static/js/mz/clinic.js

@@ -1606,16 +1606,18 @@ function editPrescription(jsonData, type) {
             for (var i = 0; i < mzYjReqList.length; i++) {
                 var mzYjReq = mzYjReqList[i];
                 var code = mzYjReq.orderCode;
+                var jcJyZltype = null;
                 if (mzYjReq.reqType == 2) {
-                    $("#jcJyZltype").val(1);
+                    jcJyZltype = 1;
                     $("#jyZdSample").selectpicker('val', mzYjReq.inspectStuff);
                     $('#jyZdSample').selectpicker('refresh');
                 } else if (mzYjReq.reqType == 3) {
-                    $("#jcJyZltype").val(2);
+                    jcJyZltype = 2;
                     $("#yshPart").selectpicker('val', mzYjReq.inspectPart);
                     $('#yshPart').selectpicker('refresh');
                 }
-                checkJcJyItemInfo(code, null, null, false);
+                $("#jcJyZltype").val(jcJyZltype);
+                checkJcJyItemInfo(code, null, jcJyZltype, false);
                 $("#remark").val(mzYjReq.jyRemark);
                 if (mzYjReq.execDept != null && mzYjReq.execDept != "") {
                     $("#execUnit").selectpicker('val', mzYjReq.execDept);
@@ -2697,7 +2699,7 @@ function saveJyJcItem(calculateTotalAmountFlag) {
     if (patientAge != null && patientAge != "" && patientAge < 6) {
         $.ajax({
             type: "GET",
-            url: '/thmz/checkAdditionally?code=' + $("#current_code").val(),
+            url: '/thmz/checkAdditionally?code=' + $("#current_code").val() + "&jcJyZltype=" + $("#jcJyZltype").val(),
             contentType: "application/json;charset=UTF-8",
             dataType: "json",
             headers: {'Accept': 'application/json', 'Authorization': 'Bearer ' + localStorage.getItem("token")},
@@ -2835,7 +2837,7 @@ function saveJyJcItemReal(calculateTotalAmountFlag) {
     html += '<i class="fa fa-long-arrow-down" style="cursor: pointer;height: 20px;line-height: 20px;width: 20px;font-size: 20px;" onclick="arrowDown(this)"></i>';
     html += ' <i class="fa fa-long-arrow-left" style="cursor: pointer;height: 20px;line-height: 20px;width: 20px;font-size: 20px;" onclick="editJyJcItem(this)"></i>';
     if ($("#jcJyItemChargeDetail").hasClass("in")) {
-        html += '<i class="fa fa-eye" style="cursor: pointer;height: 20px;line-height: 20px;width: 20px;font-size: 20px;margin-left: 10px;" onclick="getJcJyItemChargeByCode(\'' + currentCode + '\')"></i>';
+        html += '<i class="fa fa-eye" style="cursor: pointer;height: 20px;line-height: 20px;width: 20px;font-size: 20px;margin-left: 10px;" onclick="getJcJyItemChargeByCode(\'' + currentCode + '\',' + jcJyZltype + ')"></i>';
     }
     html += '<i class="fa fa-remove" style="cursor: pointer;height: 20px;line-height: 20px;width: 20px;font-size: 20px;margin-left: 10px;" onclick="removeYpOrProject(2,this)"></i>';
     html += '<input type="hidden" class="temporary_items_code" value="' + currentCode + '"/>';
@@ -4599,7 +4601,7 @@ function checkJcJyItemInfo(code, name, type, async) {
     $("#treeButton").webuiPopover('hide');
     $.ajax({
         type: "GET",
-        url: '/thmz/getJcJyItemChargeByCode?code=' + code,
+        url: '/thmz/getJcJyItemChargeByCode?code=' + code + '&jcJyZltype=' + type,
         contentType: "application/json;charset=UTF-8",
         dataType: "json",
         headers: {'Accept': 'application/json', 'Authorization': 'Bearer ' + localStorage.getItem("token")},
@@ -4646,10 +4648,12 @@ function checkJcJyItemInfo(code, name, type, async) {
 /**
  * 查询诊疗与医技项目明细
  * @param code 编码
+ * @param jcJyZltype 1 检验 2 检查
  */
-function getJcJyItemChargeByCode(code) {
+function getJcJyItemChargeByCode(code, jcJyZltype) {
     if (code != null) {
         $("#itemCodeSearch").val(code);
+        $("#jcJyZltypeSearch").val(jcJyZltype);
     } else if ($("#current_code").val() == null || $("#current_code").val() == '') {
         errorMesageSimaple("未选中任何项目!");
         return;
@@ -4667,11 +4671,14 @@ function getJcJyItemChargeByCode(code) {
         sortOrder: "asc",                   //排序方式
         queryParams: function (params) {
             var itemCodeSearch = $("#itemCodeSearch").val();
+            var jcJyZltypeSearch = $("#jcJyZltypeSearch").val();
             if (itemCodeSearch == null || itemCodeSearch == "") {
                 itemCodeSearch = $("#current_code").val();
+                jcJyZltypeSearch = $("#jcJyZltype").val();
             }
             var temp = {
-                code: itemCodeSearch
+                code: itemCodeSearch,
+                jcJyZltype: jcJyZltypeSearch
             };
             return temp;
         },           //传递参数(*)
@@ -6531,8 +6538,16 @@ function prescriptionDetailCommon(patientId, times, clnicId, payMark, type) {
                         });
                     }
                 }
-                //默认不展开打印设置
-                $("#setupId").click();
+                if ($("#setupId").hasClass("fa-chevron-up")) {
+                    //默认不展开打印设置
+                    $("#setupId").parent().click();
+                }
+                // setTimeout(function () {
+                //     if ($("#setupId").hasClass("fa-chevron-up")) {
+                //         //默认不展开打印设置
+                //         $("#setupId").parent().click();
+                //     }
+                // }, 400);
             } else {
                 errorMesage(res);
             }

+ 2 - 2
src/main/resources/static/js/mz/jc_jy_zd_class.js

@@ -257,8 +257,8 @@ function initJcZdClassList() {
                 align: "center",
                 valign: 'middle',
                 formatter: function (value, row, index) {
-                    var str = '<button type="button" class="btn btn-primary  btn-sm" onclick="editJcMenu(' + row.code + ')">编辑</button>';
-                    str += '<button type="button" class="btn btn-warning  btn-sm" onclick="deleteJcMenu(' + row.code + ')">删除</button>';
+                    var str = '<button type="button" class="btn btn-primary  btn-sm" onclick="editJcMenu(\'' + row.code + '\')">编辑</button>';
+                    str += '<button type="button" class="btn btn-warning  btn-sm" onclick="deleteJcMenu(\'' + row.code + '\')">删除</button>';
                     return [str].join('');
                 }
             },

+ 2 - 1
src/main/resources/templates/mz/clinic.html

@@ -1296,7 +1296,7 @@
                     <div class="x_title">
                         <span>打印设置 </span>
                         <ul class="nav navbar-right panel_toolbox">
-                            <li><a class="collapse-link" id="setupId"><i class="fa fa-chevron-up"></i></a>
+                            <li><a class="collapse-link"><i class="fa fa-chevron-up" id="setupId"></i></a>
                             </li>
                         </ul>
                         <div class="clearfix"></div>
@@ -1522,6 +1522,7 @@
                     <table id="jcJyItemTable"></table>
                     <!-- 用来查看已经保存到 处方区域的项目明细-->
                     <input type="hidden" id="itemCodeSearch"/>
+                    <input type="hidden" id="jcJyZltypeSearch"/>
                 </form>
             </div>
             <div class="modal-footer">