yq преди 3 години
родител
ревизия
a2cd068afe

+ 13 - 0
pom.xml

@@ -237,6 +237,19 @@
             <version>1.5.13</version>
         </dependency>
 
+
+        <dependency>
+            <groupId>cn.afterturn</groupId>
+            <artifactId>easypoi-spring-boot-starter</artifactId>
+            <version>4.1.0</version>
+        </dependency>
+
+        <dependency>
+            <groupId>ma.glasnost.orika</groupId>
+            <artifactId>orika-core</artifactId>
+            <version>1.5.4</version>
+        </dependency>
+
     </dependencies>
 
     <build>

+ 96 - 0
src/main/java/com/usky/dxtop/common/utils/BeanMapperUtils.java

@@ -0,0 +1,96 @@
+package com.usky.dxtop.common.utils;
+
+import ma.glasnost.orika.MapperFacade;
+import ma.glasnost.orika.MapperFactory;
+import ma.glasnost.orika.impl.DefaultMapperFactory;
+import ma.glasnost.orika.metadata.Type;
+import ma.glasnost.orika.metadata.TypeFactory;
+
+import java.util.List;
+
+/**
+ * <p>Bean copy 工具类</p>
+ *
+ * @author chenpeng
+ * Create time 2018年12月3日 下午2:49:47
+ */
+public final class BeanMapperUtils {
+
+    private static final MapperFactory MAP_NONE_NULL_FIELDS_MAPPER_FACTORY = new DefaultMapperFactory.Builder().mapNulls(false).build();
+    private static final MapperFactory MAP_NULL_FIELDS_MAPPER_FACTORY = new DefaultMapperFactory.Builder().mapNulls(true).build();
+
+    private BeanMapperUtils() {
+    }
+
+    /**
+     * <p><简单的复制出新类型对象</p>
+     * <p>
+     * 通过source.getClass() 获得源Class
+     */
+    public static <S, D> D map(S source, Class<D> destinationClass) {
+        return buildClassMapperFacade(false).map(source, destinationClass);
+    }
+
+    /**
+     * <p>极致性能的复制出新类型对象.</p>
+     * <p>
+     * 预先通过BeanMapper.getType() 静态获取并缓存Type类型,在此处传入
+     */
+    public static <S, D> D map(S source, Type<S> sourceType, Type<D> destinationType) {
+        return buildClassMapperFacade(false).map(source, sourceType, destinationType);
+    }
+
+    /**
+     * <p>对象拷贝</p>
+     *
+     * @author chenpeng
+     * Create at March 6, 2019 at 17:22:38 GMT+8
+     */
+    public static <S, D> void copy(S source, D dest) {
+        buildClassMapperFacade(false).map(source, dest);
+    }
+
+    /**
+     * <p>简单的复制出新对象列表到ArrayList</p>
+     * <p>
+     * 不建议使用mapper.mapAsList(Iterable<S>,Class<D>)接口, sourceClass需要反射,实在有点慢
+     */
+    public static <S, D> List<D> mapList(Iterable<S> sourceList, Class<S> sourceClass, Class<D> destinationClass) {
+        return buildClassMapperFacade(false).mapAsList(sourceList,
+                TypeFactory.valueOf(sourceClass),
+                TypeFactory.valueOf(destinationClass));
+    }
+
+    /**
+     * <p>极致性能的复制出新类型对象到ArrayList.<p>
+     * <p>
+     * 预先通过BeanMapper.getType() 静态获取并缓存Type类型,在此处传入
+     */
+    public static <S, D> List<D> mapList(Iterable<S> sourceList, Type<S> sourceType, Type<D> destinationType) {
+        return buildClassMapperFacade(false).mapAsList(sourceList, sourceType, destinationType);
+    }
+
+    /**
+     * <p>简单复制出新对象列表到数组<p>
+     * <p>
+     * 通过source.getComponentType() 获得源Class
+     */
+    public static <S, D> D[] mapArray(final D[] destination, final S[] source, final Class<D> destinationClass) {
+        return buildClassMapperFacade(false).mapAsArray(destination, source, destinationClass);
+    }
+
+    /**
+     * <p>极致性能的复制出新类型对象到数组<p>
+     * <p>
+     * 预先通过BeanMapper.getType() 静态获取并缓存Type类型,在此处传入
+     */
+    public static <S, D> D[] mapArray(D[] destination, S[] source, Type<S> sourceType, Type<D> destinationType) {
+        return buildClassMapperFacade(false).mapAsArray(destination, source, sourceType, destinationType);
+    }
+
+    private static MapperFacade buildClassMapperFacade(boolean mapNulls) {
+        return (mapNulls
+                ? MAP_NULL_FIELDS_MAPPER_FACTORY.getMapperFacade()
+                : MAP_NONE_NULL_FIELDS_MAPPER_FACTORY.getMapperFacade());
+    }
+}

