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<BllStockCheck>, IStockFreectSetve
|
{
|
private static readonly SqlSugarScope Db = DataContext.Db;
|
public StockFreectSetve() : base(Db)
|
{
|
}
|
|
#region 冻结\解冻
|
|
public async Task<List<DataStock>> ByTypeGetDataStockType(string SkuNo, int type)
|
{
|
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;
|
}
|
|
/// <summary>
|
/// 获取库存冻结信息
|
/// </summary>
|
/// <param name="model"></param>
|
/// <returns></returns>
|
public async Task<List<FreezeUnfreezeInfoDto>> GetDataFreezeList(FreezeUnfreezeInfoDto model)
|
{
|
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>
|
/// 获取库存解冻信息
|
/// </summary>
|
/// <param name="model"></param>
|
/// <returns></returns>
|
public async Task<List<FreezeUnfreezeInfoDto>> GetDataUnFreezeList(FreezeUnfreezeInfoDto model)
|
{
|
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>
|
/// 添加冻结\解冻信息
|
/// </summary>
|
/// <param name="model"></param>
|
/// <returns></returns>
|
public async Task<string> InsertDataFreezeInfo(FreezeUnfreezeInfoDto model)
|
{
|
try
|
{
|
string errStr = "";
|
var TimeStr = Db.GetDate();
|
//验证批次与物料是否为异常
|
var stock = await Db.Queryable<DataStock>().FirstAsync(a => a.IsDel == "0" && a.LotNo == model.LotNo && a.SkuNo == model.SkuNo);
|
//当前物料或批次存在异常
|
if (stock == null)
|
{
|
throw Oops.Bah("-1:当前物料或批次存在异常!");
|
}
|
//验证物料信息是否存在异常
|
var sku = Db.Queryable<SysMaterials>().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
|
}
|
}
|