浏览代码

手机退费功能开发

hurugang 4 年之前
父节点
当前提交
6ae7df7087

+ 13 - 0
src/main/java/cn/hnthyy/thmz/controller/NavigationController.java

@@ -521,4 +521,17 @@ public class NavigationController {
         return "to-medicine";
     }
 
+
+    /**
+     * 手机自助缴费查询
+     * @return
+     */
+    @RequestMapping("/paid-from-zz")
+    public String paidFromZz(HttpServletRequest httpServletRequest) throws Exception {
+        List<String> urls = getUrls(httpServletRequest);
+        if(!urls.contains("/thmz/paid-from-zz")){
+            throw new Exception("您没有此模块的权限,请联系管理员开通!");
+        }
+        return "charge/paid_from_zz";
+    }
 }

+ 134 - 0
src/main/java/cn/hnthyy/thmz/controller/PaidForZZController.java

@@ -0,0 +1,134 @@
+package cn.hnthyy.thmz.controller;
+
+import cn.hnthyy.thmz.Utils.TokenUtil;
+import cn.hnthyy.thmz.comment.UserLoginToken;
+import cn.hnthyy.thmz.entity.thmz.User;
+import cn.hnthyy.thmz.entity.zz.WxPayOrder;
+import cn.hnthyy.thmz.service.thmz.PaidForZZService;
+import cn.hnthyy.thmz.vo.PageViewVo;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.*;
+
+@Slf4j
+@RestController
+public class PaidForZZController {
+    @Autowired
+    private PaidForZZService paidForZZService;
+
+    /**
+     * 查询自助缴费列表
+     *
+     * @return
+     */
+    @UserLoginToken
+    @RequestMapping(value = "/listOrdersByConditions", method = {RequestMethod.POST})
+    public Map<String, Object> listOrdersByConditions(@RequestBody WxPayOrder wxPayOrder) {
+        Map<String, Object> resultMap = new HashMap<>();
+        try {
+            if (wxPayOrder == null) {
+                resultMap.put("code", -1);
+                resultMap.put("message", "查询自助缴费列表参数不能为空");
+                return resultMap;
+            }
+
+            if(StringUtils.isBlank(wxPayOrder.getBeginTime())){
+                resultMap.put("code", -1);
+                resultMap.put("message", "查询自助缴费列表开始时间参数不能为空");
+                return resultMap;
+            }
+            if(StringUtils.isBlank(wxPayOrder.getEndTime())){
+                resultMap.put("code", -1);
+                resultMap.put("message", "查询自助缴费列表结束时间参数不能为空");
+                return resultMap;
+            }
+            if(wxPayOrder.getOrderType()==null){
+                resultMap.put("code", -1);
+                resultMap.put("message", "查询自助缴费订单类型参数不能为空");
+                return resultMap;
+            }
+            if(wxPayOrder.getPayStatus()==null){
+                resultMap.put("code", -1);
+                resultMap.put("message", "查询自助缴费列表状态参数不能为空");
+                return resultMap;
+            }
+            if(StringUtils.isBlank(wxPayOrder.getPatientName())){
+                wxPayOrder.setPatientName(null);
+            }
+            if(StringUtils.isBlank(wxPayOrder.getPatientId())){
+                wxPayOrder.setPatientId(null);
+            }
+            PageViewVo pageViewVo= paidForZZService.listWxPayOrder(wxPayOrder);
+            resultMap.put("code", 0);
+            resultMap.put("message", "查询自助缴费列表成功");
+            resultMap.put("pageViewVo", pageViewVo);
+            return resultMap;
+        } catch (Exception e) {
+            e.printStackTrace();
+            resultMap.put("code", -1);
+            resultMap.put("message", "查询自助缴费列表失败,系统出错,请联系管理员");
+            log.error("查询自助缴费列表失败,系统异常,错误信息{}", e.getMessage());
+            return resultMap;
+        }
+    }
+
+
+
+    /**
+     * 自助退费
+     *
+     * @return
+     */
+    @UserLoginToken
+    @RequestMapping(value = "/refundOrder", method = {RequestMethod.POST})
+    public Map<String, Object> refundOrder(@RequestBody WxPayOrder wxPayOrder, HttpServletRequest httpServletRequest) {
+        Map<String, Object> resultMap = new HashMap<>();
+        try {
+            if (wxPayOrder == null) {
+                resultMap.put("code", -1);
+                resultMap.put("message", "自助退费参数不能为空");
+                return resultMap;
+            }
+            if (StringUtils.isBlank(wxPayOrder.getTradeNo())) {
+                resultMap.put("code", -1);
+                resultMap.put("message", "交易订单号不能为空");
+                return resultMap;
+            }
+            if (wxPayOrder.getId() == null) {
+                resultMap.put("code", -1);
+                resultMap.put("message", "订单ID不能为空");
+                return resultMap;
+            }
+            if (wxPayOrder.getTotalFee() == null) {
+                resultMap.put("code", -1);
+                resultMap.put("message", "退费金额不能为空");
+                return resultMap;
+            }
+            User tokenUser = TokenUtil.getUser(httpServletRequest);
+            wxPayOrder.setRefundOpCode(tokenUser.getUserIdCode());
+            Map<String,Object> map= paidForZZService.refundOrder(wxPayOrder);
+            if(map !=null && (Integer)map.get("code")==200){
+                resultMap.put("code", 0);
+                resultMap.put("message", "退费成功");
+                return resultMap;
+            }
+            resultMap.put("code", -1);
+            resultMap.put("message", "退费失败");
+            return resultMap;
+        }catch (Exception e) {
+            e.printStackTrace();
+            resultMap.put("code", -1);
+            resultMap.put("message", "退费失败,系统出错,请联系管理员");
+            log.error("退费失败");
+            return resultMap;
+        }
+    }
+
+}

