Commit af017ea2 by songyinghui

feat: 订单延迟消费

parent 89c34cec
...@@ -10,8 +10,8 @@ public enum NoticeMessageCategoryTypeEnum { ...@@ -10,8 +10,8 @@ public enum NoticeMessageCategoryTypeEnum {
CUSTOMER(0, "客户相关"), CUSTOMER(0, "客户相关"),
TASK(1, "任务相关"), TASK(1, "任务相关"),
ACTIVITY(2, "活动相关"), ACTIVITY(2, "活动相关"),
MATERIAL(4, "素材相关"), MATERIAL(6, "素材相关"),
POTENTIAL_CUSTOMER(5, "销售线索"), POTENTIAL_CUSTOMER(7, "销售线索"),
OTHER(3, "其它"),; OTHER(3, "其它"),;
private int type; private int type;
private String name; private String name;
......
...@@ -18,4 +18,11 @@ public interface MallOrderStatusChangeApiService { ...@@ -18,4 +18,11 @@ public interface MallOrderStatusChangeApiService {
* @return * @return
*/ */
ServiceResponse<Void> mallOrderStatusChange(String params); ServiceResponse<Void> mallOrderStatusChange(String params);
/**
* 兼容订单事件先到达 埋点数据未到的情况
* @param params
* @return
*/
ServiceResponse<Void> orderEventDelay(String params);
} }
...@@ -31,4 +31,10 @@ public class OrderEventMqBO implements Serializable { ...@@ -31,4 +31,10 @@ public class OrderEventMqBO implements Serializable {
* 结束状态 * 结束状态
*/ */
private Integer toStatus; private Integer toStatus;
/**
* 消费次数
* 默认0
*/
private Integer times;
} }
...@@ -75,4 +75,9 @@ public class InteractRecordMessageBO implements Serializable { ...@@ -75,4 +75,9 @@ public class InteractRecordMessageBO implements Serializable {
* 临时字段 * 临时字段
*/ */
private String refUrl; private String refUrl;
/**
* 消息消费次数
*/
private Integer times;
} }
...@@ -52,10 +52,13 @@ public class InteractRecordMessageService { ...@@ -52,10 +52,13 @@ public class InteractRecordMessageService {
// 根据key 查询是否存在记录 // 根据key 查询是否存在记录
InteractRecordBO interactRecordBO = null; InteractRecordBO interactRecordBO = null;
if (MaterialInteractRecordEventType.ORDER.getCode().equals(interactRecordMessageBO.getEventType())) { if (MaterialInteractRecordEventType.ORDER.getCode().equals(interactRecordMessageBO.getEventType())) {
interactRecordBO = interactRecordService.queryLeastRecord(interactRecordMessageBO.getEnterpriseId(), interactRecordMessageBO.getClerkId(), interactRecordBO = this.getInteractRecordBOWithOrderType(interactRecordMessageBO);
interactRecordMessageBO.getMaterialId(), interactRecordMessageBO.getMemberId());
if (interactRecordBO == null) { if (interactRecordBO == null) {
log.info("下单事件 互动记录为空 {}", JSON.toJSONString(interactRecordMessageBO)); log.info("下单事件 互动记录为空 {}", JSON.toJSONString(interactRecordMessageBO));
if (interactRecordMessageBO.getTimes() == null || interactRecordMessageBO.getTimes() < 60) {
// 兼容订单事件先到达的情况 延迟消费 60轮 每轮一分钟
}
return; return;
} }
} else { } else {
...@@ -142,4 +145,16 @@ public class InteractRecordMessageService { ...@@ -142,4 +145,16 @@ public class InteractRecordMessageService {
RedisUtil.unlock(recordKey); 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; ...@@ -7,8 +7,10 @@ import com.gic.business.order.dto.ordermanage.OrderOutInfoDTO;
import com.gic.business.order.enums.OrderEnum; import com.gic.business.order.enums.OrderEnum;
import com.gic.business.order.qdto.ordermanage.OrderInfoQDTO; import com.gic.business.order.qdto.ordermanage.OrderInfoQDTO;
import com.gic.business.order.service.ordermanage.OrderInfoOutApiService; 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.enums.content.MaterialInteractRecordEventType;
import com.gic.haoban.manage.api.service.content.MallOrderStatusChangeApiService; 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.OrderEventMqBO;
import com.gic.haoban.manage.service.pojo.bo.content.message.InteractRecordMessageBO; import com.gic.haoban.manage.service.pojo.bo.content.message.InteractRecordMessageBO;
import com.gic.haoban.manage.service.service.content.message.InteractRecordMessageService; import com.gic.haoban.manage.service.service.content.message.InteractRecordMessageService;
...@@ -33,6 +35,8 @@ public class MallOrderStatusChangeApiServiceImpl implements MallOrderStatusChang ...@@ -33,6 +35,8 @@ public class MallOrderStatusChangeApiServiceImpl implements MallOrderStatusChang
@Autowired @Autowired
InteractRecordMessageService interactRecordMessageService; InteractRecordMessageService interactRecordMessageService;
private static final String ORDER_EVENT_RETRY = "orderEventRetryMQ";
/*** /***
* 订单状态变更事件 * 订单状态变更事件
* @param params * @param params
...@@ -78,13 +82,54 @@ public class MallOrderStatusChangeApiServiceImpl implements MallOrderStatusChang ...@@ -78,13 +82,54 @@ public class MallOrderStatusChangeApiServiceImpl implements MallOrderStatusChang
interactRecordMessageBO.setEnterpriseId(orderEventMqBO.getEnterpriseId()); interactRecordMessageBO.setEnterpriseId(orderEventMqBO.getEnterpriseId());
interactRecordMessageBO.setMemberId(memberId); interactRecordMessageBO.setMemberId(memberId);
interactRecordMessageBO.setClerkId(clerkId); interactRecordMessageBO.setClerkId(clerkId);
interactRecordMessageBO.setStoreId("");
interactRecordMessageBO.setMaterialId(contentMaterialId); interactRecordMessageBO.setMaterialId(contentMaterialId);
interactRecordMessageBO.setEventType(MaterialInteractRecordEventType.ORDER.getCode()); interactRecordMessageBO.setEventType(MaterialInteractRecordEventType.ORDER.getCode());
interactRecordMessageBO.setDurationTime(0); interactRecordMessageBO.setDurationTime(0);
interactRecordMessageBO.setLastAccessTime(orderInfo.getCreateTime().getTime()); interactRecordMessageBO.setLastAccessTime(orderInfo.getCreateTime().getTime());
interactRecordMessageBO.setOrderNumber(orderEventMqBO.getOrderNumber()); 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); interactRecordMessageService.dealRecord(interactRecordMessageBO);
return ServiceResponse.success(); 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