506583276@qq.com 2 years ago
parent
commit
66160faae4
  1. 4
      BBWYB.Client/APIServices/BaseApiService.cs
  2. 8
      BBWYB.Client/GlobalContext.cs
  3. 2
      BBWYB.Client/Views/MainWindow.xaml
  4. 2
      BBWYB.Client/Views/Order/OrderList.xaml.cs
  5. 19
      BBWYB.Client/Views/WebB/WebB.xaml.cs
  6. 4
      BBWYB.Server.API/Controllers/BaseApiController.cs
  7. 31
      BBWYB.Server.API/Controllers/PurchaseOrderController.cs
  8. 55
      BBWYB.Server.API/Middlewares/ClientVersionValidationMiddleWare.cs
  9. 2
      BBWYB.Server.API/Program.cs
  10. 8
      BBWYB.Server.API/appsettings.json
  11. 6
      BBWYB.Server.Business/Order/OrderBusiness.cs
  12. 358
      BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs
  13. 6
      BBWYB.Server.Model/Db/Order/OrderCostDetail.cs
  14. 9
      BBWYB.Server.Model/Db/Order/OrderPurchaseInfo.cs
  15. 32
      BBWYB.Server.Model/Dto/Request/PurchaseOrder/AssocationOrderCostDetailRequest.cs
  16. 20
      BBWYB.Server.Model/Dto/Request/PurchaseOrder/AssociationOrderRequest.cs
  17. 52
      BBWYB.Server.Model/Dto/Request/PurchaseOrder/AssociationPurchaseOrderRequest.cs
  18. 15
      BBWYB.Server.Model/Dto/Request/PurchaseOrder/SetHistoryPurchaseOrderRequest.cs
  19. 44
      BBWYB.Server.Model/Dto/Response/PurchaseOrder/AssocationOrderCostDetailResponse.cs
  20. 58
      BBWYB.Server.Model/Dto/Response/PurchaseOrder/AssociationPurchaseOrderResponse.cs

4
BBWYB.Client/APIServices/BaseApiService.cs

@ -32,9 +32,9 @@ namespace BBWYB.Client.APIServices
if (headers == null)
headers = new Dictionary<string, string>();
if (!headers.ContainsKey("ClientCode"))
headers.Add("ClientCode", "BBWY");
headers.Add("ClientCode", "BBWYB");
if (!headers.ContainsKey("ClientVersion"))
headers.Add("ClientVersion", "1.0.0.0");
headers.Add("ClientVersion", globalContext.BBWYBApiVersion);
if (!headers.ContainsKey("Authorization") && !string.IsNullOrEmpty(globalContext.UserToken))
headers.Add("Authorization", $"Bearer {globalContext.UserToken}");
if (!headers.ContainsKey("qy"))

8
BBWYB.Client/GlobalContext.cs

@ -13,6 +13,7 @@ namespace BBWYB.Client
{
public GlobalContext()
{
BBWYBApiVersion = "10018";
}
private User user;
@ -35,10 +36,17 @@ namespace BBWYB.Client
public string BBWYCApiHost { get; set; }
public string QKApiHost { get; set; }
public string BBWYBApiVersion { get; set; }
public string GetUserString()
{
return JsonConvert.SerializeObject(User);
}
public string GetBBWYBApiVersion()
{
return BBWYBApiVersion;
}
#endregion
}
}

2
BBWYB.Client/Views/MainWindow.xaml

@ -24,7 +24,7 @@
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="10,0,0,0">
<TextBlock Text="{Binding GlobalContext.User.Name}"/>
<TextBlock Text="{Binding GlobalContext.User.Shop.ShopName}" Margin="5,0,0,0"/>
<TextBlock Text="v10016" Margin="5,0,0,0"/>
<TextBlock Text="{Binding GlobalContext.BBWYBApiVersion}" Margin="5,0,0,0"/>
</StackPanel>
</Border>
<Grid Grid.Row="1">

2
BBWYB.Client/Views/Order/OrderList.xaml.cs

@ -19,7 +19,7 @@ namespace BBWYB.Client.Views.Order
{
this.Dispatcher.Invoke(() =>
{
scrollviewer_OrderList.Dispatcher.Invoke(() => scrollviewer_OrderList.ScrollToTop());
scrollviewer_OrderList.Dispatcher?.Invoke(() => scrollviewer_OrderList.ScrollToTop());
});
});
}

19
BBWYB.Client/Views/WebB/WebB.xaml.cs

