啊鑫
2024-10-30 c02ff3f682398f022488f98b87a79d4a8e04b5dd
MES.Service/service/BasicData/SysDepartmentManager.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,218 @@
using MES.Service.DB;
using MES.Service.Dto.webApi;
using MES.Service.Modes;
using SqlSugar;
namespace MES.Service.service.BasicData;
public class SysDepartmentManager : Repository<SysDepartment>
{
    // å½“前类已经继承了 Repository å¢žã€åˆ ã€æŸ¥ã€æ”¹çš„æ–¹æ³•
    // Save æ–¹æ³•用于保存单个部门记录,根据类型执行不同的操作
    public bool Save(ErpDepartment department)
    {
        var entity =
            GetSysDepartment(department); // å°† ErpDepartment è½¬æ¢ä¸º SysDepartment
        return UseTransaction(db =>
        {
            switch (department.Type)
            {
                case "0":
                    if (UpdateDepartmentStatus(db, entity.Id, "A")) // å¯ç”¨éƒ¨é—¨
                        return 1;
                    break;
                case "1":
                    if (UpdateDepartmentStatus(db, entity.Id, "B")) // ç¦ç”¨éƒ¨é—¨
                        return 1;
                    break;
                case "3":
                    if (DeleteDepartment(db, entity.Id)) // åˆ é™¤éƒ¨é—¨
                        return 1;
                    break;
                case "2":
                case "4":
                    if (InsertOrUpdateDepartment(db, entity)) // æ’入或更新部门
                        return 1;
                    break;
                default:
                    throw new ArgumentNullException(
                        $"type没有{department.Type}这个类型的参数");
            }
            throw new NotImplementedException("操作失败");
        }) > 0;
    }
    // æ›´æ–°éƒ¨é—¨çŠ¶æ€çš„æ–¹æ³•
    private bool UpdateDepartmentStatus(SqlSugarScope db, decimal departmentId,
        string status)
    {
        var result = db.Updateable<SysDepartment>()
            .SetColumns(s => s.Depextr4 == status)
            .Where(s => s.Id == departmentId).ExecuteCommand();
        if (result > 0)
            return true;
        throw new NotImplementedException(status == "A" ? "启用失败" : "禁用失败");
    }
    // æ’入新部门的方法
    private bool InsertDepartment(SqlSugarScope db, SysDepartment entity)
    {
        var insert = db.Insertable(entity).ExecuteCommand();
        if (insert > 0)
            return true;
        throw new NotImplementedException("插入失败");
    }
    // åˆ é™¤éƒ¨é—¨çš„æ–¹æ³•
    private bool DeleteDepartment(SqlSugarScope db, decimal departmentId)
    {
        var deleteById = db.Deleteable<SysDepartment>()
            .Where(s => s.Id == departmentId).ExecuteCommand();
        if (deleteById > 0)
            return true;
        throw new NotImplementedException("删除失败");
    }
    // æ’入或更新部门的方法
    private bool InsertOrUpdateDepartment(SqlSugarScope db,
        SysDepartment entity)
    {
        db.Deleteable<SysDepartment>()
            .Where(s => s.Id == entity.Id).ExecuteCommand();
        var insert = db.Insertable(entity).ExecuteCommand();
        return insert > 0;
    }
    // å°† ErpDepartment å¯¹è±¡è½¬æ¢ä¸º SysDepartment å¯¹è±¡çš„æ–¹æ³•
    private SysDepartment GetSysDepartment(ErpDepartment department)
    {
        return new SysDepartment
        {
            Departmentcode = department.FNumber,
            Departmentname = department.FName,
            Departmentid = Convert.ToDecimal(department.Id),
            Id = Convert.ToDecimal(department.Id),
            Depextr1 = department.FDeptProperty,
            Depextr2 = department.FGroup,
            Depextr3 = department.FWIPStockID,
            Depextr4 = department.FForbidStatus,
            FParentID = department.FParentID,
            FSubsidiary = department.FUseOrgId,
            Fumbrella = department.FCreateOrgId,
            CreateDate = DateTime.Now,
            LastupdateDate = DateTime.Now,
            Company = "1000",
            Factory = "1000"
        };
    }
    // SaveList æ–¹æ³•用于保存多个部门记录,根据类型批量执行不同的操作
    public bool SaveList(List<ErpDepartment> departments)
    {
        var list = new List<SysDepartment>();
        departments.ForEach(s =>
        {
            var entity =
                GetSysDepartment(s); // å°† ErpDepartment è½¬æ¢ä¸º SysDepartment
            entity.Type = s.Type;
            list.Add(entity);
        });
        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 "2":
                        if (!InsertDepartmentBatch(db,
                                departmentGroup.Value)) // æ‰¹é‡æ’入部门
                            throw new NotImplementedException("插入失败");
                        break;
                    case "3":
                        if (!DeleteDepartmentBatch(db,
                                departmentGroup.Value)) // æ‰¹é‡åˆ é™¤éƒ¨é—¨
                            throw new NotImplementedException("删除失败");
                        break;
                    case "4":
                        if (!InsertOrUpdateDepartmentBatch(db,
                                departmentGroup.Value)) // æ‰¹é‡æ’入或更新部门
                            throw new NotImplementedException("同步失败");
                        break;
                    default:
                        throw new ArgumentNullException(
                            $"type没有{departmentGroup.Key}这个类型的参数");
                }
            return 1;
        }) > 0;
    }
    // æ‰¹é‡æ›´æ–°éƒ¨é—¨çŠ¶æ€çš„æ–¹æ³•
    private bool UpdateDepartmentStatusBatch(SqlSugarScope db,
        List<SysDepartment> departmentList, string status)
    {
        var ids = departmentList.Select(it => it.Id).ToArray();
        var result = db.Updateable<SysDepartment>()
            .SetColumns(s => s.Depextr4 == status)
            .Where(s => ids.Contains(s.Id)).ExecuteCommand();
        if (result > 0)
            return true;
        throw new NotImplementedException(status == "A" ? "启用失败" : "禁用失败");
    }
    // æ‰¹é‡æ’入部门的方法
    private bool InsertDepartmentBatch(SqlSugarScope db,
        List<SysDepartment> departmentList)
    {
        var insertRange = db.Insertable(departmentList).ExecuteCommand();
        if (insertRange > 0)
            return true;
        throw new NotImplementedException("插入失败");
    }
    // æ‰¹é‡åˆ é™¤éƒ¨é—¨çš„æ–¹æ³•
    private bool DeleteDepartmentBatch(SqlSugarScope db,
        List<SysDepartment> departmentList)
    {
        var ids = departmentList.Select(it => it.Id).ToArray();
        var deleteByIds =
            db.Deleteable<SysDepartment>()
                .Where(s => ids.Contains(s.Id)).ExecuteCommand();
        if (deleteByIds > 0)
            return true;
        throw new NotImplementedException("删除失败");
    }
    // æ‰¹é‡æ’入或更新部门的方法
    private bool InsertOrUpdateDepartmentBatch(SqlSugarScope db,
        List<SysDepartment> departmentList)
    {
        return departmentList.All(
            entity => InsertOrUpdateDepartment(db, entity));
    }
}