using MES.Service.DB; using MES.Service.Dto.webApi; using MES.Service.Modes; using AngleSharp.Dom; using SqlSugar; using Masuit.Tools; namespace MES.Service.service.BasicData; /// /// 物料类型信息 /// public class MesItemTypeManager : Repository { //当前类已经继承了 Repository 增、删、查、改的方法 public bool Save(ErpItemType customer) { var entity = GetMesItemType(customer); try { switch (customer.Type) { case "0": return InsertItemType(entity); case "1": return DeleteItemType(entity.Id); default: throw new ArgumentNullException( $"type没有{customer.Type}这个类型的参数"); } } catch (Exception ex) { throw new ApplicationException($"操作失败: {ex.Message}", ex); } } /// /// 添加物料类型信息new_0 /// /// /// /// private bool InsertItemType(MesItemType entity) { if (entity.Id == 0) { // 新增情况:生成新ID并插入 var newId = GenerateNewId(); entity.Id = newId; var insert = base.Insert(entity); if (insert) return true; } else { // 更新情况:删除后重新插入,保持原有ID var originalId = entity.Id; // 先删除原记录(如果存在) Db.Deleteable().Where(s => s.Id == originalId).ExecuteCommand(); // 重新插入,保持原有ID entity.Id = originalId; var insert = base.Insert(entity); if (insert) return true; } throw new NotImplementedException("插入失败"); } /// /// 添加物料类型信息old_0 /// /// /// /// //private bool InsertItemType(MesItemType entity) //{ // var insert = base.Insert(entity); // if (insert) // return true; // throw new NotImplementedException("插入失败"); //} private bool DeleteItemType(decimal id) { var deleteById = Db.Deleteable() .Where(it => it.Id == id).ExecuteCommand(); if (deleteById > 0) return true; throw new NotImplementedException("删除失败"); } /// /// 生成新的ID,确保不重复 /// private decimal GenerateNewId() { // 处理空表的情况,从1开始 var maxId = Db.Queryable().Max(x => (decimal?)x.Id) ?? 0; var newId = maxId + 1; // 双重检查,确保生成的ID不存在 while (Db.Queryable().Where(x => x.Id == newId).Any()) { newId++; } return newId; } private MesItemType GetMesItemType(ErpItemType department) { // 查找是否已存在相同客户编码的记录。ID、create_date var existingCustomer = Db.Queryable() .Where(s => s.Tcode == department.FNumber) .First(); return new MesItemType { // 如果存在,使用现有的ID,后续将删除后重新插入 // 如果不存在,设为0,InsertOrUpdate方法将生成新ID Id = existingCustomer?.Id ?? 0, Pgroup = department.fParentGroup, Tcode = department.FNumber, Tname = department.FName, Description = department.FDescription, MA011= department.MA011, //FSubsidiary = department.FSubsidiary, //Fumbrella = department.Fumbrella, // 如果存在,使用现有的CreateDate,后续将删除后重新插入 // 如果不存在,设为当前时间 CreateDate = existingCustomer?.CreateDate ?? DateTime.Now, LastupdateDate = DateTime.Now, Company = "1000", Factory = "1000" }; } public bool SaveList(List departments) { var list = new List(); departments.ForEach(s => { var entity = GetMesItemType(s); entity.Type = s.Type; list.Add(entity); }); var groupBy = list.GroupBy(s => s.Type) .ToDictionary(g => g.Key, g => g.ToList()); var result = new List(); foreach (var itemTypeGroup in groupBy) try { switch (itemTypeGroup.Key) { case "0": result.Add(InsertItemTypeBatch(itemTypeGroup.Value)); break; case "1": result.Add(DeleteItemTypeBatch(itemTypeGroup.Value)); break; default: throw new ArgumentNullException( $"type没有{itemTypeGroup.Key}这个类型的参数"); } } catch (Exception ex) { throw new ApplicationException($"批量操作失败: {ex.Message}", ex); } if (result.All(b => b)) return true; throw new NotImplementedException("接口执行失败"); } /// /// 批量添加物料类型信息new_0 /// /// /// /// private bool InsertItemTypeBatch(List itemTypeList) { return itemTypeList.All(entity => InsertItemType(entity)); } /// /// 批量添加物料类型信息old_0 /// /// /// /// //private bool InsertItemTypeBatch(List itemTypeList) //{ // var insertRange = base.InsertRange(itemTypeList); // if (insertRange) // return true; // throw new NotImplementedException("插入失败"); //} private bool DeleteItemTypeBatch(List itemTypeList) { var ids = itemTypeList.Select(it => it.Id).ToArray(); var deleteByIds = Db.Deleteable() .Where(s => ids.Contains(s.Id)).ExecuteCommand(); if (deleteByIds > 0) return true; throw new NotImplementedException("删除失败"); } }