+ 38 - 0
src/main/java/com/usky/dxtop/common/utils/file/FileUtils.java

@@ -12,6 +12,7 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 
 import com.usky.dxtop.common.utils.StringUtils;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.ArrayUtils;
 
 
@@ -20,6 +21,7 @@ import org.apache.commons.lang3.ArrayUtils;
  * 
  * @author ruoyi
  */
+@Slf4j
 public class FileUtils
 {
     public static String FILENAME_PATTERN = "[a-zA-Z0-9_\\-\\|\\.\\u4e00-\\u9fa5]+";
@@ -202,4 +204,40 @@ public class FileUtils
         String encode = URLEncoder.encode(s, StandardCharsets.UTF_8.toString());
         return encode.replaceAll("\\+", "%20");
     }
+
+    /**
+     * 创建单个文件
+     *
+     * @param descFileName 文件名,包含路径
+     * @return 如果创建成功,则返回true,否则返回false
+     */
+    public static boolean createFile(String descFileName) {
+        File file = new File(descFileName);
+        if (file.exists()) {
+            log.info("文件 " + descFileName + " 已存在!");
+            return false;
+        }
+        if (descFileName.endsWith(File.separator)) {
+            log.info(descFileName + " 为目录,不能创建目录!");
+            return false;
+        }
+        if (!file.getParentFile().exists()) {
+            file.getParentFile().mkdirs();
+            return true;
+        }
+
+        // 创建文件
+        try {
+            if (file.createNewFile()) {
+                return true;
+            } else {
+                log.info(descFileName + " 文件创建失败!");
+                return false;
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            log.info(descFileName + " 文件创建失败!");
+            return false;
+        }
+    }
 }

+ 40 - 0
src/main/java/com/usky/dxtop/controller/web/OrderController.java

@@ -2,16 +2,19 @@ package com.usky.dxtop.controller.web;
 
 
 import com.usky.dxtop.common.core.domain.AjaxResult;
+import com.usky.dxtop.common.core.page.CommonPage;
 import com.usky.dxtop.controller.BaseController;
 import com.usky.dxtop.model.Order;
 import com.usky.dxtop.service.OrderService;
 import com.usky.dxtop.service.api.TopApi;
 import com.usky.dxtop.service.emun.OrderStatus;
+import com.usky.dxtop.service.vo.OrderReport;
 import com.usky.dxtop.service.vo.OrderRequest;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.Date;
 import java.util.List;
 import java.util.TreeMap;
 