@ -1,6 +1,8 @@
using BBWYB.Client.APIServices;
using Microsoft.Extensions.DependencyInjection;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
using System.Windows;
using System.Windows.Controls;
@ -23,6 +25,14 @@ namespace BBWYB.Client.Views.WebB
{
InitializeComponent();
this.Loaded += WebB_Loaded;
this.Unloaded += WebB_Unloaded;
}
private void WebB_Unloaded(object sender, RoutedEventArgs e)
{
grid.Children.Remove(w2m.wb2);
//w2m.wb2.Dispose();
w2m.Close();
}
private void WebB_Loaded(object sender, System.Windows.RoutedEventArgs e)
@ -36,7 +46,13 @@ namespace BBWYB.Client.Views.WebB
shopService = s.ServiceProvider.GetRequiredService<ShopService>();
}
var url = "http://qtbbwy.qiyue666.com";
#if DEBUG
var url = "http://192.168.1.2:8080";
//var url = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "s.html");
#else
var url = "http://qtbbwy.qiyue666.com";
#endif
w2m.CoreWebView2InitializationCompleted = (e) =>
{
w2m.wb2.CoreWebView2.AddHostObjectToScript("qtbbwybContext", this.globalContext);
@ -48,6 +64,7 @@ namespace BBWYB.Client.Views.WebB
w2m.Init();
w2m.wb2.SetValue(Grid.RowProperty, 1);
w2m.wb2.Margin = new Thickness(1, 0, 1, 0);
//grid.Children.Clear();
grid.Children.Add(w2m.wb2);
if (w2m.IsInitializationCompleted && !isNavigated)

4
BBWYB.Server.API/Controllers/BaseApiController.cs

@ -1,9 +1,11 @@
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Cors;
using Microsoft.AspNetCore.Mvc;
namespace BBWYB.Server.API.Controllers
{
[Produces("application/json")]
[Route("Api/[Controller]/[Action]")]
[ApiController]
[EnableCors("cors")]
public class BaseApiController : ControllerBase
{
protected IHttpContextAccessor httpContextAccessor;

31
BBWYB.Server.API/Controllers/PurchaseOrderController.cs

@ -37,6 +37,37 @@ namespace BBWYB.Server.API.Controllers
purchaseOrderBusiness.CreatePurchaseOrder(request);
}
/// <summary>
/// 获取关联采购单列表
/// </summary>
/// <param name="orderId"></param>
/// <returns></returns>
[HttpGet("{orderId}")]
public IList<AssociationPurchaseOrderResponse> GetAssociationPurchaseOrderList([FromRoute] string orderId)
{
return purchaseOrderBusiness.GetAssociationPurchaseOrderList(orderId);
}
/// <summary>
/// 关联采购单
/// </summary>
/// <param name="request"></param>
[HttpPost]
public void AssociatePurchaseOrder([FromBody] AssociationOrderRequest request)
{
purchaseOrderBusiness.AssociatePurchaseOrder(request);
}
/// <summary>
/// 设置历史采购单
/// </summary>
/// <param name="request"></param>
[HttpPost]
public void SetHistoryPurchaseOrder([FromBody] SetHistoryPurchaseOrderRequest request)
{
purchaseOrderBusiness.SetHistoryPurchaseOrder(request);
}
/// <summary>
/// 1688回调
/// </summary>

55
BBWYB.Server.API/Middlewares/ClientVersionValidationMiddleWare.cs

@ -0,0 +1,55 @@
using BBWYB.Common.Models;
using Microsoft.Extensions.Options;
using Microsoft.Extensions.Primitives;
namespace BBWYB.Server.API.Middlewares
{
public class ClientVersionValidationMiddleWare
{
/// <summary>
/// 管道请求委托
/// </summary>
private RequestDelegate _next;
private IDictionary<string, int> apiVersionDictionary;
private IOptionsMonitor<List<ClientVersionValidationModel>> _monitor;
public ClientVersionValidationMiddleWare(RequestDelegate requestDelegate, IOptionsMonitor<List<ClientVersionValidationModel>> monitor)
{
_next = requestDelegate;
_monitor = monitor;
apiVersionDictionary = new Dictionary<string, int>();
}
public async Task Invoke(HttpContext context)
{
try
{
Console.WriteLine(context.Request.Path);
var apiRequirement = _monitor.CurrentValue.FirstOrDefault(x => x.Api.Equals(context.Request.Path, StringComparison.CurrentCultureIgnoreCase));
if (apiRequirement != null)
{
if (!context.Request.Headers.TryGetValue("ClientVersion", out StringValues clientVersionStr))
throw new BusinessException("未读取到ClientVersion");
if (!int.TryParse(clientVersionStr, out int clientVersion))
throw new BusinessException("非法ClientVersion");
if (clientVersion < apiRequirement.MinimumVersion)
throw new BusinessException("当前ClientVersion低于接口最低要求,请升级到最新版");
}
await _next(context); //调用管道执行下一个中间件
}
catch
{
throw;
}
}
}
public class ClientVersionValidationModel
{
public string Api { get; set; }
public int MinimumVersion { get; set; }
}
}

2
BBWYB.Server.API/Program.cs

@ -63,6 +63,7 @@ services.AddSingleton<OP_PlatformClientFactory>();
services.AddSingleton<PP_PlatformClientFactory>();
services.AddSingleton<ExpressCompanyNameConverter>();
services.AddMapper(new MappingProfiles());
services.Configure<List<ClientVersionValidationModel>>(configuration.GetSection("ApiVersionRequirements"));
services.AddControllers(c =>
{
@ -166,6 +167,7 @@ if (isAllowedSwagger)
app.UseMiddleware<CustomExceptionMiddleWare>();
app.UseRouting();
app.UseCors("cors");
app.UseMiddleware<ClientVersionValidationMiddleWare>();
app.UseAuthorization();
app.MapControllers();

8
BBWYB.Server.API/appsettings.json

@ -13,5 +13,11 @@
"MDSDB": "data source=rm-bp1508okrh23710yfao.mysql.rds.aliyuncs.com;port=3306;user id=qyroot;password=kaicn1132+-;initial catalog=mds;charset=utf8;sslmode=none;"
},
"AllowedSwagger": true,
"Secret": "D96BFA5B-F2AF-45BC-9342-5A55C3F9BBB0"
"Secret": "D96BFA5B-F2AF-45BC-9342-5A55C3F9BBB0",
"ApiVersionRequirements": [
{
"Api": "/api/purchaseOrder/createpurchaseorder",
"MinimumVersion": 10017
}
]
}

6
BBWYB.Server.Business/Order/OrderBusiness.cs

@ -54,7 +54,7 @@ namespace BBWYB.Server.Business
}
select = select.WhereIf(request.OrderState != null && request.OrderState != Enums.OrderState., (o, ocs, oct) => o.OrderState == request.OrderState)
.WhereIf(request.OrderState == Enums.OrderState., (o, ocs, oct) =>o.OrderState != Enums.OrderState.&&o.PackConfigState!=null)//&&o.OrderState> Enums.OrderState.等待采购
.WhereIf(request.OrderState == Enums.OrderState., (o, ocs, oct) => o.OrderState != Enums.OrderState. && o.PackConfigState != null)//&&o.OrderState> Enums.OrderState.等待采购
.WhereIf(request.StartDate != null, (o, ocs, oct) => o.StartTime >= request.StartDate)
.WhereIf(request.EndDate != null, (o, ocs, oct) => o.StartTime <= request.EndDate)
.WhereIf(!string.IsNullOrEmpty(request.ClientOrderId), (o, ocs, oct) => o.ClientOrderId == request.ClientOrderId)
@ -113,7 +113,7 @@ namespace BBWYB.Server.Business
Profit = oct.Profit,
PurchaseAmount = oct.PurchaseAmount,
IsManualEdited = oct.IsManualEdited,
PackConfigState= o.PackConfigState,
PackConfigState = o.PackConfigState,
};
}
@ -148,7 +148,7 @@ namespace BBWYB.Server.Business
#endregion
#region 处理采购信息
var orderPurchaseInfoList = fsql.Select<OrderPurchaseInfo>().Where(op => orderIdList.Contains(op.OrderId)).ToList<OrderPurchaseInfoResponse>();
var orderPurchaseInfoList = fsql.Select<OrderPurchaseInfo>().Where(op => orderIdList.Contains(op.OrderId) && op.IsEnabled == true).ToList<OrderPurchaseInfoResponse>();
var orderPurchaseSkuInfoList = fsql.Select<OrderPurchaseSkuInfo>().Where(o => orderIdList.Contains(o.OrderId)).ToList();
foreach (var order in orderList)

