啊鑫
2025-08-27 eab13f60bbdc8ea275c6dd7b6424cdfc7769f6e1
111111
已修改9个文件
666 ■■■■■ 文件已修改
MES.Service/Modes/SysUser.cs 95 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/service/BasicData/MesCustomerManager.cs 40 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/service/BasicData/MesDepotsManager.cs 48 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/service/BasicData/MesItemTypeManager.cs 47 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/service/BasicData/MesItemsManager.cs 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/service/BasicData/MesStaffManager.cs 223 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/service/BasicData/MesSupplierManager.cs 40 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/service/BasicData/MesUnitManager.cs 38 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/service/BasicData/SysDepartmentManager.cs 49 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
MES.Service/Modes/SysUser.cs
@@ -8,128 +8,127 @@
[SugarTable("SYS_USER")]
public class SysUser
{
    [StringLength(20, ErrorMessage = "Sid长度不能超出20")]
    [SugarColumn(ColumnName = "SID")] //用于SqlSugar
    public decimal Sid { get; set; }
    /// <summary>
    ///     主键
    /// </summary>
    /// 主键
    ///</summary>
    [SugarColumn(ColumnName = "GUID", IsPrimaryKey = true)]
    public Guid Guid { get; set; }
    /// <summary>
    ///     账号
    /// </summary>
    /// 账号
    ///</summary>
    [SugarColumn(ColumnName = "ACCOUNT")]
    public string? Account { get; set; }
    /// <summary>
    ///     密码
    /// </summary>
    /// 密码
    ///</summary>
    [SugarColumn(ColumnName = "PASSWORD")]
    public string? Password { get; set; }
    /// <summary>
    ///     用户姓名
    /// </summary>
    /// 用户姓名
    ///</summary>
    [SugarColumn(ColumnName = "USER_NAME")]
    public string? UserName { get; set; }
    /// <summary>
    ///     住址
    /// </summary>
    /// 住址
    ///</summary>
    [SugarColumn(ColumnName = "ADDRESS")]
    public string? Address { get; set; }
    /// <summary>
    ///     电话
    /// </summary>
    /// 电话
    ///</summary>
    [SugarColumn(ColumnName = "TEL")]
    public string? Tel { get; set; }
    /// <summary>
    ///     邮箱
    /// </summary>
    /// 邮箱
    ///</summary>
    [SugarColumn(ColumnName = "EMAIL")]
    public string? Email { get; set; }
    /// <summary>
    ///     最后登录时间
    /// </summary>
    /// 最后登录时间
    ///</summary>
    [SugarColumn(ColumnName = "LASTLOGIN_TIME")]
    public DateTime? LastloginTime { get; set; }
    /// <summary>
    ///     最后退出时间
    /// </summary>
    /// 最后退出时间
    ///</summary>
    [SugarColumn(ColumnName = "LASTLOGOUT_TIME")]
    public DateTime? LastlogoutTime { get; set; }
    /// <summary>
    ///     状态
    /// </summary>
    /// 状态
    /// 默认值: ((1))
    ///</summary>
    [SugarColumn(ColumnName = "IS_STATUS")]
    public bool? IsStatus { get; set; }
    /// <summary>
    ///     建立者
    /// </summary>
    /// 建立者
    ///</summary>
    [SugarColumn(ColumnName = "CREATE_BY")]
    public string? CreateBy { get; set; }
    /// <summary>
    ///     建立时间
    /// </summary>
    /// 建立时间
    ///</summary>
    [SugarColumn(ColumnName = "CREATE_TIME")]
    public DateTime? CreateTime { get; set; }
    /// <summary>
    ///     更新时间
    /// </summary>
    /// 更新时间
    ///</summary>
    [SugarColumn(ColumnName = "LASTUPDATE_TIME")]
    public DateTime? LastupdateTime { get; set; }
    /// <summary>
    ///     更新人
    /// </summary>
    /// 更新人
    ///</summary>
    [SugarColumn(ColumnName = "LASTUPDATE_BY")]
    public string? LastupdateBy { get; set; }
    /// <summary>
    ///     是否在线
    /// </summary>
    /// 是否在线
    /// 默认值: ((0))
    ///</summary>
    [SugarColumn(ColumnName = "FLAG_ONLINE")]
    public int? FlagOnline { get; set; }
    public bool? FlagOnline { get; set; }
    /// <summary>
    ///     登录次数
    /// </summary>
    /// 登录次数
    ///</summary>
    [SugarColumn(ColumnName = "LOGIN_COUNTER")]
    public int? LoginCounter { get; set; }
    /// <summary>
    ///     备注
    /// </summary>
    /// 备注
    ///</summary>
    [SugarColumn(ColumnName = "REMARK")]
    public string? Remark { get; set; }
    /// <summary>
    ///     部门编号
    /// </summary>
    /// 部门编号
    ///</summary>
    [SugarColumn(ColumnName = "DEPART_NO")]
    public string? DepartNo { get; set; }
    /// <summary>
    ///     是否系统内置
    /// </summary>
    /// 是否系统内置
    ///</summary>
    [SugarColumn(ColumnName = "IS_SYS")]
    public int? IsSys { get; set; }
    /// <summary>
    /// 关联员工
    ///</summary>
    [SugarColumn(ColumnName = "STAFF_ID")]
    public string? StaffId { get; set; }
    [SugarColumn(IsIgnore = true)] public string? Type { get; set; }
}
MES.Service/service/BasicData/MesCustomerManager.cs
@@ -43,41 +43,15 @@
    public bool SaveList(List<ErpCustomer> customers)
    {
        var list = customers.Select(GetSysDepartment).ToList();
        var groupBy = list.GroupBy(s => s.Type)
            .ToDictionary(g => g.Key, g => g.ToList());
        return UseTransaction(db =>
        if (customers == null || !customers.Any())
        {
            foreach (var customerGroup in groupBy)
                switch (customerGroup.Key)
                {
                    case "0":
                        if (!UpdateCustomerStatusBatch(db, customerGroup.Value,
                                "A"))
                            throw new NotImplementedException("启用失败");
                        break;
                    case "1":
                        if (!UpdateCustomerStatusBatch(db, customerGroup.Value,
                                "B"))
                            throw new NotImplementedException("禁用失败");
                        break;
                    case "3":
                        if (!DeleteCustomerBatch(db, customerGroup.Value))
                            throw new NotImplementedException("删除失败");
                        break;
                    case "2":
                    case "4":
                        if (!InsertOrUpdateBatch(db, customerGroup.Value))
                            throw new NotImplementedException("同步失败");
                        break;
                    default:
                        throw new ArgumentNullException(
                            $"type没有{customerGroup.Key}这个类型的参数");
                }
            Console.WriteLine("警告: 传入的列表为空");
            return false;
        }
            return 1;
        }) > 0;
        // 逐条处理,全部成功才返回true(事务内批量处理更优,此处保持原有逻辑)
        var result = customers.Select(Save).ToList();
        return result.All(b => b);
    }
    private bool UpdateCustomerStatus(SqlSugarScope db, decimal customerId,
MES.Service/service/BasicData/MesDepotsManager.cs
@@ -130,49 +130,15 @@
    // SaveList 方法用于保存多个仓库记录,根据类型批量执行不同的操作
    public bool SaveList(List<ErpDepots> erpDepots)
    {
        var list = new List<MesDepots>();
        erpDepots.ForEach(s =>
        if (erpDepots == null || !erpDepots.Any())
        {
            var entity = GetMesDepots(s); // 将 ErpDepots 转换为 MesDepots
            entity.Type = s.Type;
            list.Add(entity);
        });
            Console.WriteLine("警告: 传入的列表为空");
            return false;
        }
        var groupBy = list.GroupBy(s => s.Type)
            .ToDictionary(g => g.Key, g => g.ToList());
        return UseTransaction(db =>
        {
            foreach (var depotsGroup in groupBy)
                switch (depotsGroup.Key)
                {
                    case "0":
                        if (!UpdateDepotStatusBatch(db, depotsGroup.Value,
                                "A")) // 批量启用仓库
                            throw new NotImplementedException("启用失败");
                        break;
                    case "1":
                        if (!UpdateDepotStatusBatch(db, depotsGroup.Value,
                                "B")) // 批量禁用仓库
                            throw new NotImplementedException("禁用失败");
                        break;
                    case "3":
                        if (!DeleteDepotBatch(db,
                                depotsGroup.Value)) // 批量删除仓库
                            throw new NotImplementedException("删除失败");
                        break;
                    case "2":
                    case "4":
                        if (!InsertOrUpdateBatch(db,
                                depotsGroup.Value)) // 批量插入或更新仓库
                            throw new NotImplementedException("同步失败");
                        break;
                    default:
                        throw new ArgumentNullException(
                            $"type没有{depotsGroup.Key}这个类型的参数");
                }
            return 1;
        }) > 0;
        // 逐条处理,全部成功才返回true(事务内批量处理更优,此处保持原有逻辑)
        var result = erpDepots.Select(Save).ToList();
        return result.All(b => b);
    }
    // 批量更新仓库状态的方法
