| | |
| | | using System.Linq; |
| | | using System.Linq.Expressions; |
| | | using System.Text; |
| | | using System.Threading.Tasks; |
| | | using Microsoft.AspNetCore.Identity; |
| | | using Model.InterFaceModel; |
| | | using Model.ModelDto.BllCheckDto; |
| | | using Model.ModelDto.DataDto; |
| | | using Model.ModelDto.SysDto; |
| | | using Model.ModelVm; |
| | | using Model.ModelVm.BllCheckVm; |
| | | using Model.ModelVm.LogVm; |
| | | using Newtonsoft.Json; |
| | | using SqlSugar; |
| | | using SqlSugar.Extensions; |
| | | using Utility; |
| | | using Utility.Tools; |
| | | using WMS.BLL.LogServer; |
| | | using WMS.DAL; |
| | |
| | | using WMS.Entity.LogEntity; |
| | | using WMS.Entity.SysEntity; |
| | | using WMS.IBLL.IBllCheckServer; |
| | | using WMS.IBLL.ILogServer; |
| | | |
| | | namespace WMS.BLL.BllCheckServer |
| | | { |
| | | public class StockCheckServer : DbHelper<BllStockCheck>, IStockCheckServer |
| | | { |
| | | private static readonly SqlSugarScope Db = DataContext.Db; |
| | | public StockCheckServer() : base(Db) |
| | | private readonly UserManager _userManager; |
| | | private readonly IOperationCRServer _operation; |
| | | public StockCheckServer(UserManager userManager, IOperationCRServer operation) : base(Db) |
| | | { |
| | | _userManager = userManager; |
| | | _operation = operation; |
| | | } |
| | | |
| | | //获取盘点单据 |
| | | public List<StockCheckDto> GetStockCheckList(string crNo, string status, string palletNo, string skuNo, string skuName, |
| | | string lotNo, string startTime, string endTime, int page, int limit, out int count) |
| | | public async Task<List<StockCheckDto>> GetStockCheckList(string crNo, string status, string palletNo, string skuNo, string skuName, |
| | | string lotNo, string startTime, string endTime, int page, int limit, RefAsync<int> count) |
| | | { |
| | | try |
| | | var strList = new List<string>(); |
| | | |
| | | if (!string.IsNullOrWhiteSpace(palletNo) || !string.IsNullOrWhiteSpace(skuNo) || !string.IsNullOrWhiteSpace(skuName) || !string.IsNullOrWhiteSpace(lotNo)) |
| | | { |
| | | var strList = new List<string>(); |
| | | |
| | | if (!string.IsNullOrWhiteSpace(palletNo) || !string.IsNullOrWhiteSpace(skuNo) || !string.IsNullOrWhiteSpace(skuName) || !string.IsNullOrWhiteSpace(lotNo)) |
| | | { |
| | | Expression<Func<BllStockCheckDetail, bool>> demo = Expressionable.Create<BllStockCheckDetail>() |
| | | .AndIF(!string.IsNullOrWhiteSpace(palletNo), m => m.PalletNo.Contains(palletNo.Trim())) |
| | | .AndIF(!string.IsNullOrWhiteSpace(skuNo), m => m.SkuNo.Contains(skuNo.Trim())) |
| | | .AndIF(!string.IsNullOrWhiteSpace(skuName), m => m.SkuName.Contains(skuName.Trim())) |
| | | .AndIF(!string.IsNullOrWhiteSpace(lotNo), m => m.LotNo.Contains(lotNo.Trim())) |
| | | .And(m => m.IsDel == "0") |
| | | .ToExpression();//注意 这一句 不能少 |
| | | |
| | | var detailList = Db.Queryable<BllStockCheckDetail>().Where(demo).Select(m => m.CRNo).Distinct().ToList(); |
| | | strList = detailList; |
| | | } |
| | | |
| | | Expression<Func<BllStockCheck, bool>> item = Expressionable.Create<BllStockCheck>() |
| | | .AndIF(!string.IsNullOrWhiteSpace(crNo), m => m.CRNo.Contains(crNo.Trim())) |
| | | .AndIF(!string.IsNullOrWhiteSpace(status), m => m.Status == int.Parse(status)) |
| | | .AndIF(!string.IsNullOrWhiteSpace(startTime), m => m.CheckDate >= Convert.ToDateTime(startTime)) |
| | | .AndIF(!string.IsNullOrWhiteSpace(endTime), m => m.CheckDate <= Convert.ToDateTime(endTime).AddDays(1)) |
| | | .AndIF(!string.IsNullOrWhiteSpace(palletNo), m => strList.Contains(m.CRNo)) |
| | | .AndIF(!string.IsNullOrWhiteSpace(skuNo), m => strList.Contains(m.CRNo)) |
| | | .AndIF(!string.IsNullOrWhiteSpace(skuName), m => strList.Contains(m.CRNo)) |
| | | .AndIF(!string.IsNullOrWhiteSpace(lotNo), m => strList.Contains(m.CRNo)) |
| | | Expression<Func<BllStockCheckDetail, bool>> demo = Expressionable.Create<BllStockCheckDetail>() |
| | | .AndIF(!string.IsNullOrWhiteSpace(palletNo), m => m.PalletNo.Contains(palletNo.Trim())) |
| | | .AndIF(!string.IsNullOrWhiteSpace(skuNo), m => m.SkuNo.Contains(skuNo.Trim())) |
| | | .AndIF(!string.IsNullOrWhiteSpace(skuName), m => m.SkuName.Contains(skuName.Trim())) |
| | | .AndIF(!string.IsNullOrWhiteSpace(lotNo), m => m.LotNo.Contains(lotNo.Trim())) |
| | | .And(m => m.IsDel == "0") |
| | | .ToExpression();//注意 这一句 不能少 |
| | | var total = 0; |
| | | var list = Db.Queryable<BllStockCheck>().Where(item) |
| | | .LeftJoin<SysUserInfor>((a, b) => a.AuditUser == b.Id) |
| | | .LeftJoin<SysUserInfor>((a, b, c) => a.CreateUser == c.Id) |
| | | .LeftJoin<SysUserInfor>((a, b, c, d) => a.CreateUser == d.Id) |
| | | .Select((a, b, c, d) => new StockCheckDto() |
| | | { |
| | | Id = a.Id, |
| | | CrNo = a.CRNo, |
| | | CheckDate = a.CheckDate, |
| | | CompleteDate = a.CompleteDate, |
| | | Status = a.Status, |
| | | Origin = a.Origin, |
| | | AuditStatusNo = a.AuditStatusNo, |
| | | IsDoubleCheck = a.IsDoubleCheck, |
| | | AuditUserName = b.RealName, |
| | | AuditTime = a.AuditTime, |
| | | Demo = a.Demo, |
| | | |
| | | CreateUserName = c.RealName, |
| | | UpdateUserName = d.RealName, |
| | | CreateTime = a.CreateTime, |
| | | UpdateTime = a.UpdateTime, |
| | | |
| | | }).OrderByDescending(a => a.CreateTime).ToOffsetPage(page, limit, ref total); |
| | | count = total; |
| | | |
| | | return list; |
| | | |
| | | var detailList = await Db.Queryable<BllStockCheckDetail>().Where(demo).Select(m => m.CRNo).Distinct().ToListAsync(); |
| | | strList = detailList; |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | throw new Exception(e.Message); |
| | | } |
| | | |
| | | Expression<Func<BllStockCheck, bool>> item = Expressionable.Create<BllStockCheck>() |
| | | .AndIF(!string.IsNullOrWhiteSpace(crNo), m => m.CRNo.Contains(crNo.Trim())) |
| | | .AndIF(!string.IsNullOrWhiteSpace(status), m => m.Status == int.Parse(status)) |
| | | .AndIF(!string.IsNullOrWhiteSpace(startTime), m => m.CheckDate >= Convert.ToDateTime(startTime)) |
| | | .AndIF(!string.IsNullOrWhiteSpace(endTime), m => m.CheckDate <= Convert.ToDateTime(endTime).AddDays(1)) |
| | | .AndIF(!string.IsNullOrWhiteSpace(palletNo), m => strList.Contains(m.CRNo)) |
| | | .AndIF(!string.IsNullOrWhiteSpace(skuNo), m => strList.Contains(m.CRNo)) |
| | | .AndIF(!string.IsNullOrWhiteSpace(skuName), m => strList.Contains(m.CRNo)) |
| | | .AndIF(!string.IsNullOrWhiteSpace(lotNo), m => strList.Contains(m.CRNo)) |
| | | .And(m => m.IsDel == "0") |
| | | .ToExpression();//注意 这一句 不能少 |
| | | var list = await Db.Queryable<BllStockCheck>().Where(item) |
| | | .LeftJoin<SysUserInfor>((a, b) => a.AuditUser == b.Id) |
| | | .LeftJoin<SysUserInfor>((a, b, c) => a.CreateUser == c.Id) |
| | | .LeftJoin<SysUserInfor>((a, b, c, d) => a.CreateUser == d.Id) |
| | | .Select((a, b, c, d) => new StockCheckDto() |
| | | { |
| | | Id = a.Id, |
| | | CrNo = a.CRNo, |
| | | CheckDate = a.CheckDate, |
| | | CompleteDate = a.CompleteDate, |
| | | Status = a.Status, |
| | | Origin = a.Origin, |
| | | AuditStatusNo = a.AuditStatusNo, |
| | | IsDoubleCheck = a.IsDoubleCheck, |
| | | AuditUserName = b.RealName, |
| | | AuditTime = a.AuditTime, |
| | | Demo = a.Demo, |
| | | CreateUserName = c.RealName, |
| | | UpdateUserName = d.RealName, |
| | | CreateTime = a.CreateTime, |
| | | UpdateTime = a.UpdateTime, |
| | | }).OrderByDescending(a => a.CreateTime).ToPageListAsync(page, limit, count); |
| | | |
| | | return list; |
| | | } |
| | | |
| | | //获取盘点单据明细 |
| | | public List<StockCheckDetailDto> GetStockCheckDetailList(string crNo, int page, int limit, out int count) |
| | | public async Task<List<StockCheckDetailDto>> GetStockCheckDetailList(string crNo, int page, int limit, RefAsync<int> count) |
| | | { |
| | | try |
| | | { |
| | | var total = 0; |
| | | var list = Db.Queryable<BllStockCheckDetail>().Where(m => m.IsDel == "0" && m.CRNo == crNo) |
| | | .LeftJoin<SysUserInfor>((a, b) => a.CreateUser == b.Id) |
| | | .LeftJoin<SysUserInfor>((a, b, c) => a.UpdateUser == c.Id) |
| | | .Select((a, b, c) => new StockCheckDetailDto() |
| | | { |
| | | Id = a.Id, |
| | | CrNo = a.CRNo, |
| | | PalletNo = a.PalletNo, |
| | | Qty = a.Qty, |
| | | RealQty = a.RealQty, |
| | | CheckResult = a.CheckResult, |
| | | Status = a.Status, |
| | | SkuNo = a.SkuNo, |
| | | SkuName = a.SkuName, |
| | | Standard = a.Standard, |
| | | LotNo = a.LotNo, |
| | | LotText = a.LotText, |
| | | SupplierLot = a.SupplierLot, |
| | | return await Db.Queryable<BllStockCheckDetail>().Where(m => m.IsDel == "0" && m.CRNo == crNo) |
| | | .LeftJoin<SysUserInfor>((a, b) => a.CreateUser == b.Id) |
| | | .LeftJoin<SysUserInfor>((a, b, c) => a.UpdateUser == c.Id) |
| | | .Select((a, b, c) => new StockCheckDetailDto() |
| | | { |
| | | Id = a.Id, |
| | | CrNo = a.CRNo, |
| | | PalletNo = a.PalletNo, |
| | | Qty = a.Qty, |
| | | RealQty = a.RealQty, |
| | | CheckResult = a.CheckResult, |
| | | Status = a.Status, |
| | | SkuNo = a.SkuNo, |
| | | SkuName = a.SkuName, |
| | | Standard = a.Standard, |
| | | LotNo = a.LotNo, |
| | | LotText = a.LotText, |
| | | SupplierLot = a.SupplierLot, |
| | | |
| | | CreateUserName = b.RealName, |
| | | UpdateUserName = c.RealName, |
| | | CreateTime = a.CreateTime, |
| | | UpdateTime = a.UpdateTime, |
| | | CreateUserName = b.RealName, |
| | | UpdateUserName = c.RealName, |
| | | CreateTime = a.CreateTime, |
| | | UpdateTime = a.UpdateTime, |
| | | |
| | | }).ToOffsetPage(page, limit, ref total); |
| | | count = total; |
| | | |
| | | return list; |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | throw new Exception(e.Message); |
| | | } |
| | | }).ToPageListAsync(page, limit, count); |
| | | } |
| | | |
| | | //获取库存明细信息(盘点选择明细数据源) |
| | | public List<StockDetailDto> GetCheckStockDetailList(string houseNo, string roadwayNo, string locateNo, string msg, int page, int limit, out int count) |
| | | public async Task<List<StockDetailDto>> GetCheckStockDetailList(string houseNo, string roadwayNo, string locateNo, string msg, int page, int limit, RefAsync<int> count) |
| | | { |
| | | try |
| | | { |
| | | Expression<Func<DataStockDetail, bool>> item = Expressionable.Create<DataStockDetail>() |
| | | .AndIF(!string.IsNullOrWhiteSpace(houseNo), m => m.WareHouseNo == houseNo) |
| | | .AndIF(!string.IsNullOrWhiteSpace(roadwayNo), m => m.RoadwayNo == roadwayNo) |
| | | .AndIF(!string.IsNullOrWhiteSpace(locateNo), m => m.LocatNo == locateNo) |
| | | .AndIF(!string.IsNullOrWhiteSpace(msg), |
| | | m => m.SkuNo.Contains(msg.Trim()) |
| | | || m.SkuName.Contains(msg.Trim()) |
| | | || m.LotNo.Contains(msg.Trim())) |
| | | .And(m => m.IsDel == "0" && m.SkuNo != "100099" && m.Status == "0") |
| | | .ToExpression();//注意 这一句 不能少 |
| | | |
| | | var total = 0; |
| | | var list = Db.Queryable<DataStockDetail>().Where(item).GroupBy(m => new { m.SkuNo, m.SkuName, m.Standard, m.LotNo, m.LotText, m.SupplierLot, m.LocatNo, m.PalletNo }) |
| | | .Select(a => new StockDetailDto() |
| | | { |
| | | SkuNo = a.SkuNo, |
| | | SkuName = a.SkuName, |
| | | Standard = a.Standard, |
| | | LotNo = a.LotNo, |
| | | LotText = a.LotText, |
| | | SupplierLot = a.SupplierLot, |
| | | Qty = SqlFunc.AggregateSum(a.Qty), |
| | | LocatNo = a.LocatNo, |
| | | PalletNo = a.PalletNo |
| | | }).ToOffsetPage(page, limit, ref total); |
| | | count = total; |
| | | |
| | | return list; |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | throw new Exception(e.Message); |
| | | } |
| | | Expression<Func<DataStockDetail, bool>> item = Expressionable.Create<DataStockDetail>() |
| | | .AndIF(!string.IsNullOrWhiteSpace(houseNo), m => m.WareHouseNo == houseNo) |
| | | .AndIF(!string.IsNullOrWhiteSpace(roadwayNo), m => m.RoadwayNo == roadwayNo) |
| | | .AndIF(!string.IsNullOrWhiteSpace(locateNo), m => m.LocatNo == locateNo) |
| | | .AndIF(!string.IsNullOrWhiteSpace(msg), |
| | | m => m.SkuNo.Contains(msg.Trim()) |
| | | || m.SkuName.Contains(msg.Trim()) |
| | | || m.LotNo.Contains(msg.Trim())) |
| | | .And(m => m.IsDel == "0" && m.SkuNo != "100099" && m.Status == "0") |
| | | .ToExpression();//注意 这一句 不能少 |
| | | return await Db.Queryable<DataStockDetail>().Where(item).GroupBy(m => new { m.SkuNo, m.SkuName, m.Standard, m.LotNo, m.LotText, m.SupplierLot, m.LocatNo, m.PalletNo }) |
| | | .Select(a => new StockDetailDto() |
| | | { |
| | | SkuNo = a.SkuNo, |
| | | SkuName = a.SkuName, |
| | | Standard = a.Standard, |
| | | LotNo = a.LotNo, |
| | | LotText = a.LotText, |
| | | SupplierLot = a.SupplierLot, |
| | | Qty = SqlFunc.AggregateSum(a.Qty), |
| | | LocatNo = a.LocatNo, |
| | | PalletNo = a.PalletNo |
| | | }).ToPageListAsync(page, limit, count); |
| | | } |
| | | |
| | | public EditStockCheckDto GetStockCheckDetailById(string crNo) |
| | | public async Task<EditStockCheckDto> GetStockCheckDetailById(string crNo) |
| | | { |
| | | try |
| | | var notify = await Db.Queryable<BllStockCheck>().FirstAsync(m => m.CRNo == crNo && m.IsDel == "0"); |
| | | if (notify == null) |
| | | { |
| | | var notify = Db.Queryable<BllStockCheck>().First(m => m.CRNo == crNo && m.IsDel == "0"); |
| | | if (notify == null) |
| | | { |
| | | throw new Exception($"未查询到{crNo}的盘点单据信息"); |
| | | } |
| | | var detail = Db.Queryable<BllStockCheckDetail>().Where(m => m.CRNo == crNo && m.IsDel == "0").Select(m => new EditStockCheckDetailDto() |
| | | { |
| | | SkuNo = m.SkuNo, |
| | | SkuName = m.SkuName, |
| | | Standard = m.Standard, |
| | | LotNo = m.LotNo, |
| | | LotText = m.LotText, |
| | | SupplierLot = m.SupplierLot, |
| | | Qty = m.Qty, |
| | | |
| | | PalletNo = m.PalletNo |
| | | }).ToList(); |
| | | var data = new EditStockCheckDto() |
| | | { |
| | | CrNo = crNo, |
| | | Detail = detail |
| | | }; |
| | | |
| | | return data; |
| | | throw new Exception($"未查询到{crNo}的盘点单据信息"); |
| | | } |
| | | catch (Exception e) |
| | | var detail = await Db.Queryable<BllStockCheckDetail>().Where(m => m.CRNo == crNo && m.IsDel == "0").Select(m => new EditStockCheckDetailDto() |
| | | { |
| | | throw new Exception(e.Message); |
| | | } |
| | | SkuNo = m.SkuNo, |
| | | SkuName = m.SkuName, |
| | | Standard = m.Standard, |
| | | LotNo = m.LotNo, |
| | | LotText = m.LotText, |
| | | SupplierLot = m.SupplierLot, |
| | | Qty = m.Qty, |
| | | |
| | | PalletNo = m.PalletNo |
| | | }).ToListAsync(); |
| | | var data = new EditStockCheckDto() |
| | | { |
| | | CrNo = crNo, |
| | | Detail = detail |
| | | }; |
| | | |
| | | return data; |
| | | } |
| | | |
| | | |
| | | //添加盘点单、编辑盘点单 |
| | | public void AddEditStockCheck(AddEditStockCheckVm model, int userId) |
| | | public async Task AddEditStockCheck(AddEditStockCheckVm model) |
| | | { |
| | | try |
| | | if (model.Detail.Count == 0) |
| | | { |
| | | if (model.Detail.Count == 0) |
| | | { |
| | | throw new Exception("盘点明细不能为空"); |
| | | } |
| | | Db.BeginTran(); |
| | | var time = DateTime.Now; |
| | | throw Oops.Bah("盘点明细不能为空"); |
| | | } |
| | | var time = DateTime.Now; |
| | | |
| | | //添加 |
| | | if (string.IsNullOrWhiteSpace(model.CrNo)) |
| | | //添加 |
| | | if (string.IsNullOrWhiteSpace(model.CrNo)) |
| | | { |
| | | var num = await Db.Queryable<BllStockCheck>().CountAsync(m => m.IsDel == "0" && (m.Status == 0 || m.Status == 1)); |
| | | if (num > 0) |
| | | { |
| | | var num = Db.Queryable<BllStockCheck>().Count(m => m.IsDel == "0" && (m.Status == 0 || m.Status == 1)); |
| | | if (num > 0) |
| | | { |
| | | throw new Exception("已有等待执行的盘点单据请先完成或删除"); |
| | | } |
| | | var crNo = new Common().GetMaxNo("CR"); |
| | | var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0"); |
| | | var check = new BllStockCheck() |
| | | throw Oops.Bah("已有等待执行的盘点单据请先完成或删除"); |
| | | } |
| | | var crNo = new Common().GetMaxNo("CR"); |
| | | var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0"); |
| | | var check = new BllStockCheck() |
| | | { |
| | | CRNo = crNo, |
| | | Origin = "0", |
| | | Status = 0, |
| | | CreateUser = _userManager.UserId, |
| | | CreateTime = time |
| | | }; |
| | | var list = new List<BllStockCheckDetail>(); |
| | | foreach (var item in model.Detail) |
| | | { |
| | | var detail = new BllStockCheckDetail() |
| | | { |
| | | CRNo = crNo, |
| | | Origin = "0", |
| | | Status = 0, |
| | | CreateUser = userId, |
| | | PalletNo = item.PalletNo, |
| | | Qty = item.Qty, |
| | | Status = 0, //0:未盘 1:已盘 2:已调整 |
| | | SkuNo = item.SkuNo, |
| | | SkuName = item.SkuName, |
| | | Standard = item.Standard, |
| | | LotNo = item.LotNo, |
| | | LotText = item.LotText, |
| | | SupplierLot = item.SupplierLot, |
| | | CreateUser = _userManager.UserId, |
| | | CreateTime = time |
| | | }; |
| | | var list = new List<BllStockCheckDetail>(); |
| | | foreach (var item in model.Detail) |
| | | list.Add(detail); |
| | | var sd = await stockDetail.FirstAsync(m => m.SkuNo == item.SkuNo && m.LotNo == item.LotNo && m.PalletNo == item.PalletNo && m.Status == "0"); |
| | | sd.Status = "3"; |
| | | Db.Updateable(sd).ExecuteCommand(); |
| | | } |
| | | Db.Insertable(check).ExecuteCommand(); |
| | | Db.Insertable(list).ExecuteCommand(); |
| | | //添加操作日志记录 |
| | | await _operation.AddLogOperationCr(new OperationInputVm() |
| | | { |
| | | ParentName = "库内作业", |
| | | MenuName = "盘点单据", |
| | | FkNo = crNo, |
| | | TypeName = "添加", |
| | | Msg = $"添加了单据号为{crNo}的盘点单信息" |
| | | }); |
| | | //var k = new OperationCrServer().AddLogOperationCr("库内作业", "盘点单据", crNo, "添加", $"添加了单据号为{crNo}的盘点单信息", _userManager.UserId); |
| | | } |
| | | else //编辑 |
| | | { |
| | | var check = await Db.Queryable<BllStockCheck>().FirstAsync(m => m.IsDel == "0" && m.CRNo == model.CrNo); |
| | | if (check == null) |
| | | { |
| | | throw Oops.Bah("未查询到盘点单据的信息"); |
| | | } |
| | | check.UpdateUser = _userManager.UserId; |
| | | check.UpdateTime = time; |
| | | await Db.Updateable(check).ExecuteCommandAsync(); |
| | | |
| | | //盘点明细信息 |
| | | var checkDetail = Db.Queryable<BllStockCheckDetail>().Where(m => m.IsDel == "0" && m.CRNo == model.CrNo).ToList(); |
| | | |
| | | //删除旧的 |
| | | foreach (var d in checkDetail) |
| | | { |
| | | var mq = model.Detail.Where(o => o.SkuNo == d.SkuNo && o.LotNo == d.LotNo && o.PalletNo == d.PalletNo).ToList(); |
| | | if (mq.Any()) //如果有这个物料及批次则跳过 |
| | | { |
| | | continue; |
| | | } |
| | | |
| | | var sd = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.SkuNo == d.SkuNo && m.LotNo == d.LotNo && m.PalletNo == d.PalletNo && m.Status == "3").ToList(); |
| | | foreach (var s in sd) |
| | | { |
| | | s.Status = "0"; |
| | | |
| | | } |
| | | d.IsDel = "1"; |
| | | d.UpdateUser = _userManager.UserId; |
| | | d.UpdateTime = time; |
| | | //修改库存明细的状态(解除盘点锁定) |
| | | await Db.Updateable(sd).ExecuteCommandAsync(); |
| | | await Db.Updateable(d).ExecuteCommandAsync(); |
| | | } |
| | | |
| | | //添加与修改 |
| | | var list = new List<BllStockCheckDetail>(); |
| | | foreach (var item in model.Detail) |
| | | { |
| | | var de = checkDetail.FirstOrDefault(m => m.PalletNo == item.PalletNo && m.SkuNo == item.SkuNo && m.LotNo == item.LotNo); |
| | | //新加项 |
| | | if (de == null) |
| | | { |
| | | var detail = new BllStockCheckDetail() |
| | | { |
| | | CRNo = crNo, |
| | | CRNo = model.CrNo, |
| | | PalletNo = item.PalletNo, |
| | | Qty = item.Qty, |
| | | Status = 0, //0:未盘 1:已盘 2:已调整 |
| | |
| | | LotText = item.LotText, |
| | | SupplierLot = item.SupplierLot, |
| | | |
| | | CreateUser = userId, |
| | | CreateUser = _userManager.UserId, |
| | | CreateTime = time |
| | | }; |
| | | list.Add(detail); |
| | | var sd = stockDetail.First(m => m.SkuNo == item.SkuNo && m.LotNo == item.LotNo && m.PalletNo == item.PalletNo && m.Status == "0"); |
| | | sd.Status = "3"; |
| | | Db.Updateable(sd).ExecuteCommand(); |
| | | } |
| | | Db.Insertable(check).ExecuteCommand(); |
| | | Db.Insertable(list).ExecuteCommand(); |
| | | //添加操作日志记录 |
| | | var k = new OperationCrServer().AddLogOperationCr("库内作业", "盘点单据", crNo, "添加", $"添加了单据号为{crNo}的盘点单信息", userId); |
| | | } |
| | | else //编辑 |
| | | { |
| | | var check = Db.Queryable<BllStockCheck>().First(m => m.IsDel == "0" && m.CRNo == model.CrNo); |
| | | if (check == null) |
| | | { |
| | | throw new Exception("未查询到盘点单据的信息"); |
| | | } |
| | | check.UpdateUser = userId; |
| | | check.UpdateTime = time; |
| | | Db.Updateable(check).ExecuteCommand(); |
| | | |
| | | //盘点明细信息 |
| | | var checkDetail = Db.Queryable<BllStockCheckDetail>().Where(m => m.IsDel == "0" && m.CRNo == model.CrNo).ToList(); |
| | | |
| | | //删除旧的 |
| | | foreach (var d in checkDetail) |
| | | { |
| | | var mq = model.Detail.Where(o => o.SkuNo == d.SkuNo && o.LotNo == d.LotNo && o.PalletNo == d.PalletNo).ToList(); |
| | | if (mq.Any()) //如果有这个物料及批次则跳过 |
| | | { |
| | | continue; |
| | | } |
| | | |
| | | var sd = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.SkuNo == d.SkuNo && m.LotNo == d.LotNo && m.PalletNo == d.PalletNo && m.Status == "3").ToList(); |
| | | var sd = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.SkuNo == item.SkuNo && m.LotNo == item.LotNo && m.PalletNo == item.PalletNo && m.Status == "0").ToList(); |
| | | foreach (var s in sd) |
| | | { |
| | | s.Status = "0"; |
| | | |
| | | s.Status = "3"; |
| | | } |
| | | d.IsDel = "1"; |
| | | d.UpdateUser = userId; |
| | | d.UpdateTime = time; |
| | | //修改库存明细的状态(解除盘点锁定) |
| | | Db.Updateable(sd).ExecuteCommand(); |
| | | Db.Updateable(d).ExecuteCommand(); |
| | | await Db.Updateable(sd).ExecuteCommandAsync(); |
| | | } |
| | | |
| | | //添加与修改 |
| | | var list = new List<BllStockCheckDetail>(); |
| | | foreach (var item in model.Detail) |
| | | else if (de.Qty != item.Qty) |
| | | { |
| | | var de = checkDetail.FirstOrDefault(m => m.PalletNo == item.PalletNo && m.SkuNo == item.SkuNo && m.LotNo == item.LotNo); |
| | | //新加项 |
| | | if (de == null) |
| | | { |
| | | var detail = new BllStockCheckDetail() |
| | | { |
| | | CRNo = model.CrNo, |
| | | PalletNo = item.PalletNo, |
| | | Qty = item.Qty, |
| | | Status = 0, //0:未盘 1:已盘 2:已调整 |
| | | SkuNo = item.SkuNo, |
| | | SkuName = item.SkuName, |
| | | Standard = item.Standard, |
| | | LotNo = item.LotNo, |
| | | LotText = item.LotText, |
| | | SupplierLot = item.SupplierLot, |
| | | |
| | | CreateUser = userId, |
| | | CreateTime = time |
| | | }; |
| | | list.Add(detail); |
| | | var sd = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.SkuNo == item.SkuNo && m.LotNo == item.LotNo && m.PalletNo == item.PalletNo && m.Status == "0").ToList(); |
| | | foreach (var s in sd) |
| | | { |
| | | s.Status = "3"; |
| | | } |
| | | Db.Updateable(sd).ExecuteCommand(); |
| | | } |
| | | else if (de.Qty != item.Qty) |
| | | { |
| | | de.Qty = item.Qty; |
| | | de.UpdateUser = userId; |
| | | de.UpdateTime = time; |
| | | Db.Updateable(de).ExecuteCommand(); |
| | | } |
| | | |
| | | de.Qty = item.Qty; |
| | | de.UpdateUser = _userManager.UserId; |
| | | de.UpdateTime = time; |
| | | await Db.Updateable(de).ExecuteCommandAsync(); |
| | | } |
| | | |
| | | if (list.Count > 0) |
| | | { |
| | | Db.Insertable(list).ExecuteCommand(); |
| | | } |
| | | |
| | | //添加操作日志记录 |
| | | var k = new OperationCrServer().AddLogOperationCr("库内作业", "盘点单据", model.CrNo, "编辑", $"编辑了单据号为{model.CrNo}的盘点单信息", userId); |
| | | } |
| | | Db.CommitTran(); |
| | | |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | Db.RollbackTran(); |
| | | throw new Exception(e.Message); |
| | | if (list.Count > 0) |
| | | { |
| | | await Db.Insertable(list).ExecuteCommandAsync(); |
| | | } |
| | | |
| | | //添加操作日志记录 |
| | | await _operation.AddLogOperationCr(new OperationInputVm() |
| | | { |
| | | ParentName = "库内作业", |
| | | MenuName = "盘点单据", |
| | | FkNo = model.CrNo, |
| | | TypeName = "添加", |
| | | Msg = $"编辑了单据号为{model.CrNo}的盘点单信息" |
| | | }); |
| | | //var k = new OperationCrServer().AddLogOperationCr("库内作业", "盘点单据", model.CrNo, "编辑", $"编辑了单据号为{model.CrNo}的盘点单信息", _userManager.UserId); |
| | | } |
| | | } |
| | | |
| | | //删除盘点单 |
| | | public void DelStockCheck(int id, int userId) |
| | | public async Task DelStockCheck(int id) |
| | | { |
| | | try |
| | | var notice = await Db.Queryable<BllStockCheck>().FirstAsync(m => m.IsDel == "0" && m.Id == id); |
| | | if (notice == null || notice.Status != 0) |
| | | { |
| | | var notice = Db.Queryable<BllStockCheck>().First(m => m.IsDel == "0" && m.Id == id); |
| | | if (notice == null || notice.Status != 0) |
| | | { |
| | | throw new Exception("未查询到状态为等待执行的盘点单信息"); |
| | | } |
| | | |
| | | var detail = Db.Queryable<BllStockCheckDetail>().Where(m => m.IsDel == "0" && m.CRNo == notice.CRNo).ToList(); |
| | | if (detail.Count == 0) |
| | | { |
| | | throw new Exception("未查询到盘点单据明细信息"); |
| | | } |
| | | Db.BeginTran(); |
| | | var time = DateTime.Now; |
| | | foreach (var d in detail) |
| | | { |
| | | d.IsDel = "1"; |
| | | d.UpdateTime = time; |
| | | d.UpdateUser = userId; |
| | | var item = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.PalletNo == d.PalletNo && m.SkuNo == d.SkuNo && m.LotNo == d.LotNo && m.Status == "3").ToList(); |
| | | foreach (var i in item) |
| | | { |
| | | i.Status = "0"; |
| | | } |
| | | Db.Updateable(item).ExecuteCommand(); |
| | | } |
| | | |
| | | notice.IsDel = "1"; |
| | | notice.UpdateTime = time; |
| | | notice.UpdateUser = userId; |
| | | |
| | | Db.Updateable(notice).ExecuteCommand(); |
| | | Db.Updateable(detail).ExecuteCommand(); |
| | | //添加操作日志记录 |
| | | var k = new OperationCrServer().AddLogOperationCr("库内作业", "盘点单据", notice.CRNo, "删除", $"删除了单据号为{notice.CRNo}的盘点单信息", userId); |
| | | Db.CommitTran(); |
| | | |
| | | throw Oops.Bah("未查询到状态为等待执行的盘点单信息"); |
| | | } |
| | | catch (Exception e) |
| | | |
| | | var detail = await Db.Queryable<BllStockCheckDetail>().Where(m => m.IsDel == "0" && m.CRNo == notice.CRNo).ToListAsync(); |
| | | if (detail.Count == 0) |
| | | { |
| | | Db.RollbackTran(); |
| | | throw new Exception(e.Message); |
| | | throw Oops.Bah("未查询到盘点单据明细信息"); |
| | | } |
| | | var time = DateTime.Now; |
| | | foreach (var d in detail) |
| | | { |
| | | d.IsDel = "1"; |
| | | d.UpdateTime = time; |
| | | d.UpdateUser = _userManager.UserId; |
| | | var item = await Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.PalletNo == d.PalletNo && m.SkuNo == d.SkuNo && m.LotNo == d.LotNo && m.Status == "3").ToListAsync(); |
| | | foreach (var i in item) |
| | | { |
| | | i.Status = "0"; |
| | | } |
| | | await Db.Updateable(item).ExecuteCommandAsync(); |
| | | } |
| | | |
| | | notice.IsDel = "1"; |
| | | notice.UpdateTime = time; |
| | | notice.UpdateUser = _userManager.UserId; |
| | | |
| | | await Db.Updateable(notice).ExecuteCommandAsync(); |
| | | await Db.Updateable(detail).ExecuteCommandAsync(); |
| | | //添加操作日志记录 |
| | | await _operation.AddLogOperationCr(new OperationInputVm() |
| | | { |
| | | ParentName = "库内作业", |
| | | MenuName = "盘点单据", |
| | | FkNo = notice.CRNo, |
| | | TypeName = "删除", |
| | | Msg = $"删除了单据号为{notice.CRNo}的盘点单信息" |
| | | }); |
| | | //var k = new OperationCrServer().AddLogOperationCr("库内作业", "盘点单据", notice.CRNo, "删除", $"删除了单据号为{notice.CRNo}的盘点单信息", userId); |
| | | |
| | | } |
| | | |
| | | /// <summary> |
| | |
| | | /// <param name="id"></param> |
| | | /// <param name="demo"></param> |
| | | /// <param name="userId"></param> |
| | | public void EditNoticeDemo(int id, string demo, int userId) |
| | | public async Task EditNoticeDemo(int id, string demo) |
| | | { |
| | | try |
| | | { |
| | | var notice = Db.Queryable<BllStockCheck>().First(m => m.IsDel == "0" && m.Id == id); |
| | | var notice = await Db.Queryable<BllStockCheck>().FirstAsync(m => m.IsDel == "0" && m.Id == id); |
| | | if (notice == null) |
| | | { |
| | | throw new Exception("未查询到盘点单据信息"); |
| | | } |
| | | notice.Demo = demo + "".Trim(); |
| | | notice.UpdateUser = userId; |
| | | notice.UpdateUser = _userManager.UserId; |
| | | notice.UpdateTime = DateTime.Now; |
| | | |
| | | int i = Db.Updateable(notice).ExecuteCommand(); |
| | | if (i > 0) |
| | | { |
| | | //添加操作日志 |
| | | new OperationCrServer().AddLogOperationCr("库内作业", "盘点单据", notice.CRNo, "编辑", $"编辑了单据号为{notice.CRNo}的备注信息", userId); |
| | | await _operation.AddLogOperationCr(new OperationInputVm() |
| | | { |
| | | ParentName = "库内作业", |
| | | MenuName = "盘点单据", |
| | | FkNo = notice.CRNo, |
| | | TypeName = "编辑", |
| | | Msg = $"编辑了单据号为{notice.CRNo}的备注信息" |
| | | }); |
| | | //new OperationCrServer().AddLogOperationCr("库内作业", "盘点单据", notice.CRNo, "编辑", $"编辑了单据号为{notice.CRNo}的备注信息", userId); |
| | | } |
| | | } |
| | | catch (Exception ex) |
| | |
| | | } |
| | | |
| | | //调整库存 |
| | | public bool StockAdjust(int id, int userId) |
| | | public async Task StockAdjust(int id) |
| | | { |
| | | try |
| | | { |
| | | //盘点信息 |
| | | var notice = Db.Queryable<BllStockCheck>().First(m => m.IsDel == "0" && m.Id == id); |
| | | var notice = await Db.Queryable<BllStockCheck>().FirstAsync(m => m.IsDel == "0" && m.Id == id); |
| | | if (notice == null || notice.Status != 2) |
| | | { |
| | | throw new Exception("未查询到状态为盘点完成的盘点单信息"); |
| | | throw Oops.Bah("未查询到状态为盘点完成的盘点单信息"); |
| | | } |
| | | if (notice == null || notice.Status != 2) |
| | | { |
| | | throw new Exception("未查询到状态为盘点完成的盘点单信息"); |
| | | throw Oops.Bah("未查询到状态为盘点完成的盘点单信息"); |
| | | } |
| | | //盘点明细 |
| | | var detail = Db.Queryable<BllStockCheckDetail>().Where(m => m.IsDel == "0" && m.CRNo == notice.CRNo).ToList(); |
| | | var detail = await Db.Queryable<BllStockCheckDetail>().Where(m => m.IsDel == "0" && m.CRNo == notice.CRNo).ToListAsync(); |
| | | if (detail.Count == 0) |
| | | { |
| | | throw new Exception("未查询到盘点单据明细信息"); |
| | | throw Oops.Bah("未查询到盘点单据明细信息"); |
| | | } |
| | | //开启事务 |
| | | Db.BeginTran(); |
| | | var stock = Db.Queryable<DataStock>().Where(m => m.IsDel == "0").ToList();//库存表 |
| | | var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0").ToList();//库存明细 |
| | | var stockBox = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0").ToList();//库存箱支明细 |
| | | var materialList = Db.Queryable<SysMaterials>().Where(m => m.IsDel == "0").ToList();//物料信息 |
| | | var packagList = Db.Queryable<SysPackag>().Where(m => m.IsDel == "0").ToList();//包装信息 |
| | | var stock = await Db.Queryable<DataStock>().Where(m => m.IsDel == "0").ToListAsync();//库存表 |
| | | var stockDetail = await Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0").ToListAsync();//库存明细 |
| | | var stockBox = await Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0").ToListAsync();//库存箱支明细 |
| | | var materialList = await Db.Queryable<SysMaterials>().Where(m => m.IsDel == "0").ToListAsync();//物料信息 |
| | | var packagList = await Db.Queryable<SysPackag>().Where(m => m.IsDel == "0").ToListAsync();//包装信息 |
| | | var time = DateTime.Now; |
| | | //盘点记录 |
| | | var checkLog = Db.Queryable<BllStockCheckLog>().Where(m => m.IsDel == "0" && m.CRNo == notice.CRNo).ToList(); |
| | | var checkLog = await Db.Queryable<BllStockCheckLog>().Where(m => m.IsDel == "0" && m.CRNo == notice.CRNo).ToListAsync(); |
| | | if (checkLog.Count(m => m.CheckResult == null) > 0) |
| | | { |
| | | throw new Exception($"{notice.CRNo}单据中含有未盘点的信息,请核实!"); |
| | | throw Oops.Bah($"{notice.CRNo}单据中含有未盘点的信息,请核实!"); |
| | | } |
| | | List<BoxQtyInfo> boxQtyList = new List<BoxQtyInfo>(); |
| | | |
| | |
| | | foreach (var d in detail) |
| | | { |
| | | var demo = checkLog.Where(m => m.PalletNo == d.PalletNo).ToList();//盘点记录 |
| | | //循环盘点记录 |
| | | //循环盘点记录 |
| | | foreach (var l in demo) |
| | | { |
| | | var sku = Db.Queryable<SysMaterials>().First(a => a.IsDel == "0" && a.SkuNo == l.SkuNo); |
| | | var sku = await Db.Queryable<SysMaterials>().FirstAsync(a => a.IsDel == "0" && a.SkuNo == l.SkuNo); |
| | | if (l.CheckResult == 0)//正常 |
| | | { |
| | | if (sku.Type != "4") |
| | |
| | | var de3 = stockBox.First(m => m.BoxNo == l.BoxNo && m.BoxNo3 == l.BoxNo3); |
| | | if (de3 == null) |
| | | { |
| | | throw new Exception($"未查询到{l.BoxNo}箱中{l.BoxNo3}库存箱码的信息"); |
| | | throw Oops.Bah($"未查询到{l.BoxNo}箱中{l.BoxNo3}库存箱码的信息"); |
| | | } |
| | | var de2 = stockDetail.First(m => m.Id == de3.StockDetailId); |
| | | if (de2 == null) |
| | | { |
| | | throw new Exception($"未查询到{l.BoxNo}箱中{l.BoxNo3}库存明细的信息"); |
| | | throw Oops.Bah($"未查询到{l.BoxNo}箱中{l.BoxNo3}库存明细的信息"); |
| | | } |
| | | de2.Status = "0";//将库存明细状态改为待分配 |
| | | Db.Updateable(de2).ExecuteCommand(); |
| | | await Db.Updateable(de2).ExecuteCommandAsync(); |
| | | } |
| | | else |
| | | { |
| | | var de2 = stockDetail.First(m => m.PalletNo == l.PalletNo && m.SkuNo == l.SkuNo); |
| | | if (de2 == null) |
| | | { |
| | | throw new Exception($"未查询到{l.PalletNo}的库存明细的信息"); |
| | | throw Oops.Bah($"未查询到{l.PalletNo}的库存明细的信息"); |
| | | } |
| | | de2.Status = "0";//将库存明细状态改为待分配 |
| | | Db.Updateable(de2).ExecuteCommand(); |
| | | await Db.Updateable(de2).ExecuteCommandAsync(); |
| | | } |
| | | |
| | | } |
| | |
| | | var de3 = stockBox.First(m => m.BoxNo == l.BoxNo && m.BoxNo3 == l.BoxNo3); |
| | | if (de3 == null) |
| | | { |
| | | throw new Exception($"未查询到{l.BoxNo}箱中{l.BoxNo3}库存箱码的信息"); |
| | | throw Oops.Bah($"未查询到{l.BoxNo}箱中{l.BoxNo3}库存箱码的信息"); |
| | | } |
| | | |
| | | var de2 = stockDetail.First(m => m.Id == de3.StockDetailId); |
| | | if (de2 == null) |
| | | { |
| | | throw new Exception($"未查询到{l.BoxNo}箱中{l.BoxNo3}库存明细的信息"); |
| | | throw Oops.Bah($"未查询到{l.BoxNo}箱中{l.BoxNo3}库存明细的信息"); |
| | | } |
| | | de2.Status = "0"; |
| | | de2.Qty -= de3.Qty; |
| | |
| | | } |
| | | de.Qty -= de3.Qty; |
| | | |
| | | Db.Updateable(de).ExecuteCommand(); |
| | | Db.Updateable(de2).ExecuteCommand(); |
| | | Db.Deleteable(de3).ExecuteCommand(); |
| | | await Db.Updateable(de).ExecuteCommandAsync(); |
| | | await Db.Updateable(de2).ExecuteCommandAsync(); |
| | | await Db.Deleteable(de3).ExecuteCommandAsync(); |
| | | } |
| | | else |
| | | { |
| | | var de2 = stockDetail.First(m => m.PalletNo == l.PalletNo && m.SkuNo == l.SkuNo); |
| | | if (de2 == null) |
| | | { |
| | | throw new Exception($"未查询到{l.PalletNo}的库存明细的信息"); |
| | | throw Oops.Bah($"未查询到{l.PalletNo}的库存明细的信息"); |
| | | } |
| | | de2.Status = "0"; |
| | | de2.Qty = l.RealQty; |
| | | var de = stock.First(m => m.SkuNo == l.SkuNo && m.LotNo == l.LotNo); |
| | | if (de == null) |
| | | { |
| | | throw new Exception($"未查询到物料{l.SkuNo}批次{l.LotNo}的总库存的信息"); |
| | | throw Oops.Bah($"未查询到物料{l.SkuNo}批次{l.LotNo}的总库存的信息"); |
| | | } |
| | | de.Qty -= Convert.ToDecimal(l.Qty - l.RealQty); |
| | | |
| | | Db.Updateable(de).ExecuteCommand(); |
| | | Db.Updateable(de2).ExecuteCommand(); |
| | | await Db.Updateable(de).ExecuteCommandAsync(); |
| | | await Db.Updateable(de2).ExecuteCommandAsync(); |
| | | } |
| | | |
| | | } |
| | | else if (l.CheckResult == 2)//盘盈 |
| | | { |
| | |
| | | ProductionTime = stockBoxInfo.ProductionTime, |
| | | BitBoxMark = boxInfo.bitBoxMark, |
| | | }; |
| | | Db.Insertable<DataBoxInfo>(databox).ExecuteCommand(); |
| | | await Db.Insertable<DataBoxInfo>(databox).ExecuteCommandAsync(); |
| | | //库存明细增加数量 |
| | | stockDetailInfo.Qty += (int)l.RealQty; |
| | | } |
| | |
| | | } |
| | | stockDetailInfo.Status = "0"; |
| | | |
| | | Db.Updateable(stockDetailInfo).ExecuteCommand(); |
| | | await Db.Updateable(stockDetailInfo).ExecuteCommandAsync(); |
| | | //库存增加数量 |
| | | var de = stock.First(m => m.SkuNo == l.SkuNo && m.LotNo == l.LotNo); |
| | | if (de == null) |
| | | { |
| | | throw new Exception($"未查询到{l.BoxNo}箱中{l.BoxNo3}库存的信息"); |
| | | throw Oops.Bah($"未查询到{l.BoxNo}箱中{l.BoxNo3}库存的信息"); |
| | | } |
| | | if (sku.Type != "4") |
| | | { |
| | |
| | | de.Qty += (int)(l.RealQty - l.Qty); |
| | | } |
| | | |
| | | Db.Updateable(de).ExecuteCommand(); |
| | | await Db.Updateable(de).ExecuteCommandAsync(); |
| | | } |
| | | } |
| | | //修改盘点明细 |
| | | d.Status = 4;//状态 |
| | | d.UpdateTime = time; |
| | | d.UpdateUser = userId; |
| | | d.UpdateUser = _userManager.UserId; |
| | | //盘点结果 |
| | | if (d.Qty == d.RealQty) |
| | | { |
| | |
| | | { |
| | | d.CheckResult = 1; |
| | | } |
| | | Db.Updateable(d).ExecuteCommand(); |
| | | await Db.Updateable(d).ExecuteCommandAsync(); |
| | | |
| | | #region 添加判断盘点完托盘是否是零托 |
| | | var material = materialList.FirstOrDefault(m => m.SkuNo == d.SkuNo); |
| | | if (material == null) |
| | | { |
| | | throw new Exception($"未查询到{d.SkuNo}的物料信息;"); |
| | | throw Oops.Bah($"未查询到{d.SkuNo}的物料信息;"); |
| | | } |
| | | var pack = packagList.FirstOrDefault(m => m.PackagNo == material.PackagNo); |
| | | if (pack == null) |
| | | { |
| | | throw new Exception($"未查询到{d.SkuNo}的包装信息;"); |
| | | throw Oops.Bah($"未查询到{d.SkuNo}的包装信息;"); |
| | | } |
| | | var pNum = 0;//托盘物品数量 |
| | | var bNum = 0;//箱物品数量 |
| | |
| | | } |
| | | if (pNum == 0) |
| | | { |
| | | throw new Exception("未查询到物料包装托箱关系信息"); |
| | | throw Oops.Bah("未查询到物料包装托箱关系信息"); |
| | | } |
| | | var stockDetailInfo2 = stockDetail.First(m => m.PalletNo == d.PalletNo && m.SkuNo == d.SkuNo && m.LotNo == d.LotNo);//库存明细 |
| | | if (stockDetailInfo2.Qty >= pNum) |
| | |
| | | stockDetailInfo2.BitPalletMark = "1"; |
| | | } |
| | | |
| | | Db.Updateable(stockDetailInfo2).ExecuteCommand(); |
| | | await Db.Updateable(stockDetailInfo2).ExecuteCommandAsync(); |
| | | #endregion |
| | | } |
| | | //修该盘点信息 |
| | | notice.Status = 3;//状态 |
| | | notice.UpdateTime = time; |
| | | notice.UpdateUser = userId; |
| | | Db.Updateable(notice).ExecuteCommand(); |
| | | notice.UpdateUser = _userManager.UserId; |
| | | await Db.Updateable(notice).ExecuteCommandAsync(); |
| | | //添加操作日志记录 |
| | | var k = new OperationCrServer().AddLogOperationCr("库内作业", "盘点单据", notice.CRNo, "调整单据", $"调整了单据号为{notice.CRNo}的盘点单信息", userId); |
| | | //var k = new OperationCrServer().AddLogOperationCr("库内作业", "盘点单据", notice.CRNo, "调整单据", $"调整了单据号为{notice.CRNo}的盘点单信息", userId); |
| | | await _operation.AddLogOperationCr(new OperationInputVm() |
| | | { |
| | | ParentName = "库内作业", |
| | | MenuName = "盘点单据", |
| | | FkNo = notice.CRNo, |
| | | TypeName = "调整单据", |
| | | Msg = $"调整了单据号为{notice.CRNo}的盘点单信息" |
| | | }); |
| | | |
| | | //提交事务 |
| | | Db.CommitTran(); |
| | | return true; |
| | | } |
| | | catch (Exception e) |
| | | { |
| | |
| | | } |
| | | |
| | | //调整库存-针对异常生成的 |
| | | public bool StockAdjustAuto(int id, int userId) |
| | | public async Task StockAdjustAuto(int id) |
| | | { |
| | | try |
| | | { |
| | |
| | | var notice = Db.Queryable<BllStockCheck>().First(m => m.IsDel == "0" && m.Id == id); |
| | | if (notice == null || notice.Status != 2) |
| | | { |
| | | throw new Exception("未查询到状态为盘点完成的盘点单信息"); |
| | | throw Oops.Bah("未查询到状态为盘点完成的盘点单信息"); |
| | | } |
| | | //盘点明细 |
| | | var detail = Db.Queryable<BllStockCheckDetail>().Where(m => m.IsDel == "0" && m.CRNo == notice.CRNo).ToList(); |
| | | if (detail.Count == 0) |
| | | { |
| | | throw new Exception("未查询到盘点单据明细信息"); |
| | | throw Oops.Bah("未查询到盘点单据明细信息"); |
| | | } |
| | | //开启事务 |
| | | Db.BeginTran(); |
| | | |
| | | var stock = Db.Queryable<DataStock>().Where(m => m.IsDel == "0");//库存 |
| | | var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0");//库存明细 |
| | | var stockBox = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0");//库存箱支信息 |
| | | var time = DateTime.Now; |
| | | //盘点记录 |
| | | var checkLog = Db.Queryable<BllStockCheckLog>().Where(m => m.IsDel == "0" && m.CRNo == notice.CRNo); |
| | | if (checkLog.Count(m => m.CheckResult == null) > 0) |
| | | if (await checkLog.CountAsync(m => m.CheckResult == null) > 0) |
| | | { |
| | | throw new Exception($"{notice.CRNo}单据中含有未盘点的信息,请核实!"); |
| | | } |
| | | foreach (var d in detail) |
| | | { |
| | | //托盘绑定表 |
| | | var palletBind = Db.Queryable<BllPalletBind>().First(m => m.PalletNo == d.PalletNo); |
| | | var palletBind = await Db.Queryable<BllPalletBind>().FirstAsync(m => m.PalletNo == d.PalletNo); |
| | | //储位表 |
| | | var storageLocat = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == palletBind.LocatNo); |
| | | var storageLocat = await Db.Queryable<SysStorageLocat>().FirstAsync(m => m.LocatNo == palletBind.LocatNo); |
| | | if (storageLocat != null && storageLocat.Flag == "1") |
| | | { |
| | | //将储位标志Flag修改为:0:正常 |
| | | storageLocat.Flag = "0"; |
| | | storageLocat.UpdateUser = userId; |
| | | storageLocat.UpdateUser = _userManager.UserId; |
| | | storageLocat.UpdateTime = time; |
| | | |
| | | Db.Updateable(storageLocat).ExecuteCommand(); |
| | | await Db.Updateable(storageLocat).ExecuteCommandAsync(); |
| | | } |
| | | //条码管理(托盘) |
| | | var pallets = Db.Queryable<SysPallets>().First(m => m.PalletNo == d.PalletNo); |
| | | var pallets = await Db.Queryable<SysPallets>().FirstAsync(m => m.PalletNo == d.PalletNo); |
| | | if (pallets != null && pallets.Status == "1") |
| | | { |
| | | //将托盘号状态变更为 0 未使用 |
| | | pallets.Status = "0"; |
| | | pallets.UpdateUser = userId; |
| | | pallets.UpdateUser = _userManager.UserId; |
| | | pallets.UpdateTime = time; |
| | | |
| | | Db.Updateable(pallets).ExecuteCommand(); |
| | | await Db.Updateable(pallets).ExecuteCommandAsync(); |
| | | } |
| | | //盘点记录 |
| | | var demo = checkLog.Where(m => m.PalletNo == d.PalletNo).ToList(); |
| | | var demo = await checkLog.Where(m => m.PalletNo == d.PalletNo).ToListAsync(); |
| | | foreach (var l in demo) |
| | | { |
| | | if (l.CheckResult == 0)//正常 |
| | |
| | | else if (l.CheckResult == 1)//盘亏 |
| | | { |
| | | //物理删除库存箱支信息 |
| | | var de3 = stockBox.First(m => m.BoxNo == l.BoxNo && m.BoxNo3 == l.BoxNo3); |
| | | var de3 = await stockBox.FirstAsync(m => m.BoxNo == l.BoxNo && m.BoxNo3 == l.BoxNo3); |
| | | if (de3 == null) |
| | | { |
| | | throw new Exception($"未查询到{l.BoxNo}箱中{l.BoxNo3}库存箱码的信息"); |
| | | throw Oops.Bah($"未查询到{l.BoxNo}箱中{l.BoxNo3}库存箱码的信息"); |
| | | } |
| | | Db.Deleteable(de3).ExecuteCommand(); |
| | | await Db.Deleteable(de3).ExecuteCommandAsync(); |
| | | //物理删除库存明细 |
| | | var de2 = stockDetail.First(m => m.Id == de3.StockDetailId); |
| | | var de2 = await stockDetail.FirstAsync(m => m.Id == de3.StockDetailId); |
| | | if (de2 == null) |
| | | { |
| | | throw new Exception($"未查询到{l.BoxNo}箱中{l.BoxNo3}库存明细的信息"); |
| | | throw Oops.Bah($"未查询到{l.BoxNo}箱中{l.BoxNo3}库存明细的信息"); |
| | | } |
| | | Db.Deleteable(de2).ExecuteCommand(); |
| | | await Db.Deleteable(de2).ExecuteCommandAsync(); |
| | | //更改库存数量和锁定数量 |
| | | var de = stock.First(m => m.SkuNo == l.SkuNo && m.LotNo == l.LotNo); |
| | | var de = await stock.FirstAsync(m => m.SkuNo == l.SkuNo && m.LotNo == l.LotNo); |
| | | if (de == null) |
| | | { |
| | | throw new Exception($"未查询到物料{l.SkuNo}批次{l.LotNo}的总库存的信息"); |
| | | throw Oops.Bah($"未查询到物料{l.SkuNo}批次{l.LotNo}的总库存的信息"); |
| | | } |
| | | de.Qty -= de3.Qty; |
| | | de.LockQty -= de3.Qty; |
| | | |
| | | Db.Updateable(de).ExecuteCommand(); |
| | | await Db.Updateable(de).ExecuteCommandAsync(); |
| | | } |
| | | } |
| | | //将盘点明细状态改为 已调整 |
| | | d.Status = 4; |
| | | d.UpdateTime = time; |
| | | d.UpdateUser = userId; |
| | | d.UpdateUser = _userManager.UserId; |
| | | |
| | | Db.Updateable(d).ExecuteCommand(); |
| | | await Db.Updateable(d).ExecuteCommandAsync(); |
| | | } |
| | | //将盘点总表状态改为 生成调整 |
| | | notice.Status = 3; |
| | | notice.UpdateTime = time; |
| | | notice.UpdateUser = userId; |
| | | Db.Updateable(notice).ExecuteCommand(); |
| | | notice.UpdateUser = _userManager.UserId; |
| | | await Db.Updateable(notice).ExecuteCommandAsync(); |
| | | //添加操作日志记录 |
| | | var k = new OperationCrServer().AddLogOperationCr("库内作业", "盘点单据", notice.CRNo, "调整单据", $"调整了单据号为{notice.CRNo}的盘点单信息", userId); |
| | | //var k = new OperationCrServer().AddLogOperationCr("库内作业", "盘点单据", notice.CRNo, "调整单据", $"调整了单据号为{notice.CRNo}的盘点单信息", userId); |
| | | await _operation.AddLogOperationCr(new OperationInputVm() |
| | | { |
| | | ParentName = "库内作业", |
| | | MenuName = "盘点单据", |
| | | FkNo = notice.CRNo, |
| | | TypeName = "调整单据", |
| | | Msg = $"调整了单据号为{notice.CRNo}的盘点单信息" |
| | | }); |
| | | //提交事务 |
| | | Db.CommitTran(); |
| | | return true; |
| | | } |
| | | catch (Exception e) |
| | | { |
| | |
| | | } |
| | | |
| | | //盘点下发出库 |
| | | public List<OutCommandDto> CheckOutHouse(string crNo, string outMode, int userId, string url, out string str) |
| | | public async Task<List<OutCommandDto>> CheckOutHouse(string crNo, string outMode, string url, string str) |
| | | { |
| | | try |
| | | { |
| | |
| | | #endregion |
| | | var com = new Common(); |
| | | //assign.IsHavePyTask(); |
| | | var notice = Db.Queryable<BllStockCheck>().First(m => m.CRNo == crNo && m.IsDel == "0"); |
| | | var notice = await Db.Queryable<BllStockCheck>().FirstAsync(m => m.CRNo == crNo && m.IsDel == "0"); |
| | | if (notice == null) |
| | | { |
| | | throw new Exception($"未找到{crNo}盘点单信息"); |
| | | throw Oops.Bah($"未找到{crNo}盘点单信息"); |
| | | } |
| | | //所有要出库的盘点明细信息(等待的信息和待拣货的信息) |
| | | var list = Db.Queryable<BllStockCheckDetail>().Where(a => a.IsDel == "0" && a.CRNo == crNo && a.Status == 0).ToList(); |
| | | var list = await Db.Queryable<BllStockCheckDetail>().Where(a => a.IsDel == "0" && a.CRNo == crNo && a.Status == 0).ToListAsync(); |
| | | if (list.Count == 0) //判断是否有需要下发的盘点明细 |
| | | { |
| | | throw new Exception("当前盘点单据无需要下发的托盘"); |
| | | throw Oops.Bah("当前盘点单据无需要下发的托盘"); |
| | | } |
| | | #region |
| | | //要出库的托盘集合 |
| | | var outLpnList = list.Select(m => m.PalletNo).Distinct().ToList(); |
| | | //要出库的明细集合 |
| | | var outStockDetail = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && outLpnList.Contains(m.PalletNo)).ToList(); |
| | | var outStockBox = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && outLpnList.Contains(m.PalletNo)).ToList(); |
| | | var outStockDetail = await Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && outLpnList.Contains(m.PalletNo)).ToListAsync(); |
| | | var outStockBox = await Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && outLpnList.Contains(m.PalletNo)).ToListAsync(); |
| | | //获取物料信息 |
| | | var skuNo = Db.Queryable<SysMaterials>().Where(a => a.IsDel == "0" && a.Type == "4").Select(a => a.SkuNo).ToList(); |
| | | var skuNo = await Db.Queryable<SysMaterials>().Where(a => a.IsDel == "0" && a.Type == "4").Select(a => a.SkuNo).ToListAsync(); |
| | | var time = DateTime.Now; |
| | | Db.BeginTran(); |
| | | try |
| | |
| | | LotText = de.LotText, |
| | | SupplierLot = de.SupplierLot, |
| | | |
| | | CreateUser = userId, |
| | | CreateUser = _userManager.UserId, |
| | | CreateTime = time |
| | | }; |
| | | logList.Add(checkLog); |
| | |
| | | LotText = b.LotText, |
| | | SupplierLot = b.SupplierLot, |
| | | |
| | | CreateUser = userId, |
| | | CreateUser = _userManager.UserId, |
| | | CreateTime = time |
| | | }; |
| | | logList.Add(checkLog); |
| | |
| | | } |
| | | |
| | | //生成盘点记录 |
| | | Db.Insertable(logList).ExecuteCommand(); |
| | | await Db.Insertable(logList).ExecuteCommandAsync(); |
| | | } |
| | | // 储位号 |
| | | var locateNo = outStockDetail.First(m => m.PalletNo == item.PalletNo && m.SkuNo == item.SkuNo && m.LotNo == item.LotNo).LocatNo; |
| | |
| | | { |
| | | //盘点明细状态改为待盘点 |
| | | item.Status = 2; |
| | | Db.Updateable(item).ExecuteCommand(); |
| | | await Db.Updateable(item).ExecuteCommandAsync(); |
| | | //盘点信息修改 |
| | | if (notice.Status == 0) |
| | | { |
| | | notice.CheckDate = DateTime.Now; |
| | | notice.Status = 1; |
| | | notice.UpdateUser = userId; |
| | | notice.UpdateUser = _userManager.UserId; |
| | | notice.UpdateTime = time; |
| | | Db.Updateable(notice).ExecuteCommand(); |
| | | await Db.Updateable(notice).ExecuteCommandAsync(); |
| | | } |
| | | //库存中当前托盘的信息 |
| | | var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.PalletNo == item.PalletNo).ToList(); |
| | | var stockDetail = await Db.Queryable<DataStockDetail>().Where(m => m.PalletNo == item.PalletNo).ToListAsync(); |
| | | foreach (var s in stockDetail) |
| | | { |
| | | s.LocatNo = "";//储位更改(改为空) |
| | | s.WareHouseNo = "";//所属仓库更改(改为空) |
| | | s.RoadwayNo = "";//所属巷道更改(改为空) |
| | | s.AreaNo = "";//所属区域更改(改为空) |
| | | Db.Updateable(s).ExecuteCommand(); |
| | | await Db.Updateable(s).ExecuteCommandAsync(); |
| | | } |
| | | flagList.Add(5); |
| | | continue; |
| | |
| | | { |
| | | //如果不在仓库内,当前明细信息直接更新出库完成 |
| | | item.Status = 2;//状态 |
| | | Db.Updateable(item).ExecuteCommand(); |
| | | await Db.Updateable(item).ExecuteCommandAsync(); |
| | | if (notice.Status == 0) |
| | | { |
| | | notice.CheckDate = DateTime.Now; |
| | | notice.Status = 1; |
| | | notice.UpdateUser = userId; |
| | | notice.UpdateUser = _userManager.UserId; |
| | | notice.UpdateTime = time; |
| | | Db.Updateable(notice).ExecuteCommand(); |
| | | await Db.Updateable(notice).ExecuteCommandAsync(); |
| | | } |
| | | } |
| | | continue; |
| | | } |
| | | //当前出库的储位信息 |
| | | var locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == locateNo && m.IsDel == "0"); |
| | | var locate = await Db.Queryable<SysStorageLocat>().FirstAsync(m => m.LocatNo == locateNo && m.IsDel == "0"); |
| | | if (locate == null) |
| | | { |
| | | flagList.Add(2); |
| | |
| | | Sender = "WMS", |
| | | Receiver = "WCS", |
| | | IsSuccess = 0, //是否下发成功 0失败 1成功 |
| | | |
| | | StartLocat = locate.LocatNo,//起始位置 |
| | | EndLocat = outMode,//目标位置 |
| | | PalletNo = item.PalletNo,//托盘码 |
| | |
| | | |
| | | CreateTime = time |
| | | }; |
| | | Db.Insertable(exTask).ExecuteCommand(); |
| | | await Db.Insertable(exTask).ExecuteCommandAsync(); |
| | | |
| | | outDtoList.Add(new OutCommandDto() |
| | | { |
| | |
| | | { |
| | | notice.CheckDate = DateTime.Now; |
| | | notice.Status = 1; |
| | | notice.UpdateUser = userId; |
| | | notice.UpdateUser = _userManager.UserId; |
| | | notice.UpdateTime = time; |
| | | Db.Updateable(notice).ExecuteCommand(); |
| | | await Db.Updateable(notice).ExecuteCommandAsync(); |
| | | } |
| | | } |
| | | locate.Status = "3"; //要出库的储位改变状态 正在出库 |
| | | Db.Updateable(locate).ExecuteCommand(); |
| | | await Db.Updateable(locate).ExecuteCommandAsync(); |
| | | |
| | | item.TaskNo = exTask.TaskNo; // 出库分配信息中更新任务号 |
| | | item.Status = 1; // 出库分配信息状态改为正在执行 |
| | | Db.Updateable(item).ExecuteCommand(); |
| | | await Db.Updateable(item).ExecuteCommandAsync(); |
| | | #endregion |
| | | |
| | | flagList.Add(0); |
| | |
| | | { |
| | | notice.CheckDate = DateTime.Now; |
| | | notice.Status = 1; |
| | | notice.UpdateUser = userId; |
| | | notice.UpdateUser = _userManager.UserId; |
| | | notice.UpdateTime = time; |
| | | Db.Updateable(notice).ExecuteCommand(); |
| | | await Db.Updateable(notice).ExecuteCommandAsync(); |
| | | |
| | | } |
| | | } |
| | | var taskNo = Db.Queryable<LogTask>().First(m => m.OrderType == "2" && m.TaskNo != item.TaskNo && m.Status == "1" && m.PalletNo == item.PalletNo); |
| | | item.TaskNo = taskNo.TaskNo; |
| | | item.Status = 1; // 出库分配信息状态改为正在执行 |
| | | Db.Updateable(item).ExecuteCommand(); |
| | | await Db.Updateable(item).ExecuteCommandAsync(); |
| | | |
| | | #endregion |
| | | } |
| | |
| | | } |
| | | } |
| | | //添加操作日志记录 |
| | | var k = new OperationCrServer().AddLogOperationCr("库内作业", "盘点单据", crNo, "出库", $"点击出库按钮盘点单号为:{crNo}的盘点单", userId); |
| | | //var k = new OperationCrServer().AddLogOperationCr("库内作业", "盘点单据", crNo, "出库", $"点击出库按钮盘点单号为:{crNo}的盘点单", userId); |
| | | await _operation.AddLogOperationCr(new OperationInputVm() |
| | | { |
| | | ParentName = "库内作业", |
| | | MenuName = "盘点单据", |
| | | FkNo = crNo, |
| | | TypeName = "出库", |
| | | Msg = $"点击出库按钮盘点单号为:{crNo}的盘点单" |
| | | }); |
| | | Db.CommitTran(); |
| | | |
| | | str = string.Empty; |
| | |
| | | } |
| | | |
| | | //盘点出库完成 |
| | | public void CheckSuccess(string taskNo, int userId) |
| | | public async Task CheckSuccess(string taskNo, int userId) |
| | | { |
| | | try |
| | | { |
| | |
| | | var task = Db.Queryable<LogTask>().First(m => m.TaskNo == taskNo && m.IsDel == "0"); |
| | | if (task == null) |
| | | { |
| | | throw new Exception($"未查询到任务号为:‘{taskNo}’的任务信息"); |
| | | throw Oops.Bah($"未查询到任务号为:‘{taskNo}’的任务信息"); |
| | | } |
| | | if (task.Status == "2") |
| | | { |
| | | throw new Exception("当前任务已完成"); |
| | | throw Oops.Bah("当前任务已完成"); |
| | | } |
| | | Db.BeginTran(); |
| | | //库存中当前托盘的信息 |
| | | var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.PalletNo == task.PalletNo).ToList(); |
| | | var stockDetail = await Db.Queryable<DataStockDetail>().Where(m => m.PalletNo == task.PalletNo).ToListAsync(); |
| | | var locateNo = stockDetail.Select(m => m.LocatNo).Distinct().FirstOrDefault(); |
| | | //当前任务中的储位信息 |
| | | var locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == locateNo); |
| | | var locate = await Db.Queryable<SysStorageLocat>().FirstAsync(m => m.LocatNo == locateNo); |
| | | |
| | | task.Status = "2";//任务状态 |
| | | task.IsSend = 0; |
| | | task.IsCancel = 0; |
| | | task.IsFinish = 0; |
| | | task.FinishDate = DateTime.Now;//完成时间 |
| | | Db.Updateable(task).ExecuteCommand(); |
| | | await Db.Updateable(task).ExecuteCommandAsync(); |
| | | locate.Status = "0"; // 更改当前任务中的储位状态(改为0空储位) |
| | | Db.Updateable(locate).ExecuteCommand(); |
| | | await Db.Updateable(locate).ExecuteCommandAsync(); |
| | | foreach (var item in stockDetail) |
| | | { |
| | | item.LocatNo = "";//储位更改(改为空) |
| | | item.WareHouseNo = "";//所属仓库更改(改为空) |
| | | item.RoadwayNo = "";//所属巷道更改(改为空) |
| | | item.AreaNo = "";//所属区域更改(改为空) |
| | | Db.Updateable(item).ExecuteCommand(); |
| | | await Db.Updateable(item).ExecuteCommandAsync(); |
| | | } |
| | | //盘点明细(更改状态) |
| | | var checkDetails = Db.Queryable<BllStockCheckDetail>().Where(m => m.IsDel == "0" && (m.TaskNo == taskNo || (m.Status == 1 && m.PalletNo == task.PalletNo))).ToList(); |
| | | var checkDetails = await Db.Queryable<BllStockCheckDetail>().Where(m => m.IsDel == "0" && (m.TaskNo == taskNo || (m.Status == 1 && m.PalletNo == task.PalletNo))).ToListAsync(); |
| | | |
| | | foreach (var item in checkDetails) |
| | | { |
| | | item.Status = 2; |
| | | Db.Updateable(item).ExecuteCommand(); |
| | | await Db.Updateable(item).ExecuteCommandAsync(); |
| | | } |
| | | |
| | | if (userId != 0) |
| | | if (_userManager.UserId != 0) |
| | | { |
| | | //添加操作日志记录 |
| | | var k = new OperationCrServer().AddLogOperationCr("库内作业", "库内日志", taskNo, "完成", $"点击完成按钮、完成任务号为:{taskNo}的任务", userId); |
| | | //var k = new OperationCrServer().AddLogOperationCr("库内作业", "库内日志", taskNo, "完成", $"点击完成按钮、完成任务号为:{taskNo}的任务", userId); |
| | | await _operation.AddLogOperationCr(new OperationInputVm() |
| | | { |
| | | ParentName = "库内作业", |
| | | MenuName = "库内日志", |
| | | FkNo = taskNo, |
| | | TypeName = "完成", |
| | | Msg = $"点击完成按钮、完成任务号为:{taskNo}的任务" |
| | | }); |
| | | } |
| | | Db.CommitTran(); |
| | | |
| | |
| | | } |
| | | |
| | | //AGV移库完成 |
| | | public void MoveSuccess(string taskNo, int userId) |
| | | public async Task MoveSuccess(string taskNo) |
| | | { |
| | | try |
| | | { |
| | | //当前任务信息 |
| | | var task = Db.Queryable<LogTask>().First(m => m.TaskNo == taskNo && m.IsDel == "0"); |
| | | var task = await Db.Queryable<LogTask>().FirstAsync(m => m.TaskNo == taskNo && m.IsDel == "0"); |
| | | if (task == null) |
| | | { |
| | | throw new Exception($"未查询到任务号为:‘{taskNo}’的任务信息"); |
| | | throw Oops.Bah($"未查询到任务号为:‘{taskNo}’的任务信息"); |
| | | } |
| | | if (task.Status == "2") |
| | | { |
| | | throw new Exception("当前任务已完成"); |
| | | throw Oops.Bah("当前任务已完成"); |
| | | } |
| | | Db.BeginTran(); |
| | | //库存中当前托盘的信息 |
| | | var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.PalletNo == task.PalletNo).ToList(); |
| | | var stockDetail = await Db.Queryable<DataStockDetail>().Where(m => m.PalletNo == task.PalletNo).ToListAsync(); |
| | | var locateNo = stockDetail.Select(m => m.LocatNo).Distinct().FirstOrDefault(); |
| | | |
| | | |
| | | //当前任务中的储位信息 |
| | | var locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == locateNo); |
| | | var locate = await Db.Queryable<SysStorageLocat>().FirstAsync(m => m.LocatNo == locateNo); |
| | | |
| | | //更改任务 |
| | | task.Status = "2";//任务状态 |
| | |
| | | task.FinishDate = DateTime.Now;//完成时间 |
| | | Db.Updateable(task).ExecuteCommand(); |
| | | // 更改当前任务中的储位状态(改为0空储位) |
| | | locate.Status = "0"; |
| | | locate.Status = "0"; |
| | | Db.Updateable(locate).ExecuteCommand(); |
| | | |
| | | //目标储位信息 |
| | | var endLocate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == task.EndLocat); |
| | | var endLocate = await Db.Queryable<SysStorageLocat>().FirstAsync(m => m.LocatNo == task.EndLocat); |
| | | if (endLocate != null) |
| | | { |
| | | if (endLocate.Status != "0") |
| | | { |
| | | throw new Exception("目标储位状态非空储位"); |
| | | throw Oops.Bah("目标储位状态非空储位"); |
| | | } |
| | | } |
| | | //更改库存明细 |
| | |
| | | item.WareHouseNo = "";//所属仓库更改(改为空) |
| | | item.RoadwayNo = "";//所属巷道更改(改为空) |
| | | item.AreaNo = "";//所属区域更改(改为空) |
| | | } |
| | | Db.Updateable(item).ExecuteCommand(); |
| | | } |
| | | await Db.Updateable(item).ExecuteCommandAsync(); |
| | | |
| | | //更改库存总表 |
| | | var stock = Db.Queryable<DataStock>().First(w => w.IsDel == "0" && w.SkuNo == item.SkuNo && w.LotNo == item.LotNo); |
| | | stock.LockQty -= (decimal)item.Qty; |
| | | Db.Updateable(stock).ExecuteCommand(); |
| | | await Db.Updateable(stock).ExecuteCommandAsync(); |
| | | } |
| | | if (endLocate != null) |
| | | { |
| | | //更改目标储位状态 |
| | | endLocate.Status = "1";//有物品 |
| | | Db.Updateable(endLocate).ExecuteCommand(); |
| | | await Db.Updateable(endLocate).ExecuteCommandAsync(); |
| | | } |
| | | |
| | | if (userId != 0) |
| | | if (_userManager.UserId != 0) |
| | | { |
| | | //添加操作日志记录 |
| | | var k = new OperationCrServer().AddLogOperationCr("库内作业", "库内日志", taskNo, "完成", $"点击完成按钮、完成任务号为:{taskNo}的任务", userId); |
| | | //var k = new OperationCrServer().AddLogOperationCr("库内作业", "库内日志", taskNo, "完成", $"点击完成按钮、完成任务号为:{taskNo}的任务", userId); |
| | | await _operation.AddLogOperationCr(new OperationInputVm() |
| | | { |
| | | ParentName = "库内作业", |
| | | MenuName = "库内日志", |
| | | FkNo = taskNo, |
| | | TypeName = "完成", |
| | | Msg = $"点击完成按钮、完成任务号为:{taskNo}的任务" |
| | | }); |
| | | } |
| | | Db.CommitTran(); |
| | | |
| | |
| | | } |
| | | |
| | | //重新下发盘点出库任务 |
| | | public OutCommandDto AgainSendCheckTask(string taskNo, int userId, string url) |
| | | public async Task<OutCommandDto> AgainSendCheckTask(string taskNo, string url) |
| | | { |
| | | try |
| | | { |
| | | var task = Db.Queryable<LogTask>().First(m => m.TaskNo == taskNo && m.IsDel == "0"); |
| | | var task = await Db.Queryable<LogTask>().FirstAsync(m => m.TaskNo == taskNo && m.IsDel == "0"); |
| | | if (task == null) |
| | | { |
| | | throw new Exception("未查询到任务信息"); |
| | | throw Oops.Bah("未查询到任务信息"); |
| | | } |
| | | var stockDetail = Db.Queryable<DataStockDetail>().First(m => m.PalletNo == task.PalletNo); |
| | | var stockDetail = await Db.Queryable<DataStockDetail>().FirstAsync(m => m.PalletNo == task.PalletNo); |
| | | if (stockDetail == null) |
| | | { |
| | | throw new Exception(task.PalletNo + " 当前托盘未在库内,请核实信息"); |
| | | throw Oops.Bah(task.PalletNo + " 当前托盘未在库内,请核实信息"); |
| | | } |
| | | Db.BeginTran(); |
| | | var locateNo = task.StartLocat; |
| | |
| | | { |
| | | locateNo = stockDetail.LocatNo; |
| | | task.StartLocat = locateNo; |
| | | Db.Updateable(task).ExecuteCommand(); |
| | | await Db.Updateable(task).ExecuteCommandAsync(); |
| | | } |
| | | var locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == locateNo); |
| | | if (locate != null && locate.Status != "3") |
| | | { |
| | | locate.Status = "3"; |
| | | Db.Updateable(locate).ExecuteCommand(); |
| | | await Db.Updateable(locate).ExecuteCommandAsync(); |
| | | } |
| | | var outDto = new OutCommandDto() |
| | | { |
| | |
| | | Order = 1 |
| | | }; //出库数据 |
| | | //添加操作日志记录 |
| | | var k = new OperationCrServer().AddLogOperationCr("库内作业", "库内日志", taskNo, "下发", $"点击下发按钮、重新下发了任务号为:{taskNo}的任务", userId); |
| | | //var k = new OperationCrServer().AddLogOperationCr("库内作业", "库内日志", taskNo, "下发", $"点击下发按钮、重新下发了任务号为:{taskNo}的任务", userId); |
| | | await _operation.AddLogOperationCr(new OperationInputVm() |
| | | { |
| | | ParentName = "库内作业", |
| | | MenuName = "库内日志", |
| | | FkNo = taskNo, |
| | | TypeName = "下发", |
| | | Msg = $"点击下发按钮、重新下发了任务号为:{taskNo}的任务" |
| | | }); |
| | | Db.CommitTran(); |
| | | // 正式运行程序放开 |
| | | var list = new List<string> { outDto.TaskNo }; |
| | |
| | | } |
| | | |
| | | //取消盘点出库任务 |
| | | public void CancelCheckTask(string taskNo, int userId) |
| | | public async Task CancelCheckTask(string taskNo) |
| | | { |
| | | try |
| | | { |
| | | Db.BeginTran(); |
| | | try |
| | | { |
| | | var task = Db.Queryable<LogTask>().First(m => m.TaskNo == taskNo && m.IsDel == "0"); |
| | | var task = await Db.Queryable<LogTask>().FirstAsync(m => m.TaskNo == taskNo && m.IsDel == "0"); |
| | | if (task == null) |
| | | { |
| | | throw new Exception("未查询到任务信息"); |
| | | throw Oops.Bah("未查询到任务信息"); |
| | | } |
| | | //修改任务 |
| | | task.IsSuccess = 0; |
| | |
| | | task.IsFinish = 0; |
| | | task.Status = "4"; |
| | | task.CancelDate = DateTime.Now; |
| | | Db.Updateable(task).ExecuteCommand(); |
| | | await Db.Updateable(task).ExecuteCommandAsync(); |
| | | |
| | | //修改盘点明细 |
| | | var checkDetail = Db.Queryable<BllStockCheckDetail>().First(w => w.TaskNo == task.TaskNo); |
| | | var checkDetail = await Db.Queryable<BllStockCheckDetail>().FirstAsync(w => w.TaskNo == task.TaskNo); |
| | | if (checkDetail == null) |
| | | { |
| | | throw new Exception("未查询到盘点明细信息,请核实!"); |
| | | throw Oops.Bah("未查询到盘点明细信息,请核实!"); |
| | | } |
| | | checkDetail.Status = 0; |
| | | checkDetail.TaskNo = ""; |
| | | Db.Updateable(checkDetail).ExecuteCommand(); |
| | | await Db.Updateable(checkDetail).ExecuteCommandAsync(); |
| | | |
| | | //修改盘点记录 |
| | | var checkLog = Db.Queryable<BllStockCheckLog>().First(w => w.CRNo == checkDetail.CRNo && w.PalletNo == checkDetail.PalletNo && w.IsDel == "0"); |
| | | var checkLog = await Db.Queryable<BllStockCheckLog>().FirstAsync(w => w.CRNo == checkDetail.CRNo && w.PalletNo == checkDetail.PalletNo && w.IsDel == "0"); |
| | | if (checkLog == null) |
| | | { |
| | | throw new Exception("未查询到盘点记录信息,请核实!"); |
| | | throw Oops.Bah("未查询到盘点记录信息,请核实!"); |
| | | } |
| | | checkLog.IsDel = "1"; |
| | | Db.Updateable(checkLog).ExecuteCommand(); |
| | | await Db.Updateable(checkLog).ExecuteCommandAsync(); |
| | | //修改储位信息 |
| | | var locat = Db.Queryable<SysStorageLocat>().First(a => a.IsDel == "0" && a.WareHouseNo == "W02" && a.LocatNo == task.StartLocat); |
| | | var locat = await Db.Queryable<SysStorageLocat>().FirstAsync(a => a.IsDel == "0" && a.WareHouseNo == "W02" && a.LocatNo == task.StartLocat); |
| | | if (locat == null) |
| | | { |
| | | throw new Exception("未查询到储位信息,请核实!"); |
| | | throw Oops.Bah("未查询到储位信息,请核实!"); |
| | | } |
| | | locat.Status = "1"; //有物品 |
| | | Db.Updateable(locat).ExecuteCommand(); |
| | | await Db.Updateable(locat).ExecuteCommandAsync(); |
| | | |
| | | //添加操作日志记录 |
| | | var k = new OperationCrServer().AddLogOperationCr("库内作业", "库内日志", taskNo, "取消", $"点击取消按钮、取消了任务号为:{taskNo}的任务", userId); |
| | | //var k = new OperationCrServer().AddLogOperationCr("库内作业", "库内日志", taskNo, "取消", $"点击取消按钮、取消了任务号为:{taskNo}的任务", userId); |
| | | await _operation.AddLogOperationCr(new OperationInputVm() |
| | | { |
| | | ParentName = "库内作业", |
| | | MenuName = "库内日志", |
| | | FkNo = taskNo, |
| | | TypeName = "取消", |
| | | Msg = $"点击取消按钮、取消了任务号为:{taskNo}的任务" |
| | | }); |
| | | Db.CommitTran(); |
| | | } |
| | | catch (Exception e) |
| | |
| | | } |
| | | |
| | | //取消AGV移库任务 |
| | | public void CancelMoveTask(string taskNo, int userId) |
| | | public async Task CancelMoveTask(string taskNo) |
| | | { |
| | | try |
| | | { |
| | | Db.BeginTran(); |
| | | |
| | | var task = Db.Queryable<LogTask>().First(m => m.TaskNo == taskNo && m.IsDel == "0"); |
| | | var task = await Db.Queryable<LogTask>().FirstAsync(m => m.TaskNo == taskNo && m.IsDel == "0"); |
| | | if (task == null) |
| | | { |
| | | throw new Exception("未查询到任务信息"); |
| | | throw Oops.Bah("未查询到任务信息"); |
| | | } |
| | | //修改任务 |
| | | task.IsSuccess = 0; |
| | |
| | | task.IsFinish = 0; |
| | | task.Status = "4"; |
| | | task.CancelDate = DateTime.Now; |
| | | Db.Updateable(task).ExecuteCommand(); |
| | | await Db.Updateable(task).ExecuteCommandAsync(); |
| | | |
| | | //修改起始储位信息 |
| | | var locat = Db.Queryable<SysStorageLocat>().First(a => a.IsDel == "0" && a.WareHouseNo == "W02" && a.LocatNo == task.StartLocat); |
| | | var locat = await Db.Queryable<SysStorageLocat>().FirstAsync(a => a.IsDel == "0" && a.WareHouseNo == "W02" && a.LocatNo == task.StartLocat); |
| | | if (locat == null) |
| | | { |
| | | throw new Exception("未查询到储位信息,请核实!"); |
| | | throw Oops.Bah("未查询到储位信息,请核实!"); |
| | | } |
| | | locat.Status = "1"; //有物品 |
| | | Db.Updateable(locat).ExecuteCommand(); |
| | | |
| | | //修改目标储位信息 |
| | | var locatEnd = Db.Queryable<SysStorageLocat>().First(a => a.IsDel == "0" && a.WareHouseNo == "W02" && a.LocatNo == task.EndLocat); |
| | | var locatEnd = await Db.Queryable<SysStorageLocat>().FirstAsync(a => a.IsDel == "0" && a.WareHouseNo == "W02" && a.LocatNo == task.EndLocat); |
| | | if (locatEnd != null) |
| | | { |
| | | locatEnd.Status = "0"; //空储位 |
| | | Db.Updateable(locatEnd).ExecuteCommand(); |
| | | } |
| | | await Db.Updateable(locatEnd).ExecuteCommandAsync(); |
| | | } |
| | | |
| | | //修改库存明细 |
| | | var stockDetail = Db.Queryable<DataStockDetail>().First(w => w.IsDel == "0" && w.PalletNo == task.PalletNo); |
| | | var stockDetail = await Db.Queryable<DataStockDetail>().FirstAsync(w => w.IsDel == "0" && w.PalletNo == task.PalletNo); |
| | | if (stockDetail == null) |
| | | { |
| | | throw new Exception("托盘上物料库存明细信息不存在,请检查!"); |
| | | throw Oops.Bah("托盘上物料库存明细信息不存在,请检查!"); |
| | | } |
| | | stockDetail.Status = "0";//待分配 |
| | | stockDetail.LockQty = 0;//锁定数量 |
| | | Db.Updateable(stockDetail).ExecuteCommand(); |
| | | await Db.Updateable(stockDetail).ExecuteCommandAsync(); |
| | | |
| | | //修改库存 |
| | | var stock = Db.Queryable<DataStock>().First(w => w.IsDel == "0" && w.SkuNo == stockDetail.SkuNo && w.LotNo == stockDetail.LotNo); |
| | | var stock = await Db.Queryable<DataStock>().FirstAsync(w => w.IsDel == "0" && w.SkuNo == stockDetail.SkuNo && w.LotNo == stockDetail.LotNo); |
| | | if (stock == null) |
| | | { |
| | | throw new Exception("托盘上物料库存信息不存在,请检查!"); |
| | | throw Oops.Bah("托盘上物料库存信息不存在,请检查!"); |
| | | } |
| | | stock.LockQty -= (decimal)stockDetail.Qty; |
| | | Db.Updateable(stock).ExecuteCommand(); |
| | | await Db.Updateable(stock).ExecuteCommandAsync(); |
| | | |
| | | //添加操作日志记录 |
| | | var k = new OperationCrServer().AddLogOperationCr("库内作业", "库内日志", taskNo, "取消", $"点击取消按钮、取消了任务号为:{taskNo}的任务", userId); |
| | | //var k = new OperationCrServer().AddLogOperationCr("库内作业", "库内日志", taskNo, "取消", $"点击取消按钮、取消了任务号为:{taskNo}的任务", userId); |
| | | await _operation.AddLogOperationCr(new OperationInputVm() |
| | | { |
| | | ParentName = "库内作业", |
| | | MenuName = "库内日志", |
| | | FkNo = taskNo, |
| | | TypeName = "取消", |
| | | Msg = $"点击取消按钮、取消了任务号为:{taskNo}的任务" |
| | | }); |
| | | Db.CommitTran(); |
| | | } |
| | | catch (Exception e) |