358
BBWYB.Server.Business/PurchaseOrder/PurchaseOrderBusiness.cs

@ -71,6 +71,12 @@ namespace BBWYB.Server.Business
return orderProductParamList;
}
/// <summary>
/// 预览采购单
/// </summary>
/// <param name="request"></param>
/// <returns></returns>
/// <exception cref="BusinessException"></exception>
public PreviewOrderResponse PreviewPurchaseOrder(PreviewOrderRequest request)
{
nLogManager.Default().Info($"PreviewPurchaseOrder {JsonConvert.SerializeObject(request)}");
@ -145,6 +151,11 @@ namespace BBWYB.Server.Business
};
}
/// <summary>
/// 创建采购单
/// </summary>
/// <param name="request"></param>
/// <exception cref="BusinessException"></exception>
public void CreatePurchaseOrder(CreateOrderRequest request)
{
nLogManager.Default().Info($"CreatePurchaseOrder\r\n{JsonConvert.SerializeObject(request)}");
@ -165,7 +176,7 @@ namespace BBWYB.Server.Business
if (request.CargoParamGroupList == null || request.CargoParamGroupList.Count() == 0)
throw new BusinessException("缺少下单商品参数");
var deleteOrderCostDetail = fsql.Delete<OrderCostDetail>().Where(ocd => ocd.OrderId == dbOrder.Id);
//var deleteOrderCostDetail = fsql.Delete<OrderCostDetail>().Where(ocd => ocd.OrderId == dbOrder.Id);
var isRepurchase = fsql.Select<OrderCost>(dbOrder.Id).Any();
var orderSkus = fsql.Select<OrderSku>().Where(osku => osku.Price != 0 && osku.OrderId == request.OrderId).ToList();
@ -178,6 +189,16 @@ namespace BBWYB.Server.Business
List<OrderPurchaseSkuInfo> insertOrderPurchaseSkuInfos = new List<OrderPurchaseSkuInfo>();
List<long> updatePurchaseTimeSchemeIdList = new List<long>();
List<OrderPurchaseRelationInfo> insertOrderPurchaseRelationInfoList = new List<OrderPurchaseRelationInfo>();
#region 待更新
IList<long> updateOrderCostDetailIdList = fsql.Select<OrderCostDetail>()
.Where(ocd => ocd.OrderId == request.OrderId && ocd.IsEnabled == true)
.ToList(ocd => ocd.Id);
IList<long> updatePurchaseOrderIdList = fsql.Select<OrderPurchaseInfo>()
.Where(opi => opi.OrderId == request.OrderId && opi.IsEnabled == true)
.ToList(opi => opi.Id);
#endregion
IInsert<OrderCost> insertOrderCost = null;
IUpdate<OrderCost> updateOrderCost = null;
var totalPurchaseAmount = 0M;
@ -286,8 +307,10 @@ namespace BBWYB.Server.Business
PurchaseFreight = currentOrderSkuFreightAmount,
PurchaseOrderId = purchaseOrderSimpleInfo.OrderId,
SkuAmount = currentOrderSkuProductAmount,
TotalCost = currentOrderSkuProductAmount + currentOrderSkuFreightAmount,
SkuId = belongSkuId,
StorageAmount = 0
StorageAmount = 0,
IsEnabled = true
};
insertOrderCostDetails.Add(orderCostDetail);
#endregion
@ -304,9 +327,11 @@ namespace BBWYB.Server.Business
PurchaseMethod = Enums.PurchaseMethod.线,
PurchaseOrderId = createOrderResponse.OrderId,
PurchasePlatform = cargoParamGroup.PurchasePlatform,
PurchaserId = cargoParamGroup.PurchaserId,
PurchaserName = cargoParamGroup.PurchaserName,
ShopId = request.ShopId,
BelongSkuIds = string.Join(",", belongSkuGroups.Select(bsg => bsg.Key))
BelongSkuIds = string.Join(",", belongSkuGroups.Select(bsg => bsg.Key)),
IsEnabled = true
};
insertOrderPurchaseInfos.Add(orderPurchaserInfo);
#endregion
@ -338,7 +363,8 @@ namespace BBWYB.Server.Business
IsManualEdited = false,
PlatformCommissionRatio = 0,
PreferentialAmount = 0,
PurchaseAmount = totalPurchaseAmount
PurchaseAmount = totalPurchaseAmount,
TotalCost = totalPurchaseAmount
};
//orderCost.PlatformCommissionAmount = dbOrder.OrderSellerPrice * orderCost.PlatformCommissionRatio;
orderCost.Profit = dbOrder.OrderTotalPrice -
@ -356,7 +382,12 @@ namespace BBWYB.Server.Business
fsql.Transaction(() =>
{
deleteOrderCostDetail.ExecuteAffrows();
//deleteOrderCostDetail.ExecuteAffrows();
if (updatePurchaseOrderIdList.Count() > 0)
fsql.Update<OrderPurchaseInfo>(updatePurchaseOrderIdList).Set(opi => opi.IsEnabled, false).ExecuteAffrows();
if (updateOrderCostDetailIdList.Count() > 0)
fsql.Update<OrderCostDetail>(updateOrderCostDetailIdList).Set(ocd => ocd.IsEnabled, false).ExecuteAffrows();
fsql.Insert(insertOrderCostDetails).ExecuteAffrows();
fsql.Insert(insertOrderPurchaseInfos).ExecuteAffrows();
fsql.Insert(insertOrderPurchaseSkuInfos).ExecuteAffrows();
@ -373,6 +404,240 @@ namespace BBWYB.Server.Business
});
}
/// <summary>
/// 获取关联订单列表
/// </summary>
/// <param name="orderId"></param>
/// <returns></returns>
public IList<AssociationPurchaseOrderResponse> GetAssociationPurchaseOrderList(string orderId)
{
IList<AssociationPurchaseOrderResponse> list = new List<AssociationPurchaseOrderResponse>();
var purchaseOrderList = fsql.Select<OrderPurchaseInfo>().Where(opi => opi.OrderId == orderId).ToList();
var orderSkuList = fsql.Select<OrderSku>().Where(osku => osku.OrderId == orderId).ToList();
var orderCostDetailList = fsql.Select<OrderCostDetail>().Where(ocd => ocd.OrderId == orderId).ToList();
foreach (var purchaseOrder in purchaseOrderList)
{
var associationPurchaseOrder = new AssociationPurchaseOrderResponse()
{
PurchaseAccountId = purchaseOrder.PurchaseAccountId,
PurchaseAccountName = purchaseOrder.PurchaseAccountName,
PurchasePlatform = purchaseOrder.PurchasePlatform.Value,
PurchaserId = purchaseOrder.PurchaserId,
PurchaserName = purchaseOrder.PurchaserName,
PurchaserOrderId = purchaseOrder.PurchaseOrderId,
IsEnabled = purchaseOrder.IsEnabled
};
var currentOrderCostDetailList = orderCostDetailList.Where(ocd => ocd.PurchaseOrderId == purchaseOrder.PurchaseOrderId).ToList();
foreach (var orderCostDetail in currentOrderCostDetailList)
{
var orderSku = orderSkuList.FirstOrDefault(osku => osku.SkuId == orderCostDetail.SkuId);
var assocationOrderCostDetail = new AssocationOrderCostDetailResponse()
{
Id = orderCostDetail.Id,
Logo = orderSku.Logo,
Title = orderSku.Title,
OrderId = orderSku.OrderId,
SkuId = orderSku.SkuId,
PurchaseQuantity = orderCostDetail.DeductionQuantity ?? 0,
PurchaseFreight = orderCostDetail.PurchaseFreight ?? 0M,
SkuAmount = orderCostDetail.SkuAmount ?? 0M,
};
if (assocationOrderCostDetail.PurchaseQuantity != 0)
assocationOrderCostDetail.PurchasePrice = assocationOrderCostDetail.SkuAmount / assocationOrderCostDetail.PurchaseQuantity;
associationPurchaseOrder.AssocationOrderCostDetailList.Add(assocationOrderCostDetail);
}
associationPurchaseOrder.PurchaseAmount = associationPurchaseOrder.AssocationOrderCostDetailList.Sum(x => x.SkuAmount);
associationPurchaseOrder.PurchaseFreight = associationPurchaseOrder.AssocationOrderCostDetailList.Sum(x => x.PurchaseFreight);
list.Add(associationPurchaseOrder);
}
return list;
}
/// <summary>
/// 关联订单
/// </summary>
/// <param name="request"></param>
public void AssociatePurchaseOrder(AssociationOrderRequest request)
{
if (request.AssociationPurchaseOrderList == null || request.AssociationPurchaseOrderList.Count() == 0)
throw new BusinessException("缺少采购单信息");
var dbPurchaseOrderList = fsql.Select<OrderPurchaseInfo>().Where(opi => opi.OrderId == request.OrderId).ToList();
var dbInvalidPurchaseOrderIdList = dbPurchaseOrderList.Where(opi => !opi.IsEnabled).Select(opi => opi.PurchaseOrderId).ToList();
var dbOrderSkuList = fsql.Select<OrderSku>().Where(osku => osku.OrderId == request.OrderId).ToList();
var dbOrderCostDetailList = fsql.Select<OrderCostDetail>().Where(ocd => ocd.OrderId == request.OrderId && ocd.IsEnabled == true).ToList();
var dbOrderCost = fsql.Select<OrderCost>(request.OrderId).ToOne();
var dbOrder = fsql.Select<Order>(request.OrderId).ToOne();
List<OrderPurchaseInfo> insertOrderPurchaseInfoList = new List<OrderPurchaseInfo>();
IList<IUpdate<OrderPurchaseInfo>> updateOrderPurchaseInfoList = new List<IUpdate<OrderPurchaseInfo>>();
List<OrderCostDetail> insertOrderCostDetailList = new List<OrderCostDetail>();
IList<IUpdate<OrderCostDetail>> updateOrderCostDetailList = new List<IUpdate<OrderCostDetail>>();
IInsert<OrderCost> insertOrderCost = null;
IUpdate<OrderCost> updateOrderCost = null;
foreach (var purchaseOrder in request.AssociationPurchaseOrderList)
{
if (dbInvalidPurchaseOrderIdList.Contains(purchaseOrder.PurchaserOrderId))
continue;
var avgFreight = purchaseOrder.PurchaseFreight / purchaseOrder.AssocationOrderCostDetailList.Count();
var dbPurchaserOrder = dbPurchaseOrderList.FirstOrDefault(x => x.PurchaseOrderId == purchaseOrder.PurchaserOrderId);
if (dbPurchaserOrder == null)
{
dbPurchaserOrder = new OrderPurchaseInfo()
{
Id = idGenerator.NewLong(),
OrderId = request.OrderId,
PurchaseAccountId = purchaseOrder.PurchaseAccountId,
PurchaseAccountName = purchaseOrder.PurchaseAccountName,
IsEnabled = true,
BelongSkuIds = string.Join(",", purchaseOrder.AssocationOrderCostDetailList.Select(x => x.SkuId)),
CreateTime = DateTime.Now,
PurchaseMethod = Enums.PurchaseMethod.线,
PurchaseOrderId = purchaseOrder.PurchaserOrderId,
PurchasePlatform = purchaseOrder.PurchasePlatform,
PurchaserId = purchaseOrder.PurchaserId,
PurchaserName = purchaseOrder.PurchaserName,
ShopId = request.ShopId
};
insertOrderPurchaseInfoList.Add(dbPurchaserOrder);
foreach (var assOrderCostDetail in purchaseOrder.AssocationOrderCostDetailList)
{
var dbOrderSku = dbOrderSkuList.FirstOrDefault(osku => osku.SkuId == assOrderCostDetail.SkuId);
var orderCostDetail = new OrderCostDetail()
{
Id = idGenerator.NewLong(),
CreateTime = DateTime.Now,
DeductionQuantity = assOrderCostDetail.PurchaseQuantity,
IsEnabled = true,
OrderId = request.OrderId,
ProductId = dbOrderSku.ProductId,
SkuId = assOrderCostDetail.SkuId,
PurchaseFreight = avgFreight,
TotalCost = assOrderCostDetail.SkuAmount + avgFreight
};
insertOrderCostDetailList.Add(orderCostDetail);
}
}
else
{
dbPurchaserOrder.PurchaseAccountId = purchaseOrder.PurchaseAccountId;
dbPurchaserOrder.PurchaseAccountName = purchaseOrder.PurchaseAccountName;
//dbPurchaserOrder.BelongSkuIds = string.Join(",", purchaseOrder.AssocationOrderCostDetailList.Select(x => x.SkuId));
dbPurchaserOrder.PurchasePlatform = purchaseOrder.PurchasePlatform;
dbPurchaserOrder.PurchaserId = purchaseOrder.PurchaserId;
dbPurchaserOrder.PurchaserName = purchaseOrder.PurchaserName;
updateOrderPurchaseInfoList.Add(fsql.Update<OrderPurchaseInfo>().SetSource(dbPurchaserOrder));
foreach (var assOrderCostDetail in purchaseOrder.AssocationOrderCostDetailList)
{
var dbOrderCostDetail = dbOrderCostDetailList.FirstOrDefault(ocd => ocd.SkuId == assOrderCostDetail.SkuId);
dbOrderCostDetail.SkuAmount = assOrderCostDetail.SkuAmount;
dbOrderCostDetail.DeductionQuantity = assOrderCostDetail.PurchaseQuantity;
dbOrderCostDetail.PurchaseFreight = avgFreight;
dbOrderCostDetail.TotalCost = assOrderCostDetail.SkuAmount + avgFreight;
updateOrderCostDetailList.Add(fsql.Update<OrderCostDetail>().SetSource(dbOrderCostDetail));
}
}
}
var totalPurchaseAmount = request.AssociationPurchaseOrderList.Where(x => !dbInvalidPurchaseOrderIdList.Contains(x.PurchaserOrderId))
.Sum(p => p.PurchaseAmount + p.PurchaseFreight);
var profit = dbOrder.OrderTotalPrice - totalPurchaseAmount - (dbOrderCost?.DeliveryExpressFreight ?? 0); // -orderCost.PlatformCommissionAmount
if (dbOrderCost == null)
{
dbOrderCost = new OrderCost()
{
OrderId = request.OrderId,
DeliveryExpressFreight = 0,
IsManualEdited = false,
PlatformCommissionAmount = 0,
PlatformCommissionRatio = 0,
PreferentialAmount = 0,
CreateTime = DateTime.Now,
PurchaseAmount = totalPurchaseAmount,
TotalCost = totalPurchaseAmount,
Profit = profit
};
insertOrderCost = fsql.Insert(dbOrderCost);
}
else
{
dbOrderCost.PurchaseAmount = totalPurchaseAmount;
dbOrderCost.Profit = profit;
updateOrderCost = fsql.Update<OrderCost>(request.OrderId).Set(oc => oc.PurchaseAmount, totalPurchaseAmount)
.Set(oc => oc.TotalCost, totalPurchaseAmount)
.Set(oc => oc.Profit, profit);
}
fsql.Transaction(() =>
{
if (insertOrderPurchaseInfoList.Count() > 0)
fsql.Insert(insertOrderPurchaseInfoList).ExecuteAffrows();
if (updateOrderPurchaseInfoList.Count() > 0)
{
foreach (var update in updateOrderPurchaseInfoList)
update.ExecuteAffrows();
}
if (insertOrderCostDetailList.Count() > 0)
fsql.Insert(insertOrderCostDetailList).ExecuteAffrows();
if (updateOrderCostDetailList.Count() > 0)
{
foreach (var update in updateOrderCostDetailList)
update.ExecuteAffrows();
}
insertOrderCost?.ExecuteAffrows();
updateOrderCost?.ExecuteAffrows();
});
}
public void SetHistoryPurchaseOrder(SetHistoryPurchaseOrderRequest request)
{
var dbOrderCostDetailList = fsql.Select<OrderCostDetail>().Where(ocd => ocd.OrderId == request.OrderId)
.ToList();
var dbOrderCost = fsql.Select<OrderCost>(request.OrderId).ToOne();
var dbOrder = fsql.Select<Order>(request.OrderId).ToOne();
var invalidCost = dbOrderCostDetailList.Sum(ocd => ocd.SkuAmount + ocd.PurchaseFreight);
//orderCost.PlatformCommissionAmount = dbOrder.OrderSellerPrice * orderCost.PlatformCommissionRatio;
try
{
dbOrderCost.PurchaseAmount = dbOrderCostDetailList.Where(ocd => ocd.PurchaseOrderId != request.PurchaseOrderId).Sum(ocd => ocd.TotalCost);
}
catch
{
dbOrderCost.PurchaseAmount = 0;
}
dbOrderCost.Profit = dbOrder.OrderTotalPrice -
dbOrderCost.PurchaseAmount -
dbOrderCost.DeliveryExpressFreight; // -orderCost.PlatformCommissionAmount
fsql.Transaction(() =>
{
fsql.Update<OrderPurchaseInfo>()
.Set(opi => opi.IsEnabled, false)
.Where(opi => opi.PurchaseOrderId == request.PurchaseOrderId)
.ExecuteAffrows();
fsql.Update<OrderCostDetail>()
.Set(ocd => ocd.IsEnabled, false)
.Where(ocd => ocd.PurchaseOrderId == request.PurchaseOrderId)
.ExecuteAffrows();
fsql.Update<OrderCost>().SetSource(dbOrderCost).ExecuteAffrows();
});
}
#region 1688CallBack
public void CallbackFrom1688(string jsonStr)
{
@ -678,26 +943,36 @@ namespace BBWYB.Server.Business
{
var orderPurchaseInfo = fsql.Select<OrderPurchaseInfo>().Where(opi => opi.PurchaseOrderId == purchaseOrderId).ToOne();
if (orderPurchaseInfo == null)
throw new Exception($"未查询到采购单{orderPurchaseInfo.PurchaseAccountId}");
throw new Exception($"采购单{purchaseOrderId}-未查询到采购单");
var purchaseAccount = fsqlManager.MDSfsql.Select<Purchaseaccount>().Where(pa => pa.Id == orderPurchaseInfo.PurchaseAccountId).ToOne();
if (purchaseAccount == null)
throw new Exception($"未查询到采购账号{orderPurchaseInfo.PurchaseAccountId}");
throw new Exception($"采购单{purchaseOrderId}-未查询到采购账号{orderPurchaseInfo.PurchaseAccountId}");
var dbOrder = fsql.Select<Order>(orderPurchaseInfo.OrderId).ToOne(o => new { o.OrderTotalPrice });
var dbOrder = fsql.Select<Order>(orderPurchaseInfo.OrderId).ToOne();
var dbOrderCost = fsql.Select<OrderCost>(orderPurchaseInfo.OrderId).ToOne();
if (dbOrderCost == null)
throw new Exception($"未查询到订单成本 {orderPurchaseInfo.OrderId}");
throw new Exception($"采购单{purchaseOrderId}-未查询到订单{orderPurchaseInfo.OrderId}的成本");
var dbOrderCostDetails = fsql.Select<OrderCostDetail>().Where(ocd => ocd.OrderId == dbOrder.Id && ocd.IsEnabled == true).ToList();
if (dbOrderCostDetails.Count() == 0)
throw new Exception($"采购单{purchaseOrderId}-未查询到订单{orderPurchaseInfo.OrderId}的明细成本");
var dbOrderPurchaseRelationInfos = fsql.Select<OrderPurchaseRelationInfo>().Where(x => x.OrderId == dbOrder.Id).ToList();
if (dbOrderPurchaseRelationInfos.Count() == 0)
throw new Exception($"采购单{purchaseOrderId}-未查询到采购单关联明细,手动关联的采购单不支持改价");
var dbOrderPurchaseInfoList = fsql.Select<OrderPurchaseInfo>().Where(opi => opi.OrderId == orderPurchaseInfo.OrderId && opi.IsEnabled == true).ToList();
if (dbOrderPurchaseInfoList.Count() == 0)
throw new Exception($"采购单{purchaseOrderId}-未查询到订单{orderPurchaseInfo.OrderId}的采购单集合");
List<IUpdate<OrderCostDetail>> updateOrderCostDetailList = new List<IUpdate<OrderCostDetail>>();
IUpdate<OrderCost> updateOrderCost = null;
var orderPurchaseInfoList = fsql.Select<OrderPurchaseInfo>().Where(opi => opi.OrderId == orderPurchaseInfo.OrderId).ToList(opi => new
{
opi.PurchaseOrderId,
opi.PurchaseAccountId
});
var client = ppPlatformClientFactory.GetClient(AdapterEnums.PlatformType.);
var totalPurchaseAmount = 0M;
foreach (var opi in orderPurchaseInfoList)
foreach (var opi in dbOrderPurchaseInfoList)
{
var purchaseOrderSimpleInfo = client.QueryOrderDetail(new PP_QueryOrderDetailRequest()
{
@ -707,25 +982,50 @@ namespace BBWYB.Server.Business
OrderId = opi.PurchaseOrderId
});
totalPurchaseAmount += purchaseOrderSimpleInfo.TotalAmount;
}
var currentPurchaseOrderRelationInfos = dbOrderPurchaseRelationInfos.Where(x => x.PurchaseOrderId == opi.PurchaseOrderId).ToList();
//var oldTotalAmount = dbOrderCost.PurchaseAmount;
//var oldProductAmount = dbOrderCostDetailList.Sum(ocd => ocd.SkuAmount);
//var oldPurchaseFreight = dbOrderCostDetailList.Sum(ocd => ocd.PurchaseFreight);
var belongSkuGroups = currentPurchaseOrderRelationInfos.GroupBy(p => p.BelongSkuId);
foreach (var belongSkuGroup in belongSkuGroups)
{
var belongSkuId = belongSkuGroup.Key;
var currentOrderSkuProductAmount = 0M; //采购成本
var currentOrderSkuCargoParamList = belongSkuGroup.ToList(); //找当前skuId的采购skuId
dbOrderCost.PurchaseAmount = totalPurchaseAmount;
dbOrderCost.Profit = dbOrder.OrderTotalPrice -
dbOrderCost.PurchaseAmount -
dbOrderCost.DeliveryExpressFreight; // -orderCost.PlatformCommissionAmount
foreach (var currentOrderSkuCargo in currentOrderSkuCargoParamList)
{
var purchaseSkuProductAmount = purchaseOrderSimpleInfo.ItemList.Where(p => p.SkuId == currentOrderSkuCargo.PurchaseSkuId)
.Sum(p => p.ProductAmount);
var purchaseSkuTotalQuantity = purchaseOrderSimpleInfo.ItemList.Where(p => p.SkuId == currentOrderSkuCargo.PurchaseSkuId)
.Sum(p => p.Quantity);
currentOrderSkuProductAmount += purchaseSkuProductAmount * (1.0M * currentOrderSkuCargo.Quantity.Value / purchaseSkuTotalQuantity);
}
fsql.Transaction(() =>
{
fsql.Update<OrderCost>(dbOrderCost.OrderId).Set(oc => oc.PurchaseAmount, dbOrderCost.PurchaseAmount)
.Set(oc => oc.Profit, dbOrderCost.Profit)
.ExecuteAffrows();
});
var currentOrderSkuFreightAmount = purchaseOrderSimpleInfo.FreightAmount / belongSkuGroups.Count(); //采购运费(按sku数均分)
var dbOrderSkuDetail = dbOrderCostDetails.FirstOrDefault(ocd => ocd.SkuId == belongSkuId);
dbOrderSkuDetail.SkuAmount = currentOrderSkuProductAmount;
dbOrderSkuDetail.PurchaseFreight = currentOrderSkuFreightAmount;
dbOrderSkuDetail.TotalCost = currentOrderSkuProductAmount + currentOrderSkuFreightAmount;
updateOrderCostDetailList.Add(fsql.Update<OrderCostDetail>().SetSource(dbOrderSkuDetail));
}
dbOrderCost.PurchaseAmount = totalPurchaseAmount;
dbOrderCost.Profit = dbOrder.OrderTotalPrice -
dbOrderCost.PurchaseAmount -
dbOrderCost.DeliveryExpressFreight; // -orderCost.PlatformCommissionAmount
fsql.Transaction(() =>
{
foreach (var update in updateOrderCostDetailList)
update.ExecuteAffrows();
updateOrderCost?.ExecuteAffrows();
//fsql.Update<OrderCost>(dbOrderCost.OrderId).Set(oc => oc.PurchaseAmount, dbOrderCost.PurchaseAmount)
// .Set(oc => oc.Profit, dbOrderCost.Profit)
// .ExecuteAffrows();
});
}
}
catch (Exception ex)
{

6
BBWYB.Server.Model/Db/Order/OrderCostDetail.cs

@ -109,12 +109,6 @@ namespace BBWYB.Server.Model.Db
[Column(DbType = "decimal(20,2)")]
public decimal? StorageAmount { get; set; } = 0.00M;
/// <summary>
/// 采购成本(不含发货运费)
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? PurchaseAmount { get; set; } = 0.00M;
/// <summary>
/// 成本总计
/// </summary>

9
BBWYB.Server.Model/Db/Order/OrderPurchaseInfo.cs

@ -39,6 +39,12 @@ namespace BBWYB.Server.Model.Db
[Column(MapType = typeof(int?))]
public Enums.Platform? PurchasePlatform { get; set; }
/// <summary>
/// ²É¹ºÉÌId
/// </summary>
[Column(StringLength = 100)]
public string PurchaserId { get; set; }
/// <summary>
/// ²É¹ºÉÌÃû³Æ
/// </summary>
@ -85,6 +91,9 @@ namespace BBWYB.Server.Model.Db
/// </summary>
[Column(StringLength = 500)]
public string BelongSkuIds { get; set; }
[Column(DbType = "bit")]
public bool IsEnabled { get; set; } = true;
}
}

