Commit 766f45f8 by guanzhenshan

1、修复获取itemno利润接口

2、itemno 计算利润率的服务增加一天的计算方式
parent 0edd2831
......@@ -20,7 +20,8 @@ namespace Bailun.DC.DailyItemNoProfitRate
var _service = new Services();
var day = DateTime.Parse(DateTime.Now.AddDays(-2).ToShortDateString());
_service.Init(day.AddDays(-20), day);
//_service.Init(day.AddDays(-20), day);
_service.OneDayItemNoProfitRate(day.AddDays(-1), day);
}
}
}
......@@ -33,6 +33,10 @@ namespace Bailun.DC.DailyItemNoProfitRate
Console.WriteLine("开始启动 " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
var day = DateTime.Parse(now.AddDays(-1).ToShortDateString());
Init(day.AddDays(-20),day);
Console.WriteLine("开始生成一天的itemno利润率" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
OneDayItemNoProfitRate(day.AddDays(-1), day);
Console.WriteLine("任务运行完成 " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
}
}
......@@ -244,6 +248,133 @@ namespace Bailun.DC.DailyItemNoProfitRate
}
/// <summary>
/// 生成一天的itemno利润率
/// </summary>
/// <param name="start"></param>
/// <param name="end"></param>
public void OneDayItemNoProfitRate(DateTime start,DateTime end)
{
Console.WriteLine("开始OneDay获取数据" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
var listOrders = new List<Models.dc_mid_itemno_profit_order>();
var listItemAdGMV = new List<Models.dc_daily_itemno_ad_gmv>();
var listAdEbay = new List<Models.dc_base_finance_ebay>(); //ebay广告费
var listAdAmazon = new List<Models.dc_base_finance_amazon_ad_product>(); //亚马逊广告费
var listWithDraw = GetPlatformLossWithdraw().Where(a => a.english_name.ToLower() == "ebay").FirstOrDefault();
var list = new List<dc_daily_item_oneday_profit_rate>();
var listBaseOrder = new List<dc_mid_itemno_profit_order>();
using (var cn = new MySqlConnection(Common.GlobalConfig.ConnectionString_read))
{
if (cn.State == System.Data.ConnectionState.Closed)
{
cn.Open();
}
//取出订单明细
listOrders = cn.Query<Models.dc_mid_itemno_profit_order>($"select * from dc_mid_itemno_profit_order where paid_time>='{start.ToString("yyyy-MM-dd")}' and paid_time<'{end.AddDays(1).ToString("yyyy-MM-dd")}'").AsList();
Console.WriteLine("完成取出订单数据" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
//取出item no的广告GMV
listItemAdGMV = cn.Query<Models.dc_daily_itemno_ad_gmv>($"select * from dc_daily_itemno_ad_gmv where day>='{start.ToString("yyyy-MM-dd")}' and day<'{end.AddDays(1).ToString("yyyy-MM-dd")}'").AsList();
Console.WriteLine("完成取出itemno的广告GMV数据" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
//取出所有ebay的广告费
listAdEbay = cn.Query<Models.dc_base_finance_ebay>($@"select * from dc_base_finance_ebay where bj_date>='{start.ToString("yyyy-MM-dd")}' and bj_date<'{end.AddDays(1).ToString("yyyy-MM-dd")}' and account_entry_type='FeeAd'").ToList();
Console.WriteLine("完成取出ebay广告费数据" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
//取出所有亚马逊的广告费
listAdAmazon = cn.Query<Models.dc_base_finance_amazon_ad_product>($@"select * from dc_base_finance_amazon_ad_product where report_date>='{start.ToString("yyyy-MM-dd")}' and report_date<'{end.AddDays(1).ToString("yyyy-MM-dd")}'").ToList();
Console.WriteLine("完成取出亚马逊广告数据" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
}
var listItemId = listOrders.Select(a => a.item_id).ToList();
listItemId.AddRange(listItemAdGMV.Select(a => a.item_id));
listItemId.AddRange(listAdEbay.Select(a => a.item_id));
listItemId.AddRange(listAdAmazon.Select(a => a.asin));
listItemId = listItemId.Distinct().ToList(); //去重
//以item维度计算出销售额,销售成本,广告GMV等数据
foreach (var item in listItemId)
{
var m = new dc_daily_item_oneday_profit_rate
{
createtime = DateTime.Now,
day = end,
item_id = item,
};
var objOrders = listOrders.Where(a => a.item_id == item);
decimal objadrate; //广告订单GMV占比
m.amount_sales = objOrders?.Sum(a => a.amount_sales * a.seller_order_exchange_rate) ?? 0;
m.amount_sales_ad_gmv = listItemAdGMV.Where(a => a.item_id == item)?.Sum(a => a.sales_amount * a.sales_rate) ?? 0;
m.cost_ad = listAdEbay.Where(a => a.item_id == item)?.Sum(a => a.exchange_rate * a.gross_amount) ?? 0 + listAdAmazon.Where(a => a.asin == item)?.Sum(a => a.cost * a.exchange_rate) ?? 0;
m.cost_sales = objOrders?.Sum(a => a.cost_fba_fee * a.seller_order_exchange_rate + a.cost_first + a.cost_handle_bailun + a.cost_handle_platform + a.cost_logistics + a.cost_paypal_fee * a.seller_order_exchange_rate + a.cost_platform_fee * a.seller_order_exchange_rate + a.cost_product) ?? 0;
//广告订单GMV占比
objadrate = m.amount_sales > 0 ? m.amount_sales_ad_gmv / m.amount_sales : 0;
//全部订单利润率=(过去20天OMS订单销售额-过去20天广告费-过去20天全部订单销售成本)/过去20天OMS订单销售额
m.rate_all = m.amount_sales > 0 ? (m.amount_sales - m.cost_ad - m.cost_sales) / m.amount_sales : 0;
//过去20天自然订单GMV=总GMV-广告GMV
//过去20天自然订单销售成本 = 过去20天OMS订单总销售成本(不计广告费)*(1 - 广告订单GMV占比)
//自然订单GMV - 过去20天自然订单销售成 = 自然订单利润
//自然订单利润 / 过去20天自然订单GMV = 自然订单利润率
m.rate_order = (m.amount_sales - m.amount_sales_ad_gmv) > 0 ? m.amount_sales - m.amount_sales_ad_gmv - (m.cost_sales * (1 - objadrate)) / (m.amount_sales - m.amount_sales_ad_gmv) : 0;
//过去20天广告GMV/过去20天OMS订单销量额=广告订单GMV占比
//过去20天OMS订单总销售成本(不计广告费)*广告订单GMV占比=过去20天广告订单总销售成本
//广告GMV-过去20天广告订单总销售成本-广告费=广告订单利润
//广告订单利润/广告GMV=广告订单利润率
m.rate_order_ad = m.amount_sales_ad_gmv > 0 ? ((m.amount_sales_ad_gmv - (m.cost_sales * objadrate) - m.cost_ad) / m.amount_sales_ad_gmv) : 0;
list.Add(m);
}
Console.WriteLine("完成数据计算,得出利润率" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
//合并保存item的销售额,销售成本,广告GMV,利润,利润率数据
if (list.Count > 0)
{
using (var cn = new MySqlConnection(Common.GlobalConfig.ConnectionString))
{
if (cn.State == System.Data.ConnectionState.Closed)
{
cn.Open();
}
cn.Execute("delete from dc_daily_item_oneday_profit_rate where day='" + list.FirstOrDefault().day + "'");
var sql = $@"insert dc_daily_item_oneday_profit_rate (item_id,amount_sales,cost_ad,cost_sales,amount_sales_ad_gmv,rate_order_ad,rate_order,rate_all,day) values ";
var str = "";
var index = 1;
foreach (var item in list)
{
str += $"('{item.item_id}',{item.amount_sales},{item.cost_ad},{item.cost_sales},{item.amount_sales_ad_gmv},{item.rate_order_ad},{item.rate_order},{item.rate_all},'{item.day.ToString("yyyy-MM-dd")}'),";
if (index % 1000 == 0 || index == list.Count)
{
//保存数据
if (!string.IsNullOrEmpty(str))
{
str = str.Substring(0, str.Length - 1);
}
cn.Execute(sql + str, null, null, 6 * 60);
str = "";
Console.WriteLine("保存数据,index:" + index + ";总记录数:" + list.Count + ";" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
}
index++;
}
}
}
}
/// <summary>
/// 获取平台提现损耗的比例
/// </summary>
/// <returns></returns>
......
using System;
using System.Collections.Generic;
using System.Text;
namespace Bailun.DC.Models
{
public class dc_daily_item_oneday_profit_rate
{
/// <summary>
///
/// </summary>
public int id { get; set; }
/// <summary>
///
/// </summary>
public string item_id { get; set; }
/// <summary>
/// 过去20天oms订单销售额
/// </summary>
public decimal amount_sales { get; set; }
/// <summary>
/// 过去20天广告费
/// </summary>
public decimal cost_ad { get; set; }
/// <summary>
/// 过去20天全部的订单销售成本,包括:
/// </summary>
public decimal cost_sales { get; set; }
/// <summary>
/// 过去20天广告GMV
/// </summary>
public decimal amount_sales_ad_gmv { get; set; }
/// <summary>
/// 广告订单利润率
///过去20天广告GMV/过去20天OMS订单销量额=广告订单GMV占比
///过去20天OMS订单总销售成本(不计广告费)*广告订单GMV占比=过去20天广告订单总销售成本
///广告GMV-过去20天广告订单总销售成本-广告费=广告订单利润
///广告订单利润/广告GMV=广告订单利润率
/// </summary>
public decimal rate_order_ad { get; set; }
/// <summary>
/// 自然订单利润率
///过去20天自然订单GMV=总GMV-广告GMV
///过去20天自然订单销售成本 = 过去20天OMS订单总销售成本(不计广告费)*(1-广告订单GMV占比)
///自然订单GMV-过去20天自然订单销售成=自然订单利润
///自然订单利润/过去20天自然订单GMV=自然订单利润率
/// </summary>
public decimal rate_order { get; set; }
/// <summary>
/// 全部订单利润率
///(过去20天OMS订单销售额-过去20天广告费-过去20天全部订单销售成本)/过去20天OMS订单销售额
/// </summary>
public decimal rate_all { get; set; }
/// <summary>
/// 统计日期
/// </summary>
public DateTime day { get; set; }
/// <summary>
///
/// </summary>
public DateTime createtime { get; set; }
}
}
......@@ -7508,7 +7508,7 @@ namespace Bailun.DC.Services
}
var sql = $@"select * from dc_daily_item_profit_rate where day='{day.ToString("yyyy-MM-dd")}' item_id in ('{string.Join("','", itemid)}')";
var sql = $@"select * from dc_daily_item_profit_rate where day='{day.ToString("yyyy-MM-dd")}' and item_id in ('{string.Join("','", itemid)}')";
return cn.Query<dc_daily_item_profit_rate>(sql).ToList();
}
......
......@@ -947,8 +947,17 @@ namespace Bailun.DC.Web.Controllers
/// <param name="itemids"></param>
/// <returns></returns>
[HttpPost]
public JsonResult GetItemNoProfitRate([FromBody] string itemids)
public JsonResult GetItemNoProfitRate(string itemids)
{
if(string.IsNullOrEmpty(itemids))
{
return Json(new
{
success = false,
msg = "itemids不能为空"
});
}
var arr = itemids.Split(",").Where(a => !string.IsNullOrEmpty(a)).ToList();
if(arr.Count==0)
{
......
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