Commit 196f14bf by guanzhenshan

增加库龄列表,增加导出库龄明细

parent 8ac3493b
using System;
using System.Collections.Generic;
using System.Text;
namespace Bailun.DC.Models
{
public class dc_mid_stock_date
{
/// <summary>
/// auto_increment
/// </summary>
public int id { get; set; }
/// <summary>
///
/// </summary>
public DateTime gmt_create { get; set; }
/// <summary>
///
/// </summary>
public DateTime gmt_modified { get; set; }
/// <summary>
///
/// </summary>
public string bailun_sku { get; set; }
/// <summary>
///
/// </summary>
public string warehouse_code { get; set; }
/// <summary>
///
/// </summary>
public string warehouse_name { get; set; }
/// <summary>
///
/// </summary>
public int quantity_stock { get; set; }
/// <summary>
///
/// </summary>
public DateTime stock_time { get; set; }
/// <summary>
///
/// </summary>
public decimal unit_price { get; set; }
/// <summary>
///
/// </summary>
public int has_transfer { get; set; }
/// <summary>
///
/// </summary>
public DateTime report_date { get; set; }
/// <summary>
/// 金额
/// </summary>
public decimal amount { get; set; }
}
}
...@@ -999,5 +999,143 @@ namespace Bailun.DC.Services ...@@ -999,5 +999,143 @@ namespace Bailun.DC.Services
#endregion #endregion
#region 库龄
/// <summary>
/// sku库龄列表
/// </summary>
/// <param name="parameter">分页信息</param>
/// <param name="sku">sku编码</param>
/// <param name="warehouse">仓库编码</param>
/// <param name="start">开始时间</param>
/// <param name="end">结束时间</param>
/// <param name="total"></param>
/// <returns></returns>
public List<dc_mid_stock_date> ListStockDate(BtTableParameter parameter, string sku, string warehousetype, string warehouse,DateTime? start,DateTime? end,ref int total)
{
var sqlparam = new DynamicParameters();
var sql = "select t1.bailun_sku,t1.warehouse_code,t2.warehouse_name,sum(t1.quantity_stock) as quantity_stock,sum(t1.quantity_stock*t1.unit_price) as amount from dc_mid_stock_date t1 ";
var sqlwhere = " join dc_base_warehouse t2 on t1.warehouse_code=t2.warehouse_code ";
if (!string.IsNullOrEmpty(warehousetype))
{
sqlwhere += " and t2.hq_type=@warehousetype ";
sqlparam.Add("warehousetype", warehousetype);
}
sqlwhere += " where t1.quantity_stock>0 ";
if (!string.IsNullOrEmpty(sku))
{
sqlwhere += " and t1.bailun_sku = @sku";
sqlparam.Add("sku", sku);
}
if (!string.IsNullOrEmpty(warehouse))
{
sqlwhere += " and t1.warehouse_code=@warehouse";
sqlparam.Add("warehouse", warehouse);
}
if (start.HasValue)
{
sqlwhere += " and t1.stock_time>=@start";
sqlparam.Add("start", start.Value);
}
if (end.HasValue)
{
sqlwhere += " and t1.stock_time<@end";
sqlparam.Add("end", end.Value.AddDays(1));
}
sqlwhere += " group by t1.bailun_sku,t1.warehouse_code";
var sqlsort = "";
if (!string.IsNullOrEmpty(parameter.sort))
{
sqlsort += " order by "+parameter.sort+" "+parameter.order;
}
using (var cn = new MySqlConnection(Common.GlobalConfig.ConnectionString))
{
if (cn.State == ConnectionState.Closed)
{
cn.Open();
}
if (parameter.limit == 0)
{
var obj = cn.Query<dc_mid_stock_date>(sql + sqlwhere + sqlsort, sqlparam, null, true, 2 * 60).AsList();
return obj;
}
else
{
var obj = cn.Page<dc_mid_stock_date>(parameter.pageIndex, parameter.limit, sql + sqlwhere + sqlsort, ref total, sqlparam, "select count(*) from (select t1.bailun_sku,t1.warehouse_code from dc_mid_stock_date t1 " + sqlwhere + ") tb", 2 * 60).AsList();
return obj;
}
}
}
/// <summary>
/// sku库龄列表汇总
/// </summary>
/// <param name="sku">sku编码</param>
/// <param name="warehouse">仓库编码</param>
/// <param name="start">开始时间</param>
/// <param name="end">结束时间</param>
/// <returns></returns>
public dc_mid_stock_date ListStockDateCount(string sku, string warehousetype, string warehouse, DateTime? start, DateTime? end)
{
var sqlparam = new DynamicParameters();
var sql = "select sum(t1.quantity_stock) as quantity_stock,sum(t1.quantity_stock*t1.unit_price) as amount from dc_mid_stock_date t1 ";
var sqlwhere = " join dc_base_warehouse t2 on t1.warehouse_code=t2.warehouse_code ";
if (!string.IsNullOrEmpty(warehousetype))
{
sqlwhere += " and t2.hq_type=@warehousetype ";
sqlparam.Add("warehousetype", warehousetype);
}
sqlwhere += " where t1.quantity_stock>0 ";
if (!string.IsNullOrEmpty(sku))
{
sqlwhere += " and t1.bailun_sku = @sku";
sqlparam.Add("sku", sku);
}
if (!string.IsNullOrEmpty(warehouse))
{
sqlwhere += " and t1.warehouse_code=@warehouse";
sqlparam.Add("warehouse", warehouse);
}
if (start.HasValue)
{
sqlwhere += " and t1.stock_time>=@start";
sqlparam.Add("start", start.Value);
}
if (end.HasValue)
{
sqlwhere += " and t1.stock_time<@end";
sqlparam.Add("end", end.Value.AddDays(1));
}
using (var cn = new MySqlConnection(Common.GlobalConfig.ConnectionString))
{
if (cn.State == ConnectionState.Closed)
{
cn.Open();
}
var obj = cn.QueryFirstOrDefault<dc_mid_stock_date>(sql+sqlwhere,sqlparam,null,2 * 60);
return obj;
}
}
#endregion
} }
} }
...@@ -146,6 +146,153 @@ namespace Bailun.DC.Web.Areas.Reports.Controllers ...@@ -146,6 +146,153 @@ namespace Bailun.DC.Web.Areas.Reports.Controllers
ms.Position = 0; ms.Position = 0;
return File(ms, "text/csv", filename + ".csv"); return File(ms, "text/csv", filename + ".csv");
} }
/// <summary>
/// sku库龄列表
/// </summary>
/// <returns></returns>
public ActionResult ListInventoryAging()
{
return View();
}
/// <summary>
/// sku库龄列表
/// </summary>
/// <param name="parameter">分页信息</param>
/// <param name="sku">sku编码</param>
/// <param name="warehouse">仓库编码</param>
/// <param name="type">库龄,3:3个月以上,6:6个月以上,12:1年以上,24:2年以上,36:3年以上,4:3个月以上,6个月以下,7:6个月以上,12个月以下,13:12个月以上,24个月以下,25:24个月以上,36个月以下</param>
/// <returns></returns>
public string ListInventoryAgingJson(BtTableParameter parameter, string sku, string warehouse,string warehousetype, int type)
{
var total = 0;
var start = DateTime.Parse("1990-01-01");
var end = DateTime.Now;
switch (type)
{
case 3:
case 6:
case 12:
case 24:
case 36:
end = end.AddMonths(-type);
break;
case 4:
start = DateTime.Now.AddMonths(-6);
end = DateTime.Now.AddMonths(-3);
break;
case 7:
start = DateTime.Now.AddMonths(-12);
end = DateTime.Now.AddMonths(-6);
break;
case 13:
start = DateTime.Now.AddMonths(-24);
end = DateTime.Now.AddMonths(-12);
break;
case 25:
start = DateTime.Now.AddMonths(-36);
end = DateTime.Now.AddMonths(-24);
break;
}
var _service = new Services.InventoryServices();
var obj = _service.ListStockDate(parameter, sku,warehousetype,warehouse, start, end, ref total);
var objCount = _service.ListStockDateCount(sku, warehousetype, warehouse, start, end);
var list = obj.Select(a => new {
a.bailun_sku,
a.warehouse_code,
a.warehouse_name,
quantity_stock = a.quantity_stock.ToString("N0"),
amount = a.amount.ToString("N2"),
});
return JsonConvert.SerializeObject(new { total = total, rows = list,
count_row = new {
warehouse_name = "总计",
quantity_stock = objCount.quantity_stock.ToString("N0"),
amount = objCount.amount.ToString("N2")
}
});
}
/// <summary>
/// 导出库龄明细
/// </summary>
/// <param name="sku"></param>
/// <param name="warehouse">仓库编码</param>
/// <param name="type">库龄,3:3个月以上,6:6个月以上,12:1年以上,24:2年以上,36:3年以上,4:3个月以上,6个月以下,7:6个月以上,12个月以下,13:12个月以上,24个月以下,25:24个月以上,36个月以下</param>
/// <returns></returns>
public ActionResult ExportInventoryAging(string sku,string warehousetype, string warehouse, int type)
{
var typename = "";
var total = 0;
var start = DateTime.Parse("1990-01-01");
var end = DateTime.Now;
switch (type)
{
case 3:
case 6:
case 12:
case 24:
case 36:
typename = type + "个月以上的";
end = end.AddMonths(-type);
break;
case 4:
typename = "3至6个月的";
start = DateTime.Now.AddMonths(-6);
end = DateTime.Now.AddMonths(-3);
break;
case 7:
typename = "6至12个月的";
start = DateTime.Now.AddMonths(-12);
end = DateTime.Now.AddMonths(-6);
break;
case 13:
typename = "12至24个月的";
start = DateTime.Now.AddMonths(-24);
end = DateTime.Now.AddMonths(-12);
break;
case 25:
typename = "24至36个月的";
start = DateTime.Now.AddMonths(-36);
end = DateTime.Now.AddMonths(-24);
break;
}
var _service = new Services.InventoryServices();
var obj = _service.ListStockDate(new BtTableParameter { limit=0}, sku, warehousetype, warehouse, start, end, ref total);
var colNames = new List<string> {"sku","仓库编码","仓库名称", "库存数量", "库存金额"};
var list = new List<string>();
foreach (var item in obj)
{
list.Add(item.bailun_sku + "|" + item.warehouse_code + "|" + item.warehouse_name + "|" + item.quantity_stock + "|" + item.amount);
}
var guid = Guid.NewGuid().ToString();
var filename = typename + "库龄明细" + DateTime.Now.ToString("yyyyMMddHHmmss");
var filepath = _hostingEnvironment.WebRootPath + "\\Files\\Report\\" + DateTime.Now.ToString("yyyy-MM-dd") + "\\";
ToCSV(list, colNames, guid, filepath);
var ms = new System.IO.MemoryStream();
using (var f = new System.IO.FileStream(filepath + guid + ".csv", System.IO.FileMode.Open))
{
f.CopyTo(ms);
}
ms.Position = 0;
return File(ms, "text/csv", filename + ".csv");
}
} }
} }
\ No newline at end of file
...@@ -235,7 +235,8 @@ ...@@ -235,7 +235,8 @@
pick: '#'+id, pick: '#'+id,
// 不压缩image, 默认如果是jpeg,文件上传前会压缩一把再上传! // 不压缩image, 默认如果是jpeg,文件上传前会压缩一把再上传!
resize: false, resize: false,
auto:true auto: true,
multiple: true,
}); });
uploader.on('uploadSuccess', function (file, response) { uploader.on('uploadSuccess', function (file, response) {
......

@{
ViewData["Title"] = "库龄列表";
Layout = "~/Pages/Shared/_MainLayout.cshtml";
ViewBag.Nav = new string[] { "库存", "库龄列表" };
}
@*3:3个月以上,6:6个月以上,12:1年以上,24:2年以上,36:3年以上,4:3个月以上,6个月以下,7:6个月以上,12个月以下,13:12个月以上,24个月以下,25:24个月以上,36个月以下*@
<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>
<select id="type" name="type" class="form-control">
<option value="3">3个月以上</option>
<option value="4">3至6个月的</option>
<option value="6">6个月以上</option>
<option value="7">6至12个月的</option>
<option value="12">1年以上</option>
<option value="13">1至2年的</option>
<option value="24">2年以上</option>
<option value="25">2至3年的</option>
<option value="36">3年以上</option>
</select>
</div>
<div class="form-group">
<label>仓库类型:</label>
<select id="warehousetype" name="warehousetype" class="form-control">
<option value="">选择仓库类型</option>
<option value="国内仓">国内仓</option>
<option value="海外仓">海外仓</option>
<option value="FBA仓">FBA仓</option>
<option value="第三方仓库">第三方仓库</option>
<option value="半成品仓">半成品仓</option>
<option value="耗材仓">耗材仓</option>
</select>
</div>
<div class="form-group">
<label>仓库:</label>
<select id="warehouse" name="warehouse" class="form-control">
<option value="">请选择仓库</option>
</select>
</div>
<div class="form-group">
<label>&nbsp;</label>
<input id="sku" name="sku" class="form-control" style="width:150px" placeholder="Sku编码" />
</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>
<button type="button" class="btn btn-success" onclick="exportlist();">导出</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>
@section css{
<style>
.mules {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
</style>
}
@section scripts{
<script type="text/javascript">
var tb;
$(document).ready(function () {
var height = document.body.clientHeight;
$("#roletable").attr("data-height", (height - 160));
list();
$('#warehousetype').change(function () {
listwarehouse();
})
})
function list() {
var columns = [
{ field: 'bailun_sku', title: 'sku编码', width: '130' },
{ field: 'warehouse_name', title: '仓库名称', width: '150', iscount: true },
{ field: 'quantity_stock', title: '库存数量', width: '150', iscount: true, sortable: true },
{ field: 'amount', title: '库存金额', width: '150', iscount: true, sortable: true },
];
var url = '@Url.Content("~/Reports/Sku/ListInventoryAgingJson")' + '?' + $("#toolbar").serialize();
if (tb == undefined) {
tb = OnlyTable("roletable", columns, url, "", {
showfooter: true, loadsuccess: function (d) {
//替换汇总行的相关列值
var tr = $('.fixed-table-footer').find('tr');
for (var c in columns) {
var key = columns[c].field;
if (columns[c].iscount) {
for (var v in d.count_row) {
if (key == v) {
tr.find('td').eq(c).children('div').first().html(d.count_row[v]);
break;
}
}
}
}
}
});
}
else {
tb.bootstrapTable('refresh', { url: url });
}
}
function listwarehouse() {
var type = $('#warehousetype').val();
$.submit({
url: '@Url.Content("~/Home/ListWareHouse")',
paramData: 'warehousetype=' + type,
type:'POST',
func: function (result) {
if (result != null && result != undefined) {
$('#warehouse').html('<option value="">仓库不限</option>');
for (var i = 0; i < result.length; i++) {
$('#warehouse').append('<option value="' + result[i].warehouse_code + '">' + result[i].warehouse_name + '</option>');
}
}
}
})
}
function exportlist() {
if (confirm("确定要导出明细吗?")) {
//ExportInventoryAging
window.open('@Url.Content("~/Reports/Sku/ExportInventoryAging")' + '?' + $("#toolbar").serialize(), '_blank');
}
}
</script>
}
...@@ -115,6 +115,9 @@ ...@@ -115,6 +115,9 @@
<li> <li>
<a class="J_menuItem" href="@Url.Content("~/Reports/Warehouse/WarehouseRedundancy")" data-index="0">仓库库存分析报表</a> <a class="J_menuItem" href="@Url.Content("~/Reports/Warehouse/WarehouseRedundancy")" data-index="0">仓库库存分析报表</a>
</li> </li>
<li>
<a class="J_menuItem" href="@Url.Content("~/Reports/Sku/ListInventoryAging")" data-index="0">库龄列表</a>
</li>
</ul> </ul>
</li> </li>
<li> <li>
......
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