From b977bf61c82b7dc39079974d7316b7a80cf520fa Mon Sep 17 00:00:00 2001
From: 陶杰 <1378534974@qq.com>
Date: 星期一, 02 九月 2024 09:36:28 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master-v2' into master-v2

---
 src/main/java/com/mzl/flower/mapper/payment/OrderMapper.java                          |    7 
 src/main/java/com/mzl/flower/service/payment/OrderService.java                        |  100 ++++++++++
 src/main/表设计-二期.xlsx                                                                  |    0 
 src/main/java/com/mzl/flower/dto/response/payment/OrderDTO.java                       |    4 
 src/main/java/com/mzl/flower/constant/Constants.java                                  |    3 
 src/main/java/com/mzl/flower/entity/payment/Order.java                                |   30 +++
 src/main/java/com/mzl/flower/mapper/partner/PartnerMapper.java                        |    2 
 src/main/表设计.xlsx                                                                     |    0 
 src/main/java/com/mzl/flower/mapper/point/CustomerPointDetailMapper.java              |   15 -
 src/main/java/com/mzl/flower/service/payment/DeliveryOrderService.java                |   14 +
 src/main/java/com/mzl/flower/service/menber/impl/MemberGrowthRecordServiceImpl.java   |    3 
 src/main/java/com/mzl/flower/entity/point/CustomerPointDetail.java                    |    8 
 src/main/java/com/mzl/flower/entity/payment/OrderPointGoods.java                      |   21 ++
 src/main/java/com/mzl/flower/dto/response/payment/DeliveryOrderItemSettlementDTO.java |    3 
 src/main/java/com/mzl/flower/dto/response/point/ExpiredPointDTO.java                  |   16 +
 src/main/java/com/mzl/flower/dto/response/payment/OrderPointGoodsListDTO.java         |   26 ++
 src/main/java/com/mzl/flower/entity/payment/OrderItem.java                            |   11 +
 src/main/java/com/mzl/flower/service/menber/impl/MemberServiceImpl.java               |   29 ++-
 src/main/resources/mapper/point/CustomerPointDetailMapper.xml                         |   20 ++
 src/main/resources/mapper/payment/DeliveryOrderItemMapper.xml                         |    5 
 src/main/java/com/mzl/flower/schedule/PointScheduleService.java                       |   90 ++++++++++
 src/main/java/com/mzl/flower/service/point/CustomerPointService.java                  |   21 +-
 src/main/java/com/mzl/flower/dto/request/payment/OrderCommitDTO.java                  |    6 
 src/main/java/com/mzl/flower/service/customer/CustomerService.java                    |   19 +
 src/main/resources/mapper/payment/OrderMapper.xml                                     |    7 
 src/main/resources/script/db-v2.sql                                                   |   22 ++
 src/main/java/com/mzl/flower/dto/response/payment/PreOrderDTO.java                    |   18 ++
 src/main/java/com/mzl/flower/mapper/payment/OrderPointGoodsMapper.java                |   14 +
 src/main/java/com/mzl/flower/utils/DateUtils.java                                     |   14 +
 29 files changed, 465 insertions(+), 63 deletions(-)

diff --git a/src/main/java/com/mzl/flower/constant/Constants.java b/src/main/java/com/mzl/flower/constant/Constants.java
index c25d452..eae0d70 100644
--- a/src/main/java/com/mzl/flower/constant/Constants.java
+++ b/src/main/java/com/mzl/flower/constant/Constants.java
@@ -483,7 +483,8 @@
         activity("活动获取"),
         giveaway("积分赠送"),
         deduction("积分扣减"),
-        exchange("积分兑换");
+        exchange("积分兑换"),
+        expired("积分过期");
 
         POINT_TYPE(String desc) {
             this.desc = desc;
diff --git a/src/main/java/com/mzl/flower/dto/request/payment/OrderCommitDTO.java b/src/main/java/com/mzl/flower/dto/request/payment/OrderCommitDTO.java
index 884f18f..c338f50 100644
--- a/src/main/java/com/mzl/flower/dto/request/payment/OrderCommitDTO.java
+++ b/src/main/java/com/mzl/flower/dto/request/payment/OrderCommitDTO.java
@@ -26,4 +26,10 @@
 
     @NotBlank(message = "微信code不能为空")
     private String wxcode;
+
+    @ApiModelProperty(value = "用户优惠券id")
+    private String couponRecordId;
+
+    @ApiModelProperty(value = "用户积分商品兑换券id列表")
+    private List<Long> goodsRecordIdList;
 }
diff --git a/src/main/java/com/mzl/flower/dto/response/payment/DeliveryOrderItemSettlementDTO.java b/src/main/java/com/mzl/flower/dto/response/payment/DeliveryOrderItemSettlementDTO.java
index 3e21102..e878c48 100644
--- a/src/main/java/com/mzl/flower/dto/response/payment/DeliveryOrderItemSettlementDTO.java
+++ b/src/main/java/com/mzl/flower/dto/response/payment/DeliveryOrderItemSettlementDTO.java
@@ -64,6 +64,9 @@
     @ApiModelProperty(value = "售后退款")
     private BigDecimal salesFee;
 
+    @ApiModelProperty(value = "售后数量")
+    private Integer salesNum;
+
     @ApiModelProperty(value = "服务费率")
     private Double serviceFeeRate;
 
diff --git a/src/main/java/com/mzl/flower/dto/response/payment/OrderDTO.java b/src/main/java/com/mzl/flower/dto/response/payment/OrderDTO.java
index 8f9210e..207a25d 100644
--- a/src/main/java/com/mzl/flower/dto/response/payment/OrderDTO.java
+++ b/src/main/java/com/mzl/flower/dto/response/payment/OrderDTO.java
@@ -9,6 +9,7 @@
 
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
+import java.util.List;
 
 @Data
 public class OrderDTO extends AbstractTransDTO {
@@ -135,4 +136,7 @@
 
     @ApiModelProperty(value = "支付单号")
     private String paymentTrId;
+
+    @ApiModelProperty(value = "积分商品列表")
+    private List<OrderPointGoodsListDTO> pointGoodsList;
 }
