下架白名单补充支付回调删除数据以及后台运维补充删除
This commit is contained in:
@@ -71,6 +71,8 @@ func (s *WhitelistService) EnsureFreeWhitelist(
|
||||
}
|
||||
}
|
||||
|
||||
// 约定:OrderId 字段在白名单表中用于记录“触发本次白名单的查询记录ID(QueryId)”
|
||||
// 这里的 orderId 即为 OfflineFeature 请求中传入的 QueryId
|
||||
wl := &model.UserFeatureWhitelist{
|
||||
Id: uuid.NewString(),
|
||||
IdCard: idCard,
|
||||
@@ -198,6 +200,8 @@ func (s *WhitelistService) ProcessOfflineFeature(
|
||||
}
|
||||
|
||||
// 3. 检查是否已有白名单
|
||||
// 约定:只要调用 OfflineFeature,下架成功(包含“之前已存在白名单”的情况)都应删除“当前这一次查询”的报告数据
|
||||
// 因此,对于“已存在生效白名单”的场景,这里依然返回 whitelistCreated = true,触发上层 OfflineFeatureLogic 删除本次 QueryId 的模块数据
|
||||
exists, err := s.CheckWhitelistExists(ctx, idCard, feature.Id)
|
||||
if err != nil {
|
||||
return false, 0, false, err
|
||||
@@ -297,6 +301,8 @@ func (s *WhitelistService) createWhitelistFromPaidOrder(
|
||||
paidOrderId string,
|
||||
price float64,
|
||||
) error {
|
||||
// 约定:OrderId 字段在白名单表中用于记录“触发本次白名单的查询记录ID(QueryId)”
|
||||
// 这里的 orderId 即为 OfflineFeature 请求中传入的 QueryId
|
||||
wl := &model.UserFeatureWhitelist{
|
||||
Id: uuid.NewString(),
|
||||
IdCard: idCard,
|
||||
@@ -517,7 +523,7 @@ func (s *WhitelistService) CheckQueryDataContainsFeature(
|
||||
return false, nil
|
||||
}
|
||||
|
||||
// ProcessPaidWhitelistOrder 处理已支付的白名单订单:创建白名单记录并删除报告数据
|
||||
// ProcessPaidWhitelistOrder 处理已支付的白名单订单:创建白名单记录,并在可精确定位时删除对应报告数据
|
||||
// order: 支付订单(Order表)
|
||||
// whitelistOrder: 白名单订单(WhitelistOrder表)
|
||||
func (s *WhitelistService) ProcessPaidWhitelistOrder(
|
||||
@@ -539,8 +545,31 @@ func (s *WhitelistService) ProcessPaidWhitelistOrder(
|
||||
return errors.Wrap(err, "查询白名单订单明细失败")
|
||||
}
|
||||
|
||||
// 为每个明细创建白名单记录并删除报告数据
|
||||
// 为每个明细创建白名单记录,并在能够精确定位 Query 时删除对应报告数据
|
||||
for _, item := range items {
|
||||
var queryId string
|
||||
|
||||
// 如果白名单订单绑定了查询订单ID(order_id),尝试通过 Query.order_id 精确找到对应的查询记录
|
||||
if whitelistOrder.OrderId.Valid && whitelistOrder.OrderId.String != "" {
|
||||
queryModel, qErr := s.QueryModel.FindOneByOrderId(ctx, whitelistOrder.OrderId.String)
|
||||
if qErr != nil {
|
||||
if errors.Is(qErr, model.ErrNotFound) {
|
||||
logx.Infof("白名单订单支付成功:订单 %s 绑定的查询订单 %s 未找到对应查询记录,跳过报告删除", whitelistOrder.OrderNo, whitelistOrder.OrderId.String)
|
||||
} else {
|
||||
return errors.Wrap(qErr, "根据白名单订单的查询订单ID查找查询记录失败")
|
||||
}
|
||||
} else {
|
||||
queryId = queryModel.Id
|
||||
// 精确删除该查询下当前模块的数据
|
||||
if delErr := s.DeleteFeatureFromQueryData(ctx, session, queryId, item.FeatureApiId); delErr != nil {
|
||||
// 删除报告数据失败不影响白名单记录创建,只记录错误日志
|
||||
logx.Errorf("白名单订单支付后删除报告数据失败:查询记录 %s,模块 %s,错误:%v", queryId, item.FeatureApiId, delErr)
|
||||
} else {
|
||||
logx.Infof("白名单订单支付后删除报告数据成功:查询记录 %s,模块 %s", queryId, item.FeatureApiId)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 创建白名单记录
|
||||
wl := &model.UserFeatureWhitelist{
|
||||
Id: uuid.NewString(),
|
||||
@@ -548,7 +577,9 @@ func (s *WhitelistService) ProcessPaidWhitelistOrder(
|
||||
FeatureId: item.FeatureId,
|
||||
FeatureApiId: item.FeatureApiId,
|
||||
UserId: whitelistOrder.UserId,
|
||||
OrderId: lzUtils.StringToNullString(""), // 查询订单ID,如果有的话会在后续步骤中设置
|
||||
// 约定:UserFeatureWhitelist.OrderId 记录触发本次白名单的查询记录ID(QueryId)
|
||||
// 对于支付回调场景,如果成功通过 order_id 找到 Query,则将 QueryId 回写到白名单记录中,便于后续审计
|
||||
OrderId: lzUtils.StringToNullString(queryId),
|
||||
WhitelistOrderId: lzUtils.StringToNullString(whitelistOrder.Id),
|
||||
Amount: item.Price,
|
||||
Status: 1, // 生效
|
||||
@@ -556,13 +587,10 @@ func (s *WhitelistService) ProcessPaidWhitelistOrder(
|
||||
if _, err := s.UserFeatureWhitelistModel.Insert(ctx, session, wl); err != nil {
|
||||
return errors.Wrap(err, "创建白名单记录失败")
|
||||
}
|
||||
|
||||
// 尝试删除报告数据
|
||||
// 注意:由于支付回调时可能不知道具体的查询订单ID,这里先尝试根据 id_card 查找
|
||||
// 如果找不到对应的报告,就跳过删除步骤(不影响主流程)
|
||||
// 实际的报告数据删除应该在 OfflineFeature 接口中完成(如果提供了 orderId)
|
||||
// 这里暂时不删除,因为无法确定是哪个具体的查询订单
|
||||
logx.Infof("白名单订单支付成功:订单 %s,模块 %s,已创建白名单记录。如需删除报告数据,请在 OfflineFeature 接口中提供查询订单ID", whitelistOrder.OrderNo, item.FeatureApiId)
|
||||
// 如果无法通过 order_id 找到 Query,仅创建白名单记录,不删除任何报告数据,避免误删历史记录
|
||||
if !whitelistOrder.OrderId.Valid || whitelistOrder.OrderId.String == "" || queryId == "" {
|
||||
logx.Infof("白名单订单支付成功:订单 %s,模块 %s,已创建白名单记录。由于缺少可用的查询订单ID或对应查询记录,未删除任何报告数据", whitelistOrder.OrderNo, item.FeatureApiId)
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
|
||||
Reference in New Issue
Block a user