using Model.ModelDto.DataDto; using SqlSugar; using System; using System.Collections; 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; using WMS.Entity.DataEntity; using WMS.Entity.SysEntity; using WMS.IBLL.IBllCheckServer; namespace WMS.BLL.BllCheckServer { public class StockFreectSetve : DbHelper, IStockFreectSetve { private static readonly SqlSugarScope Db = DataContext.Db; public StockFreectSetve() : base(Db) { } #region 冻结\解冻 public async Task> ByTypeGetDataStockType(string SkuNo, int type) { var list = await Db.Queryable().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().WhereIF(!string.IsNullOrWhiteSpace(SkuNo), a => a.SkuNo.Contains(SkuNo)).Where(a => list.Contains(a.SkuNo)).ToList(); return list; } /// /// 获取库存冻结信息 /// /// /// public async Task> GetDataFreezeList(FreezeUnfreezeInfoDto model) { return await Db.Queryable() .LeftJoin((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((a, b) => new FreezeUnfreezeInfoDto() { UserName = b.RealName }, true) .ToListAsync(); } /// /// 获取库存解冻信息 /// /// /// public async Task> GetDataUnFreezeList(FreezeUnfreezeInfoDto model) { return await Db.Queryable() .LeftJoin((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((a, b) => new FreezeUnfreezeInfoDto() { UserName = b.RealName }, true) .ToListAsync(); } /// /// 添加冻结\解冻信息 /// /// /// public async Task InsertDataFreezeInfo(FreezeUnfreezeInfoDto model) { try { string errStr = ""; var TimeStr = Db.GetDate(); //验证批次与物料是否为异常 var stock = await Db.Queryable().FirstAsync(a => a.IsDel == "0" && a.LotNo == model.LotNo && a.SkuNo == model.SkuNo); //当前物料或批次存在异常 if (stock == null) { throw Oops.Bah("-1:当前物料或批次存在异常!"); } //验证物料信息是否存在异常 var sku = Db.Queryable().First(a => a.IsDel == "0" && a.SkuNo == model.SkuNo); if (sku == null) { throw Oops.Bah("-1:当前物料信息存在异常!"); } //冻结 if (model.Status == 1) { //验证冻结数量是否小于当前库存-锁定-冻结数量 if (model.FrozenQty <= 0) { throw Oops.Bah("-1:当前想要冻结的数量不可为0!"); } //验证冻结数量是否小于当前库存-锁定-冻结数量 if (model.FrozenQty > (stock.Qty - stock.LockQty - stock.FrozenQty)) { throw Oops.Bah("-1:当前想要冻结的数量大于库存可冻结数量!"); } //验证原因是否为空 if (string.IsNullOrWhiteSpace(model.Demo)) { throw Oops.Bah("-1:冻结原因不可为空!"); } } // 解冻 else if (model.Status == 2) { //验证冻结数量是否小于当前库存-锁定-冻结数量 if (model.FrozenQty <= 0) { throw Oops.Bah("-1:当前想要冻结的数量不可为0!"); } //验证冻结数量是否小于当前库存冻结数量 if (model.FrozenQty > model.Qty) { throw Oops.Bah("-1:当前想要解冻的数量必须小于库存冻结数量!"); } } Db.BeginTran(); //开启 //添加冻结\解冻信息 DataFreezeUnfreezeInfo list = new DataFreezeUnfreezeInfo() { SkuNo = model.SkuNo, //物料编码 SkuName = model.SkuName, //物料名称 Standard = stock.Standard, //规格 Type = sku.Type, //物料类型 Qty = stock.Qty, //库存当前数量 FrozenQty = model.FrozenQty, //冻结数量 LotNo = stock.LotNo, //批次 LotText = stock.LotText, //批次描述 SupplierLot = stock.SupplierLot, //供货批次 Status = model.Status, //状态 Demo = model.Demo, //原因 IsDel = "0", CreateTime = TimeStr, //时间 CreateUser = model.CreateUser, //冻结人 }; //修改库存信息 if (model.Status == 1) { stock.FrozenQty += (decimal)model.FrozenQty; } if (model.Status == 2) { stock.FrozenQty -= (decimal)model.FrozenQty; } await Db.Insertable(list).ExecuteCommandAsync(); await Db.Updateable(stock).ExecuteCommandAsync(); Db.CommitTran(); //提交 errStr = model.Status == 0 ? "添加冻结信息成功!" : "添加解冻信息成功!"; return errStr; } catch (Exception ex) { Db.RollbackTran(); //回滚 throw ex; } } #endregion } }