Browse Source

订单同步

updatebug
shanji 2 years ago
parent
commit
79fac88111
  1. 27
      BBWYB.Server.API/Controllers/OrderSyncController.cs
  2. 8
      BBWYB.Server.API/Program.cs
  3. 8
      BBWYB.Server.Business/FreeSqlMultiDBManager.cs
  4. 186
      BBWYB.Server.Business/Sync/OrderSyncBusiness.cs
  5. 29
      BBWYB.Server.Business/Vender/VenderBusiness.cs
  6. 4
      BBWYB.Server.Model/BBWYB.Server.Model.csproj
  7. 175
      BBWYB.Server.Model/Db/MDS/Shops.cs
  8. 153
      BBWYB.Server.Model/Db/Order/Order.cs
  9. 74
      BBWYB.Server.Model/Db/Order/OrderConsignee.cs
  10. 110
      BBWYB.Server.Model/Db/Order/OrderCost.cs
  11. 119
      BBWYB.Server.Model/Db/Order/OrderCostDetail.cs
  12. 69
      BBWYB.Server.Model/Db/Order/OrderSku.cs
  13. 98
      BBWYB.Server.Model/Dto/Response/Vender/ShopResponse.cs
  14. 3
      BBWYB.Server.Model/Enums.cs

27
BBWYB.Server.API/Controllers/OrderSyncController.cs

@ -0,0 +1,27 @@
using BBWYB.Server.Business.Sync;
using Microsoft.AspNetCore.Mvc;
namespace BBWYB.Server.API.Controllers
{
public class OrderSyncController : BaseApiController
{
private OrderSyncBusiness orderSyncBusiness;
public OrderSyncController(IHttpContextAccessor httpContextAccessor, OrderSyncBusiness orderSyncBusiness) : base(httpContextAccessor)
{
this.orderSyncBusiness = orderSyncBusiness;
}
[HttpPost]
public void AutoOrderSync()
{
orderSyncBusiness.AutoOrderSync();
}
[HttpPost("{shopId}/{orderId}")]
public void ManualOrderSync([FromRoute] long shopId, [FromRoute] string orderId)
{
orderSyncBusiness.ManualOrderSync(shopId, orderId, null, null);
}
}
}

8
BBWYB.Server.API/Program.cs

@ -28,6 +28,14 @@ services.AddSingleton(typeof(IIdGenerator), idGenerator);
var fsql = new FreeSql.FreeSqlBuilder().UseConnectionString(FreeSql.DataType.MySql, configuration.GetConnectionString("DB")).Build();
services.AddSingleton(typeof(IFreeSql), fsql);
var fsql2 = new FreeSql.FreeSqlBuilder().UseConnectionString(FreeSql.DataType.MySql, configuration.GetConnectionString("MDSDB")).Build();
services.AddSingleton(new FreeSqlMultiDBManager()
{
BBWYfsql = fsql,
MDSfsql = fsql2
});
services.AddSingleton<NLogManager>();
services.AddSingleton<RestApiService>();
services.AddSingleton<TaskSchedulerManager>();

8
BBWYB.Server.Business/FreeSqlMultiDBManager.cs

@ -0,0 +1,8 @@
namespace BBWYB.Server.Business
{
public class FreeSqlMultiDBManager
{
public IFreeSql BBWYfsql { get; set; }
public IFreeSql MDSfsql { get; set; }
}
}

186
BBWYB.Server.Business/Sync/OrderSyncBusiness.cs

