车间服务

This commit is contained in:
ChenYi 2025-07-22 14:54:03 +08:00
parent 97f4e12583
commit 7e07cd5117
14 changed files with 293 additions and 74 deletions

@ -1 +1 @@
Subproject commit 389b858c61d7202d3d3988a23a93a5a47df5273b
Subproject commit 59bd271ad62f7fd3ff0d95a761f40209bcc6d438

View File

@ -50,7 +50,8 @@
"AutomaticTelematicsModuleTime": "17:30:00",
"AutomaticDayFreezeTime": "02:30:00",
"AutomaticMonthFreezeTime": "03:30:00",
"DefaultProtocolPlugin": "T37612012ProtocolPlugin"
"DefaultProtocolPlugin": "T37612012ProtocolPlugin",
"VerifySignatureToken": "SIcPQnpMgaFDmNlIjNmzq5smshz7cKrh"
},
"Jwt": {
"Audience": "JiShe.IoT",

View File

@ -69,7 +69,8 @@
"AutomaticTelematicsModuleTime": "17:30:00",
"AutomaticDayFreezeTime": "02:30:00",
"AutomaticMonthFreezeTime": "03:30:00",
"DefaultProtocolPlugin": "T37612012ProtocolPlugin"
"DefaultProtocolPlugin": "T37612012ProtocolPlugin",
"VerifySignatureToken": "SIcPQnpMgaFDmNlIjNmzq5smshz7cKrh"
},
"OneNETSecureReceiveOptions": {
"OneNETVerifySignatureToken": "SIcPQnpMgaFDmNlIjNmzq5smshz7cKrh",

View File

@ -1,36 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.Json.Serialization;
using System.Threading.Tasks;
namespace JiShe.IoT.CommonServices.Dto
{
/// <summary>
/// 生产设备
/// </summary>
public class ProductionEquipmentInput
{
/// <summary>
/// 用于计算签名字符的随机串
/// </summary>
public string Nonce { get; set; }
/// <summary>
/// 加密签名,用以校验推送客户端身份合法性,校验方法见实例验证
/// </summary>
public string Signature { get; set; }
/// <summary>
/// 签名有效期(毫秒)
/// </summary>
public long Timestamp { get; set; }
/// <summary>
/// 消息内容JSON字符串,具体的设备相关信息
/// </summary>
[JsonPropertyName("msg")]
public string Message { get; set; }
}
}

View File

@ -26,12 +26,5 @@ namespace JiShe.IoT.CommonServices
/// <param name="input"></param>
/// <returns></returns>
List<SelectResult> GetSelectResultList(SelectResultListInput input);
/// <summary>
/// 接收车间生产设备信息
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
Task ReceiveWorkshopProductionEquipment(ProductionEquipmentInput input);
}
}

View File

@ -0,0 +1,16 @@
using JiShe.ServicePro;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace JiShe.IoT.Workshop.Dto
{
/// <summary>
/// 生产车间获取OneNET产品列表
/// </summary>
public class OneNetWorkshopProductListInput : OpenApiRequest
{
}
}

View File

@ -0,0 +1,52 @@
using JiShe.ServicePro;
using Swashbuckle.AspNetCore.Annotations;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace JiShe.IoT.Workshop.Dto
{
/// <summary>
/// 生产车间获取OneNET产品列表
/// </summary>
public class OneNetWorkshopProductListOutput: OpenApiRequest
{
/// <summary>
/// OneNET账户Id
/// </summary>
[SwaggerSchema("OneNET账户Id")]
public string OneNETAccountId { get; set; }
/// <summary>
/// 物联网平台对应的产品Id
/// </summary>
[SwaggerSchema("物联网平台对应的产品Id")]
public string IoTPlatformProductId { get; set; }
/// <summary>
/// 产品名称
/// </summary>
[SwaggerSchema("产品名称")]
public string ProductName { get; set; }
/// <summary>
/// 产品访问密钥
/// </summary>
[SwaggerSchema("产品访问密钥")]
public string ProductAccesskey { get; set; }
/// <summary>
/// 通讯服务地址
/// </summary>
[SwaggerSchema("通讯服务地址")]
public string CommunicationAddress { get; set; }
/// <summary>
/// TLS通讯服务地址
/// </summary>
[SwaggerSchema("TLS通讯服务地址")]
public string CommunicationAddressTLS { get; set; }
}
}

