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 > #{dto.startDate}
+ </if>
+ <if test="dto.endDate != null">
+ and o.payment_time <= #{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