using Infrastructure.Attribute; using SqlSugar; using System; using ZR.Model; using ZR.Model.MES.wms; using ZR.Model.MES.wms.Dto; using ZR.Repository; using ZR.Service.mes.wms.IService; namespace ZR.Service.mes.wms { /// /// GP12质检记录表Service业务层处理 /// [AppService( ServiceType = typeof(IWmGp12QualityStatisticsService), ServiceLifetime = LifeTime.Transient )] public class WmGp12QualityStatisticsService : BaseService, IWmGp12QualityStatisticsService { /// /// 查询GP12质检记录表列表 /// /// /// public PagedInfo GetList(WmGp12QualityStatisticsQueryDto parm) { var predicate = Expressionable .Create() .AndIF( !string.IsNullOrEmpty(parm.WorkorderId), it => it.WorkorderId.Contains(parm.WorkorderId) ) .AndIF(!string.IsNullOrEmpty(parm.Team), it => it.Team.Contains(parm.Team)) .AndIF( !string.IsNullOrEmpty(parm.Partnumber), it => it.Partnumber.Contains(parm.Partnumber) ) .AndIF( !string.IsNullOrEmpty(parm.CreatedBy), it => it.CreatedBy.Contains(parm.CreatedBy) ) .AndIF( parm.Type != -1, it => it.Type == parm.Type ) .AndIF( parm.StartTime != null, it => it.StartTime >= parm.StartTime.Value.ToLocalTime() ) .AndIF( parm.EndTime != null, it => it.StartTime <= parm.EndTime.Value.ToLocalTime() ); var response = Queryable() .Where(predicate.ToExpression()) .ToPage(parm); if (response.Result.Count > 0) { foreach (WmGp12QualityStatisticsDto item in response.Result) { WmMaterial material = Context .Queryable() .Where(it => it.Partnumber == item.Partnumber) .Where(it => it.Type == 1) .Where(it => it.Status == 1) .First(); if (material == null) { item.Description = "此零件号不在物料清单内!"; continue; } item.QualifiedRateStr = Math.Ceiling(item.QualifiedRate).ToString() + "%"; item.Color = material.Color; item.Specification = material.Specification; item.Description = !string.IsNullOrEmpty(material.Description) ? material.Description : material.ProductName; } } return response; } /// /// 获取详情 /// /// /// public WmGp12QualityStatistics GetInfo(string Id) { var response = Queryable().Where(x => x.Id == Id).First(); return response; } /// /// 添加GP12质检记录表 /// /// /// public WmGp12QualityStatistics AddWmGp12QualityStatistics(WmGp12QualityStatistics model) { try { Context.Ado.BeginTran(); if ( model.RequireNumber != ( model.QualifiedNumber + model.PaoguangTotal + model.DamoTotal + model.BaofeiTotal ) ) { throw new Exception("投入数与合格数,抛光总数,打磨数,报废数不符合,请检查"); } model.Id = SnowFlakeSingle.instance.NextId().ToString(); // 抛光品标记 if (model.IsPolish) { model.Type = 1; } else { model.Type = 0; } // 抛光合格率计算 decimal qualifiedRate = 0.0m; if (model.QualifiedNumber != 0) { qualifiedRate = (decimal)model.QualifiedNumber / model.RequireNumber * 100 ?? 0.0m; } model.QualifiedRate = qualifiedRate; WmGp12QualityStatistics res0 = Context.Insertable(model).ExecuteReturnEntity(); if (res0 == null) { Context.Ado.RollbackTran(); throw new Exception("插入GP12检测结果记录失败"); } // TODO 20241023 不再变动抛光仓库盘点数据 Context.Ado.CommitTran(); return res0; WmOneTimeInventoryService oneTimeService = new(); WmPolishInventoryService inventoryService = new(); //抛光品重新进入抛光仓库 if (model.PaoguangTotal > 0) { WmPolishInventory wmPolishInventoryWarehousing = new() { Partnumber = model.Partnumber, WorkOrder = model.WorkorderId, Type = model.IsReturnWorkpiece ? 2 : 1, Quantity = model.PaoguangTotal, CreatedBy = model.CreatedBy, ActionTime = DateTime.Now.ToLocalTime(), Remark = "GP12检测抛光入库,抛光数:" + model.PaoguangTotal + "、工单号:" + model.WorkorderId ?? "未填写工单号" + "。记录时间:" + model.CreatedTime.Value.ToLocalTime().ToString() + "[来源记录识别编号:" + res0.Id + "]" }; int res1 = inventoryService.DoWmPolishWarehousing(wmPolishInventoryWarehousing); if (res1 == 0) { Context.Ado.RollbackTran(); throw new Exception("GP12检测结果抛光入库失败"); } } //合格品,报废,打磨品,抛光品 扣除一次合格品仓库库存 if ((model.BaofeiTotal + model.DamoTotal + model.QualifiedNumber + model.PaoguangTotal) > 0) { WmOneTimeInventory wmOneTimeInventoryRetrieval = new() { Partnumber = model.Partnumber, WorkOrder = model.WorkorderId, Type = model.IsReturnWorkpiece ? 2 : 1, Quantity = ( model.BaofeiTotal + model.DamoTotal + model.QualifiedNumber + model.PaoguangTotal ), CreatedBy = model.CreatedBy, ActionTime = DateTime.Now.ToLocalTime(), Remark = "GP12检测记录出库,合格数:" + model.QualifiedNumber + "、抛光数:" + model.PaoguangTotal + "、打磨数:" + model.DamoTotal + "、报废数:" + model.BaofeiTotal + "、工单号:" + model.WorkorderId ?? "未填写工单号" + "。记录时间:" + model.CreatedTime.Value.ToLocalTime().ToString() + "[来源记录识别编号:" + res0.Id + "]" }; int res2 = oneTimeService.DoWmOneTimeRetrieval(wmOneTimeInventoryRetrieval); if (res2 == 0) { Context.Ado.RollbackTran(); throw new Exception("GP12检测结果出库失败"); } } Context.Ado.CommitTran(); return res0; } catch (Exception e) { Context.Ado.RollbackTran(); throw new Exception(e.Message); } } /// /// 修改GP12质检记录表 /// /// /// public int UpdateWmGp12QualityStatistics(WmGp12QualityStatistics model) { try { if ( model.RequireNumber != ( model.QualifiedNumber + model.PaoguangTotal + model.DamoTotal + model.BaofeiTotal ) ) { throw new Exception("投入数与合格数,抛光数,打磨数,报废数不符合,请检查"); } decimal qualifiedRate = 0.0m; if (model.QualifiedNumber != 0) { qualifiedRate = (decimal)model.QualifiedNumber / model.RequireNumber * 100 ?? 0.0m; } model.QualifiedRate = qualifiedRate; if (model.IsPolish) { model.Type = 1; } else { model.Type = 0; } return Update(model, true); } catch (Exception e) { throw new Exception(e.Message); } } } }