@@ -100,5 +103,42 @@ public class OrderController extends BaseController {
     public AjaxResult callTopFindOrderInfoApi(@PathVariable("orderNumber") String orderNumber){
         return AjaxResult.success(orderService.callTopFindOrderInfoApi(orderNumber));
     }
+
+    @PostMapping("/exportDetail")
+    public AjaxResult exportDetail(@RequestBody OrderRequest orderRequest){
+        return AjaxResult.success(orderService.exportDetail(orderRequest));
+    }
+
+    /**
+     * 订单报表
+     * @param current
+     * @param size
+     * @param startTime
+     * @param endTime
+     * @param type
+     * @return
+     */
+    @GetMapping("/orderReportList")
+    public AjaxResult orderReportList(@RequestParam Integer current,
+                                      @RequestParam Integer size,
+                                      @RequestParam(required = false) Date startTime,
+                                      @RequestParam(required = false) Date endTime,
+                                      @RequestParam Integer type){
+        return AjaxResult.success(orderService.orderReportList(current,size,startTime,endTime,type));
+    }
+
+    /**
+     * 报表导出
+     * @param startTime
+     * @param endTime
+     * @param type
+     * @return
+     */
+    @GetMapping("/reportExport")
+    public AjaxResult reportExport(@RequestParam(required = false) Date startTime,
+                                   @RequestParam(required = false) Date endTime,
+                                   @RequestParam Integer type){
+        return AjaxResult.success(orderService.reportExport(startTime,endTime,type));
+    }
 }
 

+ 53 - 0
src/main/java/com/usky/dxtop/mapper/OrderMapper.java

@@ -1,7 +1,15 @@
 package com.usky.dxtop.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.usky.dxtop.model.Order;
+import com.usky.dxtop.service.vo.OrderReport;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
 
 
 /**
@@ -14,4 +22,49 @@ import com.usky.dxtop.model.Order;
  */
 public interface OrderMapper extends BaseMapper<Order> {
 
+
+    /**
+     *
+     * @param page
+     * @param endTime
+     * @return
+     */
+    Page<OrderReport> getCountByDay(IPage<OrderReport> page,
+                                    @Param("startTime") Date startTime,
+                                    @Param("endTime") Date endTime);
+
+
+    /**
+     * 周报
+     * @param startTime
+     * @param endTime
+     * @return
+     */
+    Page<OrderReport> getCountByWeek(IPage<OrderReport> page,
+                                        @Param("startTime") Date startTime,
+                                           @Param("endTime") Date endTime);
+
+
+    /**
+     * 月报
+     * @param startTime
+     * @param endTime
+     * @return
+     */
+    Page<OrderReport> getCountByMonth(IPage<OrderReport> page,
+                                      @Param("startTime") Date startTime,
+                                      @Param("endTime") Date endTime);
+
+
+    /**
+     * 年报
+     * @param startTime
+     * @param endTime
+     * @return
+     */
+    Page<OrderReport> getCountByYear(IPage<OrderReport> page,
+                                     @Param("startTime") Date startTime,
+                                     @Param("endTime") Date endTime);
+
+
 }

+ 30 - 0
src/main/java/com/usky/dxtop/service/OrderService.java

@@ -3,8 +3,10 @@ package com.usky.dxtop.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.usky.dxtop.common.core.page.CommonPage;
 import com.usky.dxtop.model.Order;
+import com.usky.dxtop.service.vo.OrderReport;
 import com.usky.dxtop.service.vo.OrderRequest;
 
+import java.util.Date;
 import java.util.List;
 
 
@@ -79,4 +81,32 @@ public interface OrderService extends IService<Order> {
      * @param order
      */
     void paySuccess(Order order);
+
+
+    /**
+     * 明细导出
+     * @param orderRequest
+     * @return
+     */
+    String exportDetail(OrderRequest orderRequest);
+
+    /**
+     * 订单报表
+     * @param current
+     * @param size
+     * @param startTime
+     * @param endTime
+     * @param type
+     * @return
+     */
+    CommonPage<OrderReport> orderReportList(Integer current,Integer size,Date startTime,Date endTime,Integer type);
+
+    /**
+     * 报表导出
+     * @param startTime
+     * @param endTime
+     * @param type
+     * @return
+     */
+    String reportExport(Date startTime,Date endTime,Integer type);
 }

