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
}
......

@{
//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