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; } } } }