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 <= NOW() + AND NOW() <= 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 <= #{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 >= #{dto.walletOnlineTime} @@ -72,11 +72,48 @@ <if test="dto.endDate != null"> and DATE_FORMAT(o.payment_time, '%Y-%m-%d') <= #{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 >= #{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') >= #{dto.startDate}--> + <!-- </if>--> + <!-- <if test="dto.endDate != null">--> + <!-- and DATE_FORMAT(oic.audit_time, '%Y-%m-%d') <= #{dto.endDate}--> + <!-- </if>--> + <if test="dto.startDate != null"> + and DATE_FORMAT(o.payment_time, '%Y-%m-%d') >= #{dto.startDate} + </if> + <if test="dto.endDate != null"> + and DATE_FORMAT(o.payment_time, '%Y-%m-%d') <= #{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 >= #{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 >= #{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 >= #{dto.startTime} + + </select> </mapper> -- Gitblit v1.9.3