From 5ff8fb8bd9d298def47437b24e77c8879cdc37d2 Mon Sep 17 00:00:00 2001
From: 陶杰 <1378534974@qq.com>
Date: 星期四, 14 十一月 2024 09:36:39 +0800
Subject: [PATCH] 1.定时任务-待付款-15分钟 2.领券中心:根据领取次数判断是否已领取 3.付款:优惠券自动领取最大优惠券

---
 src/main/java/com/mzl/flower/service/coupon/CouponRecordService.java             |    2 
 src/main/java/com/mzl/flower/service/impl/wallet/WalletServiceImpl.java          |   13 +
 src/main/java/com/mzl/flower/web/payment/OrderController.java                    |   15 +
 src/main/java/com/mzl/flower/mapper/payment/OrderMapper.java                     |    4 
 src/main/java/com/mzl/flower/service/payment/OrderService.java                   |   20 ++
 src/main/java/com/mzl/flower/dto/response/coupon/CouponTemplateVO.java           |   12 +
 src/main/java/com/mzl/flower/schedule/ScheduleService.java                       |    5 
 src/main/java/com/mzl/flower/service/impl/wallet/WalletReduceServiceImpl.java    |   12 +
 src/main/java/com/mzl/flower/entity/payment/Order.java                           |    7 
 src/main/resources/mapper/payment/OrderMapper.xml                                |   21 ++
 src/main/java/com/mzl/flower/dto/request/coupon/QueryMineCouponRecordDTO.java    |    4 
 src/main/java/com/mzl/flower/dto/response/coupon/CouponTemplateAppVO.java        |    9 +
 src/main/java/com/mzl/flower/service/coupon/CouponTemplateService2.java          |    2 
 src/main/resources/mapper/wallet/WalletMapper.xml                                |   55 ++++--
 src/main/java/com/mzl/flower/mapper/wallet/WalletReduceMapper.java               |    5 
 src/main/java/com/mzl/flower/service/payment/UserPaymentV3Service.java           |   19 +
 src/main/java/com/mzl/flower/service/impl/coupon/CouponRecordServiceImpl.java    |   56 +++++++
 src/main/java/com/mzl/flower/service/payment/UserPaymentSybService.java          |   15 +
 src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateAppController.java      |   17 ++
 src/main/java/com/mzl/flower/mapper/coupon/CouponTemplateMapperCustom.java       |    2 
 src/main/java/com/mzl/flower/service/wallet/WalletReduceService.java             |   13 +
 src/main/resources/mapper/wallet/WalletReduceMapper.xml                          |   66 +++++++
 src/main/java/com/mzl/flower/service/impl/coupon/CouponTemplateServiceImpl2.java |   41 ++++
 src/main/resources/mapper/coupon/CouponTemplateMapperCustom.xml                  |   48 ++++++
 24 files changed, 418 insertions(+), 45 deletions(-)

diff --git a/src/main/java/com/mzl/flower/dto/request/coupon/QueryMineCouponRecordDTO.java b/src/main/java/com/mzl/flower/dto/request/coupon/QueryMineCouponRecordDTO.java
index ae8675f..62b7951 100644
--- a/src/main/java/com/mzl/flower/dto/request/coupon/QueryMineCouponRecordDTO.java
+++ b/src/main/java/com/mzl/flower/dto/request/coupon/QueryMineCouponRecordDTO.java
@@ -4,6 +4,8 @@
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.math.BigDecimal;
+
 
 @Data
 @ApiModel("App活动优惠券实体类")
@@ -28,5 +30,7 @@
     @ApiModelProperty(value = "状态(coupon_record_status)",hidden = true)
     private String status;
 
+    @ApiModelProperty(value = "订单金额",hidden = true)
+    private BigDecimal orderAmount;
 
 }
diff --git a/src/main/java/com/mzl/flower/dto/response/coupon/CouponTemplateAppVO.java b/src/main/java/com/mzl/flower/dto/response/coupon/CouponTemplateAppVO.java
index b7dbca1..563832e 100644
--- a/src/main/java/com/mzl/flower/dto/response/coupon/CouponTemplateAppVO.java
+++ b/src/main/java/com/mzl/flower/dto/response/coupon/CouponTemplateAppVO.java
@@ -142,5 +142,14 @@
     @ApiModelProperty(value = "优惠券图片")
     private String imageUrl;
 
+    /**
+     * 已经领取数
+     */
+    @ApiModelProperty(value = "已经领取数")
+    private Integer getNum;
+
+    @ApiModelProperty(value = "优惠券是否已领取")
+    private Boolean getYetFlag;
+
 
 }
diff --git a/src/main/java/com/mzl/flower/dto/response/coupon/CouponTemplateVO.java b/src/main/java/com/mzl/flower/dto/response/coupon/CouponTemplateVO.java
index 146c38e..18b1224 100644
--- a/src/main/java/com/mzl/flower/dto/response/coupon/CouponTemplateVO.java
+++ b/src/main/java/com/mzl/flower/dto/response/coupon/CouponTemplateVO.java
@@ -250,4 +250,16 @@
     @ApiModelProperty(value = "优惠券图片")
     private String imageUrl;
 
+    @ApiModelProperty(value = "是否已经领取完成,判断最大的领取次数和已经领取次数")
+    private Integer receiveFlag;
+
+    @ApiModelProperty(value = "优惠券是否已领取")
+    private Boolean getYetFlag;
+
+    @ApiModelProperty(value = "剩余领取数量")
+    private Integer leftNum;
+
+    @ApiModelProperty(value = "优惠券领取的最早时间")
+    private LocalDateTime recordCreateTime;
+
 }
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 438c5f4..8c66dea 100644
--- a/src/main/java/com/mzl/flower/entity/payment/Order.java
+++ b/src/main/java/com/mzl/flower/entity/payment/Order.java
@@ -6,6 +6,7 @@
 import lombok.Data;
 
 import java.math.BigDecimal;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
 
 @Data
@@ -162,4 +163,10 @@
     @TableField("member_discount_amount")
     private BigDecimal memberDiscountAmount;//优惠金额(每扎)
 
