Commit f271ef0a by guanzhenshan

完善生成FBA发货收入统计服务

parent 9ddbe61f
...@@ -67,12 +67,14 @@ namespace Bailun.DC.Models ...@@ -67,12 +67,14 @@ namespace Bailun.DC.Models
/// <summary> /// <summary>
/// 销售帐号 /// 销售帐号
/// </summary> /// </summary>
public string account_name { get; set; } public string sales_account { get; set; }
/// <summary> /// <summary>
/// 站点 /// 站点
/// </summary> /// </summary>
public string market { get; set; } public string market { get; set; }
public string account_name { get; set; }
} }
} }
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
<PropertyGroup> <PropertyGroup>
<OutputType>Exe</OutputType> <OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework> <TargetFramework>netcoreapp3.1</TargetFramework>
<LangVersion>latest</LangVersion>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
......
#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.
FROM mcr.microsoft.com/dotnet/core/runtime:3.1-buster-slim AS base
WORKDIR /app
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["Bailun.DC.SyncFBAShippingInfo/Bailun.DC.SyncFBAShippingInfo.csproj", "Bailun.DC.SyncFBAShippingInfo/"]
COPY ["Bailun.DC.Common/Bailun.DC.Common.csproj", "Bailun.DC.Common/"]
COPY ["Bailun.DC.Models/Bailun.DC.Models.csproj", "Bailun.DC.Models/"]
RUN dotnet restore "Bailun.DC.SyncFBAShippingInfo/Bailun.DC.SyncFBAShippingInfo.csproj"
COPY . .
WORKDIR "/src/Bailun.DC.SyncFBAShippingInfo"
RUN dotnet build "Bailun.DC.SyncFBAShippingInfo.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "Bailun.DC.SyncFBAShippingInfo.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Bailun.DC.SyncFBAShippingInfo.dll"]
using System;
using System.Collections.Generic;
using System.Text;
namespace Bailun.DC.SyncFBAShippingInfo.Model
{
public class mPlatformIncoming
{
public string platform_type { get; set; }
public string website { get; set; }
public string order_currency { get; set; }
public string financecategoryname { get; set; }
public decimal amount_sales { get; set; }
public string account_name { get; set; }
}
}
using System; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System;
using System.Threading.Tasks;
namespace Bailun.DC.SyncFBAShippingInfo namespace Bailun.DC.SyncFBAShippingInfo
{ {
class Program class Program
{ {
static void Main(string[] args) static async Task Main(string[] args)
{ {
//Console.WriteLine("Hello World!"); Console.WriteLine("启动服务 " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
var builder = new HostBuilder().ConfigureServices((hostContext, services) =>
{
services.AddHostedService<Services>();
});
var _service = new Services(); await builder.RunConsoleAsync();
_service.Init(DateTime.Parse("2020-12-01")); }
//static void Main(string[] args)
//{
// //Console.WriteLine("Hello World!");
} // var _service = new Services();
// _service.Init(DateTime.Parse("2020-12-01"));
//}
} }
} }
...@@ -7,11 +7,45 @@ using Newtonsoft.Json; ...@@ -7,11 +7,45 @@ using Newtonsoft.Json;
using Bailun.DC.Common; using Bailun.DC.Common;
using Bailun.DC.Models; using Bailun.DC.Models;
using Bailun.DC.SyncFBAShippingInfo.Model; using Bailun.DC.SyncFBAShippingInfo.Model;
using Microsoft.Extensions.Hosting;
using System.Threading;
using System.Threading.Tasks;
namespace Bailun.DC.SyncFBAShippingInfo namespace Bailun.DC.SyncFBAShippingInfo
{ {
public class Services public class Services : BackgroundService
{ {
private Timer _timer;
protected override Task ExecuteAsync(CancellationToken stoppingToken)
{
_timer = new Timer(DoWork, null, TimeSpan.Zero, TimeSpan.FromMinutes(1));
return Task.CompletedTask;
}
private void DoWork(object state)
{
try
{
var now = DateTime.Now;
if (now.Day==10 && now.Hour == 1 && now.Minute == 45 && now.Second == 1) //每月10号 1点45分启动
{
Console.WriteLine("开始启动 " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
var start = DateTime.Parse(now.ToString("yyyy-MM")+"-01");
Init(start);
Console.WriteLine("任务运行完成 " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
public void Init(DateTime day) public void Init(DateTime day)
{ {
...@@ -55,10 +89,10 @@ namespace Bailun.DC.SyncFBAShippingInfo ...@@ -55,10 +89,10 @@ namespace Bailun.DC.SyncFBAShippingInfo
if (json.data != null && json.data.Count > 0) if (json.data != null && json.data.Count > 0)
{ {
count = json.data.Count; count = json.data.Count;
var sql = "insert dc_base_fba_shipping_detail (month,order_id,shipment_date,reporting_date,sku,currency,orderamount,createtime,seller_account,website) values "; var sql = "insert dc_base_fba_shipping_detail (month,order_id,shipment_date,reporting_date,sku,currency,orderamount,createtime,seller_account,website,account_name) values ";
foreach (var item in json.data) foreach (var item in json.data)
{ {
sql += $"('{date.ToString("yyyy-MM")}','{item.order_id}','{item.shipment_date.ToString("yyyy-MM-dd HH:mm:ss")}','{item.reporting_date.ToString("yyyy-MM-dd HH:mm:ss")}','{item.sku}','{item.currency}',{item.orderamount},'{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}','{item.account_name}','{item.market}'),"; sql += $"('{date.ToString("yyyy-MM")}','{item.order_id}','{item.shipment_date.ToString("yyyy-MM-dd HH:mm:ss")}','{item.reporting_date.ToString("yyyy-MM-dd HH:mm:ss")}','{item.sku}','{item.currency}',{item.orderamount},'{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}','{item.sales_account}','{item.market}','{item.account_name}'),";
} }
sql = sql.Substring(0, sql.Length - 1); sql = sql.Substring(0, sql.Length - 1);
...@@ -93,9 +127,64 @@ namespace Bailun.DC.SyncFBAShippingInfo ...@@ -93,9 +127,64 @@ namespace Bailun.DC.SyncFBAShippingInfo
} }
private void SaveCount(DateTime day) public void SaveCount(DateTime day)
{ {
var list = new List<dc_month_shipping_incoming>();
//获取订单数据
using (var cn = new MySqlConnection(Common.GlobalConfig.ConnectionString_read))
{
if (cn.State == System.Data.ConnectionState.Closed)
{
cn.Open();
}
var sql = $@"select sum(t2.amount_sales*t2.bailun_sku_quantity_ordered) as amount_sales,if(t6.financecategoryname is null,'',t6.financecategoryname) as financecategoryname,t2.order_currency,t2.platform_type,t2.website
from (select DISTINCT order_id,website,seller_account from dc_base_fba_shipping_detail where shipment_date>='{day.ToString("yyyy-MM-dd")}' and shipment_date<'{day.AddMonths(1).ToString("yyyy-MM-dd")}') t1
join dc_base_oms_sku_30 t2 on t1.order_id=t2.origin_order_id and t1.website=t2.website and t1.seller_account=t2.seller_account
left join dc_base_sku t5 on t2.bailun_sku=t5.bailun_sku
left join dc_base_sku_finance_category t6 on t6.bailuncategoryid=t5.bailun_category_id
group by t6.financecategoryname,t2.order_currency,t2.platform_type,t2.website";
var obj = cn.Query<Model.mPlatformIncoming>(sql, null, null, true, 2 * 60).AsList();
foreach (var item in obj)
{
list.Add(new dc_month_shipping_incoming
{
amount = item.amount_sales,
createtime = DateTime.Now,
currency = item.order_currency,
financecategoryname = item.financecategoryname,
month = day.ToString("yyyy-MM"),
platform_type = item.platform_type,
website = item.website
});
}
}
if (list.Count > 0)
{
var sql = "insert dc_month_shipping_incoming (amount,createtime,currency,financecategoryname,month,platform_type,website) values ";
foreach (var item in list)
{
sql += $"({item.amount},'{item.createtime.ToString("yyyy-MM-dd HH:mm:ss")}','{item.currency}','{item.financecategoryname}','{item.month}','{item.platform_type}','{item.website}'),";
}
sql = sql.Substring(0, sql.Length - 1);
using (var cn = new MySqlConnection(Common.GlobalConfig.ConnectionString))
{
if (cn.State == System.Data.ConnectionState.Closed)
{
cn.Open();
}
cn.Execute("delete from dc_month_shipping_incoming where month='" + day.ToString("yyyy-MM") + "' and platform_type='FBA'");
cn.Execute(sql);
}
}
} }
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment