啊鑫
3 天以前 eb65436c2312821e3e513ab9ada41dd486d6d7cf
WebApi/GS.QC/Service/MesQaMjManager.cs
@@ -127,25 +127,13 @@
        }
        try
        {
            // ===== 新增:简化的免检维护校验逻辑 =====
            var validationResult = ValidateItemMaintenance(model);
            if (!validationResult.IsSuccess)
            {
                return ReturnDto<string>.QuickReturn("", ReturnCode.Default, validationResult.Message);
            }
            // ===== 修改:组织一致性校验(仅在有供应商时进行) =====
            // 当没有维护供应商时(全免检),跳过组织校验
            if (!string.IsNullOrEmpty(model.SuppId))
            {
                string supOrg = "", itemOrg = "";
                supOrg = Gs.Toolbox.DbHelperSQL.GetSingle("select top 1 FSubsidiary from MES_SUPPLIER a where a.id=" + model.SuppId.ToString()).ToString();
                itemOrg = Gs.Toolbox.DbHelperSQL.GetSingle("select top 1 FSubsidiary from MES_ITEMS a where a.id=" + model.ItemId.ToString()).ToString();
                if (supOrg != itemOrg)
                {
                    return ReturnDto<string>.QuickReturn("",
                  ReturnCode.Default, "供应商和物料不在同一组织下,请重新选择!");
                }
            //防呆是不是属于同一组织
            string supOrg = "", itemOrg = "";
            supOrg = Gs.Toolbox.DbHelperSQL.GetSingle("select top 1 FSubsidiary from MES_SUPPLIER a where a.id="+model.SuppId.ToString()).ToString();
            itemOrg = Gs.Toolbox.DbHelperSQL.GetSingle("select top 1 FSubsidiary from MES_ITEMS a where a.id=" + model.ItemId.ToString()).ToString();
            if (supOrg != itemOrg) {
                return ReturnDto<string>.QuickReturn("",
              ReturnCode.Default, "供应商和物料不在同一组织下,请重新选择!");
            }
            Db.Ado.BeginTran();
            if (!UtilityHelper.CheckGuid(model.Guid))
@@ -235,65 +223,5 @@
                it.Guid == Guid.Parse(_guid) && it.Status == true)
            .Count();
        return cont;
    }
    /// <summary>
    /// ===== 新增方法:简化的免检维护校验逻辑 =====
    /// 业务规则(互斥原则):
    /// 1. 全免检模式:物料不维护供应商(SuppId为空),表示对所有供应商免检
    /// 2. 指定免检模式:物料维护特定供应商,表示仅对指定供应商免检
    /// 3. 两种模式不能共存,一旦选择了一种模式,就不能切换到另一种模式
    /// 4. 同物料+同供应商的记录不允许重复
    /// </summary>
    /// <param name="model">要保存的免检记录</param>
    /// <returns>校验结果</returns>
    private (bool IsSuccess, string Message) ValidateItemMaintenance(MesQaMj model)
    {
        // 查询当前物料的所有免检记录
        var query = Db.Queryable<MesQaMj>()
            .Where(x => x.ItemId == model.ItemId);
        // 如果是编辑操作,排除当前记录避免误判
        if (UtilityHelper.CheckGuid(model.Guid))
        {
            query = query.Where(x => x.Guid != model.Guid);
        }
        var existingRecords = query.ToList();
        bool isCurrentGlobalMode = string.IsNullOrEmpty(model.SuppId); // 当前要保存的是否为全免检模式
        // 检查现有记录的模式
        var hasGlobalRecord = existingRecords.Any(x => string.IsNullOrEmpty(x.SuppId));      // 是否已有全免检记录
        var hasSpecificRecord = existingRecords.Any(x => !string.IsNullOrEmpty(x.SuppId));  // 是否已有指定供应商免检记录
        if (isCurrentGlobalMode)
        {
            // 要保存全免检模式
            if (hasGlobalRecord)
            {
                return (false, "该物料已存在全免检记录,不能重复添加!");
            }
            if (hasSpecificRecord)
            {
                return (false, "该物料已维护了指定供应商免检,不能再设置全免检模式!请继续维护具体供应商。");
            }
        }
        else
        {
            // 要保存指定供应商免检模式
            if (hasGlobalRecord)
            {
                return (false, "该物料已设置为全免检模式,不能再添加指定供应商免检记录!");
            }
            // 检查是否与现有的指定供应商记录重复
            var hasDuplicateSupplier = existingRecords.Any(x => x.SuppId == model.SuppId);
            if (hasDuplicateSupplier)
            {
                return (false, "该物料与该供应商的免检记录已存在,不能重复添加!");
            }
        }
        return (true, ""); // 校验通过
    }
}