diff --git a/src/main/java/au/com/royalpay/payment/manage/management/sysconfig/web/SysConfigController.java b/src/main/java/au/com/royalpay/payment/manage/management/sysconfig/web/SysConfigController.java index fe1d50cfa..cee5b6558 100644 --- a/src/main/java/au/com/royalpay/payment/manage/management/sysconfig/web/SysConfigController.java +++ b/src/main/java/au/com/royalpay/payment/manage/management/sysconfig/web/SysConfigController.java @@ -21,7 +21,7 @@ public class SysConfigController { @Resource private ClearDateManager clearDateManager; - @ManagerMapping(value = "/base", method = RequestMethod.GET, role = ManagerRole.DEVELOPER) + @ManagerMapping(value = "/base", method = RequestMethod.GET) public JSONObject getBaseConfig() { return sysConfigManager.getSysConfig(); } diff --git a/src/main/java/au/com/royalpay/payment/manage/task/CustomerImpressionTask.java b/src/main/java/au/com/royalpay/payment/manage/task/CustomerImpressionTask.java index d64c1ce29..7e697d888 100644 --- a/src/main/java/au/com/royalpay/payment/manage/task/CustomerImpressionTask.java +++ b/src/main/java/au/com/royalpay/payment/manage/task/CustomerImpressionTask.java @@ -1,6 +1,10 @@ package au.com.royalpay.payment.manage.task; +import java.util.ArrayList; import java.util.List; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; import javax.annotation.Resource; @@ -24,11 +28,32 @@ public class CustomerImpressionTask { @Resource private CustomerImpressionService customerImpressionService; + private ThreadPoolExecutor generatePool = new ThreadPoolExecutor(10, 30, 5, TimeUnit.SECONDS, new LinkedBlockingQueue()); + @Scheduled(cron = "0 0 3 * * ?") public void generate() { List clients = clientMapper.listValidClient(); - clients.forEach(p -> { - customerImpressionService.generate(p.getIntValue("client_id")); - }); + List> splitList = new ArrayList<>(); + for (int i = 0; i < clients.size(); i+=200) { + if(i+200>clients.size()){ + splitList.add(clients.subList(i,clients.size())); + }else { + splitList.add(clients.subList(i,i+200)); + } + + } + for (List splitClients : splitList) { + Runnable task = () -> splitClients.forEach((p)->{ + System.out.println("当前执行到"+p.getIntValue("client_id")); + customerImpressionService.generate(p.getIntValue("client_id")); + }); + generatePool.execute(task); + } + generatePool.shutdown(); + try { + generatePool.awaitTermination(5, TimeUnit.HOURS); + } catch (InterruptedException e) { + e.printStackTrace(); + } } } diff --git a/src/test/java/au/com/royalpay/payment/manage/apps/core/impls/CustomerImpressionImplTest.java b/src/test/java/au/com/royalpay/payment/manage/apps/core/impls/CustomerImpressionImplTest.java index 53f8d535c..df64a02c2 100644 --- a/src/test/java/au/com/royalpay/payment/manage/apps/core/impls/CustomerImpressionImplTest.java +++ b/src/test/java/au/com/royalpay/payment/manage/apps/core/impls/CustomerImpressionImplTest.java @@ -1,9 +1,12 @@ package au.com.royalpay.payment.manage.apps.core.impls; -import au.com.royalpay.payment.manage.apps.core.CustomerImpressionService; -import au.com.royalpay.payment.manage.mappers.system.ClientMapper; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; -import com.alibaba.fastjson.JSONObject; +import javax.annotation.Resource; import org.junit.Test; import org.junit.runner.RunWith; @@ -11,9 +14,10 @@ import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.ActiveProfiles; import org.springframework.test.context.junit4.SpringRunner; -import java.util.List; +import com.alibaba.fastjson.JSONObject; -import javax.annotation.Resource; +import au.com.royalpay.payment.manage.apps.core.CustomerImpressionService; +import au.com.royalpay.payment.manage.mappers.system.ClientMapper; /** * Created by wangning on 05/01/2018. @@ -26,6 +30,9 @@ public class CustomerImpressionImplTest { private CustomerImpressionService customerImpression; @Resource private ClientMapper clientMapper; + + private ThreadPoolExecutor generatePool = new ThreadPoolExecutor(10, 30, 5, TimeUnit.SECONDS, new LinkedBlockingQueue()); + @Test public void generate() throws Exception { customerImpression.generate(9); @@ -34,9 +41,28 @@ public class CustomerImpressionImplTest { @Test public void generateAll(){ List clients = clientMapper.listValidClient(); - clients.forEach(p -> { - customerImpression.generate(p.getIntValue("client_id")); - }); + List> splitList = new ArrayList<>(); + for (int i = 0; i < clients.size(); i+=200) { + if(i+200>clients.size()){ + splitList.add(clients.subList(i,clients.size())); + }else { + splitList.add(clients.subList(i,i+200)); + } + + } + for (List splitClients : splitList) { + Runnable task = () -> splitClients.forEach((p)->{ + System.out.println("当前执行到"+p.getIntValue("client_id")); + customerImpression.generate(p.getIntValue("client_id")); + }); + generatePool.execute(task); + } + generatePool.shutdown(); + try { + generatePool.awaitTermination(5, TimeUnit.HOURS); + } catch (InterruptedException e) { + e.printStackTrace(); + } } } \ No newline at end of file