EquipmentController.cs 5.81 KB
using HHECS.DAQShared.DataAccess;
using HHECS.DAQShared.Dto;
using HHECS.DAQShared.Dto.Board;
using HHECS.DAQShared.Dto.Equipment;
using HHECS.DAQShared.Models;
using Microsoft.AspNetCore.Mvc;
using System.Text.Json;

namespace HHECS.DAQServer.Controllers
{
    /// <summary>
    /// 设备数据
    /// </summary>
    [Route("api/[controller]/[action]")]
    [ApiController]
    public class EquipmentController : ControllerBase
    {
        private readonly DataContext _context;

        public EquipmentController(DataContext dataContext)
        {
            _context = dataContext;
        }

        /// <summary>
        /// 推送设备实时数据
        /// </summary>
        /// <param name="data"></param>
        /// <returns></returns>
        [HttpPost]
        public APIResult SendEqipmentData(IEnumerable<EquipmentDataDto> data)
        {
            try
            {
                if (data.Count() == 0)
                {
                    return new APIResult($"数据不能为空!");
                }

                var tempSNs = data.Select(x => x.EquipmentSN).Distinct().ToList();
                if (tempSNs.Any(string.IsNullOrWhiteSpace))
                {
                    return new APIResult($"{nameof(EquipmentDataDto.EquipmentSN)}不能为空!");
                }

                var dbSNs = _context.Equipment.Where(x => tempSNs.Contains(x.Code)).ToList(x => x.Code).Distinct().ToList();
                if (dbSNs.Count != tempSNs.Distinct().Count())
                {
                    return new APIResult($"设备SN:[{string.Join(',', tempSNs.Except(dbSNs))}]未配置!");
                }

                var records = data.Select(x => new EquipmentDataRecord
                {
                    EquipmentCode = x.EquipmentSN,
                    Tags = JsonSerializer.Serialize(x.Reported),
                    IsHandle = false,
                    Version = x.Version,
                    CreateTime = DateTime.Now,
                    Timestamp = x.Timestamp,
                });
                _context.EquipmentDataRecord.AddRange(records);
                _context.SaveChanges();
                return new APIResult("成功", 200);
            }
            catch (Exception ex)
            {
                return new APIResult(ex.Message);
            }
        }

        /// <summary>
        /// 同步设备数据
        /// </summary>
        /// <param name="equipments"></param>
        /// <returns></returns>
        [HttpPost]
        public APIResult SyncEquipment(IEnumerable<EquipmentDto> equipments)
        {
            try
            {
                //if (!equipments.Any())
                //{
                //    return new APIResult($"数据不能为空");
                //}
                //else if (equipments.Where(x => string.IsNullOrWhiteSpace(x.EquipmentSN)).Any())
                //{
                //    return new APIResult($"{nameof(EquipmentDto.EquipmentSN)}不能为空!");
                //}

                //var equipmentSNs = equipments.Select(x => x.EquipmentSN).ToList();

                //var equipmentTemps = _context.Equipment.Where(x => equipmentSNs.Contains(x.EquipmentSN)).IncludeMany(x => x.EquipmentProperties).ToList();

                //foreach (var item in equipments)
                //{
                //    var temp = equipmentTemps.Where(x => x.EquipmentSN.Equals(item.EquipmentSN)).FirstOrDefault();
                //    //存在,则更新
                //    if (temp != null)
                //    {
                //        temp.Code = item.Code;
                //        temp.Name = item.Name;
                //        temp.Type = item.Type;
                //        temp.WarehouseCode = item.WarehouseCode;
                //        temp.Remark = item.Remark;
                //        temp.UpdateTime = DateTime.Now;
                //        _context.EquipmentProperties.RemoveRange(temp.EquipmentProperties);
                //        temp.EquipmentProperties = item.EquipmentProperties.Select(x => new EquipmentProperty
                //        {
                //            Code = x.Code,
                //            Name = x.Name,
                //            Tag = x.Tag,
                //            Value = string.Empty,
                //            Remark = x.Remark,
                //            CreateTime = DateTime.Now,
                //            UpdateTime = DateTime.Now,
                //        }).ToList();
                //        _context.Equipment.Update(temp);
                //        continue;
                //    }
                //    //不存在,则新增
                //    temp = new Equipment
                //    {
                //        Code = item.Code,
                //        Name = item.Name,
                //        Type = item.Type,
                //        EquipmentSN = item.EquipmentSN,
                //        EquipmentProperties = item.EquipmentProperties.Select(x => new EquipmentProperty
                //        {
                //            Code = item.Code,
                //            Name = x.Name,
                //            Tag = x.Tag,
                //            Value = string.Empty,
                //            Remark = x.Remark,
                //            CreateTime = DateTime.Now,
                //            UpdateTime = DateTime.Now,
                //        }).ToList(),
                //        WarehouseCode = item.WarehouseCode,
                //        Remark = item.Remark,
                //        CreateTime = DateTime.Now,
                //        UpdateTime = DateTime.Now,
                //    };
                //    _context.Equipment.Add(temp);
                //}
                //_context.SaveChanges();
                return new APIResult("成功", 200);
            }
            catch (Exception ex)
            {
                return new APIResult($"操作失败:{ex.Message}");
            }
        }
    }
}