From 717122a8929e0ea00acea4c7b1516e03a766c944 Mon Sep 17 00:00:00 2001 From: 935090232@qq.com <ak473600000> Date: Wed, 27 Jan 2021 22:42:03 +0800 Subject: [PATCH] 新增交易流水 --- zq-erp/src/main/resources/templates/views/admin/hive/statistics/jyls.html | 50 ++++-- zq-erp/src/main/java/com/matrix/system/hive/statistics/OrderFlowAction.java | 98 +++++++++--- zq-erp/src/main/resources/static/js/systools/AjaxProxyVue.js | 11 + zq-erp/src/main/resources/templates/views/admin/hive-erp/statistics/jyls.html | 314 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 431 insertions(+), 42 deletions(-) diff --git a/zq-erp/src/main/java/com/matrix/system/hive/statistics/OrderFlowAction.java b/zq-erp/src/main/java/com/matrix/system/hive/statistics/OrderFlowAction.java index 70ac932..3769823 100644 --- a/zq-erp/src/main/java/com/matrix/system/hive/statistics/OrderFlowAction.java +++ b/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; + } + + + } diff --git a/zq-erp/src/main/resources/static/js/systools/AjaxProxyVue.js b/zq-erp/src/main/resources/static/js/systools/AjaxProxyVue.js index b11d542..ef97725 100644 --- a/zq-erp/src/main/resources/static/js/systools/AjaxProxyVue.js +++ b/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; + } diff --git a/zq-erp/src/main/resources/templates/views/admin/hive-erp/statistics/jyls.html b/zq-erp/src/main/resources/templates/views/admin/hive-erp/statistics/jyls.html new file mode 100644 index 0000000..d016abf --- /dev/null +++ b/zq-erp/src/main/resources/templates/views/admin/hive-erp/statistics/jyls.html @@ -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> \ No newline at end of file diff --git a/zq-erp/src/main/resources/templates/views/admin/hive/statistics/jyls.html b/zq-erp/src/main/resources/templates/views/admin/hive/statistics/jyls.html index e959806..9db97ac 100644 --- a/zq-erp/src/main/resources/templates/views/admin/hive/statistics/jyls.html +++ b/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()); + } } }); -- Gitblit v1.9.1