using System; using Infrastructure.Attribute; using SqlSugar; 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 { /// /// 抛光管理后道检验-质量统计Service业务层处理(后道) /// [AppService( ServiceType = typeof(IWmPolishQualityStatisticsService), ServiceLifetime = LifeTime.Transient )] public class WmPolishQualityStatisticsService : BaseService, IWmPolishQualityStatisticsService { /// /// 查询抛光管理-质量统计列表 /// /// /// public PagedInfo GetList( WmPolishQualityStatisticsQueryDto 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 (WmPolishQualityStatisticsDto 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 WmPolishQualityStatistics GetInfo(string Id) { var response = Queryable().Where(x => x.Id == Id).First(); return response; } /// /// 添加抛光管理-质量统计 /// /// /// public WmPolishQualityStatistics AddWmPolishQualityStatistics( WmPolishQualityStatistics 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.IsOver) { 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; WmPolishQualityStatistics res0 = Context.Insertable(model).ExecuteReturnEntity(); if (res0 == null) { Context.Ado.RollbackTran(); throw new Exception("插入抛光质检记录失败"); } // TODO 20241023 不再变动抛光仓库盘点数据 Context.Ado.CommitTran(); return res0; WmPolishInventoryService inventoryService = new(); WmOneTimeInventoryService oneTimeService = new(); // 合格品检查是否是门把手,是进入成品库(仅出库),不是进入一次合格品库 // TODO 20241018调整,门把手可入GP12 //bool isDoorknob = CheckIsDoorknob(model.Partnumber); if (!model.IsOver && model.QualifiedNumber > 0) { WmOneTimeInventory wmOneTimeInventoryWarehousing = new() { Partnumber = model.Partnumber, Type = model.IsReturnWorkpiece ? 2 : 1, Quantity = model.QualifiedNumber, CreatedBy = model.CreatedBy, ActionTime = DateTime.Now.ToLocalTime(), Remark = "后道抛光合格品入一次合格库,合格数:" + model.QualifiedNumber + "。记录时间:" + model.CreatedTime.Value.ToLocalTime().ToString() + "[来源记录识别编号:" + res0.Id + "]" }; int res1 = oneTimeService.DoWmOneTimeWarehousing(wmOneTimeInventoryWarehousing); if (res1 == 0) { Context.Ado.RollbackTran(); throw new Exception("抛光合格品GP12入库失败"); } } //抛光品重新进入抛光仓库 if (model.PaoguangTotal > 0) { WmPolishInventory wmPolishInventory = new() { Partnumber = model.Partnumber, Type = model.IsReturnWorkpiece ? 2 : 1, Quantity = model.PaoguangTotal, CreatedBy = model.CreatedBy, ActionTime = DateTime.Now.ToLocalTime(), Remark = "抛光质检记录入库,抛光数:" + model.PaoguangTotal + "。记录时间:" + model.CreatedTime.Value.ToLocalTime().ToString() + "[来源记录识别编号:" + res0.Id + "]" }; int res1 = inventoryService.DoWmPolishWarehousing(wmPolishInventory); if (res1 == 0) { Context.Ado.RollbackTran(); throw new Exception("抛光质检记录入库失败"); } } //合格品,报废,打磨品 扣除抛光仓库库存 if ((model.BaofeiTotal + model.DamoTotal + model.QualifiedNumber) > 0) { WmPolishInventory wmPolishInventory = new() { Partnumber = model.Partnumber, Type = model.IsReturnWorkpiece ? 2 : 1, Quantity = ( model.BaofeiTotal + model.DamoTotal + model.QualifiedNumber ), CreatedBy = model.CreatedBy, ActionTime = DateTime.Now, Remark = "抛光质检记录出库,合格数:" + model.QualifiedNumber + "、打磨数:" + model.DamoTotal + "、报废数:" + model.BaofeiTotal + "。记录时间:" + model.CreatedTime.Value.ToLocalTime().ToString() + "[来源记录识别编号:" + res0.Id + "]" }; int res2 = inventoryService.DoWmPolishRetrieval(wmPolishInventory); if (res2 == 0) { Context.Ado.RollbackTran(); throw new Exception("抛光质检记录出库失败"); } } Context.Ado.CommitTran(); return res0; } catch (Exception e) { Context.Ado.RollbackTran(); throw new Exception(e.Message); } } /// /// 修改抛光管理-质量统计 /// /// /// public int UpdateWmPolishQualityStatistics(WmPolishQualityStatistics 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.IsOver) { model.Type = 1; } else { model.Type = 0; } return Update(model, true); } catch (Exception e) { throw new Exception(e.Message); } } /// /// 检查零件号是否是门把手 /// /// public bool CheckIsDoorknob(string partnumber) { string[] checkStrArray = { "门把手", "面盖", "T22", "T26", "A58", "A60", "C01", "B02", "V71", "T1EJ", "倒车雷达" }; var isDoorknobCheck = Expressionable.Create(); foreach (string checkStr in checkStrArray) { isDoorknobCheck.Or(it => it.Description.Contains(checkStr)); } ; isDoorknobCheck .And(it => it.Partnumber == partnumber) .And(it => it.Type == 1) .And(it => it.Status == 1); return Context.Queryable().Where(isDoorknobCheck.ToExpression()).Any(); } } }