| MES.Service/Modes/SysUser.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| MES.Service/service/BasicData/MesCustomerManager.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| MES.Service/service/BasicData/MesDepotsManager.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| MES.Service/service/BasicData/MesItemTypeManager.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| MES.Service/service/BasicData/MesItemsManager.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| MES.Service/service/BasicData/MesStaffManager.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| MES.Service/service/BasicData/MesSupplierManager.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| MES.Service/service/BasicData/MesUnitManager.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
| MES.Service/service/BasicData/SysDepartmentManager.cs | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
MES.Service/Modes/SysUser.cs
@@ -8,128 +8,127 @@ [SugarTable("SYS_USER")] public class SysUser { [StringLength(20, ErrorMessage = "Sid长度不能超出20")] [SugarColumn(ColumnName = "SID")] //用于SqlSugar public decimal Sid { get; set; } /// <summary> /// 主键 /// </summary> /// 主键 ///</summary> [SugarColumn(ColumnName = "GUID", IsPrimaryKey = true)] public Guid Guid { get; set; } /// <summary> /// 账号 /// </summary> /// 账号 ///</summary> [SugarColumn(ColumnName = "ACCOUNT")] public string? Account { get; set; } /// <summary> /// 密码 /// </summary> /// 密码 ///</summary> [SugarColumn(ColumnName = "PASSWORD")] public string? Password { get; set; } /// <summary> /// 用户姓名 /// </summary> /// 用户姓名 ///</summary> [SugarColumn(ColumnName = "USER_NAME")] public string? UserName { get; set; } /// <summary> /// 住址 /// </summary> /// 住址 ///</summary> [SugarColumn(ColumnName = "ADDRESS")] public string? Address { get; set; } /// <summary> /// 电话 /// </summary> /// 电话 ///</summary> [SugarColumn(ColumnName = "TEL")] public string? Tel { get; set; } /// <summary> /// 邮箱 /// </summary> /// 邮箱 ///</summary> [SugarColumn(ColumnName = "EMAIL")] public string? Email { get; set; } /// <summary> /// 最后登录时间 /// </summary> /// 最后登录时间 ///</summary> [SugarColumn(ColumnName = "LASTLOGIN_TIME")] public DateTime? LastloginTime { get; set; } /// <summary> /// 最后退出时间 /// </summary> /// 最后退出时间 ///</summary> [SugarColumn(ColumnName = "LASTLOGOUT_TIME")] public DateTime? LastlogoutTime { get; set; } /// <summary> /// 状态 /// </summary> /// 状态 /// 默认值: ((1)) ///</summary> [SugarColumn(ColumnName = "IS_STATUS")] public bool? IsStatus { get; set; } /// <summary> /// 建立者 /// </summary> /// 建立者 ///</summary> [SugarColumn(ColumnName = "CREATE_BY")] public string? CreateBy { get; set; } /// <summary> /// 建立时间 /// </summary> /// 建立时间 ///</summary> [SugarColumn(ColumnName = "CREATE_TIME")] public DateTime? CreateTime { get; set; } /// <summary> /// 更新时间 /// </summary> /// 更新时间 ///</summary> [SugarColumn(ColumnName = "LASTUPDATE_TIME")] public DateTime? LastupdateTime { get; set; } /// <summary> /// 更新人 /// </summary> /// 更新人 ///</summary> [SugarColumn(ColumnName = "LASTUPDATE_BY")] public string? LastupdateBy { get; set; } /// <summary> /// 是否在线 /// </summary> /// 是否在线 /// 默认值: ((0)) ///</summary> [SugarColumn(ColumnName = "FLAG_ONLINE")] public int? FlagOnline { get; set; } public bool? FlagOnline { get; set; } /// <summary> /// 登录次数 /// </summary> /// 登录次数 ///</summary> [SugarColumn(ColumnName = "LOGIN_COUNTER")] public int? LoginCounter { get; set; } /// <summary> /// 备注 /// </summary> /// 备注 ///</summary> [SugarColumn(ColumnName = "REMARK")] public string? Remark { get; set; } /// <summary> /// 部门编号 /// </summary> /// 部门编号 ///</summary> [SugarColumn(ColumnName = "DEPART_NO")] public string? DepartNo { get; set; } /// <summary> /// 是否系统内置 /// </summary> /// 是否系统内置 ///</summary> [SugarColumn(ColumnName = "IS_SYS")] public int? IsSys { get; set; } /// <summary> /// 关联员工 ///</summary> [SugarColumn(ColumnName = "STAFF_ID")] public string? StaffId { get; set; } [SugarColumn(IsIgnore = true)] public string? Type { get; set; } } MES.Service/service/BasicData/MesCustomerManager.cs
@@ -43,41 +43,15 @@ public bool SaveList(List<ErpCustomer> customers) { var list = customers.Select(GetSysDepartment).ToList(); var groupBy = list.GroupBy(s => s.Type) .ToDictionary(g => g.Key, g => g.ToList()); return UseTransaction(db => if (customers == null || !customers.Any()) { foreach (var customerGroup in groupBy) switch (customerGroup.Key) { case "0": if (!UpdateCustomerStatusBatch(db, customerGroup.Value, "A")) throw new NotImplementedException("启用失败"); break; case "1": if (!UpdateCustomerStatusBatch(db, customerGroup.Value, "B")) throw new NotImplementedException("禁用失败"); break; case "3": if (!DeleteCustomerBatch(db, customerGroup.Value)) throw new NotImplementedException("删除失败"); break; case "2": case "4": if (!InsertOrUpdateBatch(db, customerGroup.Value)) throw new NotImplementedException("同步失败"); break; default: throw new ArgumentNullException( $"type没有{customerGroup.Key}这个类型的参数"); } Console.WriteLine("警告: 传入的列表为空"); return false; } return 1; }) > 0; // 逐条处理,全部成功才返回true(事务内批量处理更优,此处保持原有逻辑) var result = customers.Select(Save).ToList(); return result.All(b => b); } private bool UpdateCustomerStatus(SqlSugarScope db, decimal customerId, MES.Service/service/BasicData/MesDepotsManager.cs
@@ -130,49 +130,15 @@ // SaveList 方法用于保存多个仓库记录,根据类型批量执行不同的操作 public bool SaveList(List<ErpDepots> erpDepots) { var list = new List<MesDepots>(); erpDepots.ForEach(s => if (erpDepots == null || !erpDepots.Any()) { var entity = GetMesDepots(s); // 将 ErpDepots 转换为 MesDepots entity.Type = s.Type; list.Add(entity); }); Console.WriteLine("警告: 传入的列表为空"); return false; } 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 "3": if (!DeleteDepotBatch(db, depotsGroup.Value)) // 批量删除仓库 throw new NotImplementedException("删除失败"); break; case "2": case "4": if (!InsertOrUpdateBatch(db, depotsGroup.Value)) // 批量插入或更新仓库 throw new NotImplementedException("同步失败"); break; default: throw new ArgumentNullException( $"type没有{depotsGroup.Key}这个类型的参数"); } return 1; }) > 0; // 逐条处理,全部成功才返回true(事务内批量处理更优,此处保持原有逻辑) var result = erpDepots.Select(Save).ToList(); return result.All(b => b); } // 批量更新仓库状态的方法 MES.Service/service/BasicData/MesItemTypeManager.cs
@@ -15,9 +15,10 @@ { switch (customer.Type) { case "0": case "2": case "4": return InsertItemType(entity); case "1": case "3": return DeleteItemType(entity.Id); default: throw new ArgumentNullException( @@ -91,43 +92,15 @@ public bool SaveList(List<ErpItemType> departments) { var list = new List<MesItemType>(); departments.ForEach(s => if (departments == null || !departments.Any()) { var entity = GetMesItemType(s); entity.Type = s.Type; list.Add(entity); }); Console.WriteLine("警告: 传入的列表为空"); return false; } var groupBy = list.GroupBy(s => s.Type) .ToDictionary(g => g.Key, g => g.ToList()); var result = new List<bool>(); 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("接口执行失败"); // 逐条处理,全部成功才返回true(事务内批量处理更优,此处保持原有逻辑) var result = departments.Select(Save).ToList(); return result.All(b => b); } private bool InsertItemTypeBatch(List<MesItemType> itemTypeList) MES.Service/service/BasicData/MesItemsManager.cs
@@ -44,39 +44,15 @@ public bool SaveList(List<ErpItems> items) { var list = items.Select(GetMesItems).ToList(); var groupBy = list.GroupBy(s => s.Type) .ToDictionary(g => g.Key, g => g.ToList()); return UseTransaction(db => if (items == null || !items.Any()) { foreach (var itemGroup in groupBy) switch (itemGroup.Key) { case "0": if (!UpdateItemStatusBatch(db, itemGroup.Value, "A")) throw new NotImplementedException("启用失败"); break; case "1": if (!UpdateItemStatusBatch(db, itemGroup.Value, "B")) throw new NotImplementedException("禁用失败"); break; case "3": if (!DeleteItemBatch(db, itemGroup.Value)) throw new NotImplementedException("删除失败"); break; case "2": case "4": if (!InsertOrUpdateBatch(db, itemGroup.Value)) throw new NotImplementedException("同步失败"); break; default: throw new ArgumentNullException( $"type没有{itemGroup.Key}这个类型的参数"); } return 1; }) > 0; Console.WriteLine("警告: 传入的物料列表为空"); return false; } // 逐条处理,全部成功才返回true(事务内批量处理更优,此处保持原有逻辑) var result = items.Select(Save).ToList(); return result.All(b => b); } private bool UpdateItemStatus(SqlSugarScope db, decimal itemId, @@ -113,36 +89,37 @@ private MesItems GetMesItems(ErpItems item) { var id = string.IsNullOrEmpty(item.Id) ? DateTimeOffset.UtcNow.ToUnixTimeSeconds() : long.Parse(item.Id); var entity = new MesItems { Id = string.IsNullOrEmpty(item.Id) ? DateTimeOffset.UtcNow.ToUnixTimeSeconds() : long.Parse(item.Id), Id = id, Type = item.Type, ItemNo = item.FNumber, ItemName = item.FName, ItemModel = item.FSpecification, ItemUnit = item.FBaseUnitId, Lowlimit = !string.IsNullOrEmpty(item.FSafeStock) ? Convert.ToDecimal(item.FSafeStock) : null, Highlimit = !string.IsNullOrEmpty(item.FMaxStock) ? Convert.ToDecimal(item.FMaxStock) : null, PrdPack = !string.IsNullOrEmpty(item.FMinPackCount) ? Convert.ToDecimal(item.FMinPackCount) : null, // Lowlimit = !string.IsNullOrEmpty(item.FSafeStock) // ? Convert.ToDecimal(item.FSafeStock) // : null, // Highlimit = !string.IsNullOrEmpty(item.FMaxStock) // ? Convert.ToDecimal(item.FMaxStock) // : null, // PrdPack = !string.IsNullOrEmpty(item.FMinPackCount) // ? Convert.ToDecimal(item.FMinPackCount) // : null, DepotCode = item.FStockId, Fmaterialgroup = item.FMaterialGroup, Remarks = item.FDescription, Ffinishreceiptoverrate = !string.IsNullOrEmpty(item.FFinishReceiptOverRate) ? Convert.ToInt32(item.FFinishReceiptOverRate) : null, // Ffinishreceiptoverrate = // !string.IsNullOrEmpty(item.FFinishReceiptOverRate) // ? Convert.ToInt32(item.FFinishReceiptOverRate) // : null, Fissuetype = item.FIssueType, Fisbatchmanage = !string.IsNullOrEmpty(item.FIsBatchManage) ? Convert.ToInt32(item.FIsBatchManage) : null, // Fisbatchmanage = !string.IsNullOrEmpty(item.FIsBatchManage) // ? Convert.ToInt32(item.FIsBatchManage) // : null, Fpurchaserid = item.FPurchaserId, Fpurchaseunitid = item.FPurchaseUnitId, Storeunit = item.FStoreUnitID, @@ -161,11 +138,8 @@ LossPercent = item.FLOSSPERCENT, MnemonicCode = item.FMnemonicCode, ExpPeriod = item.FExpPeriod, EItemId = !string.IsNullOrEmpty(item.Id) ? long.Parse(item.Id) : null, ItemId = !string.IsNullOrEmpty(item.Id) ? long.Parse(item.Id) : null, EItemId = id, ItemId = id, LastupdateDate = DateTime.Now, CreateDate = DateTime.Now, Company = "1000", MES.Service/service/BasicData/MesStaffManager.cs
@@ -70,7 +70,7 @@ db.Deleteable<MesStaff>() .Where(s => s.Id == entity.Id) .ExecuteCommand(); var insertStaff = db.Insertable(entity).IgnoreColumns(true).ExecuteCommand(); @@ -87,13 +87,13 @@ insertPosition = db.Insertable(mesStaffPositionLink).PageSize(1) .IgnoreColumnsNull().ExecuteCommand(); } return insertStaff > 0 && insertPosition > 0; } // 删除员工的方法 private bool DeleteStaff(SqlSugarScope db, SysUser sysUser, MesStaff entity) { @@ -107,16 +107,16 @@ s.Id == entity.Id && s.PositionCode == entity.PositionCode) .ExecuteCommand(); //删除对应员工岗位信息关联表 池南骏 2025-01-02 var insertPosition = db.Deleteable<MesStaffPositionLink>() .Where(s => s.StaffId == entity.Id) .ExecuteCommand(); if (deleteStaff > 0) return true; } throw new NotImplementedException("反审核失败"); } // 将 ErpStaff 对象转换为 MesStaff 对象的方法 @@ -174,7 +174,7 @@ { // 初始化返回的职位关联列表 List<MesStaffPositionLink> staffDetails = new List<MesStaffPositionLink>(); // 检查ErpStaff是否包含职位详情数据 if (staff.ErpStaffDetails != null && staff.ErpStaffDetails.Count > 0) { @@ -184,19 +184,19 @@ { // 员工ID:从ErpStaff的Id属性转换为decimal类型 StaffId = Convert.ToDecimal(staff.Id), // 职位ID: // 1. 检查fPostId是否为空或null // 2. 非空时转换为decimal,否则设为null PositionId = string.IsNullOrEmpty(staffDetail.fPostId.ToString()) ? null : Convert.ToDecimal(staffDetail.fPostId), // 职位部门ID:逻辑与职位ID类似 FPostDeptId = string.IsNullOrEmpty(staffDetail.fPostDeptid.ToString()) ? null : Convert.ToDecimal(staffDetail.fPostDeptid), // 员工入职日期: // 1. 检查fStaffStartDate是否为空或null // 2. 非空时按"yyyy-MM-dd HH:mm:ss"格式解析为DateTime,否则设为null @@ -322,13 +322,13 @@ if (!InsertOrUpdateStaff(db, sysUser, entity, mesStaffPositionLink)) return false; } return true; } } */ namespace MES.Service.service.BasicData; namespace MES.Service.service.BasicData; using MES.Service.DB; using MES.Service.Dto.webApi; @@ -346,8 +346,10 @@ if (unit == null) throw new ArgumentNullException(nameof(unit)); var entity = GetMesStaff(unit); unit.Id = entity.Id.ToString(); var sysUser = GetUser(unit); var mesStaffPositionLink = GetMesStaffPositionLink(unit); //var mesStaffPositionLink = GetMesStaffPositionLink(unit); List<MesStaffPositionLink> mesStaffPositionLink = null; return UseTransaction(db => { @@ -356,8 +358,17 @@ case "0": return UpdateStaffStatus(db, entity.Id, "A") ? 1 : 0; case "1": return UpdateStaffStatus(db, entity.Id, "B") ? 1 : 0; case "2": case "4": return InsertOrUpdateStaff(db, new List<SysUser> { sysUser }, new List<MesStaff> { entity }, mesStaffPositionLink) ? 1 : 0; case "3": return DeleteStaff(db, new List<SysUser> { sysUser }, new List<MesStaff> { entity }) ? 1 : 0; case "4": return InsertOrUpdateStaff(db, new List<SysUser> { sysUser }, new List<MesStaff> { entity }, mesStaffPositionLink) ? 1 : 0; case "3": return DeleteStaff(db, new List<SysUser> { sysUser }, new List<MesStaff> { entity }) ? 1 : 0; default: throw new ArgumentException($"不支持的类型: {unit.Type}"); } }) > 0; @@ -372,53 +383,14 @@ return false; } var mesStaffList = new List<MesStaff>(); var sysUserList = new List<SysUser>(); var positionLinkList = new List<MesStaffPositionLink>(); // 转换数据 foreach (var erpStaff in departments) { mesStaffList.Add(GetMesStaff(erpStaff)); sysUserList.Add(GetUser(erpStaff)); positionLinkList.AddRange(GetMesStaffPositionLink(erpStaff)); } // 按类型分组处理 var typeGroups = mesStaffList.GroupBy(s => s.Type).ToList(); return UseTransaction(db => { foreach (var group in typeGroups) { var groupType = group.Key; var groupUsers = sysUserList.Where(u => u.Type == groupType).ToList(); switch (groupType) { case "0": UpdateStaffStatusBatch(db, group.ToList(), "A"); break; case "1": UpdateStaffStatusBatch(db, group.ToList(), "B"); break; case "2": case "4": InsertOrUpdateBatch(db, groupUsers, group.ToList(), positionLinkList); break; case "3": DeleteStaffBatch(db, groupUsers, group.ToList()); break; default: throw new ArgumentException($"不支持的类型: {groupType}"); } } return 1; }) > 0; // 逐条处理,全部成功才返回true(事务内批量处理更优,此处保持原有逻辑) var result = departments.Select(Save).ToList(); return result.All(b => b); } // 插入或更新员工(批量版本) private bool InsertOrUpdateBatch(SqlSugarScope db, List<SysUser> sysUsers, List<MesStaff> entities, List<MesStaffPositionLink> positionLinks) private bool InsertOrUpdateBatch(SqlSugarScope db, List<SysUser> sysUsers, List<MesStaff> entities, List<MesStaffPositionLink> positionLinks) { if (!sysUsers.Any() || !entities.Any()) { @@ -430,42 +402,52 @@ { // 1. 批量插入 SysUser(仅新增) var newSysUsers = sysUsers .Where(u => !db.Queryable<SysUser>().Any(e => e.Sid == u.Sid)) .Where(u => !db.Queryable<SysUser>().Any(e => e.StaffId == u.StaffId)) .ToList(); if (newSysUsers.Any()) { Console.WriteLine($"准备插入 {newSysUsers.Count} 个新SysUser"); var insertCount = db.Insertable(newSysUsers).ExecuteCommand(); if (insertCount != newSysUsers.Count) { throw new InvalidOperationException($"SysUser插入失败,期望插入 {newSysUsers.Count} 条,实际插入 {insertCount} 条"); throw new InvalidOperationException( $"SysUser插入失败,期望插入 {newSysUsers.Count} 条,实际插入 {insertCount} 条"); } Console.WriteLine($"成功插入 {insertCount} 个SysUser"); } // 2. 批量删除并插入 MesStaff var staffIds = entities.Select(e => e.Id).ToList(); db.Deleteable<MesStaff>().Where(s => staffIds.Contains(s.Id)).ExecuteCommand(); var staffInsertCount = db.Insertable(entities).IgnoreColumns(true).ExecuteCommand(); db.Deleteable<MesStaff>().Where(s => staffIds.Contains(s.Id)) .ExecuteCommand(); var staffInsertCount = db.Insertable(entities).IgnoreColumns(true) .ExecuteCommand(); if (staffInsertCount != entities.Count) { throw new InvalidOperationException($"MesStaff插入失败,期望插入 {entities.Count} 条,实际插入 {staffInsertCount} 条"); throw new InvalidOperationException( $"MesStaff插入失败,期望插入 {entities.Count} 条,实际插入 {staffInsertCount} 条"); } // 3. 处理岗位关联(如果有) if (positionLinks != null && positionLinks.Any()) { var positionStaffIds = positionLinks.Select(p => p.StaffId).Distinct().ToList(); db.Deleteable<MesStaffPositionLink>().Where(p => positionStaffIds.Contains(p.StaffId)).ExecuteCommand(); var positionInsertCount = db.Insertable(positionLinks).PageSize(500).IgnoreColumnsNull().ExecuteCommand(); var positionStaffIds = positionLinks.Select(p => p.StaffId) .Distinct().ToList(); db.Deleteable<MesStaffPositionLink>() .Where(p => positionStaffIds.Contains(p.StaffId)) .ExecuteCommand(); var positionInsertCount = db.Insertable(positionLinks) .PageSize(500).IgnoreColumnsNull().ExecuteCommand(); if (positionInsertCount != positionLinks.Count) { throw new InvalidOperationException($"MesStaffPositionLink插入失败,期望插入 {positionLinks.Count} 条,实际插入 {positionInsertCount} 条"); throw new InvalidOperationException( $"MesStaffPositionLink插入失败,期望插入 {positionLinks.Count} 条,实际插入 {positionInsertCount} 条"); } } @@ -475,52 +457,57 @@ { Console.WriteLine($"批量插入/更新失败: {ex.Message}"); Console.WriteLine($"SQL: {db.Ado.SqlExecutionTime}"); // 记录完整的错误堆栈 Console.WriteLine($"堆栈跟踪: {ex.StackTrace}"); // 记录失败的数据 if (sysUsers != null && sysUsers.Any()) { Console.WriteLine($"失败的SysUser数据: {string.Join(", ", sysUsers.Select(u => u.Account))}"); Console.WriteLine( $"失败的SysUser数据: {string.Join(", ", sysUsers.Select(u => u.Account))}"); } throw; } } // 插入或更新员工(兼容旧版本,调用批量方法) private bool InsertOrUpdateStaff(SqlSugarScope db, List<SysUser> sysUsers, List<MesStaff> entities, List<MesStaffPositionLink> positionLinks) private bool InsertOrUpdateStaff(SqlSugarScope db, List<SysUser> sysUsers, List<MesStaff> entities, List<MesStaffPositionLink> positionLinks) { return InsertOrUpdateBatch(db, sysUsers, entities, positionLinks); } // 批量更新员工状态 private bool UpdateStaffStatusBatch(SqlSugarScope db, List<MesStaff> staffList, string status) private bool UpdateStaffStatusBatch(SqlSugarScope db, List<MesStaff> staffList, string status) { if (!staffList.Any()) { Console.WriteLine("警告: 员工列表为空,跳过状态更新"); return false; } var ids = staffList.Select(s => s.Id).ToList(); var updateCount = db.Updateable<MesStaff>() .SetColumns(s => s.FforbidStatus == status) .Where(s => ids.Contains(s.Id)) .ExecuteCommand(); if (updateCount <= 0) { throw new InvalidOperationException($"更新员工状态失败,状态: {status},影响行数: {updateCount}"); throw new InvalidOperationException( $"更新员工状态失败,状态: {status},影响行数: {updateCount}"); } Console.WriteLine($"成功更新 {updateCount} 个员工状态为 {status}"); return true; } // 批量删除员工 private bool DeleteStaffBatch(SqlSugarScope db, List<SysUser> sysUsers, List<MesStaff> entities) private bool DeleteStaffBatch(SqlSugarScope db, List<SysUser> sysUsers, List<MesStaff> entities) { if (!sysUsers.Any() || !entities.Any()) { @@ -532,18 +519,21 @@ { // 1. 删除 SysUser var userAccounts = sysUsers.Select(u => u.Account).ToList(); var userDeleteCount = db.Deleteable<SysUser>().Where(u => userAccounts.Contains(u.Account)).ExecuteCommand(); var userDeleteCount = db.Deleteable<SysUser>() .Where(u => userAccounts.Contains(u.Account)).ExecuteCommand(); // 2. 删除 MesStaff var staffIds = entities.Select(e => e.Id).ToList(); var staffDeleteCount = db.Deleteable<MesStaff>().Where(s => staffIds.Contains(s.Id)).ExecuteCommand(); var staffDeleteCount = db.Deleteable<MesStaff>() .Where(s => staffIds.Contains(s.Id)).ExecuteCommand(); // 3. 删除岗位关联 :使用Any方法(推荐) db.Deleteable<MesStaffPositionLink>() .Where(p => staffIds.Any(id => id == p.StaffId)) .ExecuteCommand(); Console.WriteLine($"成功删除 {userDeleteCount} 个SysUser和 {staffDeleteCount} 个MesStaff"); Console.WriteLine( $"成功删除 {userDeleteCount} 个SysUser和 {staffDeleteCount} 个MesStaff"); return userDeleteCount > 0 && staffDeleteCount > 0; } catch (Exception ex) @@ -555,7 +545,8 @@ } // 更新员工状态 private bool UpdateStaffStatus(SqlSugarScope db, decimal staffId, string status) private bool UpdateStaffStatus(SqlSugarScope db, decimal staffId, string status) { var result = db.Updateable<MesStaff>() .SetColumns(s => s.FforbidStatus == status) @@ -564,14 +555,16 @@ if (result <= 0) { throw new InvalidOperationException($"更新员工状态失败,员工ID: {staffId},状态: {status}"); throw new InvalidOperationException( $"更新员工状态失败,员工ID: {staffId},状态: {status}"); } return true; } // 删除员工(调用批量方法) private bool DeleteStaff(SqlSugarScope db, List<SysUser> sysUsers, List<MesStaff> entities) private bool DeleteStaff(SqlSugarScope db, List<SysUser> sysUsers, List<MesStaff> entities) { return DeleteStaffBatch(db, sysUsers, entities); } @@ -585,8 +578,8 @@ { var entity = new MesStaff { Id = string.IsNullOrEmpty(staff.Id) ? DateTimeOffset.UtcNow.ToUnixTimeSeconds() Id = string.IsNullOrEmpty(staff.Id) ? DateTimeOffset.UtcNow.ToUnixTimeSeconds() : Convert.ToDecimal(staff.Id), StaffNo = staff.FStaffNumber, StaffName = staff.FName, @@ -608,7 +601,8 @@ if (!string.IsNullOrEmpty(staff.FStaffStartDate)) { entity.StartDate = DateTime.ParseExact(staff.FStaffStartDate, "yyyy-MM-dd HH:mm:ss", null); entity.StartDate = DateTime.ParseExact(staff.FStaffStartDate, "yyyy-MM-dd HH:mm:ss", null); } var mesStaff = Db.Queryable<MesStaff>() @@ -625,7 +619,8 @@ catch (Exception ex) { Console.WriteLine($"转换ErpStaff到MesStaff失败: {ex.Message}"); Console.WriteLine($"输入数据: {staff.Id}, {staff.FStaffNumber}, {staff.FName}"); Console.WriteLine( $"输入数据: {staff.Id}, {staff.FStaffNumber}, {staff.FName}"); throw; } } @@ -639,7 +634,7 @@ { return new SysUser { Sid = Convert.ToDecimal(staff.Id), // 确保Sid与员工ID一致 StaffId = staff.Id, // 确保Sid与员工ID一致 IsStatus = true, Account = staff.FStaffNumber, UserName = staff.FName, @@ -652,7 +647,8 @@ catch (Exception ex) { Console.WriteLine($"转换ErpStaff到SysUser失败: {ex.Message}"); Console.WriteLine($"输入数据: {staff.Id}, {staff.FStaffNumber}, {staff.FName}"); Console.WriteLine( $"输入数据: {staff.Id}, {staff.FStaffNumber}, {staff.FName}"); throw; } } @@ -666,21 +662,30 @@ { var staffDetails = new List<MesStaffPositionLink>(); if (staff.ErpStaffDetails != null && staff.ErpStaffDetails.Count > 0) if (staff.ErpStaffDetails != null && staff.ErpStaffDetails.Count > 0) { staffDetails = staff.ErpStaffDetails.Select(staffDetail => new MesStaffPositionLink { StaffId = Convert.ToDecimal(staff.Id), PositionId = string.IsNullOrEmpty(staffDetail.fPostId?.ToString()) ? null : Convert.ToDecimal(staffDetail.fPostId), FPostDeptId = string.IsNullOrEmpty(staffDetail.fPostDeptid?.ToString()) ? null : Convert.ToDecimal(staffDetail.fPostDeptid), FStaffStartDate = string.IsNullOrEmpty(staffDetail.fStaffStartDate?.ToString()) ? null : DateTime.ParseExact(staffDetail.fStaffStartDate, "yyyy-MM-dd HH:mm:ss", null) PositionId = string.IsNullOrEmpty( staffDetail.fPostId?.ToString()) ? null : Convert.ToDecimal(staffDetail.fPostId), FPostDeptId = string.IsNullOrEmpty(staffDetail.fPostDeptid ?.ToString()) ? null : Convert.ToDecimal(staffDetail.fPostDeptid), FStaffStartDate = string.IsNullOrEmpty(staffDetail.fStaffStartDate ?.ToString()) ? null : DateTime.ParseExact( staffDetail.fStaffStartDate, "yyyy-MM-dd HH:mm:ss", null) }).ToList(); } MES.Service/service/BasicData/MesSupplierManager.cs
@@ -43,41 +43,15 @@ public bool SaveList(List<ErpSupplier> suppliers) { var list = suppliers.Select(GetMesSupplier).ToList(); var groupBy = list.GroupBy(s => s.Type) .ToDictionary(g => g.Key, g => g.ToList()); return UseTransaction(db => if (suppliers == null || !suppliers.Any()) { foreach (var supplierGroup in groupBy) switch (supplierGroup.Key) { case "0": if (!UpdateSupplierStatusBatch(db, supplierGroup.Value, "A")) throw new NotImplementedException("启用失败"); break; case "1": if (!UpdateSupplierStatusBatch(db, supplierGroup.Value, "B")) throw new NotImplementedException("禁用失败"); break; case "3": if (!DeleteSupplierBatch(db, supplierGroup.Value)) throw new NotImplementedException("删除失败"); break; case "2": case "4": if (!InsertOrUpdateBatch(db, supplierGroup.Value)) throw new NotImplementedException("同步失败"); break; default: throw new ArgumentNullException( $"type没有{supplierGroup.Key}这个类型的参数"); } Console.WriteLine("警告: 传入的列表为空"); return false; } return 1; }) > 0; // 逐条处理,全部成功才返回true(事务内批量处理更优,此处保持原有逻辑) var result = suppliers.Select(Save).ToList(); return result.All(b => b); } private bool UpdateSupplierStatus(SqlSugarScope db, decimal supplierId, MES.Service/service/BasicData/MesUnitManager.cs
@@ -43,39 +43,15 @@ public bool SaveList(List<ErpUnit> units) { var list = units.Select(GetMesUnit).ToList(); var groupBy = list.GroupBy(s => s.Type) .ToDictionary(g => g.Key, g => g.ToList()); return UseTransaction(db => if (units == null || !units.Any()) { foreach (var unitGroup in groupBy) switch (unitGroup.Key) { case "0": if (!UpdateUnitStatusBatch(db, unitGroup.Value, "A")) throw new NotImplementedException("启用失败"); break; case "1": if (!UpdateUnitStatusBatch(db, unitGroup.Value, "B")) throw new NotImplementedException("禁用失败"); break; case "3": if (!DeleteUnitBatch(db, unitGroup.Value)) throw new NotImplementedException("删除失败"); break; case "2": case "4": if (!InsertOrUpdateBatch(db, unitGroup.Value)) throw new NotImplementedException("同步失败"); break; default: throw new ArgumentNullException( $"type没有{unitGroup.Key}这个类型的参数"); } Console.WriteLine("警告: 传入的列表为空"); return false; } return 1; }) > 0; // 逐条处理,全部成功才返回true(事务内批量处理更优,此处保持原有逻辑) var result = units.Select(Save).ToList(); return result.All(b => b); } private bool UpdateUnitStatus(SqlSugarScope db, decimal unitId, MES.Service/service/BasicData/SysDepartmentManager.cs
@@ -146,50 +146,15 @@ // SaveList 方法用于保存多个部门记录,根据类型批量执行不同的操作 public bool SaveList(List<ErpDepartment> departments) { var list = new List<SysDepartment>(); departments.ForEach(s => if (departments == null || !departments.Any()) { var entity = GetSysDepartment(s); // 将 ErpDepartment 转换为 SysDepartment entity.Type = s.Type; list.Add(entity); }); Console.WriteLine("警告: 传入的物料列表为空"); return false; } var groupBy = list.GroupBy(s => s.Type) .ToDictionary(g => g.Key, g => g.ToList()); return UseTransaction(db => { foreach (var departmentGroup in groupBy) switch (departmentGroup.Key) { case "0": if (!UpdateDepartmentStatusBatch(db, departmentGroup.Value, "A")) // 批量启用部门 throw new NotImplementedException("启用失败"); break; case "1": if (!UpdateDepartmentStatusBatch(db, departmentGroup.Value, "B")) // 批量禁用部门 throw new NotImplementedException("禁用失败"); break; case "3": if (!DeleteDepartmentBatch(db, departmentGroup.Value)) // 批量删除部门 throw new NotImplementedException("删除失败"); break; case "2": case "4": if (!InsertOrUpdateDepartmentBatch(db, departmentGroup.Value)) // 批量插入或更新部门 throw new NotImplementedException("同步失败"); break; default: throw new ArgumentNullException( $"type没有{departmentGroup.Key}这个类型的参数"); } return 1; }) > 0; // 逐条处理,全部成功才返回true(事务内批量处理更优,此处保持原有逻辑) var result = departments.Select(Save).ToList(); return result.All(b => b); } // 批量更新部门状态的方法