+ 31 - 0
src/main/java/com/usky/dxtop/service/config/MybatisPlusConfig.java

@@ -0,0 +1,31 @@
+package com.usky.dxtop.service.config;
+
+import com.baomidou.mybatisplus.annotation.DbType;
+import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.pagination.optimize.JsqlParserCountOptimize;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * @author yq
+ * @date 2021/8/31 18:09
+ */
+@Configuration
+@MapperScan("com.usky.dxtop.mapper")
+public class MybatisPlusConfig {
+
+    // 旧版
+    @Bean
+    public PaginationInterceptor paginationInterceptor() {
+        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
+        // 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求  默认false
+        // paginationInterceptor.setOverflow(false);
+        // 设置最大单页限制数量,默认 500 条,-1 不受限制
+        // paginationInterceptor.setLimit(500);
+        // 开启 count 的 join 优化,只针对部分 left join
+        paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
+        return paginationInterceptor;
+    }
+
+}

+ 17 - 1
src/main/java/com/usky/dxtop/service/emun/OrderPayType.java

@@ -11,7 +11,9 @@ public enum OrderPayType {
 
     WX(2,"微信支付"),
 
-    ZFB(3,"支付宝支付");
+    ZFB(3,"支付宝支付"),
+
+    OTHRE(4,"其他支付");
     private Integer payCode;
 
     private String name;
@@ -22,6 +24,20 @@ public enum OrderPayType {
         this.name = name;
     }
 
+    public static OrderPayType parse(Integer payCode){
+        OrderPayType orderPayType = null;
+        for (OrderPayType o:OrderPayType.values()) {
+            if (o.getPayCode().equals(payCode)){
+                orderPayType = o;
+                break;
+            }
+        }
+        if (null == orderPayType){
+            orderPayType = OTHRE;
+        }
+        return orderPayType;
+    }
+
     public Integer getPayCode(){
         return payCode;
     }

+ 1 - 1
src/main/java/com/usky/dxtop/service/emun/OrderStatus.java

@@ -30,7 +30,7 @@ public enum OrderStatus {
     public static OrderStatus parse(Integer code){
         OrderStatus orderStatus = null;
         for (OrderStatus o:OrderStatus.values()) {
-            if (code.equals(o.getCode())){
+            if (o.getCode().equals(code)){
                 orderStatus = o;
                 break;
             }

+ 117 - 4
src/main/java/com/usky/dxtop/service/impl/OrderServiceImpl.java

@@ -1,5 +1,7 @@
 package com.usky.dxtop.service.impl;
 
+import cn.afterturn.easypoi.excel.ExcelExportUtil;
+import cn.afterturn.easypoi.excel.entity.ExportParams;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -9,10 +11,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.usky.dxtop.common.core.page.CommonPage;
 import com.usky.dxtop.common.exception.CustomException;
-import com.usky.dxtop.common.utils.Arith;
-import com.usky.dxtop.common.utils.DateUtils;
-import com.usky.dxtop.common.utils.QRCodeUtil;
-import com.usky.dxtop.common.utils.StringUtils;
+import com.usky.dxtop.common.utils.*;
 import com.usky.dxtop.common.utils.http.HttpUtils;
 import com.usky.dxtop.common.utils.sign.Base64;
 import com.usky.dxtop.common.utils.spring.GlobalUtils;
@@ -24,15 +23,29 @@ import com.usky.dxtop.service.OrderService;
 import com.usky.dxtop.service.api.TopApi;
 import com.usky.dxtop.service.emun.OrderPayType;
 import com.usky.dxtop.service.emun.OrderStatus;
+import com.usky.dxtop.service.vo.OrderExport;
+import com.usky.dxtop.service.vo.OrderReport;
 import com.usky.dxtop.service.vo.OrderRequest;
 import lombok.extern.slf4j.Slf4j;
+import ma.glasnost.orika.MapperFacade;
+import ma.glasnost.orika.MapperFactory;
+import ma.glasnost.orika.impl.DefaultMapperFactory;
+import org.apache.commons.io.FileUtils;
+import org.apache.poi.ss.usermodel.Workbook;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.FastByteArrayOutputStream;
 import javax.imageio.ImageIO;
 import java.awt.image.BufferedImage;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
 import java.util.TreeMap;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -255,6 +268,106 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
         }
     }
 
+    @Override
+    public String exportDetail(OrderRequest orderRequest) {
+        Workbook workbook = null;
+        File file = null;
+        try {
+            ExportParams params = new ExportParams(null, "订单详情");
+            workbook = ExcelExportUtil.exportBigExcel(params, OrderExport.class,
+                    (o, i) -> {
+                        orderRequest.setCurrent(i);
+                        orderRequest.setSize(30);
+                        CommonPage<Order> page = this.list(orderRequest);
+                        return page.getRecords().stream().map(this::orderChangeOrderExport).collect(Collectors.toList());
+                    },null);
+            if (null != workbook) {
+                file = FileUtils.getFile(GlobalUtils.getTempBaseDir(), String.format("%s-%s.xlsx", "订单详情", System.currentTimeMillis() + ""));
+                FileOutputStream allListingFileOutputStream = new FileOutputStream(file);
+                workbook.write(allListingFileOutputStream);
+            } else {
+                throw new CustomException("表格数据为空");
+            }
+        } catch (Exception e) {
+            log.error("导出文件失败", e);
+            throw new CustomException("导出文件失败");
+        } finally {
+            if (workbook != null) {
+                try {
+                    workbook.close();
+                } catch (IOException e) {
+                    log.error("===export spec=== 关闭workbook失败", e);
+                }
+            }
+        }
+        return file.getName();
+    }
+
+    public OrderExport orderChangeOrderExport(Order order){
+        MapperFactory factory = new DefaultMapperFactory.Builder().build();
+        factory.classMap(Order.class, OrderExport.class)
+                .exclude("orderFlag")
+                .exclude("payType")
+                .byDefault().register();
+        MapperFacade mapper = factory.getMapperFacade();
+        OrderExport orderExport = mapper.map(order, OrderExport.class);
+        orderExport.setOrderFlag(OrderStatus.parse(order.getOrderFlag()).getName());
+        orderExport.setPayType(OrderPayType.parse(order.getPayType()).getName());
+        return orderExport;
+    }
+
+    @Override
+    public CommonPage<OrderReport> orderReportList(Integer current,Integer size,Date startTime, Date endTime, Integer type) {
+        IPage<OrderReport> page = new Page<>(current, size);
+        switch (type){
+            case 1 :
+                page = baseMapper.getCountByDay(page, startTime, endTime);
+                break;
+            case 2 :
+                page = baseMapper.getCountByWeek(page, startTime, endTime);
+                break;
+            case 3 :
+                page = baseMapper.getCountByMonth(page, startTime, endTime);
+                break;
+            default:
+                page = baseMapper.getCountByYear(page, startTime, endTime);
+        }
+        return new CommonPage<>(page.getRecords(),page.getTotal(),page.getCurrent(),page.getSize());
+    }
+
+    @Override
+    public String reportExport(Date startTime, Date endTime, Integer type) {
+        Workbook workbook = null;
+        File file = null;
+        try {
+            ExportParams params = new ExportParams(null, "订单明细");
+            workbook = ExcelExportUtil.exportBigExcel(params, OrderReport.class,
+                    (o, i) -> {
+                        CommonPage<OrderReport> list = this.orderReportList(i,30,startTime,endTime,type);
+                        return new ArrayList<>(list.getRecords());
+                    },null);
+            if (null != workbook) {
+                file = FileUtils.getFile(GlobalUtils.getTempBaseDir(), String.format("%s-%s.xlsx", "订单明细", System.currentTimeMillis() + ""));
+                FileOutputStream allListingFileOutputStream = new FileOutputStream(file);
+                workbook.write(allListingFileOutputStream);
+            } else {
+                throw new CustomException("表格数据为空");
+            }
+        } catch (Exception e) {
+            log.error("导出文件失败", e);
+            throw new CustomException("导出文件失败");
+        } finally {
+            if (workbook != null) {
+                try {
+                    workbook.close();
+                } catch (IOException e) {
+                    log.error("===export spec=== 关闭workbook失败", e);
+                }
+            }
+        }
+        return file.getName();
+    }
+
     /**
      * 充值失败后处理
      * @param order

+ 7 - 3
src/main/java/com/usky/dxtop/service/job/OrderJob.java

@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.usky.dxtop.model.Order;
 import com.usky.dxtop.service.OrderService;
+import com.usky.dxtop.service.emun.OrderPayType;
 import com.usky.dxtop.service.emun.OrderStatus;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -29,9 +30,12 @@ public class OrderJob {
     @Scheduled(cron = "0 */1 * * * ?")
     public void execute(){
         LambdaQueryWrapper<Order> queryWrapper = Wrappers.lambdaQuery();
-        queryWrapper.eq(Order::getOrderFlag, OrderStatus.NO_PAYMENT.getCode())
-                .or()
-                .eq(Order::getOrderFlag, OrderStatus.AWAIT_PAY.getCode());
+        queryWrapper
+                .ne(Order::getPayType, OrderPayType.XJ.getPayCode())
+                .and(wrapper -> wrapper.eq(Order::getOrderFlag, OrderStatus.NO_PAYMENT.getCode())
+                        .or()
+                        .eq(Order::getOrderFlag, OrderStatus.NO_PAYMENT.getCode())
+                        .eq(Order::getOrderFlag, OrderStatus.AWAIT_PAY.getCode()));
         List<Order> list = orderService.list(queryWrapper);
         for (Order order:list) {
             try {

+ 77 - 0
src/main/java/com/usky/dxtop/service/vo/OrderExport.java

@@ -0,0 +1,77 @@
+package com.usky.dxtop.service.vo;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+
+/**
+ * @author yq
+ * @date 2021/8/31 16:24
+ */
+@Data
+public class OrderExport {
+
+    private Long id;
+    /**
+     * 订单编号
+     */
+    @Excel(name = "订单编号", height = 6, width = 20)
+    private String orderNumber;
+
+    /**
+     * 用户id
+     */
+    private Long userId;
+
+    /**
+     * 用户名称
+     */
+    @Excel(name = "用户名称", height = 6, width = 20)
+    private String userName;
+
+    /**
+     * 用户手机号
+     */
+    @Excel(name = "用户手机号", height = 6, width = 20)
+    private String userPhone;
+
+    /**
+     * 订单状态(0未支付2已支付3支付失败)
+     */
+    @Excel(name = "订单状态", height = 6, width = 20)
+    private String orderFlag;
+
+    /**
+     * 充值来源
+     */
+    @Excel(name = "充值来源", height = 6, width = 20)
+    private Integer topSource;
+
+    /**
+     * 支付方式
+     */
+    @Excel(name = "支付方式", height = 6, width = 20)
+    private String payType;
+
+    /**
+     * 充值金额
+     */
+    @Excel(name = "充值金额", height = 6, width = 20)
+    private Double money;
+
+    /**
+     * 身份信息
+     */
+    @Excel(name = "身份信息", height = 6, width = 20)
+    private String identity;
+
+    /**
+     * 到账比例
+     */
+    @Excel(name = "到账比例", height = 6, width = 20)
+    private Double topRadio;
+}
+
+
+

+ 35 - 0
src/main/java/com/usky/dxtop/service/vo/OrderReport.java

@@ -0,0 +1,35 @@
+package com.usky.dxtop.service.vo;
+
+import cn.afterturn.easypoi.excel.annotation.Excel;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 订单报表
+ * @author yq
+ * @date 2021/8/31 16:24
+ */
+@Data
+public class OrderReport {
+
+    @Excel(name = "日期", height = 6, width = 20)
+    private String reportDate;
+
+    @Excel(name = "总金额", height = 6, width = 20)
+    private Double totalMoney;
+
+    @Excel(name = "微信支付", height = 6, width = 20)
+    private Double wxMoney;
+
+    @Excel(name = "支付宝支付", height = 6, width = 20)
+    private Double zfbMoney;
+
+    @Excel(name = "现金支付", height = 6, width = 20)
+    private Double cashMoney;
+
+    private String type;
+
+    private Integer payType;
+
+}

+ 77 - 0
src/main/resources/mapper/OrderMapper.xml

@@ -18,5 +18,82 @@
         <result property="updateBy"      column="update_by"      />
         <result property="updateTime"    column="update_time"    />
     </resultMap>
+    <select id="getCountByDay" resultType="com.usky.dxtop.service.vo.OrderReport">
+    select *
+    from
+    (SELECT
+    DATE(create_time) reportDate,
+    sum(money) as totalMoney,
+    sum(if(pay_type = '1', 1, 0)) as cashMoney,
+    sum(if(pay_type = '2', 1, 0)) as wxMoney,
+    sum(if(pay_type = '3', 1, 0)) as zfbMoney
+    FROM
+    t_order
+        <where>
+            <if test="startTime != null and endTime != null">
+                create_time BETWEEN #{startTime} AND #{endTime}
+            </if>
+        </where>
+    GROUP BY reportDate) as t
+    order by reportDate
+    </select>
+    <select id="getCountByWeek" resultType="com.usky.dxtop.service.vo.OrderReport">
+        select *
+        from
+        (SELECT
+        WEEK(create_time) reportDate,
+        sum(money) as totalMoney,
+        sum(if(pay_type = '1', 1, 0)) as cashMoney,
+        sum(if(pay_type = '2', 1, 0)) as wxMoney,
+        sum(if(pay_type = '3', 1, 0)) as zfbMoney
+        FROM
+        t_order
+        <where>
+            <if test="startTime != null and endTime != null">
+                create_time BETWEEN #{startTime} AND #{endTime}
+            </if>
+        </where>
+        GROUP BY reportDate) as t
+        order by reportDate
+    </select>
+
+    <select id="getCountByYear" resultType="com.usky.dxtop.service.vo.OrderReport">
+        select *
+        from
+        (SELECT
+        month(create_time) reportDate,
+        sum(money) as totalMoney,
+        sum(if(pay_type = '1', 1, 0)) as cashMoney,
+        sum(if(pay_type = '2', 1, 0)) as wxMoney,
+        sum(if(pay_type = '3', 1, 0)) as zfbMoney
+        FROM
+        t_order
+        <where>
+            <if test="startTime != null and endTime != null">
+                create_time BETWEEN #{startTime} AND #{endTime}
+            </if>
+        </where>
+        GROUP BY reportDate) as t
+        order by reportDate
+    </select>
+    <select id="getCountByMonth" resultType="com.usky.dxtop.service.vo.OrderReport">
+        select *
+        from
+        (SELECT
+        YEAR(create_time) reportDate,
+        sum(money) as totalMoney,
+        sum(if(pay_type = '1', 1, 0)) as cashMoney,
+        sum(if(pay_type = '2', 1, 0)) as wxMoney,
+        sum(if(pay_type = '3', 1, 0)) as zfbMoney
+        FROM
+        t_order
+        <where>
+            <if test="startTime != null and endTime != null">
+                create_time BETWEEN #{startTime} AND #{endTime}
+            </if>
+        </where>
+        GROUP BY reportDate) as t
+        order by reportDate
+    </select>
 
 </mapper>