123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243 |
- using AutoMapper;
- using Core.Dtos;
- using Newtonsoft.Json;
- using NPOI.SS.Formula.Functions;
- using NPOI.Util;
- using OfficeOpenXml.FormulaParsing.Excel.Functions.DateTime;
- using ProductionLineMonitor.Application.Services.OEEService.Dtos;
- using ProductionLineMonitor.Core.IRepositories;
- using ProductionLineMonitor.Core.Models;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace ProductionLineMonitor.Application.Services.OEEService
- {
- public class OEEService : IOEEService
- {
- private readonly IUnitOfWork _unitOfWork;
- public OEEService(IUnitOfWork unitOfWork)
- {
- _unitOfWork = unitOfWork;
- }
- public List<MachineOEEInfo> GetOEE(string machineId, string startDate, string endDate)
- {
- List<MachineOEEInfo> OEES = new List<MachineOEEInfo>();
- DateTime startTime = DateTime.Parse($"{startDate} 08:00:00");
- DateTime endTime = DateTime.Parse($"{endDate} 08:00:00").AddDays(1);
- List<MachineOutPutPerHour> outputs = _unitOfWork.MachineOutPutPerHourRepository
- .GetList(
- x =>
- x.MachineId == machineId &&
- x.DataTime >= startTime &&
- x.DataTime < endTime)
- .OrderBy(
- o =>
- o.DataTime)
- .ToList();
- for (var i = startTime; i < endTime; i = i.AddHours(12))
- {
- DateTime tempTime = i.AddHours(12);
- MachineOEEInfo machineOEE = new MachineOEEInfo
- {
- StartTime = i,
- EndTime = tempTime,
- OutPutPerHours = outputs.FindAll(x => x.DataTime >= i && x.DataTime < tempTime)
- };
- machineOEE.CalculateOEE();
- OEES.Add(machineOEE);
- }
- return OEES;
- }
- /// <summary>
- ///
- /// </summary>
- /// <param name="machineId"></param>
- /// <param name="startDate"></param>
- /// <param name="endDate"></param>
- /// <param name="period">1:天,2:周,3:月</param>
- /// <returns></returns>
- public Dictionary<string, List<MachineOEEInfoByPeriod>> GetOEEByPeriod(string machineIdstr, string startDate, string endDate, int peroid)
- {
- Dictionary<string, List<MachineOEEInfoByPeriod>> OEES_Dic = new Dictionary<string, List<MachineOEEInfoByPeriod>>();
- List<string> machineids = new List<string>(machineIdstr.Split(","));
- DateTime startTime = new DateTime();
- DateTime endTime = new DateTime();
- if (peroid == 1)
- {
- startTime = DateTime.Parse($"{startDate} 08:00:00");
- endTime = DateTime.Parse($"{endDate} 08:00:00").AddDays(1);
- List<MachineOutPutPerHour> outputs = _unitOfWork.MachineOutPutPerHourRepository
- .GetList(
- x =>
- machineids.Contains(x.MachineId) &&
- x.DataTime >= startTime &&
- x.DataTime < endTime)
- .OrderBy(
- o => o.DataTime)
- .ToList();
- foreach (var item in machineids)
- {
- List<MachineOEEInfoByPeriod> OEES = new List<MachineOEEInfoByPeriod>();
- for (var i = startTime; i < endTime; i = i.AddHours(24))
- {
- DateTime tempTime = i.AddHours(24);
- MachineOEEInfoByPeriod machineOEE = new MachineOEEInfoByPeriod
- {
- StartTime = i,
- EndTime = tempTime,
- OutPutPerHours = outputs.FindAll(x => x.DataTime >= i && x.DataTime < tempTime && x.MachineId == item)
- };
- machineOEE.CalculateOEE(peroid, 0);
- OEES.Add(machineOEE);
- }
- OEES_Dic.Add(item, OEES);
- }
- return OEES_Dic;
- }
- else if (peroid == 2)
- {
- startTime = DateTime.Parse($"{startDate} 08:00:00");
- endTime = DateTime.Parse($"{endDate} 08:00:00");
- int week1 = (int)startTime.DayOfWeek;
- int week2 = (int)endTime.DayOfWeek;
- startTime = startTime.AddDays(week1 == 0 ? -6 : 1 - week1);
- endTime = endTime.AddDays(week2 == 0 ? 1 : 8 - week2);
- List<MachineOutPutPerHour> outputs = _unitOfWork.MachineOutPutPerHourRepository
- .GetList(
- x =>
- machineids.Contains(x.MachineId) &&
- x.DataTime >= startTime &&
- x.DataTime < endTime)
- .OrderBy(
- o =>
- o.DataTime)
- .ToList();
- foreach (var item in machineids)
- {
- List<MachineOEEInfoByPeriod> OEES = new List<MachineOEEInfoByPeriod>();
- for (var i = startTime; i < endTime; i = i.AddDays(7))
- {
- DateTime tempTime1 = i.AddDays(7);
- var outputhourslist = new List<MachineOutPutPerHour>();
- for (var j = i; j < tempTime1; j = j.AddDays(1))
- {
- DateTime tempTime2 = j.AddDays(1);
- var outputperhours = outputs.FindAll(x => x.DataTime >= j && x.DataTime < tempTime2 && x.MachineId == item);
- if (outputperhours != null && outputperhours.Count != 0)
- {
- MachineOutPutPerHour machineoutputhour = new MachineOutPutPerHour()
- {
- MachineId = outputperhours[0].MachineId,
- ModuleType = outputperhours[0].ModuleType,
- DataTime = outputperhours[0].DataTime,
- AutoRunTime = outputperhours.Sum(s => s.AutoRunTime.Value),
- AlarmTime = outputperhours.Sum(s => s.AlarmTime.Value),
- IdleTime = outputperhours.Sum(s => s.IdleTime.Value),
- IdleTimeUpstream = outputperhours.Sum(s => s.IdleTimeUpstream.Value),
- IdleTimeDownstream = outputperhours.Sum(s => s.IdleTimeDownstream.Value),
- IdleTimeSelf = outputperhours.Sum(s => s.IdleTimeSelf.Value),
- OutPut = outputperhours.Sum(s => s.OutPut.Value),
- ActualTT = outputperhours.Sum(s => s.ActualTT.Value),
- AlarmSum = outputperhours.Sum(s => s.AlarmSum.Value),
- LoadMATSum = outputperhours.Sum(s => s.LoadMATSum.Value),
- LoadMATTime = outputperhours.Sum(s => s.LoadMATTime.Value),
- CreateTime = outputperhours[0].CreateTime,
- UpdateTime = outputperhours[0].UpdateTime
- };
- outputhourslist.Add(machineoutputhour);
- }
- }
- MachineOEEInfoByPeriod machineOEE = new MachineOEEInfoByPeriod
- {
- StartTime = i,
- EndTime = tempTime1,
- OutPutPerHours = outputhourslist
- };
- machineOEE.CalculateOEE(peroid, 7);
- OEES.Add(machineOEE);
- }
- OEES_Dic.Add(item, OEES);
- }
- return OEES_Dic;
- }
- else
- {
- startTime = DateTime.Parse($"{startDate}-01 08:00:00");
- endTime = DateTime.Parse($"{endDate}-01 08:00:00").AddMonths(1);
- List<MachineOutPutPerHour> outputs = _unitOfWork.MachineOutPutPerHourRepository
- .GetList(
- x =>
- machineids.Contains(x.MachineId) &&
- x.DataTime >= startTime &&
- x.DataTime < endTime)
- .OrderBy(
- o =>
- o.DataTime)
- .ToList();
- foreach (var item in machineids)
- {
- List<MachineOEEInfoByPeriod> OEES = new List<MachineOEEInfoByPeriod>();
- for (var i = startTime; i < endTime; i = i.AddMonths(1))
- {
- DateTime tempTime1 = i.AddMonths(1);
- var outputhourslist = new List<MachineOutPutPerHour>();
- for (var j = i; j < tempTime1; j = j.AddDays(1))
- {
- DateTime tempTime2 = j.AddDays(1);
- var outputperhours = outputs.FindAll(x => x.DataTime >= j && x.DataTime < tempTime2 && x.MachineId == item);
- if ((outputperhours != null && outputperhours.Count != 0))
- {
- MachineOutPutPerHour machineoutputhour = new MachineOutPutPerHour()
- {
- MachineId = outputperhours[0].MachineId,
- ModuleType = outputperhours[0].ModuleType,
- DataTime = outputperhours[0].DataTime,
- AutoRunTime = outputperhours.Sum(s => s.AutoRunTime.Value),
- AlarmTime = outputperhours.Sum(s => s.AlarmTime.Value),
- IdleTime = outputperhours.Sum(s => s.IdleTime.Value),
- IdleTimeUpstream = outputperhours.Sum(s => s.IdleTimeUpstream.Value),
- IdleTimeDownstream = outputperhours.Sum(s => s.IdleTimeDownstream.Value),
- IdleTimeSelf = outputperhours.Sum(s => s.IdleTimeSelf.Value),
- OutPut = outputperhours.Sum(s => s.OutPut.Value),
- ActualTT = outputperhours.Sum(s => s.ActualTT.Value),
- AlarmSum = outputperhours.Sum(s => s.AlarmSum.Value),
- LoadMATSum = outputperhours.Sum(s => s.LoadMATSum.Value),
- LoadMATTime = outputperhours.Sum(s => s.LoadMATTime.Value),
- CreateTime = outputperhours[0].CreateTime,
- UpdateTime = outputperhours[0].UpdateTime
- };
- outputhourslist.Add(machineoutputhour);
- }
- }
- MachineOEEInfoByPeriod machineOEE = new MachineOEEInfoByPeriod
- {
- StartTime = i,
- EndTime = tempTime1,
- OutPutPerHours = outputhourslist
- };
- machineOEE.CalculateOEE(peroid, DateTime.DaysInMonth(i.Year, i.Month));
- OEES.Add(machineOEE);
- }
- OEES_Dic.Add(item, OEES);
- }
- return OEES_Dic;
- }
- }
- }
- }
|