using DapperORMCore.Context.DataContext;
using DapperORMCore.Model.CoreModel;
using DapperORMCore.Repository.IRepositorys;
using Microsoft.Extensions.Configuration;
using NXWMS.IService.NXWMS.Monitor;
using NXWMS.Model.AppModels.Condition.Monitor;
using NXWMS.Model.AppModels.Result.Base;
using NXWMS.Model.AppModels.Result.Monitor;
using NXWMS.Model.Common;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WestDistance.DapperORM.Repository.Repositorys;
namespace NXWMS.Service.NXWMS.Monitor
{
///
/// 监控管理服务
///
[AutoInject(typeof(IWcsMotManageService), InjectType.Scope)]
public class WcsMotManageService : ServiceBase, IWcsMotManageService
{
#region 全局变量、构造注入
///
/// 系统操作仓储中转
///
private IDataRepositoryContext _dataContext;
///
/// SQL节点仓储
///
private ISQLNodeRepository _iSQLNodeRepository;
///
/// 配置
///
private IConfiguration _configuration;
///
/// 构造注入
///
///
///
///
public WcsMotManageService(IDataRepositoryContext dataRepositoryContext, IConfiguration configuration, ISQLNodeRepository iSQLNodeRepository)
{
this._dataContext = dataRepositoryContext;
this._configuration = configuration;
this._iSQLNodeRepository = iSQLNodeRepository;
}
#endregion
#region 库位监控
///
/// 获取库位监控数据
///
/// 库位监控对象
///
public OperateResultInfo> GetBinMonitorData(WcsMotBalanceSearchMd searchMd)
{
try
{
#region SQL语句生成
StringBuilder sqlCondition = new StringBuilder();
if (!string.IsNullOrEmpty(searchMd.RegionMsg))
{
sqlCondition.Append($" AND REGION_CODE = '{searchMd.RegionMsg}'");
}
if (!string.IsNullOrEmpty(searchMd.ShelfMsg))
{
sqlCondition.Append($" AND SHELF_CODE = '{searchMd.ShelfMsg}'");
}
if (!string.IsNullOrEmpty(searchMd.DevTypeMsg))
{
sqlCondition.Append($" AND DEV_TYPE_CODE = '{searchMd.DevTypeMsg}'");
}
if (!string.IsNullOrEmpty(searchMd.DevMsg))
{
sqlCondition.Append($" AND DEV_CODE = '{searchMd.DevMsg}'");
}
StringBuilder sqlQueryBinMonitorData = new StringBuilder($@"
SELECT
*
FROM
VW_WMS_BALANCE_MONITOR
WHERE
1=1
{sqlCondition}
");
#endregion
List resultList = new DataRepository(_dataContext).Query(sqlQueryBinMonitorData.ToString()).ToList();
OperateResultInfo> retDataMsg = SuccessStatus(resultList);
return retDataMsg;
}
catch (Exception ex)
{
return FailMessageStatus>($"查询库位监控数据发生异常,【{ex.Message}】", null);
}
}
#endregion
#region 整线监控
///
/// 获取整线设备监控数据
///
/// 设备监控查询对象
///
public OperateResultInfo> GetBasDevData(WcsMotBasDevSearchMd searchMd)
{
try
{
#region SQL语句生成
StringBuilder sqlCondition = new StringBuilder();
if (!string.IsNullOrEmpty(searchMd.DevTypeMsg))
{
sqlCondition.Append($" AND DEV_TYPE_CODE = '{searchMd.DevTypeMsg}'");
}
if (!string.IsNullOrEmpty(searchMd.DevMsg))
{
sqlCondition.Append($" AND DEV_CODE = '{searchMd.DevMsg}'");
}
StringBuilder sqlQueryMotBasDevData = new StringBuilder($@"
SELECT
*
FROM
VW_WCS_BAS_DEV_MSG
WHERE
1=1
{sqlCondition}
");
StringBuilder sqlQueryMotOpcItemData = new StringBuilder($@"
SELECT
*
FROM
VW_WCS_OPC_ITEM_MONITOR
");
#endregion
List resultMotBasDevList = new DataRepository(_dataContext).Query(sqlQueryMotBasDevData.ToString()).ToList();
List resultMotOpcItemList = new DataRepository(_dataContext).Query(sqlQueryMotOpcItemData.ToString()).ToList();
if (resultMotBasDevList.Count > 0)
{
foreach (WcsMotBasDevResult item in resultMotBasDevList)
{
List opcItemMdList = resultMotOpcItemList.FindAll(x=>x.DEV_CODE == item.DEV_CODE);
item.PlcItemList = opcItemMdList;
}
OperateResultInfo> retDataMsg = SuccessStatus(resultMotBasDevList);
return retDataMsg;
}
else
{
return FailMessageStatus>($"未查询到整线设备监控数据。", null);
}
}
catch (Exception ex)
{
return FailMessageStatus>($"查询整线设备监控数据发生异常,【{ex.Message}】", null);
}
}
#endregion
#region 设备状态监控
///
/// 获取设备状态监控数据
///
/// 设备状态查询对象
///
public OperateResultInfo> GetWcsMotOpcItemStatusData(WcsMotOpcItemStatusSearchMd searchMd)
{
try
{
#region SQL语句生成
StringBuilder sqlCondition = new StringBuilder();
if (!string.IsNullOrEmpty(searchMd.DevTypeMsg))
{
sqlCondition.Append($" AND DEV_TYPE_CODE = '{searchMd.DevTypeMsg}'");
}
if (!string.IsNullOrEmpty(searchMd.DevMsg))
{
sqlCondition.Append($" AND DEV_CODE = '{searchMd.DevMsg}'");
}
if (!string.IsNullOrEmpty(searchMd.OpcGroupMsg))
{
sqlCondition.Append($" AND OPC_GROUP_CODE = '{searchMd.OpcGroupMsg}'");
}
if (!string.IsNullOrEmpty(searchMd.DevMsg))
{
sqlCondition.Append($" AND (OPC_ITEM_CODE = '{searchMd.OpcItemMsg}' OR OPC_ITEM_NAME like '%{searchMd.OpcItemMsg}%' OR OPC_ITEM_DESC like '%{searchMd.OpcItemMsg}%'");
}
if (!string.IsNullOrEmpty(searchMd.PlcMsg))
{
sqlCondition.Append($" AND PLC_CODE = '{searchMd.PlcMsg}'");
}
if (!string.IsNullOrEmpty(searchMd.OpcItemTypeMsg))
{
sqlCondition.Append($" AND OPC_ITEM_TYPE = '{searchMd.OpcItemTypeMsg}'");
}
StringBuilder sqlCountMotOpcItemData = new StringBuilder($@"SELECT COUNT(1) FROM VW_WCS_OPC_ITEM_MONITOR WHERE 1=1");
sqlCountMotOpcItemData.Append(sqlCondition.ToString());
int pageStartIndex = (searchMd.PageNum - 1) * searchMd.EveryPageQty;
int pageEndIndex = searchMd.PageNum * searchMd.EveryPageQty;
StringBuilder sqlQueryMotOpcItemData = new StringBuilder($@"
SELECT
*
FROM
VW_WCS_OPC_ITEM_MONITOR
WHERE
1=1
{sqlCondition}
ORDER BY UPDATE_TIME DESC,CREATE_TIME DESC
OFFSET {pageStartIndex} ROWS
FETCH NEXT {searchMd.EveryPageQty} ROWS ONLY
");
#endregion
int dataCount = Convert.ToInt32(new DataRepository