任务描述
需求描述
需求背景
近期优惠券失败数相比之前出现暴增,业务已协助提case,但时候未得到准确的原因,采集针对提报失败的,去后台分析与研究,发现亚马逊针对新失败的提供了具体原因,现在需要服务根据亚马逊提示失败的进行重试处理
需求内容
1、针对V2队列里文件提交失败(status=2),且【Message】信息是【您的文件存在错误 - 请更新以下文件中的错误字段,然后重新上传】,需要进行解析:【UploadResponse】字段【errorMessage】不为空的,失败原因内容解析对应中文明细如下:原规则可见需求ID 18773、19396
新增:newui-error-pricing-validations:价格错误/不满足
新增:失败原因内容是【newui-error-pricing-validations】,需要进行解析该字段里提供的ASIN,并将这些ASIN从优惠券组里进行移除后,按照重试规则重新提交。
3、针对失败原因是【newui-error-pricing-validations】,需要进行解析:【UploadResponse】字段【errorDetails - reasons - suppressionThresholdName】:会具体说明每个ASIN失败原因。并展示在优惠券执行队列页面的【错误原因】
注意:同一个ASIN会有多个reasons,则需要都展示,并且去重展示


注意,以上针对重试的ASIN,需要新增判断:listingstatus状态,过滤listing状态不在线的,优惠券组是否满足15个ASIN。
上线后,原重试服务,会自动针对近3天失败的任务进行重试,最多重试3次
验收标准
暂无
剔除的asin和失败的详情
业务代码:
case var msg when msg.Contains("newui-error-pricing-validations", StringComparison.OrdinalIgnoreCase) && couponRootNew.coupons.First().errorDetails.Count() > 0:
//将不符合的asin回写状态为失败和记录具体原因
List<errorDetailsItems> errorDetails = couponRootNew.coupons.First().errorDetails;
UpdateCouponDetailByReasons(1, currentCouponDetail, uploadErrorAsin: errorDetails);
//剔除无效asin获取能上传的asin集合
List<string> allAsin = couponUploadData.coupons.FirstOrDefault().asins.ToList(); ;
List<string> errorAsin = errorDetails.Select(o => o.asin).ToList();
allAsin = allAsin.Except(errorAsin).ToList();
//过滤其他因素剩余能上传的asin数
var currentCouponDetailInfo = currentCouponDetail.Where(x => x.CouponUploadTaskV2ID == couponUploadTaskV2.TaskId).ToList();
var couponExecute = await GetUploadAsinList(allAsin, currentCouponDetailInfo, couponUploadData, orderSourceId, siteCode);
if (couponExecute.Count() <= 0)
{
break;
}
couponUploadData.coupons.FirstOrDefault().asins = couponExecute;
//重新修改优惠券状态
await RetryUploadTaskV2StatusAsync(couponUploadData, couponUploadTaskV2, siteCode);
break;
/// <summary>
/// 根据asin数量回写指定的状态,dataType【1:json自带错误原因,2:手动指定错误原因】
/// </summary>
/// <param name="couponDetails"></param>
/// <param name="uploadAsinResult"></param>
private void UpdateCouponDetailByReasons(int dataType, List<AutoCouponDetail> couponDetails, List<errorDetailsItems> uploadErrorAsin = null, List<string> updateAsin = null, string errorMessage = "")
{
var needUpdateModels = new List<AutoCouponDetail>();
foreach (var message in couponDetails)
{
if (dataType == 1)
{
var result = uploadErrorAsin.FirstOrDefault(x => x.asin == message.ASIN.AsString);
if (result == null)
{
continue;
}
errorMessage = String.Join(';', result.reasons.Select(o => o.suppressionThresholdName).Distinct().ToList());
}
else if (dataType == 2)
{
var result = updateAsin.FirstOrDefault(x => x == message.ASIN.AsString);
if (result == null)
{
continue;
}
}
message.FailureReason = errorMessage;
message.UploadStatus = (int)EnumCouponUploadStatus.上传失败;
message.UpdateTime = DateTime.Now;
needUpdateModels.Add(message);
}
if (needUpdateModels.Any())
{
_autoCouponDetailMgoRepository.Save(needUpdateModels,
new List<string>()
{
nameof(AutoCouponDetail.FailureReason),
nameof(AutoCouponDetail.UpdateTime),
nameof(AutoCouponDetail.UploadStatus)
}, false);
}
_markListingStrategyService.SaveCouponResult(couponDetails, true).GetAwaiter().GetResult();
}
/// <summary>
/// 根据asin列表排除不符合上传的asin【更改优惠券状态前过滤条件】
/// </summary>
/// <param name="asins"></param>
/// <param name="currentCouponDetail"></param>
/// <param name="orderSourceId"></param>
/// <param name="siteCode"></param>
/// <returns></returns>
private async Task<List<string>> GetUploadAsinList(List<string> asins, List<AutoCouponDetail> currentCouponDetail, CouponUploadData couponUploadData, int orderSourceId, string siteCode)
{
//**********************************【优惠券组ASIN不足15个】 这个必须放在最后*********************************************************
List<string> validateType = new List<string>() { "优惠券不在线", "优惠券时间修改", "优惠券组ASIN不足15个" };
foreach (var item in validateType)
{
switch (item)
{
case "优惠券不在线":
var currentOrderSourceList = currentCouponDetail.Select(x => x.OrderSourceSKU.Value).ToList();
var markListingList = await _markListingNMgoRepository.GetMarkListingsAsync(orderSourceId, currentOrderSourceList, siteCode);
asins = await GetRetryValidAsinListAsync(asins, currentCouponDetail, markListingList, orderSourceId, siteCode);
break;
case "优惠券组ASIN不足15个":
if (asins.Count() < 15)
{
UpdateCouponDetailByReasons(2, currentCouponDetail, updateAsin: asins, errorMessage: "优惠券组ASIN不足15个");
asins = new List<string>();
break;
}
break;
case "优惠券时间修改":
AnalysisCouponUploadData(couponUploadData, asins, siteCode);
break;
default:
break;
}
}
return asins;
}