he2802 2 lat temu
rodzic
commit
1d533c707e

+ 83 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/order/TopOrderStatisticsController.java

@@ -0,0 +1,83 @@
+package com.zhongzheng.controller.order;
+
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.core.domain.model.TopLoginUser;
+import com.zhongzheng.common.core.page.TableDataInfo;
+import com.zhongzheng.common.utils.ServletUtils;
+import com.zhongzheng.common.utils.poi.ExcelUtil;
+import com.zhongzheng.framework.web.service.TopTokenService;
+import com.zhongzheng.modules.top.financial.bo.OrderRefundPayBo;
+import com.zhongzheng.modules.top.financial.bo.TopDivideLogQueryBo;
+import com.zhongzheng.modules.top.financial.bo.TopDivideOrderQueryBo;
+import com.zhongzheng.modules.top.financial.vo.OrderRefundPayDetailVo;
+import com.zhongzheng.modules.top.financial.vo.TopCostTpVo;
+import com.zhongzheng.modules.top.financial.vo.TopOrderLogVo;
+import com.zhongzheng.modules.top.goods.bo.*;
+import com.zhongzheng.modules.top.goods.service.ITopOldOrderService;
+import com.zhongzheng.modules.top.goods.vo.*;
+import com.zhongzheng.modules.top.order.bo.TopOrderStatisticsBo;
+import com.zhongzheng.modules.top.order.bo.TopOrderStatisticsDayBo;
+import com.zhongzheng.modules.top.order.vo.*;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 订单Controller
+ *
+ * @author ruoyi
+ * @date 2023-04-20
+ */
+@Api(value = "订单控制器", tags = {"订单管理"})
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/system/top/order/statistics")
+public class TopOrderStatisticsController extends BaseController {
+
+    private final ITopOldOrderService iTopOldOrderService;
+
+    private final TopTokenService tokenService;
+
+    /**
+     * 下单客户订单金额统计
+     */
+    @ApiOperation("下单客户订单金额统计")
+    @GetMapping("/money")
+    public TableDataInfo<TopOrderStatisticsMoneyVo> orderMoneyStatisticsList(TopOrderStatisticsBo bo) {
+        startPage();
+        List<TopOrderStatisticsMoneyVo> list = iTopOldOrderService.orderMoneyStatisticsList(bo);
+        return getDataTable(list);
+    }
+
+    /**
+     * 下单客户订单数量统计
+     */
+    @ApiOperation("下单客户订单数量统计")
+    @GetMapping("/num")
+    public TableDataInfo<TopOrderStatisticsNumVo> orderNumStatisticsList(TopOrderStatisticsBo bo) {
+        startPage();
+        List<TopOrderStatisticsNumVo> list = iTopOldOrderService.orderNumStatisticsList(bo);
+        return getDataTable(list);
+    }
+
+//    /**
+//     * 下单客户订单数量统计
+//     */
+//    @ApiOperation("下单客户订单数量统计")
+//    @GetMapping("/day")
+//    public TableDataInfo<TopOrderStatisticsNumVo> orderStatisticsDayList(TopOrderStatisticsDayBo bo) {
+//        startPage();
+//        List<TopOrderStatisticsNumVo> list = iTopOldOrderService.orderStatisticsDayList(bo);
+//        return getDataTable(list);
+//    }
+
+
+
+}

+ 12 - 0
zhongzheng-common/src/main/java/com/zhongzheng/common/utils/DateUtils.java

@@ -304,6 +304,18 @@ public class DateUtils extends org.apache.commons.lang3.time.DateUtils
         return cal.getTime().getTime()/1000;
     }
 
+    /**
+     * 获取本年第一天的凌晨时间戳
+     */
+    public static Long getToYearZeroTime()
+    {
+        Calendar calendar = Calendar.getInstance();
+        // 设置当前时间为年初的第一天
+        calendar.set(Calendar.DAY_OF_YEAR, 1);
+        Date startOfCurrentYear = calendar.getTime();
+        return startOfCurrentYear.getTime()/1000;
+    }
+
     /**
      * 根据当前日期获得所在周的日期区间(周一和周日日期)
      */

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/bo/TopOldOrderGoodsAddBo.java

