From 0790e530ea01e0629fa5d21d6e94d79e50bd52d9 Mon Sep 17 00:00:00 2001
From: cloudroam <cloudroam>
Date: 星期五, 27 九月 2024 18:11:13 +0800
Subject: [PATCH] add: 订单明细报表

---
 src/main/java/com/mzl/flower/web/v2/report/OrderReportController.java           |   25 ++--
 src/main/java/com/mzl/flower/mapper/report/OrderReportMapper.java               |    6 +
 src/main/java/com/mzl/flower/dto/response/report/OrderDetailReportResultVO.java |   89 +++++++++++++++++
 src/main/java/com/mzl/flower/service/payment/OrderItemSalesService.java         |    1 
 src/main/java/com/mzl/flower/service/report/OrderReportService.java             |    6 +
 src/main/resources/mapper/report/OrderReportMapper.xml                          |   30 ++++++
 src/main/resources/mapper/payment/OrderItemMapper.xml                           |   32 +++---
 src/main/java/com/mzl/flower/dto/request/report/QueryOrderDTO.java              |    7 +
 src/main/java/com/mzl/flower/service/impl/report/OrderReportServiceImpl.java    |   83 ++++++++++++++++
 9 files changed, 248 insertions(+), 31 deletions(-)

diff --git a/src/main/java/com/mzl/flower/dto/request/report/QueryOrderDTO.java b/src/main/java/com/mzl/flower/dto/request/report/QueryOrderDTO.java
index f35960b..e55da06 100644
--- a/src/main/java/com/mzl/flower/dto/request/report/QueryOrderDTO.java
+++ b/src/main/java/com/mzl/flower/dto/request/report/QueryOrderDTO.java
@@ -26,4 +26,11 @@
 
     @ApiModelProperty(value = "合伙人id")
     private Long partnerId;
+
+    @ApiModelProperty(value = "下单日期")
+    @JsonFormat(pattern="yyyy-MM-dd" ,timezone="GMT+8")
+    @DateTimeFormat(pattern="yyyy-MM-dd")
+    @NotNull(message = "下单日期不能为空")
+    private LocalDate calDate;
+
 }
