using Furion.DatabaseAccessor;
using Furion.DatabaseAccessor.Extensions;
using Furion.DependencyInjection;
using Furion.DynamicApiController;
using Furion.Extensions;
using Furion.FriendlyException;
using iWare.Wms.Core;
using iWare.Wms.Core.Util;
using Mapster;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System.Linq.Dynamic.Core;
using System.Text;
using System.Web;
namespace iWare.Wms.Application
{
///
/// 设备基础信息管理服务
///
[ApiDescriptionSettings("基础数据管理", Name = "EquipmentBaseInfo", Order = 100)]
[Route("api/[Controller]")]
public class EquipmentBaseInfoService : IEquipmentBaseInfoService, IDynamicApiController, ITransient
{
private readonly IRepository _equipmentBaseInfoRep;
private readonly IRepository _v_GetEquipmentAlertRep;
private readonly IRepository _sysDictTypeRep;
private readonly IRepository _sysDictDataRep;
private readonly IRepository _equipmentCurrentMonitorRep;
///
/// 设备基础信息构造
///
///
///
///
///
///
public EquipmentBaseInfoService(
IRepository equipmentBaseInfoRep,
IRepository v_GetEquipmentAlert,
IRepository sysDictTypeRep,
IRepository sysDictDataRep,
IRepository equipmentCurrentMonitorRep
)
{
_equipmentBaseInfoRep = equipmentBaseInfoRep;
_v_GetEquipmentAlertRep = v_GetEquipmentAlert;
_sysDictTypeRep = sysDictTypeRep;
_sysDictDataRep = sysDictDataRep;
_equipmentCurrentMonitorRep = equipmentCurrentMonitorRep;
}
///
/// 查询设备告警信息
///
///
///
[HttpGet("getAlert")]
public async Task> Page([FromQuery] EquipmentAlertSearch input)
{
var equipmentAlertInfos = await _v_GetEquipmentAlertRep.DetachedEntities
.Where(!string.IsNullOrEmpty(input.EquipmentId), u => u.EquipmentId == input.EquipmentId)
.Where(!string.IsNullOrEmpty(input.EquipmentName), u => EF.Functions.Like(u.EquipmentName, $"%{input.EquipmentName.Trim()}%"))
.Where(!string.IsNullOrEmpty(input.WorkingProcedure), u => u.WorkingProcedure.Equals(input.WorkingProcedure))
.Where(!string.IsNullOrEmpty(input.AlertType),u=> (input.AlertType.Equals("1")&& u.IsAlertDetergent)
||(input.AlertType.Equals("2") && u.IsAlertKnifeTool)
||(input.AlertType.Equals("3") && u.IsAlertCuttingFluid)
||(input.AlertType.Equals("4") && u.IsAlert))
.OrderBy(PageInputOrder.OrderBuilder(input))
.ProjectToType().ToListAsync();
return equipmentAlertInfos;
}
///
/// 分页查询设备基础信息管理
///
///
///
[HttpGet("page")]
public async Task> Page([FromQuery] EquipmentBaseInfoSearch input)
{
var equipmentBaseInfos = await _equipmentBaseInfoRep.DetachedEntities
.Where(!string.IsNullOrEmpty(input.EquipmentId), u => u.EquipmentId == input.EquipmentId)
.Where(!string.IsNullOrEmpty(input.EquipmentName), u => u.EquipmentName == input.EquipmentName)
.Where(!string.IsNullOrEmpty(input.WorkingProcedure), u => EF.Functions.Like(u.WorkingProcedure, $"%{input.WorkingProcedure.Trim()}%"))
.Where(!string.IsNullOrEmpty(input.EquipmentModel), u => EF.Functions.Like(u.EquipmentModel, $"%{input.EquipmentModel.Trim()}%"))
.Select(s => new EquipmentBaseInfoOutput
{
Id = s.Id,
EquipmentId = s.EquipmentId,
EquipmentName = s.EquipmentName,
WorkingProcedure = s.WorkingProcedure,
EquipmentModel = s.EquipmentModel,
EquipmentIP = s.EquipmentIP,
EquipmentFunction = s.EquipmentFunction,
EquipmentBrand = s.EquipmentBrand,
EquipmentManufacturer = s.EquipmentManufacturer,
Detergentchangetime = s.Detergentchangetime,
DetergentChangeAlertThreshold = s.DetergentChangeAlertThreshold,
DetergentChangeCycle = s.DetergentChangeCycle,
KnifeToolChangeTime = s.KnifeToolChangeTime,
KnifeToolChangeAlertThreshold = s.KnifeToolChangeAlertThreshold,
CuttingFluidChangeAlertThreshold = s.CuttingFluidChangeAlertThreshold,
CuttingFluidChangeTime = s.CuttingFluidChangeTime,
Remarks = s.Remarks,
CreatedTime = s.CreatedTime,
TactTime=s.TactTime,
})
.Distinct()
.OrderBy(PageInputOrder.OrderBuilder(input))
.ProjectToType()
.ToADPagedListAsync(input.PageNo, input.PageSize);
return equipmentBaseInfos;
}
///
/// 根据设备基础信息管理导出Excel
///
/// 设备基础信息管理
/// 导出的Excel文件
[HttpGet("toExcel")]
public async Task ToExcelAsync([FromQuery] EquipmentBaseInfoSearch input)
{
var equipmentBaseInfos = await _equipmentBaseInfoRep.DetachedEntities
.Where(!string.IsNullOrEmpty(input.EquipmentId), u => u.EquipmentId == input.EquipmentId)
.Where(!string.IsNullOrEmpty(input.EquipmentName), u => u.EquipmentName == input.EquipmentName)
.Where(!string.IsNullOrEmpty(input.WorkingProcedure), u => EF.Functions.Like(u.WorkingProcedure, $"%{input.WorkingProcedure.Trim()}%"))
.Where(!string.IsNullOrEmpty(input.EquipmentModel), u => EF.Functions.Like(u.EquipmentModel, $"%{input.EquipmentModel.Trim()}%"))
.Select(s=>new EquipmentBaseInfoExcelOutput
{
Id = s.Id,
EquipmentId = s.EquipmentId,
EquipmentName = s.EquipmentName,
WorkingProcedure = s.WorkingProcedure,
EquipmentModel = s.EquipmentModel,
EquipmentIP = s.EquipmentIP,
EquipmentFunction = s.EquipmentFunction,
//EquipmentBrand = s.EquipmentBrand,
EquipmentManufacturer = s.EquipmentManufacturer,
Detergentchangetime = s.Detergentchangetime,
DetergentChangeAlertThreshold = s.DetergentChangeAlertThreshold,
//DetergentChangeCycle = s.DetergentChangeCycle,
CuttingFluidChangeTime = s.CuttingFluidChangeTime,
CuttingFluidChangeAlertThreshold = s.CuttingFluidChangeAlertThreshold,
CreatedTime = s.CreatedTime.ConvertToDateTime(),
UpdatedTime= s.UpdatedTime.ConvertToDateTime(),
TactTime = s.TactTime,
})
.Distinct()
.OrderBy(PageInputOrder.OrderBuilder(input))
.ProjectToType().ToListAsync();
//foreach (EquipmentBaseInfoExcelOutput item in equipmentBaseInfos)
//{
// item.CreatedTime = !item.CreatedTime.HasValue ? null : Convert.ToDateTime(item.CreatedTime).ToString("yyyy-MM-dd hh:mm");
//}
MemoryStream ms = new();
DataConvertUtil.ToExcelData(equipmentBaseInfos, _sysDictTypeRep, _sysDictDataRep, out List headers,
out List> data, out string sheetName);
ExcelUtil.ToExcel(headers, data, sheetName, ms);
ms.Position = 0;
var fileName = HttpUtility.UrlEncode($"{sheetName}[{DateTimeOffset.Now:yyyy-MM-dd}].xlsx", Encoding.GetEncoding("UTF-8"));
return new FileStreamResult(ms, "application/octet-stream") { FileDownloadName = fileName };
}
///
/// 增加设备基础信息管理
///
///
///
[HttpPost("add")]
public async Task Add(AddEquipmentBaseInfoInput input)
{
var isExist = await _equipmentBaseInfoRep.AnyAsync(u => u.EquipmentId == input.EquipmentId, false);
if (isExist) throw Oops.Oh($"当前设备编号已存在,新增失败!");
var equipmentBaseInfo = input.Adapt();
await _equipmentBaseInfoRep.InsertAsync(equipmentBaseInfo);
}
///
/// 删除设备基础信息管理
///
///
///
[HttpPost("delete")]
public async Task Delete(DeleteEquipmentBaseInfoInput input)
{
string[] EquiArr = new string[] {"EOP10", "EOP20", "EOP30", "EOP35", "EOP40", "EOP50", "EOP60", "EOP70", "EOP80" };
var equipmentBaseInfo = await _equipmentBaseInfoRep.FirstOrDefaultAsync(u => u.Id == input.Id);
if(EquiArr.Contains(equipmentBaseInfo.EquipmentId)) throw Oops.Oh($"系统默认的设备不能进行删除!");
await _equipmentBaseInfoRep.DeleteAsync(equipmentBaseInfo);
}
///
/// 批量删除设备基础信息管理
///
///
///
[HttpPost("selectDelete")]
public async Task SelectDelete(List input)
{
StringBuilder builder = new StringBuilder();
string[] EquiArr = new string[] { "EOP10", "EOP20", "EOP30", "EOP35", "EOP40", "EOP50", "EOP60", "EOP70", "EOP80" };
foreach (EquipmentBaseInfoInput item in input)
{
if (EquiArr.Contains(item.EquipmentId)) {
if (string.IsNullOrEmpty(builder.ToString()))
{
builder.Append(item.EquipmentId);
}
else
{
builder.Append("," + item.EquipmentId);
}
}
}
if (!string.IsNullOrEmpty(builder.ToString()))
{
throw Oops.Oh($"系统默认的设备【"+builder.ToString()+"】不能进行删除!");
}
foreach (var item in input)
{
var equipmentBaseInfo = await _equipmentBaseInfoRep.FirstOrDefaultAsync(u => u.Id == item.Id);
await _equipmentBaseInfoRep.DeleteAsync(equipmentBaseInfo);
}
}
///
/// 更新设备基础信息管理
///
///
///
[HttpPost("edit")]
public async Task Update(UpdateEquipmentBaseInfoInput input)
{
var isExist = await _equipmentBaseInfoRep.AnyAsync(u => u.Id == input.Id && u.EquipmentId == input.EquipmentId, false);
if (!isExist) throw Oops.Oh($"设备编号不能进行变更,修改失败!");
var equipmentBaseInfo = input.Adapt();
await _equipmentBaseInfoRep.UpdateAsync(equipmentBaseInfo,ignoreNullValues:false);
}
///
/// 获取设备基础信息管理
///
///
///
[HttpGet("detail")]
public async Task Get([FromQuery] QueryeEquipmentBaseInfoInput input)
{
return (await _equipmentBaseInfoRep.DetachedEntities.FirstOrDefaultAsync(u => u.Id == input.Id)).Adapt();
}
///
/// 获取设备基础信息管理列表
///
///
///
[HttpGet("list")]
public async Task> List([FromQuery] EquipmentBaseInfoInput input)
{
return await _equipmentBaseInfoRep.DetachedEntities.ProjectToType().ToListAsync();
}
///
/// 查询设备基础信息
///
///
[HttpGet("GetSelectEquipmentName")]
public async Task> GetSelectEquipmentName([FromQuery] string Type)
{
List names = new List();//有测量信息的设备
names.Add("EOP10");
names.Add("EOP20");
names.Add("EOP30");
names.Add("EOP35");
names.Add("EOP40");
names.Add("EOP60");
names.Add("EOP80");
List KnifeToolnames = new List();//有刀具的设备
KnifeToolnames.Add("EOP10");
KnifeToolnames.Add("EOP20");
KnifeToolnames.Add("EOP35");
KnifeToolnames.Add("EOP50");
KnifeToolnames.Add("EOP60");
var equipmentBaseInfos = await _equipmentBaseInfoRep.DetachedEntities
.Where(!string.IsNullOrEmpty(Type), u => (Type.ToUpper().Equals("QUALITY")?names.Contains(u.EquipmentId):false)||(Type.ToUpper().Equals("KNIFETOOL") ? KnifeToolnames.Contains(u.EquipmentId) : false))
.ProjectToType()
.OrderBy(o=>o.EquipmentId)
.ToListAsync();
return equipmentBaseInfos;
}
}
}