Commit 7b6ae24d by guanzhenshan

1、调整sku利润统计表生成服务

2、增加sku+仓库利润统计报表
parent a9fe3284
...@@ -30,6 +30,51 @@ namespace Bailun.DC.Models ...@@ -30,6 +30,51 @@ namespace Bailun.DC.Models
public string warehouse_name { get; set; } public string warehouse_name { get; set; }
/// <summary> /// <summary>
/// 分类id
/// </summary>
public int category_id { get; set; }
/// <summary>
/// 分类名称
/// </summary>
public string category_name { get; set; }
/// <summary>
/// 在库库存
/// </summary>
public int usable_stock { get; set; }
/// <summary>
/// 在库库存金额
/// </summary>
public decimal usable_stock_amount { get; set; }
/// <summary>
/// 采购在途数
/// </summary>
public int quantity_purchase { get; set; }
/// <summary>
/// 采购在途金额
/// </summary>
public decimal quantity_purchase_amount { get; set; }
/// <summary>
/// 调拨在途数
/// </summary>
public int quantity_transfer { get; set; }
/// <summary>
/// 调拨在途金额
/// </summary>
public decimal quantity_transfer_amount { get; set; }
/// <summary>
/// sku名称
/// </summary>
public string sku_title_cn { get; set; }
/// <summary>
/// 昨日销售额 /// 昨日销售额
/// </summary> /// </summary>
public decimal yd_sales_amount { get; set; } public decimal yd_sales_amount { get; set; }
......
...@@ -20,7 +20,7 @@ namespace Bailun.DC.SkuProfitService ...@@ -20,7 +20,7 @@ namespace Bailun.DC.SkuProfitService
//static void Main(string[] args) //static void Main(string[] args)
//{ //{
// Console.WriteLine("启动服务 "+DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")); // Console.WriteLine("启动服务 " + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
// var _service = new Services(); // var _service = new Services();
// _service.Save(); // _service.Save();
......
...@@ -54,6 +54,9 @@ namespace Bailun.DC.SkuProfitService ...@@ -54,6 +54,9 @@ namespace Bailun.DC.SkuProfitService
cn.Open(); cn.Open();
} }
//先删除历史记录
cn.Execute("delete from dc_mid_sku_profit", null, null, 2 * 60);
//30天销量 //30天销量
var list30day = cn.Query<Models.mSkuWarehouse>($@"select t.*,t2.unit_price,t2.category_id,t2.category_name,t3.usable_stock,t4.quantity_purchase,t4.quantity_transfer,t2.sku_title_cn from var list30day = cn.Query<Models.mSkuWarehouse>($@"select t.*,t2.unit_price,t2.category_id,t2.category_name,t3.usable_stock,t4.quantity_purchase,t4.quantity_transfer,t2.sku_title_cn from
(select t1.bailun_sku,t1.warehouse_code,t1.warehouse_name,sum(t1.bailun_sku_quantity_ordered) count,sum(t1.amount_sales*t1.bailun_sku_quantity_shipped*t1.seller_order_exchange_rate) amount,sum(t1.profit_total) profit_total from dc_base_oms_sku t1 (select t1.bailun_sku,t1.warehouse_code,t1.warehouse_name,sum(t1.bailun_sku_quantity_ordered) count,sum(t1.amount_sales*t1.bailun_sku_quantity_shipped*t1.seller_order_exchange_rate) amount,sum(t1.profit_total) profit_total from dc_base_oms_sku t1
...@@ -78,7 +81,7 @@ group by bailun_sku,warehouse_code", null, null, true, 5 * 60); ...@@ -78,7 +81,7 @@ group by bailun_sku,warehouse_code", null, null, true, 5 * 60);
var listcount = list30day.Count(); var listcount = list30day.Count();
var pagesize = 5000; var pagesize = 5000;
var index = 0; var index = 0;
var sqlInsert = @"insert dc_mid_sku_profit(day,createtime,bailun_sku,warehouse_code,warehouse_name,yd_sales_amount,yd_sales_count,yd_sales_stockamount,yd_grossprofit,yd_grossprofit_rate,pre30_sales_amount,pre30_sales_count,pre30_stockamount,pre30_grossprofit,pre30_grossprofit_rate,pre30_return_rate,pre30_stockamount_turn_rate,pre30_stockamount_add,pre30_stockamount__rate,pre30_stocknum_turn_rate,pre30_stock_add_count,pre30_stocknum_rate,pre30_stockamount_vendibility_day,pre30_stocknum_vendibility_day) values "; var sqlInsert = @"insert dc_mid_sku_profit(day,createtime,bailun_sku,warehouse_code,warehouse_name,category_id,category_name,usable_stock,usable_stock_amount,quantity_purchase,quantity_purchase_amount,quantity_transfer,quantity_transfer_amount,sku_title_cn,yd_sales_amount,yd_sales_count,yd_sales_stockamount,yd_grossprofit,yd_grossprofit_rate,pre30_sales_amount,pre30_sales_count,pre30_stockamount,pre30_grossprofit,pre30_grossprofit_rate,pre30_return_rate,pre30_stockamount_turn_rate,pre30_stockamount_add,pre30_stockamount__rate,pre30_stocknum_turn_rate,pre30_stock_add_count,pre30_stocknum_rate,pre30_stockamount_vendibility_day,pre30_stocknum_vendibility_day) values ";
var str = ""; var str = "";
foreach (var item in list30day) foreach (var item in list30day)
{ {
...@@ -136,7 +139,7 @@ group by bailun_sku,warehouse_code", null, null, true, 5 * 60); ...@@ -136,7 +139,7 @@ group by bailun_sku,warehouse_code", null, null, true, 5 * 60);
index++; index++;
str += ($@" ('{m.day.ToString("yyyy-MM-dd")}','{m.createtime.ToString("yyyy-MM-dd HH:mm:ss")}','{m.bailun_sku}','{m.warehouse_code}','{m.warehouse_name}',{m.yd_sales_amount},{m.yd_sales_count},{m.yd_sales_stockamount},{m.yd_grossprofit},{m.yd_grossprofit_rate},{m.pre30_sales_amount},{m.pre30_sales_count},{m.pre30_stockamount},{m.pre30_grossprofit},{m.pre30_grossprofit_rate},{m.pre30_return_rate},{m.pre30_stockamount_turn_rate},{m.pre30_stockamount_add},{m.pre30_stockamount__rate},{m.pre30_stocknum_turn_rate},{m.pre30_stock_add_count},{m.pre30_stocknum_rate},{m.pre30_stockamount_vendibility_day},{m.pre30_stocknum_vendibility_day}),"); str += ($@" ('{m.day.ToString("yyyy-MM-dd")}','{m.createtime.ToString("yyyy-MM-dd HH:mm:ss")}','{m.bailun_sku}','{m.warehouse_code}','{m.warehouse_name}',{item.category_id},'{item.category_name.Replace("'","")}',{item.usable_stock},{(item.usable_stock*item.unit_price)},{item.quantity_purchase},{(item.quantity_purchase*item.unit_price)},{item.quantity_transfer},{(item.quantity_transfer*item.unit_price)},'{item.sku_title_cn.Replace("'","")}',{m.yd_sales_amount},{m.yd_sales_count},{m.yd_sales_stockamount},{m.yd_grossprofit},{m.yd_grossprofit_rate},{m.pre30_sales_amount},{m.pre30_sales_count},{m.pre30_stockamount},{m.pre30_grossprofit},{m.pre30_grossprofit_rate},{m.pre30_return_rate},{m.pre30_stockamount_turn_rate},{m.pre30_stockamount_add},{m.pre30_stockamount__rate},{m.pre30_stocknum_turn_rate},{m.pre30_stock_add_count},{m.pre30_stocknum_rate},{m.pre30_stockamount_vendibility_day},{m.pre30_stocknum_vendibility_day}),");
if (index % pagesize == 0 || index == listcount) if (index % pagesize == 0 || index == listcount)
{ {
......

@{
ViewData["Title"] = "仓库利润统计分析";
Layout = "~/Pages/Shared/_MainLayout.cshtml";
ViewBag.Nav = new string[] { "统计", "仓库", "仓库利润统计分析" };
}
<div class="row">
<div class="col-sm-12">
<div id="leftcontain" style="position:relative;float:left;width:215px;margin-right:-220px;background-color:#fff;height:780px;border-top:solid 1px #E7EAEC;display:none;">
<div id="ztree" class="ztree" style="margin:5px 10px;max-height: 800px;overflow: auto;">
</div>
</div>
<div style="float:right;width:100%;">
<div id="rightcontain">
<div class="ibox-content m-b-sm border-bottom">
<form id="toolbar">
<div class="form-inline" style="line-height:40px;">
<div class="form-group">
<label>&nbsp;</label>
<button type="button" class="btn btn-success" onclick="showleft();">分类筛选</button>
</div>
<div class="form-group">
<label>&nbsp;</label>
<select id="warehousecode" name="warehousecode" class="form-control" style="width:160px;">
<option value="">请选择仓库</option>
</select>
</div>
<div class="form-group">
<label>&nbsp;</label>
<button type="button" class="btn btn-primary" onclick="list();"><i class="fa fa-search"></i>&nbsp;查询</button>
</div>
</div>
</form>
</div>
<div class="ibox-content m-b-sm border-bottom">
<table id="roletable" style="table-layout:fixed;"></table>
</div>
</div>
</div>
</div>
</div>
@section css{
<link href="~/css/zTreeStyle/zTreeStyle.css" rel="stylesheet" type="text/css" />
<style>
.mules {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.alink {
color: cornflowerblue;
cursor: pointer;
}
</style>
}
@section scripts{
<script src="~/js/jquery.ztree.core.min.js"></script>
<script src="~/js/jquery.ztree.excheck.min.js"></script>
<script type="text/javascript">
var tb;
$(document).ready(function () {
laydate.render({ elem: '#start' });
laydate.render({ elem: '#end' });
var height = document.body.clientHeight;
$("#roletable").attr("data-height", (height - 160));
list();
listwarehouse();
listcategory12();
})
function list() {
var columns = [
{ field: 'warehouse_code', title: '仓库名称', width: '100', sortable: false },
{ field: 'bailun_sku', title: 'sku', width: '80', sortable: false, iscount: true },
{ field: 'category_name', title: '品类', width: '100', sortable: true, iscount: true },
{ field: 'yd_sales_amount', title: '在库总数', width: '100', sortable: true, iscount: true },
{ field: 'cost_product', title: '采购在途数', width: '100', sortable: true, iscount: true },
{ field: 'cost_platform_fee', title: '采购在途金额', width: '110', sortable: true, iscount: true },
{ field: 'cost_paypal_fee', title: '调拨在途数', width: '110', sortable: true, iscount: true },
{ field: 'cost_first', title: '调拨在途金额', width: '100', sortable: true, iscount: true },
{ field: 'cost_tail', title: '昨日销售额', width: '100', sortable: true, iscount: true },
{ field: 'cost_handle_bailun', title: '昨日销售数量', width: '100', sortable: true, iscount: true },
{ field: 'loss_withdrawal', title: '昨日销售库存额', width: '100', sortable: false, iscount: true },
{ field: 'cost_total', title: '昨日销售毛利额', width: '110', sortable: true, iscount: true },
{ field: 'amount_refund', title: '昨日成本毛利率', width: '110', sortable: true, iscount: true },
{ field: 'amount_prepaid', title: '30天销售额', width: '120', sortable: true, iscount: true },
{ field: 'noshippingcount', title: '30天销售数量', width: '120', sortable: true, iscount: true},
{ field: 'profit_total', title: '30天销售库存额', width: '120', sortable: true, iscount: true },
{ field: 'profit_rate', title: '30天毛利额', width: '130', sortable: true, iscount: true },
{ field: 'profit_rate', title: '30天成本毛利率', width: '130', sortable: true, iscount: true },
{ field: 'profit_rate', title: '退货率', width: '130', sortable: true, iscount: true },
{ field: 'profit_rate', title: '30天金额库存周转率', width: '130', sortable: true, iscount: true },
{ field: 'profit_rate', title: '30天累积入库金额', width: '130', sortable: true, iscount: true },
{ field: 'profit_rate', title: '30天金额销进比', width: '130', sortable: true, iscount: true },
{ field: 'profit_rate', title: '30天件数库存周转率', width: '130', sortable: true, iscount: true },
{ field: 'profit_rate', title: '30天累积入库数', width: '130', sortable: true, iscount: true },
{ field: 'profit_rate', title: '30天件数销进比', width: '130', sortable: true, iscount: true },
{ field: 'profit_rate', title: '30天金额可售天数', width: '130', sortable: true, iscount: true },
{ field: 'profit_rate', title: '30天件数可售天数', width: '130', sortable: true, iscount: true },
];
var s = '';
try {
s = getChkNode();
} catch (e) {
s = '';
}
var url = '@Url.Content("~/Reports/Orders/StatisticsByWebsiteJson")' + '?' + $("#toolbar").serialize() + '&skucategoryids=' + s;
if (tb == undefined) {
tb = OnlyTable("roletable", columns, url, "", { showfooter: true, showCount: true });
}
else {
tb.bootstrapTable('refresh', { url: url });
}
}
function listwarehousetype() {
$.submit({
url: '@Url.Content("~/Home/ListWarehouseType")',
type: 'POST',
paramData: '',
func: function (result) {
if (result != null && result != undefined) {
$('#warehousetype').html('<option value="">选择仓库类型</option>');
for (var i in result) {
if (result[i].indexOf('FBA') < 0) {
$('#warehousetype').append('<option value="' + result[i] + '">' + result[i] + '</option>');
}
}
}
}
})
}
function listwarehouse() {
$.submit({
url: '@Url.Content("~/Home/ListWarehouseByExtType")',
type: 'POST',
paramData: '',
func: function (result) {
if (result != null && result != undefined) {
$('#warehousecode').html('<option value="">请选择仓库</option>');
for (var i = 0; i < result.length; i++) {
$('#warehousecode').append('<option value="' + result[i].code + '">' + result[i].name + '</option>');
}
}
}
})
}
function ShowDetail(platform, website, account, coltitle, colval, single) {
layer_show(platform + " " + website + " " + $('#start').val() + "至" + $('#end').val() + ' 订单明细', '@Url.Content("~/Reports/Orders/ListOrderDetail?platform=")' + platform + '&website=' + website + '&account=' + account + '&start=' + $('#start').val() + '&end=' + $('#end').val() + '&col=' + colval + '&coltitle=' + coltitle + '&showsingle=' + single, '90%', '90%');
}
function showleft() {
var c = $('#leftcontain').css('display');
if (c == 'none') {
$('#leftcontain').css('display', 'inline');
$("#rightcontain").animate({ marginLeft: "220px" });
}
else {
$('#leftcontain').css('display', 'none');
$("#rightcontain").animate({ marginLeft: "0px" });
}
}
function listcategory12() {
$.submit({
url: '@Url.Content("~/Reports/Orders/ListSkuCategoryOneAndSecondLevel")',
paramData: '',
type: 'POST',
func: function (result) {
var setting = {
check: {
chkStyle:'checkbox',
enable: true
}
};
zTreeObj = $.fn.zTree.init($("#ztree"), setting, eval('('+result+')'));
}
})
}
function getChkNode() {
var s = '';
var o = $.fn.zTree.getZTreeObj("ztree");
var nodes = o.getCheckedNodes();
for (var i in nodes) {
if (nodes[i].children == null || nodes[i].children.length <= 0) {
s += (nodes[i].id) + '|';
}
}
return s;
}
</script>
}
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