View File

@ -0,0 +1,18 @@
using JiShe.ServicePro;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.Json.Serialization;
using System.Threading.Tasks;
namespace JiShe.IoT.Workshop.Dto
{
/// <summary>
/// 生产设备
/// </summary>
public class ProductionEquipmentInput: OpenApiRequest
{
}
}

View File

@ -0,0 +1,33 @@
using JiShe.ServicePro;
using JiShe.ServicePro.Enums;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.Json.Serialization;
using System.Threading.Tasks;
namespace JiShe.IoT.Workshop.Dto
{
/// <summary>
/// 生产设备详情
/// </summary>
public class ProductionEquipmentMessageBody
{
/// <summary>
/// 表计类型
/// 电表= 1,水表= 2,燃气表= 3,热能表= 4,水表流量计=5燃气表流量计=6,特殊电表=7
/// </summary>
public MeterTypeEnum MeterType { get; set; }
/// <summary>
/// 集中器地址
/// </summary>
public string FocusAddress { get; set; }
/// <summary>
/// 表通信地址
/// </summary>
public string MeterAddress { get; set; }
}
}

View File

@ -0,0 +1,31 @@
using JiShe.IoT.Workshop.Dto;
using JiShe.ServicePro;
using JiShe.ServicePro.OneNETManagement.OneNETProducts;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace JiShe.IoT.Workshop
{
/// <summary>
/// 生产车间服务
/// </summary>
public interface IProductionWorkshopService
{
/// <summary>
/// 接收车间生产设备信息
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
Task<HttpDataResult> ReceiveWorkshopProductionEquipment(ProductionEquipmentInput input);
/// <summary>
/// 生产车间获取OneNET产品列表
/// </summary>
Task<HttpDataResult<List<OneNetWorkshopProductListOutput>>> OneNetProductListForWorkshopAsync(OneNetWorkshopProductListInput input);
}
}

View File

@ -1,6 +1,7 @@
using JiShe.IoT.CommonServices.Dto;
using JiShe.ServicePro.Commons;
using JiShe.ServicePro.Core;
using JiShe.ServicePro.DeviceManagement.Focuses;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.ComponentModel;
@ -41,17 +42,5 @@ namespace JiShe.IoT.CommonServices
return selectResults;
}
/// <summary>
/// 接收车间生产设备信息
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[AllowAnonymous]
public async Task ReceiveWorkshopProductionEquipment(ProductionEquipmentInput input)
{
await Task.CompletedTask;
}
}
}

View File