MES.Service/service/BasicData/MesItemTypeManager.cs
@@ -15,9 +15,10 @@
        {
            switch (customer.Type)
            {
                case "0":
                case "2":
                case "4":
                    return InsertItemType(entity);
                case "1":
                case "3":
                    return DeleteItemType(entity.Id);
                default:
                    throw new ArgumentNullException(
@@ -91,43 +92,15 @@
    public bool SaveList(List<ErpItemType> departments)
    {
        var list = new List<MesItemType>();
        departments.ForEach(s =>
        if (departments == null || !departments.Any())
        {
            var entity = GetMesItemType(s);
            entity.Type = s.Type;
            list.Add(entity);
        });
            Console.WriteLine("警告: 传入的列表为空");
            return false;
        }
        var groupBy = list.GroupBy(s => s.Type)
            .ToDictionary(g => g.Key, g => g.ToList());
        var result = new List<bool>();
        foreach (var itemTypeGroup in groupBy)
            try
            {
                switch (itemTypeGroup.Key)
                {
                    case "0":
                        result.Add(InsertItemTypeBatch(itemTypeGroup.Value));
                        break;
                    case "1":
                        result.Add(DeleteItemTypeBatch(itemTypeGroup.Value));
                        break;
                    default:
                        throw new ArgumentNullException(
                            $"type没有{itemTypeGroup.Key}这个类型的参数");
                }
            }
            catch (Exception ex)
            {
                throw new ApplicationException($"批量操作失败: {ex.Message}", ex);
            }
        if (result.All(b => b))
            return true;
        throw new NotImplementedException("接口执行失败");
        // 逐条处理,全部成功才返回true(事务内批量处理更优,此处保持原有逻辑)
        var result = departments.Select(Save).ToList();
        return result.All(b => b);
    }
    private bool InsertItemTypeBatch(List<MesItemType> itemTypeList)
MES.Service/service/BasicData/MesItemsManager.cs
@@ -44,39 +44,15 @@
    public bool SaveList(List<ErpItems> items)
    {
        var list = items.Select(GetMesItems).ToList();
        var groupBy = list.GroupBy(s => s.Type)
            .ToDictionary(g => g.Key, g => g.ToList());
        return UseTransaction(db =>
        if (items == null || !items.Any())
        {
            foreach (var itemGroup in groupBy)
                switch (itemGroup.Key)
                {
                    case "0":
                        if (!UpdateItemStatusBatch(db, itemGroup.Value, "A"))
                            throw new NotImplementedException("启用失败");
                        break;
                    case "1":
                        if (!UpdateItemStatusBatch(db, itemGroup.Value, "B"))
                            throw new NotImplementedException("禁用失败");
                        break;
                    case "3":
                        if (!DeleteItemBatch(db, itemGroup.Value))
                            throw new NotImplementedException("删除失败");
                        break;
                    case "2":
                    case "4":
                        if (!InsertOrUpdateBatch(db, itemGroup.Value))
                            throw new NotImplementedException("同步失败");
                        break;
                    default:
                        throw new ArgumentNullException(
                            $"type没有{itemGroup.Key}这个类型的参数");
                }
            return 1;
        }) > 0;
            Console.WriteLine("警告: 传入的物料列表为空");
            return false;
        }
        // 逐条处理,全部成功才返回true(事务内批量处理更优,此处保持原有逻辑)
        var result = items.Select(Save).ToList();
        return result.All(b => b);
    }
    private bool UpdateItemStatus(SqlSugarScope db, decimal itemId,
@@ -113,36 +89,37 @@
    private MesItems GetMesItems(ErpItems item)
    {
        var id = string.IsNullOrEmpty(item.Id)
            ? DateTimeOffset.UtcNow.ToUnixTimeSeconds()
            : long.Parse(item.Id);
        var entity = new MesItems
        {
            Id = string.IsNullOrEmpty(item.Id)
                ? DateTimeOffset.UtcNow.ToUnixTimeSeconds()
                : long.Parse(item.Id),
            Id = id,
            Type = item.Type,
            ItemNo = item.FNumber,
            ItemName = item.FName,
            ItemModel = item.FSpecification,
            ItemUnit = item.FBaseUnitId,
            Lowlimit = !string.IsNullOrEmpty(item.FSafeStock)
                ? Convert.ToDecimal(item.FSafeStock)
                : null,
            Highlimit = !string.IsNullOrEmpty(item.FMaxStock)
                ? Convert.ToDecimal(item.FMaxStock)
                : null,
            PrdPack = !string.IsNullOrEmpty(item.FMinPackCount)
                ? Convert.ToDecimal(item.FMinPackCount)
                : null,
            // Lowlimit = !string.IsNullOrEmpty(item.FSafeStock)
            //     ? Convert.ToDecimal(item.FSafeStock)
            //     : null,
            // Highlimit = !string.IsNullOrEmpty(item.FMaxStock)
            //     ? Convert.ToDecimal(item.FMaxStock)
            //     : null,
            // PrdPack = !string.IsNullOrEmpty(item.FMinPackCount)
            //     ? Convert.ToDecimal(item.FMinPackCount)
            //     : null,
            DepotCode = item.FStockId,
            Fmaterialgroup = item.FMaterialGroup,
            Remarks = item.FDescription,
            Ffinishreceiptoverrate =
                !string.IsNullOrEmpty(item.FFinishReceiptOverRate)
                    ? Convert.ToInt32(item.FFinishReceiptOverRate)
                    : null,
            // Ffinishreceiptoverrate =
            //     !string.IsNullOrEmpty(item.FFinishReceiptOverRate)
            //         ? Convert.ToInt32(item.FFinishReceiptOverRate)
            //         : null,
            Fissuetype = item.FIssueType,
            Fisbatchmanage = !string.IsNullOrEmpty(item.FIsBatchManage)
                ? Convert.ToInt32(item.FIsBatchManage)
                : null,
            // Fisbatchmanage = !string.IsNullOrEmpty(item.FIsBatchManage)
            //     ? Convert.ToInt32(item.FIsBatchManage)
            //     : null,
            Fpurchaserid = item.FPurchaserId,
            Fpurchaseunitid = item.FPurchaseUnitId,
            Storeunit = item.FStoreUnitID,
@@ -161,11 +138,8 @@
            LossPercent = item.FLOSSPERCENT,
            MnemonicCode = item.FMnemonicCode,
            ExpPeriod = item.FExpPeriod,
            EItemId = !string.IsNullOrEmpty(item.Id)
                ? long.Parse(item.Id)
                : null,
            ItemId =
                !string.IsNullOrEmpty(item.Id) ? long.Parse(item.Id) : null,
            EItemId = id,
            ItemId = id,
            LastupdateDate = DateTime.Now,
            CreateDate = DateTime.Now,
            Company = "1000",
MES.Service/service/BasicData/MesStaffManager.cs
@@ -70,7 +70,7 @@
        db.Deleteable<MesStaff>()
            .Where(s => s.Id == entity.Id)
            .ExecuteCommand();
        var insertStaff =
            db.Insertable(entity).IgnoreColumns(true).ExecuteCommand();
@@ -87,13 +87,13 @@
            insertPosition = db.Insertable(mesStaffPositionLink).PageSize(1)
                .IgnoreColumnsNull().ExecuteCommand();
        }
        return insertStaff > 0 && insertPosition > 0;
    }
    // 删除员工的方法
    private bool DeleteStaff(SqlSugarScope db, SysUser sysUser, MesStaff entity)
    {
@@ -107,16 +107,16 @@
                        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 对象的方法
@@ -174,7 +174,7 @@
    {
        // 初始化返回的职位关联列表
        List<MesStaffPositionLink> staffDetails = new List<MesStaffPositionLink>();
        // 检查ErpStaff是否包含职位详情数据
        if (staff.ErpStaffDetails != null && staff.ErpStaffDetails.Count > 0)
        {
@@ -184,19 +184,19 @@
                {
                    // 员工ID:从ErpStaff的Id属性转换为decimal类型
                    StaffId = Convert.ToDecimal(staff.Id),
                    // 职位ID:
                    // 1. 检查fPostId是否为空或null
                    // 2. 非空时转换为decimal,否则设为null
                    PositionId = string.IsNullOrEmpty(staffDetail.fPostId.ToString())
                        ? null
                        : Convert.ToDecimal(staffDetail.fPostId),
                    // 职位部门ID:逻辑与职位ID类似
                    FPostDeptId = string.IsNullOrEmpty(staffDetail.fPostDeptid.ToString())
                        ? null
                        : Convert.ToDecimal(staffDetail.fPostDeptid),
                    // 员工入职日期:
                    // 1. 检查fStaffStartDate是否为空或null
                    // 2. 非空时按"yyyy-MM-dd HH:mm:ss"格式解析为DateTime,否则设为null
@@ -322,13 +322,13 @@
            if (!InsertOrUpdateStaff(db, sysUser, entity, mesStaffPositionLink))
                return false;
        }
        return true;
    }
}
 */
 namespace MES.Service.service.BasicData;
namespace MES.Service.service.BasicData;
using MES.Service.DB;
using MES.Service.Dto.webApi;
@@ -346,8 +346,10 @@
        if (unit == null) throw new ArgumentNullException(nameof(unit));
        var entity = GetMesStaff(unit);
        unit.Id = entity.Id.ToString();
        var sysUser = GetUser(unit);
        var mesStaffPositionLink = GetMesStaffPositionLink(unit);
        //var mesStaffPositionLink = GetMesStaffPositionLink(unit);
        List<MesStaffPositionLink> mesStaffPositionLink = null;
        return UseTransaction(db =>
        {
@@ -356,8 +358,17 @@
                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;
                case "3":
                    return DeleteStaff(db, new List<SysUser> { sysUser },
                        new List<MesStaff> { entity })
                        ? 1
                        : 0;
                default: throw new ArgumentException($"不支持的类型: {unit.Type}");
            }
        }) > 0;
@@ -372,53 +383,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 +402,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} 个SysUser");
            }
            // 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 +457,57 @@
        {
            Console.WriteLine($"批量插入/更新失败: {ex.Message}");
            Console.WriteLine($"SQL: {db.Ado.SqlExecutionTime}");
            // 记录完整的错误堆栈
            Console.WriteLine($"堆栈跟踪: {ex.StackTrace}");
            // 记录失败的数据
            if (sysUsers != null && sysUsers.Any())
            {
                Console.WriteLine($"失败的SysUser数据: {string.Join(", ", sysUsers.Select(u => u.Account))}");
                Console.WriteLine(
                    $"失败的SysUser数据: {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 +519,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. 删除岗位关联 :使用Any方法(推荐)
            db.Deleteable<MesStaffPositionLink>()
                .Where(p => staffIds.Any(id => id == p.StaffId))
                .ExecuteCommand();
            Console.WriteLine($"成功删除 {userDeleteCount} 个SysUser和 {staffDeleteCount} 个MesStaff");
            Console.WriteLine(
                $"成功删除 {userDeleteCount} 个SysUser和 {staffDeleteCount} 个MesStaff");
            return userDeleteCount > 0 && staffDeleteCount > 0;
        }
        catch (Exception ex)
@@ -555,7 +545,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 +555,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,8 +578,8 @@
        {
            var entity = new MesStaff
            {
                Id = string.IsNullOrEmpty(staff.Id)
                    ? DateTimeOffset.UtcNow.ToUnixTimeSeconds()
                Id = string.IsNullOrEmpty(staff.Id)
                    ? DateTimeOffset.UtcNow.ToUnixTimeSeconds()
                    : Convert.ToDecimal(staff.Id),
                StaffNo = staff.FStaffNumber,
                StaffName = staff.FName,
@@ -608,7 +601,8 @@
            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 mesStaff = Db.Queryable<MesStaff>()
@@ -625,7 +619,8 @@
        catch (Exception ex)
        {
            Console.WriteLine($"转换ErpStaff到MesStaff失败: {ex.Message}");
            Console.WriteLine($"输入数据: {staff.Id}, {staff.FStaffNumber}, {staff.FName}");
            Console.WriteLine(
                $"输入数据: {staff.Id}, {staff.FStaffNumber}, {staff.FName}");
            throw;
        }
    }
@@ -639,7 +634,7 @@
        {
            return new SysUser
            {
                Sid = Convert.ToDecimal(staff.Id), // 确保Sid与员工ID一致
                StaffId = staff.Id, // 确保Sid与员工ID一致
                IsStatus = true,
                Account = staff.FStaffNumber,
                UserName = staff.FName,
@@ -652,7 +647,8 @@
        catch (Exception ex)
        {
            Console.WriteLine($"转换ErpStaff到SysUser失败: {ex.Message}");
            Console.WriteLine($"输入数据: {staff.Id}, {staff.FStaffNumber}, {staff.FName}");
            Console.WriteLine(
                $"输入数据: {staff.Id}, {staff.FStaffNumber}, {staff.FName}");
            throw;
        }
    }
@@ -666,21 +662,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();
            }
MES.Service/service/BasicData/MesSupplierManager.cs
@@ -43,41 +43,15 @@
    public bool SaveList(List<ErpSupplier> suppliers)
    {
        var list = suppliers.Select(GetMesSupplier).ToList();
        var groupBy = list.GroupBy(s => s.Type)
            .ToDictionary(g => g.Key, g => g.ToList());
        return UseTransaction(db =>
        if (suppliers == null || !suppliers.Any())
        {
            foreach (var supplierGroup in groupBy)
                switch (supplierGroup.Key)
                {
                    case "0":
                        if (!UpdateSupplierStatusBatch(db, supplierGroup.Value,
                                "A"))
                            throw new NotImplementedException("启用失败");
                        break;
                    case "1":
                        if (!UpdateSupplierStatusBatch(db, supplierGroup.Value,
                                "B"))
                            throw new NotImplementedException("禁用失败");
                        break;
                    case "3":
                        if (!DeleteSupplierBatch(db, supplierGroup.Value))
                            throw new NotImplementedException("删除失败");
                        break;
                    case "2":
                    case "4":
                        if (!InsertOrUpdateBatch(db, supplierGroup.Value))
                            throw new NotImplementedException("同步失败");
                        break;
                    default:
                        throw new ArgumentNullException(
                            $"type没有{supplierGroup.Key}这个类型的参数");
                }
            Console.WriteLine("警告: 传入的列表为空");
            return false;
        }
            return 1;
        }) > 0;
        // 逐条处理,全部成功才返回true(事务内批量处理更优,此处保持原有逻辑)
        var result = suppliers.Select(Save).ToList();
        return result.All(b => b);
    }
    private bool UpdateSupplierStatus(SqlSugarScope db, decimal supplierId,
MES.Service/service/BasicData/MesUnitManager.cs
@@ -43,39 +43,15 @@
    public bool SaveList(List<ErpUnit> units)
    {
        var list = units.Select(GetMesUnit).ToList();
        var groupBy = list.GroupBy(s => s.Type)
            .ToDictionary(g => g.Key, g => g.ToList());
        return UseTransaction(db =>
        if (units == null || !units.Any())
        {
            foreach (var unitGroup in groupBy)
                switch (unitGroup.Key)
                {
                    case "0":
                        if (!UpdateUnitStatusBatch(db, unitGroup.Value, "A"))
                            throw new NotImplementedException("启用失败");
                        break;
                    case "1":
                        if (!UpdateUnitStatusBatch(db, unitGroup.Value, "B"))
                            throw new NotImplementedException("禁用失败");
                        break;
                    case "3":
                        if (!DeleteUnitBatch(db, unitGroup.Value))
                            throw new NotImplementedException("删除失败");
                        break;
                    case "2":
                    case "4":
                        if (!InsertOrUpdateBatch(db, unitGroup.Value))
                            throw new NotImplementedException("同步失败");
                        break;
                    default:
                        throw new ArgumentNullException(
                            $"type没有{unitGroup.Key}这个类型的参数");
                }
            Console.WriteLine("警告: 传入的列表为空");
            return false;
        }
            return 1;
        }) > 0;
        // 逐条处理,全部成功才返回true(事务内批量处理更优,此处保持原有逻辑)
        var result = units.Select(Save).ToList();
        return result.All(b => b);
    }
    private bool UpdateUnitStatus(SqlSugarScope db, decimal unitId,
MES.Service/service/BasicData/SysDepartmentManager.cs
@@ -146,50 +146,15 @@
    // SaveList 方法用于保存多个部门记录,根据类型批量执行不同的操作
    public bool SaveList(List<ErpDepartment> departments)
    {
        var list = new List<SysDepartment>();
        departments.ForEach(s =>
        if (departments == null || !departments.Any())
        {
            var entity =
                GetSysDepartment(s); // 将 ErpDepartment 转换为 SysDepartment
            entity.Type = s.Type;
            list.Add(entity);
        });
            Console.WriteLine("警告: 传入的物料列表为空");
            return false;
        }
        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 "3":
                        if (!DeleteDepartmentBatch(db,
                                departmentGroup.Value)) // 批量删除部门
                            throw new NotImplementedException("删除失败");
                        break;
                    case "2":
                    case "4":
                        if (!InsertOrUpdateDepartmentBatch(db,
                                departmentGroup.Value)) // 批量插入或更新部门
                            throw new NotImplementedException("同步失败");
                        break;
                    default:
                        throw new ArgumentNullException(
                            $"type没有{departmentGroup.Key}这个类型的参数");
                }
            return 1;
        }) > 0;
        // 逐条处理,全部成功才返回true(事务内批量处理更优,此处保持原有逻辑)
        var result = departments.Select(Save).ToList();
        return result.All(b => b);
    }
    // 批量更新部门状态的方法