From f476ec010c22cd4e3c6a119eea035cbf4594bfbb Mon Sep 17 00:00:00 2001 From: kyy <3283105747@qq.com> Date: 星期五, 12 九月 2025 19:32:00 +0800 Subject: [PATCH] 1\修正收料通知单 --- MES.Service/service/BasicData/MesStaffManager.cs | 628 +++++++++++++++++--------------------------------------- 1 files changed, 192 insertions(+), 436 deletions(-) diff --git a/MES.Service/service/BasicData/MesStaffManager.cs b/MES.Service/service/BasicData/MesStaffManager.cs index d25ad5e..af5f8fb 100644 --- a/MES.Service/service/BasicData/MesStaffManager.cs +++ b/MES.Service/service/BasicData/MesStaffManager.cs @@ -1,334 +1,4 @@ -锘�/* -namespace MES.Service.service.BasicData; - -using MES.Service.DB; -using MES.Service.Dto.webApi; -using MES.Service.Modes; -using SqlSugar; - -public class MesStaffManager : Repository<MesStaff> -{ - // Save 鏂规硶鐢ㄤ簬淇濆瓨鍗曚釜鍛樺伐璁板綍锛屾牴鎹被鍨嬫墽琛屼笉鍚岀殑鎿嶄綔 - public bool Save(ErpStaff unit) - { - var entity = GetMesStaff(unit); // 灏� ErpStaff 杞崲涓� MesStaff - var sysUser = GetUser(unit); // 鑾峰彇 SysUser 瀹炰緥 - var mesStaffPositionLink = GetMesStaffPositionLink(unit); // 鑾峰彇 MesStaffPositionLink 瀹炰緥 - return UseTransaction(db => - { - switch (unit.Type) - { - case "0": - if (UpdateStaffStatus(db, entity.Id, "A")) // 鍚敤鍛樺伐 - return 1; - break; - case "1": - if (UpdateStaffStatus(db, entity.Id, "B")) // 绂佺敤鍛樺伐 - return 1; - break; - case "2": - case "4": - if (InsertOrUpdateStaff(db, sysUser, entity,mesStaffPositionLink)) // 鎻掑叆鎴栨洿鏂板憳宸� - return 1; - break; - case "3": - if (DeleteStaff(db, sysUser, entity)) // 鍒犻櫎鍛樺伐 - return 1; - break; - default: - throw new ArgumentNullException( - $"type娌℃湁{unit.Type}杩欎釜绫诲瀷鐨勫弬鏁�"); - } - - throw new NotImplementedException("鎿嶄綔澶辫触"); - }) > 0; - } - - // 鏇存柊鍛樺伐鐘舵�佺殑鏂规硶 - private bool UpdateStaffStatus(SqlSugarScope db, decimal staffId, - string status) - { - var result = db.Updateable<MesStaff>() - .SetColumns(s => s.FforbidStatus == status) - .Where(s => s.Id == staffId).ExecuteCommand(); - - if (result > 0) - return true; - - throw new NotImplementedException(status == "A" ? "鍚敤澶辫触" : "绂佺敤澶辫触"); - } - - // 鎻掑叆鎴栨洿鏂板憳宸ョ殑鏂规硶 - private bool InsertOrUpdateStaff(SqlSugarScope db, SysUser sysUser, - MesStaff entity, List<MesStaffPositionLink> mesStaffPositionLink) - { - var exists = db.Queryable<SysUser>().Any(u => u.Sid == sysUser.Sid); - if (!exists) - { - var insertUser = db.Insertable(sysUser).ExecuteCommand(); - } - db.Deleteable<MesStaff>() - .Where(s => s.Id == entity.Id) - .ExecuteCommand(); - - var insertStaff = - db.Insertable(entity).IgnoreColumns(true).ExecuteCommand(); - - var insertPosition = 1; - if (mesStaffPositionLink != null && mesStaffPositionLink.Count > 0) - { - //鍏堝垹闄わ紝鍐嶆柊澧� - db.Deleteable<MesStaffPositionLink>() - .Where(s => - mesStaffPositionLink.Any(m => m.StaffId == s.StaffId)) - .ExecuteCommand(); - - //鎵归噺鎻掑叆鏃讹紝蹇界暐绌哄瓧娈� - insertPosition = db.Insertable(mesStaffPositionLink).PageSize(1) - .IgnoreColumnsNull().ExecuteCommand(); - } - - - return insertStaff > 0 && insertPosition > 0; - } - - // 鍒犻櫎鍛樺伐鐨勬柟娉� - - - private bool DeleteStaff(SqlSugarScope db, SysUser sysUser, MesStaff entity) - { - var deleteUser = db.Deleteable<SysUser>() - .Where(s => s.Sid == sysUser.Sid).ExecuteCommand(); - if (deleteUser > 0) - { - var deleteStaff = - db.Deleteable<MesStaff>() - .Where(s => - 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 瀵硅薄鐨勬柟娉� - private MesStaff GetMesStaff(ErpStaff staff) - { - var entity = new MesStaff - { - Id = Convert.ToDecimal(staff.Id), - StaffNo = staff.FStaffNumber, - StaffName = staff.FName, - DepartmentName = staff.FPostDept, - PositionCode = staff.FPostId, - PhoneNumber = staff.FMobile, - Remark = staff.FDescription, - FforbidStatus = staff.FForbidStatus, - FSubsidiary = staff.FUseOrgId, - Fumbrella = staff.FCreateOrgId, - CreateDate = DateTime.Now, - LastupdateDate = DateTime.Now, - Type = staff.Type - }; - - if (staff.FStaffStartDate != null) - entity.StartDate = DateTime.ParseExact(staff.FStaffStartDate, - "yyyy-MM-dd HH:mm:ss", null); - - return entity; - } - - // 灏� ErpStaff 瀵硅薄杞崲涓� SysUser 瀵硅薄鐨勬柟娉� - private SysUser GetUser(ErpStaff staff) - { - return new SysUser - { - IsStatus = true, - Account = staff.FStaffNumber, - UserName = staff.FName, - Password = "E1ADC3949BA59ABBE56E057F2F883E", // 鍒濆瀵嗙爜 - DepartNo = staff.FPostDept, - Type = staff.Type, - CreateTime = DateTime.Now - }; - } - - /// <summary> - /// 鎺ュ彛瀛楁璋冩暣锛氭牴鎹甹son鏍煎紡锛屽湪MesStaffPositionLink<List>涓瓨鍏ユ暟鎹�� - /// </summary> - /// <remarks> - /// 淇敼浜猴細姹犲崡楠� - /// 淇敼鏃ユ湡锛�2025-01-02 鈥斺�斻�� 2025-01-05 浜屾淇敼 - /// 淇敼璇存槑锛� - /// - 鏂板浠g爜 - /// </remarks> - private List<MesStaffPositionLink> GetMesStaffPositionLink(ErpStaff staff) - { - // 鍒濆鍖栬繑鍥炵殑鑱屼綅鍏宠仈鍒楄〃 - List<MesStaffPositionLink> staffDetails = new List<MesStaffPositionLink>(); - - // 妫�鏌rpStaff鏄惁鍖呭惈鑱屼綅璇︽儏鏁版嵁 - if (staff.ErpStaffDetails != null && staff.ErpStaffDetails.Count > 0) - { - // 浣跨敤LINQ灏咵rpStaffDetails杞崲涓篗esStaffPositionLink瀵硅薄 - staffDetails = staff.ErpStaffDetails.Select(staffDetail => - new MesStaffPositionLink - { - // 鍛樺伐ID锛氫粠ErpStaff鐨処d灞炴�ц浆鎹负decimal绫诲瀷 - StaffId = Convert.ToDecimal(staff.Id), - - // 鑱屼綅ID锛� - // 1. 妫�鏌PostId鏄惁涓虹┖鎴杗ull - // 2. 闈炵┖鏃惰浆鎹负decimal锛屽惁鍒欒涓簄ull - PositionId = string.IsNullOrEmpty(staffDetail.fPostId.ToString()) - ? null - : Convert.ToDecimal(staffDetail.fPostId), - - // 鑱屼綅閮ㄩ棬ID锛氶�昏緫涓庤亴浣岻D绫讳技 - FPostDeptId = string.IsNullOrEmpty(staffDetail.fPostDeptid.ToString()) - ? null - : Convert.ToDecimal(staffDetail.fPostDeptid), - - // 鍛樺伐鍏ヨ亴鏃ユ湡锛� - // 1. 妫�鏌StaffStartDate鏄惁涓虹┖鎴杗ull - // 2. 闈炵┖鏃舵寜"yyyy-MM-dd HH:mm:ss"鏍煎紡瑙f瀽涓篋ateTime锛屽惁鍒欒涓簄ull - FStaffStartDate = string.IsNullOrEmpty(staffDetail.fStaffStartDate.ToString()) - ? null - : DateTime.ParseExact(staffDetail.fStaffStartDate, "yyyy-MM-dd HH:mm:ss", null) - }).ToList(); - } - // 杩斿洖杞崲鍚庣殑鑱屼綅鍏宠仈鍒楄〃 - return staffDetails; - } - // SaveList 鏂规硶鐢ㄤ簬淇濆瓨澶氫釜鍛樺伐璁板綍锛屾牴鎹被鍨嬫壒閲忔墽琛屼笉鍚岀殑鎿嶄綔 - public bool SaveList(List<ErpStaff> departments) - { - var list = new List<MesStaff>(); - var userList = new List<SysUser>(); - var mesStaffPositionLinkList = new List<MesStaffPositionLink>(); - departments.ForEach(s => - { - var entity = GetMesStaff(s); - entity.Type = s.Type; - list.Add(entity); - - var sysUser = GetUser(s); - sysUser.Type = s.Type; - userList.Add(sysUser); - var mesStaffPositionLink = - GetMesStaffPositionLink(s); // 鑾峰彇 SysUser 瀹炰緥 - mesStaffPositionLinkList.AddRange(mesStaffPositionLink); - }); - - var groupBy = list.GroupBy(s => s.Type) - .ToDictionary(g => g.Key, g => g.ToList()); - return UseTransaction(db => - { - foreach (var staffGroup in groupBy) - switch (staffGroup.Key) - { - case "0": - if (!UpdateStaffStatusBatch(db, staffGroup.Value, - "A")) // 鎵归噺鍚敤鍛樺伐 - throw new NotImplementedException("鍚敤澶辫触"); - break; - case "1": - if (!UpdateStaffStatusBatch(db, staffGroup.Value, - "B")) // 鎵归噺绂佺敤鍛樺伐 - throw new NotImplementedException("绂佺敤澶辫触"); - break; - case "3": - if (!DeleteStaffBatch(db, userList, - staffGroup.Value)) // 鎵归噺鍒犻櫎鍛樺伐 - throw new NotImplementedException("鍒犻櫎澶辫触"); - break; - case "2": - case "4": - if (!InsertOrUpdateBatch(db, userList, - staffGroup.Value,mesStaffPositionLinkList)) // 鎵归噺鎻掑叆鎴栨洿鏂板憳宸� - throw new NotImplementedException("鍚屾澶辫触"); - break; - default: - throw new ArgumentNullException( - $"type娌℃湁{staffGroup.Key}杩欎釜绫诲瀷鐨勫弬鏁�"); - } - - return 1; - }) > 0; - } - - // 鎵归噺鏇存柊鍛樺伐鐘舵�佺殑鏂规硶 - private bool UpdateStaffStatusBatch(SqlSugarScope db, - List<MesStaff> staffList, string status) - { - var ids = staffList.Select(it => it.Id).ToArray(); - var result = db.Updateable<MesStaff>() - .SetColumns(s => s.FforbidStatus == status) - .Where(s => ids.Contains(s.Id)).ExecuteCommand(); - - if (result > 0) - return true; - - throw new NotImplementedException(status == "A" ? "鍚敤澶辫触" : "绂佺敤澶辫触"); - } - - // 鎵归噺鎻掑叆鍛樺伐鐨勬柟娉� - private bool InsertStaffBatch(SqlSugarScope db, List<SysUser> userList, - List<MesStaff> staffList) - { - var userInsert = userList.FindAll(s => s.Type == "2"); - var executeCommand = db.Insertable(userInsert).ExecuteCommand(); - if (executeCommand <= 0) throw new ArgumentNullException("瀹℃牳澶辫触"); - if (db.Insertable(staffList).ExecuteCommand() > 0) - return true; - - throw new ArgumentNullException("瀹℃牳澶辫触"); - } - - // 鎵归噺鍒犻櫎鍛樺伐鐨勬柟娉� - private bool DeleteStaffBatch(SqlSugarScope db, List<SysUser> userList, - List<MesStaff> staffList) - { - var sid = userList.FindAll(s => s.Type == "3").Select(s => s.Account) - .ToArray(); - var result = db.Deleteable<SysUser>() - .Where(s => sid.Contains(s.Account)).ExecuteCommand(); - - if (result <= 0) throw new ArgumentNullException("鍙嶅鏍稿け璐�"); - var ids = staffList.Select(it => it.Id).ToArray(); - if (db.Deleteable<MesStaff>() - .Where(s => ids.Contains(s.Id)).ExecuteCommand() > 0) - return true; - - throw new ArgumentNullException("鍙嶅鏍稿け璐�"); - } - - // 鎵归噺鎻掑叆鎴栨洿鏂板憳宸ョ殑鏂规硶 - private bool InsertOrUpdateBatch(SqlSugarScope db, List<SysUser> userList, - List<MesStaff> staffList, - List<MesStaffPositionLink> mesStaffPositionLink) - { - foreach (var sysUser in userList) - { - var entity = staffList.First(s => s.Id == sysUser.Sid); - if (!InsertOrUpdateStaff(db, sysUser, entity, mesStaffPositionLink)) - return false; - } - - return true; - } -} - */ - - namespace MES.Service.service.BasicData; +锘縩amespace MES.Service.service.BasicData; using MES.Service.DB; using MES.Service.Dto.webApi; @@ -346,8 +16,8 @@ if (unit == null) throw new ArgumentNullException(nameof(unit)); var entity = GetMesStaff(unit); - var sysUser = GetUser(unit); - var mesStaffPositionLink = GetMesStaffPositionLink(unit); + //var mesStaffPositionLink = GetMesStaffPositionLink(unit); + List<MesStaffPositionLink> mesStaffPositionLink = null; return UseTransaction(db => { @@ -356,11 +26,93 @@ 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; + return InsertUser(db, entity) ? 1 : 0; + case "3": + // return DeleteStaff(db, new List<SysUser> { sysUser }, + // new List<MesStaff> { entity }) + // ? 1 + // : 0; + return DeleteStaff(db, entity) ? 1 : 0; default: throw new ArgumentException($"涓嶆敮鎸佺殑绫诲瀷: {unit.Type}"); } }) > 0; + } + + /// <summary> + /// 鐢熸垚鏂扮殑ID锛岀‘淇濅笉閲嶅 + /// </summary> + private decimal GenerateNewId() + { + // 澶勭悊绌鸿〃鐨勬儏鍐碉紝浠�1寮�濮� + var maxId = Db.Queryable<MesStaff>().Max(x => (decimal?)x.Id) ?? 0; + var newId = maxId + 1; + + // 鍙岄噸妫�鏌ワ紝纭繚鐢熸垚鐨処D涓嶅瓨鍦� + while (Db.Queryable<MesStaff>().Where(x => x.Id == newId).Any()) + { + newId++; + } + + return newId; + } + + private bool InsertUser(SqlSugarScope db, MesStaff entity) + { + if (entity.Id == 0) + { + // 鏂板鎯呭喌锛氱敓鎴愭柊ID骞舵彃鍏� + var newId = GenerateNewId(); + entity.Id = newId; + + var sysUser = GetUser(entity); + var staffInsertId = db.Insertable(entity).ExecuteReturnIdentity(); + + if (staffInsertId > 0) + { + sysUser.StaffId = staffInsertId.ToString(); + return db.Insertable(sysUser).ExecuteCommand() > 0; + } + return false; + } + else + { + // 鏇存柊鎯呭喌锛氬垹闄ゅ悗閲嶆柊鎻掑叆锛屼繚鎸佸師鏈塈D + var originalId = entity.Id; + + // 鍏堝垹闄ゅ師璁板綍锛堝鏋滃瓨鍦級 + db.Deleteable<MesStaff>().Where(s => s.Id == originalId).ExecuteCommand(); + db.Deleteable<SysUser>().Where(s => s.StaffId == originalId.ToString()).ExecuteCommand(); + + // 閲嶆柊鎻掑叆锛屼繚鎸佸師鏈塈D + entity.Id = originalId; + var sysUser = GetUser(entity); + + var staffInsert = db.Insertable(entity).ExecuteCommand(); + if (staffInsert > 0) + { + return db.Insertable(sysUser).ExecuteCommand() > 0; + } + return false; + } + } + + private bool DeleteStaff(SqlSugarScope db, MesStaff entity) + { + var executeCommand = db.Deleteable<MesStaff>() + .Where(s => s.Id == entity.Id) + .ExecuteCommand(); + + db.Deleteable<SysUser>() + .Where(s => s.StaffId == entity.Id.ToString()) + .ExecuteCommand(); + + return executeCommand > 0; } // 淇濆瓨澶氫釜鍛樺伐璁板綍 @@ -372,53 +124,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 +143,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} 涓猄ysUser"); } // 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 +198,57 @@ { Console.WriteLine($"鎵归噺鎻掑叆/鏇存柊澶辫触: {ex.Message}"); Console.WriteLine($"SQL: {db.Ado.SqlExecutionTime}"); - + // 璁板綍瀹屾暣鐨勯敊璇爢鏍� Console.WriteLine($"鍫嗘爤璺熻釜: {ex.StackTrace}"); - + // 璁板綍澶辫触鐨勬暟鎹� if (sysUsers != null && sysUsers.Any()) { - Console.WriteLine($"澶辫触鐨凷ysUser鏁版嵁: {string.Join(", ", sysUsers.Select(u => u.Account))}"); + Console.WriteLine( + $"澶辫触鐨凷ysUser鏁版嵁: {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 +260,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. 鍒犻櫎宀椾綅鍏宠仈 锛氫娇鐢ˋny鏂规硶锛堟帹鑽愶級 db.Deleteable<MesStaffPositionLink>() .Where(p => staffIds.Any(id => id == p.StaffId)) .ExecuteCommand(); - Console.WriteLine($"鎴愬姛鍒犻櫎 {userDeleteCount} 涓猄ysUser鍜� {staffDeleteCount} 涓狹esStaff"); + Console.WriteLine( + $"鎴愬姛鍒犻櫎 {userDeleteCount} 涓猄ysUser鍜� {staffDeleteCount} 涓狹esStaff"); return userDeleteCount > 0 && staffDeleteCount > 0; } catch (Exception ex) @@ -555,7 +286,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 +296,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,9 +319,7 @@ { var entity = new MesStaff { - Id = string.IsNullOrEmpty(staff.Id) - ? DateTimeOffset.UtcNow.ToUnixTimeSeconds() - : Convert.ToDecimal(staff.Id), + Guid = Guid.NewGuid(), StaffNo = staff.FStaffNumber, StaffName = staff.FName, DepartmentName = staff.FPostDept, @@ -608,7 +340,24 @@ 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 existingStaff = Db.Queryable<MesStaff>() + .Where(s => s.StaffNo == entity.StaffNo) + .First(); + + if (existingStaff != null) + { + // 濡傛灉瀛樺湪锛屼娇鐢ㄧ幇鏈夌殑ID锛屽悗缁皢鍒犻櫎鍚庨噸鏂版彃鍏� + entity.Id = existingStaff.Id; + } + else + { + // 濡傛灉涓嶅瓨鍦紝璁句负0锛孖nsertUser鏂规硶灏嗙敓鎴愭柊ID + entity.Id = 0; } return entity; @@ -616,35 +365,33 @@ catch (Exception ex) { Console.WriteLine($"杞崲ErpStaff鍒癕esStaff澶辫触: {ex.Message}"); - Console.WriteLine($"杈撳叆鏁版嵁: {staff.Id}, {staff.FStaffNumber}, {staff.FName}"); + Console.WriteLine( + $"杈撳叆鏁版嵁: {staff.Id}, {staff.FStaffNumber}, {staff.FName}"); throw; } } // 灏� ErpStaff 瀵硅薄杞崲涓� SysUser 瀵硅薄 - private SysUser GetUser(ErpStaff staff) + private SysUser GetUser(MesStaff entity) { - if (staff == null) throw new ArgumentNullException(nameof(staff)); + if (entity == null) throw new ArgumentNullException(nameof(entity)); try { return new SysUser { - Sid = Convert.ToDecimal(staff.Id), // 纭繚Sid涓庡憳宸D涓�鑷� + StaffId = entity.Id.ToString(), // 纭繚Sid涓庡憳宸D涓�鑷� IsStatus = true, - Account = staff.FStaffNumber, - UserName = staff.FName, + Account = entity.StaffNo, + UserName = entity.StaffName, Password = "E1ADC3949BA59ABBE56E057F2F883E", // 鍒濆瀵嗙爜 - DepartNo = staff.FPostDept, - Type = staff.Type, + DepartNo = entity.DepartmentName, CreateTime = DateTime.Now }; } catch (Exception ex) { - Console.WriteLine($"杞崲ErpStaff鍒癝ysUser澶辫触: {ex.Message}"); - Console.WriteLine($"杈撳叆鏁版嵁: {staff.Id}, {staff.FStaffNumber}, {staff.FName}"); - throw; + throw new NotImplementedException(ex.Message); } } @@ -657,21 +404,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(); } -- Gitblit v1.9.3