using IWareDataAccess.EF;
using IWareDataAccess.Entity.Summary;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace IWareDataAccess.Summary
{
public class SummaryStatisticsSqlFunc
{
#region 首页数据统计
///
/// 获取器具的出入库数量
///
///
///
///
///
public static HomeBarEntity GetHomeBarContainerData(string startTime, string endTime, out string msg)
{
try
{
msg = "";
using (Model edm = new Model())
{
HomeBarEntity hbe = new HomeBarEntity();
string sql = @" select A.TYPE as taskType,count(distinct A.TASKID) count,CONVERT(VARCHAR(10),A.CREATETIME,120)time,'1' as type from [dbo].[TASK_RECORD] A left join TASK_TASK B on A.TASKID=B.ID
where (A.TYPE=1 or A.TYPE=2) and A.ITEMID is not null and B.TASKSTATUS=N'完成'
and A.CREATETIME>='{0}' and A.CREATETIME<='{1}'
group by TYPE,CONVERT(VARCHAR(10),A.CREATETIME,120) union
select A.TYPE as taskType,count(distinct A.TASKID) count,CONVERT(VARCHAR(10),A.CREATETIME,120)time,'2' as type from [dbo].[TASK_RECORD] A left join TASK_TASK B on A.TASKID=B.ID
where (A.TYPE=1 or A.TYPE=2) and A.ITEMID is null and B.TASKSTATUS=N'完成'
and A.CREATETIME>='{2}' and A.CREATETIME<='{3}'
group by TYPE,CONVERT(VARCHAR(10),A.CREATETIME,120)";
sql = string.Format(sql, startTime, endTime, startTime, endTime);
List dalst = edm.Database.SqlQuery(sql).ToList();
List timelst = new List();
List timelstNoYear = new List();
string dt = DateTime.Parse(startTime).ToString("yyyy-MM-dd");
string edt = DateTime.Parse(endTime).AddDays(1).ToString("yyyy-MM-dd");
while (dt != edt)
{
timelst.Add(dt);
timelstNoYear.Add(dt.Substring(5));
dt = DateTime.Parse(dt).AddDays(1).ToString("yyyy-MM-dd");
}
List dt1 = new List();
List dt2 = new List();
List dt3 = new List();
List dt4 = new List();
if (timelst != null && timelst.Count > 0)
{
timelst.ForEach(x =>
{
var d1 = dalst.FirstOrDefault(y => y.time == x && y.taskType == 1 && y.type == "2");
if (d1 != null)
{
dt1.Add(d1.count);
}
else
{
dt1.Add(0);
}
var d2 = dalst.FirstOrDefault(y => y.time == x && y.taskType == 1 && y.type == "1");
if (d2 != null)
{
dt2.Add(d2.count);
}
else
{
dt2.Add(0);
}
var d3 = dalst.FirstOrDefault(y => y.time == x && y.taskType == 2&&y.type=="2");
if (d3 != null)
{
dt3.Add(d3.count);
}
else
{
dt3.Add(0);
}
var d4 = dalst.FirstOrDefault(y => y.time == x && y.taskType == 2 && y.type == "1");
if (d4 != null)
{
dt4.Add(d4.count);
}
else
{
dt4.Add(0);
}
});
}
hbe.data = new List();
hbe.xdata = timelstNoYear;
hbe.legend = new List() { "空器具入库", "带件器具入库","空器具出库", "带件器具出库" };
Date dd1= new Date() { name = "空器具入库" };
dd1.xdata = new List();
dd1.xdata.AddRange(dt1);
hbe.data.Add(dd1);
Date dd2 = new Date() { name = "带件器具入库" };
dd2.xdata = new List();
dd2.xdata.AddRange(dt2);
hbe.data.Add(dd2);
Date dd3 = new Date() { name = "空器具出库" };
dd3.xdata = new List();
dd3.xdata.AddRange(dt3);
hbe.data.Add(dd3);
Date dd4 = new Date() { name = "带件器具出库" };
dd4.xdata = new List();
dd4.xdata.AddRange(dt4);
hbe.data.Add(dd4);
return hbe;
}
}
catch (Exception ex)
{
msg = "数据获取失败";
return new HomeBarEntity();
}
}
///
/// 获取零件的出入库数量
///
///
///
///
///
public static HomeBarEntity GetHomeBarItemData(string startTime, string endTime, out string msg)
{
try
{
msg = "";
using (Model edm = new Model())
{
HomeBarEntity hbe = new HomeBarEntity();
string sql = @" select A.TYPE as taskType,SUM(A.ITEMCOUNT) count,CONVERT(VARCHAR(10),A.CREATETIME,120)time,'1' as type from [dbo].[TASK_RECORD] A left join TASK_TASK B on A.TASKID=B.ID
where (A.TYPE=1 or A.TYPE=2) and A.ITEMID is not null and B.TASKSTATUS=N'完成'
and A.CREATETIME>='{0}' and A.CREATETIME<='{1}'
group by TYPE,CONVERT(VARCHAR(10),A.CREATETIME,120)";
sql = string.Format(sql, startTime, endTime);
List dalst = edm.Database.SqlQuery(sql).ToList(); ;
List timelst = new List();
List timelstNoYear = new List();
string dt = DateTime.Parse(startTime).ToString("yyyy-MM-dd");
string edt = DateTime.Parse(endTime).AddDays(1).ToString("yyyy-MM-dd");
while (dt != edt)
{
timelst.Add(dt);
timelstNoYear.Add(dt.Substring(5));
dt = DateTime.Parse(dt).AddDays(1).ToString("yyyy-MM-dd");
}
List dt1 = new List();
List dt2 = new List();
if (timelst != null && timelst.Count > 0)
{
timelst.ForEach(x =>
{
var d1 = dalst.FirstOrDefault(y => y.time == x && y.taskType == 1);
if (d1 != null)
{
dt1.Add(d1.count);
}
else
{
dt1.Add(0);
}
var d2 = dalst.FirstOrDefault(y => y.time == x && y.taskType == 2);
if (d2 != null)
{
dt2.Add(d2.count);
}
else
{
dt2.Add(0);
}
});
}
hbe.xdata = timelstNoYear;
hbe.legend = new List() { "入库", "出库" };
hbe.data = new List();
Date dd1 = new Date() { name = "入库" };
dd1.xdata = new List();
dd1.xdata.AddRange(dt1);
hbe.data.Add(dd1);
Date dd2 = new Date() { name = "出库" };
dd2.xdata = new List();
dd2.xdata.AddRange(dt2);
hbe.data.Add(dd2);
return hbe;
}
}
catch (Exception ex)
{
msg = "数据获取失败";
return new HomeBarEntity();
}
}
///
/// 获取各类型库位数量,占用率
///
///
///
public static List GetHomePieData(out string msg)
{
msg = "";
try
{
using (Model edm = new Model())
{
List hpdlist = new List();
List typelst = edm.BASE_PLACETYPE.ToList();
List placelst = edm.BASE_PLACE.Where(x => x.PLACE.Contains("-")).ToList();
typelst.ForEach(x =>
{
int totalplace = placelst.Where(y => y.PLACETYPEID == x.ID).ToList().Count;
int hascoun = placelst.Where(y => y.PLACETYPEID == x.ID && y.ISFULL == 1).ToList().Count;
HomePieDataEntity hpd = new HomePieDataEntity()
{
placeType=x.PLACETYPE+":"+x.LENGTH+"x"+x.WIDTH+"x"+x.HEIGHT,
placeTotalNum = totalplace,
placeFullNum = hascoun,
placeRate = hascoun == 0 ? "0.00%" : ((hascoun * 10000 / totalplace) / 100.00).ToString()+"%",
placeVal = hascoun,
placeOtherVal = totalplace - hascoun
};
hpdlist.Add(hpd);
});
return hpdlist;
}
}
catch (Exception ex)
{
msg = "数据获取失败";
return new List();
}
}
///
/// 获取当天的出入库库零件,器具,超时数量
///
///
///
public static List GetHomeNumData(out string msg)
{
msg = "";
try
{
using (Model edm = new Model())
{
List hnelist = new List();
var sdt = DateTime.Parse((DateTime.Now.ToString("yyyy-MM-dd")));
var edt = DateTime.Parse(DateTime.Now.AddDays(1).ToString("yyyy-MM-dd"));
var dt = edm.View_TASK_RECORD.Where(x => x.createTime >= sdt && x.createTime <= edt).ToList();
var tdt = edm.TASK_RECORD.Where(x => x.CREATETIME >= sdt && x.CREATETIME <= edt).ToList();
var iitdt = dt.Where(x => x.taskType == 1 && !string.IsNullOrEmpty(x.itemName)).ToList().Sum(x=>x.itemCount);
var oitdt = dt.Where(x => x.taskType == 2 && !string.IsNullOrEmpty(x.itemName)).ToList().Sum(x => x.itemCount);
var icodt = tdt.Where(x => x.TASK_TASK.TASKTYPE == 1).ToList().Select(x=>x.TASKID).Distinct().Count();
var ocodt = tdt.Where(x => x.TASK_TASK.TASKTYPE == 2).ToList().Select(x => x.TASKID).Distinct().Count();
var overdatacoun = edm.View_BASE_PLACE_VS_CONTAINER.Where(x => x.stStatus=="超期").ToList().Count;
hnelist.Add(new HomeNumDataEntity() { no = 1, titel = "今日入库零件数", value = iitdt });
hnelist.Add(new HomeNumDataEntity() { no = 2, titel = "今日出库零件数", value = oitdt });
hnelist.Add(new HomeNumDataEntity() { no = 3, titel = "今日入库器具数", value = icodt });
hnelist.Add(new HomeNumDataEntity() { no = 4, titel = "今日出库器具数", value = ocodt });
hnelist.Add(new HomeNumDataEntity() { no = 5, titel = "超期零件数量", value = overdatacoun });
return hnelist;
}
}
catch (Exception ex)
{
msg = "数据获取失败";
return new List();
}
}
///
/// 获取指定天的出入库库零件,器具,超时数量
///
///
///
public static List GetHomeNumDataByDate(DateTime stday, DateTime edday, out string msg)
{
msg = "";
try
{
using (Model edm = new Model())
{
//第一排
List hvtList = new List();
int dayNum = (DateTime.Parse((edday.ToString("yyyy-MM-dd"))) - DateTime.Parse((stday.AddDays(1).ToString("yyyy-MM-dd")))).Days;
for (int i = 0; i < dayNum; i++)
{
List hnelist = new List();
var sdt = DateTime.Parse((stday.AddDays(i).ToString("yyyy-MM-dd")));
var edt = DateTime.Parse(stday.AddDays(i + 1).ToString("yyyy-MM-dd"));
var dt = edm.View_TASK_RECORD.Where(x => x.createTime >= sdt && x.createTime <= edt).ToList();
var tdt = edm.TASK_RECORD.Where(x => x.CREATETIME >= sdt && x.CREATETIME <= edt).ToList();
var iitdt = dt.Where(x => x.taskType == 1 && !string.IsNullOrEmpty(x.itemName)).ToList().Sum(x => x.itemCount);
var oitdt = dt.Where(x => x.taskType == 2 && !string.IsNullOrEmpty(x.itemName)).ToList().Sum(x => x.itemCount);
var icodt = tdt.Where(x => x.TASK_TASK.TASKTYPE == 1).ToList().Select(x => x.TASKID).Distinct().Count();
var ocodt = tdt.Where(x => x.TASK_TASK.TASKTYPE == 2).ToList().Select(x => x.TASKID).Distinct().Count();
//var overdatacoun = edm.View_BASE_PLACE_VS_CONTAINER.Where(x => x.stStatus == "超期").ToList().Count;
hnelist.Add(new HomeNumDataEntity() { no = 1, titel = "入库零件数", value = iitdt });
hnelist.Add(new HomeNumDataEntity() { no = 2, titel = "出库零件数", value = oitdt });
hnelist.Add(new HomeNumDataEntity() { no = 3, titel = "入库器具数", value = icodt });
hnelist.Add(new HomeNumDataEntity() { no = 4, titel = "出库器具数", value = ocodt });
//hnelist.Add(new HomeNumDataEntity() { no = 5, titel = "超期零件数量", value = overdatacoun });
//第二排
var record = edm.RECORD_WAREHOUSEINFO.FirstOrDefault(x => x.time >= sdt && x.time<=edt);
if (record != null)
{
hnelist.Add(new HomeNumDataEntity() { no = 5, titel = "超期零件数量", value = record.itemOver ?? 0 });
hnelist.Add(new HomeNumDataEntity() { no = 6, titel = "库位总数", value = 2980 });
hnelist.Add(new HomeNumDataEntity() { no = 7, titel = "有货库位", value = record.placeFull ?? 0 });
hnelist.Add(new HomeNumDataEntity() { no = 8, titel = "带件器具", value = record.containerFull ?? 0 });
hnelist.Add(new HomeNumDataEntity() { no = 9, titel = "空器具数", value = record.containerEmpty ?? 0 });
hnelist.Add(new HomeNumDataEntity() { no = 10, titel = "制件总数", value = record.itemNum ?? 0 });
}
else
{
hnelist.Add(new HomeNumDataEntity() { no = 5, titel = "超期零件数量", value = 0 });
hnelist.Add(new HomeNumDataEntity() { no = 6, titel = "库位总数", value = 2980 });
hnelist.Add(new HomeNumDataEntity() { no = 7, titel = "有货库位", value = 0 });
hnelist.Add(new HomeNumDataEntity() { no = 8, titel = "带件器具", value = 0 });
hnelist.Add(new HomeNumDataEntity() { no = 9, titel = "空器具数", value = 0 });
hnelist.Add(new HomeNumDataEntity() { no = 10, titel = "制件总数", value = 0 });
}
HomeNumDataEntityVsTime hvt = new HomeNumDataEntityVsTime();
hvt.time = sdt;
hvt.homeNumDataEntityList = hnelist;
hvtList.Add(hvt);
}
return hvtList;
}
}
catch (Exception ex)
{
msg = "数据获取失败";
return new List();
}
}
#endregion
///
/// 库存分类统计
///
///
///
public static PieEntity GetStockClassificationData(int type,out string msg)
{
try
{
msg = "";
using (Model edm = new Model())
{
PieEntity hbe = new PieEntity();
string sql="";
if (type==1)
{
sql = @"select createLine as titel,SUM(itemNum) as value from(select itemName,itemNum,CASE WHEN createLine like '%李沧%' THEN '李沧产线'
ELSE createLine END as createLine,containerName,place from [dbo].[View_BASE_PLACE_VS_CONTAINER]
where createLine is not null and createLine like '%即墨%' or createLine like '%李沧%') A group by createLine ";
}else
{
sql = @"select createLine as titel,COUNT(distinct containerName) value from(select itemName,itemNum,CASE WHEN createLine like '%李沧%' THEN '李沧产线'
ELSE createLine END as createLine,containerName,place from [dbo].[View_BASE_PLACE_VS_CONTAINER]
where createLine is not null and createLine like '%即墨%' or createLine like '%李沧%') A group by createLine";
}
List dalst = edm.Database.SqlQuery(sql).ToList(); ;
List timelst = new List();
List dt1 = new List();
if (dalst != null && dalst.Count > 0)
{
hbe.legend = new List();
hbe.legend.AddRange(dalst.Select(x=>x.titel).ToList());
List pdlst = new List();
double sumcount = double.Parse(dalst.Select(x => x.value).ToList().Sum().ToString());
dalst.ForEach(x =>
{
var pd = new PieDate();
pd.name = x.titel;
long val = string.IsNullOrEmpty(x.value.ToString()) ? 0 : long.Parse(x.value.ToString());
pd.data = ((val * 10000 / sumcount)/100).ToString("0.00");
pdlst.Add(pd);
});
hbe.data = new List();
hbe.data.AddRange(pdlst);
}
else
{
hbe.legend = new List();
hbe.legend.Add("即墨A线甲班");
hbe.legend.Add("即墨A线乙班");
hbe.legend.Add("即墨B线甲班");
hbe.legend.Add("即墨B线乙班");
hbe.data = new List();
hbe.data.Add(new PieDate() { name = "即墨A线甲班", data = "0.00" });
hbe.data.Add(new PieDate() { name = "即墨A线乙班", data = "0.00" });
hbe.data.Add(new PieDate() { name = "即墨B线甲班", data = "0.00" });
hbe.data.Add(new PieDate() { name = "即墨B线乙班", data = "0.00" });
}
return hbe;
}
}
catch (Exception ex)
{
msg = "数据获取失败";
return new PieEntity();
}
}
///
/// 出入库任务平均时长
///
///
///
///
///
public static BarEntity GetInOutAverageTime(string startTime, string endTime, out string msg)
{
try
{
msg = "";
using (Model edm = new Model())
{
BarEntity hbe = new BarEntity();
string sql = @"select CASE
WHEN TASKTYPE=1 THEN '入库'
WHEN TASKTYPE=2 THEN '出库'
END as type,count(id)taskType,CONVERT(varchar(100), FINISHTIME, 23)time,sum(DATEDIFF ( mi , DOTIME, FINISHTIME))count from [dbo].[TASK_TASK]
where FINISHTIME>='{0}' and FINISHTIME<='{1}' and TASKSTATUS='完成'
group by CONVERT(varchar(100), FINISHTIME, 23),TASKTYPE";
sql = string.Format(sql, startTime, endTime);
List dalst = edm.Database.SqlQuery(sql).ToList();
List timelst = new List();
List timelstNoYear = new List();
string dt = DateTime.Parse(startTime).ToString("yyyy-MM-dd");
string edt = DateTime.Parse(endTime).AddDays(1).ToString("yyyy-MM-dd");
while (dt != edt)
{
timelstNoYear.Add(dt.Substring(5));
timelst.Add(dt);
dt = DateTime.Parse(dt).AddDays(1).ToString("yyyy-MM-dd");
}
List dt1 = new List();
List dt2 = new List();
List dt3 = new List();
if (timelst != null && timelst.Count > 0)
{
timelst.ForEach(x =>
{
var d1 = dalst.FirstOrDefault(y => y.time == x && y.type == "入库");
if (d1 != null)
{
double taskcoun = long.Parse(d1.taskType.ToString());
long taskmin = long.Parse(d1.count.ToString());
string val = ((taskmin / taskcoun)).ToString("0.00");
dt1.Add(val);
}
else
{
dt1.Add("0.00");
}
var d2 = dalst.FirstOrDefault(y => y.time == x && y.type == "出库");
if (d2 != null)
{
double taskcoun = long.Parse(d2.taskType.ToString());
long taskmin = long.Parse(d2.count.ToString());
string val = ((taskmin/ taskcoun)).ToString("0.00");
dt2.Add(val);
}
else
{
dt2.Add("0.00");
}
var d3 = dalst.Where(y => y.time == x).ToList() ;
if (d3 != null && d3.Count>0)
{
double taskcoun=long.Parse(d3.Select(y=>y.taskType).Sum().ToString());
long taskmin=long.Parse(d3.Select(y=>y.count).Sum().ToString());
string val = ((taskmin / taskcoun)).ToString("0.00");
dt3.Add(val);
}
else
{
dt3.Add("0.00");
}
});
}
hbe.data = new List();
hbe.xdata = timelstNoYear;
hbe.legend = new List() { "入库", "出库", "平均" };
BarDate dd1 = new BarDate() { name = "入库" };
dd1.xdata = new List();
dd1.xdata.AddRange(dt1);
hbe.data.Add(dd1);
BarDate dd2 = new BarDate() { name = "出库" };
dd2.xdata = new List();
dd2.xdata.AddRange(dt2);
hbe.data.Add(dd2);
BarDate dd3 = new BarDate() { name = "平均" };
dd3.xdata = new List();
dd3.xdata.AddRange(dt3);
hbe.data.Add(dd3);
return hbe;
}
}
catch (Exception ex)
{
msg = "数据获取失败";
return new BarEntity();
}
}
///
/// 每小时出入库数
///
///
///
///
///
public static BarEntity GetInOutCountByHour(string startTime, string endTime, out string msg)
{
try
{
msg = "";
using (Model edm = new Model())
{
BarEntity hbe = new BarEntity();
string sql = @"select CASE
WHEN TASKTYPE=1 THEN '入库'
WHEN TASKTYPE=2 THEN '出库'
END as type,count(id)taskType,CONVERT(varchar(100), FINISHTIME, 23) +' '+right('00'+(CONVERT(varchar(10),(DATEPART(hh,FINISHTIME)))),2) time,sum(DATEDIFF ( mi , DOTIME, FINISHTIME))count from [dbo].[TASK_TASK]
where FINISHTIME>='{0}' and FINISHTIME<='{1}' and TASKSTATUS='完成'
group by CONVERT(varchar(100), FINISHTIME, 23)+' '+right('00'+(CONVERT(varchar(10),(DATEPART(hh,FINISHTIME)))),2),TASKTYPE";
string dt = DateTime.Parse(startTime).ToString("yyyy-MM-dd 00:00:00");
string edt = DateTime.Parse(endTime).AddDays(1).ToString("yyyy-MM-dd 00:00:00");
sql = string.Format(sql, dt, edt);
List dalst = edm.Database.SqlQuery(sql).ToList();
List timelst = new List();
while (dt != edt)
{
timelst.Add(dt);
dt = DateTime.Parse(dt).AddHours(1).ToString("yyyy-MM-dd HH:mm:ss");
}
List dt1 = new List();
List dt2 = new List();
List dt3 = new List();
if (timelst != null && timelst.Count > 0)
{
timelst.ForEach(x =>
{
var d1 = dalst.FirstOrDefault(y => y.time.Substring(0, 13) == x.Substring(0, 13) && y.type == "入库");
if (d1 != null)
{
double taskcoun = long.Parse(d1.taskType.ToString());
//long taskmin = long.Parse(d1.count.ToString());
//string val = ((taskmin / taskcoun)).ToString("0.00");
dt1.Add(taskcoun.ToString());
}
else
{
dt1.Add("0.00");
}
var d2 = dalst.FirstOrDefault(y => y.time.Substring(0, 13) == x.Substring(0, 13) && y.type == "出库");
if (d2 != null)
{
double taskcoun = long.Parse(d2.taskType.ToString());
//long taskmin = long.Parse(d2.count.ToString());
//string val = ((taskmin / taskcoun)).ToString("0.00");
dt2.Add(taskcoun.ToString());
}
else
{
dt2.Add("0.00");
}
var d3 = dalst.Where(y => y.time.Substring(0, 13) == x.Substring(0, 13)).ToList();
if (d3 != null && d3.Count > 0)
{
double taskcoun = long.Parse(d3.Select(y => y.taskType).Sum().ToString());
//long taskmin = long.Parse(d3.Select(y => y.count).Sum().ToString());
//string val = ((taskmin / taskcoun)).ToString("0.00");
dt3.Add(taskcoun.ToString());
}
else
{
dt3.Add("0.00");
}
});
}
hbe.data = new List();
hbe.xdata = timelst;
hbe.legend = new List() { "入库", "出库", "总计" };
BarDate dd1 = new BarDate() { name = "入库" };
dd1.xdata = new List();
dd1.xdata.AddRange(dt1);
hbe.data.Add(dd1);
BarDate dd2 = new BarDate() { name = "出库" };
dd2.xdata = new List();
dd2.xdata.AddRange(dt2);
hbe.data.Add(dd2);
BarDate dd3 = new BarDate() { name = "总计" };
dd3.xdata = new List();
dd3.xdata.AddRange(dt3);
hbe.data.Add(dd3);
return hbe;
}
}
catch (Exception ex)
{
msg = "数据获取失败";
return new BarEntity();
}
}
///
/// 任务节拍分析
///
///
///
///
public static BarEntity GetTaskBeatAnalysis(string startTime, out string msg)
{
try
{
msg = "";
using (Model edm = new Model())
{
BarEntity hbe = new BarEntity();
string sql = @"select CONVERT(varchar(100), FINISHTIME, 23)titel,DATEDIFF ( mi , DOTIME, FINISHTIME) as value from [dbo].[TASK_TASK]
where CONVERT(varchar(100), FINISHTIME, 23)='{0}' and TASKSTATUS='完成'";
sql = string.Format(sql, startTime);
List dalst = edm.Database.SqlQuery(sql).ToList();
List timelst = new List();
List timeintlst = new List();
timeintlst.Add(2);
timeintlst.Add(3);
timeintlst.Add(4);
timeintlst.Add(5);
timeintlst.Add(6);
timeintlst.Add(7);
timeintlst.Add(8);
timeintlst.Add(9);
timeintlst.Add(10);
timeintlst.Add(20);
timeintlst.Add(30);
List dt1 = new List();
List count1 = new List();
if (timeintlst != null && timeintlst.Count > 0)
{
double sumcount = double.Parse(dalst.Count().ToString());
timeintlst.ForEach(x =>
{
int st = x;
int et = 0;
if (x >= 10)
{
et = x + 10;
}
else
{
et = x + 1;
}
if (x >= 10)
{
et = x + 10;
timelst.Add("大于" + x + "分钟");
}
else
{
timelst.Add(x + "分钟");
}
List d1 = new List();
if (st >= 30)
{
d1 = dalst.Where(y => y.value >= st).ToList();
}
else
{
d1 = dalst.Where(y => y.value >= st && y.value < et).ToList();
}
string val = (dalst.Where(y => y.value < et).Count() * 100 / sumcount).ToString("0.00");
dt1.Add(val);
if (d1 != null && d1.Count>0)
{
long count = long.Parse(d1.Count.ToString());
//string val = ((count*100 / sumcount)).ToString("0.00");
count1.Add(count.ToString());
}
else
{
//dt1.Add("0.00");
count1.Add("0");
}
});
}
//for (int i = 0; i < dt1.Count; i++)
//{
// if (i > 0)
// {
// dt1[i] = (double.Parse(dt1[i]) + double.Parse(dt1[i - 1])).ToString();
// }
//}
int maxNum = 0;
foreach (var i in count1)
{
maxNum+=int.Parse(i);
}
hbe.data = new List();
hbe.xdata = timelst;
hbe.legend = new List();
BarDate dd1 = new BarDate() { name = "占比" };
dd1.xdata = new List();
dd1.xdata.AddRange(dt1);
hbe.data.Add(dd1);
BarDate dd2 = new BarDate() { name = "数量" };
dd2.xdata = new List();
dd2.xdata.AddRange(count1);
hbe.data.Add(dd2);
hbe.legend.Add("占比");
hbe.legend.Add("数量");
//纵轴最大值
hbe.maxNum = maxNum;
return hbe;
}
}
catch
{
msg = "数据获取失败";
return new BarEntity();
}
}
///
/// 货格利用率
///
///
///
///
///
public static BarEntity GetStorageVailability(string startTime, string endTime, out string msg)
{
try
{
msg = "";
using (Model edm = new Model())
{
BarEntity hbe = new BarEntity();
string sql = @"select A.PlaceCount as count1,isnull(B.EmplaceCount,0) as count2,A.Tm as time from (
(select COUNT(distinct PLACEID)PlaceCount,CONVERT(varchar,CREATETIME,23) as Tm
from [dbo].[STORAGERECORD] where CREATETIME>='{0}' and CREATETIME<='{1}' group by CONVERT(varchar,CREATETIME,23))A left join
(select COUNT(distinct PLACEID)EmplaceCount,CONVERT(varchar,CREATETIME,23) as Tm
from [dbo].[STORAGERECORD] where ITEMID is null and CREATETIME>='{2}' and CREATETIME<='{3}' group by CONVERT(varchar,CREATETIME,23)) B on A.Tm=B.Tm
)";
sql = string.Format(sql, startTime, endTime, startTime, endTime);
List dalst = edm.Database.SqlQuery(sql).ToList();
List timelst = new List();
List timelstNoYear = new List();
string dt = DateTime.Parse(startTime).ToString("yyyy-MM-dd");
string edt = DateTime.Parse(endTime).AddDays(1).ToString("yyyy-MM-dd");
while (dt != edt)
{
timelstNoYear.Add(dt.Substring(5));
timelst.Add(dt);
dt = DateTime.Parse(dt).AddDays(1).ToString("yyyy-MM-dd");
}
int placeallcount = 2980;
List dt1 = new List();
List dt2 = new List();
List dt3 = new List();
if (timelst != null && timelst.Count > 0)
{
timelst.ForEach(x =>
{
var d1 = dalst.FirstOrDefault(y => y.time == x);
if (d1 != null)
{
double c1 = double.Parse(d1.count1.ToString());
double c2 = double.Parse(d1.count2.ToString());
string val1 = ((c1 / placeallcount)*100).ToString("0.00");
string val2 = ((c2 / placeallcount)*100).ToString("0.00");
dt1.Add(val1);
dt2.Add(val2);
}
else
{
dt1.Add("0.00");
dt2.Add("0.00");
}
});
}
hbe.data = new List();
hbe.xdata = timelstNoYear;
//hbe.legend = new List() { "货格利用率", "空器具利用率"};
hbe.legend = new List() { "货格利用率" };
BarDate dd1 = new BarDate() { name = "货格利用率" };
dd1.xdata = new List();
dd1.xdata.AddRange(dt1);
hbe.data.Add(dd1);
//BarDate dd2 = new BarDate() { name = "空器具利用率" };
//dd2.xdata = new List();
//dd2.xdata.AddRange(dt2);
//hbe.data.Add(dd2);
return hbe;
}
}
catch (Exception ex)
{
msg = "数据获取失败";
return new BarEntity();
}
}
///
/// 在制品资金分析
///
///
///
///
///
public static BarEntity GetStorageCapitalAnalysis(string startTime, string endTime, out string msg)
{
try
{
msg = "";
using (Model edm = new Model())
{
BarEntity hbe = new BarEntity();
string sql = @"select SUM(ITEMNUM*PRICE) as coast,CONVERT(varchar,CREATETIME,23) as time from [dbo].[STORAGERECORD] where ITEMID is not null and CREATETIME>='{0}' and CREATETIME<='{1}'
group by CONVERT(varchar,CREATETIME,23)";
string sqlCount = @"select CAST(SUM(ITEMNUM) as decimal(10,2)) as coast,CONVERT(varchar,CREATETIME,23) as time from [dbo].[STORAGERECORD] where ITEMID is not null and CREATETIME>='{0}' and CREATETIME<='{1}'
group by CONVERT(varchar,CREATETIME,23)";
sql = string.Format(sql, startTime, endTime);
sqlCount = string.Format(sqlCount, startTime, endTime);
List dalst = edm.Database.SqlQuery(sql).ToList();
List countList = edm.Database.SqlQuery(sqlCount).ToList();
List timelst = new List();
List timelstNoYear = new List();
string dt = DateTime.Parse(startTime).ToString("yyyy-MM-dd");
string edt = DateTime.Parse(endTime).AddDays(1).ToString("yyyy-MM-dd");
while (dt != edt)
{
timelst.Add(dt);
timelstNoYear.Add(dt.Substring(5));
dt = DateTime.Parse(dt).AddDays(1).ToString("yyyy-MM-dd");
}
decimal allcost = dalst.Select(x => x.coast).Sum();
decimal averahe = allcost / timelst.Count;
List dt1 = new List();
List dt2 = new List();
if (timelst != null && timelst.Count > 0)
{
timelst.ForEach(x =>
{
var d1 = dalst.FirstOrDefault(y => y.time == x);
var count1=countList.FirstOrDefault(y => y.time == x);
if (d1 != null)
{
string val = d1.coast.ToString("0.00"); ;
dt1.Add(val);
decimal a = d1.coast / count1.coast;
dt2.Add(a.ToString("0.00"));
}
else
{
dt1.Add("0.00");
dt2.Add("0.00");
}
//dt2.Add(averahe.ToString("0.00"));
});
}
hbe.data = new List();
hbe.xdata = timelstNoYear;
hbe.legend = new List() { "在制总金额", "在制平均金额"};
BarDate dd1 = new BarDate() { name = "在制总金额" };
dd1.xdata = new List();
dd1.xdata.AddRange(dt1);
hbe.data.Add(dd1);
BarDate dd2 = new BarDate() { name = "在制平均金额" };
dd2.xdata = new List();
dd2.xdata.AddRange(dt2);
hbe.data.Add(dd2);
return hbe;
}
}
catch (Exception ex)
{
msg = "数据获取失败";
return new BarEntity();
}
}
///
/// 立库总览和制件总览
///
///
///
public static List GetStorageOverviewData(out string msg)
{
msg = "";
try
{
using (Model edm = new Model())
{
List hnelist = new List();
var overdatacoun = edm.View_BASE_PLACE_VS_CONTAINER.ToList();
int hasplace = overdatacoun.Select(x => x.place).Distinct().Count();
int emptyitemplace = overdatacoun.Where(x=>string.IsNullOrEmpty(x.itemName)).Select(x => x.place).Distinct().Count();
int itemcoun = (int)overdatacoun.Select(x => x.itemNum).Sum();
hnelist.Add(new HomeNumDataEntity() { no = 1, titel = "库位总数", value = 2980 });
hnelist.Add(new HomeNumDataEntity() { no = 2, titel = "有货库位", value = hasplace });
hnelist.Add(new HomeNumDataEntity() { no = 3, titel = "带件器具", value = (hasplace - emptyitemplace) });
hnelist.Add(new HomeNumDataEntity() { no = 4, titel = "空器具数", value = emptyitemplace });
hnelist.Add(new HomeNumDataEntity() { no = 5, titel = "制件总数", value = itemcoun });
return hnelist;
}
}
catch (Exception ex)
{
msg = "数据获取失败";
return new List();
}
}
///
/// 设备利用率
///
///
///
///
///
public static BarEntity GetDevAvailability(string startTime, string endTime, int type,out string msg)
{
try
{
msg = "";
using (Model edm = new Model())
{
string sql = "";
if (type != 1)//RGV
{
sql = @"select ('RGV' +cast(USERGVID as varchar(5))) as titel,SUM(datediff( minute, DOTIME, FINISHTIME )) as count1,CONVERT(varchar,FINISHTIME,23)as time FROM [dbo].[RgvTask]
where FINISHTIME is not null and FINISHTIME>='{0}' and FINISHTIME<='{1}' group by CONVERT(varchar,FINISHTIME,23),USERGVID";
}
else //堆垛机
{
sql = @"select ('堆垛机' +cast(USESRMID as varchar(5))) as titel,SUM(datediff( minute, DOTIME, FINISHTIME )) as count1,CONVERT(varchar,FINISHTIME,23)as time FROM [dbo].[SrmTask]
where FINISHTIME is not null and FINISHTIME>='{0}' and FINISHTIME<='{1}' group by CONVERT(varchar,FINISHTIME,23),USESRMID
";
}
BarEntity hbe = new BarEntity();
sql = string.Format(sql,startTime, endTime);
List dalst = edm.Database.SqlQuery(sql).ToList();
List timelst = new List();
List devlst = new List();
List bdlst = new List();
timelst = dalst.Select(x => x.time).OrderBy(x => x).Distinct().ToList();
devlst = dalst.Select(x => x.titel).Distinct().ToList();
if (timelst != null && timelst.Count > 0)
{
timelst.ForEach(x =>
{
devlst.ForEach(y =>
{
string rat = "0.00";
var dt = dalst.FirstOrDefault(b => b.time == x && b.titel == y);
if (dt != null)
{
rat = ((double.Parse(dt.count1.ToString()) / (18 * 60)) * 100).ToString("0.00");
}
var bd = bdlst.FirstOrDefault(a => a.name == y);
if (bd == null)
{
BarDate dd1 = new BarDate() { name = y };
dd1.xdata = new List();
dd1.xdata.Add(rat);
bdlst.Add(dd1);
}
else
{
bd.xdata.Add(rat);
}
});
});
}
hbe.data = new List();
//临时格式化时间
for (int i = 0; i < timelst.Count; i++)
{
timelst[i] = timelst[i].Substring(5);
}
hbe.xdata = timelst;
hbe.legend = new List();
hbe.legend = devlst;
hbe.data.AddRange(bdlst);
return hbe;
}
}
catch (Exception ex)
{
msg = "数据获取失败";
return new BarEntity();
}
}
///
/// 设备可动率
///
///
///
///
///
public static BarEntity GetDevMovable(string startTime, string endTime,int type, out string msg)
{
try
{
msg = "";
using (Model edm = new Model())
{
List devlst = new List();
string devname="堆垛机";
if (type != 1)
{
devname = "RGV";
devlst.Add("RGV1");
devlst.Add("RGV2");
devlst.Add("RGV3");
devlst.Add("RGV4");
}
else
{
devlst.Add("堆垛机1");
devlst.Add("堆垛机2");
devlst.Add("堆垛机3");
devlst.Add("堆垛机4");
devlst.Add("堆垛机5");
devlst.Add("堆垛机6");
devlst.Add("堆垛机7");
devlst.Add("堆垛机8");
devlst.Add("堆垛机9");
}
BarEntity hbe = new BarEntity();
string sql = @" select DEVICENAME as titel, COUNT(DEVICENAME)as count1,CONVERT(varchar,DAY,23) as time from [dbo].[ALERT_ALERTTIME]
where ISERROR=1 and DEVICENAME like '%{0}%' and DAY>='{1}' and DAY<='{2}' group by DAY,DEVICENAME";
sql = string.Format(sql,devname,startTime, endTime);
List dalst = edm.Database.SqlQuery(sql).ToList();
List timelst = new List();
List bdlst = new List();
timelst = dalst.Select(x => x.time).OrderBy(x=>x).Distinct().ToList();
//devlst = dalst.Select(x => x.titel).Distinct().ToList();
if (timelst != null && timelst.Count > 0)
{
timelst.ForEach(x =>
{
devlst.ForEach(y =>
{
string rat = "100";
var dt = dalst.FirstOrDefault(b => b.time == x && b.titel == y);
if (dt!=null)
{
if(((double.Parse(dt.count1.ToString()) / (24 * 60)) * 100)>100)
{
string st = "1";
}
rat = (100 - (double.Parse(dt.count1.ToString()) / (24 * 60)) * 100).ToString("0.00");
}
var bd = bdlst.FirstOrDefault(a => a.name == y);
if (bd==null)
{
BarDate dd1 = new BarDate() { name = y };
dd1.xdata = new List();
dd1.xdata.Add(rat);
bdlst.Add(dd1);
}
else
{
bd.xdata.Add(rat);
}
});
});
}
hbe.data = new List();
hbe.xdata = timelst;
//临时格式化时间
for (int i = 0; i < timelst.Count; i++)
{
timelst[i] = timelst[i].Substring(5);
}
hbe.legend = new List();
hbe.legend = devlst;
hbe.data.AddRange(bdlst);
return hbe;
}
}
catch (Exception ex)
{
msg = "数据获取失败";
return new BarEntity();
}
}
///
/// 制件周转时间
///
///
///
///
///
///
///
///
public static BarEntity GetPartTurnover(int stYear, int edYear, int stMonth, int edMonth, int stWeek, int edWeek, out string msg)
{
try
{
msg = "";
string startTime = (DateTime.Parse((stYear + "-" + stMonth + "-" + (stWeek) * 7)).AddDays(-6)).ToString("yyyy-MM-dd");
string endTime = edYear + "-" + edMonth + "-" + edWeek * 7;
using (Model edm = new Model())
{
BarEntity hbe = new BarEntity();
string stsql = @"select SUM(ITEMNUM) as count1 ,Line as titel,CONVERT(datetime, CreateTime, 111) as dtime from (select A.ITEMID,A.ITEMNUM,A.PRICE,CONVERT(varchar ,A.CREATETIME, 23) CreateTime,left(B.CREATELINE,4) Line
from [dbo].[STORAGERECORD] A left join BASE_ITEM B on A.ITEMID=B.ID where ITEMID is not null and CREATELINE like '%即墨%' and A.CREATETIME>='{0}' and A.CREATETIME<='{1}'
union
select A.ITEMID,A.ITEMNUM,A.PRICE,CONVERT(varchar ,A.CREATETIME, 23) CreateTime, '李沧产线' Line
from [dbo].[STORAGERECORD] A left join BASE_ITEM B on A.ITEMID=B.ID where ITEMID is not null and CREATELINE like '%李沧%' and A.CREATETIME>='{2}' and A.CREATETIME<='{3}')A
group by Line,CreateTime";
string outsql = @" select SUM(ITEMCOUNT) as count1 ,Line as titel,CONVERT(datetime, CreateTime, 111) as dtime from (select A.ITEMID,A.ITEMCOUNT,CONVERT(varchar ,A.CREATETIME, 23) CreateTime,left(B.CREATELINE,4) Line
from [dbo].[TASK_RECORD] A left join BASE_ITEM B on A.ITEMID=B.ID where TYPE=2 and ITEMID is not null and CREATELINE like '%即墨%' and A.CREATETIME>='{0}' and A.CREATETIME<='{1}'
union
select A.ITEMID,A.ITEMCOUNT,CONVERT(varchar ,A.CREATETIME, 23) CreateTime, '李沧产线' Line
from [dbo].[TASK_RECORD] A left join BASE_ITEM B on A.ITEMID=B.ID where TYPE=2 and ITEMID is not null and CREATELINE like '%李沧%' and A.CREATETIME>='{2}' and A.CREATETIME<='{3}')A
group by Line,CreateTime having SUM(ITEMCOUNT)>20";
stsql = string.Format(stsql, startTime, endTime, startTime, endTime);
outsql = string.Format(outsql, startTime, endTime, startTime, endTime);
List stdalst = edm.Database.SqlQuery(stsql).ToList();
List outdalst = edm.Database.SqlQuery(outsql).ToList();
List timelst = new List();
List devlst = new List();
List lst = new List();
List ti1lst = stdalst.Select(x => x.titel).ToList();
List ti2lst = outdalst.Select(x => x.titel).ToList();
List bdlst = new List();
lst.AddRange(ti1lst);
lst.AddRange(ti2lst);
devlst = lst.Select(x=>x).Distinct().ToList() ;
int smon = stMonth;
int swek = stWeek;
int emon = edMonth;
int ewek = edWeek;
if (ewek == 4)
{
emon = emon + 1;
ewek = 1;
}
else
{
ewek += 1;
}
while (smon != emon || swek != ewek)
{
if (smon < 10)
{
timelst.Add("0"+smon + "M" + swek + "W");
}
else
{
timelst.Add(smon + "M" + swek + "W");
}
swek =swek+ 1;
if (swek>4)
{
swek = 1;
smon = smon + 1;
}
}
List dt1 = new List();
List dt2 = new List();
if (timelst != null && timelst.Count > 0)
{
timelst.ForEach(x =>
{
devlst.ForEach(d =>
{
double con1 = 0;
double con2 = 0;
string st = stYear + "-" + int.Parse(x[0].ToString()) + int.Parse(x[1].ToString()) + "-" + (int.Parse(x[3].ToString()) * 7);
DateTime sdt = DateTime.Parse(st).AddDays(-6);
DateTime edt = DateTime.Parse(st);
var d1 = stdalst.Where(y => y.dtime >= sdt && y.dtime <= edt&&y.titel==d).ToList();
if (d1 != null && d1.Count>0)
{
con1=d1.Select(a=>a.count1).Average();
}
var d2 = outdalst.Where(y => y.dtime >= sdt && y.dtime <= edt && y.titel == d).ToList(); ;
if (d2 != null && d2.Count > 0)
{
con2 = d2.Select(a => a.count1).Average();
}
string dcon = con2==0?"0":(con1 / con2).ToString("0.0");
var bd = bdlst.FirstOrDefault(a => a.name == d);
if (bd == null)
{
BarDate dd1 = new BarDate() { name = d };
dd1.xdata = new List();
dd1.xdata.Add(dcon);
bdlst.Add(dd1);
}
else
{
bd.xdata.Add(dcon);
}
});
});
}
hbe.data = new List();
hbe.xdata = timelst;
hbe.legend = new List();
hbe.legend = devlst;
hbe.data.AddRange(bdlst);
return hbe;
}
}
catch (Exception ex)
{
msg = "数据获取失败";
return new BarEntity();
}
}
}
}