|
|
@@ -7,6 +7,7 @@ using Furion.DependencyInjection; |
|
|
|
using Furion.FriendlyException; |
|
|
|
using Furion.LinqBuilder; |
|
|
|
using Mapster; |
|
|
|
using Microsoft.CodeAnalysis.Operations; |
|
|
|
using Microsoft.Extensions.Hosting; |
|
|
|
using MQTTnet; |
|
|
|
using MQTTnet.Client; |
|
|
@@ -28,7 +29,7 @@ namespace BPA.KitChen.GroupMeal.Application.Service.Device.Dtos |
|
|
|
public DevicePushRecodeService(ISqlSugarClient db, IMqttClient mqttClient) |
|
|
|
{ |
|
|
|
_db = db; |
|
|
|
_mqttClient=mqttClient; |
|
|
|
_mqttClient = mqttClient; |
|
|
|
} |
|
|
|
/// <summary> |
|
|
|
/// 分页 |
|
|
@@ -39,6 +40,8 @@ namespace BPA.KitChen.GroupMeal.Application.Service.Device.Dtos |
|
|
|
{ |
|
|
|
RefAsync<int> total = 0; |
|
|
|
var res = await _db.Queryable<BPA_DevicePushRecode>().Where(x => x.Type == input.Type) |
|
|
|
.WhereIF(!string.IsNullOrWhiteSpace(input.DeviceName), x => x.DeviceName.Contains(input.DeviceName)) |
|
|
|
.WhereIF(!string.IsNullOrWhiteSpace(input.Status), x => x.Status == (CommonStatus)Convert.ToInt32(input.Status) ) |
|
|
|
.Select(t => new |
|
|
|
{ |
|
|
|
CreateAt = t.CreateAt, |
|
|
@@ -49,8 +52,10 @@ namespace BPA.KitChen.GroupMeal.Application.Service.Device.Dtos |
|
|
|
Type = t.Type, |
|
|
|
Topic = t.Topic, |
|
|
|
DataResore = t.DataResore, |
|
|
|
t.Status |
|
|
|
}).OrderBy(x => x.CreateAt, OrderByType.Desc).ToPageListAsync(input.Current, input.PageSize, total); |
|
|
|
Status = t.Status, |
|
|
|
Description = t.Description, |
|
|
|
}).OrderBy(x => x.CreateAt, OrderByType.Desc) |
|
|
|
.ToPageListAsync(input.Current, input.PageSize, total); |
|
|
|
PageUtil util = new PageUtil() |
|
|
|
{ |
|
|
|
Total = total, |
|
|
@@ -67,33 +72,54 @@ namespace BPA.KitChen.GroupMeal.Application.Service.Device.Dtos |
|
|
|
public async Task<bool> Add(DevicePushRecodeDtoInput input) |
|
|
|
{ |
|
|
|
var data = input.Adapt<BPA_DevicePushRecode>(); |
|
|
|
string Topic = GetTopic(input.Type, input.DeviceAutoKey.ToString()); |
|
|
|
string topstr = ""; |
|
|
|
string Topic = GetTopic(input.Type, input.DeviceAutoKey.ToString(), input.ProductVersion, input.ProductKey, out topstr); |
|
|
|
if (string.IsNullOrEmpty(Topic)) throw Oops.Oh("请配置相关topic"); |
|
|
|
|
|
|
|
data.Topic= Topic; |
|
|
|
data.Status = CommonStatus.ENABLE; |
|
|
|
data.DataResore = JsonConvert.SerializeObject(JsonConvert.DeserializeObject<dynamic>(input.Data.ToString())); |
|
|
|
var res=await Push(Topic, new PushData() { Data=input.Data, DeviceId= input.DeviceAutoKey }); |
|
|
|
data.Status = res == "success" ? CommonStatus.ENABLE : CommonStatus.DISABLE; |
|
|
|
await _db.Insertable(data).CallEntityMethod(t => t.Create()).ExecuteCommandAsync(); |
|
|
|
|
|
|
|
return res == "success"; |
|
|
|
data.DeviceAutoKey= input.DeviceAutoKey; |
|
|
|
data.Description = "成功"; |
|
|
|
if (input.TopicsData.Count > 0) |
|
|
|
{ |
|
|
|
var chaeck = input.TopicsData.Any(x => x.Topics.Trim() == topstr.Trim()); |
|
|
|
if (!chaeck) |
|
|
|
{ |
|
|
|
data.Status = CommonStatus.DISABLE; |
|
|
|
data.Description = "下发数据失败,该产品还未配置对应的topic,请联系管理员进行配置"; |
|
|
|
} |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
data.Status = CommonStatus.DISABLE; |
|
|
|
data.Description = "下发数据失败,该产品还未配置对应的topic,请联系管理员进行配置"; |
|
|
|
} |
|
|
|
if (data.Status == CommonStatus.ENABLE) |
|
|
|
{ |
|
|
|
var respush = await Push(Topic, new PushData() { Data = data.DataResore, DeviceId = input.DeviceAutoKey }); |
|
|
|
if (respush != "success") |
|
|
|
{ |
|
|
|
data.Description = respush; |
|
|
|
data.Status = CommonStatus.DISABLE; |
|
|
|
} |
|
|
|
} |
|
|
|
var res = await _db.Insertable(data).CallEntityMethod(t => t.Create()).ExecuteCommandAsync(); |
|
|
|
return res>0; |
|
|
|
} |
|
|
|
|
|
|
|
public async Task<bool> Update(string id) |
|
|
|
{ |
|
|
|
var data = _db.Queryable<BPA_DevicePushRecode>().Where(x => x.Id == id).First(); |
|
|
|
data.Status = CommonStatus.ENABLE; |
|
|
|
var respush = await Push(data.Topic, new PushData() { Data = data.DataResore, DeviceId = data.DeviceAutoKey }); |
|
|
|
if (respush != "success") |
|
|
|
data.Description = respush; |
|
|
|
if (respush!= "success") |
|
|
|
{ |
|
|
|
data.Description = respush; |
|
|
|
data.Status = CommonStatus.DISABLE; |
|
|
|
} |
|
|
|
var res = await _db.Updateable(data).ExecuteCommandAsync(); |
|
|
|
return res > 0; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary> |
|
|
|
/// 删除 |
|
|
|
/// </summary> |
|
|
@@ -118,7 +144,6 @@ namespace BPA.KitChen.GroupMeal.Application.Service.Device.Dtos |
|
|
|
{ |
|
|
|
try |
|
|
|
{ |
|
|
|
|
|
|
|
// Topic = TOPIC.GetInstance.GetBusinessTopic(x, storeInfo.FirstOrDefault(a => a.Id == item.OrgId).AutoKey) + "/" + item.AutoKey; |
|
|
|
BPAPackage bPAPackage = new BPAPackage |
|
|
|
{ |
|
|
@@ -138,22 +163,27 @@ namespace BPA.KitChen.GroupMeal.Application.Service.Device.Dtos |
|
|
|
} |
|
|
|
catch (Exception e) |
|
|
|
{ |
|
|
|
return "下发错误,错误信息:" + e.Message; |
|
|
|
return "下发错误,错误信息:" + e.Message; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
private string GetTopic(int type,string deviceKey) |
|
|
|
private string GetTopic(int type,string deviceKey, string productVersion, string productKey,out string topstr ) |
|
|
|
{ |
|
|
|
string topic = ""; |
|
|
|
topstr = ""; |
|
|
|
switch (type) |
|
|
|
{ |
|
|
|
case 1: //商品下发 |
|
|
|
topic = $"/da4bfff042c656210/${deviceKey}/use/goodspush"; |
|
|
|
topic = $"/{productKey}/{productVersion}/{deviceKey}/defaul/goodspush"; |
|
|
|
topstr = "/"+productKey+"/"+productVersion+"/${deviceKey}/defaul/goodspush"; |
|
|
|
break; |
|
|
|
case 2://物料下发 |
|
|
|
topic = $"/da4bfff042c656210/${deviceKey}/use/batvhingpush"; |
|
|
|
topic = $"/{productKey}/{productVersion}/{deviceKey}/defaul/batvhingpush"; |
|
|
|
topstr = "/" + productKey + "/" + productVersion + "/${deviceKey}/defaul/batvhingpush"; |
|
|
|
break; |
|
|
|
case 4: |
|
|
|
topic = $"/da4bfff042c656210/${deviceKey}/use/chnologypush"; |
|
|
|
topic = $"/{productKey}/{productVersion}/{deviceKey}/defaul/chnologypush"; |
|
|
|
topstr = "/" + productKey + "/" + productVersion + "/${deviceKey}/defaul/chnologypush"; |
|
|
|
break; |
|
|
|
} |
|
|
|
return topic; |
|
|
|