using Model.ModelVm.DataVm;
|
using SqlSugar;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using WMS.DAL;
|
using WMS.Entity.Context;
|
using WMS.Entity.DataEntity;
|
using WMS.Entity.SysEntity;
|
using WMS.IBLL.IDataServer;
|
|
namespace WMS.BLL.DataServer
|
{
|
public class StockInfoServer : DbHelper<DataStockInfo>, IStockInfoServer
|
{
|
private static readonly SqlSugarScope Db = DataContext.Db;
|
|
public StockInfoServer() : base(Db)
|
{
|
}
|
|
/// <summary>
|
/// 每日凌晨自动执行当前方法
|
/// 添加库存总表到库存信息
|
/// </summary>
|
/// <returns></returns>
|
public string ByDayInsertStock()
|
{
|
try
|
{
|
|
string arr = "";
|
//获取今日时间与昨日时间
|
var data1 = DateTime.Now.ToString("yyyy-MM-dd");
|
var data2 = DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd");
|
//获取当前库存总表信息
|
var stock = Db.Queryable<DataStock>().Where(a => a.IsDel == "0").ToList();
|
//以及前一天的库存信息
|
var info = Db.Queryable<DataStockInfo>().Where(a => a.IsDel == "0" && a.CreateTime.Year == DateTime.Parse(data2).Year && a.CreateTime.Month == DateTime.Parse(data2).Month && a.CreateTime.Day == DateTime.Parse(data2).Day).ToList();
|
//获取物料信息
|
var sku = Db.Queryable<SysMaterials>().Where(a => a.IsDel == "0").ToList();
|
//获取单位信息
|
var unit = Db.Queryable<SysUnit>().Where(a => a.IsDel == "0").ToList();
|
Db.BeginTran();
|
List<DataStockInfo> list = new List<DataStockInfo>();
|
//验证是否存在前一天的库存信息
|
if (info.Count <= 0)
|
{
|
//根据库存总表添加对应库存信息
|
foreach (var item in stock)
|
{
|
|
//获取对应单位信息
|
var unitNo = sku.Where(a => a.IsDel == "0" && a.SkuNo == item.SkuNo).Select(a => a.UnitNo).ToString();
|
var unitName = unit.Where(a => a.IsDel == "0" && a.UnitNo == unitNo).Select(a => a.UnitName).ToString();
|
|
var Folded = item.Standard.Split("*");
|
int count = 0;
|
var sum = 0m;
|
//获取对应折件数量
|
foreach (var item1 in Folded)
|
{
|
if (count == 0)
|
{
|
if (item1.Contains(unitName))
|
{
|
count = 1;
|
sum = Convert.ToDecimal(item1);
|
}
|
}
|
if (count == 1)
|
{
|
sum *= Convert.ToDecimal(item1);
|
}
|
}
|
DataStockInfo data = new DataStockInfo()
|
{
|
SkuNo = item.SkuNo,
|
SkuName = item.SkuName,
|
Standard = item.Standard,
|
Unit = unitName,
|
LastMonthQty = 0, //上月结存-库存数量
|
LastMonthFoldedQty = 0, //上月结存-折件数量
|
ArrDayQty = item.Qty, //入库数量-当日数量
|
ArrDayFoldedQty = item.Qty / sum, //入库数量-当日折件数量
|
ArrMonthQty = item.Qty, //入库数量-当月数量
|
ArrMonthFoldedQty = item.Qty / sum, //入库数量-当月折件数量
|
ArrYearQty = item.Qty, //入库数量-本年数量
|
ArrYearFoldedQty = item.Qty / sum, //入库数量-本年折件数量
|
SoDayQty = 0, //出库数量-当日数量
|
SoDayFoldedQty = 0, //出库数量-当日折件数量
|
SoMonthQty = 0, //出库数量-当月数量
|
SoMonthFoldedQty = 0, //出库数量-当月折件数量
|
SoYearQty = 0, //出库数量-本年数量
|
SoYearFoldedQty = 0, //出库数量-本年折件数量
|
MonthQty = item.Qty, //当月数量-累计数量
|
MonthFoldedQty = item.Qty / sum, //当月数量-累计折件数量
|
DepositQty = 0,
|
Qty = item.Qty,
|
SecurityQty = sku[0].LowInventory, //暂用低库存
|
Situation = item.Qty < sku[0].LowInventory ? "1" : "0",
|
IsDel = "0",
|
CreateTime = DateTime.Now,
|
CreateUser = 0,
|
UpdateTime = null,
|
UpdateUser = null,
|
|
};
|
|
|
list.Add(data);
|
}
|
}
|
else
|
{
|
//验证今日是一号还是其它
|
if (DateTime.Parse(data2).Day == 1)
|
{
|
//验证月份是否为1月
|
if (DateTime.Parse(data2).Month == 1)
|
{
|
//1月
|
//1月需要重新计算所有
|
foreach (var item in info)
|
{
|
var Folded = item.Standard.Split("*");
|
int count = 0;
|
var sum = 0m;
|
//获取对应折件数量
|
foreach (var item1 in Folded)
|
{
|
if (count == 0)
|
{
|
if (item1.Contains(item.Unit))
|
{
|
count = 1;
|
sum = Convert.ToDecimal(item1);
|
}
|
}
|
if (count == 1)
|
{
|
sum *= Convert.ToDecimal(item1);
|
}
|
}
|
|
DataStockInfo data = new DataStockInfo()
|
{
|
SkuNo = item.SkuNo,
|
SkuName = item.SkuName,
|
Standard = item.Standard,
|
Unit = item.Unit,
|
|
LastMonthQty = item.Qty, //上月结存-库存数量
|
LastMonthFoldedQty = item.Qty / sum, //上月结存-折件数量
|
ArrDayQty = 0, //入库数量-当日数量
|
ArrDayFoldedQty = 0, //入库数量-当日折件数量
|
ArrMonthQty = 0, //入库数量-当月数量
|
ArrMonthFoldedQty = 0, //入库数量-当月折件数量
|
ArrYearQty = 0, //入库数量-本年数量
|
ArrYearFoldedQty = 0, //入库数量-本年折件数量
|
SoDayQty = 0, //出库数量-当日数量
|
SoDayFoldedQty = 0, //出库数量-当日折件数量
|
SoMonthQty = 0, //出库数量-当月数量
|
SoMonthFoldedQty = 0, //出库数量-当月折件数量
|
SoYearQty = 0, //出库数量-本年数量
|
SoYearFoldedQty = 0, //出库数量-本年折件数量
|
MonthQty = 0, //当月数量-累计数量
|
MonthFoldedQty = 0, //当月数量-累计折件数量
|
|
DepositQty = item.DepositQty,
|
Qty = item.Qty,
|
SecurityQty = item.SecurityQty,
|
Situation = item.Qty < item.SecurityQty ? "1" : "0",
|
IsDel = "0",
|
CreateTime = DateTime.Now,
|
CreateUser = 0,
|
UpdateTime = null,
|
UpdateUser = null,
|
|
};
|
|
|
list.Add(data);
|
}
|
}
|
else if (DateTime.Parse(data2).Month != 1)
|
{
|
//1号
|
//1号需要重新计算当月与上月、当日
|
foreach (var item in info)
|
{
|
var Folded = item.Standard.Split("*");
|
int count = 0;
|
var sum = 0m;
|
//获取对应折件数量
|
foreach (var item1 in Folded)
|
{
|
if (count == 0)
|
{
|
if (item1.Contains(item.Unit))
|
{
|
count = 1;
|
sum = Convert.ToDecimal(item1);
|
}
|
}
|
if (count == 1)
|
{
|
sum *= Convert.ToDecimal(item1);
|
}
|
}
|
|
DataStockInfo data = new DataStockInfo()
|
{
|
SkuNo = item.SkuNo,
|
SkuName = item.SkuName,
|
Standard = item.Standard,
|
Unit = item.Unit,
|
|
LastMonthQty = item.Qty, //上月结存-库存数量
|
LastMonthFoldedQty = item.Qty / sum, //上月结存-折件数量
|
ArrDayQty = 0, //入库数量-当日数量
|
ArrDayFoldedQty = 0, //入库数量-当日折件数量
|
ArrMonthQty = 0, //入库数量-当月数量
|
ArrMonthFoldedQty = 0, //入库数量-当月折件数量
|
ArrYearQty = item.ArrYearQty, //入库数量-本年数量
|
ArrYearFoldedQty = item.ArrYearQty / sum, //入库数量-本年折件数量
|
SoDayQty = 0, //出库数量-当日数量
|
SoDayFoldedQty = 0, //出库数量-当日折件数量
|
SoMonthQty = 0, //出库数量-当月数量
|
SoMonthFoldedQty = 0, //出库数量-当月折件数量
|
SoYearQty = item.SoYearQty, //出库数量-本年数量
|
SoYearFoldedQty = item.SoYearQty / sum, //出库数量-本年折件数量
|
MonthQty = item.Qty, //当月数量-累计数量
|
MonthFoldedQty = item.Qty / sum, //当月数量-累计折件数量
|
|
DepositQty = item.DepositQty,
|
Qty = item.Qty,
|
SecurityQty = item.SecurityQty,
|
Situation = item.Qty < item.SecurityQty ? "1" : "0",
|
IsDel = "0",
|
CreateTime = DateTime.Now,
|
CreateUser = 0,
|
UpdateTime = null,
|
UpdateUser = null,
|
|
};
|
|
|
list.Add(data);
|
}
|
}
|
#region 注释例子
|
////1号
|
////1号需要重新计算当月与上月、当日
|
//foreach (var item in info)
|
//{
|
// DataStockInfo data = new DataStockInfo()
|
// {
|
// SkuNo = item.SkuNo,
|
// SkuName = item.SkuName,
|
// Standard = item.Standard,
|
// Unit = item.Unit,
|
// LastMonthQty = item.Qty,
|
// ArrDayQty = 0,
|
// ArrMonthQty = 0,
|
// ArrYearQty = item.ArrYearQty,
|
// SoDayQty = 0,
|
// SoMonthQty = 0,
|
// SoYearQty = item.SoYearQty,
|
// MonthQty = item.Qty,
|
// DepositQty = item.DepositQty,
|
// Qty = item.Qty,
|
// SecurityQty = item.SecurityQty,
|
// Situation = item.Qty >= item.SecurityQty ? "0" : "1",
|
// IsDel = "0",
|
// CreateTime = DateTime.Now,
|
// CreateUser = 0,
|
// UpdateTime = null,
|
// UpdateUser = null,
|
|
// };
|
|
|
// list.Add(data);
|
//}
|
|
#endregion
|
}
|
else
|
{
|
//其它
|
//需要计算当日
|
foreach (var item in info)
|
{
|
var Folded = item.Standard.Split("*");
|
int count = 0;
|
var sum = 0m;
|
//获取对应折件数量
|
foreach (var item1 in Folded)
|
{
|
if (count == 0)
|
{
|
if (item1.Contains(item.Unit))
|
{
|
count = 1;
|
sum = Convert.ToDecimal(item1);
|
}
|
}
|
if (count == 1)
|
{
|
sum *= Convert.ToDecimal(item1);
|
}
|
}
|
|
DataStockInfo data = new DataStockInfo()
|
{
|
SkuNo = item.SkuNo,
|
SkuName = item.SkuName,
|
Standard = item.Standard,
|
Unit = item.Unit,
|
|
LastMonthQty = item.LastMonthQty, //上月结存-库存数量
|
LastMonthFoldedQty = item.LastMonthQty / sum, //上月结存-折件数量
|
ArrDayQty = 0, //入库数量-当日数量
|
ArrDayFoldedQty = 0, //入库数量-当日折件数量
|
ArrMonthQty = item.ArrMonthQty, //入库数量-当月数量
|
ArrMonthFoldedQty = item.ArrMonthQty / sum, //入库数量-当月折件数量
|
ArrYearQty = item.ArrYearQty, //入库数量-本年数量
|
ArrYearFoldedQty = item.ArrYearQty / sum, //入库数量-本年折件数量
|
SoDayQty = 0, //出库数量-当日数量
|
SoDayFoldedQty = 0, //出库数量-当日折件数量
|
SoMonthQty = item.SoMonthQty, //出库数量-当月数量
|
SoMonthFoldedQty = item.SoMonthQty / sum, //出库数量-当月折件数量
|
SoYearQty = item.SoYearQty, //出库数量-本年数量
|
SoYearFoldedQty = item.SoYearQty / sum, //出库数量-本年折件数量
|
MonthQty = item.MonthQty, //当月数量-累计数量
|
MonthFoldedQty = item.MonthQty / sum, //当月数量-累计折件数量
|
|
DepositQty = item.DepositQty,
|
Qty = item.Qty,
|
SecurityQty = item.SecurityQty,
|
Situation = item.Qty < item.SecurityQty ? "1" : "0",
|
IsDel = "0",
|
CreateTime = DateTime.Now,
|
CreateUser = 0,
|
UpdateTime = null,
|
UpdateUser = null,
|
};
|
|
|
list.Add(data);
|
}
|
}
|
}
|
|
|
//添加库存信息
|
Db.Insertable<DataStockInfo>(list).ExecuteCommand();
|
|
Db.CommitTran();
|
return arr;
|
}
|
catch (Exception ex)
|
{
|
Db.RollbackTran();
|
throw ex;
|
}
|
}
|
|
/// <summary>
|
/// 获取对应天数信息
|
/// </summary>
|
/// <param name="StartDate"></param>
|
/// <returns></returns>
|
public List<DataStockInfoVM> GetDataStockInfo(string StartDate)
|
{
|
try
|
{
|
var list = Db.Queryable<DataStockInfo>().Where(a => a.IsDel == "0").ToList();
|
|
//验证是否存在选中时间 不存在则赋值今日时间
|
if (string.IsNullOrEmpty(StartDate))
|
{
|
StartDate = DateTime.Now.ToString("yyyy-MM-dd");
|
}
|
|
//根据时间获取对应日期的库存信息
|
if (!string.IsNullOrEmpty(StartDate))
|
{
|
list = list.Where(a => a.CreateTime.Year == DateTime.Parse(StartDate).Year && a.CreateTime.Month == DateTime.Parse(StartDate).Month && a.CreateTime.Day == DateTime.Parse(StartDate).Day).ToList();
|
}
|
|
List<DataStockInfoVM> list1 = new List<DataStockInfoVM>();
|
|
foreach (var item in list)
|
{
|
DataStockInfoVM info = new DataStockInfoVM()
|
{
|
SkuNo = item.SkuNo, //物料编码
|
SkuName = item.SkuName, //物料名称
|
Standard = item.Standard, //规格
|
Unit = item.Unit, //单位
|
LastMonthQty = item.LastMonthQty, //上月结存-库存数量
|
LastMonthFoldedQty = item.LastMonthFoldedQty, //上月结存-折件数量
|
ArrDayQty = item.ArrDayQty, //入库数量-当日数量
|
ArrDayFoldedQty = item.ArrDayFoldedQty, //入库数量-当日折件数量
|
ArrMonthQty = item.ArrMonthQty, //入库数量-当月数量
|
ArrMonthFoldedQty = item.ArrMonthFoldedQty, //入库数量-当月折件数量
|
ArrYearQty = item.ArrYearQty, //入库数量-本年数量
|
ArrYearFoldedQty = item.ArrYearFoldedQty, //入库数量-本年折件数量
|
SoDayQty = item.SoDayQty, //出库数量-当日数量
|
SoDayFoldedQty = item.SoDayFoldedQty, //出库数量-当日折件数量
|
SoMonthQty = item.SoMonthQty, //出库数量-当月数量
|
SoMonthFoldedQty = item.SoMonthFoldedQty, //出库数量-当月折件数量
|
SoYearQty = item.SoYearQty, //出库数量-本年数量
|
SoYearFoldedQty = item.SoYearFoldedQty, //出库数量-本年折件数量
|
MonthQty = item.MonthQty, //当月数量-累计数量
|
MonthFoldedQty = item.MonthFoldedQty, //当月数量-累计折件数量
|
DepositQty = item.DepositQty, //寄存数量
|
Qty = item.Qty, //本月库存数量
|
SecurityQty = item.SecurityQty, //安全库存
|
Situation = item.Situation, //安全库存情况
|
IsDel = item.IsDel, //是否删除
|
CreateTime = item.CreateTime, //创建时间
|
CreateUser = item.CreateUser, //创建人
|
UpdateTime = item.UpdateTime, //更新时间
|
UpdateUser = item.UpdateUser, //更新人
|
};
|
list1.Add(info);
|
}
|
|
return list1;
|
}
|
catch (Exception ex)
|
{
|
|
throw ex;
|
}
|
}
|
|
|
/// <summary>
|
/// 根据出入库新增或修改信息
|
/// </summary>
|
/// <param name="type">类型 0:入库 1:出库</param>
|
/// <param name="qty">入库或出库数量</param>
|
/// <param name="isDeposit">是否寄存 0:是 1:否</param>
|
/// <param name="skuNo">物料编码</param>
|
/// <returns></returns>
|
public bool AddOrUptStockInfo(string type, decimal qty, string isDeposit, string skuNo)
|
{
|
try
|
{
|
int a = 0;
|
bool isTrue = false;
|
//获取今日时间
|
string date = DateTime.Now.ToString("yyyy-MM-dd");
|
//根据物料信息获取今日库存信息
|
var list = Db.Queryable<DataStockInfo>().First(a => a.IsDel == "0" && a.SkuNo == skuNo && a.CreateTime.Year == DateTime.Parse(date).Year && a.CreateTime.Month == DateTime.Parse(date).Month && a.CreateTime.Day == DateTime.Parse(date).Day);
|
Db.BeginTran();
|
//验证是否存在库存信息
|
if (list == null)
|
{
|
//根据物料编码获取物料信息
|
var sku = Db.Queryable<SysMaterials>().First(a => a.IsDel == "0" && a.SkuNo == skuNo);
|
//根据物料信息获取单位信息
|
var unit = Db.Queryable<SysUnit>().First(a => a.IsDel == "0" && a.UnitNo == sku.UnitNo);
|
//获取对应折件数量
|
var Folded = sku.Standard.Split("*");
|
int count = 0;
|
var sum = 0m;
|
foreach (var item1 in Folded)
|
{
|
if (count == 0)
|
{
|
if (item1.Contains(unit.UnitName))
|
{
|
count = 1;
|
sum = Convert.ToDecimal(item1);
|
}
|
}
|
if (count == 1)
|
{
|
sum *= Convert.ToDecimal(item1);
|
}
|
}
|
DataStockInfo info = new DataStockInfo()
|
{
|
SkuNo = sku.SkuNo,
|
SkuName = sku.SkuName,
|
Standard = sku.Standard,
|
Unit = unit.UnitName,
|
LastMonthQty = 0,
|
ArrDayQty = 0,
|
ArrMonthQty = 0,
|
ArrYearQty = 0,
|
SoDayQty = 0,
|
SoMonthQty = 0,
|
SoYearQty = 0,
|
MonthQty = 0,
|
DepositQty = 0,
|
Qty = 0,
|
SecurityQty = sku.LowInventory,
|
Situation = qty < sku.LowInventory ? "1" : "0",
|
IsDel = "0",
|
CreateTime = DateTime.Now,
|
CreateUser = 0,
|
UpdateTime = null,
|
UpdateUser = null,
|
|
};
|
|
if (type == "0") //入库
|
{
|
//编辑对应库存信息
|
info.ArrDayQty += qty; //当日入库数量
|
info.ArrDayFoldedQty += qty; //当日入库数量-折件
|
info.ArrMonthQty += qty; //当月入库数量
|
info.ArrMonthFoldedQty += qty; //当月入库数量-折件
|
info.ArrYearQty += qty; //今年入库数量
|
info.ArrYearFoldedQty += qty; //今年入库数量-折件
|
info.MonthQty += qty; //当月结存
|
info.MonthFoldedQty += qty; //当月结存-折件
|
|
if (isDeposit == "0")
|
{
|
//验证是否为寄存数量
|
info.DepositQty += qty; //寄存数量
|
}
|
info.Qty = info.MonthQty + info.DepositQty; //本月库存数量
|
}
|
else if (type == "1") //出库
|
{
|
//编辑对应库存信息
|
info.SoDayQty += qty; //当日出库数量
|
info.ArrDayFoldedQty += qty; //当日入库数量-折件
|
info.ArrMonthQty += qty; //当月入库数量
|
info.ArrMonthFoldedQty += qty; //当月入库数量-折件
|
info.ArrYearQty += qty; //今年入库数量
|
info.ArrYearFoldedQty += qty; //今年入库数量-折件
|
info.MonthQty += qty; //当月结存
|
info.MonthFoldedQty += qty; //当月结存-折件
|
|
if (isDeposit == "0")
|
{
|
//验证是否为寄存数量
|
info.DepositQty -= qty; //寄存数量
|
}
|
info.Qty = info.MonthQty + info.DepositQty; //本月库存数量
|
}
|
//新增库存信息
|
a = Db.Insertable(info).ExecuteCommand();
|
}
|
else
|
{
|
if (type == "0") //入库
|
{
|
//编辑对应库存信息
|
list.ArrDayQty += qty; //当日出库数量
|
list.ArrDayFoldedQty += qty; //当日入库数量-折件
|
list.ArrMonthQty += qty; //当月入库数量
|
list.ArrMonthFoldedQty += qty; //当月入库数量-折件
|
list.ArrYearQty += qty; //今年入库数量
|
list.ArrYearFoldedQty += qty; //今年入库数量-折件
|
list.MonthQty += qty; //当月结存
|
list.MonthFoldedQty += qty; //当月结存-折件
|
|
if (isDeposit == "0")
|
{
|
//验证是否为寄存数量
|
list.DepositQty += qty; //寄存数量
|
}
|
list.Qty = list.MonthQty + list.DepositQty; //本月库存数量
|
list.Situation = list.Qty < list.SecurityQty ? "1" : "0"; //安全库存情况
|
|
|
}
|
else if (type == "1") //出库
|
{
|
//编辑对应库存信息
|
list.SoDayQty += qty; //当日出库数量
|
list.ArrDayFoldedQty += qty; //当日入库数量-折件
|
list.ArrMonthQty += qty; //当月入库数量
|
list.ArrMonthFoldedQty += qty; //当月入库数量-折件
|
list.ArrYearQty += qty; //今年入库数量
|
list.ArrYearFoldedQty += qty; //今年入库数量-折件
|
list.MonthQty += qty; //当月结存
|
list.MonthFoldedQty += qty; //当月结存-折件
|
|
if (isDeposit == "0")
|
{
|
//验证是否为寄存数量
|
list.DepositQty -= qty; //寄存数量
|
}
|
list.Qty = list.MonthQty + list.DepositQty; //本月库存数量
|
list.Situation = list.Qty < list.SecurityQty ? "1" : "0"; //安全库存情况
|
}
|
a = Db.Updateable(list).ExecuteCommand();
|
}
|
|
Db.CommitTran();
|
if (a == 1)
|
{
|
isTrue = true;
|
}
|
|
return isTrue;
|
|
}
|
catch (Exception ex)
|
{
|
Db.RollbackTran();
|
throw ex;
|
}
|
}
|
}
|
}
|