Commit b66bfff5 by lizefeng

fix

parent a2e04f38
......@@ -7,6 +7,7 @@ using System.Text;
using System.Threading.Tasks;
using AutoTurnOver.Models.auto;
using AutoTurnOver.Models.Report;
using Dapper;
namespace AutoTurnOver.DB
{
......@@ -24,37 +25,38 @@ namespace AutoTurnOver.DB
var nowEdate = now.LastDayOfMonth().ToDayEnd();
var nowDateStr = now.ToString("yyyy-MM");
// 查询sku
var skuData = await _connection.QueryFirstOrDefaultAsync<dc_ana_deviation_sku>(" select * from dc_ana_deviation_sku where id=@id ", new { id = taskDto.id });
// 确定仓库
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 });
var skuDatas = taskDto.id.ToObj<List<dc_ana_deviation_sku>>();
var skuData = skuDatas[0];
// 查询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
{
warehouse_code = warehouse.warehouse_code,
warehouse_code = skuData.warehouse_code,
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
{
warehouse_code = warehouse.warehouse_code,
warehouse_code = skuData.warehouse_code,
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
{
warehouse_code = warehouse.warehouse_code,
warehouse_code = skuData.warehouse_code,
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 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,
warehouse_code = warehouse.warehouse_code,
warehouse_code = skuData.warehouse_code,
bdate = now,
edate = endDate
edate = endDate,
project = skuData.project
}).ToList();
var thisDate = now;
List<dc_ana_deviation> datas = new List<dc_ana_deviation>();
......@@ -63,37 +65,31 @@ namespace AutoTurnOver.DB
var thisBdate = thisDate.ToDayHome();
var thisEdate = thisDate.LastDayOfMonth().ToDayEnd();
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 = 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 = 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 = 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 });
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 = 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 = skuData.warehouse_code, val = sales * baseSkuData.unit_price });
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 = 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 = 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 = 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 = 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 = 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 = 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 * 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 });
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 = 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 = 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
{
warehouse_code = warehouse.warehouse_code,
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 });
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 });
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 });
// 推测值 【销售产品数量】【销售产品产品成本】【剩余可用库存数量】【剩余可用库存金额】【采购在途库存数量】【采购在途库存金额】
// 推测值涉及实际数据,所以只能推测下个月的数据
......@@ -108,69 +104,179 @@ namespace AutoTurnOver.DB
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,
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 {
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 = _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,
warehouse_code = warehouse.warehouse_code,
warehouse_code = skuData.warehouse_code,
project = skuData.project,
field = "剩余可用库存数量",
date_str = lastMonthDateStr,
field_type = "实际值"
}, 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 = datas.FirstOrDefault(s=>s.field== "销售产品数量" && s.field_type== "推测值" && s.date_str== nowDateStr).val * baseSkuData.unit_price
}, 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 = 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 {
warehouse_code = warehouse.warehouse_code,
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 = skuData.warehouse_code,
bailun_sku = baseSkuData.bailun_sku,
etime = now,
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,
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 = 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,
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 = 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 = 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 });
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,
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 = 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,
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 = 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,
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 = 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,
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 = 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,
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 = 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,
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 = 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,
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 = 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
});
......@@ -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)
{
data._ts = DateTime.Now;
......@@ -192,7 +329,7 @@ namespace AutoTurnOver.DB
}) ?? 0;
if (data.id <= 0)
{
_connection.Insert(data,commandTimeout:0);
_connection.Insert(data, commandTimeout: 0);
}
else
{
......@@ -207,10 +344,10 @@ namespace AutoTurnOver.DB
public static void PushAnaTask()
{
// 查询所有需要分析的sku
var skus = _connection.Query<int>(" select id from dc_ana_deviation_sku ").ToList();
foreach (var item in skus)
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 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
public string sku { get; set; }
public string platform { get; set; }
public string site { get; set; }
public string account { get; set; }
public int? account { get; set; }
public string project { get; set; }
public string warehouse_code { get; set; }
}
}
......@@ -22,6 +22,22 @@ namespace AutoTurnOver.Models.auto
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 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
//report_invest_return_dao.ShareAdFee();
//report_invest_return_dao.SynchBtmOrderRefund();
//report_invest_return_dao.CalculationStockScore("962073701");
dc_ana_deviation_dao.PushAnaTask();
//dc_ana_deviation_dao.PushAnaTask();
}
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