using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Linq;
namespace SYNC_SAP_MES
{
public class Sql_Biz_SAP
{
///
///
///
public static void LoadConfig()
{
var sql =
$" SELECT TOP 1 [AID],[AppServerHost],[SystemNumber],[User],[Password],[Client]" +
$",[Language],[PoolSize],[IdleTimeout],[Name],[SystemType],[Enable]" +
$",[IsDemo],[ReachSyncCount],[LineCode]" +
$" FROM [大柴_接口_SAP登录信息]" +
$" WHERE [Enable] = 'True'";
DataLinkMesWork.SQLCommon.ExecuteDataTable(sql, PP.ConnectionString, out DataTable dt, out string err);
if (dt.Rows.Count > 0)
{
var row = dt.Rows[0];
PP.AppServerHost = row["AppServerHost"].ToString();
PP.SystemNumber = row["SystemNumber"].ToString();
PP.User = row["User"].ToString();
PP.Password = row["Password"].ToString();
PP.Client = row["Client"].ToString();
PP.Language = row["Language"].ToString();
PP.PoolSize = row["PoolSize"].ToString();
PP.IdleTimeout = row["IdleTimeout"].ToString();
PP.Name = row["Name"].ToString();
PP.IsDemo = row["IsDemo"].ToString();
PP.ReachSyncCount = Convert.ToInt32(row["ReachSyncCount"]);
PP.LineCode = row["LineCode"].ToString();
}
}
///
///
///
///
///
///
public static bool Select_SyncParam_SAP(out string date, out string dateTime)
{
bool success = false;
date = "";
dateTime = "";
//SELECT top 1 [AID],[日期],[更新时间] FROM [大柴_接口_SAP生产计划_标记]
var sql = "SELECT top 1 [AID],[日期],[更新时间] FROM [大柴_接口_SAP生产计划_标记]";
success = DataLinkMesWork.SQLCommon.ExecuteDataTable(sql, PP.ConnectionString, out DataTable dt, out string err);
success = err.Length > 0 ? false : true;
if (dt.Rows.Count > 0)
{
date = DateTime.Parse(dt.Rows[0]["日期"].ToString()).ToString("yyyy-MM-dd");
dateTime = DateTime.Parse(dt.Rows[0]["更新时间"].ToString()).ToString("yyyy-MM-dd HH:mm:ss.fff");
}
else
{
var sql_Insert =
$" INSERT INTO [大柴_接口_SAP生产计划_标记]([日期],[修改时间])" +
$" VALUES(getdate(),getdate())";
DataLinkMesWork.SQLCommon.ExecuteSql(sql_Insert, PP.ConnectionString, out string err_Index);
Select_SyncParam_SAP(out date, out dateTime);
}
return success;
}
///
///
///
///
///
public static bool Update_SyncParam_SAP(string date)
{
//SELECT top 1 [AID],[日期],[更新时间] FROM [大柴_接口_SAP生产计划_标记]
var sql =
$" UPDATE [大柴_接口_SAP生产计划_标记]" +
$" SET [日期] = '{date}',[更新时间] = getdate()";
return DataLinkMesWork.SQLCommon.ExecuteSql(sql, PP.ConnectionString, out string err);
}
///
///
///
///
///
///
public static bool Select_SyncParam_FlowNo(out int startFlowNo,out string flowNoTime)
{
bool success = false;
startFlowNo = 0;
flowNoTime = "";
//SELECT [AID],[流水号],[更新时间] FROM [大柴_接口_SAP生产计划_流水号]
var sql = $"SELECT top 1 [AID],[流水号],[更新时间] FROM [大柴_接口_SAP生产计划_流水号] ORDER BY 更新时间 DESC";
success = DataLinkMesWork.SQLCommon.ExecuteDataTable(sql, PP.ConnectionString, out DataTable dt, out string err);
success = err.Length > 0 ? false : true;
if (dt.Rows.Count > 0)
{
startFlowNo = Convert.ToInt32(dt.Rows[0]["流水号"]);
flowNoTime = DateTime.Parse(dt.Rows[0]["更新时间"].ToString()).ToString("yyyy-MM-dd HH:mm:ss.fff");
}
return success;
}
///
/// 根据上线日期获取到 这天的流水号,若这天没有则用【历史最大】流水号
///
///
///
///
///
public static bool Select_SyncParam_FlowNo(string useDate,out int startFlowNo, out string flowNoTime)
{
bool success = false;
startFlowNo = 0;
flowNoTime = "";
//SELECT [AID],[流水号],[更新时间] FROM [大柴_接口_SAP生产计划_流水号]
var sql = $"SELECT top 1 [AID],[流水号],[更新时间] FROM [大柴_接口_SAP生产计划_流水号] WHERE 使用日期 = '{useDate}'";
//var sql = $"SELECT top 1 [AID],[流水号],[更新时间] FROM [大柴_接口_SAP生产计划_流水号] ORDER BY 使用时间 ASC";
success = DataLinkMesWork.SQLCommon.ExecuteDataTable(sql, PP.ConnectionString, out DataTable dt, out string err);
success = err.Length > 0 ? false : true;
if (dt.Rows.Count > 0)
{
startFlowNo = Convert.ToInt32(dt.Rows[0]["流水号"]);
flowNoTime = DateTime.Parse(dt.Rows[0]["更新时间"].ToString()).ToString("yyyy-MM-dd HH:mm:ss.fff");
}
else
{
// 获取前一天的流水号 用这个流水号往下排
DateTime date = DateTime.ParseExact(useDate, "yyyy-MM-dd", CultureInfo.InvariantCulture);
DateTime previousDay = date.AddDays(-1); // 获取前一天的日期
string formattedDate = previousDay.ToString("yyyy-MM-dd"); // 格式化为字符串形式
var sql2 = $"SELECT top 1 [AID],[流水号],[更新时间] FROM [大柴_接口_SAP生产计划_流水号] WHERE 使用日期 <= '{formattedDate}' ORDER BY [流水号] DESC";
success = DataLinkMesWork.SQLCommon.ExecuteDataTable(sql2, PP.ConnectionString, out DataTable dt2, out string err2);
success = err2.Length > 0 ? false : true;
if (dt2.Rows.Count > 0)
{
startFlowNo = Convert.ToInt32(dt2.Rows[0]["流水号"]);
flowNoTime = DateTime.Parse(dt2.Rows[0]["更新时间"].ToString()).ToString("yyyy-MM-dd HH:mm:ss.fff");
}
}
return success;
}
///
///
///
///
///
public static bool GetFlowNo_CurrMax(out string FlowNo)
{
var success = false;
FlowNo = "-1";
var sql =
$" SELECT MAX([发动机流水号]) FROM [大柴_接口_SAP生产计划_执行计划]";
success = SqlOperation.ExecuteSql(sql, out DataTable dt, out string error);
if (dt.Rows.Count > 0)
{
FlowNo = dt.Rows[0][0].ToString();
}
return success;
}
///
/// 获取今天明天两天的订单信息
///
///
///
///
public static bool Get_MesPlan(DateTime dateDay,out DataTable table_Plan)
{
TimeSpan oneDay = new TimeSpan(1, 0, 0, 0); // 创建一个表示一天的 TimeSpan 对象
//var sql = $"SELECT [AID],[订单号],[订单类型],[工厂],[机型号],[数量],[单位],[上线日期],[上线序号],[用户],[修改时间]" +
// $" FROM [大柴_接口_SAP生产计划]" +
// $" WHERE [上线日期] >= '{dateDay.ToString("yyyy-MM-dd")}'" + //OR [上线日期] = '{tomorrow.ToString("yyyy-MM-dd")}'
// $" ORDER BY [上线日期] ,[上线序号]";
var sql = $"SELECT a.[订单号],[订单类型],[工厂],[机型号],[数量],[单位],[上线日期],[上线序号],[用户],[修改时间],isnull(b.Exist_InMes,0) as Exist_InMes" +
$" FROM [大柴_接口_SAP生产计划] a left join " +
$" (select 订单号,count(*) as Exist_InMes from 大柴_接口_SAP生产计划_执行计划 where 生产日期>='{dateDay.ToString("yyyy-MM-dd")}' group by 订单号) b on a.订单号=b.订单号 " +
$" WHERE [上线日期] >= '{dateDay.ToString("yyyy-MM-dd")}'" + //OR [上线日期] = '{tomorrow.ToString("yyyy-MM-dd")}'
$" ORDER BY [上线日期] ,[上线序号]";
return DataLinkMesWork.SQLCommon.ExecuteDataTable(sql, PP.ConnectionString, out table_Plan, out string err);
}
public static bool Get_Mes_ExcutePlan(DateTime dateDay,string key_OrderNum,out DataTable table_Plan)
{
var sql = $@"
SELECT [订单类型],[订单号],[机型号],[订单数量],[生产日期],[上线序号],[上线总排序],[发动机流水号],[起始流水号],[终止流水号],[执行状态]
FROM[大柴_接口_SAP生产计划_执行计划] WHERE 生产日期 = '{dateDay.ToString("yyyy-MM-dd")}' AND 订单号 LIKE '%{key_OrderNum}%'";
return DataLinkMesWork.SQLCommon.ExecuteDataTable(sql, PP.ConnectionString, out table_Plan, out string err);
}
///
/// 只获取今天的订单信息
///
///
///
///
public static bool Get_MesTodayPlan(DateTime dateDay, out DataTable table_Plan)
{
//SELECT [AID],[订单号],[订单类型],[工厂],[机型号],[数量],[单位],[上线日期],[上线序号],[用户],[修改时间] FROM [大柴_接口_SAP生产计划]
var sql = $"SELECT [AID],[订单号],[订单类型],[工厂],[机型号],[数量],[单位],[上线日期],[上线序号],[用户],[修改时间],isnull([流水号拆分已上报],0) as 流水号拆分已上报" +
$" FROM [大柴_接口_SAP生产计划]" +
$" WHERE [上线日期] = '{dateDay.ToString("yyyy-MM-dd")}'" +
$" ORDER BY [上线序号]";
return DataLinkMesWork.SQLCommon.ExecuteDataTable(sql, PP.ConnectionString, out table_Plan, out string err);
}
///
/// 更新订单的流水号拆分上报状态:流水号拆分已上报=0,未上报,流水号拆分已上报=1 已上报
///
///
///
public static bool Update_FlowNoSplit_UpLoadState(string OrderNum)
{
//SELECT [AID],[订单号],[订单类型],[工厂],[机型号],[数量],[单位],[上线日期],[上线序号],[用户],[修改时间] FROM [大柴_接口_SAP生产计划]
var sql = $"Update [大柴_接口_SAP生产计划] set 流水号拆分已上报=1 WHERE [订单号] = '{OrderNum}'";
return SqlOperation.ExecuteSql(sql, out string error);
}
///
/// 获取拆分后数据 展示到网页
///
/// 数据日期
///
///
public static bool Get_MesSpiltPlan(DateTime dateDay, out DataTable table_Plan)
{
var sql = $"SELECT [AID],[订单类型],[生产日期],[班次],[上线序号],[上线总排序],[发动机流水号],[机型号],[托盘号],[订单号],[订单序号],[订单数量],[起始流水号],[终止流水号],[创建时间],[执行状态],[状态变更时间],[操作标记]" +
$" FROM [大柴_接口_SAP生产计划_执行计划]" +
$" WHERE [生产日期] = '{dateDay.ToString("yyyy-MM-dd")}'" +
$" ORDER BY 起始流水号";
return DataLinkMesWork.SQLCommon.ExecuteDataTable(sql, PP.ConnectionString, out table_Plan, out string err);
}
public static bool Get_MesPlan_ExecPlan(string orderNo, out DataTable table_ExecPlan)
{
var sql = $"SELECT [订单号],[订单类型],[机型号],[订单数量],[发动机流水号],[上线序号],[上线总排序],[执行状态],[生产日期]" +
$" FROM [大柴_接口_SAP生产计划_执行计划]" +
$" WHERE [订单号] = '{orderNo}'" +
$" ORDER BY [上线总排序]";
return DataLinkMesWork.SQLCommon.ExecuteDataTable(sql, PP.ConnectionString, out table_ExecPlan, out string err);
}
public static DateTime Get_BOMChanged_DateFlag(string LineCode)
{
var sql = $"SELECT [编辑时间标识] FROM [大柴_接口_SAP订单BOM_编辑时间标识] WHERE [LineCode]='{LineCode}'";
DataLinkMesWork.SQLCommon.ExecuteDataTable(sql, PP.ConnectionString, out DataTable dt, out string err);
if(dt.Rows.Count>0)
{
return DateTime.Parse(dt.Rows[0]["编辑时间标识"].ToString());
}
else
{
return DateTime.Now.AddDays(-10);
}
}
public static void Update_TimeFlag_BomChanged(DateTime NewTimeFlag,string LineCode)
{
var name = "Event_接口_SAP订单BOM_时间标识";
var sqlParameters = new SqlParameter[] {
new SqlParameter("@NewTimeFlag", NewTimeFlag),
new SqlParameter("@LineCode", LineCode)
};
SqlOperation.ExecuteStoredProcedure(name, sqlParameters, out DataSet ds, out string error);
}
public static bool Get_MesBOM_ByOrderNo(string orderNo, out DataTable table_BOM)
{
var sql = $"SELECT [订单号],[工序号],[物料号],[物料描述],[总数量],[指定厂家代码],[指定厂家简称],[指定厂家名称],[工艺合件]," +
$"[虚拟件],[试装标识],[单台数量],[创建时间] FROM [大柴_接口_SAP订单BOM] where 订单号 = {orderNo}";
return DataLinkMesWork.SQLCommon.ExecuteDataTable(sql, PP.ConnectionString, out table_BOM, out string err);
}
}
}