From 79fac881111f97c2b2667710058922e0e6614b3b Mon Sep 17 00:00:00 2001 From: shanji <18996038927@163.com> Date: Tue, 14 Mar 2023 14:47:29 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AE=A2=E5=8D=95=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/OrderSyncController.cs | 27 +++ BBWYB.Server.API/Program.cs | 8 + .../FreeSqlMultiDBManager.cs | 8 + .../Sync/OrderSyncBusiness.cs | 186 +++++++++++++++++- .../Vender/VenderBusiness.cs | 29 +++ BBWYB.Server.Model/BBWYB.Server.Model.csproj | 4 - BBWYB.Server.Model/Db/MDS/Shops.cs | 175 ++++++++++++++++ BBWYB.Server.Model/Db/Order/Order.cs | 153 ++++++++++++++ BBWYB.Server.Model/Db/Order/OrderConsignee.cs | 74 +++++++ BBWYB.Server.Model/Db/Order/OrderCost.cs | 110 +++++++++++ .../Db/Order/OrderCostDetail.cs | 119 +++++++++++ BBWYB.Server.Model/Db/Order/OrderSku.cs | 69 +++++++ .../Dto/Response/Vender/ShopResponse.cs | 98 +++++++++ BBWYB.Server.Model/Enums.cs | 3 +- 14 files changed, 1056 insertions(+), 7 deletions(-) create mode 100644 BBWYB.Server.API/Controllers/OrderSyncController.cs create mode 100644 BBWYB.Server.Business/FreeSqlMultiDBManager.cs create mode 100644 BBWYB.Server.Business/Vender/VenderBusiness.cs create mode 100644 BBWYB.Server.Model/Db/MDS/Shops.cs create mode 100644 BBWYB.Server.Model/Db/Order/Order.cs create mode 100644 BBWYB.Server.Model/Db/Order/OrderConsignee.cs create mode 100644 BBWYB.Server.Model/Db/Order/OrderCost.cs create mode 100644 BBWYB.Server.Model/Db/Order/OrderCostDetail.cs create mode 100644 BBWYB.Server.Model/Db/Order/OrderSku.cs create mode 100644 BBWYB.Server.Model/Dto/Response/Vender/ShopResponse.cs diff --git a/BBWYB.Server.API/Controllers/OrderSyncController.cs b/BBWYB.Server.API/Controllers/OrderSyncController.cs new file mode 100644 index 0000000..7b86aae --- /dev/null +++ b/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); + } + } +} diff --git a/BBWYB.Server.API/Program.cs b/BBWYB.Server.API/Program.cs index 0908175..bfbe26c 100644 --- a/BBWYB.Server.API/Program.cs +++ b/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(); services.AddSingleton(); services.AddSingleton(); diff --git a/BBWYB.Server.Business/FreeSqlMultiDBManager.cs b/BBWYB.Server.Business/FreeSqlMultiDBManager.cs new file mode 100644 index 0000000..5f970e1 --- /dev/null +++ b/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; } + } +} diff --git a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs b/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs index 03e8f0f..4531419 100644 --- a/BBWYB.Server.Business/Sync/OrderSyncBusiness.cs +++ b/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 + 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) + { + 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(qtOrderIdList).ToList(); + + List insertOrderList = new List(); + List> updateOrderList = new List>(); + + 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(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; + } } } diff --git a/BBWYB.Server.Business/Vender/VenderBusiness.cs b/BBWYB.Server.Business/Vender/VenderBusiness.cs new file mode 100644 index 0000000..d8959a9 --- /dev/null +++ b/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 GetShopList(long? shopId = null, Enums.Platform? platform = null, bool filterTurnoverDays = false, bool filterSiNan = false) + { + return fsqlManager.MDSfsql.Select().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(); + } + + } +} diff --git a/BBWYB.Server.Model/BBWYB.Server.Model.csproj b/BBWYB.Server.Model/BBWYB.Server.Model.csproj index 66a14df..a408f32 100644 --- a/BBWYB.Server.Model/BBWYB.Server.Model.csproj +++ b/BBWYB.Server.Model/BBWYB.Server.Model.csproj @@ -12,8 +12,4 @@ - - - - diff --git a/BBWYB.Server.Model/Db/MDS/Shops.cs b/BBWYB.Server.Model/Db/MDS/Shops.cs new file mode 100644 index 0000000..57d133c --- /dev/null +++ b/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 + { + + /// + /// Id + /// + [Column(StringLength = 50, IsPrimary = true, IsNullable = false)] + public string Id { get; set; } + + /// + /// 店铺Key + /// + + public string AppKey { get; set; } + + /// + /// 店铺Secret + /// + + public string AppSecret { get; set; } + + /// + /// 店铺Token + /// + + public string AppToken { get; set; } + + /// + /// 店铺Key 暂定商品管理Key + /// + + public string AppKey2 { get; set; } + + /// + /// 店铺Secret 暂定商品管理Secret + /// + + public string AppSecret2 { get; set; } + + /// + /// 店铺Token + /// + + public string AppToken2 { get; set; } + + /// + /// 创建时间 + /// + [Column(DbType = "datetime")] + public DateTime CreateTime { get; set; } + + /// + /// 创建人Id + /// + [Column(StringLength = 50)] + public string CreatorId { get; set; } + + /// + /// 创建人 + /// + [Column(StringLength = 50, IsNullable = false)] + public string CreatorRealName { get; set; } + + /// + /// 0淘宝,1京东,2阿里巴巴 + /// + + public int? PlatformId { get; set; } + + /// + /// 平台名称 + /// + [Column(StringLength = 50)] + public string PlatformName { get; set; } + + + public string PurchaseAppKey { get; set; } + + + public string PurchaseAppSecret { get; set; } + + /// + /// 采购平台 + /// + [Column(StringLength = 50)] + public string PurchasePlatformId { get; set; } + + + /// + /// 商家编号 + /// + public string VenderId { get; set; } + + /// + /// 店铺ID + /// + + public string ShopId { get; set; } + + + public string ShopName { get; set; } + + /// + /// 店铺账号 + /// + + public string ShopNick { get; set; } + + /// + /// 店铺类型 + /// + + public string ShopType { get; set; } + + public string ManagePwd { get; set; } + + [Column(DbType = "decimal(11,2)")] + public decimal? PlatformCommissionRatio { get; set; } + + /// + /// SKU库存安全周转天数 + /// + public int SkuSafeTurnoverDays { get; set; } + + /// + /// 钉钉WebHook地址 + /// + [Column(StringLength = 255)] + public string DingDingWebHook { get; set; } + + /// + /// 钉钉密钥 + /// + [Column(StringLength = 100)] + public string DingDingKey { get; set; } + + + /// + /// 司南策略等级 + /// + public int SiNanPolicyLevel { get; set; } + + /// + /// 司南钉钉WebHook地址 + /// + [Column(StringLength = 255)] + public string SiNanDingDingWebHook { get; set; } + + /// + /// 司南钉钉密钥 + /// + [Column(StringLength = 100)] + public string SiNanDingDingKey { get; set; } + + /// + /// PJZS钉钉WebHook地址 + /// + [Column(StringLength = 255)] + public string PJZSDingDingWebHook { get; set; } + + /// + /// PJZS钉钉密钥 + /// + [Column(StringLength = 100)] + public string PJZSDingDingKey { get; set; } + } + +} diff --git a/BBWYB.Server.Model/Db/Order/Order.cs b/BBWYB.Server.Model/Db/Order/Order.cs new file mode 100644 index 0000000..b6843db --- /dev/null +++ b/BBWYB.Server.Model/Db/Order/Order.cs @@ -0,0 +1,153 @@ +using FreeSql.DataAnnotations; + +namespace BBWYB.Server.Model.Db +{ + + /// + /// 订单表 + /// + [Table(Name = "order", DisableSyncStructure = true)] + public partial class Order + { + + [Column(StringLength = 50, IsPrimary = true, IsNullable = false)] + public string Id { get; set; } + + /// + /// 买家备注 + /// + + public string BuyerRemark { get; set; } + + /// + /// 结束时间 + /// + [Column(DbType = "datetime")] + public DateTime? EndTime { get; set; } + + /// + /// 订单旗帜 + /// + [Column(StringLength = 10)] + public string Flag { get; set; } + + /// + /// 商品运费(用户承担) + /// + [Column(DbType = "decimal(20,2)")] + public decimal? FreightPrice { get; set; } + + /// + /// 是否为售后单 + /// + + public bool? IsAfterSaleOrder { get; set; } = false; + + /// + /// 修改时间 + /// + [Column(DbType = "datetime")] + public DateTime? ModifyTime { get; set; } + + /// + /// 用户应付金额 + /// + [Column(DbType = "decimal(20,2)")] + public decimal? OrderPayment { get; set; } = 0.00M; + + /// + /// 订单货款金额(包含平台补贴) + /// + [Column(DbType = "decimal(20,2)")] + public decimal? OrderSellerPrice { get; set; } = 0.00M; + + /// + /// 订单状态 + /// + [Column(DbType = "int(1)", MapType = typeof(int))] + public Enums.OrderState? OrderState { get; set; } + + /// + /// 订单总价 + /// + [Column(DbType = "decimal(20,2)")] + public decimal? OrderTotalPrice { get; set; } = 0.00M; + + /// + /// 订单类型 + /// + [Column(DbType = "int(1)")] + public int? OrderType { get; set; } + + /// + /// 支付方式 + /// + [Column(DbType = "int(1)")] + public int? PayType { get; set; } + + /// + /// 订单平台 + /// + [Column(DbType = "int(1)", MapType = typeof(int?))] + public Enums.Platform? Platform { get; set; } + + /// + /// 平台补贴 + /// + [Column(DbType = "decimal(20,2)")] + public decimal? PreferentialAmount { get; set; } = 0.00M; + + /// + /// 采购备注 + /// + + public string PurchaseRemark { get; set; } + + + + /// + /// 商家优惠金额(商家承担) + /// + [Column(DbType = "decimal(20,2)")] + public decimal? SellerPreferentialAmount { get; set; } = 0.00M; + + /// + /// 商家Id + /// + [Column(DbType = "bigint(1)")] + public long? ShopId { get; set; } + + /// + /// 开始时间 + /// + [Column(DbType = "datetime")] + public DateTime? StartTime { get; set; } + + /// + /// 仓储类型 + /// + [Column(DbType = "int(1)")] + public int? StorageType { get; set; } + + + /// + /// 商家备注 + /// + [Column(StringLength = 500)] + public string VenderRemark { get; set; } + + /// + /// 运单号 + /// + [Column(StringLength = 100)] + public string WaybillNo { get; set; } + + /// + /// 快递公司名称 + /// + [Column(StringLength = 100)] + public string ExpressName { get; set; } + + } + +} diff --git a/BBWYB.Server.Model/Db/Order/OrderConsignee.cs b/BBWYB.Server.Model/Db/Order/OrderConsignee.cs new file mode 100644 index 0000000..b08ca48 --- /dev/null +++ b/BBWYB.Server.Model/Db/Order/OrderConsignee.cs @@ -0,0 +1,74 @@ +using FreeSql.DataAnnotations; + +namespace BBWYB.Server.Model.Db +{ + + /// + /// 订单收货信息表 + /// + [Table(Name = "orderconsignee", DisableSyncStructure = true)] + public partial class OrderConsignee { + + [Column(StringLength = 50, IsPrimary = true, IsNullable = false)] + public string OrderId { get; set; } + + /// + /// 收货地址 + /// + + public string Address { get; set; } + + /// + /// 市 + /// + [Column(StringLength = 30)] + public string City { get; set; } + + /// + /// 联系人 + /// + [Column(StringLength = 50)] + public string ContactName { get; set; } + + /// + /// 区 + /// + [Column(StringLength = 30)] + public string County { get; set; } + + [Column(DbType = "datetime")] + public DateTime? CreateTime { get; set; } + + /// + /// 是否解码 + /// + + public bool? IsDecode { get; set; } + + /// + /// 手机号 + /// + [Column(StringLength = 50)] + public string Mobile { get; set; } + + /// + /// 省 + /// + [Column(StringLength = 30)] + public string Province { get; set; } + + /// + /// 做记号 + /// + [Column(StringLength = 50)] + public string TelePhone { get; set; } + + /// + /// 镇 + /// + [Column(StringLength = 30)] + public string Town { get; set; } + + } + +} diff --git a/BBWYB.Server.Model/Db/Order/OrderCost.cs b/BBWYB.Server.Model/Db/Order/OrderCost.cs new file mode 100644 index 0000000..840e088 --- /dev/null +++ b/BBWYB.Server.Model/Db/Order/OrderCost.cs @@ -0,0 +1,110 @@ +using FreeSql.DataAnnotations; + +namespace BBWYB.Server.Model.Db +{ + + /// + /// 订单成本表 + /// + [Table(Name = "ordercost", DisableSyncStructure = true)] + public partial class OrderCost { + + [Column(StringLength = 50, IsPrimary = true, IsNullable = false)] + public string OrderId { get; set; } + + /// + /// 所有服务单的售后成本(不含退款采购成本) + /// + [Column(DbType = "decimal(18,2)")] + public decimal? AfterTotalCost { get; set; } = 0.00M; + + [Column(DbType = "datetime")] + public DateTime? CreateTime { get; set; } + + /// + /// 发货快递费 + /// + [Column(DbType = "decimal(20,2)")] + public decimal? DeliveryExpressFreight { get; set; } = 0.00M; + + /// + /// 是否手动编辑过成本 + /// + + public bool? IsManualEdited { get; set; } = false; + + /// + /// 平台扣点金额 + /// + [Column(DbType = "decimal(20,2)")] + public decimal? PlatformCommissionAmount { get; set; } = 0.00M; + + /// + /// 平台扣点百分比 + /// + [Column(DbType = "decimal(20,5)")] + public decimal? PlatformCommissionRatio { get; set; } + + /// + /// 优惠金额 + /// + [Column(DbType = "decimal(20,2)")] + public decimal PreferentialAmount { get; set; } = 0.00M; + + /// + /// 利润 + /// + [Column(DbType = "decimal(20,2)")] + public decimal? Profit { get; set; } = 0.00M; + + /// + /// 采购金额 + /// + [Column(DbType = "decimal(20,2)")] + public decimal? PurchaseAmount { get; set; } = 0.00M; + + /// + /// 退款金额 + /// + [Column(DbType = "decimal(20,2)")] + public decimal? RefundAmount { get; set; } = 0.00M; + + /// + /// 退款采购成本 + /// + [Column(DbType = "decimal(20,2)")] + public decimal? RefundPurchaseAmount { get; set; } = 0.00M; + + /// + /// 售后补发成本 + /// + [Column(DbType = "decimal(20,2)")] + public decimal? ReissueAfterSaleAmount { get; set; } = 0.00M; + + /// + /// 补发快递费 + /// + [Column(DbType = "decimal(20,2)")] + public decimal? ReissueFreight { get; set; } = 0.00M; + + /// + /// 补发货款成本 + /// + [Column(DbType = "decimal(20,2)")] + public decimal? ReissueProductAmount { get; set; } = 0.00M; + + /// + /// 刷单佣金 + /// + [Column(DbType = "decimal(20,2)")] + public decimal? SDCommissionAmount { get; set; } = 0.00M; + + /// + /// 刷单号费 + /// + [Column(DbType = "decimal(18,2)")] + public decimal? SDOrderAmount { get; set; } = 0.00M; + + } + +} diff --git a/BBWYB.Server.Model/Db/Order/OrderCostDetail.cs b/BBWYB.Server.Model/Db/Order/OrderCostDetail.cs new file mode 100644 index 0000000..2afaf46 --- /dev/null +++ b/BBWYB.Server.Model/Db/Order/OrderCostDetail.cs @@ -0,0 +1,119 @@ +using FreeSql.DataAnnotations; + +namespace BBWYB.Server.Model.Db +{ + + /// + /// 订单成本明细表 + /// + [Table(Name = "ordercostdetail", DisableSyncStructure = true)] + public partial class OrderCostDetail { + + [Column(DbType = "bigint(1)", IsPrimary = true)] + public long Id { get; set; } + + /// + /// 耗材费 + /// + [Column(DbType = "decimal(20,2)")] + public decimal? ConsumableAmount { get; set; } = 0.00M; + + [Column(DbType = "datetime")] + public DateTime? CreateTime { get; set; } + + /// + /// 扣减数量 + /// + [Column(DbType = "int(1)")] + public int? DeductionQuantity { get; set; } = 0; + + /// + /// 发货运费 + /// + [Column(DbType = "decimal(20,2)")] + public decimal? DeliveryExpressFreight { get; set; } = 0.00M; + + /// + /// 头程运费 + /// + [Column(DbType = "decimal(20,2)")] + public decimal? FirstFreight { get; set; } = 0.00M; + + /// + /// 入库操作费 + /// + [Column(DbType = "decimal(20,2)")] + public decimal? InStorageAmount { get; set; } = 0.00M; + + + public bool? IsEnabled { get; set; } = false; + + /// + /// 操作费 + /// + [Column(DbType = "decimal(20,2)")] + public decimal? OperationAmount { get; set; } = 0.00M; + + [Column(StringLength = 50)] + public string OrderId { get; set; } + + /// + /// 出库操作费 + /// + [Column(DbType = "decimal(20,2)")] + public decimal? OutStorageAmount { get; set; } = 0.00M; + + [Column(StringLength = 50)] + public string ProductId { get; set; } + + /// + /// 采购运费 + /// + [Column(DbType = "decimal(20,2)")] + public decimal? PurchaseFreight { get; set; } = 0.00M; + + /// + /// 采购单流水Id + /// + [Column(DbType = "bigint(1)")] + public long? PurchaseOrderPKId { get; set; } + + + public long? ShopId { get; set; } + + /// + /// 货款成本 + /// + [Column(DbType = "decimal(20,2)")] + public decimal? SkuAmount { get; set; } = 0.00M; + + /// + /// sku毛利 + /// + [Column(DbType = "decimal(20,2)")] + public decimal? SkuGrossProfit { get; set; } = 0.00M; + + [Column(StringLength = 50)] + public string SkuId { get; set; } + + /// + /// 仓储费 + /// + [Column(DbType = "decimal(20,2)")] + public decimal? StorageAmount { get; set; } = 0.00M; + + /// + /// Sku合计成本(不含发货运费) + /// + [Column(DbType = "decimal(20,2)")] + public decimal? TotalCost { get; set; } = 0.00M; + + /// + /// 单件采购成本(不含发货运费) + /// + [Column(DbType = "decimal(20,2)")] + public decimal? UnitCost { get; set; } = 0.00M; + + } + +} diff --git a/BBWYB.Server.Model/Db/Order/OrderSku.cs b/BBWYB.Server.Model/Db/Order/OrderSku.cs new file mode 100644 index 0000000..0aeacc6 --- /dev/null +++ b/BBWYB.Server.Model/Db/Order/OrderSku.cs @@ -0,0 +1,69 @@ +using FreeSql.DataAnnotations; + +namespace BBWYB.Server.Model.Db +{ + + /// + /// 订单SKU + /// + [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; } + + /// + /// 是否退款 + /// + + public bool? IsRefund { get; set; } = false; + + /// + /// 销售数量 + /// + [Column(DbType = "int(1)")] + public int? ItemTotal { get; set; } + + /// + /// Logo + /// + + public string Logo { get; set; } + + + [Column(StringLength = 50)] + public string OrderId { get; set; } + + /// + /// 销售单价 + /// + [Column(DbType = "decimal(20,2)")] + public decimal? Price { get; set; } + + [Column(StringLength = 50)] + public string ProductId { get; set; } + + /// + /// 货号 + /// + [Column(StringLength = 50)] + public string ProductNo { get; set; } + + + public long? ShopId { get; set; } + + [Column(StringLength = 50, IsNullable = false)] + public string SkuId { get; set; } + + /// + /// Sku标题 + /// + + public string Title { get; set; } + + } + +} diff --git a/BBWYB.Server.Model/Dto/Response/Vender/ShopResponse.cs b/BBWYB.Server.Model/Dto/Response/Vender/ShopResponse.cs new file mode 100644 index 0000000..b70c063 --- /dev/null +++ b/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; } + + /// + /// 商家类型 + /// + public string ShopType { get; set; } + + /// + /// 店铺平台 + /// + 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 PurchaseList { get; set; } + + /// + /// SKU库存安全周转天数 + /// + public int SkuSafeTurnoverDays { get; set; } + + /// + /// 钉钉WebHook地址 + /// + public string DingDingWebHook { get; set; } + + /// + /// 钉钉密钥 + /// + public string DingDingKey { get; set; } + + /// + /// 司南策略等级 + /// + public int SiNanPolicyLevel { get; set; } + + /// + /// 司南钉钉WebHook地址 + /// + public string SiNanDingDingWebHook { get; set; } + + /// + /// 司南钉钉密钥 + /// + public string SiNanDingDingKey { get; set; } + + /// + /// PJZS钉钉WebHook地址 + /// + public string PJZSDingDingWebHook { get; set; } + + /// + /// PJZS钉钉密钥 + /// + 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; } + } +} diff --git a/BBWYB.Server.Model/Enums.cs b/BBWYB.Server.Model/Enums.cs index dc296f2..978ba2d 100644 --- a/BBWYB.Server.Model/Enums.cs +++ b/BBWYB.Server.Model/Enums.cs @@ -83,7 +83,8 @@ 锁定 = 5, 已取消 = 6, 暂停 = 7, - 已退款 = 8 + 已退款 = 8, + Unknow = 100 } ///