diff --git a/BBWYB.Server.API/Controllers/SkuOptimizationController.cs b/BBWYB.Server.API/Controllers/SkuOptimizationController.cs
index 9d9b66b..f99350f 100644
--- a/BBWYB.Server.API/Controllers/SkuOptimizationController.cs
+++ b/BBWYB.Server.API/Controllers/SkuOptimizationController.cs
@@ -72,13 +72,13 @@ namespace BBWYB.Server.API.Controllers
}
///
- /// 获取未完成spu优化任务数量
+ /// 获取待优化任务数量
///
///
[HttpGet]
public long GetNoCompletedSpuOptimizationTaskCount()
{
- return optimizationBusiness.GetNoCompletedSpuOptimizationTaskCount();
+ return optimizationBusiness.GetNoCompletedSpuOptimizationTaskCount(GetUserId());
}
}
}
diff --git a/BBWYB.Server.API/Controllers/UserController.cs b/BBWYB.Server.API/Controllers/UserController.cs
new file mode 100644
index 0000000..257c39a
--- /dev/null
+++ b/BBWYB.Server.API/Controllers/UserController.cs
@@ -0,0 +1,28 @@
+using BBWYB.Server.Business;
+using Microsoft.AspNetCore.Authentication.JwtBearer;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Mvc;
+
+namespace BBWYB.Server.API.Controllers
+{
+ [Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
+ public class UserController : BaseApiController
+ {
+ private UserBusiness userBusiness;
+
+ public UserController(IHttpContextAccessor httpContextAccessor, UserBusiness userBusiness) : base(httpContextAccessor)
+ {
+ this.userBusiness = userBusiness;
+ }
+
+ ///
+ /// 获取登录用户是否为议价组
+ ///
+ ///
+ [HttpGet]
+ public bool GetisBargainTeamByUserId()
+ {
+ return userBusiness.GetisBargainTeamByUserId(GetUserId(), false).isBargainTeam;
+ }
+ }
+}
diff --git a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs
index c9335a2..e271b67 100644
--- a/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs
+++ b/BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs
@@ -15,7 +15,9 @@ using SDKAdapter.OperationPlatform.Client;
using SDKAdapter.OperationPlatform.Models;
using SDKAdapter.PurchasePlatform.Client;
using SDKAdapter.PurchasePlatform.Models;
+using System.Collections.Generic;
using System.Data;
+using System.Net.Http.Headers;
using System.Reflection;
using System.Text;
using Yitter.IdGenerator;
@@ -1473,9 +1475,10 @@ namespace BBWYB.Server.Business
});
var errorPurchaserList = new List();
- var errorSchemeList = new List();
+ //var errorSchemeList = new List();
var errorSchemeGroupList = new List();
+
var dbPurchaserList = fsql.Select().ToList();
var dbPurchaseGroupList = fsql.Select().ToList();
var dbSchemeList = fsql.Select().ToList();
@@ -1486,6 +1489,8 @@ namespace BBWYB.Server.Business
var updateSchemeGroupList = new List();
var deletePsgIdList = new List();
+
+
foreach (var purchaseRelation in purchaseRelations)
{
var dbPurchaser = dbPurchaserList.FirstOrDefault(p => p.Name == purchaseRelation.PurchaserName);
@@ -1504,6 +1509,8 @@ namespace BBWYB.Server.Business
}
}
+ List compareNullBelongSchemeList = new List();
+ var errorBelongSchemeList = new List();
foreach (var purchaseRelation in purchaseRelations)
{
var dbPurchaser = dbPurchaserList.FirstOrDefault(p => p.Name == purchaseRelation.PurchaserName);
@@ -1512,11 +1519,12 @@ namespace BBWYB.Server.Business
//查询使用了该采购商的采购方案
var usePurchaserSchemeIdList = dbSchemeProductList.Where(psp => psp.PurchaserId == dbPurchaser.Id)
- .Select(psp => psp.SkuPurchaseSchemeId)
- .Distinct()
- .ToList();
+ .Select(psp => psp.SkuPurchaseSchemeId)
+ .Distinct()
+ .ToList();
var usePurchaserSchemeList = dbSchemeList.Where(ps => usePurchaserSchemeIdList.Contains(ps.Id)).ToList();
+
foreach (var scheme in usePurchaserSchemeList)
{
var pspList = dbSchemeProductList.Where(psp => psp.SkuPurchaseSchemeId == scheme.Id).ToList();
@@ -1527,14 +1535,27 @@ namespace BBWYB.Server.Business
var currentSchemePurchaserBelongGroups = currentSchemePurchaserList.GroupBy(p => p.BelongBargainTeamId);
if (currentSchemePurchaserBelongGroups.Count() > 1)
{
- var sb = new StringBuilder($"采购方案{scheme.Id}使用了{currentSchemePurchaserBelongGroups.Count()}个不同归属的采购商 ");
+ //if (currentSchemePurchaserBelongGroups.Any(g => string.IsNullOrEmpty(g.Key)))
+ //{
+ //采购方案包含多个不同议价组的采购商且议价组Id为空
+ var schemeModel = new BelongSchemeTestModel()
+ {
+ SchemeId = scheme.Id,
+ BelongPurchaserTestModelList = new List()
+ };
+ compareNullBelongSchemeList.Add(schemeModel);
+
foreach (var belongGroup in currentSchemePurchaserBelongGroups)
{
- var teamName = belongGroup.FirstOrDefault()?.BelongBargainTeamName;
- sb.Append($"{teamName}:{string.Join(",", belongGroup.Select(x => x.Name))},");
+ foreach (var purchaser in belongGroup)
+ {
+ schemeModel.BelongPurchaserTestModelList.Add(new BelongPurchaserTestModel()
+ {
+ BelongTeam = string.IsNullOrEmpty(purchaser.BelongBargainTeamName) ? "空" : purchaser.BelongBargainTeamName,
+ PurchaserName = purchaser.Name
+ });
+ }
}
-
- errorSchemeList.Add(sb.ToString());
}
else if (currentSchemePurchaserBelongGroups.Count() == 1)
{
@@ -1549,6 +1570,60 @@ namespace BBWYB.Server.Business
}
}
+ #region 筛选有没有混合空组采购商的情况
+ foreach (var belongScheme in compareNullBelongSchemeList)
+ {
+ if (belongScheme.BelongPurchaserTestModelList.Any(p => p.BelongTeam == "空"))
+ {
+ var nullBelongPurchaserList = belongScheme.BelongPurchaserTestModelList.Where(p => p.BelongTeam == "空").ToList();
+ var otherSchemeList = compareNullBelongSchemeList.Where(c => c.SchemeId != belongScheme.SchemeId &&
+ c.BelongPurchaserTestModelList.Any(p => p.BelongTeam == "空") &&
+ c.BelongGroupKey != belongScheme.BelongGroupKey &&
+ c.BelongPurchaserTestModelList.Any(x => nullBelongPurchaserList.Any(y => y.PurchaserName == x.PurchaserName))).ToList();
+ if (otherSchemeList.Count() > 0)
+ {
+ foreach (var belongPurchaser in nullBelongPurchaserList)
+ {
+ belongPurchaser.RelationSchemeIdList = otherSchemeList.Where(c => c.BelongPurchaserTestModelList.Any(x => belongPurchaser.PurchaserName == x.PurchaserName)).Select(c => c.SchemeId).Distinct().ToList();
+ }
+ errorBelongSchemeList.Add(belongScheme);
+ }
+ else
+ {
+ //没有混合空组
+ var firstNoNullBelongPurchaserName = belongScheme.BelongPurchaserTestModelList.FirstOrDefault(p => p.BelongTeam != "空")?.PurchaserName;
+ var firstNoNullBelongPurchaser = dbPurchaserList.FirstOrDefault(p => p.Name == firstNoNullBelongPurchaserName);
+ if (firstNoNullBelongPurchaser != null)
+ {
+ foreach (var nullBelongPurchaser in nullBelongPurchaserList)
+ {
+ var dbPurchaser = dbPurchaserList.FirstOrDefault(p => p.Name == nullBelongPurchaser.PurchaserName);
+ if (dbPurchaser != null)
+ {
+ dbPurchaser.BelongBargainTeamId = firstNoNullBelongPurchaser.BelongBargainTeamId;
+ dbPurchaser.BelongBargainTeamName = firstNoNullBelongPurchaser.BelongBargainTeamName;
+ dbPurchaser.BelongType = Enums.PurchaserBelongType.临时;
+ updatePurchaserList.Add(dbPurchaser);
+ }
+ }
+
+ var dbScheme = dbSchemeList.FirstOrDefault(s => s.Id == belongScheme.SchemeId);
+ if (dbScheme != null)
+ {
+ dbScheme.BelongBargainTeamId = firstNoNullBelongPurchaser.BelongBargainTeamId;
+ dbScheme.BelongBargainTeamName = firstNoNullBelongPurchaser.BelongBargainTeamName;
+ updateSchemeList.Add(dbScheme);
+ }
+ }
+ }
+ }
+ else
+ {
+ errorBelongSchemeList.Add(belongScheme);
+ }
+ }
+ #endregion
+
foreach (var psg in dbPurchaseGroupList)
{
var schemeList = dbSchemeList.Where(ps => ps.SchemeGroupId == psg.Id).ToList();
@@ -1561,13 +1636,34 @@ namespace BBWYB.Server.Business
var currentPsgPurchaserBelongGroups = schemeList.GroupBy(ps => ps.BelongBargainTeamId);
if (currentPsgPurchaserBelongGroups.Count() > 1)
{
- var sb = new StringBuilder($"采购分组{psg.GroupName}使用了{currentPsgPurchaserBelongGroups.Count()}个不同归属的采购方案 ");
- foreach (var belongGroup in currentPsgPurchaserBelongGroups)
+ //var sb = new StringBuilder($"采购分组{psg.GroupName}使用了{currentPsgPurchaserBelongGroups.Count()}个不同归属的采购方案");
+ //foreach (var belongGroup in currentPsgPurchaserBelongGroups)
+ //{
+ // var teamName = belongGroup.FirstOrDefault()?.BelongBargainTeamName;
+ // sb.Append($"{teamName}:{string.Join(",", belongGroup.Select(x => x.Id))},");
+ //}
+ //errorSchemeGroupList.Add(sb.ToString());
+
+ var ps = currentPsgPurchaserBelongGroups.SelectMany(g => g.ToList()).FirstOrDefault(ps => !string.IsNullOrEmpty(ps.BelongBargainTeamId));
+
+ foreach (var schemeGroup in currentPsgPurchaserBelongGroups)
+ {
+ foreach (var scheme in schemeGroup)
+ {
+ if (string.IsNullOrEmpty(scheme.BelongBargainTeamId))
+ {
+ scheme.BelongBargainTeamId = ps?.BelongBargainTeamId;
+ scheme.BelongBargainTeamName = ps?.BelongBargainTeamName;
+ updateSchemeList.Add(scheme);
+ }
+ }
+ }
+
+ if (psg.BelongBargainTeamId != ps?.BelongBargainTeamId)
{
- var teamName = belongGroup.FirstOrDefault()?.BelongBargainTeamName;
- sb.Append($"{teamName}:{string.Join(",", belongGroup.Select(x => x.Id))},");
+ psg.BelongBargainTeamId = ps?.BelongBargainTeamId;
+ updateSchemeGroupList.Add(psg);
}
- errorSchemeGroupList.Add(sb.ToString());
}
else if (currentPsgPurchaserBelongGroups.Count() == 1)
{
@@ -1581,10 +1677,15 @@ namespace BBWYB.Server.Business
}
if (errorPurchaserList.Count() > 0 ||
- errorSchemeList.Count() > 0 ||
+ errorBelongSchemeList.Count() > 0 ||
errorSchemeGroupList.Count() > 0)
{
- var msg = JsonConvert.SerializeObject(errorPurchaserList.Union(errorSchemeList).Union(errorSchemeGroupList));
+ if (errorBelongSchemeList.Count() > 0)
+ {
+ var msg2 = JsonConvert.SerializeObject(errorBelongSchemeList);
+ throw new BusinessException(msg2);
+ }
+ var msg = JsonConvert.SerializeObject(errorPurchaserList.Union(errorSchemeGroupList));
throw new BusinessException(msg);
}
diff --git a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs
index 24db7ea..da64734 100644
--- a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs
+++ b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs
@@ -11,6 +11,7 @@ using BBWYB.Server.Model.Db.Mds;
using BBWYB.Server.Model.Db.MDS;
using BBWYB.Server.Model.Dto;
using FreeSql;
+using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.DependencyInjection;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
@@ -41,6 +42,7 @@ namespace BBWYB.Server.Business
private Lazy venderBusinessLazy;
private Lazy purchaseSchemeBusinessLazy;
private Lazy timeLimitRulesLazy;
+ private Lazy memoryCacheLazy;
private PP_PlatformClientFactory ppPlatformClientFactory => pplatformClientFactoryLazy.Value;
private TaskSchedulerManager taskSchedulerManager => taskSchedulerManagerLazy.Value;
@@ -59,8 +61,12 @@ namespace BBWYB.Server.Business
private TimeLimitRules timeLimitRules => timeLimitRulesLazy.Value;
+ private IMemoryCache memoryCache => memoryCacheLazy.Value;
+
private IList cantPurchaseOrderStateList;
+ private TimeSpan _1688ConcurrentKeyTimeSpan;
+
public PurchaseOrderBusiness(IFreeSql fsql,
NLogManager nLogManager,
IIdGenerator idGenerator,
@@ -79,12 +85,14 @@ namespace BBWYB.Server.Business
venderBusinessLazy = new Lazy(() => serviceProvider.GetService());
purchaseSchemeBusinessLazy = new Lazy(() => serviceProvider.GetService());
timeLimitRulesLazy = new Lazy(() => serviceProvider.GetService());
+ memoryCacheLazy = new Lazy(() => serviceProvider.GetService());
cantPurchaseOrderStateList = new List()
{
Enums.OrderState.已取消,
Enums.OrderState.已完成,
Enums.OrderState.待付款
};
+ _1688ConcurrentKeyTimeSpan = new TimeSpan(0, 1, 0);
}
///
@@ -523,49 +531,33 @@ namespace BBWYB.Server.Business
var allCargoParamList = new List();
request.CargoParamGroupList.ForEach(x => allCargoParamList.AddRange(x.CargoParamList));
- #region 更新采购方案
- {
- var cargoParamGroupsBySchemeList = allCargoParamList.GroupBy(c => c.SchemeId);
- foreach (var cargoParamGroupsByScheme in cargoParamGroupsBySchemeList)
- {
- var schemeId = cargoParamGroupsByScheme.Key;
- var skuId = cargoParamGroupsByScheme.FirstOrDefault().BelongSkuId;
- var skuItemCount = orderSkus.FirstOrDefault(osku => osku.SkuId == skuId)?.ItemTotal ?? 0;
+ //#region 更新采购方案
+ //{
+ // var cargoParamGroupsBySchemeList = allCargoParamList.GroupBy(c => c.SchemeId);
+ // foreach (var cargoParamGroupsByScheme in cargoParamGroupsBySchemeList)
+ // {
+ // var schemeId = cargoParamGroupsByScheme.Key;
+ // var skuId = cargoParamGroupsByScheme.FirstOrDefault().BelongSkuId;
+ // var skuItemCount = orderSkus.FirstOrDefault(osku => osku.SkuId == skuId)?.ItemTotal ?? 0;
- //var lastPurchasePriceCost = cargoParamGroupsByScheme.Sum(cargoParam => createdPurchaseOrderItemList.Where(x => x.SkuId == cargoParam.SkuId)
- // .Select(x => x.Price * (cargoParam.PurchaseRatio ?? 1))
- // .DefaultIfEmpty(0M)
- // .First());
+ // //var lastPurchasePriceCost = cargoParamGroupsByScheme.Sum(cargoParam => createdPurchaseOrderItemList.Where(x => x.SkuId == cargoParam.SkuId)
+ // // .Select(x => x.Price * (cargoParam.PurchaseRatio ?? 1))
+ // // .DefaultIfEmpty(0M)
+ // // .First());
- var lastPurchasePriceCost = cargoParamGroupsByScheme.Sum(cargoParam =>
- {
- return (createdPurchaseOrderItemList.FirstOrDefault(x => x.SkuId == cargoParam.SkuId)?.Price ?? 0) * (cargoParam.PurchaseRatio ?? 1);
- });
+ // var lastPurchasePriceCost = cargoParamGroupsByScheme.Sum(cargoParam =>
+ // {
+ // return (createdPurchaseOrderItemList.FirstOrDefault(x => x.SkuId == cargoParam.SkuId)?.Price ?? 0) * (cargoParam.PurchaseRatio ?? 1);
+ // });
- var purchasedAmount = insertOrderCostDetails.Where(ocd => ocd.SkuId == skuId).Sum(ocd => ocd.SkuAmount);
- var update = fsql.Update(schemeId).Set(ps => ps.LastPurchaseTime, DateTime.Now)
- .Set(ps => ps.LastPurchasePriceCost, lastPurchasePriceCost)
- .Set(ps => ps.PurchasedCount + 1)
- .Set(ps => ps.PurchasedItemCount + skuItemCount)
- .Set(ps => ps.PurchasedAmount + purchasedAmount);
- updatePurchaseSchemeList.Add(update);
- }
- }
- #endregion
-
- //#region 更新采购配件
- //{
- // foreach (var cargoParam in allCargoParamList)
- // {
- // var createOrderItem = createdPurchaseOrderItemList.FirstOrDefault(x => x.SkuId == cargoParam.SkuId);
- // if (createOrderItem != null)
- // {
- // var update = fsql.Update()
- // .Set(pss => pss.LastPurchasePriceCost, createOrderItem.Price)
- // .Where(pss => pss.PurchaseSkuId == cargoParam.SkuId && pss.SkuPurchaseSchemeId == cargoParam.SchemeId);
- // updatePssList.Add(update);
- // }
+ // var purchasedAmount = insertOrderCostDetails.Where(ocd => ocd.SkuId == skuId).Sum(ocd => ocd.SkuAmount);
+ // var update = fsql.Update(schemeId).Set(ps => ps.LastPurchaseTime, DateTime.Now)
+ // .Set(ps => ps.LastPurchasePriceCost, lastPurchasePriceCost)
+ // .Set(ps => ps.PurchasedCount + 1)
+ // .Set(ps => ps.PurchasedItemCount + skuItemCount)
+ // .Set(ps => ps.PurchasedAmount + purchasedAmount);
+ // updatePurchaseSchemeList.Add(update);
// }
//}
//#endregion
@@ -2364,25 +2356,56 @@ namespace BBWYB.Server.Business
//}
#region 1688CallBack
+ private string Get1688ConcurrentKey(JObject j)
+ {
+ var type = j.Value("type").ToUpper();
+ var poId = string.Empty;
+ switch (type)
+ {
+ case "ORDER_BUYER_VIEW_PART_PART_SENDGOODS": //部分发货
+ case "ORDER_BUYER_VIEW_ANNOUNCE_SENDGOODS": //发货
+ case "ORDER_BUYER_VIEW_ORDER_PRICE_MODIFY": //订单改价
+ case "LOGISTICS_BUYER_VIEW_TRACE": //物流变更
+ case "ORDER_BUYER_VIEW_ORDER_PAY": //支付
+ poId = j["data"].Value("orderId");
+ break;
+ default:
+ break;
+ }
+ if (string.IsNullOrEmpty(poId))
+ return string.Empty;
+
+ return $"{type}_{poId}";
+ }
+
public void CallbackFrom1688(string jsonStr)
{
nLogManager.Default().Info(jsonStr);
var jObject = JObject.Parse(jsonStr);
+ var _1688ConcurrentKey = Get1688ConcurrentKey(jObject);
+
+ if (!string.IsNullOrEmpty(_1688ConcurrentKey))
+ {
+ if (memoryCache.TryGetValue(_1688ConcurrentKey, out _))
+ return;//并发key存在,不允执行
+ memoryCache.Set(_1688ConcurrentKey, _1688ConcurrentKey, _1688ConcurrentKeyTimeSpan);
+ }
+
var type = jObject.Value("type").ToUpper();
switch (type)
{
case "ORDER_BUYER_VIEW_PART_PART_SENDGOODS": //部分发货
case "ORDER_BUYER_VIEW_ANNOUNCE_SENDGOODS": //发货
- DeliveryCallbackFrom1688(jObject);
+ DeliveryCallbackFrom1688(jObject, _1688ConcurrentKey);
break;
case "ORDER_BUYER_VIEW_ORDER_PRICE_MODIFY":
- OrderPriceModificationCallbackFrom1688(jObject); //订单改价
+ OrderPriceModificationCallbackFrom1688(jObject, _1688ConcurrentKey); //订单改价
break;
case "LOGISTICS_BUYER_VIEW_TRACE":
// LogisticsUpdateCallbackFrom1688(jObject);//1688物流信息变更
break;
case "ORDER_BUYER_VIEW_ORDER_PAY":
- OrderPayFrom1688(jObject);
+ OrderPayFrom1688(jObject, _1688ConcurrentKey);
break;
default:
break;
@@ -2393,17 +2416,21 @@ namespace BBWYB.Server.Business
/// 1688发货回调
///
///
- private void DeliveryCallbackFrom1688(JObject jObject)
+ /// 并发key
+ private void DeliveryCallbackFrom1688(JObject jObject, string _1688ConcurrentKey)
{
var purchaseOrderId = jObject["data"].Value("orderId");
- Task.Factory.StartNew(() => DeliveryCallbackFrom1688(purchaseOrderId), CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.PurchaseOrderCallbackTaskScheduler);
+ Task.Factory.StartNew(() => DeliveryCallbackFrom1688(purchaseOrderId, _1688ConcurrentKey), CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.PurchaseOrderCallbackTaskScheduler);
}
///
/// 1688发货回调
///
- /// 采购单
- private void DeliveryCallbackFrom1688(string purchaseOrderId)
+ ///
+ ///
+ ///
+ ///
+ private void DeliveryCallbackFrom1688(string purchaseOrderId, string _1688ConcurrentKey)
{
string orderId = string.Empty;
long? shopId = null;
@@ -2641,22 +2668,28 @@ namespace BBWYB.Server.Business
{
nLogManager.Default().Error(ex, $"DeliveryCallback 回调平台1688,订单号{orderId},采购单号{purchaseOrderId},执行进度[{currentProgress}],采购单物流信息:{wayBillNoResponseInfo}");
}
+ finally
+ {
+ if (!string.IsNullOrEmpty(_1688ConcurrentKey))
+ memoryCache.Remove(_1688ConcurrentKey);
+ }
}
///
/// 1688订单改价回调
///
///
- private void OrderPriceModificationCallbackFrom1688(JObject jObject)
+ ///
+ private void OrderPriceModificationCallbackFrom1688(JObject jObject, string _1688ConcurrentKey)
{
var purchaseOrderId = jObject["data"].Value("orderId");
- Task.Factory.StartNew(() => OrderPriceModificationCallback(purchaseOrderId, Enums.Platform.阿里巴巴), CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.PurchaseOrderCallbackTaskScheduler);
+ Task.Factory.StartNew(() => OrderPriceModificationCallback(purchaseOrderId, Enums.Platform.阿里巴巴, _1688ConcurrentKey), CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.PurchaseOrderCallbackTaskScheduler);
}
- private void OrderPayFrom1688(JObject jObject)
+ private void OrderPayFrom1688(JObject jObject, string _1688ConcurrentKey)
{
var purchaseOrderId = jObject["data"].Value("orderId");
- Task.Factory.StartNew(() => OrderPayCallback(purchaseOrderId, Enums.Platform.阿里巴巴), CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.PurchaseOrderCallbackTaskScheduler);
+ Task.Factory.StartNew(() => OrderPayCallback(purchaseOrderId, Enums.Platform.阿里巴巴, _1688ConcurrentKey), CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.PurchaseOrderCallbackTaskScheduler);
}
#endregion
@@ -2666,14 +2699,21 @@ namespace BBWYB.Server.Business
///
///
///
- private void OrderPriceModificationCallback(string purchaseOrderId, Enums.Platform callbackPlatform)
+ ///
+ private void OrderPriceModificationCallback(string purchaseOrderId, Enums.Platform callbackPlatform, string concurrentKey)
{
- OnSomeOnePurchaseOrderChanged(purchaseOrderId, true);
+ OnSomeOnePurchaseOrderChanged(purchaseOrderId, true, concurrentKey);
}
- private void OrderPayCallback(string purchaseOrderId, Enums.Platform callbackPlatform)
+ ///
+ /// 订单支付回调
+ ///
+ ///
+ ///
+ ///
+ private void OrderPayCallback(string purchaseOrderId, Enums.Platform callbackPlatform, string concurrentKey)
{
- OnSomeOnePurchaseOrderChanged(purchaseOrderId, false);
+ OnSomeOnePurchaseOrderChanged(purchaseOrderId, false, concurrentKey);
}
public void KuaiDi100Publish(string param)
@@ -2945,7 +2985,8 @@ namespace BBWYB.Server.Business
///
/// 采购单Id
/// 当不需要触发订单改价时是否继续走流程
- public void OnSomeOnePurchaseOrderChanged(string purchaseOrderId, bool keepRunWhenNoEditOrderPirce)
+ /// 并发key
+ public void OnSomeOnePurchaseOrderChanged(string purchaseOrderId, bool keepRunWhenNoEditOrderPirce, string concurrentKey)
{
bool isEditOrderPrice = true;
try
@@ -3200,6 +3241,11 @@ namespace BBWYB.Server.Business
{
nLogManager.Default().Error(ex, $"OrderPriceModificationCallback 采购单号{purchaseOrderId}");
}
+ finally
+ {
+ if (!string.IsNullOrEmpty(concurrentKey))
+ memoryCache.Remove(concurrentKey);
+ }
}
private void SendDingDing(string content)
diff --git a/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs b/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs
index 52e80a4..65ecade 100644
--- a/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs
+++ b/BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs
@@ -8,6 +8,7 @@ using BBWYB.Server.Model.Db.SpuOptimization;
using BBWYB.Server.Model.Dto;
using FreeSql;
using Newtonsoft.Json;
+using Org.BouncyCastle.Asn1;
using System.Numerics;
using System.Text.RegularExpressions;
using Yitter.IdGenerator;
@@ -619,6 +620,7 @@ namespace BBWYB.Server.Business
request.EndTime = request.EndTime.Date.AddDays(1).AddSeconds(-1);
var uInfo = userBusiness.GetisBargainTeamByUserId(userId);
+
ISelect select = null;
if (request.SpuOptimizationTaskId != null && request.SpuOptimizationTaskId != 0)
{
@@ -635,9 +637,10 @@ namespace BBWYB.Server.Business
skuKeyWords = request.SpuOrSku;
}
+ var barginTeamId = uInfo.bargainTeam?.Id ?? string.Empty;
+
select = fsql.Select()
- .Where(t => t.IsOptimizationCompleted == false &&
- t.CreateTime >= request.StartTime &&
+ .Where(t => t.CreateTime >= request.StartTime &&
t.CreateTime <= request.EndTime)
.WhereIf(request.BelongShopId != null && request.BelongShopId != 0, t => t.BelongShopId == request.BelongShopId)
.WhereIf(!string.IsNullOrEmpty(request.JDSku) ||
@@ -648,9 +651,72 @@ namespace BBWYB.Server.Business
.Any())
.WhereIf(!string.IsNullOrEmpty(request.TitleKeywords), t => t.ProductTitle.Contains(request.TitleKeywords))
.WhereIf(!string.IsNullOrEmpty(spuKeyWords), t => t.ProductId == spuKeyWords);
+
+ /*
+ .WhereIf(request.IsCompleted, t => t.IsOptimizationCompleted == true ||
+ fsql.Select()
+ .Where(sbt => sbt.IsOptimizationCompleted == true &&
+ sbt.SpuOptimizationTaskId == t.Id &&
+ sbt.BelongTeamId == barginTeamId)
+ .Any())
+ .WhereIf(!request.IsCompleted && !string.IsNullOrEmpty(barginTeamId), t => t.IsOptimizationCompleted == false &&
+ fsql.Select()
+ .Where(sbt => sbt.IsOptimizationCompleted == false &&
+ sbt.SpuOptimizationTaskId == t.Id &&
+ sbt.BelongTeamId == barginTeamId)
+ .Any())
+ .WhereIf(!request.IsCompleted && string.IsNullOrEmpty(barginTeamId), t => t.IsOptimizationCompleted == false)
+ */
+ if (request.State == 0)
+ {
+ if (string.IsNullOrEmpty(barginTeamId))
+ {
+ //非议价组查询未完成
+ select = select.Where(t => t.IsOptimizationCompleted == false);
+ }
+ else
+ {
+ //议价组查询未完成
+ select = select.Where(t => t.IsOptimizationCompleted == false &&
+ fsql.Select()
+ .Where(sbt => sbt.IsOptimizationCompleted == false &&
+ sbt.SpuOptimizationTaskId == t.Id &&
+ sbt.BelongTeamId == barginTeamId)
+ .Any());
+ }
+ }
+ else if (request.State == 1)
+ {
+ if (string.IsNullOrEmpty(barginTeamId))
+ {
+ //非议价组查询已完成
+ select = select.Where(t => t.IsOptimizationCompleted == true);
+ }
+ else
+ {
+ //议价组查询已完成
+ select = select.Where(t => fsql.Select()
+ .Where(sbt => sbt.IsOptimizationCompleted == true &&
+ sbt.SpuOptimizationTaskId == t.Id &&
+ sbt.BelongTeamId == barginTeamId)
+ .Any());
+ }
+ }
+ else if (request.State == 2)
+ {
+ //已超时
+ select = select.Where(t => t.IsOptimizationCompleted == true)
+ .Where(t => fsql.Select()
+ .Where(sbt => sbt.IsOptimizationCompleted == false &&
+ sbt.SpuOptimizationTaskId == t.Id)
+ .WhereIf(!string.IsNullOrEmpty(barginTeamId), sbt => sbt.BelongTeamId == barginTeamId)
+ .Any());
+ }
}
- var taskList = select.OrderByDescending(t => t.CreateTime)
+ var sql = select.ToSql();
+
+ var taskList = select.OrderBy(t => t.CreateTime)
.Count(out var total)
.Page(request.PageIndex, request.PageSize)
.ToList();
@@ -837,6 +903,7 @@ namespace BBWYB.Server.Business
IUpdate updateSpuTask = null;
IUpdate updateSpuSaleInfo = null;
IUpdate updateCompetitiveTenderTask = null;
+ IUpdate updateTimeLimitTask = null;
var spuOptimizationBargainTeamTaskList = fsql.Select()
.Where(sbt => sbt.SpuOptimizationTaskId == taskId)
@@ -894,12 +961,33 @@ namespace BBWYB.Server.Business
.Set(ct => ct.IsWin, true);
#endregion
}
+ else
+ {
+ //重启任务
+ if (spuOptimizationTask.ReStartTimes < 2)
+ {
+ var timeLimitTask = fsql.Select().Where(t => t.TaskType == Enums.TimeLimitTaskType.待议价任务 &&
+ t.TaskId == spuOptimizationTask.Id).ToOne();
+ if (timeLimitTask != null)
+ {
+ var expirationTime = timeLimitRules.CalculateExpirationTime(Enums.TimeLimitTaskType.待议价任务, DateTime.Now);
+ updateTimeLimitTask = fsql.Update(timeLimitTask.Id)
+ .Set(t => t.ExpirationTime, expirationTime)
+ .Set(t => t.CompletionTime, null)
+ .Set(t => t.IsTimely, null);
+ }
+ spuOptimizationTask.ReStartTimes++;
+ updateSpuTask = fsql.Update(spuOptimizationTask.Id)
+ .Set(t => t.ReStartTimes, spuOptimizationTask.ReStartTimes);
+ }
+ }
fsql.Transaction(() =>
{
updateSpuTask?.ExecuteAffrows();
updateSpuSaleInfo?.ExecuteAffrows();
updateCompetitiveTenderTask?.ExecuteAffrows();
+ updateTimeLimitTask?.ExecuteAffrows();
});
}
catch (Exception ex)
@@ -946,8 +1034,20 @@ namespace BBWYB.Server.Business
//fsql.Delete(ctTaskIdList).ExecuteAffrows();
}
- public long GetNoCompletedSpuOptimizationTaskCount()
+ public long GetNoCompletedSpuOptimizationTaskCount(string userId)
{
+ var uInfo = userBusiness.GetisBargainTeamByUserId(userId);
+ if (uInfo.isBargainTeam)
+ {
+ var barginTeamId = uInfo.bargainTeam?.Id ?? string.Empty;
+ return fsql.Select().Where(t => t.IsOptimizationCompleted == false &&
+ fsql.Select()
+ .Where(sbt => sbt.IsOptimizationCompleted == false &&
+ sbt.SpuOptimizationTaskId == t.Id &&
+ sbt.BelongTeamId == barginTeamId)
+ .Any()).Count();
+ }
+
return fsql.Select().Where(t => t.IsOptimizationCompleted == false).Count();
}
}
diff --git a/BBWYB.Server.Business/TimeLimitTask/TimeLimitTaskBusiness.cs b/BBWYB.Server.Business/TimeLimitTask/TimeLimitTaskBusiness.cs
index bf98724..e217ff8 100644
--- a/BBWYB.Server.Business/TimeLimitTask/TimeLimitTaskBusiness.cs
+++ b/BBWYB.Server.Business/TimeLimitTask/TimeLimitTaskBusiness.cs
@@ -38,11 +38,6 @@ namespace BBWYB.Server.Business
}
public void CheckTask()
{
- //fsql.Update().Set(t => t.IsTimely, false)
- // .Where(t => t.CompletionTime == null)
- // .Where(t => t.ExpirationTime < DateTime.Now)
- // .ExecuteAffrows();
-
var timeoutTaskList = fsql.Select().Where(t => t.CompletionTime == null && t.ExpirationTime < DateTime.Now).ToList();
if (timeoutTaskList.Count() > 0)
{
diff --git a/BBWYB.Server.Model/BelongTestModel.cs b/BBWYB.Server.Model/BelongTestModel.cs
new file mode 100644
index 0000000..ba9c32c
--- /dev/null
+++ b/BBWYB.Server.Model/BelongTestModel.cs
@@ -0,0 +1,28 @@
+namespace BBWYB.Server.Model
+{
+ public class BelongSchemeTestModel
+ {
+ public long SchemeId { get; set; }
+
+ public IList BelongPurchaserTestModelList { get; set; }
+
+ public string BelongGroupKey
+ {
+ get
+ {
+ return string.Join(",", BelongPurchaserTestModelList.OrderBy(x => x.BelongTeam)
+ .Select(x => x.BelongTeam)
+ .Distinct());
+ }
+ }
+ }
+
+ public class BelongPurchaserTestModel
+ {
+ public string PurchaserName { get; set; }
+
+ public string BelongTeam { get; set; }
+
+ public List RelationSchemeIdList { get; set; }
+ }
+}
diff --git a/BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationtask.cs b/BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationtask.cs
index 97c0020..1c5c598 100644
--- a/BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationtask.cs
+++ b/BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationtask.cs
@@ -87,6 +87,12 @@ namespace BBWYB.Server.Model.Db
[Column(DbType = "int", MapType = typeof(int?))]
public Enums.TriggerOptimizationReason? TriggerOptimizationReason { get; set; }
+ ///
+ /// 重启次数
+ ///
+ [Column(DbType = "int")]
+ public int ReStartTimes { get; set; } = 0;
+
}
}
diff --git a/BBWYB.Server.Model/Dto/Request/Optimization/QueryNoCompletionOptimizationTaskRequest.cs b/BBWYB.Server.Model/Dto/Request/Optimization/QueryNoCompletionOptimizationTaskRequest.cs
index bca729f..9e8e835 100644
--- a/BBWYB.Server.Model/Dto/Request/Optimization/QueryNoCompletionOptimizationTaskRequest.cs
+++ b/BBWYB.Server.Model/Dto/Request/Optimization/QueryNoCompletionOptimizationTaskRequest.cs
@@ -40,5 +40,20 @@ namespace BBWYB.Server.Model.Dto
/// 标题关键字
///
public string TitleKeywords { get; set; }
+
+ /////
+ ///// 是否完成 (议价组完成视为完成)
+ /////
+ //public bool IsCompleted { get; set; }
+
+ /////
+ ///// 是否关闭
+ /////
+ //public bool IsClosed { get; set; }
+
+ ///
+ /// 任务相对状态 0=待优化 1=已完成 2=已关闭
+ ///
+ public int State { get; set; }
}
}
diff --git a/BBWYB.Server.Model/Dto/Response/Optimization/SpuOptimizationBargainTeamTaskResponse.cs b/BBWYB.Server.Model/Dto/Response/Optimization/SpuOptimizationBargainTeamTaskResponse.cs
index 5ec20a4..5167561 100644
--- a/BBWYB.Server.Model/Dto/Response/Optimization/SpuOptimizationBargainTeamTaskResponse.cs
+++ b/BBWYB.Server.Model/Dto/Response/Optimization/SpuOptimizationBargainTeamTaskResponse.cs
@@ -4,5 +4,6 @@ namespace BBWYB.Server.Model.Dto
{
public class SpuOptimizationBargainTeamTaskResponse : SpuOptimizationBargainTeamTask
{
+
}
}