using Infrastructure; using Infrastructure.Attribute; using Microsoft.Extensions.DependencyInjection; using Quartz; using Quartz.Impl.Triggers; using Quartz.Impl; using SqlSugar.IOC; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using DOAN.Model.System; using Tea; using AlibabaCloud.SDK.Dingtalkoauth2_1_0.Models; using JinianNet.JNTemplate.Nodes; using Newtonsoft.Json.Linq; using AlibabaCloud.SDK.Dingtalkyida_1_0.Models; using Newtonsoft.Json; using Microsoft.AspNetCore.Http; using DOAN.Model.System; using static System.Runtime.InteropServices.JavaScript.JSType; using DOAN.Tasks; using DOAN.Model.huate_group.CloudMonitor; using DOAN.Model.huate_group.recipe; using ZR.Model.Cloud.Dto; using DOAN.Common; using Infrastructure.Model; namespace ZR.Tasks.TaskScheduler { [AppService(ServiceType = typeof(YIDA_dataUpload_Task), ServiceLifetime = LifeTime.Scoped)] internal class YIDA_dataUpload_Task : JobBase, IJob { private readonly NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger(); private readonly MqttPublisher publisher = null; public YIDA_dataUpload_Task() { var options = App.OptionsSetting; MqttPublicConfig mqttPublicConfig = options.mqttPublicConfig; //init MQTT publisher = new MqttPublisher(mqttPublicConfig.BrokerIp, mqttPublicConfig.ClientId); } public async Task Execute(IJobExecutionContext context) { Console.WriteLine("---------------------------------上传开始"); AbstractTrigger trigger = (context as JobExecutionContextImpl).Trigger as AbstractTrigger; var infoTask = await DbScoped.SugarScope.CopyNew() .Queryable() .FirstAsync(f => f.ID == trigger.JobName) ?? throw new CustomException($"任务{trigger?.JobName}宜搭数据上传任务执行失败,任务不存在"); if (infoTask != null) { // 执行异步上传任务 //Task t1 = dataUpLoad(); //Task t2 = dataUpLoad(); //Task t3 = dataUpLoad(); //Task t4 = dataUpLoad(); //Task t5 = dataUpLoad(); //Task t6 = dataUpLoad(); //Task t7 = dataUpLoad(); //Task t8 = dataUpLoad(); //Task t9 = dataUpLoad(); //Task t10 = dataUpLoad(); //Task t11 = dataUpLoad(); //await Task.WhenAll(t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11); Console.WriteLine("上传代码,内部已屏蔽"); Console.WriteLine("---------------------------------上传结束"); } } /// /// 异步任务 数据上传 /// /// public Task dataUpLoad() where T : ZiyuanDevice01, new() { return Task.Run(() => { int flag = 0; //1.读取设备数据 List device01s = DbScoped.SugarScope.Queryable().Where(it => it.IsUpload == 0).Take(60).ToList(); List yidas = new List(); //2.上传到宜搭 //2.1 获取token GetAccessTokenResponse tokenResponse = GetDINGIDNG_token(); //2.2 上传数据 if (device01s != null && device01s.Count > 0) { var query= DbScoped.SugarScope.Queryable().ToList(); foreach (T item in device01s) { //1.1 判断设备配置情况 Recipee options = query.Where(it => it.DeviceName == item.Workstation && it.ParamterName == item.Paramter).First(); if (options != null) { //不可上传 if (!(bool)options.IsUpload) { Console.WriteLine("设备名为" + typeof(T).Name+ "不可上传,禁止上传"); device01s.Remove(item); continue; } //开启过滤 if ((bool)options.Isfilter) { if(item.Value>item.UpValue||item.Value(device01s).ExecuteCommand(); } return flag; }); } /// /// 获取钉钉的token /// /// public GetAccessTokenResponse GetDINGIDNG_token() { GetAccessTokenResponse token = null; AlibabaCloud.SDK.Dingtalkoauth2_1_0.Client client = CreateClient(); AlibabaCloud.SDK.Dingtalkoauth2_1_0.Models.GetAccessTokenRequest getAccessTokenRequest = new AlibabaCloud.SDK.Dingtalkoauth2_1_0.Models.GetAccessTokenRequest { AppKey = "dingnlq6pfrucmeyvdoz", AppSecret = "148xa-m_kz9nhyf6q8drRTQBW50iwgr5GjcqYwFZwZq7ATPyAdS3mGyP6uHuB6Kn", }; try { token = client.GetAccessToken(getAccessTokenRequest); } catch (TeaException err) { if (!AlibabaCloud.TeaUtil.Common.Empty(err.Code) && !AlibabaCloud.TeaUtil.Common.Empty(err.Message)) { // err 中含有 code 和 message 属性,可帮助开发定位问题 logger.Error($"token获取异常" + err.Code + "---" + err.Message); } } catch (Exception _err) { TeaException err = new TeaException(new Dictionary { { "message", _err.Message } }); if (!AlibabaCloud.TeaUtil.Common.Empty(err.Code) && !AlibabaCloud.TeaUtil.Common.Empty(err.Message)) { // err 中含有 code 和 message 属性,可帮助开发定位问题 logger.Error($"token获取异常" + err.Code + "---" + err.Message); } } return token; } /// /// insert宜搭表单(单条) /// /// token /// json形式的数据 public SaveFormDataResponse UpdateTable(string token, string data_json) { SaveFormDataResponse response = null; AlibabaCloud.SDK.Dingtalkyida_1_0.Client client = CreateClient_2(); AlibabaCloud.SDK.Dingtalkyida_1_0.Models.SaveFormDataHeaders saveFormDataHeaders = new AlibabaCloud.SDK.Dingtalkyida_1_0.Models.SaveFormDataHeaders(); saveFormDataHeaders.XAcsDingtalkAccessToken = token; AlibabaCloud.SDK.Dingtalkyida_1_0.Models.SaveFormDataRequest saveFormDataRequest = new AlibabaCloud.SDK.Dingtalkyida_1_0.Models.SaveFormDataRequest { AppType = "APP_KFYJRG27IHBAO961DH2V", SystemToken = "DH9669D1U17FUH2OC0W9KA7GR7TN2YKSTGCOLSP2", UserId = "28674126181143515", Language = "zh_CN", FormUuid = "FORM-20B66BD166EFFI8DFORBX4254N5B23NSTGCOLA6", FormDataJson = data_json, }; try { response = client.SaveFormDataWithOptions(saveFormDataRequest, saveFormDataHeaders, new AlibabaCloud.TeaUtil.Models.RuntimeOptions()); } catch (TeaException err) { Console.WriteLine(err.ToString()); if (!AlibabaCloud.TeaUtil.Common.Empty(err.Code) && !AlibabaCloud.TeaUtil.Common.Empty(err.Message)) { // err 中含有 code 和 message 属性,可帮助开发定位问题 logger.Error($"token获取异常" + err.Code + "---" + err.Message); } } catch (Exception _err) { TeaException err = new TeaException(new Dictionary { { "message", _err.Message } }); if (!AlibabaCloud.TeaUtil.Common.Empty(err.Code) && !AlibabaCloud.TeaUtil.Common.Empty(err.Message)) { // err 中含有 code 和 message 属性,可帮助开发定位问题 logger.Error($"token获取异常" + err.Code + "---" + err.Message); } } return response; } /// /// 批量上传宜搭 /// /// /// /// public BatchSaveFormDataResponse UploadYIDABatch(string token, List data_json) { BatchSaveFormDataResponse response = null; AlibabaCloud.SDK.Dingtalkyida_1_0.Client client = CreateClient3(); AlibabaCloud.SDK.Dingtalkyida_1_0.Models.BatchSaveFormDataHeaders batchSaveFormDataHeaders = new AlibabaCloud.SDK.Dingtalkyida_1_0.Models.BatchSaveFormDataHeaders(); batchSaveFormDataHeaders.XAcsDingtalkAccessToken = token; AlibabaCloud.SDK.Dingtalkyida_1_0.Models.BatchSaveFormDataRequest batchSaveFormDataRequest = new AlibabaCloud.SDK.Dingtalkyida_1_0.Models.BatchSaveFormDataRequest { NoExecuteExpression = true, FormUuid = "FORM-20B66BD166EFFI8DFORBX4254N5B23NSTGCOLA6", AppType = "APP_KFYJRG27IHBAO961DH2V", AsynchronousExecution = true, SystemToken = "DH9669D1U17FUH2OC0W9KA7GR7TN2YKSTGCOLSP2", KeepRunningAfterException = true, UserId = "28674126181143515", FormDataJsonList = data_json }; try { response= client.BatchSaveFormDataWithOptions(batchSaveFormDataRequest, batchSaveFormDataHeaders, new AlibabaCloud.TeaUtil.Models.RuntimeOptions()); } catch (TeaException err) { if (!AlibabaCloud.TeaUtil.Common.Empty(err.Code) && !AlibabaCloud.TeaUtil.Common.Empty(err.Message)) { // err 中含有 code 和 message 属性,可帮助开发定位问题 // err 中含有 code 和 message 属性,可帮助开发定位问题 logger.Error($"token获取异常" + err.Code + "---" + err.Message); } } catch (Exception _err) { TeaException err = new TeaException(new Dictionary { { "message", _err.Message } }); if (!AlibabaCloud.TeaUtil.Common.Empty(err.Code) && !AlibabaCloud.TeaUtil.Common.Empty(err.Message)) { // err 中含有 code 和 message 属性,可帮助开发定位问题 // err 中含有 code 和 message 属性,可帮助开发定位问题 logger.Error($"token获取异常" + err.Code + "---" + err.Message); } } return response; } public static AlibabaCloud.SDK.Dingtalkoauth2_1_0.Client CreateClient() { AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config(); config.Protocol = "https"; config.RegionId = "central"; return new AlibabaCloud.SDK.Dingtalkoauth2_1_0.Client(config); } public static AlibabaCloud.SDK.Dingtalkyida_1_0.Client CreateClient_2() { AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config(); config.Protocol = "https"; config.RegionId = "central"; return new AlibabaCloud.SDK.Dingtalkyida_1_0.Client(config); } public static AlibabaCloud.SDK.Dingtalkyida_1_0.Client CreateClient3() { AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config(); config.Protocol = "https"; config.RegionId = "central"; return new AlibabaCloud.SDK.Dingtalkyida_1_0.Client(config); } } }