Demo
2024-07-17 3a9b5dcd5dd6ed033f80f1696b07135635b3e9f8
Wms/WMS.BLL/DataServer/StockInfoServer.cs
New file
@@ -0,0 +1,622 @@
using Dm;
using Microsoft.IdentityModel.Tokens;
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 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<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;
            }
        }
    }
}