Commit b1943ea2 by lizefeng

新增市场规则配置

parent d40da508
......@@ -24,7 +24,10 @@ namespace AutoTurnOver.DB
{
DynamicParameters parameters = new DynamicParameters();
parameters.Add("time", DateTime.Now.AddDays(0 - day).ToString("yyyy-MM-dd 00:00:00"));
return _connection.Query<temp_sku_dto>("select t1.bailun_sku,t1.warehouse_code,t1.supplier_id from dc_base_purchase as t1 where t1.supplier_id>0 ");
return _connection.Query<temp_sku_dto>(@"select t1.bailun_sku,t1.warehouse_code,t1.supplier_id from dc_base_purchase as t1
where t1.supplier_id>0
and EXISTS ( select * from dc_auto_turnover as t2 where t1.bailun_sku =t2.bailun_sku and t1.warehouse_code = t2.warehouse_code)
GROUP BY t1.bailun_sku,t1.warehouse_code,t1.supplier_id ");
//return _connection.Query<temp_sku_dto>("select t1.bailun_sku,t1.warehouse_code,t1.supplier_id from dc_base_purchase as t1 where t1.update_time>=@time group by t1.bailun_sku,t1.warehouse_code,t1.supplier_id ", parameters);
}
......
......@@ -4,6 +4,7 @@ using System.Data;
using System.Text;
using AutoTurnOver.Models;
using Dapper;
using System.Linq;
namespace AutoTurnOver.DB
......@@ -324,5 +325,144 @@ where 1=1 ";
return _connection.QueryFirst<Models.dc_auto_turnover>(" select * from dc_auto_turnover where bailun_sku=@bailun_sku and warehouse_code=@warehouse_code ", parameters);
}
#region 市场因素设置
/// <summary>
/// 获取市场因素设置分页列表
/// </summary>
/// <param name="m"></param>
/// <param name="offset"></param>
/// <param name="limit"></param>
/// <param name="total"></param>
/// <returns></returns>
public static List<dc_auto_config_correction> ListCorrection(Condition_ConfigPromotion m, int offset, int limit, ref int total)
{
var list = new List<dc_auto_config_correction>();
try
{
var sql = @"select dacp.id,dacp.bailun_sku,dacp.warehouse_code,dbw.warehouse_name,dacp.start_time,dacp.end_time,dacp.param,dacp.remark from dc_auto_config_correction dacp
left join dc_base_warehouse_oa dbw on dacp.warehouse_code = dbw.warehouse_code where 1 = 1 ";
if (m.IsEffective == true)
{
var nowStr = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
sql += $" and dacp.start_time<= '{nowStr}' and dacp.end_time>={nowStr} ";
}
if (!string.IsNullOrWhiteSpace(m.sku))
{
sql += " and dacp.bailun_sku like '%" + m.sku + "%'";
}
if (!string.IsNullOrWhiteSpace(m.warehousecode))
{
sql += " and dacp.warehouse_code='" + m.warehousecode + "'";
}
total = _connection.ExecuteScalar<int>("select count(0) from (" + sql + ") tb1");
var obj = _connection.Query<dc_auto_config_correction>(sql + " limit " + offset + "," + limit);
return obj.AsList();
}
catch (Exception)
{
return list;
}
}
/// <summary>
/// 查询未来指定时间范围内的市场因素数据
/// </summary>
/// <param name="sku"></param>
/// <param name="warehousecode"></param>
/// <param name="days"></param>
/// <returns></returns>
public static IEnumerable<dc_auto_config_correction> ListCorrection(string sku, string warehousecode, DateTime btime, DateTime etime)
{
DynamicParameters parameters = new DynamicParameters();
parameters.Add("bailun_sku", sku);
parameters.Add("warehouse_code", warehousecode);
parameters.Add("b_time", btime.ToString("yyyy-MM-dd 00:00:00"));
parameters.Add("e_time", etime.ToString("yyyy-MM-dd 23:59:59"));
return _connection.Query<Models.dc_auto_config_correction>(@"select * from dc_auto_config_correction where bailun_sku=@bailun_sku and warehouse_code=@warehouse_code and ( end_time>=@b_time or start_time<=@e_time ) ", parameters);
}
/// <summary>
/// 保存销售设置
/// </summary>
/// <param name="m">销售设置model</param>
/// <param name="username">当前操作人名称</param>
/// <returns></returns>
public static string SaveCorrection(Models.dc_auto_config_correction m, string username)
{
var obj = _connection.QueryFirstOrDefault<Models.dc_auto_config_correction>("select * from dc_auto_config_correction where id=" + m.id);
if (obj == null)
{
obj = new dc_auto_config_correction
{
gmt_create = DateTime.Now,
};
}
obj.id = m.id;
obj.bailun_sku = m.bailun_sku;
obj.bl_operator = username ?? "";
obj.gmt_modified = DateTime.Now;
obj.end_time = m.end_time;
obj.start_time = m.start_time;
obj.remark = m.remark;
obj.warehouse_code = m.warehouse_code;
obj.warehouse_name = m.warehouse_name;
obj.param = m.param;
// 检查该数据在时间段上是否有交叉重复
var oldDataList = ListCorrection(m.bailun_sku, m.warehouse_code, obj.start_time, obj.end_time);
if(oldDataList!=null && oldDataList.Any(s=>s.id!= obj.id))
{
return $" SKU:【{m.bailun_sku}】,仓库:【{m.warehouse_code}】 在在所选时间范围已经有配置了数据,请勿重复配置 ";
}
try
{
if (obj.id > 0)
{
var result = _connection.Update<Models.dc_auto_config_correction>(obj);
return result > 0 ? "" : "保存异常,请重试!";
}
else
{
var result = _connection.Insert<Models.dc_auto_config_correction>(obj);
return result.HasValue && result.Value > 0 ? "" : "提交异常,请重试!";
}
}
catch (Exception ex)
{
return ex.Message;
}
}
/// <summary>
/// 获取特殊销售设置详情
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public static dc_auto_config_correction GetCorrectionById(int id)
{
return _connection.QueryFirstOrDefault<dc_auto_config_correction>("select * from dc_auto_config_correction where id=" + id);
}
#endregion
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace AutoTurnOver.Models
{
public class dc_auto_config_correction
{
public int id { get; set; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime gmt_create { get; set; }
/// <summary>
/// 最后更新时间
/// </summary>
public DateTime gmt_modified { get; set; }
/// <summary>
/// sku编码
/// </summary>
public string bailun_sku { get; set; }
/// <summary>
/// 仓库编码
/// </summary>
public string warehouse_code { get; set; }
/// <summary>
/// 仓库名称
/// </summary>
public string warehouse_name { get; set; }
/// <summary>
/// 数量
/// </summary>
public decimal param { get; set; }
public DateTime start_time { get; set; }
public DateTime end_time { get; set; }
/// <summary>
/// 备注
/// </summary>
public string remark { get; set; }
/// <summary>
/// 操作人
/// </summary>
public string bl_operator { get; set; }
}
}
......@@ -56,7 +56,14 @@ namespace AutoTurnOver.Services
// 查询这些时间范围的 特殊销量情况
var configPromotionList = DB.dc_auto_turnover.ListConfigPromotion(sku, warehousecode, today, endDay);
// 查询这些时间范围的 市场因素情况
var correctionList = DB.dc_auto_turnover.ListCorrection(sku, warehousecode, today, endDay);
// 用于存储特殊销量规则
List<int> tempStrList = new List<int>();
// 用于存储市场因素规则
List<decimal> tempCorrectionStrList = new List<decimal>();
for (var i = 0; i < count; i++)
{
var tempDate = today.AddDays(i);
......@@ -71,8 +78,19 @@ namespace AutoTurnOver.Services
{
tempStrList.Add(tempData.count);
}
var tempCorrectionData = correctionList.FirstOrDefault(s => s.end_time >= tempDateHome && s.start_time <= tempDateEnd);
if (tempData == null)
{
tempCorrectionStrList.Add(1);
}
else
{
tempCorrectionStrList.Add(tempCorrectionData.param);
}
}
list.Add(tempStrList != null ? tempStrList.ToJson() : "[]");
list.Add(tempCorrectionStrList != null ? tempCorrectionStrList.ToJson() : "[]");
////添加预测销量
//list.Add(new mforecast {
......
......@@ -138,6 +138,96 @@ namespace AutoTurnOver.Services
#endregion
#region 市场因素设置
/// <summary>
/// 获取市场因素设置分页列表
/// </summary>
/// <param name="m"></param>
/// <param name="offset"></param>
/// <param name="limit"></param>
/// <returns></returns>
public List<dc_auto_config_correction> CorrectionList(Condition_ConfigPromotion m, int offset, int limit, ref int total)
{
return DB.dc_auto_turnover.ListCorrection(m, offset, limit, ref total);
}
/// <summary>
/// 查询未来指定时间范围内的特殊销量数据
/// </summary>
/// <param name="days"></param>
/// <returns></returns>
public IEnumerable<dc_auto_config_correction> CorrectionList(string sku, string warehousecode, int days)
{
var now = DateTime.Now;
return DB.dc_auto_turnover.ListCorrection(sku, warehousecode, now, now.AddDays(days));
}
/// <summary>
/// 保存销售设置
/// </summary>
/// <param name="m">销售设置model</param>
/// <param name="username">当前操作人</param>
/// <returns></returns>
public string SaveCorrection(Models.dc_auto_config_correction m, string username)
{
if (string.IsNullOrWhiteSpace(m.bailun_sku))
{
return "Sku不能为空!";
}
if (string.IsNullOrWhiteSpace(m.warehouse_code))
{
return "请选择仓库!";
}
if (m.param <= 0)
{
return "比例必须大于0!";
}
var objWarehouse = DB.common.GetWareHouseByCode(m.warehouse_code);
if (objWarehouse == null)
{
return "系统找不到该仓库。";
}
m.warehouse_name = objWarehouse.warehouse_name;
if (m.start_time < DateTime.Parse(DateTime.Now.ToShortDateString()).AddDays(1))
{
return "开始时间必须大于今天!";
}
if (m.end_time < DateTime.Parse(DateTime.Now.ToShortDateString()).AddDays(1))
{
return "结束时间必须大于今天!";
}
if (DateTime.Parse(m.end_time.ToShortDateString()) < DateTime.Parse(m.start_time.ToShortDateString()))
{
return "结束时间不能小于开始时间!";
}
return DB.dc_auto_turnover.SaveCorrection(m, username);
}
/// <summary>
/// 获取市场因素设置详情
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
public dc_auto_config_correction GetCorrectionById(int id)
{
return DB.dc_auto_turnover.GetCorrectionById(id);
}
#endregion
#region 预估库存
/// <summary>
......
......@@ -43,7 +43,7 @@ namespace AutoTurnOver.Controllers
date.Add(today.AddDays(i).ToString("MM/dd"));
}
var names = new List<string>() { "销量", "预计入库", "可用库存", "预计缺货数量", "特殊销量" };
var names = new List<string>() { "销量", "预计入库", "可用库存", "预计缺货数量", "特殊销量","市场因素" };
var turnoverData = new Services.SkuAutoTurnServices().GetModel(sku, warehousecode);
var saleVolumeData = new Services.SaleVolumeServices().GetBySkuWarehouseCode(sku, warehousecode);
var averageTargets = PurchaseAverageTargetServices.GetList(sku, warehousecode);
......
......@@ -219,6 +219,102 @@ namespace AutoTurnOver.Controllers
}
#endregion
#region 市场因素配置
/// <summary>
/// 获取市场因素设置列表
/// </summary>
/// <param name="limit">每页记录数</param>
/// <param name="offset">偏移量</param>
/// <param name="order">排序字段</param>
/// <param name="sort">升序还是降序</param>
/// <param name="sku">sku编码</param>
/// <param name="warehousecode">仓库编码</param>
/// <param name="IsEffective">是否有效数据</param>
/// <returns></returns>
[HttpGet]
public JsonResult ListCorrection(int limit, int offset, string order, string sort, string sku, string warehousecode, bool? IsEffective = null)
{
var m = new Condition_ConfigPromotion
{
sku = sku,
warehousecode = warehousecode,
IsEffective = IsEffective
};
var total = 0;
var service = new Services.SkuAutoTurnServices();
var list = service.CorrectionList(m, offset, limit, ref total).Select(p => new {
p.bailun_sku,
p.warehouse_code,
p.warehouse_name,
start_time = p.start_time.ToString("yyyy-MM-dd"),
end_time = p.end_time.ToString("yyyy-MM-dd"),
p.param,
p.remark,
p.id
});
return new JsonResult(new
{
rows = list,
total = total,
});
}
/// <summary>
/// 保存市场因素设置
/// </summary>
/// <returns></returns>
[HttpGet]
public JsonResult SaveCorrection(int id, string sku, string warehousecode, DateTime btime,DateTime etime, decimal param, string note, string username)
{
var m = new Models.dc_auto_config_correction
{
id = id,
bailun_sku = sku,
param = param,
bl_operator = username,
gmt_create = DateTime.Now,
gmt_modified = DateTime.Now,
start_time = btime,
end_time = etime,
remark = note,
warehouse_code = warehousecode,
warehouse_name = "",
};
var result = new Services.SkuAutoTurnServices().SaveCorrection(m, username);
return new JsonResult(result);
}
/// <summary>
/// 获取市场因素设置详情
/// </summary>
/// <param name="id">销售设置id</param>
/// <returns></returns>
[HttpGet]
public JsonResult GetCorrectionById(int id)
{
var m = new Services.SkuAutoTurnServices().GetCorrectionById(id);
return new JsonResult(new
{
m.id,
m.bailun_sku,
m.bl_operator,
m.param,
bvtime = m.start_time.ToString("yyyy-MM-dd"),
evtime = m.end_time.ToString("yyyy-MM-dd"),
m.remark,
m.warehouse_code,
m.warehouse_name
});
}
#endregion
}
}
\ No newline at end of file
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