hwh
2024-07-15 2404ad68d1c24583798546b5b0fd7519debbd663
Wms/WMS.BLL/BllCheckServer/StockFreectSetve.cs
@@ -5,6 +5,8 @@
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Utility;
using WMS.DAL;
using WMS.Entity.BllCheckEntity;
using WMS.Entity.Context;
@@ -23,20 +25,12 @@
        #region 冻结\解冻
        public List<DataStock> ByTypeGetDataStockType(string SkuNo, int type)
        public async Task<List<DataStock>> ByTypeGetDataStockType(string SkuNo, int type)
        {
            try
            {
                var list = Db.Queryable<DataStock>().Where(a => a.IsDel == "0" && a.SkuNo != "100099" && type == 1 ? (a.Qty - a.LockQty - a.FrozenQty) > 0 : type == 2 ? a.FrozenQty > 0 : a.Id < 0).ToList();
                //var sku = Db.Queryable<SysMaterials>().WhereIF(!string.IsNullOrWhiteSpace(SkuNo), a => a.SkuNo.Contains(SkuNo)).Where(a => list.Contains(a.SkuNo)).ToList();
            var list = await Db.Queryable<DataStock>().Where(a => a.IsDel == "0" && a.SkuNo != "100099" && type == 1 ? (a.Qty - a.LockQty - a.FrozenQty) > 0 : type == 2 ? a.FrozenQty > 0 : a.Id < 0).ToListAsync();
            //var sku = Db.Queryable<SysMaterials>().WhereIF(!string.IsNullOrWhiteSpace(SkuNo), a => a.SkuNo.Contains(SkuNo)).Where(a => list.Contains(a.SkuNo)).ToList();
                return list;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return list;
        }
        /// <summary>
@@ -44,59 +38,23 @@
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public List<FreezeUnfreezeInfoDto> GetDataFreezeList(FreezeUnfreezeInfoDto model)
        public async Task<List<FreezeUnfreezeInfoDto>> GetDataFreezeList(FreezeUnfreezeInfoDto model)
        {
            try
            {
                string str = "select info.SkuNo,info.SkuName,info.LotNo,info.LotText,info.SupplierLot,info.Qty,info.FrozenQty,info.Demo,info.status,info.Standard,info.Type,info.CreateTime,users.UserName from DataFreezeUnfreezeInfo info left join SysUserInfor users on info.CreateUser = users.Id where info.IsDel = '0' and users.IsDel = '0' and info.Status = 1";
                #region 验证条件
                //验证物料号是否为空
                if (!string.IsNullOrWhiteSpace(model.SkuNo))
                {
                    str += $" and info.SkuNo like '%{model.SkuNo}%'";
                }
                //验证物料名称是否为空
                if (!string.IsNullOrWhiteSpace(model.SkuName))
                {
                    str += $" and info.SkuName like '%{model.SkuName}%'";
                }
                //验证批次是否为空
                if (!string.IsNullOrWhiteSpace(model.LotNo))
                {
                    str += $" and info.LotNo like '%{model.LotNo}%'";
                }
                // 验证类型是否为空
                if (!string.IsNullOrWhiteSpace(model.Type))
                {
                    str += $" and info.Type = '{model.Type}'";
                }
                // 验证原因是否为空
                if (!string.IsNullOrWhiteSpace(model.Demo))
                {
                    str += $" and info.Demo = '{model.Demo}'";
                }
                //验证结束时间是否为空
                if (!string.IsNullOrWhiteSpace(model.StartTime))
                {
                    str += $" and info.CreateTime < '{model.StartTime}'";
                }
                //验证结束时间是否为空
                if (!string.IsNullOrWhiteSpace(model.EndTime))
                {
                    model.EndTime = (DateTime.Parse(model.EndTime).AddDays(1)).ToString();
                    str += $" and info.CreateTime < '{model.EndTime}'";
                }
                #endregion
                List<FreezeUnfreezeInfoDto> list = Db.Ado.SqlQuery<FreezeUnfreezeInfoDto>(str);
                return list;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return await Db.Queryable<DataFreezeUnfreezeInfo>()
                           .LeftJoin<SysUserInfor>((a, b) => a.CreateUser == b.Id)
                           .Where(a => a.IsDel == "0" && a.Status == 1)
                           .WhereIF(!string.IsNullOrWhiteSpace(model.SkuNo), a => a.SkuNo.Contains(model.SkuNo))
                           .WhereIF(!string.IsNullOrWhiteSpace(model.SkuName), a => a.SkuName.Contains(model.SkuName))
                           .WhereIF(!string.IsNullOrWhiteSpace(model.LotNo), a => a.LotNo.Contains(model.LotNo))
                           .WhereIF(!string.IsNullOrWhiteSpace(model.Type), a => a.Type == model.Type)
                           .WhereIF(!string.IsNullOrWhiteSpace(model.Demo), a => a.Demo == model.Demo)
                           .WhereIF(!string.IsNullOrWhiteSpace(model.StartTime), a => SqlFunc.GreaterThanOrEqual(a.CreateTime, model.StartTime))
                           .WhereIF(!string.IsNullOrWhiteSpace(model.EndTime), a => SqlFunc.LessThanOrEqual(a.CreateTime, model.EndTime))
                           .Select<FreezeUnfreezeInfoDto>((a, b) => new FreezeUnfreezeInfoDto()
                           {
                               UserName = b.RealName
                           }, true)
                           .ToListAsync();
        }
        /// <summary>
@@ -104,59 +62,23 @@
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public List<FreezeUnfreezeInfoDto> GetDataUnFreezeList(FreezeUnfreezeInfoDto model)
        public async Task<List<FreezeUnfreezeInfoDto>> GetDataUnFreezeList(FreezeUnfreezeInfoDto model)
        {
            try
            {
                string str = "select info.SkuNo,info.SkuName,info.LotNo,info.LotText,info.SupplierLot,info.Qty,info.FrozenQty,info.Demo,info.status,info.Standard,info.Type,info.CreateTime,users.UserName from DataFreezeUnfreezeInfo info left join SysUserInfor users on info.CreateUser = users.Id where info.IsDel = '0' and users.IsDel = '0' and info.Status = 2";
                #region 验证条件
                //验证物料号是否为空
                if (!string.IsNullOrWhiteSpace(model.SkuNo))
                {
                    str += $" and info.SkuNo like '%{model.SkuNo}%'";
                }
                //验证物料名称是否为空
                if (!string.IsNullOrWhiteSpace(model.SkuName))
                {
                    str += $" and info.SkuName like '%{model.SkuName}%'";
                }
                //验证批次是否为空
                if (!string.IsNullOrWhiteSpace(model.LotNo))
                {
                    str += $" and info.LotNo like '%{model.LotNo}%'";
                }
                // 验证类型是否为空
                if (!string.IsNullOrWhiteSpace(model.Type))
                {
                    str += $" and info.Type = '{model.Type}'";
                }
                // 验证原因是否为空
                if (!string.IsNullOrWhiteSpace(model.Demo))
                {
                    str += $" and info.Demo = '{model.Demo}'";
                }
                //验证结束时间是否为空
                if (!string.IsNullOrWhiteSpace(model.StartTime))
                {
                    str += $" and info.CreateTime < '{model.StartTime}'";
                }
                //验证结束时间是否为空
                if (!string.IsNullOrWhiteSpace(model.EndTime))
                {
                    model.EndTime = (DateTime.Parse(model.EndTime).AddDays(1)).ToString();
                    str += $" and info.CreateTime < '{model.EndTime}'";
                }
                #endregion
                var list = Db.Ado.SqlQuery<FreezeUnfreezeInfoDto>(str);
                return list;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            return await Db.Queryable<DataFreezeUnfreezeInfo>()
                           .LeftJoin<SysUserInfor>((a, b) => a.CreateUser == b.Id)
                           .Where(a => a.IsDel == "0" && a.Status == 2)
                           .WhereIF(!string.IsNullOrWhiteSpace(model.SkuNo), a => a.SkuNo.Contains(model.SkuNo))
                           .WhereIF(!string.IsNullOrWhiteSpace(model.SkuName), a => a.SkuName.Contains(model.SkuName))
                           .WhereIF(!string.IsNullOrWhiteSpace(model.LotNo), a => a.LotNo.Contains(model.LotNo))
                           .WhereIF(!string.IsNullOrWhiteSpace(model.Type), a => a.Type == model.Type)
                           .WhereIF(!string.IsNullOrWhiteSpace(model.Demo), a => a.Demo == model.Demo)
                           .WhereIF(!string.IsNullOrWhiteSpace(model.StartTime), a => SqlFunc.GreaterThanOrEqual(a.CreateTime, model.StartTime))
                           .WhereIF(!string.IsNullOrWhiteSpace(model.EndTime), a => SqlFunc.LessThanOrEqual(a.CreateTime, model.EndTime))
                           .Select<FreezeUnfreezeInfoDto>((a, b) => new FreezeUnfreezeInfoDto()
                           {
                               UserName = b.RealName
                           }, true)
                           .ToListAsync();
        }
        /// <summary>
@@ -164,26 +86,24 @@
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public string InsertDataFreezeInfo(FreezeUnfreezeInfoDto model)
        public async Task<string> InsertDataFreezeInfo(FreezeUnfreezeInfoDto model)
        {
            try
            {
                string errStr = "";
                var TimeStr = Db.GetDate();
                //验证批次与物料是否为异常
                var stock = Db.Queryable<DataStock>().First(a => a.IsDel == "0" && a.LotNo == model.LotNo && a.SkuNo == model.SkuNo);
                var stock = await Db.Queryable<DataStock>().FirstAsync(a => a.IsDel == "0" && a.LotNo == model.LotNo && a.SkuNo == model.SkuNo);
                //当前物料或批次存在异常
                if (stock == null)
                {
                    errStr = "-1:当前物料或批次存在异常!";
                    return errStr;
                    throw Oops.Bah("-1:当前物料或批次存在异常!");
                }
                //验证物料信息是否存在异常
                var sku = Db.Queryable<SysMaterials>().First(a => a.IsDel == "0" && a.SkuNo == model.SkuNo);
                if (sku == null)
                {
                    errStr = "-1:当前物料信息存在异常!";
                    return errStr;
                    throw Oops.Bah("-1:当前物料信息存在异常!");
                }
                //冻结
                if (model.Status == 1)
@@ -191,22 +111,19 @@
                    //验证冻结数量是否小于当前库存-锁定-冻结数量
                    if (model.FrozenQty <= 0)
                    {
                        errStr = "-1:当前想要冻结的数量不可为0!";
                        return errStr;
                        throw Oops.Bah("-1:当前想要冻结的数量不可为0!");
                    }
                    //验证冻结数量是否小于当前库存-锁定-冻结数量
                    if (model.FrozenQty > (stock.Qty - stock.LockQty - stock.FrozenQty))
                    {
                        errStr = "-1:当前想要冻结的数量大于库存可冻结数量!";
                        return errStr;
                        throw Oops.Bah("-1:当前想要冻结的数量大于库存可冻结数量!");
                    }
                    //验证原因是否为空
                    if (string.IsNullOrWhiteSpace(model.Demo))
                    {
                        errStr = "-1:冻结原因不可为空!";
                        return errStr;
                        throw Oops.Bah("-1:冻结原因不可为空!");
                    }
                }
                // 解冻
@@ -215,14 +132,12 @@
                    //验证冻结数量是否小于当前库存-锁定-冻结数量
                    if (model.FrozenQty <= 0)
                    {
                        errStr = "-1:当前想要冻结的数量不可为0!";
                        return errStr;
                        throw Oops.Bah("-1:当前想要冻结的数量不可为0!");
                    }
                    //验证冻结数量是否小于当前库存冻结数量
                    if (model.FrozenQty > model.Qty)
                    {
                        errStr = "-1:当前想要解冻的数量必须小于库存冻结数量!";
                        return errStr;
                        throw Oops.Bah("-1:当前想要解冻的数量必须小于库存冻结数量!");
                    }
                }
@@ -259,8 +174,8 @@
                    stock.FrozenQty -= (decimal)model.FrozenQty;
                }
                Db.Insertable(list).ExecuteCommand();
                Db.Updateable(stock).ExecuteCommand();
                await Db.Insertable(list).ExecuteCommandAsync();
                await Db.Updateable(stock).ExecuteCommandAsync();
                Db.CommitTran(); //提交