Commit e28c2ff2 by guanzhenshan

增加统计每日sku的采购数和销售数

parent e7bfd81f
using System;
using System.Collections.Generic;
using System.Text;
namespace Bailun.DC.Models
{
/// <summary>
/// 统计每日SKU+仓库维度的卖出数和下采购单数
/// </summary>
public class dc_daily_purchase_sales
{
/// <summary>
///
/// </summary>
public int id { get; set; }
/// <summary>
/// 统计日期
/// </summary>
public DateTime day { get; set; }
/// <summary>
/// 仓库编码
/// </summary>
public string warehouse_code { get; set; }
/// <summary>
/// 仓库名称
/// </summary>
public string warehouse_name { get; set; }
/// <summary>
/// sku
/// </summary>
public string bailun_sku { get; set; }
/// <summary>
/// 销售数量
/// </summary>
public int count_sales { get; set; }
/// <summary>
/// 销售金额
/// </summary>
public decimal amount_sales { get; set; }
/// <summary>
/// 采购数量
/// </summary>
public int count_purchase { get; set; }
/// <summary>
/// 采购金额
/// </summary>
public decimal amount_purchase { get; set; }
/// <summary>
/// 数量差
/// </summary>
public int difference_count { get; set; }
/// <summary>
/// 金额差
/// </summary>
public decimal difference_amount { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime createtime { get; set; }
}
}
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.1</TargetFramework>
<LangVersion>latest</LangVersion>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Dapper" Version="1.60.6" />
<PackageReference Include="Microsoft.Extensions.Hosting" Version="2.2.0" />
<PackageReference Include="MySql.Data" Version="8.0.17" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Bailun.DC.Common\Bailun.DC.Common.csproj" />
<ProjectReference Include="..\Bailun.DC.Models\Bailun.DC.Models.csproj" />
</ItemGroup>
</Project>
FROM microsoft/dotnet:2.1-runtime AS base
WORKDIR /app
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /src
COPY Bailun.DC.SkuDailyPurchaseAndSales/Bailun.DC.SkuDailyPurchaseAndSales.csproj Bailun.DC.SkuDailyPurchaseAndSales/
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.SkuDailyPurchaseAndSales/Bailun.DC.SkuDailyPurchaseAndSales.csproj
COPY . .
WORKDIR /src/Bailun.DC.SkuDailyPurchaseAndSales
RUN dotnet build Bailun.DC.SkuDailyPurchaseAndSales.csproj -c Release -o /app
FROM build AS publish
RUN dotnet publish Bailun.DC.SkuDailyPurchaseAndSales.csproj -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "Bailun.DC.SkuDailyPurchaseAndSales.dll"]
using System;
using System.Collections.Generic;
using System.Text;
namespace Bailun.DC.SkuDailyPurchaseAndSales.Models
{
public class mSkuCount
{
public string warehouse_code { get; set; }
public string warehouse_name { get; set; }
public string bailun_sku { get; set; }
public int count { get; set; }
public decimal amount { get; set; }
}
}
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using System;
using System.Threading.Tasks;
namespace Bailun.DC.SkuDailyPurchaseAndSales
{
class Program
{
//static async Task Main(string[] args)
//{
// Console.WriteLine("进入保存每日采购数和售出数");
// var builder = new HostBuilder().ConfigureServices((hostContext, services) =>
// {
// services.AddHostedService<Services>();
// });
// await builder.RunConsoleAsync();
//}
static void Main(string[] args)
{
new Services().Init(DateTime.Parse("2019-08-07"),DateTime.Parse("2019-08-08"));
}
}
}
using System;
using System.Collections.Generic;
using System.Text;
using MySql.Data.MySqlClient;
using Dapper;
using Bailun.DC.Models;
using System.Linq;
using Microsoft.Extensions.Hosting;
using System.Threading;
using System.Threading.Tasks;
namespace Bailun.DC.SkuDailyPurchaseAndSales
{
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.Hour == 23 && now.Minute == 59)
{
Init(DateTime.Parse(now.ToShortDateString()),now);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
public void Init(DateTime start,DateTime end)
{
using (var cn = new MySqlConnection(Common.GlobalConfig.ConnectionString))
{
if (cn.State == System.Data.ConnectionState.Closed)
{
cn.Open();
}
//先保存采购的
var sql = $@"select t1.warehouse_code,t1.warehouse_name,t1.bailun_sku,sum(t1.count) count,sum(t1.count*t2.unit_price) amount from dc_base_purchase t1
left join dc_base_sku t2 on t1.bailun_sku=t2.bailun_sku
where t1.has_delete=0 and t1.status!=-1 and t1.create_time>='{start.ToString("yyyy-MM-dd HH:mm:ss")}' and t1.create_time<'{end.ToString("yyyy-MM-dd HH:mm:ss")}'
group by t1.warehouse_code,t1.bailun_sku";
var objPurchase = cn.Query<Models.mSkuCount>(sql, null, null, true, 2 * 60).AsList();
//再保存卖出的
sql = $@"select t1.warehouse_code,t1.warehouse_name,t1.bailun_sku,sum(t1.bailun_sku_quantity_ordered) count,sum(t1.bailun_sku_quantity_ordered*t2.unit_price) amount from dc_base_oms_sku t1
left join dc_base_sku t2 on t1.bailun_sku=t2.bailun_sku
where t1.has_delete=0 and t1.has_scalp=0 and t1.bailun_payment_status!='Canceled' and t1.paid_time>='2019-08-07' and t1.paid_time<'2019-08-08' and t1.bailun_order_status!='Canceled' and t1.warehouse_code!=''
group by t1.warehouse_code,t1.bailun_sku; ";
var objSales = cn.Query<Models.mSkuCount>(sql, null, null, true, 2 * 60).AsList();
var list = new List<dc_daily_purchase_sales>();
foreach (var item in objPurchase)
{
var m = new dc_daily_purchase_sales {
day = DateTime.Parse(start.ToShortDateString()),
bailun_sku = item.bailun_sku,
count_purchase = item.count,
createtime = DateTime.Now,
warehouse_code = item.warehouse_code,
warehouse_name = item.warehouse_name,
amount_purchase = item.amount,
};
var sales = objSales.Where(a => a.bailun_sku == item.bailun_sku && a.warehouse_code == item.warehouse_code).FirstOrDefault();
if (sales != null)
{
m.count_sales = sales.count;
m.amount_sales = sales.amount;
m.difference_count = item.count - sales.count;
m.difference_amount = item.amount - sales.amount;
}
}
foreach (var item in objSales)
{
var m = list.Where(a => a.bailun_sku == item.bailun_sku && a.warehouse_code == item.warehouse_code).FirstOrDefault();
if (m == null)
{
m = new dc_daily_purchase_sales {
day = DateTime.Parse(start.ToShortDateString()),
bailun_sku = item.bailun_sku,
count_purchase = 0,
createtime = DateTime.Now,
warehouse_code = item.warehouse_code,
warehouse_name = item.warehouse_name,
amount_purchase = 0,
count_sales = item.count,
amount_sales = item.amount,
difference_amount = -item.amount,
difference_count = -item.count,
};
list.Add(m);
}
}
if (list.Count > 0)
{
Save(cn, list, DateTime.Parse(start.ToString("yyyy-MM-dd")));
}
}
}
public string Save(MySqlConnection cn,List<dc_daily_purchase_sales> list,DateTime day)
{
if (cn.State == System.Data.ConnectionState.Closed)
{
cn.Open();
}
cn.Execute("delete from dc_daily_purchase_sales where day='" + day.ToString("yyyy-MM-dd") + "'");
var sql = "insert dc_daily_purchase_sales (day,warehouse_code,warehouse_name,bailun_sku,count_sales,amount_sales,count_purchase,amount_purchase,difference_count,difference_amount,createtime) values ";
var str = "";
var index = 0;
var pagesize = 5000;
while (index < list.Count)
{
var m = list[index];
str += $"('{m.day.ToString("yyyy-MM-dd")}','{m.warehouse_code}','{m.warehouse_name}','{m.bailun_sku}',{m.count_sales},'{m.amount_sales}','{m.count_purchase}','{m.amount_purchase}','{m.difference_count}','{m.difference_amount}','{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}'),";
if ((index + 1) % pagesize == 0)
{
str = str.Substring(0, str.Length - 1);
cn.Execute(sql + str, null, null, 2 * 60);
str = "";
}
else if (index + 1 == list.Count)
{
str = str.Substring(0, str.Length - 1);
cn.Execute(sql + str, null, null, 2 * 60);
str = "";
}
index++;
}
return "";
}
}
}
......@@ -27,7 +27,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bailun.DC.LogicWareHouse",
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bailun.DC.SkuProfitService", "Bailun.DC.SkuProfitService\Bailun.DC.SkuProfitService.csproj", "{91F08169-1D64-479B-B877-88FCBDDDE90B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bailun.DC.SkuDataWareHouse", "Bailun.DC.SkuDataWareHouse\Bailun.DC.SkuDataWareHouse.csproj", "{FAB2A012-44D0-42D0-9EAD-1798D8332B66}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Bailun.DC.SkuDataWareHouse", "Bailun.DC.SkuDataWareHouse\Bailun.DC.SkuDataWareHouse.csproj", "{FAB2A012-44D0-42D0-9EAD-1798D8332B66}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Bailun.DC.SkuDailyPurchaseAndSales", "Bailun.DC.SkuDailyPurchaseAndSales\Bailun.DC.SkuDailyPurchaseAndSales.csproj", "{DD391409-2440-4332-8400-BE44A5140D89}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
......@@ -83,6 +85,10 @@ Global
{FAB2A012-44D0-42D0-9EAD-1798D8332B66}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FAB2A012-44D0-42D0-9EAD-1798D8332B66}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FAB2A012-44D0-42D0-9EAD-1798D8332B66}.Release|Any CPU.Build.0 = Release|Any CPU
{DD391409-2440-4332-8400-BE44A5140D89}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DD391409-2440-4332-8400-BE44A5140D89}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DD391409-2440-4332-8400-BE44A5140D89}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DD391409-2440-4332-8400-BE44A5140D89}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
......@@ -94,6 +100,7 @@ Global
{75782F98-28B6-4618-BAF2-56C68846CC92} = {AE2CE86A-8538-4142-920F-684DCF47C064}
{91F08169-1D64-479B-B877-88FCBDDDE90B} = {AE2CE86A-8538-4142-920F-684DCF47C064}
{FAB2A012-44D0-42D0-9EAD-1798D8332B66} = {AE2CE86A-8538-4142-920F-684DCF47C064}
{DD391409-2440-4332-8400-BE44A5140D89} = {AE2CE86A-8538-4142-920F-684DCF47C064}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {6E53AF28-A282-4FB0-A769-EAEA9769C02A}
......
......@@ -41,3 +41,10 @@ services:
context: .
dockerfile: Bailun.DC.Web/Dockerfile
bailun.dc.skudailypurchaseandsales:
image: ${DOCKER_REGISTRY}bailundcskudailypurchaseandsales
build:
context: .
dockerfile: Bailun.DC.SkuDailyPurchaseAndSales/Dockerfile
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