恒石成品库WCS
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

362 lines
16 KiB

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);
/// <summary>
/// 获取数据
/// </summary>
/// <param name="id">调度任务索引</param>
/// <param name="barcode"></param>
/// <param name="startDevice"></param>
/// <param name="startCell"></param>
/// <param name="endDevice"></param>
/// <param name="endCell"></param>
/// <param name="taskStatus"></param>
/// <param name="sort"></param>
/// <param name="offset"></param>
/// <param name="limit"></param>
/// <returns></returns>
[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 });
}
/// <summary>
/// 操作 删除 完成
/// </summary>
/// <param name="id">任务编号FID</param>
/// <param name="action">动作代码 999 990</param>
/// <param name="kind">TaskKindIndex 调度任务 自动任务。。</param>
/// <returns></returns>
[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);
}
/// <summary>
/// 批量处理
/// 前端批量删除时候调用
/// </summary
//[HttpPost("batch")]
//public IActionResult Batch(
// [FromMember] string[] data) // 这个是指令编号
//{
// int count = 0;
// int action = 900;
// // 写入数据库
// foreach (var item in data)
// {
// var sqlStatus = $"select FSTATUS from T_Manage_Task where fid={item}";
// dv = dbo.ExceSQL(sqlStatus.ToString()).Tables[0].DefaultView;
// if (dv.Count > 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);
// }
//}
}
}