From bf2bffc884f00fd2ed2f16667ab6b91328012b8a Mon Sep 17 00:00:00 2001
From: 陶杰 <1378534974@qq.com>
Date: 星期二, 01 十月 2024 11:37:34 +0800
Subject: [PATCH] 1.订单商品评论 2.订单报表sql优化

---
 src/main/java/com/mzl/flower/web/v2/comment/FlowerCommentController.java          |  127 ++++++
 src/main/java/com/mzl/flower/mapper/comment/FlowerCommentMapper.java              |   16 
 src/main/java/com/mzl/flower/service/payment/OrderService.java                    |   40 +
 src/main/java/com/mzl/flower/dto/request/comment/CreateFlowerCommentDTO.java      |   51 ++
 src/main/resources/mapper/comment/FlowerCommentMapperCustom.xml                   |   78 ++++
 src/main/java/com/mzl/flower/dto/request/comment/UpdateFlowerCommentDTO.java      |   46 ++
 src/main/resources/mapper/comment/FlowerCommentMapper.xml                         |   23 +
 src/main/java/com/mzl/flower/dto/request/comment/QueryFlowerCommentDTO.java       |   45 ++
 src/main/java/com/mzl/flower/dto/request/comment/CreateFlowerCommentBatchDTO.java |   23 +
 src/main/java/com/mzl/flower/service/comment/FlowerCommentService.java            |   56 ++
 src/main/java/com/mzl/flower/mapper/comment/FlowerCommentMapperCustom.java        |   28 +
 src/main/java/com/mzl/flower/service/impl/comment/FlowerCommentServiceImpl.java   |  197 ++++++++++
 src/main/resources/mapper/report/OrderReportMapper.xml                            |  168 ++++++++
 src/main/java/com/mzl/flower/dto/request/report/QueryOrderDetailDTO.java          |   36 +
 src/main/java/com/mzl/flower/dto/response/payment/OrderItemListDTO.java           |   29 +
 src/main/java/com/mzl/flower/dto/request/report/QueryOrderDTO.java                |    2 
 src/main/java/com/mzl/flower/entity/FlowerCommentDO.java                          |   84 ++++
 src/main/java/com/mzl/flower/dto/response/comment/FlowerCommentStatisVO.java      |   16 
 src/main/java/com/mzl/flower/dto/response/comment/FlowerCommentVO.java            |   28 +
 19 files changed, 1,088 insertions(+), 5 deletions(-)

diff --git a/src/main/java/com/mzl/flower/dto/request/comment/CreateFlowerCommentBatchDTO.java b/src/main/java/com/mzl/flower/dto/request/comment/CreateFlowerCommentBatchDTO.java
new file mode 100644
index 0000000..0333715
--- /dev/null
+++ b/src/main/java/com/mzl/flower/dto/request/comment/CreateFlowerCommentBatchDTO.java
@@ -0,0 +1,23 @@
+package com.mzl.flower.dto.request.comment;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+@Data
+public class CreateFlowerCommentBatchDTO {
+
+
+    @ApiModelProperty("订单ID")
+    @NotEmpty(message = "订单ID不能为空")
+    private String orderId;
+
+    @NotNull(message = "评论内容不能为空")
+    List<CreateFlowerCommentDTO> list;
+
+}
diff --git a/src/main/java/com/mzl/flower/dto/request/comment/CreateFlowerCommentDTO.java b/src/main/java/com/mzl/flower/dto/request/comment/CreateFlowerCommentDTO.java
new file mode 100644
index 0000000..c0db97c
--- /dev/null
+++ b/src/main/java/com/mzl/flower/dto/request/comment/CreateFlowerCommentDTO.java
@@ -0,0 +1,51 @@
+package com.mzl.flower.dto.request.comment;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+
+@Data
+public class CreateFlowerCommentDTO {
+
+
+    /**
+     * 订单商品id
+     */
+    @ApiModelProperty(value = "订单商品id")
+    @NotEmpty(message = "订单id不能为空")
+    private String orderItemId;
+
+    /**
+     * 等级
+     */
+    @ApiModelProperty(value = "等级")
+    @NotNull(message = "等级不能为空")
+    @Min(value = 1,message = "最小值为5")
+    @Max(value = 5,message = "最大值为5")
+    private Integer commentGrade;
+
+    /**
+     * 内容
+     */
+    @ApiModelProperty(value = "内容")
+    @NotEmpty(message = "内容不能为空")
+    private String comment;
+
+    /**
+     * 内容图片
+     */
+    @ApiModelProperty(value = "内容图片")
+//    @NotEmpty(message = "内容图片不能为空")
+    private String commentImages;
+
+    /**
+     * 匿名标志 0-非匿名 1-匿名
+     */
+    @ApiModelProperty(value = "匿名标志")
+    private Integer anonymityFalg;
+
+}
diff --git a/src/main/java/com/mzl/flower/dto/request/comment/QueryFlowerCommentDTO.java b/src/main/java/com/mzl/flower/dto/request/comment/QueryFlowerCommentDTO.java
new file mode 100644
index 0000000..39a8f47
--- /dev/null
+++ b/src/main/java/com/mzl/flower/dto/request/comment/QueryFlowerCommentDTO.java
@@ -0,0 +1,45 @@
+package com.mzl.flower.dto.request.comment;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+
+@Data
+public class QueryFlowerCommentDTO {
+
+    @ApiModelProperty(value = "id")
+    private String id;
+
+    /**
+     * 订单id
+     */
+    @ApiModelProperty(value = "订单id")
+    private String orderId;
+
+    /**
+     * 订单商品id
+     */
+    @ApiModelProperty(value = "订单商品id")
+    private String orderItemId;
+
+    /**
+     * 商户id
+     */
+    @ApiModelProperty(value = "商户ID")
+    private Long customerId;
+
+    /**
+     * 供应商Id
+     */
+    @ApiModelProperty(value = "供应商Id")
+    private Long supplierId;
+
+    /**
+     * 商品id
+     */
+    @ApiModelProperty(value = "商品id")
+    private Long flowerId;
+
+}
diff --git a/src/main/java/com/mzl/flower/dto/request/comment/UpdateFlowerCommentDTO.java b/src/main/java/com/mzl/flower/dto/request/comment/UpdateFlowerCommentDTO.java
new file mode 100644
index 0000000..e0922d7
--- /dev/null
+++ b/src/main/java/com/mzl/flower/dto/request/comment/UpdateFlowerCommentDTO.java
@@ -0,0 +1,46 @@
+package com.mzl.flower.dto.request.comment;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+
+@Data
+public class UpdateFlowerCommentDTO {
+
+    @ApiModelProperty(value = "id")
+    private String id;
+
+    /**
+     * 等级
+     */
+    @ApiModelProperty(value = "等级")
+    @NotNull(message = "等级不能为空")
+    @Min(value = 1,message = "最小值为5")
+    @Max(value = 5,message = "最大值为5")
+    private Integer commentGrade;
+
+    /**
+     * 内容
+     */
+    @ApiModelProperty(value = "内容")
+    @NotEmpty(message = "内容不能为空")
+    private String comment;
+
+    /**
+     * 内容图片
+     */
+    @ApiModelProperty(value = "内容图片")
+//    @NotEmpty(message = "内容图片不能为空")
+    private String commentImages;
+
+    /**
+     * 匿名标志 0-非匿名 1-匿名
+     */
+    @ApiModelProperty(value = "匿名标志")
+    private Integer anonymityFalg;
+
+}
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 e55da06..a6fb34e 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
@@ -30,7 +30,7 @@
     @ApiModelProperty(value = "下单日期")
     @JsonFormat(pattern="yyyy-MM-dd" ,timezone="GMT+8")
     @DateTimeFormat(pattern="yyyy-MM-dd")
