diff --git a/BBWYB.Server.Business/Order/OrderBusiness.cs b/BBWYB.Server.Business/Order/OrderBusiness.cs index dd7aff5..2b0502d 100644 --- a/BBWYB.Server.Business/Order/OrderBusiness.cs +++ b/BBWYB.Server.Business/Order/OrderBusiness.cs @@ -7,6 +7,7 @@ using BBWYB.Server.Model; using BBWYB.Server.Model.Db; using BBWYB.Server.Model.Dto; using FreeSql; +using Microsoft.Extensions.DependencyInjection; using Newtonsoft.Json; using SDKAdapter; using SDKAdapter.OperationPlatform.Client; @@ -19,13 +20,23 @@ namespace BBWYB.Server.Business { public class OrderBusiness : BaseBusiness, IDenpendency { - private OP_PlatformClientFactory opPlatformClientFactory; - private RestApiService restApiService; + private IList waitConfigStateList; - public OrderBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, OP_PlatformClientFactory opPlatformClientFactory, RestApiService restApiService) : base(fsql, nLogManager, idGenerator) + + private Lazy qikuManagerLazy; + private Lazy opPlatformClientFactoryLazy; + private Lazy restApiServiceLazy; + + private OP_PlatformClientFactory opPlatformClientFactory => opPlatformClientFactoryLazy.Value; + private RestApiService restApiService => restApiServiceLazy.Value; + private QiKuManager qikuManager => qikuManagerLazy.Value; + + public OrderBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, IServiceProvider serviceProvider) : base(fsql, nLogManager, idGenerator) { - this.opPlatformClientFactory = opPlatformClientFactory; - this.restApiService = restApiService; + qikuManagerLazy = new Lazy(() => serviceProvider.GetService()); + opPlatformClientFactoryLazy = new Lazy(() => serviceProvider.GetService()); + restApiServiceLazy = new Lazy(() => serviceProvider.GetService()); + waitConfigStateList = new List() { Enums.PackConfigState.待配置, Enums.PackConfigState.需修改 }; } @@ -670,8 +681,8 @@ namespace BBWYB.Server.Business /// /// public void QikuPublishOrderSkuPackConfigState(QikuPublishOrderSkuPackConfigStateRequest request) - { - + { + qikuManager.QikuPublishOrderSkuPackConfigState(request); } } } diff --git a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs index ceecd06..589f8b4 100644 --- a/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs +++ b/BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs @@ -507,7 +507,7 @@ namespace BBWYB.Server.Business notifyQikuPackSchemeParamList != null && notifyQikuPackSchemeParamList.Count() > 0) { - Task.Factory.StartNew(() => qiKuManager.SearchCerConfigured(request.OrderId, notifyQikuPackSchemeParamList, orderSkus), CancellationToken.None, TaskCreationOptions.None, taskSchedulerManager.PurchaseOrderCallbackTaskScheduler); + Task.Factory.StartNew(() => qiKuManager.SearchCerConfigured(dbOrder, notifyQikuPackSchemeParamList, orderSkus), CancellationToken.None, TaskCreationOptions.None, taskSchedulerManager.PurchaseOrderCallbackTaskScheduler); } #endregion @@ -524,6 +524,7 @@ namespace BBWYB.Server.Business .Where(t => t.OrderId == request.OrderId) .Where(t => updatePurchaseTimeLimitTaskOrderSkuList.Contains(t.SkuId)) .Where(t => t.CompletionTime == null) + .Where(t => t.TaskType == Enums.TimeLimitTaskType.采购任务) .ExecuteAffrows(); } @@ -970,7 +971,7 @@ namespace BBWYB.Server.Business if (dbOrder.IntoStoreType == Enums.IntoStoreType.发回齐越 && notifyQikuPackSchemeParamList.Count() > 0) { - Task.Factory.StartNew(() => qiKuManager.SearchCerConfigured(request.OrderId, notifyQikuPackSchemeParamList, dbOrderSkuList), CancellationToken.None, TaskCreationOptions.None, taskSchedulerManager.PurchaseOrderCallbackTaskScheduler); + Task.Factory.StartNew(() => qiKuManager.SearchCerConfigured(dbOrder, notifyQikuPackSchemeParamList, dbOrderSkuList), CancellationToken.None, TaskCreationOptions.None, taskSchedulerManager.PurchaseOrderCallbackTaskScheduler); } #endregion @@ -990,6 +991,7 @@ namespace BBWYB.Server.Business .Where(t => t.OrderId == request.OrderId) .Where(t => updatePurchaseTimeLimitTaskOrderSkuList.Contains(t.SkuId)) .Where(t => t.CompletionTime == null) + .Where(t => t.TaskType == Enums.TimeLimitTaskType.采购任务) .ExecuteAffrows(); } if (updateOrderPurchaseInfoList.Count() > 0) diff --git a/BBWYB.Server.Business/QiKuManager.cs b/BBWYB.Server.Business/QiKuManager.cs index b0e61b8..272a2b4 100644 --- a/BBWYB.Server.Business/QiKuManager.cs +++ b/BBWYB.Server.Business/QiKuManager.cs @@ -6,18 +6,19 @@ using BBWYB.Server.Model.Db; using BBWYB.Server.Model.Dto; using FreeSql; using Newtonsoft.Json; +using Yitter.IdGenerator; namespace BBWYB.Server.Business { - public class QiKuManager : IDenpendency + public class QiKuManager : BaseBusiness, IDenpendency { private RestApiService restApiService; private IFreeSql fsql; private NLogManager nLogManager; - public QiKuManager(RestApiService restApiService, IFreeSql fsql, NLogManager nLogManager) + + public QiKuManager(RestApiService restApiService, IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator) : base(fsql, nLogManager, idGenerator) { this.restApiService = restApiService; - this.fsql = fsql; } /// @@ -124,16 +125,17 @@ namespace BBWYB.Server.Business /// /// 查询齐库合格证 /// - /// + /// /// /// - public void SearchCerConfigured(string orderId, IList packTaskSkuPurchaseSchemeIdList, IList orderSkuList) + public void SearchCerConfigured(Order order, IList packTaskSkuPurchaseSchemeIdList, IList orderSkuList) { try { + nLogManager.Default().Info($"SearchCerConfigured OrderId {order.Id}, packTaskSkuPurchaseSchemeIdList {JsonConvert.SerializeObject(packTaskSkuPurchaseSchemeIdList)}"); var restApiResult = restApiService.SendRequest("http://qiku.qiyue666.com", "api/PackPurchaseTask/SearchCerConfigured", new { - orderId, + orderId = order.Id, packTaskSkuPurchaseSchemeIdList }, null, HttpMethod.Post); @@ -146,6 +148,7 @@ namespace BBWYB.Server.Business if (response.Data.PackTaskSkuPurchaseSchemeIdList != null && response.Data.PackTaskSkuPurchaseSchemeIdList.Count() > 0) { IList> updateOrderSkuList = new List>(); + List insertTimeLimitTaskList = new List(); foreach (var skuConfigured in response.Data.PackTaskSkuPurchaseSchemeIdList) { var orderSku = orderSkuList.FirstOrDefault(osku => osku.BelongSkuId == skuConfigured.SkuId); @@ -160,9 +163,21 @@ namespace BBWYB.Server.Business updateOrderSkuList.Add(update); } - if (qiKuPackState == Enums.PackConfigState.待配置) + if (qiKuPackState == Enums.PackConfigState.待配置 && order.ShopId != 9) { //创建合格证拟定任务 + var t = new TimeLimitTask() + { + CreateTme = DateTime.Now, + Id = idGenerator.NewLong(), + OrderId = order.Id, + SkuId = orderSku.SkuId, + OrderSn = order.OrderSn, + ShopId = order.ShopId, + TaskType = Enums.TimeLimitTaskType.合格证拟定任务, + ExpirationTime = DateTime.Now.AddDays(1), + }; + insertTimeLimitTaskList.Add(t); } } @@ -173,13 +188,89 @@ namespace BBWYB.Server.Business foreach (var update in updateOrderSkuList) update.ExecuteAffrows(); } + if (insertTimeLimitTaskList.Count() > 0) + fsql.Insert(insertTimeLimitTaskList).ExecuteAffrows(); }); } } catch (Exception ex) { - nLogManager.Default().Error(ex, $"SearchCerConfigured\r\n{JsonConvert.SerializeObject(new { orderId, packTaskSkuPurchaseSchemeIdList })}"); + nLogManager.Default().Error(ex, $"SearchCerConfigured\r\n{JsonConvert.SerializeObject(new { order.Id, packTaskSkuPurchaseSchemeIdList })}"); } } + + + /// + /// 齐库推送sku配置状态 + /// + /// + public void QikuPublishOrderSkuPackConfigState(QikuPublishOrderSkuPackConfigStateRequest request) + { + var order = fsql.Select(request.OrderId).ToOne(); + if (order == null) + throw new BusinessException($"未查询到订单{request.OrderId}"); + + if (request.PackConfigState == Enums.PackConfigState.需修改 && order.ShopId != 9) + return; + + var orderSku = fsql.Select().Where(osku => osku.OrderId == request.OrderId && osku.BelongSkuId == request.SkuId).ToOne(); + if (orderSku == null) + throw new BusinessException($"未查询到订单来源sku{request.SkuId}"); + + + IInsert insertTimeLimitTask = null; + IUpdate updateTimeLimitTask = null; + IUpdate updateOrderSku = null; + + if (orderSku.PackConfigState != request.PackConfigState) + updateOrderSku = fsql.Update(orderSku.Id).Set(osku => osku.PackConfigState, request.PackConfigState); + + if (request.PackConfigState == Enums.PackConfigState.需修改) + { + var isExists = fsql.Select().Where(t => t.OrderId == request.OrderId && + t.SkuId == orderSku.SkuId && + t.TaskType == Enums.TimeLimitTaskType.合格证补充任务) + .Any(); + if (!isExists) + { + var t = new TimeLimitTask() + { + CreateTme = DateTime.Now, + Id = idGenerator.NewLong(), + OrderId = request.OrderId, + SkuId = orderSku.SkuId, + OrderSn = order.OrderSn, + ShopId = order.ShopId, + TaskType = Enums.TimeLimitTaskType.合格证补充任务 + }; + 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); + } + } + else if (request.PackConfigState == Enums.PackConfigState.已配置) + { + var taskTypeList = new List() + { + Enums.TimeLimitTaskType.合格证拟定任务, + Enums.TimeLimitTaskType.合格证补充任务 + }; + updateTimeLimitTask = fsql.Update().Set(t => t.CompletionTime, DateTime.Now) + .Set(t => t.IsTimely == (DateTime.Now < t.ExpirationTime ? true : false)) + .Where(t => t.OrderId == request.OrderId) + .Where(t => t.SkuId == orderSku.SkuId) + .Where(t => t.CompletionTime == null) + .Where(t => taskTypeList.Contains(t.TaskType)); + } + + fsql.Transaction(() => + { + insertTimeLimitTask?.ExecuteAffrows(); + updateTimeLimitTask?.ExecuteAffrows(); + updateOrderSku?.ExecuteAffrows(); + }); + } } } diff --git a/BBWYB.Server.Model/Enums.cs b/BBWYB.Server.Model/Enums.cs index caf06b6..48a2e81 100644 --- a/BBWYB.Server.Model/Enums.cs +++ b/BBWYB.Server.Model/Enums.cs @@ -308,11 +308,11 @@ } /// - /// 限时任务类型 采购任务 = 0, 合格证拟定任务 = 10, 合格证补充任务 = 11 + /// 限时任务类型 采购任务 = 0, 合格证拟定任务 = 10, 合格证补充任务 = 11, 待核算任务 = 20 /// public enum TimeLimitTaskType { - 采购任务 = 0, 合格证拟定任务 = 10, 合格证补充任务 = 11 + 采购任务 = 0, 合格证拟定任务 = 10, 合格证补充任务 = 11, 待核算任务 = 20 } } }