|
@@ -8,7 +8,9 @@ import com.alibaba.fastjson.JSONObject;
|
|
|
import com.etotem.cfc.common.OrderNoGenerator;
|
|
import com.etotem.cfc.common.OrderNoGenerator;
|
|
|
import com.etotem.cfc.entity.PackageOrder;
|
|
import com.etotem.cfc.entity.PackageOrder;
|
|
|
import com.etotem.cfc.entity.TaskTemplatePackage;
|
|
import com.etotem.cfc.entity.TaskTemplatePackage;
|
|
|
|
|
+import com.etotem.cfc.entity.UserIntent;
|
|
|
import com.etotem.cfc.mapper.PackageOrderMapper;
|
|
import com.etotem.cfc.mapper.PackageOrderMapper;
|
|
|
|
|
+import com.etotem.cfc.mapper.UserIntentMapper;
|
|
|
import com.etotem.cfc.service.CommissionService;
|
|
import com.etotem.cfc.service.CommissionService;
|
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
import org.slf4j.LoggerFactory;
|
|
@@ -38,6 +40,9 @@ public class PackagePaymentService implements PackagePaymentServiceInterface {
|
|
|
@Resource
|
|
@Resource
|
|
|
private CouponService couponService;
|
|
private CouponService couponService;
|
|
|
|
|
|
|
|
|
|
+ @Resource
|
|
|
|
|
+ private UserIntentMapper userIntentMapper;
|
|
|
|
|
+
|
|
|
@Value("${wechat.appid}")
|
|
@Value("${wechat.appid}")
|
|
|
private String appid;
|
|
private String appid;
|
|
|
|
|
|
|
@@ -79,6 +84,8 @@ public class PackagePaymentService implements PackagePaymentServiceInterface {
|
|
|
order.setCreatedAt(new Date());
|
|
order.setCreatedAt(new Date());
|
|
|
order.setUpdatedAt(new Date());
|
|
order.setUpdatedAt(new Date());
|
|
|
orderMapper.insert(order);
|
|
orderMapper.insert(order);
|
|
|
|
|
+ // 购买完成 → 推进旅程 stage=3(幂等)
|
|
|
|
|
+ advanceStage(userId, 3);
|
|
|
return order;
|
|
return order;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -213,6 +220,9 @@ public class PackagePaymentService implements PackagePaymentServiceInterface {
|
|
|
commissionService.settle(order.getId(), "package", order.getUserId(),
|
|
commissionService.settle(order.getId(), "package", order.getUserId(),
|
|
|
order.getPrice(), null);
|
|
order.getPrice(), null);
|
|
|
|
|
|
|
|
|
|
+ // 购买完成 → 推进旅程 stage=3(幂等)
|
|
|
|
|
+ advanceStage(order.getUserId(), 3);
|
|
|
|
|
+
|
|
|
log.info("订单支付成功: {}", orderNo);
|
|
log.info("订单支付成功: {}", orderNo);
|
|
|
return true;
|
|
return true;
|
|
|
}
|
|
}
|
|
@@ -249,6 +259,24 @@ public class PackagePaymentService implements PackagePaymentServiceInterface {
|
|
|
return OrderNoGenerator.generate("PKG");
|
|
return OrderNoGenerator.generate("PKG");
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /** 推进用户旅程至指定阶段(幂等:只向前推进) */
|
|
|
|
|
+ private void advanceStage(Long userId, int stage) {
|
|
|
|
|
+ try {
|
|
|
|
|
+ UserIntent intent = userIntentMapper.selectOne(
|
|
|
|
|
+ new com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper<UserIntent>()
|
|
|
|
|
+ .eq(UserIntent::getUserId, userId)
|
|
|
|
|
+ .last("LIMIT 1"));
|
|
|
|
|
+ if (intent != null && (intent.getJourneyStage() == null || intent.getJourneyStage() < stage)) {
|
|
|
|
|
+ intent.setJourneyStage(stage);
|
|
|
|
|
+ intent.setStageUpdatedAt(new Date());
|
|
|
|
|
+ intent.setUpdatedAt(new Date());
|
|
|
|
|
+ userIntentMapper.updateById(intent);
|
|
|
|
|
+ }
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ log.warn("推进旅程阶段失败 userId={}, stage={}: {}", userId, stage, e.getMessage());
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* 生成签名
|
|
* 生成签名
|
|
|
*/
|
|
*/
|