-    @NotNull(message = "下单日期不能为空")
+//    @NotNull(message = "下单日期不能为空")
     private LocalDate calDate;
 
 }
diff --git a/src/main/java/com/mzl/flower/dto/request/report/QueryOrderDetailDTO.java b/src/main/java/com/mzl/flower/dto/request/report/QueryOrderDetailDTO.java
new file mode 100644
index 0000000..f5352d5
--- /dev/null
+++ b/src/main/java/com/mzl/flower/dto/request/report/QueryOrderDetailDTO.java
@@ -0,0 +1,36 @@
+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;
+import java.time.LocalDateTime;
+
+@Data
+public class QueryOrderDetailDTO {
+
+    @ApiModelProperty(value = "开始时间")
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss" ,timezone="GMT+8")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @NotNull(message = "开始时间不能为空")
+    private LocalDateTime startDate;
+
+    @ApiModelProperty(value = "结束时间")
+    @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss" ,timezone="GMT+8")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @NotNull(message = "结束时间不能为空")
+    private LocalDateTime endDate;
+
+    @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/comment/FlowerCommentStatisVO.java b/src/main/java/com/mzl/flower/dto/response/comment/FlowerCommentStatisVO.java
new file mode 100644
index 0000000..a72091b
--- /dev/null
+++ b/src/main/java/com/mzl/flower/dto/response/comment/FlowerCommentStatisVO.java
@@ -0,0 +1,16 @@
+package com.mzl.flower.dto.response.comment;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+@Data
+public class FlowerCommentStatisVO {
+
+    @ApiModelProperty(value = "平均分")
+    private BigDecimal avg;
+
+    @ApiModelProperty(value = "评论总数")
+    private Integer commentAmount;
+}
diff --git a/src/main/java/com/mzl/flower/dto/response/comment/FlowerCommentVO.java b/src/main/java/com/mzl/flower/dto/response/comment/FlowerCommentVO.java
new file mode 100644
index 0000000..47d7adb
--- /dev/null
+++ b/src/main/java/com/mzl/flower/dto/response/comment/FlowerCommentVO.java
@@ -0,0 +1,28 @@
+package com.mzl.flower.dto.response.comment;
+
+import com.mzl.flower.entity.FlowerCommentDO;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class FlowerCommentVO extends FlowerCommentDO {
+
+    @ApiModelProperty(value = "商品名称")
+    private String flowerName;
+    @ApiModelProperty(value = "商品规格")
+    private String flowerUnit;
+    @ApiModelProperty(value = "商品颜色")
+    private String flowerColor;
+    @ApiModelProperty(value = "商品等级")
+    private String flowerLevel;
+    @ApiModelProperty(value = "商品类别")
+    private String flowerCategory;
+    @ApiModelProperty(value = "商户名称")
+    private String customerName;
+    @ApiModelProperty(value = "商户头像")
+    private String customerCover;
+
+
+
+
+}
diff --git a/src/main/java/com/mzl/flower/dto/response/payment/OrderItemListDTO.java b/src/main/java/com/mzl/flower/dto/response/payment/OrderItemListDTO.java
index cef30f4..13b8d5f 100644
--- a/src/main/java/com/mzl/flower/dto/response/payment/OrderItemListDTO.java
+++ b/src/main/java/com/mzl/flower/dto/response/payment/OrderItemListDTO.java
@@ -5,6 +5,10 @@
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
 import java.math.BigDecimal;
 
 @Data
@@ -81,4 +85,29 @@
     @ApiModelProperty(value = "供应商ID")
     private Long supplierId;//商品id
 
+    /**
+     * 等级
+     */
+    @ApiModelProperty(value = "等级")
+    private Integer commentGrade;
+
+    /**
+     * 内容
+     */
+    @ApiModelProperty(value = "内容")
+    private String comment;
+
+    /**
+     * 内容图片
+     */
+    @ApiModelProperty(value = "内容图片")
+    private String commentImages;
+
+    /**
+     * 匿名标志 0-非匿名 1-匿名
+     */
+    @ApiModelProperty(value = "匿名标志")
+    private Integer anonymityFalg;
+
+
 }
