using MES.Service.DB; using MES.Service.Dto.webApi; using MES.Service.Modes; using SqlSugar; namespace MES.Service.service.BasicData; public class MesDepotsManager : Repository { // Save 方法用于保存单个仓库记录,根据类型执行不同的操作 public bool Save(ErpDepots depots) { var entity = GetMesDepots(depots); // 将 ErpDepots 转换为 MesDepots return UseTransaction(db => { switch (depots.Type) { case "0": if (UpdateDepotStatus(db, entity.DepotId, "A")) return 1; break; case "1": if (UpdateDepotStatus(db, entity.DepotId, "B")) return 1; break; case "2": if (InsertDepot(db, entity)) return 1; break; case "3": if (UpdateDepotStatus(db, entity.DepotId, "B")) return 1; break; case "4": if (InsertOrUpdate(db, entity)) return 1; break; default: throw new ArgumentNullException($"type没有{depots.Type}这个类型的参数"); } throw new NotImplementedException("操作失败"); }) > 0; } // 更新仓库状态的方法 private bool UpdateDepotStatus(SqlSugarScope db, decimal depotId,string status) { var result = db.Updateable().SetColumns(s => s.IsNg == status).Where(s => s.DepotId == depotId).ExecuteCommand(); return true; } // 插入新仓库的方法 private bool InsertDepot(SqlSugarScope db, MesDepots entity) { var exists = db.Queryable().Any(e => e.DepotId == entity.DepotId && e.DepotCode == entity.DepotCode); if (exists) { var result = db.Updateable(entity).Where(e => e.DepotId == entity.DepotId && e.DepotCode == entity.DepotCode).ExecuteCommand(); return true; } else { var insert = db.Insertable(entity).ExecuteCommand(); if (insert > 0) { return true; } else { throw new NotImplementedException("插入失败"); } } } // 插入或更新仓库的方法 private bool InsertOrUpdate(SqlSugarScope db, MesDepots entity) { var exists = db.Queryable().Any(e => e.DepotId == entity.DepotId && e.DepotCode == entity.DepotCode); if (exists) { var update = db.Updateable(entity).Where(e => e.DepotId == entity.DepotId && e.DepotCode == entity.DepotCode).ExecuteCommand(); return true; } else { var insert = db.Insertable(entity).ExecuteCommand(); if (insert > 0) { return true; } else { return false; } } } // 将 ErpDepots 对象转换为 MesDepots 对象的方法 private MesDepots GetMesDepots(ErpDepots depots) { return new MesDepots { DepotId = Convert.ToDecimal(depots.Id), DepotCode = depots.FNumber, DepotName = depots.FName, IsFkc = depots.FAllowMinusQty, CreateBy = depots.FPrincipal, Depottype = depots.FStockProperty, IsNg = depots.FForbidStatus, Zuid = depots.FGroup, CreateOrg = Convert.ToDecimal(depots.FCreateOrgId), UseOrg = Convert.ToDecimal(depots.FUseOrgId), CreateDate = DateTime.Now, Company = "1000", Factory = "1000" }; } // SaveList 方法用于保存多个仓库记录,根据类型批量执行不同的操作 public bool SaveList(List erpDepots) { var list = erpDepots.Select(GetMesDepots).ToList(); var groupBy = list.GroupBy(s => s.Type).ToDictionary(g => g.Key, g => g.ToList()); return UseTransaction(db => { foreach (var depotsGroup in groupBy) switch (depotsGroup.Key) { case "0": if (!UpdateDepotStatusBatch(db, depotsGroup.Value,"A")) // 批量启用仓库 throw new NotImplementedException("启用失败"); break; case "1": if (!UpdateDepotStatusBatch(db, depotsGroup.Value,"B")) // 批量禁用仓库 throw new NotImplementedException("禁用失败"); break; case "2": if (!InsertDepotBatch(db,depotsGroup.Value)) // 批量插入仓库 throw new NotImplementedException("插入失败"); break; case "3": if (!UpdateDepotStatusBatch(db, depotsGroup.Value, "B")) // 批量禁用仓库 throw new NotImplementedException("删除失败"); break; case "4": if (!InsertOrUpdateBatch(db,depotsGroup.Value)) // 批量插入或更新仓库 throw new NotImplementedException("同步失败"); break; default: throw new ArgumentNullException($"type没有{depotsGroup.Key}这个类型的参数"); } return 1; }) > 0; } // 批量更新仓库状态的方法 private bool UpdateDepotStatusBatch(SqlSugarScope db,List depotList, string status) { var ids = depotList.Select(it => it.DepotId).ToArray(); var result = db.Updateable().SetColumns(s => s.IsNg == status).Where(s => ids.Contains(s.DepotId)).ExecuteCommand(); return true; } // 批量插入仓库的方法 private bool InsertDepotBatch(SqlSugarScope db,List depotList) { var insertRange = db.Insertable(depotList).ExecuteCommand(); return true; } // 批量插入或更新仓库的方法 private bool InsertOrUpdateBatch(SqlSugarScope db,List depotList) { foreach (var entity in depotList) { if (!InsertOrUpdate(db, entity)) { return false; } } return true; } }