飞鱼 1 year ago
parent
commit
d91945f080
  1. 4
      BBWYB.Server.API/Controllers/SkuOptimizationController.cs
  2. 28
      BBWYB.Server.API/Controllers/UserController.cs
  3. 133
      BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs
  4. 156
      BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs
  5. 108
      BBWYB.Server.Business/SkuOptimization/OptimizationBusiness.cs
  6. 5
      BBWYB.Server.Business/TimeLimitTask/TimeLimitTaskBusiness.cs
  7. 28
      BBWYB.Server.Model/BelongTestModel.cs
  8. 6
      BBWYB.Server.Model/Db/SpuOptimization/Spuoptimizationtask.cs
  9. 15
      BBWYB.Server.Model/Dto/Request/Optimization/QueryNoCompletionOptimizationTaskRequest.cs
  10. 1
      BBWYB.Server.Model/Dto/Response/Optimization/SpuOptimizationBargainTeamTaskResponse.cs

4
BBWYB.Server.API/Controllers/SkuOptimizationController.cs

@ -72,13 +72,13 @@ namespace BBWYB.Server.API.Controllers
}
/// <summary>
/// 获取未完成spu优化任务数量
/// 获取优化任务数量
/// </summary>
/// <returns></returns>
[HttpGet]
public long GetNoCompletedSpuOptimizationTaskCount()
{
return optimizationBusiness.GetNoCompletedSpuOptimizationTaskCount();
return optimizationBusiness.GetNoCompletedSpuOptimizationTaskCount(GetUserId());
}
}
}

28
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;
}
/// <summary>
/// 获取登录用户是否为议价组
/// </summary>
/// <returns></returns>
[HttpGet]
public bool GetisBargainTeamByUserId()
{
return userBusiness.GetisBargainTeamByUserId(GetUserId(), false).isBargainTeam;
}
}
}

133
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<string>();
var errorSchemeList = new List<string>();
//var errorSchemeList = new List<string>();
var errorSchemeGroupList = new List<string>();
var dbPurchaserList = fsql.Select<Purchaser>().ToList();
var dbPurchaseGroupList = fsql.Select<PurchaseSchemeGroup>().ToList();
var dbSchemeList = fsql.Select<PurchaseScheme>().ToList();
@ -1486,6 +1489,8 @@ namespace BBWYB.Server.Business
var updateSchemeGroupList = new List<PurchaseSchemeGroup>();
var deletePsgIdList = new List<long>();
foreach (var purchaseRelation in purchaseRelations)
{
var dbPurchaser = dbPurchaserList.FirstOrDefault(p => p.Name == purchaseRelation.PurchaserName);
@ -1504,6 +1509,8 @@ namespace BBWYB.Server.Business
}
}
List<BelongSchemeTestModel> compareNullBelongSchemeList = new List<BelongSchemeTestModel>();
var errorBelongSchemeList = new List<BelongSchemeTestModel>();
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<BelongPurchaserTestModel>()
};
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);
}

156
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<VenderBusiness> venderBusinessLazy;
private Lazy<PurchaseSchemeBusiness> purchaseSchemeBusinessLazy;
private Lazy<TimeLimitRules> timeLimitRulesLazy;
private Lazy<IMemoryCache> 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<Enums.OrderState> cantPurchaseOrderStateList;
private TimeSpan _1688ConcurrentKeyTimeSpan;
public PurchaseOrderBusiness(IFreeSql fsql,
NLogManager nLogManager,
IIdGenerator idGenerator,
@ -79,12 +85,14 @@ namespace BBWYB.Server.Business
venderBusinessLazy = new Lazy<VenderBusiness>(() => serviceProvider.GetService<VenderBusiness>());
purchaseSchemeBusinessLazy = new Lazy<PurchaseSchemeBusiness>(() => serviceProvider.GetService<PurchaseSchemeBusiness>());
timeLimitRulesLazy = new Lazy<TimeLimitRules>(() => serviceProvider.GetService<TimeLimitRules>());
memoryCacheLazy = new Lazy<IMemoryCache>(() => serviceProvider.GetService<IMemoryCache>());
cantPurchaseOrderStateList = new List<Enums.OrderState>()
{
Enums.OrderState.,
Enums.OrderState.,
Enums.OrderState.
};
_1688ConcurrentKeyTimeSpan = new TimeSpan(0, 1, 0);
}
/// <summary>
@ -523,49 +531,33 @@ namespace BBWYB.Server.Business
var allCargoParamList = new List<CargoParamRequest>();
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<PurchaseScheme>(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<PurchaseSchemeProductSku>()
// .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<PurchaseScheme>(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<string>("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<string>("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<string>(_1688ConcurrentKey, out _))
return;//并发key存在,不允执行
memoryCache.Set(_1688ConcurrentKey, _1688ConcurrentKey, _1688ConcurrentKeyTimeSpan);
}
var type = jObject.Value<string>("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发货回调
/// </summary>
/// <param name="jObject"></param>
private void DeliveryCallbackFrom1688(JObject jObject)
/// <param name="_1688ConcurrentKey">并发key</param>
private void DeliveryCallbackFrom1688(JObject jObject, string _1688ConcurrentKey)
{
var purchaseOrderId = jObject["data"].Value<string>("orderId");
Task.Factory.StartNew(() => DeliveryCallbackFrom1688(purchaseOrderId), CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.PurchaseOrderCallbackTaskScheduler);
Task.Factory.StartNew(() => DeliveryCallbackFrom1688(purchaseOrderId, _1688ConcurrentKey), CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.PurchaseOrderCallbackTaskScheduler);
}
/// <summary>
/// 1688发货回调
/// </summary>
/// <param name="purchaseOrderId">采购单</param>
private void DeliveryCallbackFrom1688(string purchaseOrderId)
/// <param name="purchaseOrderId"></param>
/// <param name="_1688ConcurrentKey"></param>
/// <exception cref="Exception"></exception>
/// <exception cref="BusinessException"></exception>
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);
}
}
/// <summary>
/// 1688订单改价回调
/// </summary>
/// <param name="jObject"></param>
private void OrderPriceModificationCallbackFrom1688(JObject jObject)
/// <param name="_1688ConcurrentKey"></param>
private void OrderPriceModificationCallbackFrom1688(JObject jObject, string _1688ConcurrentKey)
{
var purchaseOrderId = jObject["data"].Value<string>("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<string>("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
/// </summary>
/// <param name="purchaseOrderId"></param>
/// <param name="callbackPlatform"></param>
private void OrderPriceModificationCallback(string purchaseOrderId, Enums.Platform callbackPlatform)
/// <param name="concurrentKey"></param>
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)
/// <summary>
/// 订单支付回调
/// </summary>
/// <param name="purchaseOrderId"></param>
/// <param name="callbackPlatform"></param>
/// <param name="concurrentKey"></param>
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
/// </summary>
/// <param name="purchaseOrderId">采购单Id</param>
/// <param name="keepRunWhenNoEditOrderPirce">当不需要触发订单改价时是否继续走流程</param>
public void OnSomeOnePurchaseOrderChanged(string purchaseOrderId, bool keepRunWhenNoEditOrderPirce)
/// <param name="concurrentKey">并发key</param>
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)