@ -1,7 +1,189 @@
namespace BBWYB.Server.Business.Sync
using BBWYB.Common.Log;
using BBWYB.Common.Models;
using BBWYB.Server.Model;
using BBWYB.Server.Model.Db;
using BBWYB.Server.Model.Dto;
using FreeSql;
using SDKAdapter;
using SDKAdapter.OperationPlatform.Client;
using SDKAdapter.OperationPlatform.Models;
using Yitter.IdGenerator;
namespace BBWYB.Server.Business.Sync
{
public class OrderSyncBusiness : BaseBusiness, IDenpendency
{
private OP_PlatformClientFactory opPlatformClientFactory;
private VenderBusiness venderBusiness;
private TaskSchedulerManager taskSchedulerManager;
public OrderSyncBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, OP_PlatformClientFactory opPlatformClientFactory, VenderBusiness venderBusiness, TaskSchedulerManager taskSchedulerManager) : base(fsql, nLogManager, idGenerator)
{
public class OrderSyncBusiness
this.opPlatformClientFactory = opPlatformClientFactory;
this.venderBusiness = venderBusiness;
this.taskSchedulerManager = taskSchedulerManager;
}
public void AutoOrderSync()
{
var shopList = venderBusiness.GetShopList(platform: Enums.Platform.);
foreach (var shop in shopList)
{
Task.Factory.StartNew(() => Sync(shop, string.Empty, DateTime.Now.AddHours(-3), DateTime.Now, AdapterEnums.SortTimeField.Modify, AdapterEnums.SortType.Desc), CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.SyncOrderTaskScheduler);
}
}
public void ManualOrderSync(long shopId, string orderId, DateTime? startTime, DateTime? endTime)
{
var shop = venderBusiness.GetShopList(shopId, platform: Enums.Platform.).FirstOrDefault();
if (shop == null)
throw new BusinessException($"未找到店铺Id {shopId}");
Task.Factory.StartNew(() => Sync(shop, orderId, startTime, endTime, AdapterEnums.SortTimeField.Modify, AdapterEnums.SortType.Desc), CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.SyncOrderTaskScheduler);
}
private void Sync(ShopResponse shop,
string orderId,
DateTime? startTime,
DateTime? endTime,
AdapterEnums.SortTimeField sortTimeField,
AdapterEnums.SortType sortType)
{
var shopId = long.Parse(shop.ShopId);
var loggerName = $"订单同步-{shop.ShopName}";
try
{
var qtOrderList = opPlatformClientFactory.GetClient(AdapterEnums.PlatformType.).GetOrderList(new OP_QueryOrderRequest()
{
AppKey = shop.AppKey,
AppSecret = shop.AppSecret,
AppToken = shop.AppToken,
OrderId = orderId,
PageIndex = 1,
PageSize = 100,
Platform = AdapterEnums.PlatformType.,
SortTimeField = sortTimeField,
SortType = sortType,
StartDate = startTime,
EndDate = endTime
});
if (qtOrderList.Count == 0)
return;
var qtOrderIdList = qtOrderList.Items.Select(qto => qto.OrderId).ToList();
var dbOrderList = fsql.Select<Order>(qtOrderIdList).ToList();
List<Order> insertOrderList = new List<Order>();
List<IUpdate<Order>> updateOrderList = new List<IUpdate<Order>>();
foreach (var qtOrder in qtOrderList.Items)
{
var orderState = ConvertQuanTanOrderState(qtOrder.OrderState);
var dbOrder = dbOrderList.FirstOrDefault(o => o.Id == qtOrder.OrderId);
if (dbOrder == null)
{
//新订单
dbOrder = new Order()
{
Id = qtOrder.OrderId,
BuyerRemark = qtOrder.BuyerRemark,
EndTime = qtOrder.EndTime,
ExpressName = qtOrder.DeliveryResponse.ExpressName,
FreightPrice = qtOrder.FreightAmount,
ModifyTime = qtOrder.ModifyTime,
Flag = string.Empty,
IsAfterSaleOrder = false,
OrderPayment = qtOrder.OrderPayment,
OrderSellerPrice = qtOrder.OrderProductAmount,
OrderTotalPrice = qtOrder.OrderTotalAmount,
OrderType = 0,
PayType = qtOrder.PayType,
Platform = Enums.Platform.,
PreferentialAmount = qtOrder.PreferentialAmount,
PurchaseRemark = String.Empty,
ShopId = shopId,
SellerPreferentialAmount = qtOrder.SellerPreferentialAmount,
StartTime = qtOrder.StartTime,
StorageType = 0,
VenderRemark = qtOrder.VenderRemark,
WaybillNo = qtOrder.DeliveryResponse.WayBillNo,
OrderState = orderState
};
if (!insertOrderList.Any(o => o.Id == dbOrder.Id))
insertOrderList.Add(dbOrder);
}
else
{
var updateOrderState = false;
var updateWaybillNo = false;
var updateExpressName = false;
var updateModifyTime = false;
var updateBuyerRemark = false;
var updateVenderRemark = false;
if (dbOrder.OrderState != orderState)
updateOrderState = true;
if (dbOrder.WaybillNo != qtOrder.DeliveryResponse.WayBillNo)
updateWaybillNo = true;
if (dbOrder.ExpressName != qtOrder.DeliveryResponse.ExpressName)
updateExpressName = true;
if (dbOrder.ModifyTime != qtOrder.ModifyTime)
updateModifyTime = true;
if (dbOrder.BuyerRemark != qtOrder.BuyerRemark)
updateBuyerRemark = true;
if (dbOrder.VenderRemark != qtOrder.VenderRemark)
updateVenderRemark = true;
if (updateOrderState || updateWaybillNo || updateModifyTime || updateBuyerRemark || updateVenderRemark)
{
var update = fsql.Update<Order>(dbOrder.Id).SetIf(updateOrderState, o => o.OrderState == orderState)
.SetIf(updateWaybillNo, o => o.WaybillNo, qtOrder.DeliveryResponse.WayBillNo)
.SetIf(updateExpressName, o => o.ExpressName, qtOrder.DeliveryResponse.ExpressName)
.SetIf(updateModifyTime, o => o.ModifyTime, qtOrder.ModifyTime)
.SetIf(updateBuyerRemark, o => o.BuyerRemark, qtOrder.BuyerRemark)
.SetIf(updateVenderRemark, o => o.VenderRemark, qtOrder.VenderRemark);
updateOrderList.Add(update);
}
}
}
fsql.Transaction(() =>
{
if (insertOrderList.Count > 0)
fsql.Insert(insertOrderList).ExecuteAffrows();
if (updateOrderList.Count() > 0)
foreach (var update in updateOrderList)
update.ExecuteAffrows();
});
}
catch (Exception ex)
{
nLogManager.GetLogger(loggerName).Error(ex);
}
}
private Enums.OrderState ConvertQuanTanOrderState(string qtOrderState)
{
/*
-1退
0
1
2
3
*/
if (qtOrderState == "-1")
return Enums.OrderState.退;
if (qtOrderState == "0")
return Enums.OrderState.;
if (qtOrderState == "1")
return Enums.OrderState.;
if (qtOrderState == "2")
return Enums.OrderState.;
if (qtOrderState == "3")
return Enums.OrderState.;
return Enums.OrderState.Unknow;
}
}
}