diff --git a/src/main/java/com/mzl/flower/entity/FlowerCommentDO.java b/src/main/java/com/mzl/flower/entity/FlowerCommentDO.java
new file mode 100644
index 0000000..e14b0cb
--- /dev/null
+++ b/src/main/java/com/mzl/flower/entity/FlowerCommentDO.java
@@ -0,0 +1,84 @@
+package com.mzl.flower.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.mzl.flower.base.BaseEntity;
+import java.sql.Blob;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * 商品评论表
+ *
+ * @author @TaoJie
+ * @since 2024-09-29
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@Accessors(chain = true)
+@TableName("t_flower_comment")
+public class FlowerCommentDO extends BaseEntity {
+
+
+    /**
+     * 订单id
+     */
+    private String orderId;
+
+    /**
+     * 订单商品id
+     */
+    private String orderItemId;
+
+    /**
+     * 商户id
+     */
+    private Long customerId;
+
+    /**
+     * 商户用户ID
+     */
+    private String customerUserId;
+
+    /**
+     * 供应商Id
+     */
+    private Long supplierId;
+
+    /**
+     * 供应商用户Id
+     */
+    private String supplierUserId;
+
+    /**
+     * 商品id
+     */
+    private Long flowerId;
+
+    /**
+     * 商品图片
+     */
+    private String flowerCover;
+
+    /**
+     * 等级
+     */
+    private Integer commentGrade;
+
+    /**
+     * 内容
+     */
+    private String comment;
+
+    /**
+     * 内容图片
+     */
+    private String commentImages;
+
+    /**
+     * 匿名标志 0-非匿名 1-匿名
+     */
+    private Integer anonymityFalg;
+
+
+}
diff --git a/src/main/java/com/mzl/flower/mapper/comment/FlowerCommentMapper.java b/src/main/java/com/mzl/flower/mapper/comment/FlowerCommentMapper.java
new file mode 100644
index 0000000..9f42a49
--- /dev/null
+++ b/src/main/java/com/mzl/flower/mapper/comment/FlowerCommentMapper.java
@@ -0,0 +1,16 @@
+package com.mzl.flower.mapper.comment;
+
+import com.mzl.flower.entity.FlowerCommentDO;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 商品评论表 Mapper 接口
+ * </p>
+ *
+ * @author @TaoJie
+ * @since 2024-09-29
+ */
+public interface FlowerCommentMapper extends BaseMapper<FlowerCommentDO> {
+
+}
diff --git a/src/main/java/com/mzl/flower/mapper/comment/FlowerCommentMapperCustom.java b/src/main/java/com/mzl/flower/mapper/comment/FlowerCommentMapperCustom.java
new file mode 100644
index 0000000..d77771c
--- /dev/null
+++ b/src/main/java/com/mzl/flower/mapper/comment/FlowerCommentMapperCustom.java
@@ -0,0 +1,28 @@
+package com.mzl.flower.mapper.comment;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.mzl.flower.dto.request.comment.QueryFlowerCommentDTO;
+import com.mzl.flower.dto.response.comment.FlowerCommentVO;
+import com.mzl.flower.entity.FlowerCommentDO;
+import org.apache.ibatis.annotations.Param;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * <p>
+ * 商品评论表 Mapper 接口
+ * </p>
+ *
+ * @author @TaoJie
+ * @since 2024-09-29
+ */
+public interface FlowerCommentMapperCustom extends BaseMapper<FlowerCommentDO> {
+
+    List<FlowerCommentVO> getPage(Page page,@Param("param") QueryFlowerCommentDTO dto);
+
+    List<FlowerCommentVO> getList(@Param("param") QueryFlowerCommentDTO dto);
+
+    BigDecimal getSupplierAvgScore(@Param("supplierId") Long supplierId);
+}
diff --git a/src/main/java/com/mzl/flower/service/comment/FlowerCommentService.java b/src/main/java/com/mzl/flower/service/comment/FlowerCommentService.java
new file mode 100644
index 0000000..a159e54
--- /dev/null
+++ b/src/main/java/com/mzl/flower/service/comment/FlowerCommentService.java
@@ -0,0 +1,56 @@
+package com.mzl.flower.service.comment;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.mzl.flower.dto.request.comment.CreateFlowerCommentBatchDTO;
+import com.mzl.flower.dto.request.comment.CreateFlowerCommentDTO;
+import com.mzl.flower.dto.request.comment.QueryFlowerCommentDTO;
+import com.mzl.flower.dto.request.comment.UpdateFlowerCommentDTO;
+import com.mzl.flower.dto.response.comment.FlowerCommentStatisVO;
+import com.mzl.flower.dto.response.comment.FlowerCommentVO;
+import com.mzl.flower.entity.FlowerCommentDO;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * <p>
+ * 商品评论表 服务类
+ * </p>
+ *
+ * @author @TaoJie
+ * @since 2024-09-29
+ */
+public interface FlowerCommentService extends IService<FlowerCommentDO> {
+
+    boolean createFlowerComment(CreateFlowerCommentDTO dto);
+
+    boolean updateFlowerComment(UpdateFlowerCommentDTO dto);
+
+    boolean deleteFlowerComment(String id);
+
+    FlowerCommentVO getDetailById(String id);
+
+    Page<FlowerCommentVO> getPage(Page page, QueryFlowerCommentDTO dto);
+
+    List<FlowerCommentVO> getList(QueryFlowerCommentDTO dto);
+
+    FlowerCommentVO getByOrderItemId(String orderItemId);
+
+
+    /**
+     * 获取供应商的评论平均分
+     * @param supplierId 供应商
+     * @return
+     */
+    BigDecimal getSupplierAvgScore(Long supplierId);
+
+    /**
+     * 订单下所有商品的评论
+     * @param dto
+     * @return
+     */
+    boolean createFlowerCommentBatch(CreateFlowerCommentBatchDTO dto);
+
+    FlowerCommentStatisVO getSupplierStatis(Long id);
+}
diff --git a/src/main/java/com/mzl/flower/service/impl/comment/FlowerCommentServiceImpl.java b/src/main/java/com/mzl/flower/service/impl/comment/FlowerCommentServiceImpl.java
new file mode 100644
index 0000000..f0982c1
--- /dev/null
+++ b/src/main/java/com/mzl/flower/service/impl/comment/FlowerCommentServiceImpl.java
@@ -0,0 +1,197 @@
+package com.mzl.flower.service.impl.comment;
+
+import cn.hutool.core.util.IdUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.mzl.flower.config.exception.ValidationException;
+import com.mzl.flower.config.security.SecurityUtils;
+import com.mzl.flower.dto.request.comment.CreateFlowerCommentBatchDTO;
+import com.mzl.flower.dto.request.comment.CreateFlowerCommentDTO;
+import com.mzl.flower.dto.request.comment.QueryFlowerCommentDTO;
+import com.mzl.flower.dto.request.comment.UpdateFlowerCommentDTO;
+import com.mzl.flower.dto.response.comment.FlowerCommentStatisVO;
+import com.mzl.flower.dto.response.comment.FlowerCommentVO;
+import com.mzl.flower.entity.FlowerCommentDO;
+import com.mzl.flower.entity.customer.Customer;
+import com.mzl.flower.entity.payment.Order;
+import com.mzl.flower.entity.payment.OrderItem;
+import com.mzl.flower.entity.supplier.Supplier;
+import com.mzl.flower.mapper.comment.FlowerCommentMapper;
+import com.mzl.flower.mapper.comment.FlowerCommentMapperCustom;
+import com.mzl.flower.mapper.customer.CustomerMapper;
+import com.mzl.flower.mapper.payment.OrderItemMapper;
+import com.mzl.flower.mapper.payment.OrderMapper;
+import com.mzl.flower.mapper.supplier.SupplierMapper;
+import com.mzl.flower.service.comment.FlowerCommentService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.apache.commons.collections4.CollectionUtils;
+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.transaction.annotation.Transactional;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+ * <p>
+ * 商品评论表 服务实现类
+ * </p>
+ *
+ * @author @TaoJie
+ * @since 2024-09-29
+ */
+@Service
+public class FlowerCommentServiceImpl extends ServiceImpl<FlowerCommentMapper, FlowerCommentDO> implements FlowerCommentService {
+
+    @Autowired
+    private FlowerCommentMapperCustom flowerCommentMapperCustom;
+
+    @Autowired
+    private OrderItemMapper orderItemMapper;
+
+    @Autowired
+    private SupplierMapper supplierMapper;
+
+    @Autowired
+    private CustomerMapper customerMapper;
+
+    @Autowired
+    private OrderMapper orderMapper;
+
+
+    @Transactional
+    @Override
+    public boolean createFlowerComment(CreateFlowerCommentDTO dto) {
+        final FlowerCommentVO byOrderItemId = getByOrderItemId(dto.getOrderItemId());
+        if(null!=byOrderItemId){
+            throw new ValidationException("当前商品已经评论过!");
+        }
+
+        FlowerCommentDO flowerCommentDO=new FlowerCommentDO();
+        BeanUtils.copyProperties(dto,flowerCommentDO);
+        flowerCommentDO.setId(IdUtil.simpleUUID());
+        flowerCommentDO.create(SecurityUtils.getUserId());
+
+        final OrderItem orderItem = orderItemMapper.selectById(dto.getOrderItemId());
+        if(null==orderItem){
+            throw new ValidationException("当前订单项目不存在!");
+        }
+        flowerCommentDO.setOrderId(orderItem.getOrderId());
+        flowerCommentDO.setCustomerUserId(orderItem.getCreateBy());
+        flowerCommentDO.setSupplierId(orderItem.getSupplierId());
+        flowerCommentDO.setFlowerId(orderItem.getFlowerId());
+        flowerCommentDO.setFlowerCover(orderItem.getFlowerCover());
+
+        // 补充商户信息
+        Customer customer = customerMapper.selectOne(new QueryWrapper<Customer>()
+                .eq("user_id", orderItem.getCreateBy()));
+        if(null!=customer && null!=customer.getId()){
+            flowerCommentDO.setCustomerId(customer.getId());
+        }
+
+
+        // 补充供应商信息
+        Supplier supplier = supplierMapper.selectById(orderItem.getSupplierId());
+        if(null!=supplier && StringUtils.isNotBlank(supplier.getUserId())){
+            flowerCommentDO.setSupplierUserId(supplier.getUserId());
+        }
+        return baseMapper.insert(flowerCommentDO)>0;
+    }
+
+    @Transactional
+    @Override
+    public boolean updateFlowerComment(UpdateFlowerCommentDTO dto) {
+        FlowerCommentDO flowerCommentDO=baseMapper.selectById(dto.getId());
+        BeanUtils.copyProperties(dto,flowerCommentDO);
+        flowerCommentDO.update(SecurityUtils.getUserId());
+        
+        return baseMapper.updateById(flowerCommentDO)>0;
+    }
+
+    @Override
+    public boolean deleteFlowerComment(String id) {
+        return baseMapper.deleteById(id)>0;
+    }
+
+    @Override
+    public FlowerCommentVO getDetailById(String id) {
+        QueryFlowerCommentDTO dto=new QueryFlowerCommentDTO();
+        dto.setId(id);
+        final List<FlowerCommentVO> list = getList(dto);
+        if(CollectionUtils.isNotEmpty(list)){
+            return list.get(0);
+        }
+        return null;
+    }
+
+    @Override
+    public Page<FlowerCommentVO> getPage(Page page, QueryFlowerCommentDTO dto) {
+        List<FlowerCommentVO> list=flowerCommentMapperCustom.getPage(page,dto);
+        return page.setRecords(list);
+    }
+
+    @Override
+    public List<FlowerCommentVO> getList(QueryFlowerCommentDTO dto) {
+        return flowerCommentMapperCustom.getList(dto);
+    }
+
+    @Override
+    public FlowerCommentVO getByOrderItemId(String orderItemId) {
+        QueryFlowerCommentDTO dto=new QueryFlowerCommentDTO();
+        dto.setOrderItemId(orderItemId);
+        final List<FlowerCommentVO> list = getList(dto);
+        if(CollectionUtils.isNotEmpty(list)){
+            return list.get(0);
+        }
+        return null;
+    }
+
+    @Override
+    public BigDecimal getSupplierAvgScore(Long supplierId) {
+        return flowerCommentMapperCustom.getSupplierAvgScore(supplierId);
+    }
+
+    @Transactional
+    @Override
+    public boolean createFlowerCommentBatch(CreateFlowerCommentBatchDTO dto) {
+        if(CollectionUtils.isNotEmpty(dto.getList())){
+            dto.getList().forEach(item->{
+                // 保存评论信息
+                final FlowerCommentVO byOrderItemId = getByOrderItemId(item.getOrderItemId());
+                if(null!=byOrderItemId){
+                    // 更新
+                    UpdateFlowerCommentDTO updateFlowerCommentDTO=new UpdateFlowerCommentDTO();
+                    BeanUtils.copyProperties(item,updateFlowerCommentDTO);
+                    updateFlowerCommentDTO.setId(byOrderItemId.getId());
+                    updateFlowerComment(updateFlowerCommentDTO);
+                }else{
+                    createFlowerComment(item);
+                }
+
+            });
+            // 设置订单的评论状态为评论的下个阶段
+            Order order=orderMapper.selectById(dto.getOrderId());
+
+            return true;
+        }
+        return false;
+    }
+
+    @Override
+    public FlowerCommentStatisVO getSupplierStatis(Long supplierId) {
+        FlowerCommentStatisVO vo=new FlowerCommentStatisVO();
+
+        // 获取平均分
+        final BigDecimal supplierAvgScore = flowerCommentMapperCustom.getSupplierAvgScore(supplierId);
+        vo.setAvg(supplierAvgScore);
+
+        //当前商家评论总数
+        final Integer amount = baseMapper.selectCount(new QueryWrapper<FlowerCommentDO>().lambda().eq(FlowerCommentDO::getSupplierId, supplierId));
+        vo.setCommentAmount(amount);
+        return vo;
+    }
+
+
+}
diff --git a/src/main/java/com/mzl/flower/service/payment/OrderService.java b/src/main/java/com/mzl/flower/service/payment/OrderService.java
index e1aebd0..47f3acb 100644
--- a/src/main/java/com/mzl/flower/service/payment/OrderService.java
+++ b/src/main/java/com/mzl/flower/service/payment/OrderService.java
@@ -12,8 +12,10 @@
 import com.mzl.flower.config.security.SecurityUtils;
 import com.mzl.flower.constant.Constants;
 import com.mzl.flower.dto.PriceDTO;
