using System; using Aliyun.OSS; 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(IWmPolishInventoryService), ServiceLifetime = LifeTime.Transient )] public class WmPolishInventoryService : BaseService, IWmPolishInventoryService { /// /// 查询工艺路线-抛光 库存表列表 /// /// /// public PagedInfo GetList(WmPolishInventoryQueryDto 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 (WmPolishInventoryDto 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 WmPolishInventory GetInfo(string Id) { var response = Queryable().Where(x => x.Id == Id).First(); return response; } /// /// 添加工艺路线-抛光 库存表 /// /// /// public WmPolishInventory AddWmPolishInventory(WmPolishInventory model) { return Context.Insertable(model).ExecuteReturnEntity(); } /// /// 修改工艺路线-抛光 库存表 /// /// /// public int UpdateWmPolishInventory(WmPolishInventory model) { //var response = Update(w => w.Id == model.Id, it => new WmPolishInventory() //{ // BlankNum = model.BlankNum, // Partnumber = model.Partnumber, // Quantity = model.Quantity, // MaxNum = model.MaxNum, // MinNum = model.MinNum, // WarnNum = model.WarnNum, // Type = model.Type, // Status = model.Status, // Remark = model.Remark, // CreatedBy = model.CreatedBy, // CreatedTime = model.CreatedTime, // UpdatedBy = model.UpdatedBy, // UpdatedTime = model.UpdatedTime, //}); //return response; return Update(model, true); } /// /// 零件号下拉查询 /// /// 零件号或描述 /// public List GetMaterialSelectOption(string query) { var predicate = Expressionable .Create() .Or(it => it.Partnumber.Contains(query)) .Or(it => it.Description.Contains(query)) .Or(it => it.ProductName.Contains(query)) .And(it => it.Type == 1) .And(it => it.Status == 1); List options = Context .Queryable() .Where(predicate.ToExpression()) .Select( (it) => new WmMaterialSelectOptions { Key = it.Id, Label = "[ " + it.Partnumber + " ] " + it.Description, Value = it.Partnumber } ) .ToList(); return options; } /// /// 新增抛光仓库操作记录 /// /// 抛光仓库主键 /// 同批功能识别编号 /// 零件号 /// 类别 /// 操作数字 /// 备注 /// 创建人 /// public int AddPolishRecord( string fkInventoryId, string code, string partnumber, int type, int? changeQuantity, DateTime? actionTime, string remark, string createdBy ) { WmPolishRecord newPolishRecord = 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(newPolishRecord).ExecuteCommand(); } public int DoWmPolishWarehousing(WmPolishInventory parm) { try { Context.Ado.BeginTran(); // 零件号检查 string partnumber = parm.Partnumber; /*WmMaterial material = Context .Queryable() .Where(it => it.Partnumber == partnumber) .Where(it => it.Type == 1) .Where(it => it.Status == 1) .First(); if (material == null) { Context.Ado.RollbackTran(); throw new Exception("零件号在物料清单未查到,请到物料清单新增零件号记录"); }*/ // 检查是否存在库中 WmPolishInventory polishInventory = Context .Queryable() .Where(it => it.Partnumber == partnumber) .Where(it => it.Type == parm.Type) .Where(it => it.Status == 1) .First(); if (polishInventory == null) { // 为空则新增库 WmPolishInventory newWmPolishInventory = 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(), }; WmPolishInventory addWmPolishInventory = Context .Insertable(newWmPolishInventory) .ExecuteReturnEntity(); string code = !string.IsNullOrEmpty(parm.WorkOrder) ? parm.WorkOrder : SnowFlakeSingle.Instance.NextId().ToString(); string remark = "初次创建仓库,新增入库数据 " + parm.Remark; int successNum = AddPolishRecord( addWmPolishInventory.Id, code, partnumber, 1, parm.Quantity, parm.ActionTime, remark, parm.CreatedBy ); if (successNum == 0) { Context.Ado.RollbackTran(); throw new Exception("入库日志添加失败"); } } else { polishInventory.Quantity += parm.Quantity; int updateNum = Context.Updateable(polishInventory).ExecuteCommand(); if (updateNum == 0) { Context.Ado.RollbackTran(); throw new Exception("修改抛光仓库数据失败"); } // 已有则新增记录 string code = SnowFlakeSingle.Instance.NextId().ToString(); int successNum = AddPolishRecord( polishInventory.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 DoWmPolishRetrieval(WmPolishInventory parm) { try { Context.Ado.BeginTran(); // 零件号检查 string partnumber = parm.Partnumber; /*WmMaterial material = Context .Queryable() .Where(it => it.Partnumber == partnumber) .Where(it => it.Type == 1) .Where(it => it.Status == 1) .First(); if (material == null) { Context.Ado.RollbackTran(); throw new Exception("零件号在物料清单未查到,请到物料清单新增零件号记录"); }*/ // 检查是否存在库中 WmPolishInventory polishInventory = Context .Queryable() .Where(it => it.Partnumber == partnumber) .Where(it => it.Type == parm.Type) .Where(it => it.Status == 1) .First(); if (polishInventory == null) { // 为空则新增库 WmPolishInventory newWmPolishInventory = 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(), }; WmPolishInventory addWmPolishInventory = Context .Insertable(newWmPolishInventory) .ExecuteReturnEntity(); string code = !string.IsNullOrEmpty(parm.WorkOrder) ? parm.WorkOrder : SnowFlakeSingle.Instance.NextId().ToString(); string remark = "初次创建仓库,新增手动出库数据" + parm.Remark; int successNum = AddPolishRecord( addWmPolishInventory.Id, code, partnumber, 2, parm.Quantity, parm.ActionTime, remark, parm.CreatedBy ); if (successNum == 0) { Context.Ado.RollbackTran(); throw new Exception("出库日志添加失败"); } } else { polishInventory.Quantity -= parm.Quantity; int updateNum = Context.Updateable(polishInventory).ExecuteCommand(); if (updateNum == 0) { Context.Ado.RollbackTran(); throw new Exception("修改抛光仓库零件数失败"); } // 已有则新增记录 string code = SnowFlakeSingle.Instance.NextId().ToString(); int successNum = AddPolishRecord( polishInventory.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 DoWmPolishStocktaking(WmPolishInventory parm) { if (parm.Quantity < 0) { throw new Exception("修改的零件数小于0"); } try { Context.Ado.BeginTran(); // 检查是否存在库中 WmPolishInventory polishInventory = Context .Queryable() .Where(it => it.Id == parm.Id) .Where(it => it.Status == 1) .First(); if (polishInventory == 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 = AddPolishRecord( 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); } } } }