Explorar el Código

生成码包改为事件触发

tanzhongran hace 3 años
padre
commit
4236fba3c7

+ 13 - 0
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/infrastructure/event/CodePackageCreateEvent.java

@@ -0,0 +1,13 @@
+package com.abi.qms.platform.infrastructure.event;
+
+import org.springframework.context.ApplicationEvent;
+
+
+
+public class CodePackageCreateEvent extends ApplicationEvent {
+
+    public CodePackageCreateEvent(Long qrPackageId) {
+        super(qrPackageId);
+    }
+
+}

+ 45 - 0
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/infrastructure/event/CodePackageCreateListener.java

@@ -0,0 +1,45 @@
+package com.abi.qms.platform.infrastructure.event;
+
+import com.abi.qms.platform.dao.entity.QrPackage;
+import com.abi.qms.platform.dao.enums.QrPackageGenerateStatusEnum;
+import com.abi.qms.platform.service.GenerateCodeService;
+import com.abi.qms.platform.service.QrPackageService;
+import freemarker.template.TemplateException;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.event.EventListener;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Component;
+
+import java.io.IOException;
+
+
+@Slf4j
+@Component
+public class CodePackageCreateListener {
+    @Autowired
+    private GenerateCodeService generateCodeService;
+
+    @Autowired
+    private QrPackageService qrPackageService;
+
+
+    @EventListener
+    @Async
+    public void onApplicationEvent(final CodePackageCreateEvent event) throws InterruptedException, IOException, TemplateException {
+        log.info("CodePackageCreateListener begin");
+        Long qrPackageId = (Long) event.getSource();
+
+        try {
+            // 生成码
+            generateCodeService.generateQrCode(qrPackageId);
+        } catch (Exception e) {
+            log.error("生成码失败", e);
+            // 回滚
+            QrPackage qrPackage = new QrPackage();
+            qrPackage.setId(qrPackageId);
+            qrPackage.setGenerateStatus(QrPackageGenerateStatusEnum.GENERATE_FAIL.getCode());
+            qrPackageService.failedRollback(qrPackage);
+        }
+    }
+}

+ 35 - 0
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/infrastructure/event/ListenerAsyncConfiguration.java

@@ -0,0 +1,35 @@
+package com.abi.qms.platform.infrastructure.event;
+
+import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.AsyncConfigurer;
+import org.springframework.scheduling.annotation.EnableAsync;
+import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
+
+import java.util.concurrent.Executor;
+
+@Configuration
+@EnableAsync
+public class ListenerAsyncConfiguration implements AsyncConfigurer
+{
+    /**
+     * 获取异步线程池执行对象
+     * @return
+     */
+    @Override
+    public Executor getAsyncExecutor() {
+        //使用Spring内置线程池任务对象
+        ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
+        //设置线程池参数
+        taskExecutor.setCorePoolSize(5);
+        taskExecutor.setMaxPoolSize(10);
+        taskExecutor.setQueueCapacity(25);
+        taskExecutor.initialize();
+        return taskExecutor;
+    }
+
+    @Override
+    public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
+        return null;
+    }
+}

+ 19 - 8
abi-cloud-qr-platform-server/src/main/java/com/abi/qms/platform/service/impl/QrPackageServiceImpl.java

@@ -11,6 +11,7 @@ import com.abi.qms.platform.dao.vo.result.*;
 import com.abi.qms.platform.dto.req.*;
 import com.abi.qms.platform.dto.res.*;
 import com.abi.qms.platform.infrastructure.constant.RedisKey;
+import com.abi.qms.platform.infrastructure.event.CodePackageCreateEvent;
 import com.abi.qms.platform.infrastructure.mq.GenerateCodeConsumer;
 import com.abi.qms.platform.infrastructure.util.*;
 import com.abi.qms.platform.service.FactoryService;
@@ -32,6 +33,7 @@ import org.apache.commons.lang3.StringUtils;
 import org.bouncycastle.util.Pack;
 import org.springframework.amqp.core.AmqpTemplate;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.ApplicationContext;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.ui.freemarker.FreeMarkerTemplateUtils;
@@ -116,6 +118,9 @@ public class QrPackageServiceImpl implements QrPackageService {
     @Autowired
     private QrPackageBookingOrderService qrPackageBookingOrderService;
 
+    @Autowired
+    private ApplicationContext applicationContext;
+
 //    @Autowired
 //    private SendMqUtil sendMqUtil;
 
@@ -561,7 +566,7 @@ public class QrPackageServiceImpl implements QrPackageService {
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void passQrPackage(PassQrPackageReq req) {
-        QrPackageVO qrPackage = qrPackageMapper.selectQrPackageDetailById(req.getId());
+        QrPackage qrPackage = qrPackageMapper.selectById(req.getId());
         AssertUtil.isNull(qrPackage, "码包不存在");
 
         // 只有待审核、审核拒绝状态下才可通过
@@ -570,15 +575,21 @@ public class QrPackageServiceImpl implements QrPackageService {
             throw new BusinessException("码包不可通过");
         }
 
-        QrPackage update = new QrPackage().setId(req.getId()).setApplyStatus(QrPackageApplyStatusEnum.REVIEW_PASS.getCode());
-        qrPackageMapper.updateById(update);
+        //1-修改状态
+        qrPackage.setApplyStatus(QrPackageApplyStatusEnum.REVIEW_PASS.getCode());
+        qrPackageMapper.updateById(qrPackage);
 
         // 码库类型为系统生成时,放入rabbitmq,生成码
-        if (QrRepertoryTypeEnum.SYSTEM_GENERATE.is(qrPackage.getQrRepertoryType())) {
-            //暂时这个有问题,先发老的
-            //sendMqUtil.sendMq(GenerateQrCodeMq.QUEUE_NAME,req.getId());
-            amqpTemplate.convertAndSend(GenerateCodeConsumer.GENERATE_CODE_BY_REPERTORY_QUEUE, req.getId());
-        }
+        //log.info("准备发MQ生成码");
+        //暂时这个有问题,先发老的
+        //sendMqUtil.sendMq(GenerateQrCodeMq.QUEUE_NAME,req.getId());
+        //老夫这就不发mq了,受不了一会接的到一会借不到
+        //amqpTemplate.convertAndSend(GenerateCodeConsumer.GENERATE_CODE_BY_REPERTORY_QUEUE, req.getId());
+        //log.info("MQ生成码 已经发出去了");
+
+        //2-触发生成文件和发邮件的事件
+        this.applicationContext.publishEvent(new CodePackageCreateEvent(qrPackage.getId()));
+
     }
 
     /**