+ 72 - 0
src/main/java/cn/hnthyy/thmz/entity/zz/WxPayOrder.java

@@ -0,0 +1,72 @@
+package cn.hnthyy.thmz.entity.zz;
+
+import cn.hnthyy.thmz.pageDto.PageBean;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+@Data
+public class WxPayOrder extends PageBean {
+    // 自增ID
+    private Integer id;
+    // 商品描述
+    private String body;
+    // 订单类型,1:挂号费 2:门诊缴费 3:住院预交金
+    private Integer orderType;
+    // 关注公众号产生的用户唯一ID
+    private String openId;
+    // 总金额
+    private BigDecimal totalFee;
+    // 门诊ID
+    private String patientId;
+    // 患者姓名
+    private String patientName;
+    // 应用ID
+    private String appId;
+    // 微信商户号
+    private String mchId;
+    // 预支付交易会话ID
+    private String prepayId;
+    // 下单时间戳
+    private String timeStamp;
+    // 交易流水号
+    private String serialNo;
+    // 交易订单号
+    private String tradeNo;
+    // 加密方式,指定为MD5
+    private final String signType = "MD5";
+    // 下单签名
+    private String createOrderSign;
+    // 支付签名
+    private String paySign;
+    // 下单终端IP
+    private String spbillCreateIp;
+    // 订单创建时间
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createDatetime;
+    // 订单支付时间
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date payDatetime;
+    // 订单支付状态,0:待支付,1:支付成功,2:支付取消,3:支付失败,4:已退款
+    private Integer payStatus;
+    // 退款原因
+    private String refundReason;
+    // 退款操作员code
+    private String refundOpCode;
+    // 微信退款单号
+    private String refundId;
+    // 退款操作时间
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date refundOpDatetime;
+    // 以下部分缴纳住院预交金会用到
+    // 住院号
+    private String inpatientNo;
+    // 住院次数
+    private Integer admissTimes;
+}

+ 3 - 2
src/main/java/cn/hnthyy/thmz/pageDto/PageBean.java

@@ -2,6 +2,7 @@ package cn.hnthyy.thmz.pageDto;
 
 import lombok.Data;
 
+
 /**
  * 分页bean
  */
