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 _equipmentbaseinfologRep; private readonly IRepository _v_GetEquipmentAlertRep; private readonly IRepository _sysDictTypeRep; private readonly IRepository _sysDictDataRep; private readonly IRepository _equipmentCurrentMonitorRep; /// /// 设备基础信息构造 /// /// /// /// /// /// public EquipmentBaseInfoService( IRepository equipmentbaseinfologRep, IRepository equipmentBaseInfoRep, IRepository v_GetEquipmentAlert, IRepository sysDictTypeRep, IRepository sysDictDataRep, IRepository equipmentCurrentMonitorRep ) { _equipmentbaseinfologRep = equipmentbaseinfologRep; _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, DetergentAddtime = s.DetergentAddtime, CuttingFluidAddTime = s.CuttingFluidAddTime, }) .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")] [UnitOfWork] 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(); equipmentBaseInfo.Id = Yitter.IdGenerator.YitIdHelper.NextId(); await _equipmentBaseInfoRep.InsertAsync(equipmentBaseInfo); //新增维护日志 var log = new Equipmentbaseinfolog() { EquipmentBaseInfoId = equipmentBaseInfo.Id, EquipmentID = equipmentBaseInfo.EquipmentId, OperatorType = EquipmentbaseinfoOperatorTypeEnum.新增设备, OperatorTypeName = (EquipmentbaseinfoOperatorTypeEnum.新增设备).ToString(), OperatorContent = "新增设备:" + equipmentBaseInfo.EquipmentName, }; await _equipmentbaseinfologRep.InsertAsync(log); } /// /// 删除设备基础信息管理 /// /// /// [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")] [UnitOfWork] public async Task Update(UpdateEquipmentBaseInfoInput input) { var isExistObj = await _equipmentBaseInfoRep.Where(u => u.Id == input.Id && u.EquipmentId == input.EquipmentId, false).FirstOrDefaultAsync(); if (isExistObj == null) throw Oops.Oh($"设备编号不能进行变更,修改失败!"); var equipmentBaseInfo = input.Adapt(); await _equipmentBaseInfoRep.UpdateAsync(equipmentBaseInfo, ignoreNullValues: false); if (isExistObj.CuttingFluidChangeTime?.ToString("yyyy-MM-dd") != equipmentBaseInfo.CuttingFluidChangeTime?.ToString("yyyy-MM-dd")) { //新增维护日志 var log = new Equipmentbaseinfolog() { EquipmentBaseInfoId = equipmentBaseInfo.Id, EquipmentID = equipmentBaseInfo.EquipmentId, OperatorType = EquipmentbaseinfoOperatorTypeEnum.切削液更换, OperatorTypeName = (EquipmentbaseinfoOperatorTypeEnum.切削液更换).ToString(), OperatorContent = "更换时间:" + equipmentBaseInfo.CuttingFluidChangeTime?.ToString("yyyy-MM-dd"), }; await _equipmentbaseinfologRep.InsertAsync(log); } if (isExistObj.Detergentchangetime?.ToString("yyyy-MM-dd") != equipmentBaseInfo.Detergentchangetime?.ToString("yyyy-MM-dd")) { //新增维护日志 var log = new Equipmentbaseinfolog() { EquipmentBaseInfoId = equipmentBaseInfo.Id, EquipmentID = equipmentBaseInfo.EquipmentId, OperatorType = EquipmentbaseinfoOperatorTypeEnum.清洗液更换, OperatorTypeName = (EquipmentbaseinfoOperatorTypeEnum.清洗液更换).ToString(), OperatorContent = "更换时间:" + equipmentBaseInfo.Detergentchangetime?.ToString("yyyy-MM-dd"), }; await _equipmentbaseinfologRep.InsertAsync(log); } if (isExistObj.DetergentAddtime?.ToString("yyyy-MM-dd") != equipmentBaseInfo.DetergentAddtime?.ToString("yyyy-MM-dd")) { //新增维护日志 var log = new Equipmentbaseinfolog() { EquipmentBaseInfoId = equipmentBaseInfo.Id, EquipmentID = equipmentBaseInfo.EquipmentId, OperatorType = EquipmentbaseinfoOperatorTypeEnum.清洗液添加, OperatorTypeName = (EquipmentbaseinfoOperatorTypeEnum.清洗液添加).ToString(), OperatorContent = "清洗液添加时间:" + equipmentBaseInfo.DetergentAddtime?.ToString("yyyy-MM-dd"), }; await _equipmentbaseinfologRep.InsertAsync(log); } if (isExistObj.CuttingFluidAddTime?.ToString("yyyy-MM-dd") != equipmentBaseInfo.CuttingFluidAddTime?.ToString("yyyy-MM-dd")) { //新增维护日志 var log = new Equipmentbaseinfolog() { EquipmentBaseInfoId = equipmentBaseInfo.Id, EquipmentID = equipmentBaseInfo.EquipmentId, OperatorType = EquipmentbaseinfoOperatorTypeEnum.切削液添加, OperatorTypeName = (EquipmentbaseinfoOperatorTypeEnum.切削液添加).ToString(), OperatorContent = "切削液添加时间:" + equipmentBaseInfo.CuttingFluidAddTime?.ToString("yyyy-MM-dd"), }; await _equipmentbaseinfologRep.InsertAsync(log); } } /// /// 获取设备基础信息管理 /// /// /// [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; } } }