+import com.mzl.flower.dto.request.comment.QueryFlowerCommentDTO;
 import com.mzl.flower.dto.request.menber.MemberGrowthRecordDTO;
 import com.mzl.flower.dto.request.payment.*;
+import com.mzl.flower.dto.response.comment.FlowerCommentVO;
 import com.mzl.flower.dto.response.coupon.CouponRecordVO;
 import com.mzl.flower.dto.response.flower.FlowerCartListDTO;
 import com.mzl.flower.dto.response.flower.FlowerCartListWrapDTO;
@@ -43,6 +45,7 @@
 import com.mzl.flower.mapper.system.UserWechatMapper;
 import com.mzl.flower.mapper.warehouse.WarehouseLocationMapper;
 import com.mzl.flower.service.BaseService;
+import com.mzl.flower.service.comment.FlowerCommentService;
 import com.mzl.flower.service.coupon.CouponRecordService;
 import com.mzl.flower.service.flower.FlowerService;
 import com.mzl.flower.service.menber.MemberGrowthRecordService;
@@ -164,6 +167,9 @@
     @Autowired
     private CouponRecordService couponRecordService;
 
+    @Autowired
+    private FlowerCommentService flowerCommentService;
+
 
     public void changeFlower2Cart(CartSaveDTO dto) {
         String userId = SecurityUtils.getUserId();
@@ -196,7 +202,7 @@
                 Integer completeNumToday=getFlowerCompleteNumToday(userId,c.getFlowerId());
                 Integer tmp=completeNumToday+c.getNum();
                 if(null!=tmp && null!=flowerDetail.getLimited()
-                      &&  tmp.compareTo(flowerDetail.getLimited())>0){
+                        &&  tmp.compareTo(flowerDetail.getLimited())>0){
                     throw new ValidationException("当天的订单的花数量加上购物车的数量不能超过限售数量!");
                 }
 
@@ -208,7 +214,7 @@
 
                 // 限购  1.首先查看购物车中的数量是否已经超过限售数量
                 if(null!=c.getNum() && null!=flowerDetail.getLimited()
-                      && c.getNum().compareTo(flowerDetail.getLimited())>0){
+                        && c.getNum().compareTo(flowerDetail.getLimited())>0){
                     throw new ValidationException("数量不能超过限售数量!");
                 }
 
@@ -216,7 +222,7 @@
                 Integer completeNumToday=getFlowerCompleteNumToday(userId,c.getFlowerId());
                 Integer tmp=completeNumToday+c.getNum();
                 if(null!=tmp && null!=flowerDetail.getLimited()
-                       && tmp.compareTo(flowerDetail.getLimited())>0){
+                        && tmp.compareTo(flowerDetail.getLimited())>0){
                     throw new ValidationException("当天的订单的花数量加上购物车的数量不能超过限售数量!");
                 }
 
@@ -1135,6 +1141,7 @@
                 new QueryWrapper<OrderItem>().eq("order_id", id));
 
         Map<Long, String> stationMap = prepareStationMap();