29
BBWYB.Server.Business/Vender/VenderBusiness.cs

@ -0,0 +1,29 @@
using BBWY.Server.Model.Db.Mds;
using BBWYB.Common.Log;
using BBWYB.Common.Models;
using BBWYB.Server.Model;
using BBWYB.Server.Model.Dto;
using Yitter.IdGenerator;
namespace BBWYB.Server.Business
{
public class VenderBusiness : BaseBusiness, IDenpendency
{
private FreeSqlMultiDBManager fsqlManager;
public VenderBusiness(IFreeSql fsql, NLogManager nLogManager, IIdGenerator idGenerator, FreeSqlMultiDBManager fsqlManager) : base(fsql, nLogManager, idGenerator)
{
this.fsqlManager = fsqlManager;
}
public IList<ShopResponse> GetShopList(long? shopId = null, Enums.Platform? platform = null, bool filterTurnoverDays = false, bool filterSiNan = false)
{
return fsqlManager.MDSfsql.Select<Shops>().Where(s => !string.IsNullOrEmpty(s.ShopId))
.WhereIf(shopId != null, s => s.ShopId == shopId.ToString())
.WhereIf(platform != null, s => s.PlatformId == (int)platform)
.WhereIf(filterTurnoverDays, s => s.SkuSafeTurnoverDays != 0)
.WhereIf(filterSiNan, s => !string.IsNullOrEmpty(s.SiNanDingDingWebHook))
.ToList<ShopResponse>();
}
}
}

4
BBWYB.Server.Model/BBWYB.Server.Model.csproj

@ -12,8 +12,4 @@
<PackageReference Include="FreeSql" Version="3.2.690" />
</ItemGroup>
<ItemGroup>
<Folder Include="Db\MDS\" />
</ItemGroup>
</Project>

175
BBWYB.Server.Model/Db/MDS/Shops.cs

