| | |
| | | } |
| | | 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)) |
| | |
| | | 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, ""); // 校验通过 |
| | | } |
| | | } |