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/routestatus")] public class RouteStatusController: ControllerBase { DataView dv = new DataView(); /// /// 查询数据 /// /// 路径索引 /// 起点设备 /// 终点设备 /// 路径状态 /// 排序字段 /// /// /// [HttpGet] public IActionResult Get( [FromQuery] string id, [FromQuery] string startDevice, [FromQuery] string endDevice, [FromQuery] string status, [FromQuery] string sort, [FromQuery] int? offset, [FromQuery] int? limit) { //F_RouteID, F_RouteKind,F_RouteName,F_StartDevice,F_EndDevice,F_OutsideAltDevice,F_InsideAltDevice,f_status 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 "d": sort = string.Format(format, "F_RouteID"); break; case "tatus": sort = string.Format(format, "f_status"); break; default: sort = string.Format(format, "F_RouteID"); break; } } else { switch (sort.Substring(1)) { case "d": sort = string.Format(format, "F_RouteID"); break; case "tatus": sort = string.Format(format, "f_status"); break; default: sort = string.Format(format, "F_RouteID"); break; } } } else { sort = "F_RouteID"; } #endregion #region 拼接 where 条件 var where = "1=1"; if (!string.IsNullOrEmpty(id)) { where = $"{where} AND F_RouteID = {id}"; } if (!string.IsNullOrEmpty(startDevice)) { where = $"{where} AND F_StartDevice = '{startDevice}'"; } if (!string.IsNullOrEmpty(endDevice)) { where = $"{where} AND F_EndDevice = '{endDevice}'"; } if (!string.IsNullOrEmpty(status)) { where = $"{where} AND f_status = {status}"; } #endregion var sql = $"SELECT top {limit} F_RouteID, F_RouteKind,F_RouteName,F_StartDevice,F_EndDevice,F_OutsideAltDevice,F_InsideAltDevice,f_status FROM (SELECT F_RouteID, F_RouteKind,F_RouteName,F_StartDevice,F_EndDevice,F_OutsideAltDevice,F_InsideAltDevice,f_status,ROW_NUMBER() OVER (ORDER BY {sort}) AS ROW_NUM FROM T_Base_Route WHERE {where}) AS T WHERE ROW_NUM > {offset}"; var sqlAll = $"SELECT F_RouteID, F_RouteKind,F_RouteName,F_StartDevice,F_EndDevice,F_OutsideAltDevice,F_InsideAltDevice,f_status FROM (SELECT F_RouteID, F_RouteKind,F_RouteName,F_StartDevice,F_EndDevice,F_OutsideAltDevice,F_InsideAltDevice,f_status,ROW_NUMBER() OVER (ORDER BY F_RouteID) AS ROW_NUM FROM T_Base_Route WHERE {where}) AS T WHERE ROW_NUM > 0"; DataView dv1 = CStaticClass.dbo.ExceSQL(sqlAll.ToString()).Tables[0].DefaultView;//满足的条件的所有数据 返回总记录条数用 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 { //F_RouteID, F_RouteKind,F_RouteName,F_StartDevice,F_EndDevice,F_OutsideAltDevice,F_InsideAltDevice,f_status id = Convert.ToInt32(dv[i]["F_RouteID"]), routeKind = Convert.ToString(dv[i]["F_RouteKind"]), routeName = Convert.ToString(dv[i]["F_RouteName"]), startDevice = Convert.ToString(dv[i]["F_StartDevice"]), endDevice = Convert.ToString(dv[i]["F_EndDevice"]), outsideAltDevice = Convert.ToInt32(dv[i]["F_OutsideAltDevice"]), insideAltDevice = Convert.ToInt32(dv[i]["F_InsideAltDevice"]), status = Convert.ToInt32(dv[i]["f_status"]) }; } return Ok(new { total = dv1.Count, items }); } /// /// 修改 /// /// 路径索引 /// 状态 /// [HttpPut("{id}")] public IActionResult Modify( [FromRoute] string id, // routeid [FromMember] string status) { // 写入数据库 int count = CStaticClass.dbo.ExecuteSql($"update T_Base_Route set f_status={status} where F_RouteID={id}"); if (count > 0) { CStaticClass.dboM.ExecuteSql($"update IO_CONTROL_ROUTE set CONTROL_ROUTE_STATUS={status} where CONTROL_ROUTE_ID={id}"); return Ok(); } else { return StatusCode(422); } } } }