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