You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

464 lines
19 KiB

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

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