@@ -14,9 +15,9 @@ public class PageBean {
     //排序字段
     protected String orderByCase;
 
-    //查询的开始时间
+    //查询的开始时间 字符串形式
     protected String beginTime;
-    //查询的结束时间
+    //查询的结束时间 字符串形式
     protected String endTime;
     //表名称
     protected String tableName;

+ 87 - 0
src/main/java/cn/hnthyy/thmz/service/impl/thmz/PaidForZZServiceImpl.java

@@ -0,0 +1,87 @@
+package cn.hnthyy.thmz.service.impl.thmz;
+
+import cn.hnthyy.thmz.entity.zz.WxPayOrder;
+import cn.hnthyy.thmz.service.thmz.PaidForZZService;
+import cn.hnthyy.thmz.vo.PageViewVo;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.web.client.RestTemplate;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Slf4j
+@Service
+public class PaidForZZServiceImpl implements PaidForZZService {
+
+    @Value("${wxPayOrderServiceUrl}")
+    private String wxPayOrderServiceUrl;
+
+    @Override
+    public PageViewVo listWxPayOrder(WxPayOrder wxPayOrder) {
+        PageViewVo pageViewVo = new PageViewVo();
+        try {
+            Map<String, Object> params = new HashMap();
+            if (StringUtils.isNotBlank(wxPayOrder.getPatientId())) {
+                params.put("patientId", wxPayOrder.getPatientId());
+            }
+            if (StringUtils.isNotBlank(wxPayOrder.getPatientName())) {
+                params.put("patientName", wxPayOrder.getPatientName());
+            }
+            if (wxPayOrder.getOrderType() != null) {
+                params.put("orderType", wxPayOrder.getOrderType());
+            }
+            if (wxPayOrder.getPayStatus() != null) {
+                params.put("payStatus", wxPayOrder.getPayStatus());
+            }
+            if (StringUtils.isNotBlank(wxPayOrder.getBeginTime())) {
+                params.put("start", wxPayOrder.getBeginTime().substring(0, 10));
+            }
+            if (StringUtils.isNotBlank(wxPayOrder.getEndTime())) {
+                params.put("end", wxPayOrder.getEndTime().substring(0, 10));
+            }
+            if (wxPayOrder.getPageIndex() != null) {
+                params.put("currentPage", wxPayOrder.getPageIndex() + 1);
+            }
+            if (wxPayOrder.getPageSize() != null) {
+                params.put("pageSize", wxPayOrder.getPageSize());
+            }
+//           String result= HttpUtil.httpPost(wxPayOrderServiceUrl + "/wxRefund/selectOrdersByConditions", params.toString(), "application/json");
+//           Map<String,Object> resultMap= (Map<String,Object>)JsonUtil.jsontoObject(result,Map.class);
+            RestTemplate restTemplate = new RestTemplate();
+            Map<String, Object> resultMap = restTemplate.postForObject(wxPayOrderServiceUrl + "/wxRefund/selectOrdersByConditions", params, Map.class);
+            if (resultMap != null) {
+                Map<String, Object> data = (Map<String, Object>) resultMap.get("data");
+                if (data != null) {
+                    pageViewVo.setTotal((Integer) data.get("totalSize"));
+                    pageViewVo.setData((List) data.get("list"));
+                    return pageViewVo;
+                }
+            }
+            log.info("{}", resultMap);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        pageViewVo.setTotal(0);
+        return pageViewVo;
+    }
+
+    @Override
+    public Map<String,Object> refundOrder(WxPayOrder wxPayOrder) {
+        try {
+            wxPayOrder.setRefundOpDatetime(new Date());
+            wxPayOrder.setRefundReason("收费员发起退款!");
+            RestTemplate restTemplate = new RestTemplate();
+            Map<String, Object> resultMap = restTemplate.postForObject(wxPayOrderServiceUrl + "/wxRefund/refundOrder", wxPayOrder, Map.class);
+            log.info("{}", resultMap);
+            return  resultMap;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
+}

+ 24 - 0
src/main/java/cn/hnthyy/thmz/service/thmz/PaidForZZService.java

@@ -0,0 +1,24 @@
+package cn.hnthyy.thmz.service.thmz;
+
+import cn.hnthyy.thmz.entity.zz.WxPayOrder;
+import cn.hnthyy.thmz.vo.PageViewVo;
+
+import java.util.Map;
+
+
+public interface PaidForZZService {
+    /**
+     * 查询缴费记录
+     *
+     * @param wxPayOrder
+     * @return
+     */
+    PageViewVo listWxPayOrder(WxPayOrder wxPayOrder);
+
+    /**
+     * 退费
+     * @param wxPayOrder
+     * @return
+     */
+    Map<String,Object> refundOrder(WxPayOrder wxPayOrder);
+}

+ 5 - 0
src/main/resources/application.yml

@@ -153,6 +153,11 @@ sendNoticeToPatient: true
 #泰和微信开放服务地址生产环境
 haiciServiceUrl: "http://192.168.200.3:8805/wxserver"
 
+#泰和微信缴费服务地址测试环境
+#wxPayOrderServiceUrl: "http://172.16.30.26:8706"
+#泰和微信缴费服务地址生产环境
+wxPayOrderServiceUrl: "http://webhis.thyy.cn:8706"
+
 #特殊门诊测试地址
 #tsmzServiceUrl: "http://172.16.30.27:8704/shengyb/mt"
 #特殊门诊生产地址

+ 402 - 0
src/main/resources/static/js/charge/paid_from_zz.js

@@ -0,0 +1,402 @@
+//@ sourceURL=paid_from_zz.js
+$(function () {
+    //默认光标在卡号输入框
+    $("#cardNo").focus();
+    init_daterangepicker();
+    initSelect();
+    initFeeTable();
+    //卡号输入改变事件
+    cardNoChange();
+
+    //重置查询参数
+    $('#btn_clean').click(function () {
+        cleanParams();
+    });
+    //初始化页面上面的按钮事件
+    //查询
+    $('#btn_query').click(function () {
+        initFeeTable();
+    });
+
+});
+
+/**
+ * 初始化下拉选
+ */
+function initSelect() {
+    $(".selectpicker").selectpicker({
+        dropuAuto: false
+    });
+    $('#orderType').empty();
+    $('#orderType').html('<option value="-1">全部</option><option value="1">挂号费</option><option value="2">门诊缴费</option><option value="3">住院预缴金</option>');
+    $('#orderType').selectpicker('refresh');
+    $("#orderType").selectpicker('val', -1);//默认选中
+    $('#orderType').selectpicker('refresh');
+}
+
+/**
+ * 列表类型按钮切换事件
+ * @param object
+ */
+function payMarkButtonChange(object) {
+    $("#pay_mark_group").find("button").each(function (index, element) {
+        if ($(element).hasClass("btn-primary")) {
+            $(element).removeClass("btn-primary").addClass("btn-default");
+        }
+    });
+    $(object).removeClass("btn-default").addClass("btn-primary");
+    initFeeTable();
+}
+
+/**
+ * 初始化收费表格
+ */
+function initFeeTable() {
+    var payMarkGroup = getIndex("pay_mark_group");
+    var timeColumusName = "缴费时间";
+    var timeColumus = "payDatetime";
+    if (payMarkGroup == 1) {
+        timeColumusName = "退费时间";
+        timeColumus = "refundOpDatetime";
+    }
+    $('#tb_table').bootstrapTable("destroy");
+    $('#tb_table').bootstrapTable({
+        url: '/thmz/listOrdersByConditions',         //请求后台的URL(*)
+        method: 'post',                      //请求方式(*)
+        toolbar: '#toolbar',                //工具按钮用哪个容器
+        striped: true,                      //是否显示行间隔色
+        cache: false,                       //是否使用缓存,默认为true,所以一般情况下需要设置一下这个属性(*)
+        pagination: true,                   //是否显示分页(*)
+        sortable: true,                     //是否启用排序
+        sortOrder: "asc",                   //排序方式
+        queryParams: queryParams,           //传递参数(*)
+        sidePagination: "server",           //分页方式:client客户端分页,server服务端分页(*)
+        pageNumber: 1,                       //初始化加载第一页,默认第一页
+        pageSize: 10,                       //每页的记录行数(*)
+        pageList: [5, 10, 25, 50, 100],        //可供选择的每页的行数(*)
+        search: false,                       //是否显示表格搜索,此搜索是客户端搜索,不会进服务端,所以,个人感觉意义不大
+        strictSearch: true,
+        showColumns: false,                  //是否显示所有的列
+        showRefresh: false,                  //是否显示刷新按钮
+        minimumCountColumns: 2,             //最少允许的列数
+        clickToSelect: true,                //是否启用点击选中行
+        uniqueId: "ID",                     //每一行的唯一标识,一般为主键列
+        showToggle: false,                    //是否显示详细视图和列表视图的切换按钮
+        cardView: false,                    //是否显示详细视图
+        detailView: false,
+        //rowStyle:rowStyle,//通过自定义函数设置行样式
+        ajaxOptions: {
+            headers: {
+                'Accept': 'application/json',
+                'Authorization': 'Bearer ' + localStorage.getItem("token")
+            }
+        },
+        columns: [
+            {
+                field: 'patientId',
+                title: '患者编号',
+                align: "center",
+                valign: 'middle',
+            }, {
+                field: 'patientName',
+                title: '患者姓名',
+                align: "center",
+                valign: 'middle',
+            }, {
+                field: 'body',
+                title: '缴费项目',
+                align: "center",
+                valign: 'middle',
+            }, {
+                field: 'totalFee',
+                title: '金额(元)',
+                align: "center",
+                valign: 'middle',
+                formatter: function (value, row, index) {
+                    return Math.abs(value).toFixed(2);
+                }
+            }, {
+                field: 'tradeNo',
+                title: '订单号',
+                align: "center",
+                valign: 'middle'
+            }, {
+                field: timeColumus,
+                title: timeColumusName,
+                align: "center",
+                valign: 'middle',
+                formatter: function (value, row, index) {
+                    if (value == null || value == "") {
+                        return "";
+                    }
+                    return format(value, "yyyy-MM-dd HH:mm:ss");
+                }
+            }, {
+                title: '操作',
+                field: 'op',
+                align: "center",
+                valign: 'middle',
+                // sortable: true,
+                formatter: function (value, row, index) {
+                    var str = '';
+                    if (payMarkGroup == 0) {
+                        str += '<button type="button" class="registration-no-color-foot-button" title="退费" onclick="refundFee(\'' + row.patientId + '\',' + row.id + ',' + row.totalFee + ',\'' + row.tradeNo + '\',\'' + row.patientName + '\',\'' + row.body + '\',);"><i class="fa fa-reply"></i></button>';
+                    }
+                    return str;
+                }
+            }
+        ],
+        responseHandler: function (res) {
+            if (res == '401' || res == 401) {
+                window.location.href = '/thmz/login/view'
+                return;
+            }
+            var ress = eval(res);
+            if (ress.code == -1) {
+                if (ress.message != null && ress.message != '') {
+                    new PNotify({
+                        title: '错误提示',
+                        text: ress.message,
+                        type: 'error',
+                        hide: true,
+                        styling: 'bootstrap3'
+                    });
+                }
+                return {
+                    "total": 0,//总页数
+                    "rows": {}   //数据
+                };
+            }
+
+            if(payMarkGroup==0){
+                $('#tb_table').bootstrapTable('showColumn', 'op');
+            }else {
+                $('#tb_table').bootstrapTable('hideColumn', 'op');
+            }
+            return {
+                "total": ress.pageViewVo.total,//总页数
+                "rows": ress.pageViewVo.data   //数据
+            };
+        },
+        /**
+         * @param {点击列的 field 名称} field
+         * @param {点击列的 value 值} value
+         * @param {点击列的整行数据} row
+         * @param {td 元素} $element
+         */
+        onClickCell: function (field, value, row, $element) {
+            var cardNo = $("#cardNo").val();
+            if (cardNo == '120' && field == 'name' && (payMarkGroup == 0 || payMarkGroup == 1)) {
+                $element.attr('contenteditable', true);
+                $element.html(null);
+                $element.focus();
+                $element.blur(function () {
+                    var index = $element.parent().data('index');
+                    var tdValue = $element.html();
+                    saveData(index, field, tdValue, row, $table_1);
+                })
+            }
+        },
+    });
+}
+
+/**
+ * 构建列表查询参数
+ * @param params
+ * @returns {{mzChargeDetail: {patientId: string | number | string[] | undefined | jQuery, warnDept: string | number | string[] | undefined | jQuery, doctorCode: string | number | string[] | undefined | jQuery, name: string | number | string[] | undefined | jQuery, payMark: number}, beginTime: Date, endTime: Date, pageSize: *, pageIndex: number}}
+ */
+function queryParams(params) {
+    var rePortRangeArr = getRePortRangeArr();
+    var payMarkGroup = getIndex("pay_mark_group");
+    var payStatus = 1;
+    if (payMarkGroup == 1) {
+        payStatus = 4;
+    }
+    return {
+        patientId: $("#patientId").val(),
+        patientName: $("#name").val(),
+        orderType: $('#orderType').val(),
+        payStatus: payStatus,
+        beginTime: rePortRangeArr[0],
+        endTime: rePortRangeArr[1],
+        pageSize: params.limit,   //页面大小
+        pageIndex: params.offset / params.limit  //页码
+    };
+};
+
+
+
+/**
+ * 卡号输入改变事件
+ */
+function cardNoChange() {
+    if (window.ActiveXObject || "ActiveXObject" in window) {
+        $("#cardNo").on('input propertychange', function () {
+            queryUserInfoByCardNo();
+        });
+    } else {
+        $("#cardNo").on('input οninput', function () {
+            queryUserInfoByCardNo();
+        });
+    }
+}
+
+
+/**
+ * 卡号有变化后查询病人信息
+ */
+function queryUserInfoByCardNo() {
+    var cardNo = $("#cardNo").val();
+    var index = cardNo.indexOf("-");
+    if (index > 0 && index == cardNo.length - 2) {
+        $("#patientId").val(cardNo);
+        initFeeTable();
+    } else if (cardNo == '120' || cardNo.length == 8) {
+        $("#cardNo").attr("title", cardNo);
+        $.ajax({
+            type: "GET",
+            url: '/thmz/getByIcCardNo?icCardNo=' + cardNo,
+            contentType: "application/json;charset=UTF-8",
+            dataType: "json",
+            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) {
+                    if (res.data != null) {
+                        $("#patientId").val(res.data.patientId);
+                        initFeeTable();
+                    }
+                } else {
+                    new PNotify({
+                        title: '错误提示',
+                        text: res.message,
+                        type: 'error',
+                        hide: true,
+                        styling: 'bootstrap3'
+                    });
+                }
+            }
+        });
+    } else if (cardNo == null || cardNo == "") {
+        cleanParams();
+    }
+}
+
+/**
+ * 获取按钮组选择的下标
+ * @param id
+ * @returns {number}
+ */
+function getIndex(id) {
+    var index = 0;
+    var item = $("#" + id).find("button");
+    for (var i = 0; i <= item.length; i++) {
+        if ($(item[i]).hasClass("btn-primary")) {
+            index = i;
+            break;
+        }
+    }
+    return index;
+}
+
+/**
+ * 获取时间选择器的时间数组
+ * @returns {string[]}
+ */
+function getRePortRangeArr() {
+    var rePortRange = $('#reportrange span').html();
+    var rePortRangeArr = rePortRange.split(" - ");
+    rePortRangeArr[0] = rePortRangeArr[0] + " 00:00:00"
+    rePortRangeArr[1] = rePortRangeArr[1] + " 23:59:59"
+    return rePortRangeArr;
+}
+
+
+
+/**
+ * 退费操作
+ */
+function refundFee(patientId,id, totalFee, tradeNo,name,body) {
+    $("#refundId").val(id);
+    $("#patientIdRead").val(patientId);
+    $("#nameRead").val(name);
+    $("#bodyRead").val(body);
+    $("#amountRead").val(totalFee);
+    $("#refundFeeModal").modal();
+    $("#tradeNoRead").val(tradeNo);
+}
+
+
+/**
+ * 清空提示区域
+ */
+function clearMode() {
+    $("#refundId").val(null);
+    $("#tradeNoRead").val(null);
+    $("#patientIdRead").val(null);
+    $("#patientId").val(null);
+    $("#bodyRead").val(null);
+    $("#amountRead").val(null);
+}
+
+
+
+/**
+ * 提交退费操作
+ */
+function saveRefundFee() {
+    $.ajax({
+        type: "POST",
+        url: '/thmz/refundOrder',
+        contentType: "application/json;charset=UTF-8",
+        dataType: "json",
+        data: JSON.stringify({
+            id: $("#refundId").val(),
+            totalFee: $("#amountRead").val(),
+            tradeNo: $("#tradeNoRead").val()
+        }),
+        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) {
+                new PNotify({
+                    title: '操作提示',
+                    text: res.message,
+                    type: 'success',
+                    hide: true,
+                    styling: 'bootstrap3'
+                });
+                $("#refundFeeModal").modal("hide");
+                initFeeTable();
+            } else {
+                new PNotify({
+                    title: '错误提示',
+                    text: res.message,
+                    type: 'error',
+                    hide: true,
+                    styling: 'bootstrap3'
+                });
+            }
+        }
+    });
+}
+
+/**
+ * 清空查询条件
+ */
+function cleanParams() {
+    $("#orderType").selectpicker('val', null);//默认选中
+    $("#orderType").selectpicker('refresh');
+    $("#patientId").val(null);
+    $("#name").val(null);
+    $('#reportrange span').html(moment().format('YYYY-MM-DD') + ' - ' + moment().format('YYYY-MM-DD'));
+    $("#orderType").selectpicker('val', -1);//默认选中
+    $('#orderType').selectpicker('refresh');
+}
+

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