@ -0,0 +1,175 @@
using FreeSql.DataAnnotations;
using System;
namespace BBWY.Server.Model.Db.Mds
{
[Table(Name = "shops", DisableSyncStructure = true)]
public partial class Shops
{
/// <summary>
/// Id
/// </summary>
[Column(StringLength = 50, IsPrimary = true, IsNullable = false)]
public string Id { get; set; }
/// <summary>
/// 店铺Key
/// </summary>
public string AppKey { get; set; }
/// <summary>
/// 店铺Secret
/// </summary>
public string AppSecret { get; set; }
/// <summary>
/// 店铺Token
/// </summary>
public string AppToken { get; set; }
/// <summary>
/// 店铺Key 暂定商品管理Key
/// </summary>
public string AppKey2 { get; set; }
/// <summary>
/// 店铺Secret 暂定商品管理Secret
/// </summary>
public string AppSecret2 { get; set; }
/// <summary>
/// 店铺Token
/// </summary>
public string AppToken2 { get; set; }
/// <summary>
/// 创建时间
/// </summary>
[Column(DbType = "datetime")]
public DateTime CreateTime { get; set; }
/// <summary>
/// 创建人Id
/// </summary>
[Column(StringLength = 50)]
public string CreatorId { get; set; }
/// <summary>
/// 创建人
/// </summary>
[Column(StringLength = 50, IsNullable = false)]
public string CreatorRealName { get; set; }
/// <summary>
/// 0淘宝,1京东,2阿里巴巴
/// </summary>
public int? PlatformId { get; set; }
/// <summary>
/// 平台名称
/// </summary>
[Column(StringLength = 50)]
public string PlatformName { get; set; }
public string PurchaseAppKey { get; set; }
public string PurchaseAppSecret { get; set; }
/// <summary>
/// 采购平台
/// </summary>
[Column(StringLength = 50)]
public string PurchasePlatformId { get; set; }
/// <summary>
/// 商家编号
/// </summary>
public string VenderId { get; set; }
/// <summary>
/// 店铺ID
/// </summary>
public string ShopId { get; set; }
public string ShopName { get; set; }
/// <summary>
/// 店铺账号
/// </summary>
public string ShopNick { get; set; }
/// <summary>
/// 店铺类型
/// </summary>
public string ShopType { get; set; }
public string ManagePwd { get; set; }
[Column(DbType = "decimal(11,2)")]
public decimal? PlatformCommissionRatio { get; set; }
/// <summary>
/// SKU库存安全周转天数
/// </summary>
public int SkuSafeTurnoverDays { get; set; }
/// <summary>
/// 钉钉WebHook地址
/// </summary>
[Column(StringLength = 255)]
public string DingDingWebHook { get; set; }
/// <summary>
/// 钉钉密钥
/// </summary>
[Column(StringLength = 100)]
public string DingDingKey { get; set; }
/// <summary>
/// 司南策略等级
/// </summary>
public int SiNanPolicyLevel { get; set; }
/// <summary>
/// 司南钉钉WebHook地址
/// </summary>
[Column(StringLength = 255)]
public string SiNanDingDingWebHook { get; set; }
/// <summary>
/// 司南钉钉密钥
/// </summary>
[Column(StringLength = 100)]
public string SiNanDingDingKey { get; set; }
/// <summary>
/// PJZS钉钉WebHook地址
/// </summary>
[Column(StringLength = 255)]
public string PJZSDingDingWebHook { get; set; }
/// <summary>
/// PJZS钉钉密钥
/// </summary>
[Column(StringLength = 100)]
public string PJZSDingDingKey { get; set; }
}
}

153
BBWYB.Server.Model/Db/Order/Order.cs

