fix(predesign): 修复包装与车次关联数据一致性问题

包装管理存在两个一致性问题:一是组件可重复进入其他包装,导致
组件归属冲突;二是删除车次后包装仍保留旧车次关联,产生脏数据。
本次修改统一补齐校验和解绑逻辑,避免包装与发货数据出现错误关联。
This commit is contained in:
李鹏飞 2026-04-28 00:50:01 +08:00
parent 8d4bcf041d
commit a694ab1183
2 changed files with 63 additions and 16 deletions

View File

@ -143,19 +143,30 @@ namespace BLL
/// <exception cref="Exception">当该预制组件已被包装时抛出异常</exception>
public static void AddPipelineComponentToPackaging(string packagingManageId, string pipelineComponentId)
{
var ComponentModel = BLL.HJGL_PipelineComponentService.GetPipelineComponentById(pipelineComponentId);
if (ComponentModel != null)
using (Model.SGGLDB db = new Model.SGGLDB(Funs.ConnString))
{
var model = new Model.HJGL_PackagingManageDetail()
bool existsInCurrentPackaging = db.HJGL_PackagingManageDetail.Any(x => x.PackagingManageId == packagingManageId && x.PipelineComponentId == pipelineComponentId);
if (existsInCurrentPackaging)
{
Id = SQLHelper.GetNewID(),
PackagingManageId = packagingManageId,
PipelineId = ComponentModel.PipelineId,
PipelineComponentId = pipelineComponentId,
CreateTime = DateTime.Now,
CreateUser = null,
};
HJGLPackagingmanagedetailService.Add(model);
return;
}
ValidatePipelineComponentsNotInOtherPackaging(pipelineComponentId);
var ComponentModel = BLL.HJGL_PipelineComponentService.GetPipelineComponentById(pipelineComponentId);
if (ComponentModel != null)
{
var model = new Model.HJGL_PackagingManageDetail()
{
Id = SQLHelper.GetNewID(),
PackagingManageId = packagingManageId,
PipelineId = ComponentModel.PipelineId,
PipelineComponentId = pipelineComponentId,
CreateTime = DateTime.Now,
CreateUser = null,
};
db.HJGL_PackagingManageDetail.InsertOnSubmit(model);
db.SubmitChanges();
}
}
}
@ -172,6 +183,7 @@ namespace BLL
db1.HJGL_PackagingManage.DeleteOnSubmit(table);
db1.SubmitChanges();
}
HJGLPackagingmanagedetailService.DeleteByPackagingManageId(PackagingManageId);
}
/// <summary>
@ -632,6 +644,11 @@ namespace BLL
}
// 创建新的包装明细记录
var addedComponentIds = allComponentIds.Except(existingComponentIds).ToList();
foreach (var item in addedComponentIds)
{
ValidatePipelineComponentsNotInOtherPackaging(item);
}
var newDetailList = new List<Model.HJGL_PackagingManageDetail>();
foreach (var item in allComponentIds)
{
@ -671,6 +688,28 @@ namespace BLL
/// 获取包装状态下拉框选项
/// </summary>
/// <returns>包装状态列表,包含状态文本和值的映射关系</returns>
private static void ValidatePipelineComponentsNotInOtherPackaging(string pipelineComponentId)
{
if (string.IsNullOrEmpty(pipelineComponentId))
{
return;
}
var existDetail = (from detail in Funs.DB.HJGL_PackagingManageDetail
join pack in Funs.DB.HJGL_PackagingManage on detail.PackagingManageId equals pack.PackagingManageId
where detail.PipelineComponentId == pipelineComponentId
select new
{
detail.PipelineComponentId,
PackagingCode = pack == null ? null : pack.PackagingCode
}).FirstOrDefault();
if (existDetail != null)
{
string packagingCodeText = string.IsNullOrEmpty(existDetail.PackagingCode) ? string.Empty : (",包装编号:" + existDetail.PackagingCode);
throw new Exception("组件已在其他包装中存在" + packagingCodeText + "。");
}
}
public static ListItem[] GetState()
{
ListItem[] list = new ListItem[3];
@ -753,4 +792,4 @@ namespace BLL
}
#endregion Methods
}
}
}

View File

@ -144,11 +144,19 @@ namespace BLL
public static void DeleteById(string Id)
{
Model.HJGL_TrainNumberManage table = Funs.DB.HJGL_TrainNumberManage.FirstOrDefault(x => x.Id == Id);
var db = Funs.DB;
Model.HJGL_TrainNumberManage table = db.HJGL_TrainNumberManage.FirstOrDefault(x => x.Id == Id);
if (table != null)
{
Funs.DB.HJGL_TrainNumberManage.DeleteOnSubmit(table);
Funs.DB.SubmitChanges();
var packagingList = db.HJGL_PackagingManage.Where(x => x.TrainNumberId == Id).ToList();
foreach (var item in packagingList)
{
item.TrainNumberId = null;
item.TrainNumber = null;
}
db.HJGL_TrainNumberManage.DeleteOnSubmit(table);
db.SubmitChanges();
}
}
@ -167,4 +175,4 @@ namespace BLL
}
}
}
}
}