diff --git a/src/main/java/com/mzl/flower/dto/response/payment/OrderPointGoodsListDTO.java b/src/main/java/com/mzl/flower/dto/response/payment/OrderPointGoodsListDTO.java
new file mode 100644
index 0000000..51f9a7b
--- /dev/null
+++ b/src/main/java/com/mzl/flower/dto/response/payment/OrderPointGoodsListDTO.java
@@ -0,0 +1,26 @@
+package com.mzl.flower.dto.response.payment;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class OrderPointGoodsListDTO {
+    @ApiModelProperty(value = "积分商品ID")
+    private Long goodsId;
+
+    @ApiModelProperty(value = "商品名称")
+    private String name;
+
+    @ApiModelProperty(value = "商品描述")
+    private String description;
+
+    @ApiModelProperty(value = "商品封面图")
+    private String cover;
+
+    @ApiModelProperty(value = "商品图片")
+    private String pictures;
+
+    @ApiModelProperty(value = "兑换数量")
+    private Integer num;
+
+}
diff --git a/src/main/java/com/mzl/flower/dto/response/payment/PreOrderDTO.java b/src/main/java/com/mzl/flower/dto/response/payment/PreOrderDTO.java
index fde99f8..48ba6dc 100644
--- a/src/main/java/com/mzl/flower/dto/response/payment/PreOrderDTO.java
+++ b/src/main/java/com/mzl/flower/dto/response/payment/PreOrderDTO.java
@@ -19,7 +19,25 @@
     @ApiModelProperty(value = "商品总金额")
     private BigDecimal totalAmount;
 
+    @ApiModelProperty(value = "商品会员价总金额")
+    private BigDecimal totalMemberAmount;
+
     @ApiModelProperty(value = "打包费")
     private BigDecimal packing;
 
+    @ApiModelProperty(value = "会员等级id")
+    private Long memberId;
+
+    @ApiModelProperty(value = "会员等级名称")
+    private String memberName;
+
+    @ApiModelProperty(value = "折扣类型(discount_type)")
+    private String memberDiscountType;
+
+    @ApiModelProperty(value = "会员折扣")
+    private BigDecimal memberDiscountRatio;
+
+    @ApiModelProperty(value = "优惠金额(每扎)")
+    private BigDecimal memberDiscountAmount;
+
 }
diff --git a/src/main/java/com/mzl/flower/dto/response/point/ExpiredPointDTO.java b/src/main/java/com/mzl/flower/dto/response/point/ExpiredPointDTO.java
new file mode 100644
index 0000000..54a395b
--- /dev/null
+++ b/src/main/java/com/mzl/flower/dto/response/point/ExpiredPointDTO.java
@@ -0,0 +1,16 @@
+package com.mzl.flower.dto.response.point;
+
+
+import lombok.Data;
+
+@Data
+public class ExpiredPointDTO {
+
+    private String userId;
+
+    private Long customerId;
+
+    private Integer addPoint;
+
+    private Integer reducePoint;
+}
diff --git a/src/main/java/com/mzl/flower/entity/payment/Order.java b/src/main/java/com/mzl/flower/entity/payment/Order.java
index 7706db4..438c5f4 100644
--- a/src/main/java/com/mzl/flower/entity/payment/Order.java
+++ b/src/main/java/com/mzl/flower/entity/payment/Order.java
@@ -16,7 +16,7 @@
     private String orderNo;//单号
 
     @TableField("flower_amount")
-    private BigDecimal flowerAmount;//商品金额
+    private BigDecimal flowerAmount;//商品金额(会员价)
 
     @TableField("packing_fee")
     private BigDecimal packingFee;//打包费
@@ -134,4 +134,32 @@
 
     @TableField("wx_delivery_msg")
     private String wxDeliveryMsg;// 微信发货返回消息
+
+    @TableField("member_coupon_id")
+    private String memberCouponId;//用户优惠券id
+
+    @TableField("member_coupon_code")
+    private String memberCouponCode;//优惠券编码
+
+    @TableField("member_coupon_name")
+    private String memberCouponName;//优惠券名称
+
+    @TableField("member_coupon_amount")
+    private BigDecimal memberCouponAmount;//优惠券金额
+
+    @TableField("member_id")
+    private Long memberId;//会员等级id
+
+    @TableField("member_name")
+    private String memberName;//会员等级名称
+
+    @TableField("member_discount_type")
+    private String memberDiscountType;//折扣类型(discount_type)
+
+    @TableField("member_discount_ratio")
+    private BigDecimal memberDiscountRatio;//会员折扣
+
+    @TableField("member_discount_amount")
+    private BigDecimal memberDiscountAmount;//优惠金额(每扎)
+
 }
diff --git a/src/main/java/com/mzl/flower/entity/payment/OrderItem.java b/src/main/java/com/mzl/flower/entity/payment/OrderItem.java
index 5d1167b..84c559f 100644
--- a/src/main/java/com/mzl/flower/entity/payment/OrderItem.java
+++ b/src/main/java/com/mzl/flower/entity/payment/OrderItem.java
@@ -61,7 +61,7 @@
     private BigDecimal markupPartner;//合伙人加价
 
     @TableField("price")
-    private BigDecimal price;//商品售价
+    private BigDecimal price;//商品售价(会员价)
 
     @TableField("total")
     private BigDecimal total;//总金额
@@ -84,4 +84,13 @@
     @TableField("deduct_amount")
     private BigDecimal deductAmount;//扣款金额
 
+    @TableField("coupon_amount")
+    private BigDecimal couponAmount;//优惠券金额/扎
+
+    @TableField("original_price")
+    private BigDecimal originalPrice;//优惠前售价/扎
+
+    @TableField("real_price")
+    private BigDecimal realPrice;//真实成交价格/每扎
+
 }
