using BBWY.Common.Models; using BBWY.Server.Model.Db; using BBWY.Server.Model.Dto; using System; using System.Linq; using System.Linq.Expressions; using Yitter.IdGenerator; namespace BBWY.Server.Business { public class AfterSaleOrderBusiness : BaseBusiness, IDenpendency { public AfterSaleOrderBusiness(IFreeSql fsql, NLog.ILogger logger, IIdGenerator idGenerator) : base(fsql, logger, idGenerator) { } private Expression> GetExpressionField() { return (aso, osku, oc) => new AfterSaleOrderResponse(aso.Id) { ApplyTime = aso.ApplyTime, ConsumableAmount = aso.ConsumableAmount, CreateTime = aso.CreateTime, DeliveryExpressFreight = aso.DeliveryExpressFreight, FirstFreight = aso.FirstFreight, InStorageAmount = aso.InStorageAmount, Logo = osku.Logo, OrderId = aso.OrderId, OutStorageAmount = aso.OutStorageAmount, ProductHealth = aso.ProductHealth, ProductId = aso.ProductId, ProductResult = aso.ProductResult, RefundAmount = aso.RefundAmount, RefundInStorageAmount = aso.RefundInStorageAmount, RefundPurchaseAmount = aso.RefundPurchaseAmount, RefundTime = aso.RefundTime, ReissueAfterSaleAmount = aso.ReissueAfterSaleAmount, ReissueFreight = aso.ReissueFreight, ReissueProductAmount = aso.ReissueProductAmount, ServiceId = aso.ServiceId, ServiceResult = aso.ServiceResult, ShopId = aso.ShopId, SkuId = aso.SkuId, Title = osku.Title, ContactName = oc.ContactName, Mobile = oc.Mobile, ItemTotal = osku.ItemTotal.Value, Price = osku.Price.Value, AfterTotalCost = aso.AfterTotalCost }; } public AfterSaleOrderListResponse GetAfterSaleOrderList(SearchAfterSaleOrderRequest request) { var select = fsql.Select().InnerJoin((aso, osku, oc) => aso.OrderId == osku.OrderId && aso.SkuId == osku.SkuId) .InnerJoin((aso, osku, oc) => aso.OrderId == oc.OrderId); if (!string.IsNullOrEmpty(request.ServiceId)) { select = select.Where((aso, osku, o) => aso.ServiceId == request.ServiceId); } else { select = select.WhereIf(request.StartDate != null, (aso, osku, oc) => aso.ApplyTime >= request.StartDate) .WhereIf(request.EndDate != null, (aso, osku, oc) => aso.ApplyTime <= request.EndDate) .WhereIf(!string.IsNullOrEmpty(request.Spu), (aso, osku, oc) => aso.ProductId == request.Spu) .WhereIf(!string.IsNullOrEmpty(request.Sku), (aso, osku, oc) => aso.SkuId == request.Sku) .WhereIf(!string.IsNullOrEmpty(request.OrderId), (aso, osku, oc) => aso.OrderId == request.OrderId); } select = select.Where((aso, osku, oc) => aso.ShopId == request.ShopId) .OrderByDescending((aso, osku, oc) => aso.ApplyTime) .Count(out var total) .Page(request.PageIndex, request.PageSize); var list = select.ToList(GetExpressionField()); return new AfterSaleOrderListResponse() { Count = total, Items = list }; } public AfterSaleOrderResponse GetAfterSaleOrderById(long afterSaleOrderId) { var response = fsql.Select().InnerJoin((aso, osku, oc) => aso.OrderId == osku.OrderId && aso.SkuId == osku.SkuId) .InnerJoin((aso, osku, oc) => aso.OrderId == oc.OrderId) .Where((aso, osku, oc) => aso.Id == afterSaleOrderId) .ToOne(GetExpressionField()); return response; } public void EditAfterSaleOrder(EditAfterSaleOrderRequest editAfterSaleOrderRequest) { var afterSaleOrderList = fsql.Select().Where(aso => aso.OrderId == editAfterSaleOrderRequest.OrderId).ToList(); var dbAfterSaleOrder = afterSaleOrderList.FirstOrDefault(aso => aso.Id == editAfterSaleOrderRequest.Id); var dbOrder = fsql.Select(editAfterSaleOrderRequest.OrderId).ToOne(); #region 更新当前服务单属性 dbAfterSaleOrder.ServiceResult = editAfterSaleOrderRequest.ServiceResult; dbAfterSaleOrder.ProductResult = editAfterSaleOrderRequest.ProductResult; dbAfterSaleOrder.ProductHealth = editAfterSaleOrderRequest.ProductHealth; dbAfterSaleOrder.ReissueAfterSaleAmount = editAfterSaleOrderRequest.ReissueAfterSaleAmount; dbAfterSaleOrder.ConsumableAmount = 0M; dbAfterSaleOrder.DeliveryExpressFreight = 0M; dbAfterSaleOrder.FirstFreight = 0M; dbAfterSaleOrder.InStorageAmount = 0M; dbAfterSaleOrder.OutStorageAmount = 0M; dbAfterSaleOrder.RefundInStorageAmount = 0M; dbAfterSaleOrder.ReissueFreight = 0M; dbAfterSaleOrder.ReissueProductAmount = 0M; dbAfterSaleOrder.AfterTotalCost = 0M; if (dbAfterSaleOrder.ServiceResult == Model.Enums.ServiceResult.维修 || dbAfterSaleOrder.ServiceResult == Model.Enums.ServiceResult.商品补发 || dbAfterSaleOrder.ServiceResult == Model.Enums.ServiceResult.线下换新) { if (dbAfterSaleOrder.ServiceResult == Model.Enums.ServiceResult.商品补发) dbAfterSaleOrder.ProductHealth = Model.Enums.ProductHealth.客户无退货; dbAfterSaleOrder.ReissueProductAmount = editAfterSaleOrderRequest.ReissueProductAmount; dbAfterSaleOrder.ReissueFreight = editAfterSaleOrderRequest.ReissueFreight; } else if (dbAfterSaleOrder.ServiceResult == Model.Enums.ServiceResult.退货) { if (dbAfterSaleOrder.ProductResult == Model.Enums.ProductResult.退回云仓 || dbAfterSaleOrder.ProductResult == Model.Enums.ProductResult.退回京仓) { } } if (dbAfterSaleOrder.ProductHealth == Model.Enums.ProductHealth.可二次销售) { //原sku采购成本 } else if (dbAfterSaleOrder.ProductHealth == Model.Enums.ProductHealth.残次品_无法二次销售 || dbAfterSaleOrder.ProductHealth == Model.Enums.ProductHealth.客户无退货 || dbAfterSaleOrder.ProductHealth == Model.Enums.ProductHealth.破损) { dbAfterSaleOrder.RefundPurchaseAmount = 0M; } #endregion } } }