From 53b823e2b1444e33f359fba79f8ff1e078253891 Mon Sep 17 00:00:00 2001
From: cloudroam <cloudroam>
Date: 星期四, 14 十一月 2024 09:26:10 +0800
Subject: [PATCH] add:-商户列表需要增加下单次数统计(已退款、已取消、待付款的不统计在内)

---
 src/main/java/com/mzl/flower/schedule/ScheduleService.java |  230 +++++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 files changed, 207 insertions(+), 23 deletions(-)

diff --git a/src/main/java/com/mzl/flower/schedule/ScheduleService.java b/src/main/java/com/mzl/flower/schedule/ScheduleService.java
index 75f9e07..36afd60 100644
--- a/src/main/java/com/mzl/flower/schedule/ScheduleService.java
+++ b/src/main/java/com/mzl/flower/schedule/ScheduleService.java
@@ -1,28 +1,53 @@
 package com.mzl.flower.schedule;
 
+import com.aliyuncs.exceptions.ClientException;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.mzl.flower.constant.Constants;
+import com.mzl.flower.constant.LockConstants;
+import com.mzl.flower.dto.response.member.MemberGrowthRecordVO;
+import com.mzl.flower.dto.response.payment.OrderSettlementDetailDTO;
 import com.mzl.flower.entity.flower.FlowerCategory;
 import com.mzl.flower.entity.partner.Partner;
 import com.mzl.flower.entity.payment.Order;
 import com.mzl.flower.entity.payment.Transfer;
+import com.mzl.flower.entity.wallet.WalletBillRecordDO;
+import com.mzl.flower.entity.wallet.WalletDO;
 import com.mzl.flower.mapper.flower.FlowerCategoryMapper;
+import com.mzl.flower.mapper.member.MemberGrowthRecordMapper;
 import com.mzl.flower.mapper.partner.PartnerMapper;
 import com.mzl.flower.mapper.payment.OrderMapper;
+import com.mzl.flower.mapper.payment.OrderSettlementDetailMapper;
+import com.mzl.flower.mapper.wallet.WalletBillRecordMapper;
+import com.mzl.flower.mapper.wallet.WalletMapper;
+import com.mzl.flower.service.BaseService;
 import com.mzl.flower.service.coupon.CouponRecordService;
+import com.mzl.flower.service.coupon.CouponTemplateService2;
 import com.mzl.flower.service.flower.FlowerCategoryService;
-import com.mzl.flower.service.flower.FlowerService;
+import com.mzl.flower.service.menber.impl.GrowthValueDealService;
 import com.mzl.flower.service.payment.*;
+import com.mzl.flower.service.wallet.WalletBillRecordService;
+import com.mzl.flower.service.wallet.WalletService;
+import com.mzl.flower.thread.FlowerCategoryPriceThread;
+import com.mzl.flower.utils.SmsUtil;
+import com.mzl.flower.utils.UUIDGenerator;
 import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang3.time.DateFormatUtils;
+import org.redisson.api.RLock;
+import org.redisson.api.RedissonClient;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Profile;
 import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
+import org.springframework.util.ObjectUtils;
 
+import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.time.LocalTime;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.concurrent.TimeUnit;
 
 @Component
 @Slf4j
@@ -33,9 +58,6 @@
 
     @Autowired
     private PartnerMapper partnerMapper;
-
-    @Autowired
-    private FlowerService flowerService;
 
     @Autowired
     private OrderMapper orderMapper;
@@ -59,25 +81,46 @@
     private OrderItemSettlementService orderItemSettlementService;
 
     @Autowired
+    private GrowthValueDealService growthValueDealService;
+
+    @Autowired
     private CouponRecordService couponRecordService;
 
-    @Scheduled(cron = "1 0/20 * * * ?")
+    @Autowired
+    private MemberGrowthRecordMapper memberGrowthRecordMapper;
+
+    @Autowired
+    private CouponTemplateService2 couponTemplateService2;
+
+    @Autowired
+    private FlowerCategoryPriceThread thread;
+
+    @Autowired
+    private BaseService baseService;
+
+    @Autowired
+    private WalletBillRecordService walletBillRecordService;
+
+    @Autowired
+    private OrderSettlementDetailMapper orderSettlementDetailMapper;
+
+    @Autowired
+    private WalletService walletService;
+
+    @Autowired
+    private RedissonClient redissonClient;
+
+    @Autowired
+    private WalletBillRecordMapper walletBillRecordMapper;
+
+    @Autowired
+    private WalletMapper walletMapper;
+
+
+    @Scheduled(cron = "1 1 0/2 * * ?")
     public void calculateAvePrice() {
         log.info("均价计算开始:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss"));
