diff --git a/BBWYB.Server.Business/Order/OrderBusiness.cs b/BBWYB.Server.Business/Order/OrderBusiness.cs index b89c2b6..88c895b 100644 --- a/BBWYB.Server.Business/Order/OrderBusiness.cs +++ b/BBWYB.Server.Business/Order/OrderBusiness.cs @@ -112,6 +112,7 @@ namespace BBWYB.Server.Business InPackAmount = o.InPackAmount, IsWaitPack = o.IsWaitPack, IntoStoreType = o.IntoStoreType, + PayTime = o.PayTime, ContactName = ocs.ContactName, Address = ocs.Address, diff --git a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs index 67e235d..130d683 100644 --- a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs +++ b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs @@ -74,12 +74,19 @@ namespace BBWYB.Server.Business.Sync var qtOrderIdList = qtOrderList.Items.Select(qto => qto.OrderId).ToList(); var dbOrderList = fsql.Select(qtOrderIdList).ToList(); + //采购限时任务列表 + var payedQTOrderIdList = qtOrderList.Items.Where(qto => qto.IsPay).Select(qto => qto.OrderId).ToList(); + var dbPurchaseTimeLimitTaskList = fsql.Select().Where(t => t.TaskType == Enums.TimeLimitTaskType.采购任务 && + payedQTOrderIdList.Contains(t.OrderId)).ToList(); + List insertOrderList = new List(); List insertOrderSkuList = new List(); List insertOrderConsigneeList = new List(); + List insertTimeLimitTaskList = new List(); List> updateOrderList = new List>(); + foreach (var qtOrder in qtOrderList.Items) { var dbOrder = dbOrderList.FirstOrDefault(o => o.Id == qtOrder.OrderId); @@ -113,7 +120,8 @@ namespace BBWYB.Server.Business.Sync OrderState = orderState, ClientOrderId = qtOrder.ClientOrderId, BuyerAccount = qtOrder.UserAccount, - InPackAmount = qtOrder.PackAmount + InPackAmount = qtOrder.PackAmount, + PayTime = qtOrder.PayTime, }; JArray belongSkus = null; if (!string.IsNullOrEmpty(qtOrder.Extended)) @@ -178,14 +186,8 @@ namespace BBWYB.Server.Business.Sync } else { - Enums.OrderState? updateOrderState = null; - var updateModifyTime = false; - var updateBuyerRemark = false; - var updateVenderRemark = false; - var updateBuyerAccount = false; - var updateOrderSn = false; - #region 订单状态脱离拳探 只处理付款和取消 + Enums.OrderState? updateOrderState = null; if (dbOrder.OrderState == Enums.OrderState.待付款 && orderState != Enums.OrderState.待付款) updateOrderState = Enums.OrderState.等待采购; @@ -193,30 +195,29 @@ namespace BBWYB.Server.Business.Sync updateOrderState = Enums.OrderState.已取消; #endregion - if (dbOrder.ModifyTime != qtOrder.ModifyTime) - updateModifyTime = true; - if (dbOrder.BuyerRemark != qtOrder.BuyerRemark) - updateBuyerRemark = true; - if (dbOrder.VenderRemark != qtOrder.VenderRemark) - updateVenderRemark = true; - if (dbOrder.BuyerAccount != qtOrder.UserAccount) - updateBuyerAccount = true; - if (dbOrder.OrderSn != qtOrder.OrderSn) - updateOrderSn = true; - - if (updateOrderState != null || updateModifyTime || updateBuyerRemark || updateVenderRemark || updateBuyerAccount || updateOrderSn) + var updateModifyTime = dbOrder.ModifyTime != qtOrder.ModifyTime; + var updateBuyerRemark = dbOrder.BuyerRemark != qtOrder.BuyerRemark; + var updateVenderRemark = dbOrder.VenderRemark != qtOrder.VenderRemark; + var updateBuyerAccount = dbOrder.BuyerAccount != qtOrder.UserAccount; + var updateOrderSn = dbOrder.OrderSn != qtOrder.OrderSn; + var updatePayTime = dbOrder.PayTime != qtOrder.PayTime; + + if (updateOrderState != null || updateModifyTime || updateBuyerRemark || updateVenderRemark || updateBuyerAccount || updateOrderSn || updatePayTime) { - var update = fsql.Update(dbOrder.Id).SetIf(updateOrderState != null, o => o.OrderState, orderState) + var update = fsql.Update(dbOrder.Id).SetIf(updateOrderState != null, o => o.OrderState, updateOrderState) .SetIf(updateModifyTime, o => o.ModifyTime, qtOrder.ModifyTime) .SetIf(updateBuyerRemark, o => o.BuyerRemark, qtOrder.BuyerRemark) .SetIf(updateVenderRemark, o => o.VenderRemark, qtOrder.VenderRemark) .SetIf(updateBuyerAccount, o => o.BuyerAccount, qtOrder.UserAccount) - .SetIf(updateOrderSn, o => o.OrderSn, qtOrder.OrderSn); + .SetIf(updateOrderSn, o => o.OrderSn, qtOrder.OrderSn) + .SetIf(updatePayTime, o => o.PayTime, qtOrder.PayTime); updateOrderList.Add(update); } } } + CheckPurchaseTimeLimitTask(shopId, qtOrderList.Items, dbPurchaseTimeLimitTaskList, insertTimeLimitTaskList); + fsql.Transaction(() => { if (insertOrderList.Count > 0) @@ -228,6 +229,9 @@ namespace BBWYB.Server.Business.Sync if (insertOrderConsigneeList.Count() > 0) fsql.Insert(insertOrderConsigneeList).ExecuteAffrows(); + if (insertTimeLimitTaskList.Count() > 0) + fsql.Insert(insertTimeLimitTaskList).ExecuteAffrows(); + if (updateOrderList.Count() > 0) foreach (var update in updateOrderList) update.ExecuteAffrows(); @@ -239,6 +243,54 @@ namespace BBWYB.Server.Business.Sync } } + private void CheckPurchaseTimeLimitTask(long shopId, IList orderList, IList dbTimeLimits, List insertTimeLimitTasks) + { + foreach (var order in orderList) + { + if (!order.IsPay || order.PayTime == null) + continue; + var waitInserTimeLimitTasks = order.OrderSkuList.Where(osku => !dbTimeLimits.Any(x => x.OrderId == order.OrderId && x.SkuId == osku.SkuId)) + .Select(osku => new TimeLimitTask() + { + Id = idGenerator.NewLong(), + CreateTme = DateTime.Now, + OrderId = order.OrderId, + SkuId = osku.SkuId, + TaskType = Enums.TimeLimitTaskType.采购任务, + ShopId = shopId, + ExpirationTime = CalculationPurcashTimeLimitTaskExpirationTime(order.PayTime.Value), + PayTime = order.PayTime + }).ToList(); + if (waitInserTimeLimitTasks != null && waitInserTimeLimitTasks.Count() > 0) + insertTimeLimitTasks.AddRange(waitInserTimeLimitTasks); + } + } + + /// + /// 计算采购限时任务的到期时间 + /// + /// 付款时间 + /// + private DateTime CalculationPurcashTimeLimitTaskExpirationTime(DateTime payTime) + { + var addDays = 0; + if (payTime.DayOfWeek == DayOfWeek.Sunday || + payTime.DayOfWeek == DayOfWeek.Monday || + payTime.DayOfWeek == DayOfWeek.Tuesday || + payTime.DayOfWeek == DayOfWeek.Wednesday || + payTime.DayOfWeek == DayOfWeek.Thursday || + payTime.DayOfWeek == DayOfWeek.Friday) + { + if (payTime.Hour >= 0 && payTime.Hour < 15) + addDays = 0; //当日 + else + addDays = payTime.DayOfWeek == DayOfWeek.Friday ? 2 : 1; //次日,星期五是后天 + } + else if (payTime.DayOfWeek == DayOfWeek.Saturday) + addDays = 1; + return payTime.Date.AddDays(addDays).AddHours(16); + } + private Enums.OrderState? ConvertQuanTanOrderState(string qtOrderState, bool isPay, bool isPurchased) { /* diff --git a/BBWYB.Server.Model/Db/Order/Order.cs b/BBWYB.Server.Model/Db/Order/Order.cs index 4f6863d..8c3373d 100644 --- a/BBWYB.Server.Model/Db/Order/Order.cs +++ b/BBWYB.Server.Model/Db/Order/Order.cs @@ -50,6 +50,12 @@ namespace BBWYB.Server.Model.Db [Column(DbType = "datetime")] public DateTime? ModifyTime { get; set; } + /// + /// 支付时间 + /// + [Column(DbType = "datetime", IsNullable = true)] + public DateTime? PayTime { get; set; } + /// /// 用户应付金额 /// diff --git a/BBWYB.Server.Model/Db/TimeLimitTask/TimeLimitTask.cs b/BBWYB.Server.Model/Db/TimeLimitTask/TimeLimitTask.cs new file mode 100644 index 0000000..77433f6 --- /dev/null +++ b/BBWYB.Server.Model/Db/TimeLimitTask/TimeLimitTask.cs @@ -0,0 +1,71 @@ +using FreeSql.DataAnnotations; + +namespace BBWYB.Server.Model.Db +{ + + /// + /// 时限任务表 + /// + [Table(Name = "timelimittask", DisableSyncStructure = true)] + public partial class TimeLimitTask { + + [Column(IsPrimary = true)] + public long Id { get; set; } + + /// + /// 完成时间 + /// + [Column(DbType = "datetime")] + public DateTime? CompletionTime { get; set; } + + /// + /// 创建时间 + /// + [Column(DbType = "datetime")] + public DateTime? CreateTme { get; set; } + + /// + /// 付款时间 + /// + [Column(DbType = "datetime")] + public DateTime? PayTime { get; set; } + + /// + /// 到期时间(非时间长度,而是具体的时间) + /// + [Column(DbType = "datetime")] + public DateTime? ExpirationTime { get; set; } + + /// + /// 是否及时完成 + /// + + public bool? IsTimely { get; set; } + + /// + /// 订单Id (采购任务时有效) + /// + [Column(StringLength = 50)] + public string OrderId { get; set; } + + /// + /// 店铺Id + /// + + public long? ShopId { get; set; } + + /// + /// SKU + /// + [Column(StringLength = 50)] + public string SkuId { get; set; } + + /// + /// 任务类型(采购任务=0,合格证拟定任务=10,合格证补充任务=11) + /// + [Column(MapType = typeof(int?))] + public Enums.TimeLimitTaskType? TaskType { get; set; } + + } + +} diff --git a/BBWYB.Server.Model/Dto/Response/Order/OrderResponse.cs b/BBWYB.Server.Model/Dto/Response/Order/OrderResponse.cs index 3c5e42a..f1b3591 100644 --- a/BBWYB.Server.Model/Dto/Response/Order/OrderResponse.cs +++ b/BBWYB.Server.Model/Dto/Response/Order/OrderResponse.cs @@ -26,6 +26,11 @@ /// public DateTime ModifyTime { get; set; } + /// + /// 支付时间 + /// + public DateTime? PayTime { get; set; } + /// /// 订单平台 /// diff --git a/BBWYB.Server.Model/Enums.cs b/BBWYB.Server.Model/Enums.cs index a64c561..46b516e 100644 --- a/BBWYB.Server.Model/Enums.cs +++ b/BBWYB.Server.Model/Enums.cs @@ -305,5 +305,13 @@ { 发回齐越 = 0, 厂商代发入仓 = 1 } + + /// + /// 限时任务类型 采购任务 = 0, 合格证拟定任务 = 10, 合格证补充任务 = 11 + /// + public enum TimeLimitTaskType + { + 采购任务 = 0, 合格证拟定任务 = 10, 合格证补充任务 = 11 + } } } diff --git a/SDKAdapter/OperationPlatform/Client/Impl/OP_QuanTanClient.cs b/SDKAdapter/OperationPlatform/Client/Impl/OP_QuanTanClient.cs index d8d8589..63e927a 100644 --- a/SDKAdapter/OperationPlatform/Client/Impl/OP_QuanTanClient.cs +++ b/SDKAdapter/OperationPlatform/Client/Impl/OP_QuanTanClient.cs @@ -146,6 +146,7 @@ namespace SDKAdapter.OperationPlatform.Client PackAmount = qto.PackingCharge, PayType = 0, IsPay = qto.Paid == 1, + PayTime = qto.Paid == 1 ? qto.PayTime : null, PreferentialAmount = 0, SellerPreferentialAmount = 0, OrderSkuList = qto.OrderProduct.Select(qtosku => new OP_OrderProductSkuResponse() diff --git a/SDKAdapter/OperationPlatform/Models/Response/Order/OP_OrderResponse.cs b/SDKAdapter/OperationPlatform/Models/Response/Order/OP_OrderResponse.cs index f0bc2eb..6ba4431 100644 --- a/SDKAdapter/OperationPlatform/Models/Response/Order/OP_OrderResponse.cs +++ b/SDKAdapter/OperationPlatform/Models/Response/Order/OP_OrderResponse.cs @@ -42,6 +42,11 @@ /// public bool IsPay { get; set; } + /// + /// 支付时间 + /// + public DateTime? PayTime { get; set; } + /// /// 下单来源 /// 京东【】