南骏 池
2025-06-06 a4ae3bf5f1826e8e29a95da3dc2c947d713d4ebb
MES.Service/service/BasicData/MesStaffManager.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,250 @@
using 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)
    {
        var exists = db.Queryable<SysUser>().Any(u => u.Account == sysUser.Account);
        if (!exists)
        {
            var insertUser = db.Insertable(sysUser).ExecuteCommand();
            if (insertUser <= 0) return false;
        }
        //db.Deleteable<SysUser>()
        //    .Where(s => s.Account == sysUser.Account).ExecuteCommand();
        db.Deleteable<MesStaff>()
            .Where(s => s.Id == entity.Id).ExecuteCommand();
        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
        {
            IsStatus = true,
            Account = staff.FStaffNumber,
            UserName = staff.FName,
            Password = "E1ADC3949BA59ABBE56E057F2F883E", // åˆå§‹å¯†ç 
            DepartNo = staff.FPostDept,
            Type = staff.Type,
            CreateTime = DateTime.Now
        };
    }
    // 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();
    }
}