+    @TableField("payment_date_sta")
+    private LocalDate paymentDateSta;//支付日期
+
+    @TableField("create_date_sta")
+    private LocalDate createDateSta;//创建日期
+
 }
diff --git a/src/main/java/com/mzl/flower/mapper/coupon/CouponTemplateMapperCustom.java b/src/main/java/com/mzl/flower/mapper/coupon/CouponTemplateMapperCustom.java
index 66fe43f..65c9d4e 100644
--- a/src/main/java/com/mzl/flower/mapper/coupon/CouponTemplateMapperCustom.java
+++ b/src/main/java/com/mzl/flower/mapper/coupon/CouponTemplateMapperCustom.java
@@ -67,4 +67,6 @@
     void expireHomeActivityCouponTemplate();
 
     int expireActivityCouponTemplateAll();
+
+    List<CouponTemplateVO> getActivityEffectListWithMine(@Param("param") QueryActivityEffectCouponDTO dto);
 }
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 5c4ca5e..461ee22 100644
--- a/src/main/java/com/mzl/flower/mapper/payment/OrderMapper.java
+++ b/src/main/java/com/mzl/flower/mapper/payment/OrderMapper.java
@@ -73,4 +73,8 @@
 
     BigDecimal getOrderSaleAmount(@Param("startTime") LocalDateTime startTime
             , @Param("endTime") LocalDateTime endTime);
+
+    List<Order> selectAllDateList();
+
+    void updatePaymentCreateDate(@Param("order") Order order);
 }
diff --git a/src/main/java/com/mzl/flower/mapper/wallet/WalletReduceMapper.java b/src/main/java/com/mzl/flower/mapper/wallet/WalletReduceMapper.java
index f44e21a..6deddfc 100644
--- a/src/main/java/com/mzl/flower/mapper/wallet/WalletReduceMapper.java
+++ b/src/main/java/com/mzl/flower/mapper/wallet/WalletReduceMapper.java
@@ -7,7 +7,6 @@
 import com.mzl.flower.dto.response.wallet.WalletReduceVO;
 import com.mzl.flower.entity.wallet.WalletDO;
 import org.apache.ibatis.annotations.Param;
-import org.apache.ibatis.annotations.Select;
 import org.springframework.stereotype.Repository;
 
 import java.math.BigDecimal;
@@ -27,9 +26,11 @@
 
     List<WalletReduceVO> getPage(Page page,@Param("dto") QueryWalletReduceDTO dto);
 
-    BigDecimal getCheckReduceAmount(@Param("dto") QueryWalletAmountDTO queryWalletAmountDTO);
+    BigDecimal getCheckLackReplaceAmount(@Param("dto") QueryWalletAmountDTO queryWalletAmountDTO);
 
     BigDecimal getSaleReduceAmount(@Param("dto")QueryWalletAmountDTO queryWalletAmountDTO);
 
     BigDecimal getStationFeeAmount(@Param("dto") QueryWalletAmountDTO queryWalletAmountDTO);
+
+    BigDecimal getCheckReduceAmount(@Param("dto") QueryWalletAmountDTO queryWalletAmountDTO);
 }
diff --git a/src/main/java/com/mzl/flower/schedule/ScheduleService.java b/src/main/java/com/mzl/flower/schedule/ScheduleService.java
index 36afd60..34e0857 100644
--- a/src/main/java/com/mzl/flower/schedule/ScheduleService.java
+++ b/src/main/java/com/mzl/flower/schedule/ScheduleService.java
@@ -144,7 +144,8 @@
         log.info("分类加价缓存结束:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss"));
     }
 
-    @Scheduled(cron = "0 0/5 * * * ?")
+//    @Scheduled(cron = "0 0/5 * * * ?")
+    @Scheduled(cron = "0 0/15 * * * ?")
     public void checkPrepayOrder() {//五分钟未付款自动取消
         log.info("未付款确认开始:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss"));
 
