|
|
@@ -5,6 +5,7 @@ using BPA.SAAS.KitChenManage.Application.Store.Dtos; |
|
|
|
using BPA.SAAS.KitChenManage.Core.Base; |
|
|
|
using BPA.SAAS.KitChenManage.Core.Model; |
|
|
|
using Furion.LinqBuilder; |
|
|
|
using Microsoft.CodeAnalysis.Operations; |
|
|
|
using Microsoft.Extensions.Hosting; |
|
|
|
using MQTTnet; |
|
|
|
using MQTTnet.Client; |
|
|
@@ -36,6 +37,8 @@ namespace BPA.SAAS.KitChenManage.Application.Device.Services |
|
|
|
{ |
|
|
|
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==Convert.ToInt32(input.Status)) |
|
|
|
.Select(t => new |
|
|
|
{ |
|
|
|
CreateAt = t.CreateAt, |
|
|
@@ -46,6 +49,8 @@ namespace BPA.SAAS.KitChenManage.Application.Device.Services |
|
|
|
Type =t.Type, |
|
|
|
Topic=t.Topic, |
|
|
|
DataResore=t.DataResore, |
|
|
|
Status=t.Status, |
|
|
|
Description=t.Description, |
|
|
|
}).OrderBy(x => x.CreateAt, OrderByType.Desc).ToPageListAsync(input.Current, input.PageSize, total); |
|
|
|
PageUtil util = new PageUtil() |
|
|
|
{ |
|
|
@@ -63,16 +68,53 @@ namespace BPA.SAAS.KitChenManage.Application.Device.Services |
|
|
|
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 = 1; |
|
|
|
data.DataResore = JsonConvert.SerializeObject(JsonConvert.DeserializeObject<dynamic>(input.Data.ToString())); |
|
|
|
var res=await Push(Topic, new PushData() { Data = data.DataResore, DeviceId = input.DeviceAutoKey }); |
|
|
|
if (res) |
|
|
|
data.DeviceAutoKey= input.DeviceAutoKey; |
|
|
|
data.Description = "成功"; |
|
|
|
if (input.TopicsData.Count > 0) |
|
|
|
{ |
|
|
|
await _db.Insertable(data).CallEntityMethod(t => t.Create()).ExecuteCommandAsync(); |
|
|
|
var chaeck = input.TopicsData.Any(x => x.Topics.Trim() == topstr.Trim()); |
|
|
|
if (!chaeck) |
|
|
|
{ |
|
|
|
data.Status =2; |
|
|
|
data.Description = "下发数据失败,该产品还未配置对应的topic,请联系管理员进行配置"; |
|
|
|
} |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
data.Status = 2; |
|
|
|
data.Description = "下发数据失败,该产品还未配置对应的topic,请联系管理员进行配置"; |
|
|
|
} |
|
|
|
if (data.Status == 1) |
|
|
|
{ |
|
|
|
var respush = await Push(Topic, new PushData() { Data = data.DataResore, DeviceId = input.DeviceAutoKey }); |
|
|
|
if (respush != "success") |
|
|
|
{ |
|
|
|
data.Description = respush; |
|
|
|
data.Status =2; |
|
|
|
} |
|
|
|
} |
|
|
|
return res; |
|
|
|
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 = 1; |
|
|
|
var respush = await Push(data.Topic, new PushData() { Data = data.DataResore, DeviceId = data.DeviceAutoKey }); |
|
|
|
if (respush!= "success") |
|
|
|
{ |
|
|
|
data.Description = respush; |
|
|
|
data.Status = 2; |
|
|
|
} |
|
|
|
var res = await _db.Updateable(data).ExecuteCommandAsync(); |
|
|
|
return res > 0; |
|
|
|
} |
|
|
|
/// <summary> |
|
|
|
/// 删除 |
|
|
@@ -94,11 +136,10 @@ namespace BPA.SAAS.KitChenManage.Application.Device.Services |
|
|
|
throw Oops.Oh("删除失败"); |
|
|
|
} |
|
|
|
} |
|
|
|
private async Task<bool> Push(string Topic,PushData data) |
|
|
|
private async Task<string> Push(string Topic,PushData data) |
|
|
|
{ |
|
|
|
try |
|
|
|
{ |
|
|
|
|
|
|
|
// Topic = TOPIC.GetInstance.GetBusinessTopic(x, storeInfo.FirstOrDefault(a => a.Id == item.OrgId).AutoKey) + "/" + item.AutoKey; |
|
|
|
BPAPackage bPAPackage = new BPAPackage |
|
|
|
{ |
|
|
@@ -114,26 +155,31 @@ namespace BPA.SAAS.KitChenManage.Application.Device.Services |
|
|
|
//string aa = bPAPackage.Serialize(false); |
|
|
|
var applictionmessage = new MqttApplicationMessageBuilder().WithTopic(Topic).WithPayload(bPAPackage.Serialize(false)).WithAtLeastOnceQoS().Build(); |
|
|
|
await _mqttClient.PublishAsync(applictionmessage); |
|
|
|
return true; |
|
|
|
return "success"; |
|
|
|
} |
|
|
|
catch (Exception e) |
|
|
|
{ |
|
|
|
throw Oops.Oh("下发错误,错误信息:"+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; |
|
|
|