diff --git a/src/main/java/com/mzl/flower/dto/response/report/OrderDetailReportResultVO.java b/src/main/java/com/mzl/flower/dto/response/report/OrderDetailReportResultVO.java
new file mode 100644
index 0000000..67d0d73
--- /dev/null
+++ b/src/main/java/com/mzl/flower/dto/response/report/OrderDetailReportResultVO.java
@@ -0,0 +1,89 @@
+package com.mzl.flower.dto.response.report;
+
+import com.mzl.flower.base.AbstractTransDTO;
+import com.mzl.flower.base.annotation.DictTrans;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Data
+public class OrderDetailReportResultVO extends AbstractTransDTO {
+
+    @ApiModelProperty("订单号")
+    private String orderNo;
+
+    @ApiModelProperty("下单用户")
+    private String customer;
+
+    @ApiModelProperty("收货人地址")
+    private String address;
+
+    @ApiModelProperty("合伙人")
+    private String partnerName;
+
+    @ApiModelProperty("下单时间")
+    private LocalDateTime orderDate;
+
+    @ApiModelProperty("订单金额")
+    private BigDecimal orderTotal;
+
+    @ApiModelProperty("花农底价")
+    private BigDecimal orderSupplierPriceAmount;
+
+    @ApiModelProperty("平台区间加价")
+    private BigDecimal orderMarkupOneAmount;
+
+    @ApiModelProperty("平台加价")
+    private BigDecimal orderMarkupTwoAmount;
+
+    @ApiModelProperty("平台区域加价")
+    private BigDecimal platformAreaFeeAmount;
+
+    @ApiModelProperty("合伙人加价")
+    private BigDecimal orderMarkupPartnerAmount;
+
+    @ApiModelProperty("合伙人区间加价")
+    private BigDecimal partnerSectionFeeAmount;
+
+    @ApiModelProperty("会员折扣")
+    private BigDecimal orderPriceDiscountAmount;
+
+    @ApiModelProperty("优惠券")
+    private BigDecimal orderCouponAmountTotal;
+
+    @ApiModelProperty("质检降级扣款")
+    private BigDecimal orderCheckFee;
+
+    @ApiModelProperty("质检缺货扣款")
+    private BigDecimal orderLackFeeSupplier;
+
+    @ApiModelProperty("质检补货扣款")
+    private BigDecimal orderReplaceFee;
+
+    @ApiModelProperty("售后扣合伙人款")
+    private BigDecimal orderFeePartner;
+
+    @ApiModelProperty("售后扣花农款")
+    private BigDecimal orderFeeSupplier;
+
+    @ApiModelProperty("售后扣平台款")
+    private BigDecimal orderFeePlatform;
+
+    @ApiModelProperty("总包干费")
+    private BigDecimal partnerTotalFeeAmount;
+
+    @ApiModelProperty("销售扎数")
+    private Integer realSaleNum;
+
+    @ApiModelProperty("利润")
+    private BigDecimal profitFeeAmount;
+
+    @ApiModelProperty("结算状态")
+    @DictTrans(target = "settleStatusStr", codeType = "ORDER_STATUS_BACKEND")
+    private String settleStatus;
+
+    private String settleStatusStr;
+
+}
diff --git a/src/main/java/com/mzl/flower/mapper/report/OrderReportMapper.java b/src/main/java/com/mzl/flower/mapper/report/OrderReportMapper.java
index ed02019..1dad7a0 100644
--- a/src/main/java/com/mzl/flower/mapper/report/OrderReportMapper.java
+++ b/src/main/java/com/mzl/flower/mapper/report/OrderReportMapper.java
@@ -1,9 +1,15 @@
 package com.mzl.flower.mapper.report;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.mzl.flower.dto.response.report.OrderDetailReportResultVO;
 import com.mzl.flower.dto.response.report.OrderReportCalendarBO;
 import com.mzl.flower.dto.response.report.OrderReportResultVO;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 public interface OrderReportMapper {
     OrderReportResultVO getOrderDateReport(@Param("dto") OrderReportCalendarBO calendarBO);
+
+    List<OrderDetailReportResultVO> getOrderDetailReport(@Param("dto") OrderReportCalendarBO calendarBO, Page page);
 }
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 3c19f73..ab707ee 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
@@ -1,7 +1,9 @@
 package com.mzl.flower.service.impl.report;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.mzl.flower.config.exception.ValidationException;
 import com.mzl.flower.dto.request.report.QueryOrderDTO;
+import com.mzl.flower.dto.response.report.OrderDetailReportResultVO;
 import com.mzl.flower.dto.response.report.OrderReportCalendarBO;
 import com.mzl.flower.dto.response.report.OrderReportResultVO;
 import com.mzl.flower.mapper.report.OrderReportMapper;
@@ -10,18 +12,17 @@
 import com.mzl.flower.service.report.OrderReportService;
 import com.mzl.flower.utils.ExcelExportUtil;
 import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
 
 import javax.servlet.http.HttpServletResponse;
 import java.net.URLEncoder;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
+import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
-import java.util.Calendar;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -51,6 +52,21 @@
             return vo2;
         }).collect(Collectors.toList());
 
+        page.setRecords(list);
+        return page;
+    }
+
+    @Override
+    public Page<OrderDetailReportResultVO> getOrderDetailPage(Page page, QueryOrderDTO dto) {
+        OrderReportCalendarBO orderReportCalendarBO = new OrderReportCalendarBO();
+        if (StringUtils.isEmpty(dto.getCalDate())) {
+            throw new ValidationException("日期不能为空");
+        }
+        LocalDateTime orderTime = dto.getCalDate().atStartOfDay();
+        orderReportCalendarBO.setPartnerId(dto.getPartnerId());
+        orderReportCalendarBO.setStartDate(calculateStartTime(orderTime));
+        orderReportCalendarBO.setEndDate(calculateEndTime(orderTime));
+        List<OrderDetailReportResultVO> list = orderReportMapper.getOrderDetailReport(orderReportCalendarBO, page);
         page.setRecords(list);
         return page;
     }
