using System;
using Infrastructure.Attribute;
using Infrastructure.Extensions;
using SqlSugar;
using ZR.Model;
using ZR.Model.Business;
using ZR.Model.mes.pro;
using ZR.Model.MES.pro.DTO;
using ZR.Model.MES.wms;
using ZR.Repository;
namespace ZR.Service.mes.pro.IService
{
///
/// 标签记录追溯Service业务层处理
///
[AppService(
ServiceType = typeof(IProPackingDataBackService),
ServiceLifetime = LifeTime.Transient
)]
public class ProPackingDataBackService
: BaseService,
IProPackingDataBackService
{
public List GetList(ProPackingDataBackQueryDto parm)
{
try
{
Context.Ado.BeginTran();
List newList = new();
if (
string.IsNullOrEmpty(parm.Label)
&& string.IsNullOrEmpty(parm.WorkOrder)
&& string.IsNullOrEmpty(parm.PackingCode)
)
{
throw new Exception("请输入工单号/产品码/箱码任意一个!");
}
// 根据包装标签打印记录,找出对应工单
var predicate = Expressionable.Create();
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);
var response = Queryable()
.Where(predicate.ToExpression())
.OrderByDescending(it => it.BFilled)
.First();
if (response == null)
{
return newList;
}
// 零件号提取
string _partNumber = response.PartNum ?? "";
// 工单号提取
string _workOrder = response.WorkOrderNum ?? "";
// 产品条码提取
string _label = response.ScannerContent ?? "";
WmMaterial material = Context
.Queryable()
.Where(it => it.Partnumber == _partNumber)
.Where(it => it.Type == 1)
.Where(it => it.Status == 1)
.First();
string _description = material.Description ?? "未知物料,不在物料清单或物料号不明确";
ProPackageDataBackListDto newPackingRecordItem =
new()
{
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()
.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 =
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 = "",
CreateTime = gp12LabelRecord.CreatedTime
};
newList.Add(newGP12RecordItem);
}
// 后道记录追溯
QcBackEndRecordLabelScan backendLabelRecord = Context
.Queryable()
.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()
{
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);
}
Context.Ado.CommitTran();
return newList;
}
catch (Exception)
{
Context.Ado.RollbackTran();
throw;
}
}
public PagedInfo GetRecords(
ProPackingDataBackRecordQueryDto parm
)
{
try
{
Context.Ado.BeginTran();
// 工单号提取
string _workOrder = parm.WorkOrder ?? "";
// 零件号提取
string _partNumber = parm.PartNumber ?? "";
WmMaterial material = Context
.Queryable()
.Where(it => it.Partnumber == _partNumber)
.Where(it => it.Type == 1)
.Where(it => it.Status == 1)
.First();
string _description = material.Description ?? "未知物料,不在物料清单或物料号不明确";
PagedInfo newPageRecord = new();
// 产线
if (parm.SearchType == 1)
{
// 根据包装标签打印记录,找出对应工单
var predicate = Expressionable.Create();
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();
predicate
.And(it => it.PartNumber == parm.PartNumber)
.And(it => it.WorkOrder == parm.WorkOrder)
.AndIF(
parm.StartTime > DateTime.MinValue,
it => it.CreatedTime >= parm.StartTime
)
.AndIF(
parm.EndTime > DateTime.MinValue,
it => it.CreatedTime <= parm.EndTime
);
var response = Context
.Queryable()
.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();
predicate
.And(it => it.PartNumber == parm.PartNumber)
.And(it => it.WorkOrder == parm.WorkOrder)
.AndIF(
parm.StartTime > DateTime.MinValue,
it => it.CreatedTime >= parm.StartTime
)
.AndIF(
parm.EndTime > DateTime.MinValue,
it => it.CreatedTime <= parm.EndTime
);
var response = Context
.Queryable()
.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();
}
catch (Exception)
{
Context.Ado.RollbackTran();
throw;
}
}
}
}