啊鑫
2025-01-22 eb744ecfecc0f1b6d9c0999c65bc740d93e30eda
StandardPda/MES.Service/service/BasicData/MesStaffManager.cs
@@ -1,11 +1,7 @@
using AngleSharp.Dom;
using Castle.Core.Resource;
using DnsClient;
using MES.Service.DB;
using MES.Service.DB;
using MES.Service.Dto.webApi;
using MES.Service.Modes;
using SqlSugar;
using System.Xml.Linq;
namespace MES.Service.service.BasicData;
@@ -16,7 +12,8 @@
    {
        var entity = GetMesStaff(unit); // 将 ErpStaff 转换为 MesStaff
        var sysUser = GetUser(unit); // 获取 SysUser 实例
        var mesStaffPositionLink = GetMesStaffPositionLink(unit); // 获取 MesStaffPositionLink 实例
        var mesStaffPositionLink =
            GetMesStaffPositionLink(unit); // 获取 MesStaffPositionLink 实例
        return UseTransaction(db =>
        {
@@ -32,7 +29,8 @@
                    break;
                case "2":
                case "4":
                    if (InsertOrUpdateStaff(db, sysUser, entity, mesStaffPositionLink)) // 插入或更新员工
                    if (InsertOrUpdateStaff(db, sysUser, entity,
                            mesStaffPositionLink)) // 插入或更新员工
                        return 1;
                    break;
                case "3":
@@ -110,12 +108,12 @@
    /// 新代码
    // 插入或更新员工的方法
    /// <summary>
    /// 接口字段调整:修改参数,新增List<MesStaffPositionLink>的参数
    ///     接口字段调整:修改参数,新增List<MesStaffPositionLink>的参数
    /// </summary>
    /// <remarks>
    /// 修改人:池南骏
    /// 修改日期:2024-12-25  ——》 2025-01-05 二次修改
    /// 修改说明:为了应为一个员工多岗位的情况
    ///     修改人:池南骏
    ///     修改日期:2024-12-25  ——》 2025-01-05 二次修改
    ///     修改说明:为了应为一个员工多岗位的情况
    /// </remarks>
    private bool InsertOrUpdateStaff(SqlSugarScope db, SysUser sysUser,
        MesStaff entity, List<MesStaffPositionLink> mesStaffPositionLink)
@@ -128,10 +126,11 @@
        db.Deleteable<MesStaff>()
            .Where(s => s.Id == entity.Id )
            .Where(s => s.Id == entity.Id)
            .ExecuteCommand();
        var insertStaff = db.Insertable(entity).IgnoreColumns(true).ExecuteCommand();
        var insertStaff =
            db.Insertable(entity).IgnoreColumns(true).ExecuteCommand();
        var insertPosition = 1;
@@ -139,17 +138,18 @@
        {
            //先删除,再新增
            db.Deleteable<MesStaffPositionLink>()
        .Where(s => mesStaffPositionLink.Any(m => m.StaffId == s.StaffId))
        .ExecuteCommand();
                .Where(s =>
                    mesStaffPositionLink.Any(m => m.StaffId == s.StaffId))
                .ExecuteCommand();
            //批量插入时,忽略空字段
            insertPosition = db.Insertable(mesStaffPositionLink).PageSize(1)
            .IgnoreColumnsNull().ExecuteCommand();
                .IgnoreColumnsNull().ExecuteCommand();
        }
        return (insertStaff > 0 && insertPosition >0);
        return insertStaff > 0 && insertPosition > 0;
    }
    /// <summary>
@@ -188,13 +188,15 @@
        {
            var deleteStaff =
                db.Deleteable<MesStaff>()
            .Where(s => s.Id == entity.Id && s.PositionCode == entity.PositionCode)
            .ExecuteCommand();
                    .Where(s =>
                        s.Id == entity.Id &&
                        s.PositionCode == entity.PositionCode)
                    .ExecuteCommand();
            //删除对应员工岗位信息关联表 池南骏 2025-01-02
            var insertPosition = db.Deleteable<MesStaffPositionLink>()
            .Where(s => s.StaffId == entity.Id)
            .ExecuteCommand();
                .Where(s => s.StaffId == entity.Id)
                .ExecuteCommand();
            if (deleteStaff > 0)
                return true;
@@ -244,29 +246,38 @@
    }
    /// <summary>
    /// 接口字段调整:根据json格式,在MesStaffPositionLink<List>中存入数据。
    ///     接口字段调整:根据json格式,在MesStaffPositionLink<List>中存入数据。
    /// </summary>
    /// <remarks>
    /// 修改人:池南骏
    /// 修改日期:2025-01-02 ——》 2025-01-05 二次修改
    /// 修改说明:
    /// - 新增代码
    ///     修改人:池南骏
    ///     修改日期:2025-01-02 ——》 2025-01-05 二次修改
    ///     修改说明:
    ///     - 新增代码
    /// </remarks>
    private List<MesStaffPositionLink> GetMesStaffPositionLink(ErpStaff staff)
    {
        List<MesStaffPositionLink> staffDetails = new List<MesStaffPositionLink>();
        List<MesStaffPositionLink> staffDetails = new();
        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)
            }).ToList();
        }
            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)
                }).ToList();
        //postIds.AddRange(links);
        return staffDetails;
@@ -277,10 +288,12 @@
    {
        //获取当前用户使用组织对应的组织名称
        var db = SqlSugarHelper.GetInstance();
        string organize = db.Queryable<Organize>()
            .Where(it => it.Id == Convert.ToDecimal(staff.FUseOrgId)) // 使用 Where 方法根据单个 ID 查询
            .Select(it => it.Fname)         // 选择 Fname 属性
            .Single();                      // 使用 Single 因为我们期望只有一个匹配项
        var organize = db.Queryable<Organize>()
            .Where(it =>
                it.Id ==
                Convert.ToDecimal(staff.FUseOrgId)) // 使用 Where 方法根据单个 ID 查询
            .Select(it => it.Fname) // 选择 Fname 属性
            .Single(); // 使用 Single 因为我们期望只有一个匹配项
        //string organizeName = organize.f;
@@ -329,7 +342,8 @@
            sysUser.Type = s.Type;
            userList.Add(sysUser);
            var mesStaffPositionLink = GetMesStaffPositionLink(s); // 获取 SysUser 实例
            var mesStaffPositionLink =
                GetMesStaffPositionLink(s); // 获取 SysUser 实例
            mesStaffPositionLinkList.AddRange(mesStaffPositionLink);
        });
@@ -358,7 +372,8 @@
                    case "2":
                    case "4":
                        if (!InsertOrUpdateBatch(db, userList,
                                staffGroup.Value, mesStaffPositionLinkList)) // 批量插入或更新员工
                                staffGroup.Value,
                                mesStaffPositionLinkList)) // 批量插入或更新员工
                            throw new NotImplementedException("同步失败");
                        break;
                    default:
@@ -419,12 +434,14 @@
    // 批量插入或更新员工的方法
    private bool InsertOrUpdateBatch(SqlSugarScope db, List<SysUser> userList,
        List<MesStaff> staffList, List<MesStaffPositionLink> mesStaffPositionLink)
        List<MesStaff> staffList,
        List<MesStaffPositionLink> mesStaffPositionLink)
    {
        foreach (var sysUser in userList)
        {
            var entity = staffList.First(s => s.Id == sysUser.Sid);
            if (!InsertOrUpdateStaff(db, sysUser, entity, mesStaffPositionLink)) return false;
            if (!InsertOrUpdateStaff(db, sysUser, entity, mesStaffPositionLink))
                return false;
        }
        return true;