@@ -124,6 +140,67 @@
         }
     }
 
+    @Override
+    public void exportOrderDetail(HttpServletResponse response, QueryOrderDTO dto) {
+
+        if (StringUtils.isEmpty(dto.getCalDate())) {
+            throw new ValidationException("日期不能为空");
+        }
+        OrderReportCalendarBO orderReportCalendarBO = new OrderReportCalendarBO();
+        LocalDateTime orderTime = dto.getCalDate().atStartOfDay();
+        orderReportCalendarBO.setPartnerId(dto.getPartnerId());
+        orderReportCalendarBO.setStartDate(calculateStartTime(orderTime));
+        orderReportCalendarBO.setEndDate(calculateEndTime(orderTime));
+        List<OrderDetailReportResultVO> odrs = orderReportMapper.getOrderDetailReport(orderReportCalendarBO, null);
+        String[] rowsName = new String[]{"序号","订单号", "下单用户", "收货人地址", "合伙人", "下单时间", "订单金额"
+                , "花农底价", "平台区间加价", "平台加价", "平台区域加价", "合伙人加价", "合伙人区间加价", "会员折扣"
+                , "优惠券", "降级扣款", "缺货扣款", "补货扣款", "售后扣合伙人款", "售后扣花农款", "售后扣平台款", "总包干费"
+                , "销售扎数", "利润", "结算状态"};
+        List<Object[]> dataList = new ArrayList<>();
+        int sn = 1;
+        for (OrderDetailReportResultVO o : odrs) {
+            Object[] objs = new Object[rowsName.length];
+            int a = 0;
+            objs[a++] = sn;
+            objs[a++] = o.getOrderNo();
+            objs[a++] = o.getCustomer();
+            objs[a++] = o.getAddress();
+            objs[a++] = o.getPartnerName();
+            objs[a++] = o.getOrderDate();
+            objs[a++] = o.getOrderTotal();
+            objs[a++] = o.getOrderSupplierPriceAmount();
+            objs[a++] = o.getOrderMarkupOneAmount();
+            objs[a++] = o.getOrderMarkupTwoAmount();
+            objs[a++] = o.getPlatformAreaFeeAmount();
+            objs[a++] = o.getOrderMarkupPartnerAmount();
+            objs[a++] = o.getPartnerSectionFeeAmount();
+            objs[a++] = o.getOrderPriceDiscountAmount();
+            objs[a++] = o.getOrderCouponAmountTotal();
+            objs[a++] = o.getOrderCheckFee();
+            objs[a++] = o.getOrderLackFeeSupplier();
+            objs[a++] = o.getOrderReplaceFee();
+            objs[a++] = o.getOrderFeePartner();
+            objs[a++] = o.getOrderFeeSupplier();
+            objs[a++] = o.getOrderFeePlatform();
+            objs[a++] = o.getPartnerTotalFeeAmount();
+            objs[a++] = o.getRealSaleNum();
+            objs[a++] = o.getProfitFeeAmount();
+            objs[a++] = o.getSettleStatus();
+            dataList.add(objs);
+
+            sn++;
+        }
+        ExcelExportUtil excelExportUtil = new ExcelExportUtil("订单结算明细", rowsName, dataList, response);
+        try {
+            response.addHeader("filename", URLEncoder.encode("订单结算明细.xls", "UTF-8"));
+            response.addHeader("Access-Control-Expose-Headers", "filename");
+            excelExportUtil.export();
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+        }
+
+    }
+
     // 计算 startDate 的前一天 17:00:00
     public static LocalDateTime calculateStartTime(LocalDateTime startDateTime) {
         // 获取 LocalDate 部分
diff --git a/src/main/java/com/mzl/flower/service/payment/OrderItemSalesService.java b/src/main/java/com/mzl/flower/service/payment/OrderItemSalesService.java
index ef5b163..1be4b9b 100644
--- a/src/main/java/com/mzl/flower/service/payment/OrderItemSalesService.java
+++ b/src/main/java/com/mzl/flower/service/payment/OrderItemSalesService.java
@@ -247,6 +247,7 @@
             objs[a++] = format(d.getCreateTime(), "yyyy-MM-dd HH:mm:ss");
             objs[a++] = d.getRemarks();
 
+
             dataList.add(objs);
 
             sn++;
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 a96a30b..e5f29c2 100644
--- a/src/main/java/com/mzl/flower/service/report/OrderReportService.java
+++ b/src/main/java/com/mzl/flower/service/report/OrderReportService.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.mzl.flower.dto.request.report.QueryOrderDTO;
+import com.mzl.flower.dto.response.report.OrderDetailReportResultVO;
 import com.mzl.flower.dto.response.report.OrderReportResultVO;
 
 import javax.servlet.http.HttpServletResponse;
@@ -9,7 +10,12 @@
 public interface OrderReportService {
     Page<OrderReportResultVO> getSalePage(Page page, QueryOrderDTO dto);
 
+    //获取当天销售结算统计结果
+    Page<OrderDetailReportResultVO> getOrderDetailPage(Page page, QueryOrderDTO dto);
+
     OrderReportResultVO getSaleStatis(QueryOrderDTO dto);
 
     void exportSalesList(HttpServletResponse response, QueryOrderDTO dto);
+
+    public void exportOrderDetail(HttpServletResponse response, QueryOrderDTO queryOrderDTO);
 }
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 a4bd585..a53178a 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
@@ -5,24 +5,13 @@
 import com.mzl.flower.base.BaseController;
 import com.mzl.flower.base.R;
 import com.mzl.flower.base.ReturnDataDTO;
-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;
+import com.mzl.flower.dto.response.report.OrderDetailReportResultVO;
 import com.mzl.flower.dto.response.report.OrderReportResultVO;
-import com.mzl.flower.entity.coupon.CouponRecordDO;
-import com.mzl.flower.entity.coupon.CouponTemplateDO;
-import com.mzl.flower.enums.CouponStatusEnum;
-import com.mzl.flower.service.coupon.CouponRecordService;
-import com.mzl.flower.service.coupon.CouponTemplateService2;
 import com.mzl.flower.service.report.OrderReportService;
 import com.mzl.flower.utils.ConverterUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
-import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.ResponseEntity;
 import org.springframework.validation.annotation.Validated;
@@ -67,4 +56,16 @@
         orderReportService.exportSalesList(response, dto);
     }
 
