using BBWYB.Common.Log; using BBWYB.Common.Models; using BBWYB.Server.Model.Db; using FreeSql; using Yitter.IdGenerator; namespace BBWYB.Server.Business { public class DataRepairBusiness : BaseBusiness, IDenpendency { private KuaiDi100Manager kuaiDi100Manager; public DataRepairBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, KuaiDi100Manager kuaiDi100Manager) : base(fsql, nLogManager, idGenerator) { this.kuaiDi100Manager = kuaiDi100Manager; } public void RepairPurchaseExpressOrder() { #region 修复快递单 var purchaseExpressOrderList = fsql.Select().Where(peo => !string.IsNullOrEmpty(peo.PurchaseOrderId)).ToList(); var wayBillNos = purchaseExpressOrderList.Select(peo => peo.WaybillNo).ToList(); var relationList = fsql.Select().Where(eori => wayBillNos.Contains(eori.WayBillNo)).ToList(); List insertExpressOrderRelationInfoList = new List(); foreach (var peo in purchaseExpressOrderList) { var relation = relationList.FirstOrDefault(r => r.WayBillNo == peo.WaybillNo && r.PurchaseOrderId == peo.PurchaseOrderId); if (relation != null) continue; insertExpressOrderRelationInfoList.Add(new ExpressOrderRelationInfo() { Id = idGenerator.NewLong(), CreateTime = DateTime.Now, OrderId = peo.OrderId, PurchaseOrderId = peo.PurchaseOrderId, ShopId = peo.ShopId, WayBillNo = peo.WaybillNo }); } fsql.Transaction(() => { fsql.Insert(insertExpressOrderRelationInfoList).ExecuteAffrows(); }); #endregion } /// /// 批量清理取消单数据 /// public void ClearCancelOrderData() { var cancelOrderList = fsql.Select().Where(o => o.OrderState == Model.Enums.OrderState.已取消).ToList(); var cancelOrderIds = cancelOrderList.Select(o => o.Id); //var noUsingExpressOrderList = fsql.Select().Where(peo => !fsql.Select() // .As("b") // .ToList(b => b.WayBillNo) // .Contains(peo.WaybillNo)) // .ToList(); /* select * from purchaseexpressorder peo where not exists (select r.waybillno from expressorderrelationinfo r where peo.WaybillNo=r.WaybillNo); */ fsql.Transaction(() => { fsql.Delete().Where(opi => cancelOrderIds.Contains(opi.OrderId)).ExecuteAffrows(); fsql.Delete().Where(posku => cancelOrderIds.Contains(posku.OrderId)).ExecuteAffrows(); fsql.Delete().Where(opri => cancelOrderIds.Contains(opri.OrderId)).ExecuteAffrows(); fsql.Delete().Where(oc => cancelOrderIds.Contains(oc.OrderId)).ExecuteAffrows(); fsql.Delete().Where(ocd => cancelOrderIds.Contains(ocd.OrderId)).ExecuteAffrows(); }); } public void RepairOrderState(string orderId) { List> updateOrderPurchaseList = new List>(); IUpdate updateOrder = null; var order = fsql.Select(orderId).ToOne(); #region 查询采购单 var purchaseOrderList = fsql.Select().Where(ori => ori.IsEnabled == true && ori.OrderId == orderId).ToList(); if (purchaseOrderList.Count() == 0) throw new Exception("未查询到任何采购单"); var purchaseOrderIds = purchaseOrderList.Select(po => po.PurchaseOrderId).ToList(); #endregion #region 查询采购SKU IList orderPurchaseSkuList = fsql.Select() .Where(posku => purchaseOrderIds.Contains(posku.PurchaseOrderId)) .ToList(); #endregion #region 查询采购sku关联信息 IList orderPurchaseRelationList = fsql.Select() .Where(ops => purchaseOrderIds.Contains(ops.PurchaseOrderId)) .ToList(); #endregion #region 查询采购单关联的快递单 var purchaseExpressOrderList = fsql.Select() .InnerJoin((eori, peo) => eori.WayBillNo == peo.WaybillNo) .Where((eori, peo) => eori.OrderId == orderId).ToList((eori, peo) => new PurchaseExpressOrder { CreateTime = peo.CreateTime, ExpressContent = peo.ExpressContent, ExpressChangedTime = peo.ExpressChangedTime, ExpressState = peo.ExpressState, IsSubscribeKD100 = peo.IsSubscribeKD100, OrderId = eori.OrderId, PurchaseOrderId = eori.PurchaseOrderId, ShopId = eori.ShopId.Value, SourceExpressId = peo.SourceExpressId, SourceExpressName = peo.SourceExpressName, TargetExpressId = peo.TargetExpressId, TargetExpressName = peo.TargetExpressName, WaybillNo = peo.WaybillNo }); #endregion foreach (var purchaseOrder in purchaseOrderList) { var currentPurchaseOrderSkuList = orderPurchaseSkuList.Where(posku => posku.PurchaseOrderId == purchaseOrder.PurchaseOrderId).ToList(); var currentPurchaseExpressOrderList = purchaseExpressOrderList.Where(peo => peo.PurchaseOrderId == purchaseOrder.PurchaseOrderId).ToList(); var oldPurchaseOrderState = purchaseOrder.OrderState; purchaseOrder.CalculationOrderState(fsql, currentPurchaseOrderSkuList, currentPurchaseExpressOrderList); if (purchaseOrder.OrderState != oldPurchaseOrderState) { var update = fsql.Update(purchaseOrder.Id).Set(opi => opi.OrderState, purchaseOrder.OrderState); updateOrderPurchaseList.Add(update); } } var oldOrderState = order.OrderState; order.CalculationOrderState(fsql, null, purchaseOrderList); if (order.OrderState != oldOrderState) updateOrder = fsql.Update(order.Id).Set(o => o.OrderState, order.OrderState); fsql.Transaction(() => { foreach (var update in updateOrderPurchaseList) update.ExecuteAffrows(); updateOrder?.ExecuteAffrows(); }); } public void SubscribeKD100(string waybillNo, string targetCompanyCode) { kuaiDi100Manager.SubscribeKuaiDi100(waybillNo, targetCompanyCode, "http://bbwyb.qiyue666.com/api/purchaseorder/kuaidi100publish"); } } }