32
BBWYB.Server.Model/Dto/Request/PurchaseOrder/AssocationOrderCostDetailRequest.cs

@ -0,0 +1,32 @@
namespace BBWYB.Server.Model.Dto
{
public class AssocationOrderCostDetailRequest
{
/// <summary>
/// 订单Id
/// </summary>
public string OrderId { get; set; }
public string SkuId { get; set; }
/// <summary>
/// 采购货款
/// </summary>
public decimal SkuAmount { get; set; }
///// <summary>
///// 采购运费
///// </summary>
//public decimal PurchaseFreight { get; set; }
/// <summary>
/// 采购数量
/// </summary>
public int PurchaseQuantity { get; set; }
///// <summary>
///// 采购单价
///// </summary>
//public decimal PurchasePrice { get; set; }
}
}

20
BBWYB.Server.Model/Dto/Request/PurchaseOrder/AssociationOrderRequest.cs

@ -0,0 +1,20 @@
namespace BBWYB.Server.Model.Dto
{
public class AssociationOrderRequest
{
/// <summary>
/// 订单Id
/// </summary>
public string OrderId { get; set; }
/// <summary>
/// 店铺Id (Shop对象的ShopId)
/// </summary>
public long ShopId { get; set; }
/// <summary>
/// 采购单列表
/// </summary>
public IList<AssociationPurchaseOrderRequest> AssociationPurchaseOrderList { get; set; }
}
}

