using System; using System.Collections; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; using Commom.DotNetDevices; using Commom.Utility; using Common; using Model; namespace BLL.DAL { public class DAL_ManualControl { public List GetList(AjaxPlcInfoList Json, ref PageInfo pageInfo) { try { StringBuilder strSql = new StringBuilder(); strSql.Append("select a.IP,b.* from WCSPlcInfo b left join WCSIP a on b.PlcIP = a.Id where b.IsDel = 0 and a.Type = '0' "); if (!string.IsNullOrWhiteSpace(Json.StationNum)) { strSql.Append($"and b.StationNum = '{Json.StationNum}' "); } if (!string.IsNullOrWhiteSpace(Json.Text)) { strSql.Append($"and b.Text = '{Json.Text}' "); } DataTable dt = DataFactory.SqlDataBase().GetPageList(strSql.ToString(), null, "CreateTime", "", ref pageInfo); if (dt!= null) { DALWcsMessage wcsSql = new DALWcsMessage(); var plcIpDt = wcsSql.GetPlcIps(); dt.Columns.Add("PlcStatusVal",Type.GetType("System.String")); foreach (DataRow item in dt.Rows) { DataRow ipRows = plcIpDt.Select($" Id = {item["PlcIP"].ToString()} ")[0]; string plcStatus = "", plcValue = ""; var statusVal = ""; PlcIO plc = new PlcIO(ipRows["IP"].ToString(), 1, ref plcStatus); if (plcStatus.Length > 0) { plc.ClosePlc(); } else { plcValue = plc.GetPlcDBValue(int.Parse(item["DbNumber"].ToString()), item["PosType"].ToString(), item["PlcPos"].ToString()); } switch (plcValue) { case "0": // 请求任务 statusVal = "PLC手动状态"; break; case "10": // 请求任务 statusVal = "空闲"; break; case "11": // 去取货位置 statusVal = "正在去往取货位置"; break; case "12": // 取货过程 statusVal = "正在取货"; break; case "20": // 取货完成 statusVal = "取货完成"; break; case "21": // 去放货位置 statusVal = "正在去往放货位置"; break; case "22": // 放货过程 statusVal = "正在放货"; break; case "30": // 取货完成 statusVal = "放货完成"; break; case "100": // 取货未成功 statusVal = "空取异常"; break; case "101": // 放货有障碍 statusVal = "满放异常"; break; default: statusVal = "连接PLC失败"; break; } item["PlcStatusVal"] = statusVal; plc.ClosePlc(); } var list = ModelConvertHelper.DataTableToModel(dt); return list.ToList(); } else { List list = new List(); return list; } } catch { throw new NotImplementedException(); } } public string AddEditStacker(StackerModel model, string loginUser,string orgin) { try { //转换user信息 user Code变成id UserInfo us = null; StringBuilder strSql = new StringBuilder(); strSql.Append($"select * from UserInfo where IsDel = 0 and UserCode = '{loginUser}' "); IDataReader dt = DataFactory.SqlDataBase().GetDataReaderBySQL(strSql, null); us = ModelConvertHelper.ReaderToModel(dt); if (us == null) { return "未查询到当前登录人信息"; } string plcStatus = ""; // PLC连接状态 DALWcsMessage wcsSql = new DALWcsMessage(); var PlcInfoDt = wcsSql.GetPlcInfos(); DataRow[] plcRows = PlcInfoDt.Select($"Level = '0' and StationNum='{model.DjType}' "); if (plcRows.Length == 0) { return "未查询到起始跺机信息"; } var PlcIpDt = wcsSql.GetPlcIps(); DataRow[] ipRows = PlcIpDt.Select($" Type = '0' and Id = '{plcRows[0]["PlcIP"].ToString()}'"); if (ipRows.Length == 0) { return "未查询到起始跺机信息"; } PlcIO plc = new PlcIO(ipRows[0]["IP"].ToString(), 1, ref plcStatus); if (plcStatus.Length > 0) { return "连接跺机失败"; } var posDt = wcsSql.GetPlcPos(plcRows[0]["Id"].ToString()); // 写入起始排 var posRos101 = posDt.Select($"Name = 'StartRow' ")[0]; plc.SetPlcDBValue(int.Parse(plcRows[0]["DbNumber"].ToString()), posRos101["PosType"].ToString(), model.StartRow, posRos101["PlcPos"].ToString()); // 写入起始列 var posRos102 = posDt.Select($"Name = 'StartColumn' ")[0]; plc.SetPlcDBValue(int.Parse(plcRows[0]["DbNumber"].ToString()), posRos102["PosType"].ToString(), model.StartColumn, posRos102["PlcPos"].ToString()); // 写入起始层 var posRos103 = posDt.Select($"Name = 'StartLayer' ")[0]; plc.SetPlcDBValue(int.Parse(plcRows[0]["DbNumber"].ToString()), posRos103["PosType"].ToString(), model.StartLayer, posRos103["PlcPos"].ToString()); // 写入目的排 var posRos104 = posDt.Select($"Name = 'EndRow' ")[0]; plc.SetPlcDBValue(int.Parse(plcRows[0]["DbNumber"].ToString()), posRos104["PosType"].ToString(), model.EndRow, posRos104["PlcPos"].ToString()); // 写入目的列 var posRos105 = posDt.Select($"Name = 'EndColumn' ")[0]; plc.SetPlcDBValue(int.Parse(plcRows[0]["DbNumber"].ToString()), posRos105["PosType"].ToString(), model.EndColumn, posRos105["PlcPos"].ToString()); // 写入目的层 var posRos106 = posDt.Select($"Name = 'EndLayer' ")[0]; plc.SetPlcDBValue(int.Parse(plcRows[0]["DbNumber"].ToString()), posRos106["PosType"].ToString(), model.EndLayer, posRos106["PlcPos"].ToString()); //写入托盘号 var posRos107 = posDt.Select($"Name = 'PalletNo' ")[0];// 托盘号 plc.SetPlcDBValue(int.Parse(plcRows[0]["DbNumber"].ToString()), posRos107["PosType"].ToString(), model.PalletNo, posRos107["PlcPos"].ToString()); //写入任务号 var posRos108 = posDt.Select($"Name = 'TaskNo' ")[0]; plc.SetPlcDBValue(int.Parse(plcRows[0]["DbNumber"].ToString()), posRos108["PosType"].ToString(), model.TaskNo, posRos108["PlcPos"].ToString()); // 写入wcs控制字流程10 bool inBl10 = plc.SetPlcDBValue(int.Parse(plcRows[0]["DbNumber"].ToString()), plcRows[0]["PosType"].ToString(), model.WcsPos, plcRows[0]["WcsPos"].ToString(), true); plc.ClosePlc(); if (orgin == "Edit") { DAL_OperationRecord oper = new DAL_OperationRecord(); var operation = new OperationModel() { MenuName = "跺机监控", FkNo = model.TaskNo + "-" + model.PalletNo, Msg = "手动编辑跺机任务信息", Type = "编辑", }; oper.AddOperation(operation, loginUser); } return ""; } catch (Exception e) { throw new Exception(e.Message); } } public StackerModel GetStacker(string id) { try { string plcStatus = ""; // PLC连接状态 StackerModel model = new StackerModel(); DALWcsMessage wcsSql = new DALWcsMessage(); var PlcInfoDt = wcsSql.GetPlcInfos(); DataRow[] plcRows = PlcInfoDt.Select($"Level = '0' and Id={id} "); if (plcRows.Length == 0) { return model; } var PlcIpDt = wcsSql.GetPlcIps(); DataRow[] ipRows = PlcIpDt.Select($" Type = '0' and Id = '{plcRows[0]["PlcIP"].ToString()}'"); if (ipRows.Length == 0) { return model; } PlcIO plc = new PlcIO(ipRows[0]["IP"].ToString(), 1, ref plcStatus); if (plcStatus.Length > 0) { return model; } var posDt = wcsSql.GetPlcPos(id); // 获取起始排 var posRos101 = posDt.Select($"Name = 'StartRow' ")[0]; model.StartRow = plc.GetPlcDBValue(int.Parse(plcRows[0]["DbNumber"].ToString()), posRos101["PosType"].ToString(), posRos101["PlcPos"].ToString()); // 获取起始列 var posRos102 = posDt.Select($"Name = 'StartColumn' ")[0]; model.StartColumn = plc.GetPlcDBValue(int.Parse(plcRows[0]["DbNumber"].ToString()), posRos102["PosType"].ToString(), posRos102["PlcPos"].ToString()); // 获取起始层 var posRos103 = posDt.Select($"Name = 'StartLayer' ")[0]; model.StartLayer = plc.GetPlcDBValue(int.Parse(plcRows[0]["DbNumber"].ToString()), posRos103["PosType"].ToString(), posRos103["PlcPos"].ToString()); // 获取目的排 var posRos104 = posDt.Select($"Name = 'EndRow' ")[0]; model.EndRow = plc.GetPlcDBValue(int.Parse(plcRows[0]["DbNumber"].ToString()), posRos104["PosType"].ToString(), posRos104["PlcPos"].ToString()); // 获取目地列 var posRos105 = posDt.Select($"Name = 'EndColumn' ")[0]; model.EndColumn = plc.GetPlcDBValue(int.Parse(plcRows[0]["DbNumber"].ToString()), posRos105["PosType"].ToString(), posRos105["PlcPos"].ToString()); // 获取目的层 var posRos106 = posDt.Select($"Name = 'EndLayer' ")[0]; model.EndLayer = plc.GetPlcDBValue(int.Parse(plcRows[0]["DbNumber"].ToString()), posRos106["PosType"].ToString(), posRos106["PlcPos"].ToString()); // 获取托盘号 var posRos107 = posDt.Select($"Name = 'PalletNo' ")[0];// 托盘号 model.PalletNo = plc.GetPlcDBValue(int.Parse(plcRows[0]["DbNumber"].ToString()), posRos107["PosType"].ToString(), posRos107["PlcPos"].ToString()); // 获取任务号 var posRos108 = posDt.Select($"Name = 'TaskNo' ")[0]; model.TaskNo = plc.GetPlcDBValue(int.Parse(plcRows[0]["DbNumber"].ToString()), posRos108["PosType"].ToString(), posRos108["PlcPos"].ToString()); // 获取wcs控制字流程 model.WcsPos = plc.GetPlcDBValue(int.Parse(plcRows[0]["DbNumber"].ToString()), plcRows[0]["PosType"].ToString(), plcRows[0]["WcsPos"].ToString()); model.DjType = plcRows[0]["StationNum"].ToString(); plc.ClosePlc(); return model; } catch (Exception e) { throw new Exception(e.Message); } } public bool Add(TaskMonitorModel model, string loginUser) { bool result = false; try { Hashtable ht = new Hashtable(); ht["TaskType"] = model.TaskType.AddQuotes(); ht["InitialAddre"] = "'" + model.InitialAddre + "'"; ht["Palno"] = "'" + model.Palno + "'"; ht["TargetAddre"] = "'" + model.TargetAddre + "'"; ht["State"] = "'0'"; ht["IsSucceed"] = "'" + model.IsSucceed + "'"; ht["ErrorStr"] = "'" + model.ErrorStr + "'"; ht["PriorityLevel"] = model.PriorityLevel; ht["Source"] = "'手动'"; ht["Demo"] = "'"+ model.Demo + "'"; ht["CreateUser"] = "'" + loginUser + "'"; ht["CreateTime"] = "Getdate()"; int _ret = DataFactory.SqlDataBase().InsertByHashtableNullParam("TaskMonitor", ht); if (_ret == 1) result = true; return result; } catch { return result; } } public IList GetDictionaryItems(Dictionarys dictionarys, ref PageInfo page) { try { StringBuilder stringBuilder = new StringBuilder(); stringBuilder.Append("select * from View_Dictionary_Userinfo where IsDel = 0 and TopCode = 'Access' "); if (dictionarys.TopCode != null && dictionarys.TopCode != "") { stringBuilder.Append(" and TopCode = " + dictionarys.TopCode.AddQuotes()); } if (dictionarys.TypeName != null && dictionarys.TypeName != "") { stringBuilder.Append(" and TypeName like '%" + dictionarys.TypeName + "%' "); } if (dictionarys.Guid != null && dictionarys.Guid != "") { stringBuilder.Append(" and Guid = " + dictionarys.Guid.AddQuotes()); } SqlParam[] para = new SqlParam[] { }; DataTable dt = DataFactory.SqlDataBase().GetPageList(stringBuilder.ToString(), para, "TopCode", "ASC", ref page); IList list = ModelConvertHelper.DataTableToModel(dt); return list; } catch { throw new NotImplementedException(); } } public bool IsAutoUpdate(string[] Code) { bool result = false; try { string[] str = { "WCSAuto" }; int dt = DataFactory.SqlDataBase().IsExist("Dictionary", "TopCode", str); if (dt >= Code.Length) { int i = 0; while (i < Code.Length) { StringBuilder sql = new StringBuilder(); sql.Append("update Dictionary set Code='" + Code[i] + "' where TopCode='WCSAuto'"); int _ret = DataFactory.SqlDataBase().ExecuteBySql(sql); if (_ret >= Code.Length) result = true; i++; } } return result; } catch { return result; } } } }