Browse Source

计算时长

liangku_skuoptimazation
shanji 2 years ago
parent
commit
20b6e2a0f0
  1. 9
      BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs
  2. 11
      BBWYB.Server.Business/JD/JDBusiness.cs
  3. 7
      BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs
  4. 34
      BBWYB.Server.Business/QiKuManager.cs
  5. 11
      BBWYB.Server.Business/Sync/OrderSyncBusiness.cs
  6. 168
      BBWYB.Server.Business/TimeLimitTask/TimeLimitRules.cs
  7. 8
      BBWYB.Server.Business/TimeLimitTask/TimeLimitTaskBusiness.cs

9
BBWYB.Server.Business/DataRepair/DataRepairBusiness.cs

@ -27,7 +27,8 @@ namespace BBWYB.Server.Business
private OP_PlatformClientFactory opPlatformClientFactory;
private PP_PlatformClientFactory pp_PlatformClientFactory;
private RestApiService restApiService;
public DataRepairBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, KuaiDi100Manager kuaiDi100Manager, PurchaseSchemeBusiness purchaseSchemeBusiness, PurchaseOrderBusiness purchaseOrderBusiness, FreeSqlMultiDBManager freeSqlMultiDBManager, VenderBusiness venderBusiness, OP_PlatformClientFactory opPlatformClientFactory, PP_PlatformClientFactory pp_PlatformClientFactory, RestApiService restApiService) : base(fsql, nLogManager, idGenerator)
private TimeLimitRules timeLimitRules;
public DataRepairBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, KuaiDi100Manager kuaiDi100Manager, PurchaseSchemeBusiness purchaseSchemeBusiness, PurchaseOrderBusiness purchaseOrderBusiness, FreeSqlMultiDBManager freeSqlMultiDBManager, VenderBusiness venderBusiness, OP_PlatformClientFactory opPlatformClientFactory, PP_PlatformClientFactory pp_PlatformClientFactory, RestApiService restApiService, TimeLimitRules timeLimitRules) : base(fsql, nLogManager, idGenerator)
{
this.kuaiDi100Manager = kuaiDi100Manager;
this.purchaseSchemeBusiness = purchaseSchemeBusiness;
@ -37,6 +38,7 @@ namespace BBWYB.Server.Business
this.opPlatformClientFactory = opPlatformClientFactory;
this.pp_PlatformClientFactory = pp_PlatformClientFactory;
this.restApiService = restApiService;
this.timeLimitRules = timeLimitRules;
}
@ -278,11 +280,12 @@ namespace BBWYB.Server.Business
Id = idGenerator.NewLong(),
OrderId = order.Id,
CreateTme = DateTime.Now,
ExpirationTime = DateTime.Now.AddDays(1),
//ExpirationTime = DateTime.Now.AddDays(1),
OrderSn = order.OrderSn,
Remark = "手工处理待核算",
ShopId = order.ShopId,
TaskType = Enums.TimeLimitTaskType.
TaskType = Enums.TimeLimitTaskType.,
ExpirationTime = timeLimitRules.CalculateExpirationTime(Enums.TimeLimitTaskType., DateTime.Now)
});
}
}

11
BBWYB.Server.Business/JD/JDBusiness.cs