@@ -154,7 +155,7 @@
         if(ls != null && ls.size() > 0){
             for(Order o : ls){
                 try {
-                    LocalDateTime createdTime = o.getCreateTime().plusMinutes(5);
+                    LocalDateTime createdTime = o.getCreateTime().plusMinutes(15);
                     if (createdTime.isBefore(LocalDateTime.now())) {
                         boolean f = paymentV3Service.checkOrderStatus(o.getId());
                         if(!f){
diff --git a/src/main/java/com/mzl/flower/service/coupon/CouponRecordService.java b/src/main/java/com/mzl/flower/service/coupon/CouponRecordService.java
index 8298870..b8b0566 100644
--- a/src/main/java/com/mzl/flower/service/coupon/CouponRecordService.java
+++ b/src/main/java/com/mzl/flower/service/coupon/CouponRecordService.java
@@ -121,4 +121,6 @@
 
 
     boolean expireCouponRecordAll();
+
+    CouponRecordVO getUnusedFit(QueryMineCouponRecordDTO dto);
 }
diff --git a/src/main/java/com/mzl/flower/service/coupon/CouponTemplateService2.java b/src/main/java/com/mzl/flower/service/coupon/CouponTemplateService2.java
index 766eda0..4924912 100644
--- a/src/main/java/com/mzl/flower/service/coupon/CouponTemplateService2.java
+++ b/src/main/java/com/mzl/flower/service/coupon/CouponTemplateService2.java
@@ -101,4 +101,6 @@
     CouponTemplateVO getHomeActivityEffectAlert(QueryActivityEffectCouponDTO dto);
 
     boolean expireActivityCouponTemplateAll();
+
+    List<CouponTemplateVO> getActivityEffectListWithMine(QueryActivityEffectCouponDTO dto);
 }
diff --git a/src/main/java/com/mzl/flower/service/impl/coupon/CouponRecordServiceImpl.java b/src/main/java/com/mzl/flower/service/impl/coupon/CouponRecordServiceImpl.java
index 564a08c..398f1b3 100644
--- a/src/main/java/com/mzl/flower/service/impl/coupon/CouponRecordServiceImpl.java
+++ b/src/main/java/com/mzl/flower/service/impl/coupon/CouponRecordServiceImpl.java
@@ -33,6 +33,7 @@
 import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.time.temporal.TemporalAdjusters;
+import java.util.Comparator;
 import java.util.List;
 import java.util.Objects;
 import java.util.concurrent.TimeUnit;
@@ -571,4 +572,59 @@
 
         return couponRecordMapperCustom.expireCouponRecordAll();
     }
+
+    @Override
+    public CouponRecordVO getUnusedFit(QueryMineCouponRecordDTO dto) {
+
+        /**
+         * ①.先查询出满足条件的优惠券(满减面值最大)
+         * ②.查询面值最大的优惠券(无门槛面值最大)
+         * ③查询过期时间早的优惠券④在满足③的条件下,优先使用无门槛优惠券
+         * ④基于以上规则如果还存在相同的优惠券,任意选择一张优惠券即可
+         */
+
+        CouponRecordVO bestCoupon=null;
+        // 查出我所有可用优惠券
+        final List<CouponRecordVO> mineCouponRecordList = getMineCouponRecordList(dto);
+
+        if(null!=dto.getOrderAmount() && CollectionUtils.isNotEmpty(mineCouponRecordList)){
+            // ①.先查询出满足条件的优惠券
+            // 遍历优惠券列表,找出所有minOrderAmount >= dto.orderAmount ,且couponDiscountValue 最大的优惠券
+            // 筛选符合条件并找出优惠面值最大的优惠券
+            bestCoupon = mineCouponRecordList.stream()
+                    // 筛选出 minOrderAmount >= dto.orderAmount 的优惠券并且优惠券类型是discount的
+                    .filter(coupon -> coupon.getCouponDiscountType().equals(CouponTypeEnum.DISCOUNT.getType()))
+                    .filter(coupon -> coupon.getMinOrderAmount().compareTo(dto.getOrderAmount()) <= 0)
+                    // 按 couponDiscountValue 倒序排序
+                    .max(Comparator.comparing(CouponRecordVO::getCouponDiscountValue))
+                    // 如果没有符合条件的优惠券,使用 Optional.orElse(null) 返回 null
+                    .orElse(null);
+
+            if(null==bestCoupon){
+            // ②.查询面值最大的优惠券(无门槛面值最大)
+//               过滤出discountType 是zero的优惠券,并根据couponDiscountValue倒序排序
+                bestCoupon = mineCouponRecordList.stream()
+                        .filter(coupon -> coupon.getCouponDiscountType().equals(CouponTypeEnum.ZERO.getType()))
+                        .max(Comparator.comparing(CouponRecordVO::getCouponDiscountValue))
+                        .orElse(null);
+
+                // ③查询过期时间早的优惠券
+                if(null!=bestCoupon){
+                    final BigDecimal zeroMaxCouponDiscountValue = bestCoupon.getCouponDiscountValue();
+                    // 过滤出discountType 是zero的优惠券,且couponDiscountValue与bestCoupon的couponDiscountValue面值一样的优惠券,并根据effectiveEnd正序排,获取第一条数据
+                    CouponRecordVO effectiveEndEarlyCoupon= mineCouponRecordList.stream()
+                            .filter(coupon -> coupon.getCouponDiscountType().equals(CouponTypeEnum.ZERO.getType()))
+                            .filter(coupon -> coupon.getCouponDiscountValue().compareTo(zeroMaxCouponDiscountValue)==0)
+                            .min(Comparator.comparing(CouponRecordVO::getEffectiveEnd))
+                            .orElse(null);
+                    if(null!=effectiveEndEarlyCoupon){
+                        bestCoupon=effectiveEndEarlyCoupon;
+                    }
+                }
+
+            }
+        }
+        return bestCoupon;
+
+    }
 }
diff --git a/src/main/java/com/mzl/flower/service/impl/coupon/CouponTemplateServiceImpl2.java b/src/main/java/com/mzl/flower/service/impl/coupon/CouponTemplateServiceImpl2.java
index 154b128..b09c467 100644
--- a/src/main/java/com/mzl/flower/service/impl/coupon/CouponTemplateServiceImpl2.java
+++ b/src/main/java/com/mzl/flower/service/impl/coupon/CouponTemplateServiceImpl2.java
@@ -40,6 +40,7 @@
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.util.ArrayList;
+import java.util.Comparator;
 import java.util.List;
 import java.util.Objects;
 import java.util.stream.Collectors;
@@ -496,9 +497,45 @@
     }
 
     @Override
-    public List<CouponTemplateVO> getActivityEffectList(QueryActivityEffectCouponDTO dto) {
+    public List<CouponTemplateVO> getActivityEffectListWithMine(QueryActivityEffectCouponDTO dto) {
+        // 1.点击领取,优惠券状态变成灰色+已领取(根据web端优惠券限领次数判断)
+        //2.把已领取的优惠券按照领取时间排列到最下面
+        List<CouponTemplateVO> list= couponTemplateMapperCustom.getActivityEffectListWithMine(dto);
 
-        return couponTemplateMapperCustom.getActivityEffectList(dto);
+        // 将列表分为已经领取和未领取的,根据getYetFlag来判断,下面的所有操作都要判空
+        if(CollectionUtils.isNotEmpty(list)){
+            // 遍历列表,查看当前的优惠券是否已经达到领取次数,如果是则为true,不是为false
+            list.forEach(item->{
+                if (item != null) {
+                    item.setGetYetFlag(false);
+                    if (null != item.getGetNum() && null != item.getGetLimit() && item.getGetNum() >= item.getGetLimit()) {
+                        item.setGetYetFlag(true);
+                    }
+                }
+            });
+            List<CouponTemplateVO> getYetList = list.stream().filter(item->item.getGetYetFlag()).collect(Collectors.toList());
+            List<CouponTemplateVO> getNotYetList = list.stream().filter(item->!item.getGetYetFlag()).collect(Collectors.toList());
+            list.clear();
+            if(CollectionUtils.isNotEmpty(getNotYetList)){
+                // 将未领取的根据create_time 倒序排序
+                getNotYetList.sort(Comparator.comparing(CouponTemplateVO::getCreateTime).reversed());
+                // 将未领取和已领取的合并成新list返回
+                list.addAll(getNotYetList);
+            }
+            if(CollectionUtils.isNotEmpty(getYetList)){
+                // 将已经领取的根据recordCreateTime 时间正序排
+                getYetList.sort(Comparator.comparing(CouponTemplateVO::getRecordCreateTime));
+                list.addAll(getYetList);
+            }
+            return list;
+        }
+
+        return new ArrayList<>();
+    }
+
+    @Override
+    public List<CouponTemplateVO> getActivityEffectList(QueryActivityEffectCouponDTO dto) {
+        return couponTemplateMapperCustom.getActivityEffectListWithMine(dto);
     }
 
 }