+    @GetMapping("/detail/page")
+    @ApiOperation(value = "查询-分页", notes = "查询-分页")
+    public ResponseEntity<ReturnDataDTO<Page<OrderDetailReportResultVO>>> detail(Page page, QueryOrderDTO dto) {
+        return returnData(R.SUCCESS.getCode(), orderReportService.getOrderDetailPage(page, dto));
+    }
+
+    @GetMapping("/detail/export")
+    @ApiOperation(value = "订单结算明细导出")
+    public void exportOrderDetail(HttpServletResponse response, QueryOrderDTO queryOrderDTO) {
+        orderReportService.exportOrderDetail(response, queryOrderDTO);
+    }
+
 }
\ No newline at end of file
diff --git a/src/main/resources/mapper/payment/OrderItemMapper.xml b/src/main/resources/mapper/payment/OrderItemMapper.xml
index 251abbb..de1bc89 100644
--- a/src/main/resources/mapper/payment/OrderItemMapper.xml
+++ b/src/main/resources/mapper/payment/OrderItemMapper.xml
@@ -29,7 +29,21 @@
             where oic.order_item_id = oi.id
             and oic.type = 'reduce'
             and oic.audit_status = 'AGREED'
-        ) reduceAmount
+        ) reduceAmountSELECT oi.*, s.name stationName, si.contact_tel supplierTel, si.contact_name supplierContact
+                             , (select oic.num from t_order_item_check oic where oic.order_item_id = oi.id and oic.type = 'replace') replaceNum
+                             , (select oic.num from t_order_item_check oic where oic.order_item_id = oi.id and oic.type = 'reduce') reduceNum
+                             , (select oic.num from t_order_item_check oic where oic.order_item_id = oi.id and oic.type = 'lack') lackNum
+                             , (select oic.audit_status from t_order_item_check oic where oic.order_item_id = oi.id and oic.type = 'replace') replaceStatus
+                             , (select oic.audit_status from t_order_item_check oic where oic.order_item_id = oi.id and oic.type = 'reduce') reduceStatus
+                             , (select oic.audit_status from t_order_item_check oic where oic.order_item_id = oi.id and oic.type = 'lack') lackStatus
+                             , (select count(1) from t_order_item_check oic where oic.order_item_id = oi.id and oic.audit_status is null) unProcessCount
+                             , ois.lack_fee_supplier, ois.replace_fee, ois.check_fee
+        FROM t_order_item oi
+                 left join t_station s on s.id = oi.station_id
+                 left join t_supplier_info si on si.id = oi.supplier_id
+                 left join t_order_item_settlement ois on ois.order_item_id = oi.id
+        WHERE oi.deleted = 0
+          and oi.order_id = #{orderId}
         , (select oic.deduct_amount from t_order_item_check oic
             where oic.order_item_id = oi.id
             and oic.type = 'lack'
@@ -42,21 +56,7 @@
     </select>
 
     <select id="getPlatformOrderItems" resultType="com.mzl.flower.dto.response.payment.OrderItemPlatformListDTO">
-        SELECT oi.*, s.name stationName, si.contact_tel supplierTel, si.contact_name supplierContact
-        , (select oic.num from t_order_item_check oic where oic.order_item_id = oi.id and oic.type = 'replace') replaceNum
-        , (select oic.num from t_order_item_check oic where oic.order_item_id = oi.id and oic.type = 'reduce') reduceNum
-        , (select oic.num from t_order_item_check oic where oic.order_item_id = oi.id and oic.type = 'lack') lackNum
-        , (select oic.audit_status from t_order_item_check oic where oic.order_item_id = oi.id and oic.type = 'replace') replaceStatus
-        , (select oic.audit_status from t_order_item_check oic where oic.order_item_id = oi.id and oic.type = 'reduce') reduceStatus
-        , (select oic.audit_status from t_order_item_check oic where oic.order_item_id = oi.id and oic.type = 'lack') lackStatus
-        , (select count(1) from t_order_item_check oic where oic.order_item_id = oi.id and oic.audit_status is null) unProcessCount
-        , ois.lack_fee_supplier, ois.replace_fee, ois.check_fee
-        FROM t_order_item oi
-        left join t_station s on s.id = oi.station_id
-        left join t_supplier_info si on si.id = oi.supplier_id
-        left join t_order_item_settlement ois on ois.order_item_id = oi.id
-        WHERE oi.deleted = 0
-        and oi.order_id = #{orderId}
+
     </select>
 
     <select id="getOrderItems" resultType="com.mzl.flower.dto.response.payment.OrderItemListDTO">
diff --git a/src/main/resources/mapper/report/OrderReportMapper.xml b/src/main/resources/mapper/report/OrderReportMapper.xml
index dfe6619..d4171f4 100644
--- a/src/main/resources/mapper/report/OrderReportMapper.xml
+++ b/src/main/resources/mapper/report/OrderReportMapper.xml
@@ -49,4 +49,34 @@
         ) t
 
     </select>
+
+    <select id="getOrderDetailReport" resultType="com.mzl.flower.dto.response.report.OrderDetailReportResultVO">
+        select
+        o.order_no,
+        o.customer,
+        CONCAT( o.customer_province, ' ', o.customer_city, ' ', o.customer_region, ' ', o.customer_address ) AS address,
+        o.partner_name,
+        o.create_time as orderDate,
+        o.payment_time,
+        o.status_backend as settleStatus,
+        vor.order_num-vor.order_lack_num as real_sale_num,
+        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 &gt; #{dto.startDate}
+        </if>
+        <if test="dto.endDate != null">
+            and o.payment_time &lt;= #{dto.endDate}
+        </if>
+        <if test="dto.partnerId != null">
+            and o.create_by in (
+            select user_id from t_customer_info where partner_id=#{dto.partnerId}
+            )
+        </if>
+    </select>
+
 </mapper>
\ No newline at end of file

--
Gitblit v1.9.3