@ -17,18 +17,22 @@ namespace BBWYB.Server.Business.JD
private VenderBusiness venderBusiness;
private DingDingBusiness dingDingBusiness;
private TaskSchedulerManager taskSchedulerManager;
private TimeLimitRules timeLimitRules;
public JDBusiness(IFreeSql fsql,
NLogManager nLogManager,
IIdGenerator idGenerator,
RestApiService restApiService,
VenderBusiness venderBusiness,
DingDingBusiness dingDingBusiness,
TaskSchedulerManager taskSchedulerManager) : base(fsql, nLogManager, idGenerator)
TaskSchedulerManager taskSchedulerManager,
TimeLimitRules timeLimitRules) : base(fsql, nLogManager, idGenerator)
{
this.restApiService = restApiService;
this.venderBusiness = venderBusiness;
this.dingDingBusiness = dingDingBusiness;
this.taskSchedulerManager = taskSchedulerManager;
this.timeLimitRules = timeLimitRules;
}
public ApiResponse<IList<JDInStoreOrderDetail>> GetJDInStoreOrderDetailList(string sourceShopName, IList<string> poOrderNos)
@ -71,7 +75,7 @@ namespace BBWYB.Server.Business.JD
var checkTaskList = fsql.Select<InStoreOrderCheckTask>().Where(x => x.IsChecked == false).ToList();
if (checkTaskList.Count() == 0)
return;
orderIds = checkTaskList.Select(x => x.OrderId).ToList();
var timelimitTaskList = fsql.Select<TimeLimitTask>().Where(t => orderIds.Contains(t.OrderId) && t.TaskType == Enums.TimeLimitTaskType.).ToList();
@ -200,7 +204,8 @@ namespace BBWYB.Server.Business.JD
OrderSn = checkTask.OrderSn,
ShopId = checkTask.ShopId,
TaskType = Enums.TimeLimitTaskType.,
ExpirationTime = DateTime.Now.AddDays(1)
ExpirationTime = timeLimitRules.CalculateExpirationTime(Enums.TimeLimitTaskType., DateTime.Now)
//ExpirationTime = DateTime.Now.AddDays(1)
};
insertTimeLimitTaskList.Add(t);
}

7
BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs

@ -38,6 +38,7 @@ namespace BBWYB.Server.Business
private Lazy<OP_PlatformClientFactory> opPlatformClientFactoryLazy;
private Lazy<VenderBusiness> venderBusinessLazy;
private Lazy<PurchaseSchemeBusiness> purchaseSchemeBusinessLazy;
private Lazy<TimeLimitRules> timeLimitRulesLazy;
private PP_PlatformClientFactory ppPlatformClientFactory => pplatformClientFactoryLazy.Value;
private TaskSchedulerManager taskSchedulerManager => taskSchedulerManagerLazy.Value;
@ -54,6 +55,8 @@ namespace BBWYB.Server.Business
private PurchaseSchemeBusiness purchaseSchemeBusiness => purchaseSchemeBusinessLazy.Value;
private TimeLimitRules timeLimitRules => timeLimitRulesLazy.Value;
private IList<Enums.OrderState> cantPurchaseOrderStateList;
public PurchaseOrderBusiness(IFreeSql fsql,
@ -73,6 +76,7 @@ namespace BBWYB.Server.Business
opPlatformClientFactoryLazy = new Lazy<OP_PlatformClientFactory>(() => serviceProvider.GetService<OP_PlatformClientFactory>());
venderBusinessLazy = new Lazy<VenderBusiness>(() => serviceProvider.GetService<VenderBusiness>());
purchaseSchemeBusinessLazy = new Lazy<PurchaseSchemeBusiness>(() => serviceProvider.GetService<PurchaseSchemeBusiness>());
timeLimitRulesLazy = new Lazy<TimeLimitRules>(() => serviceProvider.GetService<TimeLimitRules>());
cantPurchaseOrderStateList = new List<Enums.OrderState>()
{
Enums.OrderState.,
@ -2835,7 +2839,8 @@ namespace BBWYB.Server.Business
OrderSn = order.OrderSn,
ShopId = order.ShopId,
TaskType = Enums.TimeLimitTaskType.,
ExpirationTime = DateTime.Now.AddDays(1)
ExpirationTime = timeLimitRules.CalculateExpirationTime(Enums.TimeLimitTaskType., DateTime.Now)
//ExpirationTime = DateTime.Now.AddDays(1)
};
insertTimeLimitTaskList.Add(t);
}

34
BBWYB.Server.Business/QiKuManager.cs

