| #region << 版 本 注 释 >> | 
| /*---------------------------------------------------------------- | 
|  * 命名空间:WIDESEAWCS_QuartzJob | 
|  * 创建者:胡童庆 | 
|  * 创建时间:2024/8/2 16:13:36 | 
|  * 版本:V1.0.0 | 
|  * 描述:设备协议业务实现层 | 
|  * | 
|  * ---------------------------------------------------------------- | 
|  * 修改人: | 
|  * 修改时间: | 
|  * 版本:V1.0.1 | 
|  * 修改说明: | 
|  *  | 
|  *----------------------------------------------------------------*/ | 
| #endregion << 版 本 注 释 >> | 
|   | 
| using Magicodes.ExporterAndImporter.Core.Models; | 
| using Magicodes.ExporterAndImporter.Excel; | 
| using Microsoft.AspNetCore.Http; | 
| using System; | 
| using System.Collections.Generic; | 
| using System.Linq; | 
| using System.Text; | 
| using System.Threading.Tasks; | 
| using WIDESEAWCS_Core; | 
| using WIDESEAWCS_Core.BaseRepository; | 
| using WIDESEAWCS_Core.BaseServices; | 
| using WIDESEAWCS_Core.Helper; | 
| using WIDESEAWCS_QuartzJob.Models; | 
| using WIDESEAWCS_QuartzJob.Repository; | 
|   | 
| namespace WIDESEAWCS_QuartzJob.Service | 
| { | 
|     public class DeviceProtocolService : ServiceBase<Dt_DeviceProtocol, IDeviceProtocolRepository>, IDeviceProtocolService | 
|     { | 
|         private readonly IUnitOfWorkManage _unitOfWorkManage; | 
|         public DeviceProtocolService(IDeviceProtocolRepository BaseDal, IUnitOfWorkManage unitOfWorkManage) : base(BaseDal) | 
|         { | 
|             _unitOfWorkManage = unitOfWorkManage; | 
|         } | 
|   | 
|         /// <summary> | 
|         /// 读取导入文件的数据返回到前端 | 
|         /// </summary> | 
|         /// <param name="fileInput">文件</param> | 
|         /// <returns>返回读取结果,成功返回数据,失败返回错误信息</returns> | 
|         public WebResponseContent GetImportData(List<IFormFile> fileInput) | 
|         { | 
|             try | 
|             { | 
|                 if (fileInput == null || fileInput.Count == 0) | 
|                     return new WebResponseContent { Status = true, Message = "请选择上传的文件" }; | 
|                 Microsoft.AspNetCore.Http.IFormFile formFile = fileInput[0]; | 
|                 string dicPath = AppDomain.CurrentDomain.BaseDirectory + $"ExcelImprot/{DateTime.Now.ToString("yyyMMdd")}/{typeof(Dt_DeviceProtocol).Name}/"; | 
|                 if (!Directory.Exists(dicPath)) Directory.CreateDirectory(dicPath); | 
|                 string fileName = $"{Guid.NewGuid()}_{formFile.FileName}"; | 
|                 dicPath = $"{dicPath}{fileName}"; | 
|                 using (FileStream stream = new FileStream(dicPath, FileMode.Create)) | 
|                 { | 
|                     formFile.CopyTo(stream); | 
|                 } | 
|                 ExcelImporter importer = new ExcelImporter(); | 
|                 ImportResult<Dt_DeviceProtocol> importResult = importer.Import<Dt_DeviceProtocol>(dicPath, "").Result; | 
|                 if (importResult.HasError) | 
|                 { | 
|                     return WebResponseContent.Instance.Error(importResult.TemplateErrors.Serialize()); | 
|                 } | 
|                 return WebResponseContent.Instance.OK(data: importResult.Data); | 
|             } | 
|             catch (Exception ex) | 
|             { | 
|                 return WebResponseContent.Instance.Error(ex.Message); | 
|             } | 
|         } | 
|   | 
|         public override WebResponseContent AddData(SaveModel saveModel) | 
|         { | 
|             //saveModel.MainData[""] | 
|             return base.AddData(saveModel); | 
|         } | 
|   | 
|         //public WebResponseContent InsertProtocol_Line(int PLCid, string ChildCode,decimal ProOffsetStart) | 
|         //{ | 
|         //    Type type = typeof(); | 
|         //} | 
|          | 
|   | 
|         // 封装检查逻辑 | 
|         private bool DeviceProtocolExists(int DeviceID, string DeviceChildCode, decimal DeviceProOffset) | 
|         { | 
|             return BaseDal.QueryFirst(x => x.DeviceId == DeviceID && x.DeviceChildCode == DeviceChildCode && x.DeviceProOffset == DeviceProOffset) != null; | 
|         } | 
|   | 
|         // 封装对象创建逻辑 | 
|         private Dt_DeviceProtocol CreateDeviceProtocol(int DeviceID, string DeviceChildCode, decimal DeviceProOffset, int additionalOffset, string dataType, int dataLength, string paramName) | 
|         { | 
|             decimal DeviceProOffsets = DeviceProOffset + additionalOffset; | 
|             return new Dt_DeviceProtocol | 
|             { | 
|                 DeviceId = DeviceID, | 
|                 DeviceChildCode = DeviceChildCode, | 
|                 DeviceProDataBlock = "DB1000", | 
|                 DeviceProOffset = DeviceProOffsets, | 
|                 DeviceProDataLength = dataLength, | 
|                 DeviceProDataType = dataType, | 
|                 DeviceProParamName = paramName, | 
|                 DeviceProParamType = "DeviceCommand", | 
|                 DeviceProParamDes = "1", | 
|                 DeviceProRemark = "", | 
|                 Creater = "admin", | 
|                 CreateDate = DateTime.Now, | 
|             }; | 
|         } | 
|   | 
|         public WebResponseContent AddDeviceProtocol(int DeviceID, string DeviceChildCode, decimal DeviceProOffset) | 
|         { | 
|             WebResponseContent content = new WebResponseContent(); | 
|             try | 
|             { | 
|                 if (DeviceProtocolExists(DeviceID, DeviceChildCode, DeviceProOffset)) | 
|                 { | 
|                     throw new InvalidOperationException("已存在该节点明细"); | 
|                 } | 
|   | 
|                 var protocols = new List<Dt_DeviceProtocol> | 
|                 { | 
|                     CreateDeviceProtocol(DeviceID, DeviceChildCode, DeviceProOffset, 0, "int", 1, "ConveyorLineTargetAddress"), | 
|                     CreateDeviceProtocol(DeviceID, DeviceChildCode, DeviceProOffset, 2, "int", 1, "ConveyorLineTaskNum"), | 
|                     CreateDeviceProtocol(DeviceID, DeviceChildCode, DeviceProOffset, 6, "string", 25, "ConveyorLineBarcode"), | 
|                     CreateDeviceProtocol(DeviceID, DeviceChildCode, DeviceProOffset, 34, "int", 1, "Reserve1"), | 
|                     CreateDeviceProtocol(DeviceID, DeviceChildCode, DeviceProOffset, 36, "int", 1, "Reserve2"), | 
|                     CreateDeviceProtocol(DeviceID, DeviceChildCode, DeviceProOffset, 38, "int", 1, "Reserve3"), | 
|                     CreateDeviceProtocol(DeviceID, DeviceChildCode, DeviceProOffset, 40, "byte", 1, "InteractiveSignal"), | 
|                     CreateDeviceProtocol(DeviceID, DeviceChildCode, DeviceProOffset, 42, "int", 1, "HasPallet"), | 
|                     CreateDeviceProtocol(DeviceID, DeviceChildCode, DeviceProOffset, 44, "int", 1, "ConveyorLineAlarm"), | 
|                     CreateDeviceProtocol(DeviceID, DeviceChildCode, DeviceProOffset, 46, "int", 1, "ResponState"), | 
|                     CreateDeviceProtocol(DeviceID, DeviceChildCode, DeviceProOffset, 48, "int", 1, "Reserve5") | 
|   | 
|                 }; | 
|                 var result=BaseDal.AddData(protocols); | 
|                 return content.OK(data:result); | 
|             } | 
|             catch (Exception ex) | 
|             { | 
|                 return content.Error(ex.Message); | 
|             } | 
|              | 
|         } | 
|     } | 
| } |