52
BBWYB.Server.Model/Dto/Request/PurchaseOrder/AssociationPurchaseOrderRequest.cs

@ -0,0 +1,52 @@
namespace BBWYB.Server.Model.Dto
{
public class AssociationPurchaseOrderRequest
{
public AssociationPurchaseOrderRequest()
{
AssocationOrderCostDetailList = new List<AssocationOrderCostDetailRequest>();
}
/// <summary>
/// 采购单号
/// </summary>
public string PurchaserOrderId { get; set; }
public Enums.Platform PurchasePlatform { get; set; }
/// <summary>
/// 买家账号Id (如果采购平台为不支持的平台,此Id可填空)
/// </summary>
public string PurchaseAccountId { get; set; }
/// <summary>
/// 买家账号
/// </summary>
public string PurchaseAccountName { get; set; }
/// <summary>
/// 商家Id
/// </summary>
public string PurchaserId { get; set; }
/// <summary>
/// 商家名称
/// </summary>
public string PurchaserName { get; set; }
/// <summary>
/// 采购金额
/// </summary>
public decimal PurchaseAmount { get; set; }
/// <summary>
/// 采购运费
/// </summary>
public decimal PurchaseFreight { get; set; }
/// <summary>
/// 订单成本明细列表
/// </summary>
public IList<AssocationOrderCostDetailRequest> AssocationOrderCostDetailList { get; set; }
}
}