@ -19,10 +19,14 @@ namespace BBWYB.Server.Business
private Lazy<DingDingBusiness> dingDingBusinessLazy;
private Lazy<VenderBusiness> venderBusinessLazy;
private Lazy<TimeLimitRules> timeLimitRulesLazy;
private DingDingBusiness dingDingBusiness => dingDingBusinessLazy.Value;
private VenderBusiness venderBusiness => venderBusinessLazy.Value;
private TimeLimitRules timeLimitRules => timeLimitRulesLazy.Value;
public QiKuManager(RestApiService restApiService, IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, IServiceProvider serviceProvider) : base(fsql, nLogManager, idGenerator)
{
this.restApiService = restApiService;
@ -33,6 +37,7 @@ namespace BBWYB.Server.Business
};
this.dingDingBusinessLazy = new Lazy<DingDingBusiness>(() => serviceProvider.GetService<DingDingBusiness>());
this.venderBusinessLazy = new Lazy<VenderBusiness>(() => serviceProvider.GetService<VenderBusiness>());
this.timeLimitRulesLazy = new Lazy<TimeLimitRules>(() => serviceProvider.GetService<TimeLimitRules>());
}
public void PublishQikuReceiveInfo(string orderId,
@ -103,14 +108,14 @@ namespace BBWYB.Server.Business
}
//推送齐库
var publishResult = restApiService.SendRequest("http://qiku.qiyue666.com",
"/Api/PackPurchaseTask/UpdateAvailabilityState",
new
{
availability = isSignAll ? 0 : 1,
orderId = osku.OrderId,
skuId = osku.BelongSkuId
}, null, HttpMethod.Post);
var publishResult = restApiService.SendRequest("http://qiku.qiyue666.com",
"/Api/PackPurchaseTask/UpdateAvailabilityState",
new
{
availability = isSignAll ? 0 : 1,
orderId = osku.OrderId,
skuId = osku.BelongSkuId
}, null, HttpMethod.Post);
if (publishResult.StatusCode != System.Net.HttpStatusCode.OK)
throw new Exception(publishResult.Content);
}
@ -179,7 +184,7 @@ namespace BBWYB.Server.Business
OrderSn = order.OrderSn,
ShopId = order.ShopId,
TaskType = Enums.TimeLimitTaskType.,
ExpirationTime = DateTime.Now.AddDays(1),
ExpirationTime = timeLimitRules.CalculateExpirationTime(Enums.TimeLimitTaskType., DateTime.Now) //DateTime.Now.AddDays(1),
};
insertTimeLimitTaskList.Add(t);
}
@ -256,12 +261,13 @@ namespace BBWYB.Server.Business
SkuId = orderSku.SkuId,
OrderSn = order.OrderSn,
ShopId = order.ShopId,
TaskType = Enums.TimeLimitTaskType.
TaskType = Enums.TimeLimitTaskType.,
ExpirationTime = timeLimitRules.CalculateExpirationTime(Enums.TimeLimitTaskType., DateTime.Now) //DateTime.Now.AddHours(2)
};
if (DateTime.Now.Hour < 16)
t.ExpirationTime = DateTime.Now.AddHours(2);
else
t.ExpirationTime = DateTime.Now.Date.AddDays(1).AddHours(13);
//if (DateTime.Now.Hour < 16)
// t.ExpirationTime = DateTime.Now.AddHours(2);
//else
// t.ExpirationTime = DateTime.Now.Date.AddDays(1).AddHours(13);
insertTimeLimitTask = fsql.Insert(t);
#region 发送钉钉通知

11
BBWYB.Server.Business/Sync/OrderSyncBusiness.cs

