using Furion.DatabaseAccessor; using Furion.FriendlyException; using iWare.Wms.Core.Enum; using iWare.Wms.Core; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using StackExchange.Redis; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Xml.Linq; using Admin.NET.Application; using Mapster; using Microsoft.EntityFrameworkCore; using Furion.DynamicApiController; using Furion.DependencyInjection; using System.Data; using System.Dynamic; using Admin.NET.Core.Helper; namespace iWare.Wms.Application { /// /// 大屏统计服务 /// [ApiDescriptionSettings("统计查询", Name = "ScreenDisplay", Order = 100)] [Route("api/[Controller]")] [DisableOpLog] public class ScreenDisplayService:IDynamicApiController, ITransient { private readonly IRepository _wareLocation; private readonly IRepository _v_EmptyLocation; private readonly IRepository _wareDeviceWarning; private readonly IRepository _wareTask; //private readonly IRepository _wareEquipment; private readonly IRepository _wareSite; public ScreenDisplayService( IRepository wareLocation, IRepository v_EmptyLocation, IRepository wareDeviceWarning, IRepository wareTask, //IRepository wareEquipment, IRepository wareSite) { _wareLocation = wareLocation; _v_EmptyLocation = v_EmptyLocation; _wareDeviceWarning = wareDeviceWarning; _wareTask = wareTask; //_wareEquipment = wareEquipment; _wareSite = wareSite; } /// /// 数量统计 /// /// [HttpGet("/ScreenDisplay/pagedetails")] [AllowAnonymous] [DisableOpLog] public async Task>> PageDetails() { string sql = this.GetStatisticsSql(); //string sql2 = GetLocationCountSql(); //string sql3 = GetSrmCoordinateSql(); Dictionary> keyValues = new(); List dynamics = (await _wareLocation.SqlQueryAsync(sql)).ToDynamicList(); keyValues.Add("StatisticalAnalysis", dynamics); //List dynamics2 = (await _warehousOrderDetailRep.SqlQueryAsync(sql2)).ToDynamicList(); //keyValues.Add("LocationCount", dynamics2); //List dynamics3 = (await _warehousOrderDetailRep.SqlQueryAsync(sql3)).ToDynamicList(); //keyValues.Add("SrmCoordinate", dynamics3); return keyValues; } /// /// 设备报警 /// /// [HttpGet("/ScreenDisplay/pagewarning")] [AllowAnonymous] [DisableOpLog] public async Task> PageWarning([FromQuery] QueryTaskInput input) { //string deviceName = ""; //if (input.SiteCode == "101" || input.SiteCode == "102") //{ // deviceName = "一号堆垛机"; //} //else if (input.SiteCode == "103" || input.SiteCode == "104") //{ // deviceName = "二号堆垛机"; //} var deviceWarningOutputs = await _wareDeviceWarning.DetachedEntities .Where(u => u.Status == 0) .OrderByDescending(u => u.Id) .Select(u => new { u.WarningTime, u.WarningContent, u.DeviceName }) .ProjectToType().ToListAsync(); //.ToADPagedListAsync(input.PageNo, input.PageSize); //if (!string.IsNullOrWhiteSpace(input.SiteCode)) //{ // var vs = await _wareSite.DetachedEntities.Where(u => u.Code == input.SiteCode).FirstOrDefaultAsync(); // if (!string.IsNullOrWhiteSpace(vs.OperationRemarks)) // { // deviceWarningOutputs.Add(new DeviceWarningOutput() { DeviceName = input.SiteCode, WarningContent = vs.OperationRemarks, WarningTime = DateTime.Now }); // } //} return deviceWarningOutputs.ToADPagedList(input.PageNo, input.PageSize); } /// /// 出库任务 /// /// [HttpGet("/ScreenDisplay/pageouttask")] [AllowAnonymous] [DisableOpLog] public async Task> PageOutTask([FromQuery] PageInputCustomBase input) { var temps = await _wareTask.DetachedEntities.Where(u => u.TaskCategory == TaskCategoryEnum.出库任务) .OrderByDescending(u => u.Id).ToListAsync(); List outTaskOutputs = new List(); OutTaskOutput outTaskOutput = null; foreach (var item in temps) { outTaskOutput = new OutTaskOutput(); outTaskOutput.TaskState = Enum.Parse(typeof(TaskStateEnum), item.TaskState.ToString()).ToString(); outTaskOutput.DeviceName = item.FromLocationCode; outTaskOutput.OrderNo = item.ToLocationCode; //outTaskOutput.TaskNo = item.TaskNo; outTaskOutput.PartNo = item.PartCode; outTaskOutputs.Add(outTaskOutput); } return outTaskOutputs.ToADPagedList(input.PageNo, input.PageSize); } /// /// 入库任务 /// /// [HttpGet("/ScreenDisplay/pageintask")] [AllowAnonymous] [DisableOpLog] public async Task> PageInTask([FromQuery] PageInputCustomBase input) { var temps = await _wareTask.DetachedEntities.Where(u => u.TaskCategory == TaskCategoryEnum.入库任务) .OrderByDescending(u => u.Id).ToListAsync(); //.ToADPagedListAsync(input.PageNo, input.PageSize); List outTaskOutputs = new List(); OutTaskOutput outTaskOutput = null; foreach (var item in temps) { outTaskOutput = new OutTaskOutput(); outTaskOutput.TaskState = Enum.Parse(typeof(TaskStateEnum), item.TaskState.ToString()).ToString(); outTaskOutput.DeviceName = item.FromLocationCode; outTaskOutput.OrderNo = item.ToLocationCode; //outTaskOutput.TaskNo = item.TaskNo; outTaskOutput.PartNo = item.PartCode; outTaskOutputs.Add(outTaskOutput); } return outTaskOutputs.ToADPagedList(input.PageNo, input.PageSize); } /// /// 数量统计 /// /// [HttpGet("/ScreenDisplay/page2details")] [AllowAnonymous] [DisableOpLog] public async Task>> Page2Details() { string sql = this.GetStatisticsSql2(); string sql2 = GetStaffSql(); string sql3 = GetWorkLoadSql(); string sql4 = GetDeliveryTimeSql(); Dictionary> keyValues = new(); //List dynamics = (await _warehousOrderDetailRep.SqlQueryAsync(sql)).ToDynamicList(); //keyValues.Add("StatisticalAnalysis", dynamics); //List dynamics2 = (await _warehousOrderDetailRep.SqlQueryAsync(sql2)).ToDynamicList(); //keyValues.Add("Staffload", dynamics2); //List dynamics3 = (await _warehousOrderDetailRep.SqlQueryAsync(sql3)).ToDynamicList(); //keyValues.Add("WorkLoad", dynamics3); //List dynamics4 = (await _warehousOrderDetailRep.SqlQueryAsync(sql4)).ToDynamicList(); //keyValues.Add("DeliveryTime", dynamics4); return keyValues; } /// /// 大屏画面1统计分析 /// /// private string GetStatisticsSql() { string sql = @$" SELECT ISNULL(COUNT(1),0) value,'今日出入库数' [key] FROM dbo.ware_task_bak with(nolock) WHERE DATEDIFF(day,CreatedTime,GETDATE()) = 0 UNION ALL SELECT ISNULL(COUNT(1),0) value,'本月出入库数' [key] FROM dbo.ware_task_bak with(nolock) WHERE DATEDIFF(MONTH,CreatedTime,GETDATE()) = 0 UNION ALL SELECT ISNULL(COUNT(1),0) value,'本年出入库数' [key] FROM dbo.ware_task_bak with(nolock) WHERE DATEDIFF(YEAR,CreatedTime,GETDATE()) = 0 UNION ALL SELECT ISNULL(COUNT(1),0) value,'总库位数' [key] FROM dbo.wms_place with(nolock) WHERE IsDeleted = 0 UNION ALL SELECT ISNULL(COUNT(1),0) value,'满库位数' [key] FROM dbo.ware_location_vs_container with(nolock) UNION ALL SELECT ISNULL(CoordinateX,0) value,'一号堆垛机位置' [key] FROM dbo.ware_equipment with(nolock) WHERE Id = 1"; return sql; } private string GetLocationCountSql() { string sql = @"SELECT ISNULL(COUNT(1),0) value,'总库位数' [key] FROM dbo.ware_location WHERE IsDeleted = 0 UNION ALL SELECT ISNULL(COUNT(1),0) value,'空库位数' [key] FROM dbo.v_empty_location"; return sql; } private string GetSrmCoordinateSql() { string sql = @"SELECT ISNULL(CoordinateX,0) value,'一号堆垛机位置' [key] FROM dbo.ware_equipment WHERE DeviceId = 1 UNION ALL SELECT ISNULL(CoordinateX,0) value,'二号堆垛机位置' [key] FROM dbo.ware_equipment WHERE DeviceId = 2"; return sql; } private string GetStatisticsSql2() { string sql = @"SELECT ISNULL(COUNT(1),0) value,'立库65cm库位总库位数' [key] FROM dbo.ware_location with(nolock) WHERE IsDeleted = 0 AND [High] = 650 UNION ALL SELECT ISNULL(COUNT(1),0) value,'立库65cm库位空库位数' [key] FROM dbo.v_empty_location with(nolock) WHERE [High] = 650 UNION ALL SELECT ISNULL(COUNT(1),0) value,'立库80cm库位总库位数' [key] FROM dbo.ware_location with(nolock) WHERE IsDeleted = 0 AND [High] = 800 UNION ALL SELECT ISNULL(COUNT(1),0) value,'立库80cm库位空库位数' [key] FROM dbo.v_empty_location with(nolock) WHERE [High] = 800 UNION ALL SELECT ISNULL(COUNT(1),0) value,'立库105cm库位总库位数' [key] FROM dbo.ware_location with(nolock) WHERE IsDeleted = 0 AND [High] = 1050 UNION ALL SELECT ISNULL(COUNT(1),0) value,'立库105cm库位空库位数' [key] FROM dbo.v_empty_location with(nolock) WHERE [High] = 1050 UNION ALL SELECT ISNULL(COUNT(1),0) value,'立库105cm库位空库位数' [key] FROM dbo.v_empty_location with(nolock) WHERE [High] = 1050 UNION ALL select ISNULL(COUNT(1),0) as value,RIGHT(convert(varchar(7),CreatedTime,120),2) + '月入' as [key] from ware_orders_details with(nolock) where DATEDIFF(YEAR,CreatedTime,GETDATE()) = 0 group by convert(varchar(7),CreatedTime,120) UNION ALL select ISNULL(COUNT(1),0) as value,RIGHT(convert(varchar(7),CreatedTime,120),2) + '月出' as [key] from ware_orders_details with(nolock) where DATEDIFF(YEAR,CreatedTime,GETDATE()) = 0 group by convert(varchar(7),CreatedTime,120) UNION ALL select ISNULL(COUNT(1),0) as value,'年度出入库量合计' as [key] from ware_orders_details with(nolock) where DATEDIFF(YEAR,CreatedTime,GETDATE()) = 0 UNION ALL select ISNULL(COUNT(1),0) as value,'年度出库量合计' as [key] from ware_orders_details with(nolock) where DATEDIFF(YEAR,CreatedTime,GETDATE()) = 0 AND OutInFlag = 1 UNION ALL select ISNULL(COUNT(1),0) as value,'年度入库量合计' as [key] from ware_orders_details with(nolock) where DATEDIFF(YEAR,CreatedTime,GETDATE()) = 0 AND OutInFlag = 0 UNION ALL select ISNULL(COUNT(1),0) as value,'立库未完成项合计' as [key] from ware_orders_details with(nolock) where StockFlag = 0 AND OrderStatus <> 2 UNION ALL select ISNULL(COUNT(1),0) as value,'平库未完成项合计' as [key] from ware_orders_details with(nolock) where StockFlag = 1 AND OrderStatus <> 2 UNION ALL select ISNULL(COUNT(1),0) as value,'立库订单件出库' as [key] from ware_orders_details a with(nolock) left join ware_orders b with(nolock) ON a.OrdersId = b.Id where a.StockFlag = 0 AND b.OrderType = 2 and a.OrderStatus <> 2 UNION ALL select ISNULL(COUNT(1),0) as value,'平库订单件出库' as [key] from ware_orders_details a with(nolock) left join ware_orders b with(nolock) ON a.OrdersId = b.Id where a.StockFlag = 1 AND b.OrderType = 2 and a.OrderStatus <> 2 UNION ALL select ISNULL(COUNT(1),0) as value,'立库订单件入库' as [key] from ware_orders_details a with(nolock) left join ware_orders b with(nolock) ON a.OrdersId = b.Id where a.StockFlag = 0 AND b.OrderType = 1 and a.OrderStatus <> 2 UNION ALL select ISNULL(COUNT(1),0) as value,'平库订单件入库' as [key] from ware_orders_details a with(nolock) left join ware_orders b with(nolock) ON a.OrdersId = b.Id where a.StockFlag = 1 AND b.OrderType = 1 and a.OrderStatus <> 2 UNION ALL select ISNULL(COUNT(1),0) as value,'立库领用单' as [key] from ware_orders_details a with(nolock) left join ware_orders b with(nolock) ON a.OrdersId = b.Id where a.StockFlag = 0 AND b.OrderType = 10 and a.OrderStatus <> 2 UNION ALL select ISNULL(COUNT(1),0) as value,'平库领用单' as [key] from ware_orders_details a with(nolock) left join ware_orders b with(nolock) ON a.OrdersId = b.Id where a.StockFlag = 1 AND b.OrderType = 10 and a.OrderStatus <> 2 UNION ALL select ISNULL(COUNT(1),0) as value,'立库调拨单' as [key] from ware_orders_details a with(nolock) left join ware_orders b with(nolock) ON a.OrdersId = b.Id where a.StockFlag = 0 AND b.OrderType = 32 and a.OrderStatus <> 2 UNION ALL select ISNULL(COUNT(1),0) as value,'平库调拨单' as [key] from ware_orders_details a with(nolock) left join ware_orders b with(nolock) ON a.OrdersId = b.Id where a.StockFlag = 1 AND b.OrderType = 32 and a.OrderStatus <> 2 UNION ALL select ISNULL(COUNT(1),0) as value,'立库产成品入库' as [key] from ware_orders_details a with(nolock) left join ware_orders b with(nolock) ON a.OrdersId = b.Id where a.StockFlag = 0 AND b.OrderType = 18 and a.OrderStatus <> 2 UNION ALL select ISNULL(COUNT(1),0) as value,'平库产成品入库' as [key] from ware_orders_details a with(nolock) left join ware_orders b with(nolock) ON a.OrdersId = b.Id where a.StockFlag = 1 AND b.OrderType = 18 and a.OrderStatus <> 2"; return sql; } private string GetStaffSql() { string sql = @"SELECT ISNULL(COUNT(1),0) value,CreatedUserName [key] FROM dbo.ware_orders_details with(nolock) group by CreatedUserName"; return sql; } private string GetWorkLoadSql() { string sql = @"SELECT ISNULL(COUNT(1),0) value,UpdatedUserName [key] FROM dbo.ware_sorting_details with(nolock) group by UpdatedUserName"; return sql; } private string GetDeliveryTimeSql() { string sql = @" --select ISNULL(COUNT(1),0) as value,RIGHT(convert(varchar(13),CreatedTime,120),2) + '点立库入' as [key] from ware_orders_details with(nolock) where DATEDIFF(day,CreatedTime,GETDATE()) = 0 AND OutInFlag = 0 AND StockFlag = 0 group by convert(varchar(13),CreatedTime,120) --UNION ALL select ISNULL(COUNT(1),0) as value,RIGHT(convert(varchar(13),CreatedTime,120),2) + '点立库出' as [key] from ware_orders_details with(nolock) where DATEDIFF(day,CreatedTime,GETDATE()) = 0 AND OutInFlag = 1 AND StockFlag = 0 group by convert(varchar(13),CreatedTime,120) -- UNION ALL --select ISNULL(COUNT(1),0) as value,RIGHT(convert(varchar(13),CreatedTime,120),2) + '点平库入' as [key] from ware_orders_details with(nolock) where DATEDIFF(day,CreatedTime,GETDATE()) = 0 AND OutInFlag = 0 AND StockFlag = 1 group by convert(varchar(13),CreatedTime,120) UNION ALL select ISNULL(COUNT(1),0) as value,RIGHT(convert(varchar(13),CreatedTime,120),2) + '点平库出' as [key] from ware_orders_details with(nolock) where DATEDIFF(day,CreatedTime,GETDATE()) = 0 AND OutInFlag = 1 AND StockFlag = 1 group by convert(varchar(13),CreatedTime,120)"; return sql; } } }