diff --git a/src/main/java/com/mzl/flower/service/impl/wallet/WalletReduceServiceImpl.java b/src/main/java/com/mzl/flower/service/impl/wallet/WalletReduceServiceImpl.java
index 7165124..51b5bd8 100644
--- a/src/main/java/com/mzl/flower/service/impl/wallet/WalletReduceServiceImpl.java
+++ b/src/main/java/com/mzl/flower/service/impl/wallet/WalletReduceServiceImpl.java
@@ -4,7 +4,6 @@
 import com.mzl.flower.dto.request.wallet.QueryWalletAmountDTO;
 import com.mzl.flower.dto.request.wallet.QueryWalletReduceDTO;
 import com.mzl.flower.dto.response.wallet.WalletReduceVO;
-import com.mzl.flower.dto.response.wallet.WalletWithdrawRecordVO;
 import com.mzl.flower.mapper.wallet.WalletReduceMapper;
 import com.mzl.flower.service.wallet.WalletReduceService;
 import com.mzl.flower.service.wallet.WalletService;
@@ -33,10 +32,12 @@
     }
 
     @Override
-    public BigDecimal getCheckReduceAmount(QueryWalletAmountDTO queryWalletAmountDTO) {
+    public BigDecimal getCheckLackReplaceAmount(QueryWalletAmountDTO queryWalletAmountDTO) {
 
-        return walletReduceMapper.getCheckReduceAmount(queryWalletAmountDTO);
+        return walletReduceMapper.getCheckLackReplaceAmount(queryWalletAmountDTO);
     }
+
+
 
     @Override
     public BigDecimal getSaleReduceAmount(QueryWalletAmountDTO queryWalletAmountDTO) {
@@ -47,4 +48,9 @@
     public BigDecimal getStationFeeAmount(QueryWalletAmountDTO queryWalletAmountDTO) {
         return walletReduceMapper.getStationFeeAmount(queryWalletAmountDTO);
     }
+
+    @Override
+    public BigDecimal getCheckReduceAmount(QueryWalletAmountDTO queryWalletAmountDTO) {
+        return walletReduceMapper.getCheckReduceAmount(queryWalletAmountDTO);
+    }
 }
diff --git a/src/main/java/com/mzl/flower/service/impl/wallet/WalletServiceImpl.java b/src/main/java/com/mzl/flower/service/impl/wallet/WalletServiceImpl.java
index 161cc3e..0e784cd 100644
--- a/src/main/java/com/mzl/flower/service/impl/wallet/WalletServiceImpl.java
+++ b/src/main/java/com/mzl/flower/service/impl/wallet/WalletServiceImpl.java
@@ -164,9 +164,14 @@
         queryWalletAmountDTO.setStartTime(getWalletOnLineTime());
         queryWalletAmountDTO.setUserId(walletDO.getUserId());
 
-        // 质检扣款
-        BigDecimal checkDeduceAmount = walletReduceService.getCheckReduceAmount(queryWalletAmountDTO);
-        checkDeduceAmount = checkDeduceAmount != null ? checkDeduceAmount : BigDecimal.ZERO;
+        // 质检扣款(缺货和补货)
+        BigDecimal checkReplaceLockAmount = walletReduceService.getCheckLackReplaceAmount(queryWalletAmountDTO);
+        checkReplaceLockAmount = checkReplaceLockAmount != null ? checkReplaceLockAmount : BigDecimal.ZERO;
+
+        // 质检扣款(降级)
+        BigDecimal checkReduceAmount = walletReduceService.getCheckReduceAmount(queryWalletAmountDTO);
+        checkReduceAmount = checkReduceAmount != null ? checkReduceAmount : BigDecimal.ZERO;
+
         // 售后扣款
         BigDecimal saleDeduceAmount = walletReduceService.getSaleReduceAmount(queryWalletAmountDTO);
         saleDeduceAmount = saleDeduceAmount != null ? saleDeduceAmount : BigDecimal.ZERO;
@@ -176,7 +181,7 @@
         stationFeeAmount = stationFeeAmount != null ? stationFeeAmount : BigDecimal.ZERO;
 
         // 总扣款
-        BigDecimal deduceAmount = checkDeduceAmount.add(saleDeduceAmount).add(stationFeeAmount);
+        BigDecimal deduceAmount = checkReplaceLockAmount.add(checkReduceAmount).add(saleDeduceAmount).add(stationFeeAmount);
 
         return deduceAmount;
     }
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 497b07c..69a4c85 100644
--- a/src/main/java/com/mzl/flower/service/payment/OrderService.java
+++ b/src/main/java/com/mzl/flower/service/payment/OrderService.java
@@ -495,6 +495,19 @@
         usePointGoods(order.getId(), goodsRecordIdList);//使用积分商品兑换券
 
         order.create(userId);
+        // 根据当前的时间判断,如果时间大于当天的下午17:00 ,那么日期则为下一天的日期,否则为当天日期
+        if(null!=order.getCreateTime()){
+            LocalDateTime createDateTime = order.getCreateTime();
+            LocalDate createDate = createDateTime.toLocalDate();
+            LocalDateTime today1700 = createDateTime.with(LocalTime.of(17, 0));
+            // 比较时间是否大于当天的 17:00
+            if (createDateTime.isAfter(today1700)) {
+                // 如果大于 17:00,设置为下一天的日期
+                createDate = createDate.plusDays(1);
+            }
+            order.setCreateDateSta(createDate);
+        }
+//        order.setCreateDate();
         order.setRemarks(dto.getRemarks());
         order.setSpecialNeeds(dto.getSpecialNeeds());
         order.setStatusBackend(Constants.ORDER_STATUS_BACKEND.PENDING.name());
