|
|
|
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<PurchaseExpressOrder>().Where(peo => !string.IsNullOrEmpty(peo.PurchaseOrderId)).ToList();
|
|
|
|
var wayBillNos = purchaseExpressOrderList.Select(peo => peo.WaybillNo).ToList();
|
|
|
|
var relationList = fsql.Select<ExpressOrderRelationInfo>().Where(eori => wayBillNos.Contains(eori.WayBillNo)).ToList();
|
|
|
|
|
|
|
|
List<ExpressOrderRelationInfo> insertExpressOrderRelationInfoList = new List<ExpressOrderRelationInfo>();
|
|
|
|
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
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// 批量清理取消单数据
|
|
|
|
/// </summary>
|
|
|
|
public void ClearCancelOrderData()
|
|
|
|
{
|
|
|
|
var cancelOrderList = fsql.Select<Order>().Where(o => o.OrderState == Model.Enums.OrderState.已取消).ToList();
|
|
|
|
var cancelOrderIds = cancelOrderList.Select(o => o.Id);
|
|
|
|
|
|
|
|
//var noUsingExpressOrderList = fsql.Select<PurchaseExpressOrder>().Where(peo => !fsql.Select<ExpressOrderRelationInfo>()
|
|
|
|
// .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<OrderPurchaseInfo>().Where(opi => cancelOrderIds.Contains(opi.OrderId)).ExecuteAffrows();
|
|
|
|
fsql.Delete<OrderPurchaseSkuInfo>().Where(posku => cancelOrderIds.Contains(posku.OrderId)).ExecuteAffrows();
|
|
|
|
fsql.Delete<OrderPurchaseRelationInfo>().Where(opri => cancelOrderIds.Contains(opri.OrderId)).ExecuteAffrows();
|
|
|
|
fsql.Delete<OrderCost>().Where(oc => cancelOrderIds.Contains(oc.OrderId)).ExecuteAffrows();
|
|
|
|
fsql.Delete<OrderCostDetail>().Where(ocd => cancelOrderIds.Contains(ocd.OrderId)).ExecuteAffrows();
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
public void RepairOrderState(string orderId)
|
|
|
|
{
|
|
|
|
List<IUpdate<OrderPurchaseInfo>> updateOrderPurchaseList = new List<IUpdate<OrderPurchaseInfo>>();
|
|
|
|
IUpdate<Order> updateOrder = null;
|
|
|
|
|
|
|
|
var order = fsql.Select<Order>(orderId).ToOne();
|
|
|
|
|
|
|
|
#region 查询采购单
|
|
|
|
var purchaseOrderList = fsql.Select<OrderPurchaseInfo>().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<OrderPurchaseSkuInfo> orderPurchaseSkuList = fsql.Select<OrderPurchaseSkuInfo>()
|
|
|
|
.Where(posku => purchaseOrderIds.Contains(posku.PurchaseOrderId))
|
|
|
|
.ToList();
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region 查询采购sku关联信息
|
|
|
|
IList<OrderPurchaseRelationInfo> orderPurchaseRelationList = fsql.Select<OrderPurchaseRelationInfo>()
|
|
|
|
.Where(ops => purchaseOrderIds.Contains(ops.PurchaseOrderId))
|
|
|
|
.ToList();
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
#region 查询采购单关联的快递单
|
|
|
|
var purchaseExpressOrderList = fsql.Select<ExpressOrderRelationInfo, PurchaseExpressOrder>()
|
|
|
|
.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<OrderPurchaseInfo>(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>(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");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|