15
BBWYB.Server.Model/Dto/Request/PurchaseOrder/SetHistoryPurchaseOrderRequest.cs

@ -0,0 +1,15 @@
namespace BBWYB.Server.Model.Dto
{
public class SetHistoryPurchaseOrderRequest
{
/// <summary>
/// 订单Id
/// </summary>
public string OrderId { get; set; }
/// <summary>
/// 采购单Id
/// </summary>
public string PurchaseOrderId { get; set; }
}
}

44
BBWYB.Server.Model/Dto/Response/PurchaseOrder/AssocationOrderCostDetailResponse.cs

@ -0,0 +1,44 @@
namespace BBWYB.Server.Model.Dto
{
public class AssocationOrderCostDetailResponse
{
/// <summary>
/// SKU成本Id
/// </summary>
public long Id { get; set; }
/// <summary>
/// 订单Id
/// </summary>
public string OrderId { get; set; }
public string SkuId { get; set; }
/// <summary>
/// SKU标题
/// </summary>
public string Title { get; set; }
public string Logo { get; set; }
/// <summary>
/// 采购货款
/// </summary>
public decimal SkuAmount { get; set; }
/// <summary>
/// 采购运费
/// </summary>
public decimal PurchaseFreight { get; set; }
/// <summary>
/// 采购数量
/// </summary>
public int PurchaseQuantity { get; set; }
/// <summary>
/// 采购单价
/// </summary>
public decimal PurchasePrice { get; set; }
}
}

