Commit 599412ad by guanzhenshan

增加库存汇总分析报表

parent 5c115f06
......@@ -34,4 +34,13 @@ namespace Bailun.DC.Models.Common
public int C_LEVEL { get; set; }
}
public class CategoryResult
{
public List<CategoryDto> result { get; set; }
public int statusCode { get; set; }
public string message { get; set; }
}
}
......@@ -234,23 +234,36 @@ namespace Bailun.DC.Services
tempLevel++;
}
}
string appId = "SystemDCUI";
string appKey = "YmFpbHVuRENVSQ==";
string url = Common.GlobalConfig.SkumsCategory;
//string appId = "SystemDCUI";
//string appKey = "YmFpbHVuRENVSQ==";
//string url = Common.GlobalConfig.SkumsCategory;
List<Models.Common.CategoryDto> result = new List<Models.Common.CategoryDto>();
//List<Models.Common.CategoryDto> result = new List<Models.Common.CategoryDto>();
Models.Common.ApiEntrance model = new Models.Common.ApiEntrance();
model.code = appId;
model.data = level.ToString();
//Models.Common.ApiEntrance model = new Models.Common.ApiEntrance();
//model.code = appId;
//model.data = level.ToString();
string sign = Common.CommonHelper.md5Encrypt(appKey + model.code + CommonHelper.md5Encrypt(model.key + model.data));
string resultStr = HttpHelper.NetHelper.Request(url + $"?sign={sign}&appId={appId}&level={level}");
Models.Common.ApiResult apiResult = Newtonsoft.Json.JsonConvert.DeserializeObject<Models.Common.ApiResult>(resultStr);
if (apiResult.result_code == 1)
//string sign = Common.CommonHelper.md5Encrypt(appKey + model.code + CommonHelper.md5Encrypt(model.key + model.data));
//string resultStr = HttpHelper.NetHelper.Request(url + $"?sign={sign}&appId={appId}&level={level}");
//Models.Common.ApiResult apiResult = Newtonsoft.Json.JsonConvert.DeserializeObject<Models.Common.ApiResult>(resultStr);
//if (apiResult.result_code == 1)
//{
// result = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Models.Common.CategoryDto>>(WebUtility.UrlDecode(apiResult.data)).Where(s => s.C_LEVEL == level).ToList();
//}
var result = new List<Models.Common.CategoryDto>();
var resultStr = HttpHelper.NetHelper.HttpPostJson("http://doc.bailuntec.com:6001/category/getallcategorylist", Newtonsoft.Json.JsonConvert.SerializeObject(new { level=level }));
if(!string.IsNullOrEmpty(resultStr))
{
result = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Models.Common.CategoryDto>>(WebUtility.UrlDecode(apiResult.data)).Where(s => s.C_LEVEL == level).ToList();
var json = Newtonsoft.Json.JsonConvert.DeserializeObject<CategoryResult>(resultStr);
if (json.statusCode == 200)
{
result = json.result;
}
}
return result;
}
......
......@@ -213,8 +213,9 @@ namespace Bailun.DC.Services
/// <param name="stockamountmin">库存金额 min值</param>
/// <param name="stockamountmax">库存金额 max值</param>
/// <param name="total">符合条件的总记录数</param>
/// <param name="onedaysalescount">昨日销量,0:0销量,1:0-1销量,2:1-5销量,5:5-10销量,10:大于10的销量</param>
/// <returns></returns>
public List<Models.Stock.mSkuWarehouse> ListWareHouseSku(BtTableParameter parameter, string warehousecode, int? categoryid, int? minordercount, int? maxordercount, int? stockmin, int? stockmax, decimal? stockamountmin, decimal? stockamountmax, string skucategoryids,int? push_status,int? available_days_start,int? available_days_end, ref int total)
public List<Models.Stock.mSkuWarehouse> ListWareHouseSku(BtTableParameter parameter, string warehousecode, int? categoryid, int? minordercount, int? maxordercount, int? stockmin, int? stockmax, decimal? stockamountmin, decimal? stockamountmax, string skucategoryids,int? push_status,int? available_days_start,int? available_days_end, ref int total,int? onedaysalescount=null)
{
var sqlparam = new DynamicParameters();
//available_days
......@@ -309,6 +310,32 @@ namespace Bailun.DC.Services
sqlwhere += " and t1.available_days<"+available_days_end.Value;
}
if(onedaysalescount.HasValue && onedaysalescount.Value>=0)
{
//sqlwhere += " and t1.oneday_total_sales";
switch(onedaysalescount.Value)
{
case 0:
sqlwhere += " and t1.oneday_total_sales=0";
break;
case 1:
sqlwhere += " and t1.oneday_total_sales>0 && t1.oneday_total_sales<=1";
break;
case 2:
sqlwhere += " and t1.oneday_total_sales>1 && t1.oneday_total_sales<=5";
break;
case 5:
sqlwhere += " and t1.oneday_total_sales>5 && t1.oneday_total_sales<=10";
break;
case 10:
sqlwhere += " and t1.oneday_total_sales>10";
break;
default:
sqlwhere += " and t1.oneday_total_sales="+onedaysalescount.Value;
break;
}
}
var sqlsort = "";
......@@ -1374,7 +1401,7 @@ namespace Bailun.DC.Services
/// <returns></returns>
public dc_daily_inventory_summary ListInventorySummaryCount(string warehousetype, string warehousecode, DateTime day)
{
var sql = $"select sum(usable_stock) as usable_stock,sum(amount_stock) as amount_stock,sum(quantity_purchase) as quantity_purchase,sum(purchase_amount) as purchase_amount,sum(quantity_purchase_product) as quantity_purchase_product,sum(quantity_transfer) as quantity_transfer,sum(transfer_amount) as transfer_amount,sum(quantity_transfer_product) as quantity_transfer_product,sum(sale10_count) as sale10_count,(sum(sale10_count)/sum(usable_stock)) as sale10_rate,sum(sale10_amount) as sale10_amount,(sum(sale10_amount)/sum(amount_stock)) as sale10_amount_rate,sum(sale5_10_count) as sale5_10_count,(sum(sale5_10_count)/sum(usable_stock)) as sale5_10_rate,sum(sale5_10_amount) as sale5_10_amount,(sum(sale5_10_amount)/sum(amount_stock)) as sale5_10_amount_rate,sum(sale1_5_amount) as sale1_5_amount,(sum(sale1_5_amount)/sum(amount_stock)) as sale1_5_amount_rate,sum(sale1_amount) as sale1_amount,(sum(sale1_amount)/sum(amount_stock)) as sale1_amount_rate,sum(sale0_amount) as sale0_amount,(sum(sale0_amount)/sum(amount_stock)) as sale0_amount_rate from dc_daily_inventory_summary where day='{day.ToString("yyyy-MM-dd")}' ";
var sql = $"select sum(usable_stock) as usable_stock,sum(amount_stock) as amount_stock,sum(quantity_purchase) as quantity_purchase,sum(purchase_amount) as purchase_amount,sum(quantity_purchase_product) as quantity_purchase_product,sum(quantity_transfer) as quantity_transfer,sum(transfer_amount) as transfer_amount,sum(quantity_transfer_product) as quantity_transfer_product,sum(sale10_count) as sale10_count,(sum(sale10_count)/sum(usable_stock)) as sale10_rate,sum(sale10_amount) as sale10_amount,(sum(sale10_amount)/sum(amount_stock)) as sale10_amount_rate,sum(sale5_10_count) as sale5_10_count,(sum(sale5_10_count)/sum(usable_stock)) as sale5_10_rate,sum(sale5_10_amount) as sale5_10_amount,(sum(sale5_10_amount)/sum(amount_stock)) as sale5_10_amount_rate,sum(sale1_5_amount) as sale1_5_amount,(sum(sale1_5_amount)/sum(amount_stock)) as sale1_5_amount_rate,sum(sale1_amount) as sale1_amount,(sum(sale1_amount)/sum(amount_stock)) as sale1_amount_rate,sum(sale0_amount) as sale0_amount,(sum(sale0_count)/sum(usable_stock)) as sale0_count_rate from dc_daily_inventory_summary where day='{day.ToString("yyyy-MM-dd")}' ";
var sqlparam = new DynamicParameters();
if (!string.IsNullOrEmpty(warehousetype))
......@@ -1402,6 +1429,39 @@ namespace Bailun.DC.Services
}
}
/// <summary>
/// 获取库存汇总分析字段的趋势图数据
/// </summary>
/// <param name="warehousecode"></param>
/// <param name="start"></param>
/// <param name="end"></param>
/// <param name="colname"></param>
/// <returns></returns>
public List<string> InventorySummaryChart(string warehousecode,DateTime start,DateTime end,string colname)
{
var sql = "select CONCAT(name,',',DATE_FORMAT(day,'%Y-%m-%d')) as name from (";
sql += "select " + colname + " as name,day from dc_daily_inventory_summary where ";
sql += " warehousecode='"+warehousecode+"' and ";
sql += $" day>='{start.ToString("yyyy-MM-dd")}' and day<='{end.ToString("yyyy-MM-dd")}'";
sql += " ) t1 ";
sql += " order by day";
using (var cn = new MySqlConnection(Common.GlobalConfig.ConnectionString_read))
{
if (cn.State == System.Data.ConnectionState.Closed)
{
cn.Open();
}
return cn.Query<string>(sql).ToList();
}
}
#endregion
......
......@@ -214,7 +214,7 @@ namespace Bailun.DC.Web.Areas.Reports.Controllers
/// </summary>
/// <param name="code">仓库编码</param>
/// <returns></returns>
public ActionResult ListWareHouseSku(string code,string available_days)
public ActionResult ListWareHouseSku(string code,string available_days,int? onedaysalescount)
{
ViewBag.warehousecode = code;
ViewBag.available_days = available_days;
......@@ -227,6 +227,8 @@ namespace Bailun.DC.Web.Areas.Reports.Controllers
ViewBag.StartFourteenDate = DateTime.Now.AddDays(-14).ToString("yyyy-MM-dd") + " 00:00:00";
ViewBag.StartThirtyDate = DateTime.Now.AddDays(-30).ToString("yyyy-MM-dd") + " 00:00:00";
ViewBag.onedaysalescount = onedaysalescount;
return View();
}
......@@ -242,8 +244,9 @@ namespace Bailun.DC.Web.Areas.Reports.Controllers
/// <param name="stockmax">库存 最大值</param>
/// <param name="stockamountmin">库存金额 最小值</param>
/// <param name="stockamountmax">库存金额 最大值</param>
/// <param name="onedaysalescount">昨日销量,0:0销量,1:0-1销量,2:1-5销量,5:5-10销量,10:大于10的销量</param>
/// <returns></returns>
public string ListWareHouseSkuJson(BtTableParameter parameter, string warehousecode, int? push_status, int? minordercount, int? maxordercount, int? stockmin, int? stockmax, decimal? stockamountmin, decimal? stockamountmax,string skucategoryids,string available_days)
public string ListWareHouseSkuJson(BtTableParameter parameter, string warehousecode, int? push_status, int? minordercount, int? maxordercount, int? stockmin, int? stockmax, decimal? stockamountmin, decimal? stockamountmax,string skucategoryids,string available_days,int? onedaysalescount)
{
var total = 0;
......@@ -269,7 +272,7 @@ namespace Bailun.DC.Web.Areas.Reports.Controllers
}
}
var obj = new Services.WareHouseServices().ListWareHouseSku(parameter, warehousecode, null, minordercount, maxordercount, stockmin, stockmax, stockamountmin, stockamountmax, skucategoryids, push_status,available_days_start,available_days_end,ref total);
var obj = new Services.WareHouseServices().ListWareHouseSku(parameter, warehousecode, null, minordercount, maxordercount, stockmin, stockmax, stockamountmin, stockamountmax, skucategoryids, push_status,available_days_start,available_days_end,ref total,onedaysalescount);
var list = obj.Select(p => new {
amount_onedaysale = p.amount_onedaysale??0,
......@@ -1771,7 +1774,7 @@ namespace Bailun.DC.Web.Areas.Reports.Controllers
quantity_transfer_product = a.quantity_transfer_product.ToString("N0"),
sale0_amount = a.sale0_amount.ToString("N2"),
sale0_amount_rate = (a.sale0_amount_rate*100).ToString("N2"),
sale0_count_rate = (a.sale0_count_rate*100).ToString("N2"),
sale10_amount = a.sale10_amount.ToString("N2"),
sale10_amount_rate = (a.sale10_amount_rate*100).ToString("N2"),
sale10_count = a.sale10_count.ToString("N0"),
......@@ -1804,7 +1807,7 @@ namespace Bailun.DC.Web.Areas.Reports.Controllers
quantity_transfer_product = objCount.quantity_transfer_product.ToString("N0"),
sale0_amount = objCount.sale0_amount.ToString("N2"),
sale0_amount_rate = (objCount.sale0_amount_rate * 100).ToString("N2"),
sale0_count_rate = (objCount.sale0_count_rate * 100).ToString("N2"),
sale10_amount = objCount.sale10_amount.ToString("N2"),
sale10_amount_rate = (objCount.sale10_amount_rate * 100).ToString("N2"),
sale10_count = objCount.sale10_count.ToString("N0"),
......@@ -1823,6 +1826,62 @@ namespace Bailun.DC.Web.Areas.Reports.Controllers
});
}
/// <summary>
/// 库存汇总分析趋势图
/// </summary>
/// <param name="warehousecode">仓库编码</param>
/// <param name="warehousename">仓库名称</param>
/// <param name="key">显示的字段</param>
/// <returns></returns>
public ActionResult InventorySummaryChart(string warehousecode,string warehousename,string key,string title)
{
ViewBag.warehousecode = warehousecode;
ViewBag.warehousename = warehousename;
ViewBag.key = key;
ViewBag.title = title;
return View();
}
/// <summary>
/// 库存汇总分析趋势图
/// </summary>
/// <returns></returns>
[ServiceFabric.Authorize.BailunAuthentication(LoginMode.Enforce)]
[HttpPost]
public JsonResult InventorySummaryChartJson(string warehousecode,string key)
{
var _services = new Services.WareHouseServices();
var obj = _services.InventorySummaryChart(warehousecode, DateTime.Now.AddDays(-30), DateTime.Now.AddDays(-1), key);
var listval = new List<string>();
var listdate = new List<string>();
obj = obj.Where(a => !string.IsNullOrEmpty(a)).ToList();
if (obj.Count > 0)
{
foreach (var item in obj)
{
var arr = item.Split(',');
if (arr.Length > 1)
{
listval.Add(arr[0]);
listdate.Add(DateTime.Parse(arr[1]).ToString("yyyy-MM-dd"));
}
}
}
return Json(new
{
success = true,
msg = "",
val = listval,
dates = listdate,
});
}
#endregion
}
......
......@@ -74,132 +74,123 @@
function list() {
var columns = [
{
field: 'warehouse_name', title: '仓库名称', width: '190', sortable: true, iscount: true, formatter: function (idx, data) {
return '<a href="javascript:;" onclick="SkuDetail(\'' + data.warehouse_code + '\')">' + data.warehouse_name + '</a><img src="@Url.Content("~/img/icon-feed.png")" title="动态库存分析" style="height:20px;margin-left:3px;" onclick="ShowDynamicStock(\'' + data.warehouse_code + '\',\'' + data.warehouse_name + '\');" />';
field: 'warehousetype', title: '仓库类型', width: '100', formatter: function (idx, data) {
return data.warehousetype;
}
},
{
field: 'usable_stock', title: '库存数量', width: '110', sortable: true, iscount: true, formatter: function (idx, data) {
return data.usable_stock + '<img src="@Url.Content("~/img/icon-trendchart.png")" title="库存数量趋势图" style="height:20px;margin-left:3px;" onclick="ShowTrendChart(\'' + data.warehouse_code + '\',\'库存数量\',\'usable_stock\',\'' + data.warehouse_name + '\');" />';
field: 'warehousename', title: '仓库名称', width: '160', sortable: true, iscount: true, formatter: function (idx, data) {
return '<a href="javascript:;" onclick="SkuDetail(\'' + data.warehousecode + '\',\'' + data.warehousename+'\')">' + data.warehousename+'</a>';
}
},
{
field: 'amount_stock', title: '库存金额', width: '150', sortable: true, iscount: true, formatter: function (idx, data) {
return data.amount_stock + '<img src="@Url.Content("~/img/icon-trendchart.png")" title="库存金额趋势图" style="height:20px;margin-left:3px;" onclick="ShowTrendChart(\'' + data.warehouse_code + '\',\'库存金额\',\'amount_stock\',\'' + data.warehouse_name + '\');" />';
field: 'usable_stock', title: 'sku数', width: '100', sortable: true, iscount: true, formatter: function (idx, data) {
return data.usable_stock;
}
},
{
field: 'quantity_purchase', title: '采购在途数量', width: '130', sortable: true, iscount: true, formatter: function (idx, data) {
return data.quantity_purchase + '<img src="@Url.Content("~/img/icon-trendchart.png")" title="采购在途数量趋势图" style="height:20px;margin-left:3px;" onclick="ShowTrendChart(\'' + data.warehouse_code + '\',\'采购在途数量\',\'quantity_purchase\',\'' + data.warehouse_name + '\');" />';
}
},
{ field: 'purchase_amount', title: '采购在途金额', width: '130', sortable: true, iscount: true , formatter: function (idx, data) {
return data.purchase_amount + '<img src="@Url.Content("~/img/icon-trendchart.png")" title="采购在途金额趋势图" style="height:20px;margin-left:3px;" onclick="ShowTrendChart(\'' + data.warehouse_code + '\',\'采购在途金额\',\'purchase_amount\',\'' + data.warehouse_name + '\');" />';
}
},
{
field: 'quantity_transfer', title: '调拨在途数量', width: '130', sortable: true, iscount: true, formatter: function (idx, data) {
return data.quantity_transfer + '<img src="@Url.Content("~/img/icon-trendchart.png")" title="调拨在途数量趋势图" style="height:20px;margin-left:3px;" onclick="ShowTrendChart(\'' + data.warehouse_code + '\',\'调拨在途数量\',\'quantity_transfer\',\'' + data.warehouse_name + '\');" />';
field: 'amount_stock', title: 'sku金额', width: '100', sortable: true, iscount: true, formatter: function (idx, data) {
return data.amount_stock;
}
},
{
field: 'amount_transit', title: '调拨在途金额', width: '150', sortable: true, iscount: true, formatter: function (idx, data) {
return data.amount_transit + '<img src="@Url.Content("~/img/icon-trendchart.png")" title="调拨在途金额趋势图" style="height:20px;margin-left:3px;" onclick="ShowTrendChart(\'' + data.warehouse_code + '\',\'调拨在途金额\',\'amount_transit\',\'' + data.warehouse_name + '\');" />';
field: 'quantity_purchase', title: '采购在途sku数', width: '130', sortable: true, iscount: true, formatter: function (idx, data) {
return data.quantity_purchase;
}
},
{
field: 'noshippingcount', title: '待发货数量', width: '130', sortable: true, iscount: true, formatter: function (idx, data) {
return data.noshippingcount + '<img src="@Url.Content("~/img/icon-trendchart.png")" title="待发货数量趋势图" style="height:20px;margin-left:3px;" onclick="ShowTrendChart(\'' + data.warehouse_code + '\',\'待发货数量\',\'noshippingcount\',\'' + data.warehouse_name + '\');" />';
field: 'quantity_purchase_product', title: '采购在途产品数', width: '130', sortable: true, iscount: true, formatter: function (idx, data) {
return data.quantity_purchase_product;
}
},
{
field: 'nostockcount', title: '缺货数量', width: '130', sortable: true, iscount: true, formatter: function (idx, data) {
return data.nostockcount + '<img src="@Url.Content("~/img/icon-trendchart.png")" title="缺货数量趋势图" style="height:20px;margin-left:3px;" onclick="ShowTrendChart(\'' + data.warehouse_code + '\',\'缺货数量\',\'nostockcount\',\'' + data.warehouse_name + '\');" />';
field: 'purchase_amount', title: '采购在途金额', width: '130', sortable: true, iscount: true, formatter: function (idx, data) {
return data.purchase_amount;
}
},
{
field: 'quantity_tuneout_onway', title: '调出在途数', width: '130', sortable: true, iscount: true, formatter: function (idx, data) {
return data.quantity_tuneout_onway + '<img src="@Url.Content("~/img/icon-trendchart.png")" title="调出在途数趋势图" style="height:20px;margin-left:3px;" onclick="ShowTrendChart(\'' + data.warehouse_code + '\',\'调出在途数\',\'quantity_tuneout_onway\',\'' + data.warehouse_name + '\');" />';
field: 'quantity_transfer', title: '调拨在途sku数', width: '130', sortable: true, iscount: true, formatter: function (idx, data) {
return data.quantity_transfer;
}
},
{
field: 'quantity_tuneout_30days', title: '30天调出数', width: '130', sortable: true, iscount: true, formatter: function (idx, data) {
return data.quantity_tuneout_30days + '<img src="@Url.Content("~/img/icon-trendchart.png")" title="30天调出数趋势图" style="height:20px;margin-left:3px;" onclick="ShowTrendChart(\'' + data.warehouse_code + '\',\'30天调出数\',\'quantity_tuneout_30days\',\'' + data.warehouse_name + '\');" />';
field: 'quantity_transfer_product', title: '调拨在途产品数', width: '130', sortable: true, iscount: true, formatter: function (idx, data) {
return data.quantity_transfer_product;
}
},
{
field: 'amount_tuneout_30days', title: '30天调出金额', width: '130', sortable: true, iscount: true, formatter: function (idx, data) {
return data.amount_tuneout_30days + '<img src="@Url.Content("~/img/icon-trendchart.png")" title="30天调出金额趋势图" style="height:20px;margin-left:3px;" onclick="ShowTrendChart(\'' + data.warehouse_code + '\',\'30天调出金额\',\'amount_tuneout_30days\',\'' + data.warehouse_name + '\');" />';
field: 'transfer_amount', title: '调拨在途金额', width: '130', sortable: true, iscount: true, formatter: function (idx, data) {
return data.transfer_amount;
}
},
{
field: 'quantity_tunein_30days', title: '30天调入数', width: '130', sortable: true, iscount: true, formatter: function (idx, data) {
return data.quantity_tunein_30days + '<img src="@Url.Content("~/img/icon-trendchart.png")" title="30天调入数趋势图" style="height:20px;margin-left:3px;" onclick="ShowTrendChart(\'' + data.warehouse_code + '\',\'30天调入数\',\'quantity_tunein_30days\',\'' + data.warehouse_name + '\');" />';
field: 'sale10_rate', title: '日销大于10sku占比%', width: '170', sortable: true, iscount: true, formatter: function (idx, data) {
return '<a href="javascript:;" style="color:#B2B2B2" title="趋势图" onclick="ShowTrendChart(\'' + data.warehousecode + '\',\'' + data.warehousename + '\',\'sale10_rate\',\'日销大于10sku占比\')">' + data.sale10_rate + '</a>';
}
},
{
field: 'amount_tunein_30days', title: '30天调入金额', width: '130', sortable: true, iscount: true, formatter: function (idx, data) {
return data.amount_tunein_30days + '<img src="@Url.Content("~/img/icon-trendchart.png")" title="30天调入金额趋势图" style="height:20px;margin-left:3px;" onclick="ShowTrendChart(\'' + data.warehouse_code + '\',\'30天调入金额\',\'amount_tunein_30days\',\'' + data.warehouse_name + '\');" />';
field: 'sale10_count', title: '日销大于10sku数', width: '150', sortable: true, iscount: true, formatter: function (idx, data) {
return '<a href="javascript:;" onclick="SkuDetail(\'' + data.warehousecode + '\',\'' + data.warehousename + '\',10,\'日销大于10sku数\')">' + data.sale10_count + '</a>';
}
},
{
field: 'oneday_total_sales', title: '昨日总销量', width: '130', sortable: true, iscount: true, formatter: function (idx, data) {
return ((data.hq_type != 'FBA仓' && data.hq_type != '半成品仓') ? '<a href="javascript:;" onclick="ShowOrderList(\'' + data.warehouse_name + '昨日总销量' + '\',1,\'' + data.warehouse_code + '\')">' + data.oneday_total_sales + '</a>' : data.oneday_total_sales) + '<img src="@Url.Content("~/img/icon-trendchart.png")" title="昨日总销量趋势图" style="height:20px;margin-left:3px;" onclick="ShowTrendChart(\'' + data.warehouse_code + '\',\'昨日总销量\',\'oneday_total_sales\',\'' + data.warehouse_name + '\');" />';
field: 'sale10_amount_rate', title: '日销大于10库存金额占比%', width: '197', sortable: true, iscount: true, formatter: function (idx, data) {
return '<a href="javascript:;" style="color:#B2B2B2" title="趋势图" onclick="ShowTrendChart(\'' + data.warehousecode + '\',\'' + data.warehousename + '\',\'sale10_amount_rate\',\'日销大于10库存金额占比\')">' + data.sale10_amount_rate + '</a>';
}
},
{
field: 'amount_onedaysale', title: '昨日总销售额', width: '130', sortable: true, iscount: true, formatter: function (idx, data) {
return data.amount_onedaysale + '<img src="@Url.Content("~/img/icon-trendchart.png")" title="昨日总销售额趋势图" style="height:20px;margin-left:3px;" onclick="ShowTrendChart(\'' + data.warehouse_code + '\',\'昨日总销售额\',\'amount_onedaysale\',\'' + data.warehouse_name + '\');" />';
field: 'sale10_amount', title: '日销大于10库存金额', width: '170', sortable: true, iscount: true, formatter: function (idx, data) {
return '<a href="javascript:;" style="color:#B2B2B2" title="趋势图" onclick="ShowTrendChart(\'' + data.warehousecode + '\',\'' + data.warehousename + '\',\'sale10_amount\',\'日销大于10库存金额\')">' + data.sale10_amount + '</a>';
}
},
{
field: 'sevenday_total_sales', title: '七天销量', width: '100', sortable: true, iscount: true, formatter: function (idx, data) {
return ((data.hq_type != 'FBA仓' && data.hq_type != '半成品仓') ? '<a href="javascript:;" onclick="ShowOrderList(\'' + data.warehouse_name + '七天销量' + '\',7,\'' + data.warehouse_code + '\')">' + data.sevenday_total_sales + '</a>' : data.sevenday_total_sales) + '<img src="@Url.Content("~/img/icon-trendchart.png")" title="七天销量趋势图" style="height:20px;margin-left:3px;" onclick="ShowTrendChart(\'' + data.warehouse_code + '\',\'七天销量\',\'sevenday_total_sales\',\'' + data.warehouse_name + '\');" />';
field: 'sale5_10_rate', title: '日销5-10sku数占比%', width: '170', sortable: true, iscount: true, formatter: function (idx, data) {
return '<a href="javascript:;" style="color:#B2B2B2" title="趋势图" onclick="ShowTrendChart(\'' + data.warehousecode + '\',\'' + data.warehousename + '\',\'sale5_10_rate\',\'日销5-10sku数占比\')">' + data.sale5_10_rate + '</a>';
}
},
{
field: 'sevenday_total_sales_amount', title: '七天销售额', width: '100', sortable: true, iscount: true, formatter: function (idx, data) {
return ((data.hq_type != 'FBA仓' && data.hq_type != '半成品仓') ? '<a href="javascript:;" onclick="ShowOrderList(\'' + data.warehouse_name + '七天销售额' + '\',7,\'' + data.warehouse_code + '\')">' + data.sevenday_total_sales_amount + '</a>' : data.sevenday_total_sales_amount) + '<img src="@Url.Content("~/img/icon-trendchart.png")" title="七天销售额趋势图" style="height:20px;margin-left:3px;" onclick="ShowTrendChart(\'' + data.warehouse_code + '\',\'七天销售额\',\'sevenday_total_sales_amount\',\'' + data.warehouse_name + '\');" />';
field: 'sale5_10_count', title: '日销5-10sku数', width: '140', sortable: true, iscount: true, formatter: function (idx, data) {
return '<a href="javascript:;" onclick="SkuDetail(\'' + data.warehousecode + '\',\'' + data.warehousename + '\',5,\'日销5-10sku数\')">' + data.sale5_10_count + '</a>';
}
},
{
field: 'fourteenday_total_sales', title: '十四天销量', width: '120', sortable: true, iscount: true, formatter: function (idx, data) {
return ((data.hq_type != 'FBA仓' && data.hq_type != '半成品仓') ? '<a href="javascript:;" onclick="ShowOrderList(\'' + data.warehouse_name + '十四天销量' + '\',14,\'' + data.warehouse_code + '\')">' + data.fourteenday_total_sales + '</a>' : data.fourteenday_total_sales) + '<img src="@Url.Content("~/img/icon-trendchart.png")" title="十四天销量趋势图" style="height:20px;margin-left:3px;" onclick="ShowTrendChart(\'' + data.warehouse_code + '\',\'十四天销量\',\'fourteenday_total_sales\',\'' + data.warehouse_name + '\');" />';
field: 'sale5_10_amount_rate', title: '日销5-10库存金额占比%', width: '190', sortable: true, iscount: true, formatter: function (idx, data) {
return '<a href="javascript:;" style="color:#B2B2B2" title="趋势图" onclick="ShowTrendChart(\'' + data.warehousecode + '\',\'' + data.warehousename + '\',\'sale5_10_amount_rate\',\'日销5-10库存金额占比\')">' + data.sale5_10_amount_rate + '</a>';
}
},
{
field: 'fourteenday_total_sales_amount', title: '十四天销售额', width: '120', sortable: true, iscount: true, formatter: function (idx, data) {
return ((data.hq_type != 'FBA仓' && data.hq_type != '半成品仓') ? '<a href="javascript:;" onclick="ShowOrderList(\'' + data.warehouse_name + '十四天销售额' + '\',14,\'' + data.warehouse_code + '\')">' + data.fourteenday_total_sales_amount + '</a>' : data.fourteenday_total_sales_amount) + '<img src="@Url.Content("~/img/icon-trendchart.png")" title="十四天销售额趋势图" style="height:20px;margin-left:3px;" onclick="ShowTrendChart(\'' + data.warehouse_code + '\',\'十四天销售额\',\'fourteenday_total_sales_amount\',\'' + data.warehouse_name + '\');" />';
field: 'sale5_10_amount', title: '日销5-10库存金额', width: '170', sortable: true, iscount: true, formatter: function (idx, data) {
return '<a href="javascript:;" style="color:#B2B2B2" title="趋势图" onclick="ShowTrendChart(\'' + data.warehousecode + '\',\'' + data.warehousename + '\',\'sale5_10_amount\',\'日销5-10库存金额\')">' + data.sale5_10_amount + '</a>';
}
},
{
field: 'thirtyday_total_sales', title: '三十天销量', width: '130', sortable: true, iscount: true, formatter: function (idx, data) {
return ((data.hq_type != 'FBA仓' && data.hq_type != '半成品仓') ? '<a href="javascript:;" onclick="ShowOrderList(\'' + data.warehouse_name + '三十天销量' + '\',30,\'' + data.warehouse_code + '\')">' + data.thirtyday_total_sales + '</a>' : data.thirtyday_total_sales) + '<img src="@Url.Content("~/img/icon-trendchart.png")" title="三十天销量趋势图" style="height:20px;margin-left:3px;" onclick="ShowTrendChart(\'' + data.warehouse_code + '\',\'三十天销量\',\'thirtyday_total_sales\',\'' + data.warehouse_name + '\');" />';
field: 'sale1_5_amount_rate', title: '日销1-5库存金额占比%', width: '190', sortable: true, iscount: true, formatter: function (idx, data) {
return '<a href="javascript:;" style="color:#B2B2B2" title="趋势图" onclick="ShowTrendChart(\'' + data.warehousecode + '\',\'' + data.warehousename + '\',\'sale1_5_amount_rate\',\'日销1-5库存金额占比\')">' + data.sale1_5_amount_rate + '</a>';
}
},
{
field: 'thirtyday_total_sales_amount', title: '三十天销售额', width: '130', sortable: true, iscount: true, formatter: function (idx, data) {
return ((data.hq_type != 'FBA仓' && data.hq_type != '半成品仓') ? '<a href="javascript:;" onclick="ShowOrderList(\'' + data.warehouse_name + '三十天销售额' + '\',30,\'' + data.warehouse_code + '\')">' + data.thirtyday_total_sales_amount + '</a>' : data.thirtyday_total_sales_amount) + '<img src="@Url.Content("~/img/icon-trendchart.png")" title="三十天销售额趋势图" style="height:20px;margin-left:3px;" onclick="ShowTrendChart(\'' + data.warehouse_code + '\',\'三十天销售额\',\'thirtyday_total_sales_amount\',\'' + data.warehouse_name + '\');" />';
field: 'sale1_5_amount', title: '日销1-5库存金额', width: '170', sortable: true, iscount: true, formatter: function (idx, data) {
return '<a href="javascript:;" style="color:#B2B2B2" title="趋势图" onclick="ShowTrendChart(\'' + data.warehousecode + '\',\'' + data.warehousename + '\',\'sale1_5_amount\',\'日销1-5库存金额\')">' + data.sale1_5_amount + '</a>';
}
},
{
field: 'cash_in_30days', title: '30天现金流收入', width: '130', sortable: true, iscount: true, formatter: function (idx, data) {
return '<a href="javascript:;" onclick="ShowCashFlow(\'' + data.warehouse_code + '\',\''+data.warehouse_name+'\')">' + data.cash_in_30days + '</a><img src="@Url.Content("~/img/icon-trendchart.png")" title="30天现金流收入趋势图" style="height:20px;margin-left:3px;" onclick="ShowTrendChart(\'' + data.warehouse_code + '\',\'30天现金流收入\',\'cash_in_30days\',\'' + data.warehouse_name + '\');" />';
field: 'sale1_amount_rate', title: '日销0-1库存金额占比%', width: '190', sortable: true, iscount: true, formatter: function (idx, data) {
return '<a href="javascript:;" style="color:#B2B2B2" title="趋势图" onclick="ShowTrendChart(\'' + data.warehousecode + '\',\'' + data.warehousename + '\',\'sale1_amount_rate\',\'日销0-1库存金额占比\')">' + data.sale1_amount_rate + '</a>';
}
},
{
field: 'cash_out_30days', title: '30天现金流支出', width: '130', sortable: true, iscount: true, formatter: function (idx, data) {
return '<a href="javascript:;" onclick="ShowCashFlow(\'' + data.warehouse_code + '\',\'' + data.warehouse_name + '\')">' + data.cash_out_30days + '</a><img src="@Url.Content("~/img/icon-trendchart.png")" title="30天现金流支出趋势图" style="height:20px;margin-left:3px;" onclick="ShowTrendChart(\'' + data.warehouse_code + '\',\'30天现金流支出\',\'cash_out_30days\',\'' + data.warehouse_name + '\');" />';
field: 'sale1_amount', title: '日销0-1库存金额', width: '170', sortable: true, iscount: true, formatter: function (idx, data) {
return '<a href="javascript:;" style="color:#B2B2B2" title="趋势图" onclick="ShowTrendChart(\'' + data.warehousecode + '\',\'' + data.warehousename + '\',\'sale1_amount\',\'日销0-1库存金额\')">' + data.sale1_amount + '</a>';
}
},
{
field: 'cash_net', title: '净值(30d)', width: '130', sortable: true, iscount: true, formatter: function (idx, data) {
return data.cash_net + '<img src="@Url.Content("~/img/icon-trendchart.png")" title="净值(30d)趋势图" style="height:20px;margin-left:3px;" onclick="ShowTrendChart(\'' + data.warehouse_code + '\',\'净值(30d)\',\'cash_net\',\'' + data.warehouse_name + '\');" />';
field: 'sale0_count_rate', title: '日销为0sku数占比%', width: '180', sortable: true, iscount: true, formatter: function (idx, data) {
return '<a href="javascript:;" style="color:#B2B2B2" title="趋势图" onclick="ShowTrendChart(\'' + data.warehousecode + '\',\'' + data.warehousename + '\',\'sale0_count_rate\',\'日销为0sku数占比\')">' + data.sale0_count_rate + '</a>';
}
},
{
field: 'pin_rate_stock', title: '动销率%(30d)', width: '160', sortable: true, iscount: true, formatter: function (idx, data) {
return data.pin_rate_stock + '<img src="@Url.Content("~/img/icon-trendchart.png")" title="动销率%(30d)趋势图" style="height:20px;margin-left:3px;" onclick="ShowTrendChart(\'' + data.warehouse_code + '\',\'动销率%(30d)\',\'pin_rate_stock\',\'' + data.warehouse_name + '\');" />';
field: 'sale0_amount', title: '日销为0sku库存金额', width: '180', sortable: true, iscount: true, formatter: function (idx, data) {
return '<a href="javascript:;" style="color:#B2B2B2" title="趋势图" onclick="ShowTrendChart(\'' + data.warehousecode + '\',\'' + data.warehousename + '\',\'sale0_amount\',\'日销为0sku库存金额\')">' + data.sale0_amount + '</a>';
}
}
];
......@@ -216,14 +207,16 @@
if (columns[c].iscount) {
for (var v in d.count_row) {
if (key == v) {
if (d.count_row[v] != '总计') {
@*if (d.count_row[v] != '总计') {
tr.find('td').eq(c).children('div').first().html(d.count_row[v] + '<img src="@Url.Content("~/img/icon-trendchart.png")" title="总趋势图" style="height:20px;margin-left:3px;" onclick="ShowTrendChart(\'\',\'' + columns[c].title + '的总趋势图\',\'' + v + '\',\'\');" />');
}
else {
tr.find('td').eq(c).children('div').first().html(d.count_row[v]);
}
}*@
tr.find('td').eq(c).children('div').first().html(d.count_row[v]);
break;
}
}
......@@ -236,7 +229,7 @@
}
}, {
fixedcol: true,
fixedcolnum: 1
fixedcolnum: 2
});
}
else {
......@@ -264,46 +257,25 @@
//导出
function exportxls() {
window.open('@Url.Content("~/Reports/Warehouse/ExportLogicWarehouse?")' + $("#toolbar").serialize(), '_blank');
//window.open('@Url.Content("~/Reports/Warehouse/ExportLogicWarehouse?")' + $("#toolbar").serialize(), '_blank');
}
function SkuDetail(code) {
layer_show('Sku仓库', '@Url.Content("~/Reports/Warehouse/ListWareHouseSku?code=")' + code,'90%','90%');
function SkuDetail(code,name, type,typename) {
var _url = '@Url.Content("~/Reports/Warehouse/ListWareHouseSku?code=")'+code;
if (type != undefined) {
_url += '&onedaysalescount=' + type;
}
function ShowDynamicStock(code, name) {
layer_show(name+'动态库存分析', '@Url.Content("~/Reports/Warehouse/DynamicStockAnalyse?warehouse_code=")' + code,'90%','90%');
layer_show('【' + name + (type != undefined ? '-' + typename:'') + '】仓库SKU明细', _url, '90%', '90%');
}
function ShowTrendChart(code, name, key, whname) {
function ShowTrendChart(code, name, key, title) {
if (code == null) {
code = '';
}
layer_show(whname+"=》"+name + '的趋势图', '@Url.Content("~/Reports/Warehouse/WarehouseTrendChart?warehouse_code=")' + code + '&key=' + key + '&titlename=' + name,'90%','90%');
}
function ShowCashFlow(code,name) {
layer_show(name + '现金流明细', 'http://aims.bailuntec.com/view/reports/cash-flow-sku.html?warehouse_code=' + code,'90%','90%');
}
function ShowOrderList(name,t,warehousecode) {
var start = '@(ViewBag.StartOneDate)';
var end = '@(ViewBag.EndDate)';
if (t == 7) {
start = '@(ViewBag.StartSevenDate)';
}
else if (t == 14) {
start = '@(ViewBag.StartFourteenDate)';
}
else if (t == 30) {
start = '@(ViewBag.StartThirtyDate)';
}
var url = 'http://oms.bailuntec.com/#/bailun-order/all-orders?baseQueryKey=SkuNo_Accurate&dateType=payTime&daterange=' + start + '&daterange=' + end + '&wareNo=' + warehousecode + '&orderStatus=0&orderStatus=1&orderStatus=3';
layer_show(name + " 的订单明细", url, '90%', '90%');
layer_show(name + "=》" + title + '的趋势图', '@Url.Content("~/Reports/Warehouse/InventorySummaryChart?warehousecode=")' + code + '&warehousename=' + name + '&key=' + key + '&title=' + title,'90%','90%');
}
</script>
......

@{
//ViewData["Title"] = "仓库数据趋势图";
Layout = "~/Pages/Shared/_MainLayout.cshtml";
ViewBag.Nav = new string[] { "库存汇总分析", "库存数据分析趋势图" };
}
<div class="row">
<div class="col-sm-12">
@*<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>日期:</label>
<input id="start" name="start" class="form-control" value="@(ViewBag.start)" placeholder="请选择开始日期" />至
<input id="end" name="end" class="form-control" value="@(ViewBag.end)" placeholder="请选择结束日期" />
</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">
<div id="echart-contain" style="width:100%;height:480px;">
</div>
</div>
</div>
</div>
@section scripts{
<script src="~/js/echarts.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
getData();
})
function getData() {
$.submit({
type:'POST',
url: '@Url.Content("~/Reports/Warehouse/InventorySummaryChartJson")',
paramData: 'warehousecode=@(ViewBag.warehousecode)&key=@(ViewBag.key)',
func: function (result) {
if (result) {
showChart('@Html.Raw(ViewBag.warehousename)', result.dates, result.val);
}
}
})
}
function showChart(title, category, vals) {
// 基于准备好的dom,初始化echarts实例
var myChart = echarts.init(document.getElementById('echart-contain'));
option = {
title: {
text: title
},
tooltip: {
trigger: 'axis'
},
legend: {
data: ['@Html.Raw(ViewBag.title)']
},
grid: {
left: '3%',
right: '4%',
bottom: '3%',
containLabel: true
},
toolbox: {
feature: {
saveAsImage: {}
}
},
xAxis: {
type: 'category',
boundaryGap: false,
data: category
},
yAxis: {
type: 'value'
},
series: [
{
name: '@Html.Raw(ViewBag.title)',
type: 'line',
stack: '总量',
data: vals
}
]
};
// 使用刚指定的配置项和数据显示图表。
myChart.setOption(option);
}
</script>
}
......@@ -37,7 +37,7 @@
{
foreach (var item in ViewBag.listWarehouse)
{
<option value="@item.warehouse_code" @(ViewBag.warehousecode == item.warehouse_code?"selected":"")>@item.warehouse_name</option>
<option value="@item.warehouse_code" @(ViewBag.warehousecode == item.warehouse_code ? "selected" : "")>@item.warehouse_name</option>
}
}
</select>
......@@ -93,6 +93,7 @@
@section css{
<link href="~/css/zTreeStyle/zTreeStyle.css" rel="stylesheet" type="text/css" />
<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.6-rc.0/css/select2.min.css" rel="stylesheet" />
<link href="~/css/bootstrap-table-fixed-columns.css" rel="stylesheet" />
<style>
.mules {
white-space: nowrap;
......@@ -105,6 +106,7 @@
<script src="~/js/jquery.ztree.core.min.js"></script>
<script src="~/js/jquery.ztree.excheck.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.6-rc.0/js/select2.min.js"></script>
<script src="~/js/bootstrap-table-fixed-columns.js" type="text/javascript"></script>
<script type="text/javascript">
var tb;
var zTreeObj;
......@@ -263,10 +265,13 @@
s = '';
}
var url = '@Url.Content("~/Reports/Warehouse/ListWareHouseSkuJson")' + '?' + $("#toolbar").serialize() + '&skucategoryids=' + s;
var url = '@Url.Content("~/Reports/Warehouse/ListWareHouseSkuJson")' + '?' + $("#toolbar").serialize() + '&skucategoryids=' + s+'&onedaysalescount=@(ViewBag.onedaysalescount)';
if (tb == undefined) {
tb = OnlyTable("roletable", columns, url, "",);
tb = OnlyTable("roletable", columns, url, "", {},{
fixedcol: true,
fixedcolnum: 1
});
}
else {
tb.bootstrapTable('refresh', { url: url });
......
var baseUrl = 'http://data.bailuntec.com'; //'http://localhost:59628/';//
var baseUrl = 'http://localhost:59628/';//'http://data.bailuntec.com'; //
var globalOrderSort='';
var globalOrderType = '';
......
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