From ab8ac9cce6896f50192ec67568257f4a9f6bbb0e Mon Sep 17 00:00:00 2001 From: jl Date: Mon, 17 Apr 2023 14:10:34 +0800 Subject: [PATCH] --- DLL/LightContrl.dll | Bin 0 -> 31744 bytes DLL/LightContrl.pdb | Bin 0 -> 99840 bytes Epost.BLL/AddressstorageBLL.cs | 21 + Epost.BLL/OrderControlBLL.cs | 1 - Epost.DAL/AddressstorageDAL.cs | 21 + Epost.DAL/Cache/LightControlCacheDAL.cs | 94 +++++ Epost.DAL/Epost.DAL.csproj | 4 + Epost.Model/OrderModel.cs | 16 +- Epost.Model/ResultModel.cs | 85 ++++ .../Controllers/HomeController.cs | 1 + .../Controllers/ServerController.cs | 370 +++++++++++------- Epost.TestToolsWeb/Epost.DPS.csproj | 4 + Epost.TestToolsWeb/Web.config | 4 +- 13 files changed, 480 insertions(+), 141 deletions(-) create mode 100644 DLL/LightContrl.dll create mode 100644 DLL/LightContrl.pdb create mode 100644 Epost.DAL/Cache/LightControlCacheDAL.cs diff --git a/DLL/LightContrl.dll b/DLL/LightContrl.dll new file mode 100644 index 0000000000000000000000000000000000000000..c8ffee39114eca6ef24b108fa96245d6d64f132e GIT binary patch literal 31744 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
    ~WCf-nNg61*(5vNNIl}yZ9$d_$_^?j*3e{ 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 literal 0 HcmV?d00001 diff --git a/Epost.BLL/AddressstorageBLL.cs b/Epost.BLL/AddressstorageBLL.cs index 324dde2..7daf910 100644 --- a/Epost.BLL/AddressstorageBLL.cs +++ b/Epost.BLL/AddressstorageBLL.cs @@ -374,5 +374,26 @@ namespace Epost.BLL return dal.GetAddressListByByPage(strWhere, orderby, startIndex, endIndex, out recordCount); } #endregion + + + #region 灯带 + + #region 查询设备信息 + public DataTable QueryAddrList(string strwhere) + { + return dal.QueryAddrList(strwhere); + } + + #endregion + + + #region 查询设备信息 + public DataTable QueryControlList(string strwhere) + { + return dal.QueryControlList(strwhere); + } + + #endregion + #endregion } } diff --git a/Epost.BLL/OrderControlBLL.cs b/Epost.BLL/OrderControlBLL.cs index 12d547d..a13d5f6 100644 --- a/Epost.BLL/OrderControlBLL.cs +++ b/Epost.BLL/OrderControlBLL.cs @@ -41,7 +41,6 @@ namespace Epost.BLL public ResultModel ClearALL() { - try { bool t = addrBLL.UpdateState(); diff --git a/Epost.DAL/AddressstorageDAL.cs b/Epost.DAL/AddressstorageDAL.cs index 95af696..1a4c8a2 100644 --- a/Epost.DAL/AddressstorageDAL.cs +++ b/Epost.DAL/AddressstorageDAL.cs @@ -809,5 +809,26 @@ namespace Epost.DAL } #endregion + + #region 灯带 + #region 查询设备信息 + public DataTable QueryAddrList(string strwhere) + { + string sql = string.Format("select * from v_address where 1=1 " + strwhere); + return db.GetsqlForDT(sql); + } + + #endregion + #region 查询设备信息 + public DataTable QueryControlList(string strwhere) + { + string sql = string.Format(" select distinct controlip ,port,waveno,address from v_address where 1=1 " + strwhere); + return db.GetsqlForDT(sql); + } + + #endregion + + #endregion + } } diff --git a/Epost.DAL/Cache/LightControlCacheDAL.cs b/Epost.DAL/Cache/LightControlCacheDAL.cs new file mode 100644 index 0000000..d0e596b --- /dev/null +++ b/Epost.DAL/Cache/LightControlCacheDAL.cs @@ -0,0 +1,94 @@ +using LightContrl; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Epost.DAL.Cache +{ + public class LightControlCacheDAL + { + + private static object lockconobj = new object(); + public static List MainControlList = new List();// + + #region 获取计划任务列表 + public List GetControlList() + { + return MainControlList; + } + #endregion + + + + #region 初始化任务列表 + public void ClearControlList() + { + foreach (var planitem in MainControlList.ToArray()) + { + MainControlList.Remove(planitem); + } + } + #endregion + + #region Job缓存处理方法 + /// + /// Job缓存处理方法 + /// + /// + /// + /// + public bool UpdateControlList(List JobParam, EcontrolCommend CommendType) + { + + lock (lockconobj) + { + + if (CommendType.Equals(EcontrolCommend.Create)) + { + + MainControlList.AddRange(JobParam); + } + + else if (CommendType.Equals(EcontrolCommend.Execute)) + { + JobParam.ForEach(m => MainControlList.Remove(m)); + + } + + + return true; + } + } + #endregion + + + + + + } + public enum EcontrolCommend + { + /// + /// 创建 + /// + [Description("创建")] + Create, + /// + /// 删除 + /// + [Description("删除")] + Execute + } + + public class LightcontrolModel + { + private string _controlip = string.Empty; + MainControl _maincontrol = new MainControl(); + + public MainControl maincontrol { get => _maincontrol; set => _maincontrol = value; } + public string controlip { get => _controlip; set => _controlip = value; } + } +} diff --git a/Epost.DAL/Epost.DAL.csproj b/Epost.DAL/Epost.DAL.csproj index ecc522b..4a3252a 100644 --- a/Epost.DAL/Epost.DAL.csproj +++ b/Epost.DAL/Epost.DAL.csproj @@ -82,6 +82,9 @@ ..\packages\EntityFramework.6.1.3\lib\net45\EntityFramework.SqlServer.dll True + + ..\DLL\LightContrl.dll + @@ -106,6 +109,7 @@ + diff --git a/Epost.Model/OrderModel.cs b/Epost.Model/OrderModel.cs index b256ccf..0241510 100644 --- a/Epost.Model/OrderModel.cs +++ b/Epost.Model/OrderModel.cs @@ -9,10 +9,18 @@ namespace Epost.Model public class OrderModel { - private string _OrderNO = string.Empty; - private string _State = string.Empty;// 1亮灯 0灭灯 + private string _wallNo = string.Empty; + private string _location = string.Empty; + private string _lightColor = string.Empty; + private string _lightType = string.Empty; + private string _brightness = string.Empty; + private string _status = string.Empty; - public string OrderNO { get => _OrderNO; set => _OrderNO = value; } - public string State { get => _State; set => _State = value; } + public string wallNo { get => _wallNo; set => _wallNo = value; } + public string lcation { get => _location; set => _location = value; } + public string lightColor { get => _lightColor; set => _lightColor = value; } + public string lightType { get => _lightType; set => _lightType = value; } + public string brightness { get => _brightness; set => _brightness = value; } + public string status { get => _status; set => _status = value; } } } diff --git a/Epost.Model/ResultModel.cs b/Epost.Model/ResultModel.cs index 58bb6b0..f69cb12 100644 --- a/Epost.Model/ResultModel.cs +++ b/Epost.Model/ResultModel.cs @@ -37,4 +37,89 @@ namespace Epost.Model } } } + + public class SerResultModel + { + private string _resultCode = string.Empty; + private string _resultMsg = string.Empty; + + public string resultCode { get => _resultCode; set => _resultCode = value; } + public string resultMsg { get => _resultMsg; set => _resultMsg = value; } + } + + public class TaskReqModel + { + private string matchid = string.Empty; + private string orderid = string.Empty; + private string sku = string.Empty; + private string tolocation = string.Empty; + private string originalBatch = string.Empty; + private string block = string.Empty; + private string area = string.Empty; + private string _id = string.Empty; + public string Matchid { get => matchid; set => matchid = value; } + public string Orderid { get => orderid; set => orderid = value; } + public string Sku { get => sku; set => sku = value; } + public string Tolocation { get => tolocation; set => tolocation = value; } + public string OriginalBatch { get => originalBatch; set => originalBatch = value; } + public string Block { get => block; set => block = value; } + public string Area { get => area; set => area = value; } + public string id { get => _id; set => _id = value; } + } + + + + public class ResultLightModel + { + private string _resultCode = string.Empty; + private string _resultMsg = string.Empty; + + public string resultCode + { + get + { + return _resultCode; + } + + set + { + _resultCode = value; + } + } + + public string resultMsg + { + get + { + return _resultMsg; + } + + set + { + _resultMsg = value; + } + } + } + + + + + + public class reqmodel + { + public string wallNo { get; set; } + public string lightType { get; set; } + } + + + + public class DisplayjobModelReq + { + public string wallNo { get; set; } + public string location { get; set; } + public string lightColor { get; set; } + public string lightType { get; set; } + public string brightness { get; set; } + } + } diff --git a/Epost.TestToolsWeb/Controllers/HomeController.cs b/Epost.TestToolsWeb/Controllers/HomeController.cs index 4e8149f..d19102c 100644 --- a/Epost.TestToolsWeb/Controllers/HomeController.cs +++ b/Epost.TestToolsWeb/Controllers/HomeController.cs @@ -41,6 +41,7 @@ namespace Epost.TestToolsWeb.Controllers public ActionResult Index() { + ViewBag.isClear = isClear; ViewBag.isWork = isWork; diff --git a/Epost.TestToolsWeb/Controllers/ServerController.cs b/Epost.TestToolsWeb/Controllers/ServerController.cs index 1fe2008..4c9cc21 100644 --- a/Epost.TestToolsWeb/Controllers/ServerController.cs +++ b/Epost.TestToolsWeb/Controllers/ServerController.cs @@ -5,167 +5,267 @@ using System; using System.Collections.Generic; using System.Data; using System.Linq; -using System.Net; -using System.Net.Http; + using System.Web.Http; +using LightContrl; + +using Epost.DAL.Cache; namespace Epost.DPS.Controllers { - [RoutePrefix("api/WebAPI")] + [RoutePrefix("api/TaskAPI")] public class ServerController : ApiController { - private static object lockinit = new object(); + AddressstorageBLL addrbll = new AddressstorageBLL(); + LightControlCacheDAL cachedal = new LightControlCacheDAL(); + MainControl lig = new MainControl(); + #region 连接 + [Route("CONNECT")] + [HttpPost] + public ResultLightModel CONNECT([FromBody] List data) + { + ResultLightModel res = new ResultLightModel(); + try + { + if (data.Any() && data.Count > 0) + { + foreach (var item in data) + { + DataTable dt = addrbll.QueryControlList(" and waveno ='" + item.wallNo + "'"); + if (dt != null && dt.Rows.Count > 0) + { + foreach (DataRow rowitem in dt.Rows) + { - OrderControlBLL contrbll = new OrderControlBLL(); + string ipaddress = rowitem["controlip"].ToString().Trim(); + List conlist = cachedal.GetControlList().FindAll(o => o.controlip == ipaddress); + if (conlist != null && conlist.Count > 0) + { + LogHelper.WriteLogInfo(ipaddress + "已连接!"); + } + 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; + cachedal.UpdateControlList(new List { model }, EcontrolCommend.Create); + res.resultCode = "0"; + res.resultMsg = "成功!"; + } + else + { + res.resultCode = "-1"; + res.resultMsg = "连接失败" + ipaddress; + return res; + } + } + } - //初始化 + + + + + + + } + } + } + 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 + { + if (data.Any() && data.Count > 0) + { + foreach (var item in data) + { + + //根据播种墙号查询灯带IP + DataTable dt = addrbll.QueryControlList(" and waveno ='" + item.wallNo + "'"); + 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(); + if (item.lightType == "0") + { + + bo = control.LED_OFF(ipaddress, Address); + } + else + { + bo = control.LED_ON(ipaddress, Address, "3", "0", "1"); + } + + + + if (bo) + { + res.resultCode = "0"; + res.resultMsg = "成功!"; + } + else + { + res.resultCode = "-1"; + res.resultMsg = "失败"; + } + + } + else + { + res.resultCode = "-1"; + res.resultMsg = "请先连接设备"; + } + + + } + } + else + { + res.resultCode = "-1"; + res.resultMsg = "播种墙号错误!"; + LogHelper.WriteLogInfo("播种墙号错误", LogHelper.Log_Type.ERROR); + } + } + } + else + { + + res.resultCode = "-1"; + 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("DISPLAYJOB")] [HttpPost] - public ResultModel DISPLAYJOB(OrderModel model) + public ResultLightModel DISPLAYJOB([FromBody] List data) { - lock (lockinit) + ResultLightModel res = new ResultLightModel(); + try { - ResultModel res = new ResultModel(); - try + if (data.Any() && data.Count > 0) { - LogHelper.WriteLogInfo(JsonHelper.SerializeObject(model)); - res.result = "0"; - res.msg = "成功!"; - return res; + foreach (DisplayjobModelReq item in data) + { + //根据播种墙号查询灯带IP + DataTable dt = addrbll.QueryControlList(" and waveno ='" + item.wallNo + "'"); + 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 waveno ='" + item.wallNo + "' 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); + + } + bool bo = control.LED_By_Paragraph(ipaddress, address, list); + if (bo) + { + res.resultCode = "0"; + res.resultMsg = "成功!"; + } + else + { + res.resultCode = "-1"; + res.resultMsg = "失败"; + return res; + } + + } + } + else + { + res.resultCode = "-1"; + res.resultMsg = "请先连接设备!"; + } + } + + } + else + { + res.resultCode = "-1"; + res.resultMsg = "连接失败"; + } + } } - catch (Exception ex) - { - LogHelper.WriteLogInfo("GetDataList异常:" + ex.Message); - res.msg = "请求异常!"; - res.result = "-1"; - return res; - } - } - - } - //初始化 - [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("TestStart")] - [HttpPost] - public ResultModel TestStart() - { - lock (lockinit) + catch (Exception ex) { - ResultModel res = new ResultModel(); - try - { - ResultModel result = contrbll.TestStart(); - - return result; - - } - catch (Exception ex) - { - LogHelper.WriteLogInfo("GetDataList异常:" + ex.Message); - res.msg = "请求异常!"; - res.result = "-1"; - return res; - - } + LogHelper.WriteLogInfo(ex.ToString(), LogHelper.Log_Type.ERROR); + res.resultMsg = "请求接口异常!"; + res.resultCode = "-1"; } + return res; } #endregion - #region 停止检测 - [Route("TestEnd")] - [HttpPost] - public ResultModel TestEnd() - { - lock (lockinit) - { - ResultModel res = new ResultModel(); - contrbll.TestEnd(); - res.msg = "成功!"; - res.result = "0"; - return res; - } - } - #endregion - - - - #region 停止作业 - [Route("EndWork")] - [HttpPost] - public ResultModel EndWork() - { - lock (lockinit) - { - ResultModel res = new ResultModel(); - contrbll.EndWork(); - res.msg = "成功!"; - res.result = "0"; - return res; - } - } - #endregion - - - } diff --git a/Epost.TestToolsWeb/Epost.DPS.csproj b/Epost.TestToolsWeb/Epost.DPS.csproj index 0337f12..96821d4 100644 --- a/Epost.TestToolsWeb/Epost.DPS.csproj +++ b/Epost.TestToolsWeb/Epost.DPS.csproj @@ -61,6 +61,10 @@ False ..\DLL\ExcelIntOut.dll + + False + ..\DLL\LightContrl.dll + ..\packages\Microsoft.ApplicationInsights.Agent.Intercept.1.2.1\lib\net45\Microsoft.AI.Agent.Intercept.dll True diff --git a/Epost.TestToolsWeb/Web.config b/Epost.TestToolsWeb/Web.config index d59abdf..7a688d8 100644 --- a/Epost.TestToolsWeb/Web.config +++ b/Epost.TestToolsWeb/Web.config @@ -32,7 +32,9 @@ - + + +