public GL_StationDTO GetStation(GL_StationDTO stationParam) { var query = from Station in DataContext.GL_Station where Station.IsEnabled == true && Station.IsGoldenLine == true && Station.GL_Line.IsEnabled == true && Station.BG_Organization_UID == stationParam.BG_Organization_UID && Station.GL_Line.CustomerID == stationParam.CustomerID && Station.MESStationName == stationParam.StationName select new GL_StationDTO { Plant_Organization_UID = Station.Plant_Organization_UID, BG_Organization_UID = Station.BG_Organization_UID, FunPlant_Organization_UID = Station.FunPlant_Organization_UID, StationName = Station.StationName, MESStationName = Station.MESStationName, StationID = Station.StationID, LineID = Station.LineID, CustomerID = Station.GL_Line.CustomerID }; if (query.Count() > 0) { return(query.FirstOrDefault()); } else { return(null); } }
// Add or update station entity public GL_StationDTO AddOrUpdateStation(GL_StationDTO dto, out string errorMessage) { errorMessage = string.Empty; GL_Station entity = AutoMapper.Mapper.Map <GL_Station>(dto); if (entity.IsBirth == true || entity.IsOutput == true) { var entities = _stationRepository.GetMany(x => x.LineID == entity.LineID); if (entity.IsBirth == true) { foreach (var e in entities) { e.IsBirth = false; } } if (entity.IsOutput == true) { foreach (var e in entities) { e.IsOutput = false; } } } try { GL_Station entityContext; if (dto.StationID == 0) { entity.MESStationName = entity.MESStationName ?? ""; entityContext = _stationRepository.Add(entity); _unitOfWork.Commit(); } else { entityContext = _stationRepository.GetById(entity.StationID); entityContext.Seq = entity.Seq; entityContext.StationName = entity.StationName; entityContext.MESStationName = entity.MESStationName ?? ""; entityContext.CycleTime = entity.CycleTime; entityContext.IsBirth = entity.IsBirth; entityContext.IsOutput = entity.IsOutput; entityContext.IsTest = entity.IsTest; entityContext.Modified_UID = entity.Modified_UID; entityContext.Modified_Date = entity.Modified_Date; entityContext.IsEnabled = entity.IsEnabled; entityContext.DashboardTarget = entity.DashboardTarget; _stationRepository.Update(entityContext); _unitOfWork.Commit(); } var returnDto = AutoMapper.Mapper.Map <GL_StationDTO>(entityContext); return(returnDto); } catch (Exception ex) { errorMessage = ex.Message; return(null); } }
public GL_StationDTO AddOrUpdateStation(dynamic values) { GL_StationDTO dto = JsonConvert.DeserializeObject <GL_StationDTO>(values.ToString()); string errorMessage = string.Empty; dto = _goldenLineService.AddOrUpdateStation(dto, out errorMessage); if (string.IsNullOrEmpty(errorMessage)) { return(dto); } else { return(null); } }
/// <summary> /// 执行 /// </summary> public void ExcuteGL_WIPHourOutput(DateTime excuteTime) { try { #region //1 获取所有的customter var customerList = GL_WIPHourOutputRepository.GetAllEnGL_Customer(); foreach (var customerModel in customerList) { //根据OP获取设置的班次 var shiftModelList = GL_WIPHourOutputRepository.GetShiftTimeList(customerModel.Organization_UID); //获取当前属于哪个生产日期 如果当前“时间”不加日期的时间小于 var currentDayTemp1 = excuteTime.AddMinutes(-5).ToShortTimeString(); var currentDay = excuteTime.AddMinutes(-5).ToString("yyyy-MM-dd"); var currentTime = excuteTime.AddMinutes(-5).ToString("yyyy-MM-dd HH:mm"); GL_ShiftTimeDTO ShiftTimeModel = new GL_ShiftTimeDTO(); //取出白天还是夜晚 同步12区间小时 var ShiftTimeID = 0; var actHourIndex = 0; var shiftdate = string.Empty; Dictionary <string, int> outputDic = new Dictionary <string, int>(); #region 2 判断当前时间是那个班次 var currentdate = Convert.ToDateTime(currentTime); foreach (var item in shiftModelList) { if (DateTime.Compare(DateTime.Parse(currentDayTemp1), DateTime.Parse(item.StartTime)) < 0 && DateTime.Compare(DateTime.Parse(item.StartTime), DateTime.Parse(item.End_Time)) < 0) { currentDay = excuteTime.AddDays(-1).AddMinutes(-5).ToString("yyyy-MM-dd"); } var startTimeDate = Convert.ToDateTime(currentDay + " " + item.StartTime); var endTimeDate = Convert.ToDateTime(currentDay + " " + item.End_Time); if (startTimeDate < endTimeDate) { endTimeDate = endTimeDate.AddDays(1); } int hourIndex = Math.Abs(endTimeDate.Hour - startTimeDate.Hour); //actHourIndex = hourIndex; for (int k = 0; k < hourIndex; k++) { //如果是相等刚好是跨天的哪一个小时 var flag = currentdate >= startTimeDate.AddHours(k) && currentdate < startTimeDate.AddHours(k + 1); if (flag) { shiftdate = startTimeDate.ToString("yyyy-MM-dd"); actHourIndex = k + 1; ShiftTimeID = item.ShiftTimeID; //调用接口 outputDic = GoldenLineRepository.GetOutput(customerModel.MESProject_Name, string.Empty, startTimeDate.AddHours(k), startTimeDate.AddHours(k + 1), item.Plant_Organization_UID); break; } } } #endregion List <GL_WIPHourOutputDTO> addList = new List <GL_WIPHourOutputDTO>(); List <GL_WIPHourOutputDTO> updateList = new List <GL_WIPHourOutputDTO>(); //3 添加和更新数据 foreach (var itemKeyValue in outputDic) { GL_StationDTO stationModel = new GL_StationDTO(); stationModel.StationName = itemKeyValue.Key; stationModel.ProjectName = customerModel.Project_Name; stationModel.BG_Organization_UID = customerModel.Organization_UID; stationModel.CustomerID = customerModel.Project_UID; //判断配置的工站表里面有个是否存在该工站 var stationResult = GL_WIPHourOutputRepository.GetStation(stationModel); if (stationResult == null) { continue; } GL_WIPHourOutputDTO hourOutputModel = new GL_WIPHourOutputDTO(); hourOutputModel.CustomerID = customerModel.Project_UID; hourOutputModel.LineID = stationResult.LineID; hourOutputModel.StationID = stationResult.StationID; hourOutputModel.AssemblyID = 0; hourOutputModel.OutputDate = currentdate; hourOutputModel.ShiftTimeID = ShiftTimeID; hourOutputModel.HourIndex = actHourIndex; hourOutputModel.ActualOutput = itemKeyValue.Value; hourOutputModel.StandOutput = 0; hourOutputModel.ShiftDate = shiftdate; var model = GL_WIPHourOutputRepository.GetGL_WIPHourOutputBy(hourOutputModel); if (model == null) { addList.Add(hourOutputModel); } else { hourOutputModel.WHOID = model.WHOID; updateList.Add(hourOutputModel); } } GL_WIPHourOutputRepository.AddGL_WIPHourOutput(addList); GL_WIPHourOutputRepository.UpDateGL_WIPHourOutput(updateList); } #endregion } catch (Exception ex) { //后续记录到失败日志表 } }
public string AddOrUpdateGLStationsAPI(GL_StationDTO dto, bool isEdit) { var result = _goldenLineService.AddOrUpdateGLStations(dto, isEdit); return(result); }
public string AddOrUpdateGLStations(GL_StationDTO dto, bool isEdit) { string errorMessage = string.Empty; GL_Station entity = AutoMapper.Mapper.Map <GL_Station>(dto); if (entity.IsBirth == true || entity.IsOutput == true) { var entities = _stationRepository.GetMany(x => x.LineID == entity.LineID); if (entity.IsBirth == true) { foreach (var e in entities) { e.IsBirth = false; } } if (entity.IsOutput == true) { foreach (var e in entities) { e.IsOutput = false; } } } try { GL_Station entityContext; if (dto.StationID == 0) { var entities = _stationRepository.GetMany(x => x.LineID == entity.LineID && x.Binding_Seq == dto.Binding_Seq).ToList(); if (entities != null && entities.Count > 0) { return(string.Format("此线下已经有绑定序号{0}", dto.Binding_Seq)); } entity.MESStationName = entity.MESStationName ?? ""; entityContext = _stationRepository.Add(entity); _unitOfWork.Commit(); } else { entityContext = _stationRepository.GetById(entity.StationID); entityContext.Seq = entity.Seq; entityContext.StationName = entity.StationName; entityContext.MESStationName = entity.MESStationName ?? ""; entityContext.CycleTime = entity.CycleTime; entityContext.IsBirth = entity.IsBirth; entityContext.IsOutput = entity.IsOutput; entityContext.IsTest = entity.IsTest; entityContext.DashboardTarget = entity.DashboardTarget; entityContext.Binding_Seq = entity.Binding_Seq; entityContext.IsGoldenLine = entity.IsGoldenLine; entityContext.IsOEE = entity.IsOEE; entityContext.IsOne = entity.IsOne; entityContext.IsTwo = entity.IsTwo; entityContext.IsThree = entity.IsThree; entityContext.IsFour = entity.IsFour; entityContext.IsFive = entity.IsFive; entityContext.Modified_UID = entity.Modified_UID; entityContext.Modified_Date = entity.Modified_Date; entityContext.IsEnabled = dto.IsEnabled; _stationRepository.Update(entityContext); _unitOfWork.Commit(); } return("0"); } catch (Exception ex) { errorMessage = ex.Message; return(ex.Message); } }
public static TimeIntervalDTO GetTimeIntervalDTO(List <GL_ShiftTimeDTO> shiftTimeDTOs, GL_StationDTO item, DateTime dateNow) { TimeIntervalDTO timeIntervalDTO = new TimeIntervalDTO(); #region IPQC获取班次相关 //获取当前站点所在厂区,OP的所有班次 var shiftTimes = shiftTimeDTOs.Where(o => o.Plant_Organization_UID == item.Plant_Organization_UID && o.BG_Organization_UID == item.BG_Organization_UID); //得到当前dateNow时间所属的班次 var shiftTimeDTO = GetGL_ShiftTimeDTO(shiftTimes.ToList(), dateNow); if (shiftTimeDTO != null) { //得到所属时间dateNow 所在班次的开始时间和技术时间 DateTime StartTime = Convert.ToDateTime((dateNow.ToString("yyyy-MM-dd ") + shiftTimeDTO.StartTime)); DateTime EndTime = Convert.ToDateTime((dateNow.ToString("yyyy-MM-dd ") + shiftTimeDTO.End_Time)); //同步当前班次的数据 if (StartTime > EndTime) { StartTime = StartTime.AddDays(-1); } timeIntervalDTO.ShiftTimeID = shiftTimeDTO.ShiftTimeID; timeIntervalDTO.StartTime = StartTime; timeIntervalDTO.EndTime = EndTime; timeIntervalDTO.NowDateTime = dateNow; timeIntervalDTO.ProductDate = Convert.ToDateTime(StartTime.ToString(FormatConstants.DateTimeFormatStringByDate)); //设置第几个时间段 timeIntervalDTO.TimeIntervalIndex = GetTimeIntervalIndex(timeIntervalDTO); //设置时间段字符串 timeIntervalDTO = GetTimeInterval(timeIntervalDTO); } #endregion return(timeIntervalDTO); }
public static List <GL_IPQCQualityReportDTO> GetGL_IPQCQualityReportDTOs(GL_StationDTO item, List <GL_IPQCQualityReportDTO> iPQCQualityReportDTOs, TimeIntervalDTO timeIntervalDTO, List <WP_IPQCDTO> ScanINs, List <WP_IPQCDTO> ScanBACKs, List <WP_IPQCDTO> ScanNGs, List <WP_IPQCDTO> ScanOUTs, GL_QADetectionPointDTO gL_QADetectionPointDTO) { IPQCQualityService iPQCQualityService = new IPQCQualityService( new UnitOfWork(_DatabaseFactory), new IPQCQUalityReportRepository(_DatabaseFactory), new GL_QADetectionPointRepository(_DatabaseFactory), new GL_ShiftTimeRepository(_DatabaseFactory), new GL_StationRepository(_DatabaseFactory), new GL_QATargetYieldRepository(_DatabaseFactory), new IPQCQualityDetialRepository(_DatabaseFactory), new GL_GoldenStationCTRecordRepository(_DatabaseFactory), new GL_WIPHourOutputRepository(_DatabaseFactory) ); GL_IPQCQualityReportDTO gL_IPQCQualityReportDTO = new GL_IPQCQualityReportDTO(); #region IPQC时段良率数据组装 gL_IPQCQualityReportDTO.StationID = item.StationID; gL_IPQCQualityReportDTO.ShiftID = timeIntervalDTO.ShiftTimeID; gL_IPQCQualityReportDTO.TimeInterval = timeIntervalDTO.TimeInterval; gL_IPQCQualityReportDTO.TimeIntervalIndex = timeIntervalDTO.TimeIntervalIndex; gL_IPQCQualityReportDTO.ProductDate = timeIntervalDTO.ProductDate; //进料数 gL_IPQCQualityReportDTO.InputNumber = GetInputNumber(timeIntervalDTO, item.StationID); //扫码 IN gL_IPQCQualityReportDTO.TestNumber = ScanINs != null ? ScanINs.Count : 0; //返修 gL_IPQCQualityReportDTO.RepairNumber = ScanBACKs != null ? ScanBACKs.Count : 0; //NG gL_IPQCQualityReportDTO.NGNumber = ScanNGs != null ? ScanNGs.Count : 0; //二次OK数 OUT数 gL_IPQCQualityReportDTO.SecondPassNumber = ScanOUTs != null ? ScanOUTs.Count : 0; //一次OK数 (MES-IPQC扫码IN)-(MES-IPQC返修)-(MES-IPQC-NG) gL_IPQCQualityReportDTO.FirstPassNumber = gL_IPQCQualityReportDTO.TestNumber - gL_IPQCQualityReportDTO.RepairNumber - gL_IPQCQualityReportDTO.NGNumber; #region 设置一次二次良率 //一次良率 一次OK数/一次检验数 if (gL_IPQCQualityReportDTO.FirstPassNumber != 0 && gL_IPQCQualityReportDTO.TestNumber != 0) { gL_IPQCQualityReportDTO.FirstYield = (gL_IPQCQualityReportDTO.FirstPassNumber * 1.0) / gL_IPQCQualityReportDTO.TestNumber; } else { gL_IPQCQualityReportDTO.FirstYield = 0.0; } //二次良率 二次OK数/(二次OK数+NG数) if (gL_IPQCQualityReportDTO.SecondPassNumber != 0) { gL_IPQCQualityReportDTO.SecondYield = (gL_IPQCQualityReportDTO.SecondPassNumber * 1.0) / (gL_IPQCQualityReportDTO.SecondPassNumber + gL_IPQCQualityReportDTO.NGNumber); } else { gL_IPQCQualityReportDTO.SecondYield = 0.0; } #endregion #region 设置一次二次目标良率 var gLQATargetYieldDTOs = iPQCQualityService.GetGLQATargetYieldDTOList(item.StationID, timeIntervalDTO.ProductDate.ToString(FormatConstants.DateTimeFormatStringByDate)); if (gLQATargetYieldDTOs != null && gLQATargetYieldDTOs.Count > 0) { var oneTargetYield = gLQATargetYieldDTOs.FirstOrDefault(o => o.Tag == 1); if (oneTargetYield != null) { //一次目标良率 gL_IPQCQualityReportDTO.FirstTargetYield = Convert.ToDouble(oneTargetYield.TargetYield); } else { //一次目标良率 gL_IPQCQualityReportDTO.FirstTargetYield = 0; } var twoTargetYield = gLQATargetYieldDTOs.FirstOrDefault(o => o.Tag == 2); if (twoTargetYield != null) { //二次目标良率 gL_IPQCQualityReportDTO.SecondTargetYield = Convert.ToDouble(twoTargetYield.TargetYield); } else { //二次目标良率 gL_IPQCQualityReportDTO.SecondTargetYield = 0; } } else { //一次目标良率 gL_IPQCQualityReportDTO.FirstTargetYield = 0; //二次目标良率 gL_IPQCQualityReportDTO.SecondTargetYield = 0; } #endregion //WIP gL_IPQCQualityReportDTO.WIP = gL_QADetectionPointDTO.WIP + gL_IPQCQualityReportDTO.InputNumber - gL_IPQCQualityReportDTO.NGNumber - gL_IPQCQualityReportDTO.SecondPassNumber;// - gL_IPQCQualityReportDTO.FirstPassNumber; gL_IPQCQualityReportDTO.ModifyTime = DateTime.Now; gL_IPQCQualityReportDTO.NowDateTime = timeIntervalDTO.NowDateTime; gL_IPQCQualityReportDTO.SerchEndTime = timeIntervalDTO.SerchEndTime; gL_IPQCQualityReportDTO.SerchStartTime = timeIntervalDTO.SerchStartTime; // 需要查看数据是否存在 如果存在 则要把IPQCQualityReport_UID赋值 var iPQCQualityReportDTO = iPQCQualityService.GetGLIPQCQualityReportDTO(item.StationID, timeIntervalDTO.ShiftTimeID, timeIntervalDTO.TimeIntervalIndex, timeIntervalDTO.ProductDate, timeIntervalDTO.TimeInterval); if (iPQCQualityReportDTO != null) { gL_IPQCQualityReportDTO.IPQCQualityReport_UID = iPQCQualityReportDTO.IPQCQualityReport_UID; } iPQCQualityReportDTOs.Add(gL_IPQCQualityReportDTO); #endregion return(iPQCQualityReportDTOs); }
public static List <GL_IPQCQualityDetialDTO> GetGL_IPQCQualityDetialDTOs(GL_StationDTO item, List <GL_IPQCQualityDetialDTO> gL_IPQCQualityDetialDTOs, TimeIntervalDTO timeIntervalDTO, List <WP_IPQCDTO> ScanBACKs, List <WP_IPQCDTO> ScanNGs) { IPQCQualityService iPQCQualityService = new IPQCQualityService( new UnitOfWork(_DatabaseFactory), new IPQCQUalityReportRepository(_DatabaseFactory), new GL_QADetectionPointRepository(_DatabaseFactory), new GL_ShiftTimeRepository(_DatabaseFactory), new GL_StationRepository(_DatabaseFactory), new GL_QATargetYieldRepository(_DatabaseFactory), new IPQCQualityDetialRepository(_DatabaseFactory), new GL_GoldenStationCTRecordRepository(_DatabaseFactory), new GL_WIPHourOutputRepository(_DatabaseFactory) ); #region IPQC不良明细数据组装 //或取指定时间段的明细数据 var allGLIPQCQualityDetialDTOs = iPQCQualityService.GetAllGL_IPQCQualityDetialDTO(item.StationID, timeIntervalDTO.ShiftTimeID, timeIntervalDTO.TimeIntervalIndex, timeIntervalDTO.ProductDate, timeIntervalDTO.TimeInterval); if (ScanBACKs != null) { #region 返修不良明细 var groupScanBACKs = ScanBACKs.GroupBy(a => a.DefectName).Select(g => (new { name = g.Key, count = g.Count() })).ToList(); foreach (var itemBACK in groupScanBACKs) { GL_IPQCQualityDetialDTO gL_IPQCQualityDetialDTO = new GL_IPQCQualityDetialDTO(); gL_IPQCQualityDetialDTO.StationID = item.StationID; gL_IPQCQualityDetialDTO.ShiftID = timeIntervalDTO.ShiftTimeID; gL_IPQCQualityDetialDTO.TimeInterval = timeIntervalDTO.TimeInterval; gL_IPQCQualityDetialDTO.TimeIntervalIndex = timeIntervalDTO.TimeIntervalIndex; gL_IPQCQualityDetialDTO.ProductDate = timeIntervalDTO.ProductDate; gL_IPQCQualityDetialDTO.NGName = itemBACK.name; gL_IPQCQualityDetialDTO.NGNumber = itemBACK.count; gL_IPQCQualityDetialDTO.NGType = "0"; gL_IPQCQualityDetialDTO.ModifyTime = DateTime.Now; // 需要查看数据是否存在, 如果存在 则要把IPQCQualityDetial_UID赋值 if (allGLIPQCQualityDetialDTOs != null && allGLIPQCQualityDetialDTOs.Count > 0) { var iPQCQualityDetialDTO = allGLIPQCQualityDetialDTOs.FirstOrDefault(o => o.NGName == itemBACK.name && o.NGType == "0"); if (iPQCQualityDetialDTO != null) { gL_IPQCQualityDetialDTO.IPQCQualityDetial_UID = iPQCQualityDetialDTO.IPQCQualityDetial_UID; } } gL_IPQCQualityDetialDTOs.Add(gL_IPQCQualityDetialDTO); } #endregion } if (ScanNGs != null) { #region NG不良明细 var groupScanNGs = ScanNGs.GroupBy(a => a.DefectName).Select(g => (new { name = g.Key, count = g.Count() })).ToList(); foreach (var itemNG in groupScanNGs) { GL_IPQCQualityDetialDTO gL_IPQCQualityDetialDTO = new GL_IPQCQualityDetialDTO(); gL_IPQCQualityDetialDTO.StationID = item.StationID; gL_IPQCQualityDetialDTO.ShiftID = timeIntervalDTO.ShiftTimeID; gL_IPQCQualityDetialDTO.TimeInterval = timeIntervalDTO.TimeInterval; gL_IPQCQualityDetialDTO.TimeIntervalIndex = timeIntervalDTO.TimeIntervalIndex; gL_IPQCQualityDetialDTO.ProductDate = timeIntervalDTO.ProductDate; gL_IPQCQualityDetialDTO.NGName = itemNG.name; gL_IPQCQualityDetialDTO.NGNumber = itemNG.count; gL_IPQCQualityDetialDTO.NGType = "1"; gL_IPQCQualityDetialDTO.ModifyTime = DateTime.Now; // 需要查看数据是否存在, 如果存在 则要把IPQCQualityDetial_UID赋值 if (allGLIPQCQualityDetialDTOs != null && allGLIPQCQualityDetialDTOs.Count > 0) { var iPQCQualityDetialDTO = allGLIPQCQualityDetialDTOs.FirstOrDefault(o => o.NGName == itemNG.name && o.NGType == "1"); if (iPQCQualityDetialDTO != null) { gL_IPQCQualityDetialDTO.IPQCQualityDetial_UID = iPQCQualityDetialDTO.IPQCQualityDetial_UID; } } gL_IPQCQualityDetialDTOs.Add(gL_IPQCQualityDetialDTO); } #endregion } #endregion return(gL_IPQCQualityDetialDTOs); }