啊鑫
2025-01-22 eb744ecfecc0f1b6d9c0999c65bc740d93e30eda
StandardPda/MES.Service/service/BasicData/MesItemTypeManager.cs
@@ -10,45 +10,18 @@
    //当前类已经继承了 Repository 增、删、查、改的方法
    public bool Save(ErpItemType unit)
    {
        /// <summary>
        /// save方法调整。
        /// </summary>
        /// <remarks>
        /// 修改人:池南骏
        /// 修改日期:2024-12-30
        /// 修改说明:`
        /// </remarks>
        ///原代码
        //try
        //{
        //    switch (customer.Type)
        //    {
        //        case "0":
        //            return InsertItemType(entity);
        //        case "1":
        //            return DeleteItemType(entity.Id);
        //        default:
        //            throw new ArgumentNullException(
        //                $"type没有{customer.Type}这个类型的参数");
        //    }
        //}
        //catch (Exception ex)
        //{
        //    throw new ApplicationException($"操作失败: {ex.Message}", ex);
        //}
        var entity = GetMesItemType(unit);
        return UseTransaction(db =>
        {
            switch (unit.Type)
            {
                case "0":
                    if (InsertItemType(db, entity))
                case "3":
                    if (DeleteItemType(entity))
                        return 1;
                    break;
                case "1":
                    if (DeleteItemType(entity.Id))
                case "2":
                case "4":
                    if (InsertItemType(db, entity))
                        return 1;
                    break;
                default:
@@ -58,133 +31,104 @@
            throw new NotImplementedException("操作失败");
        }) > 0;
    }
    /// <summary>
    /// "插入或更新的方法"调整:修改为先删除再插入。
    /// </summary>
    /// <remarks>
    /// 修改人:池南骏
    /// 修改日期:2024-12-30
    /// 修改说明:`
    /// </remarks>
    //// - 原代码:
    //private bool InsertItemType(MesItemType entity)
    //{
    //    var insert = base.Insert(entity);
    //    if (insert)
    //        return true;
    //    throw new NotImplementedException("插入失败");
    //}
    //// - 新代码:
    private bool InsertItemType(SqlSugarScope db, MesItemType entity)
    private bool InsertItemType(SqlSugarScope db, List<MesItemType> entity)
    {
        db.Deleteable<MesItemType>()
            .Where(s => s.Id == entity.Id)
            .ExecuteCommand();
        DeleteItemType(entity);
        var insert = db.Insertable(entity).ExecuteCommand();
        return insert > 0;
    }
    private bool DeleteItemType(decimal id)
    private bool DeleteItemType(List<MesItemType> supplierId)
    {
        var deleteById = base.DeleteById(id);
        if (deleteById)
            return true;
        // 提取所有需要的 MesId 组合
        var ids = supplierId.Select(customer => customer.Id.ToString())
            .ToList();
        // 使用这些 MesId 去查询 MesLinkU9 表,找到对应的 U9Id
        var u9Ids = Db.Queryable<MesLinkU9>()
            .Where(u =>
                ids.Contains(u.MesId) && u.TableType == "MES_ITEM_TYPE")
            .Select(u => u.U9Id)
            .Distinct() // 应用 Distinct 去重
            .ToList();
        throw new NotImplementedException("删除失败");
        // 根据 U9Id 找到所有对应的 MesId,进行删除
        // 注意:这里假设您确实想要删除这些记录。如果不确定,请先查询以验证结果。
        var idsToDelete = Db.Queryable<MesLinkU9>()
            .Where(u => u9Ids.Contains(u.U9Id) && u.TableType == "MES_ITEM_TYPE")
            .Select(u => u.MesId)
            .Distinct() // 应用 Distinct 去重
            .ToList();
        var deleteByIds = Db.Deleteable<MesProject>().In(idsToDelete)
            .ExecuteCommand();
        // if (deleteByIds > 0)
        //     return true;
        return true;
        //throw new NotImplementedException("删除失败");
    }
    private MesItemType GetMesItemType(ErpItemType department)
    private List<MesItemType> GetMesItemType(ErpItemType department)
    {
        return new MesItemType
        List<MesItemType> list = new();
        foreach (var erpDetail in department.FUseOrgId)
        {
            Id = Convert.ToDecimal(department.Id),
            Pgroup = department.FParentId,
            Tcode = department.FNumber,
            Tname = department.FName,
            Description = department.FDescription,
            CreateDate = DateTime.Now,
            Company = "1000",
            Factory = "1000"
        };
            var exists = Db.Queryable<MesLinkU9>().Any(u =>
                u.U9Id == department.Id && u.OrgId == erpDetail.FUseOrgId &&
                u.TableType == "MES_ITEM_TYPE");
            decimal mesId = 0;
            if (exists)
            {
                //获取mesid
                mesId = Convert.ToDecimal(Db.Queryable<MesLinkU9>()
                    .Where(u =>
                        u.U9Id == department.Id && u.OrgId == erpDetail.FUseOrgId &&
                        u.TableType == "MES_ITEM_TYPE")
                    .Select(u => u.MesId) // 选择 MesId 字段
                    .First());
            }
            else
            {
                var entity = new MesLinkU9
                {
                    CreateDate = DateTime.Now,
                    MesId = mesId.ToString(),
                    U9Id = department.Id,
                    OrgId = erpDetail.FUseOrgId,
                    TableType = "MES_ITEM_TYPE"
                };
                mesId = Db.Insertable(entity).ExecuteReturnIdentity();
            }
            var mesItemType = new MesItemType
            {
                Id = mesId,
                Pgroup = department.FParentId,
                Tcode = department.FNumber,
                Tname = department.FName,
                Unit = department.Unit,
                ForbidStatus = department.FForbidStatus,
                IqcType = department.IqcType,
                CreateDate = DateTime.Now,
                Company = "1000",
                Factory = "1000"
            };
            list.Add(mesItemType);
        }
        return list;
    }
    public bool SaveList(List<ErpItemType> departments)
    {
        var list = new List<MesItemType>();
        departments.ForEach(s =>
        {
            var entity = GetMesItemType(s);
            entity.Type = s.Type;
            list.Add(entity);
        });
        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("接口执行失败");
    }
    private bool InsertItemTypeBatch(List<MesItemType> itemTypeList)
    {
        /// <summary>
        /// InsertItemTypeBatch方法调整,先删除再插入。
        /// </summary>
        /// <remarks>
        /// 修改人:池南骏
        /// 修改日期:2024-12-30
        /// 修改说明:`
        /// </remarks>
        //新增:先删除,再插入
        var ids = itemTypeList.Select(it => it.Id).ToArray();
        var deleteByIds =
            base.DeleteByIds(ids.Select(d => (dynamic)d).ToArray());
        var insertRange = base.InsertRange(itemTypeList);
        if (insertRange)
            return true;
        throw new NotImplementedException("插入失败");
    }
    private bool DeleteItemTypeBatch(List<MesItemType> itemTypeList)
    {
        var ids = itemTypeList.Select(it => it.Id).ToArray();
        var deleteByIds =
            base.DeleteByIds(ids.Select(d => (dynamic)d).ToArray());
        if (deleteByIds)
            return true;
        throw new NotImplementedException("删除失败");
        var result = departments.Select(Save).ToList();
        return result.All(b => b);
    }
}