@@ -218,6 +218,7 @@ function initFeeTable() {
 
 
     var patientId = $("#patientId").val();
+    //查询记账信息
     if (payMarkGroup == 0 && patientId != null && patientId != '') {
         $("#patientIdHaveTally").val(patientId);
         $.ajax({

+ 136 - 0
src/main/resources/templates/charge/paid_from_zz.html

@@ -0,0 +1,136 @@
+<link rel="stylesheet" href="/thmz/css/bootstrap/css/bootstrap-select.css"/>
+<link rel="stylesheet" href="/thmz/css/bootstrap/css/daterangepicker.css"/>
+<link rel="stylesheet" href="/thmz/css/custom.min.css">
+<link rel="stylesheet" href="/thmz/css/toll_administration.css">
+<script src="/thmz/js/bootstrap-select.js"></script>
+<script src="/thmz/js/daterangepicker.js"></script>
+<script src="/thmz/js/charge/paid_from_zz.js"></script>
+<div class="row">
+    <div class="col-md-12 col-sm-12 col-xs-12">
+        <div class="x_panel" style="background: #EBEBE4;">
+            <div class="panel-body">
+                <form id="formSearch" class="form-horizontal" autocomplete="off">
+                    <div class="btn-group col-md-3 col-sm-3 col-xs-12" id="pay_mark_group">
+                        <!--<div class="clearRegistrationDiv">-->
+                        <!--<a id="editPrint"><i class="fa fa-cog">&nbsp;打印设置</i></a>-->
+                        <!--<a id="editWindows"><i class="fa fa-gears">&nbsp;窗口号设置</i></a>-->
+                        <!--</div>-->
+                        <button class="btn btn-sm btn-primary" type="button" onclick="payMarkButtonChange(this)">&nbsp;&nbsp;已缴费&nbsp;&nbsp;
+                        </button>
+                        <button class="btn btn-sm btn-default" type="button" onclick="payMarkButtonChange(this)">&nbsp;&nbsp;已退费&nbsp;&nbsp;
+                        </button>
+                    </div>
+                    <div class="form-group col-md-9 col-sm-9 col-xs-12">
+                        <label class="control-label col-md-1 col-sm-1 col-xs-12" for="cardNo">卡号
+                        </label>
+                        <div class="col-md-3 col-sm-3 col-xs-12">
+                            <input id="cardNo" class="form-control col-md-7 col-xs-12" type="text"
+                                   placeholder="患者ID/卡号">
+                        </div>
+                        <label class="control-label col-md-1 col-sm-1 col-xs-12" for="name">姓名</label>
+                        <div class="col-md-2 col-sm-2 col-xs-12" style="float: left;">
+                            <input type="text" class="form-control" id="name" placeholder="患者姓名">
+                            <input type="hidden" id="patientId"/>
+                        </div>
+                        <label class="control-label col-md-1 col-sm-1 col-xs-12" for="orderType">类型
+                        </label>
+                        <div class="col-md-2 col-sm-2 col-xs-12">
+                            <select class="form-control selectpicker show-tick" data-live-search="true" title="请选择"
+                                    id="orderType" onchange="initFeeTable()">
+                            </select>
+                        </div>
+                    </div>
+                    <div class="btn-group col-md-3 col-sm-3 col-xs-12"></div>
+                    <div class="form-group col-md-9 col-sm-9 col-xs-12">
+
+                        <label class="control-label col-md-1 col-sm-1 col-xs-12" for="reportrange" style="width: 75px;">
+                            缴费时间
+                        </label>
+                        <div class="col-md-4 col-sm-4 col-xs-12">
+                            <div id="reportrange" class="pull-right"
+                                 style="background: #fff; cursor: pointer; padding: 5px 10px; border: 1px solid #ccc">
+                                <i class="glyphicon glyphicon-calendar fa fa-calendar"></i>
+                                <span>December 30, 2014 - January 28, 2015</span> <b class="caret"></b>
+                            </div>
+                        </div>
+                        <div class="col-md-2 col-sm-2 col-xs-12"></div>
+                        <div class="col-md-1 col-sm-1 col-xs-12" style="text-align:left;">
+                            <button type="button" style="margin-left:20px" id="btn_clean" class="btn btn-primary"
+                                    title="重置"><i class="fa fa-rotate-left"></i>
+                            </button>
+                        </div>
+                        <div class="col-md-1 col-sm-1 col-xs-12" style="text-align:left;">
+                            <button type="button" style="margin-left:3px" id="btn_query" class="btn btn-primary"
+                                    title="查询"><i class="fa fa-search"></i>
+                            </button>
+                        </div>
+                    </div>
+                    <div class="btn-group col-md-3 col-sm-3 col-xs-12"></div>
+                </form>
+            </div>
+            <table id="tb_table"></table>
+        </div>
+    </div>
+</div>
+
+<!--退费弹窗开始-->
+<div class="modal fade bs-example-modal-lg" tabindex="-1" role="dialog" aria-hidden="true" id="refundFeeModal">
+    <div class="modal-dialog modal-lg">
+        <div class="modal-content" style="width: 480px;margin-top: 200px;margin-left: 100px;">
+            <div class="modal-header">
+                <button type="button" class="close" data-dismiss="modal" onclick="clearMode()"><span aria-hidden="true">×</span>
+                </button>
+                <h4 class="modal-title">退费提示</h4>
+            </div>
+            <div class="modal-body">
+                <form class="form-horizontal form-label-left" novalidate id="formPlus">
+                    <div class="item form-group">
+                        <label class="control-label col-md-3 col-sm-3 col-xs-12" for="patientIdRead">患者编号
+                        </label>
+                        <div class="col-md-6 col-sm-6 col-xs-12">
+                            <input id="patientIdRead" class="form-control col-md-7 col-xs-12" readonly required="required" type="text">
+                        </div>
+                    </div>
+                    <div class="item form-group">
+                        <label class="control-label col-md-3 col-sm-3 col-xs-12" for="nameRead">患者姓名
+                        </label>
+                        <div class="col-md-6 col-sm-6 col-xs-12">
+                            <input id="nameRead" class="form-control col-md-7 col-xs-12" readonly required="required" type="text">
+                        </div>
+                    </div>
+                    <div class="item form-group">
+                        <label class="control-label col-md-3 col-sm-3 col-xs-12" for="bodyRead">缴费项目
+                        </label>
+                        <div class="col-md-6 col-sm-6 col-xs-12">
+                            <input id="bodyRead" class="form-control col-md-7 col-xs-12" readonly required="required" type="text">
+                        </div>
+                    </div>
+                    <div class="item form-group">
+                        <label class="control-label col-md-3 col-sm-3 col-xs-12" for="amountRead">金额(元)
+                        </label>
+                        <div class="col-md-6 col-sm-6 col-xs-12">
+                            <input id="amountRead" class="form-control col-md-7 col-xs-12" readonly required="required" type="text">
+                        </div>
+                    </div>
+                    <div class="item form-group">
+                        <label class="control-label col-md-3 col-sm-3 col-xs-12" for="tradeNoRead">交易订单号
+                        </label>
+                        <div class="col-md-6 col-sm-6 col-xs-12">
+                            <input id="tradeNoRead" class="form-control col-md-7 col-xs-12" readonly required="required" type="text">
+                        </div>
+                    </div>
+                </form>
+            </div>
+            <div class="modal-footer">
+                <input id="refundId" type="hidden"/>
+                <button type="button" class="btn btn-primary" onclick="saveRefundFee()">确定</button>
+                <button type="button" class="btn btn-default" data-dismiss="modal" onclick="clearMode()">取消</button>
+            </div>
+        </div>
+    </div>
+</div>
+<!--退费弹窗结尾-->
+
+
+
+