You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
561 lines
21 KiB
561 lines
21 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Configuration;
|
|
using System.Net;
|
|
using System.IO;
|
|
using System.Xml;
|
|
using PCScreenSavers.Model;
|
|
using log4net;
|
|
using PCScreenSavers.Common;
|
|
using Transitionals;
|
|
using Newtonsoft.Json;
|
|
using System.Windows;
|
|
|
|
namespace PCScreenSavers.Business
|
|
{
|
|
public class ItemInfo
|
|
{
|
|
public int id { get; set; }
|
|
|
|
public string img { get; set; }
|
|
|
|
public int time { get; set; }
|
|
|
|
public string effect { get; set; }
|
|
|
|
//public string text { get; set; }
|
|
|
|
public string screenmatch { get; set; }
|
|
public string launchtime { get; set; }
|
|
public string expirydate { get; set; }
|
|
public string code { get; set; }
|
|
public string duration { get; set; }
|
|
|
|
public ShopInfo shopInfo { get; set; }
|
|
}
|
|
public class Weathers
|
|
{
|
|
public string Status { get; set; }
|
|
|
|
public string Temperature_High { get; set; }
|
|
|
|
public string temperature_Now { get; set; }
|
|
|
|
public string Temperature_Low { get; set; }
|
|
}
|
|
public class ShopInfo {
|
|
public string FloorName { get; set; }
|
|
|
|
public string ShopName { get; set; }
|
|
|
|
public string LogoPath { get; set; }
|
|
|
|
public string Angle { get; set; }
|
|
public string Code { get; set; }
|
|
}
|
|
public class JService
|
|
{
|
|
App app = ((App)Application.Current);
|
|
//private string localIP = app.LocalIP;
|
|
//private string remoteAddress = ConfigurationManager.AppSettings["RemoteAddress"];
|
|
private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
|
|
Class_Log Mylog = new Class_Log();
|
|
///// <summary>
|
|
///// 绑定ip
|
|
///// </summary>
|
|
//public bool BindIp()
|
|
//{
|
|
// string urlString = string.Format("http://{0}/shanjing/interFace/kioskBinding.do?ip={1}", remoteAddress, localIP);
|
|
// string ret = GetHttpResponse(urlString);
|
|
|
|
// if (string.IsNullOrEmpty(ret))
|
|
// return false;
|
|
// else
|
|
// return true;
|
|
//}
|
|
public string WriteToConfig(List<ItemInfo> itemList, string code)
|
|
{
|
|
try
|
|
{
|
|
|
|
XmlDocument doc = new XmlDocument(); // 创建dom对象
|
|
|
|
XmlElement root = doc.CreateElement("root"); // 创建根节点
|
|
|
|
doc.AppendChild(root); // 加入到xml document
|
|
XmlElement FillItem; // 创建FillItem元素
|
|
|
|
FillItem = doc.CreateElement("code");
|
|
FillItem.InnerText = code;
|
|
root.AppendChild(FillItem); // 添加到xml document
|
|
FillItem = doc.CreateElement("items");
|
|
if (itemList != null && itemList.Count > 0)
|
|
{
|
|
for (int i = 0; i < itemList.Count; i++)
|
|
{
|
|
XmlElement Node = doc.CreateElement("item");
|
|
Node.SetAttribute("id", itemList[i].id.ToString());
|
|
Node.SetAttribute("code", itemList[i].code.ToString());
|
|
Node.SetAttribute("img", itemList[i].img);
|
|
Node.SetAttribute("time", itemList[i].time.ToString());
|
|
Node.SetAttribute("effect", itemList[i].effect);
|
|
Node.SetAttribute("screenmatch", itemList[i].screenmatch);
|
|
Node.SetAttribute("duration", itemList[i].duration);
|
|
Node.SetAttribute("launchtime", itemList[i].launchtime);
|
|
Node.SetAttribute("expirydate", itemList[i].expirydate);
|
|
Node.SetAttribute("floorName", itemList[i].shopInfo == null ? "" : itemList[i].shopInfo.FloorName);
|
|
Node.SetAttribute("shopName", itemList[i].shopInfo == null ? "" : itemList[i].shopInfo.ShopName);
|
|
Node.SetAttribute("logoPath", itemList[i].shopInfo == null ? "" : itemList[i].shopInfo.LogoPath);
|
|
Node.SetAttribute("angle", itemList[i].shopInfo == null ? "" : itemList[i].shopInfo.Angle);
|
|
Node.SetAttribute("shopCode", itemList[i].shopInfo == null ? "" : itemList[i].shopInfo.Code);
|
|
FillItem.AppendChild(Node);
|
|
}
|
|
}
|
|
root.AppendChild(FillItem);
|
|
|
|
|
|
|
|
MemoryStream stream = new MemoryStream();
|
|
XmlTextWriter writer = new XmlTextWriter(stream, null);
|
|
writer.Formatting = System.Xml.Formatting.Indented;
|
|
doc.Save(writer);
|
|
StreamReader sr = new StreamReader(stream, Encoding.UTF8);
|
|
|
|
stream.Position = 0;
|
|
|
|
string XMLString = sr.ReadToEnd();
|
|
Mylog.WriteLogFile(XMLString, "XMLString");
|
|
sr.Close();
|
|
writer.Flush();
|
|
writer.Close();
|
|
stream.Flush();
|
|
stream.Close();
|
|
|
|
return XMLString;
|
|
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Mylog.WriteLogFile(ex.ToString(), "JServiceErrorLog");
|
|
return "";
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取后台图片或视频资源地址
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public ScreenSavers GetOutLineResource()
|
|
{
|
|
try
|
|
{
|
|
List<Tuple<ResInfo, Transition>> tpList = new List<Tuple<ResInfo, Transition>>();
|
|
string urlString = string.Format("http://{0}/API/Device/GetProgramList?ip={1}", app.HttpUrl, app.LocalIP);
|
|
string ret = GetHttpResponse(urlString);
|
|
Mylog.WriteLogFile(ret, "HttpClient");
|
|
if (!string.IsNullOrEmpty(ret))
|
|
{
|
|
Dictionary<string, Object> dic = JsonConvert.DeserializeObject<Dictionary<string, Object>>(ret);
|
|
if (!string.IsNullOrEmpty(dic["data"].ToString()) && dic["code"].ToString() == "200")
|
|
{
|
|
//Dictionary<string, Object> dicdata = JsonConvert.DeserializeObject<Dictionary<string, Object>>(dic["data"].ToString());
|
|
//if (!string.IsNullOrEmpty(dic["item"].ToString()))
|
|
//{
|
|
List<ItemInfo> itemList = JsonConvert.DeserializeObject<List<ItemInfo>>(dic["data"].ToString());
|
|
string xmlstring = WriteToConfig(itemList, "1");
|
|
if (!string.IsNullOrEmpty(xmlstring) && xmlstring != "")
|
|
{
|
|
ScreenSavers result = CommonMethod.DeserializeXML<ScreenSavers>(xmlstring);
|
|
Mylog.WriteLogFile(result.ResList.ToString(), "HttpClient");
|
|
return result;
|
|
}
|
|
//}
|
|
}
|
|
//ScreenSavers result = CommonMethod.DeserializeXML<ScreenSavers>(ret);
|
|
|
|
}
|
|
else
|
|
return null;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Mylog.WriteLogFile(ex.ToString(), "JServiceErrorLog");
|
|
return null;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取开始时间
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public string GetStartTime()
|
|
{
|
|
try
|
|
{
|
|
string urlString = string.Format("http://{0}/api/device/GetNextTime?ip={1}", app.HttpUrl, app.LocalIP);
|
|
string ret = GetHttpResponse(urlString);
|
|
|
|
Mylog.WriteLogFile(ret, "HttpClient");
|
|
if (!string.IsNullOrEmpty(ret))
|
|
{
|
|
Dictionary<string, Object> dic = JsonConvert.DeserializeObject<Dictionary<string, Object>>(ret);
|
|
if (!string.IsNullOrEmpty(dic["data"].ToString()) && dic["code"].ToString() == "200")
|
|
{
|
|
string st = dic["data"].ToString();
|
|
log.Info(st);
|
|
return st;
|
|
|
|
}
|
|
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Mylog.WriteLogFile(ex.ToString(), "HttpClient");
|
|
|
|
}
|
|
//return GetHttpResponse(urlString);
|
|
return "";
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取开始时间
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public bool GetIsSynDev()
|
|
{
|
|
bool flag = false;
|
|
try
|
|
{
|
|
string urlString = string.Format("http://{0}/api/device/IsSynDev?ip={1}", app.HttpUrl, app.LocalIP);
|
|
string ret = GetHttpResponse(urlString);
|
|
if (!string.IsNullOrEmpty(ret))
|
|
{
|
|
Dictionary<string, Object> dic = JsonConvert.DeserializeObject<Dictionary<string, Object>>(ret);
|
|
if (!string.IsNullOrEmpty(dic["data"].ToString()) && dic["code"].ToString() == "200")
|
|
{
|
|
flag = Convert.ToBoolean(dic["data"]);
|
|
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Mylog.WriteLogFile(ex.ToString(), "HttpClient");
|
|
|
|
}
|
|
//return GetHttpResponse(urlString);
|
|
return flag;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 获取后台图片或视频资源地址
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public List<Tuple<ResInfo, Transition>> GetResource()
|
|
{
|
|
List<Tuple<ResInfo, Transition>> tpList = new List<Tuple<ResInfo, Transition>>();
|
|
string urlString = string.Format("http://{0}/API/Device/GetProgramList?ip={1}", app.HttpUrl, app.LocalIP);
|
|
string ret = GetHttpResponse(urlString);
|
|
if (!string.IsNullOrEmpty(ret))
|
|
{
|
|
ScreenSavers result = CommonMethod.DeserializeXML<ScreenSavers>(GetHttpResponse(urlString));
|
|
|
|
foreach (var item in result.ResList)
|
|
{
|
|
if (!string.IsNullOrEmpty(item.img))
|
|
{
|
|
item.img = "http://" + app.HttpUrl + "/screen" + item.img;
|
|
Transition t = CommonMethod.GetTransition(item.effect);
|
|
Tuple<ResInfo, Transition> tp = new Tuple<ResInfo, Transition>(item, t);
|
|
tpList.Add(tp);
|
|
}
|
|
}
|
|
}
|
|
return tpList;
|
|
}
|
|
|
|
///// <summary>
|
|
///// 获取屏保切换间隔
|
|
///// </summary>
|
|
///// <returns></returns>
|
|
//public int GetInterval()
|
|
//{
|
|
// string urlString = string.Format("http://{0}/screen/interFace/getScreenParam.do?ip={1}", remoteAddress, localIP);
|
|
// string ret = GetHttpResponse(urlString);
|
|
|
|
// if (!string.IsNullOrEmpty(ret))
|
|
// {
|
|
// WaitInfo result = CommonMethod.DeserializeXML<WaitInfo>(ret);
|
|
|
|
// if (result != null && !string.IsNullOrEmpty(result.TimeInterval))
|
|
// {
|
|
// int temp = Convert.ToInt32(result.TimeInterval) * 1000;
|
|
// return temp > 30000 ? temp : 30000;
|
|
// }
|
|
// else
|
|
// return 30000;
|
|
// }
|
|
// else
|
|
// return 30000;
|
|
//}
|
|
|
|
/// <summary>
|
|
/// 获取关机时间或重启指令
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public string GetShutdown()
|
|
{
|
|
string urlString = string.Format("http://{0}/screen/interFace/shutdownTime_Windows.do?ip={1}", app.HttpUrl, app.LocalIP);
|
|
|
|
return GetHttpResponse(urlString);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 访问接口
|
|
/// </summary>
|
|
/// <param name="urlString"></param>
|
|
/// <returns></returns>
|
|
private string GetHttpResponse(string urlString)
|
|
{
|
|
try
|
|
{
|
|
string result = string.Empty;
|
|
HttpWebRequest myReq = WebRequest.Create(urlString) as HttpWebRequest;
|
|
myReq.Timeout = 10000;
|
|
|
|
WebResponse wr = myReq.GetResponse();
|
|
|
|
using (Stream receiveStream = wr.GetResponseStream())
|
|
{
|
|
StreamReader reader = new StreamReader(receiveStream, Encoding.UTF8);
|
|
result = reader.ReadToEnd();
|
|
reader.Close();
|
|
//receiveStream.Close();
|
|
}
|
|
|
|
return result;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Mylog.WriteLogFile(urlString + ex.Message + ex.StackTrace, "HttpMessageError");
|
|
return string.Empty;
|
|
}
|
|
}
|
|
|
|
public void GetSubTitle()
|
|
{
|
|
//string urlString = string.Format("http://192.168.0.128:8001/API/Subtitle/GetDevSubtitle?IP=192.168.1.104", app.HttpUrl, app.LocalIP);
|
|
string sendmsg = "{\"IP\":\"" + app.LocalIP + "\"}";
|
|
string urlString = string.Format("http://{0}/API/Subtitle/GetDevSubtitle", app.HttpUrl);
|
|
Mylog.WriteLogFile(urlString, "Subtitle");
|
|
try
|
|
{
|
|
|
|
|
|
string ret = PostMoths(sendmsg, urlString);
|
|
if (!string.IsNullOrEmpty(ret))
|
|
{
|
|
Mylog.WriteLogFile(ret, "Subtitle");
|
|
Dictionary<string, Object> dic = JsonConvert.DeserializeObject<Dictionary<string, Object>>(ret);
|
|
if (!string.IsNullOrEmpty(dic["data"].ToString()) && dic["code"].ToString() == "200")
|
|
{
|
|
Dictionary<string, Object> dicdata = JsonConvert.DeserializeObject<Dictionary<string, Object>>(dic["data"].ToString());
|
|
List<SubTitle> itemList = JsonConvert.DeserializeObject<List<SubTitle>>(dicdata["list"].ToString());
|
|
var groupList = itemList.GroupBy(i => i.location).Select(g => (new { Name = g.Key, List = g.Select(i => i.text) }));
|
|
app.TopSubTitle.Clear();
|
|
app.BottomSubTitle.Clear();
|
|
foreach (var item in groupList)
|
|
{
|
|
if (item.Name == "top")
|
|
{
|
|
app.TopSubTitle = item.List.ToList();
|
|
app.TopSubTitleIndex = 0;
|
|
}
|
|
else
|
|
{
|
|
app.BottomSubTitle = item.List.ToList();
|
|
app.BottomSubTitleIndex = 0;
|
|
}
|
|
}
|
|
|
|
}
|
|
else {
|
|
app.TopSubTitle.Clear();
|
|
app.BottomSubTitle.Clear();
|
|
}
|
|
}
|
|
else {
|
|
app.TopSubTitle.Clear();
|
|
app.BottomSubTitle.Clear();
|
|
}
|
|
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
log.Info(e.Message + "字幕获取失败");
|
|
app.TopSubTitle.Clear();
|
|
app.BottomSubTitle.Clear();
|
|
}
|
|
}
|
|
|
|
public void SetPlayRecord()
|
|
{
|
|
//string urlString = string.Format("http://192.168.0.128:8001/API/Subtitle/GetDevSubtitle?IP=192.168.1.104", app.HttpUrl, app.LocalIP);
|
|
StringBuilder record =new StringBuilder();
|
|
string fpath = Directory.GetCurrentDirectory() + "\\record\\";
|
|
if (!Directory.Exists(fpath))
|
|
{
|
|
return;
|
|
}
|
|
|
|
string fname = Directory.GetCurrentDirectory() + "\\record\\Record.txt";
|
|
FileInfo finfo = new FileInfo(fname);
|
|
Mylog.WriteLogFile("文件地址" + fname, "UploadPlayRecord");
|
|
if (!finfo.Exists)
|
|
{
|
|
return;
|
|
}
|
|
else {
|
|
StreamReader sr = new StreamReader(fname, Encoding.Default);
|
|
String line;
|
|
while ((line = sr.ReadLine()) != null)
|
|
{
|
|
record.Append(line.ToString());
|
|
}
|
|
sr.Close();
|
|
|
|
if (!string.IsNullOrEmpty(record.ToString())) {
|
|
string sendmsg = "{\"IP\":\"" + app.LocalIP + "\",\"List\":[" + record + "]}";
|
|
string urlString = string.Format("http://{0}/API/ProgramStatistics/UploadPlayRecord", app.HttpUrl);
|
|
Mylog.WriteLogFile(sendmsg, "UploadPlayRecord");
|
|
try
|
|
{
|
|
string ret = PostMoths(sendmsg, urlString);
|
|
if (!string.IsNullOrEmpty(ret))
|
|
{
|
|
Dictionary<string, Object> dic = JsonConvert.DeserializeObject<Dictionary<string, Object>>(ret);
|
|
if (dic["code"].ToString() == "200")
|
|
{
|
|
File.Delete(fname);
|
|
}
|
|
else {
|
|
Mylog.WriteLogFile("上传节目播放统计错误" + ret, "UploadPlayRecordError");
|
|
}
|
|
}
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
Mylog.WriteLogFile("上传节目播放统计错误" + e.Message, "UploadPlayRecordError");
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
/// Http post方法
|
|
/// </summary>
|
|
/// <param name="param">json参数</param>
|
|
/// <param name="url">服务器地址</param>
|
|
/// <returns></returns>
|
|
public string PostMoths(string param, string url)
|
|
{
|
|
string strURL = url;
|
|
System.Net.HttpWebRequest request;
|
|
request = (System.Net.HttpWebRequest)WebRequest.Create(strURL);
|
|
request.Method = "POST";
|
|
request.ContentType = "application/json;charset=UTF-8";
|
|
string paraUrlCoded = param;
|
|
byte[] payload;
|
|
payload = System.Text.Encoding.UTF8.GetBytes(paraUrlCoded);
|
|
request.ContentLength = payload.Length;
|
|
Stream writer = request.GetRequestStream();
|
|
writer.Write(payload, 0, payload.Length);
|
|
writer.Close();
|
|
System.Net.HttpWebResponse response;
|
|
response = (System.Net.HttpWebResponse)request.GetResponse();
|
|
System.IO.Stream s;
|
|
s = response.GetResponseStream();
|
|
string StrDate = "";
|
|
string strValue = "";
|
|
StreamReader Reader = new StreamReader(s, Encoding.UTF8);
|
|
while ((StrDate = Reader.ReadLine()) != null)
|
|
{
|
|
strValue += StrDate + "\r\n";
|
|
}
|
|
return strValue;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取天气
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public Weathers GetWeather()
|
|
{
|
|
Weathers weather = new Weathers();
|
|
try
|
|
{
|
|
|
|
string urlString = string.Format("http://{0}/Api/Cdn/GetWeathers", app.KioskURL);
|
|
string ret = GetHttpResponse(urlString);
|
|
if (!string.IsNullOrEmpty(ret))
|
|
{
|
|
Dictionary<string, Object> dic = JsonConvert.DeserializeObject<Dictionary<string, Object>>(ret);
|
|
if (!string.IsNullOrEmpty(dic["data"].ToString()) && dic["code"].ToString() == "200")
|
|
{
|
|
Dictionary<string, Object> dicdata = JsonConvert.DeserializeObject<Dictionary<string, Object>>(dic["data"].ToString());
|
|
weather.Status = dicdata["status"].ToString();
|
|
weather.Temperature_High = dicdata["temperature_High"].ToString();
|
|
weather.temperature_Now = dicdata["temperature_Now"].ToString();
|
|
weather.Temperature_Low = dicdata["temperature_Low"].ToString();
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Mylog.WriteLogFile("天气获取失败" + ex.ToString(), "JServiceErrorLog");
|
|
}
|
|
return weather;
|
|
}
|
|
|
|
|
|
//public void LoadProgramConfig()
|
|
//{
|
|
// try
|
|
// {
|
|
// string strConfigxml = AppDomain.CurrentDomain.BaseDirectory + "config//Program.xml";
|
|
// if (File.Exists(strConfigxml) == true)
|
|
// {
|
|
// XmlDocument doc = new XmlDocument();
|
|
// doc.Load(strConfigxml);
|
|
// XmlNode xnFirst = doc.SelectSingleNode("Config");
|
|
// XmlNode xnSecond = xnFirst.SelectSingleNode("Parameter");
|
|
// if (xnSecond == null)
|
|
// {
|
|
// this.TouchType = "";
|
|
// return;
|
|
// }
|
|
// else
|
|
// {
|
|
// if (xnSecond.SelectSingleNode("TouchType").InnerText != "" && isOnlyScreensaver == "0")
|
|
// this.TouchType = xnSecond.SelectSingleNode("TouchType").InnerText;
|
|
// }
|
|
|
|
|
|
// }
|
|
|
|
// }
|
|
// catch
|
|
// {
|
|
// this.TouchType = "";
|
|
// }
|
|
//}
|
|
}
|
|
}
|
|
|