diff --git a/src/main/java/com/mzl/flower/entity/payment/OrderPointGoods.java b/src/main/java/com/mzl/flower/entity/payment/OrderPointGoods.java
new file mode 100644
index 0000000..6c91533
--- /dev/null
+++ b/src/main/java/com/mzl/flower/entity/payment/OrderPointGoods.java
@@ -0,0 +1,21 @@
+package com.mzl.flower.entity.payment;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.mzl.flower.base.BaseEntity;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Data
+@TableName("t_order_point_goods")
+public class OrderPointGoods extends BaseEntity {
+
+    @TableField("order_id")
+    private String orderId;//订单id
+
+    @TableField("goods_record_id")
+    private Long goodsRecordId;//客户商品id
+
+}
diff --git a/src/main/java/com/mzl/flower/entity/point/CustomerPointDetail.java b/src/main/java/com/mzl/flower/entity/point/CustomerPointDetail.java
index 3bd0fae..e025402 100644
--- a/src/main/java/com/mzl/flower/entity/point/CustomerPointDetail.java
+++ b/src/main/java/com/mzl/flower/entity/point/CustomerPointDetail.java
@@ -37,14 +37,8 @@
     @ApiModelProperty("积分类型:增加(消费获取、活动获取、积分赠送),减少(积分扣减、积分兑换)")
     private String type;
 
-    @ApiModelProperty("积分(积分=使用积分+过期积分)")
+    @ApiModelProperty("积分变更数量")
     private Integer point;
-
-    @ApiModelProperty("使用积分")
-    private Integer usePoint;
-
-    @ApiModelProperty("过期积分")
-    private Integer expiredPoint;
 
     @ApiModelProperty("备注(可记录积分的来源或去向,如订单号、兑换内容、活动名称等)")
     private String remarks;
diff --git a/src/main/java/com/mzl/flower/mapper/partner/PartnerMapper.java b/src/main/java/com/mzl/flower/mapper/partner/PartnerMapper.java
index 992e750..951aa12 100644
--- a/src/main/java/com/mzl/flower/mapper/partner/PartnerMapper.java
+++ b/src/main/java/com/mzl/flower/mapper/partner/PartnerMapper.java
@@ -19,5 +19,5 @@
 
     PartnerDTO getCurrentPartner(@Param("userId")String userId);
 
-    Partner getByIdOrUserId(@Param("partnerUserId") String partnerUserId);
+    List<Partner> getByIdOrUserId(@Param("partnerUserId") String partnerUserId);
 }
diff --git a/src/main/java/com/mzl/flower/mapper/payment/OrderMapper.java b/src/main/java/com/mzl/flower/mapper/payment/OrderMapper.java
index 3e945c6..8068b0d 100644
--- a/src/main/java/com/mzl/flower/mapper/payment/OrderMapper.java
+++ b/src/main/java/com/mzl/flower/mapper/payment/OrderMapper.java
@@ -3,10 +3,7 @@
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.mzl.flower.dto.request.payment.OrderQueryDTO;
-import com.mzl.flower.dto.response.payment.OrderCheckListDTO;
-import com.mzl.flower.dto.response.payment.OrderListDTO;
-import com.mzl.flower.dto.response.payment.OrderStatusCountDTO;
-import com.mzl.flower.dto.response.payment.SupplierNumDTO;
+import com.mzl.flower.dto.response.payment.*;
 import com.mzl.flower.entity.payment.Order;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
@@ -37,4 +34,6 @@
             , @Param("endTime")LocalDateTime endTime);
 
     Order getUserLastOrder(@Param("userId") String userId);
+
+    List<OrderPointGoodsListDTO> getPointGoodsList(@Param("orderId") String orderId);
 }
diff --git a/src/main/java/com/mzl/flower/mapper/payment/OrderPointGoodsMapper.java b/src/main/java/com/mzl/flower/mapper/payment/OrderPointGoodsMapper.java
new file mode 100644
index 0000000..6cf35fe
--- /dev/null
+++ b/src/main/java/com/mzl/flower/mapper/payment/OrderPointGoodsMapper.java
@@ -0,0 +1,14 @@
+package com.mzl.flower.mapper.payment;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.mzl.flower.entity.payment.OrderPointGoods;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Repository
+public interface OrderPointGoodsMapper extends BaseMapper<OrderPointGoods> {
+
+}
diff --git a/src/main/java/com/mzl/flower/mapper/point/CustomerPointDetailMapper.java b/src/main/java/com/mzl/flower/mapper/point/CustomerPointDetailMapper.java
index fb896a7..6482846 100644
--- a/src/main/java/com/mzl/flower/mapper/point/CustomerPointDetailMapper.java
+++ b/src/main/java/com/mzl/flower/mapper/point/CustomerPointDetailMapper.java
@@ -3,28 +3,21 @@
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.mzl.flower.dto.request.point.CustomerPointDetailQueryDTO;
-import com.mzl.flower.dto.request.point.PointGoodQueryDTO;
 import com.mzl.flower.dto.response.point.CustomerPointDetailVO;
-import com.mzl.flower.dto.response.point.PointGoodVO;
+import com.mzl.flower.dto.response.point.ExpiredPointDTO;
 import com.mzl.flower.entity.point.CustomerPointDetail;
-import com.mzl.flower.entity.point.PointGood;
 import org.apache.ibatis.annotations.Param;
 import org.springframework.stereotype.Repository;
 
+import java.time.LocalDate;
 import java.util.List;
 
 
-/**
- * @author fanghaowei
- * @version version2.0
- * @className CustomerPointDetailMapper
- * @date 2024/8/29
- * @description CustomerPointDetailMapper
- */
-@SuppressWarnings("ALL")
+
 @Repository
 public interface CustomerPointDetailMapper extends BaseMapper<CustomerPointDetail> {
 
     List<CustomerPointDetailVO> queryPage(@Param("dto") CustomerPointDetailQueryDTO dto, Page page);
 
+    List<ExpiredPointDTO> tongjiExpiredPoint(@Param("lastYear") LocalDate lastYear);
 }
