using log4net; using Newtonsoft.Json.Linq; using Quartz; using RDIFramework.Utilities; using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using System.Net; using System.Text; using TimedUpload.WebReference; namespace TimedUpload.QuartzJobs { public class ValueControlJob : IJob { private readonly ILog log = LogManager.GetLogger(typeof(ValueControlJob)); public void Execute(IJobExecutionContext context) { try { log.Info("控阀接口开始执行.................\r\n"); //2021-12-24 开关控阀 UpdateValveControl(); } catch (Exception ex) { log.Error("任务上传异常:" + ex.Message); } log.InfoFormat("控阀接口执行结束.................\r\n"); } #region 开关控阀 private void UpdateValveControl() { String result; //远传表厂家编号 String metersortId = "13"; //远传水表阀控接口url String serviceAddress = "http://47.105.45.253:1943/WebServices/ExternalValueControlApi.ashx"; // String serviceAddress = "http://localhost:2801/WebServices/ExternalValueControlApi.ashx"; String Code = null; String Message = null; try { WebReference.MeterReadingImplService wm = new WebReference.MeterReadingImplService(); valveControlList[] vcList = wm.ValveControl(metersortId); //测试 /*result = postSend(serviceAddress, ""); log.Debug("上传结果---------》" + "," + result);*/ log.Debug("~~~~~~~~~~~开始下达开阀指令~~~~~~~~~~~~~"); if (vcList != null) { StringBuilder valveControlInfo = new StringBuilder(); foreach (var vc in vcList) { log.Debug("下载数据:" + vc.meteraddress + "," + vc.valveState + "," + vc.controlTime); valveControlInfo.Append("ManufacturerCode=6e50093a-2b74-4e3e-9993-c3bd1f23979a&"); valveControlInfo.Append("MeterAddress=" + vc.meteraddress + "&"); valveControlInfo.Append("CommandType=Valve&"); //0 开阀 其他关阀 //获取开阀或关阀指令 if (vc.valveState=="0") { log.Debug("控阀指令---------》" + vc.meteraddress + "," + "开阀"); valveControlInfo.Append("ValueState=open"); vc.valveState = "0-开阀"; } else { log.Debug("控阀指令---------》" + vc.meteraddress + "," + "关阀"); valveControlInfo.Append("ValueState=close"); vc.valveState = vc.valveState+"-关阀"; } result = WebHelper.HttpWebRequest(serviceAddress, valveControlInfo.ToString()); log.Debug("上传结果---------》" + vc.meteraddress + "," + result); String sql = "insert into TempValveControlData(id,meteraddress,valveState,updateTime,Message) values(" + vc.id + ",'" + vc.meteraddress + "','" + vc.valveState + "','" + vc.controlTime + "','" + result + "')"; dbHelperNB.ExecuteNonQuery(sql); valveControlInfo.Clear(); } } } catch (Exception ex) { log.Debug("上传数据失败:" + ex.ToString()); } } #endregion #region 请求接口 /// /// /// /// /// /// /// 请求头携带请求权限 /// public string postSend(string url, WebHeaderCollection webHeader, String param, String type = "POST") { string strResult = ""; Encoding myEncode = Encoding.GetEncoding("UTF-8"); HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url); req.Method = type; req.ContentType = "application/x-www-form-urlencoded"; req.Headers = webHeader; //req.ContentLength = 100; if (param != null) { byte[] postBytes = Encoding.UTF8.GetBytes(param); req.ContentLength = postBytes.Length; using (Stream reqStream = req.GetRequestStream()) { reqStream.Write(postBytes, 0, postBytes.Length); } } try { using (WebResponse res = req.GetResponse()) { using (StreamReader sr = new StreamReader(res.GetResponseStream(), myEncode)) { strResult = sr.ReadToEnd(); return strResult; } } } catch (WebException ex) { log.Error("Post数据出错:" + ex.Message); return ""; } } #endregion static IDbProvider dbHelperNB { get { var DbDefine = DbFactoryProvider.GetProvider(CurrentDbType.SqlServer, Constants.DBUrlNbYd); return DbDefine; } } } public class TempValveControlData { /// /// Id /// public Guid dataId { get; set; } = Guid.NewGuid(); /// /// 指令编号 /// public int id { get; set; } /// /// 表地址 /// public String meteraddress { get; set; } /// /// 指令状态 0:开阀 其他 :关阀 /// public String valveState { get; set; } /// /// 接口返回的结果 /// public String Code { get; set; } /// /// 失败时返回具体错误原因 /// public String Message { get; set; } /// /// 更新时间 /// public DateTime updateTime { get; set; } = DateTime.Now; /// /// 逻辑删除 /// public String isRemove { get; set; } = "false"; } }