Browse Source

住院预交金misPos功能开发

hurugang 2 years ago
parent
commit
9313e2f8dc

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

@@ -1,6 +1,7 @@
 package cn.hnthyy.thmz.controller;
 
 import cn.hnthyy.thmz.Utils.HttpUtil;
+import cn.hnthyy.thmz.Utils.Md5Util;
 import cn.hnthyy.thmz.Utils.SeedUtil;
 import cn.hnthyy.thmz.comment.UserLoginToken;
 import cn.hnthyy.thmz.common.Constants;
@@ -178,7 +179,7 @@ public class TransactionController {
                 }
                 misPosVo.setLsOrderNo(misPosVo.getPatientId() + "_" + misPosVo.getTimes()+"_"+misPosVo.getChequeType());
             }else {
-
+                misPosVo.setLsOrderNo(Md5Util.getReceiptNo());
             }
             JSONObject jsonObject = transactionService.consume(misPosVo.getRouterCode(), misPosVo.getAmt(), misPosVo.getLsOrderNo(), misPosVo.getInputRemarkInfo(), misPosVo.getChequeType());
             if (jsonObject == null) {

+ 91 - 57
src/main/java/cn/hnthyy/thmz/controller/zy/ZyDepositFileController.java

@@ -1,8 +1,10 @@
 package cn.hnthyy.thmz.controller.zy;
 
+import cn.hnthyy.thmz.Utils.HttpUtil;
 import cn.hnthyy.thmz.Utils.NumberToCN;
 import cn.hnthyy.thmz.Utils.TokenUtil;
 import cn.hnthyy.thmz.comment.UserLoginToken;
+import cn.hnthyy.thmz.common.Constants;
 import cn.hnthyy.thmz.entity.MzException;
 import cn.hnthyy.thmz.entity.his.mz.Employee;
 import cn.hnthyy.thmz.entity.his.mz.MzPatientMi;
@@ -11,6 +13,8 @@ import cn.hnthyy.thmz.entity.his.zy.ZyActpatient;
 import cn.hnthyy.thmz.entity.his.zy.ZyDepositFile;
 import cn.hnthyy.thmz.entity.his.zy.ZyLedgerFile;
 import cn.hnthyy.thmz.entity.thmz.User;
+import cn.hnthyy.thmz.entity.thmz.Windows;
+import cn.hnthyy.thmz.enums.YesNoEnum;
 import cn.hnthyy.thmz.enums.ZyDepositFileStatusEnum;
 import cn.hnthyy.thmz.service.his.mz.EmployeeService;
 import cn.hnthyy.thmz.service.his.mz.MzPatientMiService;
@@ -19,13 +23,17 @@ import cn.hnthyy.thmz.service.his.zd.ZdUnitCodeService;
 import cn.hnthyy.thmz.service.his.zy.ZyActpatientService;
 import cn.hnthyy.thmz.service.his.zy.ZyDepositFileService;
 import cn.hnthyy.thmz.service.his.zy.ZyLedgerFileService;
+import cn.hnthyy.thmz.service.thmz.TransactionService;
+import cn.hnthyy.thmz.service.thmz.WindowsService;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
+import org.json.JSONObject;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
 import java.math.BigDecimal;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -48,6 +56,11 @@ public class ZyDepositFileController {
     private ZdUnitCodeService zdUnitCodeService;
     @Autowired
     private MzPatientMiService mzPatientMiService;
+    @Autowired
+    private WindowsService windowsService;
+    @Autowired
+    private TransactionService transactionService;
+
     /**
      * 根据住院号和次数查询缴费记录
      *
@@ -79,14 +92,14 @@ public class ZyDepositFileController {
             resultMap.put("message", "根据住院号和次数查询缴费记录成功");
             List<ZyDepositFile> zyDepositFiles = zyDepositFileService.queryZyDepositFileBYInpatientNoAndTimes(zyDepositFile);
             //总支付金额
-            BigDecimal totalPay=BigDecimal.ZERO;
+            BigDecimal totalPay = BigDecimal.ZERO;
             //总退费金额
-            BigDecimal totalRefund=BigDecimal.ZERO;
-            if(zyDepositFiles!=null && zyDepositFiles.size()>0){
-                List<ZdChequeType> zdChequeTypes=zdChequeTypeService.queryAllZdChequeType();
-                Map<String,String> zdChequeTypeMap=zdChequeTypes.stream().collect(Collectors.toMap(ZdChequeType::getCode,ZdChequeType::getName));
-                ZyLedgerFile lastZyLedgerFile=zyLedgerFileService.queryLastLedgerSn(zyDepositFile.getInpatientNo(),zyDepositFile.getAdmissTimes().intValue());
-                for (ZyDepositFile zdf:zyDepositFiles){
+            BigDecimal totalRefund = BigDecimal.ZERO;
+            if (zyDepositFiles != null && zyDepositFiles.size() > 0) {
+                List<ZdChequeType> zdChequeTypes = zdChequeTypeService.queryAllZdChequeType();
+                Map<String, String> zdChequeTypeMap = zdChequeTypes.stream().collect(Collectors.toMap(ZdChequeType::getCode, ZdChequeType::getName));
+                ZyLedgerFile lastZyLedgerFile = zyLedgerFileService.queryLastLedgerSn(zyDepositFile.getInpatientNo(), zyDepositFile.getAdmissTimes().intValue());
+                for (ZyDepositFile zdf : zyDepositFiles) {
                     zdf.setStatusName(ZyDepositFileStatusEnum.geteZyDepositFileStatusByCode(zdf.getStatus()).name);
                     //设置账页的结算状态到支付信息,做退费控制
                     zdf.setSettleType(lastZyLedgerFile.getSettleType());
@@ -95,10 +108,10 @@ public class ZyDepositFileController {
                     if (opEmployee != null) {
                         zdf.setOpIdName(opEmployee.getEmployeeName());
                     }
-                    if(ZyDepositFileStatusEnum.PREPAY.code.equals(zdf.getStatus())){
-                        totalPay= totalPay.add(zdf.getDepoAmount());
-                    }else if(ZyDepositFileStatusEnum.STRAIGHT_BACK.code.equals(zdf.getStatus())){
-                        totalRefund=totalRefund.add(zdf.getDepoAmount());
+                    if (ZyDepositFileStatusEnum.PREPAY.code.equals(zdf.getStatus())) {
+                        totalPay = totalPay.add(zdf.getDepoAmount());
+                    } else if (ZyDepositFileStatusEnum.STRAIGHT_BACK.code.equals(zdf.getStatus())) {
+                        totalRefund = totalRefund.add(zdf.getDepoAmount());
                     }
                 }
             }
@@ -116,8 +129,6 @@ public class ZyDepositFileController {
     }
 
 
-
-
     /**
      * 保存住院收费或者退费
      *
@@ -139,15 +150,21 @@ public class ZyDepositFileController {
                 resultMap.put("message", "事务类型不能为空");
                 return resultMap;
             }
-            if (StringUtils.isBlank(zyDepositFile.getDepoType())) {
-                resultMap.put("code", -1);
-                resultMap.put("message", "支付方式不能为空");
-                return resultMap;
-            }
+//            if (StringUtils.isBlank(zyDepositFile.getDepoType())) {
+//                resultMap.put("code", -1);
+//                resultMap.put("message", "支付方式不能为空");
+//                return resultMap;
+//            }
             User tokenUser = TokenUtil.getUser(httpServletRequest);
             zyDepositFile.setOpIdCode(tokenUser.getUserIdCode());
+            if (StringUtils.isBlank(zyDepositFile.getReceiptNo())) {
+                zyDepositFile.setReceiptNo(null);
+            }
+            boolean isPos = false;
+            Windows windowsDb = null;
+            ZyDepositFile dbZyDepositFile = null;
             //缴费
-            if(ZyDepositFileStatusEnum.PREPAY.code.equals(zyDepositFile.getStatus())){
+            if (ZyDepositFileStatusEnum.PREPAY.code.equals(zyDepositFile.getStatus())) {
                 if (StringUtils.isBlank(zyDepositFile.getInpatientNo())) {
                     resultMap.put("code", -1);
                     resultMap.put("message", "病人住院号不能为空");
@@ -159,43 +176,67 @@ public class ZyDepositFileController {
                     resultMap.put("message", "缴费金额不能为空");
                     return resultMap;
                 }
-            }else if(ZyDepositFileStatusEnum.STRAIGHT_BACK.code.equals(zyDepositFile.getStatus())){
-                ZyDepositFile dbZyDepositFile=zyDepositFileService.queryZyDepositFileByReceiptNo(zyDepositFile.getReceiptNo());
-                if(dbZyDepositFile==null){
+            } else if (ZyDepositFileStatusEnum.STRAIGHT_BACK.code.equals(zyDepositFile.getStatus())) {
+                String ipAddress = HttpUtil.getIPAddress(httpServletRequest);
+                windowsDb = windowsService.queryLastWindowsIpAddress(ipAddress);
+                if (windowsDb == null) {
                     resultMap.put("code", -1);
-                    resultMap.put("message", "当前退费的收据号不存在。");
+                    resultMap.put("message", "您暂未配置只能POS机的【路由识别码】,请配置完后重试!");
                     return resultMap;
                 }
-                if(!dbZyDepositFile.getDepoType().equals(zyDepositFile.getDepoType())){
+                dbZyDepositFile = zyDepositFileService.queryZyDepositFileByReceiptNo(zyDepositFile.getReceiptNo());
+                if (dbZyDepositFile == null) {
                     resultMap.put("code", -1);
-                    resultMap.put("message", "当前退费的退费方式与原收据的付款方式不一致。");
+                    resultMap.put("message", "当前退费的收据号不存在。");
                     return resultMap;
                 }
-                BigDecimal  depoAmount=zyDepositFileService.querySumDepoAmountByReceiptNo(zyDepositFile.getReceiptNo());
-                if(BigDecimal.ZERO.compareTo(depoAmount)==0){
+                zyDepositFile.setInpatientNo(dbZyDepositFile.getInpatientNo());
+                isPos = YesNoEnum.YES.code.equals(zyDepositFile.getRefundType()) && Arrays.asList(Constants.BYJZ, Constants.YLK, Constants.JHZF).contains(dbZyDepositFile.getDepoType());
+//                if(!dbZyDepositFile.getDepoType().equals(zyDepositFile.getDepoType())){
+//                    resultMap.put("code", -1);
+//                    resultMap.put("message", "当前退费的退费方式与原收据的付款方式不一致。");
+//                    return resultMap;
+//                }
+                BigDecimal depoAmount = zyDepositFileService.querySumDepoAmountByReceiptNo(zyDepositFile.getReceiptNo());
+                if (BigDecimal.ZERO.compareTo(depoAmount) == 0) {
                     zyDepositFileService.modifyReportFlag(zyDepositFile.getReceiptNo());
                     resultMap.put("code", -1);
                     resultMap.put("message", "当前操作的费用已经退过费,请勿重复操作。");
                     return resultMap;
                 }
                 //退费
-                zyDepositFile.setDepoAmount(BigDecimal.ZERO.subtract(dbZyDepositFile.getDepoAmount()));
-                zyDepositFile.setInpatientNo(dbZyDepositFile.getInpatientNo());
-                zyDepositFile.setAdmissTimes(dbZyDepositFile.getAdmissTimes());
-                zyDepositFile.setLedgerSn(dbZyDepositFile.getLedgerSn());
-                zyDepositFile.setPrinted(dbZyDepositFile.getPrinted());
+//                zyDepositFile.setDepoAmount(BigDecimal.ZERO.subtract(dbZyDepositFile.getDepoAmount()));
+//                zyDepositFile.setInpatientNo(dbZyDepositFile.getInpatientNo());
+//                zyDepositFile.setAdmissTimes(dbZyDepositFile.getAdmissTimes());
+//                zyDepositFile.setLedgerSn(dbZyDepositFile.getLedgerSn());
+//                zyDepositFile.setPrinted(dbZyDepositFile.getPrinted());
             }
             zyDepositFileService.saveZyDepositFile(zyDepositFile);
+            if (isPos && StringUtils.isNotBlank(windowsDb.getMisPosRouterCode())) {
+                String lsOrderNo = dbZyDepositFile.getPsordnum() + "_" + dbZyDepositFile.getDepoAmount().toString();
+                JSONObject jsonObject = transactionService.refund(windowsDb.getMisPosRouterCode(), BigDecimal.ZERO.subtract(zyDepositFile.getDepoAmount()), lsOrderNo, null, dbZyDepositFile.getDepoType(), dbZyDepositFile.getParChannel(), dbZyDepositFile.getPsordnum(), dbZyDepositFile.getTransDate(), dbZyDepositFile.getAgtordnum());
+                if (jsonObject == null) {
+                    resultMap.put("code", -2);
+                    resultMap.put("message", "住院预交金已退,但是患者智能POS退款失败,请去财务工具查询并退款!");
+                    return resultMap;
+                }
+                String resCode = (String) jsonObject.get("resCode");
+                if (!"00".equals(resCode)) {
+                    resultMap.put("code", -2);
+                    resultMap.put("message", "住院预交金已退,但是患者智能POS退款失败,错误信息为:" + jsonObject.get("resMsg") + "请去财务工具查询并退款!");
+                    return resultMap;
+                }
+            }
             resultMap.put("code", 0);
             resultMap.put("message", "操作成功");
             resultMap.put("receiptNo", zyDepositFile.getReceiptNo());
             resultMap.put("zyDepositFile", zyDepositFileService.queryZyDepositFileByReceiptNo(zyDepositFile.getReceiptNo()));
             return resultMap;
-        }catch (MzException e){
+        } catch (MzException e) {
             resultMap.put("code", -1);
             resultMap.put("message", e.getMessage());
             return resultMap;
-        }catch (Exception e) {
+        } catch (Exception e) {
             e.printStackTrace();
             resultMap.put("code", -1);
             resultMap.put("message", "保存住院收费或者退费记录出错,请联系管理员");
@@ -205,8 +246,6 @@ public class ZyDepositFileController {
     }
 
 
-
-
     /**
      * 根据流水号查询住院缴费单
      *
@@ -214,7 +253,7 @@ public class ZyDepositFileController {
      */
     @UserLoginToken
     @RequestMapping(value = "/getZyDepositFileByReceiptNo", method = {RequestMethod.GET})
-    public Map<String, Object> getZyDepositFileByReceiptNo(@RequestParam("receiptNo") String receiptNo,@RequestParam("inpatientNo") String inpatientNo) {
+    public Map<String, Object> getZyDepositFileByReceiptNo(@RequestParam("receiptNo") String receiptNo, @RequestParam("inpatientNo") String inpatientNo) {
         log.info("根据流水号查询住院缴费单");
         Map<String, Object> resultMap = new HashMap<>();
         try {
@@ -228,34 +267,34 @@ public class ZyDepositFileController {
                 resultMap.put("message", "住院号不能为空");
                 return resultMap;
             }
-            ZyDepositFile zyDepositFile=zyDepositFileService.queryZyDepositFileByReceiptNo(receiptNo);
-            if(zyDepositFile==null){
+            ZyDepositFile zyDepositFile = zyDepositFileService.queryZyDepositFileByReceiptNo(receiptNo);
+            if (zyDepositFile == null) {
                 resultMap.put("code", -1);
                 resultMap.put("message", "流水号对应的缴费记录不存在");
                 return resultMap;
             }
-            ZyActpatient zyActpatient=zyActpatientService.queryByInpatientNo("zy_actpatient",inpatientNo,zyDepositFile.getAdmissTimes().intValue());
-            if(zyActpatient==null){
+            ZyActpatient zyActpatient = zyActpatientService.queryByInpatientNo("zy_actpatient", inpatientNo, zyDepositFile.getAdmissTimes().intValue());
+            if (zyActpatient == null) {
                 resultMap.put("code", -1);
                 resultMap.put("message", "住院号对应的住院记录不存在");
                 return resultMap;
             }
             zyActpatient.setAdmissDept(zdUnitCodeService.queryDeptNameByIdInCache(zyActpatient.getAdmissDept()));
-            MzPatientMi mzPatientMi=mzPatientMiService.queryByPatientId(zyActpatient.getMzNo());
-            if(mzPatientMi==null){
+            MzPatientMi mzPatientMi = mzPatientMiService.queryByPatientId(zyActpatient.getMzNo());
+            if (mzPatientMi == null) {
                 resultMap.put("code", -1);
                 resultMap.put("message", "门诊病人不存在");
                 return resultMap;
             }
 
-            ZdChequeType zdChequeType=zdChequeTypeService.queryChequeTypeByCode(zyDepositFile.getDepoType());
-            if(zdChequeType==null){
+            ZdChequeType zdChequeType = zdChequeTypeService.queryChequeTypeByCode(zyDepositFile.getDepoType());
+            if (zdChequeType == null) {
                 resultMap.put("code", -1);
                 resultMap.put("message", "支付方式不存在");
                 return resultMap;
             }
-            Employee employee=employeeService.queryByUserCode(zyDepositFile.getOpIdCode());
-            if(employee==null){
+            Employee employee = employeeService.queryByUserCode(zyDepositFile.getOpIdCode());
+            if (employee == null) {
                 resultMap.put("code", -1);
                 resultMap.put("message", "操作员不存在");
                 return resultMap;
@@ -279,10 +318,6 @@ public class ZyDepositFileController {
     }
 
 
-
-
-
-
     /**
      * 打印住院缴费单
      *
@@ -320,7 +355,7 @@ public class ZyDepositFileController {
      */
     @UserLoginToken
     @RequestMapping(value = "/cancelCashi", method = {RequestMethod.GET})
-    public Map<String, Object> cancelCashi(@RequestParam("inpatientNo") String inpatientNo,@RequestParam("admissTimes") Integer admissTimes, HttpServletRequest httpServletRequest) {
+    public Map<String, Object> cancelCashi(@RequestParam("inpatientNo") String inpatientNo, @RequestParam("admissTimes") Integer admissTimes, HttpServletRequest httpServletRequest) {
         log.info("根据流水号查询住院缴费单");
         Map<String, Object> resultMap = new HashMap<>();
         try {
@@ -329,13 +364,13 @@ public class ZyDepositFileController {
                 resultMap.put("message", "住院号不能为空");
                 return resultMap;
             }
-            if (admissTimes==null) {
+            if (admissTimes == null) {
                 resultMap.put("code", -1);
                 resultMap.put("message", "住院次数不能为空");
                 return resultMap;
             }
             User tokenUser = TokenUtil.getUser(httpServletRequest);
-            zyDepositFileService.cancelCashi(tokenUser.getUserIdCode(),inpatientNo,admissTimes);
+            zyDepositFileService.cancelCashi(tokenUser.getUserIdCode(), inpatientNo, admissTimes);
             resultMap.put("code", 0);
             resultMap.put("message", "费用冲消成功");
             return resultMap;
@@ -354,7 +389,6 @@ public class ZyDepositFileController {
     }
 
 
-
     /**
      * 住院费用出纳处理
      *
@@ -366,13 +400,13 @@ public class ZyDepositFileController {
         log.info("根据流水号查询住院缴费单");
         Map<String, Object> resultMap = new HashMap<>();
         try {
-            if (zyDepositFiles==null || zyDepositFiles.size()==0) {
+            if (zyDepositFiles == null || zyDepositFiles.size() == 0) {
                 resultMap.put("code", -1);
                 resultMap.put("message", "费用支付渠道不能为空");
                 return resultMap;
             }
             User tokenUser = TokenUtil.getUser(httpServletRequest);
-            zyDepositFileService.teller(tokenUser.getUserIdCode(),zyDepositFiles);
+            zyDepositFileService.teller(tokenUser.getUserIdCode(), zyDepositFiles);
             resultMap.put("code", 0);
             resultMap.put("message", "出纳处理成功");
             return resultMap;

+ 12 - 4
src/main/java/cn/hnthyy/thmz/entity/his/zy/ZyDepositFile.java

@@ -71,13 +71,18 @@ public class ZyDepositFile {
     private String hsr;
     //
     private Double hsTime;
-    //
+    //订单号
     private String psordnum;
-    //
-    private Double agtordnum;
+    //流水号
+    private String agtordnum;
     //
     private String hisrefundnum;
-
+    //判断是否是数字人民币支付
+    private String parChannel;
+    //交易日期(MMDD)
+    private String transDate;
+    //凭证号
+    private String traceNo;
 
     /**
      * 0未结算  1是出院结算  3是中间结算  4是已出纳 账页结算状态
@@ -89,4 +94,7 @@ public class ZyDepositFile {
     private String depoTypeName;
     //操作员名称
     private String opIdName;
+
+    //退费类型 0 现金退费 1 原路退费
+    private Integer refundType;
 }

+ 16 - 7
src/main/java/cn/hnthyy/thmz/mapper/his/zy/ZyDepositFileMapper.java

@@ -13,6 +13,7 @@ import java.util.List;
 public interface ZyDepositFileMapper {
     /**
      * 根据住院号和次数查询缴费记录
+     *
      * @param zyDepositFile
      * @return
      */
@@ -30,7 +31,7 @@ public interface ZyDepositFileMapper {
             "         op_id_code," +
             "         ledger_sn ," +
             "         printed   ," +
-            "         window_no,report_flag,deleted  " +
+            "         window_no,report_flag,deleted,psordnum,agtordnum,par_channel,trans_date,trace_no  " +
             "    FROM zy_deposit_file " +
             "   WHERE  (status ='1' or  (status ='2' and window_no = '1') ) and " +
             "          inpatient_no = #{inpatientNo}  AND  " +
@@ -39,6 +40,7 @@ public interface ZyDepositFileMapper {
 
     /**
      * 查询当前最大缴费次数
+     *
      * @param zyDepositFile
      * @return
      */
@@ -47,17 +49,18 @@ public interface ZyDepositFileMapper {
 
     /**
      * 入库住院收费记录
+     *
      * @param zyDepositFile
      * @return
      */
-    @Insert("insert into zy_deposit_file ( inpatient_no , admiss_times , depo_times , depo_date , op_id_code , depo_amount , depo_type , status , cheque_no , printed , receipt_no , ledger_sn , window_no , deleted ) values" +
-            " ( #{inpatientNo} , #{admissTimes} , #{depoTimes} , #{depoDate} , #{opIdCode} , #{depoAmount} , #{depoType} , #{status} , #{chequeNo} , #{printed} , #{receiptNo} , #{ledgerSn} , #{windowNo}, #{deleted} ) ")
+    @Insert("insert into zy_deposit_file ( inpatient_no , admiss_times , depo_times , depo_date , op_id_code , depo_amount , depo_type , status , cheque_no , printed , receipt_no , ledger_sn , window_no , deleted,psordnum,agtordnum,par_channel,trans_date,trace_no ) values" +
+            " ( #{inpatientNo} , #{admissTimes} , #{depoTimes} , #{depoDate} , #{opIdCode} , #{depoAmount} , #{depoType} , #{status} , #{chequeNo} , #{printed} , #{receiptNo} , #{ledgerSn} , #{windowNo}, #{deleted},#{psordnum},#{agtordnum},#{parChannel},#{transDate},#{traceNo} ) ")
     int insetZyDepositFile(ZyDepositFile zyDepositFile);
 
 
-
     /**
      * 按照收据号查询未退费的收据内容
+     *
      * @param receiptNo
      * @return
      */
@@ -67,6 +70,7 @@ public interface ZyDepositFileMapper {
 
     /**
      * 按照收据号查询该收据号的总费用  ==0 说明已经退了费  >0 说明未退费
+     *
      * @param receiptNo
      * @return
      */
@@ -85,7 +89,8 @@ public interface ZyDepositFileMapper {
     ZyDepositFile selectLastZyDepositFile(@Param("inpatientNo") String inpatientNo, @Param("admissTimes") Double admissTimes);
 
     /**
-     * 根据收据号将状态标记为以退费
+     * 根据收据号将状态标记为已退费
+     *
      * @param receiptNo
      * @return
      */
@@ -95,6 +100,7 @@ public interface ZyDepositFileMapper {
 
     /**
      * 根据收据号将发票标记为已打印发票
+     *
      * @param receiptNo
      * @return
      */
@@ -104,6 +110,7 @@ public interface ZyDepositFileMapper {
 
     /**
      * 修改收据信息
+     *
      * @param zyDepositFile
      * @return
      */
@@ -123,6 +130,7 @@ public interface ZyDepositFileMapper {
 
     /**
      * 更新核算人和核算时间
+     *
      * @param inpatientNo
      * @param admissTimes
      * @param opId
@@ -130,11 +138,12 @@ public interface ZyDepositFileMapper {
      * @return
      */
     @Update("update zy_deposit_file SET hsr =#{opId} , hs_time =#{hsTime} WHERE inpatient_no =#{inpatientNo} AND admiss_times =#{admissTimes} AND ( hs_time is null or hs_time =null ) AND window_no ='1' and status in ( '1' , '2' ) ")
-    int updateHsrAndHsTime(@Param("inpatientNo") String inpatientNo, @Param("admissTimes") Double admissTimes,@Param("opId") String opId, @Param("hsTime") Date hsTime);
+    int updateHsrAndHsTime(@Param("inpatientNo") String inpatientNo, @Param("admissTimes") Double admissTimes, @Param("opId") String opId, @Param("hsTime") Date hsTime);
 
 
     /**
      * 判断手机自助缴费平台对应的流水号有无成功住院预交金
+     *
      * @param psordnum
      * @param agtordnum
      * @return
@@ -145,6 +154,6 @@ public interface ZyDepositFileMapper {
             " and agtordnum = #{agtordnum}",
             "</when>",
             "</script>"})
-    ZyDepositFile selectZyDepositFileByAgtordnum(@Param("psordnum") String psordnum,@Param("agtordnum") String agtordnum,@Param("tableName") String tableName);
+    ZyDepositFile selectZyDepositFileByAgtordnum(@Param("psordnum") String psordnum, @Param("agtordnum") String agtordnum, @Param("tableName") String tableName);
 
 }

+ 1 - 1
src/main/java/cn/hnthyy/thmz/service/his/zy/ZyDepositFileService.java

@@ -30,7 +30,7 @@ public interface ZyDepositFileService {
     BigDecimal querySumDepoAmountByReceiptNo(String receiptNo);
 
     /**
-     * 根据收据号将状态标记为退费
+     * 根据收据号将状态标记为退费
      * @param receiptNo
      * @return
      */

+ 18 - 2
src/main/java/cn/hnthyy/thmz/service/impl/his/zy/ZyDepositFileServiceImpl.java

@@ -22,6 +22,7 @@ import org.springframework.transaction.annotation.Propagation;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.math.BigDecimal;
+import java.util.Arrays;
 import java.util.Date;
 import java.util.List;
 
@@ -83,14 +84,29 @@ public class ZyDepositFileServiceImpl implements ZyDepositFileService {
         }
         //缴费
         if (ZyDepositFileStatusEnum.PREPAY.code.equals(zyDepositFile.getStatus())) {
-            //非自助的需要传缴费流水号
-            if(!(Constants.ZZWX.equals(zyDepositFile.getDepoType())||Constants.ZZZFB.equals(zyDepositFile.getDepoType()))){
+            //非自助或者非聚合支付与银联卡的需要传缴费流水号
+            if(!Arrays.asList(Constants.ZZWX,Constants.ZZZFB,Constants.JHZF,Constants.YLK).contains(zyDepositFile.getDepoType())){
                 zyDepositFile.setReceiptNo(Md5Util.getReceiptNo());
             }
             zyDepositFile.setPrinted(Double.valueOf(0));
         } else if (ZyDepositFileStatusEnum.STRAIGHT_BACK.code.equals(zyDepositFile.getStatus())) {
             //退费
+            ZyDepositFile dbZyDepositFile=zyDepositFileMapper.selectZyDepositFileByReceiptNo(zyDepositFile.getReceiptNo());
+            if(dbZyDepositFile==null){
+                throw new MzException("当前退费的收据号不存在。");
+            }
+            BigDecimal  depoAmount=zyDepositFileMapper.selectSumDepoAmountByReceiptNo(zyDepositFile.getReceiptNo());
+            if(BigDecimal.ZERO.compareTo(depoAmount)==0){
+                throw new MzException("当前操作的费用已经退过费,请勿重复操作。");
+            }
+            zyDepositFile.setDepoAmount(BigDecimal.ZERO.subtract(dbZyDepositFile.getDepoAmount()));
+            zyDepositFile.setAdmissTimes(dbZyDepositFile.getAdmissTimes());
+            zyDepositFile.setLedgerSn(dbZyDepositFile.getLedgerSn());
+            zyDepositFile.setPrinted(dbZyDepositFile.getPrinted());
             zyDepositFile.setReportFlag(YesNoEnum.YES.code.toString());
+            if (!(Arrays.asList(Constants.BRZZJF_CODE,Constants.HLWYY_CODE).contains(zyDepositFile.getOpIdCode()) || (YesNoEnum.YES.code.equals(zyDepositFile.getRefundType()) && Arrays.asList(Constants.BYJZ, Constants.YLK, Constants.JHZF).contains(zyDepositFile.getDepoType())))) {
+                zyDepositFile.setDepoType(Constants.CASH);
+            }
             zyDepositFileMapper.updateReportFlag(zyDepositFile.getReceiptNo());
         }
         int num = zyDepositFileMapper.insetZyDepositFile(zyDepositFile);

+ 149 - 18
src/main/resources/static/js/zy/accepting.js

@@ -38,7 +38,13 @@ $(function () {
                 "inpatientNo": $("#admissionNumber").val(),
                 "depoType": $("#depoType").val(),
                 "depoAmount": $("#depoAmount").val(),
-                "chequeNo": $("#chequeNo").val()
+                "chequeNo": $("#chequeNo").val(),
+                "psordnum": $("#refNo").val(),
+                "agtordnum": $("#qrCodeParam").val(),
+                "transDate": $("#transDate").val(),
+                "parChannel": $("#payChannel").val(),
+                "traceNo": $("#traceNo").val(),
+                "receiptNo": $("#lsOrderNo").val()
             }),
             headers: {'Accept': 'application/json', 'Authorization': 'Bearer ' + localStorage.getItem("token")},
             success: function (res) {
@@ -53,6 +59,16 @@ $(function () {
                     if (confirm("现在打印收据吗?")) {
                         prn1Print(res.zyDepositFile.inpatientNo, res.receiptNo, false);
                     }
+                    $("#admissionNumber").val(null);
+                    $("#depoType").val(null);
+                    $("#depoAmount").val(null);
+                    $("#chequeNo").val(null);
+                    $("#refNo").val(null);
+                    $("#transDate").val(null);
+                    $("#payChannel").val(null);
+                    $("#qrCodeParam").val(null);
+                    $("#traceNo").val(null);
+                    $("#lsOrderNo").val(null);
                 } else {
                     errorMesage(res);
                 }
@@ -61,14 +77,21 @@ $(function () {
     });
 
 
+    // /**
+    //  * 退费提交
+    //  */
+    // $("#refundZyFee").on("click", function (t) {
+    //     saveRefundZyFee();
+    // });
+
+    // initStatus();
+
     /**
-     * 退费提交
+     * 刷卡/扫码
      */
-    $("#refundZyFee").on("click", function (t) {
-        saveRefundZyFee();
+    $("#consume").on("click", function (t) {
+        consume();
     });
-
-    // initStatus();
 });
 
 
@@ -95,11 +118,11 @@ function initChequeType() {
             $('#depoType').selectpicker('refresh');
             $('#depoType').selectpicker('val', 1);
             $('#depoType').selectpicker('refresh');
-            $('#refundDepoType').empty();
-            $('#refundDepoType').html(html);
-            $('#refundDepoType').selectpicker('refresh');
-            $('#refundDepoType').selectpicker('val', 1);
-            $('#refundDepoType').selectpicker('refresh');
+            // $('#refundDepoType').empty();
+            // $('#refundDepoType').html(html);
+            // $('#refundDepoType').selectpicker('refresh');
+            // $('#refundDepoType').selectpicker('val', 1);
+            // $('#refundDepoType').selectpicker('refresh');
         }
     });
 }
@@ -422,7 +445,8 @@ function listDepositFile() {
                     var str = '';
                     if (row.depoAmount > 0) {
                         //未结算且 是预交和未退费的可以退费
-                        if (row.settleType == 0 && row.status == '1' && row.reportFlag != 1) {
+                        var noRefund = row.settleType == 0 && row.status == '1' && row.reportFlag != 1;
+                        if (noRefund) {
                             str += '<button type="button" class="btn btn-primary  btn-sm" onclick="refundZyFee(\'' + row.receiptNo + '\',\'' + row.depoAmount + '\',\'' + row.depoType + '\')">退费</button>';
                         }
                         if (row.deleted != 1) {
@@ -432,6 +456,9 @@ function listDepositFile() {
                                 str += '<button type="button" class="btn btn-primary  btn-sm" onclick="prn1Print(\'' + row.inpatientNo + '\',\'' + row.receiptNo + '\',true)">重打收据</button>';
                             }
                         }
+                        if ((row.depoTypeName == '银联卡' || row.depoTypeName == '聚合支付') && row.psordnum != null && row.psordnum != "" && row.psordnum != "null") {
+                            str += '<button type="button" class="btn btn-primary  btn-sm" onclick="createBarcode(\'' + row.depoTypeName + '\',\'' + row.psordnum + '\',\'' + row.agtordnum + '\',\'' + row.parChannel + '\',\'' + row.traceNo + '\',\'' + row.receiptNo + '\',\'' + row.transDate + '\',' + noRefund + ')">智能支付参数与条形码</button>';
+                        }
                     }
                     return [str].join('');
                 }
@@ -492,16 +519,16 @@ function refundZyFee(receiptNo, depoAmount, depoType) {
     $("#receiptNo").val(receiptNo);
     $("#refungZyFeeModal").modal("show");
     $("#refundDepoAmount").val(depoAmount);
-    $('#refundDepoType').selectpicker('val', depoType);
-    $('#refundDepoType').selectpicker('refresh');
+    // $('#refundDepoType').selectpicker('val', depoType);
+    // $('#refundDepoType').selectpicker('refresh');
 }
 
 
 /**
  * 退住院预交金
- * @param receiptNo
+ * @param refundType 0 现金退费 1 原路退费
  */
-function saveRefundZyFee() {
+function saveRefundZyFee(refundType) {
     $.ajax({
         type: "POST",
         url: '/thmz/saveZyDepositFile',
@@ -511,7 +538,8 @@ function saveRefundZyFee() {
         data: JSON.stringify({
             "status": "2",
             "receiptNo": $("#receiptNo").val(),
-            "depoType": $("#refundDepoType").val()
+            // "depoType": $("#refundDepoType").val(),
+            "refundType": refundType
         }),
         headers: {'Accept': 'application/json', 'Authorization': 'Bearer ' + localStorage.getItem("token")},
         success: function (res) {
@@ -523,6 +551,12 @@ function saveRefundZyFee() {
                 $('#tb_table').bootstrapTable("refresh");
                 $("#refungZyFeeModal").modal("hide");
                 $("#receiptNo").val(null);
+                $("#refNo").val(null);
+                $("#transDate").val(null);
+                $("#payChannel").val(null);
+                $("#qrCodeParam").val(null);
+                $("#traceNo").val(null);
+                $("#lsOrderNo").val(null);
                 successMesage(res);
             } else {
                 errorMesage(res);
@@ -546,6 +580,12 @@ function clearInput() {
     $("#responceType").val(null);
     $("#totalAmount").val(null);
     $("#balance").val(null);
+    $("#refNo").val(null);
+    $("#transDate").val(null);
+    $("#payChannel").val(null);
+    $("#qrCodeParam").val(null);
+    $("#traceNo").val(null);
+    $("#lsOrderNo").val(null);
 }
 
 /**
@@ -677,4 +717,95 @@ function setPrint() {
             }
         }
     });
-}
+}
+
+
+/**
+ * 刷卡/扫码
+ */
+function consume() {
+    $("#consume").attr("disabled", true);
+    $("#saveEdit").attr("disabled", true);
+    var chequeType = $("#depoType").val();
+    var amt = $("#depoAmount").val();
+    $.ajax({
+        type: "POST",
+        url: '/thmz/consume',
+        contentType: "application/json;charset=UTF-8",
+        dataType: "json",
+        data: JSON.stringify({
+            "chequeType": chequeType,
+            "amt": amt,
+            "type": 1
+        }),
+        headers: {'Accept': 'application/json', 'Authorization': 'Bearer ' + localStorage.getItem("token")},
+        success: function (res) {
+            if (res == '401' || res == 401) {
+                window.location.href = '/thmz/login/view'
+                return;
+            }
+            if (res.code == 0) {
+                successMesage(res);
+                $("#refNo").val(res.data.refNo);
+                $("#transDate").val(res.data.transDate);
+                $("#payChannel").val(res.data.payChannel);
+                $("#qrCodeParam").val(res.data.wxAliPayOrderNo);
+                $("#traceNo").val(res.data.traceNo);
+                $("#lsOrderNo").val(res.data.lsOrderNo);
+            } else {
+                errorMesage(res);
+            }
+            $("#saveEdit").attr("disabled", false);
+            $("#consume").attr("disabled", false);
+        }
+    });
+}
+
+
+/**
+ * 创建退款条形码
+ * @param chequeType
+ * @param psordnum
+ * @param agtordnum
+ * @param parChannel
+ * @param traceNo
+ * @param receiptNo
+ * @param transDate
+ * @param noRefund
+ */
+function createBarcode(chequeType, psordnum, agtordnum, parChannel, traceNo, receiptNo, transDate, noRefund) {
+    $("#depositFileListModal").modal('hide');
+    $("#parChannelBarcode").val('否');
+    if (traceNo == null || traceNo == 'null') {
+        traceNo = '';
+    }
+    $("#traceNoBarcode").val(traceNo);
+    $("#transDateBarcode").val(transDate);
+    if (chequeType == "银联卡") {
+        if (psordnum != null && psordnum != "" && psordnum != "null") {
+            $("#plIdBarcode").val(receiptNo);
+            $("#refNoBarcode").val(psordnum);
+            JsBarcode("#barcode", 'no barcode');
+            $("#barcodeModal").modal();
+        }
+        return;
+    }
+    if (agtordnum != null && agtordnum != "" && agtordnum != "null") {
+        if (noRefund) {
+            //此时是未退费状态,不加载可退费的条形码,以免误操作退费
+            JsBarcode("#barcode", 'no barcode');
+        } else {
+            JsBarcode("#barcode", agtordnum);
+        }
+        $("#plIdBarcode").val(receiptNo);
+        $("#refNoBarcode").val(psordnum);
+        if (parChannel != null && parChannel == 'DIGITAL_CASH') {
+            $("#parChannel").val('是');
+        }
+        $("#barcodeModal").modal();
+    } else {
+        $("#messageModal").modal();
+        $("#messageContent").html("当前操作的缴费记录支付方式非聚合支付,无法生成对应的支付条形码!");
+        return;
+    }
+}

+ 295 - 3
src/main/resources/templates/zy/accepting.html

@@ -13,7 +13,9 @@
 <script src="/thmz/js/jBox/jquery.jBox-2.3.min.js"></script>
 <script src="/thmz/js/jBox/baseISSObject.js"></script>
 <script src="/thmz/js/jBox/baseISSOnline.js"></script>
+<script src="/thmz/js/dependent/JsBarcode.all.js"></script>
 <script src="/thmz/js/jBox/common.js"></script>
+<script src="/thmz/js/common/cw_tools.js"></script>
 <script src="/thmz/js/zy/accepting.js"></script>
 <title>预交金处理</title>
 <style>
@@ -61,6 +63,7 @@
                     <div class="clearRegistrationDiv">
                         <a id="chargeFee"><i class="glyphicon glyphicon-plus">&nbsp;收费</i></a>
                         <a id="clearRegistration"><i class="fa fa-trash">&nbsp;清空</i></a>
+                        <a id="btn_tools"><i class="fa fa-suitcase">&nbsp;智能POS工具包</i></a>
                     </div>
                 </div>
             </div>
@@ -268,6 +271,19 @@
                 </form>
             </div>
             <div class="modal-footer">
+                <!--POS主机参考号-->
+                <input type="hidden" id="refNo"/>
+                <!--POS条形码编码-->
+                <input type="hidden" id="qrCodeParam"/>
+                <!-- POS交易日期-->
+                <input type="hidden" id="transDate"/>
+                <!-- POS 支付渠道(CHANNEL_ALIPAY  支付宝,CHANNEL_WEPAY  微信,CHANNEL_DRAGONPAY  龙支付,CHANNEL_UNIONCODEPAY  银联二维码,CHANNEL_UNIONPAY  其他银行卡交易)-->
+                <input type="hidden" id="payChannel"/>
+                <!--凭证号-->
+                <input type="hidden" id="traceNo"/>
+                <!--his订单号-->
+                <input type="hidden" id="lsOrderNo"/>
+                <button type="button" class="btn btn-primary" id="consume">刷卡/扫码</button>
                 <button type="button" class="btn btn-primary" id="saveEdit">保存</button>
                 <button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
             </div>
@@ -299,7 +315,7 @@
                     <!--</select>-->
                     <!--</div>-->
                     <!--</div>-->
-                    <div class="item form-group">
+                   <!-- <div class="item form-group">
                         <label class="control-label col-md-4 col-sm-4 col-xs-12" for="refundDepoType">支付方式 <span
                                 class="required">*</span>
                         </label>
@@ -307,7 +323,7 @@
                             <select class="form-control selectpicker show-tick" required="true"
                                     id="refundDepoType"></select>
                         </div>
-                    </div>
+                    </div>-->
                     <div class="item form-group">
                         <label class="control-label col-md-4 col-sm-4 col-xs-12" for="refundDepoAmount">退款金额
                         </label>
@@ -319,7 +335,9 @@
             </div>
             <div class="modal-footer">
                 <input type="hidden" id="receiptNo"/>
-                <button type="button" class="btn btn-primary" id="refundZyFee">确定退费</button>
+                <button type="button" class="btn btn-primary" onclick="saveRefundZyFee(0);">普通退费</button>
+                <button type="button" class="btn btn-primary" id="saveBackNo" onclick="saveRefundZyFee(1);">原路退费</button>
+            <!--    <button type="button" class="btn btn-primary" id="refundZyFee">确定退费</button>-->
                 <button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
             </div>
         </div>
@@ -381,6 +399,280 @@
     </div>
 </div>
 
+
+
+
+
+
+<!--财务工具包弹窗开始-->
+<div class="modal fade bs-example-modal-sm in" tabindex="-1" role="dialog" aria-hidden="true" id="toolsModal"
+     style="top:20%;">
+    <div class="modal-dialog modal-sm">
+        <div class="modal-content" style="width: 550px;max-height: 550px;overflow-y: auto;">
+            <div class="modal-header">
+                <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span>
+                </button>
+                <h4 class="modal-title modal-title-thmz">智能POS辅助工具</h4>
+            </div>
+            <div class="modal-body">
+                <form class="form-horizontal form-label-left" novalidate>
+                    <div class="col-md-12 col-sm-12 col-xs-12 "
+                         style="font-size: 14px;font-weight: 700;line-height: 39px;">
+                        <label style="padding-left: 0px;" class="col-md-3 col-sm-3 col-xs-3">
+                            <button type="button" class="btn btn-primary" onclick="sign()">签到</button>
+                        </label>
+                        <label style="padding-left: 0px;" class="col-md-3 col-sm-3 col-xs-3">
+                            <button type="button" class="btn btn-primary" onclick="balance()">查余</button>
+                        </label>
+                        <label style="padding-left: 0px;" class="col-md-3 col-sm-3 col-xs-3">
+                            <button type="button" class="btn btn-primary" onclick="consumeModal()">消费</button>
+                        </label>
+                        <label style="padding-left: 0px;" class="col-md-3 col-sm-3 col-xs-3">
+                            <button type="button" class="btn btn-primary" onclick="refundModal()">退费</button>
+                        </label>
+                        <label style="padding-left: 0px;" class="col-md-3 col-sm-3 col-xs-3">
+                            <button type="button" class="btn btn-primary" onclick="reprintModal()">重印</button>
+                        </label>
+                        <label style="padding-left: 0px;" class="col-md-3 col-sm-3 col-xs-3">
+                            <button type="button" class="btn btn-primary" onclick="queryModal()">交易查询</button>
+                        </label>
+                        <label style="padding-left: 0px;" class="col-md-3 col-sm-3 col-xs-3">
+                            <button type="button" class="btn btn-primary" onclick="settle()">结算</button>
+                        </label>
+                    </div>
+                </form>
+            </div>
+            <div class="modal-footer">
+                <button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
+            </div>
+        </div>
+    </div>
+</div>
+<!--财务工具包弹窗结尾-->
+
+
+
+
+<!--消费弹窗开始-->
+<div class="modal fade bs-example-modal-sm in" tabindex="-1" role="dialog" aria-hidden="true" id="consumeModal">
+    <div class="modal-dialog modal-sm">
+        <div class="modal-content" style="width: 480px;">
+            <div class="modal-header">
+                <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span>
+                </button>
+                <h4 class="modal-title modal-title-thmz">智能POS机消费</h4>
+            </div>
+            <div class="modal-body">
+                <form class="form-horizontal form-label-left" novalidate>
+                    <div class="item form-group col-md-12 col-sm-12 col-xs-12">
+                        <label style="padding-left: 0px;" class="control-label col-md-4 col-sm-4 col-xs-4">
+                            交易类型
+                        </label>
+                        <div class="col-md-8 col-sm-8 col-xs-8">
+                            <select class="form-control selectpicker show-tick"
+                                    id="consumeChequeType">
+                            </select>
+                        </div>
+                    </div>
+                    <div class="item form-group col-md-12 col-sm-12 col-xs-12">
+                        <label style="padding-left: 0px;" class="control-label col-md-4 col-sm-4 col-xs-4">
+                            交易金额
+                        </label>
+                        <div class="col-md-6 col-sm-6 col-xs-6"><input type="text" class="form-control" id="consumeAmount"></div>
+                        <label style="text-align: left;" class="control-label col-md-2 col-sm-2 col-xs-3">元</label>
+                    </div>
+                </form>
+            </div>
+            <div class="modal-footer">
+                <button type="button" class="btn btn-primary" onclick="consumeCommon()">刷卡/扫码</button>
+                <button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
+            </div>
+        </div>
+    </div>
+</div>
+<!--消费弹窗结尾-->
+
+
+
+<!--退货/聚合支付取消弹窗开始-->
+<div class="modal fade bs-example-modal-sm in" tabindex="-1" role="dialog" aria-hidden="true" id="refundModal">
+    <div class="modal-dialog modal-sm">
+        <div class="modal-content" style="width: 480px;">
+            <div class="modal-header">
+                <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span>
+                </button>
+                <h4 class="modal-title modal-title-thmz">智能POS机退费</h4>
+            </div>
+            <div class="modal-body">
+                <form class="form-horizontal form-label-left" novalidate>
+                    <div class="item form-group col-md-12 col-sm-12 col-xs-12">
+                        <label style="padding-left: 0px;" class="control-label col-md-4 col-sm-4 col-xs-4">
+                            交易类型
+                        </label>
+                        <div class="col-md-8 col-sm-8 col-xs-8">
+                            <select class="form-control selectpicker show-tick"  onchange="consumeChequeTypeRefundChange()"
+                                    id="consumeChequeTypeRefund">
+                            </select>
+                        </div>
+                    </div>
+                    <div class="item form-group col-md-12 col-sm-12 col-xs-12">
+                        <label style="padding-left: 0px;" class="control-label col-md-4 col-sm-4 col-xs-4">
+                            退货金额
+                        </label>
+                        <div class="col-md-6 col-sm-6 col-xs-6"><input type="text" class="form-control" id="refundPosAmount"></div>
+                        <label style="text-align: left;" class="control-label col-md-2 col-sm-2 col-xs-3">元</label>
+                    </div>
+                    <div class="item form-group col-md-12 col-sm-12 col-xs-12" id="refNoRefundDiv">
+                        <label style="padding-left: 0px;" class="control-label col-md-4 col-sm-4 col-xs-4">
+                            原交易参考号
+                        </label>
+                        <div class="col-md-8 col-sm-8 col-xs-8"><input type="text" class="form-control" id="refNoRefund"></div>
+                    </div>
+                    <div class="item form-group col-md-12 col-sm-12 col-xs-12" id="transDateRefundDiv">
+                        <label style="padding-left: 0px;" class="control-label col-md-4 col-sm-4 col-xs-4">
+                            原交易日期MMDD
+                        </label>
+                        <div class="col-md-8 col-sm-8 col-xs-8"><input type="text" class="form-control" id="transDateRefund"></div>
+                    </div>
+                    <div class="item form-group col-md-12 col-sm-12 col-xs-12 hide" id="parChannelRefundDiv">
+                        <label style="padding-left: 0px;" class="control-label col-md-4 col-sm-4 col-xs-4">
+                            数字人民币
+                        </label>
+                        <div class="col-md-8 col-sm-8 col-xs-8">
+                            <select class="form-control selectpicker show-tick"
+                                    id="parChannelRefund">
+                            </select>
+                        </div>
+                    </div>
+                    <div class="item form-group col-md-12 col-sm-12 col-xs-12 hide" id="barcodeRefundDiv">
+                        <label style="padding-left: 0px;" class="control-label col-md-4 col-sm-4 col-xs-4">
+                            支付订单条形码
+                        </label>
+                        <div class="col-md-8 col-sm-8 col-xs-8"><input type="text" class="form-control" id="barcodeRefund"></div>
+                    </div>
+                </form>
+            </div>
+            <div class="modal-footer">
+                <button type="button" class="btn btn-primary" onclick="refund()">退费</button>
+                <button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
+            </div>
+        </div>
+    </div>
+</div>
+<!--退货/聚合支付取消弹窗结尾-->
+
+
+<!--重印弹窗开始-->
+<div class="modal fade bs-example-modal-sm in" tabindex="-1" role="dialog" aria-hidden="true" id="reprintModal">
+    <div class="modal-dialog modal-sm">
+        <div class="modal-content" style="width: 480px;">
+            <div class="modal-header">
+                <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span>
+                </button>
+                <h4 class="modal-title modal-title-thmz">智能POS机消费</h4>
+            </div>
+            <div class="modal-body">
+                <form class="form-horizontal form-label-left" novalidate>
+                    <div class="item form-group col-md-12 col-sm-12 col-xs-12">
+                        <label style="padding-left: 0px;" class="control-label col-md-4 col-sm-4 col-xs-4">
+                            交易凭证号
+                        </label>
+                        <div class="col-md-8 col-sm-8 col-xs-6"><input type="text" class="form-control" id="traceNoReprint"></div>
+                    </div>
+                </form>
+            </div>
+            <div class="modal-footer">
+                <button type="button" class="btn btn-primary" onclick="reprint()">重印</button>
+                <button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
+            </div>
+        </div>
+    </div>
+</div>
+<!--重印弹窗结尾-->
+
+
+<!--交易查询弹窗开始-->
+<div class="modal fade bs-example-modal-sm in" tabindex="-1" role="dialog" aria-hidden="true" id="queryModal">
+    <div class="modal-dialog modal-sm">
+        <div class="modal-content" style="width: 480px;">
+            <div class="modal-header">
+                <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span>
+                </button>
+                <h4 class="modal-title modal-title-thmz">智能POS机消费</h4>
+            </div>
+            <div class="modal-body">
+                <form class="form-horizontal form-label-left" novalidate>
+                    <div class="item form-group col-md-12 col-sm-12 col-xs-12">
+                        <label style="padding-left: 0px;" class="control-label col-md-4 col-sm-4 col-xs-4">
+                            交易订单号
+                        </label>
+                        <div class="col-md-8 col-sm-8 col-xs-6"><input type="text" class="form-control" id="plIdReprint"></div>
+                    </div>
+                </form>
+            </div>
+            <div class="modal-footer">
+                <button type="button" class="btn btn-primary" onclick="query()">交易查询</button>
+                <button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
+            </div>
+        </div>
+    </div>
+</div>
+<!--交易查询弹窗结尾-->
+
+<!--条形码弹窗开始-->
+<div class="modal fade bs-example-modal-sm in" tabindex="-1" role="dialog" aria-hidden="true" id="barcodeModal">
+    <div class="modal-dialog modal-sm">
+        <div class="modal-content" style="width: 480px;">
+            <div class="modal-header">
+                <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span>
+                </button>
+                <h4 class="modal-title modal-title-thmz">请用POS机扫描屏幕条形码进行退款操作</h4>
+            </div>
+            <div class="modal-body">
+                <form class="form-horizontal form-label-left" novalidate>
+                    <div class="item form-group col-md-12 col-sm-12 col-xs-12">
+                        <label style="padding-left: 0px;" class="control-label col-md-3 col-sm-3 col-xs-3">
+                            交易参考号
+                        </label>
+                        <div class="col-md-9 col-sm-9 col-xs-9"><input type="text" class="form-control" id="refNoBarcode" readonly></div>
+                    </div>
+                    <div class="item form-group col-md-12 col-sm-12 col-xs-12">
+                        <label style="padding-left: 0px;" class="control-label col-md-3 col-sm-3 col-xs-3">
+                            凭证号
+                        </label>
+                        <div class="col-md-9 col-sm-9 col-xs-9"><input type="text" class="form-control" id="traceNoBarcode" readonly></div>
+                    </div>
+                    <div class="item form-group col-md-12 col-sm-12 col-xs-12">
+                        <label style="padding-left: 0px;" class="control-label col-md-3 col-sm-3 col-xs-3">
+                            订单号
+                        </label>
+                        <div class="col-md-9 col-sm-9 col-xs-9"><input type="text" class="form-control" id="plIdBarcode" readonly></div>
+                    </div>
+                    <div class="item form-group col-md-12 col-sm-12 col-xs-12">
+                        <label style="padding-left: 0px;" class="control-label col-md-3 col-sm-3 col-xs-3">
+                            交易日期
+                        </label>
+                        <div class="col-md-9 col-sm-9 col-xs-9"><input type="text" class="form-control" id="transDateBarcode" readonly></div>
+                    </div>
+                    <div class="item form-group col-md-12 col-sm-12 col-xs-12">
+                        <label style="padding-left: 0px;" class="control-label col-md-3 col-sm-3 col-xs-3">
+                            数字人民币
+                        </label>
+                        <div class="col-md-9 col-sm-9 col-xs-9"><input type="text" class="form-control" id="parChannelBarcode" readonly></div>
+                    </div>
+                    <div class="item form-group col-md-12 col-sm-12 col-xs-12">
+                        <svg id="barcode"></svg>
+                    </div>
+                </form>
+            </div>
+            <div class="modal-footer">
+                <button type="button" class="btn btn-default" data-dismiss="modal">取消</button>
+            </div>
+        </div>
+    </div>
+</div>
+<!--条形码弹窗结尾-->
+
 <object id="LODOP_OB" classid="clsid:2105C259-1E0C-4534-8141-A753534CB4CA" width=0 height=0>
     <embed id="LODOP_EM" type="application/x-print-lodop" width=0 height=0></embed>
 </object>