@ -0,0 +1,82 @@
using JiShe.IoT.Workshop.Dto;
using JiShe.ServicePro;
using JiShe.ServicePro.DeviceManagement.Focuses;
using JiShe.ServicePro.DeviceManagement.Meters;
using JiShe.ServicePro.Encrypt;
using JiShe.ServicePro.Enums;
using JiShe.ServicePro.OneNETManagement.OneNETProducts;
using JiShe.ServicePro.ServerOptions;
using Mapster.Utils;
using Microsoft.Extensions.Options;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
namespace JiShe.IoT.Workshop
{
/// <summary>
/// 生产车间服务
/// </summary>
public class ProductionWorkshopService(IFocusAppService focusAppService, IMeterAppService meterAppService, IOptions<ServerApplicationOptions> options ) : IoTAppService,IProductionWorkshopService
{
ServerApplicationOptions srverOptions = options.Value;
/// <summary>
/// 接收车间生产设备信息
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[AllowAnonymous]
public async Task<HttpDataResult> ReceiveWorkshopProductionEquipment(ProductionEquipmentInput input)
{
try
{
bool verifySignatureReult = EncryptUtil.OpenApiVerifySignature(input.Message, input.Nonce, input.Timestamp, input.Signature, srverOptions.VerifySignatureToken);
if (verifySignatureReult == false)//签名校验失败
{
return HttpDataResultExtensions.Failed("签名校验失败", -101, ResponeResultEnum.NotAllowed);
}
return HttpDataResultExtensions.Failed("签名校验失败", -101, ResponeResultEnum.NotAllowed);
}
catch (Exception)
{
throw;
}
}
/// <summary>
/// 生产车间获取OneNET产品列表
/// </summary>
[AllowAnonymous]
public async Task<HttpDataResult<List<OneNetWorkshopProductListOutput>>> OneNetProductListForWorkshopAsync(OneNetWorkshopProductListInput input)
{
try
{
bool verifySignatureReult = EncryptUtil.OpenApiVerifySignature(input.Message, input.Nonce, input.Timestamp, input.Signature, srverOptions.VerifySignatureToken);
if (verifySignatureReult == false)//签名校验失败
{
return HttpDataResultExtensions.Failed<List<OneNetWorkshopProductListOutput>>("签名校验失败", -101, ResponeResultEnum.NotAllowed);
}
var pageListQuery = FreeSqlDbContext.Instance.Select<OneNETProductInfos>()
.Where(e => e.IsEnabled == true)
.OrderByDescending(e => e.CreationTime);
var pageList = await pageListQuery.ToListAsync<OneNetWorkshopProductListOutput>();
return HttpDataResultExtensions.Success<List<OneNetWorkshopProductListOutput>>(pageList);
}
catch (Exception)
{
throw;
}
}
}
}

View File

@ -1,6 +1,8 @@
using JiShe.IoT.CommonServices;
using JiShe.IoT.CommonServices.Dto;
using JiShe.ServicePro;
using JiShe.ServicePro.Commons;
using JiShe.ServicePro.OneNETManagement.OneNETProducts;
using System;
using System.Collections.Generic;
using System.Linq;
@ -29,18 +31,5 @@ namespace JiShe.IoT.Controllers
{
return _commonService.GetSelectResultList(input);
}
/// <summary>
/// 接收车间生产设备信息
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpGet("WorkshopProductionEquipment")]
[SwaggerOperation(summary: "车间生产设备信息", Tags = new[] { "Common" })]
public async Task ReceiveWorkshopProductionEquipment(ProductionEquipmentInput input)
{
await Task.CompletedTask;
}
}
}

View File

@ -0,0 +1,50 @@
using JiShe.IoT.CommonServices;
using JiShe.IoT.CommonServices.Dto;
using JiShe.IoT.Workshop;
using JiShe.IoT.Workshop.Dto;
using JiShe.ServicePro;
using JiShe.ServicePro.Commons;
using JiShe.ServicePro.OneNETManagement.OneNETProducts;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace JiShe.IoT.Controllers
{
/// <summary>
/// 车间管理服务
/// </summary>
[Route("Workshop")]
public class ProductionWorkshopController : IoTController
{
private readonly IProductionWorkshopService _productionWorkshopService;
public ProductionWorkshopController(IProductionWorkshopService productionWorkshopService)
{
_productionWorkshopService = productionWorkshopService;
}
/// <summary>
/// 接收车间生产设备信息
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpGet("WorkshopProductionEquipment")]
[SwaggerOperation(summary: "车间生产设备信息", Tags = new[] { "Workshop" })]
public async Task ReceiveWorkshopProductionEquipment(ProductionEquipmentInput input)
{
await _productionWorkshopService.ReceiveWorkshopProductionEquipment(input);
}
/// <summary>
/// 生产车间获取OneNET产品列表
/// </summary>
[HttpPost(nameof(OneNetProductListForWorkshopAsync))]
[SwaggerOperation(summary: "生产车间获取OneNET产品列表", Tags = new[] { "Workshop" })]
public async Task<HttpDataResult<List<OneNetWorkshopProductListOutput>>> OneNetProductListForWorkshopAsync(OneNetWorkshopProductListInput input)
{
return await _productionWorkshopService.OneNetProductListForWorkshopAsync(input);
}
}
}