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