From b957cfb89c9968f47cc5ce9795e6ffb05bc57fd8 Mon Sep 17 00:00:00 2001 From: 啊鑫 <t2856754968@163.com> Date: 星期三, 30 十月 2024 16:05:48 +0800 Subject: [PATCH] 11 --- MES.Service/service/BasicData/MesStaffManager.cs | 237 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 237 insertions(+), 0 deletions(-) diff --git a/MES.Service/service/BasicData/MesStaffManager.cs b/MES.Service/service/BasicData/MesStaffManager.cs new file mode 100644 index 0000000..776945d --- /dev/null +++ b/MES.Service/service/BasicData/MesStaffManager.cs @@ -0,0 +1,237 @@ +锘縰sing MES.Service.DB; +using MES.Service.Dto.webApi; +using MES.Service.Modes; +using SqlSugar; + +namespace MES.Service.service.BasicData; + +public class MesStaffManager : Repository<MesStaff> +{ + // Save 鏂规硶鐢ㄤ簬淇濆瓨鍗曚釜鍛樺伐璁板綍锛屾牴鎹被鍨嬫墽琛屼笉鍚岀殑鎿嶄綔 + public bool Save(ErpStaff unit) + { + var entity = GetMesStaff(unit); // 灏� ErpStaff 杞崲涓� MesStaff + var sysUser = GetUser(unit); // 鑾峰彇 SysUser 瀹炰緥 + + 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)) // 鎻掑叆鎴栨洿鏂板憳宸� + return 1; + break; + case "3": + if (DeleteStaff(db, sysUser, entity.Id)) // 鍒犻櫎鍛樺伐 + 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) + { + db.Deleteable<SysUser>() + .Where(s => s.Account == sysUser.Account).ExecuteCommand(); + + db.Deleteable<MesStaff>() + .Where(s => s.Id == entity.Id).ExecuteCommand(); + + var insertUser = db.Insertable(sysUser).ExecuteCommand(); + if (insertUser <= 0) return false; + var insertStaff = db.Insertable(entity).ExecuteCommand(); + return insertStaff > 0; + } + + // 鍒犻櫎鍛樺伐鐨勬柟娉� + private bool DeleteStaff(SqlSugarScope db, SysUser sysUser, decimal staffId) + { + var deleteUser = db.Deleteable<SysUser>() + .Where(s => s.Account == sysUser.Account).ExecuteCommand(); + if (deleteUser <= 0) throw new NotImplementedException("鍙嶅鏍稿け璐�"); + var deleteStaff = + db.Deleteable<MesStaff>() + .Where(s => s.Id == staffId).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 + { + Account = staff.FStaffNumber, + UserName = staff.FName, + Password = "E1ADC3949BA59ABBE56E057F2F883E", // 鍒濆瀵嗙爜 + DepartNo = staff.FPostDept, + Type = staff.Type + }; + } + + // SaveList 鏂规硶鐢ㄤ簬淇濆瓨澶氫釜鍛樺伐璁板綍锛屾牴鎹被鍨嬫壒閲忔墽琛屼笉鍚岀殑鎿嶄綔 + public bool SaveList(List<ErpStaff> departments) + { + var list = new List<MesStaff>(); + var userList = new List<SysUser>(); + + 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 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)) // 鎵归噺鎻掑叆鎴栨洿鏂板憳宸� + 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) + { + return !(from sysUser in userList let entity = staffList.First(s => s.StaffNo == sysUser.Account) where !InsertOrUpdateStaff(db, sysUser, entity) select sysUser).Any(); + } +} \ No newline at end of file -- Gitblit v1.9.3