using BBWY.Common.Models; using BBWY.Server.Model.Db; using BBWY.Server.Model.Dto; using System; using System.Collections.Generic; using System.Text; using Yitter.IdGenerator; namespace BBWY.Server.Business { public class ServiceOrderBusiness : BaseBusiness, IDenpendency { public ServiceOrderBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator) : base(fsql, nLogManager, idGenerator) { } public ServiceOrderResponse GetList(ClientQueryServiceOrderRequest request) { if (request.EndDate != null) request.EndDate = request.EndDate.Value.Date.AddDays(1).AddSeconds(-1); var list = fsql.Select() .InnerJoin((s, o, osku) => s.OrderId == o.Id) .InnerJoin((s, o, osku) => s.OrderId == osku.OrderId && s.SkuId == osku.SkuId) .Where((s, o, osku) => s.ShopId == request.ShopId) .WhereIf(!string.IsNullOrEmpty(request.Sku), (s, o, osku) => s.SkuId == request.Sku) .WhereIf(!string.IsNullOrEmpty(request.Spu), (s, o, osku) => s.ProductId == request.Spu) .WhereIf(!string.IsNullOrEmpty(request.OrderId), (s, o, osku) => s.OrderId == request.OrderId) .WhereIf(!string.IsNullOrEmpty(request.ServiceId), (s, o, osku) => s.ServiceId == request.ServiceId) .WhereIf(request.ServiceOrderState != null, (s, o, osku) => s.Status == request.ServiceOrderState) .WhereIf(request.ServiceOrderState == null, (s, o, osku) => s.Status != Model.Enums.ServiceOrderState.已取消) .WhereIf(request.ReturnDirection != null, (s, o, osku) => s.ReturnDirection == request.ReturnDirection) .WhereIf(request.StartDate != null, (s, o, osku) => s.ApplyTime >= request.StartDate) .WhereIf(request.EndDate != null, (s, o, osku) => s.ApplyTime <= request.EndDate) .OrderByDescending((s, o, osku) => s.ApplyTime) .Count(out var total) .Page(request.PageIndex, request.PageSize) .ToList((s, o, osku) => new ServiceOrderItemResponse { Id = s.Id, ApplyTime = s.ApplyTime, CreateTime = s.CreateTime, ExpressName = s.ExpressName, WayBillNo = s.WayBillNo, ImageName = s.ImageName, OrderId = s.OrderId, SkuId = s.SkuId, ProductId = s.ProductId, ProductAppearance = s.ProductAppearance, ProductFunction = s.ProductFunction, ProductHealth = s.ProductHealth, ProductPackage = s.ProductPackage, ServiceResult = s.ServiceResult, TransportDetails = s.TransportDetails, WareHouseGrounpRemark = s.WareHouseGrounpRemark, Status = s.Status, ServiceId = s.ServiceId, ShopId = s.ShopId, RenewalOrderId = s.RenewalOrderId, ReturnCheckRemark = s.ReturnCheckRemark, AfterTotalCost = s.AfterTotalCost, ConsumableAmount = s.ConsumableAmount, DeliveryExpressFreight = s.DeliveryExpressFreight, FirstFreight = s.FirstFreight, InStorageAmount = s.InStorageAmount, OutStorageAmount = s.OutStorageAmount, PurchaseOrderPKId = s.PurchaseOrderPKId, RefundAlipayOrderNo = s.RefundAlipayOrderNo, RefundAmount = s.RefundAmount, RefundInStorageAmount = s.RefundInStorageAmount, RefundPurchaseAmount = s.RefundPurchaseAmount, ReissueAfterSaleAmount = s.ReissueAfterSaleAmount, StorageAmount = s.StorageAmount, SDRefundFreight = s.SDRefundFreight, RenewalType = s.RenewalType, RenewalPurchasePlatform = s.RenewalPurchasePlatform, RenewalPurchaseOrderId = s.RenewalPurchaseOrderId, ReissueProductAmount = s.ReissueProductAmount, ReissueFreight = s.ReissueFreight, RefundTime = s.RefundTime, RefundMerchantOrderNo = s.RefundMerchantOrderNo, Title = osku.Title, ItemTotal = osku.ItemTotal.Value, Logo = osku.Logo, Price = osku.Price.Value, SkuItemCount = osku.ItemTotal.Value, ReturnDirection = s.ReturnDirection, ServiceOrderRemark = s.ServiceOrderRemark, StatusUpdateTime = s.StatusUpdateTime, PurchaseOrderId = s.PurchaseOrderId, PurchasePlatform = s.PurchasePlatform, StorageType = o.StorageType }); return new ServiceOrderResponse() { Count = total, Items = list }; } public void EditServiceOrder(EditQueryServiceOrderRequest request) { var dbso = fsql.Select(request.ServicePId).ToOne(); if (dbso == null) throw new BusinessException("服务端不存在"); dbso.ServiceResult = request.ServiceResult; dbso.ReturnDirection = request.ReturnDirection; dbso.RenewalOrderId = request.RenewalOrderId; dbso.ReturnCheckRemark = request.ReturnCheckRemark; dbso.RenewalType = request.RenewalType; dbso.RenewalPurchaseOrderId = request.RenewalPurchaseOrderId; dbso.RenewalPurchasePlatform = request.RenewalPurchasePlatform; dbso.ReissueAfterSaleAmount = request.ReissueAfterSaleAmount; dbso.ConsumableAmount = 0M; dbso.DeliveryExpressFreight = 0M; dbso.FirstFreight = 0M; dbso.InStorageAmount = 0M; dbso.OutStorageAmount = 0M; dbso.RefundInStorageAmount = 0M; dbso.ReissueFreight = 0M; dbso.ReissueProductAmount = 0M; dbso.StorageAmount = 0M; dbso.AfterTotalCost = 0M; dbso.SDRefundFreight = 0M; if (request.ServiceResult == Model.Enums.ServiceResult.退货 || request.ServiceResult == Model.Enums.ServiceResult.原返 || request.ServiceResult == Model.Enums.ServiceResult.线下换新 || request.ServiceResult == Model.Enums.ServiceResult.仅退款) { //if(request.ReturnDirection == Model.Enums.ReturnDirection.退货仓) dbso.ReissueAfterSaleAmount = request.ReissueAfterSaleAmount; } else if (request.ServiceResult == Model.Enums.ServiceResult.换新) { var dbOrderCostDetail = fsql.Select().Where(ocd => ocd.OrderId == request.OrderId && ocd.SkuId == dbso.SkuId && ocd.IsEnabled == true).ToOne(); if (dbOrderCostDetail != null) { var dbPurchaseOrder = dbOrderCostDetail != null ? fsql.Select(dbOrderCostDetail.PurchaseOrderPKId).ToOne() : null; dbso.ConsumableAmount = dbOrderCostDetail.ConsumableAmount; dbso.DeliveryExpressFreight = dbOrderCostDetail.DeliveryExpressFreight; dbso.FirstFreight = dbOrderCostDetail.FirstFreight; dbso.ReissueProductAmount = dbOrderCostDetail.SkuAmount; dbso.ReissueFreight = dbOrderCostDetail.PurchaseFreight; //dbso.StorageAmount = dbOrderCostDetail.StorageAmount; dbso.InStorageAmount = dbOrderCostDetail.InStorageAmount; dbso.OutStorageAmount = dbOrderCostDetail.OutStorageAmount; } } else if (request.ServiceResult == Model.Enums.ServiceResult.商品补发) { dbso.ReissueAfterSaleAmount = request.ReissueAfterSaleAmount; dbso.ReissueProductAmount = request.ReissueProductAmount; dbso.ReissueFreight = request.ReissueFreight; } else if (request.ServiceResult == Model.Enums.ServiceResult.SD退货) { dbso.ReissueAfterSaleAmount = 0M; dbso.SDRefundFreight = request.SDRefundFreight; } dbso.AfterTotalCost = dbso.ReissueAfterSaleAmount + dbso.ReissueFreight.Value + dbso.ReissueProductAmount.Value + dbso.ConsumableAmount.Value + dbso.DeliveryExpressFreight.Value + dbso.FirstFreight.Value + dbso.InStorageAmount.Value + dbso.OutStorageAmount.Value + dbso.RefundInStorageAmount.Value + //退货入仓操作费 没有计算 dbso.StorageAmount + dbso.SDRefundFreight; fsql.Transaction(() => { fsql.Update().SetSource(dbso).ExecuteAffrows(); }); } } }