优化追溯查询功能

This commit is contained in:
2025-07-05 17:34:28 +08:00
parent c477f01f23
commit 4b6312ef21

View File

@@ -28,17 +28,30 @@ namespace ZR.Service.mes.pro.IService
{
Context.Ado.BeginTran();
List<ProPackageDataBackListDto> newList = new();
/* (string.IsNullOrEmpty(parm.Label)
&& string.IsNullOrEmpty(parm.WorkOrder)
&& string.IsNullOrEmpty(parm.PackingCode))
||*/
if (
string.IsNullOrEmpty(parm.Label)
&& string.IsNullOrEmpty(parm.WorkOrder)
&& string.IsNullOrEmpty(parm.PackingCode)
)
{
throw new Exception("请输入工单号/产品码/箱码任意一个!");
if (
string.IsNullOrEmpty(parm.PartNumber)
|| !(parm.StartTime > DateTime.MinValue)
|| !(parm.EndTime > DateTime.MinValue)
)
{
throw new Exception("请输入 [工单号/产品码] 或 [零件号和时间区间] 任意一种查询方式!");
}
}
// 根据包装标签打印记录,找出对应工单
var predicate = Expressionable.Create<Model.mes.pro.WmPackingrecord>();
predicate
// 精确查看
.AndIF(
!string.IsNullOrEmpty(parm.PartNumber),
it => it.PartNum == parm.PartNumber
@@ -48,6 +61,7 @@ namespace ZR.Service.mes.pro.IService
!string.IsNullOrEmpty(parm.WorkOrder),
it => it.WorkOrderNum == parm.WorkOrder
)
// 批量查看
.AndIF(
!string.IsNullOrEmpty(parm.PackingCode),
it => it.PackingCode.Contains(parm.PackingCode)
@@ -61,111 +75,181 @@ namespace ZR.Service.mes.pro.IService
it => it.CreateTime >= parm.StartTime
)
.AndIF(parm.EndTime > DateTime.MinValue, it => it.CreateTime <= parm.EndTime);
var response = Queryable()
List<Model.mes.pro.WmPackingrecord> packingList = Queryable()
.Where(predicate.ToExpression())
.OrderByDescending(it => it.BFilled)
.First();
if (response == null)
.OrderBy(it => it.WorkOrderNum)
.GroupBy(it => it.WorkOrderNum)
.Select(it => new Model.mes.pro.WmPackingrecord
{
Id = SqlFunc.AggregateMax(it.Id),
PartNum = SqlFunc.AggregateMax(it.PartNum),
Machine = SqlFunc.AggregateMax(it.Machine),
PackingCode = SqlFunc.AggregateMax(it.PackingCode),
ProductCode = SqlFunc.AggregateMax(it.ProductCode),
ScannerContent = SqlFunc.AggregateMax(it.ScannerContent),
WorkOrderNum = it.WorkOrderNum,
BFilled = SqlFunc.AggregateMax(it.BFilled),
CreateTime = SqlFunc.AggregateMax(it.CreateTime),
Standby3 = SqlFunc.AggregateMax(it.Standby3),
Standby4 = SqlFunc.AggregateMax(it.Standby4),
Standby5 = SqlFunc.AggregateMax(it.Standby5),
BCombined = SqlFunc.AggregateMax(it.BCombined),
})
.ToList();
if (packingList.Count == 0)
{
return newList;
}
// 零件号提取
string _partNumber = response.PartNum ?? "";
// 工单号提取
string _workOrder = response.WorkOrderNum ?? "";
// 产品条码提取
string _label = response.ScannerContent ?? "";
WmMaterial material = Context
.Queryable<WmMaterial>()
.Where(it => it.Partnumber == _partNumber)
.Where(it => it.Type == 1)
.Where(it => it.Status == 1)
.First();
string _description = material.Description ?? "未知物料,不在物料清单或物料号不明确";
ProPackageDataBackListDto newPackingRecordItem =
new()
foreach (var item in packingList)
{
// 零件号提取
string _partNumber = item.PartNum ?? "";
// 工单号提取
string _workOrder = item.WorkOrderNum ?? "";
// 产品条码提取
string _label = item.ScannerContent ?? "";
WmMaterial material = Context
.Queryable<WmMaterial>()
.Where(it => it.Partnumber == _partNumber)
.Where(it => it.Type == 1)
.Where(it => it.Status == 1)
.First();
string _description = "";
if (material == null)
{
Id = SnowFlakeSingle.Instance.NextId().ToString(),
SearchType = 1,
Module = "产线包装工序",
Machine = response.Machine,
WorkOrder = _workOrder,
PartNumber = _partNumber,
Description = _description,
PackageLabel = response.PackingCode,
InnerLabel = _label,
FullMsg = response.BFilled == true ? "满箱" : "零头箱",
Team = "",
SiteNo = "",
ComNo = "",
Remark = "",
CreateTime = response.CreateTime
};
newList.Add(newPackingRecordItem);
// GP12 记录追溯
QcGp12RecordLabelScan gp12LabelRecord = Context
.Queryable<QcGp12RecordLabelScan>()
.Where(it => it.PartNumber == _partNumber)
.Where(it => it.Label.Contains(_workOrder))
.Where(it => it.Type == "1")
.Where(it => it.Status == "1")
.First();
if (gp12LabelRecord != null)
{
ProPackageDataBackListDto newGP12RecordItem =
_description = "未知物料,不在物料清单或物料号不明确";
}
else
{
_description = !string.IsNullOrEmpty(material.Description)
? material.Description
: material.ProductName;
}
ProPackageDataBackListDto newPackingRecordItem =
new()
{
Id = SnowFlakeSingle.Instance.NextId().ToString(),
SearchType = 2,
Module = "GP12检验工序",
Machine = gp12LabelRecord.SiteNo,
WorkOrder = gp12LabelRecord.WorkOrder,
SearchType = 1,
Module = "产线包装工序",
Machine = item.Machine,
WorkOrder = _workOrder,
PartNumber = _partNumber,
Description = _description,
PackageLabel = "-",
InnerLabel = gp12LabelRecord.Label,
FullMsg = "-",
Team = gp12LabelRecord.Team,
SiteNo = gp12LabelRecord.SiteNo,
ComNo = gp12LabelRecord.ComNo,
PackageLabel = item.PackingCode,
InnerLabel = _label,
FullMsg = item.BFilled == true ? "满箱" : "零头箱",
Team = "",
SiteNo = "",
ComNo = "",
Remark = "",
CreateTime = gp12LabelRecord.CreatedTime
CreateTime = item.CreateTime
};
newList.Add(newGP12RecordItem);
}
// 后道记录追溯
QcBackEndRecordLabelScan backendLabelRecord = Context
.Queryable<QcBackEndRecordLabelScan>()
.Where(it => it.PartNumber == _partNumber)
.Where(it => it.Label.Contains(_workOrder))
.Where(it => it.Type == "1")
.Where(it => it.Status == "1")
.First();
if (backendLabelRecord != null)
{
ProPackageDataBackListDto newBackEndRecordItem =
new()
newList.Add(newPackingRecordItem);
// GP12 记录追溯
List<QcGp12RecordLabelScan> gp12LabelRecords = Context
.Queryable<QcGp12RecordLabelScan>()
.Where(it => it.PartNumber == _partNumber)
.Where(it => it.Label.Contains(_workOrder))
.Where(it => it.Type == "1")
.Where(it => it.Status == "1")
.GroupBy(it => it.WorkOrder)
.Select(it => new QcGp12RecordLabelScan
{
Id = SnowFlakeSingle.Instance.NextId().ToString(),
SearchType = 2,
Module = "GP12检验工序",
Machine = backendLabelRecord.SiteNo,
WorkOrder = backendLabelRecord.WorkOrder,
PartNumber = _partNumber,
Description = _description,
PackageLabel = "-",
InnerLabel = backendLabelRecord.Label,
FullMsg = "-",
Team = backendLabelRecord.Team,
SiteNo = backendLabelRecord.SiteNo,
ComNo = backendLabelRecord.ComNo,
Remark = "",
CreateTime = backendLabelRecord.CreatedTime
};
newList.Add(newBackEndRecordItem);
Id = SqlFunc.AggregateMax(it.Id),
WorkOrder = it.WorkOrder,
PartNumber = SqlFunc.AggregateMax(it.PartNumber),
Team = SqlFunc.AggregateMax(it.Team),
SiteNo = SqlFunc.AggregateMax(it.SiteNo),
ComNo = SqlFunc.AggregateMax(it.ComNo),
Label = SqlFunc.AggregateMax(it.Label),
LabelType = SqlFunc.AggregateMax(it.LabelType),
LabelSort = SqlFunc.AggregateMax(it.LabelSort),
ScanTime = SqlFunc.AggregateMax(it.ScanTime),
Type = SqlFunc.AggregateMax(it.Type),
Status = SqlFunc.AggregateMax(it.Status),
Remark = SqlFunc.AggregateMax(it.Remark),
CreatedBy = SqlFunc.AggregateMax(it.CreatedBy),
CreatedTime = SqlFunc.AggregateMax(it.CreatedTime),
UpdatedBy = SqlFunc.AggregateMax(it.UpdatedBy),
UpdatedTime = SqlFunc.AggregateMax(it.UpdatedTime)
})
.ToList();
foreach (var gp12LabelRecord in gp12LabelRecords)
{
ProPackageDataBackListDto newGP12RecordItem =
new()
{
Id = SnowFlakeSingle.Instance.NextId().ToString(),
SearchType = 2,
Module = "GP12检验工序",
Machine = gp12LabelRecord.SiteNo,
WorkOrder = gp12LabelRecord.WorkOrder,
PartNumber = _partNumber,
Description = _description,
PackageLabel = "-",
InnerLabel = gp12LabelRecord.Label,
FullMsg = "-",
Team = gp12LabelRecord.Team,
SiteNo = gp12LabelRecord.SiteNo,
ComNo = gp12LabelRecord.ComNo,
Remark = "归属生产工单:" + _workOrder,
CreateTime = gp12LabelRecord.CreatedTime
};
newList.Add(newGP12RecordItem);
}
// 后道记录追溯
List<QcBackEndRecordLabelScan> backendLabelRecords = Context
.Queryable<QcBackEndRecordLabelScan>()
.Where(it => it.PartNumber == _partNumber)
.Where(it => it.Label.Contains(_workOrder))
.Where(it => it.Type == "1")
.Where(it => it.Status == "1")
.GroupBy(it => it.WorkOrder)
.Select(it => new QcBackEndRecordLabelScan
{
Id = SqlFunc.AggregateMax(it.Id),
WorkOrder = it.WorkOrder,
PartNumber = SqlFunc.AggregateMax(it.PartNumber),
Team = SqlFunc.AggregateMax(it.Team),
SiteNo = SqlFunc.AggregateMax(it.SiteNo),
ComNo = SqlFunc.AggregateMax(it.ComNo),
Label = SqlFunc.AggregateMax(it.Label),
LabelType = SqlFunc.AggregateMax(it.LabelType),
LabelSort = SqlFunc.AggregateMax(it.LabelSort),
ScanTime = SqlFunc.AggregateMax(it.ScanTime),
Type = SqlFunc.AggregateMax(it.Type),
Status = SqlFunc.AggregateMax(it.Status),
Remark = SqlFunc.AggregateMax(it.Remark),
CreatedBy = SqlFunc.AggregateMax(it.CreatedBy),
CreatedTime = SqlFunc.AggregateMax(it.CreatedTime),
UpdatedBy = SqlFunc.AggregateMax(it.UpdatedBy),
UpdatedTime = SqlFunc.AggregateMax(it.UpdatedTime)
})
.ToList();
foreach (var backendLabelRecord in backendLabelRecords)
{
ProPackageDataBackListDto newBackEndRecordItem =
new()
{
Id = SnowFlakeSingle.Instance.NextId().ToString(),
SearchType = 3,
Module = "后道检验工序",
Machine = backendLabelRecord.SiteNo,
WorkOrder = backendLabelRecord.WorkOrder,
PartNumber = _partNumber,
Description = _description,
PackageLabel = "-",
InnerLabel = backendLabelRecord.Label,
FullMsg = "-",
Team = backendLabelRecord.Team,
SiteNo = backendLabelRecord.SiteNo,
ComNo = backendLabelRecord.ComNo,
Remark = "归属生产工单:" + _workOrder,
CreateTime = backendLabelRecord.CreatedTime
};
newList.Add(newBackEndRecordItem);
}
}
Context.Ado.CommitTran();
return newList;
}
@@ -211,10 +295,7 @@ namespace ZR.Service.mes.pro.IService
!string.IsNullOrEmpty(parm.Machine),
it => it.Machine.Contains(parm.Machine)
)
.AndIF(
parm.FillType != -1,
it => it.BFilled == (parm.FillType == 1)
)
.AndIF(parm.FillType != -1, it => it.BFilled == (parm.FillType == 1))
.AndIF(
parm.StartTime > DateTime.MinValue,
it => it.CreateTime >= parm.StartTime