|
|
|
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<Func<AfterSaleOrder, OrderSku, OrderConsignee, AfterSaleOrderResponse>> 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<AfterSaleOrder, OrderSku, OrderConsignee>().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<AfterSaleOrder, OrderSku, OrderConsignee>().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<AfterSaleOrder>().Where(aso => aso.OrderId == editAfterSaleOrderRequest.OrderId).ToList();
|
|
|
|
var dbAfterSaleOrder = afterSaleOrderList.FirstOrDefault(aso => aso.Id == editAfterSaleOrderRequest.Id);
|
|
|
|
var dbOrder = fsql.Select<Order>(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
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|