using ibk.IPD.Common;
using ibk.IPD.Entity;
using ibk.IPD.Entity.IPD_PS.QueryArgs;
using ibk.IPD.Entity.IPD_MR.EquipmentMgt.QueryArgs;
using log4net;
using SOA.Objects;
using SOA.Persistent;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Web.Http;
using ibk.IPD.Entity.IPD_PS;
using System.Diagnostics;
/********************************************************
* 简 介:
* 不替代钢板后端接口
* 版本号:V1.0
* 日 期:2022年07月8日
* 创建者: LiZhuo
* Copy Right: 北京科技大学设计研究院有限公司
********************************************************/
namespace ibk.IPD.Controller.IPD_MR.EquipmentMgt
{
[RoutePrefix("ipd/ipdMr")]
public class TbPlateSpeController : ApiController
{
private static readonly ILog logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
//设置一个加锁对象
private static readonly object LOCK = new object();
///
/// 参数校验
///
///
/// ///
/// 是否通过参数校验
public bool ParameterCalibration(TB_PLATE_SPE cncs, RequestEntity result)
{
#region 参数判断
if (CommonUtils.GetLength(cncs.PLATE_NO) > 100)
{
result.msg = "钢板号长度不可超过100!";
result.code = "0";
return false;
}
return true;
#endregion
}
///
/// 查询接口
///
///
///
[HttpPost, Route("GetTbPlateSpe")]
public RequestEntity GetTbPlateSpe(TB_PLATE_SPE query)
{
RequestEntity result = new RequestEntity(); //声明返回参数实体类
StringBuilder strSql = new StringBuilder(); //声明拼接Sql语句变量
string PROC_CD = string.Empty;
DataTable dtCheck = new DataTable();
DataTable dtPlate = new DataTable();
//查询
strSql.AppendLine("SELECT DISTINCT PLATE_NO, PLATE_FLG, PLATE_CON,TO_CHAR(to_date(INS_DATE || INS_TIME ,'yyyy-mm-dd hh24:mi:ss'),'mm-dd HH24:mi') as INS_DATE ,INS_TIME,INS_EMP , to_date(UPD_DATE || UPD_TIME ,'yyyy-mm-dd hh24:mi:ss') as UPD_DATE, UPD_TIME,UPD_EMP,PROC_CD,IS_DELETE,PLATE_CON,PK FROM TB_PLATE_SPE WHERE 1 = 1 ");
if (query != null)
{
if (!string.IsNullOrWhiteSpace(query.PLATE_NO))
strSql.AppendLine(" AND PLATE_NO LIKE '%" + query.PLATE_NO.Trim() + "%'");
if (!string.IsNullOrWhiteSpace(query.PROC_CD))
PROC_CD = query.PROC_CD;
//if (!string.IsNullOrWhiteSpace(query.IS_DELETE))
// strSql.AppendLine(" AND IS_DELETE = '是'");
//if (string.IsNullOrWhiteSpace(query.IS_DELETE))
// strSql.AppendLine(" AND IS_DELETE <> '是'");
}
try
{
//开启数据库连接查询数据
using (IDbContext db = ObjectContainer.GetObject("db"))
{
strSql.AppendLine("Order By PK DESC ");
dtCheck = db.Query(strSql.ToString());
dtCheck.Columns.Add("PROC_CD_NOW");
string plate_no = " select PROC_CD || DECODE(PRICE_GRD, '2', '现货', '') PROC_CD, PLATE_NO from NISCO.GP_PLATE where PLATE_NO in ('";
//string ord_no = " select ORD_NO,ORD_ITEM,ORD_KND from NISCO.BP_ORDER_ITEM where 1=1 ";
if (dtCheck.Rows.Count > 0)
{
int n = 0;
foreach (DataRow row in dtCheck.Rows)
{
if (n == 0)
{
plate_no += row["PLATE_NO"].ToString().Trim();
}
else
{
plate_no += "','" + row["PLATE_NO"].ToString().Trim();
}
//多条1000会报错 截取城 多列sql 查询
if (n > 900)
{
n = n - 900;
plate_no += "') or PLATE_NO in ('" + row["PLATE_NO"].ToString();
}
//ord_no += " or ORD_NO='" + row["BOI_ORD_NO"].ToString() + "' and ORD_ITEM='" + row["BOI_ORD_ITEM"].ToString() + "'";
n++;
}
plate_no += "')";
using (IDbContext db_sur = ObjectContainer.GetObject("db_sur"))
{
dtPlate = db_sur.Query(plate_no.ToString());
//dtOrd = db_sur.Query(ord_no.ToString());
}
if (dtPlate.Rows.Count > 0)
{
foreach (DataRow row in dtCheck.Rows)
{
DataRow[] rw = dtPlate.Select(" PLATE_NO='" + row["PLATE_NO"].ToString() + "'");
if (rw.Length > 0)
{
string PROC_CD_NOW = rw[0]["PROC_CD"].ToString();
row["PROC_CD_NOW"] = PROC_CD_NOW;
}
}
}
}
DataTable dtcopy = dtCheck.Clone();
if(!string.IsNullOrEmpty(PROC_CD))
{
dtcopy = dtCheck.Select(" PROC_CD_NOW like '%" + PROC_CD + "%'").CopyToDataTable();
}
else
{
dtcopy = dtCheck;
}
result.data = dtcopy;
if (dtcopy.Rows.Count > 0)
{
result.msg = "操作成功!";
result.code = "1";
}
else
{
result.data = new DataTable();
result.msg = "未找到查询所需数据!";
result.code = "1";
}
}
}
catch (Exception ex)
{
result.msg = "数据库错误!";
result.code = "0";
logger.Error("GetTbUstFl 报错", ex);
}
return result;
}
///
/// 添加接口
///
///
///
[HttpPost, Route("AddTbPlateSpe")]
public RequestEntity AddTbPlateSpe(IList insertModel)
{
RequestEntity result = new RequestEntity();
DateTime dtNow = DateTime.Now;
string strSql = string.Empty; //声明拼接Sql语句变量
DataTable dtCheck = new DataTable();
try
{
bool b = true;
using (IDbContext db = ObjectContainer.GetObject("db"))
{
strSql = "SELECT PLATE_NO, PROC_CD,PRICE_GRD FROM NISCO.GP_PLATE where PLATE_NO in ('";
db.BeginTransaction();
List ilist = new List();
int n = 0;
foreach (TB_PLATE_SPE model in insertModel)
{
#region 参数判断
if (string.IsNullOrEmpty(model.PLATE_NO))
{
continue;
}
if (!ParameterCalibration(model, result))
{
db.Rollback();
return result;
}
#endregion
if (n == 0)
{
strSql += model.PLATE_NO;
}
else
{
strSql += "','" + model.PLATE_NO;
}
n++;
model.PK = "";
model.PLATE_NO = model.PLATE_NO.Trim();
if (string.IsNullOrEmpty(model.IS_DELETE))
{
model.IS_DELETE = "";
}
else
{
model.IS_DELETE = model.IS_DELETE.Trim();
}
model.INS_DATE = dtNow.ToString("yyyyMMdd");
model.INS_TIME = dtNow.ToString("HHmmss");
model.UPD_DATE = dtNow.ToString("yyyyMMdd");
model.UPD_TIME = dtNow.ToString("HHmmss");
//if (string.IsNullOrEmpty(model.IS_DELETE))
//{
// model.IS_DELETE = model.IS_DELETE.Trim();
//}
ilist.Add(model);
}
strSql += "')";
using (IDbContext db_sur = ObjectContainer.GetObject("db_sur"))
{
dtCheck = db_sur.Query(strSql);
//dtOrd = db_sur.Query(ord_no.ToString());
}
if (ilist.Count > 0)
{
foreach (var model in ilist)
{
DataRow[] rw = dtCheck.Select(" PLATE_NO='" + model.PLATE_NO + "'");
if (rw.Length > 0)
model.PROC_CD = rw[0]["PROC_CD"].ToString();
if (db.Insert(model) == 0)
{
b = false;
break;
}
}
}
else
{
b = false;
}
//if (db.Insert(model) == 0)
//{
// b = false;
// break;
//}
if (b)
{
result.msg = "操作成功!";
result.code = "1";
//数据操作成功则保存数据
db.Commit();
}
else
{
result.msg = "操作失败!";
result.code = "0";
//操作失败回滚数据到初始状态
db.Rollback();
}
}
}
catch (Exception ex)
{
result.msg = "数据库错误!";
result.code = "0";
logger.Error("AddTbPlateSpe 报错 : ", ex);
if (ex.ToString().Contains("00001"))
{
result.msg = "重复插入!";
}
}
return result;
}
///
/// 添加接口
///
///
///
[HttpPost, Route("AddTbBatchTest")]
public RequestEntity AddTbBatchTest(IList insertModel)
{
RequestEntity result = new RequestEntity();
DateTime dtNow = DateTime.Now;
DataTable dtCheck = new DataTable();
try
{
bool b = true;
using (IDbContext db = ObjectContainer.GetObject("db"))
{
db.BeginTransaction();
List ilist = new List();
int n = 0;
string TIMESTAMP = GetTimeStamp();
string insdate = dtNow.ToString("yyyyMMdd");
string instime = dtNow.ToString("HHmmss");
foreach (TB_BATCH_TEST model in insertModel)
{
#region 参数判断
#endregion
model.TIMESTAMP = TIMESTAMP;
model.PLATE_NO = model.PLATE_NO.Trim();
model.ORD_NO = model.ORD_NO.Trim();
model.ORD_ITEM = model.ORD_ITEM.Trim();
model.INS_DATE = insdate;
model.INS_TIME = instime;
model.UPD_DATE = insdate;
model.UPD_TIME = instime;
model.STATUS = "N";
//if (string.IsNullOrEmpty(model.IS_DELETE))
//{
// model.IS_DELETE = model.IS_DELETE.Trim();
//}
ilist.Add(model);
}
if (ilist.Count > 0)
{
foreach (var model in ilist)
{
if (db.Insert(model) == 0)
{
b = false;
break;
}
}
}
else
{
b = false;
}
if (b)
{
result.msg = "操作成功!";
result.code = "1";
//数据操作成功则保存数据
db.Commit();
}
else
{
result.msg = "操作失败!";
result.code = "0";
//操作失败回滚数据到初始状态
db.Rollback();
}
}
}
catch (Exception ex)
{
result.msg = "数据库错误!";
result.code = "0";
}
return result;
}
///
/// 添加接口
///
///
///
[HttpPost, Route("TbBatchTestVerification")]
public RequestEntity TbBatchTestVerification(string[] str)
{
lock (LOCK)
{
RequestEntity result = new RequestEntity(); //声明返回参数实体类
DataTable dtCheck = new DataTable();
//开启数据库连接查询数据
try
{
string args = string.Empty;
for (int i = 0; i < str.Length; i++)
{
if (i == 0)
{
args += str[i];
}
else
{
args += "," + str[i];
}
}
//string args = string.Empty;
//if(ArgsSupersede.Count>)
//foreach(var a in ArgsSupersede)
//string args = ArgsSupersede;
Process KHMsg = new Process();
KHMsg.StartInfo.FileName = @"D:\Program\BatchTest\Debug\BatchTextHandle.exe";
//KHMsg.StartInfo.FileName = @"D:\南钢项目\新改代码\批量测试\ipd-file\SinglePlateHandle\SinglePlateHandle\bin\Debug\BatchTextHandle.exe";
KHMsg.StartInfo.Arguments = args;
//KHMsg.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;//隐藏
KHMsg.Start();
while (!KHMsg.HasExited) { } //如果exe还没关闭,则等待
if (KHMsg.ExitCode == 1)
{
result.msg = "操作成功!";
result.code = "1";
}
else
{
result.msg = "操作失败!";
result.code = "0";
}
}
catch (Exception ex)
{
result.msg = "数据库错误!";
result.code = "0";
logger.Error("AddSingleSup 报错", ex);
}
return result;
}
}
///
/// 添加接口
///
///
///
[HttpPost, Route("AddTbPlateSpeOne")]
public RequestEntity AddTbPlateSpeOne(TB_PLATE_SPE model)
{
RequestEntity result = new RequestEntity();
DateTime dtNow = DateTime.Now;
DataTable dtCheck = new DataTable();
string strSql = string.Empty; //声明拼接Sql语句变量
try
{
using (IDbContext db = ObjectContainer.GetObject("db"))
{
db.BeginTransaction();
strSql = "SELECT PLATE_NO, PROC_CD FROM NISCO.GP_PLATE where PLATE_NO = '" + model.PLATE_NO + "'";
#region 参数判断
if (string.IsNullOrEmpty(model.PLATE_NO))
{
db.Rollback();
return result;
}
if (!ParameterCalibration(model, result))
{
db.Rollback();
return result;
}
#endregion
model.PK = "";
model.INS_DATE = dtNow.ToString("yyyyMMdd");
model.INS_TIME = dtNow.ToString("HHmmss");
model.UPD_DATE = dtNow.ToString("yyyyMMdd");
model.UPD_TIME = dtNow.ToString("HHmmss");
if (string.IsNullOrEmpty(model.IS_DELETE))
{
model.IS_DELETE = "";
}
else
{
model.IS_DELETE = model.IS_DELETE.Trim();
}
using (IDbContext db_sur = ObjectContainer.GetObject("db_sur"))
{
dtCheck = db_sur.Query(strSql);
//dtOrd = db_sur.Query(ord_no.ToString());
}
if (dtCheck.Rows.Count > 0)
{
model.PROC_CD = dtCheck.Rows[0]["PROC_CD"].ToString();
}
if (db.Insert(model) > 0)
{
result.msg = "操作成功!";
result.code = "1";
//数据操作成功则保存数据
db.Commit();
}
else
{
result.msg = "操作失败!";
result.code = "0";
//操作失败回滚数据到初始状态
db.Rollback();
}
}
}
catch (Exception ex)
{
result.msg = "数据库错误!";
result.code = "0";
logger.Error("AddTbPlateSpe 报错 : ", ex);
if (ex.ToString().Contains("00001"))
{
result.msg = "重复插入!";
}
}
return result;
}
///
/// 删除接口
///
///
///
[HttpPost, Route("DelTbPlateSpe")]
public RequestEntity DelTbPlateSpe(IList delModel)
{
RequestEntity result = new RequestEntity();
StringBuilder strSql = new StringBuilder();
try
{
using (IDbContext db = ObjectContainer.GetObject("db"))
{
foreach (var model in delModel)
{
try
{
//PLATE_NO
strSql.AppendLine("DELETE FROM TB_PLATE_SPE WHERE 1=1 ");
strSql.AppendLine(string.Format("AND PLATE_NO = '{0}' ", model.PLATE_NO));
db.Execute(strSql.ToString()); // 执行删除数据操作
//执行完操作之后清空strSql 准备下次 appendLine
strSql.Length = 0;
}
catch
{
logger.Error("该条记录删除失败: " + delModel.ToString());
}
}
result.msg = "操作成功";
result.code = "1";
}
}
catch (Exception ex)
{
result.msg = "数据库错误!";
result.code = "0";
logger.Error("DelTbPlateSpe 报错", ex);
}
return result;
}
///
/// 修改接口
///
///
///
[HttpPost, Route("UpdateTbPlateSpe")]
public RequestEntity UpdateTbPlateSpe(IList model)
{
RequestEntity result = new RequestEntity();
StringBuilder strSql = new StringBuilder();
try
{
using (IDbContext db = ObjectContainer.GetObject("db"))
{
try
{
//ORD_NO, ORD_ITEM
strSql.AppendLine("Update TB_PLATE_SPE ");
strSql.AppendLine(string.Format("set IS_DELETE = '{0}' where PLATE_NO = '{1}' ", model[1].IS_DELETE, model[1].PLATE_NO));
db.Execute(strSql.ToString()); // 执行删除数据操作
//执行完操作之后清空strSql 准备下次 appendLine
strSql.Length = 0;
}
catch
{
logger.Error("该条记录修改失败: " + model.ToString());
}
result.msg = "操作成功";
result.code = "1";
}
}
catch (Exception ex)
{
result.msg = "数据库错误!";
result.code = "0";
logger.Error("UpdateTbPlateSpe 报错", ex);
}
return result;
}
///
/// 获取时间戳
///
///
public static string GetTimeStamp()
{
TimeSpan ts = DateTime.UtcNow - new DateTime(1970, 1, 1, 8, 0, 0, 0);
return Convert.ToInt64(ts.TotalMilliseconds).ToString();
}
}
}