using BBWYB.Common.Http; using BBWYB.Common.Log; using BBWYB.Common.Models; using BBWYB.Server.Model; using BBWYB.Server.Model.Db; using BBWYB.Server.Model.Dto; using FreeSql; using Newtonsoft.Json; namespace BBWYB.Server.Business { public class QiKuManager : IDenpendency { private RestApiService restApiService; private IFreeSql fsql; private NLogManager nLogManager; public QiKuManager(RestApiService restApiService, IFreeSql fsql, NLogManager nLogManager) { this.restApiService = restApiService; this.fsql = fsql; } /// /// 通知齐库到货情况 /// 支持关联的采购平台以来源SKU为单位通知齐库 /// 不支持关联的采购平台以采购单为单位通知齐库 /// /// /// /// /// public void PublishQiKuReceiveInfo(OrderPurchaseInfo orderPurchaseInfo, IList orderPurchaseRelationInfoList, IList orderPurchaseSkuInfoList, IList purchaseExpressOrderList) { if (orderPurchaseInfo.PurchasePlatform == Enums.Platform.阿里巴巴) PublishQiKuByRelation(orderPurchaseRelationInfoList, orderPurchaseSkuInfoList, purchaseExpressOrderList); else PublishQiKuPurchaseExpressOrder(orderPurchaseInfo, purchaseExpressOrderList); } private void PublishQiKuByRelation(IList orderPurchaseRelationInfoList, IList orderPurchaseSkuInfoList, IList purchaseExpressOrderList) { try { var relationGroups = orderPurchaseRelationInfoList.GroupBy(opri => opri.SourceSkuId); foreach (var relationGroup in relationGroups) { bool isSignAll = true; foreach (var relation in relationGroup) { var purchaseSku = orderPurchaseSkuInfoList.FirstOrDefault(x => x.PurchaseSkuId == relation.PurchaseSkuId); if (purchaseSku == null || string.IsNullOrEmpty(purchaseSku.WaybillNo)) { isSignAll = false; continue; } var purchaseExpressOrder = purchaseExpressOrderList.FirstOrDefault(x => x.WaybillNo == purchaseSku.WaybillNo); if (purchaseExpressOrder == null || purchaseExpressOrder.ExpressState != "QianShou") { isSignAll = false; continue; } } restApiService.SendRequest("http://qiku.qiyue666.com", "/Api/PackPurchaseTask/UpdateAvailabilityState", new { availability = isSignAll ? 0 : 1, orderId = relationGroup.FirstOrDefault().OrderId, skuId = relationGroup.Key }, null, HttpMethod.Post); } } catch (Exception ex) { } } private void PublishQiKuPurchaseExpressOrder(OrderPurchaseInfo orderPurchaseInfo, IList purchaseExpressOrderList) { try { if (string.IsNullOrEmpty(orderPurchaseInfo.BelongSkuIds)) return; var orderId = purchaseExpressOrderList.FirstOrDefault().OrderId; var orderSkuList = fsql.Select().Where(osku => osku.OrderId == orderId).ToList(); var isSignAll = !purchaseExpressOrderList.Any(x => x.ExpressState != "QianShou"); var notifyList = orderSkuList.Where(osku => orderPurchaseInfo.BelongSkuIds.Contains(osku.SkuId)).ToList(); if (notifyList.Count() == 0) return; foreach (var notifySku in notifyList) { restApiService.SendRequest("http://qiku.qiyue666.com", "/Api/PackPurchaseTask/UpdateAvailabilityState", new { availability = isSignAll ? 0 : 1, orderId = notifySku.OrderId, skuId = notifySku.BelongSkuId }, null, HttpMethod.Post); } } catch { } } /// /// 查询齐库合格证 /// /// /// /// public void SearchCerConfigured(string orderId, IList packTaskSkuPurchaseSchemeIdList, IList orderSkuList) { try { var restApiResult = restApiService.SendRequest("http://qiku.qiyue666.com", "api/PackPurchaseTask/SearchCerConfigured", new { orderId, packTaskSkuPurchaseSchemeIdList }, null, HttpMethod.Post); if (restApiResult.StatusCode != System.Net.HttpStatusCode.OK) throw new Exception(restApiResult.Content); var response = JsonConvert.DeserializeObject>(restApiResult.Content); if (!response.Success) throw new Exception(response.Msg); if (response.Data.PackTaskSkuPurchaseSchemeIdList != null && response.Data.PackTaskSkuPurchaseSchemeIdList.Count() > 0) { IList> updateOrderSkuList = new List>(); foreach (var skuConfigured in response.Data.PackTaskSkuPurchaseSchemeIdList) { var orderSku = orderSkuList.FirstOrDefault(osku => osku.BelongSkuId == skuConfigured.SkuId); if (orderSku == null) continue; var oldPackState = orderSku.PackConfigState ?? Enums.PackConfigState.待配置; var qiKuPackState = skuConfigured.IsConfiguredCer ? Enums.PackConfigState.已配置 : Enums.PackConfigState.待配置; if (oldPackState != qiKuPackState) { orderSku.PackConfigState = qiKuPackState; var update = fsql.Update(orderSku.Id).Set(osku => osku.PackConfigState, qiKuPackState); updateOrderSkuList.Add(update); } if (qiKuPackState == Enums.PackConfigState.待配置) { //创建合格证拟定任务 } } fsql.Transaction(() => { if (updateOrderSkuList.Count() > 0) { foreach (var update in updateOrderSkuList) update.ExecuteAffrows(); } }); } } catch (Exception ex) { nLogManager.Default().Error(ex, $"SearchCerConfigured\r\n{JsonConvert.SerializeObject(new { orderId, packTaskSkuPurchaseSchemeIdList })}"); } } } }