Commit ce4482d7 by guanzhenshan

增加调拨在途报表和导出功能

parent 39712784
using System;
using System.Collections.Generic;
using System.Text;
namespace Bailun.DC.Models.Allot
{
/// <summary>
/// 调拨单sku明细
/// </summary>
public class mAllotOrderSku
{
/// <summary>
/// 调拨单号
/// </summary>
public string code { get; set; }
/// <summary>
/// 计划单号
/// </summary>
public string schedulecode { get; set; }
/// <summary>
/// 调拨状态
/// </summary>
public int stateid { get; set; }
/// <summary>
/// 起始仓库
/// </summary>
public string sourcewareno { get; set; }
/// <summary>
/// 起始仓库名称
/// </summary>
public string sourcewarename { get; set; }
/// <summary>
/// 目的仓库编码
/// </summary>
public string targetwareno { get; set; }
/// <summary>
/// 目的仓库名称
/// </summary>
public string targetwarename { get; set; }
/// <summary>
/// 百伦sku
/// </summary>
public string sku { get; set; }
/// <summary>
/// 调拨数量
/// </summary>
public int deliverycount { get; set; }
/// <summary>
/// 入库数量
/// </summary>
public int storagecount { get; set; }
/// <summary>
/// 在途数量
/// </summary>
public int onwaycount { get; set; }
}
}
......@@ -150,7 +150,127 @@ namespace Bailun.DC.Services
return obj.AsList();
}
}
/// <summary>
/// 获取调拨单的在途明细
/// </summary>
/// <param name="parameter">分页信息</param>
/// <param name="orderno">调拨单号</param>
/// <param name="bailun_sku">百伦SKU</param>
/// <param name="warehousetype">目的仓库类型</param>
/// <param name="warehousecode">目的仓库编码</param>
/// <param name="total">符合条件的记录数</param>
/// <returns></returns>
public List<Models.Allot.mAllotOrderSku> ListAllotOnWay(BtTableParameter parameter, string orderno,string bailun_sku,string warehousetype,string warehousecode,ref int total)
{
var sql = $@"select t1.code,t1.schedulecode,t1.stateid,t1.sourcewareno,t1.sourcewarename,t1.targetwareno,t1.targetwarename,t2.sku,t2.deliverycount,t2.storagecount,t2.deliverycount-t2.storagecount as onwaycount from dc_base_transfer_info t1
join dc_base_transfer_info_skus t2 on t1.dataid=t2.dataid and t2.deliverycount>t2.storagecount
join dc_base_warehouse t3 on t1.targetwareno=t3.warehouse_code
where t1.stateid<5 and t1.isdeleted=0 and t1.isexception=0";
var sqlparam = new DynamicParameters();
if (!string.IsNullOrEmpty(orderno))
{
sql += " and t1.code=@code";
sqlparam.Add("code", orderno);
}
if (!string.IsNullOrEmpty(bailun_sku))
{
sql += " and t2.sku=@sku";
sqlparam.Add("sku", bailun_sku);
}
if (!string.IsNullOrEmpty(warehousetype))
{
sql += " and t3.hq_type=@warehousetype";
sqlparam.Add("warehousetype", warehousetype);
}
if (!string.IsNullOrEmpty(warehousecode))
{
sql += " and t1.targetwareno=@warehousecode";
sqlparam.Add("warehousecode", warehousecode);
}
using (var cn = new MySqlConnection(Common.GlobalConfig.ConnectionString))
{
if (cn.State == System.Data.ConnectionState.Closed)
{
cn.Open();
}
if (parameter.limit == 0)
{
var obj = cn.Query<Models.Allot.mAllotOrderSku>(sql, sqlparam);
return obj.AsList();
}
else
{
var obj = cn.Page<Models.Allot.mAllotOrderSku>(parameter.pageIndex, parameter.limit, sql, ref total, sqlparam);
return obj.AsList();
}
}
}
/// <summary>
/// 获取调拨单的在途明细汇总
/// </summary>
/// <param name="orderno">调拨单号</param>
/// <param name="bailun_sku">百伦SKU</param>
/// <param name="warehousetype">目的仓库类型</param>
/// <param name="warehousecode">目的仓库编码</param>
/// <returns></returns>
public Models.Allot.mAllotOrderSku ListAllotOnWayCount(string orderno, string bailun_sku, string warehousetype, string warehousecode)
{
var sql = $@"select sum(t2.deliverycount) as deliverycount,sum(t2.storagecount) storagecount,sum(t2.deliverycount-t2.storagecount) onwaycount from dc_base_transfer_info t1
join dc_base_transfer_info_skus t2 on t1.dataid=t2.dataid and t2.deliverycount>t2.storagecount
join dc_base_warehouse t3 on t1.targetwareno=t3.warehouse_code
where t1.stateid<5 and t1.isdeleted=0 and t1.isexception=0";
var sqlparam = new DynamicParameters();
if (!string.IsNullOrEmpty(orderno))
{
sql += " and t1.code=@code";
sqlparam.Add("code", orderno);
}
if (!string.IsNullOrEmpty(bailun_sku))
{
sql += " and t2.sku=@sku";
sqlparam.Add("sku", bailun_sku);
}
if (!string.IsNullOrEmpty(warehousetype))
{
sql += " and t3.hq_type=@warehousetype";
sqlparam.Add("warehousetype", warehousetype);
}
if (!string.IsNullOrEmpty(warehousecode))
{
sql += " and t1.targetwareno=@warehousecode";
sqlparam.Add("warehousecode", warehousecode);
}
using (var cn = new MySqlConnection(Common.GlobalConfig.ConnectionString))
{
if (cn.State == System.Data.ConnectionState.Closed)
{
cn.Open();
}
var obj = cn.QueryFirstOrDefault<Models.Allot.mAllotOrderSku>(sql,sqlparam);
return obj;
}
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Bailun.DC.Models;
using Bailun.ServiceFabric.Authorize;
using Bailun.ServiceFabric.Core.Extension;
using Bailun.ServiceFabric.Core.Extension.HttpContext;
using Bailun.ServiceFabric.Extension;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using System.Linq;
namespace Bailun.DC.Web.Areas.Reports.Controllers
{
/// <summary>
/// 在途相关
/// </summary>
[Area("Reports")]
public class OnWayController : Base.BaseController
{
private readonly IHostingEnvironment _hostingEnvironment;
public OnWayController(IHostingEnvironment hostingEnvironment)
{
_hostingEnvironment = hostingEnvironment;
}
public IActionResult Index()
{
return View();
}
/// <summary>
/// 调拨在途明细
/// </summary>
/// <returns></returns>
public ActionResult ListAllot()
{
return View();
}
/// <summary>
/// 调拨在途明细
/// </summary>
/// <returns></returns>
[BailunAuthentication(LoginMode.Enforce)]
public string ListAllotJson(BtTableParameter parameter,string orderno,string sku,string warehousetype,string warehousecode)
{
var total = 0;
var companyid = HttpContextHelper.Current?.User.GetCompanyId().ToInt32();
var _service = new Services.AllotServices();
var obj = _service.ListAllotOnWay(parameter, orderno, sku, warehousetype, warehousecode, ref total);
var list = obj.Select(a=> new {
a.code,
a.deliverycount,
a.onwaycount,
a.schedulecode,
a.sku,
a.sourcewarename,
stateid = Enum.GetName(typeof(Models.Allot.EnumAllotStatus),a.stateid),
a.storagecount,
a.targetwarename
});
var objCount = _service.ListAllotOnWayCount(orderno, sku, warehousetype, warehousecode);
return JsonConvert.SerializeObject(new
{
total = total,
rows = list,
companyid = companyid,
isexport = Services.UserAuthorityServices.checkUserExportAuthority("ExportAllotOnWay", HttpContextHelper.Current.User.GetUserName()),
count_row = new
{
sku = "总计",
objCount.deliverycount,
objCount.storagecount,
objCount.onwaycount
}
});
}
/// <summary>
/// 导出调拨在途明细
/// </summary>
/// <param name="orderno">调拨单号</param>
/// <param name="sku">sku</param>
/// <param name="warehousetype">目的仓库类型</param>
/// <param name="warehousecode">目的仓库编码</param>
/// <returns></returns>
public ActionResult ExportListAllot(string orderno, string sku, string warehousetype, string warehousecode)
{
var total = 0;
var _service = new Services.AllotServices();
var obj = _service.ListAllotOnWay(new BtTableParameter { limit=0,offset=1}, orderno, sku, warehousetype, warehousecode, ref total);
var colNames = new List<string> { "调拨单号", "计划单号", "起始仓库", "目的仓库名称", "sku", "调拨数量", "入库数量", "在途数量", "调拨状态"};
var list = new List<string>();
foreach (var item in obj)
{
list.Add(item.code + "|" + item.schedulecode + "|" + item.sourcewarename + "|" + item.targetwarename + "|" + item.sku + "|" +
item.deliverycount + "|" + item.storagecount+"|"+item.onwaycount+"|"+ Enum.GetName(typeof(Models.Allot.EnumAllotStatus), item.stateid)
);
}
var guid = Guid.NewGuid().ToString();
var filename = "调拨在途明细 " + 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

@{
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>
<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>
</select>
</div>
<div class="form-group">
<label>目的仓库:</label>
<select id="warehousecode" name="warehousecode" class="form-control">
<option value="">选择仓库</option>
</select>
</div>
<div class="form-group">
<label>&nbsp;</label>
<input id="orderno" name="orderno" class="form-control" style="width:130px;" placeholder="调拨单号" />
</div>
<div class="form-group">
<label>&nbsp;</label>
<input id="sku" name="sku" class="form-control" style="width:130px;" 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 () {
laydate.render({ elem: '#start' });
laydate.render({ elem: '#end' });
var height = document.body.clientHeight;
$("#roletable").attr("data-height", (height - 170));
list();
$('#warehousetype').change(function () {
listwarehouse();
})
})
function list() {
var columns = [
{ field: 'code', title: '调拨单号', width: '160', iscount: true },
{ field: 'schedulecode', title: '计划单号', width: '150'},
{ field: 'stateid', title: '调拨状态', width: '100'},
{ field: 'sourcewarename', title: '起始仓库', width: '130', iscount: true },
{ field: 'targetwarename', title: '目的仓库', width: '130', sortable: false },
{ field: 'sku', title: 'sku', width: '120', sortable: false },
{ field: 'deliverycount', title: '调拨数量', width: '120', iscount: true },
{ field: 'storagecount', title: '已入库数量', width: '120', iscount: true},
{ field: 'onwaycount', title: '在途数量', width: '120', iscount: true },
{ field: 'stateid', title: '调拨状态', width: '120'}
];
var url = '@Url.Content("~/Reports/OnWay/ListAllotJson")' + '?' + $("#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/ListWarehouseFromStockAndSales")',
paramData: 'warehousetype=' + type,
type:'POST',
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].warehouse_code + '">' + result[i].warehouse_name + '</option>');
}
}
}
})
}
function exportlist() {
window.open('@Url.Content("~/Reports/OnWay/ExportListAllot?")' + $("#toolbar").serialize(), '_blank');
}
</script>
}
......@@ -57,15 +57,27 @@ namespace Bailun.DC.Web.Controllers
[HttpPost]
public JsonResult SetCookie(string token)
{
if (!string.IsNullOrEmpty(token))
{
HttpContext.Response.Cookies.Append("BailunToken", token, new Microsoft.AspNetCore.Http.CookieOptions() { Expires = DateTime.Now.AddDays(1) });
return Json(new {
success = true,
msg = "",
});
}
return Json("");
return Json(new {
success = false,
msg = "请重新登录"
});
}
public ActionResult Main()
{
#if DEBUG
var cookie = "Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6ImQ3ZjgyYjYyN2E1OWY4YWJkMWU2OTI5MTlkNzc1NmNkIiwidHlwIjoiSldUIn0.eyJuYmYiOjE1OTUyMDkyMjMsImV4cCI6MTU5NTI0NTIyMywiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo1MDAxIiwiYXVkIjpbImh0dHA6Ly9sb2NhbGhvc3Q6NTAwMS9yZXNvdXJjZXMiLCJiYWlsdW5BcGkiXSwiY2xpZW50X2lkIjoiYmFpbHVuQ2xpZW50Iiwic3ViIjoi6buE5pmUIiwiYXV0aF90aW1lIjoxNTk1MjA5MjIzLCJpZHAiOiJsb2NhbCIsIlVzZXJJZCI6IjI5MTk3NzEiLCJzdWNlc3NzIjoidHJ1ZSIsIkNvbXBhbnkiOiJ7XCJJZFwiOjEsXCJDb21wYW55Q29kZVwiOlwiYmFpbHVuXCIsXCJDb21wYW55TmFtZVwiOlwi5bm_5bee55m-5Lym5L6b5bqU6ZO-5pyJ6ZmQ5YWs5Y-4XCJ9IiwiQWxsQ29tcGFueSI6IkZhbHNlIiwiVXNlckNvZGVOZXciOiJCTDE3ODUiLCJVc2VyQ29kZSI6IkJMNTU2NjgyNiIsIk9hVXNlcklkIjoiMTg3Iiwicm9sZXMiOiJbXSIsIkRlcGFydG1lbnQiOiJ7XCJEZXBhcnRtZW50SWRcIjoxODcsXCJOYW1lXCI6XCLotKbliqHnu4RcIixcIkNvZGVcIjpcIkNXQ1dcIn0iLCJzY29wZSI6WyJvcGVuaWQiLCJwcm9maWxlIiwiYmFpbHVuQXBpIl0sImFtciI6WyJjdXN0b20iXX0.NAA4BWBVzSochYuzm5wpw-nq5ipfhzMDGOMgUtk9cIBigb3GKgIP07tJt5EukaXBZu82AQuzz8Z0J8ani2S-b6ZyLLm6bPZBN46zrNmr7B23vw1IC6PzInhFJYyrqdO0U3lmMT8bKKaQHJLsPPa-VvjCYwEiE3HoAehRKYuyqZDr4g1wzPBzwP87QQZPybYMbe4bLdrPhArE-UrRD9EI_HP2XIrz8vJ8lmPJe8s9r02i6_lEwP3D8z4Pn6jiCTvYs461g1RsjHIk7shTfMJfh6Gq9KvSSDwMQDtoLRBe3C-zIgta5WZxthf-wyKojGdLDWhJzjcyrHR8RgHZUqVSIw";
var cookie = "Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6ImQ3ZjgyYjYyN2E1OWY4YWJkMWU2OTI5MTlkNzc1NmNkIiwidHlwIjoiSldUIn0.eyJuYmYiOjE1OTUzMjU1NzksImV4cCI6MTU5NTM2MTU3OSwiaXNzIjoiaHR0cDovL2xvY2FsaG9zdDo1MDAxIiwiYXVkIjpbImh0dHA6Ly9sb2NhbGhvc3Q6NTAwMS9yZXNvdXJjZXMiLCJiYWlsdW5BcGkiXSwiY2xpZW50X2lkIjoiYmFpbHVuQ2xpZW50Iiwic3ViIjoi5YWz5oyv5bGxIiwiYXV0aF90aW1lIjoxNTk1MzI1NTc5LCJpZHAiOiJsb2NhbCIsIlVzZXJJZCI6IjIzNDYiLCJzdWNlc3NzIjoidHJ1ZSIsIkNvbXBhbnkiOiJ7XCJJZFwiOjEsXCJDb21wYW55Q29kZVwiOlwiYmFpbHVuXCIsXCJDb21wYW55TmFtZVwiOlwi5bm_5bee55m-5Lym5L6b5bqU6ZO-5pyJ6ZmQ5YWs5Y-4XCJ9IiwiQWxsQ29tcGFueSI6IkZhbHNlIiwiVXNlckNvZGVOZXciOiJCTDExNjkiLCJVc2VyQ29kZSI6IkJMMTE3MCIsIk9hVXNlcklkIjoiMjM0NiIsInJvbGVzIjoiW3tcIklkXCI6MSxcIlJvbGVDb2RlXCI6XCJJVFwiLFwiUm9sZU5hbWVcIjpcIuezu-e7n-euoeeQhuWRmFwifSx7XCJJZFwiOjI4LFwiUm9sZUNvZGVcIjpcInBwc19lZGl0b3JcIixcIlJvbGVOYW1lXCI6XCLkuqflk4HotYTmlpnlkZhcIn0se1wiSWRcIjozNjgsXCJSb2xlQ29kZVwiOlwib21zX2FkbWluXCIsXCJSb2xlTmFtZVwiOlwib21zX-euoeeQhuWRmFwifSx7XCJJZFwiOjM3MCxcIlJvbGVDb2RlXCI6XCJvbXNfbm9ybWFsXCIsXCJSb2xlTmFtZVwiOlwib21z5pmu6YCa5Lq65ZGYXCJ9LHtcIklkXCI6NTUyLFwiUm9sZUNvZGVcIjpcIkJJX1N1cHBsaWVyX1RyYW5jYXRpb25cIixcIlJvbGVOYW1lXCI6XCLkvpvlupTllYblvoDmnaVcIn0se1wiSWRcIjo1NzAsXCJSb2xlQ29kZVwiOlwiY2FzaGllcl9uZXdcIixcIlJvbGVOYW1lXCI6XCLotKLliqHnrqHnkIbns7vnu5_op5LoibJcIn0se1wiSWRcIjo1NzEsXCJSb2xlQ29kZVwiOlwiY3dfYnNpY3NcIixcIlJvbGVOYW1lXCI6XCLotKLliqHln7rnoYDmnYPpmZBcIn0se1wiSWRcIjo1NzIsXCJSb2xlQ29kZVwiOlwiY3dfYWRtaW4xXCIsXCJSb2xlTmFtZVwiOlwi6LSi5Yqh566h55CG5LiA57qn5p2D6ZmQXCJ9LHtcIklkXCI6NTgwLFwiUm9sZUNvZGVcIjpcImN3X3Rlc3RcIixcIlJvbGVOYW1lXCI6XCLotKLliqHmtYvor5VcIn0se1wiSWRcIjo3MTMsXCJSb2xlQ29kZVwiOlwiZmVlX29yZGluYXJ5XCIsXCJSb2xlTmFtZVwiOlwi6LS555So57O757ufLeaZrumAmuS6uuWRmFwifV0iLCJEZXBhcnRtZW50Ijoie1wiRGVwYXJ0bWVudElkXCI6MjU4LFwiTmFtZVwiOlwi5pWw5o2u5Lit5b-DXCIsXCJDb2RlXCI6XCJcIn0iLCJzY29wZSI6WyJvcGVuaWQiLCJwcm9maWxlIiwiYmFpbHVuQXBpIl0sImFtciI6WyJjdXN0b20iXX0.a-8GkTlqvfiXBHEkQiYB1_zLUXN4djcnfzzLu4bH0Qeb7pCd7dG50P9vECMl325CBHA0-U6Jxhu8pbVS2bcYubpYcyTnluLrcMLqEbAz0d5yjLxVRTLiaU1fB5T0EXM64P0JOsubAVtv5_3AeCcl6TagCU3z79MNwygzcORMYkZOvtj_FbwQhIRJSYVvGUQRnLQjIkaUomwEhclITNYbkGWRv3SLmajbxb5kTMB8KrN4ZdXLByz4Pl5iFHLbTTCZ6IJnk_SDGODfk_iivYZX9dUontkT17P21iHV7NEC5IgNDHCLqjB8Jl8wIA1DYAbixyz-2TMePioppdLZSLVOfw";
#else
//var user = Common.HttpHelper.NetHelper.Request("http://sso.bailuntec.com/GetUserResource");
var cookie = HttpContext.Request.Cookies["BailunToken"];
......@@ -115,7 +127,7 @@ namespace Bailun.DC.Web.Controllers
return View();
}
/// <summary>
/// 无权访问提示页面
/// </summary>
......
......@@ -24,7 +24,7 @@
<script src="css/hplus/js/jquery.min.js?v=2.1.4"></script>
<script src="~/js/jquery.cookie.js" type="text/javascript"></script>
<script src="~/js/common.js?20200720001" type="text/javascript"></script>
<script src="~/js/common.js?20200720003" type="text/javascript"></script>
</head>
<body class="fixed-sidebar full-height-layout gray-bg" style="overflow:hidden">
......
......@@ -61,8 +61,6 @@
</div>
</li>
@if (ViewBag.allcompany == 1 || ViewBag.companyid == 1)
{
if (ViewBag.menus.Count > 0)
......
......@@ -323,7 +323,7 @@ function login() {
else {
token = $.cookie('BailunToken');
if (token == '' || token == undefined || token == null) {
if (token == '' || token == undefined || token==null) {
window.location = "http://sso.bailuntec.com/?returnUrl=" + baseUrl;
return false;
}
......@@ -333,22 +333,15 @@ function login() {
function login_localhost() {
var token = getUrlParam('token');
if (token == '') {
token = $.cookie('BailunToken');
}
if (token != '') {
$.cookie('BailunToken', token, { expires: 1, domain: 'localhost' });
window.location = 'http://localhost:59628/Home/Main?token=' + token;
window.location = 'http://localhost:59628/';
}
else {
token = $.cookie('BailunToken');
if (token == '' || token == undefined || token == null) {
window.location = "http://sso.bailuntec.com/?returnUrl=" + baseUrl;
window.location = "http://sso.bailuntec.com/?returnUrl=http://localhost:59628/";
return false;
}
}
......
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