diff --git a/src/main/java/com/mzl/flower/schedule/PointScheduleService.java b/src/main/java/com/mzl/flower/schedule/PointScheduleService.java
new file mode 100644
index 0000000..ca05ac0
--- /dev/null
+++ b/src/main/java/com/mzl/flower/schedule/PointScheduleService.java
@@ -0,0 +1,90 @@
+package com.mzl.flower.schedule;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.mzl.flower.constant.Constants;
+import com.mzl.flower.dto.response.point.ExpiredPointDTO;
+import com.mzl.flower.entity.flower.FlowerCategory;
+import com.mzl.flower.entity.partner.Partner;
+import com.mzl.flower.entity.point.CustomerPoint;
+import com.mzl.flower.entity.point.CustomerPointDetail;
+import com.mzl.flower.mapper.point.CustomerPointDetailMapper;
+import com.mzl.flower.mapper.point.CustomerPointMapper;
+import com.mzl.flower.utils.DateUtils;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.time.DateFormatUtils;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.time.LocalDate;
+import java.time.temporal.ChronoUnit;
+import java.util.List;
+
+@Component
+@Slf4j
+public class PointScheduleService {
+
+
+    private final CustomerPointMapper customerPointMapper;
+
+    private final CustomerPointDetailMapper customerPointDetailMapper;
+
+    public PointScheduleService(CustomerPointMapper customerPointMapper, CustomerPointDetailMapper customerPointDetailMapper) {
+        this.customerPointMapper = customerPointMapper;
+        this.customerPointDetailMapper = customerPointDetailMapper;
+    }
+
+
+    /**
+     * 定时计算用户过期积分
+     */
+    @Scheduled(cron = "0 20 9 * * ?")
+    public void calculatingExpiredPoint() {
+        log.info("过期积分计算开始:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss"));
+        LocalDate now = LocalDate.now().minusDays(1);//前一天
+        LocalDate lastYear = now.minus(1, ChronoUnit.YEARS); // 日期减去一年
+        List<ExpiredPointDTO> pointDTOS = customerPointDetailMapper.tongjiExpiredPoint(lastYear);
+        if(pointDTOS != null && pointDTOS.size() > 0){
+            for (ExpiredPointDTO pointDTO : pointDTOS) {
+                if(pointDTO.getAddPoint().intValue()> pointDTO.getReducePoint().intValue()){ //积分增加大于减少
+                    Integer expiredPoint = pointDTO.getAddPoint().intValue() - pointDTO.getReducePoint().intValue();
+                    CustomerPointDetail customerPointDetail = new CustomerPointDetail();
+                    customerPointDetail.setUserId(pointDTO.getUserId());
+                    customerPointDetail.setCustomerId(pointDTO.getCustomerId());
+                    customerPointDetail.setChangeType(Constants.POINT_CHANGE_TYPE.reduce.name());
+                    customerPointDetail.setType(Constants.POINT_TYPE.expired.name());
+                    customerPointDetail.setPoint(expiredPoint);
+                    customerPointDetail.setRecordDate(now);
+                    customerPointDetail.create("sys");
+                    customerPointDetail.setRemarks(DateUtils.toString(now,"yyyy-MM-dd")+"过期积分结算");
+                    customerPointDetailMapper.insert(customerPointDetail);
+
+                    //更新用户积分记录
+                    CustomerPoint customerPoint = customerPointMapper.selectOne(new LambdaQueryWrapper<CustomerPoint>()
+                            .eq(CustomerPoint::getCustomerId, pointDTO.getCustomerId())
+                            .eq(CustomerPoint::getUserId, pointDTO.getUserId()));
+                    if(customerPoint == null ){
+                        customerPoint = new CustomerPoint();
+                        customerPoint.setCustomerId(pointDTO.getCustomerId());
+                        customerPoint.setUserId(pointDTO.getUserId());
+                        customerPoint.setTotalPoint(0);
+                        customerPoint.setUsedPoint(0);
+                        customerPoint.setExpiredPoint(0);
+                        customerPoint.create("sys");
+                        customerPointMapper.insert(customerPoint);
+                    }else {
+                        customerPoint.setExpiredPoint(expiredPoint);
+                        customerPointMapper.updateById(customerPoint);
+                    }
+
+                }
+            }
+        }
+
+
+        log.info("过期积分计算结束:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss"));
+    }
+
+
+}
diff --git a/src/main/java/com/mzl/flower/service/customer/CustomerService.java b/src/main/java/com/mzl/flower/service/customer/CustomerService.java
index 4fec567..0176b71 100644
--- a/src/main/java/com/mzl/flower/service/customer/CustomerService.java
+++ b/src/main/java/com/mzl/flower/service/customer/CustomerService.java
@@ -16,6 +16,7 @@
 import com.mzl.flower.entity.partner.Partner;
 import com.mzl.flower.mapper.customer.CustomerMapper;
 import com.mzl.flower.mapper.partner.PartnerMapper;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
@@ -25,6 +26,7 @@
 
 @Service
 @Transactional
+@Slf4j
 public class CustomerService {
 
 
@@ -169,10 +171,14 @@
         }
 //        Partner partner = partnerMapper.selectOne(new QueryWrapper<Partner>()
 //                .eq("user_id", dto.getPartnerUserId()));