-        List<FlowerCategory> cLs = categoryMapper.selectList(new QueryWrapper<FlowerCategory>()
-                .isNotNull("parent_id"));
-        if(cLs != null && cLs.size() > 0){
-            List<Partner> ls = partnerMapper.selectList(new QueryWrapper<Partner>().eq("status", "P"));
-            for(FlowerCategory c : cLs){
-                flowerService.calculateCategoryDaily(c.getId(), null);
-
-                if(ls != null && ls.size() > 0){
-                    for(Partner p : ls){
-                        flowerService.calculateCategoryDaily(c.getId(), p.getId());
-                    }
-                }
-            }
-        }
+        thread.run();
         log.info("均价计算结束:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss"));
     }
 
@@ -174,6 +217,8 @@
                 try {
                     paymentV3Service.checkTransferStatus(t);
                     settlementService.updateSettlementStatus(t.getId());
+                    //2024-10-24更新钱包提现信息
+                    walletBillRecordService.updateTransferStatus(t.getId());
                 } catch (Exception e) {
                     log.error(e.getMessage(), e);
                 }
@@ -190,6 +235,31 @@
         log.info("账单结束:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss"));
     }
 
+    //成长值降级定时任务
+    @Scheduled(cron = "0 0 5 * * ?")
+    public void deductGrowthValue() {
+        log.info("成长值扣除开始:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss"));
+        //获取当前员工
+        List<Order> orderList = orderMapper.getOrderInfoByReceiveTime();
+        if(!CollectionUtils.isEmpty(orderList)){
+            orderList.forEach(o->{
+                try {
+                    LocalDateTime now = LocalDateTime.now();
+                    LocalDate nowDate = now.toLocalDate();
+                    List<MemberGrowthRecordVO> memberGrowthRecordVOS = memberGrowthRecordMapper.selectDowngradingByUserId(o.getCreateBy(), nowDate);
+                    if (CollectionUtils.isEmpty(memberGrowthRecordVOS)) {
+                        growthValueDealService.deductionGrowthValue(o);
+                    }
+                } catch (Exception e) {
+                    // 记录错误信息,例如将错误信息写入日志
+                    log.info("处理订单 " + o.getId() + " 时出错: " + e.getMessage());
+                }
+            });
+        }
+        log.info("成长值扣除结束:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss"));
+    }
+
+
     @Scheduled(cron = "0 30 0 1 * ?")
     public void grantVipCouponRecordList() {
         log.info("会员优惠券开始:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss"));
@@ -198,10 +268,124 @@
     }
 
     @Scheduled(cron = "0 30 0 1 * ?")