58
BBWYB.Server.Model/Dto/Response/PurchaseOrder/AssociationPurchaseOrderResponse.cs

@ -0,0 +1,58 @@
namespace BBWYB.Server.Model.Dto
{
public class AssociationPurchaseOrderResponse
{
public AssociationPurchaseOrderResponse()
{
AssocationOrderCostDetailList = new List<AssocationOrderCostDetailResponse>();
}
/// <summary>
/// 采购单号
/// </summary>
public string PurchaserOrderId { get; set; }
public Enums.Platform PurchasePlatform { get; set; }
/// <summary>
/// 买家账号Id (如果采购平台为不支持的平台,此Id可填空)
/// </summary>
public string PurchaseAccountId { get; set; }
/// <summary>
/// 买家账号
/// </summary>
public string PurchaseAccountName { get; set; }
/// <summary>
/// 商家Id
/// </summary>
public string PurchaserId { get; set; }
/// <summary>
/// 商家名称
/// </summary>
public string PurchaserName { get; set; }
/// <summary>
/// 采购金额
/// </summary>
public decimal PurchaseAmount { get; set; }
/// <summary>
/// 采购运费
/// </summary>
public decimal PurchaseFreight { get; set; }
/// <summary>
/// 是否有效(以此判定是否为历史采购单)
/// </summary>
public bool IsEnabled { get; set; }
/// <summary>
/// 订单成本明细列表
/// </summary>
public IList<AssocationOrderCostDetailResponse> AssocationOrderCostDetailList { get; set; }
}
}
Loading…
Cancel
Save