-        Partner partner = partnerMapper.getByIdOrUserId(dto.getPartnerUserId()); //适配id和userId
-        if (partner == null) {
+        List<Partner> partners = partnerMapper.getByIdOrUserId(dto.getPartnerUserId()); //适配id和userId
+        if(partners== null || partners.size() == 0){
             throw new ValidationException("合伙人不存在");
         }
+        if(partners.size() > 1){
+            log.error("合伙人信息重复,userId:{}", dto.getPartnerUserId());
+        }
+        Partner partner = partners.get(0);
         if (!"P".equals(partner.getStatus())) {
             throw new ValidationException("合伙人信息未审核通过,请联系客服人员");
         }
@@ -182,7 +188,14 @@
 
     public String getPartnerName(String partnerUserId) {
         if (StringUtils.isNotBlank(partnerUserId)) {
-            Partner partner = partnerMapper.getByIdOrUserId(partnerUserId);
+            List<Partner> partners = partnerMapper.getByIdOrUserId(partnerUserId); //适配id和userId
+            if(partners== null || partners.size() == 0){
+                throw new ValidationException("合伙人不存在");
+            }
+            if(partners.size() > 1){
+                log.error("合伙人信息重复,userId:{}", partnerUserId);
+            }
+            Partner partner = partners.get(0);
             if (partner == null) {
                 throw new ValidationException("合伙人不存在");
             }
diff --git a/src/main/java/com/mzl/flower/service/menber/impl/MemberGrowthRecordServiceImpl.java b/src/main/java/com/mzl/flower/service/menber/impl/MemberGrowthRecordServiceImpl.java
index 719d57a..a113506 100644
--- a/src/main/java/com/mzl/flower/service/menber/impl/MemberGrowthRecordServiceImpl.java
+++ b/src/main/java/com/mzl/flower/service/menber/impl/MemberGrowthRecordServiceImpl.java
@@ -129,9 +129,6 @@
 
     @Override
     public void deleteMemberGrowthRecord(String id) {
-        if(id.equals(Constants.DEFAULT_MEMBER_ID)){
-            throw new ValidationException("默认普通会员只能编辑,不能删除");
-        }
         MemberGrowthRecord memberGrowthRecord = memberGrowthRecordMapper.selectById(id);
         if (memberGrowthRecord == null) {
             throw new ValidationException("成长记录信息不存在");
diff --git a/src/main/java/com/mzl/flower/service/menber/impl/MemberServiceImpl.java b/src/main/java/com/mzl/flower/service/menber/impl/MemberServiceImpl.java
index 710513c..6978b15 100644
--- a/src/main/java/com/mzl/flower/service/menber/impl/MemberServiceImpl.java
+++ b/src/main/java/com/mzl/flower/service/menber/impl/MemberServiceImpl.java
@@ -4,6 +4,7 @@
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.mzl.flower.config.exception.ValidationException;
 import com.mzl.flower.config.security.SecurityUtils;
+import com.mzl.flower.constant.Constants;
 import com.mzl.flower.dto.request.menber.MemberDTO;
 import com.mzl.flower.dto.request.menber.MemberQueryDTO;
 import com.mzl.flower.dto.response.member.MemberVO;
@@ -43,18 +44,21 @@
         if (member.getStartPoint() > member.getEndPoint()) {
             throw new ValidationException("成长点开始不能大于结束");
         }
-
-        int discountRatio1 = member.getDiscountRatio().compareTo(BigDecimal.ZERO);
-        if (discountRatio1 == -1) {
-            throw new ValidationException("会员折扣百分比不能小于0");
+        if (!StringUtils.isEmpty(member.getDiscountRatio())) {
+            int discountRatio1 = member.getDiscountRatio().compareTo(BigDecimal.ZERO);
+            if (discountRatio1 == -1) {
+                throw new ValidationException("会员折扣百分比不能小于0");
+            }
+            int discountRatio2 = member.getDiscountRatio().compareTo(new BigDecimal(100));
+            if (discountRatio2 == 1) {
+                throw new ValidationException("会员折扣百分比不能大于100");
+            }
         }
-        int discountRatio2 = member.getDiscountRatio().compareTo(new BigDecimal(100));
-        if (discountRatio2 == 1) {
-            throw new ValidationException("会员折扣百分比不能大于100");
-        }
-        int discountAmount = member.getDiscountAmount().compareTo(BigDecimal.ZERO);
-        if (discountAmount == -1) {
-            throw new ValidationException("会员折扣固定金额不能小于0");
+        if (!StringUtils.isEmpty(member.getDiscountAmount())) {
+            int discountAmount = member.getDiscountAmount().compareTo(BigDecimal.ZERO);
+            if (discountAmount == -1) {
+                throw new ValidationException("会员折扣固定金额不能小于0");
+            }
         }
 
         //保存时判断是否有重复的名称
@@ -88,6 +92,9 @@
 
     @Override
     public void deleteMember(String id) {
+        if(id.equals(Constants.DEFAULT_MEMBER_ID)){
+            throw new ValidationException("默认普通会员只能编辑,不能删除");
+        }
         Member member = memberMapper.selectById(id);
         if (member == null) {
             throw new ValidationException("会员等级信息不存在");
diff --git a/src/main/java/com/mzl/flower/service/payment/DeliveryOrderService.java b/src/main/java/com/mzl/flower/service/payment/DeliveryOrderService.java
index 944ca71..8cca07c 100644
--- a/src/main/java/com/mzl/flower/service/payment/DeliveryOrderService.java
+++ b/src/main/java/com/mzl/flower/service/payment/DeliveryOrderService.java
@@ -591,6 +591,20 @@
             throw new ValidationException("处理数量不能大于商品数量");
         }
 
+        List<OrderItemCheck> cLs = orderItemCheckMapper.selectList(new QueryWrapper<OrderItemCheck>()
+                .ne("type", dto.getType())
+                .eq("order_item_id", dto.getOrderItemId())
+        );
+        int otherNum = 0;
+        if(cLs != null && cLs.size() > 0){
+            for(OrderItemCheck c : cLs){
+                otherNum += c.getNum();
+            }
+        }
+        if(otherNum + dto.getNum() > oi.getNum()){
+            throw new ValidationException("处理总数量不能大于商品数量");
+        }
+
         BigDecimal deduct = new BigDecimal(0);
         if(Constants.CHECK_TYPE.replace.name().equals(dto.getType())){
             deduct = oi.getSupplierPrice().multiply(new BigDecimal(dto.getNum()));
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 c9bab5f..5d8fa5a 100644
--- a/src/main/java/com/mzl/flower/service/payment/OrderService.java
+++ b/src/main/java/com/mzl/flower/service/payment/OrderService.java
@@ -21,6 +21,7 @@
 import com.mzl.flower.dto.response.system.CodeValueDTO;
 import com.mzl.flower.dto.response.transport.TransportOrderDTO;
 import com.mzl.flower.dto.response.warehouse.WarehouseLocationDTO;
+import com.mzl.flower.entity.coupon.CouponRecordDO;
 import com.mzl.flower.entity.customer.Address;
 import com.mzl.flower.entity.customer.Customer;
 import com.mzl.flower.entity.flower.FlowerSupplierSaleNum;
@@ -131,6 +132,9 @@
 
     @Autowired
     private OrderItemCheckMapper orderItemCheckMapper;
+
+    @Autowired
+    private OrderPointGoodsMapper pointGoodsMapper;
 
     public void changeFlower2Cart(CartSaveDTO dto) {
         String userId = SecurityUtils.getUserId();
@@ -273,10 +277,18 @@
         Long partnerId = customer.getPartnerId();
         Long levelId = customer.getLevelId();
         Member member = getMember(levelId);
+        if (member != null) {
+            result.setMemberId(levelId);
+            result.setMemberName(member.getName());
+            result.setMemberDiscountType(member.getDiscountType());
+            result.setMemberDiscountRatio(member.getDiscountRatio());
+            result.setMemberDiscountAmount(member.getDiscountAmount());
+        }
 
         double totalWeight = 0D;
         int num = 0;
         BigDecimal totalAmount = new BigDecimal(0);
+        BigDecimal totalMemberAmount = new BigDecimal(0);
         for (FlowerCartListDTO c : ls) {
             if (!Constants.FLOWER_STATUS.UP.name().equals(c.getStatus())) {
                 throw new ValidationException("商品" + c.getName() + "已下架,请重新提交");
@@ -307,6 +319,7 @@
 
             totalWeight += c.getWeight() * c.getNum();
             totalAmount = totalAmount.add(c.getTotal());
+            totalMemberAmount = totalMemberAmount.add(c.getTotalMember());
             num += c.getNum();
         }
 
@@ -317,6 +330,7 @@
         result.setFlowers(ls);
         result.setPacking(packing);
         result.setTotalAmount(totalAmount);
+        result.setTotalMemberAmount(totalMemberAmount);
         result.setTotalWeight(totalWeight);
 
         return result;
@@ -350,7 +364,8 @@
         }
 
         Address address = addressMapper.selectById(dto.getAddressId());
-        List<TransportOrderDTO> tLs = transportService.getPreOrderTransportList(address, p.getTotalWeight(), dto.getTransportId());
+        List<TransportOrderDTO> tLs = transportService.getPreOrderTransportList(address
+                , p.getTotalWeight(), dto.getTransportId());
         BigDecimal transportFee = new BigDecimal(0);
         String deliveryName = "";
         if (tLs != null && tLs.size() > 0) {
@@ -359,23 +374,41 @@
             deliveryName = d.getName();
         }
 
-        //TODO 优惠券和会员价相关修改
-
         String userId = SecurityUtils.getUserId();
         Order order = new Order();
         order.setId(UUIDGenerator.getUUID());
+
+        final List<Long> goodsRecordIdList = dto.getGoodsRecordIdList();
+        usePointGoods(order.getId(), goodsRecordIdList);//使用积分商品兑换券
+
         order.create(userId);
         order.setRemarks(dto.getRemarks());
         order.setSpecialNeeds(dto.getSpecialNeeds());
         order.setStatusBackend(Constants.ORDER_STATUS_BACKEND.PENDING.name());
         order.setStatus(Constants.ORDER_STATUS.PENDING.name());
 
-        order.setFlowerAmount(p.getTotalAmount());
+        //设置下单时的会员信息
+        order.setMemberId(p.getMemberId());
+        order.setMemberName(p.getMemberName());
+        order.setMemberDiscountType(p.getMemberDiscountType());
+        order.setMemberDiscountRatio(p.getMemberDiscountRatio());
+        order.setMemberCouponAmount(p.getMemberDiscountAmount());
+
+        order.setFlowerAmount(p.getTotalMemberAmount());//使用会员价总价
         order.setPackingFee(p.getPacking());
         order.setTransportFee(transportFee);
         order.setDeliveryName(deliveryName);
 
-        BigDecimal totalAmount = order.getFlowerAmount().add(p.getPacking()).add(transportFee);
+        BigDecimal totalAmount = order.getFlowerAmount().add(p.getPacking()).add(transportFee);//使用优惠券之前的总价
+        CouponRecordDO coupon = useCouponRecord(order.getId(), totalAmount, dto.getCouponRecordId());
+        if(coupon != null){
+            order.setMemberCouponId(coupon.getId());
+            order.setMemberCouponCode(coupon.getCouponCode());
+            order.setMemberCouponName(coupon.getCouponName());
+            order.setMemberCouponAmount(coupon.getCouponDiscountValue());
+
+            totalAmount = totalAmount.subtract(order.getMemberCouponAmount());//满足条件需要减去优惠券金额
+        }
         order.setTotalAmount(totalAmount);
 
         order.setCustomer(address.getName());
@@ -396,6 +429,8 @@
         //商品列表处理
         List<FlowerCartListDTO> flowers = p.getFlowers();
         Map<Long, List<ParamItemDTO>> paramMap = new HashMap<>();
+        final BigDecimal flowerAmount = order.getFlowerAmount();//订单商品总价
+        final BigDecimal memberCouponAmount = order.getMemberCouponAmount();//使用优惠券面值
         for (FlowerCartListDTO f : flowers) {
             OrderItem t = new OrderItem();
             t.setId(UUIDGenerator.getUUID());
@@ -421,8 +456,13 @@
             t.setMarkupOne(pp.getFirstFee());
             t.setMarkupTwo(pp.getSecondFee());
             t.setMarkupPartner(pp.getPartnerFee());
-            t.setPrice(pp.getPrice());
-            t.setTotal(f.getTotal());
+            t.setPrice(f.getPriceMember());//使用会员单价
+            t.setTotal(f.getTotalMember());//使用会员总价
+
+            t.setOriginalPrice(pp.getPrice());//非会员售价
+            BigDecimal couponAmount = calculateCoupon(memberCouponAmount, t.getTotal(), flowerAmount, t.getNum());
+            t.setCouponAmount(couponAmount);//每扎平摊的优惠券面值
+            t.setRealPrice(t.getPrice().subtract(couponAmount));//退款时使用的真实成交价
 
             t.create(userId);
             orderItemMapper.insert(t);
@@ -434,9 +474,52 @@
         order.setPayOpenid(openId);
         orderMapper.insert(order);
 
+        //处理积分商品兑换券
+        if(goodsRecordIdList != null && goodsRecordIdList.size() > 0){
+            for(Long goodsRecordId : goodsRecordIdList){
+                OrderPointGoods g = new OrderPointGoods();
+                g.setId(UUIDGenerator.getUUID());
+                g.setOrderId(order.getId());
+                g.setGoodsRecordId(goodsRecordId);
+                g.create(userId);
+                pointGoodsMapper.insert(g);
+            }
+        }
+
         Map map = paymentV3Service.wxPrepay(order);
         map.put("_testV2OrderId", order.getId());
         return map;
+    }
+
+    private void usePointGoods(String orderId, List<Long> goodsRecordIdList){
+        //TODO 使用积分商品兑换券
+    }
+
+    /**
+     * 计算订单中每种商品每扎平摊的优惠券面值,保留2位小数
+     *
+     * @param couponAmount
+     * @param itemTotalAmount
+     * @param totalAmount
+     * @param num
+     * @return
+     */
+    private BigDecimal calculateCoupon(BigDecimal couponAmount, BigDecimal itemTotalAmount
+            , BigDecimal totalAmount, Integer num){
+        if(couponAmount == null){
+            return new BigDecimal(0);
+        }
+        BigDecimal radio = itemTotalAmount.divide(totalAmount, 2, RoundingMode.HALF_UP);//计算该商品总价在订单中的占比
+        BigDecimal subCoupon = couponAmount.multiply(radio);//占有的优惠券面值
+        return subCoupon.divide(BigDecimal.valueOf(num), 2, RoundingMode.HALF_UP);
+    }
+
+    private CouponRecordDO useCouponRecord(String orderId, BigDecimal amount, String couponRecordId){
+        if(StringUtils.isNotEmpty(couponRecordId)){
+            //TODO 优惠券使用和验证,如果不符合使用条件需要抛出异常。需调用优惠券使用方法
+        }
+
+        return null;
     }
 
     private String getOrderNo() {
@@ -780,6 +863,9 @@
         boolean couldCheckRefund = StringUtils.isEmpty(transferId) && count == 0 && cc == 0;
         dto.setCouldCheckRefund(couldCheckRefund);
 
+        List<OrderPointGoodsListDTO> pointGoodsList = orderMapper.getPointGoodsList(id);
+        dto.setPointGoodsList(pointGoodsList);
+
         return dto;
     }
 
diff --git a/src/main/java/com/mzl/flower/service/point/CustomerPointService.java b/src/main/java/com/mzl/flower/service/point/CustomerPointService.java
index bb55190..04800ee 100644
--- a/src/main/java/com/mzl/flower/service/point/CustomerPointService.java
+++ b/src/main/java/com/mzl/flower/service/point/CustomerPointService.java
@@ -84,16 +84,15 @@
 
         if(POINT_CHANGE_TYPE.add.name().equals(detail.getChangeType())){
             point.setTotalPoint(point.getTotalPoint() + detail.getPoint());
-            point.setUsedPoint(point.getUsedPoint() + detail.getUsePoint());
-            point.setExpiredPoint(point.getExpiredPoint() + detail.getExpiredPoint());
         }else if(POINT_CHANGE_TYPE.reduce.name().equals(detail.getChangeType())){
-//            if(point.getTotalPoint()!= null && point.getTotalPoint()!=0 && point.getTotalPoint()>= detail.getPoint()){
-//                point.setTotalPoint(point.getTotalPoint() - detail.getPoint());
-//            }else{
-//                //积分不足,直接清0
-//                point.setTotalPoint(0);
-//            }
-            point.setTotalPoint(point.getTotalPoint() - detail.getPoint());
+            if(point.getTotalPoint()!= null && point.getTotalPoint()!=0 && point.getTotalPoint()>= detail.getPoint()){
+                point.setTotalPoint(point.getTotalPoint() - detail.getPoint());
+            }else{
+                //积分不足,直接清0
+                point.setTotalPoint(0);
+                detail.setPoint(point.getTotalPoint());
+                detail.setRemarks(detail.getRemarks()+",积分不足,扣除剩余积分"+point.getTotalPoint());
+            }
         }
         if(isAdd){
             customerPointMapper.insert(point);
@@ -114,10 +113,10 @@
         detail.setChangeType(POINT_CHANGE_TYPE.reduce.name());
         detail.setType(POINT_TYPE.deduction.name());
         detail.create(SecurityUtils.getUserId());
-        customerPointDetailMapper.insert(detail);
-
         //更新汇总表
         updateCustomerPoint(detail);
+
+        customerPointDetailMapper.insert(detail);
     }
 
     public void consumptionPoint(BigDecimal orderAmount, String orderNo,String userId)  {
diff --git a/src/main/java/com/mzl/flower/utils/DateUtils.java b/src/main/java/com/mzl/flower/utils/DateUtils.java
index fdbaaa3..9970c68 100644
--- a/src/main/java/com/mzl/flower/utils/DateUtils.java
+++ b/src/main/java/com/mzl/flower/utils/DateUtils.java
@@ -2,6 +2,7 @@
 
 import org.apache.poi.util.LocaleUtil;
 
+import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.Calendar;
@@ -40,6 +41,19 @@
     }
 
 
+    /**
+     * 将LocalDateTime对象转换为字符串
+     * @return
+     */
+    public static String toString(LocalDate date,String format)  {
+        // 定义日期时间格式
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format);
+        String str = date.format(formatter);
+        return str;
+    }
+
+
+
     public static Date getJavaDate(double date) {
         return getJavaDate(date, false, (TimeZone)null, false);
     }
diff --git a/src/main/resources/mapper/payment/DeliveryOrderItemMapper.xml b/src/main/resources/mapper/payment/DeliveryOrderItemMapper.xml
index f6b9e26..d944053 100644
--- a/src/main/resources/mapper/payment/DeliveryOrderItemMapper.xml
+++ b/src/main/resources/mapper/payment/DeliveryOrderItemMapper.xml
@@ -26,7 +26,7 @@
     </select>
 
     <select id="selectDoItemListByTime" resultType="com.mzl.flower.dto.response.payment.DeliveryOrderItemStatisticsDTO">
-        SELECT oi.flower_name, oi.flower_level, sum(oi.num) num, sum(oi.supplier_price) price
+        SELECT oi.flower_name, oi.flower_level, sum(oi.num) num, sum(oi.supplier_price*oi.num) price
         FROM t_delivery_order_item doi
         join t_delivery_order q on q.id = doi.delivery_id
         join t_order_item oi on oi.id = doi.order_item_id
@@ -46,6 +46,7 @@
         , ois.check_num, ois.check_fee, ois.replace_num, ois.replace_fee, ois.lack_num, ois.lack_fee_supplier lackFee
         , ois.station_fee, ois.sales_fee_supplier salesFee, ois.service_fee_rate, ois.service_fee, ois.income_supplier
         , o.status_backend, o.create_time orderTime
+        , (select count(1) from t_order_item_sales sa where sa.order_item_id = oi.id) salesNum
         FROM t_delivery_order_item doi
         join t_delivery_order q on q.id = doi.delivery_id
         join t_order o on o.id = q.order_id
@@ -65,7 +66,7 @@
     </select>
 
     <select id="getSupplierStatisticsByTime" resultType="com.mzl.flower.dto.response.payment.DeliveryOrderItemStatisticsDTO">
-        SELECT sum(oi.num) num, sum(oi.supplier_price) price
+        SELECT sum(oi.num) num, sum(oi.supplier_price*oi.num) price
         FROM t_delivery_order_item doi
         join t_delivery_order q on q.id = doi.delivery_id
         join t_order_item oi on oi.id = doi.order_item_id
diff --git a/src/main/resources/mapper/payment/OrderMapper.xml b/src/main/resources/mapper/payment/OrderMapper.xml
index 6cdbeaf..f46921d 100644
--- a/src/main/resources/mapper/payment/OrderMapper.xml
+++ b/src/main/resources/mapper/payment/OrderMapper.xml
@@ -249,4 +249,11 @@
         order by o.receive_time desc
         limit 1
     </select>
+
+    <select id="getPointGoodsList" resultType="com.mzl.flower.dto.response.payment.OrderPointGoodsListDTO">
+        select gr.*
+        from t_point_goods_record gr
+        join t_order_point_goods opg on opg.goods_record_id = gr.id
+        where opg.order_id = #{orderId}
+    </select>
 </mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/point/CustomerPointDetailMapper.xml b/src/main/resources/mapper/point/CustomerPointDetailMapper.xml
index f61dd52..6e4689e 100644
--- a/src/main/resources/mapper/point/CustomerPointDetailMapper.xml
+++ b/src/main/resources/mapper/point/CustomerPointDetailMapper.xml
@@ -17,4 +17,24 @@
         </if>
         order by t.c desc
     </select>
+    <select id="tongjiExpiredPoint" resultType="com.mzl.flower.dto.response.point.ExpiredPointDTO"
+            parameterType="java.time.LocalDate">
+        SELECT
+            p.user_id,
+            p.customer_id,
+            SUM(CASE WHEN p.change_type = 'add' THEN point ELSE 0 END) AS addPoint,
+            SUM(CASE WHEN p.change_type = 'reduce' THEN point ELSE 0 END) AS reducePoint
+        FROM
+            t_customer_point_detail p
+        WHERE p.deleted= 0
+        <if test="lastYear!=null ">
+            <![CDATA[
+               and p.record_date <= #{lastYear}
+            ]]>
+        </if>
+        GROUP BY
+        p.user_id,
+        p.customer_id
+    </select>
+
 </mapper>
\ No newline at end of file
diff --git a/src/main/resources/script/db-v2.sql b/src/main/resources/script/db-v2.sql
new file mode 100644
index 0000000..c8c0f76
--- /dev/null
+++ b/src/main/resources/script/db-v2.sql
@@ -0,0 +1,22 @@
+==================================================20240831
+ALTER TABLE `t_order` ADD `member_coupon_id` varchar(50)  COMMENT '用户优惠券id';
+ALTER TABLE `t_order` ADD `member_coupon_code` varchar(50)  COMMENT '优惠券编码';
+ALTER TABLE `t_order` ADD `member_coupon_name` varchar(50)  COMMENT '优惠券名称';
+ALTER TABLE `t_order` ADD `member_coupon_amount` DECIMAL(11,2)  COMMENT '优惠券金额';
+ALTER TABLE `t_order` ADD `member_id` bigint(25)  COMMENT '会员等级id';
+ALTER TABLE `t_order` ADD `member_name` varchar(50)  COMMENT '会员等级名称';
+ALTER TABLE `t_order` ADD `member_discount_type` varchar(50)  COMMENT '折扣类型(discount_type)';
+ALTER TABLE `t_order` ADD `member_discount_ratio` DECIMAL(11,2)  COMMENT '会员折扣';
+ALTER TABLE `t_order` ADD `member_discount_amount` DECIMAL(11,2)  COMMENT '优惠金额(每扎)';
+
+ALTER TABLE `t_order_item` ADD `coupon_amount` DECIMAL(11,2)  COMMENT '优惠券金额/扎';
+ALTER TABLE `t_order_item` ADD `original_price` DECIMAL(11,2)  COMMENT '优惠前售价/扎';
+ALTER TABLE `t_order_item` ADD `real_price` DECIMAL(11,2)  COMMENT '真实成交价格/每扎';
+
+
+
+
+
+
+
+
diff --git "a/src/main/\350\241\250\350\256\276\350\256\241-\344\272\214\346\234\237.xlsx" "b/src/main/\350\241\250\350\256\276\350\256\241-\344\272\214\346\234\237.xlsx"
index 6d5b14e..9f1c3d5 100644
--- "a/src/main/\350\241\250\350\256\276\350\256\241-\344\272\214\346\234\237.xlsx"
+++ "b/src/main/\350\241\250\350\256\276\350\256\241-\344\272\214\346\234\237.xlsx"
Binary files differ
diff --git "a/src/main/\350\241\250\350\256\276\350\256\241.xlsx" "b/src/main/\350\241\250\350\256\276\350\256\241.xlsx"
index 341bd45..1eb580f 100644
--- "a/src/main/\350\241\250\350\256\276\350\256\241.xlsx"
+++ "b/src/main/\350\241\250\350\256\276\350\256\241.xlsx"
Binary files differ

--
Gitblit v1.9.3