using System; using Infrastructure.Attribute; using SqlSugar; using ZR.Model; using ZR.Model.MES.wms; using ZR.Model.MES.wms.Dto; using ZR.Repository; using ZR.Service.mes.wms.IService; namespace ZR.Service.mes.wms { /// /// 一次合格品仓库Service业务层处理 /// [AppService( ServiceType = typeof(IWmOneTimeInventoryService), ServiceLifetime = LifeTime.Transient )] public class WmOneTimeInventoryService : BaseService, IWmOneTimeInventoryService { /// /// 查询一次合格品仓库列表 /// /// /// public PagedInfo GetList(WmOneTimeInventoryQueryDto parm) { List partnumberByDescription = new(); if (parm != null && !string.IsNullOrEmpty(parm.Description)) { partnumberByDescription = Context .Queryable() .Where(it => it.Description.Contains(parm.Description)) .Select(it => it.Partnumber) .ToList(); } var predicate = Expressionable .Create() .AndIF( !string.IsNullOrEmpty(parm.Description), it => partnumberByDescription.Contains(it.Partnumber) ) .AndIF( !string.IsNullOrEmpty(parm.Partnumber), it => it.Partnumber.Contains(parm.Partnumber) ) .AndIF(parm.Status > -1, it => it.Status == parm.Status) .AndIF(parm.Type > 0, it => it.Type == parm.Type); var response = Queryable() .Where(predicate.ToExpression()) .OrderByDescending(it => it.UpdatedTime) .ToPage(parm); if (response.Result.Count > 0) { foreach (WmOneTimeInventoryDto item in response.Result) { WmMaterial material = Context .Queryable() .Where(it => it.Partnumber == item.Partnumber) .Where(it => it.Type == 1) .Where(it => it.Status == 1) .First(); if (material == null) { item.Description = "此零件号不在物料清单内!"; continue; } item.Color = material.Color; item.Specification = material.Specification; item.Description = !string.IsNullOrEmpty(material.Description) ? material.Description : material.ProductName; } } return response; } /// /// 获取详情 /// /// /// public WmOneTimeInventory GetInfo(string Id) { var response = Queryable().Where(x => x.Id == Id).First(); return response; } /// /// 添加一次合格品仓库 /// /// /// public WmOneTimeInventory AddWmOneTimeInventory(WmOneTimeInventory model) { return Context.Insertable(model).ExecuteReturnEntity(); } /// /// 修改一次合格品仓库 /// /// /// public int UpdateWmOneTimeInventory(WmOneTimeInventory model) { return Update(model, true); } /// /// 新增仓库操作记录 /// /// 抛光仓库主键 /// 同批功能识别编号 /// 零件号 /// 类别 /// 操作数字 /// 备注 /// 创建人 /// public int AddOneTimeRecord( string fkInventoryId, string code, string partnumber, int type, int? changeQuantity, DateTime? actionTime, string remark, string createdBy ) { WmOneTimeRecord newOneTimeRecord = new() { Id = SnowFlakeSingle.Instance.NextId().ToString(), FkInventoryId = fkInventoryId, Code = code, Partnumber = partnumber, BlankNum = "", ChangeType = type, ChangeQuantity = changeQuantity ?? 0, ActionTime = actionTime, Status = 1, Remark = remark, CreatedBy = createdBy, CreatedTime = DateTime.Now.ToLocalTime(), UpdatedBy = createdBy, UpdatedTime = DateTime.Now.ToLocalTime(), }; return Context.Insertable(newOneTimeRecord).ExecuteCommand(); } public int DoWmOneTimeWarehousing(WmOneTimeInventory parm) { try { Context.Ado.BeginTran(); // 零件号检查 string partnumber = parm.Partnumber; // 检查是否存在库中 WmOneTimeInventory oneTimeInventory = Context .Queryable() .Where(it => it.Partnumber == partnumber) .Where(it => it.Type == parm.Type) .Where(it => it.Status == 1) .First(); if (oneTimeInventory == null) { // 为空则新增库 WmOneTimeInventory newWmOneTimeInventory = new() { Id = SnowFlakeSingle.Instance.NextId().ToString(), BlankNum = "", Partnumber = partnumber, Type = parm.Type, Quantity = parm.Quantity, MaxNum = 0, MinNum = 0, WarnNum = 0, Status = 1, Remark = "系统自动创建库", CreatedBy = parm.CreatedBy, CreatedTime = DateTime.Now.ToLocalTime(), UpdatedBy = parm.CreatedBy, UpdatedTime = DateTime.Now.ToLocalTime(), }; WmOneTimeInventory addWmOneTimeInventory = Context .Insertable(newWmOneTimeInventory) .ExecuteReturnEntity(); string code = !string.IsNullOrEmpty(parm.WorkOrder) ? parm.WorkOrder : SnowFlakeSingle.Instance.NextId().ToString(); string remark = "初次创建仓库,新增入库数据 " + parm.Remark; int successNum = AddOneTimeRecord( addWmOneTimeInventory.Id, code, partnumber, 1, parm.Quantity, parm.ActionTime, remark, parm.CreatedBy ); if (successNum == 0) { Context.Ado.RollbackTran(); throw new Exception("入库日志添加失败"); } } else { oneTimeInventory.Quantity += parm.Quantity; int updateNum = Context.Updateable(oneTimeInventory).ExecuteCommand(); if (updateNum == 0) { Context.Ado.RollbackTran(); throw new Exception("修改一次合格仓库数据失败"); } // 已有则新增记录 string code = !string.IsNullOrEmpty(parm.WorkOrder) ? parm.WorkOrder : SnowFlakeSingle.Instance.NextId().ToString(); int successNum = AddOneTimeRecord( oneTimeInventory.Id, code, partnumber, 1, parm.Quantity, parm.ActionTime, parm.Remark, parm.CreatedBy ); if (successNum == 0) { Context.Ado.RollbackTran(); throw new Exception("入库日志添加失败"); } } Context.Ado.CommitTran(); return 1; } catch (Exception e) { Context.Ado.RollbackTran(); throw new Exception(e.Message); } } public int DoWmOneTimeRetrieval(WmOneTimeInventory parm) { try { Context.Ado.BeginTran(); // 零件号检查 string partnumber = parm.Partnumber; // 检查是否存在库中 WmOneTimeInventory oneTimeInventory = Context .Queryable() .Where(it => it.Partnumber == partnumber) .Where(it => it.Type == parm.Type) .Where(it => it.Status == 1) .First(); if (oneTimeInventory == null) { // 为空则新增库 WmOneTimeInventory newWmOneTimeInventory = new() { Id = SnowFlakeSingle.Instance.NextId().ToString(), BlankNum = "", Partnumber = partnumber, Type = parm.Type, Quantity = parm.Quantity * -1, MaxNum = 0, MinNum = 0, WarnNum = 0, Status = 1, Remark = "系统自动创建库", CreatedBy = parm.CreatedBy, CreatedTime = DateTime.Now.ToLocalTime(), UpdatedBy = parm.CreatedBy, UpdatedTime = DateTime.Now.ToLocalTime(), }; WmOneTimeInventory addWmOneTimeInventory = Context .Insertable(newWmOneTimeInventory) .ExecuteReturnEntity(); string code = !string.IsNullOrEmpty(parm.WorkOrder) ? parm.WorkOrder : SnowFlakeSingle.Instance.NextId().ToString(); string remark = "初次创建仓库,新增手动出库数据" + parm.Remark; int successNum = AddOneTimeRecord( addWmOneTimeInventory.Id, code, partnumber, 2, parm.Quantity, parm.ActionTime, remark, parm.CreatedBy ); if (successNum == 0) { Context.Ado.RollbackTran(); throw new Exception("出库日志添加失败"); } } else { oneTimeInventory.Quantity -= parm.Quantity; int updateNum = Context.Updateable(oneTimeInventory).ExecuteCommand(); if (updateNum == 0) { Context.Ado.RollbackTran(); throw new Exception("修改一次合格仓库零件数失败"); } // 已有则新增记录 string code = !string.IsNullOrEmpty(parm.WorkOrder) ? parm.WorkOrder : SnowFlakeSingle.Instance.NextId().ToString(); int successNum = AddOneTimeRecord( oneTimeInventory.Id, code, partnumber, 2, parm.Quantity, parm.ActionTime, parm.Remark, parm.CreatedBy ); if (successNum == 0) { Context.Ado.RollbackTran(); throw new Exception("出库日志添加失败"); } } Context.Ado.CommitTran(); return 1; } catch (Exception e) { Context.Ado.RollbackTran(); throw new Exception(e.Message); } } public int DoWmOneTimeStocktaking(WmOneTimeInventory parm) { if (parm.Quantity < 0) { throw new Exception("修改的零件数小于0"); } try { Context.Ado.BeginTran(); // 检查是否存在库中 WmOneTimeInventory oneTImeInventory = Context .Queryable() .Where(it => it.Id == parm.Id) .Where(it => it.Status == 1) .First(); if (oneTImeInventory == null) { Context.Ado.RollbackTran(); throw new Exception("盘点记录不存在" + parm.Id); } Context.Updateable(parm).IgnoreColumns(ignoreAllNullColumns: true).ExecuteCommand(); // 已有则新增记录 string code = !string.IsNullOrEmpty(parm.WorkOrder) ? parm.WorkOrder : SnowFlakeSingle.Instance.NextId().ToString(); int successNum = AddOneTimeRecord( parm.Id, code, parm.Partnumber, 3, parm.Quantity, parm.ActionTime, parm.Remark, parm.CreatedBy ); if (successNum == 0) { Context.Ado.RollbackTran(); throw new Exception("盘点日志添加失败"); } Context.Ado.CommitTran(); return successNum; } catch (Exception e) { Context.Ado.RollbackTran(); throw new Exception(e.Message); } } // 获取仓库零件数量 public int GetPartNumber() { return Context .Queryable() .Where(it => it.Status == 1) .Sum(it => it.Quantity) ?? 0; } } }