using Cksoft.Data;
using DllEapEntity;
using DllEapEntity.Dtos;
using DllHsms;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DllEapDal
{
public class MacStatusAnalysisDal
{
private IDatabase CurrDb = null;
public MacStatusAnalysisDal(IDatabase db)
{
CurrDb = db;
}
///
/// 获取每个机台的最后一个状态
///
///
///
///
public IEnumerable GetMacStatuses(string filter, ref string errorinfo)
{
var sql = $@"select a.FCode macCode,g.FName factory,a.ipaddress,c.FCode macmodelCode,c.FName macmodelName,
d.pCode processCode,f.Fname processName,ifnull(b.statusid,1) statusid,ifnull(h.FName,'离线') statusName from machine a
left join macstatus01 b on a.FCode=b.maccode
left join macmodel c on a.MModeid=c.id
left join mactprocess d on a.id=d.macid
left join tprocess f on d.pcode=f.fcode
left join factoryregion g on a.factoryid=g.id
left join standardstatus h on b.statusid=h.StatusVal";
return CurrDb.FindList(sql);
}
public IEnumerable GetStatusTree(string filter, ref string errorinfo)
{
var dtos = this.GetMacStatuses(filter, ref errorinfo);
var trees = new List();
if (dtos != null && dtos.Count() > 0)
{
var facItem = new MacStatusAnalysisDtoTree
{
Key = "全厂",
Name = "全厂",
Level = 0,
Code = "全厂",
Total = dtos.Count(), // 机台总数
DisConn = dtos.Where(c => c.StatusID == 1)?.Count(), // 未连接
Error = dtos.Where(c => c.StatusID == 6)?.Count(), // 错误
Idle = dtos.Where(c => c.StatusID == 3)?.Count(), // 空闲
Conn = dtos.Where(c => c.StatusID != 1)?.Count(), // 已连接
Run = dtos.Where(c => c.StatusID == 4)?.Count(), // 运行
Pause = dtos.Where(c => c.StatusID == 5)?.Count(),
SetUp = dtos.Where(c => c.StatusID == 2)?.Count()
};
if (facItem.Conn != null)
{
facItem.ConnPercent = facItem.Conn / Convert.ToDecimal(facItem.Total);
}
var factoryGroups = dtos.GroupBy(c => c.Factory);
if (factoryGroups != null && factoryGroups.Count() > 0)
{
var regionTrees = new List();
foreach (var regionItem in factoryGroups)
{
var root = new MacStatusAnalysisDtoTree
{
Key = regionItem.Key,
Name = regionItem.Key,
Code = regionItem.Key,
Level = 1,
Total = regionItem.Count(), // 机台总数
DisConn = regionItem.Where(c => c.StatusID == 1)?.Count(), // 未连接
Error = regionItem.Where(c => c.StatusID == 6)?.Count(), // 错误
Idle = regionItem.Where(c => c.StatusID == 3)?.Count(), // 空闲
Conn = regionItem.Where(c => c.StatusID != 1)?.Count(), // 已连接
Run = regionItem.Where(c => c.StatusID == 4)?.Count(), // 运行
Pause = regionItem.Where(c => c.StatusID == 5)?.Count(),
SetUp = regionItem.Where(c => c.StatusID == 2)?.Count()
};
if (root.Conn != null)
{
root.ConnPercent = root.Conn / Convert.ToDecimal(root.Total);
}
var pcodeGroups = regionItem.GroupBy(c => new { c.ProcessCode, c.ProcessName });
var pcodeTrees = new List();
if (pcodeGroups != null && pcodeGroups.Count() > 0)
{
foreach (var item in pcodeGroups)
{
var pCodeItem = new MacStatusAnalysisDtoTree
{
Key = root.Key + "/" + item.Key.ProcessCode,
Name = item.Key.ProcessName,
Level = 2,
Total = item.Count(), // 机台总数
DisConn = item.Where(c => c.StatusID == 1)?.Count(), // 未连接
Error = item.Where(c => c.StatusID == 6)?.Count(), // 错误
Idle = item.Where(c => c.StatusID == 3)?.Count(), // 空闲
Conn = item.Where(c => c.StatusID != 1)?.Count(), // 已连接
Run = item.Where(c => c.StatusID == 4)?.Count(), // 运行
Pause = item.Where(c => c.StatusID == 5)?.Count(),
SetUp = item.Where(c => c.StatusID == 2)?.Count(),
Code = item.Key.ProcessCode
};
if (pCodeItem.Conn != null)
{
pCodeItem.ConnPercent = pCodeItem.Conn / Convert.ToDecimal(pCodeItem.Total);
}
var macmodelGroups = item.GroupBy(e => new { e.MacModelCode, e.MacModelName });
if (macmodelGroups != null && macmodelGroups.Count() > 0)
{
var modelTrees = new List();
foreach (var modelItem in macmodelGroups)
{
var macmodel = new MacStatusAnalysisDtoTree
{
Key = root.Key + "/" + modelItem.Key.MacModelCode,
Code = modelItem.Key.MacModelCode,
Name = modelItem.Key.MacModelName,
Level = 3,
Total = modelItem.Count(), // 机台总数
DisConn = modelItem.Where(c => c.StatusID == 1)?.Count(), // 未连接
Error = modelItem.Where(c => c.StatusID == 6)?.Count(), // 错误
Idle = modelItem.Where(c => c.StatusID == 3)?.Count(), // 空闲
Conn = modelItem.Where(c => c.StatusID != 1)?.Count(), // 已连接
Run = modelItem.Where(c => c.StatusID == 4)?.Count(), // 运行
Pause = modelItem.Where(c => c.StatusID == 5)?.Count(),
SetUp = modelItem.Where(c => c.StatusID == 2)?.Count()
};
if (macmodel.Conn != null)
{
macmodel.ConnPercent = macmodel.Conn / Convert.ToDecimal(macmodel.Total);
}
#region
//var macTrees = new List();
//foreach (var mac in modelItem)
//{
// var macItem = new OutputTree
// {
// Key = mac.MacCode,
// Name = mac.MacCode,
// Total = mac.Count(), // 机台总数
// DisConn = mac.Where(c => c.StatusID == 1)?.Count(), // 未连接
// Error = mac.Where(c => c.StatusID == 6)?.Count(), // 错误
// Idle = mac.Where(c => c.StatusID == 3)?.Count(), // 空闲
// Conn = mac.Where(c => c.StatusID != 1)?.Count(), // 已连接
// Run = mac.Where(c => c.StatusID == 4)?.Count(), // 运行
// Pause = mac.Where(c => c.StatusID == 5)?.Count(),
// SetUp = mac.Where(c => c.StatusID == 2)?.Count()
// };
// if (mac.TimeLen == 0)
// {
// macItem.UPH = 0;
// }
// else
// {
// macItem.UPH = Convert.ToInt32(Math.Round(macItem.Count / (decimal)macItem.TimeLen * 60 * 60));
// }
// macTrees.Add(macItem);
//}
#endregion
modelTrees.Add(macmodel);
}
pCodeItem.Children = modelTrees;
}
pcodeTrees.Add(pCodeItem);
}
}
root.Children = pcodeTrees;
regionTrees.Add(root);
}
facItem.Children = regionTrees;
}
trees.Add(facItem);
}
return trees;
}
}
}