@@ -1798,4 +1811,11 @@
         exportOrderDetail(response, dto);
     }
 
+    public void refreshDate() {
+       List<Order> allOrderList= orderMapper.selectAllDateList();
+
+        allOrderList.forEach(order -> {
+            orderMapper.updatePaymentCreateDate(order);
+        });
+    }
 }
diff --git a/src/main/java/com/mzl/flower/service/payment/UserPaymentSybService.java b/src/main/java/com/mzl/flower/service/payment/UserPaymentSybService.java
index e756717..ea8f878 100644
--- a/src/main/java/com/mzl/flower/service/payment/UserPaymentSybService.java
+++ b/src/main/java/com/mzl/flower/service/payment/UserPaymentSybService.java
@@ -28,7 +28,9 @@
 import javax.servlet.http.HttpServletRequest;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.time.LocalTime;
 import java.util.List;
 import java.util.Map;
 import java.util.TreeMap;
@@ -227,6 +229,19 @@
                     order.setPaymentAmount(order.getTotalAmount());
                 }
                 order.setPaymentTime(up.getPaymentTimeCallback());
+
+                if(null!=order.getPaymentTime()){
+                    LocalDateTime paymentTime = order.getPaymentTime();
+                    LocalDate paymentDate = paymentTime.toLocalDate();
+                    LocalDateTime today1700 = paymentTime.with(LocalTime.of(17, 0));
+                    // 比较时间是否大于当天的 17:00
+                    if (paymentTime.isAfter(today1700)) {
+                        // 如果大于 17:00,设置为下一天的日期
+                        paymentDate = paymentDate.plusDays(1);
+                    }
+                    order.setPaymentDateSta(paymentDate);
+                }
+
                 order.setStatus(Constants.ORDER_STATUS.SEND.name());
             } else if (Constants.ORDER_STATUS_BACKEND.CANCEL.name().equals(orderStatus)){
                 order.setStatus(Constants.ORDER_STATUS.CANCEL.name());
diff --git a/src/main/java/com/mzl/flower/service/payment/UserPaymentV3Service.java b/src/main/java/com/mzl/flower/service/payment/UserPaymentV3Service.java
index 911682e..7d2009d 100644
--- a/src/main/java/com/mzl/flower/service/payment/UserPaymentV3Service.java
+++ b/src/main/java/com/mzl/flower/service/payment/UserPaymentV3Service.java
@@ -11,7 +11,6 @@
 import com.mzl.flower.dto.request.payment.UserPaymentDTO;
 import com.mzl.flower.entity.flower.Flower;
 import com.mzl.flower.entity.payment.*;
-import com.mzl.flower.entity.system.UserWechat;
 import com.mzl.flower.mapper.flower.FlowerMapper;
 import com.mzl.flower.mapper.payment.*;
 import com.mzl.flower.mapper.system.UserWechatMapper;
@@ -46,9 +45,7 @@
 import java.io.InputStreamReader;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
-import java.time.LocalDateTime;
-import java.time.ZoneId;
-import java.time.ZonedDateTime;
+import java.time.*;
 import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -181,7 +178,7 @@
         DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssXXX");
 
         // 使用formatter格式化ZonedDateTime
-        String formattedDateTime = zonedDateTime.plusMinutes(5).format(formatter);
+        String formattedDateTime = zonedDateTime.plusMinutes(15).format(formatter);
 
         return formattedDateTime; // 格式化日期
     }
@@ -331,6 +328,18 @@
                     order.setPaymentAmount(order.getTotalAmount());
                 }
                 order.setPaymentTime(up.getPaymentTimeCallback());
+                if(null!=order.getPaymentTime()){
+                    LocalDateTime paymentTime = order.getPaymentTime();
+                    LocalDate paymentDate = paymentTime.toLocalDate();
+                    LocalDateTime today1700 = paymentTime.with(LocalTime.of(17, 0));
+                    // 比较时间是否大于当天的 17:00
+                    if (paymentTime.isAfter(today1700)) {
+                        // 如果大于 17:00,设置为下一天的日期
+                        paymentDate = paymentDate.plusDays(1);
+                    }
+                    order.setPaymentDateSta(paymentDate);
+                }
+
                 order.setStatus(Constants.ORDER_STATUS.SEND.name());
             } else if (Constants.ORDER_STATUS_BACKEND.CANCEL.name().equals(orderStatus)){
                 order.setStatus(Constants.ORDER_STATUS.CANCEL.name());
diff --git a/src/main/java/com/mzl/flower/service/wallet/WalletReduceService.java b/src/main/java/com/mzl/flower/service/wallet/WalletReduceService.java
index e26494d..0baeaee 100644
--- a/src/main/java/com/mzl/flower/service/wallet/WalletReduceService.java
+++ b/src/main/java/com/mzl/flower/service/wallet/WalletReduceService.java
@@ -1,11 +1,9 @@
 package com.mzl.flower.service.wallet;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.extension.service.IService;
 import com.mzl.flower.dto.request.wallet.QueryWalletAmountDTO;
 import com.mzl.flower.dto.request.wallet.QueryWalletReduceDTO;
 import com.mzl.flower.dto.response.wallet.WalletReduceVO;
-import com.mzl.flower.entity.wallet.WalletDO;
 
 import java.math.BigDecimal;
 
@@ -23,11 +21,11 @@
     Page<WalletReduceVO> getPage(Page page, QueryWalletReduceDTO dto);
 
     /**
-     * 获取质检扣款钱
+     * 获取质检扣款钱(缺货补货)
      * @param queryWalletAmountDTO
      * @return
      */
-    BigDecimal getCheckReduceAmount(QueryWalletAmountDTO queryWalletAmountDTO);
+    BigDecimal getCheckLackReplaceAmount(QueryWalletAmountDTO queryWalletAmountDTO);
 
     /**
      * 获取售后质检扣款钱
@@ -42,4 +40,11 @@
      * @return
      */
     BigDecimal getStationFeeAmount(QueryWalletAmountDTO queryWalletAmountDTO);
+
+    /**
+     * 获取质检扣款钱(降级)
+     * @param queryWalletAmountDTO
+     * @return
+     */
+    BigDecimal getCheckReduceAmount(QueryWalletAmountDTO queryWalletAmountDTO);
 }