@@ -84,6 +84,8 @@ public class TopOldOrderGoodsAddBo {
     private Integer checkStatus;
     @ApiModelProperty("旧系统自增ID")
     private Long signId;
+    @ApiModelProperty("关联的旧系统自增ID(修改学员时使用)")
+    private Long relSignId;
     @ApiModelProperty("学员名称")
     private String userName;
     @ApiModelProperty("学员身份证")

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/domain/TopOldOrderGoods.java

@@ -81,6 +81,8 @@ private static final long serialVersionUID=1L;
     private String applyUpReason;
     @ApiModelProperty("旧系统自增ID")
     private Long signId;
+    @ApiModelProperty("关联的旧系统自增ID(修改学员时使用)")
+    private Long relSignId;
     @ApiModelProperty("学员名称")
     private String userName;
     @ApiModelProperty("学员身份证")

+ 11 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/mapper/TopOldOrderMapper.java

@@ -9,6 +9,9 @@ import com.zhongzheng.modules.top.goods.domain.TopOldOrder;
 import com.zhongzheng.modules.top.goods.vo.TopOldOrderInvoiceVo;
 import com.zhongzheng.modules.top.goods.vo.TopOldOrderRefundVo;
 import com.zhongzheng.modules.top.goods.vo.TopOldOrderVo;
+import com.zhongzheng.modules.top.order.bo.TopOrderStatisticsBo;
+import com.zhongzheng.modules.top.order.vo.TopOrderStatisticsMoneyVo;
+import com.zhongzheng.modules.top.order.vo.TopOrderStatisticsNumVo;
 import org.apache.ibatis.annotations.Param;
 
 import java.math.BigDecimal;
@@ -57,4 +60,12 @@ public interface TopOldOrderMapper extends BaseMapper<TopOldOrder> {
     List<String> getOrderSnByBusiness(@Param("businessName")String businessName);
 
     List<TopOldOrderInvoiceVo> getOrderInvoiceList(String orderSn);
+
+    List<TopOrderStatisticsMoneyVo> getMoneyStatistics(TopOrderStatisticsBo bo);
+
+    BigDecimal getMoneyStatisticsTotal(@Param("startTime")Long startTime,@Param("endTime")Long endTime);
+
+    List<TopOrderStatisticsNumVo> getNumStatistics(TopOrderStatisticsBo bo);
+
+    Long getNumStatisticsTotal(@Param("startTime")Long startTime,@Param("endTime")Long endTime);
 }

+ 5 - 4
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/service/ITopOldOrderService.java

@@ -8,10 +8,8 @@ import com.zhongzheng.modules.top.goods.bo.*;
 import com.zhongzheng.modules.top.goods.domain.TopOldOrder;
 import com.zhongzheng.modules.top.goods.vo.*;
 import com.zhongzheng.modules.top.order.bo.PayOrderCallBackBo;
-import com.zhongzheng.modules.top.order.vo.TopOldOrderCommissionExportVo;
-import com.zhongzheng.modules.top.order.vo.TopOldOrderCompanyExportVo;
-import com.zhongzheng.modules.top.order.vo.TopOldOrderExportVo;
-import com.zhongzheng.modules.top.order.vo.TopOldOrderSellerExportVo;
+import com.zhongzheng.modules.top.order.bo.TopOrderStatisticsBo;
+import com.zhongzheng.modules.top.order.vo.*;
 
 import java.util.Collection;
 import java.util.List;
@@ -142,4 +140,7 @@ public interface ITopOldOrderService extends IService<TopOldOrder> {
 
 	List<TopOldOrderInvoiceVo> getOrderInvoiceList(String orderSn);
 
+    List<TopOrderStatisticsMoneyVo> orderMoneyStatisticsList(TopOrderStatisticsBo bo);
+
+    List<TopOrderStatisticsNumVo> orderNumStatisticsList(TopOrderStatisticsBo bo);
 }

+ 181 - 8
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/goods/service/impl/TopOldOrderServiceImpl.java

@@ -58,12 +58,10 @@ import com.zhongzheng.modules.top.goods.mapper.TopOldOrderMapper;
 import com.zhongzheng.modules.top.goods.service.*;
 import com.zhongzheng.modules.top.goods.vo.*;
 import com.zhongzheng.modules.top.order.bo.PayOrderCallBackBo;
+import com.zhongzheng.modules.top.order.bo.TopOrderStatisticsBo;
 import com.zhongzheng.modules.top.order.domain.TopOrderBankPay;
 import com.zhongzheng.modules.top.order.service.ITopOrderBankPayService;
-import com.zhongzheng.modules.top.order.vo.TopOldOrderCommissionExportVo;
-import com.zhongzheng.modules.top.order.vo.TopOldOrderCompanyExportVo;
-import com.zhongzheng.modules.top.order.vo.TopOldOrderExportVo;
-import com.zhongzheng.modules.top.order.vo.TopOldOrderSellerExportVo;
+import com.zhongzheng.modules.top.order.vo.*;
 import com.zhongzheng.modules.top.settle.domian.TopInstSettle;
 import com.zhongzheng.modules.top.settle.domian.TopInstSettleRelaiton;
 import com.zhongzheng.modules.top.settle.service.ITopInstSettleRelationService;
@@ -91,6 +89,7 @@ import org.springframework.transaction.annotation.Transactional;
 
 import java.io.IOException;
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -1447,7 +1446,8 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
 
         List<TopOldOrderGoods> list = topOrderGoodsService.listByIds(bo.getOrderGoodsIds());
         list.forEach(x -> x.setCheckStatus(bo.getCheckStatus()));
-        List<String> signIds = Arrays.stream(oldOrder.getCheckRemark().split(",")).filter(x -> !bo.getOrderGoodsIds().contains(x)).collect(Collectors.toList());
+//        List<String> signIds = Arrays.stream(oldOrder.getCheckRemark().split(",")).filter(x -> !bo.getOrderGoodsIds().contains(x)).collect(Collectors.toList());
+        List<Long> signIds = list.stream().filter(x -> ObjectUtils.isNotNull(x.getRelSignId())).map(TopOldOrderGoods::getRelSignId).collect(Collectors.toList());
         List<TopOldOrderGoods> topOldOrderGoods = topOrderGoodsService.
                 list(new LambdaQueryWrapper<TopOldOrderGoods>()
                         .eq(TopOldOrderGoods::getCheckStatus, -1)
@@ -1528,8 +1528,7 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
         if (bo.getCheckStatus() == 1 && StringUtils.isNotBlank(oldOrder.getCostJson())) {
             recalculateCost(oldOrder.getCostJson(), oldOrder);
         }
-        //清除标识IDs
-        oldOrder.setCheckRemark("");
+
         updateById(oldOrder);
         // 订单审核通知业务系统
         List<CheckOrderStudentDetailBo> studentDetailBos = list.stream().map(item -> {
@@ -2071,7 +2070,7 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
             //获取修改前的数据
             List<TopOldOrderGoods> list = topOrderGoodsService.list(new LambdaQueryWrapper<TopOldOrderGoods>()
                     .eq(TopOldOrderGoods::getOrderSn, orderGoods.getOrderSn())
-                    .eq(TopOldOrderGoods::getSignId, orderGoods.getSignId())
+                    .eq(TopOldOrderGoods::getSignId, orderGoods.getRelSignId())
                     .eq(TopOldOrderGoods::getCheckStatus, -1));
             if (CollectionUtils.isNotEmpty(list)){
                 for (TopOldOrderGoods goods : list) {
@@ -2126,6 +2125,179 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
         return resultList;
     }
 
+    @Override
+    public List<TopOrderStatisticsMoneyVo> orderMoneyStatisticsList(TopOrderStatisticsBo bo) {
+        //筛选时间处理
+        if (ObjectUtils.isNull(bo.getTimeSign()) && ObjectUtils.isNull(bo.getStartTime()) && ObjectUtils.isNull(bo.getEndTime())){
+            //没有选择时间范围,默认为当前时间向前推30天
+            Long nowTime = DateUtils.getNowTime();
+            Long dayBefore = DateUtils.getDayBefore(nowTime, 30);
+            bo.setStartTime(dayBefore);
+            bo.setEndTime(nowTime);
+        }else if (ObjectUtils.isNotNull(bo.getTimeSign())){
+            switch (bo.getTimeSign()){
+                case 1://本周
+                    Map<String, Long> timeInterval = DateUtils.getTimeInterval(new Date());
+                    bo.setStartTime(timeInterval.get("start"));
+                    bo.setEndTime(timeInterval.get("end"));
+                    break;
+                case 2://本月
+                    Long toMonthZeroTime = DateUtils.getToMonthZeroTime();
+                    bo.setStartTime(toMonthZeroTime);
+                    bo.setEndTime(DateUtils.getNowTime());
+                    break;
+                case 3://本年
+                    Long toYearZeroTime = DateUtils.getToYearZeroTime();
+                    bo.setStartTime(toYearZeroTime);
+                    bo.setEndTime(DateUtils.getNowTime());
+                    break;
+                default :
+                    break;
+            }
+        }
+
+        List<TopOrderStatisticsMoneyVo> moneyVos = baseMapper.getMoneyStatistics(bo);
+        if (CollectionUtils.isEmpty(moneyVos)){
+            return new ArrayList<>();
+        }
+        //订单总额
+        BigDecimal moneyTotal = baseMapper.getMoneyStatisticsTotal(bo.getStartTime(),bo.getEndTime());
+        moneyVos.forEach(item -> {
+            if (item.getMoney().compareTo(BigDecimal.ZERO) == 0){
+                return;
+            }
+            //环比
+            item.setWeekRate("100%");
+            Long startTime = bo.getStartTime();
+            Long endTime = bo.getEndTime();
+            Long time = endTime - startTime;
+            TopOrderStatisticsBo topOrderStatisticsBo = new TopOrderStatisticsBo();
+            topOrderStatisticsBo.setStartTime(startTime - time);
+            topOrderStatisticsBo.setEndTime(startTime);
+
+            topOrderStatisticsBo.setCustomerId(item.getCustomerId());
+            List<TopOrderStatisticsMoneyVo> moneyStatistics = baseMapper.getMoneyStatistics(topOrderStatisticsBo);
+            if (CollectionUtils.isNotEmpty(moneyStatistics)){
+                BigDecimal money = moneyStatistics.stream().findFirst().get().getMoney();
+                if (money.compareTo(BigDecimal.ZERO) > 0){
+                    BigDecimal subtract = item.getMoney().subtract(money);
+                    BigDecimal divide = subtract.divide(money,2, RoundingMode.HALF_UP);
+                    String s = divide.multiply(new BigDecimal("100")).toString();
+                    item.setWeekRate(s+"%");
+                }
+            }
+            //同比
+            item.setYearRate("100%");
+            Long startBefore = DateUtils.getDayBefore(bo.getStartTime(), 365);
+            Long endBefore = DateUtils.getDayBefore(bo.getEndTime(), 365);
+            topOrderStatisticsBo.setStartTime(startBefore);
+            topOrderStatisticsBo.setEndTime(endBefore);
+            List<TopOrderStatisticsMoneyVo> moneyStatistics2 = baseMapper.getMoneyStatistics(topOrderStatisticsBo);
+            if (CollectionUtils.isNotEmpty(moneyStatistics2)){
+                BigDecimal money = moneyStatistics2.stream().findFirst().get().getMoney();
+                if (money.compareTo(BigDecimal.ZERO) > 0){
+                    BigDecimal subtract = item.getMoney().subtract(money);
+                    BigDecimal divide = subtract.divide(money,2, RoundingMode.HALF_UP);
+                    String s = divide.multiply(new BigDecimal("100")).toString();
+                    item.setYearRate(s+"%");
+                }
+            }
+
+            //占比
+            BigDecimal divide = item.getMoney().divide(moneyTotal, 2, RoundingMode.HALF_UP);
+            String s = divide.multiply(new BigDecimal("100")).toString();
+            item.setOccupationRate(s+"%");
+        });
+        return moneyVos;
+    }
+
+    @Override
+    public List<TopOrderStatisticsNumVo> orderNumStatisticsList(TopOrderStatisticsBo bo) {
+        //筛选时间处理
+        if (ObjectUtils.isNull(bo.getTimeSign()) && ObjectUtils.isNull(bo.getStartTime()) && ObjectUtils.isNull(bo.getEndTime())){
+            //没有选择时间范围,默认为当前时间向前推30天
+            Long nowTime = DateUtils.getNowTime();
+            Long dayBefore = DateUtils.getDayBefore(nowTime, 30);
+            bo.setStartTime(dayBefore);
+            bo.setEndTime(nowTime);
+        }else if (ObjectUtils.isNotNull(bo.getTimeSign())){
+            switch (bo.getTimeSign()){
+                case 1://本周
+                    Map<String, Long> timeInterval = DateUtils.getTimeInterval(new Date());
+                    bo.setStartTime(timeInterval.get("start"));
+                    bo.setEndTime(timeInterval.get("end"));
+                    break;
+                case 2://本月
+                    Long toMonthZeroTime = DateUtils.getToMonthZeroTime();
+                    bo.setStartTime(toMonthZeroTime);
+                    bo.setEndTime(DateUtils.getNowTime());
+                    break;
+                case 3://本年
+                    Long toYearZeroTime = DateUtils.getToYearZeroTime();
+                    bo.setStartTime(toYearZeroTime);
+                    bo.setEndTime(DateUtils.getNowTime());
+                    break;
+                default :
+                    break;
+            }
+        }
+
+        List<TopOrderStatisticsNumVo> numVos = baseMapper.getNumStatistics(bo);
+        if (CollectionUtils.isEmpty(numVos)){
+            return new ArrayList<>();
+        }
+        //订单总数量
+        Long numTotal = baseMapper.getNumStatisticsTotal(bo.getStartTime(),bo.getEndTime());
+        numVos.forEach(item -> {
+            if (ObjectUtils.isNull(item.getOrderNum()) || item.getOrderNum() == 0){
+                return;
+            }
+            //环比
+            item.setWeekRate("100%");
+            Long startTime = bo.getStartTime();
+            Long endTime = bo.getEndTime();
+            Long time = endTime - startTime;
+            TopOrderStatisticsBo topOrderStatisticsBo = new TopOrderStatisticsBo();
+            topOrderStatisticsBo.setStartTime(startTime - time);
+            topOrderStatisticsBo.setEndTime(startTime);
+
+            topOrderStatisticsBo.setCustomerId(item.getCustomerId());
+            List<TopOrderStatisticsNumVo> numStatistics = baseMapper.getNumStatistics(topOrderStatisticsBo);
+            if (CollectionUtils.isNotEmpty(numStatistics)){
+                Long num = numStatistics.stream().findFirst().get().getOrderNum();
+                if (num > 0){
+                    Long subtract = item.getOrderNum() - num;
+                    BigDecimal divide = new BigDecimal(subtract).divide(new BigDecimal(num),2, RoundingMode.HALF_UP);
+                    String s = divide.multiply(new BigDecimal("100")).toString();
+                    item.setWeekRate(s+"%");
+                }
+            }
+            //同比
+            item.setYearRate("100%");
+            Long startBefore = DateUtils.getDayBefore(bo.getStartTime(), 365);
+            Long endBefore = DateUtils.getDayBefore(bo.getEndTime(), 365);
+            topOrderStatisticsBo.setStartTime(startBefore);
+            topOrderStatisticsBo.setEndTime(endBefore);
+            List<TopOrderStatisticsNumVo> numStatistics2 = baseMapper.getNumStatistics(topOrderStatisticsBo);
+            if (CollectionUtils.isNotEmpty(numStatistics2)){
+                Long num = numStatistics2.stream().findFirst().get().getOrderNum();
+                if (num > 0){
+                    Long subtract = item.getOrderNum() - num;
+                    BigDecimal divide = new BigDecimal(subtract).divide(new BigDecimal(num),2, RoundingMode.HALF_UP);
+                    String s = divide.multiply(new BigDecimal("100")).toString();
+                    item.setWeekRate(s+"%");
+                }
+            }
+
+            //占比
+            BigDecimal divide = new BigDecimal(item.getOrderNum()).divide(new BigDecimal(numTotal), 2, RoundingMode.HALF_UP);
+            String s = divide.multiply(new BigDecimal("100")).toString();
+            item.setOccupationRate(s+"%");
+        });
+        return numVos;
+    }
+
+
     private TopOrderGoodsUpVo getGoodsUp(TopOldOrderGoods orderGoods,List<TopOldOrderStudyVo> studyVos){
         TopOrderGoodsUpVo vo = BeanUtil.toBean(orderGoods, TopOrderGoodsUpVo.class);
         //学习状态
@@ -2144,6 +2316,7 @@ public class TopOldOrderServiceImpl extends ServiceImpl<TopOldOrderMapper, TopOl
                 }
             }
         }
+        vo.setUserCard(EncryptHandler.decrypt(vo.getUserCard()));
         return vo;
     }
 

+ 32 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/bo/TopOrderStatisticsBo.java

@@ -0,0 +1,32 @@
+package com.zhongzheng.modules.top.order.bo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author yangdamao
+ * @date 2023年10月24日 16:03
+ */
+@Data
+public class TopOrderStatisticsBo implements Serializable {
+
+    /** 分页大小 */
+    @ApiModelProperty("分页大小")
+    private Integer pageSize;
+    /** 当前页数 */
+    @ApiModelProperty("当前页数")
+    private Integer pageNum;
+
+    @ApiModelProperty("时间标识:1本周 2本月 3本年")
+    private Integer timeSign;
+
+    @ApiModelProperty("开始时间")
+    private Long startTime;
+
+    @ApiModelProperty("结束时间")
+    private Long endTime;
+
+    private Long customerId;
+}

+ 25 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/bo/TopOrderStatisticsDayBo.java

@@ -0,0 +1,25 @@
+package com.zhongzheng.modules.top.order.bo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author yangdamao
+ * @date 2023年10月24日 16:03
+ */
+@Data
+public class TopOrderStatisticsDayBo implements Serializable {
+
+    @ApiModelProperty("时间标识:1本周 2本月 3本年")
+    private Integer timeSign;
+
+    @ApiModelProperty("开始时间")
+    private Long startTime;
+
+    @ApiModelProperty("结束时间")
+    private Long endTime;
+
+    private Long customerId;
+}

+ 34 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/vo/TopOrderStatisticsMoneyVo.java

@@ -0,0 +1,34 @@
+package com.zhongzheng.modules.top.order.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @author yangdamao
+ * @date 2023年10月24日 16:12
+ */
+@Data
+public class TopOrderStatisticsMoneyVo implements Serializable {
+
+    @ApiModelProperty("客户ID")
+    private Long customerId;
+
+    @ApiModelProperty("客户名称")
+    private String customerName;
+
+    @ApiModelProperty("金额")
+    private BigDecimal money;
+
+    @ApiModelProperty("环比")
+    private String weekRate;
+
+    @ApiModelProperty("同比")
+    private String yearRate;
+
+    @ApiModelProperty("占比")
+    private String occupationRate;
+
+}

+ 34 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/order/vo/TopOrderStatisticsNumVo.java

@@ -0,0 +1,34 @@
+package com.zhongzheng.modules.top.order.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+
+/**
+ * @author yangdamao
+ * @date 2023年10月24日 16:12
+ */
+@Data
+public class TopOrderStatisticsNumVo implements Serializable {
+
+    @ApiModelProperty("客户ID")
+    private Long customerId;
+
+    @ApiModelProperty("客户名称")
+    private String customerName;
+
+    @ApiModelProperty("订单数量")
+    private Long orderNum;
+
+    @ApiModelProperty("环比")
+    private String weekRate;
+
+    @ApiModelProperty("同比")
+    private String yearRate;
+
+    @ApiModelProperty("占比")
+    private String occupationRate;
+
+}

+ 210 - 0
zhongzheng-system/src/main/resources/mapper/modules/top/TopOldOrderMapper.xml

@@ -614,4 +614,214 @@
             INSTR(order_no_list,#{orderSn})
     </select>
 
+    <select id="getMoneyStatistics" parameterType="com.zhongzheng.modules.top.order.bo.TopOrderStatisticsBo"
+            resultType="com.zhongzheng.modules.top.order.vo.TopOrderStatisticsMoneyVo">
+        SELECT
+        *
+        FROM
+        (
+            SELECT
+                SUM( too.order_received - too.order_refunded ) AS money,
+                too.old_customer_id AS customer_id,
+                (
+                SELECT
+                tod.purchase_org
+                FROM
+                top_old_order tod
+                WHERE
+                tod.old_customer_id = too.old_customer_id
+                AND tod.`status` = 1
+                AND tod.check_status = 1
+                LIMIT 1
+                ) AS customer_name
+            FROM
+            top_old_order too
+            WHERE
+                too.`status` = 1
+                AND too.check_status = 1
+                AND too.old_customer_id IS NOT NULL
+                <if test="startTime != null and startTime != ''">
+                    AND too.check_time &gt;= #{startTime}
+                </if>
+                <if test="endTime != null and endTime != ''">
+                    AND too.check_time &lt;= #{endTime}
+                </if>
+                <if test="customerId != null and customerId != ''">
+                    AND too.old_customer_id = #{customerId}
+                </if>
+            GROUP BY
+            too.old_customer_id UNION ALL
+            SELECT
+                SUM( o.order_price ) AS money,
+                o.tenant_id AS customer_id,
+                ( SELECT tenant_name FROM sys_tenant st WHERE st.tenant_id = o.tenant_id LIMIT 1 ) AS customer_name
+            FROM
+            `order` o
+            WHERE
+                o.`status` = 1
+                AND o.order_status = 1
+                AND (
+                o.input_order_sn IS NULL
+                OR ( SELECT COUNT( too.order_id ) FROM top_old_order too WHERE too.input_order_sn = o.input_order_sn ) &lt; 0 ) AND o.tenant_id IS NOT NULL
+                <if test="startTime != null and startTime != ''">
+                    AND o.create_time &gt;= #{startTime}
+                </if>
+                <if test="endTime != null and endTime != ''">
+                    AND o.create_time &lt;= #{endTime}
+                </if>
+                <if test="customerId != null and customerId != ''">
+                    AND o.tenant_id  = #{customerId}
+                </if>
+            GROUP BY
+            o.tenant_id
+        ) a
+        WHERE
+        1 = 1
+        ORDER BY
+        a.money DESC
+    </select>
+
+    <select id="getMoneyStatisticsTotal" parameterType="java.lang.Long"
+            resultType="java.math.BigDecimal">
+        SELECT
+            (
+            SELECT
+            SUM( too.order_received - too.order_refunded ) AS money
+            FROM
+            top_old_order too
+            WHERE
+            too.`status` = 1
+            AND too.check_status = 1
+            AND too.old_customer_id IS NOT NULL
+            <if test="startTime != null and startTime != ''">
+                AND too.check_time &gt;= #{startTime}
+            </if>
+            <if test="endTime != null and endTime != ''">
+                AND too.check_time &lt;= #{endTime}
+            </if>
+            ) + (
+            SELECT
+            SUM( o.order_price ) AS money
+            FROM
+            `order` o
+            WHERE
+            o.`status` = 1
+            AND o.order_status = 1
+            AND (
+            o.input_order_sn IS NULL
+            OR ( SELECT COUNT( too.order_id ) FROM top_old_order too WHERE too.input_order_sn = o.input_order_sn ) &lt; 0 ) AND o.tenant_id IS NOT NULL
+            <if test="startTime != null and startTime != ''">
+                AND o.create_time &gt;= #{startTime}
+            </if>
+            <if test="endTime != null and endTime != ''">
+                AND o.create_time &lt;= #{endTime}
+            </if>
+            ) money_total
+    </select>
+
+    <select id="getNumStatistics" parameterType="com.zhongzheng.modules.top.order.bo.TopOrderStatisticsBo"
+            resultType="com.zhongzheng.modules.top.order.vo.TopOrderStatisticsNumVo">
+        SELECT
+        *
+        FROM
+        (
+        SELECT
+        COUNT(too.order_id) AS orderNum,
+        too.old_customer_id AS customer_id,
+        (
+        SELECT
+        tod.purchase_org
+        FROM
+        top_old_order tod
+        WHERE
+        tod.old_customer_id = too.old_customer_id
+        AND tod.`status` = 1
+        AND tod.check_status = 1
+        LIMIT 1
+        ) AS customer_name
+        FROM
+        top_old_order too
+        WHERE
+        too.`status` = 1
+        AND too.check_status = 1
+        AND too.old_customer_id IS NOT NULL
+        <if test="startTime != null and startTime != ''">
+            AND too.check_time &gt;= #{startTime}
+        </if>
+        <if test="endTime != null and endTime != ''">
+            AND too.check_time &lt;= #{endTime}
+        </if>
+        <if test="customerId != null and customerId != ''">
+            AND too.old_customer_id = #{customerId}
+        </if>
+        GROUP BY
+        too.old_customer_id UNION ALL
+        SELECT
+        COUNT(o.order_id) AS orderNum,
+        o.tenant_id AS customer_id,
+        ( SELECT tenant_name FROM sys_tenant st WHERE st.tenant_id = o.tenant_id LIMIT 1 ) AS customer_name
+        FROM
+        `order` o
+        WHERE
+        o.`status` = 1
+        AND o.order_status = 1
+        AND (
+        o.input_order_sn IS NULL
+        OR ( SELECT COUNT( too.order_id ) FROM top_old_order too WHERE too.input_order_sn = o.input_order_sn ) &lt; 0 ) AND o.tenant_id IS NOT NULL
+        <if test="startTime != null and startTime != ''">
+            AND o.create_time &gt;= #{startTime}
+        </if>
+        <if test="endTime != null and endTime != ''">
+            AND o.create_time &lt;= #{endTime}
+        </if>
+        <if test="customerId != null and customerId != ''">
+            AND o.tenant_id  = #{customerId}
+        </if>
+        GROUP BY
+        o.tenant_id
+        ) a
+        WHERE
+        1 = 1
+        ORDER BY
+        a.orderNum DESC
+    </select>
+
+    <select id="getNumStatisticsTotal" parameterType="java.lang.Long"
+            resultType="java.lang.Long">
+        SELECT
+        (
+        SELECT
+        COUNT(too.order_id) AS orderNum
+        FROM
+        top_old_order too
+        WHERE
+        too.`status` = 1
+        AND too.check_status = 1
+        AND too.old_customer_id IS NOT NULL
+        <if test="startTime != null and startTime != ''">
+            AND too.check_time &gt;= #{startTime}
+        </if>
+        <if test="endTime != null and endTime != ''">
+            AND too.check_time &lt;= #{endTime}
+        </if>
+        ) + (
+        SELECT
+        COUNT(o.order_id) AS orderNum
+        FROM
+        `order` o
+        WHERE
+        o.`status` = 1
+        AND o.order_status = 1
+        AND (
+        o.input_order_sn IS NULL
+        OR ( SELECT COUNT( too.order_id ) FROM top_old_order too WHERE too.input_order_sn = o.input_order_sn ) &lt; 0 ) AND o.tenant_id IS NOT NULL
+        <if test="startTime != null and startTime != ''">
+            AND o.create_time &gt;= #{startTime}
+        </if>
+        <if test="endTime != null and endTime != ''">
+            AND o.create_time &lt;= #{endTime}
+        </if>
+        ) num_total
+    </select>
+
 </mapper>