Sfoglia il codice sorgente

门诊收费缺陷修复,同一收费编码退费,医生处方变化收费

hurugang 5 anni fa
parent
commit
9eadeadcd3

+ 1 - 1
src/main/java/cn/hnthyy/thmz/controller/MzChargeDetailController.java

@@ -126,7 +126,7 @@ public class MzChargeDetailController {
         } catch (MzException e) {
             log.error("查询费用列表失败,错误信息{}", e);
             resultMap.put("code", -1);
-            resultMap.put("message", "查询费用列表失败" + e.getMessage());
+            resultMap.put("message", "查询费用列表失败" + e.getMessage()+"】");
             return resultMap;
         } catch (Exception e) {
             e.printStackTrace();

+ 194 - 0
src/main/java/cn/hnthyy/thmz/controller/api/MedicalViewApiController.java

@@ -0,0 +1,194 @@
+package cn.hnthyy.thmz.controller.api;
+
+
+import cn.hnthyy.thmz.comment.UserLoginToken;
+import cn.hnthyy.thmz.entity.his.MzPatientMi;
+import cn.hnthyy.thmz.enums.YesNoEnum;
+import cn.hnthyy.thmz.service.his.MzPatientMiService;
+import lombok.Data;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@RestController
+@RequestMapping("/api/v1")
+public class MedicalViewApiController {
+    @Autowired
+    private MzPatientMiService mzPatientMiService;
+    //海慈身份证类型
+    private static final String ID_CARD_TYPE="11";
+    //海慈参数男性
+    private static final String MAN="M";
+    //海慈参数女性
+    private static final String WONMAN="F";
+    //海慈参数成年人
+    private static final String PERSON="1";
+    //海慈参数儿童
+    private static final String CHILD="2";
+    /**
+     * 患者信息查询
+     * @param itemType
+     * @param itemNo
+     * @return
+     */
+    @UserLoginToken
+    @RequestMapping(value="/queryPatientInfo/{itemType}/{itemNo}",method = {RequestMethod.GET})
+    public Map<String,Object> queryGkh(@PathVariable String itemType,@PathVariable String itemNo) {
+        Map<String,Object> results = new HashMap<>();
+        if(StringUtils.isBlank(itemType)){
+            results.put("resultCode",-1);
+            results.put("resultMessage","顾客证件类型不能为空");
+            return results;
+        }
+        if(StringUtils.isBlank(itemNo)){
+            results.put("resultCode",-1);
+            results.put("resultMessage","顾客证件号码不能为空");
+            return results;
+        }
+        if(!ID_CARD_TYPE.equals(itemType)){
+            results.put("resultCode",-1);
+            results.put("resultMessage","顾客证件号码非身份证,暂不支持");
+            return results;
+        }
+        List<MzPatientMi> mzPatientMis = mzPatientMiService.queryBySocialNo(itemNo,null);
+        if(mzPatientMis==null || mzPatientMis.size()==0){
+            results.put("resultCode",-1);
+            results.put("resultMessage","没有查询到病人信息");
+            return results;
+        }
+        results.put("resultCode",0);
+        MzPatientMi mzPatientMi=mzPatientMis.get(0);
+        results.put("patName",mzPatientMi.getName());
+        results.put("patSex", YesNoEnum.YES.code.equals(mzPatientMi.getSex())?MAN:WONMAN);
+        results.put("patAge",mzPatientMi.getAge());
+        results.put("patBirth",mzPatientMi.getBirthDayStr());
+        results.put("patAddress",mzPatientMi.getAddress());
+        results.put("patMobile",mzPatientMi.getPhoneNo());
+        results.put("patIdType",YesNoEnum.YES.code);
+        results.put("patIdNo",mzPatientMi.getSocialNo());
+        results.put("patCardType",YesNoEnum.YES.code);
+        results.put("patCardNo",mzPatientMi.getIcCardNo());
+        return results;
+    }
+
+    /**
+     * 首诊患者建档
+     * @param haicipat
+     * @return
+     */
+    @UserLoginToken
+    @RequestMapping(value="/tjlb/{gkh}",method = {RequestMethod.POST})
+    public Map<String,Object> tjlbView(Haicipat haicipat) {
+        Map<String,Object> results = new HashMap<>();
+        if(haicipat==null){
+            results.put("resultCode",-1);
+            results.put("resultMessage","建档参数为空");
+            return results;
+        }
+        if(StringUtils.isBlank(haicipat.getPatType())){
+            results.put("resultCode",-1);
+            results.put("resultMessage","患者类型不能为空");
+            return results;
+        }
+        if(StringUtils.isBlank(haicipat.getPatName())){
+            results.put("resultCode",-1);
+            results.put("resultMessage","患者姓名不能为空");
+            return results;
+        }
+        if(StringUtils.isBlank(haicipat.getPatSex())){
+            results.put("resultCode",-1);
+            results.put("resultMessage","患者性别不能为空");
+            return results;
+        }
+        if(StringUtils.isBlank(haicipat.getPatAge())){
+            results.put("resultCode",-1);
+            results.put("resultMessage","患者年龄不能为空");
+            return results;
+        }
+        if(StringUtils.isBlank(haicipat.getPatBirth())){
+            results.put("resultCode",-1);
+            results.put("resultMessage","患者出生日期不能为空");
+            return results;
+        }
+        if(StringUtils.isBlank(haicipat.getPatAddress())){
+            results.put("resultCode",-1);
+            results.put("resultMessage","患者地址不能为空");
+            return results;
+        }
+        if(StringUtils.isBlank(haicipat.getPatMobile())){
+            results.put("resultCode",-1);
+            results.put("resultMessage","患者电话不能为空");
+            return results;
+        }
+        if(PERSON.equals(haicipat.getPatType()) && StringUtils.isBlank(haicipat.getPatIdType())){
+            results.put("resultCode",-1);
+            results.put("resultMessage","患者证件类型不能为空");
+            return results;
+        }
+        if(PERSON.equals(haicipat.getPatType()) && StringUtils.isBlank(haicipat.getPatIdNo())){
+            results.put("resultCode",-1);
+            results.put("resultMessage","患者证件号码不能为空");
+            return results;
+        }
+        if(CHILD.equals(haicipat.getPatType()) && StringUtils.isBlank(haicipat.getGuardName())){
+            results.put("resultCode",-1);
+            results.put("resultMessage","患者监护人姓名不能为空");
+            return results;
+        }
+        if(CHILD.equals(haicipat.getPatType()) && StringUtils.isBlank(haicipat.getGuardIdType())){
+            results.put("resultCode",-1);
+            results.put("resultMessage","患者监护人证件类型不能为空");
+            return results;
+        }
+        if(CHILD.equals(haicipat.getPatType()) && StringUtils.isBlank(haicipat.getGuardIdNo())){
+            results.put("resultCode",-1);
+            results.put("resultMessage","患者监护人证件号码不能为空");
+            return results;
+        }
+
+        results.put("code",0);
+        //results.put("data",medicalViewService.listByGkh(gkh));
+        return results;
+    }
+
+
+    /**
+     * 海慈参数类
+     */
+    @Data
+    private class Haicipat{
+        //患者类型 1:成人 2:儿童
+        private String patType;
+        //姓名
+        private String patName;
+        //性别 M:男,F:女
+        private String patSex;
+        //年龄
+        private String patAge;
+        //出生日期
+        private String patBirth;
+        //地址
+        private String patAddress;
+        //电话
+        private String patMobile;
+        //证件类型 1:二代身份证 2:港澳居民身份证 3:台湾居民身份证 4:护照 患者类型为“2”儿童时,该项允许为空
+        private String patIdType;
+        //证件号码 患者类型为“2”儿童时,该项允许为空
+        private String patIdNo;
+        //监护人姓名 患者类型为“2”儿童时,该项必输
+        private String guardName;
+        // 监护人证件类型  患者类型为“2”儿童时,该项必输
+        private String guardIdType;
+        //监护人证件号码 患者类型为“2”儿童时,该项必输
+        private String guardIdNo;
+
+
+    }
+
+}

+ 1 - 0
src/main/java/cn/hnthyy/thmz/mapper/his/MzPatientMiMapper.java

@@ -135,6 +135,7 @@ public interface MzPatientMiMapper {
                "<when test='patientId!=null'>",
                    " and patient_id <![CDATA[<>]]> #{patientId,jdbcType=CHAR}",
                "</when>",
+            " order by lv_date desc ",
             "</script>"})
     List<MzPatientMi> selectBySocialNo(@Param("socialNo") String socialNo,@Param("patientId") String patientId);
 