diff --git a/src/main/java/com/mzl/flower/web/payment/OrderController.java b/src/main/java/com/mzl/flower/web/payment/OrderController.java
index e87f9b3..476248d 100644
--- a/src/main/java/com/mzl/flower/web/payment/OrderController.java
+++ b/src/main/java/com/mzl/flower/web/payment/OrderController.java
@@ -23,6 +23,7 @@
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;
+import java.time.LocalDateTime;
 import java.util.List;
 
 @RestController
@@ -193,4 +194,18 @@
     public void exportOrderDetail(HttpServletResponse response, OrderQueryDTO queryOrderDTO) {
         orderService.exportOrderDetail(response, queryOrderDTO);
     }
+
+    @GetMapping("/time/now")
+    @ApiOperation(value = "订单导出")
+    public  ResponseEntity<Long> getNowTime() {
+        return returnData(R.SUCCESS.getCode(),System.currentTimeMillis());
+    }
+
+    @GetMapping("/elk/date")
+    @ApiOperation(value = "订单日期刷新")
+    public  ResponseEntity<Long> getElkDate() {
+        orderService.refreshDate();
+        return returnData(R.SUCCESS.getCode(),System.currentTimeMillis());
+    }
+
 }
diff --git a/src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateAppController.java b/src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateAppController.java
index fb33a94..8825f8c 100644
--- a/src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateAppController.java
+++ b/src/main/java/com/mzl/flower/web/v2/coupon/CouponTemplateAppController.java
@@ -101,7 +101,11 @@
         // 首页弹窗
         dto.setGetType(CouponGetTypeEnum.CENTER.getType());
 
-        return returnData(R.SUCCESS.getCode(), ConverterUtil.transList(couponTemplateService.getActivityEffectList(dto), CouponTemplateAppVO.class));
+        dto.setUserId(SecurityUtils.getUserId());
+
+//        return returnData(R.SUCCESS.getCode(), ConverterUtil.transList(couponTemplateService.getActivityEffectListWith(dto), CouponTemplateAppVO.class));
+
+        return returnData(R.SUCCESS.getCode(), ConverterUtil.transList(couponTemplateService.getActivityEffectListWithMine(dto), CouponTemplateAppVO.class));
 
     }
 
@@ -115,6 +119,17 @@
         return returnData(R.SUCCESS.getCode(), ConverterUtil.transList(couponRecordService.getMineCouponRecordList(dto), CouponTemplateAppVO.class));
 
     }
