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/managetask")]
public class ManageTaskController : ControllerBase
{
DBFactory.DBOperator dbo = CStaticClass.dbo;
StringBuilder sql = new StringBuilder();
DataView dv = new DataView();
SControlMonitor WcfControl = new SControlMonitor(false);
///
/// 获取数据
///
/// 调度任务索引
///
///
///
///
///
///
///
///
///
///
[HttpGet]
public IActionResult Get(
[FromQuery] string id,
[FromQuery] string barcode,
//[FromQuery] string taskKind,
[FromQuery] string controlTaskKind,
//[FromQuery] string ftaskLevel,
[FromQuery] string startDevice,
[FromQuery] string startCell,
[FromQuery] string endDevice,
[FromQuery] string endCell,
//[FromQuery] string fIntoStepOK,
[FromQuery] string currentDevice,
[FromQuery] string taskStatus,
[FromQuery] string palletType,
//[FromQuery] string errorInfo,
[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))
{
//barcode,fid,taskKind,controlTaskKind,ftaskLevel,startDevice,startCell,endDevice,endCell,fIntoStepOK,currentDevice,taskStatus,startTime,errorInfo
case "arcode":
sort = string.Format(format, "条码");
break;
case "d":
sort = string.Format(format, "调度任务索引");
break;
case "askKind":
sort = string.Format(format, "任务类型");
break;
case "ontrolTaskKind":
sort = string.Format(format, "作业类型");
break;
case "taskLevel":
sort = string.Format(format, "优先级");
break;
case "tartDevice":
sort = string.Format(format, "起点");
break;
case "tartCell":
sort = string.Format(format, "起点货位");
break;
case "ndDevice":
sort = string.Format(format, "终点");
break;
case "ndCell":
sort = string.Format(format, "终点货位");
break;
case "IntoStepOK":
sort = string.Format(format, "拆分状态");
break;
case "urrentDevice":
sort = string.Format(format, "当前执行设备");
break;
case "askStatus":
sort = string.Format(format, "任务状态");
break;
case "tartTime":
sort = string.Format(format, "开始时间");
break;
case "rrorInfo":
sort = string.Format(format, "故障信息");
break;
default:
sort = "调度任务索引";
break;
}
}
else
{
switch (sort.Substring(1))
{
case "arcode":
sort = string.Format(format, "条码");
break;
case "d":
sort = string.Format(format, "调度任务索引");
break;
case "askKind":
sort = string.Format(format, "任务类型");
break;
case "ontrolTaskKind":
sort = string.Format(format, "作业类型");
break;
case "taskLevel":
sort = string.Format(format, "优先级");
break;
case "tartDevice":
sort = string.Format(format, "起点");
break;
case "tartCell":
sort = string.Format(format, "起点货位");
break;
case "ndDevice":
sort = string.Format(format, "终点");
break;
case "ndCell":
sort = string.Format(format, "终点货位");
break;
case "IntoStepOK":
sort = string.Format(format, "拆分状态");
break;
case "urrentDevice":
sort = string.Format(format, "当前执行设备");
break;
case "askStatus":
sort = string.Format(format, "任务状态");
break;
case "tartTime":
sort = string.Format(format, "开始时间");
break;
case "rrorInfo":
sort = string.Format(format, "故障信息");
break;
default:
sort = "调度任务索引";
break;
}
}
}
else
{
sort = "调度任务索引";
}
#endregion
//barcode,fid,taskKind,controlTaskKind,ftaskLevel,startDevice,startCell,endDevice,endCell,fIntoStepOK,currentDevice,taskStatus,startTime,errorInfo
#region 拼接 where 条件
var where = "1=1";
if (!string.IsNullOrEmpty(barcode))
{
where = $"{where} AND 条码 = '{barcode}'";
}
if (!string.IsNullOrEmpty(id))
{
where = $"{where} AND 调度任务索引 = {id}";
}
if (!string.IsNullOrEmpty(palletType))
{
where = $"{where} AND 托盘类型 = '{palletType}'";
}
if (!string.IsNullOrEmpty(controlTaskKind))
{
where = $"{where} AND 作业类型 = '{controlTaskKind}'";
}
//if (!string.IsNullOrEmpty(ftaskLevel))
//{
// where = $"{where} AND 优先级 = {ftaskLevel}";
//}
if (!string.IsNullOrEmpty(startDevice))
{
where = $"{where} AND 起点 = '{startDevice}'";
}
if (!string.IsNullOrEmpty(startCell))
{
where = $"{where} AND 起点货位 = '{startCell}'";
}
if (!string.IsNullOrEmpty(endDevice))
{
where = $"{where} AND 终点 = '{endDevice}'";
}
if (!string.IsNullOrEmpty(endCell))
{
where = $"{where} AND 终点货位 = '{endCell}'";
}
//if (!string.IsNullOrEmpty(fIntoStepOK))
//{
// where = $"{where} AND 拆分状态 = {fIntoStepOK}";
//}
if (!string.IsNullOrEmpty(currentDevice))
{
where = $"{where} AND 当前执行设备 = '{currentDevice}'";
}
if (!string.IsNullOrEmpty(taskStatus))
{
switch (taskStatus)
{
case "0":
taskStatus = "等待执行";
break;
case "1":
taskStatus = "开始执行";
break;
}
where = $"{where} AND 任务状态 = '{taskStatus}'";
}
//if (!string.IsNullOrEmpty(startTime))
//{
// where = $"{where} AND 开始时间 = '{startTime}'";
//}
//if (!string.IsNullOrEmpty(errorInfo))
//{
// where = $"{where} AND 故障信息 LIKE '%{errorInfo}%'";
//}
#endregion
var sql = $"SELECT TOP {limit} barcode,id,taskKind,controlTaskKind,ftaskLevel,startDevice,startCell,endDevice,endCell,fIntoStepOK,currentDevice,taskStatus,startTime,errorInfo,statusCode,useAwayFork,palletType 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,货叉 as useAwayFork,托盘类型 as palletType ,ROW_NUMBER() OVER (ORDER BY {sort}) AS ROW_NUM FROM V_manage_task WHERE {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,useAwayFork,palletType 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,货叉 as useAwayFork,托盘类型 as palletType ,ROW_NUMBER() OVER (ORDER BY {sort}) AS ROW_NUM FROM V_manage_task 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++)
{
//barcode,fid,taskKind,controlTaskKind,ftaskLevel,startDevice,startCell,endDevice,endCell,fIntoStepOK,currentDevice,taskStatus,startTime,errorInfo
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"]),
useAwayFork = Convert.ToString(dv[i]["useAwayFork"]),
palletType = Convert.ToString(dv[i]["palletType"]),
};
}
return Ok(new { total = dv1.Count, items });
}
///
/// 操作 删除 完成
///
/// 任务编号FID
/// 动作代码 999 990
/// TaskKindIndex 调度任务 自动任务。。
///
[HttpPost]
public IActionResult Post(
[FromMember] int id,
[FromMember] int action,
[FromMember] string kind)
{
// 写入数据库
string o;
sql.Remove(0, sql.Length);
sql.Append("SELECT F_TaskKindIndex FROM T_Base_Manage_Task_Kind WHERE F_TaskKindName = '").Append(kind).Append("'");
dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
if (dv.Count > 0)
{
int iKind = int.Parse(dv[0]["F_TaskKindIndex"].ToString());
WcfControl.ModifyManageTask(iKind, id, action, out o);
if (!string.IsNullOrEmpty(o))
{
return StatusCode(422);
}
return StatusCode(200);
}
return StatusCode(422);
}
///
/// 批量处理
/// 前端批量删除时候调用
/// 0)
// {
// if (Convert.ToInt32(dv[0]["FSTATUS"]) <= 0)
// {
// string o;
// sql.Remove(0, sql.Length);
// sql.Append("select F_ManageTaskKindIndex from T_Manage_Task where fid=").Append(item);
// dv = dbo.ExceSQL(sql.ToString()).Tables[0].DefaultView;
// if (dv.Count > 0)
// {
// int iKind = int.Parse(dv[0]["F_ManageTaskKindIndex"].ToString());
// sc.ModifyManageTask(iKind, int.Parse(item), action, out o);
// if (o == "")
// {
// count++;
// }
// }
// }
// }
// }
// if (count > 0)
// {
// return StatusCode(200);
// }
// else
// {
// return StatusCode(422);
// }
//}
}
}