@ -18,8 +18,9 @@ namespace BBWYB.Server.Business.Sync
private VenderBusiness venderBusiness;
private TaskSchedulerManager taskSchedulerManager;
private List<Enums.TimeLimitTaskType> timeLimitTaskTypes;
private TimeLimitRules timeLimitRules;
public OrderSyncBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, OP_PlatformClientFactory opPlatformClientFactory, VenderBusiness venderBusiness, TaskSchedulerManager taskSchedulerManager) : base(fsql, nLogManager, idGenerator)
public OrderSyncBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, OP_PlatformClientFactory opPlatformClientFactory, VenderBusiness venderBusiness, TaskSchedulerManager taskSchedulerManager, TimeLimitRules timeLimitRules) : base(fsql, nLogManager, idGenerator)
{
this.opPlatformClientFactory = opPlatformClientFactory;
this.venderBusiness = venderBusiness;
@ -29,6 +30,7 @@ namespace BBWYB.Server.Business.Sync
Enums.TimeLimitTaskType.,
Enums.TimeLimitTaskType.
};
this.timeLimitRules = timeLimitRules;
}
public void AutoOrderSync()
@ -430,12 +432,13 @@ namespace BBWYB.Server.Business.Sync
{
Id = idGenerator.NewLong(),
CreateTme = DateTime.Now,
ExpirationTime = DateTime.Now.AddDays(isFirst ? 2 : 1),
//ExpirationTime = DateTime.Now.AddDays(isFirst ? 2 : 1),
ExpirationTime = timeLimitRules.CalculateExpirationTime(Enums.TimeLimitTaskType., DateTime.Now.AddDays(isFirst ? 1 : 0)),
OrderId = o.OrderId,
OrderSn = o.OrderSn,
ShopId = shopId,
SkuId = osku.SkuId,
TaskType = Enums.TimeLimitTaskType.
//TaskType = Enums.TimeLimitTaskType.待议价任务
});
}
#endregion
@ -544,7 +547,7 @@ namespace BBWYB.Server.Business.Sync
SkuId = osku.SkuId,
TaskType = Enums.TimeLimitTaskType.,
ShopId = shopId,
ExpirationTime = CalculationPurcashTimeLimitTaskExpirationTime(order.PayTime.Value),
ExpirationTime = timeLimitRules.CalculateExpirationTime(Enums.TimeLimitTaskType., order.PayTime.Value),
PayTime = order.PayTime
}).ToList();
if (waitInserTimeLimitTasks != null && waitInserTimeLimitTasks.Count() > 0)

168
BBWYB.Server.Business/TimeLimitTask/TimeLimitRules.cs