@ -0,0 +1,153 @@
using FreeSql.DataAnnotations;
namespace BBWYB.Server.Model.Db
{
/// <summary>
/// 订单表
/// </summary>
[Table(Name = "order", DisableSyncStructure = true)]
public partial class Order
{
[Column(StringLength = 50, IsPrimary = true, IsNullable = false)]
public string Id { get; set; }
/// <summary>
/// 买家备注
/// </summary>
public string BuyerRemark { get; set; }
/// <summary>
/// 结束时间
/// </summary>
[Column(DbType = "datetime")]
public DateTime? EndTime { get; set; }
/// <summary>
/// 订单旗帜
/// </summary>
[Column(StringLength = 10)]
public string Flag { get; set; }
/// <summary>
/// 商品运费(用户承担)
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? FreightPrice { get; set; }
/// <summary>
/// 是否为售后单
/// </summary>
public bool? IsAfterSaleOrder { get; set; } = false;
/// <summary>
/// 修改时间
/// </summary>
[Column(DbType = "datetime")]
public DateTime? ModifyTime { get; set; }
/// <summary>
/// 用户应付金额
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? OrderPayment { get; set; } = 0.00M;
/// <summary>
/// 订单货款金额(包含平台补贴)
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? OrderSellerPrice { get; set; } = 0.00M;
/// <summary>
/// 订单状态
/// </summary>
[Column(DbType = "int(1)", MapType = typeof(int))]
public Enums.OrderState? OrderState { get; set; }
/// <summary>
/// 订单总价
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? OrderTotalPrice { get; set; } = 0.00M;
/// <summary>
/// 订单类型
/// </summary>
[Column(DbType = "int(1)")]
public int? OrderType { get; set; }
/// <summary>
/// 支付方式
/// </summary>
[Column(DbType = "int(1)")]
public int? PayType { get; set; }
/// <summary>
/// 订单平台
/// </summary>
[Column(DbType = "int(1)", MapType = typeof(int?))]
public Enums.Platform? Platform { get; set; }
/// <summary>
/// 平台补贴
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? PreferentialAmount { get; set; } = 0.00M;
/// <summary>
/// 采购备注
/// </summary>
public string PurchaseRemark { get; set; }
/// <summary>
/// 商家优惠金额(商家承担)
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? SellerPreferentialAmount { get; set; } = 0.00M;
/// <summary>
/// 商家Id
/// </summary>
[Column(DbType = "bigint(1)")]
public long? ShopId { get; set; }
/// <summary>
/// 开始时间
/// </summary>
[Column(DbType = "datetime")]
public DateTime? StartTime { get; set; }
/// <summary>
/// 仓储类型
/// </summary>
[Column(DbType = "int(1)")]
public int? StorageType { get; set; }
/// <summary>
/// 商家备注
/// </summary>
[Column(StringLength = 500)]
public string VenderRemark { get; set; }
/// <summary>
/// 运单号
/// </summary>
[Column(StringLength = 100)]
public string WaybillNo { get; set; }
/// <summary>
/// 快递公司名称
/// </summary>
[Column(StringLength = 100)]
public string ExpressName { get; set; }
}
}

74
BBWYB.Server.Model/Db/Order/OrderConsignee.cs

@ -0,0 +1,74 @@
using FreeSql.DataAnnotations;
namespace BBWYB.Server.Model.Db
{
/// <summary>
/// 订单收货信息表
/// </summary>
[Table(Name = "orderconsignee", DisableSyncStructure = true)]
public partial class OrderConsignee {
[Column(StringLength = 50, IsPrimary = true, IsNullable = false)]
public string OrderId { get; set; }
/// <summary>
/// 收货地址
/// </summary>
public string Address { get; set; }
/// <summary>
/// 市
/// </summary>
[Column(StringLength = 30)]
public string City { get; set; }
/// <summary>
/// 联系人
/// </summary>
[Column(StringLength = 50)]
public string ContactName { get; set; }
/// <summary>
/// 区
/// </summary>
[Column(StringLength = 30)]
public string County { get; set; }
[Column(DbType = "datetime")]
public DateTime? CreateTime { get; set; }
/// <summary>
/// 是否解码
/// </summary>
public bool? IsDecode { get; set; }
/// <summary>
/// 手机号
/// </summary>
[Column(StringLength = 50)]
public string Mobile { get; set; }
/// <summary>
/// 省
/// </summary>
[Column(StringLength = 30)]
public string Province { get; set; }
/// <summary>
/// 做记号
/// </summary>
[Column(StringLength = 50)]
public string TelePhone { get; set; }
/// <summary>
/// 镇
/// </summary>
[Column(StringLength = 30)]
public string Town { get; set; }
}
}

110
BBWYB.Server.Model/Db/Order/OrderCost.cs

