using Epost.BLL; using Epost.Common; using Epost.Model; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Web.Http; using LightContrl; using Epost.DAL.Cache; using System.Net; using Microsoft.Owin.BuilderProperties; namespace Epost.DPS.Controllers { [RoutePrefix("api/WebAPI")] public class ServerController : ApiController { AddressstorageBLL addrbll = new AddressstorageBLL(); LightControlCacheDAL cachedal = new LightControlCacheDAL(); private static object lockinit = new object(); OrderControlBLL contrbll = new OrderControlBLL(); MainControl lig = new MainControl(); #region 连接 [Route("CONNECT")] [HttpPost] public ResultLightModel CONNECT([FromBody] List data) { ResultLightModel res = new ResultLightModel(); try { LogHelper.WriteLogInfo("CONNECT请求" + JsonHelper.SerializeObject(data)); if (data.Any() && data.Count > 0) { foreach (var item in data) { if (item.status == "1")//连接 { DataTable dt = addrbll.QueryControlList(" "); if (dt != null && dt.Rows.Count > 0) { foreach (DataRow rowitem in dt.Rows) { string ipaddress = rowitem["controlip"].ToString().Trim(); List conlist = cachedal.GetControlList().FindAll(o => o.controlip == ipaddress); if (conlist != null && conlist.Count > 0) { LogHelper.WriteLogInfo(ipaddress + "已连接!"); res.resultCode = "0"; res.resultMsg = "成功!"; return res; } else { int port = Convert.ToInt32(rowitem["port"].ToString().Trim()); int timeout = 2000; bool bo = lig.Connect(ipaddress, port, timeout);//timeout 毫秒 if (bo) { LightcontrolModel model = new LightcontrolModel(); model.controlip = ipaddress; model.maincontrol = lig; model.port = port; cachedal.UpdateControlList(new List { model }, EcontrolCommend.Create); res.resultCode = "0"; res.resultMsg = "成功!"; } else { res.resultCode = "-1"; res.resultMsg = "连接失败" + ipaddress; LogHelper.WriteLogInfo("连接失败" + ipaddress); return res; } } } } else { res.resultCode = "-1"; res.resultMsg = "播种墙号错误"; LogHelper.WriteLogInfo("播种墙号错误"); return res; } } else { LogHelper.WriteLogInfo("断开连接"); List conlist = cachedal.GetControlList(); if (conlist.Any() && conlist.Count > 0) { foreach (LightcontrolModel con in conlist) { bool b= con.maincontrol.DisConnect(con.controlip,con.port); LogHelper.WriteLogInfo(b+"断开连接"+ con.controlip+"=="+con.port); } } cachedal.ClearControlList(); res.resultCode = "0"; res.resultMsg = "断开连接成功!"; } } } return res; } catch (Exception ex) { LogHelper.WriteLogInfo(ex.ToString(), LogHelper.Log_Type.ERROR); res.resultMsg = "请求接口异常!"; res.resultCode = "-1"; } return res; } #endregion #region 全亮全灭 [Route("LEDON")] [HttpPost] public ResultLightModel LEDON([FromBody] List data) { ResultLightModel res = new ResultLightModel(); try { LogHelper.WriteLogInfo("LEDON请求" + JsonHelper.SerializeObject(data)); if (data.Any() && data.Count > 0) { foreach (var item in data) { //根据播种墙号查询灯带IP DataTable dt = addrbll.QueryControlList(" "); if (dt != null && dt.Rows.Count > 0) { foreach (DataRow rowitem in dt.Rows) { string ipaddress = rowitem["controlip"].ToString().Trim(); List conlist = cachedal.GetControlList().FindAll(o => o.controlip == ipaddress); if (conlist != null && conlist.Count > 0) { MainControl control = conlist.FirstOrDefault().maincontrol; bool bo = false; string Address = dt.Rows[0]["address"].ToString().Trim(); string resstr = string.Empty; if (item.lightType == "0") { bo = control.LED_OFF(ipaddress, Address,ref resstr); } else { bo = control.LED_ON(ipaddress, Address, ref resstr, "3", "0" , item.lightColor.Trim()); } if (bo) { res.resultCode = "0"; res.resultMsg = "成功!"; } else { res.resultCode = "-1"; res.resultMsg = "失败"; LogHelper.WriteLogInfo(ipaddress+"失败!" +resstr); } } else { res.resultCode = "-1"; res.resultMsg = "请先连接设备"; LogHelper.WriteLogInfo("请先连接设备!"); } } } else { res.resultCode = "-1"; res.resultMsg = "播种墙号错误!"; LogHelper.WriteLogInfo("播种墙号错误", LogHelper.Log_Type.ERROR); } } } else { res.resultCode = "-1"; res.resultMsg = "请求参数错误!"; LogHelper.WriteLogInfo("请求参数错误!"); } return res; } catch (Exception ex) { LogHelper.WriteLogInfo(ex.ToString(), LogHelper.Log_Type.ERROR); res.resultMsg = "请求接口异常!"; res.resultCode = "-1"; } return res; } #endregion #region 根据货位点亮/熄灭格口 [Route("DISPLAYJOB")] [HttpPost] public ResultLightModel DISPLAYJOB([FromBody] List data) { ResultLightModel res = new ResultLightModel(); try { LogHelper.WriteLogInfo("DISPLAYJOB请求" + JsonHelper.SerializeObject(data)); if (data.Any() && data.Count > 0) { foreach (DisplayjobModelReq item in data) { //根据播种墙号查询灯带IP DataTable dt = addrbll.QueryControlList(""); if (dt != null && dt.Rows.Count > 0) { foreach (DataRow rowitem in dt.Rows) { string ipaddress = rowitem["controlip"].ToString().Trim(); List conlist = cachedal.GetControlList().FindAll(o => o.controlip == ipaddress); if (conlist != null && conlist.Count > 0) { MainControl control = conlist.FirstOrDefault().maincontrol; DataTable locdt = addrbll.QueryAddrList(" and location ='" + item.location + "' and controlip='" + ipaddress + "'"); if (locdt != null && locdt.Rows.Count > 0) { List list = new List(); string address = locdt.Rows[0]["address"].ToString().Trim(); foreach (DataRow locitem in locdt.Rows) { //根据播种墙号、格口号查询播种墙ip及灯带地址 LightParagraph show = new LightParagraph(); show.WayNu = Convert.ToInt32(locitem["wayno"].ToString().Trim()); show.LightBeganNu = locitem["beginno"].ToString().Trim(); show.LightEndNu = locitem["endno"].ToString().Trim(); show.LightColor = item.lightColor.Trim(); //1:蓝色 2:绿色 3:青色 4:红色 5:紫色 6黄色 7白色 show.Brightness = item.brightness.Trim();//亮度 1-9 list.Add(show); } string resstr = string.Empty; bool bo = control.LED_By_Paragraph(ipaddress, address, list,ref resstr); if (bo) { LogHelper.WriteLogInfo("成功" + ipaddress+"list:"+JsonHelper.SerializeObject(list)); res.resultCode = "0"; res.resultMsg = "成功!"; } else { LogHelper.WriteLogInfo("失败"+ ipaddress + "list:" + JsonHelper.SerializeObject(list),LogHelper.Log_Type.ERROR); res.resultCode = "-1"; res.resultMsg = resstr; return res; } } } else { res.resultCode = "-1"; res.resultMsg = "请先连接设备!"; LogHelper.WriteLogInfo("请先连接设备!"); } } } else { res.resultCode = "-1"; res.resultMsg = "播种墙号错误!"; LogHelper.WriteLogInfo("播种墙号错误!"); } } } return res; } catch (Exception ex) { LogHelper.WriteLogInfo(ex.ToString(), LogHelper.Log_Type.ERROR); res.resultMsg = "请求接口异常!"; res.resultCode = "-1"; } return res; } #endregion //初始化 [Route("ClearALL")] [HttpPost] public ResultModel ClearALL() { lock (lockinit) { ResultModel res = new ResultModel(); try { res = contrbll.ClearALL(); return res; } catch (Exception ex) { LogHelper.WriteLogInfo("GetDataList异常:" + ex.Message); res.msg = "请求异常!"; res.result = "-1"; return res; } } } [Route("StartWork")] [HttpPost] public ResultModel StartWork() { lock (lockinit) { ResultModel res = new ResultModel(); try { contrbll.StartWork(); res.msg = "成功!"; res.result = "0"; } catch (Exception ex) { LogHelper.WriteLogInfo("启动作业异常" + ex.ToString(), LogHelper.Log_Type.ERROR); res.msg = "启动作业异常!"; res.result = "-1"; } return res; } } #region 停止作业 [Route("EndWork")] [HttpPost] public ResultModel EndWork() { lock (lockinit) { ResultModel res = new ResultModel(); contrbll.EndWork(); res.msg = "成功!"; res.result = "0"; return res; } } #endregion } }