From 6c80cecea3e83ea93575dd3dc2299ed2b6c85d5e Mon Sep 17 00:00:00 2001
From: cloudroam <cloudroam>
Date: 星期五, 11 十月 2024 08:35:35 +0800
Subject: [PATCH] add:花农结算报表
---
src/main/java/com/mzl/flower/web/v2/report/OrderReportController.java | 24 ++++
src/main/java/com/mzl/flower/mapper/report/OrderReportMapper.java | 7 +
src/main/java/com/mzl/flower/dto/response/report/OrderSupplierReportResultVO.java | 47 +++++++
src/main/java/com/mzl/flower/service/report/OrderReportService.java | 8 +
src/main/resources/mapper/report/OrderReportMapper.xml | 118 +++++++++++++++++++
src/main/java/com/mzl/flower/dto/response/report/SupplierReportCalendarBO.java | 20 +++
src/main/java/com/mzl/flower/dto/request/report/QuerySupplierDTO.java | 28 ++++
src/main/java/com/mzl/flower/service/impl/report/OrderReportServiceImpl.java | 76 ++++++++++++
8 files changed, 324 insertions(+), 4 deletions(-)
diff --git a/src/main/java/com/mzl/flower/dto/request/report/QuerySupplierDTO.java b/src/main/java/com/mzl/flower/dto/request/report/QuerySupplierDTO.java
new file mode 100644
index 0000000..3eff5ac
--- /dev/null
+++ b/src/main/java/com/mzl/flower/dto/request/report/QuerySupplierDTO.java
@@ -0,0 +1,28 @@
+package com.mzl.flower.dto.request.report;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import javax.validation.constraints.NotNull;
+import java.time.LocalDate;
+
+@Data
+public class QuerySupplierDTO {
+ @ApiModelProperty(value = "供应商id")
+ private Long supplierId;
+
+ @ApiModelProperty(value = "下单开始日期")
+ @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+ @DateTimeFormat(pattern = "yyyy-MM-dd")
+ @NotNull(message = "下单日期不能为空")
+ private LocalDate startDate;
+
+ @ApiModelProperty(value = "下单结束日期")
+ @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+ @DateTimeFormat(pattern = "yyyy-MM-dd")
+ @NotNull(message = "下单日期不能为空")
+ private LocalDate endDate;
+
+}
diff --git a/src/main/java/com/mzl/flower/dto/response/report/OrderSupplierReportResultVO.java b/src/main/java/com/mzl/flower/dto/response/report/OrderSupplierReportResultVO.java
new file mode 100644
index 0000000..baf5129
--- /dev/null
+++ b/src/main/java/com/mzl/flower/dto/response/report/OrderSupplierReportResultVO.java
@@ -0,0 +1,47 @@
+package com.mzl.flower.dto.response.report;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.mzl.flower.base.AbstractTransDTO;
+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 OrderSupplierReportResultVO extends AbstractTransDTO {
+
+ @ApiModelProperty("日期")
+ @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+ @DateTimeFormat(pattern = "yyyy-MM-dd")
+ private LocalDateTime orderDate;
+
+ @ApiModelProperty("供应商ID")
+ private String supplierId;
+
+ @ApiModelProperty("供应商名称")
+ private String supplierName;
+
+ @ApiModelProperty("花农底价")
+ private BigDecimal orderSupplierPriceAmount;
+
+ @ApiModelProperty("降级扣款")
+ private BigDecimal orderCheckFee;
+
+ @ApiModelProperty("缺货扣款(缺货+补货)")
+ private BigDecimal orderLackFeeSupplier;
+
+ @ApiModelProperty("售后扣花农款")
+ private BigDecimal salesFeeSupplier;
+
+ @ApiModelProperty("实际销售扎数")
+ private Integer realSaleNum;
+
+ @ApiModelProperty("结算费用")
+ private BigDecimal profitFeeAmount;
+
+ @ApiModelProperty("订单状态")
+ private String settleStatus;
+
+}
diff --git a/src/main/java/com/mzl/flower/dto/response/report/SupplierReportCalendarBO.java b/src/main/java/com/mzl/flower/dto/response/report/SupplierReportCalendarBO.java
new file mode 100644
index 0000000..b618424
--- /dev/null
+++ b/src/main/java/com/mzl/flower/dto/response/report/SupplierReportCalendarBO.java
@@ -0,0 +1,20 @@
+package com.mzl.flower.dto.response.report;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDate;
+
+@Data
+public class SupplierReportCalendarBO {
+
+ @ApiModelProperty("下单的开始时间")
+ private LocalDate startDate;
+
+ @ApiModelProperty("下单的结束时间")
+ private LocalDate endDate;
+
+ @ApiModelProperty(value = "供应商id")
+ private Long supplierId;
+
+}
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 c4b039a..10868a8 100644
--- a/src/main/java/com/mzl/flower/mapper/report/OrderReportMapper.java
+++ b/src/main/java/com/mzl/flower/mapper/report/OrderReportMapper.java
@@ -1,6 +1,7 @@
package com.mzl.flower.mapper.report;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.mzl.flower.dto.response.report.*;
import com.mzl.flower.dto.response.report.OrderDetailReportResultVO;
import com.mzl.flower.dto.response.report.OrderPartnerReportResultVO;
import com.mzl.flower.dto.response.report.OrderReportCalendarBO;
@@ -17,4 +18,10 @@
OrderPartnerReportResultVO getPartnerOrderDateReport(@Param("dto") OrderReportCalendarBO calendarBO);
OrderPartnerReportResultVO getPartnerOrderDateReportStatis(@Param("dto") OrderReportCalendarBO bo);
+
+ List<OrderSupplierReportResultVO> getOrderSupplierPageReport(@Param("dto") SupplierReportCalendarBO calendarBO, Page page);
+
+ List<OrderSupplierReportResultVO> getOrderSupplierReport(@Param("dto") SupplierReportCalendarBO calendarBO);
+
+ OrderSupplierReportResultVO getOrderSupplierCountReport(@Param("dto") SupplierReportCalendarBO 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 a915f65..d71bd92 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
@@ -3,10 +3,8 @@
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.OrderPartnerReportResultVO;
-import com.mzl.flower.dto.response.report.OrderReportCalendarBO;
-import com.mzl.flower.dto.response.report.OrderReportResultVO;
+import com.mzl.flower.dto.request.report.QuerySupplierDTO;
+import com.mzl.flower.dto.response.report.*;
import com.mzl.flower.mapper.report.OrderReportMapper;
import com.mzl.flower.service.BaseService;
import com.mzl.flower.service.calendar.CalendarService;
@@ -281,6 +279,76 @@
}
}
+ @Override
+ public Page<OrderSupplierReportResultVO> getOrderSupplierPage(Page page, QuerySupplierDTO dto) {
+ SupplierReportCalendarBO supplierReportCalendarBO = new SupplierReportCalendarBO();
+ if (StringUtils.isEmpty(dto.getStartDate()) || StringUtils.isEmpty(dto.getEndDate())) {
+ throw new ValidationException("日期不能为空");
+ }
+ supplierReportCalendarBO.setSupplierId(dto.getSupplierId());
+ supplierReportCalendarBO.setStartDate(dto.getStartDate());
+ supplierReportCalendarBO.setEndDate(dto.getEndDate());
+ List<OrderSupplierReportResultVO> list = orderReportMapper.getOrderSupplierPageReport(supplierReportCalendarBO, page);
+ page.setRecords(list);
+ return page;
+ }
+
+ @Override
+ public OrderSupplierReportResultVO getOrderSupplierClout(QuerySupplierDTO dto) {
+ SupplierReportCalendarBO supplierReportCalendarBO = new SupplierReportCalendarBO();
+ if (StringUtils.isEmpty(dto.getStartDate()) || StringUtils.isEmpty(dto.getEndDate())) {
+ throw new ValidationException("日期不能为空");
+ }
+ supplierReportCalendarBO.setSupplierId(dto.getSupplierId());
+ supplierReportCalendarBO.setStartDate(dto.getStartDate());
+ supplierReportCalendarBO.setEndDate(dto.getEndDate());
+ OrderSupplierReportResultVO orderSupplierCountReport = orderReportMapper.getOrderSupplierCountReport(supplierReportCalendarBO);
+ return orderSupplierCountReport;
+ }
+
+
+ @Override
+ public void exportSupplierList(HttpServletResponse response, QuerySupplierDTO dto) {
+ SupplierReportCalendarBO supplierReportCalendarBO = new SupplierReportCalendarBO();
+ if (StringUtils.isEmpty(dto.getStartDate()) || StringUtils.isEmpty(dto.getEndDate())) {
+ throw new ValidationException("日期不能为空");
+ }
+ supplierReportCalendarBO.setSupplierId(dto.getSupplierId());
+ supplierReportCalendarBO.setStartDate(dto.getStartDate());
+ supplierReportCalendarBO.setEndDate(dto.getEndDate());
+ List<OrderSupplierReportResultVO> list = orderReportMapper.getOrderSupplierReport(supplierReportCalendarBO);
+
+ String[] rowsName = new String[]{"序号","日期", "供应商ID", "供应商","花农底价"
+ , "降级扣款", "缺货扣款(缺货+补货)","售后扣花农款","售后扣合伙人款","实际销售扎数","结算费用","订单状态"};
+ List<Object[]> dataList = new ArrayList<>();
+ int sn = 1;
+ for (OrderSupplierReportResultVO o : list) {
+ Object[] objs = new Object[rowsName.length];
+ int a = 0;
+ objs[a++] = sn; // 序号
+ objs[a++] = format(o.getOrderDate(), "yyyy-MM-dd"); // 日期
+ objs[a++] = o.getSupplierId(); // 供应商ID
+ objs[a++] = o.getSupplierName(); // 供应商
+ objs[a++] = o.getOrderSupplierPriceAmount(); // 花农底价
+ objs[a++] = o.getOrderCheckFee(); //降级扣款
+ objs[a++] = o.getOrderLackFeeSupplier();//缺货扣款
+ objs[a++] = o.getSalesFeeSupplier(); // 售后扣花农款
+ 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/report/OrderReportService.java b/src/main/java/com/mzl/flower/service/report/OrderReportService.java
index 06065d5..c30c944 100644
--- a/src/main/java/com/mzl/flower/service/report/OrderReportService.java
+++ b/src/main/java/com/mzl/flower/service/report/OrderReportService.java
@@ -2,9 +2,11 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.mzl.flower.dto.request.report.QueryOrderDTO;
+import com.mzl.flower.dto.request.report.QuerySupplierDTO;
import com.mzl.flower.dto.response.report.OrderDetailReportResultVO;
import com.mzl.flower.dto.response.report.OrderPartnerReportResultVO;
import com.mzl.flower.dto.response.report.OrderReportResultVO;
+import com.mzl.flower.dto.response.report.OrderSupplierReportResultVO;
import javax.servlet.http.HttpServletResponse;
@@ -37,4 +39,10 @@
OrderPartnerReportResultVO getPartnerSaleStatis(QueryOrderDTO dto);
void exportPartnerSalesList(HttpServletResponse response, QueryOrderDTO dto);
+
+ Page<OrderSupplierReportResultVO> getOrderSupplierPage(Page page, QuerySupplierDTO dto);
+
+ OrderSupplierReportResultVO getOrderSupplierClout(QuerySupplierDTO dto);
+
+ void exportSupplierList(HttpServletResponse response, QuerySupplierDTO 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 741d754..7c8cfd9 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
@@ -6,8 +6,10 @@
import com.mzl.flower.base.R;
import com.mzl.flower.base.ReturnDataDTO;
import com.mzl.flower.dto.request.report.QueryOrderDTO;
+import com.mzl.flower.dto.request.report.QuerySupplierDTO;
import com.mzl.flower.dto.response.report.OrderDetailReportResultVO;
import com.mzl.flower.dto.response.report.OrderReportResultVO;
+import com.mzl.flower.dto.response.report.OrderSupplierReportResultVO;
import com.mzl.flower.service.report.OrderReportService;
import com.mzl.flower.utils.ConverterUtil;
import io.swagger.annotations.Api;
@@ -90,4 +92,26 @@
orderReportService.exportPartnerSalesList(response, dto);
}
+ /**
+ * 花农结算报表
+ */
+ @GetMapping("/supplier/page")
+ @ApiOperation(value = "花农结算报表-分页", notes = "花农结算报表-分页")
+ public ResponseEntity<ReturnDataDTO<Page<OrderSupplierReportResultVO>>> supplier(Page page, QuerySupplierDTO dto) {
+ return returnData(R.SUCCESS.getCode(), orderReportService.getOrderSupplierPage(page, dto));
+ }
+
+ @GetMapping("/supplier/count")
+ @ApiOperation(value = "花农结算报表-统计", notes = "花农结算报表-统计")
+ public ResponseEntity<ReturnDataDTO<Page<OrderSupplierReportResultVO>>> supplierCount(QuerySupplierDTO dto) {
+ return returnData(R.SUCCESS.getCode(), orderReportService.getOrderSupplierClout(dto));
+ }
+
+ @GetMapping({"/supplier/export"})
+ @ApiOperation(value = "花农结算报表导出")
+ public void supplierExports(HttpServletResponse response, @Validated QuerySupplierDTO dto) {
+ orderReportService.exportSupplierList(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
index 47c7696..6925cc6 100644
--- a/src/main/resources/mapper/report/OrderReportMapper.xml
+++ b/src/main/resources/mapper/report/OrderReportMapper.xml
@@ -336,4 +336,122 @@
on t2.order_id =t3.order_id
</sql>
+
+ <sql id="baseSupplierSql">
+ SELECT
+ t2.*,
+ IFNULL( t3.sales_fee_supplier, 0 ) AS sales_fee_supplier
+ FROM
+ (
+ SELECT
+ t1.order_item_id,
+ t1.supplier_id,
+ t1.dateinfo,
+ t1.order_id,
+ sum( t1.supplier_price_amount ) AS order_supplier_price_amount,
+ sum( t1.check_fee ) AS order_check_fee,
+ sum( t1.replace_fee ) AS order_replace_fee,
+ sum( t1.lack_fee_supplier ) AS order_lack_fee_supplier,
+ sum( t1.num ) AS order_num,
+ sum( t1.lack_num ) AS order_lack_num
+ FROM
+ (
+ SELECT
+ oi.id AS order_item_id,
+ o.id order_id,
+ oi.supplier_id supplier_id,
+ CASE
+ WHEN HOUR ( o.payment_time ) >= 17 THEN
+ DATE_FORMAT( DATE_ADD( o.payment_time, INTERVAL 1 DAY ), '%Y-%m-%d' ) ELSE DATE_FORMAT( o.payment_time, '%Y-%m-%d' )
+ END AS dateinfo,
+ IFNULL( oi.num, 0 ) AS num,
+ IFNULL( oi.total, 0 ) AS total,
+ IFNULL( oi.supplier_price, 0 ) * IFNULL( oi.num, 0 ) AS supplier_price_amount,
+ IFNULL( ois.check_fee, 0 ) AS check_fee,
+ IFNULL( ois.replace_fee, 0 ) AS replace_fee,
+ IFNULL( ois.lack_fee_supplier, 0 ) AS lack_fee_supplier,
+ IFNULL( (select oic.num from t_order_item_check oic where oic.order_item_id = oi.id and oic.type = 'lack'),0) as lack_num
+ FROM
+ t_order o
+ LEFT JOIN t_order_item oi ON oi.order_id = o.id
+ 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 o.payment_time is not null
+ <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.supplierId != null">
+ and oi.supplierId <= #{dto.supplierId}
+ </if>
+ ) t1
+ GROUP BY
+ t1.order_item_id
+ ) t2
+ LEFT JOIN ( SELECT ois.order_item_id, IFNULL( sum( ois.sales_fee_supplier ), 0 ) AS sales_fee_supplier FROM t_order_item_settlement ois GROUP BY order_item_id ) t3 ON t2.order_item_id = t3.order_item_id
+ </sql>
+ <select id="getOrderSupplierPageReport" resultType="com.mzl.flower.dto.response.report.OrderSupplierReportResultVO">
+ select
+ dateinfo,
+ supplier_id,
+ supplierName,
+ sum(order_supplier_price_amount) order_supplier_price_amount,
+ sum(order_check_fee) order_check_fee,
+ sum(order_replace_fee) + sum(order_lack_fee_supplier) order_lack_fee_supplier,
+ sum(order_num)-sum(order_lack_num) as real_sale_num,
+ sum(sales_fee_supplier) sales_fee_supplier,
+ sum(order_supplier_price_amount) - sum(order_check_fee) - sum(order_replace_fee) - sum(order_lack_fee_supplier) - sum(sales_fee_supplier) profitFeeAmount
+ from(
+ SELECT
+ oi.id,vor.*,p.name as supplierName
+ FROM t_order_item oi
+ left join (<include refid="baseSupplierSql"></include>) vor
+ on oi.id =vor.order_item_id
+ left join t_supplier_info p
+ on vor.supplier_id=p.id
+ left join t_order o
+ on vor.order_id= o.id
+ and o.status_backend not in ('PENDING','CANCEL','REFUND')
+ ) s group by dateinfo,supplier_id
+ </select>
+
+ <select id="getOrderSupplierCountReport" resultType="com.mzl.flower.dto.response.report.OrderSupplierReportResultVO">
+ Select
+ sum(order_supplier_price_amount) order_supplier_price_amount,
+ sum(order_check_fee) order_check_fee,
+ sum(order_lack_fee_supplier) order_lack_fee_supplier,
+ sum(real_sale_num) real_sale_num,
+ sum(sales_fee_supplier) sales_fee_supplier,
+ sum(profitFeeAmount) profitFeeAmount
+ from(
+ select
+ dateinfo,
+ supplier_id,
+ supplierName,
+ sum(order_supplier_price_amount) order_supplier_price_amount,
+ sum(order_check_fee) order_check_fee,
+ sum(order_replace_fee) + sum(order_lack_fee_supplier) order_lack_fee_supplier,
+ sum(order_num)-sum(order_lack_num) as real_sale_num,
+ sum(sales_fee_supplier) sales_fee_supplier,
+ sum(order_supplier_price_amount) - sum(order_check_fee) - sum(order_replace_fee) - sum(order_lack_fee_supplier)
+ - sum(sales_fee_supplier) profitFeeAmount
+ from(
+ SELECT
+ oi.id,vor.*,p.name as supplierName
+ FROM t_order_item oi
+ left join (<include refid="baseSupplierSql"></include>) vor
+ on oi.id =vor.order_item_id
+ left join t_supplier_info p
+ on vor.supplier_id=p.id
+ left join t_order o
+ on vor.order_id= o.id
+ and o.status_backend not in ('PENDING','CANCEL','REFUND')
+ )
+ ) s
+ </select>
</mapper>
\ No newline at end of file
--
Gitblit v1.9.3