Browse Source

生成消息开了线程,要等消息生成后调用存储过程

git-svn-id: svn+ssh://10.10.101.21/source/platform/platform-b2b@10104 f3bf4e98-0cf0-11e4-a00c-a99a8b9d557d
wangmh 8 years ago
parent
commit
5382f38ebb

+ 47 - 0
src/main/java/com/uas/platform/b2b/core/util/ThreadTask.java

@@ -0,0 +1,47 @@
+package com.uas.platform.b2b.core.util;
+
+import java.util.concurrent.ArrayBlockingQueue;
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Created by wangmh on 2017/7/19.
+ */
+public class ThreadTask {
+
+    private static ThreadTask threadTask = new ThreadTask();
+
+    /**
+     * 线程池
+     */
+    private ThreadPoolExecutor executor;
+
+    /**
+     * 核心线程池大小
+     */
+    private static final int corePoolSize = 5;
+
+    /**
+     * 最大线程池大小
+     */
+    private static final int maximumPoolSize = 10;
+
+    /**
+     * 阻塞任务队列
+     */
+    private BlockingQueue<Runnable> workQueue;
+
+    private ThreadTask() {
+        workQueue = new ArrayBlockingQueue<Runnable>(maximumPoolSize);
+        this.executor = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, 0L, TimeUnit.MILLISECONDS, workQueue);
+    }
+
+    public static ThreadTask getInstance(){
+        return threadTask;
+    }
+
+    public void execute(Runnable r){
+        executor.execute(r);
+    }
+}

+ 17 - 5
src/main/java/com/uas/platform/b2b/service/impl/BaseInfoServiceImpl.java

@@ -9,6 +9,7 @@ import java.util.Set;
 
 import javax.transaction.Transactional;
 
+import com.uas.platform.b2b.core.util.ThreadTask;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.poi.ss.usermodel.Cell;
 import org.apache.poi.ss.usermodel.Row;
@@ -594,12 +595,23 @@ public class BaseInfoServiceImpl implements BaseInfoService {
 			}
 		}
 		logger.log("平台新增采购订单", "新增采购单", SystemSession.getUser().getUserName() + "新增了采购单");
-		List<PurchaseOrderAllItem> orderAllItems = purchaseOrderAllItemDao.save(orderItems);
+		final List<PurchaseOrderAllItem> orderAllItems = purchaseOrderAllItemDao.save(orderItems);
 		pagingReleaseDao.updateOrderStatus(purcOrder.getStatus(), purcOrder.getId());
-		// 生成消息
-		ContextUtils.publishEvent(new PurchaseOrderSaveReleaseEvent(PurchaseOrderAllItem.distinct(orderAllItems)));
-		// 对接收人来说是销售订单 ,新增不传旧单据状态
-		pagingReleaseDetailDao.updateReleaseCountBySetOrderStatus("purc$orders", "sale");
+
+		//防止生成消息导致延迟
+		ThreadTask.getInstance().execute(new Runnable() {
+			@Override
+			public void run() {
+				// 生成消息
+				ContextUtils.publishEvent(new PurchaseOrderSaveReleaseEvent(PurchaseOrderAllItem.distinct(orderAllItems)));
+				try {
+					Thread.sleep(3000);
+				} catch (InterruptedException e) {
+				}
+				// 对接收人来说是销售订单
+				pagingReleaseDetailDao.updateReleaseCountBySetOrderStatus("purc$orders", "sale");
+			}
+		});
 		return orderAllItems;
 	}