Commit aca1c23c by guanzhenshan

1、增加sku发货重量差异报表,带导出功能

2、增加获取平台sku销量明细接口
parent ebaf3055
using System;
using System.Collections.Generic;
using System.Text;
namespace Bailun.DC.Models.Orders
{
/// <summary>
/// 平台sku订单明细
/// </summary>
public class dc_base_oms_platform_sku
{
/// <summary>
///
/// </summary>
public int id { get; set; }
/// <summary>
/// 平台订单号
/// </summary>
public string origin_order_id { get; set; }
/// <summary>
/// 平台类型
/// </summary>
public string platform_type { get; set; }
/// <summary>
/// 交易号
/// </summary>
public string transaction_id { get; set; }
/// <summary>
/// 支付时间-平台站点时间
/// </summary>
public DateTime? pay_time_site { get; set; }
/// <summary>
/// 支付时间-北京时间
/// </summary>
public DateTime? pay_time { get; set; }
/// <summary>
/// 支付方法
/// </summary>
public string pay_method { get; set; }
/// <summary>
/// 支付账号
/// </summary>
public string pay_account { get; set; }
/// <summary>
/// 支付状态
/// </summary>
public string pay_status { get; set; }
/// <summary>
/// 收款账号
/// </summary>
public string collection_account { get; set; }
/// <summary>
/// 平台订单类型
/// </summary>
public string platform_order_type { get; set; }
/// <summary>
/// 站点
/// </summary>
public string website { get; set; }
/// <summary>
/// 订单创建时间-北京时间
/// </summary>
public DateTime? create_time { get; set; }
/// <summary>
/// 订单创建时间-平台站点时间
/// </summary>
public DateTime? create_time_site { get; set; }
/// <summary>
/// 订单付款时间-平台站点时间
/// </summary>
public DateTime? paid_time_site { get; set; }
/// <summary>
/// 订单付款时间-北京时间
/// </summary>
public DateTime? paid_time { get; set; }
/// <summary>
/// 销售账号Id
/// </summary>
public string seller_id { get; set; }
/// <summary>
/// 账号id
/// </summary>
public int bailun_account_id { get; set; }
/// <summary>
/// 销售账号
/// </summary>
public string seller_account { get; set; }
/// <summary>
/// (亚马逊特有字段)
/// </summary>
public string seller_order_id { get; set; }
/// <summary>
/// 销售账号邮箱
/// </summary>
public string seller_email { get; set; }
/// <summary>
/// 订单更新时间-北京时间
/// </summary>
public DateTime? order_update_time { get; set; }
/// <summary>
/// 销售订单汇率-转人民币
/// </summary>
public decimal seller_order_exchange_rate { get; set; }
/// <summary>
/// 财务订单汇率-转人民币
/// </summary>
public decimal finance_order_exchange_rate { get; set; }
/// <summary>
/// 人民币转美元汇率
/// </summary>
public decimal cny_to_usd_exchange_rate { get; set; }
/// <summary>
/// Order币种转美元汇率
/// </summary>
public decimal order_to_usd_exchange_rate { get; set; }
/// <summary>
/// 订单币种
/// </summary>
public string order_currency { get; set; }
/// <summary>
/// 销售员
/// </summary>
public string seller_name { get; set; }
/// <summary>
/// 百伦订单号
/// </summary>
public string bailun_order_id { get; set; }
/// <summary>
/// 平台订单状态
/// </summary>
public string platform_order_status { get; set; }
/// <summary>
/// 百伦订单状态
/// </summary>
public string bailun_order_status { get; set; }
/// <summary>
/// 百伦付款状态
/// </summary>
public string bailun_payment_status { get; set; }
/// <summary>
/// 百伦拦截状态
/// </summary>
public string bailun_interception_status { get; set; }
/// <summary>
/// 百伦发货状态
/// </summary>
public string shipping_status { get; set; }
/// <summary>
/// 平台SKU
/// </summary>
public string platform_sku { get; set; }
/// <summary>
/// itemId
/// </summary>
public string item_id { get; set; }
/// <summary>
/// 平台SKU英文标题
/// </summary>
public string platform_sku_title_en { get; set; }
/// <summary>
/// 平台SKU中文标题
/// </summary>
public string platform_sku_title_cn { get; set; }
/// <summary>
/// 平台SKU订单数量
/// </summary>
public int platform_sku_quantity_ordered { get; set; }
/// <summary>
/// 平台SKU发货数量
/// </summary>
public int platform_sku_quantity_shipped { get; set; }
/// <summary>
/// 平台SKU单价
/// </summary>
public decimal platform_sku_unit_price { get; set; }
/// <summary>
/// 收货国家
/// </summary>
public string receipt_country { get; set; }
/// <summary>
/// 收货城市
/// </summary>
public string receipt_city { get; set; }
/// <summary>
/// 收货州或区域
/// </summary>
public string receipt_area { get; set; }
/// <summary>
/// 收货街道
/// </summary>
public string receipt_address { get; set; }
/// <summary>
/// 收货门牌
/// </summary>
public string receipt_address_2 { get; set; }
/// <summary>
/// 收货邮编
/// </summary>
public string receipt_postal_code { get; set; }
/// <summary>
/// 收货人
/// </summary>
public string receiver { get; set; }
/// <summary>
/// 收货电话
/// </summary>
public string receiver_phone { get; set; }
/// <summary>
/// 买家账号Id
/// </summary>
public string buyer_id { get; set; }
/// <summary>
/// 买家账号
/// </summary>
public string buyer_name { get; set; }
/// <summary>
/// 买家邮箱
/// </summary>
public string buyer_email { get; set; }
/// <summary>
/// 是否被平台取消-来自OMS
/// </summary>
public bool has_cancle { get; set; }
/// <summary>
/// 区域Id
/// </summary>
public int area_id { get; set; }
/// <summary>
/// 数据中心创建时间
/// </summary>
public DateTime gmt_create { get; set; }
/// <summary>
/// 数据中心更新时间
/// </summary>
public DateTime gmt_modified { get; set; }
/// <summary>
/// 是否删除-数据中心判断
/// </summary>
public bool has_delete { get; set; }
/// <summary>
/// 是否刷单订单
/// </summary>
public bool has_scalp { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace Bailun.DC.Models
{
public class dc_mid_skudeliver_weighdiff
{
/// <summary>
/// 主键
/// </summary>
public int id { get; set; }
/// <summary>
/// 计算日期
/// </summary>
public DateTime day { get; set; }
/// <summary>
/// 配货单号
/// </summary>
public string pick_order_id { get; set; }
/// <summary>
/// sku编码
/// </summary>
public string bailun_sku { get; set; }
/// <summary>
/// sku重量
/// </summary>
public decimal weight { get; set; }
/// <summary>
/// sku发货重量
/// </summary>
public decimal bailun_sku_outbound_weight { get; set; }
/// <summary>
/// 差异重量
/// </summary>
public decimal diffweigh { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime createtime { get; set; }
}
}
......@@ -991,7 +991,6 @@ namespace Bailun.DC.Services
{
var sqlparam = new DynamicParameters();
var sql = "select tb.platform_type,count(tb.bailun_order_id) order_count,sum(tb.amount_sales*"+(isUSD? "tb.order_to_usd_exchange_rate" : "tb.seller_order_exchange_rate") + ") as amount_sales,sum(tb.cost_platform_fee*(if(tb.platform_type='Ebay'," + (isUSD ? "tb.other_to_usd_exchange_rate" : "tb.seller_other_exchange_rate") + "," + (isUSD ? "tb.order_to_usd_exchange_rate" : "tb.seller_order_exchange_rate") + "))) as cost_platform_fee,sum(cost_first*"+ (isUSD ? "tb.cny_to_usd_exchange_rate" : "1") + ") as cost_first,sum(cost_tail*" + (isUSD ? "tb.cny_to_usd_exchange_rate" : "1") + ") cost_tail,sum(cost_handle_bailun*" + (isUSD ? "tb.cny_to_usd_exchange_rate" : "1") + ") cost_handle_bailun,sum(cost_handle_platform*" + (isUSD ? "tb.cny_to_usd_exchange_rate" : "1") + ") cost_handle_platform,sum(amount_refund*" + (isUSD ? "tb.order_to_usd_exchange_rate" : "tb.seller_order_exchange_rate") + ") amount_refund,sum(cost_product*" + (isUSD ? "tb.cny_to_usd_exchange_rate" : "1") + ") cost_product,sum(profit_total*" + (isUSD ? "tb.cny_to_usd_exchange_rate" : "1") + ") profit_total,(sum(profit_total*" + (isUSD ? "tb.cny_to_usd_exchange_rate" : "1") + ")/sum(tb.amount_sales*" + (isUSD ? "tb.order_to_usd_exchange_rate" : "tb.seller_order_exchange_rate") + ")) profit_rate,count(amount_prepaid>0 or null) as noshippingcount,sum(amount_prepaid*" + (isUSD ? "tb.cny_to_usd_exchange_rate" : "1") + ") amount_prepaid from dc_base_oms_order tb ";
//var presql = "select platform_type,sum(amount_prepaid) amount_prepaid from dc_base_oms_sku tb ";
if (shipstart.HasValue || shipend.HasValue)
{
......@@ -999,42 +998,35 @@ namespace Bailun.DC.Services
}
sql += " where tb.bailun_order_status!='Canceled' and tb.has_scalp=0 ";
//presql += " where tb.bailun_order_status!='Canceled' and tb.amount_prepaid>0";
if (!string.IsNullOrWhiteSpace(platform))
{
sql += " and tb.platform_type=@platform_type";
//presql += " and tb.platform_type=@platform_type";
sqlparam.Add("platform_type", platform);
}
if (start.HasValue)
{
sql += " and tb.paid_time>=@paid_time_start";
//presql += " and tb.paid_time>=@paid_time_start";
sqlparam.Add("paid_time_start", start.Value);
}
if (end.HasValue)
{
sql += " and tb.paid_time<@paid_time_end";
//presql += " and tb.paid_time<@paid_time_end";
sqlparam.Add("paid_time_end", end.Value.AddDays(1));
}
if (shipstart.HasValue)
{
sql += " and ((tb.platform_type='FBA' and tb.paid_time>=@shipstart) or (tb.platform_type!='FBA' and t1.shipping_time>=@shipstart))";
//presql += " and ((tb.platform_type='FBA' and tb.paid_time>=@shipstart) or (tb.platform_type!='FBA' and t1.shipping_time>=@shipstart))";
sqlparam.Add("shipstart",shipstart.Value);
}
if (shipend.HasValue)
{
sql += " and ((tb.platform_type='FBA' and tb.paid_time<@shipend) or (tb.platform_type!='FBA' and t1.shipping_time<@shipend))";
//presql += " and ((tb.platform_type='FBA' and tb.paid_time<@shipend) or (tb.platform_type!='FBA' and t1.shipping_time<@shipend))";
sqlparam.Add("shipend", shipend.Value.AddDays(1));
}
sql += " group by tb.platform_type";
//presql += " group by platform_type";
using (var cn = new MySqlConnection(Common.GlobalConfig.ConnectionString))
{
......@@ -1044,21 +1036,7 @@ namespace Bailun.DC.Services
}
var obj = cn.Query<Models.Orders.dc_base_oms_sku>(sql, sqlparam,null,true,2*60);
//增加预收款金额
//var obj1 = cn.Query<Models.Orders.dc_base_oms_sku>(presql, sqlparam,null,true, 2*60);
//foreach (var item in obj)
//{
// var temp = obj1.Where(a => a.platform_type == item.platform_type).FirstOrDefault();
// if (temp != null)
// {
// item.amount_prepaid = temp.amount_prepaid;
// //item.profit_total = temp.profit_total;
// //item.profit_rate = (item.amount_sales > 0 ? (temp.profit_rate / item.amount_sales) : 0);
// }
//}
return obj.AsList();
}
......@@ -2140,9 +2118,7 @@ namespace Bailun.DC.Services
return cn.Query<Models.Ebay.dc_ebay_report_uk_config>("select * from dc_ebay_report_uk_config where type>0").AsList();
}
}
#endregion
#region 退款单
......@@ -2349,6 +2325,167 @@ namespace Bailun.DC.Services
#endregion
#region 发货单
/// <summary>
/// sku发货重量差异列表
/// </summary>
/// <param name="request">分页信息</param>
/// <param name="start">发货开始时间</param>
/// <param name="end">发货结束时间</param>
/// <param name="min">差异开始值</param>
/// <param name="max">差异结束值</param>
/// <param name="sku">sku编码</param>
/// <param name="total">符合条件的记录数</param>
/// <returns></returns>
public List<dc_mid_skudeliver_weighdiff> ListWeighDiff(BtTableParameter request, DateTime? start, DateTime? end, int? min, int? max,string sku,ref int total)
{
var sqlparam = new DynamicParameters();
var sql = @"select * from dc_mid_skudeliver_weighdiff where 1=1 ";
if (start.HasValue)
{
sql += " and day>=@start";
sqlparam.Add("start", start.Value);
}
if (end.HasValue)
{
sql += " and day<@end";
sqlparam.Add("end", end.Value.AddDays(1));
}
if (min.HasValue)
{
sql += " and diffweigh>=@min";
sqlparam.Add("min", min.Value);
}
if (max.HasValue)
{
sql += " and diffweigh<@max";
sqlparam.Add("max", max.Value);
}
if (!string.IsNullOrEmpty(sku))
{
sql += " and bailun_sku=@sku";
sqlparam.Add("sku", sku.Trim());
}
if (!string.IsNullOrEmpty(request.sort))
{
sql += " order by @orderby";
sqlparam.Add("orderby", request.sort);
sql += " @sorttype";
sqlparam.Add("sorttype", request.order);
}
using (var cn = new MySqlConnection(Common.GlobalConfig.ConnectionString))
{
if (cn.State == System.Data.ConnectionState.Closed)
{
cn.Open();
}
var obj = cn.Page<dc_mid_skudeliver_weighdiff>(request.pageIndex, request.limit, sql, ref total, sqlparam);
return obj.AsList();
}
}
/// <summary>
/// sku发货重量差异列表
/// </summary>
/// <param name="start">发货开始时间</param>
/// <param name="end">发货结束时间</param>
/// <param name="min">差异开始值</param>
/// <param name="max">差异结束值</param>
/// <param name="sku">sku编码</param>
/// <returns></returns>
public List<dc_mid_skudeliver_weighdiff> ListWeighDiff(DateTime? start, DateTime? end, int? min, int? max, string sku)
{
var sqlparam = new DynamicParameters();
var sql = @"select * from dc_mid_skudeliver_weighdiff where 1=1 ";
if (start.HasValue)
{
sql += " and day>=@start";
sqlparam.Add("start", start.Value);
}
if (end.HasValue)
{
sql += " and day<@end";
sqlparam.Add("end", end.Value.AddDays(1));
}
if (min.HasValue)
{
sql += " and diffweigh>=@min";
sqlparam.Add("min", min.Value);
}
if (max.HasValue)
{
sql += " and diffweigh<@max";
sqlparam.Add("max", max.Value);
}
if (!string.IsNullOrEmpty(sku))
{
sql += " and bailun_sku=@sku";
sqlparam.Add("sku", sku.Trim());
}
using (var cn = new MySqlConnection(Common.GlobalConfig.ConnectionString))
{
if (cn.State == System.Data.ConnectionState.Closed)
{
cn.Open();
}
var obj = cn.Query<dc_mid_skudeliver_weighdiff>( sql, sqlparam,null,true,2*60);
return obj.AsList();
}
}
#endregion
#region 平台SKu
/// <summary>
/// 获取平台sku销量明细
/// </summary>
/// <param name="page">当前页</param>
/// <param name="pagesize">每页记录数</param>
/// <param name="start">付款开始时间</param>
/// <param name="end">付款结束时间</param>
/// <param name="total">符合条件的记录数</param>
/// <returns></returns>
public List<dc_base_oms_platform_sku> ListOrderPlatformSku(int page, int pagesize, DateTime? start, DateTime? end, ref int total)
{
var sql = "select origin_order_id,platform_type,website,order_currency,seller_order_exchange_rate,platform_sku_quantity_ordered,platform_sku_unit_price,item_id,platform_sku from dc_base_oms_platform_sku where has_delete=0 and has_scalp=0 and bailun_order_status!='Canceled' ";
if (start.HasValue)
{
sql += " and paid_time_site>='"+start.Value.ToString("yyyy-MM-dd HH:mm:ss")+"'";
}
if (end.HasValue)
{
sql += " and paid_time_site<'"+end.Value.ToString("yyyy-MM-dd HH:mm:ss")+"'";
}
using (var cn = new MySqlConnection(Common.GlobalConfig.ConnectionString))
{
if (cn.State == System.Data.ConnectionState.Closed)
{
cn.Open();
}
var obj = cn.Page<dc_base_oms_platform_sku>(page, pagesize, sql, ref total);
return obj.AsList();
}
}
#endregion
}
}
......@@ -6,12 +6,19 @@ using Microsoft.AspNetCore.Mvc;
using Bailun.DC.Models;
using Bailun.DC.Services;
using Newtonsoft.Json;
using Microsoft.AspNetCore.Hosting;
namespace Bailun.DC.Web.Areas.Reports.Controllers
{
[Area("Reports")]
public class SkuController : Controller
public class SkuController : Base.BaseController
{
private readonly IHostingEnvironment _hostingEnvironment;
public SkuController(IHostingEnvironment hostingEnvironment)
{
_hostingEnvironment = hostingEnvironment;
}
public IActionResult Index()
{
return View();
......@@ -72,5 +79,65 @@ namespace Bailun.DC.Web.Areas.Reports.Controllers
return JsonConvert.SerializeObject(new { total = total, rows = list, count_row=countM });
}
public ActionResult ListSkuDiffWeigh()
{
return View();
}
/// <summary>
/// sku发货重量差异表
/// </summary>
/// <param name="parameter">分页信息</param>
/// <param name="sku">sku编码</param>
/// <param name="shipstart">发货开始时间</param>
/// <param name="shipend">发货结束时间</param>
/// <param name="min">差异开始值</param>
/// <param name="max">差异结束值</param>
/// <returns></returns>
public string ListSkuDiffWeighJson(BtTableParameter parameter, string sku, DateTime? shipstart, DateTime? shipend, int? min, int? max)
{
var total = 0;
var obj = new Services.OrdersServices().ListWeighDiff(parameter, shipstart, shipend, min, max, sku, ref total).Select(a=>new {
a.bailun_sku,
a.bailun_sku_outbound_weight,
day = a.day.ToString("yyyy-MM-dd"),
a.diffweigh,
a.pick_order_id,
a.weight
});
return JsonConvert.SerializeObject(new { total = total, rows = obj });
}
/// <summary>
/// 导出Sku发货重量差异明细
/// </summary>
/// <param name="sku"></param>
/// <param name="shipstart"></param>
/// <param name="shipend"></param>
/// <param name="min"></param>
/// <param name="max"></param>
/// <returns></returns>
public ActionResult ExportSkuDiffWeigh(string sku, DateTime? shipstart, DateTime? shipend, int? min, int? max)
{
var obj = new Services.OrdersServices().ListWeighDiff(shipstart, shipend, min, max, sku);
var colNames = new List<string> {"日期","配货单号","sku","sku重量", "发货重量", "重量差异值"};
var list = new List<string>();
foreach (var item in obj)
{
list.Add(item.day.ToString("yyyy-MM-dd") + "|" + item.pick_order_id + "|" + item.bailun_sku + "|" + item.weight + "|" + item.bailun_sku_outbound_weight + "|" +
item.diffweigh
);
}
var filename = "sku发货重量差异 " + DateTime.Now.ToString("yyyyMMddHHmmss");
var filepath = _hostingEnvironment.WebRootPath + "\\Files\\Report\\" + DateTime.Now.ToString("yyyy-MM-dd") + "\\";
ToCSV(list, colNames, filename, filepath);
return File("~/Files/Report/" + DateTime.Now.ToString("yyyy-MM-dd") + "/" + filename + ".csv", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", filename + ".csv");
}
}
}
\ No newline at end of file

@{
ViewData["Title"] = "ListSkuDiffWeigh";
Layout = "~/Pages/Shared/_MainLayout.cshtml";
ViewBag.Nav = new string[] { "Sku", "Sku发货重量差异" };
}
<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="shipstart" name="shipstart" type="text" class="form-control" style="width:130px;" placeholder="发货开始时间" value="@(DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd"))" />
<span>至</span>
<input id="shipend" name="shipend" type="text" class="form-control" style="width:130px;" placeholder="发货结束时间" value="@(DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd"))" />
</div>
<div class="form-group">
<label>差异范围</label>
<input id="min" name="min" type="number" class="form-control" style="width:140px" placeholder="差异范围开始值" />
<span>至</span>
<input id="max" name="max" type="number" class="form-control" style="width:140px" placeholder="差异范围结束值" />
</div>
<div class="form-group">
<label>sku</label>
<input type="text" 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="exportxls();">导出</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 scripts{
<script type="text/javascript">
var tb;
$(document).ready(function () {
laydate.render({ elem: '#shipstart' });
laydate.render({ elem: '#shipend' });
list();
})
function list() {
var columns = [
{
field: 'day', title: '日期', width: '160'
},
{
field: 'pick_order_id', title: '配货单号', width: '160'
},
{
field: 'bailun_sku', title: 'sku编码', width: '160'
},
{ field: 'weight', title: 'sku重量g', width: '130', sortable: true },
{ field: 'bailun_sku_outbound_weight', title: '发货重量g', width: '130', sortable: true, iscount: true },
{ field: 'diffweigh', title: '差异值g', width: '130', sortable: true }
];
var url = '@Url.Content("~/Reports/Sku/ListSkuDiffWeighJson")' + '?' + $("#toolbar").serialize();
if (tb == undefined) {
tb = OnlyTable("roletable", columns, url, "");
}
else {
tb.bootstrapTable('refresh', { url: url });
}
}
function exportxls() {
window.open("@Url.Content("~/Reports/Sku/ExportSkuDiffWeigh")" + '?' + $("#toolbar").serialize(), '_blank');
}
</script>
}
......@@ -106,5 +106,41 @@ namespace Bailun.DC.Web.Controllers
}
/// <summary>
/// 平台sku销量明细
/// </summary>
/// <param name="page">当前页</param>
/// <param name="pagesize">每页记录数</param>
/// <param name="start">开始时间</param>
/// <param name="end">结束时间</param>
/// <returns></returns>
[HttpPost]
public JsonResult ListPlatformSkuSales(int page, int pagesize, DateTime? start, DateTime? end)
{
var total = 0;
var obj = new Services.OrdersServices().ListOrderPlatformSku(page, pagesize, start, end, ref total);
var list = obj.Select(a => new {
a.origin_order_id, //平台订单号
a.platform_type, //平台类型
a.website, //站点
a.order_currency, //订单币种
a.seller_order_exchange_rate, //转换成人民币汇率
a.platform_sku_quantity_ordered, //销售数量
a.platform_sku_unit_price, //单价
a.item_id, //itemid
a.platform_sku //平台sku
});
return Json(new
{
success = true,
data = list,
pageindex = page,
total = total,
pagecount = (total/pagesize)+(total%pagesize>0?1:0)
});
}
}
}
\ No newline at end of file
......@@ -268,6 +268,9 @@
<li>
<a class="J_menuItem" href="@Url.Content("~/Logistics/Home/EbayUkReport")" data-index="0">EbayUK平邮比例</a>
</li>
<li>
<a class="J_menuItem" href="@Url.Content("~/Reports/Sku/ListSkuDiffWeigh")" data-index="0">Sku发货重量差异</a>
</li>
</ul>
</li>
</ul>
......
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