恒石成品库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.

224 lines
8.8 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/devicestatus")]
public class DeviceStatusController : ControllerBase
{
DataView dv = new DataView();
SControlMonitor SControlMonitor = new SControlMonitor(false);//SControlMonitor构造函数改了 调用这里面的方法
/// <summary>
/// 获取数据
/// </summary>
/// <param name="id">设备编号</param>
/// <param name="lockedState">执行状态</param>
/// <param name="errorCode">设备状态</param>
/// <param name="manTaskReserve">预约锁</param>
/// <param name="sort"></param>
/// <param name="offset"></param>
/// <param name="limit"></param>
/// <returns></returns>
[HttpGet]
public IActionResult Get(
[FromQuery] string id,
[FromQuery] string lockedState,
[FromQuery] string errorCode,
[FromQuery] string manTaskReserve,
[FromQuery] string sort,
[FromQuery] int? offset,
[FromQuery] int? limit)
{
//F_DeviceIndex id,F_DeviceName,F_DeviceKindIndex,F_DeviceKindName,F_LockedState,F_errorcode,F_ManTaskReserve,F_HaveGoods
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, "T_Base_Device.F_DeviceIndex");
break;
default:
sort = string.Format(format, "T_Base_Device.F_DeviceIndex");
break;
}
}
else
{
switch (sort.Substring(1))
{
case "d":
sort = string.Format(format, "T_Base_Device.F_DeviceIndex");
break;
default:
sort = string.Format(format, "T_Base_Device.F_DeviceIndex");
break;
}
}
}
else
{
sort = "T_Base_Device.F_DeviceKindIndex";
}
#endregion
#region 拼接 where 条件
var where = "1=1";
if (!string.IsNullOrEmpty(id))
{
where = $"{where} AND T_Base_Device.F_DeviceIndex = {id}";
}
if (!string.IsNullOrEmpty(lockedState))
{
if (lockedState == "1")
{
where = $"{where} AND F_LockedState > 0";
}
else
{
where = $"{where} AND F_LockedState = {lockedState}";
}
}
if (!string.IsNullOrEmpty(errorCode))
{
if (errorCode == "1")
{
where = $"{where} AND F_errorcode >= 30";
}
else
{
where = $"{where} AND F_errorcode = {errorCode}";
}
}
if (!string.IsNullOrEmpty(manTaskReserve))
{
if (manTaskReserve == "0")
{
where = $"{where} AND F_ManTaskReserve = {manTaskReserve}";
}
else
{
where = $"{where} AND F_ManTaskReserve > 0 ";
}
}
#endregion
var sql = $"SELECT top {limit} F_DeviceIndex,F_DeviceName,F_DeviceKindIndex,F_DeviceKindName,F_LockedState,F_errorcode,F_ManTaskReserve,F_HaveGoods FROM (SELECT T_Base_Device.F_DeviceIndex,T_Base_Device.F_DeviceName,T_Base_Device.F_DeviceKindIndex,T_Base_Device_Kind.F_DeviceKindName,F_LockedState,F_errorcode,F_ManTaskReserve,F_HaveGoods,ROW_NUMBER() OVER (ORDER BY {sort}) AS ROW_NUM FROM T_Base_Device,T_Base_Device_Kind WHERE T_Base_Device.F_DeviceKindIndex = T_Base_Device_Kind.F_DeviceKindIndex and {where}) AS T WHERE ROW_NUM > {offset}";
var sqlAll = $"SELECT F_DeviceIndex,F_DeviceName,F_DeviceKindIndex,F_DeviceKindName,F_LockedState,F_errorcode,F_ManTaskReserve,F_HaveGoods FROM (SELECT T_Base_Device.F_DeviceIndex,T_Base_Device.F_DeviceName,T_Base_Device.F_DeviceKindIndex,T_Base_Device_Kind.F_DeviceKindName,F_LockedState,F_errorcode,F_ManTaskReserve,F_HaveGoods,ROW_NUMBER() OVER (ORDER BY T_Base_Device.F_DeviceKindIndex) AS ROW_NUM FROM T_Base_Device,T_Base_Device_Kind WHERE T_Base_Device.F_DeviceKindIndex = T_Base_Device_Kind.F_DeviceKindIndex and {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_DeviceIndex,F_DeviceName,F_DeviceKindIndex,F_DeviceKindName,F_LockedState,F_errorcode,F_ManTaskReserve,F_HaveGoods
id = Convert.ToInt32(dv[i]["F_DeviceIndex"]),
deviceName = Convert.ToString(dv[i]["F_DeviceName"]),
deviceKindIndex = Convert.ToInt32(dv[i]["F_DeviceKindIndex"]),
deviceKindName = Convert.ToString(dv[i]["F_DeviceKindName"]),
lockedState = Convert.ToInt32(dv[i]["F_LockedState"]),
manTaskReserve = Convert.ToInt32(dv[i]["F_ManTaskReserve"]),
errorCode = Convert.ToInt32(dv[i]["F_errorcode"]),
haveGoods = Convert.ToInt32(dv[i]["F_HaveGoods"])
};
}
return Ok(new { total = dv1.Count, items });
}
/// <summary>
/// 修改
/// </summary>
/// <param name="id">设备编号</param>
/// <param name="lockedState">执行状态</param>
/// <param name="manTaskReserve">预约锁</param>
/// <param name="errorCode">设备状态</param>
/// <param name="haveGoods">逻辑有货</param>
/// <returns></returns>
[HttpPut("{id}")]
public IActionResult Modify(
[FromRoute] string id, // deviceIndex
[FromMember] string lockedState,
[FromMember] string manTaskReserve,
[FromMember] string errorCode,
[FromMember] string haveGoods)
{
// 写入数据库
int a;
string error;
if (lockedState == "0")
{
lockedState = "0";
errorCode = "0";
}
else if (lockedState == "-1")
{
lockedState = "-1";
errorCode = "998";
}
else
{
if (int.TryParse(lockedState, out a) == false)
{
return StatusCode(422);
}
}
int count = CStaticClass.dbo.ExecuteSql($"UPDATE T_Base_Device SET F_LockedState ={lockedState},f_errorcode={errorCode},F_ManTaskReserve ={manTaskReserve},F_HaveGoods = {haveGoods} where F_DeviceIndex= {id}");
if (count > 0)
{
Model.MDevice dev = Model.CGetInfo.GetDeviceInfo(Convert.ToInt32(id));
if (lockedState == "-1")
{
dev.RunState = 4;
}
else
{
dev.RunState = Convert.ToInt32(lockedState);//20181204
}
dev.ManTaskReserve = Convert.ToInt32(manTaskReserve);
dev.ErrorCode = Convert.ToInt32(errorCode);
if (haveGoods == "0")
{
dev.LogicHaveGoods = false;
}
else
{
dev.LogicHaveGoods = true;
}
SControlMonitor.SetDeviceState(dev,out error);
return Ok();
}
else
{
return StatusCode(422);
}
}
}
}