108
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<SpuOptimizationTask> 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<SpuOptimizationTask>()
.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<SpuOptimizationBargainTeamTask>()
.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<SpuOptimizationBargainTeamTask>()
.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<SpuOptimizationBargainTeamTask>()
.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<SpuOptimizationBargainTeamTask>()
.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<SpuOptimizationBargainTeamTask>()
.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<SpuOptimizationTaskResponse>();
@ -837,6 +903,7 @@ namespace BBWYB.Server.Business
IUpdate<SpuOptimizationTask> updateSpuTask = null;
IUpdate<SpuTotalSaleInfo> updateSpuSaleInfo = null;
IUpdate<SpuOptimizationCompetitiveTenderTask> updateCompetitiveTenderTask = null;
IUpdate<TimeLimitTask> updateTimeLimitTask = null;
var spuOptimizationBargainTeamTaskList = fsql.Select<SpuOptimizationBargainTeamTask>()
.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<TimeLimitTask>().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>(timeLimitTask.Id)
.Set(t => t.ExpirationTime, expirationTime)
.Set(t => t.CompletionTime, null)
.Set(t => t.IsTimely, null);
}
spuOptimizationTask.ReStartTimes++;
updateSpuTask = fsql.Update<SpuOptimizationTask>(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<SpuOptimizationCompetitiveTenderTask>(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<SpuOptimizationTask>().Where(t => t.IsOptimizationCompleted == false &&
fsql.Select<SpuOptimizationBargainTeamTask>()
.Where(sbt => sbt.IsOptimizationCompleted == false &&
sbt.SpuOptimizationTaskId == t.Id &&
sbt.BelongTeamId == barginTeamId)
.Any()).Count();
}
return fsql.Select<SpuOptimizationTask>().Where(t => t.IsOptimizationCompleted == false).Count();
}
}

5
BBWYB.Server.Business/TimeLimitTask/TimeLimitTaskBusiness.cs

@ -38,11 +38,6 @@ namespace BBWYB.Server.Business
}
public void CheckTask()
{
//fsql.Update<TimeLimitTask>().Set(t => t.IsTimely, false)
// .Where(t => t.CompletionTime == null)
// .Where(t => t.ExpirationTime < DateTime.Now)
// .ExecuteAffrows();
var timeoutTaskList = fsql.Select<TimeLimitTask>().Where(t => t.CompletionTime == null && t.ExpirationTime < DateTime.Now).ToList();
if (timeoutTaskList.Count() > 0)
{

28
BBWYB.Server.Model/BelongTestModel.cs

@ -0,0 +1,28 @@
namespace BBWYB.Server.Model
{
public class BelongSchemeTestModel
{
public long SchemeId { get; set; }
public IList<BelongPurchaserTestModel> 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<long> RelationSchemeIdList { get; set; }
}
}

6
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; }
/// <summary>
/// 重启次数
/// </summary>
[Column(DbType = "int")]
public int ReStartTimes { get; set; } = 0;
}
}

15
BBWYB.Server.Model/Dto/Request/Optimization/QueryNoCompletionOptimizationTaskRequest.cs

@ -40,5 +40,20 @@ namespace BBWYB.Server.Model.Dto
/// 标题关键字
/// </summary>
public string TitleKeywords { get; set; }
///// <summary>
///// 是否完成 (议价组完成视为完成)
///// </summary>
//public bool IsCompleted { get; set; }
///// <summary>
///// 是否关闭
///// </summary>
//public bool IsClosed { get; set; }
/// <summary>
/// 任务相对状态 0=待优化 1=已完成 2=已关闭
/// </summary>
public int State { get; set; }
}
}

1
BBWYB.Server.Model/Dto/Response/Optimization/SpuOptimizationBargainTeamTaskResponse.cs

@ -4,5 +4,6 @@ namespace BBWYB.Server.Model.Dto
{
public class SpuOptimizationBargainTeamTaskResponse : SpuOptimizationBargainTeamTask
{
}
}

Loading…
Cancel
Save