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.
569 lines
23 KiB
569 lines
23 KiB
using Container.Common;
|
|
using Container.Model;
|
|
using Container.Services;
|
|
using Container.Viewmodel;
|
|
using Newtonsoft.Json;
|
|
using Newtonsoft.Json.Linq;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Net;
|
|
using System.Text;
|
|
using System.Threading;
|
|
using System.Windows;
|
|
using System.Xml;
|
|
|
|
namespace Container.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 code { get; set; }
|
|
public string launchtime { get; set; }
|
|
public string expirydate { get; set; }
|
|
public string protype { get; set; }
|
|
public string xaxis { get; set; }
|
|
|
|
public string yaxis { get; set; }
|
|
|
|
public string devNum { get; set; }
|
|
|
|
public string floorOrder { get; set; }
|
|
public string applets { get; set; }
|
|
|
|
public ShopInfo shopInfo { 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 houseNum { get; set; }
|
|
public string shopFormatIcon { get; set; }
|
|
public string shopFormatName { get; set; }
|
|
}
|
|
public class JService
|
|
{
|
|
App app = ((App)Application.Current);
|
|
//private string localIP = app.LocalIP;
|
|
//private string remoteAddress = ConfigurationManager.AppSettings["RemoteAddress"];
|
|
Class_Log Mylog = new Class_Log();
|
|
public delegate void ScreenConfigDelegate();
|
|
public static event ScreenConfigDelegate ScreenConfigReceiveEvent;
|
|
///// <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("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("launchtime", itemList[i].launchtime);
|
|
Node.SetAttribute("expirydate", itemList[i].expirydate);
|
|
Node.SetAttribute("protype", itemList[i].protype);
|
|
Node.SetAttribute("code", itemList[i].code);
|
|
Node.SetAttribute("xaxis", itemList[i].xaxis);
|
|
Node.SetAttribute("yaxis", itemList[i].yaxis);
|
|
Node.SetAttribute("floorOrder", itemList[i].floorOrder);
|
|
Node.SetAttribute("devNum", itemList[i].devNum);
|
|
Node.SetAttribute("applets", itemList[i].applets);
|
|
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("houseNum", itemList[i].shopInfo == null ? "" : itemList[i].shopInfo.houseNum);
|
|
Node.SetAttribute("shopFormatIcon", itemList[i].shopInfo == null ? "" : itemList[i].shopInfo.shopFormatIcon);
|
|
Node.SetAttribute("shopFormatName", itemList[i].shopInfo == null ? "" : itemList[i].shopInfo.shopFormatName);
|
|
|
|
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 bool GetOutLineResource()
|
|
{
|
|
bool flag = false;
|
|
try
|
|
{
|
|
string MethodStr = "/Api/Programme/DevProgrammeList";
|
|
var data = new { DevCode = app.deviceid };
|
|
var ret = MyHttpClient.CryptPost(MethodStr, data, app.HttpUrl);
|
|
Mylog.WriteLogFile(ret, "HttpClient");
|
|
//ret= DownLoadMethod.ReadContext(AppDomain.CurrentDomain.BaseDirectory + "/OutlineFiles/1.txt");
|
|
if (!string.IsNullOrEmpty(ret))
|
|
{
|
|
app.isStartGetProg = false;
|
|
string oldConfig = DownLoadMethod.ReadContext(AppDomain.CurrentDomain.BaseDirectory + "/OutlineFiles/Main/screenconfig.txt");
|
|
if (ret != oldConfig)
|
|
{
|
|
|
|
var Jo = JObject.Parse(ret);
|
|
string code = Jo.Value<string>("code");
|
|
if (code == "200")
|
|
{
|
|
if (app.IsDownScreen)
|
|
{
|
|
app.screenConfig = ret;
|
|
}
|
|
else
|
|
{
|
|
app.downErrorTime = 0;
|
|
DownScreen(ret);
|
|
}
|
|
return true;
|
|
//DownLoadMethod downLoadMethod = new DownLoadMethod();
|
|
//flag = downLoadMethod.DownLoadScreenConfig(itemList, ret);
|
|
//if (flag) {
|
|
|
|
//}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (app.isStartGetProg)
|
|
{
|
|
Thread.Sleep(30000);
|
|
GetOutLineResource();
|
|
}
|
|
}
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Mylog.WriteLogFile(ex.ToString(), "JServiceErrorLog");
|
|
}
|
|
return flag;
|
|
}
|
|
|
|
private void DownScreen(string revScreen)
|
|
{
|
|
try
|
|
{
|
|
|
|
var Jo = JObject.Parse(revScreen);
|
|
List<ScheduleModel> itemList = Jo.Value<JArray>("data").ToObject<List<ScheduleModel>>();
|
|
|
|
Action action = new Action(() =>
|
|
{
|
|
// List<ProgModel> itemList = Jo.Value<JArray>("data").ToObject<List<ProgModel>>();
|
|
app.IsDownScreen = true;
|
|
DownLoadMethod downLoadMethod = new DownLoadMethod();
|
|
bool flag = downLoadMethod.DownLoadScreenConfig(itemList, revScreen);
|
|
if (flag)
|
|
{
|
|
ScreenConfigReceiveEvent?.Invoke();
|
|
if (!string.IsNullOrEmpty(app.screenConfig))
|
|
{
|
|
|
|
DownScreen(app.screenConfig);
|
|
app.screenConfig = string.Empty;
|
|
app.downErrorTime = 0;
|
|
}
|
|
else
|
|
{
|
|
app.IsDownScreen = false;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
|
|
if (!string.IsNullOrEmpty(app.screenConfig))
|
|
{
|
|
DownScreen(app.screenConfig);
|
|
app.screenConfig = string.Empty;
|
|
app.downErrorTime = 0;
|
|
}
|
|
else
|
|
{
|
|
if (app.downErrorTime < 100)
|
|
{
|
|
Thread.Sleep(1000);
|
|
DownScreen(revScreen);
|
|
app.downErrorTime++;
|
|
}
|
|
else
|
|
{
|
|
app.downErrorTime = 0;
|
|
app.IsDownScreen = false;
|
|
}
|
|
|
|
|
|
}
|
|
}
|
|
//config.WriteToScreenConfig();
|
|
});
|
|
action.BeginInvoke(null, null);
|
|
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
|
|
Mylog.WriteLogFile(e.ToString(), "HttpClientError");
|
|
}
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 获取天气
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public WeatherViewModel GetEnvironmental(string city)
|
|
{
|
|
WeatherViewModel weather = new WeatherViewModel();
|
|
try
|
|
{
|
|
|
|
//string urlString = string.Format("{0}/API/CDN/GetEnvironmentalData", app.kioskUrl);
|
|
//string ret = GetHttpResponse(urlString);
|
|
HttpClient httpclient = new HttpClient();
|
|
StringBuilder sb = new StringBuilder();
|
|
sb.Append("{\"city\":\"" + city + "\"}");
|
|
httpclient.message = sb.ToString();
|
|
httpclient.url = "http://saas.1000my.com:8999/API/Weather/GetWeather";
|
|
string ret = httpclient.PostMoths(httpclient.message, httpclient.url);
|
|
|
|
|
|
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.aqi = dicdata["realAqi"].ToString();
|
|
weather.humidity = dicdata["humidity"].ToString();
|
|
weather.pm25 = dicdata["aqi"].ToString();
|
|
weather.temperature = dicdata["temperature_Now"].ToString();
|
|
weather.windPower = dicdata["wind_Power"].ToString();
|
|
weather.status = dicdata["status"].ToString();
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Mylog.WriteLogFile("天气获取失败" + ex.ToString(), "JServiceErrorLog");
|
|
}
|
|
return weather;
|
|
}
|
|
|
|
public void SetPlayRecord()
|
|
{
|
|
try
|
|
{
|
|
|
|
|
|
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()))
|
|
{
|
|
var array = JArray.Parse("[" + record + "]");
|
|
//var list = Jo.Value<JArray>("data").ToObject<List<SubTitle>>();
|
|
var data = new { DevCode = app.deviceid, List = array };
|
|
Mylog.WriteLogFile("文件地址" + JsonConvert.SerializeObject(data), "UploadPlayRecord");
|
|
string MethodStr = "/API/ProgramStatistics/UploadPlayRecord";
|
|
var ret = MyHttpClient.CryptPost(MethodStr, data);
|
|
if (!string.IsNullOrEmpty(ret))
|
|
{
|
|
var Jo = JObject.Parse(ret);
|
|
string code = Jo.Value<string>("code");
|
|
|
|
if (code == "200")
|
|
{
|
|
File.Delete(fname);
|
|
|
|
}
|
|
else
|
|
{
|
|
Mylog.WriteLogFile("上传节目播放统计错误" + ret, "UploadPlayRecordError");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
|
|
Mylog.WriteLogFile("上传节目播放统计错误" + e.ToString(), "UploadPlayRecordError");
|
|
}
|
|
|
|
}
|
|
public void GetSubTitle()
|
|
{
|
|
try
|
|
{
|
|
|
|
|
|
string MethodStr = "/API/Subtitle/GetDevSubtitle";
|
|
var data = new { Code = app.deviceid };
|
|
var ret = MyHttpClient.CryptPost(MethodStr, data);
|
|
if (!string.IsNullOrEmpty(ret))
|
|
{
|
|
var Jo = JObject.Parse(ret);
|
|
string code = Jo.Value<string>("code");
|
|
|
|
if (code == "200")
|
|
{
|
|
try
|
|
{
|
|
List<SubTitle> itemList = Jo.Value<JArray>("data").ToObject<List<SubTitle>>();
|
|
//Mylog.WriteLogFile("-data---" + JsonConvert.SerializeObject(Data), "Subtitle");
|
|
//List<SubTitle> itemList = JsonConvert.DeserializeObject<>(Data);
|
|
var groupList = itemList.GroupBy(i => i.location).Select(g => (new { Name = g.Key, List = g })).ToList();
|
|
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;
|
|
}
|
|
}
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
app.TopSubTitle.Clear();
|
|
app.BottomSubTitle.Clear();
|
|
app.BottomSubTitleIndex = 0;
|
|
app.TopSubTitleIndex = 0;
|
|
Mylog.WriteLogFile("-----error----" + e.Message, "Subtitle");
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
app.TopSubTitle.Clear();
|
|
app.BottomSubTitle.Clear();
|
|
app.BottomSubTitleIndex = 0;
|
|
app.TopSubTitleIndex = 0;
|
|
Mylog.WriteLogFile("-----error----" + e.Message, "Subtitle");
|
|
}
|
|
}
|
|
|
|
public void GetSyncDev()
|
|
{
|
|
Class_Log log = new Class_Log();
|
|
try
|
|
{
|
|
log.WriteLogFile("获取", "GetSyncDev");
|
|
string MethodStr = "/API/Dev/GetSyncDev";
|
|
var data = new { Code = app.deviceid };
|
|
var ret = MyHttpClient.CryptPost(MethodStr, data);
|
|
log.WriteLogFile(ret, "GetSyncDev");
|
|
if (!string.IsNullOrEmpty(ret))
|
|
{
|
|
var Jo = JObject.Parse(ret);
|
|
string code = Jo.Value<string>("code");
|
|
|
|
if (code == "200")
|
|
{
|
|
try
|
|
{
|
|
var dicData = Jo.Value<JObject>("data");
|
|
if (dicData != null)
|
|
{
|
|
//app.deviceid = dicData["code"].ToString();
|
|
string ip = dicData["ip"].ToString();
|
|
log.WriteLogFile(ip, "GetSyncDev");
|
|
log.WriteLogFile("------" + app.websocketProgramIP, "GetSyncDev");
|
|
if (app.websocketProgramIP != ip)
|
|
{
|
|
app.websocketProgramIP = ip;
|
|
if (app.isProgramServer)
|
|
{
|
|
if (app.websocketForProgramServer == null)
|
|
{
|
|
app.websocketForProgramServer = new WebsocketForProgramServer();
|
|
}
|
|
app.websocketForProgramServer.CloasSocket();
|
|
app.isProgramServer = false;
|
|
}
|
|
else
|
|
{
|
|
string AddressIP = string.Empty;
|
|
foreach (IPAddress _IPAddress in Dns.GetHostEntry(Dns.GetHostName()).AddressList)
|
|
{
|
|
if (_IPAddress.AddressFamily.ToString() == "InterNetwork")
|
|
{
|
|
AddressIP = _IPAddress.ToString();
|
|
}
|
|
}
|
|
if (AddressIP == ip)
|
|
{
|
|
app.isProgramServer = true;
|
|
if (app.websocketForProgramServer == null)
|
|
{
|
|
app.websocketForProgramServer = new WebsocketForProgramServer();
|
|
}
|
|
app.websocketForProgramServer.openSocket();
|
|
}
|
|
}
|
|
app.isProgramSync = false;
|
|
if (app.webSocketForProgram == null)
|
|
{
|
|
app.webSocketForProgram = new WebSocketForProgram();
|
|
}
|
|
app.webSocketForProgram.ReloadWebSocket();
|
|
log.WriteLogFile("app.isProgramSync--" + app.isProgramSync, "GetSyncDev");
|
|
}
|
|
else
|
|
{
|
|
if (!app.isProgramSync)
|
|
{
|
|
if (app.webSocketForProgram == null)
|
|
{
|
|
app.webSocketForProgram = new WebSocketForProgram();
|
|
}
|
|
app.webSocketForProgram.ReloadWebSocket();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
|
|
Mylog.WriteLogFile("-----error----" + e.Message, "GetSyncDevError");
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
if (app.isProgramServer)
|
|
{
|
|
if (app.websocketForProgramServer == null)
|
|
{
|
|
app.websocketForProgramServer = new WebsocketForProgramServer();
|
|
}
|
|
app.websocketForProgramServer.CloasSocket();
|
|
app.isProgramServer = false;
|
|
}
|
|
if (app.isProgramSync)
|
|
{
|
|
if (app.webSocketForProgram == null)
|
|
{
|
|
app.webSocketForProgram = new WebSocketForProgram();
|
|
}
|
|
app.webSocketForProgram.CloseWebSocket();
|
|
app.isProgramSync = false;
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
|
|
log.WriteLogFile(e.ToString(), "GetSyncDevError");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|