From 118623071a97b66f21c29e2bc02b8f15855ede5d Mon Sep 17 00:00:00 2001
From: Cui Zhi Feng <cuizf@fengyuntec.com>
Date: 星期三, 25 九月 2024 19:54:11 +0800
Subject: [PATCH] 均价计算 优化

---
 src/main/java/com/mzl/flower/thread/FlowerCategoryPriceThread.java |   76 ++++++++++++++++++++++++++++++++++++++
 src/main/java/com/mzl/flower/schedule/ScheduleService.java         |   25 +++---------
 2 files changed, 82 insertions(+), 19 deletions(-)

diff --git a/src/main/java/com/mzl/flower/schedule/ScheduleService.java b/src/main/java/com/mzl/flower/schedule/ScheduleService.java
index 109e14c..765abb7 100644
--- a/src/main/java/com/mzl/flower/schedule/ScheduleService.java
+++ b/src/main/java/com/mzl/flower/schedule/ScheduleService.java
@@ -14,9 +14,9 @@
 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.thread.FlowerCategoryPriceThread;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.time.DateFormatUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -38,9 +38,6 @@
 
     @Autowired
     private PartnerMapper partnerMapper;
-
-    @Autowired
-    private FlowerService flowerService;
 
     @Autowired
     private OrderMapper orderMapper;
@@ -75,23 +72,13 @@
     @Autowired
     private CouponTemplateService2 couponTemplateService2;
 
-    @Scheduled(cron = "1 0/30 * * * ?")
+    @Autowired
+    private FlowerCategoryPriceThread thread;
+
+    @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"));
     }
 
diff --git a/src/main/java/com/mzl/flower/thread/FlowerCategoryPriceThread.java b/src/main/java/com/mzl/flower/thread/FlowerCategoryPriceThread.java
new file mode 100644
index 0000000..6ea0674
--- /dev/null
+++ b/src/main/java/com/mzl/flower/thread/FlowerCategoryPriceThread.java
@@ -0,0 +1,76 @@
+package com.mzl.flower.thread;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.mzl.flower.entity.flower.FlowerCategory;
+import com.mzl.flower.entity.partner.Partner;
+import com.mzl.flower.mapper.flower.FlowerCategoryMapper;
+import com.mzl.flower.mapper.partner.PartnerMapper;
+import com.mzl.flower.service.flower.FlowerService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+@Component
+@Slf4j
+public class FlowerCategoryPriceThread {
+
+    ExecutorService fixedThreadPool = Executors.newFixedThreadPool(3);
+
+    @Autowired
+    private FlowerService flowerService;
+
+    @Autowired
+    private FlowerCategoryMapper categoryMapper;
+
+    @Autowired
+    private PartnerMapper partnerMapper;
+
+    public void run() {
+        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){
+                addTask(flowerService, c.getId(), null);
+
+                if(ls != null && ls.size() > 0){
+                    for(Partner p : ls){
+                        addTask(flowerService, c.getId(), p.getId());
+                    }
+                }
+            }
+        }
+    }
+
+    private void addTask(FlowerService service, Long categoryId, Long partnerId) {
+        SelfTask t = new SelfTask(service, categoryId, partnerId);
+        fixedThreadPool.execute(t);
+    }
+
+    private class SelfTask implements Runnable {
+        private FlowerService service;
+
+        private Long categoryId;
+
+        private Long partnerId;
+
+        public SelfTask(FlowerService service, Long categoryId, Long partnerId) {
+            this.service = service;
+            this.categoryId = categoryId;
+            this.partnerId = partnerId;
+        }
+
+        public void run() {
+            try {
+                service.calculateCategoryDaily(categoryId, partnerId);
+            } catch (Exception e) {
+                log.error("==> 计算均价 categoryId: " + categoryId + "; partnerId: " + partnerId + "; 错误信息:" + e.getMessage());
+            }
+        }
+    }
+
+}

--
Gitblit v1.9.3