+        Map<String, FlowerCommentVO> commentMap=prepareCommentMap(id);
 
         List<OrderItemListDTO> result = new ArrayList<>();
         for (OrderItem oi : ls) {
@@ -1143,10 +1150,35 @@
 
             dto.setStationName(stationMap.get(oi.getStationId()));
 
+            // 评论
+            final FlowerCommentVO flowerCommentVO = commentMap.get(oi.getId());
+            copyCommentInfo(dto,flowerCommentVO);
+
             result.add(dto);
         }
 
         return result;
+    }
+
+    private Map<String, FlowerCommentVO> prepareCommentMap(String orderId) {
+        QueryFlowerCommentDTO queryFlowerCommentDTO = new QueryFlowerCommentDTO();
+        queryFlowerCommentDTO.setOrderId(orderId);
+        final List<FlowerCommentVO> list = flowerCommentService.getList(queryFlowerCommentDTO);
+        if (list == null || list.isEmpty()) {
+            return Collections.emptyMap();
+        }
+        // 将 List 转换为 Map,其中 key 为 FlowerCommentVO 的 id
+        return list.stream().collect(Collectors.toMap(FlowerCommentVO::getOrderItemId, item -> item));
+    }
+
+
+    private void copyCommentInfo(OrderItemListDTO dto,FlowerCommentVO flowerCommentVO){
+        if(null != dto && null!=flowerCommentVO){
+            dto.setCommentGrade(flowerCommentVO.getCommentGrade());
+            dto.setComment(flowerCommentVO.getComment());
+            dto.setCommentImages(flowerCommentVO.getCommentImages());
+            dto.setAnonymityFalg(flowerCommentVO.getAnonymityFalg());
+        }
     }
 
     public List<Order> autoReceive() {
@@ -1678,7 +1710,7 @@
                     // 新增
                     cartMapper.updateById(cart);
                 }else{
-                   // 更新
+                    // 更新
                     cartMapper.insert(cart);
                 }
             }
