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(); /* (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(); 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 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() .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 gp12LabelRecords = Context .Queryable() .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 backendLabelRecords = Context .Queryable() .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 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( !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() .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( !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() .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; } } } }