using AutoMapper; using Cksoft.Data; using Cksoft.Data.Repository; using DllEapCommon.NPOI; using DllEapDal; using DllEapDal.OFILM; using DllEapEntity; using DllEapEntity.Dtos; using DllEapEntity.Mes; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Data; using System.Threading.Tasks; namespace DllUnityWebApi { /// /// 数据分析 /// [Route("Eap/Api/[controller]/[action]")] [ApiController] [Authorize] public class Analysis2Controller : ControllerBase { private IDatabase db; private IMapper _mapper; private string commonFilter = $" and EventCode='{DllHsms.StandardCode.CEID_AlarmOccurred}'"; public Analysis2Controller(IMapper mapper) { _mapper = mapper; } /// /// 一段时间内机台报警 /// /// /// /// [HttpGet] public ChartDto GetAlarmAnalysis(string mainFilter, string subFilter) { using (db = DbFactory.Base("eapslave")) { var dal = new McaEventStatisticByDayDal(db); var dto = dal.CreateCategory(mainFilter + commonFilter, subFilter); return dto; } } /// /// MTBA图表 /// /// /// [HttpGet] public ChartDto2 GetMtbaAnalysis(DateTime startTime, DateTime endTime, string tablename, string subFilter, string sub) { using (db = DbFactory.Base("eapslave")) { var dal = new McaEventStatisticByDayDal(db); var dto = dal.CreateMtbaCategory(startTime, endTime, tablename, subFilter, sub); return dto; } } /// /// 机台报警统计报表数据 /// /// /// /// /// /// /// [HttpGet] public IEnumerable GetMachineAlarmDtos(string filter, string subFilter, string sortField = "count", string sortOrder = "ascend", int take = 10) { if (sortOrder == "descend") { sortOrder = "desc"; } else { sortOrder = "asc"; } using (db = DbFactory.Base("eapslave")) { var dal = new McaEventStatisticByDayDal(db); var dtos = dal.GetAlarmAnalysis(filter + commonFilter, subFilter, sortField, sortOrder, take); return dtos; } } /// /// 机台报警统计 /// /// /// [HttpPost] public async Task ExportMachineAlarmDtos(IDictionary filterInfo) { string filter = string.Empty, subFilter = string.Empty; string sortField = "count"; string sortOrder = "ascend"; int take = 10000; if (filterInfo.ContainsKey("filter")) { filter = filterInfo["filter"]; } if (filterInfo.ContainsKey("subFilter")) { subFilter = filterInfo["subFilter"]; } if (filterInfo.ContainsKey("sortField")) { filter = filterInfo["sortField"]; } if (filterInfo.ContainsKey("sortOrder")) { filter = filterInfo["sortOrder"]; } if (filterInfo.ContainsKey("take")) { filter = filterInfo["take"]; } using (db = DbFactory.Base("eapslave")) { var dal = new McaEventStatisticByDayDal(db); var dtos = dal.GetAlarmAnalysis(filter + commonFilter, subFilter, sortField, sortOrder, take); var list = _mapper.Map>(dtos).ToList(); var book = DataExportHelper.EntityToExcel(list); MemoryStream ms = new MemoryStream(); ms.Position = 0; book.Write(ms); ms.Dispose(); ms.Close(); await Task.CompletedTask; return File(ms.ToArray(), "application/octet-stream"); } } [HttpGet] public LayuiModel GetAlarmCodeGrid(string filter, string subFilter, int pageSize = 10, int pageIndex = 1) { using (db = DbFactory.Base("eapslave")) { var dal = new McaEventStatisticByDayDal(db); int total; var dtos = dal.GetAlarmCodeAnalysis(filter + commonFilter, subFilter, pageSize, pageIndex, out total); return new LayuiModel { code = 0, msg = "ok", count = total, data = dtos }; } } /// /// 一段时间内报警代码 /// /// 开始时间 /// 结束时间 /// 机型编码 /// 制程 /// [HttpGet] public ChartDto GetAlarmAnalysisByCode(string filter, string subFilter) { using (db = DbFactory.Base("eapslave")) { var dal = new McaEventStatisticByDayDal(db); var dto = dal.CreateAlarmCat(filter + commonFilter, subFilter); return dto; } } /// /// 获取所有的机型 /// /// [HttpGet] public IEnumerable GetMacModels() { using (db = DbFactory.Base("eapslave")) { var dal = new MacModelDal(db); var models = dal.Get(); return models; } } /// /// 获取所有制程 /// /// [HttpGet] public IEnumerable GetProcesses() { using (db = DbFactory.Base("eapslave")) { var dal = new TProcessDal(db); var models = dal.Get(); return models; } } /// /// 报警代码统计报表数据 /// /// /// /// /// /// /// /// /// [HttpGet] public LayuiModel GetCodeAlarmDtos(string filter, string subFilter, int pageSize, int pageIndex, string sortField = "count", string sortOrder = "descend", int take = 10) { if (sortOrder == "descend") { sortOrder = "desc"; } else { sortOrder = "asc"; } using (db = DbFactory.Base("eapslave")) { var dal = new McaEventStatisticByDayDal(db); int total; var dtos = dal.GetAlarmCodeAnalysis(filter + commonFilter, subFilter, pageSize, pageIndex, out total, sortField, sortOrder); return new LayuiModel { code = 1, count = total, msg = string.Empty, data = dtos }; } } /// /// 报警代码统计导出 /// /// /// [HttpPost] public async Task ExportCodeAlarmDtos(IDictionary filterInfo) { string filter = string.Empty, subFilter = string.Empty; if (filterInfo.ContainsKey("filter")) { filter = filterInfo["filter"]; } if (filterInfo.ContainsKey("subFilter")) { subFilter = filterInfo["subFilter"]; } using (db = DbFactory.Base("eapslave")) { var dal = new McaEventStatisticByDayDal(db); int total; var dtos = dal.GetAlarmCodeAnalysis(filter + commonFilter, subFilter, 100000, 1, out total, "count", "desc"); var list = _mapper.Map>(dtos).ToList(); var book = DataExportHelper.EntityToExcel(list); MemoryStream ms = new MemoryStream(); ms.Position = 0; book.Write(ms); ms.Dispose(); ms.Close(); await Task.CompletedTask; return File(ms.ToArray(), "application/octet-stream"); } } /// /// 获取LHA数据采集报表数据 /// /// /// /// /// /// /// /// /// [HttpGet] public LayuiModel GetLHADataDtos(string filter, string subFilter, string macCode, int pageSize, int pageIndex, string sortField = "time", string sortOrder = "asc") { if (sortOrder == "asc") { sortOrder = "asc"; } else { sortOrder = "asc"; } using (db = DbFactory.Base("eapslave")) { var dal = new McaEventStatisticByDayDal(db); int total; //var machinedal = new MachineDal(db); //if (machinedal.GetCount($" and a.FCode='{macCode}'") == 0) //{ // return new LayuiModel // { // code = -1, // count = 0, // msg = "机台号不存在!", // data = null // }; //} var dtos = dal.GetLHADataAnalysis(filter, subFilter, pageSize, pageIndex, out total, sortField, sortOrder); return new LayuiModel { code = 1, count = total, msg = string.Empty, data = dtos }; } } /// /// LHA数据采集导出 /// /// /// [HttpPost] public async Task ExportLHADataDtos(IDictionary filterInfo) { string filter = string.Empty, subFilter = string.Empty, macCode = string.Empty, sortField = "time", sortOrder = "asc"; int pageSize = 100000, pageIndex = 1; if (filterInfo.ContainsKey("filter")) { filter = filterInfo["filter"]; } if (filterInfo.ContainsKey("subFilter")) { subFilter = filterInfo["subFilter"]; } if (filterInfo.ContainsKey("macCode")) { macCode = filterInfo["macCode"]; } if (filterInfo.ContainsKey("sortField")) { sortField = filterInfo["sortField"]; } if (filterInfo.ContainsKey("sortOrder")) { sortOrder = filterInfo["sortOrder"]; } if (filterInfo.ContainsKey("pageSize") && !string.IsNullOrEmpty(filterInfo["pageSize"])) { pageSize = Convert.ToInt32(filterInfo["pageSize"]) > 0 ? Convert.ToInt32(filterInfo["pageSize"]) : pageSize; } if (filterInfo.ContainsKey("pageIndex") && !string.IsNullOrEmpty(filterInfo["pageIndex"])) { pageIndex = Convert.ToInt32(filterInfo["pageIndex"]) > 0 ? Convert.ToInt32(filterInfo["pageIndex"]) : pageIndex; } var roles = GetLHADataDtos(filter, subFilter, macCode, pageSize, pageIndex).data; var list = _mapper.Map>(roles).ToList(); var book = DataExportHelper.EntityToExcel(list); MemoryStream ms = new MemoryStream(); ms.Position = 0; book.Write(ms); ms.Dispose(); ms.Close(); await Task.CompletedTask; return File(ms.ToArray(), "application/octet-stream"); } /// /// 机台报警清单报表数据 /// /// /// /// /// /// /// /// /// /// [HttpGet] public LayuiModel GetAlarmCodeDetail(string filter, string subFilter, string sub, string sort, int pageIndex = 1, int pageSize = 10, string sortField = "ptime", string sortOrder = "descend") { if (!string.IsNullOrEmpty(sort)) { string[] arr = sort.Split(","); sortField = arr[0]; sortOrder = arr[1]; } if (sortOrder == "descend") { sortOrder = "desc"; } else { sortOrder = "asc"; } int start, end; start = (pageIndex - 1) * pageSize + 1; end = start + pageSize; using (db = DbFactory.Base("eapslave")) { var dal = new McaEventStatisticByDayDal(db); int count; var dtos = dal.GetAramCodeDetail(filter + commonFilter, subFilter, sub, start, pageSize, out count, sortField, sortOrder); // int count = dal.GetAlarmCodeCount(filter + commonFilter); return new LayuiModel() { code = 0, count = count, data = dtos, msg = "ok" }; } } /// /// 机台报警清单导出 /// /// /// [HttpPost] public async Task ExporAlarmCodeDetail(IDictionary filterinfo) { string sortField = string.Empty, sortOrder = "descend", filter = string.Empty, subFilter = string.Empty, sub = string.Empty; int pageIndex = 1, pageSize = 100000; if (filterinfo.ContainsKey("sortField")) { sortField = filterinfo["sortField"]; } if (filterinfo.ContainsKey("sortOrder")) { sortOrder = filterinfo["sortOrder"]; } if (filterinfo.ContainsKey("filter")) { filter = filterinfo["filter"]; } if (filterinfo.ContainsKey("subFilter")) { subFilter = filterinfo["subFilter"]; } if (filterinfo.ContainsKey("sub")) { sub = filterinfo["sub"]; } if (filterinfo.ContainsKey("pageIndex")) { pageIndex = Convert.ToInt32(filterinfo["pageIndex"]); } if (filterinfo.ContainsKey("pageSize")) { pageSize = Convert.ToInt32(filterinfo["pageSize"]); } var dto = GetAlarmCodeDetail(filter, subFilter, sub, null, pageIndex, pageSize, null, sortOrder).data; var list = _mapper.Map>(dto).ToList(); var type = typeof(Nullable); var book = DataExportHelper.EntityToExcel(list); MemoryStream ms = new MemoryStream(); ms.Position = 0; book.Write(ms); ms.Dispose(); ms.Close(); await Task.CompletedTask; return File(ms.ToArray(), "application/octet-stream"); } /// /// /// /// /// /// /// /// /// [HttpGet] public EChartsBar GetMtbfs(string filter, string subFilter, string type, DateType dateType, string codes) { var arr = codes.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); using (db = DbFactory.Base("eapslave")) { McaEventStatisticByDayDal dal = new McaEventStatisticByDayDal(db); return dal.GetMTBFsNew(type, dateType, filter, subFilter, arr); } } /// /// /// /// /// /// /// /// [HttpGet] public LineDateDto GetAlarmTimes(string filter, string subFilter, string type, int isIndex = -1) { using (db = DbFactory.Base("eapslave")) { McaEventStatisticByDayDal dal = new McaEventStatisticByDayDal(db); var entities = dal.GetAlarmTimeDtos(commonFilter + filter, subFilter, type); if (entities != null) { if (isIndex == 1) { entities.LineSeries = entities.LineSeries?.OrderBy(c => c.AlarmTimeDtos.Sum(t => t.Count)).Take(3); } } return entities; } } /// /// /// /// /// /// /// /// /// /// /// /// [HttpGet] public IEnumerable GetMachineEfficiencies(string filter, string subFilter, string type, string macModel, string pCode, int? factoryId, string dateStart = null, string dateEnd = null) { DateTime? start = null, end = null; if (!string.IsNullOrEmpty(dateStart) && dateStart.ToLower() != "null") { start = Convert.ToDateTime(dateStart); } if (!string.IsNullOrEmpty(dateEnd) && dateEnd.ToLower() != "null") { end = Convert.ToDateTime(dateEnd); } using (db = DbFactory.Base("eapslave")) { McaEventStatisticByDayDal dal = new McaEventStatisticByDayDal(db); return dal.GetMachineEfficy(type, filter, subFilter, macModel, pCode, factoryId, start, end); } } /// /// 设备状态监控报表数据 /// /// /// /// /// /// /// /// /// /// [HttpGet] public LayuiModel GetMachineEfficienciesT(string filter, string subFilter, int pageIndex = 1, int pageSize = 10, string sortField = "MacCode", string sortOrder = "ascend", DateTime? startTime = null, DateTime? endTime = null) { string userCode = Request.Headers["usercode"]; DateTime? startt = null, endt = null; double se = 1; //string[] startend = filter.Split('\''); //if (startend.Length > 4) //{ // startt = Convert.ToDateTime(startend[1]); // endt = Convert.ToDateTime(startend[3]); // se = (endt - startt).Value.TotalMinutes; // se = se == 0 ? 1 : se; //} se = ((endTime - startTime).Value.TotalMinutes); if (sortOrder == "descend") { sortOrder = "desc"; } else { sortOrder = "asc"; } if (sortField == "null") { sortField = "MacCode"; } int start, end; start = (pageIndex - 1) * pageSize + 1; end = start + pageSize; using (IDatabase db = DbFactory.Base("eapslave")) { db.BeginTrans(); var dal = new McaEventStatisticByDayDal(db); var total = 0; string errorinfo = string.Empty; IEnumerable roles = dal.GetMachineEfficyMachine(filter, subFilter, start, pageSize, sortField, sortOrder, out total, se); var extra = dal.GetMachineEfficyMachineTotal(filter, subFilter, start, pageSize, sortField, sortOrder, se); return new LayuiModel { code = 1, count = total, data = roles, msg = "", extraObject = extra }; } } /// /// 设备状态监控导出 /// /// /// [HttpPost] public IActionResult ExportMachineEfficiencies([FromBody] dynamic queryData) { string filter = Convert.ToString(queryData.filter); string subFilter = Convert.ToString(queryData.subFilter); int pageIndex = Convert.ToInt32(queryData.pageIndex); int pageSize = Convert.ToInt32(queryData.pageSize); string sortField = Convert.ToString(queryData.sortField); string sortOrder = Convert.ToString(queryData.sortOrder); DateTime? startTime = Convert.ToDateTime(queryData.startTime); DateTime? endTime = Convert.ToDateTime(queryData.endTime); double se = 1; se = ((endTime - startTime).Value.TotalMinutes); string errorinfo = string.Empty; int start, end; start = (pageIndex - 1) * pageSize + 1; end = start + pageSize; using (IDatabase db = DbFactory.Base("eapslave")) { db.BeginTrans(); var dal = new McaEventStatisticByDayDal(db); var total = 0; IEnumerable roles = dal.GetMachineEfficyMachine(filter, subFilter, start, pageSize, sortField, sortOrder, out total, se); var extra = dal.GetMachineEfficyMachineTotal(filter, subFilter, start, pageSize, sortField, sortOrder, se); if (roles == null) { return null; } var buffer = DataExportHelper.ExportMachineEfficiencies(roles, extra, total, ref errorinfo); if (buffer == null) { return null; } MemoryStream ms = new MemoryStream(); ms.Position = 0; ms.Write(buffer, 0, buffer.Length); ms.Dispose(); ms.Close(); return File(buffer, "application/octet-stream"); } } [HttpGet] public IEnumerable GetMachineEfficienciesTExport(string filter, string subFilter, string sortField = "count", string sortOrder = "ascend", int take = 10, DateTime? startTime = null, DateTime? endTime = null) { double se = ((endTime - startTime).Value.TotalDays + 1) * 1440; if (sortOrder == "descend") { sortOrder = "desc"; } else { sortOrder = "asc"; } using (db = DbFactory.Base("eapslave")) { var dal = new McaEventStatisticByDayDal(db); var dtos = dal.GetMachineEfficyMachineExprort(filter, subFilter, sortField, sortOrder, take, se); return dtos; } } /// /// 设备流失总费 /// /// /// /// /// [HttpGet] public LayuiModel GetMachineEfficienciesFactory(string filter, string dateStart = null, string dateEnd = null) { string userCode = Request.Headers["usercode"]; DateTime? start = null, end = null; double se = 1; DateTime dateTime = DateTime.Now; filter = $@" AND a.STime >= '{dateTime.ToString("yyyy-MM-dd 00:00:00")}' AND a.STime <= '{dateTime.ToString("yyyy-MM-dd") + " 23:59"}'"; string[] startend = filter.Split('\''); if (startend.Length > 4) { start = Convert.ToDateTime(startend[1]); end = Convert.ToDateTime(startend[3]); se = (end - start).Value.TotalMinutes; se = se == 0 ? 1 : se; } using (IDatabase db = DbFactory.Base("eapslave")) { db.BeginTrans(); var dal = new McaEventStatisticByDayDal(db); var total = 0; string errorinfo = string.Empty; IEnumerable roles = dal.GetMachineEfficyFactory(filter, se); var extra = 100;//dal.GetTotalInfo(filter, subFilter); return new LayuiModel { code = 1, count = total, data = roles, msg = "", extraObject = extra }; } } [HttpGet] public IEnumerable GetCasMaModels() { using (db = DbFactory.Base("eapslave")) { var dal = new MachineDal(db); return dal.GetCascaders(); } } [HttpGet] [AllowAnonymous] public StatusTotal GetStatusTotal() { Response.Headers.Add("Access-Control-Allow-Origin", "*"); Response.Headers.Add("Access-Control-Allow-Methods", "GET,POST"); var statusShowBll = new DllStatusShowBll.StatusShowBll("eapslave"); return statusShowBll.ReadStatusTotalFromMes(); } [HttpGet] public IEnumerable GetOutputs(string filter, string subFilter) { var errorinfo = string.Empty; using (IDatabase db = DbFactory.Base("eapslave")) { var dal = new McaEventStatisticByDayDal(db); return dal.GetOutputs(filter, subFilter, ref errorinfo); } } [HttpGet] public LayuiModel GetOutputsByProgram(string filter, string subFilter, string sort, int pageIndex = 1, int pageSize = 10) { string sortOrder = "desc"; string sortField = "uph"; if (!string.IsNullOrEmpty(sort)) { var array = sort.Split(new char[] { ',' }); sortField = array[0]; sortOrder = array[1] == "ascend" ? "asc" : "desc"; } int start, end; start = (pageIndex - 1) * pageSize + 1; end = start + pageSize; using (IDatabase db = DbFactory.Base("eapslave")) { var dal = new McaEventStatisticByDayDal(db); var total = dal.GetProgramCountFromMacCount(filter, subFilter); string errorinfo = string.Empty; var roles = dal.GetOutputsByProgram(filter, subFilter, start, pageSize, sortField, sortOrder, ref errorinfo); var extra = dal.GetExtra(filter, subFilter); if (!string.IsNullOrEmpty(errorinfo)) { return new LayuiModel { code = -1, count = 0, data = null, msg = errorinfo }; } return new LayuiModel { code = 1, count = total, data = roles, extra = extra, msg = "" }; } } [HttpGet] public int GetCurrentOutput() { var errorinfo = string.Empty; var filter = $" and a.FDate>='{DateTime.Now.ToString("yyyy-MM-dd 00:00:00.000")}' and a.FDate<='{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}'"; filter += " and f.FCode='WB'"; using (IDatabase db = DbFactory.Base("eapslave")) { int count; int total; var dal = new McaEventStatisticByDayDal(db); var outputs = dal.GetMachineOutput(filter, out count, out total, ref errorinfo, 1, 10000); return outputs?.Sum(c => c.Count) ?? 0; } } [HttpGet] public LayuiModel GetOees(string filter, DateTime dateStart, DateTime dateEnd, int pageIndex = 1, int pageSize = 10) { using (IDatabase db = DbFactory.Base("eapslave")) { var dal = new McaEventStatisticByDayDal(db); var entities = dal.GetOeeEntities(filter, dateStart, dateEnd); var total = entities.Count(); entities = entities.OrderBy(c => c.MacCode).Skip((pageIndex - 1) * pageSize).Take(pageSize); var layModel = new LayuiModel { code = 1, msg = string.Empty, count = total, data = entities }; return layModel; } } } }