diff --git a/src/main/java/com/mzl/flower/web/v2/comment/FlowerCommentController.java b/src/main/java/com/mzl/flower/web/v2/comment/FlowerCommentController.java
new file mode 100644
index 0000000..4574f21
--- /dev/null
+++ b/src/main/java/com/mzl/flower/web/v2/comment/FlowerCommentController.java
@@ -0,0 +1,127 @@
+package com.mzl.flower.web.v2.comment;
+
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+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.comment.CreateFlowerCommentBatchDTO;
+import com.mzl.flower.dto.request.comment.CreateFlowerCommentDTO;
+import com.mzl.flower.dto.request.comment.QueryFlowerCommentDTO;
+import com.mzl.flower.dto.request.comment.UpdateFlowerCommentDTO;
+import com.mzl.flower.dto.response.comment.FlowerCommentVO;
+import com.mzl.flower.dto.response.coupon.CouponTemplatePointVO;
+import com.mzl.flower.dto.response.coupon.CouponTemplateVO;
+import com.mzl.flower.service.comment.FlowerCommentService;
+import com.mzl.flower.utils.ConverterUtil;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.ResponseEntity;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import com.mzl.flower.entity.FlowerCommentDO;
+
+
+/**
+ * 商品评论表前端控制器
+ *
+* @author @TaoJie
+* @since 2024-09-29
+*/
+@RestController
+@RequestMapping("/api/v2/flower-comment")
+@Api(value = "商品评论", tags = "商品评论")
+@Validated
+public class FlowerCommentController extends BaseController {
+
+    @Autowired
+    private FlowerCommentService flowerCommentService;
+
+    @PostMapping("")
+    @ApiOperation(value = "新增", notes = "新增")
+    public ResponseEntity<ReturnDataDTO> create(@Validated @RequestBody CreateFlowerCommentDTO dto) {
+
+        // 信息验证
+        valid(dto);
+        flowerCommentService.createFlowerComment(dto);
+        return returnData(R.SUCCESS.getCode(), null);
+
+
+    }
+
+    @PostMapping("/batch")
+    @ApiOperation(value = "批量新增", notes = "批量新增")
+    public ResponseEntity<ReturnDataDTO> createBatch(@Validated @RequestBody CreateFlowerCommentBatchDTO dto) {
+
+        //
+        flowerCommentService.createFlowerCommentBatch(dto);
+        return returnData(R.SUCCESS.getCode(), null);
+
+
+    }
+
+    @PutMapping("/{id}")
+    @ApiOperation(value = "修改", notes = "修改")
+    public ResponseEntity<ReturnDataDTO> update(@PathVariable String id,@Validated @RequestBody UpdateFlowerCommentDTO dto) {
+
+        // 手动设置id值
+        dto.setId(id);
+        flowerCommentService.updateFlowerComment(dto);
+        return returnData(R.SUCCESS.getCode(), null);
+    }
+
+    @DeleteMapping("/{id}")
+    @ApiOperation(value = "删除", notes = "删除")
+    public ResponseEntity<ReturnDataDTO> delete(@PathVariable String id) {
+
+        FlowerCommentDO flowerCommentDO = flowerCommentService.getById(id);
+        if (null == flowerCommentDO) {
+            throw new ValidationException("评论不存在");
+        }
+        flowerCommentService.deleteFlowerComment(id);
+        return returnData(R.SUCCESS.getCode(), null);
+    }
+
+    @GetMapping("/{id}")
+    @ApiOperation(value = "详情", notes = "详情")
+    public ResponseEntity<ReturnDataDTO> get(@PathVariable String id) {
+        FlowerCommentVO flowerCommentVO = flowerCommentService.getDetailById(id);
+        return returnData(R.SUCCESS.getCode(), ConverterUtil.transObject(flowerCommentVO, FlowerCommentVO.class));
+    }
+
+    @GetMapping("/page")
+    @ApiOperation(value = "查询-分页", notes = "查询-分页")
+    public ResponseEntity<ReturnDataDTO<Page<CouponTemplatePointVO>>> page(Page page, QueryFlowerCommentDTO dto) {
+        // 设置只查询活动优惠券的
+
+        Page<FlowerCommentVO> resultPage = flowerCommentService.getPage(page, dto);
+        return returnData(R.SUCCESS.getCode(), ConverterUtil.transPage(resultPage, FlowerCommentVO.class));
+    }
+
+    @GetMapping("/list")
+    @ApiOperation(value = "查询-全部", notes = "查询-全部")
+    public ResponseEntity<ReturnDataDTO<Page<CouponTemplateVO>>> list(QueryFlowerCommentDTO dto) {
+        // 设置只查询活动优惠券的
+
+        return returnData(R.SUCCESS.getCode(), ConverterUtil.transList(flowerCommentService.getList(dto), FlowerCommentVO.class));
+    }
+
+    @GetMapping("/avg/{id}")
+    @ApiOperation(value = "平均分", notes = "平均分")
+    public ResponseEntity<ReturnDataDTO> getCommentAvg(@PathVariable Long id) {
+        return returnData(R.SUCCESS.getCode(), flowerCommentService.getSupplierAvgScore(id));
+    }
+
+    @GetMapping("/statis/{id}")
+    @ApiOperation(value = "统计", notes = "统计")
+    public ResponseEntity<ReturnDataDTO> getStatis(@PathVariable Long id) {
+        return returnData(R.SUCCESS.getCode(), flowerCommentService.getSupplierStatis(id));
+    }
+
+    private void valid(CreateFlowerCommentDTO dto){
+
+    }
+
+}
diff --git a/src/main/resources/mapper/comment/FlowerCommentMapper.xml b/src/main/resources/mapper/comment/FlowerCommentMapper.xml
new file mode 100644
index 0000000..18ffb07
--- /dev/null
+++ b/src/main/resources/mapper/comment/FlowerCommentMapper.xml
@@ -0,0 +1,23 @@
+<?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.comment.FlowerCommentMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.mzl.flower.entity.FlowerCommentDO">
+        <id column="id" property="id" />
+        <result column="deleted" property="deleted" />
+        <result column="create_by" property="createBy" />
+        <result column="create_time" property="createTime" />
+        <result column="update_by" property="updateBy" />
+        <result column="update_time" property="updateTime" />
+        <result column="order_id" property="orderId" />
+        <result column="customer_id" property="customerId" />
+        <result column="flower_id" property="flowerId" />
+        <result column="flower_cover" property="flowerCover" />
+        <result column="comment_grade" property="commentGrade" />
+        <result column="comment" property="comment" />
+        <result column="comment_images" property="commentImages" />
+        <result column="anonymity_falg" property="anonymityFalg" />
+    </resultMap>
+
+</mapper>
diff --git a/src/main/resources/mapper/comment/FlowerCommentMapperCustom.xml b/src/main/resources/mapper/comment/FlowerCommentMapperCustom.xml
new file mode 100644
index 0000000..1b53dd8
--- /dev/null
+++ b/src/main/resources/mapper/comment/FlowerCommentMapperCustom.xml
@@ -0,0 +1,78 @@
+<?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.comment.FlowerCommentMapperCustom">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.mzl.flower.entity.FlowerCommentDO">
+        <id column="id" property="id" />
+        <result column="deleted" property="deleted" />
+        <result column="create_by" property="createBy" />
+        <result column="create_time" property="createTime" />
+        <result column="update_by" property="updateBy" />
+        <result column="update_time" property="updateTime" />
+        <result column="order_id" property="orderId" />
+        <result column="order_item_id" property="orderItemId" />
+
+        <result column="customer_id" property="customerId" />
+        <result column="customer_user_id" property="customerUserId" />
+        <result column="supplier_id" property="supplierId" />
+        <result column="supplier_user_id" property="supplierUserId" />
+
+        <result column="flower_id" property="flowerId" />
+        <result column="flower_cover" property="flowerCover" />
+        <result column="comment_grade" property="commentGrade" />
+        <result column="comment" property="comment" />
+        <result column="comment_images" property="commentImages" />
+        <result column="anonymity_falg" property="anonymityFalg" />
+    </resultMap>
+    <select id="getPage" resultType="com.mzl.flower.dto.response.comment.FlowerCommentVO">
+        <include refid="baseSql" />
+    </select>
+    <select id="getList" resultType="com.mzl.flower.dto.response.comment.FlowerCommentVO">
+        <include refid="baseSql" />
+    </select>
+    <select id="getSupplierAvgScore" resultType="java.math.BigDecimal">
+        SELECT
+            COALESCE(ROUND(SUM(c.comment_grade) / NULLIF(COUNT(1), 0), 1), 0) AS average_grade
+        FROM t_flower_comment c
+        WHERE c.deleted = false
+          AND c.supplier_id = #{supplierId}
+    </select>
+
+    <sql id="baseSql">
+        select c.*,
+            oi.flower_name,
+            oi.flower_unit,
+            oi.flower_color,
+            oi.flower_level,
+            oi.flower_category,
+            ci.name as customer_name,
+            ci.cover as customer_cover
+        from t_flower_comment c
+        left join t_order_item oi
+        on c.order_item_id=oi.id
+        left join t_customer_info ci
+        on c.customer_id=ci.id
+        where c.deleted=false
+        <if test="param.id != null and param.id != ''">
+            and c.id = #{param.id}
+        </if>
+        <if test="param.orderId != null and param.orderId != ''">
+            and c.order_id = #{param.orderId}
+        </if>
+        <if test="param.orderItemId != null and param.orderItemId != ''">
+            and c.order_item_id = #{param.orderItemId}
+        </if>
+        <if test="param.customerId != null ">
+            and c.customer_id = #{param.customerId}
+        </if>
+        <if test="param.supplierId != null">
+            and c.supplier_id = #{param.supplierId}
+        </if>
+        <if test="param.flowerId != null">
+            and c.flower_id = #{param.flowerId}
+        </if>
+
+    </sql>
+
+</mapper>
diff --git a/src/main/resources/mapper/report/OrderReportMapper.xml b/src/main/resources/mapper/report/OrderReportMapper.xml
index d4171f4..ea1e697 100644
--- a/src/main/resources/mapper/report/OrderReportMapper.xml
+++ b/src/main/resources/mapper/report/OrderReportMapper.xml
@@ -4,6 +4,57 @@
 
     <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 (
+            <include refid="baseSql"></include>
+        ) 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>
+        ) t
+
+    </select>
+
+
+    <select id="getOrderDateReport2" 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,
@@ -62,6 +113,37 @@
         vor.order_num-vor.order_lack_num as real_sale_num,
         vor.*
         from t_order o
