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";
}
}