|
|
|
@ -0,0 +1,463 @@
|
|
|
|
|
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
|
|
|
|
|
{
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 余宏大屏数据
|
|
|
|
|
/// </summary>
|
|
|
|
|
[ApiController]
|
|
|
|
|
[Route("api/[controller]/[action]")]
|
|
|
|
|
public class BigScreenController : BaseApiController
|
|
|
|
|
{
|
|
|
|
|
private readonly ILogger<ApiActiveController> _logger;
|
|
|
|
|
private readonly IBaseRepository<plan_order> _planOrderRep;
|
|
|
|
|
private readonly IBaseRepository<salesout_delivery_order> _salesout_delivery_orderRep;
|
|
|
|
|
private readonly IBaseRepository<EqmtCollectAddData> _eqmtAddRep;
|
|
|
|
|
private readonly IBaseRepository<EqmtBase> _eqmtBaseRep;
|
|
|
|
|
private readonly IBaseRepository<EqmtPubData> _eqmtPubRep;
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 余宏大屏数据
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="planOrderRep"></param>
|
|
|
|
|
/// <param name="salesout_delivery_orderRep"></param>
|
|
|
|
|
/// <param name="logger"></param>
|
|
|
|
|
public BigScreenController(
|
|
|
|
|
IBaseRepository<plan_order> planOrderRep,
|
|
|
|
|
IBaseRepository<salesout_delivery_order> salesout_delivery_orderRep,
|
|
|
|
|
IBaseRepository<EqmtCollectAddData> eqmtAddRep,
|
|
|
|
|
IBaseRepository<EqmtBase> eqmtBaseRep,
|
|
|
|
|
IBaseRepository<EqmtPubData> eqmtPubRep,
|
|
|
|
|
ILogger<ApiActiveController> logger
|
|
|
|
|
)
|
|
|
|
|
{
|
|
|
|
|
_planOrderRep = planOrderRep;
|
|
|
|
|
_salesout_delivery_orderRep = salesout_delivery_orderRep;
|
|
|
|
|
_eqmtAddRep = eqmtAddRep;
|
|
|
|
|
_eqmtBaseRep = eqmtBaseRep;
|
|
|
|
|
_eqmtPubRep = eqmtPubRep;
|
|
|
|
|
_logger = logger;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 工单列表数据
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
[HttpGet]
|
|
|
|
|
public async Task<MessageModel<List<plan_order_output>>> 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<plan_order, plan_order_output>();
|
|
|
|
|
|
|
|
|
|
foreach (var item in ret)
|
|
|
|
|
{
|
|
|
|
|
item.FBILL_NO = " " + item.FBILL_NO;
|
|
|
|
|
}
|
|
|
|
|
return Success(ret.ToList());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 工单详情
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
[HttpGet]
|
|
|
|
|
public async Task<MessageModel<plan_order_output>> getPlanOrderDetail(long fentryId)
|
|
|
|
|
{
|
|
|
|
|
var orderInfo = await _planOrderRep.FirstOrDefaultAsync(x=>x.FENTRY_ID == fentryId);
|
|
|
|
|
|
|
|
|
|
var ret = orderInfo.MapTo<plan_order, plan_order_output>();
|
|
|
|
|
|
|
|
|
|
return Success(ret);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 动态月订单信息数据
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
[HttpGet]
|
|
|
|
|
public async Task<MessageModel<MonthDataOutput>> getMonthData()
|
|
|
|
|
{
|
|
|
|
|
var ret = new MonthDataOutput() {
|
|
|
|
|
ProductQty = new ProductQtyDto(),
|
|
|
|
|
EqmtRate = new LineRateDto(),
|
|
|
|
|
ProductOKRate = new List<ProductOkRateDto>(),
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
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<string>() { "结案", "完工" };
|
|
|
|
|
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<string>();
|
|
|
|
|
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<decimal>();
|
|
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 动态月订单信息数据
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
[HttpGet]
|
|
|
|
|
public async Task<MessageModel<MonthDataOutput>> getMonthData1()
|
|
|
|
|
{
|
|
|
|
|
var ret = new MonthDataOutput()
|
|
|
|
|
{
|
|
|
|
|
ProductQty = new ProductQtyDto(),
|
|
|
|
|
EqmtRate = new LineRateDto(),
|
|
|
|
|
ProductOKRate = new List<ProductOkRateDto>(),
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
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<string>() { "结案", "完工" };
|
|
|
|
|
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<string>();
|
|
|
|
|
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<decimal>();
|
|
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 动态月订单信息数据
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
[HttpGet]
|
|
|
|
|
public async Task<MessageModel<MonthDataOutput>> getMonthData2()
|
|
|
|
|
{
|
|
|
|
|
var ret = new MonthDataOutput()
|
|
|
|
|
{
|
|
|
|
|
ProductQty = new ProductQtyDto(),
|
|
|
|
|
EqmtRate = new LineRateDto(),
|
|
|
|
|
ProductOKRate = new List<ProductOkRateDto>(),
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
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<string>() { "结案", "完工" };
|
|
|
|
|
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<string>();
|
|
|
|
|
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<decimal>();
|
|
|
|
|
|
|
|
|
|
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);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 设备信息
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
[HttpGet]
|
|
|
|
|
public async Task<MessageModel<List<EqmtInfoOutput>>> getEqmtDetailList()
|
|
|
|
|
{
|
|
|
|
|
List<EqmtInfoOutput> ret = new List<EqmtInfoOutput>();
|
|
|
|
|
//设备列表
|
|
|
|
|
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<EqmtPubData, EqmtInfoOutput>();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
newOne.eqmt_name = eqmtList.Where(x => x.eqmt_id == item.eqmt_id).FirstOrDefault()?.line_name;
|
|
|
|
|
ret.Add(newOne);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return Success(ret);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|