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