|
@@ -1,13 +1,16 @@
|
|
|
package com.seamew.lottery.application.process.impl;
|
|
|
|
|
|
+import com.seamew.lottery.application.mq.producer.KafkaProducer;
|
|
|
import com.seamew.lottery.application.process.IActivityProcess;
|
|
|
import com.seamew.lottery.application.process.req.DrawProcessReq;
|
|
|
import com.seamew.lottery.application.process.res.DrawProcessResult;
|
|
|
import com.seamew.lottery.application.process.res.RuleQuantificationCrowdResult;
|
|
|
import com.seamew.lottery.common.Constants;
|
|
|
+import com.seamew.lottery.common.Result;
|
|
|
import com.seamew.lottery.domain.activity.model.req.PartakeReq;
|
|
|
import com.seamew.lottery.domain.activity.model.res.PartakeResult;
|
|
|
import com.seamew.lottery.domain.activity.model.vo.DrawOrderVO;
|
|
|
+import com.seamew.lottery.domain.activity.model.vo.InvoiceVO;
|
|
|
import com.seamew.lottery.domain.activity.service.partake.IActivityPartake;
|
|
|
import com.seamew.lottery.domain.rule.model.req.DecisionMatterReq;
|
|
|
import com.seamew.lottery.domain.rule.model.res.EngineResult;
|
|
@@ -18,6 +21,7 @@ import com.seamew.lottery.domain.strategy.model.vo.DrawAwardVO;
|
|
|
import com.seamew.lottery.domain.strategy.service.draw.IDrawExec;
|
|
|
import com.seamew.lottery.domain.support.ids.IIdGenerator;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.util.concurrent.ListenableFutureCallback;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
import java.util.Map;
|
|
@@ -43,6 +47,9 @@ public class ActivityProcessImpl implements IActivityProcess {
|
|
|
@Resource
|
|
|
private Map<Constants.Ids, IIdGenerator> idGeneratorMap;
|
|
|
|
|
|
+ @Resource
|
|
|
+ private KafkaProducer kafkaProducer;
|
|
|
+
|
|
|
@Override
|
|
|
public DrawProcessResult doDrawProcess(DrawProcessReq req) {
|
|
|
// 1. 领取活动
|
|
@@ -61,10 +68,23 @@ public class ActivityProcessImpl implements IActivityProcess {
|
|
|
DrawAwardVO drawAwardVO = drawResult.getDrawAwardInfo();
|
|
|
|
|
|
// 3. 结果落库
|
|
|
- activityPartake.recordDrawOrder(buildDrawOrderVO(req, strategyId, takeId, drawAwardVO));
|
|
|
+ DrawOrderVO drawOrderVO = buildDrawOrderVO(req, strategyId, takeId, drawAwardVO);
|
|
|
+ Result recordResult = activityPartake.recordDrawOrder(drawOrderVO);
|
|
|
+ if (!Constants.ResponseCode.SUCCESS.getCode().equals(recordResult.getCode())) {
|
|
|
+ return new DrawProcessResult(recordResult.getCode(), recordResult.getInfo());
|
|
|
+ }
|
|
|
|
|
|
// 4. 发送MQ,触发发奖流程
|
|
|
-
|
|
|
+ InvoiceVO invoiceVO = buildInvoiceVO(drawOrderVO);
|
|
|
+ kafkaProducer
|
|
|
+ .sendLotteryInvoice(invoiceVO)
|
|
|
+ .addCallback(success -> {
|
|
|
+ // 4.1 MQ 消息发送完成,更新数据库表 user_strategy_export.mq_state = 1
|
|
|
+ activityPartake.updateInvoiceMqState(invoiceVO.getUId(), invoiceVO.getOrderId(), Constants.MQState.COMPLETE.getCode());
|
|
|
+ }, error -> {
|
|
|
+ // 4.2 MQ 消息发送失败,更新数据库表 user_strategy_export.mq_state = 2 【等待定时任务扫码补偿MQ消息】
|
|
|
+ activityPartake.updateInvoiceMqState(invoiceVO.getUId(), invoiceVO.getOrderId(), Constants.MQState.FAIL.getCode());
|
|
|
+ });
|
|
|
// 5. 返回结果
|
|
|
return new DrawProcessResult(Constants.ResponseCode.SUCCESS.getCode(), Constants.ResponseCode.SUCCESS.getInfo(), drawAwardVO);
|
|
|
}
|
|
@@ -104,4 +124,17 @@ public class ActivityProcessImpl implements IActivityProcess {
|
|
|
drawOrderVO.setAwardContent(drawAwardVO.getAwardContent());
|
|
|
return drawOrderVO;
|
|
|
}
|
|
|
+
|
|
|
+ private InvoiceVO buildInvoiceVO(DrawOrderVO drawOrderVO) {
|
|
|
+ InvoiceVO invoiceVO = new InvoiceVO();
|
|
|
+ invoiceVO.setUId(drawOrderVO.getUId());
|
|
|
+ invoiceVO.setOrderId(drawOrderVO.getOrderId());
|
|
|
+ invoiceVO.setAwardId(drawOrderVO.getAwardId());
|
|
|
+ invoiceVO.setAwardType(drawOrderVO.getAwardType());
|
|
|
+ invoiceVO.setAwardName(drawOrderVO.getAwardName());
|
|
|
+ invoiceVO.setAwardContent(drawOrderVO.getAwardContent());
|
|
|
+ invoiceVO.setShippingAddress(null);
|
|
|
+ invoiceVO.setExtInfo(null);
|
|
|
+ return invoiceVO;
|
|
|
+ }
|
|
|
}
|