EquipmentController.cs 8.33 KB
using HHECS.DAQShared.Models;
using HHECS.DAQWebClient.Data;
using HHECS.DAQWebClient.Dtos;
using HHECS.DAQWebClient.Models;
using HHECS.DAQWebClient.Services;
using HHECS.DAQWebClient.ViewModel;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using System.Linq.Expressions;

namespace HHECS.DAQWebClient.Areas.IOTCloud.Controllers
{
    [Area("IOTCloud")]
    [Authorize]
    public class EquipmentController : Controller
    {
        private readonly IFreeSql<IOTCloudFlag> _iotCloudFreeSql;
        private readonly CommonService _commonService;
        private readonly ILogger<EquipmentController> _logger;

        public EquipmentController(IFreeSql<IOTCloudFlag> iotCloudFreeSql, CommonService commonService, ILogger<EquipmentController> logger)
        {
            _iotCloudFreeSql = iotCloudFreeSql;
            _commonService = commonService;
            _logger = logger;
        }

        public IActionResult Index()
        {
            try
            {
                var model = new EquipmentQueryModel
                {
                    //DestinationArea = area
                };
                return View(model);
            }
            catch (Exception)
            {
                return View();
            }
        }

        [HttpGet]
        public async Task<IActionResult> Load(EquipmentQueryModel model, int page, int limit)
        {
            try
            {
                var query = _iotCloudFreeSql.Queryable<Equipment>().Where(GetFilter(model));
                var result = await query.Skip((page - 1) * limit).Take(limit).ToListAsync();
                var total = await query.CountAsync();
                return Ok(new ResultDto<List<Equipment>>
                {
                    Code = 0,
                    Count = total,
                    Data = result
                });
            }
            catch (Exception ex)
            {
                return Ok(new ResultDto<List<Equipment>>
                {
                    Code = 500,
                    Msg = ex.Message
                });
            }
        }

        private static Expression<Func<Equipment, bool>> GetFilter(EquipmentQueryModel model)
        {
            Expression<Func<Equipment, bool>> filter = x => true;
            if (!string.IsNullOrWhiteSpace(model.Code))
            {
                filter = filter.And(x => x.Code.Contains(model.Code));
            }
            if (!string.IsNullOrWhiteSpace(model.Name))
            {
                filter = filter.And(x => x.Name.Contains(model.Name));
            }
            if (model.EquipmentTypeId != 0)
            {
                filter = filter.And(x => x.EquipmentTypeId == model.EquipmentTypeId);
            }
            if (!string.IsNullOrWhiteSpace(model.DestinationArea))
            {
                filter = filter.And(x => x.DestinationArea == model.DestinationArea);
            }
            return filter;
        }

        [HttpPost]
        [Authorize(Roles = $"{nameof(RoleType.Admin)}")]
        public async Task<IActionResult> Add(Equipment model)
        {
            try
            {
                var currentUser = HttpContext.User.Identity?.Name ?? string.Empty;
                model.CreatedBy = currentUser;
                model.Created = DateTime.Now;
                await _iotCloudFreeSql.Insert(model).ExecuteAffrowsAsync();

                var equipmentId = _iotCloudFreeSql.Queryable<Equipment>().Where(x => x.Code == model.Code).First(x => x.Id);
                var equipmetPropTemps = _iotCloudFreeSql.Queryable<EquipmentTypePropTemplate>().Where(x => x.EquipmentTypeId == model.EquipmentTypeId).ToList(x => new EquipmentProp
                {
                    EquipmentId = equipmentId,
                    Code = x.Code,
                    Name = x.Name,
                    Address = x.Address,
                    PropType = x.PropType,
                    DataType = x.DataType,
                    MonitorCompareValue = x.MonitorCompareValue,
                    MonitorFailure = x.MonitorFailure,
                    MonitorNormal = x.MonitorNormal,
                    Remark = x.Description,
                    Value = string.Empty,
                    EquipmentAlarmTypeCode = x.EquipmentAlarmTypeCode,
                    AcquisitionRate = x.AcquisitionRate,
                    Created = DateTime.Now,
                    CreatedBy = currentUser,
                });
                await _iotCloudFreeSql.Insert(equipmetPropTemps).ExecuteAffrowsAsync();

                var msg = "新增成功";
                _logger.LogInformation(msg);
                return Ok(new ResultDto
                {
                    Code = 0,
                    Msg = msg
                });
            }
            catch (Exception ex)
            {
                var msg = $"新增失败:{ex.Message}";
                _logger.LogError(msg);
                return Ok(new ResultDto
                {
                    Code = 500,
                    Msg = msg
                });
            }
        }

        [HttpPost]
        public async Task<IActionResult> UpdateStatus(Equipment model)
        {
            try
            {
                var user = HttpContext.User.Identity?.Name ?? string.Empty;
                await _iotCloudFreeSql.Update<Equipment>(model.Id).Set(x => new Equipment
                {
                    Disable = model.Disable,
                    UpdatedBy = user,
                    Updated = DateTime.Now
                }).ExecuteAffrowsAsync();

                var msg = $"更新状态成功";
                _logger.LogInformation(msg);
                return Ok(new ResultDto
                {
                    Code = 0,
                    Msg = msg
                });
            }
            catch (Exception ex)
            {
                var msg = $"更新状态失败:{ex.Message}";
                _logger.LogError(msg);
                return Ok(new ResultDto
                {
                    Code = 500,
                    Msg = msg
                });
            }
        }

        [HttpPost]
        [Authorize(Roles = $"{nameof(RoleType.Admin)}")]
        public async Task<IActionResult> Update(Equipment model)
        {
            try
            {
                var user = HttpContext.User.Identity?.Name ?? string.Empty;
                await _iotCloudFreeSql.Update<Equipment>(model.Id).Set(x => new Equipment
                {
                    Code = model.Code,
                    Name = model.Name,
                    EquipmentTypeId = model.EquipmentTypeId,
                    ConnectName = model.ConnectName,
                    IP = model.IP,
                    Disable = model.Disable,
                    FactoryCode = model.FactoryCode,
                    ProjectCode = model.ProjectCode,
                    DestinationArea = model.DestinationArea,
                    Description = model.Description,
                    UpdatedBy = user,
                    Updated = DateTime.Now
                }).ExecuteAffrowsAsync();

                var msg = $"更新成功";
                _logger.LogInformation(msg);
                return Ok(new ResultDto
                {
                    Code = 0,
                    Msg = msg
                });
            }
            catch (Exception ex)
            {
                var msg = $"更新失败:{ex.Message}";
                _logger.LogError(msg);
                return Ok(new ResultDto
                {
                    Code = 500,
                    Msg = msg
                });
            }
        }

        [HttpPost]
        [Authorize(Roles = $"{nameof(RoleType.Admin)}")]
        public async Task<IActionResult> Delete(int[] ids)
        {
            try
            {
                await _iotCloudFreeSql.Delete<Equipment>().Where(x => ids.Contains(x.Id)).ExecuteAffrowsAsync();
                var msg = "删除成功";
                _logger.LogInformation(msg);
                return Ok(new ResultDto
                {
                    Code = 0,
                    Msg = msg
                });
            }
            catch (Exception ex)
            {
                var msg = $"删除失败:{ex.Message}";
                _logger.LogError(msg);
                return Ok(new ResultDto
                {
                    Code = 500,
                    Msg = msg
                });
            }
        }
    }
}