+
+    @GetMapping("/mine/unused/fit")
+    @ApiOperation(value = "我的优惠券-未使用", notes = "我的优惠券-未使用")
+    public ResponseEntity<ReturnDataDTO<Page<CouponTemplateVO>>> unusedFit(QueryMineCouponRecordDTO dto) {
+        // 未使用
+        dto.setStatus(CouponUsedStatusEnum.UNUSED.getType());
+        dto.setUserId(SecurityUtils.getUserId());
+
+        return returnData(R.SUCCESS.getCode(), ConverterUtil.transObject(couponRecordService.getUnusedFit(dto), CouponTemplateAppVO.class) );
+
+    }
     @GetMapping("/mine/used/list")
     @ApiOperation(value = "我的优惠券-已使用", notes = "我的优惠券-已使用")
     public ResponseEntity<ReturnDataDTO<Page<CouponTemplateVO>>> usedList(QueryMineCouponRecordDTO dto) {
diff --git a/src/main/resources/mapper/coupon/CouponTemplateMapperCustom.xml b/src/main/resources/mapper/coupon/CouponTemplateMapperCustom.xml
index cf3918e..485f9b1 100644
--- a/src/main/resources/mapper/coupon/CouponTemplateMapperCustom.xml
+++ b/src/main/resources/mapper/coupon/CouponTemplateMapperCustom.xml
@@ -141,6 +141,54 @@
         ORDER BY t.create_time DESC
         limit 1
     </select>
+    <select id="getActivityEffectListWithMine"
+            resultType="com.mzl.flower.dto.response.coupon.CouponTemplateVO">
+        select t2.*,t2.get_limit,IFNULL(t2.get_limit- t2.getNum,0) as left_num  from (
+            SELECT
+                t.*,
+                (
+                    SELECT count( 1 )
+                    FROM t_coupon_record cr
+                    WHERE  cr.coupon_id = t.id AND cr.deleted = 0
+                    <if test="param.userId != null and param.userId != ''">
+                        AND cr.user_id = #{param.userId}
+                    </if>
+
+                ) AS getNum,
+                (
+                    SELECT min( cr.create_time )
+                    FROM t_coupon_record cr
+                    WHERE cr.coupon_id = t.id AND cr.deleted = 0
+                    <if test="param.userId != null and param.userId != ''">
+                        AND cr.user_id = #{param.userId}
+                    </if>
+                ) AS record_create_time
+            FROM
+            t_coupon_template t
+            WHERE
+            t.deleted = FALSE
+            <if test="param.category != null and param.category != '' and param.category == 'activity' ">
+                AND t.get_start_date &lt;= NOW()
+                AND NOW() &lt;= t.get_end_date
+            </if>
+
+            <if test="param.category != null and param.category != ''">
+                AND category =  #{param.category}
+            </if>
+            <if test="param.status != null and param.status != ''">
+                AND status =  #{param.status}
+            </if>
+            <if test="param.getType != null and param.getType != ''">
+                AND t.get_type =  #{param.getType}
+            </if>
+
+        ) t2
+
+        ORDER BY
+        left_num desc,
+        create_time DESC,
+        record_create_time ASC
+    </select>
 
     <sql id="QueryPointSql">
         select *
diff --git a/src/main/resources/mapper/payment/OrderMapper.xml b/src/main/resources/mapper/payment/OrderMapper.xml
index 6bd3e15..4f847ac 100644
--- a/src/main/resources/mapper/payment/OrderMapper.xml
+++ b/src/main/resources/mapper/payment/OrderMapper.xml
@@ -7,6 +7,7 @@
         where status_backend = 'SEND' and partner_id is not null
     </update>
 
+
     <select id="getPartnerOrderReceive" resultType="com.mzl.flower.entity.payment.Order">
         select * from t_order t where status_backend = 'SEND' and partner_id is not null
     </select>
@@ -382,4 +383,24 @@
             and o.create_time &lt;= #{endTime}
         </if>
     </select>
+
+<!--    获取所有的订单数据,以及时间数据-->
+    <select id="selectAllDateList" resultType="com.mzl.flower.entity.payment.Order">
+        SELECT t.id,t.payment_time,
+               CASE
+                   WHEN t.payment_time > DATE(t.payment_time) + INTERVAL 17 HOUR THEN DATE(t.payment_time) + INTERVAL 1 DAY
+                   ELSE DATE(t.payment_time)
+                   END AS payment_date,
+               t.create_time,
+               CASE
+                   WHEN t.create_time > DATE(t.create_time) + INTERVAL 17 HOUR THEN DATE(t.create_time) + INTERVAL 1 DAY
+                   ELSE DATE(t.create_time)
+                   END AS create_date
+        FROM t_order t
+        order by t.create_time desc
+    </select>
+
+    <update id="updatePaymentCreateDate">
+        update t_order  set payment_date_sta=#{order.paymentDate}, create_date_sta=#{order.createDate} where id=#{order.id}
+    </update>
 </mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/wallet/WalletMapper.xml b/src/main/resources/mapper/wallet/WalletMapper.xml
index 9131387..3e88bfa 100644
--- a/src/main/resources/mapper/wallet/WalletMapper.xml
+++ b/src/main/resources/mapper/wallet/WalletMapper.xml
@@ -23,9 +23,7 @@
 
     </resultMap>
     <select id="getWaittingSettlementAmount" resultType="java.math.BigDecimal">
-      <!-- <include refid="supplier_settlement_amount"></include>-->
-        <include refid="supplier_settlement_amount_timing"></include>
-
+        <include refid="supplier_settlement_amount_timing3"></include>
     </select>
 
     <!--    总交易额-->
@@ -42,16 +40,6 @@
 
 
     <!--    待结算-->
-    <sql id="supplier_settlement_amount">
-        SELECT IFNULL(sum(settlement_amount),0) AS settlement_amount
-        FROM t_order_settlement OS
-        WHERE OS.DELETED=0
-          AND OS.TYPE='supplier'
-          AND OS.status='PENDING'
-          AND USER_ID=#{dto.userId}
-    </sql>
-
-
     <sql id="supplier_settlement_amount_timing">
         select
             sum(t2.final_price) as settlement_amount
@@ -60,8 +48,7 @@
                     t.order_item_id,
                     t.supplier_id,
                     t.supplier_price,
-                    t.num-t.reduce_num-t.replace_num-t.lack_num as final_num,
-                    t.supplier_price*(t.num-t.reduce_num-t.replace_num-t.lack_num )-t.fee_supplier-t.station_fee as final_price,
+                    t.supplier_price*(t.num-t.replace_num-t.lack_num )- t.deduct_amount -t.fee_supplier-t.station_fee as final_price,
                     t.fee_supplier,
                     t.station_fee
                 from (
@@ -72,7 +59,42 @@
                              o.payment_time,
                              oi.supplier_price,
                              oi.num as num,
-                             IFNULL( (select oic.num from t_order_item_check oic where oic.deleted=0 and  oic.order_item_id = oi.id and oic.type = 'reduce' and oic.audit_status='AGREED'),0) as reduce_num,
+                             IFNULL( (select oic.deduct_amount from t_order_item_check oic where oic.deleted=0 and  oic.order_item_id = oi.id and oic.type = 'reduce' and oic.audit_status='AGREED'),0) as deduct_amount,
+                             IFNULL( (select oic.num from t_order_item_check oic where oic.deleted=0 and  oic.order_item_id = oi.id and oic.type = 'replace' and oic.audit_status='AGREED'),0) as replace_num,
+                             IFNULL( (select oic.num from t_order_item_check oic where oic.deleted=0 and  oic.order_item_id = oi.id and oic.type = 'lack' and oic.audit_status='AGREED'),0) as lack_num,
+                             IFNULL( (select ois.fee_supplier from t_order_item_sales ois where ois.deleted=0 and ois.order_item_id = oi.id and ois.status='AGREED'),0) as fee_supplier,
+                             IFNULL( (select ois.station_fee from t_order_item_settlement ois where ois.deleted=0 and ois.order_item_id = oi.id ),0) as station_fee
+                         FROM t_order_item oi
+                         LEFT JOIN t_order o ON oi.order_id = o.id
+                         WHERE o.deleted=0
+                           and o.status_backend not in ('PENDING','CANCEL','REFUND','COMPLETED','EVALUATE')
+                           and oi.supplier_id = #{dto.supplierId}
+                     ) t
+            ) t2
+
+
+    </sql>
+
+    <sql id="supplier_settlement_amount_timing3">
+        select
+            sum(t2.final_price) as settlement_amount
+        from(
+                select
+                    t.order_item_id,
+                    t.supplier_id,
+                    t.supplier_price,
+                    t.supplier_price*(t.num-t.replace_num-t.lack_num )- t.deduct_amount -t.fee_supplier-t.station_fee as final_price,
+                    t.fee_supplier,
+                    t.station_fee
+                from (
+                         SELECT
+                             o.order_no,
+                             oi.id as order_item_id,
+                             oi.supplier_id,
+                             o.payment_time,
+                             oi.supplier_price,
+                             oi.num as num,
+                             IFNULL( (select oic.deduct_amount from t_order_item_check oic where oic.deleted=0 and  oic.order_item_id = oi.id and oic.type = 'reduce' and oic.audit_status='AGREED'),0) as deduct_amount,
                              IFNULL( (select oic.num from t_order_item_check oic where oic.deleted=0 and  oic.order_item_id = oi.id and oic.type = 'replace' and oic.audit_status='AGREED'),0) as replace_num,
                              IFNULL( (select oic.num from t_order_item_check oic where oic.deleted=0 and  oic.order_item_id = oi.id and oic.type = 'lack' and oic.audit_status='AGREED'),0) as lack_num,
                              IFNULL( (select ois.fee_supplier from t_order_item_sales ois where ois.deleted=0 and ois.order_item_id = oi.id and ois.status='AGREED'),0) as fee_supplier,
@@ -84,7 +106,6 @@
                            and oi.supplier_id = #{dto.supplierId}
                      ) t
             ) t2
