421 lines
20 KiB
C#
421 lines
20 KiB
C#
using Infrastructure.Attribute;
|
|
using SqlSugar;
|
|
using System;
|
|
using ZR.Model;
|
|
using ZR.Model.Business;
|
|
using ZR.Model.MES.pro.DTO;
|
|
using ZR.Model.MES.wms;
|
|
using ZR.Repository;
|
|
|
|
namespace ZR.Service.mes.pro.IService
|
|
{
|
|
/// <summary>
|
|
/// 标签记录追溯Service业务层处理
|
|
/// </summary>
|
|
[AppService(
|
|
ServiceType = typeof(IProPackingDataBackService),
|
|
ServiceLifetime = LifeTime.Transient
|
|
)]
|
|
public class ProPackingDataBackService
|
|
: BaseService<Model.mes.pro.WmPackingrecord>,
|
|
IProPackingDataBackService
|
|
{
|
|
public List<ProPackageDataBackListDto> GetList(ProPackingDataBackQueryDto parm)
|
|
{
|
|
try
|
|
{
|
|
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)
|
|
)
|
|
{
|
|
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
|
|
)
|
|
.AndIF(!string.IsNullOrEmpty(parm.Machine), it => it.Machine == parm.Machine)
|
|
.AndIF(
|
|
!string.IsNullOrEmpty(parm.WorkOrder),
|
|
it => it.WorkOrderNum == parm.WorkOrder
|
|
)
|
|
// 批量查看
|
|
.AndIF(
|
|
!string.IsNullOrEmpty(parm.PackingCode),
|
|
it => it.PackingCode.Contains(parm.PackingCode)
|
|
)
|
|
.AndIF(
|
|
!string.IsNullOrEmpty(parm.Label),
|
|
it => it.ScannerContent.Contains(parm.Label)
|
|
)
|
|
.AndIF(
|
|
parm.StartTime > DateTime.MinValue,
|
|
it => it.CreateTime >= parm.StartTime
|
|
)
|
|
.AndIF(parm.EndTime > DateTime.MinValue, it => it.CreateTime <= parm.EndTime);
|
|
List<Model.mes.pro.WmPackingrecord> packingList = Queryable()
|
|
.Where(predicate.ToExpression())
|
|
.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;
|
|
}
|
|
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)
|
|
{
|
|
_description = "未知物料,不在物料清单或物料号不明确";
|
|
}
|
|
else
|
|
{
|
|
_description = !string.IsNullOrEmpty(material.Description)
|
|
? material.Description
|
|
: material.ProductName;
|
|
}
|
|
ProPackageDataBackListDto newPackingRecordItem =
|
|
new()
|
|
{
|
|
Id = SnowFlakeSingle.Instance.NextId().ToString(),
|
|
SearchType = 1,
|
|
Module = "产线包装工序",
|
|
Machine = item.Machine,
|
|
WorkOrder = _workOrder,
|
|
PartNumber = _partNumber,
|
|
Description = _description,
|
|
PackageLabel = item.PackingCode,
|
|
InnerLabel = _label,
|
|
FullMsg = item.BFilled == true ? "满箱" : "零头箱",
|
|
Team = "",
|
|
SiteNo = "",
|
|
ComNo = "",
|
|
Remark = "",
|
|
CreateTime = item.CreateTime
|
|
};
|
|
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 = 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;
|
|
}
|
|
catch (Exception)
|
|
{
|
|
Context.Ado.RollbackTran();
|
|
throw;
|
|
}
|
|
}
|
|
|
|
public PagedInfo<ProPackageDataBackRecordDto> GetRecords(
|
|
ProPackingDataBackRecordQueryDto parm
|
|
)
|
|
{
|
|
try
|
|
{
|
|
Context.Ado.BeginTran();
|
|
// 工单号提取
|
|
string _workOrder = parm.WorkOrder ?? "";
|
|
// 零件号提取
|
|
string _partNumber = parm.PartNumber ?? "";
|
|
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 ?? "未知物料,不在物料清单或物料号不明确";
|
|
PagedInfo<ProPackageDataBackRecordDto> newPageRecord = new();
|
|
// 产线
|
|
if (parm.SearchType == 1)
|
|
{
|
|
// 根据包装标签打印记录,找出对应工单
|
|
var predicate = Expressionable.Create<Model.mes.pro.WmPackingrecord>();
|
|
predicate
|
|
.And(it => it.PartNum == parm.PartNumber)
|
|
.And(it => it.WorkOrderNum == parm.WorkOrder)
|
|
.AndIF(
|
|
!string.IsNullOrEmpty(parm.PackingCode),
|
|
it => it.PackingCode.Contains(parm.PackingCode)
|
|
)
|
|
.AndIF(
|
|
!string.IsNullOrEmpty(parm.Machine),
|
|
it => it.Machine.Contains(parm.Machine)
|
|
)
|
|
.AndIF(parm.FillType != -1, it => it.BFilled == (parm.FillType == 1))
|
|
.AndIF(
|
|
parm.StartTime > DateTime.MinValue,
|
|
it => it.CreateTime >= parm.StartTime
|
|
)
|
|
.AndIF(
|
|
parm.EndTime > DateTime.MinValue,
|
|
it => it.CreateTime <= parm.EndTime
|
|
);
|
|
var response = Queryable()
|
|
.Where(predicate.ToExpression())
|
|
.Select(it => new ProPackageDataBackRecordDto
|
|
{
|
|
Id = SnowFlakeSingle.Instance.NextId().ToString(),
|
|
Machine = it.Machine,
|
|
WorkOrder = it.WorkOrderNum,
|
|
PartNumber = it.PartNum,
|
|
Description = _description,
|
|
PackageLabel = it.PackingCode,
|
|
InnerLabel = it.ProductCode,
|
|
FullMsg = it.BFilled == true ? "满箱" : "零头箱",
|
|
Team = "",
|
|
SiteNo = "",
|
|
ComNo = "",
|
|
Remark = "",
|
|
CreateTime = it.CreateTime
|
|
})
|
|
.ToPage(parm);
|
|
Context.Ado.CommitTran();
|
|
return response;
|
|
}
|
|
if (parm.SearchType == 2)
|
|
{
|
|
// 根据包装标签打印记录,找出对应工单
|
|
var predicate = Expressionable.Create<QcGp12RecordLabelScan>();
|
|
predicate
|
|
.And(it => it.PartNumber == parm.PartNumber)
|
|
.And(it => it.WorkOrder == parm.WorkOrder)
|
|
.AndIF(
|
|
!string.IsNullOrEmpty(parm.PackingCode),
|
|
it => it.Label.Contains(parm.PackingCode)
|
|
)
|
|
.AndIF(
|
|
parm.StartTime > DateTime.MinValue,
|
|
it => it.CreatedTime >= parm.StartTime
|
|
)
|
|
.AndIF(
|
|
parm.EndTime > DateTime.MinValue,
|
|
it => it.CreatedTime <= parm.EndTime
|
|
);
|
|
var response = Context
|
|
.Queryable<QcGp12RecordLabelScan>()
|
|
.Where(predicate.ToExpression())
|
|
.Select(it => new ProPackageDataBackRecordDto
|
|
{
|
|
Id = SnowFlakeSingle.Instance.NextId().ToString(),
|
|
Machine = "-",
|
|
WorkOrder = it.WorkOrder,
|
|
PartNumber = it.PartNumber,
|
|
Description = _description,
|
|
PackageLabel = it.Label,
|
|
InnerLabel = it.Label,
|
|
FullMsg = "-",
|
|
Team = it.Team,
|
|
SiteNo = it.SiteNo,
|
|
ComNo = it.ComNo,
|
|
Remark = "",
|
|
CreateTime = it.CreatedTime
|
|
})
|
|
.ToPage(parm);
|
|
Context.Ado.CommitTran();
|
|
return response;
|
|
}
|
|
if (parm.SearchType == 3)
|
|
{
|
|
// 根据包装标签打印记录,找出对应工单
|
|
var predicate = Expressionable.Create<QcBackEndRecordLabelScan>();
|
|
predicate
|
|
.And(it => it.PartNumber == parm.PartNumber)
|
|
.And(it => it.WorkOrder == parm.WorkOrder)
|
|
.AndIF(
|
|
!string.IsNullOrEmpty(parm.PackingCode),
|
|
it => it.Label.Contains(parm.PackingCode)
|
|
)
|
|
.AndIF(
|
|
parm.StartTime > DateTime.MinValue,
|
|
it => it.CreatedTime >= parm.StartTime
|
|
)
|
|
.AndIF(
|
|
parm.EndTime > DateTime.MinValue,
|
|
it => it.CreatedTime <= parm.EndTime
|
|
);
|
|
var response = Context
|
|
.Queryable<QcBackEndRecordLabelScan>()
|
|
.Where(predicate.ToExpression())
|
|
.Select(it => new ProPackageDataBackRecordDto
|
|
{
|
|
Id = SnowFlakeSingle.Instance.NextId().ToString(),
|
|
Machine = "-",
|
|
WorkOrder = it.WorkOrder,
|
|
PartNumber = it.PartNumber,
|
|
Description = _description,
|
|
PackageLabel = it.Label,
|
|
InnerLabel = it.Label,
|
|
FullMsg = "-",
|
|
Team = it.Team,
|
|
SiteNo = it.SiteNo,
|
|
ComNo = it.ComNo,
|
|
Remark = "",
|
|
CreateTime = it.CreatedTime
|
|
})
|
|
.ToPage(parm);
|
|
Context.Ado.CommitTran();
|
|
return response;
|
|
}
|
|
return new PagedInfo<ProPackageDataBackRecordDto>();
|
|
}
|
|
catch (Exception)
|
|
{
|
|
Context.Ado.RollbackTran();
|
|
throw;
|
|
}
|
|
}
|
|
}
|
|
}
|