935090232@qq.com
2021-01-27 717122a8929e0ea00acea4c7b1516e03a766c944
新增交易流水
3 files modified
1 files added
473 ■■■■■ changed files
zq-erp/src/main/java/com/matrix/system/hive/statistics/OrderFlowAction.java 98 ●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/static/js/systools/AjaxProxyVue.js 11 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive-erp/statistics/jyls.html 314 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/resources/templates/views/admin/hive/statistics/jyls.html 50 ●●●●● patch | view | raw | blame | history
zq-erp/src/main/java/com/matrix/system/hive/statistics/OrderFlowAction.java
@@ -1,44 +1,29 @@
package com.matrix.system.hive.statistics;
import com.matrix.core.constance.MatrixConstance;
import com.matrix.core.pojo.AjaxResult;
import com.matrix.core.pojo.PaginationVO;
import com.matrix.core.tools.DateUtil;
import com.matrix.core.tools.WebUtil;
import com.matrix.core.tools.LogUtil;
import com.matrix.core.tools.excl.ExcelSheetPO;
import com.matrix.core.tools.excl.ExcelUtil;
import com.matrix.core.tools.excl.ExcelVersion;
import com.matrix.system.app.vo.UserInfoVo;
import com.matrix.system.common.bean.SysUsers;
import com.matrix.system.common.constance.AppConstance;
import com.matrix.system.common.tools.DataAuthUtil;
import com.matrix.system.common.tools.ResponseHeadUtil;
import com.matrix.system.hive.action.util.QueryUtil;
import com.matrix.system.hive.bean.AchieveNew;
import com.matrix.system.hive.bean.SysOrder;
import com.matrix.system.hive.bean.SysOrderFlow;
import com.matrix.system.hive.bean.SysOrderItem;
import com.matrix.system.hive.dao.SysOrderFlowDao;
import com.matrix.system.hive.dto.OrderFlowListDto;
import com.matrix.system.hive.service.AchieveNewService;
import com.matrix.system.hive.service.SysOrderItemService;
import com.matrix.system.hive.service.SysOrderService;
import com.matrix.system.hive.vo.OrderFlowVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import io.swagger.models.auth.In;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
@@ -50,11 +35,8 @@
@RequestMapping(value = "/admin/orderFlow")
public class OrderFlowAction {
    @Resource
    private SysOrderFlowDao orderFlowDao;
    /**
     * 交易流水查询
     */
@@ -63,9 +45,9 @@
    @ApiResponses({
            @ApiResponse(code = 200, message = "OK",  response = OrderFlowListDto.class)
    })
    @PostMapping(value = "/findSumDailyInfoNew")
    @PostMapping(value = "/findOrderFlow")
    public @ResponseBody
    AjaxResult findSumDailyInfoNew(@RequestBody OrderFlowListDto orderFlowListDto) {
    AjaxResult findOrderFlow(@RequestBody OrderFlowListDto orderFlowListDto) {
        if (!DataAuthUtil.hasAllShopAuth()) {
            QueryUtil.setQueryLimit(orderFlowListDto);
        } else {
@@ -77,6 +59,74 @@
        return result;
    }
    /**
     * 导出Excel
     */
    @GetMapping(value = "/exportOrderFlowExcel")
    public void exportOrderFlowExcel(OrderFlowListDto orderFlowListDto, HttpServletResponse res) {
        OutputStream os = null;
        try {
            if (!DataAuthUtil.hasAllShopAuth()) {
                QueryUtil.setQueryLimit(orderFlowListDto);
            } else {
                QueryUtil.setQueryLimitCom(orderFlowListDto);
            }
            orderFlowListDto.setLimit(null);
            List<OrderFlowVo> rows = orderFlowDao.selectInPage(orderFlowListDto);
            res.setCharacterEncoding("UTF-8");
            res.setHeader("content-type", "application/octet-stream;charset=UTF-8");
            res.setContentType("application/octet-stream;charset=UTF-8");
            Date date = new Date();
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日HH时mm分ss");
            res.setHeader("Content-Disposition", "attachment;filename=" +
                    java.net.URLEncoder.encode("交易流水" + dateFormat.format(date) + ".xlsx".trim(), "UTF-8"));
            os = res.getOutputStream();
            ExcelUtil.createWorkbookAtOutStream(ExcelVersion.V2007, disPoseExcelData(rows), os, true);
        } catch (Exception e) {
            LogUtil.error("交易流水导出异常", e);
        } finally {
            if (os != null) {
                try {
                    os.close();
                } catch (IOException e) {
                    LogUtil.error("关闭资源异常", e);
                }
            }
        }
    }
    private List<ExcelSheetPO> disPoseExcelData(List<OrderFlowVo> orderFlowVos) {
        List<ExcelSheetPO> res = new ArrayList<>();
        ExcelSheetPO orderSheet = new ExcelSheetPO();
        orderSheet.setSheetName("交易流水");
        orderSheet.setTitle("交易流水");
        String[] header = new String[]{"订单编号", "交易内容", "交易时间", "交易类型", "交易金额", "会员姓名",
                "支付方式", "支付流水号", "操作人",  "门店名称"};
        orderSheet.setHeaders(header);
        List<List<Object>> body = new ArrayList<>();
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");
        for (OrderFlowVo flowVo : orderFlowVos) {
                List<Object> bodyItem = new ArrayList<>();
                bodyItem.add(flowVo.getOrderNo());
                bodyItem.add(flowVo.getFlowContent());
                bodyItem.add(DateUtil.dateFormatStr(flowVo.getCreateTime(),DateUtil.DATE_FORMAT_MM));
                bodyItem.add(flowVo.getFlowType());
                bodyItem.add(flowVo.getAmount());
                bodyItem.add(flowVo.getVipName());
                bodyItem.add(flowVo.getPayMethod());
                bodyItem.add(flowVo.getFlowNo());
                bodyItem.add(flowVo.getStaffName());
                bodyItem.add(flowVo.getShopName());
                body.add(bodyItem);
        }
        orderSheet.setDataList(body);
        res.add(orderSheet);
        return res;
    }
}
zq-erp/src/main/resources/static/js/systools/AjaxProxyVue.js
@@ -240,7 +240,16 @@
      return root.children;
    },
    /** json对象转Url参数**/
    jsonToUrlParam:function(obj){
        let str="";
        for(item in obj){
            if(obj[item]){
                str+=item+"="+obj[item]+"&"
            }
        }
        return str;
    }
zq-erp/src/main/resources/templates/views/admin/hive-erp/statistics/jyls.html
New file
@@ -0,0 +1,314 @@
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org" xmlns:matrix="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8">
    <META HTTP-EQUIV="Pragma" CONTENT="no-cache">
    <meta name="renderer" content="webkit|ie-comp|ie-stand">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport"
          content="width=device-width,initial-scale=1,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no"/>
    <meta http-equiv="Cache-Control" content="no-siteapp"/>
    <LINK rel="Bookmark" href="../images/favicon.ico">
    <!-- 本框架基本脚本和样式 -->
    <script type="text/javascript" th:src="@{/js/systools/MBaseVue.js}"></script>
    <link rel="stylesheet" th:href="@{/plugin/element-ui/index.css}">
    <link th:href="@{/css/styleOne/style.min.css}" rel="stylesheet" type="text/css"/>
    <title></title>
    <style>
        .panel-body{
            overflow: hidden;
        }
        .buttonPanel{
            background: #ffffff;
            padding: 10px 10px ;
            margin: 0px 0px 10px 0px;
        }
        .rowPanel{
            background: #ffffff;
            padding: 0px 10px ;
            padding-top: 10px;
            margin: 0px 0px 10px 0px;
        }
        .paginationStyle{
            background: #ffffff;
            padding: 10px 10px;
            margin: 0px 0px 10px 0px;
            text-align: right;
        }
    </style>
</head>
<body>
<div class="panel-body" id="app">
    <el-row class="buttonPanel">
        <el-button @click="exportExcel" type="primary" >导出</el-button>
    </el-row>
    <el-row class="rowPanel"  >
        <el-form ref="form" :model="form" inline >
            <el-form-item label="会员" prop="queryKey">
                <el-input v-model="form.queryKey" placeholder="请输入会员姓名/手机"></el-input>
            </el-form-item>
            <el-form-item label="操作人" prop="oprationMan" >
                <el-input v-model="form.oprationMan"></el-input>
            </el-form-item>
            <el-form-item label="订单号" prop="orderNo">
                <el-input v-model="form.orderNo"></el-input>
            </el-form-item>
            <el-form-item label="交易类型" prop="flowType">
                <el-select v-model="form.flowType" placeholder="请选择">
                    <el-option
                            v-for="item in flowTypeList"
                            :key="item.value"
                            :label="item.label"
                            :value="item.value"
                            >
                    </el-option>
                </el-select>
            </el-form-item>
            <el-form-item label="支付方式" prop="payMethod">
                <el-select v-model="form.payMethod" placeholder="请选择">
                    <el-option
                            v-for="item in payMethodList"
                            :key="item.value"
                            :label="item.label"
                            :value="item.value">
                    </el-option>
                </el-select>
            </el-form-item>
            <el-form-item label="时间" prop="datetimeArr">
                <el-date-picker
                        v-model="form.datetimeArr"
                        type="daterange"
                        range-separator="至" format="yyyy-MM-dd HH:mm"
                        start-placeholder="开始日期"
                        end-placeholder="结束日期">
                </el-date-picker>
            </el-form-item>
            <el-form-item label="交易门店" prop="shopId">
                <el-select v-model="form.shopId" placeholder="请选择">
                    <el-option
                            v-for="item in shopList"
                            :key="item.shopShortName"
                            :label="item.shopShortName"
                            :value="item.id">
                    </el-option>
                </el-select>
            </el-form-item>
            <el-button type="primary" @click="search" >搜索</el-button>
            <el-button @click="resetForm('form')">重置</el-button>
        </el-form>
    </el-row>
    <el-row class="table-style"  >
        <el-table id="proj" :data="table.rows"  :height="height" stripe>
            <el-table-column
                    prop="orderNo"
                    label="订单号"
                    width="180">
            </el-table-column>
            <el-table-column
                    prop="flowContent"
                    label="交易内容"
                    show-overflow-tooltip
                    width="240">
            </el-table-column>
            <el-table-column
                    prop="createTime"
                    label="交易时间"
                    show-overflow-tooltip
                    width="180">
            </el-table-column>
            <el-table-column
                    prop="flowType"
                    label="交易类型">
            </el-table-column>
            <el-table-column
                    prop="amount"
                    label="交易金额">
            </el-table-column>
            <el-table-column
                    prop="vipName"
                    label="会员姓名">
            </el-table-column>
            <el-table-column
                    prop="payMethod"
                    label="支付方式">
            </el-table-column>
            <el-table-column
                    prop="flowNo"
                    label="支付流水号">
            </el-table-column>
            <el-table-column
                    prop="staffName"
                    label="操作人">
            </el-table-column>
            <el-table-column
                    prop="shopName"
                    label="门店名称">
            </el-table-column>
            <el-table-column label="操作">
                <template slot-scope="scope">
                    <el-button type="text" @click="openOrder(scope.$index, scope.row)" size="small">订单详情</el-button>
                </template>
            </el-table-column>
        </el-table>
    </el-row>
    <el-row class="paginationStyle"  >
        <el-pagination background
                       @size-change="changePageSize"
                       @current-change="changeCurrentPage"
                       :current-page="table.currentPage"
                       :page-sizes="[10, 20, 30, 50]"
                       :page-size="table.pageSize"
                       layout="total, sizes, prev, pager, next, jumper"
                       :total="table.total">
        </el-pagination>
    </el-row>
</div>
</body>
<script type="text/javascript" th:src="@{/js/plugin/jquery-2.1.4.min.js}"></script>
<script type="text/javascript" th:src="@{/js/plugin/jquery.query.js}"></script>
<script type="text/javascript" th:src="@{/plugin/layer/layer.js}"></script>
<script type="text/javascript" th:src="@{/js/systools/AjaxProxyVue.js}"></script>
<script type="text/javascript" th:src="@{/js/plugin/vue.js}"></script>
<script type="text/javascript" th:src="@{/plugin/element-ui/index.js}"></script>
<script type="text/javascript" th:src="@{/plugin/moment.min.js}"></script>
<script type="text/javascript" th:inline="javascript">
    var vue = new Vue({
        el: '#app',
        data: {
            table:{
                rows:[],
                total:0,
                pageSize:10,
                currentPage:1,
            },
            form:{
                name:null,
                datetimeArr:'',
                payMethod:'',
                flowType:'',
                orderNo:'',
                oprationMan:'',
                queryKey:'',
                shopId:'',
            },
            height:'calc(100vh - 240px)',
            shopList:[{id:0,shopShortName:'全部'}],
            flowTypeList:[
                {value:'',label:'全部'},
                {value:'购买',label:'购买'},
                {value:'退款',label:'退款'},
                {value:'还款',label:'还款'}
            ],
            payMethodList:[
                {value:'',label:'全部'},
                {value:'现金',label:'现金'},
                {value:'微信',label:'微信'},
                {value:'支付宝',label:'支付宝'},
                {value:'银行卡',label:'银行卡'},
                {value:'团购',label:'团购'},
                {value:'储值卡',label:'储值卡'},
                {value:'欠款',label:'欠款'}
            ],
        },
        created: function () {
            let _this=this;
           this.loadData();
            window.addEventListener("keydown", this.keydown);
            AjaxProxy.requst({
                app:_this,
                url:basePath+"/admin/shopInfo/findAll",
                callback:function (data) {
                    data.rows.forEach(shop=>{
                        _this.shopList.push(shop);
                    });
                }
            })
        },
        methods: {
            changePageSize(val) {
                this.table.pageSize = val;
                this.loadData();
            },
            changeCurrentPage(val) {
                this.table.currentPage = val;
                this.loadData();
            },
            resetForm(formName) {
                this.$refs[formName].resetFields();
            },
            loadData:function(){
                let _this = this;
                let data=_this.getRequestParam();
                data.limit=_this.table.pageSize;
                data.offset=_this.table.pageSize*(_this.table.currentPage-1);
                AjaxProxy.requst({
                    app: _this,
                    data:data,
                    url: basePath + '/admin/orderFlow/findOrderFlow',
                    callback: function (data) {
                        _this.table.rows = data.rows;
                        _this.table.total=data.total;
                    }
                });
            },
            getRequestParam(){
                let _this = this;
             return   {
                    name:_this.form.name,
                    payMethod:_this.form.payMethod,
                    flowType:_this.form.flowType,
                    orderNo:_this.form.orderNo,
                    oprationMan:_this.form.oprationMan,
                    queryKey:_this.form.queryKey,
                    shopId:_this.form.shopId,
                    startTime:_this.form.datetimeArr?moment(_this.form.datetimeArr[0]).format("YYYY-MM-DD HH:mm"):'',
                    endTime:_this.form.datetimeArr?moment(_this.form.datetimeArr[1]).format("YYYY-MM-DD HH:mm"):'',
                }
            },
            search:function(){
                this.table.currentPage=1;
                this.loadData();
            },
            keydown(evt){
                if(evt.keyCode==13) {
                    this.search();
                }
            },
            openOrder(index,row){
                layer.full(layer.open({
                    type : 2,
                    title : "订单详情",
                    maxmin : true,
                    content : [ basePath + '/admin/order/orderItem?id=' + row.orderId ]
                }));
            },
            //导出
            exportExcel(){
                window.location.href=basePath+"/admin/orderFlow/exportOrderFlowExcel?"+MTools.jsonToUrlParam(this.getRequestParam());
            }
        }
    });
</script>
</body>
</html>
zq-erp/src/main/resources/templates/views/admin/hive/statistics/jyls.html
@@ -41,7 +41,7 @@
<div class="panel-body" id="app">
    <el-row class="buttonPanel">
            <el-button type="primary" >导出</el-button>
            <el-button @click="exportExcel" type="primary" >导出</el-button>
    </el-row>
    <el-row class="rowPanel"  >
@@ -146,7 +146,7 @@
            </el-table-column>
            <el-table-column label="操作">
                <template slot-scope="scope">
                    <el-button type="text" size="small">有效</el-button>
                    <el-button type="text" @click="openOrder(scope.$index, scope.row)" size="small">订单详情</el-button>
                </template>
            </el-table-column>
        </el-table>
@@ -228,22 +228,13 @@
            },
            loadData:function(){
                let _this = this;
                //获取用户列表
                let data=_this.getRequestParam();
                data.limit=_this.table.pageSize;
                data.offset=_this.table.pageSize*(_this.table.currentPage-1);
                AjaxProxy.requst({
                    app: _this,
                    data:{
                      limit:_this.table.pageSize,
                      offset:_this.table.pageSize*(_this.table.currentPage-1),
                        name:_this.form.name,
                        payMethod:_this.form.payMethod,
                        flowType:_this.form.flowType,
                        orderNo:_this.form.orderNo,
                        oprationMan:_this.form.oprationMan,
                        queryKey:_this.form.queryKey,
                        startTime:_this.form.datetimeArr?moment(_this.form.datetimeArr[0]).format("YYYY-MM-DD HH:mm"):'',
                        endTime:_this.form.datetimeArr?moment(_this.form.datetimeArr[1]).format("YYYY-MM-DD HH:mm"):'',
                    },
                    url: basePath + '/admin/orderFlow/findSumDailyInfoNew',
                    data:data,
                    url: basePath + '/admin/orderFlow/findOrderFlow',
                    callback: function (data) {
                        _this.table.rows = data.rows;
                        _this.table.total=data.total;
@@ -258,8 +249,33 @@
                if(evt.keyCode==13) {
                    this.search();
                }
            }
            },
            openOrder(index,row){
                layer.full(layer.open({
                    type : 2,
                    title : "订单详情",
                    maxmin : true,
                    content : [ basePath + '/admin/order/orderItem?id=' + row.orderId ]
                }));
            },
            getRequestParam(){
                let _this = this;
                return   {
                    name:_this.form.name,
                    payMethod:_this.form.payMethod,
                    flowType:_this.form.flowType,
                    orderNo:_this.form.orderNo,
                    oprationMan:_this.form.oprationMan,
                    queryKey:_this.form.queryKey,
                    startTime:_this.form.datetimeArr?moment(_this.form.datetimeArr[0]).format("YYYY-MM-DD HH:mm"):'',
                    endTime:_this.form.datetimeArr?moment(_this.form.datetimeArr[1]).format("YYYY-MM-DD HH:mm"):'',
                }
            },
            //导出
          exportExcel(){
            window.location.href=basePath+"/admin/orderFlow/exportOrderFlowExcel?"+MTools.jsonToUrlParam(this.getRequestParam());
        }
        }
    });