@ -0,0 +1,168 @@
using BBWYB.Common.Models;
using BBWYB.Server.Model;
namespace BBWYB.Server.Business
{
public class TimeLimitRules : IDenpendency
{
/// <summary>
/// 计算到期时间算法字典
/// </summary>
private IDictionary<Enums.TimeLimitTaskType, Func<DateTime, DateTime>> calculateExpirationTimeAlgorithmDictionary;
public TimeLimitRules()
{
calculateExpirationTimeAlgorithmDictionary = new Dictionary<Enums.TimeLimitTaskType, Func<DateTime, DateTime>>()
{
{ Enums.TimeLimitTaskType., CalculateExpirationTimeFor8WorkHour },
{ Enums.TimeLimitTaskType., CalculateExpirationTimeFor8WorkHour },
{ Enums.TimeLimitTaskType., CalculateExpirationTimeFor2WorkHour }
};
}
/// <summary>
/// 计算到期时间
/// </summary>
/// <param name="timeLimitTaskType">任务类型</param>
/// <param name="startTime">起点计算时间</param>
/// <returns></returns>
public DateTime CalculateExpirationTime(Enums.TimeLimitTaskType timeLimitTaskType, DateTime startTime)
{
return calculateExpirationTimeAlgorithmDictionary[timeLimitTaskType](startTime);
}
/// <summary>
/// 计算需要追加的天数,周六追加2天,周日追加1天
/// </summary>
/// <param name="dayOfWeek"></param>
/// <returns></returns>
private int CalculateAddDay(DayOfWeek dayOfWeek)
{
if (dayOfWeek == DayOfWeek.Saturday)
return 2;
return 1;
}
/// <summary>
/// 8小时工作时计算到期时间
/// </summary>
/// <param name="startTime">起点时间</param>
/// <returns></returns>
private DateTime CalculateExpirationTimeFor8WorkHour(DateTime startTime)
{
int addDay = 0, addHour = 0, addSeconds = 0;
//先确定是否为周日
if (startTime.DayOfWeek == DayOfWeek.Sunday)
{
addDay = 1;
addHour = 18;
}
else
{
if (startTime.Hour < 9)
addHour = 18;
else if (startTime.Hour >= 9 && startTime.Hour < 12)
{
//计算从起点时间的9点开始到当前时间的时差
var timeSpan = DateTime.Now - startTime.Date.AddHours(9);
if (timeSpan.TotalMinutes <= 5)
{
//从9点开始小于5分钟以内,以当天18点结束
addHour = 18;
}
else
{
addDay = CalculateAddDay(startTime.DayOfWeek);
addHour = 9;
addSeconds = (int)timeSpan.TotalSeconds;
}
}
else if (startTime.Hour >= 12 && startTime.Hour < 13)
{
//下一个工作日的12点结束
addDay = CalculateAddDay(startTime.DayOfWeek);
addHour = 12;
}
else if (startTime.Hour >= 13 && startTime.Hour < 18)
{
var timeSpan = DateTime.Now - startTime.Date.AddHours(13);
//到下一个工作日的当前时间结束
addDay = CalculateAddDay(startTime.DayOfWeek);
addHour = 13;
addSeconds = (int)timeSpan.TotalSeconds;
}
else if (startTime.Hour >= 18)
{
//下一个工作日的18点结束
addDay = CalculateAddDay(startTime.DayOfWeek);
addHour = 18;
}
}
return startTime.Date.AddDays(addDay).AddHours(addHour).AddSeconds(addSeconds);
}
/// <summary>
/// 2小时工作时计算到期时间
/// </summary>
/// <param name="startTime">起点时间</param>
/// <returns></returns>
private DateTime CalculateExpirationTimeFor2WorkHour(DateTime startTime)
{
int addDay = 0, addHour = 0, addSeconds = 0;
//先确定是否为周日
if (startTime.DayOfWeek == DayOfWeek.Sunday)
{
addDay = 1;
addHour = 11;
}
else
{
if (startTime.Hour < 9)
addHour = 11;
else if (startTime.Hour >= 9 && startTime.Hour < 12)
{
//计算从起点时间的9点开始到当前时间的时差
var timeSpan = DateTime.Now - startTime.Date.AddHours(9);
if (timeSpan.TotalHours <= 1)
{
addHour = 11;
addSeconds = (int)timeSpan.TotalSeconds;
}
else
{
addHour = 13;
addSeconds = 7200 - (int)timeSpan.TotalSeconds;
}
}
else if (startTime.Hour >= 12 && startTime.Hour < 13)
{
addHour = 15;
}
else if (startTime.Hour >= 13 && startTime.Hour < 18)
{
var timeSpan = DateTime.Now - startTime.Date.AddHours(13);
if (timeSpan.TotalHours <= 3)
{
addHour = startTime.Hour + 2;
addSeconds = startTime.Minute * 60 + startTime.Second;
}
else
{
addDay = CalculateAddDay(startTime.DayOfWeek);
addHour = 9;
addSeconds = Convert.ToInt32(7200 - (startTime - startTime.Date.AddHours(15)).TotalSeconds);
}
}
else if (startTime.Hour >= 18)
{
//下一个工作日的18点结束
addDay = CalculateAddDay(startTime.DayOfWeek);
addHour = 11;
}
}
return startTime.Date.AddDays(addDay).AddHours(addHour).AddSeconds(addSeconds);
}
}
}

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

@ -11,7 +11,9 @@ namespace BBWYB.Server.Business
{
private VenderBusiness venderBusiness;
private List<Enums.TimeLimitTaskType?> hgzTaskTypeList;
public TimeLimitTaskBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, VenderBusiness venderBusiness) : base(fsql, nLogManager, idGenerator)
private TimeLimitRules timeLimitRules;
public TimeLimitTaskBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, VenderBusiness venderBusiness, TimeLimitRules timeLimitRules) : base(fsql, nLogManager, idGenerator)
{
this.venderBusiness = venderBusiness;
hgzTaskTypeList = new List<Enums.TimeLimitTaskType?>()
@ -19,6 +21,7 @@ namespace BBWYB.Server.Business
Enums.TimeLimitTaskType.,
Enums.TimeLimitTaskType.
};
this.timeLimitRules = timeLimitRules;
}
public void CheckTask()
{
@ -50,7 +53,8 @@ namespace BBWYB.Server.Business
OrderSn = o.OrderSn,
ShopId = o.ShopId,
TaskType = Enums.TimeLimitTaskType.,
ExpirationTime = DateTime.Now.AddDays(1),
ExpirationTime = timeLimitRules.CalculateExpirationTime(Enums.TimeLimitTaskType., DateTime.Now)
//ExpirationTime = DateTime.Now.AddDays(1),
Remark = "RepairOrderComputationTask"
}).ToList();

Loading…
Cancel
Save