From 43d728030dca41209677b0a7e314de2ce0a21aa9 Mon Sep 17 00:00:00 2001 From: 陶杰 <1378534974@qq.com> Date: 星期五, 27 九月 2024 10:47:50 +0800 Subject: [PATCH] 1.报表框架 --- src/main/java/com/mzl/flower/web/v2/report/OrderReportController.java | 19 ++++ src/main/java/com/mzl/flower/dto/response/report/OrderReportResultVO.java | 47 ++++++----- src/main/java/com/mzl/flower/mapper/report/OrderReportMapper.java | 9 ++ src/main/java/com/mzl/flower/service/report/OrderReportService.java | 6 + src/main/java/com/mzl/flower/dto/response/report/OrderReportCalendarBO.java | 4 + src/main/resources/mapper/report/OrderReportMapper.xml | 52 +++++++++++++ src/main/java/com/mzl/flower/service/impl/report/OrderReportServiceImpl.java | 51 ++++++++++++ 7 files changed, 164 insertions(+), 24 deletions(-) diff --git a/src/main/java/com/mzl/flower/dto/response/report/OrderReportCalendarBO.java b/src/main/java/com/mzl/flower/dto/response/report/OrderReportCalendarBO.java index f3dceda..a59a58d 100644 --- a/src/main/java/com/mzl/flower/dto/response/report/OrderReportCalendarBO.java +++ b/src/main/java/com/mzl/flower/dto/response/report/OrderReportCalendarBO.java @@ -17,4 +17,8 @@ @ApiModelProperty("订单的结束时间") private LocalDateTime endDate; + @ApiModelProperty(value = "合伙人id") + private Long partnerId; + + } diff --git a/src/main/java/com/mzl/flower/dto/response/report/OrderReportResultVO.java b/src/main/java/com/mzl/flower/dto/response/report/OrderReportResultVO.java index 50d3d8e..6564b6e 100644 --- a/src/main/java/com/mzl/flower/dto/response/report/OrderReportResultVO.java +++ b/src/main/java/com/mzl/flower/dto/response/report/OrderReportResultVO.java @@ -1,71 +1,76 @@ package com.mzl.flower.dto.response.report; +import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModelProperty; import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; import java.math.BigDecimal; +import java.time.LocalDateTime; @Data public class OrderReportResultVO { @ApiModelProperty("下单日期") - private String orderDate; + @JsonFormat(pattern="yyyy-MM-dd" ,timezone="GMT+8") + @DateTimeFormat + private LocalDateTime orderDate; @ApiModelProperty("销售额") - private BigDecimal saleFeeAmount; + private BigDecimal orderTotal; @ApiModelProperty("花农底价") - private BigDecimal supplierFeeAmount; + private BigDecimal orderSupplierPriceAmount; @ApiModelProperty("平台区间加价") - private BigDecimal platformSectionFeeAmount; + private BigDecimal orderMarkupOneAmount; @ApiModelProperty("平台加价") - private BigDecimal platformFeeAmount; + private BigDecimal orderMarkupTwoAmount; - @ApiModelProperty("平台区域加价") + @ApiModelProperty("平台区域加价--暂无") private BigDecimal platformAreaFeeAmount; @ApiModelProperty("合伙人加价") - private BigDecimal partnerFeeAmount; + private BigDecimal orderMarkupPartnerAmount; - @ApiModelProperty("合伙人区间加价") + @ApiModelProperty("合伙人区间加价--暂无") private BigDecimal partnerSectionFeeAmount; @ApiModelProperty("会员折扣") - private BigDecimal memberDiscountFeeAmount; + private BigDecimal orderPriceDiscountAmount; @ApiModelProperty("优惠券") - private BigDecimal couponFeeAmount; + private BigDecimal orderCouponAmountTotal; @ApiModelProperty("降级扣款") - private BigDecimal demotionFeeAmount; + private BigDecimal orderCheckFee; @ApiModelProperty("缺货扣款") - private BigDecimal stockoutFeeAmount; + private BigDecimal orderLackFeeSupplier; @ApiModelProperty("补货扣款") - private BigDecimal replenishmentFeeAmount; + private BigDecimal orderReplaceFee; @ApiModelProperty("售后扣合伙人款") - private BigDecimal afterSalePartnerFeeAmount; + private BigDecimal orderFeePartner; @ApiModelProperty("售后扣花农款") - private BigDecimal afterSaleSupplierFeeAmount; + private BigDecimal orderFeeSupplier; @ApiModelProperty("售后扣平台款") - private BigDecimal afterSalePlatformFeeAmount; + private BigDecimal orderFeePlatform; - @ApiModelProperty("总包干费") + @ApiModelProperty("总包干费--暂无") private BigDecimal partnerTotalFeeAmount; - @ApiModelProperty("销售扎数") - private Integer saleAmount; + @ApiModelProperty("实际销售扎数") + private Integer realSaleNum; - @ApiModelProperty("利润") + @ApiModelProperty("利润--总包干费没有无法计算") private BigDecimal profitFeeAmount; - @ApiModelProperty("结算状态") + @ApiModelProperty("结算状态--暂无") private String settleStatus; } diff --git a/src/main/java/com/mzl/flower/mapper/report/OrderReportMapper.java b/src/main/java/com/mzl/flower/mapper/report/OrderReportMapper.java new file mode 100644 index 0000000..ed02019 --- /dev/null +++ b/src/main/java/com/mzl/flower/mapper/report/OrderReportMapper.java @@ -0,0 +1,9 @@ +package com.mzl.flower.mapper.report; + +import com.mzl.flower.dto.response.report.OrderReportCalendarBO; +import com.mzl.flower.dto.response.report.OrderReportResultVO; +import org.apache.ibatis.annotations.Param; + +public interface OrderReportMapper { + OrderReportResultVO getOrderDateReport(@Param("dto") OrderReportCalendarBO calendarBO); +} diff --git a/src/main/java/com/mzl/flower/service/impl/report/OrderReportServiceImpl.java b/src/main/java/com/mzl/flower/service/impl/report/OrderReportServiceImpl.java index 4532d67..49dbd3e 100644 --- a/src/main/java/com/mzl/flower/service/impl/report/OrderReportServiceImpl.java +++ b/src/main/java/com/mzl/flower/service/impl/report/OrderReportServiceImpl.java @@ -4,11 +4,19 @@ import com.mzl.flower.dto.request.report.QueryOrderDTO; import com.mzl.flower.dto.response.report.OrderReportCalendarBO; import com.mzl.flower.dto.response.report.OrderReportResultVO; +import com.mzl.flower.mapper.report.OrderReportMapper; import com.mzl.flower.service.calendar.CalendarService; import com.mzl.flower.service.report.OrderReportService; +import com.mzl.flower.utils.ExcelExportUtil; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import javax.servlet.http.HttpServletResponse; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.util.ArrayList; import java.util.Calendar; import java.util.List; import java.util.stream.Collectors; @@ -19,18 +27,57 @@ @Autowired private CalendarService calendarService; + @Autowired + private OrderReportMapper orderReportMapper; + + + @Override public Page<OrderReportResultVO> getSalePage(Page page, QueryOrderDTO dto) { List<OrderReportCalendarBO> calendarBOList= calendarService.getOrderDatePage(page,dto); final List<OrderReportResultVO> list = calendarBOList.stream().map(calendarBO -> { - OrderReportResultVO vo=new OrderReportResultVO(); + BeanUtils.copyProperties(dto,calendarBO); + OrderReportResultVO vo2=orderReportMapper.getOrderDateReport(calendarBO); + vo2.setOrderDate(calendarBO.getCalDate()); - return vo; + return vo2; }).collect(Collectors.toList()); page.setRecords(list); return page; } + + @Override + public OrderReportResultVO getSaleStatis(QueryOrderDTO dto) { + // 计算开始时间和结束时间 + + OrderReportCalendarBO bo=new OrderReportCalendarBO(); + BeanUtils.copyProperties(dto,bo); + bo.setStartDate(calculateStartTime(dto.getStartDate())); + bo.setEndDate(calculateEndTime(dto.getEndDate())); + OrderReportResultVO vo2=orderReportMapper.getOrderDateReport(bo); + + return vo2; + } + + @Override + public void exportSalesList(HttpServletResponse response, QueryOrderDTO dto) { + + } + + + // 计算 startDate 的前一天 17:00:00 + public static LocalDateTime calculateStartTime(LocalDate startDate) { + LocalDate previousDay = startDate.minusDays(1); + LocalTime fivePM = LocalTime.of(17, 0, 0); // 下午 17:00:00 + return LocalDateTime.of(previousDay, fivePM); + } + + // 计算 endDate 当天的 17:00:00 + public static LocalDateTime calculateEndTime(LocalDate endDate) { + LocalTime fivePM = LocalTime.of(17, 0, 0); // 下午 17:00:00 + return LocalDateTime.of(endDate, fivePM); + } } diff --git a/src/main/java/com/mzl/flower/service/report/OrderReportService.java b/src/main/java/com/mzl/flower/service/report/OrderReportService.java index eab2c1f..a96a30b 100644 --- a/src/main/java/com/mzl/flower/service/report/OrderReportService.java +++ b/src/main/java/com/mzl/flower/service/report/OrderReportService.java @@ -4,6 +4,12 @@ import com.mzl.flower.dto.request.report.QueryOrderDTO; import com.mzl.flower.dto.response.report.OrderReportResultVO; +import javax.servlet.http.HttpServletResponse; + public interface OrderReportService { Page<OrderReportResultVO> getSalePage(Page page, QueryOrderDTO dto); + + OrderReportResultVO getSaleStatis(QueryOrderDTO dto); + + void exportSalesList(HttpServletResponse response, QueryOrderDTO dto); } diff --git a/src/main/java/com/mzl/flower/web/v2/report/OrderReportController.java b/src/main/java/com/mzl/flower/web/v2/report/OrderReportController.java index 71ed3c6..a4bd585 100644 --- a/src/main/java/com/mzl/flower/web/v2/report/OrderReportController.java +++ b/src/main/java/com/mzl/flower/web/v2/report/OrderReportController.java @@ -8,6 +8,7 @@ import com.mzl.flower.config.exception.ValidationException; import com.mzl.flower.dto.request.coupon.CreateCouponRecordDTO; import com.mzl.flower.dto.request.coupon.QueryCouponRecordDTO; +import com.mzl.flower.dto.request.payment.OrderItemSalesQueryDTO; import com.mzl.flower.dto.request.report.QueryOrderDTO; import com.mzl.flower.dto.response.coupon.CouponRecordResultVO; import com.mzl.flower.dto.response.coupon.CouponRecordVO; @@ -27,6 +28,8 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletResponse; + /** * @author @TaoJie @@ -44,10 +47,24 @@ @GetMapping("/sale/page") @ApiOperation(value = "查询-分页", notes = "查询-分页") - public ResponseEntity<ReturnDataDTO<Page<CouponRecordVO>>> page( + public ResponseEntity<ReturnDataDTO<Page<OrderReportResultVO>>> page( Page page, QueryOrderDTO dto ) { return returnData(R.SUCCESS.getCode(), ConverterUtil.transPage(orderReportService.getSalePage(page,dto), OrderReportResultVO.class)); } + @GetMapping("/sale/statis") + @ApiOperation(value = "统计", notes = "统计") + public ResponseEntity<ReturnDataDTO<OrderReportResultVO>> statis(QueryOrderDTO dto + ) { + return returnData(R.SUCCESS.getCode(), ConverterUtil.transObject(orderReportService.getSaleStatis(dto), OrderReportResultVO.class)); + } + + + @GetMapping({"/sale/export"}) + @ApiOperation(value = "报告列表导出") + public void exportSales(HttpServletResponse response, QueryOrderDTO dto){ + orderReportService.exportSalesList(response, dto); + } + } \ No newline at end of file diff --git a/src/main/resources/mapper/report/OrderReportMapper.xml b/src/main/resources/mapper/report/OrderReportMapper.xml new file mode 100644 index 0000000..3f0670e --- /dev/null +++ b/src/main/resources/mapper/report/OrderReportMapper.xml @@ -0,0 +1,52 @@ +<?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.mzl.flower.mapper.report.OrderReportMapper"> + + <select id="getOrderDateReport" resultType="com.mzl.flower.dto.response.report.OrderReportResultVO"> + select + sum(order_total) as order_total, -- 销售额 + sum(order_supplier_price_amount) as order_supplier_price_amount, -- 花农底价 + sum(order_markup_one_amount) as order_markup_one_amount, -- 平台区间加价 + sum(order_markup_two_amount) as order_markup_two_amount, -- 平台加价 + sum(order_markup_partner_amount) as order_markup_partner_amount, -- 合伙人加价 + sum(order_price_discount_amount) as order_price_discount_amount, -- 会员折扣 + sum(order_coupon_amount_total) as order_coupon_amount_total, -- 优惠券总金额 + sum(order_check_fee) as order_check_fee, -- 降级扣款 + sum(order_lack_fee_supplier) as order_lack_fee_supplier, -- 缺货扣款 + sum(order_replace_fee) as order_replace_fee, -- 补货扣款 + sum(order_fee_supplier) as order_fee_supplier, -- 供应商扣款 + sum(order_fee_partner) as order_fee_partner, -- 合伙人扣款 + sum(order_fee_platform) as order_fee_platform, -- 平台扣款 + sum(order_fee_platform_pack) as order_fee_platform_pack, -- 平台打包扣款 + sum(order_fee_platform_check) as order_fee_platform_check, -- 平台质检扣款 + sum(order_fee_platform_transport) as order_fee_platform_transport, -- 物流扣款 + sum(order_total_fee) as order_total_fee, -- 退款总额 + sum(order_fee_packing_transport) as order_fee_packing_transport, -- 打包运费 + sum(order_num) as order_num,-- 数量 + sum(order_replace_num) as order_replace_num,-- 补货数量 + sum(order_reduce_num) as order_reduce_num,-- 降级数量 + sum(order_lack_num) as order_lack_num, -- 缺货数量 + sum(order_num)-sum(order_lack_num) as real_sale_num -- 销售扎数 + from ( + select + o.order_no,o.payment_time,o.status_backend,vor.* + from t_order o + left join v_order_report vor + on o.id =vor.order_id + where o.deleted=0 + and o.status_backend not in ('PENDING','CANCEL','REFUND') + <if test="dto.startDate != null"> + and o.payment_time > #{dto.startDate} + </if> + <if test="dto.endDate != null"> + and o.payment_time <= #{dto.endDate} + </if> + <if test="dto.partnerId != null"> + o.create_by in ( + select user_id from t_customer_info where partner_id=#{dto.partnerId} + ) + </if> + ) t + + </select> +</mapper> \ No newline at end of file -- Gitblit v1.9.3