Bladeren bron

合并代码

zangbin 3 jaren geleden
bovenliggende
commit
23cd066fa6

+ 65 - 0
lb-module/src/main/java/com/ydd/module/domain/ProfitsBillOrder.java

@@ -0,0 +1,65 @@
+package com.ydd.module.domain;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ydd.common.annotation.Excel;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.Accessors;
+
+import java.util.Date;
+
+/**
+ * Demo class
+ *
+ * @author 14027
+ * @date 2022/4/25 10:19
+ */
+@Data
+@NoArgsConstructor
+@Accessors(chain = true)
+@TableName("lb_profits_billOrder")
+public class ProfitsBillOrder {
+
+    /** $column.columnComment */
+    @TableId(value = "id")
+    private Long id;
+
+    /** 门店ID */
+    private Long shopId;
+
+    private Long merchantId;
+
+    private Long AgentId;
+
+    /** 渠道类型 */
+    private Integer orderType;
+
+    /** 年份 */
+    @Excel(name = "年份")
+    private Long year;
+
+    /** 月份 */
+    @Excel(name = "月份")
+    private Long month;
+
+    /** 天 */
+    @Excel(name = "天")
+    private Long day;
+
+    /** 订单同步数量 */
+    private Long orderSyncNum;
+
+    /** 订单发单量 */
+    private Long orderBillNum;
+
+    /** 订单完成量 */
+    private Long orderCompleteNum;
+
+    /** 创建时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @Excel(name = "创建时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+}

+ 64 - 0
lb-module/src/main/java/com/ydd/module/dto/BillOrderDto.java

@@ -0,0 +1,64 @@
+package com.ydd.module.dto;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * 发单率统计DTO
+ *
+ * @author 14027
+ * @date 2022/4/21 18:33
+ */
+@Data
+public class BillOrderDto implements Serializable {
+
+    private static final Long serialVersionUID = 1L;
+
+    private String orderSn;
+
+    /**
+     * 配送状态:1->待接单, 2->待配送,3->配送中,4->已完成,-1->已取消
+     */
+    private Integer deliveryStatus;
+
+    private Long merchantId;
+
+    private String merchantName;
+
+    /** 商家手机号 */
+    private String merchantMobile;
+
+    private Long shopId;
+
+    private String shopName;
+
+    private Long waimaiId;
+
+    private String waimaiName;
+
+    private Long agentId;
+
+    private String agentName;
+
+    /** 外卖订单状态:1->待接单,2->待配送,3->配送中,4->已完成,-1->已取消 */
+    private Integer status;
+
+    /** 订单同步数量 */
+    private Long orderSyncNum;
+
+    /** 订单发单量 */
+    private Long orderBillNum;
+
+    /** 订单发单率 */
+    private BigDecimal orderBillRate;
+
+    /** 订单完成量 */
+    private Long orderCompleteNum;
+
+    /** 订单完成率 */
+    private BigDecimal orderCompleteRate;
+
+    private Integer orderType;
+}

+ 35 - 0
lb-module/src/main/java/com/ydd/module/mapper/ProfitsBillOrderMapper.java

@@ -0,0 +1,35 @@
+package com.ydd.module.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ydd.module.domain.ProfitsBillOrder;
+import com.ydd.module.dto.BillOrderDto;
+import com.ydd.module.dto.SystemOrderDto;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * Demo class
+ *
+ * @author 14027
+ * @date 2022/4/25 10:20
+ */
+public interface ProfitsBillOrderMapper extends BaseMapper<ProfitsBillOrder> {
+
+    List<Long> selectSyncOrderShopId(@Param("startDate") String startDate, @Param("endDate") String endDate);
+
+    List<BillOrderDto> selectListByShopId(@Param("shopId") Long shopId, @Param("startDate") String startDate,
+                                          @Param("endDate") String endDate);
+
+    List<BillOrderDto> selectBillOrderByShopId(@Param("shopId") Long shopId, @Param("startDate") String startDate,
+                                               @Param("endDate") String endDate);
+
+    /**
+     * 发单率分页查询
+     * @param page
+     * @param order
+     * @return
+     */
+    List<BillOrderDto> selectBillOrderPage(@Param("page") Page page, @Param("params") SystemOrderDto order);
+}

+ 20 - 0
lb-module/src/main/java/com/ydd/module/service/IProfitsBillOrderService.java

@@ -0,0 +1,20 @@
+package com.ydd.module.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ydd.common.core.page.PageResult;
+import com.ydd.module.domain.ProfitsBillOrder;
+import com.ydd.module.dto.SystemOrderDto;
+
+/**
+ * Demo class
+ *
+ * @author 14027
+ * @date 2022/4/25 10:20
+ */
+public interface IProfitsBillOrderService extends IService<ProfitsBillOrder> {
+
+    void billOrderStatistics();
+
+    PageResult selectOrderBillStatistics(Page page, SystemOrderDto orderDto);
+}

+ 214 - 0
lb-module/src/main/java/com/ydd/module/service/impl/ProfitsBillOrderServiceImpl.java

@@ -0,0 +1,214 @@
+package com.ydd.module.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ydd.common.core.domain.entity.SysUser;
+import com.ydd.common.core.page.PageResult;
+import com.ydd.common.enums.UserTypeEnums;
+import com.ydd.common.utils.StringUtils;
+import com.ydd.module.domain.*;
+import com.ydd.module.dto.BillOrderDto;
+import com.ydd.module.dto.SystemOrderDto;
+import com.ydd.module.enums.DeliveryStatusEnum;
+import com.ydd.module.mapper.ProfitsBillOrderMapper;
+import com.ydd.module.service.*;
+import com.ydd.third.common.utils.DateUtils;
+import org.apache.commons.compress.utils.Lists;
+import org.apache.commons.lang3.time.DateFormatUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * Demo class
+ *
+ * @author 14027
+ * @date 2022/4/25 10:20
+ */
+@Service("profitsBillOrderServiceImpl")
+public class ProfitsBillOrderServiceImpl extends ServiceImpl<ProfitsBillOrderMapper, ProfitsBillOrder> implements IProfitsBillOrderService {
+
+    @Autowired
+    private IWaimaiOrderService iWaimaiOrderService;
+
+    @Autowired
+    private IDspWaimaiService iDspWaimaiService;
+
+    @Autowired
+    private IShopService iShopService;
+
+    @Autowired
+    private IMerchantService iMerchantService;
+
+    @Autowired
+    private IAgentService iAgentService;
+
+
+    @Override
+    public void billOrderStatistics() {
+        // 查询所有外卖平台
+        List<DspWaimai> dspWaimaiList = iDspWaimaiService.selectWaimaiList();
+
+//         for (int i = 225; i >= 1; i--) {
+            String date = DateFormatUtils.format(DateUtils.addDateDays(new Date(), -1), "yyyy-MM-dd");
+            String startDate = date.concat(" 00:00:00");
+            String endDate = date.concat(" 23:59:59");
+            Long year = Integer.valueOf(date.split("-")[0]).longValue();
+            Long month = Integer.valueOf(date.split("-")[1]).longValue();
+            Long day = Integer.valueOf(date.split("-")[2]).longValue();
+
+            // 查询当天同步外卖订单的所有门店
+            List<BillOrderDto> shopIdList = baseMapper.selectListByShopId(null, startDate, endDate);
+            Map<Long, List<BillOrderDto>> map = shopIdList.stream().collect(Collectors.groupingBy(BillOrderDto::getShopId));
+            Set<Long> shopIds = map.keySet();
+
+             for (Long shopId : shopIds) {
+                ProfitsBillOrder profitsBillOrder = new ProfitsBillOrder();
+                profitsBillOrder.setShopId(shopId);
+
+                // 获取商家id
+                Shop shop = iShopService.getById(shopId);
+                profitsBillOrder.setMerchantId(shop.getMerchantId());
+                //获取服务商id
+                if (shop.getMerchantId() != null) {
+                    Merchant merchant = iMerchantService.getById(shop.getMerchantId());
+                    profitsBillOrder.setAgentId(merchant.getAgentId());
+                }
+
+                profitsBillOrder.setYear(year);
+                profitsBillOrder.setMonth(month);
+                profitsBillOrder.setDay(day);
+
+                // 根据门店查询相关订单信息
+                List<BillOrderDto> billOrderDtoList = baseMapper.selectListByShopId(shopId, startDate, endDate);
+                // 根据门店查询发单订单信息
+                List<BillOrderDto> billOrderDtos = baseMapper.selectBillOrderByShopId(shopId, startDate, endDate);
+                for (DspWaimai waimai : dspWaimaiList) {
+                    Integer orderType = waimai.getType();
+
+                    // 门店外卖平台list
+                    List<BillOrderDto> waimaiBillList = billOrderDtoList.stream().filter(bill -> bill.getOrderType().equals(orderType)).collect(Collectors.toList());
+                    // 门店外卖平台发单list
+                    List<BillOrderDto> waimaiBills= billOrderDtos.stream().filter(bill -> bill.getOrderType().equals(orderType)).collect(Collectors.toList());
+                    if (CollectionUtils.isNotEmpty(waimaiBillList)) {
+                        profitsBillOrder.setOrderType(orderType);
+
+                         // 门店订单同步数量
+                        Long orderSyncNum = (long) waimaiBillList.size();
+                        profitsBillOrder.setOrderSyncNum(orderSyncNum);
+
+                        // 发单量
+//                        Long orderBillNum = waimaiBillList.stream().filter(bill -> bill.getDeliveryStatus() > DeliveryStatusEnum.ORDERS_TO_BE_BILLED.getStatus()
+//                                || DeliveryStatusEnum.CANCEL.getStatus().equals(bill.getDeliveryStatus())).count();
+                        Long orderBillNum = (long) waimaiBills.size();
+                        profitsBillOrder.setOrderBillNum(orderBillNum);
+
+                        // 完成量
+                        Long orderCompleteNum = waimaiBillList.stream().filter(bill -> DeliveryStatusEnum.FINISH.getStatus().equals(bill.getDeliveryStatus())).count();
+                        profitsBillOrder.setOrderCompleteNum(orderCompleteNum);
+
+                        Date date1 = DateUtils.addDateDays(new Date(), -0);
+                        profitsBillOrder.setCreateTime(date1);
+
+                        baseMapper.insert(profitsBillOrder);
+                    }
+                }
+            }
+//         }
+
+    }
+
+    @Override
+    public PageResult selectOrderBillStatistics(Page page, SystemOrderDto orderDto) {
+        boolean flag = handleListSearchCondition(orderDto, new SysUser());
+        if (!flag) {
+            page.setRecords(Lists.newArrayList());
+            return new PageResult(page);
+        }
+
+        orderDto.setCreateStartTime(handlDate(orderDto.getCreateStartTime()));
+        orderDto.setCreateEndTime(handlDate(orderDto.getCreateEndTime()));
+
+        // 查询所有外卖数据
+        List<BillOrderDto> list = baseMapper.selectBillOrderPage(page, orderDto);
+        for (BillOrderDto dto : list) {
+            // 门店名称
+            Shop shop = iShopService.getById(dto.getShopId());
+            if (Objects.nonNull(shop)) {
+                dto.setShopName(shop.getName());
+                // 商家名称
+                Merchant merchant = iMerchantService.getById(shop.getMerchantId());
+                if (Objects.nonNull(merchant)) {
+                    dto.setMerchantName(merchant.getMerchantName());
+                    dto.setMerchantMobile(merchant.getMobile());
+                    // 代理商名称
+                    Agent agent = iAgentService.getById(merchant.getAgentId());
+                    if (Objects.nonNull(agent)) {
+                        dto.setAgentName(agent.getName());
+                    }
+                }
+            }
+
+            dto.setOrderBillRate(dto.getOrderBillRate().setScale(2, BigDecimal.ROUND_FLOOR));
+            dto.setOrderCompleteRate(dto.getOrderCompleteRate().setScale(2, BigDecimal.ROUND_FLOOR));
+        }
+
+        page.setRecords(list);
+        return new PageResult(page);
+    }
+
+    public String handlDate(String time) {
+        if (StringUtils.isNotBlank(time)) {
+            Date s = DateUtils.stringToDate(time, "yyyy-MM-dd HH:mm:ss");
+            String t = DateUtils.format(DateUtils.addDateDays(s, 1), "yyyy-MM-dd HH:mm:ss");
+            return t;
+        }
+        return null;
+    }
+
+    private boolean handleListSearchCondition(SystemOrderDto order, SysUser user) {
+        boolean result = true;
+        if (StringUtils.isNotBlank(order.getMerchantName())) {
+            List<Long> merchantIds = iMerchantService.selectIdByName(order.getMerchantName());
+            if (CollectionUtils.isEmpty(merchantIds)) {
+                result = false;
+            }
+            order.setMerchantIds(merchantIds);
+        }
+        if(UserTypeEnums.AGENT.getCode().equals(user.getType()) && user.getAgentId() != null) {
+            List<Long> agentIds = iAgentService.listAgent(user.getAgentId());
+            if (CollectionUtils.isEmpty(agentIds)) {
+                result = false;
+            }
+            order.setAgentIds(agentIds);
+        }
+        if (CollectionUtils.isNotEmpty(user.getAgentIds())) {
+            if (CollectionUtils.isEmpty(order.getAgentIds())) {
+                order.setAgentIds(user.getAgentIds());
+            } else {
+                order.getAgentIds().retainAll(user.getAgentIds());
+            }
+            if (CollectionUtils.isEmpty(order.getAgentIds())) {
+                result = false;
+            }
+        }
+        // 新增订单门店查询按钮
+        if (StringUtils.isNotEmpty(order.getShopName())) {
+          List<Shop> shopList = iShopService.list(new QueryWrapper<Shop>().eq("deleted", 0)
+            .eq("status", 1).like("name", order.getShopName()));
+          List<Long> shopIds = shopList.stream().map(Shop::getId).collect(Collectors.toList());
+
+          if (CollectionUtils.isEmpty(shopIds)) {
+            result = false;
+          }
+          order.setShopIds(shopIds);
+        }
+        return result;
+    }
+
+}

+ 117 - 0
lb-module/src/main/resources/mapper/module/ProfitsBillOrderMapper.xml

@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ydd.module.mapper.ProfitsBillOrderMapper">
+
+    <select id="selectSyncOrderShopId" resultType="java.lang.Long">
+        SELECT
+            o.shop_id
+        FROM
+            lb_waimai_order wo
+            JOIN lb_order o ON wo.id = o.waimai_order_id
+        WHERE
+        wo.deleted = 0
+        AND o.deleted = 0
+        AND o.create_time >= #{startDate}
+        AND #{endDate} >= o.create_time
+        GROUP BY o.shop_id
+    </select>
+
+    <select id="selectListByShopId" resultType="com.ydd.module.dto.BillOrderDto">
+        SELECT
+            o.order_sn,
+            o.shop_id,
+            o.delivery_status,
+            wo.status,
+            wo.order_type
+        FROM
+            lb_waimai_order wo
+            JOIN lb_order o ON wo.id = o.waimai_order_id
+        WHERE
+        wo.deleted = 0
+        AND o.deleted = 0
+        AND o.create_time >= #{startDate}
+        AND #{endDate} >= o.create_time
+        <if test="shopId != null">
+            AND o.shop_id= #{shopId}
+        </if>
+    </select>
+
+    <select id="selectBillOrderByShopId" resultType="com.ydd.module.dto.BillOrderDto">
+        SELECT
+            wor.shop_id,
+            wo.status,
+            wo.order_type
+        FROM
+            lb_waimai_order wo
+        RIGHT JOIN lb_waimai_order_record wor ON wo.id = wor.waimai_order_id
+        WHERE
+        wo.deleted = 0
+        AND wor.deleted = 0
+        AND wor.create_time >= #{startDate}
+        AND #{endDate} >= wor.create_time
+        AND wor.shop_id= #{shopId}
+    </select>
+
+    <select id="selectBillOrderPage" resultType="com.ydd.module.dto.BillOrderDto">
+        SELECT
+            b.*
+        FROM (
+            SELECT
+                a.*,
+                round( ( a.order_bill_num / a.order_sync_num ), 4 ) *  100 AS orderBillRate,
+                round( ( a.order_complete_num / a.order_sync_num ), 4 ) * 100 AS orderCompleteRate
+            FROM (
+                SELECT
+                    agent_id,
+                    merchant_id,
+                    shop_id,
+                    SUM(order_sync_num) AS order_sync_num,
+                    SUM(order_bill_num) AS order_bill_num,
+                    SUM(order_complete_num) AS order_complete_num
+                FROM lb_profits_billOrder
+                WHERE 1 = 1
+                <if test="params.createStartTime != null and params.createStartTime != ''">
+                    AND create_time >= #{params.createStartTime}
+                </if>
+                <if test="params.createEndTime != null and params.createEndTime != ''">
+                    AND #{params.createEndTime} >= create_time
+                </if>
+                <if test="params.merchantIds != null and params.merchantIds.size > 0">
+                    AND
+                    merchant_id in
+                    <foreach collection="params.merchantIds" index="index" item="item" open="(" separator="," close=")">
+                        #{item}
+                    </foreach>
+                </if>
+                <if test="params.shopIds != null and params.shopIds.size > 0">
+                    AND
+                    shop_id in
+                    <foreach collection="params.shopIds" index="index" item="item" open="(" separator="," close=")">
+                        #{item}
+                    </foreach>
+                </if>
+                <if test="params.waimaiOrderType != null and params.waimaiOrderType != 4">
+                    AND order_type = #{params.waimaiOrderType}
+                </if>
+                GROUP BY
+                    shop_id
+            ) a
+            WHERE 1= 1
+            <if test="params.startOrderSyncNum != null">
+                AND a.order_sync_num >= #{params.startOrderSyncNum}
+            </if>
+            <if test="params.endOrderSyncNum != null">
+                AND #{params.endOrderSyncNum} >= a.order_sync_num
+            </if>
+            <if test="params.startOrderCompleteRate != null">
+                having round( ( a.order_complete_num / a.order_sync_num ), 4 ) * 100 >= #{params.startOrderCompleteRate}
+                <if test="params.endOrderCompleteRate != null">
+                    AND #{params.endOrderCompleteRate} >= round( ( a.order_complete_num / a.order_sync_num ), 4 ) * 100
+                </if>
+            </if>
+        ) b
+    </select>
+
+</mapper>

+ 40 - 0
lb-web/src/main/java/com/ydd/web/controller/ProfitsBillOrderController.java

@@ -0,0 +1,40 @@
+package com.ydd.web.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ydd.common.core.controller.BaseController;
+import com.ydd.common.core.domain.Result;
+import com.ydd.common.core.page.PageResult;
+import com.ydd.module.dto.SystemOrderDto;
+import com.ydd.module.service.IProfitsBillOrderService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * Demo class
+ *
+ * @author 14027
+ * @date 2022/4/25 10:18
+ */
+@RestController
+@RequestMapping("/module/profitsBillOrder")
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+public class ProfitsBillOrderController extends BaseController {
+
+    private final IProfitsBillOrderService iProfitsBillOrderService;
+
+    @RequestMapping("/order/bill/list")
+    public Result OrderBill(Page page, SystemOrderDto orderDto) {
+        PageResult pageResult = iProfitsBillOrderService.selectOrderBillStatistics(page, orderDto);
+        Map map = new HashMap();
+        map.put("page", pageResult);
+        Result result = Result.success();
+        result.put("data",map);
+        return result;
+    }
+
+}

+ 234 - 0
web-ui/src/views/module/order/billStatistics.vue

@@ -0,0 +1,234 @@
+<template>
+  <div class="app-container">
+    <el-form :model="queryParams" ref="queryForm" :inline="true" v-show="showSearch">
+      <el-form-item label="日期" prop="createTime">
+        <el-date-picker v-model="date" type="datetimerange" range-separator="至" start-placeholder="开始时间" end-placeholder="结束时间"
+                        :default-time="['00:00:00', '23:59:59']" value-format="yyyy-MM-dd HH:mm:ss" format="yyyy-MM-dd HH:mm:ss">
+        </el-date-picker>
+      </el-form-item>
+      <el-form-item label="所属商家" prop="merchantName">
+        <el-input
+          v-model="queryParams.merchantName"
+          placeholder="请输入商家名称"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="门店名称" prop="shopName">
+        <el-input
+          v-model="queryParams.shopName"
+          placeholder="请输入门店名称"
+          clearable
+          @keyup.enter.native="handleQuery"
+        />
+      </el-form-item>
+      <el-form-item label="渠道" prop="waimaiOrderType">
+        <el-select v-model="queryParams.waimaiOrderType" placeholder="请选择" clearable>
+          <el-option v-for="item in waimaiOrderTypeOption" :key="item.value" :label="item.label" :value="item.value"
+          ></el-option>
+        </el-select>
+      </el-form-item>
+
+      <el-form-item label="订单同步数量" prop="orderSyncNum">
+        <el-input-number
+          :min="0"
+          :max="100"
+          size="mini"
+          controls-position="right"
+          v-model="queryParams.startOrderSyncNum"
+          placeholder="起始数量"
+          clearable />
+           - 
+          <el-input-number
+          :min="0"
+          :max="100"
+          size="mini"
+          controls-position="right"
+          v-model="queryParams.endOrderSyncNum"
+          placeholder="结束数量"
+          clearable />
+      </el-form-item>
+
+      <el-form-item label="完成率" prop="orderCompleteRate">
+        <el-input-number
+          :min="0"
+          :max="100"
+          size="mini"
+          controls-position="right"
+          v-model="queryParams.startOrderCompleteRate"
+          placeholder="起始率"
+          clearable />
+           - 
+          <el-input-number
+          :min="0"
+          :max="100"
+          size="mini"
+          controls-position="right"
+          v-model="queryParams.endOrderCompleteRate"
+          placeholder="结束率"
+          clearable />
+      </el-form-item>
+
+      <el-form-item>
+        <el-button type="primary" icon="el-icon-search"  @click="handleQuery">搜索</el-button>
+        <el-button icon="el-icon-refresh"  @click="resetQuery">重置</el-button>
+      </el-form-item>
+    </el-form>
+
+    <Pagination uri="/module/profitsBillOrder/order/bill/list" :request-params="queryParams" ref="pagination" :showIndex="false">
+      <el-table-column label="门店名称" align="center" prop="shopName">
+          <template slot-scope="scope">
+            <span v-if="scope.row.shopName != null">{{ scope.row.shopName }}</span>
+            <span v-else> -- </span>
+          </template>
+      </el-table-column>
+      <el-table-column label="所属商家" align="center" prop="merchantName">
+        <template slot-scope="scope">
+          <span v-if="scope.row.merchantName != null">{{ scope.row.merchantName }}</span>
+          <span v-else> -- </span>
+        </template>
+      </el-table-column>
+      <el-table-column label="商家手机号" align="center" prop="merchantMobile"></el-table-column>
+      <el-table-column label="服务商名称" align="center" prop="agentName">
+        <template slot-scope="scope">
+          <span v-if="scope.row.agentName != null">{{ scope.row.agentName }}</span>
+          <span v-else> -- </span>
+        </template>
+      </el-table-column>
+      <el-table-column label="订单同步数量" align="center" prop="orderSyncNum"></el-table-column>
+      <el-table-column label="发单量" align="center" prop="orderBillNum"></el-table-column>
+      <el-table-column label="发单率" align="center" prop="orderBillRate">
+        <template slot-scope="scope">
+          <span v-if="scope.row.orderBillRate > 0">{{ scope.row.orderBillRate }}%</span>
+          <span v-else> {{ scope.row.orderBillRate }} </span>
+        </template>
+      </el-table-column>
+      <el-table-column label="完成数量" align="center" prop="orderCompleteNum"></el-table-column>
+      <el-table-column label="完成率" align="center" prop="orderCompleteRate">
+        <template slot-scope="scope">
+          <span v-if="scope.row.orderCompleteRate > 0">{{ scope.row.orderCompleteRate }}%</span>
+          <span v-else> {{ scope.row.orderCompleteRate }} </span>
+        </template>
+      </el-table-column>
+    </Pagination>
+
+  </div>
+</template>
+
+<script>
+import { exportMemberBalanceLog } from "@/api/module/memberBalanceLog";
+import Pagination from '@/components/Paginations'
+
+export default {
+  name: "billStatistics",
+  components: {
+    Pagination
+  },
+  data() {
+    return {
+      waimaiOrderTypeOption: [
+        {
+          value: 1,
+          label: "美团",
+        },
+        {
+          value: 2,
+          label: "饿了么",
+        },
+        {
+          value: 3,
+          label: "饿百零售",
+        },
+        {
+          value: 5,
+          label: "美团闪购",
+        },
+        {
+          value: 6,
+          label: "京东到家",
+        }
+      ],
+      // 遮罩层
+      loading: true,
+      date:[],
+      // 选中数组
+      ids: [],
+      // 非单个禁用
+      single: true,
+      // 非多个禁用
+      multiple: true,
+      // 显示搜索条件
+      showSearch: true,
+      // 总条数
+      total: 0,
+      // 弹出层标题
+      title: "",
+      // 是否显示弹出层
+      open: false,
+      // 查询参数
+      queryParams: {
+        pageNum: 1,
+        pageSize: 10,
+        merchantName: undefined,
+        shopName: undefined,
+        createStartTime: undefined,
+        createEndTime: undefined,
+        waimaiOrderType: undefined,
+        startOrderSyncNum: undefined,
+        endOrderSyncNum: undefined,
+        startOrderCompleteRate: 0,
+        endOrderCompleteRate: undefined
+      },
+    };
+  },
+  created() {
+  },
+  methods: {
+    /** 搜索按钮操作 */
+    handleQuery() {
+      if (this.date !== null && this.date !== "") {
+        if (this.date[0] !== undefined) {
+          this.queryParams.createStartTime = this.date[0];
+          this.queryParams.createEndTime = this.date[1];
+        }
+      } else {
+        this.queryParams.createStartTime = "";
+        this.queryParams.createEndTime = "";
+      }
+      this.$refs.pagination.handleSearch(true)
+    },
+    /** 重置按钮操作 */
+    resetQuery() {
+      this.resetForm("queryForm");
+      this.date = []
+      this.queryParams.createStartTime = "";
+      this.queryParams.createEndTime = "";
+
+      this.queryParams.startOrderSyncNum = undefined;
+      this.queryParams.endOrderSyncNum = undefined;
+      this.queryParams.startOrderCompleteRate = 0;
+      this.queryParams.endOrderCompleteRate = undefined;
+      this.handleQuery();
+    },
+    // 多选框选中数据
+    handleSelectionChange(selection) {
+      this.ids = selection.map(item => item.id)
+      this.single = selection.length!==1
+      this.multiple = !selection.length
+    },
+    /** 导出按钮操作 */
+    handleExport() {
+      const queryParams = this.queryParams;
+      this.$confirm('是否确认导出所有用户账户明细数据项?', "警告", {
+        confirmButtonText: "确定",
+        cancelButtonText: "取消",
+        type: "warning"
+      }).then(function() {
+        return exportMemberBalanceLog(queryParams);
+      }).then(response => {
+        this.download(response.msg);
+      })
+    }
+  }
+};
+</script>