@ -0,0 +1,110 @@
using FreeSql.DataAnnotations;
namespace BBWYB.Server.Model.Db
{
/// <summary>
/// 订单成本表
/// </summary>
[Table(Name = "ordercost", DisableSyncStructure = true)]
public partial class OrderCost {
[Column(StringLength = 50, IsPrimary = true, IsNullable = false)]
public string OrderId { get; set; }
/// <summary>
/// 所有服务单的售后成本(不含退款采购成本)
/// </summary>
[Column(DbType = "decimal(18,2)")]
public decimal? AfterTotalCost { get; set; } = 0.00M;
[Column(DbType = "datetime")]
public DateTime? CreateTime { get; set; }
/// <summary>
/// 发货快递费
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? DeliveryExpressFreight { get; set; } = 0.00M;
/// <summary>
/// 是否手动编辑过成本
/// </summary>
public bool? IsManualEdited { get; set; } = false;
/// <summary>
/// 平台扣点金额
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? PlatformCommissionAmount { get; set; } = 0.00M;
/// <summary>
/// 平台扣点百分比
/// </summary>
[Column(DbType = "decimal(20,5)")]
public decimal? PlatformCommissionRatio { get; set; }
/// <summary>
/// 优惠金额
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal PreferentialAmount { get; set; } = 0.00M;
/// <summary>
/// 利润
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? Profit { get; set; } = 0.00M;
/// <summary>
/// 采购金额
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? PurchaseAmount { get; set; } = 0.00M;
/// <summary>
/// 退款金额
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? RefundAmount { get; set; } = 0.00M;
/// <summary>
/// 退款采购成本
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? RefundPurchaseAmount { get; set; } = 0.00M;
/// <summary>
/// 售后补发成本
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? ReissueAfterSaleAmount { get; set; } = 0.00M;
/// <summary>
/// 补发快递费
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? ReissueFreight { get; set; } = 0.00M;
/// <summary>
/// 补发货款成本
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? ReissueProductAmount { get; set; } = 0.00M;
/// <summary>
/// 刷单佣金
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? SDCommissionAmount { get; set; } = 0.00M;
/// <summary>
/// 刷单号费
/// </summary>
[Column(DbType = "decimal(18,2)")]
public decimal? SDOrderAmount { get; set; } = 0.00M;
}
}

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

@ -0,0 +1,119 @@
using FreeSql.DataAnnotations;
namespace BBWYB.Server.Model.Db
{
/// <summary>
/// 订单成本明细表
/// </summary>
[Table(Name = "ordercostdetail", DisableSyncStructure = true)]
public partial class OrderCostDetail {
[Column(DbType = "bigint(1)", IsPrimary = true)]
public long Id { get; set; }
/// <summary>
/// 耗材费
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? ConsumableAmount { get; set; } = 0.00M;
[Column(DbType = "datetime")]
public DateTime? CreateTime { get; set; }
/// <summary>
/// 扣减数量
/// </summary>
[Column(DbType = "int(1)")]
public int? DeductionQuantity { get; set; } = 0;
/// <summary>
/// 发货运费
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? DeliveryExpressFreight { get; set; } = 0.00M;
/// <summary>
/// 头程运费
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? FirstFreight { get; set; } = 0.00M;
/// <summary>
/// 入库操作费
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? InStorageAmount { get; set; } = 0.00M;
public bool? IsEnabled { get; set; } = false;
/// <summary>
/// 操作费
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? OperationAmount { get; set; } = 0.00M;
[Column(StringLength = 50)]
public string OrderId { get; set; }
/// <summary>
/// 出库操作费
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? OutStorageAmount { get; set; } = 0.00M;
[Column(StringLength = 50)]
public string ProductId { get; set; }
/// <summary>
/// 采购运费
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? PurchaseFreight { get; set; } = 0.00M;
/// <summary>
/// 采购单流水Id
/// </summary>
[Column(DbType = "bigint(1)")]
public long? PurchaseOrderPKId { get; set; }
public long? ShopId { get; set; }
/// <summary>
/// 货款成本
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? SkuAmount { get; set; } = 0.00M;
/// <summary>
/// sku毛利
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? SkuGrossProfit { get; set; } = 0.00M;
[Column(StringLength = 50)]
public string SkuId { get; set; }
/// <summary>
/// 仓储费
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? StorageAmount { get; set; } = 0.00M;
/// <summary>
/// Sku合计成本(不含发货运费)
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? TotalCost { get; set; } = 0.00M;
/// <summary>
/// 单件采购成本(不含发货运费)
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? UnitCost { get; set; } = 0.00M;
}
}

