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;
}
}
}
}