212 lines
		
	
	
		
			8.7 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			212 lines
		
	
	
		
			8.7 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
using System;
 | 
						|
using System.Collections.Generic;
 | 
						|
using System.IO;
 | 
						|
using System.Linq;
 | 
						|
using APT.BaseData.Domain.ApiModel.OP;
 | 
						|
using APT.BaseData.Domain.Entities;
 | 
						|
using APT.BaseData.Domain.Entities.OP;
 | 
						|
using APT.BaseData.Domain.Enums.PF;
 | 
						|
using APT.CMS.Domain.ApiModel;
 | 
						|
using APT.CMS.Domain.Entities.CP;
 | 
						|
using APT.Infrastructure.Api;
 | 
						|
using APT.Infrastructure.Api.Redis;
 | 
						|
using APT.Infrastructure.Core;
 | 
						|
using APT.Utility;
 | 
						|
using Microsoft.AspNetCore.Mvc;
 | 
						|
using APT.BaseData.Domain.ApiModel.Platform;
 | 
						|
 | 
						|
namespace APT.OP.WebApi.Controllers.Api
 | 
						|
{
 | 
						|
    [Route("api/OP/OPFileFirmware")]
 | 
						|
    public class FileFirmwareController : APTApiController<T_OP_FILE_FIRMWARE>
 | 
						|
    {
 | 
						|
        /// <summary>
 | 
						|
        /// 上传文件
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="filter"></param>
 | 
						|
        /// <returns></returns>
 | 
						|
        [HttpPost, Route("UploadFile")]
 | 
						|
        public JsonActionResult<OPFileReulst> UploadFile()
 | 
						|
        {
 | 
						|
            return SafeExecute(() =>
 | 
						|
            {
 | 
						|
                string result = string.Empty;
 | 
						|
                List<T_OP_FILE_FIRMWARE> fileList = new List<T_OP_FILE_FIRMWARE>();
 | 
						|
 | 
						|
                var httpRequest = HttpContext.Request;
 | 
						|
                var strOrgId = httpRequest.Form["OrgId"][0];  // 获取 组织
 | 
						|
                var isSaveSelfStr = httpRequest.Form["IsSaveSelf"].Any() ? httpRequest.Form["IsSaveSelf"][0] : "false";  // 是否存储本身
 | 
						|
                if (string.IsNullOrEmpty(strOrgId))
 | 
						|
                    throw new Exception("组织不允许为空");
 | 
						|
                var orgId = new Guid(strOrgId);
 | 
						|
                // 获取 组织
 | 
						|
 | 
						|
                //返回的文件地址
 | 
						|
                List<string> filenames = new List<string>();
 | 
						|
                var now = DateTime.Now;
 | 
						|
                //文件存储路径
 | 
						|
                var filePath = string.Format("/{0}/{1}/{2}/", now.ToString("yyyy"), now.ToString("yyyyMM"), now.ToString("yyyyMMdd"));
 | 
						|
                var fullFilePath = $"{ ConfigurationManager.AppSettings["Firmware_Local"]}{filePath}";
 | 
						|
                var files = httpRequest.Form.Files;
 | 
						|
 | 
						|
                if (!Directory.Exists(fullFilePath))
 | 
						|
                {
 | 
						|
                    Directory.CreateDirectory(fullFilePath);
 | 
						|
                }
 | 
						|
                try
 | 
						|
                {
 | 
						|
                    foreach (var item in files)
 | 
						|
                    {
 | 
						|
                        if (item != null)
 | 
						|
                        {
 | 
						|
                            //文件后缀
 | 
						|
                            var fileExtension = Path.GetExtension(item.FileName);
 | 
						|
                            var strDateTime = DateTime.Now.ToString("yyMMddhhmmssfff"); //取得时间字符串
 | 
						|
                            var strRan = Convert.ToString(new Random().Next(100, 999)); //生成三位随机数
 | 
						|
                            var saveName = strDateTime + strRan + fileExtension;
 | 
						|
 | 
						|
                            //判断文件大小    
 | 
						|
                            long length = item.Length;
 | 
						|
                            if (length > 1024 * 1024 * 4) //4M
 | 
						|
                            {
 | 
						|
                                break;
 | 
						|
                                //return Error("上传的文件不能大于4M");
 | 
						|
                            }
 | 
						|
 | 
						|
                            //插入图片数据
 | 
						|
                            using (FileStream fs = System.IO.File.Create(fullFilePath + saveName))
 | 
						|
                            {
 | 
						|
                                item.CopyTo(fs);
 | 
						|
                                fs.Flush();
 | 
						|
                            }
 | 
						|
                            filenames.Add(filePath + saveName);
 | 
						|
                            T_OP_FILE_FIRMWARE file = new T_OP_FILE_FIRMWARE
 | 
						|
                            {
 | 
						|
                                ID = Guid.NewGuid(),
 | 
						|
                                FIRMWARE_PATH = filePath + saveName,
 | 
						|
                                ORG_ID = orgId,
 | 
						|
                                FIRMWARE_NAME = item.FileName,
 | 
						|
                                FIRMWARE_TYPE = item.ContentType,
 | 
						|
                                FIRMWARE_VERSION = strDateTime + strRan
 | 
						|
                            };
 | 
						|
                            Byte[] fileData = new Byte[item.Length];
 | 
						|
                            Stream sr = item.OpenReadStream();//创建数据流对象 
 | 
						|
                            sr.Read(fileData, 0, (int)item.Length);
 | 
						|
                            file.FIRMWARE_DATA = fileData;
 | 
						|
                            fileList.Add(file);
 | 
						|
                        }
 | 
						|
                    }
 | 
						|
                    if (fileList.Count > 0)
 | 
						|
                        BantchAddEntity(fileList);
 | 
						|
 | 
						|
                    return new OPFileReulst() { Result = true, FilePath = filenames };
 | 
						|
                }
 | 
						|
                catch (Exception ex)
 | 
						|
                {
 | 
						|
                    //这边增加日志,记录错误的原因
 | 
						|
                    //ex.ToString();
 | 
						|
                    return new OPFileReulst() { Result = false, ErrorMsg = "文件不存在" };
 | 
						|
                }
 | 
						|
 | 
						|
            });
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// 查询所有租户充电桩
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="pageFilter"></param>
 | 
						|
        /// <returns></returns>
 | 
						|
        [HttpPost, Route("OrderPagedAllPile")]
 | 
						|
        public PagedActionResult<T_CP_CHARGING_PILE> OrderPagedAllPile([FromBody] KeywordPageFilter pageFilter)
 | 
						|
        {
 | 
						|
            return SafeGetPagedData<T_CP_CHARGING_PILE>((result) =>
 | 
						|
            {
 | 
						|
                var tenant = pageFilter.Parameter1;
 | 
						|
                var filter = new KeywordPageFilter
 | 
						|
                {
 | 
						|
                    FilterGroup = pageFilter.FilterGroup
 | 
						|
                };
 | 
						|
 | 
						|
                filter.IgnoreOrgRule = true;
 | 
						|
                if (tenant == null)
 | 
						|
                {
 | 
						|
                    filter.IsMultipleDb = true;
 | 
						|
                }
 | 
						|
                else
 | 
						|
                {
 | 
						|
                    filter.IsSpecifyDb = true;
 | 
						|
                    filter.SpecifyTenant = tenant;
 | 
						|
                }
 | 
						|
                var piles = GetOrderPageEntities<T_CP_CHARGING_PILE>(null, filter);
 | 
						|
                result.Data = piles.Data;
 | 
						|
                result.TotalCount = piles.TotalCount;
 | 
						|
            });
 | 
						|
        }
 | 
						|
 | 
						|
        /// <summary>
 | 
						|
        /// 固件升级
 | 
						|
        /// </summary>
 | 
						|
        /// <param name="filter"></param>
 | 
						|
        /// <returns></returns>
 | 
						|
        [HttpPost, Route("UpdateFirmware")]
 | 
						|
        public JsonActionResult<bool> UpdateFirmware([FromBody] KeywordFilter filter)
 | 
						|
        {
 | 
						|
            return SafeExecute(() =>
 | 
						|
            {
 | 
						|
                if (filter.Keyword == null)
 | 
						|
                    return false;
 | 
						|
                var arrIds = filter.Keyword.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
 | 
						|
                    .Select(i => new Guid(i));
 | 
						|
                filter.IgnoreOrgRule = true;
 | 
						|
                filter.Sort = "CREATE_TIME";
 | 
						|
                filter.Order = DbOrder.DESC;
 | 
						|
                filter.SelectField = new string[]
 | 
						|
                {
 | 
						|
                    "FIRMWARE_VERSION"
 | 
						|
                };
 | 
						|
                var firmware = GetEntity<T_OP_FILE_FIRMWARE>(null, filter);
 | 
						|
                if (firmware == null)
 | 
						|
                    return false;
 | 
						|
 | 
						|
                var baseFilter = new BaseFilter
 | 
						|
                {
 | 
						|
                    IgnoreOrgRule = true,
 | 
						|
                    IsMultipleDb = true,
 | 
						|
 | 
						|
                };
 | 
						|
                var piles = GetEntities<T_CP_CHARGING_PILE>(x => arrIds.Contains(x.ID), baseFilter);
 | 
						|
                piles.Select(x => x.FIRMWARE_VERSION = firmware.FIRMWARE_VERSION);
 | 
						|
                var group = piles.GroupBy(x => x.DbConn);
 | 
						|
                foreach (var item in group)
 | 
						|
                {
 | 
						|
                    UpdateEntitiesByConn(item.ToList(), item.Key, "FIRMWARE_VERSION");
 | 
						|
                }
 | 
						|
                #region 给终端发布指令
 | 
						|
                var groupByOrg = piles.GroupBy(x => x.ORG_ID);
 | 
						|
                var mqConfs = this.GetEntitiesByRedis<T_PF_MQTT_CONFIG>(null, baseFilter, "", "Nav_MqttConfigTheme");
 | 
						|
                foreach (var item in mqConfs)
 | 
						|
                {
 | 
						|
                    var mqName = item.NAME + "_" + item.ORG_ID;
 | 
						|
                    var groupPiles = groupByOrg.FirstOrDefault(x => x.Key == item.ORG_ID);
 | 
						|
                    foreach (var pile in groupPiles)
 | 
						|
                    {
 | 
						|
                        var mqttTheme = new MqttMesage
 | 
						|
                        {
 | 
						|
                            cmd = PFThemeTypeEnum.P_版本升级.ToString(),
 | 
						|
                            firmware_version = firmware.FIRMWARE_VERSION,
 | 
						|
                            url = firmware.FIRMWARE_PATH,
 | 
						|
                            timestamp = DataHelper.GetTimeSpanFrom1970Ticks(DateTime.Now),
 | 
						|
                            terminal_no = pile.CODE,
 | 
						|
                            terminal_sn = pile.SEQUENCE,
 | 
						|
                        };
 | 
						|
                        CsRedisManager.GetClient().LPush(mqName.GetPubRedisKey(), mqttTheme);
 | 
						|
                    }
 | 
						|
                }
 | 
						|
                #endregion
 | 
						|
                return true;
 | 
						|
            });
 | 
						|
        }
 | 
						|
 | 
						|
    }
 | 
						|
}
 |