Commit e954e034 by lizefeng

投资回报分析的 单位头程费取值,由最近2个月,改成最近5单

parent 522d955f
......@@ -300,7 +300,7 @@ namespace AutoTurnOver.DB
}
//计算单位运费
ana.freight_unit_price = CalculationFreight(ana.sku, ana.warehouse_code, day30Btime.AddDays(-30 *5),dayEtime);
ana.freight_unit_price = CalculationFreight(ana.sku, ana.warehouse_code);
//预估运费,库存 * 单位运费
ana.estimated_freight = ana.freight_unit_price * ana.stock;
......@@ -422,7 +422,7 @@ namespace AutoTurnOver.DB
/// <summary>
/// 计算单位运费
/// </summary>
public static decimal CalculationFreight(string bailun_sku, string warehouse_code, DateTime btime, DateTime etime)
public static decimal CalculationFreight(string bailun_sku, string warehouse_code)
{
// 清理运费计算日志
_connection.Execute(" delete from dc_base_transfer_freight_new_order where main_bailun_sku=@bailun_sku and warehouse_code=@warehouse_code ", new
......@@ -430,9 +430,18 @@ namespace AutoTurnOver.DB
bailun_sku = bailun_sku,
warehouse_code = warehouse_code
});
// 查询这个sku 时间范围内所有的调拨单明细
var tempDatas = _connection.Query<CalculationFreightDto>($@"select t2.sku ,
var top5DataIds = _connection.Query<string>($@" select dataid from dc_base_transfer_info where
dataid in ( select dataid from dc_base_transfer_info_skus where sku=@sku )
and isdeleted=0
and isexception = 0
and estimatedcost>0
and targetwareno=@warehouse_code
order by creationtime desc limit 5 ",new { sku = bailun_sku, warehouse_code = warehouse_code }).ToList();
if(top5DataIds!=null && top5DataIds.Count >= 1)
{
// 查询这个sku 时间范围内所有的调拨单明细
var tempDatas = _connection.Query<CalculationFreightDto>($@"select t2.sku ,
t1.`code`,
t2.deliverycount,
t1.estimatedcost as 'order_estimatedcost',
......@@ -442,95 +451,93 @@ from dc_base_transfer_info as t1
left join dc_base_transfer_info_skus as t2 on t1.dataid = t2.dataid
left join ( select dataid,sum(deliverycount) as 'deliverycount' from dc_base_transfer_info_skus GROUP BY dataid ) as t3 on t1.dataid = t3.dataid
left join dc_base_sku as t4 on t2.sku = t4.bailun_sku
where t1.isdeleted=0
and t1.isexception = 0
and t1.creationtime >=@btime and t1.creationtime <=@etime
and t1.targetwareno=@warehouse_code
and t1.estimatedcost>0
and t1.dataid in ( select dataid from dc_base_transfer_info_skus where sku=@sku)", new
{
btime = btime,
etime = etime,
warehouse_code = warehouse_code,
sku = bailun_sku
}, commandTimeout: 0).ToList();
where t1.dataid in @dataIds", new
{
dataIds = top5DataIds
}, commandTimeout: 0).ToList();
if (tempDatas != null && tempDatas.Count >= 1)
{
List<dc_base_transfer_freight_new_order> orders = new List<dc_base_transfer_freight_new_order>();
foreach (var itemGroup in tempDatas.GroupBy(s => s.code))
if (tempDatas != null && tempDatas.Count >= 1)
{
//计算该订单总sku重量
var sumWeight = itemGroup.Sum(s => s.weight * s.deliverycount);
var sumSkuCount = itemGroup.Sum(s => s.deliverycount);
var sumCost = itemGroup.FirstOrDefault().order_estimatedcost;
List<dc_base_transfer_freight_new_order> groupOrders = new List<dc_base_transfer_freight_new_order>();
foreach (var item in itemGroup.AsQueryable())
List<dc_base_transfer_freight_new_order> orders = new List<dc_base_transfer_freight_new_order>();
foreach (var itemGroup in tempDatas.GroupBy(s => s.code))
{
dc_base_transfer_freight_new_order new_order = new dc_base_transfer_freight_new_order()
//计算该订单总sku重量
var sumWeight = itemGroup.Sum(s => s.weight * s.deliverycount);
var sumSkuCount = itemGroup.Sum(s => s.deliverycount);
var sumCost = itemGroup.FirstOrDefault().order_estimatedcost;
List<dc_base_transfer_freight_new_order> groupOrders = new List<dc_base_transfer_freight_new_order>();
foreach (var item in itemGroup.AsQueryable())
{
main_bailun_sku = bailun_sku,
bailun_sku = item.sku,
gmt_update_time = DateTime.Now,
sku_count = item.deliverycount,
transfer_order_id = itemGroup.Key,
sku_weight = item.weight * item.deliverycount,
warehouse_code = warehouse_code,
order_cost = item.order_estimatedcost,
order_sku_count = sumSkuCount,
order_weight = sumWeight,
sku_cost = Math.Round((item.weight * item.deliverycount).Division(sumWeight) * item.order_estimatedcost, 2)
};
groupOrders.Add(new_order);
dc_base_transfer_freight_new_order new_order = new dc_base_transfer_freight_new_order()
{
main_bailun_sku = bailun_sku,
bailun_sku = item.sku,
gmt_update_time = DateTime.Now,
sku_count = item.deliverycount,
transfer_order_id = itemGroup.Key,
sku_weight = item.weight * item.deliverycount,
warehouse_code = warehouse_code,
order_cost = item.order_estimatedcost,
order_sku_count = sumSkuCount,
order_weight = sumWeight,
sku_cost = Math.Round((item.weight * item.deliverycount).Division(sumWeight) * item.order_estimatedcost, 2)
};
groupOrders.Add(new_order);
}
var cha = (sumCost - groupOrders.Sum(s => s.sku_cost));
if (cha > 0)
{
var topSkuOrder = groupOrders.OrderByDescending(s => s.order_cost).FirstOrDefault();
topSkuOrder.order_cost += cha;
}
orders.AddRange(groupOrders);
foreach (var itemOrder in orders)
{
_connection.Insert(itemOrder);
}
}
var cha = (sumCost - groupOrders.Sum(s => s.sku_cost));
if (cha>0)
var thisOrders = orders.Where(s => s.bailun_sku == bailun_sku).ToList();
dc_base_transfer_freight_new newData = new dc_base_transfer_freight_new()
{
bailun_sku = bailun_sku,
count = thisOrders.Sum(s => s.sku_count),
freight = thisOrders.Sum(s => s.sku_cost),
update_time = DateTime.Now,
warehouse_code = warehouse_code,
id = _connection.QueryFirstOrDefault<int?>(" select id from dc_base_transfer_freight_new where bailun_sku=@bailun_sku and warehouse_code=@warehouse_code ", new { bailun_sku = bailun_sku, warehouse_code = warehouse_code }) ?? 0
};
newData.freight_unit_price = newData.freight.Division(newData.count);
if (newData.id <= 0)
{
var topSkuOrder = groupOrders.OrderByDescending(s => s.order_cost).FirstOrDefault();
topSkuOrder.order_cost += cha;
_connection.Insert(newData);
}
orders.AddRange(groupOrders);
foreach (var itemOrder in orders)
else
{
_connection.Insert(itemOrder);
_connection.Update(newData);
}
}
var thisOrders = orders.Where(s => s.bailun_sku == bailun_sku).ToList();
dc_base_transfer_freight_new newData = new dc_base_transfer_freight_new()
{
bailun_sku = bailun_sku,
count = thisOrders.Sum(s => s.sku_count),
freight = thisOrders.Sum(s => s.sku_cost),
update_time = DateTime.Now,
warehouse_code = warehouse_code,
id = _connection.QueryFirstOrDefault<int?>(" select id from dc_base_transfer_freight_new where bailun_sku=@bailun_sku and warehouse_code=@warehouse_code ", new { bailun_sku = bailun_sku, warehouse_code = warehouse_code }) ?? 0
};
newData.freight_unit_price = newData.freight.Division(newData.count);
if (newData.id <= 0)
{
_connection.Insert(newData);
return newData.freight_unit_price;
}
else
{
_connection.Update(newData);
// 清空运费
_connection.Execute(" delete from dc_base_transfer_freight_new where bailun_sku=@bailun_sku and warehouse_code=@warehouse_code ", new
{
bailun_sku = bailun_sku,
warehouse_code = warehouse_code,
});
return 0;
}
return newData.freight_unit_price;
}
else
{
// 清空运费
_connection.Execute(" delete from dc_base_transfer_freight_new where bailun_sku=@bailun_sku and warehouse_code=@warehouse_code ", new
{
bailun_sku = bailun_sku,
warehouse_code = warehouse_code,
});
return 0;
}
}
public class CalculationFreightDto
......
......@@ -48,7 +48,7 @@ namespace ResetOutofstock
// report_invest_return_dao.SynchBtmAdFees();
//report_invest_return_dao.ShareAdFee();
//report_invest_return_dao.SynchBtmOrderRefund();
//report_invest_return_dao.CalculationStockScore();
report_invest_return_dao.CalculationStockScore();
}
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