3 files modified
1 files added
| | |
| | | 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; |
| | | |
| | | /** |
| | |
| | | @RequestMapping(value = "/admin/orderFlow") |
| | | public class OrderFlowAction { |
| | | |
| | | |
| | | @Resource |
| | | private SysOrderFlowDao orderFlowDao; |
| | | |
| | | |
| | | /** |
| | | * 交易流水查询 |
| | | */ |
| | |
| | | @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 { |
| | |
| | | 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; |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | } |
| | | |
| | |
| | | return root.children; |
| | | }, |
| | | |
| | | |
| | | /** json对象转Url参数**/ |
| | | jsonToUrlParam:function(obj){ |
| | | let str=""; |
| | | for(item in obj){ |
| | | if(obj[item]){ |
| | | str+=item+"="+obj[item]+"&" |
| | | } |
| | | } |
| | | return str; |
| | | } |
| | | |
| | | |
| | | |
New file |
| | |
| | | <!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> |
| | |
| | | <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" > |
| | |
| | | </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> |
| | |
| | | }, |
| | | 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; |
| | |
| | | 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()); |
| | | } |
| | | |
| | | } |
| | | }); |