+ 1 - 1
src/main/java/cn/hnthyy/thmz/mapper/his/MzYjReqMapper.java

@@ -39,7 +39,7 @@ public interface MzYjReqMapper {
             "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 from mz_yj_req where pay_mark='5' and status_flag <![CDATA[<>]]> 'z'",
+            "percent_ft,rtrim(confirm_flag) confirm_flag,confirm_time,confirm_id,rtrim(print_flag_yj) print_flag_yj from mz_yj_req where pay_mark='5' and status_flag <![CDATA[<>]]> 'z' ",
             "<when test='times!=null'>",
             " and times =#{times,jdbcType=SMALLINT}",
             "</when>",

+ 50 - 47
src/main/java/cn/hnthyy/thmz/service/impl/his/MzChargeDetailServiceImpl.java

@@ -167,12 +167,12 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
      */
     @Override
     public MzChargeDetail unPaidToFullChargeDetail(MzChargeDetail mzChargeDetail) throws MzException {
-        MzVisitTable mzVisitTable=mzVisitTableMapper.selectByPatientIdAndTimes(mzChargeDetail.getPatientId(), mzChargeDetail.getTimes());
-        if(mzVisitTable==null){
+        MzVisitTable mzVisitTable = mzVisitTableMapper.selectByPatientIdAndTimes(mzChargeDetail.getPatientId(), mzChargeDetail.getTimes());
+        if (mzVisitTable == null) {
             throw new MzException("当前病人就诊基础资料【MzVisitTable】不存在,请检查");
         }
-        Integer receiptNo =mzVisitTable.getReceiptNo()+1;
-        List<MzChargeDetail> mzChargeDetails = getMzChargeDetails(mzChargeDetail, YesNoEnum.YES,receiptNo);
+        Integer receiptNo = mzVisitTable.getReceiptNo() + 1;
+        List<MzChargeDetail> mzChargeDetails = getMzChargeDetails(mzChargeDetail, YesNoEnum.YES, receiptNo);
         if (mzChargeDetails == null || mzChargeDetails.size() == 0) {
             return null;
         }
@@ -210,7 +210,7 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
      * @return
      * @throws MzException
      */
-    private List<MzChargeDetail> getMzChargeDetails(MzChargeDetail mzChargeDetail, YesNoEnum yesNo,Integer receiptNo) throws MzException {
+    private List<MzChargeDetail> getMzChargeDetails(MzChargeDetail mzChargeDetail, YesNoEnum yesNo, Integer receiptNo) throws MzException {
         if (mzChargeDetail == null || mzChargeDetail.getPatientId() == null || mzChargeDetail.getTimes() == null) {
             throw new MzException("病人编号和就诊次数不能为空!");
         }
@@ -227,7 +227,7 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
             maxOrderNo = firstMzChargeDetail.getOrderNo();
             priceId = firstMzChargeDetail.getPriceId();
             priceTime = firstMzChargeDetail.getPriceTime();
-            itemNo = formatSupplyFee(mzChargeDetails, mzChargeDetailList, itemNo,receiptNo);
+            itemNo = formatSupplyFee(mzChargeDetails, mzChargeDetailList, itemNo, receiptNo);
         }
         maxOrderNo++;
         Map<String, MzYjReq> mzYjReqMap = new HashMap<>();
@@ -241,14 +241,14 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
                 if (mzYjReq != null && mzYjReq.getPercentFt() == null) {
                     String temp = maxOrderNo.toString();
                     temp = temp + index++;
-                    itemNo = formatYjChargeDetail(mzChargeDetail, mzChargeDetails, maxOrderNo, mzPatientMi, itemNo, jianYans, jianChas, mzYjReq, temp, priceId, priceTime, tcNoMap,receiptNo);
+                    itemNo = formatYjChargeDetail(mzChargeDetail, mzChargeDetails, maxOrderNo, mzPatientMi, itemNo, jianYans, jianChas, mzYjReq, temp, priceId, priceTime, tcNoMap, receiptNo);
                     mzYjReqMap.put(mzYjReq.getOrderCode(), mzYjReq);
                 }
             }
             List<JcJyItemCharge> jcJyItemCharges = null;
             if (jianYans.size() > 0) {
                 jcJyItemCharges = jcJyItemChargeService.queryJcItemChargeByCodeList(jianYans, ReqTypeEnum.JIAN_YAN.code);
-                itemNo = formatCxFeeItem(mzChargeDetail, mzChargeDetails, mzPatientMi, maxOrderNo, itemNo, mzYjReqMap, jianYans, tcNoMap, priceId, priceTime,receiptNo);
+                itemNo = formatCxFeeItem(mzChargeDetail, mzChargeDetails, mzPatientMi, maxOrderNo, itemNo, mzYjReqMap, jianYans, tcNoMap, priceId, priceTime, receiptNo);
             }
             if (jianChas.size() > 0) {
                 List<JcJyItemCharge> temps = jcJyItemChargeService.queryJcItemChargeByCodeList(jianChas, ReqTypeEnum.JIAN_CHA.code);
@@ -260,7 +260,7 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
             }
             if (jcJyItemCharges != null && jcJyItemCharges.size() > 0) {
                 for (JcJyItemCharge jcJyItemCharge : jcJyItemCharges) {
-                    itemNo = formatYjDetailChargeDetail(mzChargeDetail, mzChargeDetails, maxOrderNo, mzPatientMi, itemNo, mzYjReqMap, jcJyItemCharge, tcNoMap, priceId, priceTime,receiptNo);
+                    itemNo = formatYjDetailChargeDetail(mzChargeDetail, mzChargeDetails, maxOrderNo, mzPatientMi, itemNo, mzYjReqMap, jcJyItemCharge, tcNoMap, priceId, priceTime, receiptNo);
                 }
             }
         }
@@ -309,8 +309,8 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
     }
 
     @Override
-    public List<MzChargeDetail> queryMzChargeDetailByBillItemCode(String patientId, Integer times,Integer receiptNo, String payMark, String billItemCode, List<String> billItemTypes) {
-        return mzChargeDetailMapper.selectMzChargeDetailByBillItemCode(patientId, times,receiptNo, payMark, billItemCode, billItemTypes);
+    public List<MzChargeDetail> queryMzChargeDetailByBillItemCode(String patientId, Integer times, Integer receiptNo, String payMark, String billItemCode, List<String> billItemTypes) {
+        return mzChargeDetailMapper.selectMzChargeDetailByBillItemCode(patientId, times, receiptNo, payMark, billItemCode, billItemTypes);
     }
 
     @Override
@@ -320,14 +320,14 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
         if (windows == null) {
             throw new MzException("当前操作人未设置窗口号,请先设置!");
         }
-        MzVisitTable mzVisitTable=mzVisitTableMapper.selectByPatientIdAndTimes(mzDepositFileVo.getPatientId(), mzDepositFileVo.getTimes());
-        if(mzVisitTable==null){
+        MzVisitTable mzVisitTable = mzVisitTableMapper.selectByPatientIdAndTimes(mzDepositFileVo.getPatientId(), mzDepositFileVo.getTimes());
+        if (mzVisitTable == null) {
             throw new MzException("当前病人就诊基础资料【MzVisitTable】不存在,请检查");
         }
-        Integer receiptNo =mzVisitTable.getReceiptNo()+1;
+        Integer receiptNo = mzVisitTable.getReceiptNo() + 1;
         //入库收费明细数据开始
         MzChargeDetail mzChargeDetail = new MzChargeDetail(mzDepositFileVo.getPatientId(), mzDepositFileVo.getTimes());
-        List<MzChargeDetail> mzChargeDetails = getMzChargeDetails(mzChargeDetail, YesNoEnum.NO,receiptNo);
+        List<MzChargeDetail> mzChargeDetails = getMzChargeDetails(mzChargeDetail, YesNoEnum.NO, receiptNo);
         getMzChargeDetailService().saveMzChargeDetail(mzChargeDetails);
         mzChargeDetail.setPrintFlag(YesNoEnum.NO.code.toString());
         mzChargeDetail.setReceiptNo(receiptNo);
@@ -344,14 +344,14 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
         int serialNo = mzSerialNoService.getSerialNo();
         MzReceiptSerial mzReceiptSerial = new MzReceiptSerial();
         //实际支付金额 收银员收的钱
-        BigDecimal hadPayable = getHadPayable(opId, mzDepositFileVo, windows, mzPatientMi, feeMap, now, serialNo, mzReceiptSerial,receiptNo);
-        if (hadPayable.compareTo(totalPayable) == -1) {
-            throw new MzException("收款金额不足,实际应支付" + totalPayable.toString() + "元,但是实际只收了" + hadPayable.toString() + "元");
+        BigDecimal hadPayable = getHadPayable(opId, mzDepositFileVo, windows, mzPatientMi, feeMap, now, serialNo, mzReceiptSerial, receiptNo);
+        if (hadPayable.compareTo(totalPayable) != 0) {
+            throw new MzException("收款金额有误,实际应付" + totalPayable.toString() + "元,实收" + hadPayable.toString() + "元,患者处方有修改,请重新刷当前病人收费数据");
         }
         getMzChargeDetailService().updateChargeFlag(opId, mzDepositFileVo.getPatientId(), mzDepositFileVo.getTimes(), mzPatientMi.getName(), mzChargeDetailList, now, serialNo, mzReceiptSerial.getChequeType(), null);
         getMzChargeDetailService().afterChargeFee(mzDepositFileVo.getPatientId(), mzDepositFileVo.getTimes(), mzDepositFileVo.getMzDepositFiles(), now, serialNo, mzReceiptSerial, totalPayable);
         if (Constants.JZ_IC_CARD.equals(mzPatientMi.getIcCardNo())) {
-           mzChargeDetailMapper.updateNameByPatientIdAndTimes(mzPatientMi.getName(),mzDepositFileVo.getPatientId(), mzDepositFileVo.getTimes());
+            mzChargeDetailMapper.updateNameByPatientIdAndTimes(mzPatientMi.getName(), mzDepositFileVo.getPatientId(), mzDepositFileVo.getTimes());
         }
         return 1;
     }
@@ -370,7 +370,7 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
     @Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT, timeout = 36000, rollbackFor = Exception.class)
     @Override
     public void afterChargeFee(String patientId, Integer times, List<MzDepositFile> mzDepositFiles, Date now, int serialNo, MzReceiptSerial mzReceiptSerial, BigDecimal totalPayable) throws MzException {
-        if(mzDepositFileMapper.selectBySameParams(mzDepositFiles.get(0))>0){
+        if (mzDepositFileMapper.selectBySameParams(mzDepositFiles.get(0)) > 0) {
             throw new MzException("当前病人本次处方已经成功缴费,无需重复缴费");
         }
         MzYjReq updateMzYjReq = new MzYjReq(patientId, times);
@@ -427,8 +427,8 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
         //如果有欠费记账的收费,新增退费重收记录
 //        List<MzChargeDetail> newMzChargeDetailList = getMzChargeDetails(opId, mzDepositFileVo, now, serialNo);
 //        getMzChargeDetailService().saveMzChargeDetail(newMzChargeDetailList);
-        List<MzDepositFile> newMzDepositFileList = getMzDepositFiles(mzDepositFileVo, now, serialNo,opId);
-        if(newMzDepositFileList.size()>0 && mzDepositFileMapper.selectBySameParams(newMzDepositFileList.get(0))>0){
+        List<MzDepositFile> newMzDepositFileList = getMzDepositFiles(mzDepositFileVo, now, serialNo, opId);
+        if (newMzDepositFileList.size() > 0 && mzDepositFileMapper.selectBySameParams(newMzDepositFileList.get(0)) > 0) {
             throw new MzException("当前病人本次处方已经成功缴费,无需重复缴费");
         }
         mzDepositFileService.batchSaveMzDepositFile(newMzDepositFileList);
@@ -478,19 +478,19 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
 
     @Override
     @Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT, timeout = 36000, rollbackFor = Exception.class)
-    public int modifyNameByPatientIdAndTimes(String name,String patientId,Integer times) {
-         mzChargeDetailMapper.updateNameByPatientIdAndTimes(name,patientId,times);
+    public int modifyNameByPatientIdAndTimes(String name, String patientId, Integer times) {
+        mzChargeDetailMapper.updateNameByPatientIdAndTimes(name, patientId, times);
         MzPatientMi mzPatientMi = new MzPatientMi();
         mzPatientMi.setPatientId(patientId);
         mzPatientMi.setTimes(times);
         mzPatientMi.setName(name);
         mzPatientMiMapper.updateMzPatientMi(mzPatientMi);
-        return  mzYjReqMapper.updateNameByPatientIdAndTimes(name,patientId,times);
+        return mzYjReqMapper.updateNameByPatientIdAndTimes(name, patientId, times);
     }
 
     @Override
     public String queryJZName(String patientId, Integer times) {
-        return mzChargeDetailMapper.selectJZName(patientId,times);
+        return mzChargeDetailMapper.selectJZName(patientId, times);
     }
 
     @Override
@@ -596,10 +596,10 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
                 if (ypMzFytjList != null && ypMzFytjList.size() > 0) {
                     for (YpMzFytj ypMzFytj : ypMzFytjList) {
                         List<MzChargeDetail> mzChargeDetails = mzChargeDetailMapper.selectMzChargeDetailByChargeItemCode(ypMzFytj.getPatientId(), ypMzFytj.getTimes(), ypMzFytj.getChargeItemCode(), ypMzFytj.getOrderNo());
-                        if(mzChargeDetails==null || mzChargeDetails.size()==0){
+                        if (mzChargeDetails == null || mzChargeDetails.size() == 0) {
                             continue;
                         }
-                        for (MzChargeDetail mzChargeDetail:mzChargeDetails){
+                        for (MzChargeDetail mzChargeDetail : mzChargeDetails) {
                             Integer syCount = BigDecimal.valueOf(mzChargeDetail.getQuantity()).subtract(mzChargeDetail.getDecAmount() == null ? BigDecimal.ZERO : mzChargeDetail.getDecAmount()).intValue();
                             //皮试药特别逻辑
                             if (Constants.XYF.equals(mzChargeDetail.getBillItemCode())) {
@@ -650,12 +650,12 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
 
     @Override
     public List<MzChargeDetail> getTempMzChargeDetailListForUnPaid(MzChargeDetail mzChargeDetail) throws MzException {
-        MzVisitTable mzVisitTable=mzVisitTableMapper.selectByPatientIdAndTimes(mzChargeDetail.getPatientId(), mzChargeDetail.getTimes());
-        if(mzVisitTable==null){
+        MzVisitTable mzVisitTable = mzVisitTableMapper.selectByPatientIdAndTimes(mzChargeDetail.getPatientId(), mzChargeDetail.getTimes());
+        if (mzVisitTable == null) {
             throw new MzException("当前病人就诊基础资料【MzVisitTable】不存在,请检查");
         }
-        Integer receiptNo =mzVisitTable.getReceiptNo()+1;
-        List<MzChargeDetail> mzChargeDetails = getMzChargeDetails(mzChargeDetail, YesNoEnum.YES,receiptNo);
+        Integer receiptNo = mzVisitTable.getReceiptNo() + 1;
+        List<MzChargeDetail> mzChargeDetails = getMzChargeDetails(mzChargeDetail, YesNoEnum.YES, receiptNo);
         if (mzChargeDetails == null || mzChargeDetails.size() == 0) {
             return null;
         }
@@ -745,7 +745,7 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
             MzReceiptSerial mzReceiptSerial = new MzReceiptSerial();
             String payWay = Constants.CASH;
             payWay = getDeposFiles(opId, mzDepositFileVo, now, times, serialNo, totalPayable, payWay, newMzDepositFiles, allRefund);
-            setMzReceiptSerial(opId, mzDepositFileVo.getPatientId(), times, windows, mzChargeDetails.get(0).getResponceType(), feeMap, now, serialNo, mzReceiptSerial, payWay, totalPayable,1);
+            setMzReceiptSerial(opId, mzDepositFileVo.getPatientId(), times, windows, mzChargeDetails.get(0).getResponceType(), feeMap, now, serialNo, mzReceiptSerial, payWay, totalPayable, 1);
             getMzChargeDetailService().updateChargeFlag(opId, mzDepositFileVo.getPatientId(), times, mzChargeDetails.get(0).getName(), mzChargeDetails, now, serialNo, payWay, mzDepositFileVo.getTimes());
             getMzChargeDetailService().afterChargeFee(mzDepositFileVo.getPatientId(), times, newMzDepositFiles, now, serialNo, mzReceiptSerial, totalPayable);
             MzPatientMi updateMzPatientMi = new MzPatientMi();
@@ -962,7 +962,7 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
         int receiptNo = 1;
         for (MzChargeDetail md : mzChargeDetails) {
             MzChargeDetail temp = null;
-            if (chargeItemCodeList.contains(md.getOrderNo() + "_" + md.getChargeItemCode())) {
+            if (chargeItemCodeList.contains(md.getOrderNo() + "_" + md.getItemNo() + "_" + md.getChargeItemCode())) {
                 if (Constants.XYF.equals(md.getBillItemCode()) || Constants.ZCYF.equals(md.getBillItemCode())) {
                     if (ConfirmFlagEnum.DONE.code.equals(md.getConfirmFlag()) && md.getDecAmount() != null && md.getDecAmount().compareTo(BigDecimal.ZERO) == 1) {
                         Double oriQuantity = md.getQuantity();
@@ -1024,7 +1024,7 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
         }
         List<MzChargeDetail> supplyFeeMzChargeDetails = new ArrayList<>();
         //重新计算给药方式费用
-     //   itemNo = formatSupplyFee(supplyFeeMzChargeDetails, newMzChargeDetailList, itemNo);
+        //   itemNo = formatSupplyFee(supplyFeeMzChargeDetails, newMzChargeDetailList, itemNo);
         formatPriceRoundDetail(new MzChargeDetail(mzDepositFileVo.getPatientId(), times), supplyFeeMzChargeDetails, mzPatientMi, newMzChargeDetailList, 127, itemNo, receiptNo);
 //        List<String> supplyList = supplyFeeMzChargeDetails.stream().filter(u -> StringUtils.isNotBlank(u.getChargeItemCode())).map(u -> u.getChargeItemCode()).collect(Collectors.toList());
 //        List<MzChargeDetail> removeList = new ArrayList<>();
@@ -1238,7 +1238,7 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
      * @param mzReceiptSerial
      * @return
      */
-    private BigDecimal getHadPayable(String opId, MzDepositFileVo mzDepositFileVo, Windows windows, MzPatientMi mzPatientMi, Map<String, BigDecimal> feeMap, Date now, int serialNo, MzReceiptSerial mzReceiptSerial,Integer receiptNo) {
+    private BigDecimal getHadPayable(String opId, MzDepositFileVo mzDepositFileVo, Windows windows, MzPatientMi mzPatientMi, Map<String, BigDecimal> feeMap, Date now, int serialNo, MzReceiptSerial mzReceiptSerial, Integer receiptNo) {
         boolean isBenYuanJiZhang = true;
         String chequeType = null;
         //总收款金额
@@ -1270,7 +1270,7 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
             }
         }
         hadPayable.setScale(2, BigDecimal.ROUND_FLOOR);
-        setMzReceiptSerial(opId, mzDepositFileVo.getPatientId(), mzDepositFileVo.getTimes(), windows, mzPatientMi.getResponseType(), feeMap, now, serialNo, mzReceiptSerial, chequeType, isBenYuanJiZhang ? hadPayable : excludeByjzPay,receiptNo);
+        setMzReceiptSerial(opId, mzDepositFileVo.getPatientId(), mzDepositFileVo.getTimes(), windows, mzPatientMi.getResponseType(), feeMap, now, serialNo, mzReceiptSerial, chequeType, isBenYuanJiZhang ? hadPayable : excludeByjzPay, receiptNo);
         return hadPayable;
     }
 
@@ -1289,7 +1289,7 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
      * @param chequeType
      * @param hadPayable
      */
-    private void setMzReceiptSerial(String opId, String patientId, Integer times, Windows windows, String responseType, Map<String, BigDecimal> feeMap, Date now, int serialNo, MzReceiptSerial mzReceiptSerial, String chequeType, BigDecimal hadPayable,Integer receiptNo) {
+    private void setMzReceiptSerial(String opId, String patientId, Integer times, Windows windows, String responseType, Map<String, BigDecimal> feeMap, Date now, int serialNo, MzReceiptSerial mzReceiptSerial, String chequeType, BigDecimal hadPayable, Integer receiptNo) {
         mzReceiptSerial.setPatientId(patientId);
         mzReceiptSerial.setTimes(times);
         mzReceiptSerial.setReceiptNo(receiptNo);
@@ -1435,7 +1435,7 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
      * @param serialNo
      * @return
      */
-    private List<MzDepositFile> getMzDepositFiles(MzDepositFileVo mzDepositFileVo, Date now, int serialNo,String opId) {
+    private List<MzDepositFile> getMzDepositFiles(MzDepositFileVo mzDepositFileVo, Date now, int serialNo, String opId) {
         List<MzDepositFile> newList = new ArrayList<>();
         List<MzDepositFile> mzDepositFiles = mzDepositFileMapper.selectMzDepositFileByTimes(mzDepositFileVo.getPatientId(), mzDepositFileVo.getTimes(), mzDepositFileVo.getReceiptNo());
         if (mzDepositFiles != null && mzDepositFiles.size() > 0) {
@@ -1623,7 +1623,7 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
      * @param jianYans
      * @return
      */
-    private Integer formatCxFeeItem(MzChargeDetail mzChargeDetail, List<MzChargeDetail> mzChargeDetails, MzPatientMi mzPatientMi, Integer maxOrderNo, Integer itemNo, Map<String, MzYjReq> mzYjReqMap, List<String> jianYans, Map<String, MzChargeDetail> tcNoMap, String priceId, Date priceTime,Integer receiptNo) throws MzException {
+    private Integer formatCxFeeItem(MzChargeDetail mzChargeDetail, List<MzChargeDetail> mzChargeDetails, MzPatientMi mzPatientMi, Integer maxOrderNo, Integer itemNo, Map<String, MzYjReq> mzYjReqMap, List<String> jianYans, Map<String, MzChargeDetail> tcNoMap, String priceId, Date priceTime, Integer receiptNo) throws MzException {
         List<JyZdItem> jyZdItems = jyZdItemService.queryCxTimesByCodeList(jianYans);
         MzYjReq mzYjReq = mzYjReqMap.get(jianYans.get(0));
         if (jyZdItems != null && jyZdItems.size() > 0) {
@@ -1631,13 +1631,13 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
             for (JyZdItem jyZdItem : jyZdItems) {
                 if (jyZdItem != null) {
                     if (StringUtils.isNotBlank(jyZdItem.getVessel()) && !vesselSets.contains(jyZdItem.getVessel())) {
-                        itemNo = formatVesselFee(mzChargeDetail, mzChargeDetails, mzPatientMi, maxOrderNo, itemNo, mzYjReq, vesselSets, jyZdItem, tcNoMap, priceId, priceTime,receiptNo);
+                        itemNo = formatVesselFee(mzChargeDetail, mzChargeDetails, mzPatientMi, maxOrderNo, itemNo, mzYjReq, vesselSets, jyZdItem, tcNoMap, priceId, priceTime, receiptNo);
                     }
                 }
             }
             ZdChargeItem zdChargeItem = zdChargeItemService.queryZdChargeItemByCode("008910");
             if (zdChargeItem == null) {
-              //  throw new MzException("【收费编码:008910】不存在,请联系物价科确认!");
+                //  throw new MzException("【收费编码:008910】不存在,请联系物价科确认!");
                 return itemNo;
             }
             if (YesNoEnum.YES.code.equals(zdChargeItem.getDelFlag())) {
@@ -1707,7 +1707,7 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
      * @param jyZdItem
      * @return
      */
-    private Integer formatVesselFee(MzChargeDetail mzChargeDetail, List<MzChargeDetail> mzChargeDetails, MzPatientMi mzPatientMi, Integer maxOrderNo, Integer itemNo, MzYjReq mzYjReq, Set<String> vesselSets, JyZdItem jyZdItem, Map<String, MzChargeDetail> tcNoMap, String priceId, Date priceTime,Integer receiptNo) throws MzException {
+    private Integer formatVesselFee(MzChargeDetail mzChargeDetail, List<MzChargeDetail> mzChargeDetails, MzPatientMi mzPatientMi, Integer maxOrderNo, Integer itemNo, MzYjReq mzYjReq, Set<String> vesselSets, JyZdItem jyZdItem, Map<String, MzChargeDetail> tcNoMap, String priceId, Date priceTime, Integer receiptNo) throws MzException {
         JyZdTubeCharge jyZdTubeCharge = jyZdTubeChargeService.queryJyZdTubeChargeByCode(jyZdItem.getVessel());
         if (jyZdTubeCharge != null) {
             ZdChargeItem zdChargeItem = zdChargeItemService.queryZdChargeItemByCode(jyZdTubeCharge.getChargeCode());
@@ -1779,8 +1779,11 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
      * @return
      * @throws Exception
      */
-    private Integer formatSupplyFee(List<MzChargeDetail> mzChargeDetails, List<MzChargeDetail> mzChargeDetailList, Integer itemNo,Integer receiptNo) {
+    private Integer formatSupplyFee(List<MzChargeDetail> mzChargeDetails, List<MzChargeDetail> mzChargeDetailList, Integer itemNo, Integer receiptNo) throws MzException {
         for (MzChargeDetail mcd : mzChargeDetailList) {
+            if (mcd.getSupplyAmount() == null) {
+                throw new MzException("当前处方药品给药方式执行次数为空,请联系医生修改处方!");
+            }
             //非口服用药方式,需要写入收费记录
             if (StringUtils.isNotBlank(mcd.getSupplyCode()) && !Constants.KOU_FU_SUPPLY_CODE.equals(mcd.getSupplyCode())) {
                 List<MzZdSupplyCharge> mzZdSupplyChargeList = mzZdSupplyChargeService.queryMzZdSupplyChargeByCode(mcd.getSupplyCode());
@@ -1846,7 +1849,7 @@ public class MzChargeDetailServiceImpl implements MzChargeDetailService {
      * @param tcNo
      * @return
      */
-    private Integer formatYjChargeDetail(MzChargeDetail mzChargeDetail, List<MzChargeDetail> mzChargeDetails, Integer maxOrderNo, MzPatientMi mzPatientMi, Integer itemNo, List<String> jianYans, List<String> jianChas, MzYjReq mzYjReq, String tcNo, String priceId, Date priceTime, Map<String, MzChargeDetail> tcNoMap,Integer receiptNo) {
+    private Integer formatYjChargeDetail(MzChargeDetail mzChargeDetail, List<MzChargeDetail> mzChargeDetails, Integer maxOrderNo, MzPatientMi mzPatientMi, Integer itemNo, List<String> jianYans, List<String> jianChas, MzYjReq mzYjReq, String tcNo, String priceId, Date priceTime, Map<String, MzChargeDetail> tcNoMap, Integer receiptNo) {
         MzChargeDetail newMzChargeDetail = new MzChargeDetail();
         newMzChargeDetail.setPatientId(mzChargeDetail.getPatientId());
         newMzChargeDetail.setTimes(mzChargeDetail.getTimes());
@@ -1915,11 +1918,11 @@ 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) 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) throws MzException {
         MzYjReq mzYjReq = mzYjReqMap.get(jcJyItemCharge.getCode());
         ZdChargeItem zdChargeItem = zdChargeItemService.queryZdChargeItemByCode(jcJyItemCharge.getChargeCode());
         if (zdChargeItem == null) {
-           // throw new MzException("【收费编码:" + jcJyItemCharge.getChargeCode() + "】不存在,请联系物价科确认!");
+            // throw new MzException("【收费编码:" + jcJyItemCharge.getChargeCode() + "】不存在,请联系物价科确认!");
             return itemNo;
         }
         if (YesNoEnum.YES.code.equals(zdChargeItem.getDelFlag())) {

+ 2 - 3
src/main/java/cn/hnthyy/thmz/service/impl/his/MzReceiptSerialServiceImpl.java

@@ -20,7 +20,6 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Isolation;
 import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
-
 import java.math.BigDecimal;
 import java.util.ArrayList;
 import java.util.Date;
@@ -194,8 +193,8 @@ public class MzReceiptSerialServiceImpl implements MzReceiptSerialService {
             mzDepositFile.setReceiptSn(mzReceiptSerial.getSerialNo());
             mzDepositFile.setSerialNo(mzReceiptSerial.getSerialNo());
             mzDepositFile.setChargeDate(now);
-            mzDepositFile.setDcountNo(YesNoEnum.NO.code);
-            mzDepositFile.setDcountDate(null);
+            //mzDepositFile.setDcountNo(YesNoEnum.NO.code);
+            //mzDepositFile.setDcountDate(null);
             mzDepositFileMapper.insertMzDepositFile(mzDepositFile);
         }
         if (receipt.getReceiptCurrent() == receipt.getReceiptEnd()) {

+ 1 - 1
src/main/resources/static/js/toll_administration.js

@@ -1848,7 +1848,7 @@ function readyRefundFee() {
     chargeItemCodes = null;
     if (allSelecteds != null && allSelecteds.length > 0) {
         for (var i = 0; i < allSelecteds.length; i++) {
-            var temp = allSelecteds[i].orderNo + "_" + allSelecteds[i].chargeItemCode;
+            var temp = allSelecteds[i].orderNo + "_" + allSelecteds[i].itemNo +"_"+allSelecteds[i].chargeItemCode;
             if (chargeItemCodes == null) {
                 chargeItemCodes = temp;
             } else {