-    public void expiredVipCouponRecordList() {
-        log.info("会员优惠券过期开始:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss"));
-        couponRecordService.expiredCouponRecordByListCurMonth();
-        log.info("会员优惠券过期结束:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss"));
+    public void expiredCouponRecordLastMon() {
+        log.info("会员优惠券开始:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss"));
+        couponRecordService.expiredCouponRecordLastMon();
+        log.info("会员优惠券结束:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss"));
+    }
+
+
+    @Scheduled(cron = "0 0/5 * * * ?")
+    public void expireActivityCouponTemplateAll() {
+        log.info("优惠券模版过期下架开始:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss"));
+
+        // 下架有所的过期的优惠券
+        couponTemplateService2.expireActivityCouponTemplateAll();
+
+        log.info("优惠券模版过期下架开始:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss"));
+    }
+
+    @Scheduled(cron = "0 0/5 * * * ?")
+    public void expireCouponRecordAll() {
+        log.info("优惠券记录过期开始:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss"));
+
+        // 下架有所的过期的优惠券
+        couponRecordService.expireCouponRecordAll();
+
+        log.info("优惠券记录过期开始:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss"));
+    }
+
+    @Scheduled(cron = "0 15 17 * * ?")
+    @Profile("prod")
+    public void DealSendMessageInfoBySupplier() {
+        log.info("供应商下单供货提示开始:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss"));
+        // 获取当前日期
+        LocalDate currentDate = LocalDate.now();
+        // 设置开始时间为前一天的17点以后
+        LocalDateTime startDateTime = LocalDateTime.of(currentDate.minusDays(1), LocalTime.of(17, 0));
+        // 设置结束时间为当前日期的17点
+        LocalDateTime endDateTime = LocalDateTime.of(currentDate, LocalTime.of(17, 0));
+        System.out.println("开始时间: " + startDateTime);
+        System.out.println("结束时间: " + endDateTime);
+        List<String> sends = orderMapper.getWaitSendMessageInfoBySupplier("COLLECTION", startDateTime, endDateTime);
+        if(CollectionUtils.isNotEmpty(sends)) {
+            sends.forEach(s -> {
+                try {
+                    SmsUtil.sendSms(s, "SMS_474905508", null);
+                } catch (ClientException e) {
+                    log.error("发送短信失败,手机号:" + s, e);
+                }
+            });
+        }
+        log.info("供应商下单供货提示结束:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss"));
+    }
+
+    public void dealHistoryAmount() {
+        log.info("处理历史结算金额开始:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss"));
+        List<OrderSettlementDetailDTO> orderSettlementDetailDTOS = orderSettlementDetailMapper.selectSettlementDetailLists();
+        orderSettlementDetailDTOS.forEach(o->{
+            BigDecimal totalAmount = new BigDecimal(0);//交易合计
+            BigDecimal checkFee = new BigDecimal(0);//降级扣款
+            BigDecimal lackFee = new BigDecimal(0);//缺货扣款
+            BigDecimal replaceFee = new BigDecimal(0);//补货扣款
+            BigDecimal stationFee = new BigDecimal(0);//集货站运费
+            BigDecimal salesFee = new BigDecimal(0);//售后理赔
+
+            totalAmount = totalAmount.add(o.getTotalAmount());
+            checkFee = checkFee.add(o.getCheckFee());
+            lackFee = lackFee.add(o.getLackFee() == null ? new BigDecimal(0): o.getLackFee());
+            replaceFee = replaceFee.add(o.getReplaceFee() == null ? new BigDecimal(0): o.getReplaceFee());
+            stationFee = stationFee.add(o.getStationFee());
+            salesFee = salesFee.add(o.getSalesFee());
+
+            BigDecimal settlementAmount = totalAmount.subtract(checkFee).subtract(lackFee).subtract(replaceFee)
+                    .subtract(salesFee).subtract(stationFee);//结算金额
+
+            WalletDO walletDO = walletService.getOrCreateBySupplierId(o.getSupplierId());
+            RLock lock = redissonClient.getLock(String.format(LockConstants.WALLET_ID_KEY, walletDO.getId()));
+            try {
+                if (lock.tryLock(10, 30, TimeUnit.SECONDS)) {
+                    try {
+                        if(settlementAmount.compareTo(BigDecimal.ZERO) > 0) {
+                            WalletBillRecordDO walletBillRecord = new WalletBillRecordDO();
+                            walletBillRecord.setId(UUIDGenerator.getUUID());
+                            WalletDO walletDOInfo = walletService.getBySupplierId(o.getSupplierId());
+                            //增加供应商结算金额保存到钱包
+                            walletBillRecord.setSupplierId(o.getSupplierId());
+                            walletBillRecord.setWalletId(walletDOInfo.getId());
+                            walletBillRecord.setSettlementId(o.getSettlementId());
+                            walletBillRecord.setOrderItemId(o.getOrderItemId());
+                            //变动金额等于供应商收入
+                            walletBillRecord.setTotalAmount(settlementAmount);
+                            walletBillRecord.setType(Constants.BILL_CHANGE_TYPE.settlement.name());
+                            walletBillRecord.setMethod(Constants.BILL_CHANGE_METHOD.add.name());
+                            walletBillRecord.setOriginalAmount(walletDOInfo.getTotalAmount());
+                            walletBillRecord.setChangeAmount(settlementAmount);
+                            walletBillRecord.setBalance(walletDOInfo.getWithdrawableAmount().add(settlementAmount));
+                            Order order = orderMapper.selectById(o.getOrderId());
+                            if (!ObjectUtils.isEmpty(order)) {
+                                walletBillRecord.setRemark("订单完成(订单号" + order.getOrderNo() + ")" + ",获得收入");
+                                walletBillRecord.setOrderNo(order.getOrderNo());
+                            }
+                            //更新钱包
+                            //可提现金额=钱包余额=结算金额
+                            walletDOInfo.setWithdrawableAmount(walletDOInfo.getWithdrawableAmount().add(settlementAmount));
+                            walletDOInfo.setTotalAmount(walletDOInfo.getWithdrawableAmount());
+                            //已结算金额
+                            walletDOInfo.setSettledAmount(walletDOInfo.getSettledAmount().add(settlementAmount));
+                            walletMapper.updateById(walletDOInfo);
+                            walletBillRecord.create();
+                            walletBillRecordMapper.insert(walletBillRecord);
+                        }
+                    } finally {
+                        lock.unlock();
+                    }
+                }
+            } catch (InterruptedException e) {
+                throw new RuntimeException(e);
+            }
+    });
+        log.info("处理历史结算金额完成:" + DateFormatUtils.format(System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss"));
     }
 
 }

--
Gitblit v1.9.3