69
BBWYB.Server.Model/Db/Order/OrderSku.cs

@ -0,0 +1,69 @@
using FreeSql.DataAnnotations;
namespace BBWYB.Server.Model.Db
{
/// <summary>
/// 订单SKU
/// </summary>
[Table(Name = "ordersku", DisableSyncStructure = true)]
public partial class OrderSku {
[Column(IsPrimary = true)]
public long Id { get; set; }
[Column(DbType = "datetime")]
public DateTime? CreateTime { get; set; }
/// <summary>
/// 是否退款
/// </summary>
public bool? IsRefund { get; set; } = false;
/// <summary>
/// 销售数量
/// </summary>
[Column(DbType = "int(1)")]
public int? ItemTotal { get; set; }
/// <summary>
/// Logo
/// </summary>
public string Logo { get; set; }
[Column(StringLength = 50)]
public string OrderId { get; set; }
/// <summary>
/// 销售单价
/// </summary>
[Column(DbType = "decimal(20,2)")]
public decimal? Price { get; set; }
[Column(StringLength = 50)]
public string ProductId { get; set; }
/// <summary>
/// 货号
/// </summary>
[Column(StringLength = 50)]
public string ProductNo { get; set; }
public long? ShopId { get; set; }
[Column(StringLength = 50, IsNullable = false)]
public string SkuId { get; set; }
/// <summary>
/// Sku标题
/// </summary>
public string Title { get; set; }
}
}

98
BBWYB.Server.Model/Dto/Response/Vender/ShopResponse.cs

@ -0,0 +1,98 @@
namespace BBWYB.Server.Model.Dto
{
public class ShopResponse
{
public string Id { get; set; }
public string ShopId { get; set; }
public string VenderId { get; set; }
public string ShopName { get; set; }
/// <summary>
/// 商家类型
/// </summary>
public string ShopType { get; set; }
/// <summary>
/// 店铺平台
/// </summary>
public Enums.Platform PlatformId { get; set; }
public string AppKey { get; set; }
public string AppSecret { get; set; }
public string AppToken { get; set; }
public string AppKey2 { get; set; }
public string AppSecret2 { get; set; }
public string AppToken2 { get; set; }
public string ManagePwd { get; set; }
public decimal? PlatformCommissionRatio { get; set; }
public IList<PurchaseAccountResponse> PurchaseList { get; set; }
/// <summary>
/// SKU库存安全周转天数
/// </summary>
public int SkuSafeTurnoverDays { get; set; }
/// <summary>
/// 钉钉WebHook地址
/// </summary>
public string DingDingWebHook { get; set; }
/// <summary>
/// 钉钉密钥
/// </summary>
public string DingDingKey { get; set; }
/// <summary>
/// 司南策略等级
/// </summary>
public int SiNanPolicyLevel { get; set; }
/// <summary>
/// 司南钉钉WebHook地址
/// </summary>
public string SiNanDingDingWebHook { get; set; }
/// <summary>
/// 司南钉钉密钥
/// </summary>
public string SiNanDingDingKey { get; set; }
/// <summary>
/// PJZS钉钉WebHook地址
/// </summary>
public string PJZSDingDingWebHook { get; set; }
/// <summary>
/// PJZS钉钉密钥
/// </summary>
public string PJZSDingDingKey { get; set; }
}
public class PurchaseAccountResponse
{
public string Id { get; set; }
public string AccountName { get; set; }
public string ShopId { get; set; }
public Enums.Platform PurchasePlatformId { get; set; }
public string AppKey { get; set; }
public string AppSecret { get; set; }
public string AppToken { get; set; }
}
}

3
BBWYB.Server.Model/Enums.cs

@ -83,7 +83,8 @@
= 5,
= 6,
= 7,
退 = 8
退 = 8,
Unknow = 100
}
/// <summary>

Loading…
Cancel
Save