Commit 7c6cd933 by 泽锋 李

fix

parent 4fbe34f8
using AutoTurnOver.Models;
using Dapper;
using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;
using AutoTurnOver.Utility;
namespace AutoTurnOver.DB
{
/// <summary>
/// 全量改零监控
/// </summary>
public class dc_config_full_push_monitor_dao : connectionHelper
{
public static List<dc_config_full_push_monitor> StorageCapacityList(dc_base_storage_capacity_search_dto m, int offset, int limit, ref int total)
{
var list = new List<dc_config_full_push_monitor>();
DynamicParameters parameters = new DynamicParameters();
try
{
var sql = @"select t1.*,t2.`warehouse_name` as 'warehouse_name' from dc_config_full_push_monitor as t1
left join dc_base_warehouse as t2 on t1.warehouse_code = t2.warehouse_code where 1 = 1 ";
if (!string.IsNullOrWhiteSpace(m.warehousetype))
{
sql += " and t2.hq_type=@hq_type";
parameters.Add("hq_type", m.warehousetype);
}
if (m.warehousearea > 0)
{
sql += " and t2.area_id=@warehousearea ";
parameters.Add("warehousearea", m.warehousearea);
}
if (!string.IsNullOrWhiteSpace(m.bailun_sku))
{
sql += " and t1.bailun_sku = @bailun_sku ";
parameters.Add("bailun_sku", m.bailun_sku);
}
if (!string.IsNullOrWhiteSpace(m.warehousecode))
{
sql += " and t1.warehouse_code=@warehousecode ";
parameters.Add("warehousecode", m.warehousecode);
}
total = _connection.QuerySingleOrDefault<int>("select count(0) from (" + sql + ") tb1", parameters);
var obj = _connection.Query<dc_config_full_push_monitor>(sql + " limit " + offset + "," + limit, parameters);
return obj.AsList();
}
catch (Exception ex)
{
return list;
}
}
public static List<dc_config_full_push_monitor_log> StorageCapacityLogList(dc_base_storage_capacity_log_search_dto m, int offset, int limit, ref int total)
{
var list = new List<dc_config_full_push_monitor_log>();
DynamicParameters parameters = new DynamicParameters();
try
{
var sql = @"select t1.*,t2.`warehouse_name` as 'warehouse_name' from dc_config_full_push_monitor_log as t1
left join dc_base_warehouse as t2 on t1.warehouse_code = t2.warehouse_code where 1 = 1 ";
if (!string.IsNullOrWhiteSpace(m.warehousetype))
{
sql += " and t2.hq_type=@hq_type";
parameters.Add("hq_type", m.warehousetype);
}
if (m.warehousearea > 0)
{
sql += " and t2.area_id=@warehousearea ";
parameters.Add("warehousearea", m.warehousearea);
}
if (!string.IsNullOrWhiteSpace(m.bailun_sku))
{
sql += " and t1.bailun_sku = @bailun_sku ";
parameters.Add("bailun_sku", m.bailun_sku);
}
if (!string.IsNullOrWhiteSpace(m.warehousecode))
{
sql += " and t1.warehouse_code=@warehousecode ";
parameters.Add("warehousecode", m.warehousecode);
}
if (m.btime != null)
{
sql += " and t1.date>=@btime ";
parameters.Add("btime", m.btime.Value.ToDayHome());
}
if (m.etime != null)
{
sql += " and t1.date<=@etime ";
parameters.Add("etime", m.etime.Value.ToDayHome());
}
total = _connection.QuerySingleOrDefault<int>("select count(0) from (" + sql + ") tb1", parameters);
sql += " order by t1.date desc ";
var obj = _connection.Query<dc_config_full_push_monitor_log>(sql + " limit " + offset + "," + limit, parameters);
return obj.AsList();
}
catch (Exception)
{
return list;
}
}
/// <summary>
/// 新增日志
/// </summary>
/// <param name="data"></param>
/// <param name="is_share">是否需要处理共享仓</param>
public static void AddLog(dc_config_full_push_monitor_log data,int is_share = 0)
{
if (string.IsNullOrWhiteSpace(data.create_user))
{
throw new Exception("创建人必填");
}
data.unique_no = $"{data.bailun_sku}{data.warehouse_code}{data.platform_type}";
var conn = MyMySqlConnection._connection;
conn.Open();
using (var t = conn.BeginTransaction())
{
try
{
// 查询是否有库容记录
var mainData = conn.QuerySingleOrDefault<dc_config_full_push_monitor>(" select * from dc_config_full_push_monitor where unique_no=@unique_no ", new
{
unique_no = data.unique_no
});
if (mainData == null)
{
mainData = new dc_config_full_push_monitor
{
unique_no = data.unique_no,
warehouse_code = data.warehouse_code,
platform_type = data.platform_type,
bailun_sku = data.bailun_sku
};
mainData.id = conn.Insert(mainData) ?? 0;
}
data.date = DateTime.Now;
conn.Insert(data);
int line_count = conn.Execute(" update dc_config_full_push_monitor set status=@status where unique_no=@unique_no ", new
{
status = mainData.status,
unique_no = mainData.unique_no
});
if (line_count <= 0)
{
AddLog(data);
}
t.Commit();
}
catch (Exception ex)
{
t.Rollback();
throw;
}
}
}
}
}
......@@ -511,7 +511,9 @@ t9.quantity_transfer_temporary_storage as 'quantity_transfer_temporary_storage',
t1.first_order_date as 'first_order_date',
t1.first_order_bailun_order_id as 'first_order_bailun_order_id',
t1.daily_weighted_sales as 'fixed_daily_weighted_sales',
t1.quantity_out_stock as 'fixed_quantity_out_stock'
t1.quantity_out_stock as 'fixed_quantity_out_stock',
t10.area_id as 'area_id',
t10.hq_type as 'w_hq_type'
from (select * from dc_auto_turnover where gmt_modified>=@btime ) as t1
left join dc_auto_sales as t2 on t1.bailun_sku = t2.bailun_sku and t1.warehouse_code = t2.warehouse_code
left join dc_auto_config_sku_warehouse as t5 on t1.bailun_sku = t5.bailun_sku and t1.warehouse_code = t5.warehouse_code
......@@ -520,6 +522,7 @@ t1.quantity_out_stock as 'fixed_quantity_out_stock'
left join dc_auto_jit_tag as t8 on t1.tag_id = t8.id
left join dc_auto_replace_logistics_task as tr_task on t1.auto_replace_logistics_task_id = tr_task.id
left join dc_mid_transit as t9 on t1.bailun_sku = t9.bailun_sku and t1.warehouse_code = t9.warehouse_code
left join dc_base_warehouse t10 on t1.warehouse_code = t10.warehouse_code
where 1=1
and ( (
t6.`status`=2
......@@ -537,7 +540,9 @@ and ( t5.`status`=0 or t5.`status` is null ) and t7.sum_quantity_init_advise>0
Console.WriteLine("开始出建议 完");
// 旧品30天内只有1单,不备货;新品只出过单则只出缺货
var datas2 = OldProductCalculation(datas3);
var datas1 = OldProductCalculation(datas3);
//清理同区域冗余数量
var datas2 = AreaRedundancyClear(datas1);
if (datas2 != null && datas2.Count >= 1)
{
......@@ -630,6 +635,79 @@ and t1.quantity_init_advise>=0 and ( t3.buyer_name in ('张莹霞1') and t1.ware
}
/// <summary>
/// 清理同区域冗余数量
/// </summary>
/// <param name="original_datas"></param>
/// <returns></returns>
public static List<dc_auto_purchase_advise_detailed> AreaRedundancyClear(List<dc_auto_purchase_advise_detailed> original_datas)
{
List<dc_auto_purchase_advise_detailed> datas = new List<dc_auto_purchase_advise_detailed>();
var notFbaDatas = original_datas.Where(s => !"FBA仓".Equals(s.w_hq_type, StringComparison.CurrentCultureIgnoreCase));
var fbaDatas = original_datas.Where(s => "FBA仓".Equals(s.w_hq_type, StringComparison.CurrentCultureIgnoreCase));
foreach (var item in notFbaDatas)
{
datas.Add(item);
}
//fab同个国家的sku特别处理
// 查询相关的冗余数据
List<AreaRedundancyClearTempDto> redundancyList = _connection.Query<AreaRedundancyClearTempDto>(@"select t1.bailun_sku,t1.warehouse_code,t2.area_id,(0-t1.quantity_init_advise) as 'quantity_init_advise' from dc_auto_turnover as t1
left join dc_base_warehouse as t2 on t1.warehouse_code =t2.warehouse_code
where t2.area_id=7 and t2.hq_type='fba仓'
and quantity_init_advise<0 and t1.bailun_sku in @bailun_skus ", new {
bailun_skus = fbaDatas.Select(s=>s.bailun_sku).ToList()
}).ToList();
foreach (var groupItem in fbaDatas.GroupBy(s=>new { s.bailun_sku,s.area_id}))
{
var rDatas = redundancyList.Where(s => s.bailun_sku == groupItem.Key.bailun_sku && s.area_id == groupItem.Key.area_id).ToList();
if(rDatas!=null&& rDatas.Count >= 1)
{
// 排序分摊
var sumQuantity = rDatas.Sum(s => s.quantity_init_advise);
var groupStr = string.Join(",", rDatas.Select(s=>s.warehouse_code+":"+ s.quantity_init_advise));
foreach (var item in groupItem.OrderByDescending(s=>s.quantity_init_advise))
{
//冗余分完了
if (sumQuantity <= 0)
{
datas.Add(item);
}
else
{
if (sumQuantity >= item.quantity_final_advise)
{
sumQuantity -= item.quantity_final_advise;
item.quantity_final_advise = 0;
}
else
{
item.quantity_final_advise -= sumQuantity;
sumQuantity = 0;
}
item.remarks = $" 同区域其他仓库({groupStr})有冗余 ";
datas.Add(item);
}
}
}
else
{
datas.AddRange(groupItem);
}
}
return datas;
}
public class AreaRedundancyClearTempDto
{
public string warehouse_code { get; set; }
public string bailun_sku { get; set; }
public int area_id { get; set; }
public int quantity_init_advise { get; set; }
}
public static void CopyTurnoverData(int advId)
{
......
......@@ -48,6 +48,15 @@ namespace AutoTurnOver.Models
public class dc_auto_purchase_advise_detailed
{
public int id { get; set; }
/// <summary>
/// 仓库所属国家
/// </summary>
public int area_id { get; set; }
/// <summary>
/// 仓库类型
/// </summary>
public string w_hq_type { get; set; }
/// <summary>
/// 是否需要优先匹配库容
......
using System;
using System.Collections.Generic;
using System.Text;
namespace AutoTurnOver.Models
{
public class dc_config_full_push_monitor
{
public int id { get; set; }
public string platform_type { get; set; }
public string bailun_sku { get; set; }
public string warehouse_code { get; set; }
public string unique_no { get; set; }
public int status { get; set; }
}
public class dc_config_full_push_monitor_log
{
public int id { get; set; }
public string platform_type { get; set; }
public string bailun_sku { get; set; }
public string warehouse_code { get; set; }
public string unique_no { get; set; }
public int status { get; set; }
public DateTime date { get; set; }
public string create_user { get; set; }
}
}
using AutoTurnOver.DB;
using AutoTurnOver.Models;
using AutoTurnOver.Utility;
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Text;
namespace AutoTurnOver.Services
{
/// <summary>
/// 全量改零推送
/// </summary>
public class FullPushMonitorServices
{
public List<dc_base_storage_capacity_dto> StorageCapacityList(dc_base_storage_capacity_search_dto m, int offset, int limit, ref int total)
{
return dc_base_storage_capacity_dao.StorageCapacityList(m, offset, limit, ref total);
}
public List<dc_base_storage_capacity_log_dto> StorageCapacityLogList(dc_base_storage_capacity_log_search_dto m, int offset, int limit, ref int total)
{
return dc_base_storage_capacity_dao.StorageCapacityLogList(m, offset, limit, ref total);
}
public List<dc_base_storage_capacity_dto> GetList(dc_base_storage_capacity_query_dto query)
{
return dc_base_storage_capacity_dao.GetList(query);
}
public void AddLog(dc_base_storage_capacity_log data)
{
dc_base_storage_capacity_dao.AddLog(data);
}
public batch_dc_base_storage_capacity_log BatchAddLog(batch_dc_base_storage_capacity_log data)
{
return dc_base_storage_capacity_dao.BatchAddLog(data);
}
public DataTable Import(Stream fileInfo, UserData user)
{
var data_set = EPPlusHelper.ReadExcel(fileInfo);
var table = data_set.Tables[0];
if (!table.Columns.Contains("导入结果")) table.Columns.Add("导入结果");
if (!table.Columns.Contains("导入异常")) table.Columns.Add("导入异常");
var warehouse_list = DB.common.ListWareHouse(null, null);
DateTime now = DateTime.Now;
int index = 1;
foreach (DataRow row in table.Rows)
{
index++;
try
{
var warehouse_code = row["仓库编码"].ToString();
var account = row["账号"].ToString();
var stock_str = row["库容"].ToString();
if (string.IsNullOrWhiteSpace(warehouse_code)) throw new Exception("warehouse_code必填");
var warehouse_data = warehouse_list.SingleOrDefault(s => s.warehouse_code.Equals(warehouse_code, StringComparison.OrdinalIgnoreCase));
if (warehouse_data == null) { throw new Exception("仓库在系统中找不到"); }
var warehouse_name = warehouse_data.warehouse_name;
decimal stock = 0M;
if (!decimal.TryParse(stock_str, out stock))
{
throw new Exception("库容格式异常");
}
dc_base_storage_capacity_dao.AddLog(new dc_base_storage_capacity_log
{
create_user = user.UserName,
warehouse_code = warehouse_code,
account = account,
order_no = "",
quantity = stock,
type = (int)dc_base_storage_capacity_log_enum.导入
});
row["导入结果"] = "成功";
row["导入异常"] = "";
}
catch (Exception ex)
{
row["导入结果"] = "失败";
row["导入异常"] = ex.Message;
}
}
return table;
}
}
}
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