| | |
| | | using System.Data; |
| | | using System.Text; |
| | | using System.Text; |
| | | using Gs.Entity.BaseInfo; |
| | | using Gs.Entity.Sys; |
| | | using GS.QC.Models; |
| | |
| | | using Microsoft.AspNetCore.Mvc; |
| | | using Newtonsoft.Json.Linq; |
| | | using SqlSugar; |
| | | using System.Data; |
| | | |
| | | namespace GS.QC.Service; |
| | | |
| | |
| | | var _sbBy = |
| | | new StringBuilder(query.sortName + " " + query.sortOrder); |
| | | var totalCount = 0; |
| | | var itemsList = Db |
| | | .Queryable<MesQaMj, MesItems, SysOrganization, MesSupplier>((a, |
| | | b, org, d) => new JoinQueryInfos( |
| | | JoinType.Inner, a.ItemId == b.Id, |
| | | JoinType.Inner, b.FSubsidiary == org.Fid, |
| | | JoinType.Left, a.SuppId == d.Id.ToString() |
| | | )) |
| | | .Where(_sbWhere.ToString()) |
| | | .OrderBy(_sbBy.ToString()) |
| | | var itemsList = Db.Queryable<MesQaMj, MesItems, SysOrganization, MesSupplier>( |
| | | (a, b, org, d) => new JoinQueryInfos( |
| | | JoinType.Inner, a.ItemId == b.Id, |
| | | JoinType.Inner, b.FSubsidiary == org.Fid, |
| | | JoinType.Left, a.SuppId == d.Id.ToString() |
| | | )) |
| | | .Where(_sbWhere.ToString()) |
| | | .OrderBy(_sbBy.ToString()) |
| | | .Select((a, b, org, d) => new MesQaMj |
| | | { |
| | | FSubsidiary = "(" + org.FNumber + ") " + org.Name, |
| | |
| | | .ToPageList(query.currentPage, query.everyPageSize, |
| | | ref totalCount); |
| | | pageList = new PageList<MesQaMj>(itemsList, totalCount, |
| | | query.everyPageSize); |
| | | query.everyPageSize); |
| | | return ReturnDto<PageList<MesQaMj>>.QuickReturn(pageList, |
| | | ReturnCode.Success, "读取成功"); |
| | | } |
| | |
| | | [FromBody] MesQaMj model) |
| | | { |
| | | var m = base.GetById(model.Guid); |
| | | var sbSql = new StringBuilder(); |
| | | sbSql.Append( |
| | | "select i.FSubsidiary,i.[item_name],i.[item_model],i.item_no,mj.SUPP_ID,sup.supp_name,sup.supp_no"); |
| | | sbSql.Append( |
| | | " from MES_ITEMS i right join [dbo].[MES_QA_MJ] mj on i.id=mj.ITEM_ID left join [dbo].[MES_SUPPLIER] sup on sup.id=mj.SUPP_ID "); |
| | | System.Text.StringBuilder sbSql = new StringBuilder(); |
| | | sbSql.Append("select i.FSubsidiary,i.[item_name],i.[item_model],i.item_no,mj.SUPP_ID,sup.supp_name,sup.supp_no"); |
| | | sbSql.Append(" from MES_ITEMS i right join [dbo].[MES_QA_MJ] mj on i.id=mj.ITEM_ID left join [dbo].[MES_SUPPLIER] sup on sup.id=mj.SUPP_ID "); |
| | | sbSql.Append(" where i.id=" + m.ItemId); |
| | | try |
| | | { |
| | | var dset = new DataSet(); |
| | | dset = DbHelperSQL.Query(sbSql.ToString()); |
| | | var r = dset.Tables[0].Rows[0]; |
| | | DataSet dset = new DataSet(); |
| | | dset = Gs.Toolbox.DbHelperSQL.Query(sbSql.ToString()); |
| | | System.Data.DataRow r = dset.Tables[0].Rows[0]; |
| | | m.FSubsidiary = r["FSubsidiary"].ToString(); |
| | | m.ItemNo = r["item_no"].ToString(); |
| | | m.suppNo = r["supp_no"].ToString(); |
| | |
| | | { |
| | | LogHelper.Debug(ToString(), "GetModel error:" + ex.Message); |
| | | } |
| | | |
| | | if (m != null) |
| | | return ReturnDto<MesQaMj>.QuickReturn(m, |
| | | ReturnCode.Success, "读取成功!"); |
| | |
| | | var cont = 0; |
| | | cont = IsChkOrUnChk(model.Guid.ToString()); |
| | | if (cont > 0) |
| | | return ReturnDto<string>.QuickReturn("", ReturnCode.Exception, |
| | | "修改失败,该信息已被审核!"); |
| | | return ReturnDto<string>.QuickReturn("", ReturnCode.Exception, "修改失败,该信息已被审核!"); |
| | | } |
| | | |
| | | try |
| | | { |
| | | //防呆是不是属于同一组织 |
| | | string supOrg = "", itemOrg = ""; |
| | | supOrg = DbHelperSQL |
| | | .GetSingle( |
| | | "select top 1 FSubsidiary from MES_SUPPLIER a where a.id=" + |
| | | model.SuppId).ToString(); |
| | | itemOrg = DbHelperSQL |
| | | .GetSingle( |
| | | "select top 1 FSubsidiary from MES_ITEMS a where a.id=" + |
| | | model.ItemId).ToString(); |
| | | if (supOrg != itemOrg) |
| | | return ReturnDto<string>.QuickReturn("", |
| | | ReturnCode.Default, "供应商和物料不在同一组织下,请重新选择!"); |
| | | // ===== 新增:简化的免检维护校验逻辑 ===== |
| | | 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, "供应商和物料不在同一组织下,请重新选择!"); |
| | | } |
| | | } |
| | | Db.Ado.BeginTran(); |
| | | if (!UtilityHelper.CheckGuid(model.Guid)) |
| | | { |
| | |
| | | } |
| | | catch (Exception ex) |
| | | { |
| | | LogHelper.Debug(ToString(), "EditModel error:" + ex.Message); |
| | | LogHelper.Debug(this.ToString(), "EditModel error:" + ex.Message); |
| | | Db.Ado.RollbackTran(); |
| | | return ReturnDto<string>.QuickReturn("", ReturnCode.Exception, |
| | | ex.Message); |
| | | return ReturnDto<string>.QuickReturn("", ReturnCode.Exception, ex.Message); |
| | | } |
| | | |
| | | return ReturnDto<string>.QuickReturn(model.Guid.ToString(), |
| | |
| | | .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, ""); // 校验通过 |
| | | } |
| | | } |