Commit b66bfff5 by lizefeng

fix

parent a2e04f38
...@@ -7,6 +7,7 @@ using System.Text; ...@@ -7,6 +7,7 @@ using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using AutoTurnOver.Models.auto; using AutoTurnOver.Models.auto;
using AutoTurnOver.Models.Report; using AutoTurnOver.Models.Report;
using Dapper;
namespace AutoTurnOver.DB namespace AutoTurnOver.DB
{ {
...@@ -24,37 +25,38 @@ namespace AutoTurnOver.DB ...@@ -24,37 +25,38 @@ namespace AutoTurnOver.DB
var nowEdate = now.LastDayOfMonth().ToDayEnd(); var nowEdate = now.LastDayOfMonth().ToDayEnd();
var nowDateStr = now.ToString("yyyy-MM"); var nowDateStr = now.ToString("yyyy-MM");
// 查询sku // 查询sku
var skuData = await _connection.QueryFirstOrDefaultAsync<dc_ana_deviation_sku>(" select * from dc_ana_deviation_sku where id=@id ", new { id = taskDto.id }); var skuDatas = taskDto.id.ToObj<List<dc_ana_deviation_sku>>();
// 确定仓库 var skuData = skuDatas[0];
var warehouse = await _connection.QueryFirstOrDefaultAsync<dc_base_warehouse>(" select * from dc_base_warehouse where hq_type='FBA仓' and bailun_account_id=@bailun_account_id ", new { bailun_account_id = skuData.account });
// 查询sku的供应链长度 // 查询sku的供应链长度
var turnover_data = await _connection.QueryFirstOrDefaultAsync<Models.dc_auto_turnover>(" select * from dc_auto_turnover where warehouse_code=@warehouse_code and bailun_sku=@bailun_sku ", new var turnover_data = await _connection.QueryFirstOrDefaultAsync<Models.dc_auto_turnover>(" select * from dc_auto_turnover where warehouse_code=@warehouse_code and bailun_sku=@bailun_sku ", new
{ {
warehouse_code = warehouse.warehouse_code, warehouse_code = skuData.warehouse_code,
bailun_sku = skuData.sku bailun_sku = skuData.sku
}); });
// 查询库存表 // 查询库存表
var stockData = await _connection.QueryFirstOrDefaultAsync<Models.dc_base_stock>(" select * from dc_base_stock where warehouse_code=@warehouse_code and bailun_sku=@bailun_sku ", new var stockData = await _connection.QueryFirstOrDefaultAsync<Models.dc_base_stock>(" select * from dc_base_stock where warehouse_code=@warehouse_code and bailun_sku=@bailun_sku ", new
{ {
warehouse_code = warehouse.warehouse_code, warehouse_code = skuData.warehouse_code,
bailun_sku = skuData.sku bailun_sku = skuData.sku
}); });
//查询在途数据 //查询在途数据
var transitData = await _connection.QueryFirstOrDefaultAsync<Models.dc_mid_transit>(" select * from dc_mid_transit where warehouse_code=@warehouse_code and bailun_sku=@bailun_sku ", new var transitData = await _connection.QueryFirstOrDefaultAsync<Models.dc_mid_transit>(" select * from dc_mid_transit where warehouse_code=@warehouse_code and bailun_sku=@bailun_sku ", new
{ {
warehouse_code = warehouse.warehouse_code, warehouse_code = skuData.warehouse_code,
bailun_sku = skuData.sku bailun_sku = skuData.sku
}); });
var baseSkuData = _connection.QueryFirstOrDefault<dc_base_sku>(" select * from dc_base_sku where bailun_sku=@bailun_sku ", new { bailun_sku = skuData.sku }); var baseSkuData = _connection.QueryFirstOrDefault<dc_base_sku>(" select * from dc_base_sku where bailun_sku=@bailun_sku ", new { bailun_sku = skuData.sku });
var turnover_days = turnover_data.turnover_days; var turnover_days = turnover_data.turnover_days;
var endDate = now.AddDays(turnover_days).LastDayOfMonth().ToDayEnd(); var endDate = now.AddDays(turnover_days).LastDayOfMonth().ToDayEnd();
// 查询配置的销量 // 查询配置的销量
var salesDayConfigs = _connection.Query<sales_day_config>(" select * from sales_day_config where bailun_sku=@bailun_sku and warehouse_code=@warehouse_code and `date`>=@bdate and `date`<=@edate ", new var salesDayConfigs = _connection.Query<dc_ana_deviation_sales_day_config>(" select * from sales_day_config where project=@project and bailun_sku=@bailun_sku and warehouse_code=@warehouse_code and `date`>=@bdate and `date`<=@edate ", new
{ {
bailun_sku = baseSkuData.bailun_sku, bailun_sku = baseSkuData.bailun_sku,
warehouse_code = warehouse.warehouse_code, warehouse_code = skuData.warehouse_code,
bdate = now, bdate = now,
edate = endDate edate = endDate,
project = skuData.project
}).ToList(); }).ToList();
var thisDate = now; var thisDate = now;
List<dc_ana_deviation> datas = new List<dc_ana_deviation>(); List<dc_ana_deviation> datas = new List<dc_ana_deviation>();
...@@ -63,37 +65,31 @@ namespace AutoTurnOver.DB ...@@ -63,37 +65,31 @@ namespace AutoTurnOver.DB
var thisBdate = thisDate.ToDayHome(); var thisBdate = thisDate.ToDayHome();
var thisEdate = thisDate.LastDayOfMonth().ToDayEnd(); var thisEdate = thisDate.LastDayOfMonth().ToDayEnd();
var dateStr = thisDate.ToString("yyyy-MM"); var dateStr = thisDate.ToString("yyyy-MM");
var sales = (salesDayConfigs.FirstOrDefault(s => s.date_str == dateStr) ?? new sales_day_config { }).sales; var sales = (salesDayConfigs.FirstOrDefault(s => s.date_str == dateStr) ?? new dc_ana_deviation_sales_day_config { }).sales;
// 写入 【销售产品产品成本】、【销售产品数量】、【剩余可用库存金额】、【剩余可用库存数量】 // 写入 【销售产品产品成本】、【销售产品数量】、【剩余可用库存金额】、【剩余可用库存数量】
SaveDeviation(datas, new dc_ana_deviation { bdate = thisBdate, edate = thisEdate, date_str = dateStr, field_type = "预测值", field = "销售产品数量", project = skuData.project, sku = skuData.sku, warehouse_code = warehouse.warehouse_code, val = sales }); SaveDeviation(datas, new dc_ana_deviation { bdate = thisBdate, edate = thisEdate, date_str = dateStr, field_type = "预测值", field = "销售产品数量", project = skuData.project, sku = skuData.sku, warehouse_code = skuData.warehouse_code, val = sales });
SaveDeviation(datas, new dc_ana_deviation { bdate = thisBdate, edate = thisEdate, date_str = dateStr, field_type = "预测值", field = "剩余可用库存数量", project = skuData.project, sku = skuData.sku, warehouse_code = warehouse.warehouse_code, val = sales }); SaveDeviation(datas, new dc_ana_deviation { bdate = thisBdate, edate = thisEdate, date_str = dateStr, field_type = "预测值", field = "剩余可用库存数量", project = skuData.project, sku = skuData.sku, warehouse_code = skuData.warehouse_code, val = sales });
SaveDeviation(datas, new dc_ana_deviation { bdate = thisBdate, edate = thisEdate, date_str = dateStr, field_type = "预测值", field = "销售产品成本", project = skuData.project, sku = skuData.sku, warehouse_code = warehouse.warehouse_code, val = sales * baseSkuData.unit_price }); SaveDeviation(datas, new dc_ana_deviation { bdate = thisBdate, edate = thisEdate, date_str = dateStr, field_type = "预测值", field = "销售产品成本", project = skuData.project, sku = skuData.sku, warehouse_code = skuData.warehouse_code, val = sales * baseSkuData.unit_price });
SaveDeviation(datas, new dc_ana_deviation { bdate = thisBdate, edate = thisEdate, date_str = dateStr, field_type = "预测值", field = "剩余可用库存金额", project = skuData.project, sku = skuData.sku, warehouse_code = warehouse.warehouse_code, val = sales * baseSkuData.unit_price }); SaveDeviation(datas, new dc_ana_deviation { bdate = thisBdate, edate = thisEdate, date_str = dateStr, field_type = "预测值", field = "剩余可用库存金额", project = skuData.project, sku = skuData.sku, warehouse_code = skuData.warehouse_code, val = sales * baseSkuData.unit_price });
thisDate = thisDate.AddMonths(1); thisDate = thisDate.AddMonths(1);
} }
// 读取实际值 【销售产品数量】、【销售产品产品成本】、【剩余可用库存数量】、【剩余可用库存金额】、【剩余调拨库存数量】、【剩余调拨库存金额】、【采购在途库存金额】、【采购在途库存数量】 // 读取实际值 【销售产品数量】、【销售产品产品成本】、【剩余可用库存数量】、【剩余可用库存金额】、【剩余调拨库存数量】、【剩余调拨库存金额】、【采购在途库存金额】、【采购在途库存数量】
SaveDeviation(datas, new dc_ana_deviation { bdate = now, edate = nowEdate, date_str = nowDateStr, field_type = "实际值", field = "剩余可用库存数量", project = skuData.project, sku = skuData.sku, warehouse_code = warehouse.warehouse_code, val = stockData.usable_stock }); SaveDeviation(datas, new dc_ana_deviation { bdate = now, edate = nowEdate, date_str = nowDateStr, field_type = "实际值", field = "剩余可用库存数量", project = skuData.project, sku = skuData.sku, warehouse_code = skuData.warehouse_code, val = stockData.usable_stock });
SaveDeviation(datas, new dc_ana_deviation { bdate = now, edate = nowEdate, date_str = nowDateStr, field_type = "实际值", field = "剩余可用库存金额", project = skuData.project, sku = skuData.sku, warehouse_code = warehouse.warehouse_code, val = stockData.usable_stock * baseSkuData.unit_price }); SaveDeviation(datas, new dc_ana_deviation { bdate = now, edate = nowEdate, date_str = nowDateStr, field_type = "实际值", field = "剩余可用库存金额", project = skuData.project, sku = skuData.sku, warehouse_code = skuData.warehouse_code, val = stockData.usable_stock * baseSkuData.unit_price });
SaveDeviation(datas, new dc_ana_deviation { bdate = now, edate = nowEdate, date_str = nowDateStr, field_type = "实际值", field = "采购在途库存数量", project = skuData.project, sku = skuData.sku, warehouse_code = warehouse.warehouse_code, val = transitData.quantity_purchase }); SaveDeviation(datas, new dc_ana_deviation { bdate = now, edate = nowEdate, date_str = nowDateStr, field_type = "实际值", field = "采购在途库存数量", project = skuData.project, sku = skuData.sku, warehouse_code = skuData.warehouse_code, val = transitData.quantity_purchase });
SaveDeviation(datas, new dc_ana_deviation { bdate = now, edate = nowEdate, date_str = nowDateStr, field_type = "实际值", field = "采购在途库存金额", project = skuData.project, sku = skuData.sku, warehouse_code = warehouse.warehouse_code, val = transitData.quantity_purchase * baseSkuData.unit_price }); SaveDeviation(datas, new dc_ana_deviation { bdate = now, edate = nowEdate, date_str = nowDateStr, field_type = "实际值", field = "采购在途库存金额", project = skuData.project, sku = skuData.sku, warehouse_code = skuData.warehouse_code, val = transitData.quantity_purchase * baseSkuData.unit_price });
SaveDeviation(datas, new dc_ana_deviation { bdate = now, edate = nowEdate, date_str = nowDateStr, field_type = "实际值", field = "剩余调拨库存数量", project = skuData.project, sku = skuData.sku, warehouse_code = warehouse.warehouse_code, val = transitData.quantity_transfer }); SaveDeviation(datas, new dc_ana_deviation { bdate = now, edate = nowEdate, date_str = nowDateStr, field_type = "实际值", field = "剩余调拨库存数量", project = skuData.project, sku = skuData.sku, warehouse_code = skuData.warehouse_code, val = transitData.quantity_transfer });
SaveDeviation(datas, new dc_ana_deviation { bdate = now, edate = nowEdate, date_str = nowDateStr, field_type = "实际值", field = "剩余调拨库存金额", project = skuData.project, sku = skuData.sku, warehouse_code = warehouse.warehouse_code, val = transitData.quantity_transfer * baseSkuData.unit_price }); SaveDeviation(datas, new dc_ana_deviation { bdate = now, edate = nowEdate, date_str = nowDateStr, field_type = "实际值", field = "剩余调拨库存金额", project = skuData.project, sku = skuData.sku, warehouse_code = skuData.warehouse_code, val = transitData.quantity_transfer * baseSkuData.unit_price });
// 查询销量 // 查询销量
var omsSale = (await _connection.QueryFirstOrDefaultAsync<decimal?>(" select sum(bailun_sku_quantity_ordered) from dc_base_oms_sku where warehouse_code=@warehouse_code and bailun_sku=@bailun_sku and bailun_order_status not in ('Canceled') and bailun_interception_status in ('None', 'Failed') and paid_time<=@etime and paid_time>=@btime ", new var omsSale = await GetOmsSale(now, nowEdate, skuDatas);
{ SaveDeviation(datas, new dc_ana_deviation { bdate = now, edate = nowEdate, date_str = nowDateStr, field_type = "实际值", field = "销售产品数量", project = skuData.project, sku = skuData.sku, warehouse_code = skuData.warehouse_code, val = omsSale });
warehouse_code = warehouse.warehouse_code, SaveDeviation(datas, new dc_ana_deviation { bdate = now, edate = nowEdate, date_str = nowDateStr, field_type = "实际值", field = "销售产品成本", project = skuData.project, sku = skuData.sku, warehouse_code = skuData.warehouse_code, val = omsSale * baseSkuData.unit_price });
bailun_sku = baseSkuData.bailun_sku,
etime = now,
btime = nowEdate
}, commandTimeout: 0)) ?? 0;
SaveDeviation(datas, new dc_ana_deviation { bdate = now, edate = nowEdate, date_str = nowDateStr, field_type = "实际值", field = "销售产品数量", project = skuData.project, sku = skuData.sku, warehouse_code = warehouse.warehouse_code, val = omsSale });
SaveDeviation(datas, new dc_ana_deviation { bdate = now, edate = nowEdate, date_str = nowDateStr, field_type = "实际值", field = "销售产品成本", project = skuData.project, sku = skuData.sku, warehouse_code = warehouse.warehouse_code, val = omsSale * baseSkuData.unit_price });
// 推测值 【销售产品数量】【销售产品产品成本】【剩余可用库存数量】【剩余可用库存金额】【采购在途库存数量】【采购在途库存金额】 // 推测值 【销售产品数量】【销售产品产品成本】【剩余可用库存数量】【剩余可用库存金额】【采购在途库存数量】【采购在途库存金额】
// 推测值涉及实际数据,所以只能推测下个月的数据 // 推测值涉及实际数据,所以只能推测下个月的数据
...@@ -108,69 +104,179 @@ namespace AutoTurnOver.DB ...@@ -108,69 +104,179 @@ namespace AutoTurnOver.DB
var lastMonthDateStr = lastMonthB.ToString("yyyy-MM"); var lastMonthDateStr = lastMonthB.ToString("yyyy-MM");
//今日的推测值等于昨日的实际剩余 //今日的推测值等于昨日的实际剩余
SaveDeviation(datas, new dc_ana_deviation { bdate = now, edate = nowEdate, date_str = nowDateStr, field_type = "推测值", field = "销售产品数量", project = skuData.project, sku = skuData.sku, warehouse_code = warehouse.warehouse_code, SaveDeviation(datas, new dc_ana_deviation
val = _connection.QueryFirstOrDefault<decimal?>(" select `val` from dc_ana_deviation where sku=@sku and warehouse_code=@warehouse_code and project=@project and field=@field and date_str=@date_str and field_type=@field_type ",new { {
bdate = now,
edate = nowEdate,
date_str = nowDateStr,
field_type = "推测值",
field = "销售产品数量",
project = skuData.project,
sku = skuData.sku,
warehouse_code = skuData.warehouse_code,
val = _connection.QueryFirstOrDefault<decimal?>(" select `val` from dc_ana_deviation where sku=@sku and warehouse_code=@warehouse_code and project=@project and field=@field and date_str=@date_str and field_type=@field_type ", new
{
sku = skuData.sku, sku = skuData.sku,
warehouse_code = warehouse.warehouse_code, warehouse_code = skuData.warehouse_code,
project = skuData.project, project = skuData.project,
field = "剩余可用库存数量", field = "剩余可用库存数量",
date_str = lastMonthDateStr, date_str = lastMonthDateStr,
field_type = "实际值" field_type = "实际值"
}, commandTimeout: 0) ??0 }, commandTimeout: 0) ?? 0
}); });
SaveDeviation(datas, new dc_ana_deviation { bdate = now, edate = nowEdate, date_str = nowDateStr, field_type = "推测值", field = "销售产品成本", project = skuData.project, sku = skuData.sku, warehouse_code = warehouse.warehouse_code, SaveDeviation(datas, new dc_ana_deviation
val = datas.FirstOrDefault(s=>s.field== "销售产品数量" && s.field_type== "推测值" && s.date_str== nowDateStr).val * baseSkuData.unit_price {
bdate = now,
edate = nowEdate,
date_str = nowDateStr,
field_type = "推测值",
field = "销售产品成本",
project = skuData.project,
sku = skuData.sku,
warehouse_code = skuData.warehouse_code,
val = datas.FirstOrDefault(s => s.field == "销售产品数量" && s.field_type == "推测值" && s.date_str == nowDateStr).val * baseSkuData.unit_price
}); });
// 查询今日的预计到货数据 // 查询今日的预计到货数据
var baseTransExpectarrivaltimeDatas = _connection.Query<dc_base_trans_expectarrivaltime_temp>(" select * from dc_base_trans_expectarrivaltime where bailun_sku=@bailun_sku and warehouse_code=@warehouse_code and expectarrivaltime>=@btime and expectarrivaltime<=@etime ",new { var baseTransExpectarrivaltimeDatas = _connection.Query<dc_base_trans_expectarrivaltime_temp>(" select * from dc_base_trans_expectarrivaltime where bailun_sku=@bailun_sku and warehouse_code=@warehouse_code and expectarrivaltime>=@btime and expectarrivaltime<=@etime ", new
warehouse_code = warehouse.warehouse_code, {
warehouse_code = skuData.warehouse_code,
bailun_sku = baseSkuData.bailun_sku, bailun_sku = baseSkuData.bailun_sku,
etime = now, etime = now,
btime = nowEdate btime = nowEdate
}); });
SaveDeviation(datas, new dc_ana_deviation { bdate = now, edate = nowEdate, date_str = nowDateStr, field_type = "推测值", field = "剩余可用库存数量", project = skuData.project, sku = skuData.sku, warehouse_code = warehouse.warehouse_code, SaveDeviation(datas, new dc_ana_deviation
val = datas.FirstOrDefault(s => s.field == "销售产品数量" && s.field_type == "推测值" && s.date_str == nowDateStr).val + baseTransExpectarrivaltimeDatas.Sum(s=>s.count) - datas.FirstOrDefault(s=>s.field== "销售产品数量" && s.field_type== "预测值" && s.date_str== nowDateStr).val {
bdate = now,
edate = nowEdate,
date_str = nowDateStr,
field_type = "推测值",
field = "剩余可用库存数量",
project = skuData.project,
sku = skuData.sku,
warehouse_code = skuData.warehouse_code,
val = datas.FirstOrDefault(s => s.field == "销售产品数量" && s.field_type == "推测值" && s.date_str == nowDateStr).val + baseTransExpectarrivaltimeDatas.Sum(s => s.count) - datas.FirstOrDefault(s => s.field == "销售产品数量" && s.field_type == "预测值" && s.date_str == nowDateStr).val
}); });
SaveDeviation(datas, new dc_ana_deviation { bdate = now, edate = nowEdate, date_str = nowDateStr, field_type = "推测值", field = "剩余可用库存金额", project = skuData.project, sku = skuData.sku, warehouse_code = warehouse.warehouse_code, SaveDeviation(datas, new dc_ana_deviation
val = datas.FirstOrDefault(s=>s.field== "剩余可用库存数量" && s.field_type== "推测值" && s.date_str== nowDateStr).val * baseSkuData.unit_price {
bdate = now,
edate = nowEdate,
date_str = nowDateStr,
field_type = "推测值",
field = "剩余可用库存金额",
project = skuData.project,
sku = skuData.sku,
warehouse_code = skuData.warehouse_code,
val = datas.FirstOrDefault(s => s.field == "剩余可用库存数量" && s.field_type == "推测值" && s.date_str == nowDateStr).val * baseSkuData.unit_price
}); });
SaveDeviation(datas, new dc_ana_deviation { bdate = now, edate = nowEdate, date_str = nowDateStr, field_type = "推测值", field = "采购在途库存数量", project = skuData.project, sku = skuData.sku, warehouse_code = warehouse.warehouse_code, val = turnover_data.quantity_final_advise }); SaveDeviation(datas, new dc_ana_deviation { bdate = now, edate = nowEdate, date_str = nowDateStr, field_type = "推测值", field = "采购在途库存数量", project = skuData.project, sku = skuData.sku, warehouse_code = skuData.warehouse_code, val = turnover_data.quantity_final_advise });
SaveDeviation(datas, new dc_ana_deviation { bdate = now, edate = nowEdate, date_str = nowDateStr, field_type = "推测值", field = "采购在途库存金额", project = skuData.project, sku = skuData.sku, warehouse_code = warehouse.warehouse_code, val = turnover_data.quantity_final_advise * baseSkuData.unit_price }); SaveDeviation(datas, new dc_ana_deviation { bdate = now, edate = nowEdate, date_str = nowDateStr, field_type = "推测值", field = "采购在途库存金额", project = skuData.project, sku = skuData.sku, warehouse_code = skuData.warehouse_code, val = turnover_data.quantity_final_advise * baseSkuData.unit_price });
// 偏差分析 【产品成本预计偏差值】、【销售数量预计偏差值】、【产品成本实际偏差值】、【销售数量实际偏差值】 // 偏差分析 【产品成本预计偏差值】、【销售数量预计偏差值】、【产品成本实际偏差值】、【销售数量实际偏差值】
SaveDeviation(datas, new dc_ana_deviation { bdate = now, edate = nowEdate, date_str = nowDateStr, field_type = "偏差分析", field = "产品成本预计偏差值", project = skuData.project, sku = skuData.sku, warehouse_code = warehouse.warehouse_code, SaveDeviation(datas, new dc_ana_deviation
val = datas.FirstOrDefault(s=>s.field== "销售产品成本" && s.field_type== "推测值" && s.date_str== nowDateStr).val {
bdate = now,
edate = nowEdate,
date_str = nowDateStr,
field_type = "偏差分析",
field = "产品成本预计偏差值",
project = skuData.project,
sku = skuData.sku,
warehouse_code = skuData.warehouse_code,
val = datas.FirstOrDefault(s => s.field == "销售产品成本" && s.field_type == "推测值" && s.date_str == nowDateStr).val
- datas.FirstOrDefault(s => s.field == "销售产品成本" && s.field_type == "预测值" && s.date_str == nowDateStr).val - datas.FirstOrDefault(s => s.field == "销售产品成本" && s.field_type == "预测值" && s.date_str == nowDateStr).val
}); });
SaveDeviation(datas, new dc_ana_deviation { bdate = now, edate = nowEdate, date_str = nowDateStr, field_type = "偏差分析", field = "销售数量预计偏差值", project = skuData.project, sku = skuData.sku, warehouse_code = warehouse.warehouse_code, SaveDeviation(datas, new dc_ana_deviation
val = datas.FirstOrDefault(s=>s.field== "销售产品数量" && s.field_type== "推测值" && s.date_str== nowDateStr).val {
bdate = now,
edate = nowEdate,
date_str = nowDateStr,
field_type = "偏差分析",
field = "销售数量预计偏差值",
project = skuData.project,
sku = skuData.sku,
warehouse_code = skuData.warehouse_code,
val = datas.FirstOrDefault(s => s.field == "销售产品数量" && s.field_type == "推测值" && s.date_str == nowDateStr).val
- datas.FirstOrDefault(s => s.field == "销售产品数量" && s.field_type == "预测值" && s.date_str == nowDateStr).val - datas.FirstOrDefault(s => s.field == "销售产品数量" && s.field_type == "预测值" && s.date_str == nowDateStr).val
}); });
SaveDeviation(datas, new dc_ana_deviation { bdate = now, edate = nowEdate, date_str = nowDateStr, field_type = "偏差分析", field = "产品成本实际偏差值", project = skuData.project, sku = skuData.sku, warehouse_code = warehouse.warehouse_code, SaveDeviation(datas, new dc_ana_deviation
val = datas.FirstOrDefault(s=>s.field== "销售产品成本" && s.field_type== "实际值" && s.date_str== nowDateStr).val {
bdate = now,
edate = nowEdate,
date_str = nowDateStr,
field_type = "偏差分析",
field = "产品成本实际偏差值",
project = skuData.project,
sku = skuData.sku,
warehouse_code = skuData.warehouse_code,
val = datas.FirstOrDefault(s => s.field == "销售产品成本" && s.field_type == "实际值" && s.date_str == nowDateStr).val
- datas.FirstOrDefault(s => s.field == "销售产品成本" && s.field_type == "预测值" && s.date_str == nowDateStr).val - datas.FirstOrDefault(s => s.field == "销售产品成本" && s.field_type == "预测值" && s.date_str == nowDateStr).val
}); });
SaveDeviation(datas, new dc_ana_deviation { bdate = now, edate = nowEdate, date_str = nowDateStr, field_type = "偏差分析", field = "销售数量实际偏差值", project = skuData.project, sku = skuData.sku, warehouse_code = warehouse.warehouse_code, SaveDeviation(datas, new dc_ana_deviation
val = datas.FirstOrDefault(s=>s.field== "销售产品数量" && s.field_type== "实际值" && s.date_str== nowDateStr).val {
bdate = now,
edate = nowEdate,
date_str = nowDateStr,
field_type = "偏差分析",
field = "销售数量实际偏差值",
project = skuData.project,
sku = skuData.sku,
warehouse_code = skuData.warehouse_code,
val = datas.FirstOrDefault(s => s.field == "销售产品数量" && s.field_type == "实际值" && s.date_str == nowDateStr).val
- datas.FirstOrDefault(s => s.field == "销售产品数量" && s.field_type == "预测值" && s.date_str == nowDateStr).val - datas.FirstOrDefault(s => s.field == "销售产品数量" && s.field_type == "预测值" && s.date_str == nowDateStr).val
}); });
SaveDeviation(datas, new dc_ana_deviation { bdate = now, edate = nowEdate, date_str = nowDateStr, field_type = "-", field = "超卖数量", project = skuData.project, sku = skuData.sku, warehouse_code = warehouse.warehouse_code, SaveDeviation(datas, new dc_ana_deviation
val = datas.FirstOrDefault(s=>s.field== "销售产品数量" && s.field_type== "实际值" && s.date_str== nowDateStr).val {
- datas.FirstOrDefault(s => s.field == "销售产品数量" && s.field_type == "预测值" && s.date_str == nowDateStr).val bdate = now,
edate = nowEdate,
date_str = nowDateStr,
field_type = "-",
field = "超卖数量",
project = skuData.project,
sku = skuData.sku,
warehouse_code = skuData.warehouse_code,
val = datas.FirstOrDefault(s => s.field == "销售产品数量" && s.field_type == "实际值" && s.date_str == nowDateStr).val
- datas.FirstOrDefault(s => s.field == "销售产品数量" && s.field_type == "预测值" && s.date_str == nowDateStr).val
}); });
SaveDeviation(datas, new dc_ana_deviation { bdate = now, edate = nowEdate, date_str = nowDateStr, field_type = "-", field = "呆滞数量", project = skuData.project, sku = skuData.sku, warehouse_code = warehouse.warehouse_code, SaveDeviation(datas, new dc_ana_deviation
val = datas.FirstOrDefault(s=>s.field== "剩余可用库存数量" && s.field_type== "实际值" && s.date_str== nowDateStr).val {
- datas.Where(s => s.field == "销售产品数量" && s.field_type == "预测值" && s.bdate<=endDate && s.edate>=now).Sum(s=>s.val) // 未来周转期的预测销量 bdate = now,
edate = nowEdate,
date_str = nowDateStr,
field_type = "-",
field = "呆滞数量",
project = skuData.project,
sku = skuData.sku,
warehouse_code = skuData.warehouse_code,
val = datas.FirstOrDefault(s => s.field == "剩余可用库存数量" && s.field_type == "实际值" && s.date_str == nowDateStr).val
- datas.Where(s => s.field == "销售产品数量" && s.field_type == "预测值" && s.bdate <= endDate && s.edate >= now).Sum(s => s.val) // 未来周转期的预测销量
}); });
SaveDeviation(datas, new dc_ana_deviation { bdate = now, edate = nowEdate, date_str = nowDateStr, field_type = "-", field = "呆滞库存金额", project = skuData.project, sku = skuData.sku, warehouse_code = warehouse.warehouse_code, SaveDeviation(datas, new dc_ana_deviation
val = datas.FirstOrDefault(s=>s.field== "呆滞数量" && s.field_type== "-" && s.date_str== nowDateStr).val * baseSkuData.unit_price {
bdate = now,
edate = nowEdate,
date_str = nowDateStr,
field_type = "-",
field = "呆滞库存金额",
project = skuData.project,
sku = skuData.sku,
warehouse_code = skuData.warehouse_code,
val = datas.FirstOrDefault(s => s.field == "呆滞数量" && s.field_type == "-" && s.date_str == nowDateStr).val * baseSkuData.unit_price
}); });
SaveDeviation(datas, new dc_ana_deviation { bdate = now, edate = nowEdate, date_str = nowDateStr, field_type = "-", field = "是否断货", project = skuData.project, sku = skuData.sku, warehouse_code = warehouse.warehouse_code, SaveDeviation(datas, new dc_ana_deviation
{
bdate = now,
edate = nowEdate,
date_str = nowDateStr,
field_type = "-",
field = "是否断货",
project = skuData.project,
sku = skuData.sku,
warehouse_code = skuData.warehouse_code,
val = stockData.usable_stock val = stockData.usable_stock
}); });
...@@ -178,6 +284,37 @@ namespace AutoTurnOver.DB ...@@ -178,6 +284,37 @@ namespace AutoTurnOver.DB
} }
public async static Task<decimal> GetOmsSale(DateTime btime, DateTime etime, List<dc_ana_deviation_sku> anaSkus)
{
var sql = " select * from dc_base_oms_sku where warehouse_code=@warehouse_code and bailun_sku=@bailun_sku and bailun_order_status not in ('Canceled') and bailun_interception_status in ('None', 'Failed') and paid_time<=@etime and paid_time>=@btime ";
DynamicParameters parameters = new DynamicParameters();
parameters.Add("warehouse_code", anaSkus[0].warehouse_code);
parameters.Add("bailun_sku", anaSkus[0].sku);
parameters.Add("btime", btime);
parameters.Add("etime", etime);
var omsDatas = (await _connection.QueryAsync<dc_base_oms_sku>(sql, parameters, commandTimeout: 0)).ToList();
if (anaSkus.Any(s => !string.IsNullOrWhiteSpace(s.platform)))
{
var platforms = anaSkus.Where(s => !string.IsNullOrWhiteSpace(s.platform)).Select(s => s.platform).ToList();
omsDatas = omsDatas.Where(s => platforms.Contains(s.platform_type)).ToList();
}
if (anaSkus.Any(s => s.account>0))
{
var accounts = anaSkus.Where(s =>s.account>0).Select(s => s.account.Value.ToString()).ToList();
omsDatas = omsDatas.Where(s => accounts.Contains(s.bailun_account_id)).ToList();
}
if (anaSkus.Any(s => !string.IsNullOrWhiteSpace(s.site)))
{
var sites = anaSkus.Where(s => !string.IsNullOrWhiteSpace(s.site)).ToList();
omsDatas = omsDatas.Where(s => sites.Any(s1 =>
(string.IsNullOrWhiteSpace(s1.platform) || s.platform_type.Equals(s1.platform))
&& (string.IsNullOrWhiteSpace(s1.site) || s.website.Equals(s1.site))
)).ToList();
}
return omsDatas.Sum(s => s.bailun_sku_quantity_ordered);
}
public static void SaveDeviation(List<dc_ana_deviation> datas, dc_ana_deviation data) public static void SaveDeviation(List<dc_ana_deviation> datas, dc_ana_deviation data)
{ {
data._ts = DateTime.Now; data._ts = DateTime.Now;
...@@ -192,7 +329,7 @@ namespace AutoTurnOver.DB ...@@ -192,7 +329,7 @@ namespace AutoTurnOver.DB
}) ?? 0; }) ?? 0;
if (data.id <= 0) if (data.id <= 0)
{ {
_connection.Insert(data,commandTimeout:0); _connection.Insert(data, commandTimeout: 0);
} }
else else
{ {
...@@ -207,10 +344,10 @@ namespace AutoTurnOver.DB ...@@ -207,10 +344,10 @@ namespace AutoTurnOver.DB
public static void PushAnaTask() public static void PushAnaTask()
{ {
// 查询所有需要分析的sku // 查询所有需要分析的sku
var skus = _connection.Query<int>(" select id from dc_ana_deviation_sku ").ToList(); var skuGroups = _connection.Query<dc_ana_deviation_sku>(" select * from dc_ana_deviation_sku ").ToList().GroupBy(s => new { s.sku, s.warehouse_code });
foreach (var item in skus) foreach (var item in skuGroups)
{ {
RabbitMQHelper.EnqueneMsg("aims:deviation:input", new t_task_queue { id = item.ToString(), create_time = DateTime.Now }); RabbitMQHelper.EnqueneMsg("aims:deviation:input", new t_task_queue { id = item.ToJson(), create_time = DateTime.Now });
} }
} }
} }
......
...@@ -13,7 +13,8 @@ namespace AutoTurnOver.DB ...@@ -13,7 +13,8 @@ namespace AutoTurnOver.DB
public string sku { get; set; } public string sku { get; set; }
public string platform { get; set; } public string platform { get; set; }
public string site { get; set; } public string site { get; set; }
public string account { get; set; } public int? account { get; set; }
public string project { get; set; } public string project { get; set; }
public string warehouse_code { get; set; }
} }
} }
...@@ -22,6 +22,22 @@ namespace AutoTurnOver.Models.auto ...@@ -22,6 +22,22 @@ namespace AutoTurnOver.Models.auto
public string update_user { get; set; } public string update_user { get; set; }
} }
public class dc_ana_deviation_sales_day_config
{
public int id { get; set; }
public string project { get; set; }
public string bailun_sku { get; set; }
public string warehouse_code { get; set; }
public string bailun_sku_warehouse_code { get; set; }
public DateTime date { get; set; }
public string date_str { get; set; }
public decimal sales { get; set; }
public DateTime create_date { get; set; }
public string create_user { get; set; }
public DateTime update_date { get; set; }
public string update_user { get; set; }
}
public class sales_day_config_input_dto public class sales_day_config_input_dto
{ {
public string bailun_sku { get; set; } public string bailun_sku { get; set; }
......
using System;
using System.Collections.Generic;
using System.Text;
namespace AutoTurnOver.Models
{
public class dc_ana_deviation_sku_group_dto
{
public string sku { get; set; }
public string project { get; set; }
public string warehouse_codes { get; set; }
}
}
...@@ -50,7 +50,7 @@ namespace ResetOutofstock ...@@ -50,7 +50,7 @@ namespace ResetOutofstock
//report_invest_return_dao.ShareAdFee(); //report_invest_return_dao.ShareAdFee();
//report_invest_return_dao.SynchBtmOrderRefund(); //report_invest_return_dao.SynchBtmOrderRefund();
//report_invest_return_dao.CalculationStockScore("962073701"); //report_invest_return_dao.CalculationStockScore("962073701");
dc_ana_deviation_dao.PushAnaTask(); //dc_ana_deviation_dao.PushAnaTask();
} }
catch (Exception ex) catch (Exception ex)
{ {
......
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