-
     </sql>
 
 </mapper>
diff --git a/src/main/resources/mapper/wallet/WalletReduceMapper.xml b/src/main/resources/mapper/wallet/WalletReduceMapper.xml
index fd03188..de9febc 100644
--- a/src/main/resources/mapper/wallet/WalletReduceMapper.xml
+++ b/src/main/resources/mapper/wallet/WalletReduceMapper.xml
@@ -52,8 +52,8 @@
                  on oi.order_id=o.id
                  left join t_code_value check_type
                  on check_type.value=oic.type and check_type.type_code='CHECK_TYPE'
-                 where
-                    o.deleted=0
+                 where o.deleted=0
+                    and oic.type in ('lack','replace')
                     and o.status_backend not in ('PENDING','CANCEL','REFUND')
                     and  oic.deleted=0  and oic.audit_status='AGREED' and oi.deleted=0 and o.deleted=0
                     and o.payment_time &gt;= #{dto.walletOnlineTime}
@@ -72,11 +72,48 @@
                 <if test="dto.endDate != null">
                     and DATE_FORMAT(o.payment_time, '%Y-%m-%d') &lt;= #{dto.endDate}
                 </if>
+                union
+                    select  oic.id as id ,
+                    oic.deduct_amount AS fee,
+                    oic.audit_time AS audit_time,
+                    o.payment_time as payment_time,
+                    oic.type as type,
+                    check_type.label as type_name,
+                    o.order_no as order_no,
+                    oi.supplier_id as supplier_id
+                    from t_order_item_check oic
+                    left join t_order_item oi
+                    on oic.order_item_id=oi.id
+                    left join t_order o
+                    on oi.order_id=o.id
+                    left join t_code_value check_type
+                    on check_type.value=oic.type and check_type.type_code='CHECK_TYPE'
+                    where o.deleted=0
+                    and oic.type in ('reduce')
+                    and o.status_backend not in ('PENDING','CANCEL','REFUND')
+                    and  oic.deleted=0  and oic.audit_status='AGREED' and oi.deleted=0 and o.deleted=0
+                    and o.payment_time &gt;= #{dto.walletOnlineTime}
+                    <if test="dto.supplierId != null">
+                        and oi.supplier_id = #{dto.supplierId}
+                    </if>
+                    <!--                <if test="dto.startDate != null">-->
+                    <!--                    and DATE_FORMAT(oic.audit_time, '%Y-%m-%d') &gt;= #{dto.startDate}-->
+                    <!--                </if>-->
+                    <!--                <if test="dto.endDate != null">-->
+                    <!--                    and DATE_FORMAT(oic.audit_time, '%Y-%m-%d') &lt;= #{dto.endDate}-->
+                    <!--                </if>-->
+                    <if test="dto.startDate != null">
+                        and DATE_FORMAT(o.payment_time, '%Y-%m-%d') &gt;= #{dto.startDate}
+                    </if>
+                    <if test="dto.endDate != null">
+                        and DATE_FORMAT(o.payment_time, '%Y-%m-%d') &lt;= #{dto.endDate}
+                    </if>
+
              ) t
 
         order by audit_time desc
     </select>
-    <select id="getCheckReduceAmount" resultType="java.math.BigDecimal">
+    <select id="getCheckLackReplaceAmount" resultType="java.math.BigDecimal">
         select  sum(oic.num*oi.supplier_price)
         from t_order_item_check oic
         left join t_order_item oi
@@ -86,6 +123,7 @@
         left join t_code_value check_type
         on check_type.value=oic.type and check_type.type_code='CHECK_TYPE'
         where o.deleted=0
+          and oic.type in ('lack','replace')
           and o.status_backend not in ('PENDING','CANCEL','REFUND')
           and oic.deleted=0  and oic.audit_status='AGREED' and oi.deleted=0 and o.deleted=0
           and oi.supplier_id = #{dto.supplierId}
@@ -103,15 +141,33 @@
           and oi.supplier_id = #{dto.supplierId}
           and o.payment_time &gt;= #{dto.startTime}
     </select>
+
     <select id="getStationFeeAmount" resultType="java.math.BigDecimal">
         SELECT sum(ois.station_fee)
         FROM t_order_item_settlement ois
-        join t_order_item oi on oi.id = ois.order_item_id
-        left join t_order o on oi.order_id=o.id
+                 join t_order_item oi on oi.id = ois.order_item_id
+                 left join t_order o on oi.order_id=o.id
         where o.deleted=0
           and o.status_backend not in ('PENDING','CANCEL','REFUND')
           and  ois.deleted=0 and oi.deleted=0
           and oi.supplier_id = #{dto.supplierId}
           and o.payment_time &gt;= #{dto.startTime}
     </select>
+    <select id="getCheckReduceAmount" resultType="java.math.BigDecimal">
+        select  sum(oic.deduct_amount)
+        from t_order_item_check oic
+         left join t_order_item oi
+         on oic.order_item_id=oi.id
+         left join t_order o
+         on oi.order_id=o.id
+         left join t_code_value check_type
+        on check_type.value=oic.type and check_type.type_code='CHECK_TYPE'
+        where o.deleted=0
+          and oic.type in ('reduce')
+          and o.status_backend not in ('PENDING','CANCEL','REFUND')
+          and oic.deleted=0  and oic.audit_status='AGREED' and oi.deleted=0 and o.deleted=0
+          and oi.supplier_id = #{dto.supplierId}
+          and o.payment_time &gt;= #{dto.startTime}
+
+    </select>
 </mapper>

--
Gitblit v1.9.3