+        left join (
+            <include refid="baseSql"></include>
+        ) 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>
+
+    <select id="getOrderDetailReport2" 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
@@ -79,4 +161,90 @@
         </if>
     </select>
 
+
+    <sql id="baseSql">
+        select t2.*,
+               IFNULL(t3.fee_supplier,0) as order_fee_supplier,
+               IFNULL(t3.fee_partner,0) as order_fee_partner,
+               IFNULL(t3.fee_platform,0) as order_fee_platform,
+               IFNULL(t3.fee_platform_pack,0) as order_fee_platform_pack,
+               IFNULL(t3.fee_platform_check,0) as order_fee_platform_check,
+               IFNULL(t3.fee_platform_transport,0) as order_fee_platform_transport,
+               IFNULL(t3.total_fee,0) as order_total_fee,
+               IFNULL(t3.fee_packing_transport,0) as order_fee_packing_transport
+        from (
+                 select
+                     t1.order_id,sum(t1.num) as order_num , sum(t1.total) as order_total, sum(t1.supplier_price_amount) as order_supplier_price_amount, sum(t1.markup_one_amount) as order_markup_one_amount,sum(t1.markup_two_amount) as order_markup_two_amount, sum(t1.markup_partner_amount) as order_markup_partner_amount,sum(t1.price_amount) as order_price_amount,sum(t1.original_price_amount) as order_original_price_amount,sum(t1.price_discount_amount) as order_price_discount_amount,sum(t1.coupon_amount_total) as order_coupon_amount_total,sum(t1.check_fee) as order_check_fee,sum(t1.lack_fee_supplier) as order_lack_fee_supplier,sum(t1.replace_fee) as order_replace_fee,
+                     sum(replace_num) as order_replace_num,sum(reduce_num) as order_reduce_num,sum(lack_num) as order_lack_num
+                 from (
+                   SELECT
+                       oi.order_id,
+                       oi.id,
+                       IFNULL(oi.num,0) as num,
+                       IFNULL(oi.total,0) as total,
+                       IFNULL(oi.supplier_price,0) as supplier_price,
+                       IFNULL(oi.supplier_price,0) * IFNULL(oi.num,0) as supplier_price_amount,
+
+                       IFNULL(oi.markup_one,0) as markup_one,
+                       IFNULL(oi.markup_one,0)* IFNULL(oi.num,0) as markup_one_amount,
+
+                       IFNULL(oi.markup_two,0) as markup_two,
+                       IFNULL(oi.markup_two,0)* IFNULL(oi.num,0) as markup_two_amount,
+
+                       IFNULL(oi.markup_partner,0) as markup_partner,
+                       IFNULL(oi.markup_partner,0)* IFNULL(oi.num,0) as markup_partner_amount,
+                       IFNULL(oi.price,0) as price,
+                       IFNULL(oi.price,0)* IFNULL(oi.num,0) as price_amount,
+
+                       IFNULL(oi.original_price,0) as original_price,
+                       IFNULL(oi.original_price,0)*IFNULL(oi.num,0) as original_price_amount,
+
+                       IFNULL(oi.original_price,0)*IFNULL(oi.num,0) - IFNULL(oi.price,0)* IFNULL(oi.num,0) as price_discount_amount,
+
+
+                       IFNULL(oi.real_price,0) as real_price,
+                       IFNULL(oi.real_total,0) as real_total,
+
+                       IFNULL(oi.coupon_amount_total,0) as coupon_amount_total,
+
+                       IFNULL(ois.check_fee,0) as check_fee,
+                       IFNULL(ois.lack_fee_supplier,0) as lack_fee_supplier,
+                       IFNULL(ois.replace_fee,0) as replace_fee
+
+                      ,IFNULL( (select oic.num from t_order_item_check oic where oic.order_item_id = oi.id and oic.type = 'replace'),0) as replace_num
+                      ,IFNULL( (select oic.num from t_order_item_check oic where oic.order_item_id = oi.id and oic.type = 'reduce'),0) as reduce_num
+                      ,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
+                    <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>
+               )t1
+                group by order_id
+             ) t2
+                 left join (
+            select
+                ois.order_id,
+                IFNULL(sum(ois.fee_supplier),0) as fee_supplier,
+                IFNULL(sum(ois.fee_partner),0) as fee_partner,
+                IFNULL(sum(ois.fee_platform),0) as fee_platform,
+                IFNULL(sum(ois.fee_platform_pack),0) as fee_platform_pack,
+                IFNULL(sum(ois.fee_platform_check),0) as fee_platform_check,
+                IFNULL(sum(ois.fee_platform_transport),0) as fee_platform_transport,
+                IFNULL(sum(ois.total_fee),0) as total_fee,
+                IFNULL(sum(ois.fee_packing_transport),0) as fee_packing_transport
+            from t_order_item_sales ois
+            group by order_id
+        )t3
+        on t2.order_id =t3.order_id
+    </sql>
+
 </mapper>
\ No newline at end of file

--
Gitblit v1.9.3