using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; using WcfControlMonitorLib; namespace WcfControlMonitorWebLib.Controllers { [ApiController, Route("api/autocommand")] public class AutoCommandController : ControllerBase { SControlMonitor sc = new SControlMonitor(false); [HttpGet] public IActionResult Get( [FromQuery] string barcode, [FromQuery] string startDevice, [FromQuery] string sort, [FromQuery] int? offset, [FromQuery] int? limit) { if (offset == null) { offset = 0; } if (limit == null) { limit = 30; } #region 排序信息需要转一下 if (sort?.Length > 1) { var format = sort?.StartsWith("~") == true ? "{0} DESC" : "{0}"; if ((bool)sort?.StartsWith("~")) { switch (sort.Substring(2)) { case "arcode": sort = string.Format(format, "条码"); break; case "tartDevice": sort = string.Format(format, "起点"); break; default: sort = "调度任务索引"; break; } } else { switch (sort.Substring(1)) { case "arcode": sort = string.Format(format, "条码"); break; case "tartDevice": sort = string.Format(format, "起点"); break; default: sort = "调度任务索引"; break; } } } else { sort = "调度任务索引"; } #endregion #region 拼接 where 条件 var where = "1=1"; if (!string.IsNullOrEmpty(barcode)) { where = $"{where} AND 条码 = '{barcode}'"; } if (!string.IsNullOrEmpty(startDevice)) { where = $"{where} AND 起点 = '{startDevice}'"; } #endregion var sql = $"SELECT TOP {limit} barcode,id,taskKind,controlTaskKind,ftaskLevel,startDevice,startCell,endDevice,endCell,fIntoStepOK,currentDevice,taskStatus,startTime,errorInfo,statusCode FROM (SELECT 条码 as barcode, 调度任务索引 AS id,任务类型 as TaskKind,作业类型 as ControlTaskKind ,优先级 as ftaskLevel,起点 as StartDevice,起点货位 as StartCell,终点 as EndDevice ,终点货位 as EndCell,拆分状态 as FIntoStepOK ,当前执行设备 as CurrentDevice,任务状态 AS TaskStatus,开始时间 AS StartTime,故障信息 as errorInfo,F_Status as statusCode,ROW_NUMBER() OVER (ORDER BY {sort}) AS ROW_NUM FROM V_manage_task WHERE 任务类型='自动任务' and {where}) AS T WHERE ROW_NUM > {offset}"; var sqlAll = $"SELECT barcode,id,TaskKind,ControlTaskKind,ftaskLevel,StartDevice,StartCell,EndDevice,EndCell,FIntoStepOK,CurrentDevice,TaskStatus,StartTime,errorInfo,statusCode FROM (SELECT 条码 as barcode, 调度任务索引 AS id,任务类型 as TaskKind,作业类型 as ControlTaskKind ,优先级 as ftaskLevel,起点 as StartDevice,起点货位 as StartCell,终点 as EndDevice ,终点货位 as EndCell,拆分状态 as FIntoStepOK ,当前执行设备 as CurrentDevice,任务状态 AS TaskStatus,开始时间 AS StartTime,故障信息 as errorInfo,F_Status as statusCode,ROW_NUMBER() OVER (ORDER BY {sort}) AS ROW_NUM FROM V_manage_task WHERE 任务类型='自动任务' and {where}) AS T WHERE ROW_NUM > 0"; DataView dv1 = CStaticClass.dbo.ExceSQL(sqlAll.ToString()).Tables[0].DefaultView; DataView dv = CStaticClass.dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; var items = new dynamic[dv.Count]; for (int i = 0; i < dv.Count; i++) { items[i] = new { id = Convert.ToInt32(dv[i]["id"]), barcode = Convert.ToString(dv[i]["barcode"]), taskKind = Convert.ToString(dv[i]["taskKind"]), controlTaskKind = Convert.ToString(dv[i]["controlTaskKind"]), ftaskLevel = Convert.ToInt32(dv[i]["ftaskLevel"]), startDevice = Convert.ToString(dv[i]["startDevice"]), startCell = Convert.ToString(dv[i]["startCell"]), endDevice = Convert.ToString(dv[i]["endDevice"]), endCell = Convert.ToString(dv[i]["endCell"]), fIntoStepOK = Convert.ToInt32(dv[i]["fIntoStepOK"]), currentDevice = Convert.ToString(dv[i]["currentDevice"]), taskStatus = Convert.ToString(dv[i]["taskStatus"]), startTime = Convert.ToString(dv[i]["startTime"]), errorInfo = Convert.ToString(dv[i]["errorInfo"]), statusCode = Convert.ToInt32(dv[i]["statusCode"]) }; } return Ok(new { total = dv1.Count, items }); } [HttpGet("tasktypelist")] public IActionResult GetTaskTypeList() { var sql = $"select FINTERCODE,FNAME from T_ITEMTASKTYPE where FINTERCODE!=0"; DataView dv = CStaticClass.dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; var items = new dynamic[dv.Count]; for (int i = 0; i < dv.Count; i++) { items[i] = new { id = Convert.ToInt32(dv[i]["FINTERCODE"]), name = Convert.ToString(dv[i]["FNAME"]) }; } return Ok(new { total = dv.Count, items }); } [HttpGet("startdevicelist")] public IActionResult GetStartDeviceList( [FromQuery] string tasktype) { if (!string.IsNullOrEmpty(tasktype)) { var sql = $"SELECT DISTINCT F_StartDevice,F_DeviceName,F_DeviceKindIndex FROM T_Base_Route,T_Base_Device where F_StartDevice = F_DeviceIndex and T_Base_Route.F_RouteKind = {tasktype} order by F_StartDevice"; DataView dv = CStaticClass.dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; var items = new dynamic[dv.Count]; for (int i = 0; i < dv.Count; i++) { items[i] = new { id = Convert.ToInt32(dv[i]["F_StartDevice"]), name = Convert.ToString(dv[i]["F_DeviceName"]), devicekind = Convert.ToInt32(dv[i]["F_DeviceKindIndex"]) }; } return Ok(new { total = dv.Count, items }); } else { return StatusCode(422); } } [HttpGet("enddevicelist")] public IActionResult GetEndDeviceList( [FromQuery] string tasktype, [FromQuery] int startdevice) { if (!string.IsNullOrEmpty(tasktype)) { var sql = $"SELECT DISTINCT F_EndDevice,F_DeviceName,F_DeviceKindIndex FROM T_Base_Route,T_Base_Device where F_EndDevice = F_DeviceIndex and T_Base_Route.F_RouteKind = {tasktype} and F_StartDevice={startdevice} order by F_EndDevice"; DataView dv = CStaticClass.dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; var items = new dynamic[dv.Count]; for (int i = 0; i < dv.Count; i++) { items[i] = new { id = Convert.ToInt32(dv[i]["F_EndDevice"]), name = Convert.ToString(dv[i]["F_DeviceName"]), devicekind = Convert.ToInt32(dv[i]["F_DeviceKindIndex"]) }; } return Ok(new { total = dv.Count, items }); } else { return StatusCode(422); } } /// /// 获取排列层 /// /// 巷道编号 /// 排 /// 列 /// [HttpGet("startzxy")] public IActionResult GetZXY( [FromQuery] string startdevice, [FromQuery] string z, [FromQuery] string x) { string where = "1=1"; string SELECT = "F_Z"; if (!string.IsNullOrEmpty(startdevice)) { where = $"{where} AND FLaneWay = {startdevice}"; } if (!string.IsNullOrEmpty(z)) { where = $"{where} AND F_Z = {z}"; SELECT = "F_X"; } if (!string.IsNullOrEmpty(x)) { where = $"{where} AND F_X = {x}"; SELECT = "F_Y"; } var sql = $"select DISTINCT {SELECT} from ST_CELL where {where} order by {SELECT} "; DataView dv = CStaticClass.dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView; var items = new dynamic[dv.Count]; for (int i = 0; i < dv.Count; i++) { items[i] = new { id = Convert.ToInt32(dv[i][SELECT]), name = Convert.ToString(dv[i][SELECT]), }; } return Ok(new { total = dv.Count, items }); } [HttpPost] public IActionResult Post( [FromMember] string barcode, [FromMember] int tasktype, [FromMember] string startdevice, [FromMember] int startZ, [FromMember] int startX, [FromMember] int startY, [FromMember] string enddevice, [FromMember] int endZ, [FromMember] int endX, [FromMember] int endY, [FromMember] int pallettype) { /* int pallettype = 0;*///用来保存单叉堆垛机的托盘类型(1小托盘,2大托盘) string startcell = string.Empty; string endcell = string.Empty; bool tbstartsite = false; bool tbendsite = false; StringBuilder zxyStartstr = new StringBuilder(); StringBuilder zxyEndstr = new StringBuilder(); // 检查托盘类型 if (pallettype != 1 && pallettype != 2) { return StatusCode(408); } //入 if (tasktype == 1) { tbendsite = true; #region TJBS 终 //add for TJBS /* if (endZ.ToString().Length == 1) { zxyEndstr.Append("0" + endZ.ToString()).Append("-"); } else { zxyEndstr.Append(endZ.ToString()).Append("-"); } //x if (endX.ToString().Length == 1) { zxyEndstr.Append("0" + endX.ToString()).Append("-"); } else { zxyEndstr.Append(endX.ToString()).Append("-"); } //Y if (endY.ToString().Length == 1) { zxyEndstr.Append("0" + endY.ToString()); } else { zxyEndstr.Append(endY.ToString()); } */ #endregion zxyEndstr.Append((endZ.ToString().Length == 1 ? "0" + endZ.ToString() : endZ.ToString())).Append("-").Append( ((endX.ToString().Length == 1) ? ("0" + endX.ToString()) : (endX.ToString()))).Append("-").Append( ((endY.ToString().Length == 1) ? ("0" + endY.ToString()) : (endY.ToString()))); endcell = zxyEndstr.ToString(); } //出 else if (tasktype == 2) { tbstartsite = true; #region TJBS 起 /* //z if (startZ.ToString().Length == 1) { zxyStartstr.Append("0" + startZ.ToString()).Append("-"); } else { zxyStartstr.Append(startZ.ToString()).Append("-"); } //X if (startX.ToString().Length == 1) { zxyStartstr.Append("0" + startX.ToString()).Append("-"); } else { zxyStartstr.Append(startX.ToString()).Append("-"); } //Y if (startY.ToString().Length == 1) { zxyStartstr.Append("0" + startY.ToString()); } else { zxyStartstr.Append(startY.ToString()); } */ #endregion zxyStartstr.Append((startZ.ToString().Length == 1 ? "0" + startZ.ToString() : startZ.ToString())).Append("-").Append( ((startX.ToString().Length == 1) ? ("0" + startX.ToString()) : (startX.ToString()))).Append("-").Append( ((startY.ToString().Length == 1) ? ("0" + startY.ToString()) : (startY.ToString()))); startcell = zxyStartstr.ToString(); } //移 else if (tasktype == 3) { tbendsite = true; tbstartsite = true; #region TJBS 起 /* if (startZ.ToString().Length == 1) { zxyStartstr.Append("0" + startZ.ToString()).Append("-"); } else { zxyStartstr.Append(startZ.ToString()).Append("-"); } //X if (startX.ToString().Length == 1) { zxyStartstr.Append("0" + startX.ToString()).Append("-"); } else { zxyStartstr.Append(startX.ToString()).Append("-"); } //Y if (startY.ToString().Length == 1) { zxyStartstr.Append("0" + startY.ToString()); } else { zxyStartstr.Append(startY.ToString()); } */ #endregion zxyStartstr.Append((startZ.ToString().Length == 1 ? "0" + startZ.ToString() : startZ.ToString())).Append("-").Append( ((startX.ToString().Length == 1) ? ("0" + startX.ToString()) : (startX.ToString()))).Append("-").Append( ((startY.ToString().Length == 1) ? ("0" + startY.ToString()) : (startY.ToString()))); startcell = zxyStartstr.ToString(); #region TJBS 终 /* //z if (endZ.ToString().Length == 1) { zxyEndstr.Append("0" + endZ.ToString()).Append("-"); } else { zxyEndstr.Append(endZ.ToString()).Append("-"); } //x if (endX.ToString().Length == 1) { zxyEndstr.Append("0" + endX.ToString()).Append("-"); } else { zxyEndstr.Append(endX.ToString()).Append("-"); } //Y if (endY.ToString().Length == 1) { zxyEndstr.Append("0" + endY.ToString()); } else { zxyEndstr.Append(endY.ToString()); } */ #endregion zxyEndstr.Append((endZ.ToString().Length == 1 ? "0" + endZ.ToString() : endZ.ToString())).Append("-").Append( ((endX.ToString().Length == 1) ? ("0" + endX.ToString()) : (endX.ToString()))).Append("-").Append( ((endY.ToString().Length == 1) ? ("0" + endY.ToString()) : (endY.ToString()))); endcell = zxyEndstr.ToString(); } else { tbendsite = false; tbstartsite = false; } Model.AutoTask at = new Model.AutoTask(tasktype, barcode, startdevice, startcell, enddevice, endcell,tbstartsite, tbendsite, pallettype); sc.BuildAutoTask(at, out string error); if (error == null || error == "") { return StatusCode(200); } else { return StatusCode(422); } } } }