using Microsoft.AspNetCore.Mvc;
using StackExchange.Profiling;
using zzz.Common.Helper;
using zzz.Model;
using zzz.Model.Entity;
using zzz.Repository;
using zzz.Services.ERP.Dtos;
using zzz.Tasks;
namespace zzz.Api.Controllers
{
///
/// 余宏大屏数据
///
[ApiController]
[Route("api/[controller]/[action]")]
public class BigScreenController : BaseApiController
{
private readonly ILogger _logger;
private readonly IBaseRepository _planOrderRep;
private readonly IBaseRepository _salesout_delivery_orderRep;
private readonly IBaseRepository _eqmtAddRep;
private readonly IBaseRepository _eqmtBaseRep;
private readonly IBaseRepository _eqmtPubRep;
///
/// 余宏大屏数据
///
///
///
///
public BigScreenController(
IBaseRepository planOrderRep,
IBaseRepository salesout_delivery_orderRep,
IBaseRepository eqmtAddRep,
IBaseRepository eqmtBaseRep,
IBaseRepository eqmtPubRep,
ILogger logger
)
{
_planOrderRep = planOrderRep;
_salesout_delivery_orderRep = salesout_delivery_orderRep;
_eqmtAddRep = eqmtAddRep;
_eqmtBaseRep = eqmtBaseRep;
_eqmtPubRep = eqmtPubRep;
_logger = logger;
}
///
/// 工单列表数据
///
///
[HttpGet]
public async Task>> getPlanOrderList()
{
//var orderList = await _planOrderRep.QueryAsync(x => x.FSTATUS != "结案" && x.FSTART_DATE.Length > 0);
var orderList = Task.FromResult(await _planOrderRep.QueryAsync(x => x.FSTATUS != "结案" && x.FSTART_DATE.Length > 0)).Result;
var ret = orderList.OrderByDescending(x => x.FBILL_NO).Take(50).AsEnumerable().MapToList();
foreach (var item in ret)
{
item.FBILL_NO = " " + item.FBILL_NO;
}
return Success(ret.ToList());
}
///
/// 工单详情
///
///
[HttpGet]
public async Task> getPlanOrderDetail(long fentryId)
{
var orderInfo = await _planOrderRep.FirstOrDefaultAsync(x=>x.FENTRY_ID == fentryId);
var ret = orderInfo.MapTo();
return Success(ret);
}
///
/// 动态月订单信息数据
///
///
[HttpGet]
public async Task> getMonthData()
{
var ret = new MonthDataOutput() {
ProductQty = new ProductQtyDto(),
EqmtRate = new LineRateDto(),
ProductOKRate = new List(),
};
var exceptDate = new DateTime(1900, 01, 01);
var monthFirstDat = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);
//设备列表
//var eqmtList = await _eqmtBaseRep.QueryAsync();
//生产工单
var MoList = await _planOrderRep.QueryAsync(
x => x.FPLAN_FINISH_DATE.StartsWith(DateTime.Now.ToString("yyyy-MM"))
); //本月数据
//生产计划达成率
var moTotalCnt = MoList.Where(x => x.FPLAN_FINISH_DATE.ObjToDate(exceptDate).Date <= DateTime.Now.Date).Count();
if (moTotalCnt > 0)
{
var completeList = new List() { "结案", "完工" };
var completeCnt = MoList.Where(x => x.FPLAN_FINISH_DATE.ObjToDate(exceptDate).Date <= DateTime.Now.Date && completeList.Contains(x.FSTATUS)).Count();
ret.MoCompleteRate = Math.Round(completeCnt.ObjToDecimal() / moTotalCnt.ObjToDecimal(), 4) * 100;
}
//订单交付率
var SoList = await _salesout_delivery_orderRep.QueryAsync(
x => x.FDATE.StartsWith(DateTime.Now.ToString("yyyy-MM"))
); //本月数据
var soCount = SoList.Where(x => x.FDATE.ObjToDate(exceptDate).Date <= DateTime.Now.Date).Count();
if (soCount>0)
{
var soCompleteCnt = SoList.Where(x => x.FDATE.ObjToDate(exceptDate).Date <= DateTime.Now.Date && x.FREAL_QTY > 0).Count();
ret.PoCompleteRate = Math.Round(soCompleteCnt.ObjToDecimal() / soCount.ObjToDecimal(), 4) * 100;
}
//月产量 _eqmtAddRep
var productType = (await _eqmtBaseRep.QueryAsync()).Select(x => x.product).Distinct();
ret.ProductQty.xAxis.type = "category";
ret.ProductQty.xAxis.data = new List();
for (int i = 6; i >= 0 ; i--)
{
ret.ProductQty.xAxis.data.Add(DateTime.Now.Date.AddDays(-i).ToString("MM-dd"));
}
var addList = await _eqmtAddRep.QueryAsync(x => x.add_datetime >= DateTime.Now.Date.AddDays(-6).Date);
//var addList = await _eqmtAddRep.QueryAsync();
foreach (var t in productType)
{
seriesDto s = new seriesDto();
s.name = t;
s.type = "bar";
s.data = new List();
for (int i = 6; i >= 0; i--)
{
var day = DateTime.Now.Date.AddDays(-i).Date;
var sumQty = addList.Where(x => x.add_datetime.Value.Date == day && x.product == t).Sum(x => x.add_qty_ok);
s.data.Add(sumQty);
}
ret.ProductQty.series.Add(s);
}
/*
//设备利用率
ret.EqmtRate.xAxis.data = (await _eqmtBaseRep.QueryAsync()).Select(x => x.line_name).ToList();
var pubList = await _eqmtPubRep.QueryAsync(x => x.gmt_create >= monthFirstDat);
seriesDto01 newSeries = new seriesDto01();
foreach (var item in eqmtList)
{
var totalTime = pubList.Where(x => x.eqmt_id == item.eqmt_id).Sum(x => x.intraday_eqmt_run_time);
var workTime = pubList.Where(x => x.eqmt_id == item.eqmt_id).Sum(x => x.intraday_eqmt_work_time);
if (totalTime > 0)
{
newSeries.data.Add(Math.Round((decimal)workTime / totalTime, 4)*100);
}
else
{
newSeries.data.Add(0);
}
}
ret.EqmtRate.series.Add(newSeries);
//合格率
var addListMonth = await _eqmtAddRep.QueryAsync(x => x.add_datetime >= monthFirstDat);
foreach (var item in productType)
{
ProductOkRateDto newOK = new ProductOkRateDto();
newOK.ProductName = item;
var okQty = addListMonth.Where(x => x.product == item).Sum(x => x.add_qty_ok);
var ngQty = addListMonth.Where(x => x.product == item).Sum(x => x.add_qty_ng);
if (okQty > 0 || ngQty>0)
{
newOK.OKRate = Math.Round((decimal)okQty / (okQty + ngQty), 4) * 100;
}
ret.ProductOKRate.Add(newOK);
}
*/
return Success(ret);
}
///
/// 动态月订单信息数据
///
///
[HttpGet]
public async Task> getMonthData1()
{
var ret = new MonthDataOutput()
{
ProductQty = new ProductQtyDto(),
EqmtRate = new LineRateDto(),
ProductOKRate = new List(),
};
var exceptDate = new DateTime(1900, 01, 01);
var monthFirstDat = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);
//设备列表
var eqmtList = await _eqmtBaseRep.QueryAsync();
/*
//生产工单
var MoList = await _planOrderRep.QueryAsync(
x => x.FPLAN_FINISH_DATE.StartsWith(DateTime.Now.ToString("yyyy-MM"))
); //本月数据
//生产计划达成率
var moTotalCnt = MoList.Where(x => x.FPLAN_FINISH_DATE.ObjToDate(exceptDate).Date <= DateTime.Now.Date).Count();
if (moTotalCnt > 0)
{
var completeList = new List() { "结案", "完工" };
var completeCnt = MoList.Where(x => x.FPLAN_FINISH_DATE.ObjToDate(exceptDate).Date <= DateTime.Now.Date && completeList.Contains(x.FSTATUS)).Count();
ret.MoCompleteRate = Math.Round(completeCnt.ObjToDecimal() / moTotalCnt.ObjToDecimal(), 4) * 100;
}
//订单交付率
var SoList = await _salesout_delivery_orderRep.QueryAsync(
x => x.FDATE.StartsWith(DateTime.Now.ToString("yyyy-MM"))
); //本月数据
var soCount = SoList.Where(x => x.FDATE.ObjToDate(exceptDate).Date <= DateTime.Now.Date).Count();
if (soCount > 0)
{
var soCompleteCnt = SoList.Where(x => x.FDATE.ObjToDate(exceptDate).Date <= DateTime.Now.Date && x.FREAL_QTY > 0).Count();
ret.PoCompleteRate = Math.Round(soCompleteCnt.ObjToDecimal() / soCount.ObjToDecimal(), 4) * 100;
}
//月产量 _eqmtAddRep
var productType = (await _eqmtBaseRep.QueryAsync()).Select(x => x.product).Distinct();
ret.ProductQty.xAxis.type = "category";
ret.ProductQty.xAxis.data = new List();
for (int i = 6; i >= 0; i--)
{
ret.ProductQty.xAxis.data.Add(DateTime.Now.Date.AddDays(-i).ToString("MM-dd"));
}
var addList = await _eqmtAddRep.QueryAsync(x => x.add_datetime >= DateTime.Now.Date.AddDays(-6).Date);
//var addList = await _eqmtAddRep.QueryAsync();
foreach (var t in productType)
{
seriesDto s = new seriesDto();
s.name = t;
s.type = "bar";
s.data = new List();
for (int i = 6; i >= 0; i--)
{
var day = DateTime.Now.Date.AddDays(-i).Date;
var sumQty = addList.Where(x => x.add_datetime.Value.Date == day && x.product == t).Sum(x => x.add_qty_ok);
s.data.Add(sumQty);
}
ret.ProductQty.series.Add(s);
}
*/
//设备利用率
ret.EqmtRate.xAxis.data = (await _eqmtBaseRep.QueryAsync()).Select(x => x.line_name).ToList();
var pubList = await _eqmtPubRep.QueryAsync(x => x.gmt_create >= monthFirstDat);
seriesDto01 newSeries = new seriesDto01();
foreach (var item in eqmtList)
{
var totalTime = pubList.Where(x => x.eqmt_id == item.eqmt_id).Sum(x => x.intraday_eqmt_run_time);
var workTime = pubList.Where(x => x.eqmt_id == item.eqmt_id).Sum(x => x.intraday_eqmt_work_time);
if (totalTime > 0)
{
newSeries.data.Add(Math.Round((decimal)workTime / totalTime, 4) * 100);
}
else
{
newSeries.data.Add(0);
}
}
ret.EqmtRate.series.Add(newSeries);
/*
//合格率
var addListMonth = await _eqmtAddRep.QueryAsync(x => x.add_datetime >= monthFirstDat);
foreach (var item in productType)
{
ProductOkRateDto newOK = new ProductOkRateDto();
newOK.ProductName = item;
var okQty = addListMonth.Where(x => x.product == item).Sum(x => x.add_qty_ok);
var ngQty = addListMonth.Where(x => x.product == item).Sum(x => x.add_qty_ng);
if (okQty > 0 || ngQty > 0)
{
newOK.OKRate = Math.Round((decimal)okQty / (okQty + ngQty), 4) * 100;
}
ret.ProductOKRate.Add(newOK);
}
*/
return Success(ret);
}
///
/// 动态月订单信息数据
///
///
[HttpGet]
public async Task> getMonthData2()
{
var ret = new MonthDataOutput()
{
ProductQty = new ProductQtyDto(),
EqmtRate = new LineRateDto(),
ProductOKRate = new List(),
};
var exceptDate = new DateTime(1900, 01, 01);
var monthFirstDat = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);
/*
//设备列表
var eqmtList = await _eqmtBaseRep.QueryAsync();
//生产工单
var MoList = await _planOrderRep.QueryAsync(
x => x.FPLAN_FINISH_DATE.StartsWith(DateTime.Now.ToString("yyyy-MM"))
); //本月数据
//生产计划达成率
var moTotalCnt = MoList.Where(x => x.FPLAN_FINISH_DATE.ObjToDate(exceptDate).Date <= DateTime.Now.Date).Count();
if (moTotalCnt > 0)
{
var completeList = new List() { "结案", "完工" };
var completeCnt = MoList.Where(x => x.FPLAN_FINISH_DATE.ObjToDate(exceptDate).Date <= DateTime.Now.Date && completeList.Contains(x.FSTATUS)).Count();
ret.MoCompleteRate = Math.Round(completeCnt.ObjToDecimal() / moTotalCnt.ObjToDecimal(), 4) * 100;
}
//订单交付率
var SoList = await _salesout_delivery_orderRep.QueryAsync(
x => x.FDATE.StartsWith(DateTime.Now.ToString("yyyy-MM"))
); //本月数据
var soCount = SoList.Where(x => x.FDATE.ObjToDate(exceptDate).Date <= DateTime.Now.Date).Count();
if (soCount > 0)
{
var soCompleteCnt = SoList.Where(x => x.FDATE.ObjToDate(exceptDate).Date <= DateTime.Now.Date && x.FREAL_QTY > 0).Count();
ret.PoCompleteRate = Math.Round(soCompleteCnt.ObjToDecimal() / soCount.ObjToDecimal(), 4) * 100;
}
//月产量 _eqmtAddRep
var productType = (await _eqmtBaseRep.QueryAsync()).Select(x => x.product).Distinct();
ret.ProductQty.xAxis.type = "category";
ret.ProductQty.xAxis.data = new List();
for (int i = 6; i >= 0; i--)
{
ret.ProductQty.xAxis.data.Add(DateTime.Now.Date.AddDays(-i).ToString("MM-dd"));
}
var addList = await _eqmtAddRep.QueryAsync(x => x.add_datetime >= DateTime.Now.Date.AddDays(-6).Date);
//var addList = await _eqmtAddRep.QueryAsync();
foreach (var t in productType)
{
seriesDto s = new seriesDto();
s.name = t;
s.type = "bar";
s.data = new List();
for (int i = 6; i >= 0; i--)
{
var day = DateTime.Now.Date.AddDays(-i).Date;
var sumQty = addList.Where(x => x.add_datetime.Value.Date == day && x.product == t).Sum(x => x.add_qty_ok);
s.data.Add(sumQty);
}
ret.ProductQty.series.Add(s);
}
//设备利用率
ret.EqmtRate.xAxis.data = (await _eqmtBaseRep.QueryAsync()).Select(x => x.line_name).ToList();
var pubList = await _eqmtPubRep.QueryAsync(x => x.gmt_create >= monthFirstDat);
seriesDto01 newSeries = new seriesDto01();
foreach (var item in eqmtList)
{
var totalTime = pubList.Where(x => x.eqmt_id == item.eqmt_id).Sum(x => x.intraday_eqmt_run_time);
var workTime = pubList.Where(x => x.eqmt_id == item.eqmt_id).Sum(x => x.intraday_eqmt_work_time);
if (totalTime > 0)
{
newSeries.data.Add(Math.Round((decimal)workTime / totalTime, 4) * 100);
}
else
{
newSeries.data.Add(0);
}
}
ret.EqmtRate.series.Add(newSeries);
*/
var productType = (await _eqmtBaseRep.QueryAsync()).Select(x => x.product).Distinct();
//合格率
var addListMonth = await _eqmtAddRep.QueryAsync(x => x.add_datetime >= monthFirstDat);
foreach (var item in productType)
{
ProductOkRateDto newOK = new ProductOkRateDto();
newOK.ProductName = item;
var okQty = addListMonth.Where(x => x.product == item).Sum(x => x.add_qty_ok);
var ngQty = addListMonth.Where(x => x.product == item).Sum(x => x.add_qty_ng);
if (okQty > 0 || ngQty > 0)
{
newOK.OKRate = Math.Round((decimal)okQty / (okQty + ngQty), 4) * 100;
}
ret.ProductOKRate.Add(newOK);
}
return Success(ret);
}
///
/// 设备信息
///
///
[HttpGet]
public async Task>> getEqmtDetailList()
{
List ret = new List();
//设备列表
var eqmtList = await _eqmtBaseRep.QueryAsync();
var pubList = await _eqmtPubRep.QueryAsync(x => x.gmt_create >= DateTime.Now.Date);
foreach (var item in eqmtList)
{
EqmtInfoOutput newOne = new EqmtInfoOutput();
var lastInfo = pubList.Where(x => x.eqmt_id == item.eqmt_id).OrderByDescending(x => x.gmt_create).FirstOrDefault();
if (lastInfo != null)
{
newOne = lastInfo.MapTo();
}
else
{
}
newOne.eqmt_name = eqmtList.Where(x => x.eqmt_id == item.eqmt_id).FirstOrDefault()?.line_name;
ret.Add(newOne);
}
return Success(ret);
}
}
}