Commit af017ea2 by songyinghui

feat: 订单延迟消费

parent 89c34cec
......@@ -10,8 +10,8 @@ public enum NoticeMessageCategoryTypeEnum {
CUSTOMER(0, "客户相关"),
TASK(1, "任务相关"),
ACTIVITY(2, "活动相关"),
MATERIAL(4, "素材相关"),
POTENTIAL_CUSTOMER(5, "销售线索"),
MATERIAL(6, "素材相关"),
POTENTIAL_CUSTOMER(7, "销售线索"),
OTHER(3, "其它"),;
private int type;
private String name;
......
......@@ -18,4 +18,11 @@ public interface MallOrderStatusChangeApiService {
* @return
*/
ServiceResponse<Void> mallOrderStatusChange(String params);
/**
* 兼容订单事件先到达 埋点数据未到的情况
* @param params
* @return
*/
ServiceResponse<Void> orderEventDelay(String params);
}
......@@ -31,4 +31,10 @@ public class OrderEventMqBO implements Serializable {
* 结束状态
*/
private Integer toStatus;
/**
* 消费次数
* 默认0
*/
private Integer times;
}
......@@ -75,4 +75,9 @@ public class InteractRecordMessageBO implements Serializable {
* 临时字段
*/
private String refUrl;
/**
* 消息消费次数
*/
private Integer times;
}
......@@ -52,10 +52,13 @@ public class InteractRecordMessageService {
// 根据key 查询是否存在记录
InteractRecordBO interactRecordBO = null;
if (MaterialInteractRecordEventType.ORDER.getCode().equals(interactRecordMessageBO.getEventType())) {
interactRecordBO = interactRecordService.queryLeastRecord(interactRecordMessageBO.getEnterpriseId(), interactRecordMessageBO.getClerkId(),
interactRecordMessageBO.getMaterialId(), interactRecordMessageBO.getMemberId());
interactRecordBO = this.getInteractRecordBOWithOrderType(interactRecordMessageBO);
if (interactRecordBO == null) {
log.info("下单事件 互动记录为空 {}", JSON.toJSONString(interactRecordMessageBO));
if (interactRecordMessageBO.getTimes() == null || interactRecordMessageBO.getTimes() < 60) {
// 兼容订单事件先到达的情况 延迟消费 60轮 每轮一分钟
}
return;
}
} else {
......@@ -142,4 +145,16 @@ public class InteractRecordMessageService {
RedisUtil.unlock(recordKey);
}
}
/**
查询订单事件的互动记录
* @param interactRecordMessageBO
* @return
*/
public InteractRecordBO getInteractRecordBOWithOrderType(InteractRecordMessageBO interactRecordMessageBO) {
InteractRecordBO interactRecordBO;
interactRecordBO = interactRecordService.queryLeastRecord(interactRecordMessageBO.getEnterpriseId(), interactRecordMessageBO.getClerkId(),
interactRecordMessageBO.getMaterialId(), interactRecordMessageBO.getMemberId());
return interactRecordBO;
}
}
......@@ -7,8 +7,10 @@ import com.gic.business.order.dto.ordermanage.OrderOutInfoDTO;
import com.gic.business.order.enums.OrderEnum;
import com.gic.business.order.qdto.ordermanage.OrderInfoQDTO;
import com.gic.business.order.service.ordermanage.OrderInfoOutApiService;
import com.gic.commons.util.GICMQClientUtil;
import com.gic.haoban.manage.api.enums.content.MaterialInteractRecordEventType;
import com.gic.haoban.manage.api.service.content.MallOrderStatusChangeApiService;
import com.gic.haoban.manage.service.pojo.bo.content.InteractRecordBO;
import com.gic.haoban.manage.service.pojo.bo.content.OrderEventMqBO;
import com.gic.haoban.manage.service.pojo.bo.content.message.InteractRecordMessageBO;
import com.gic.haoban.manage.service.service.content.message.InteractRecordMessageService;
......@@ -33,6 +35,8 @@ public class MallOrderStatusChangeApiServiceImpl implements MallOrderStatusChang
@Autowired
InteractRecordMessageService interactRecordMessageService;
private static final String ORDER_EVENT_RETRY = "orderEventRetryMQ";
/***
* 订单状态变更事件
* @param params
......@@ -78,13 +82,54 @@ public class MallOrderStatusChangeApiServiceImpl implements MallOrderStatusChang
interactRecordMessageBO.setEnterpriseId(orderEventMqBO.getEnterpriseId());
interactRecordMessageBO.setMemberId(memberId);
interactRecordMessageBO.setClerkId(clerkId);
interactRecordMessageBO.setStoreId("");
interactRecordMessageBO.setMaterialId(contentMaterialId);
interactRecordMessageBO.setEventType(MaterialInteractRecordEventType.ORDER.getCode());
interactRecordMessageBO.setDurationTime(0);
interactRecordMessageBO.setLastAccessTime(orderInfo.getCreateTime().getTime());
interactRecordMessageBO.setOrderNumber(orderEventMqBO.getOrderNumber());
interactRecordMessageBO.setTimes(orderEventMqBO.getTimes());
InteractRecordBO interactRecordBO = interactRecordMessageService.getInteractRecordBOWithOrderType(interactRecordMessageBO);
if (interactRecordBO == null) {
log.info("订单事件先到达,埋点事件延迟 >>> {}", JSON.toJSONString(interactRecordMessageBO));
if (orderEventMqBO.getTimes() != null && orderEventMqBO.getTimes() > 60) {
log.info("订单事件延迟60分钟仍未被消费,忽略 {}", params);
return ServiceResponse.success();
}
if (orderEventMqBO.getTimes() == null) {
orderEventMqBO.setTimes(0);
}
orderEventMqBO.setTimes(orderEventMqBO.getTimes() + 1);
this.sendDelayMessage(orderEventMqBO);
return ServiceResponse.success();
}
interactRecordMessageService.dealRecord(interactRecordMessageBO);
return ServiceResponse.success();
}
/**
* 兼容订单事件先到达 埋点数据未到的情况
*
* @param params
* @return
*/
@Override
public ServiceResponse<Void> orderEventDelay(String params) {
// 处理埋点数据延迟的问题
log.info("处理埋点数据延迟 订单事件先到的场景 >>>> {}", params);
this.mallOrderStatusChange(params);
}
public boolean sendDelayMessage(OrderEventMqBO orderEventMqBO) {
log.info("[MallOrderStatusChangeApiService] 发送订单支付事件延迟处理消息 {}", JSON.toJSONString(orderEventMqBO));
try {
GICMQClientUtil.getClientInstance().sendMessage(ORDER_EVENT_RETRY, JSON.toJSONString(orderEventMqBO), 60);
} catch (Exception e) {
log.info("发送消息异常 {}", JSON.toJSONString(orderEventMqBO), e);
return false;
}
return true;
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment