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, IStockInfoServer { private static readonly SqlSugarScope Db = DataContext.Db; public StockInfoServer() : base(Db) { } /// /// 每日凌晨自动执行当前方法 /// 添加库存总表到库存信息 /// /// 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().Where(a => a.IsDel == "0").ToList(); //以及前一天的库存信息 var info = Db.Queryable().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().Where(a => a.IsDel == "0").ToList(); //获取单位信息 var unit = Db.Queryable().Where(a => a.IsDel == "0").ToList(); Db.BeginTran(); List list = new List(); //验证是否存在前一天的库存信息 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(list).ExecuteCommand(); Db.CommitTran(); return arr; } catch (Exception ex) { Db.RollbackTran(); throw ex; } } /// /// 获取对应天数信息 /// /// /// public List GetDataStockInfo(string StartDate) { try { var list = Db.Queryable().Where(a => a.IsDel == "0").ToList(); //验证是否存在选中时间 不存在则赋值今日时间 if (string.IsNullOrEmpty(StartDate)) { StartDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ff"); } //根据时间获取对应日期的库存信息 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 list1 = new List(); 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; } } /// /// 根据出入库新增或修改信息 /// /// 类型 0:入库 1:出库 /// 入库或出库数量 /// 是否寄存 0:是 1:否 /// 物料编码 /// 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().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().First(a => a.IsDel == "0" && a.SkuNo == skuNo); //根据物料信息获取单位信息 var unit = Db.Queryable().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; } } } }