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.
2756 lines
111 KiB
2756 lines
111 KiB
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using Stone.Common;
|
|
using System.IO;
|
|
using System.Data;
|
|
using Stone.Entity;
|
|
using Stone.WinForm.F_Common;
|
|
using System.Threading;
|
|
using Gm_WMS.DataAccess.DataService;
|
|
using System.Runtime.InteropServices;
|
|
|
|
namespace Stone.WinService
|
|
{
|
|
public class F_EDI_BJ
|
|
{
|
|
#region 构造函数
|
|
|
|
public static bool IsRun = false;
|
|
|
|
public static string Path_Receive_YZ = string.Empty;
|
|
public static string Path_Error_YZ = string.Empty;
|
|
public static string Path_Bak_YZ = string.Empty;
|
|
|
|
public static string Path_Receive_SY = string.Empty;
|
|
public static string Path_Error_SY = string.Empty;
|
|
public static string Path_Bak_SY = string.Empty;
|
|
|
|
static F_EDI_BJ()
|
|
{
|
|
Path_Receive_YZ = MyAppconfig.ReadValue("亦庄接收路径");
|
|
Path_Error_YZ = MyAppconfig.ReadValue("亦庄错误路径");
|
|
Path_Bak_YZ = MyAppconfig.ReadValue("亦庄备份路径");
|
|
|
|
Path_Receive_SY = MyAppconfig.ReadValue("顺义接收路径");
|
|
Path_Error_SY = MyAppconfig.ReadValue("顺义错误路径");
|
|
Path_Bak_SY = MyAppconfig.ReadValue("顺义备份路径");
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region 数据解析
|
|
|
|
public static void Run()
|
|
{
|
|
int UpdateTime = Convert.ToInt32(MyAppconfig.ReadValue("BJEDI解析刷新时间")) * 1000;
|
|
while (IsRun)
|
|
{
|
|
//亦庄数据处理 也叫大兴
|
|
try
|
|
{
|
|
ProcessData_YZ();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MyLogger.Write(ex.Message);
|
|
}
|
|
|
|
//顺义数据处理
|
|
try
|
|
{
|
|
ProcessData_SY();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MyLogger.Write(ex.Message);
|
|
}
|
|
|
|
System.Threading.Thread.Sleep(UpdateTime);
|
|
}
|
|
}
|
|
|
|
public static void ProcessData_YZ()
|
|
{
|
|
DirectoryInfo dir = new DirectoryInfo(Path_Receive_YZ);
|
|
FileInfo[] files = dir.GetFiles("*.*", SearchOption.TopDirectoryOnly);
|
|
|
|
Array.Sort(files, new MyFileSort(FileOrder.Length)); //按修改日期升序排列
|
|
|
|
Entity_t_JIS_Log t_JIS_Log = new Entity_t_JIS_Log();
|
|
foreach (FileInfo file in files)
|
|
{
|
|
DataRow drJIS_Log = t_JIS_Log.Table.NewRow();
|
|
|
|
StreamReader sr = null;
|
|
string filetype = "";
|
|
try
|
|
{
|
|
drJIS_Log["FileName"] = file.Name;
|
|
drJIS_Log["StartTime"] = DateTime.Now;
|
|
drJIS_Log["FileType"] = filetype;
|
|
drJIS_Log["ModificationTime"] = file.LastWriteTime;
|
|
drJIS_Log = t_JIS_Log.Add(drJIS_Log);
|
|
|
|
if (IsUseFile(file.FullName))
|
|
{
|
|
drJIS_Log["EndTime"] = MyDateTime.GetServerDateTime();
|
|
drJIS_Log["ProcessState"] = "Failed";
|
|
drJIS_Log["Memo"] = file.FullName + " 文件被占用,30秒后再试...";
|
|
t_JIS_Log.Edit(drJIS_Log);
|
|
Thread.Sleep(30 * 1000);
|
|
}
|
|
|
|
sr = file.OpenText();
|
|
string text = sr.ReadToEnd();
|
|
sr.Close();
|
|
|
|
string[] sp_text = text.Replace("\r\n", "").Replace("\r", "").Replace("\n", "").Split('\'');
|
|
|
|
//判断文件格式是否正式
|
|
filetype = IsFileOK(sp_text, file.Name);
|
|
//if (filetype != "307-JSA" && filetype != "241-DELFOR") continue; //跳过JSP的文件
|
|
|
|
//判断是否是亦庄文件 如果是顺义文件,转移到顺义的 Receive目录下 亦庄(大兴)= 104;顺义 = 1046
|
|
var facCode = sp_text[1].Split('+')[2].Split(':')[0];
|
|
if (facCode == "1046")
|
|
{
|
|
//顺义的文件,转移到顺义文件夹下
|
|
MoveFile(file, Path_Receive_SY, "");
|
|
continue;
|
|
}
|
|
|
|
string NewName = "";
|
|
string Path_Bak_New = Path_Bak_YZ + "\\" + MyDateTime.Format(DateTime.Now, MyDateTimeType.Date);
|
|
if (!Directory.Exists(Path_Bak_New))
|
|
{
|
|
Directory.CreateDirectory(Path_Bak_New);
|
|
|
|
}
|
|
|
|
switch (filetype)
|
|
{
|
|
case "307-JSA":
|
|
if (file.Name.Substring(0, 4) != "YZA_")
|
|
{
|
|
NewName = "YZA_";
|
|
}
|
|
ProcessDataAJIS(sp_text, file.Name); //解析Actual
|
|
break;
|
|
case "241-DELFOR":
|
|
if (file.Name.Substring(0, 4) != "YZD_")
|
|
{
|
|
NewName = "YZD_";
|
|
}
|
|
ProcessDELFOR(sp_text, file.Name); //解析DELFOR
|
|
break;
|
|
case "307-JSP":
|
|
if (file.Name.Substring(0, 4) != "YZP_")
|
|
{
|
|
NewName = "YZP_";
|
|
}
|
|
ProcessDataPJIS(sp_text, Path_Bak_New + "\\" + NewName + file.Name); //解析Planned
|
|
break;
|
|
default:
|
|
throw new Exception("文件格式不正确");
|
|
|
|
}
|
|
|
|
MyLogger.Write(file.Name + " 处理成功");
|
|
|
|
|
|
|
|
|
|
|
|
MoveFile(file, Path_Bak_New, NewName);
|
|
|
|
|
|
drJIS_Log["EndTime"] = DateTime.Now;
|
|
drJIS_Log["ProcessState"] = "Success";
|
|
|
|
t_JIS_Log.Edit(drJIS_Log);
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
if (sr != null) sr.Close();
|
|
MyLogger.Write(file.Name + " 处理失败,原因为:" + ex.Message);
|
|
|
|
|
|
string Path_Error_New = Path_Error_YZ + "\\" + MyDateTime.Format(DateTime.Now, MyDateTimeType.Date);
|
|
if (!Directory.Exists(Path_Error_New))
|
|
{
|
|
Directory.CreateDirectory(Path_Error_New);
|
|
|
|
}
|
|
|
|
//MoveFile(file, Path_Error_New);
|
|
|
|
drJIS_Log["FileType"] = filetype;
|
|
drJIS_Log["EndTime"] = DateTime.Now;
|
|
drJIS_Log["ProcessState"] = "Failed";
|
|
drJIS_Log["Memo"] = MyStrings.GetString(ex.Message);
|
|
t_JIS_Log.Edit(drJIS_Log);
|
|
|
|
|
|
F_Mail.SendMail(file.Name, "安通林EDI邮件报警(亦庄)", ex.Message);
|
|
|
|
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
public static void ProcessData_SY()
|
|
{
|
|
DirectoryInfo dir = new DirectoryInfo(Path_Receive_SY);
|
|
FileInfo[] files = dir.GetFiles("*.*", SearchOption.TopDirectoryOnly);
|
|
|
|
Array.Sort(files, new MyFileSort(FileOrder.Length)); //按修改日期升序排列
|
|
Entity_t_JIS_Log t_JIS_Log = new Entity_t_JIS_Log();
|
|
foreach (FileInfo file in files)
|
|
{
|
|
DataRow drJIS_Log = t_JIS_Log.Table.NewRow();
|
|
|
|
StreamReader sr = null;
|
|
string filetype = "";
|
|
try
|
|
{
|
|
drJIS_Log["FileName"] = file.Name;
|
|
drJIS_Log["StartTime"] = DateTime.Now;
|
|
drJIS_Log["FileType"] = filetype;
|
|
drJIS_Log["ModificationTime"] = file.LastWriteTime;
|
|
drJIS_Log = t_JIS_Log.Add(drJIS_Log);
|
|
|
|
if (IsUseFile(file.FullName))
|
|
{
|
|
drJIS_Log["EndTime"] = MyDateTime.GetServerDateTime();
|
|
drJIS_Log["ProcessState"] = "Failed";
|
|
drJIS_Log["Memo"] = file.FullName + " 文件被占用,30秒后再试...";
|
|
t_JIS_Log.Edit(drJIS_Log);
|
|
Thread.Sleep(30 * 1000);
|
|
}
|
|
|
|
sr = file.OpenText();
|
|
string text = sr.ReadToEnd();
|
|
sr.Close();
|
|
|
|
string[] sp_text = text.Replace("\r\n", "").Replace("\r", "").Replace("\n", "").Split('\'');
|
|
|
|
//判断文件格式是否正式
|
|
filetype = IsFileOK(sp_text, file.Name);
|
|
//if (filetype != "307-JSA" && filetype != "241-DELFOR") continue; //跳过JSP的文件
|
|
|
|
|
|
|
|
|
|
|
|
string NewName = "";
|
|
string Path_Bak_New = Path_Bak_SY + "\\" + MyDateTime.Format(DateTime.Now, MyDateTimeType.Date);
|
|
if (!Directory.Exists(Path_Bak_New))
|
|
{
|
|
Directory.CreateDirectory(Path_Bak_New);
|
|
|
|
}
|
|
|
|
switch (filetype)
|
|
{
|
|
case "307-JSA":
|
|
if (file.Name.Substring(0, 4) != "SYA_")
|
|
{
|
|
NewName = "SYA_";
|
|
}
|
|
ProcessDataAJIS(sp_text, file.Name); //解析Actual
|
|
break;
|
|
case "241-DELFOR":
|
|
if (file.Name.Substring(0, 4) != "SYD_")
|
|
{
|
|
NewName = "SYD_";
|
|
}
|
|
ProcessDELFOR(sp_text, file.Name); //解析DELFOR
|
|
break;
|
|
case "307-JSP":
|
|
if (file.Name.Substring(0, 4) != "SYP_")
|
|
{
|
|
NewName = "SYP_";
|
|
}
|
|
ProcessDataPJIS(sp_text, Path_Bak_New + "\\" + NewName + file.Name); //解析Planned
|
|
break;
|
|
|
|
}
|
|
|
|
MyLogger.Write(file.Name + " 处理成功");
|
|
|
|
|
|
|
|
|
|
|
|
MoveFile(file, Path_Bak_New, NewName);
|
|
|
|
|
|
drJIS_Log["EndTime"] = DateTime.Now;
|
|
drJIS_Log["ProcessState"] = "Success";
|
|
|
|
t_JIS_Log.Edit(drJIS_Log);
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
if (sr != null) sr.Close();
|
|
MyLogger.Write(file.Name + " 处理失败,原因为:" + ex.Message);
|
|
|
|
|
|
string Path_Error_New = Path_Error_SY + "\\" + MyDateTime.Format(DateTime.Now, MyDateTimeType.Date);
|
|
if (!Directory.Exists(Path_Error_New))
|
|
{
|
|
Directory.CreateDirectory(Path_Error_New);
|
|
|
|
}
|
|
|
|
//MoveFile(file, Path_Error_New);
|
|
|
|
drJIS_Log["FileType"] = filetype;
|
|
drJIS_Log["EndTime"] = DateTime.Now;
|
|
drJIS_Log["ProcessState"] = "Failed";
|
|
drJIS_Log["Memo"] = MyStrings.GetString(ex.Message);
|
|
t_JIS_Log.Edit(drJIS_Log);
|
|
|
|
|
|
F_Mail.SendMail(file.Name, "安通林EDI邮件报警(顺义)", ex.Message);
|
|
|
|
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
#region old
|
|
/*
|
|
public static void ProcessDataJSP()
|
|
{
|
|
DirectoryInfo dir = new DirectoryInfo(Path_Receive);
|
|
FileInfo[] files = dir.GetFiles("*.*", SearchOption.TopDirectoryOnly);
|
|
|
|
Array.Sort(files, new MyFileSort(FileOrder.LastWriteTime)); //按修改日期升序排列
|
|
|
|
Entity_t_JIS_Log t_JIS_Log = new Entity_t_JIS_Log();
|
|
|
|
int n = 0; //JSP一次处理
|
|
foreach (FileInfo file in files)
|
|
{
|
|
|
|
DataRow drJIS_Log = t_JIS_Log.Table.NewRow();
|
|
|
|
StreamReader sr = null;
|
|
string filetype = "";
|
|
try
|
|
{
|
|
sr = file.OpenText();
|
|
string text = sr.ReadToEnd();
|
|
sr.Close();
|
|
|
|
string[] sp_text = text.Replace("\r\n", "").Replace("\r", "").Replace("\n", "").Split('\'');
|
|
|
|
//判断文件格式是否正式
|
|
filetype = IsFileOK(sp_text, file.Name);
|
|
|
|
if (filetype != "307-JSP") continue; //跳过不是JSP的文件
|
|
|
|
if (n >= 1) break; //一次处理一个JSP文件,这样可防止大堆来JSP文件的时候一直在处理JSP文件
|
|
n++;
|
|
|
|
drJIS_Log["FileName"] = file.Name;
|
|
drJIS_Log["StartTime"] = DateTime.Now;
|
|
drJIS_Log = t_JIS_Log.Add(drJIS_Log);
|
|
|
|
|
|
switch (filetype)
|
|
{
|
|
|
|
case "307-JSP":
|
|
ProcessDataPJIS(sp_text, file.Name); //解析Planned
|
|
break;
|
|
}
|
|
|
|
MyLogger.Write(file.Name + " 处理成功");
|
|
|
|
string Path_Bak_New = Path_Bak + "\\" + MyDateTime.Format(DateTime.Now, MyDateTimeType.Date);
|
|
if (!Directory.Exists(Path_Bak_New))
|
|
{
|
|
Directory.CreateDirectory(Path_Bak_New);
|
|
|
|
}
|
|
|
|
MoveFile(file, Path_Bak_New);
|
|
|
|
drJIS_Log["FileType"] = filetype;
|
|
drJIS_Log["EndTime"] = DateTime.Now;
|
|
drJIS_Log["ProcessState"] = "Success";
|
|
|
|
t_JIS_Log.Edit(drJIS_Log);
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
if (sr != null) sr.Close();
|
|
MyLogger.Write(file.Name + " 处理失败,原因为:" + ex.Message);
|
|
|
|
MoveFile(file, Path_Error);
|
|
|
|
drJIS_Log["FileType"] = filetype;
|
|
drJIS_Log["EndTime"] = DateTime.Now;
|
|
drJIS_Log["ProcessState"] = "Failed";
|
|
drJIS_Log["Memo"] = MyStrings.GetString(ex.Message);
|
|
t_JIS_Log.Edit(drJIS_Log);
|
|
|
|
|
|
}
|
|
}
|
|
|
|
}
|
|
*/
|
|
#endregion
|
|
|
|
//处理PJIS数据
|
|
private static string sss = "";
|
|
public static void ProcessDataPJIS(string[] sp_text, string filename)
|
|
{
|
|
LocalDBService db = new LocalDBService();
|
|
|
|
Entity_t_OptionBOM t_OptionBOM = new Entity_t_OptionBOM();
|
|
Entity_t_ProdnoRule1 t_ProdnoRule1 = new Entity_t_ProdnoRule1();
|
|
Entity_t_ProdnoRule2 t_ProdnoRule2 = new Entity_t_ProdnoRule2();
|
|
Entity_t_ModunoABase t_ModunoABase = new Entity_t_ModunoABase();
|
|
Entity_t_ProdnoBase t_ProdnoBase = new Entity_t_ProdnoBase();
|
|
Entity_t_TTZ_Rule t_TTZ_Rule = new Entity_t_TTZ_Rule();
|
|
//增加 总成特殊零件 add by JinH 2023-03-28
|
|
var strsql = "select * from t_FGPartStuffix";
|
|
var dtPartStuffix = new DataTable();
|
|
try
|
|
{
|
|
dtPartStuffix = db.Exec_DataSet(strsql).Tables[0];
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
throw new Exception("系统中未定义-总成特殊零件");
|
|
}
|
|
|
|
//获取基础数据_颜色 用于243、247的具体车型指定
|
|
strsql = "select * from t_Color";
|
|
var dtAGColorCarType = new DataTable();
|
|
try
|
|
{
|
|
dtAGColorCarType = db.Exec_DataSet(strsql).Tables[0];
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
throw new Exception("系统中未定义-颜色");
|
|
}
|
|
|
|
//获取基础数据_特殊零件 用于243、247的具体车型指定
|
|
strsql = "select * from t_ColorPart";
|
|
var dtAGColorPart = new DataTable();
|
|
try
|
|
{
|
|
dtAGColorPart = db.Exec_DataSet(strsql).Tables[0];
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
throw new Exception("系统中未定义-特殊零件");
|
|
}
|
|
|
|
DataTable dtOptionBOM = t_OptionBOM.GetData("", "1=1", "[Code] asc").Tables[0];
|
|
DataTable dtProdnoRule1 = t_ProdnoRule1.GetData("", "1=1", "[Code] asc").Tables[0];
|
|
DataTable dtProdnoRule2 = t_ProdnoRule2.GetData("", "1=1", "[Sort] asc").Tables[0];
|
|
DataTable dtModunoABase = t_ModunoABase.GetData("", "1=1", "[moduno] asc").Tables[0];
|
|
DataTable dtProdnoBase = t_ProdnoBase.GetData("", "1=1", "[prodno] asc").Tables[0];
|
|
DataTable dtTTZRule = t_TTZ_Rule.GetData("", "1=1", "[Code] asc").Tables[0];
|
|
|
|
#region 解析文本
|
|
|
|
var lists = new List<string>();
|
|
var lst = new List<string>();
|
|
var Lines = new List<PlannedLine>(); //门板PJIS
|
|
var LinesCarpet = new List<PlannedLine>(); //地毯PJIS
|
|
|
|
|
|
string MessageDateTime = "";
|
|
string UNH = "";
|
|
string ProductionNumber = "";
|
|
string SequenceNumber = "";
|
|
string AssemblyLine = "";
|
|
string itemNumber = "";
|
|
string quantity = "0";
|
|
string Location = "";
|
|
string DeliveryDateTime = "";
|
|
string Baumuster = "";
|
|
string DemandDate = "";
|
|
string Address = "";
|
|
string AgColor = "";
|
|
|
|
List<PlannedLineCode> lst_plannedLineCode = new List<PlannedLineCode>();
|
|
List<PlanedItem> lst_PlanedItems = new List<PlanedItem>();
|
|
List<PlanedItem> lst_PlanedItemsSegment = new List<PlanedItem>();
|
|
List<PlanedProductionNo> lst_PlanedProductionNo = new List<PlanedProductionNo>();
|
|
List<ModunoABase> lst_ModunoABase = new List<ModunoABase>();
|
|
DataRow[] drs_ModunoABase = null;
|
|
List<string> lstKey = MyAppconfig.ReadValue("地毯A零件").Split(',').ToList<string>();
|
|
List<string> lstProductionNumber = new List<string>();
|
|
|
|
//bool IsReadCode = false;
|
|
//int IsReadLine = 0;
|
|
foreach (string line_text in sp_text)
|
|
{
|
|
if (line_text.Trim() == "") continue;
|
|
string[] sp_line = line_text.Split('+');
|
|
|
|
#region 解析字段
|
|
if (sp_line[0] == "UNB")
|
|
{
|
|
MessageDateTime = sp_line[4].Trim();
|
|
}
|
|
|
|
if(sp_line[0] == "UNH")
|
|
{
|
|
UNH = sp_line[1].Trim();
|
|
}
|
|
|
|
if(sp_line[0] == "DTM")
|
|
{
|
|
DemandDate = sp_line[1].Split(':')[1].Trim();
|
|
}
|
|
|
|
if (sp_line[0] == "NAD")
|
|
{
|
|
if (sp_line[1] == "BY") Address = sp_line[2].Split(':')[0];
|
|
}
|
|
|
|
if (sp_line[0] == "GIR")
|
|
{
|
|
|
|
if (sp_line[1] == "1")
|
|
{
|
|
if (sp_line[2].Split(':')[1] == "AN")
|
|
{
|
|
ProductionNumber = sp_line[2].Split(':')[0]; //生产号=当前日期+生产号(防止生产号重复)
|
|
|
|
if(ProductionNumber == "3746552")
|
|
{
|
|
string s = "";
|
|
}
|
|
|
|
lst.Add(ProductionNumber);
|
|
}
|
|
}
|
|
|
|
if (sp_line[1] == "4")
|
|
{
|
|
if(Address == "104")
|
|
{
|
|
if (sp_line[2].Split(':')[1] == "AB")
|
|
{
|
|
SequenceNumber = sp_line[2].Split(':')[0];
|
|
}
|
|
}
|
|
|
|
if (Address == "1046")
|
|
{
|
|
if (sp_line[2].Split(':')[1] == "XO")
|
|
{
|
|
SequenceNumber = sp_line[2].Split(':')[0];
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
if (sp_line[1] == "4")
|
|
{
|
|
if (sp_line[2].Split(':')[1] == "AC")
|
|
{
|
|
AssemblyLine = sp_line[2].Split(':')[0].Trim();
|
|
Baumuster = AssemblyLine;
|
|
if (AssemblyLine.Length > 3) AssemblyLine = AssemblyLine.Substring(0, 3);
|
|
//Modify By Jinh 2023.04.12 243 247的具体车型通过 基础数据_颜色 和基础数据_特殊零件来指定
|
|
if (AssemblyLine == "177") AssemblyLine = "Z177";
|
|
// if (AssemblyLine == "247") AssemblyLine = "X247";
|
|
if (AssemblyLine == "247") AssemblyLine = "247";
|
|
//if (AssemblyLine == "243") AssemblyLine = "X243";
|
|
if (AssemblyLine == "243") AssemblyLine = "243";
|
|
|
|
}
|
|
|
|
foreach (string ss in sp_line)
|
|
{
|
|
string[] ss_sp = ss.Split(':');
|
|
if (ss_sp.Length == 2)
|
|
{
|
|
if (ss_sp[1] == "AG")
|
|
{
|
|
AgColor = ss_sp[0];
|
|
// if (AssemblyLine == "X247")
|
|
// {
|
|
//
|
|
// if (AgColor == "111" || AgColor == "115")
|
|
// {
|
|
// AssemblyLine = "H247";
|
|
// }
|
|
// }
|
|
}
|
|
}
|
|
}
|
|
|
|
// if (AssemblyLine == "X247")
|
|
// {
|
|
//
|
|
// if (AgColor == "111" || AgColor == "115")
|
|
// {
|
|
// AssemblyLine = "H247";
|
|
// }
|
|
// }
|
|
|
|
}
|
|
|
|
if (sp_line[1] == "4")
|
|
{
|
|
for (int j = 2; j < sp_line.Length; j++)
|
|
{
|
|
string[] sp_line_code = sp_line[j].Split(':');
|
|
|
|
PlannedLineCode plannedLineCode = new PlannedLineCode();
|
|
plannedLineCode.Code = sp_line_code[1];
|
|
plannedLineCode.Value = sp_line_code[0];
|
|
lst_plannedLineCode.Add(plannedLineCode);
|
|
|
|
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|
|
if(sp_line[0] == "UNT")
|
|
{
|
|
|
|
// if (AssemblyLine == "243")
|
|
// {
|
|
// if (AgColor == "211")
|
|
// {
|
|
// var query = lst_PlanedItemsSegment.Where(t =>
|
|
// t.PartNumber.Contains("A2477208005") ||
|
|
// t.PartNumber.Contains("A2477301503")
|
|
// ).ToList<PlanedItem>();
|
|
//
|
|
// if (query.Count > 0)
|
|
// {
|
|
// AssemblyLine = "H243";
|
|
//
|
|
// foreach (var _query in query)
|
|
// {
|
|
// _query.CarType = AssemblyLine;
|
|
// }
|
|
// }
|
|
//
|
|
// query = lst_PlanedItemsSegment.Where(t =>
|
|
// t.PartNumber.Contains("A2477209604") ||
|
|
// t.PartNumber.Contains("A2477306502")
|
|
// ).ToList<PlanedItem>();
|
|
//
|
|
// if (query.Count > 0)
|
|
// {
|
|
// AssemblyLine = "X243";
|
|
// foreach (var _query in query)
|
|
// {
|
|
// _query.CarType = AssemblyLine;
|
|
// }
|
|
//
|
|
// }
|
|
//
|
|
// }
|
|
// else if (AgColor == "101" ||
|
|
// AgColor == "105" ||
|
|
// AgColor == "608" ||
|
|
// AgColor == "688")
|
|
// {
|
|
// AssemblyLine = "X243";
|
|
// }
|
|
// else if (AgColor == "111" ||
|
|
// AgColor == "115" ||
|
|
// AgColor == "618" ||
|
|
// AgColor == "698")
|
|
// {
|
|
// AssemblyLine = "H243";
|
|
// }
|
|
//
|
|
// }
|
|
|
|
if (AssemblyLine == "243" || AssemblyLine == "247")
|
|
{
|
|
var rowAGColorCarType = dtAGColorCarType.Select($"[Code] = '{AgColor}' and CarType like '%{AssemblyLine}'");
|
|
if (rowAGColorCarType.Length == 0)
|
|
{
|
|
throw new Exception("系统中未定义-颜色 " + AgColor + " 对应的车型!");
|
|
}
|
|
//有唯一的对应关系,直接取车型
|
|
if (rowAGColorCarType.Length == 1)
|
|
{
|
|
AssemblyLine = rowAGColorCarType[0]["CarType"].ToString();
|
|
}
|
|
//有多个对应关系时,根据指定的子零件来校验车型
|
|
if (rowAGColorCarType.Length > 1)
|
|
{
|
|
//从特殊零件表中进行判断
|
|
var rowColorPart = dtAGColorPart.Select($"[Color] = '{AgColor}'");
|
|
if (rowColorPart.Length == 0)
|
|
{
|
|
throw new Exception("系统中未定义-颜色 " + AgColor + " 对应的特殊零件信息!");
|
|
}
|
|
|
|
var isFind = false;
|
|
foreach (var row in rowColorPart)
|
|
{
|
|
if (isFind)
|
|
{
|
|
break;
|
|
}
|
|
var parts = row["PartNumber"].ToString().Split(',');
|
|
foreach (var part in parts)
|
|
{
|
|
if (lst_PlanedItemsSegment.Count(p => p.PartNumber == part) > 0)
|
|
{
|
|
AssemblyLine = row["CarType"].ToString();
|
|
isFind = true;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
foreach (var _item in lst_PlanedItemsSegment)
|
|
{
|
|
drs_ModunoABase = dtModunoABase.Select($"[moduno]='{_item.PartNumber}' and [cartype]='{AssemblyLine}'");
|
|
|
|
if (drs_ModunoABase.Length == 0)
|
|
{
|
|
var querylist = lst_ModunoABase.Where(x => x.moduno == _item.PartNumber && x.cartype == AssemblyLine).ToList();
|
|
if (querylist.Count == 0)
|
|
{
|
|
ModunoABase modunoABase = new ModunoABase();
|
|
modunoABase.cartype = AssemblyLine;
|
|
modunoABase.moduno = _item.PartNumber;
|
|
lst_ModunoABase.Add(modunoABase);
|
|
|
|
DataRow drModunoABase = t_ModunoABase.Table.NewRow();
|
|
drModunoABase["cartype"] = AssemblyLine;
|
|
drModunoABase["moduno"] = _item.PartNumber;
|
|
t_ModunoABase.Add(drModunoABase);
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
PlannedLine line = new PlannedLine();
|
|
line.MessageDateTime = MessageDateTime;
|
|
line.UNH = UNH;
|
|
line.ProductionNo = ProductionNumber;
|
|
line.SequenceNo = SequenceNumber;
|
|
line.AssemblyLine = AssemblyLine;
|
|
line.Location = Location;
|
|
line.DeliveryDateTime = DeliveryDateTime;
|
|
line.lst_plannedLineCode = lst_plannedLineCode;
|
|
line.Baumuster = Baumuster;
|
|
line.DemandDate = DemandDate;
|
|
line.Address = Address;
|
|
|
|
|
|
PlannedLine planned = null;
|
|
if (AssemblyLine == "156")
|
|
{
|
|
planned = GetOptionBOM(dtOptionBOM, lst_plannedLineCode);
|
|
}
|
|
|
|
|
|
if (AssemblyLine == "Z177" || AssemblyLine == "X247" || AssemblyLine == "H247" || AssemblyLine == "X243" || AssemblyLine == "H243")
|
|
{
|
|
planned = GetZ177BOM(dtProdnoRule1, dtProdnoRule2, lst_plannedLineCode, AssemblyLine,
|
|
dtProdnoBase, Address, dtTTZRule, ProductionNumber);
|
|
}
|
|
|
|
if (planned == null)
|
|
{
|
|
throw new Exception(ProductionNumber + " 解析到需要车型之外的数据");
|
|
}
|
|
|
|
line.drOptionBOM = planned.drOptionBOM;
|
|
line.AdColor = planned.AdColor;
|
|
line.AgColor = planned.AgColor;
|
|
line.ErrorMessage = planned.ErrorMessage;
|
|
|
|
Lines.Add(line);
|
|
|
|
|
|
foreach(var ItemsSegment in lst_PlanedItemsSegment)
|
|
{
|
|
|
|
PlanedItem item = new PlanedItem();
|
|
item.Address = ItemsSegment.Address;
|
|
item.CarType = AssemblyLine;
|
|
item.ProductionNo = ItemsSegment.ProductionNo;
|
|
item.SequenceNo = ItemsSegment.SequenceNo;
|
|
item.PartNumber = ItemsSegment.PartNumber;
|
|
item.Qty = ItemsSegment.Qty;
|
|
item.DelveryDate = ItemsSegment.DelveryDate;
|
|
lst_PlanedItems.Add(item);
|
|
|
|
PlannedLine lineCarpet = new PlannedLine();
|
|
lineCarpet.MessageDateTime = MessageDateTime;
|
|
lineCarpet.UNH = UNH;
|
|
lineCarpet.ProductionNo = ItemsSegment.ProductionNo;
|
|
lineCarpet.SequenceNo = ItemsSegment.SequenceNo;
|
|
lineCarpet.AssemblyLine = AssemblyLine;
|
|
lineCarpet.Location = Location;
|
|
lineCarpet.DeliveryDateTime = ItemsSegment.DelveryDate;
|
|
lineCarpet.lst_plannedLineCode = lst_plannedLineCode;
|
|
lineCarpet.Baumuster = Baumuster;
|
|
lineCarpet.DemandDate = DemandDate;
|
|
lineCarpet.moduno = ItemsSegment.PartNumber;
|
|
lineCarpet.Address = ItemsSegment.Address;
|
|
lineCarpet.IsCarpet = lstKey.IndexOf(ItemsSegment.PartNumber) >= 0 ? true : false; //判断是否地毯
|
|
LinesCarpet.Add(lineCarpet);
|
|
|
|
if (lstProductionNumber.IndexOf(ItemsSegment.ProductionNo) == -1) lstProductionNumber.Add(ItemsSegment.ProductionNo);
|
|
|
|
var q = lst_PlanedProductionNo.Where(x => x.Address == Address && x.ProductionNo == ItemsSegment.ProductionNo).ToArray();
|
|
if (q.Length == 0)
|
|
{
|
|
PlanedProductionNo p = new PlanedProductionNo();
|
|
p.Address = ItemsSegment.Address;
|
|
p.ProductionNo = ItemsSegment.ProductionNo;
|
|
lst_PlanedProductionNo.Add(p);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
lst_plannedLineCode = new List<PlannedLineCode>();
|
|
lst_PlanedItemsSegment = new List<PlanedItem>();
|
|
|
|
}
|
|
|
|
|
|
if (sp_line[0] == "LIN")
|
|
{
|
|
itemNumber = sp_line[3].Split(':')[0];
|
|
//drs_ModunoABase = dtModunoABase.Select($"[moduno]='{itemNumber}' and [cartype]='{AssemblyLine}'");
|
|
|
|
//if (drs_ModunoABase.Length == 0)
|
|
//{
|
|
// var querylist = lst_ModunoABase.Where(x => x.moduno == itemNumber && x.cartype == AssemblyLine).ToList();
|
|
// if (querylist.Count == 0)
|
|
// {
|
|
// ModunoABase modunoABase = new ModunoABase();
|
|
// modunoABase.cartype = AssemblyLine;
|
|
// modunoABase.moduno = itemNumber;
|
|
// lst_ModunoABase.Add(modunoABase);
|
|
|
|
// DataRow drModunoABase = t_ModunoABase.Table.NewRow();
|
|
// drModunoABase["cartype"] = AssemblyLine;
|
|
// drModunoABase["moduno"] = itemNumber;
|
|
// t_ModunoABase.Add(drModunoABase);
|
|
// }
|
|
|
|
//}
|
|
|
|
|
|
|
|
}
|
|
|
|
if (sp_line[0] == "LOC")
|
|
{
|
|
if (sp_line[1] == "159")
|
|
{
|
|
Location = sp_line[2].Split(':')[0];
|
|
}
|
|
}
|
|
|
|
|
|
if (sp_line[0] == "QTY")
|
|
{
|
|
string[] sp_qty = sp_line[1].Split(':');
|
|
if (sp_qty[0] == "113")
|
|
{
|
|
quantity = sp_qty[1].Trim();
|
|
|
|
}
|
|
}
|
|
|
|
|
|
if (sp_line[0] == "DTM")
|
|
{
|
|
string[] sp_time = sp_line[1].Split(':');
|
|
if (sp_time[0] == "2")
|
|
{
|
|
DeliveryDateTime = sp_time[1];
|
|
|
|
PlanedItem item = new PlanedItem();
|
|
item.Address = Address;
|
|
item.CarType = "";
|
|
item.ProductionNo = ProductionNumber;
|
|
item.SequenceNo = SequenceNumber;
|
|
item.PartNumber = itemNumber;
|
|
item.Qty = quantity;
|
|
//item.DelveryDate = GetDateTime(DeliveryDateTime, ServerDateTimeType.DateTime);
|
|
item.DelveryDate = DeliveryDateTime;
|
|
lst_PlanedItemsSegment.Add(item);
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
#endregion
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region 写门板PJIS数据
|
|
StringBuilder sb = new StringBuilder();
|
|
foreach(PlannedLine line in Lines)
|
|
{
|
|
string sql = @"
|
|
delete from t_PJIS where [ProductionNo]='{ProductionNo}';
|
|
INSERT INTO [t_PJIS]
|
|
([MessageDateTime]
|
|
,[ProductionNo]
|
|
,[SequenceNo]
|
|
,[type]
|
|
,[code]
|
|
,[FLProdNo]
|
|
,[FRProdNo]
|
|
,[RLProdNo]
|
|
,[RRProdNo]
|
|
,[isalter]
|
|
,[LOCATION]
|
|
,[Address]
|
|
,[DeliveryDateTime]
|
|
,[Baumuster]
|
|
,[AssemblyLine]
|
|
,[sysdtm]
|
|
,[filename]
|
|
,[UNH]
|
|
,[DemandDate]
|
|
,[adColor]
|
|
,[agColor]
|
|
,[UpdateMessage])
|
|
VALUES
|
|
('{MessageDateTime}'
|
|
,'{ProductionNo}'
|
|
,'{SequenceNo}'
|
|
,'{type}'
|
|
,'{code}'
|
|
,'{FLProdNo}'
|
|
,'{FRProdNo}'
|
|
,'{RLProdNo}'
|
|
,'{RRProdNo}'
|
|
, {isalter}
|
|
,'{LOCATION}'
|
|
,'{Address}'
|
|
,'{DeliveryDateTime}'
|
|
,'{Baumuster}'
|
|
,'{AssemblyLine}'
|
|
, {sysdtm}
|
|
,'{filename}'
|
|
,'{UNH}'
|
|
,'{DemandDate}'
|
|
,'{adColor}'
|
|
,'{agColor}'
|
|
,'{UpdateMessage}');
|
|
|
|
";
|
|
|
|
sql = sql.Replace("{MessageDateTime}", line.MessageDateTime);
|
|
sql = sql.Replace("{ProductionNo}", line.ProductionNo);
|
|
sql = sql.Replace("{SequenceNo}", line.SequenceNo);
|
|
|
|
if (line.drOptionBOM != null)
|
|
{
|
|
//计算总成特殊零件号
|
|
//通过关键件进行判断
|
|
string FL = "", FR = "", RL = "", RR = "";
|
|
if (dtPartStuffix.Rows.Count > 0)
|
|
{
|
|
foreach (PlanedItem item in lst_PlanedItems.Where(p => p.ProductionNo == line.ProductionNo))
|
|
{
|
|
//如果都找到,则跳出不再计算
|
|
if (FL != "" && FR != "" && RL != "" && RR != "")
|
|
{
|
|
break;
|
|
}
|
|
|
|
var partNumber = item.PartNumber;
|
|
var carType = item.CarType;
|
|
var partRow =
|
|
dtPartStuffix.Select("PartCode like '%" + partNumber + "%' and CarType = '" + carType +
|
|
"'");
|
|
if (partRow.Length > 0)
|
|
{
|
|
for (int i = 0; i < partRow.Length; i++)
|
|
{
|
|
if (partRow[i]["Site"].ToString().ToUpper() == "FL")
|
|
{
|
|
FL = partRow[i]["Stiffix"].ToString();
|
|
continue;
|
|
}
|
|
|
|
if (partRow[i]["Site"].ToString().ToUpper() == "FR")
|
|
{
|
|
FR = partRow[i]["Stiffix"].ToString();
|
|
continue;
|
|
}
|
|
|
|
if (partRow[i]["Site"].ToString().ToUpper() == "RL")
|
|
{
|
|
RL = partRow[i]["Stiffix"].ToString();
|
|
continue;
|
|
}
|
|
|
|
if (partRow[i]["Site"].ToString().ToUpper() == "RR")
|
|
{
|
|
RR = partRow[i]["Stiffix"].ToString();
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
sql = sql.Replace("{type}", line.drOptionBOM["Type"].ToString());
|
|
sql = sql.Replace("{code}", line.drOptionBOM["Code"].ToString());
|
|
sql = sql.Replace("{FLProdNo}", line.drOptionBOM["FLProd"].ToString() + FL);
|
|
sql = sql.Replace("{FRProdNo}", line.drOptionBOM["FRProd"].ToString()+FR);
|
|
sql = sql.Replace("{RLProdNo}", line.drOptionBOM["RLProd"].ToString()+RL);
|
|
sql = sql.Replace("{RRProdNo}", line.drOptionBOM["RRProd"].ToString() + RR);
|
|
if(line.drOptionBOM.Table.Columns.IndexOf("UpdateMessage") >= 0)
|
|
{
|
|
sql = sql.Replace("{UpdateMessage}", line.drOptionBOM["UpdateMessage"].ToString());
|
|
}
|
|
else
|
|
{
|
|
sql = sql.Replace("{UpdateMessage}", "");
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
sql = sql.Replace("{type}", "");
|
|
sql = sql.Replace("{code}", "");
|
|
sql = sql.Replace("{FLProdNo}", "");
|
|
sql = sql.Replace("{FRProdNo}", "");
|
|
sql = sql.Replace("{RLProdNo}", "");
|
|
sql = sql.Replace("{RRProdNo}", "");
|
|
sql = sql.Replace("{UpdateMessage}", "");
|
|
}
|
|
|
|
sql = sql.Replace("{isalter}", line.isalter.ToString());
|
|
sql = sql.Replace("{LOCATION}", line.Location);
|
|
sql = sql.Replace("{DeliveryDateTime}", line.DeliveryDateTime);
|
|
sql = sql.Replace("{Baumuster}", line.Baumuster);
|
|
sql = sql.Replace("{AssemblyLine}", line.AssemblyLine);
|
|
sql = sql.Replace("{sysdtm}", "getdate()");
|
|
sql = sql.Replace("{filename}", filename);
|
|
sql = sql.Replace("{UNH}", line.UNH);
|
|
sql = sql.Replace("{DemandDate}", line.DemandDate);
|
|
sql = sql.Replace("{adColor}", line.AdColor);
|
|
sql = sql.Replace("{agColor}", line.AgColor);
|
|
sql = sql.Replace("{Address}", line.Address);
|
|
|
|
sb.AppendLine(sql);
|
|
|
|
if(sb.Length > 20000)
|
|
{
|
|
db.Exec_NonQuery(sb.ToString());
|
|
sb = new StringBuilder();
|
|
}
|
|
}
|
|
|
|
if(sb.Length > 0)
|
|
{
|
|
db.Exec_NonQuery(sb.ToString());
|
|
sb = new StringBuilder();
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region 写地毯PJIS数据
|
|
|
|
//判断生产号中有没有未找到地毯零件的记录,如果有就将该订单的第一个零件做为地毯的主零件
|
|
foreach(string p in lstProductionNumber)
|
|
{
|
|
var q = LinesCarpet.Where(x => x.ProductionNo == p && x.IsCarpet == true).ToArray();
|
|
if(q.Length == 0)
|
|
{
|
|
q = LinesCarpet.Where(x => x.ProductionNo == p).ToArray();
|
|
if(q.Length > 0)
|
|
{
|
|
q[0].moduno = "";
|
|
q[0].IsCarpet = true;
|
|
q[0].ErrorMessage = $"PJIS地毯{p}没有主零件,请检查";
|
|
|
|
F_Mail.SendMail($"{filename}地毯{p}没有主零件,请检查");
|
|
}
|
|
else
|
|
{
|
|
F_Mail.SendMail($"{filename}地毯{p}没有零件,请检查PJIS文件");
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
sb = new StringBuilder();
|
|
|
|
LinesCarpet = LinesCarpet.Where(x => x.IsCarpet == true).ToList();
|
|
foreach (PlannedLine line in LinesCarpet)
|
|
{
|
|
string sql = @"
|
|
delete from t_PJISCarpet where [ProductionNo]='{ProductionNo}';
|
|
INSERT INTO [t_PJISCarpet]
|
|
([MessageDateTime]
|
|
,[ProductionNo]
|
|
,[SequenceNo]
|
|
,[type]
|
|
,[code]
|
|
,[FLProdNo]
|
|
,[FRProdNo]
|
|
,[RLProdNo]
|
|
,[RRProdNo]
|
|
,[isalter]
|
|
,[LOCATION]
|
|
,[Address]
|
|
,[DeliveryDateTime]
|
|
,[Baumuster]
|
|
,[AssemblyLine]
|
|
,[sysdtm]
|
|
,[filename]
|
|
,[UNH]
|
|
,[DemandDate]
|
|
,[moduno]
|
|
,[IsError]
|
|
,[ErrorMsg])
|
|
VALUES
|
|
('{MessageDateTime}'
|
|
,'{ProductionNo}'
|
|
,'{SequenceNo}'
|
|
,'{type}'
|
|
,'{code}'
|
|
,'{FLProdNo}'
|
|
,'{FRProdNo}'
|
|
,'{RLProdNo}'
|
|
,'{RRProdNo}'
|
|
, {isalter}
|
|
,'{LOCATION}'
|
|
,'{Address}'
|
|
,'{DeliveryDateTime}'
|
|
,'{Baumuster}'
|
|
,'{AssemblyLine}'
|
|
, {sysdtm}
|
|
,'{filename}'
|
|
,'{UNH}'
|
|
,'{DemandDate}'
|
|
,'{moduno}'
|
|
, {IsError}
|
|
,'{ErrorMsg}');
|
|
|
|
";
|
|
|
|
DataRow[] drsModunoABase = dtModunoABase.Select($"[moduno]='{line.moduno}'");
|
|
|
|
sql = sql.Replace("{type}", "");
|
|
sql = sql.Replace("{code}", "");
|
|
sql = sql.Replace("{FLProdNo}", "");
|
|
sql = sql.Replace("{FRProdNo}", "");
|
|
sql = sql.Replace("{RLProdNo}", "");
|
|
sql = sql.Replace("{RRProdNo}", "");
|
|
|
|
sql = sql.Replace("{MessageDateTime}", line.MessageDateTime);
|
|
sql = sql.Replace("{ProductionNo}", line.ProductionNo);
|
|
sql = sql.Replace("{SequenceNo}", line.SequenceNo);
|
|
sql = sql.Replace("{isalter}", line.isalter.ToString());
|
|
sql = sql.Replace("{LOCATION}", line.Location);
|
|
sql = sql.Replace("{DeliveryDateTime}", line.DeliveryDateTime);
|
|
sql = sql.Replace("{Baumuster}", line.Baumuster);
|
|
sql = sql.Replace("{AssemblyLine}", line.AssemblyLine);
|
|
sql = sql.Replace("{sysdtm}", "getdate()");
|
|
sql = sql.Replace("{filename}", filename);
|
|
sql = sql.Replace("{UNH}", line.UNH);
|
|
sql = sql.Replace("{DemandDate}", line.DemandDate);
|
|
if(drsModunoABase.Length > 0)
|
|
{
|
|
sql = sql.Replace("{moduno}", drsModunoABase[0]["prodno"].ToString());
|
|
|
|
if(drsModunoABase[0]["prodno"].ToString() == "")
|
|
{
|
|
line.ErrorMessage += line.moduno + " 在A零件基础表中未设置对应的总成号\r\n";
|
|
}
|
|
|
|
}
|
|
else
|
|
{
|
|
sql = sql.Replace("{moduno}", "");
|
|
|
|
line.ErrorMessage += line.moduno + " 在A零件基础表中不存在\r\n";
|
|
}
|
|
|
|
sql = sql.Replace("{Address}", line.Address);
|
|
sql = sql.Replace("{IsError}", line.ErrorMessage == "" ? "0" : "1");
|
|
sql = sql.Replace("{ErrorMsg}", line.ErrorMessage);
|
|
|
|
sb.AppendLine(sql);
|
|
|
|
if (sb.Length > 20000)
|
|
{
|
|
db.Exec_NonQuery(sb.ToString());
|
|
sb = new StringBuilder();
|
|
}
|
|
}
|
|
|
|
if (sb.Length > 0)
|
|
{
|
|
db.Exec_NonQuery(sb.ToString());
|
|
sb = new StringBuilder();
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region 写A零件明细数据
|
|
sb = new StringBuilder();
|
|
foreach(PlanedProductionNo p in lst_PlanedProductionNo)
|
|
{
|
|
string sql = $"delete from [t_PJISItem] where [Address]='{p.Address}' and [ProductionNo]='{p.ProductionNo}';";
|
|
sb.AppendLine(sql);
|
|
|
|
if (sb.Length > 20000)
|
|
{
|
|
db.Exec_NonQuery(sb.ToString());
|
|
sb = new StringBuilder();
|
|
}
|
|
|
|
}
|
|
|
|
if (sb.Length > 0)
|
|
{
|
|
db.Exec_NonQuery(sb.ToString());
|
|
sb = new StringBuilder();
|
|
}
|
|
|
|
foreach (PlanedItem item in lst_PlanedItems)
|
|
{
|
|
string k = item.Address + "-" + item.ProductionNo + "-" + item.PartNumber;
|
|
string sql = $@"
|
|
--delete from [t_PJISItem] where [k]='{k}';
|
|
INSERT INTO [t_PJISItem]
|
|
([Address]
|
|
,[CarType]
|
|
,[ProductionNo]
|
|
,[SequenceNo]
|
|
,[PartNumber]
|
|
,[Qty]
|
|
,[DelveryDate]
|
|
,[filename]
|
|
,[k])
|
|
VALUES
|
|
('{item.Address}'
|
|
,'{item.CarType}'
|
|
,'{item.ProductionNo}'
|
|
,'{item.SequenceNo}'
|
|
,'{item.PartNumber}'
|
|
,'{item.Qty}'
|
|
,'{GetDateTime(item.DelveryDate, ServerDateTimeType.DateTime)}'
|
|
,'{filename}'
|
|
,'{k}');
|
|
";
|
|
sb.AppendLine(sql);
|
|
|
|
if (sb.Length > 20000)
|
|
{
|
|
db.Exec_NonQuery(sb.ToString());
|
|
sb = new StringBuilder();
|
|
}
|
|
|
|
}
|
|
|
|
if (sb.Length > 0)
|
|
{
|
|
db.Exec_NonQuery(sb.ToString());
|
|
sb = new StringBuilder();
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region 匹配门板PJIS的所有零件(为了保证速度,在新的线程中去处理)
|
|
MatchObject matchobj = new MatchObject();
|
|
matchobj.lines = Lines;
|
|
matchobj.items = lst_PlanedItems;
|
|
|
|
Thread t1 = new Thread(MatchItem);
|
|
t1.Start(matchobj);
|
|
#endregion
|
|
}
|
|
|
|
//按零件号匹配PJIS零件
|
|
public static void MatchItem(object obj)
|
|
{
|
|
try
|
|
{
|
|
Entity_t_PJIS t_PJIS = new Entity_t_PJIS();
|
|
Entity_t_Bom t_Bom = new Entity_t_Bom();
|
|
|
|
List<string> lst = MyAppconfig.ReadValue("地毯A零件").Split(',').ToList<string>();
|
|
|
|
MatchObject matchobj = (MatchObject)obj;
|
|
|
|
var strsql = "select * from t_FGPartStuffix";
|
|
LocalDBService db = new LocalDBService();
|
|
var dtPartStuffix = new DataTable();
|
|
try
|
|
{
|
|
dtPartStuffix = db.Exec_DataSet(strsql).Tables[0];
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
throw new Exception("系统中未定义-总成特殊零件");
|
|
}
|
|
|
|
foreach (PlannedLine line in matchobj.lines)
|
|
{
|
|
if( line.ProductionNo == "3276164")
|
|
{
|
|
string s = "abc";
|
|
}
|
|
|
|
/*
|
|
if (line.AssemblyLine != "177" && line.AssemblyLine != "247")
|
|
{
|
|
if (line.ErrorMessage != "")
|
|
{
|
|
t_PJIS.Edit($"[IsError]=1, [ErrorMsg]='{line.ErrorMessage}'", $"[ProductionNo]='{line.ProductionNo}'");
|
|
|
|
string mail_body = $"生产号 {line.ProductionNo} 总成零件匹配异常,原因为:<br>";
|
|
mail_body += line.ErrorMessage.Replace("\r\n", "<br>");
|
|
|
|
F_Mail.SendMail(mail_body);
|
|
}
|
|
|
|
continue;
|
|
}
|
|
*/
|
|
|
|
|
|
string ErrorMsg = "";
|
|
try
|
|
{
|
|
var querylist = matchobj.items.Where(x => x.ProductionNo == line.ProductionNo && x.CarType == line.AssemblyLine).ToList();
|
|
|
|
string FLProdNo = line.drOptionBOM["FLProd"].ToString();
|
|
string FRProdNo = line.drOptionBOM["FRProd"].ToString();
|
|
string RLProdNo = line.drOptionBOM["RLProd"].ToString();
|
|
string RRProdNo = line.drOptionBOM["RRProd"].ToString();
|
|
|
|
//更新OptionBom里的数据 如果是特殊总成
|
|
|
|
//计算总成特殊零件号
|
|
//通过关键件进行判断
|
|
string FL = "", FR = "", RL = "", RR = "";
|
|
if (dtPartStuffix.Rows.Count > 0)
|
|
{
|
|
var lstPartNum = querylist.Select(p=>p.PartNumber).Distinct().ToList();
|
|
var parts = "";
|
|
foreach (var partNum in lstPartNum)
|
|
{
|
|
parts += "'" + partNum + "',";
|
|
}
|
|
|
|
if (parts.Length > 0)
|
|
parts = parts.Substring(0, parts.Length - 1);
|
|
|
|
var partRow =
|
|
dtPartStuffix.Select("PartCode in (" + parts + ") and CarType = '" + line.AssemblyLine +
|
|
"'");
|
|
if (partRow.Length > 0)
|
|
{
|
|
for (int i = 0; i < partRow.Length; i++)
|
|
{
|
|
if (partRow[i]["Site"].ToString().ToUpper() == "FL")
|
|
{
|
|
FL = partRow[i]["Stiffix"].ToString();
|
|
continue;
|
|
}
|
|
|
|
if (partRow[i]["Site"].ToString().ToUpper() == "FR")
|
|
{
|
|
FR = partRow[i]["Stiffix"].ToString();
|
|
continue;
|
|
}
|
|
|
|
if (partRow[i]["Site"].ToString().ToUpper() == "RL")
|
|
{
|
|
RL = partRow[i]["Stiffix"].ToString();
|
|
continue;
|
|
}
|
|
|
|
if (partRow[i]["Site"].ToString().ToUpper() == "RR")
|
|
{
|
|
RR = partRow[i]["Stiffix"].ToString();
|
|
continue;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
FLProdNo += FL;
|
|
FRProdNo += FR;
|
|
RLProdNo += RL;
|
|
RRProdNo += RR;
|
|
|
|
|
|
// DataTable dtBom = t_Bom.GetData("[PartNumber], isnull( Sum(Qty), 0) as Qty", $"[CarType]='{line.AssemblyLine}' and ([Code]='{FLProdNo}' or [Code]='{FRProdNo}' or [Code]='{RLProdNo}' or [Code]='{RRProdNo}') group by [PartNumber]", "[PartNumber] asc").Tables[0];
|
|
DataTable dtBom = t_Bom.GetData("[PartNumber], isnull( Sum(Qty), 0) as Qty", $" ([Code]='{FLProdNo}' or [Code]='{FRProdNo}' or [Code]='{RLProdNo}' or [Code]='{RRProdNo}') group by [PartNumber]", "[PartNumber] asc").Tables[0];
|
|
foreach (DataRow drBom in dtBom.Rows)
|
|
{
|
|
if (lst.IndexOf(drBom["PartNumber"].ToString()) >= 0) //跳过地毯的零件
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var list = querylist.Where(x => x.PartNumber == drBom["PartNumber"].ToString()).ToList();
|
|
if (list.Count == 0)
|
|
{
|
|
ErrorMsg += $"{drBom["PartNumber"] } 零件在PJIS中不存在\r\n";
|
|
}
|
|
else
|
|
{
|
|
if (Convert.ToInt32(drBom["Qty"]) != Convert.ToInt32(list[0].Qty))
|
|
{
|
|
ErrorMsg += $"{drBom["PartNumber"] } 零件数量和PJIS中数量不相等\r\n";
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
foreach (PlanedItem item in querylist)
|
|
{
|
|
if (lst.IndexOf(item.PartNumber) >= 0) //跳过地毯的零件
|
|
{
|
|
continue;
|
|
}
|
|
|
|
DataRow[] drs = dtBom.Select($"[PartNumber]='{item.PartNumber}'");
|
|
if (drs.Length == 0)
|
|
{
|
|
ErrorMsg += $"{item.PartNumber} 零件在BOM中不存在\r\n";
|
|
}
|
|
else
|
|
{
|
|
if (Convert.ToInt32(item.Qty) != Convert.ToInt32(drs[0]["Qty"]))
|
|
{
|
|
ErrorMsg += $"{item.PartNumber} 零件数量和BOM中数量不相等\r\n";
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
ErrorMsg += e.Message;
|
|
}
|
|
|
|
if(ErrorMsg != "" || line.ErrorMessage != "")
|
|
{
|
|
ErrorMsg = line.ErrorMessage + ErrorMsg;
|
|
|
|
t_PJIS.Edit($"[IsError]=1, [ErrorMsg]='{ErrorMsg}'", $"[ProductionNo]='{line.ProductionNo}'");
|
|
|
|
string mail_body = $"生产号 {line.ProductionNo} PJIS和BOM零件匹配异常,原因为:<br>";
|
|
mail_body += ErrorMsg.Replace("\r\n", "<br>");
|
|
|
|
F_Mail.SendMail(mail_body);
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MyLogger.Write(ex.Message);
|
|
|
|
F_Mail.SendMail(ex.Message);
|
|
}
|
|
|
|
}
|
|
|
|
//取156的OptionBOM
|
|
private static PlannedLine GetOptionBOM(DataTable dtOptionBOM, List<PlannedLineCode> lineCodes)
|
|
{
|
|
//新:编码规则顺序:890-500-U62-877-810-242-808-149-896-X3-X4-X5-X6-X7-X8 剩余6位
|
|
|
|
PlannedLine ret = new PlannedLine();
|
|
|
|
string code = "";
|
|
|
|
List<PlannedLineCode> querylist = null;
|
|
|
|
string AdColor = "";
|
|
string AgColor = "";
|
|
querylist = lineCodes.Where(x => x.Code == "AG").ToList();
|
|
if (querylist.Count > 0)
|
|
{
|
|
AgColor = querylist[0].Value;
|
|
if (AgColor == "175") AgColor = "165"; //特殊
|
|
if (AgColor == "855") AgColor = "165"; //特殊
|
|
|
|
|
|
}
|
|
|
|
querylist = lineCodes.Where(x => x.Value == "890" && x.Code == "AE").ToList(); if (querylist.Count > 0) { code += "1"; } else { code += "0"; };
|
|
querylist = lineCodes.Where(x => x.Value == "500" && x.Code == "AE").ToList(); if (querylist.Count > 0) { code += "1"; } else { code += "0"; };
|
|
querylist = lineCodes.Where(x => x.Value == "U62" && x.Code == "AE").ToList(); if (querylist.Count > 0) { code += "1"; } else { code += "0"; };
|
|
querylist = lineCodes.Where(x => x.Value == "877" && x.Code == "AE").ToList(); if (querylist.Count > 0) { code += "1"; } else { code += "0"; };
|
|
querylist = lineCodes.Where(x => x.Value == "810" && x.Code == "AE").ToList(); if (querylist.Count > 0) { code += "1"; } else { code += "0"; };
|
|
querylist = lineCodes.Where(x => x.Value == "242" && x.Code == "AE").ToList(); if (querylist.Count > 0) { code += "1"; } else { code += "0"; };
|
|
querylist = lineCodes.Where(x => (x.Value == "808" || x.Value == "809") && x.Code == "AE").ToList(); if (querylist.Count > 0) { code += "1"; } else { code += "0"; };
|
|
|
|
if(AgColor == "161" || AgColor == "801")
|
|
{
|
|
querylist = lineCodes.Where(x => x.Value == "149" && x.Code == "AD").ToList(); if (querylist.Count > 0) { code += "1"; } else { code += "0"; };
|
|
querylist = lineCodes.Where(x => x.Value == "896" && x.Code == "AD").ToList(); if (querylist.Count > 0) { code += "1"; } else { code += "0"; };
|
|
}
|
|
else
|
|
{
|
|
code += "00";
|
|
}
|
|
|
|
|
|
querylist = lineCodes.Where(x => x.Value == "X3" && x.Code == "AE").ToList(); if (querylist.Count > 0) { code += "1"; } else { code += "0"; };
|
|
querylist = lineCodes.Where(x => x.Value == "X4" && x.Code == "AE").ToList(); if (querylist.Count > 0) { code += "1"; } else { code += "0"; };
|
|
querylist = lineCodes.Where(x => x.Value == "X5" && x.Code == "AE").ToList(); if (querylist.Count > 0) { code += "1"; } else { code += "0"; };
|
|
querylist = lineCodes.Where(x => x.Value == "X6" && x.Code == "AE").ToList(); if (querylist.Count > 0) { code += "1"; } else { code += "0"; };
|
|
querylist = lineCodes.Where(x => x.Value == "X7" && x.Code == "AE").ToList(); if (querylist.Count > 0) { code += "1"; } else { code += "0"; };
|
|
querylist = lineCodes.Where(x => x.Value == "X8" && x.Code == "AE").ToList(); if (querylist.Count > 0) { code += "1"; } else { code += "0"; };
|
|
|
|
|
|
|
|
code += AgColor;
|
|
|
|
querylist = lineCodes.Where(x => x.Code == "AD").ToList(); if (querylist.Count > 0) { AdColor = querylist[0].Value; }
|
|
|
|
|
|
DataRow[] drsBom = dtOptionBOM.Select($"[Code]='{code}'");
|
|
|
|
ret.ErrorMessage = "";
|
|
if (drsBom.Length > 0)
|
|
{
|
|
ret.drOptionBOM = drsBom[0];
|
|
}
|
|
else
|
|
{
|
|
ret.ErrorMessage += $"OptionBOM {code} 在系统中不存在\r\n";
|
|
}
|
|
|
|
ret.AdColor = AdColor;
|
|
ret.AgColor = AgColor;
|
|
ret.Code = code;
|
|
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
//取177的OptionBOM
|
|
private static PlannedLine GetZ177BOM(DataTable dtProdnoRule1, DataTable dtProdnoRule2, List<PlannedLineCode> lineCodes, string CarType, DataTable dtProdnoBase, string Address, DataTable dtTTZRule, string ProductionNumber)
|
|
{
|
|
Entity_t_TTZ_Data t_TTZ_Data = new Entity_t_TTZ_Data();
|
|
|
|
DataRow[] drsBaseCode = dtProdnoRule1.Select($"[cartype]='{CarType}'", "[Sort] asc");
|
|
DataRow[] drsRule = dtProdnoRule2.Select($"[cartype]='{CarType}'", "[Sort] asc");
|
|
|
|
string BaseCode = "";
|
|
|
|
// if (Address == "104")
|
|
// {
|
|
// BaseCode = "AE";
|
|
// }
|
|
// if (Address == "1046")
|
|
// {
|
|
// BaseCode = "AH";
|
|
// }
|
|
BaseCode = "AH";
|
|
DataTable dtData = new DataTable();
|
|
dtData.Columns.Add("Type");
|
|
dtData.Columns.Add("Code");
|
|
dtData.Columns.Add("FLProd");
|
|
dtData.Columns.Add("FRProd");
|
|
dtData.Columns.Add("RLProd");
|
|
dtData.Columns.Add("RRProd");
|
|
dtData.Columns.Add("UpdateMessage");
|
|
|
|
DataRow drData = dtData.NewRow();
|
|
drData["Type"] = "";
|
|
drData["Code"] = CarType;
|
|
dtData.Rows.Add(drData);
|
|
|
|
if(ProductionNumber == "3501754")
|
|
{
|
|
string a = "abc";
|
|
}
|
|
|
|
string Code = "";
|
|
string FLProd = "";
|
|
string FRProd = "";
|
|
string RLProd = "";
|
|
string RRProd = "";
|
|
|
|
Code += "M";
|
|
if (CarType == "Z177") Code += "Z";
|
|
if (CarType == "X247") Code += "X";
|
|
if (CarType == "H247") Code += "H";
|
|
if (CarType == "X243") Code += "X";
|
|
if (CarType == "H243") Code += "H";
|
|
|
|
FLProd = Code + "FL";
|
|
FRProd = Code + "FR";
|
|
RLProd = Code + "RL";
|
|
RRProd = Code + "RR";
|
|
|
|
Code = "";
|
|
|
|
PlannedLine ret = new PlannedLine();
|
|
List<PlannedLineCode> querylist = null;
|
|
|
|
string AdColor = ""; //外漆颜色
|
|
string AgColor = ""; //内饰颜色
|
|
|
|
querylist = lineCodes.Where(x => x.Code == "AD").ToList(); if (querylist.Count > 0) { AdColor = querylist[0].Value; }
|
|
querylist = lineCodes.Where(x => x.Code == "AG").ToList(); if (querylist.Count > 0) { AgColor = querylist[0].Value; }
|
|
|
|
|
|
#region 计算TTZ规则
|
|
/*
|
|
1.对于 Z177车型,阶段为19/2的,如果内饰颜色code是267或者是258时,并且生产号下边有853 code,也就是总成号里由字母E时,那么总成号结尾加 -2
|
|
2.对于Z177车型,阶段为19/2的,如果内饰颜色code不是267,也不是258时,并且生产号下边有853 code, 那么pjis报错,按当前总成号组成规则,总成号里不带入字母E。
|
|
*/
|
|
|
|
string FLProd_Purpose = "";
|
|
string FRProd_Purpose = "";
|
|
string RLProd_Purpose = "";
|
|
string RRProd_Purpose = "";
|
|
|
|
if(ProductionNumber == "3386516")
|
|
{
|
|
string a = "";
|
|
}
|
|
|
|
if (CarType == "Z177")
|
|
{
|
|
if (AgColor == "267" || AgColor == "258")
|
|
{
|
|
//判断有没有853
|
|
var s = lineCodes.Where(x => x.Code == "AE" & x.Value == "853").ToList();
|
|
if (s.Count > 0)
|
|
{
|
|
DataTable dtTTZ_Data = t_TTZ_Data.GetData("top 1 *", $"[ProductionNo]='{ProductionNumber}'", "[ID] desc").Tables[0];
|
|
if (dtTTZ_Data.Rows.Count > 0)
|
|
{
|
|
string Purpose = dtTTZ_Data.Rows[0]["Purpose"].ToString();
|
|
if (CarType != dtTTZ_Data.Rows[0]["CarType"].ToString())
|
|
{
|
|
ret.ErrorMessage = $"{ProductionNumber}生产号PJIS车型与TTZ车型不一致";
|
|
}
|
|
|
|
if (Purpose != "" && Purpose != "#N/A")
|
|
{
|
|
// // DataRow[] drTTZ_Rule = dtTTZRule.Select($"[cartype]='{CarType}' and [Code]='{Purpose}'");
|
|
// DataRow[] drTTZ_Rule = dtTTZRule.Select($"[cartype]='{CarType}'");
|
|
// if (drTTZ_Rule.Length > 0)
|
|
// {
|
|
// //if (Convert.ToBoolean(drTTZ_Rule[0]["FL"])) FLProd_Purpose = "-" + drTTZ_Rule[0]["Value"].ToString();
|
|
// //if (Convert.ToBoolean(drTTZ_Rule[0]["FR"])) FRProd_Purpose = "-" + drTTZ_Rule[0]["Value"].ToString();
|
|
// if (Convert.ToBoolean(drTTZ_Rule[0]["RL"])) RLProd_Purpose = "-" + drTTZ_Rule[0]["Value"].ToString();
|
|
// if (Convert.ToBoolean(drTTZ_Rule[0]["RR"])) RRProd_Purpose = "-" + drTTZ_Rule[0]["Value"].ToString();
|
|
//
|
|
// }
|
|
}
|
|
else
|
|
{
|
|
//支持阶段号是空的
|
|
Purpose = "";
|
|
}
|
|
FLProd_Purpose = GetPurpose(CarType, "FL", dtTTZRule, Purpose);
|
|
|
|
FRProd_Purpose = GetPurpose(CarType, "FR", dtTTZRule, Purpose);
|
|
|
|
RLProd_Purpose = GetPurpose(CarType, "RL", dtTTZRule, Purpose);
|
|
|
|
RRProd_Purpose = GetPurpose(CarType, "RR", dtTTZRule, Purpose);
|
|
}
|
|
else
|
|
{
|
|
//code1 = 不为空的
|
|
// 并且ttzdata没有数据
|
|
FLProd_Purpose = GetPurposeTTZNull(CarType, "FL", dtTTZRule);
|
|
FRProd_Purpose = GetPurposeTTZNull(CarType, "FR", dtTTZRule);
|
|
RLProd_Purpose = GetPurposeTTZNull(CarType, "RL", dtTTZRule);
|
|
RRProd_Purpose = GetPurposeTTZNull(CarType, "RR", dtTTZRule);
|
|
}
|
|
|
|
}
|
|
}
|
|
else
|
|
{
|
|
//判断有没有853
|
|
var s = lineCodes.Where(x => x.Code == "AE" & x.Value == "853").ToList();
|
|
if (s.Count > 0)
|
|
{
|
|
DataTable dtTTZ_Data = t_TTZ_Data.GetData("top 1 *", $"[ProductionNo]='{ProductionNumber}'", "[ID] desc").Tables[0];
|
|
if (dtTTZ_Data.Rows.Count > 0)
|
|
{
|
|
string Purpose = dtTTZ_Data.Rows[0]["Purpose"].ToString();
|
|
if (Purpose != "" && Purpose != "#N/A")
|
|
{
|
|
DataRow[] drTTZ_Rule = dtTTZRule.Select($"[cartype]='{CarType}' and [Code]='{Purpose}'");
|
|
if (drTTZ_Rule.Length > 0)
|
|
{
|
|
ret.ErrorMessage += $"{ProductionNumber} 内饰风格 {AgColor} 但是存在853 Code";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
DataTable dtTTZ_Data1 = t_TTZ_Data.GetData("top 1 *", $"[ProductionNo]='{ProductionNumber}'", "[ID] desc").Tables[0];
|
|
if (dtTTZ_Data1.Rows.Count > 0)
|
|
{
|
|
string Purpose = dtTTZ_Data1.Rows[0]["Purpose"].ToString();
|
|
if (CarType != dtTTZ_Data1.Rows[0]["CarType"].ToString())
|
|
{
|
|
ret.ErrorMessage = $"{ProductionNumber}生产号PJIS车型与TTZ车型不一致";
|
|
}
|
|
|
|
if (Purpose != "" && Purpose != "#N/A")
|
|
{
|
|
// if(Purpose.IndexOf("21") >= 0) FLProd_Purpose = "-2";
|
|
}
|
|
else
|
|
{
|
|
Purpose = "";
|
|
}
|
|
FLProd_Purpose = GetPurpose(CarType, "FL", dtTTZRule, Purpose);
|
|
}
|
|
else
|
|
{
|
|
//code1 = 不为空的
|
|
// 并且ttzdata没有数据
|
|
FLProd_Purpose = GetPurposeTTZNull(CarType, "FL", dtTTZRule);
|
|
}
|
|
}
|
|
else if (CarType == "X243" || CarType == "H243")
|
|
{
|
|
// FLProd_Purpose = "-2";
|
|
//243的不进行t_TTZ_Data导入,认为阶段号是""
|
|
string Purpose = "";
|
|
DataTable dtTTZ_Data = t_TTZ_Data.GetData("top 1 *", $"[ProductionNo]='{ProductionNumber}'", "[ID] desc").Tables[0];
|
|
if (dtTTZ_Data.Rows.Count > 0)
|
|
{
|
|
Purpose = dtTTZ_Data.Rows[0]["Purpose"].ToString();
|
|
if (CarType != dtTTZ_Data.Rows[0]["CarType"].ToString())
|
|
{
|
|
ret.ErrorMessage = $"{ProductionNumber}生产号PJIS车型与TTZ车型不一致";
|
|
}
|
|
|
|
if (Purpose != "" && Purpose != "#N/A")
|
|
{
|
|
|
|
// if (Purpose.IndexOf("21") >= 0) FLProd_Purpose = "-2";
|
|
}
|
|
else
|
|
{
|
|
Purpose = "";
|
|
}
|
|
|
|
FLProd_Purpose = GetPurpose(CarType, "FL", dtTTZRule, Purpose);
|
|
}
|
|
else
|
|
{
|
|
//code1 = 不为空的
|
|
// 并且ttzdata没有数据
|
|
FLProd_Purpose = GetPurposeTTZNull(CarType, "FL", dtTTZRule);
|
|
}
|
|
|
|
// FLProd_Purpose = GetPurpose(CarType, "FL", dtTTZRule, Purpose);
|
|
}
|
|
else if (CarType == "X247" || CarType == "H247")
|
|
{
|
|
DataTable dtTTZ_Data = t_TTZ_Data.GetData("top 1 *", $"[ProductionNo]='{ProductionNumber}'", "[ID] desc").Tables[0];
|
|
if (dtTTZ_Data.Rows.Count > 0)
|
|
{
|
|
string Purpose = dtTTZ_Data.Rows[0]["Purpose"].ToString();
|
|
if (CarType != dtTTZ_Data.Rows[0]["CarType"].ToString())
|
|
{
|
|
ret.ErrorMessage = $"{ProductionNumber}生产号PJIS车型与TTZ车型不一致";
|
|
}
|
|
|
|
if (Purpose != "" && Purpose != "#N/A")
|
|
{
|
|
|
|
// if (Purpose.IndexOf("21") >= 0) FLProd_Purpose = "-2";
|
|
}
|
|
else
|
|
{
|
|
Purpose = "";
|
|
}
|
|
FLProd_Purpose = GetPurpose(CarType, "FL", dtTTZRule, Purpose);
|
|
}
|
|
else
|
|
{
|
|
//code1 = 不为空的
|
|
// 并且ttzdata没有数据
|
|
FLProd_Purpose = GetPurposeTTZNull(CarType, "FL", dtTTZRule);
|
|
}
|
|
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
//(三位),内饰颜色代码,取后源代码的数字部分, 101A-101 105A-105 104A-104
|
|
//程序把颜色代码的字母去掉
|
|
Code += MyStrings.GetNumber(AgColor);
|
|
|
|
FLProd += Code;
|
|
FRProd += Code;
|
|
RLProd += Code;
|
|
RRProd += Code;
|
|
|
|
Code = "";
|
|
|
|
//(两位),装饰板,取源代码数字部分,H15=15 H44=44 H45=45 H55=55 H59=59 H95=95
|
|
foreach (DataRow drBaseCode in drsBaseCode)
|
|
{
|
|
// querylist = lineCodes.Where(x => x.Value == drBaseCode["Code"].ToString() && x.Code == BaseCode).ToList();
|
|
querylist = lineCodes.Where(x => x.Value == drBaseCode["Code"].ToString() && (x.Code == "AE"|| x.Code == "AH")).ToList();
|
|
if (querylist.Count > 0)
|
|
{
|
|
Code += drBaseCode["Value"].ToString().Trim().ToUpper();
|
|
}
|
|
}
|
|
|
|
|
|
|
|
FLProd += Code;
|
|
FRProd += Code;
|
|
|
|
|
|
//(选配区)表示选配,221-A 222-B 500-C 810-D 853-E 873-F 877-G U62-H
|
|
//其中:A和C仅适用左前门,B仅适用右前门,
|
|
// D和E不同时存在,
|
|
// G和H不同时存在
|
|
|
|
|
|
DataTable dtGroups = new DataTable();
|
|
dtGroups.Columns.Add("groups", typeof(Int32));
|
|
|
|
foreach (DataRow drRule in drsRule)
|
|
{
|
|
int groups = Convert.ToInt32(drRule["groups"]);
|
|
|
|
if (dtGroups.Select($"[groups]='{groups}'").Length == 0)
|
|
{
|
|
|
|
//querylist = lineCodes.Where(x => x.Value == drRule["code"].ToString() && x.Code == BaseCode).ToList();
|
|
querylist = lineCodes.Where(x => x.Value == drRule["code"].ToString() && (x.Code == "AE"|| x.Code == "AH")).ToList();
|
|
if (querylist.Count > 0)
|
|
{
|
|
// if (drRule["code"].ToString() == "U62")
|
|
// {
|
|
// DataTable dtTTZ_Data = t_TTZ_Data.GetData($"top 1 *", $"[ProductionNo]='{ProductionNumber}'", "[ID] desc").Tables[0];
|
|
// if (dtTTZ_Data.Rows.Count > 0)
|
|
// {
|
|
// string Purpose = dtTTZ_Data.Rows[0]["Purpose"].ToString().Trim();
|
|
// if(Purpose != "")
|
|
// {
|
|
// //todo
|
|
// if (Purpose.IndexOf("20/1") >= 0 ||
|
|
// Purpose.IndexOf("20/2") >= 0 ||
|
|
// Purpose.IndexOf("20-1") >= 0 ||
|
|
// Purpose.IndexOf("20-2") >= 0 ||
|
|
// Purpose.IndexOf("21/1") >= 0 ||
|
|
// Purpose.IndexOf("21-1") >= 0 ||
|
|
// Purpose == "X247 PT3 C3" ||
|
|
// Purpose == "H247 C2 PT3" ||
|
|
// Purpose == "X247 C3 PT3" ||
|
|
//
|
|
// Purpose == "X247 C5 PT2" ||
|
|
// Purpose == "X247 PT2 C5" ||
|
|
//
|
|
// Purpose == "X247 PT2 C2" ||
|
|
// Purpose == "X247 C2 PT2"
|
|
// )
|
|
// {
|
|
// continue;
|
|
// }
|
|
//
|
|
// }
|
|
// }
|
|
// }
|
|
|
|
if (Convert.ToBoolean(drRule["FL"])) FLProd += drRule["Value"].ToString();
|
|
if (Convert.ToBoolean(drRule["FR"])) FRProd += drRule["Value"].ToString();
|
|
if (Convert.ToBoolean(drRule["RL"])) RLProd += drRule["Value"].ToString();
|
|
if (Convert.ToBoolean(drRule["RR"])) RRProd += drRule["Value"].ToString();
|
|
|
|
DataRow drGroups = dtGroups.NewRow();
|
|
drGroups["groups"] = groups;
|
|
dtGroups.Rows.Add(drGroups);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if(CarType == "X247" || CarType == "H247")
|
|
{
|
|
//querylist = lineCodes.Where(x => x.Value == "853" && x.Code == BaseCode).ToList();
|
|
querylist = lineCodes.Where(x => x.Value == "853" && (x.Code == "AE" || x.Code == "AH")).ToList();
|
|
if (querylist.Count > 0)
|
|
{
|
|
ret.ErrorMessage += $"853code后台监控:出现853,";
|
|
}
|
|
|
|
}
|
|
|
|
drData["FLProd"] = FLProd + FLProd_Purpose;
|
|
drData["FRProd"] = FRProd + FRProd_Purpose;
|
|
drData["RLProd"] = RLProd + RLProd_Purpose;
|
|
drData["RRProd"] = RRProd + RRProd_Purpose;
|
|
//ret.ErrorMessage = "";
|
|
if (dtProdnoBase.Select($"[prodno]='{drData["FLProd"]}'").Length == 0) ret.ErrorMessage += $"总成零件号 {drData["FLProd"]} 在系统中不存在\r\n";
|
|
if (dtProdnoBase.Select($"[prodno]='{drData["FRProd"]}'").Length == 0) ret.ErrorMessage += $"总成零件号 {drData["FRProd"]} 在系统中不存在\r\n";
|
|
if (dtProdnoBase.Select($"[prodno]='{drData["RLProd"]}'").Length == 0) ret.ErrorMessage += $"总成零件号 {drData["RLProd"]} 在系统中不存在\r\n";
|
|
if (dtProdnoBase.Select($"[prodno]='{drData["RRProd"]}'").Length == 0) ret.ErrorMessage += $"总成零件号 {drData["RRProd"]} 在系统中不存在\r\n";
|
|
|
|
ret.drOptionBOM = drData;
|
|
ret.AdColor = AdColor;
|
|
ret.AgColor = AgColor;
|
|
return ret;
|
|
}
|
|
|
|
private static string GetPurpose(string CarType, string position ,DataTable dtTTZRule, string Purpose)
|
|
{
|
|
string Prod_Purpose = "";
|
|
DataRow[] drTTZ_Rule_RR = dtTTZRule.Select($"[cartype]='{CarType}' and [position] = '{position}'");
|
|
if (drTTZ_Rule_RR.Length > 0)
|
|
{
|
|
for (int i = 0; i < drTTZ_Rule_RR.Length; i++)
|
|
{
|
|
var strCode1 = drTTZ_Rule_RR[i]["code"].ToString();
|
|
if(strCode1 == "不包含")
|
|
{
|
|
strCode1 = "";
|
|
}
|
|
if (Purpose.Contains(strCode1) &&
|
|
!Purpose.Contains(drTTZ_Rule_RR[i]["code2"].ToString()))
|
|
{
|
|
Prod_Purpose = drTTZ_Rule_RR[i]["Value"].ToString();
|
|
break;
|
|
}
|
|
|
|
|
|
}
|
|
}
|
|
return Prod_Purpose;
|
|
}
|
|
|
|
/// <summary>
|
|
/// TTZ没有数据时,获取Purpose
|
|
/// </summary>
|
|
/// <param name="CarType"></param>
|
|
/// <param name="position"></param>
|
|
/// <param name="dtTTZRule"></param>
|
|
/// <returns></returns>
|
|
private static string GetPurposeTTZNull(string CarType, string position, DataTable dtTTZRule)
|
|
{
|
|
string Prod_Purpose = "";
|
|
DataRow[] drTTZ_Rule_RR = dtTTZRule.Select($"[cartype]='{CarType}' and [position] = '{position}'");
|
|
if (drTTZ_Rule_RR.Length > 0)
|
|
{
|
|
for (int i = 0; i < drTTZ_Rule_RR.Length; i++)
|
|
{
|
|
var strCode1 = drTTZ_Rule_RR[i]["code"].ToString();
|
|
if (strCode1 == "不包含")
|
|
{
|
|
Prod_Purpose = drTTZ_Rule_RR[i]["Value"].ToString();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
return Prod_Purpose;
|
|
}
|
|
|
|
|
|
//处理AJIS数据
|
|
public static void ProcessDataAJIS(string[] sp_text, string filename)
|
|
{
|
|
string MessageDateTime = "";
|
|
string UNH = "";
|
|
string ProductionNo = "";
|
|
string ArrivalDateTime = "";
|
|
string SequenceNo = "";
|
|
string Address = "";
|
|
|
|
foreach (string line_text in sp_text)
|
|
{
|
|
if (line_text.Trim() == "") continue;
|
|
string[] sp_line = line_text.Split('+');
|
|
|
|
if (sp_line[0] == "UNB")
|
|
{
|
|
MessageDateTime = sp_line[4].Trim();
|
|
}
|
|
|
|
if (sp_line[0] == "UNH")
|
|
{
|
|
UNH = sp_line[1].Trim();
|
|
}
|
|
|
|
|
|
if (sp_line[0] == "DTM")
|
|
{
|
|
string[] sp = sp_line[1].Split(':');
|
|
|
|
if (sp[0] == "132")
|
|
{
|
|
ArrivalDateTime = sp[1];
|
|
}
|
|
}
|
|
|
|
if (sp_line[0] == "NAD")
|
|
{
|
|
if (sp_line[1] == "BY") Address = sp_line[2].Split(':')[0];
|
|
}
|
|
|
|
if (sp_line[0] == "GIR")
|
|
{
|
|
if (sp_line[1] == "1")
|
|
{
|
|
if (sp_line[2].Split(':')[1] == "AN")
|
|
{
|
|
ProductionNo = sp_line[2].Split(':')[0];
|
|
}
|
|
}
|
|
|
|
if (sp_line[1] == "4")
|
|
{
|
|
SequenceNo = sp_line[2].Split(':')[0];
|
|
|
|
string ErrorMsg = "";
|
|
string ErrorMsgCarpet = "";
|
|
LocalDBService db = null;
|
|
try
|
|
{
|
|
db = new LocalDBService();
|
|
db.BeginTrans();
|
|
|
|
Entity_t_AJIS t_AJIS = new Entity_t_AJIS(db);
|
|
Entity_t_AJISCarpet t_AJISCarpet = new Entity_t_AJISCarpet(db);
|
|
|
|
Entity_t_PJIS t_PJIS = new Entity_t_PJIS();
|
|
Entity_t_PJISCarpet t_PJISCarpet = new Entity_t_PJISCarpet();
|
|
|
|
DataTable dtPJIS = t_PJIS.GetData($"[ProductionNo]='{ProductionNo}'").Tables[0];
|
|
if (dtPJIS.Rows.Count == 0)
|
|
{
|
|
ErrorMsg += $"{ProductionNo} 未找到门板PJIS,请检查数据\r\n";
|
|
}
|
|
else
|
|
{
|
|
if (Convert.ToBoolean(dtPJIS.Rows[0]["IsError"]))
|
|
{
|
|
ErrorMsg += $"{ProductionNo} 门板PJIS有错误未处理,请检查并处理";
|
|
}
|
|
}
|
|
|
|
|
|
|
|
DataTable dtPJISCarpet = t_PJISCarpet.GetData($"[ProductionNo]='{ProductionNo}'").Tables[0];
|
|
if (dtPJISCarpet.Rows.Count == 0)
|
|
{
|
|
ErrorMsgCarpet += $"{ProductionNo} 未找到地毯PJIS,请检查数据\r\n";
|
|
}
|
|
else
|
|
{
|
|
if (Convert.ToBoolean(dtPJISCarpet.Rows[0]["IsError"]))
|
|
{
|
|
ErrorMsgCarpet += $"{ProductionNo} 地毯PJIS有错误未处理,请检查并处理\r\n";
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
DataTable dtAJIS = t_AJIS.GetData($"[ProductionNo]='{ProductionNo}'").Tables[0];
|
|
if (dtAJIS.Rows.Count > 0)
|
|
{
|
|
|
|
if( Convert.ToDateTime( GetDateTime( dtAJIS.Rows[0]["MessageDateTime"].ToString().Replace(":", ""), ServerDateTimeType.DateTime))
|
|
< Convert.ToDateTime(GetDateTime( MessageDateTime.Replace(":", ""), ServerDateTimeType.DateTime)))
|
|
{
|
|
if (Convert.ToBoolean(dtAJIS.Rows[0]["IsPost"])) throw new Exception($"{ProductionNo}已经打印序列单,不能覆盖");
|
|
t_AJIS.Del(dtAJIS.Rows[0]);
|
|
}
|
|
else
|
|
{
|
|
return;
|
|
}
|
|
|
|
|
|
}
|
|
|
|
DataTable dtAJISCarpet = t_AJISCarpet.GetData($"[ProductionNo]='{ProductionNo}'").Tables[0];
|
|
if (dtAJISCarpet.Rows.Count > 0)
|
|
{
|
|
if (Convert.ToDateTime(GetDateTime(dtAJISCarpet.Rows[0]["MessageDateTime"].ToString().Replace(":", ""), ServerDateTimeType.DateTime))
|
|
< Convert.ToDateTime(GetDateTime(MessageDateTime.Replace(":", ""), ServerDateTimeType.DateTime)))
|
|
{
|
|
|
|
if (Convert.ToBoolean(dtAJISCarpet.Rows[0]["IsPost"])) throw new Exception($"{SequenceNo}已经打印序列单,不能覆盖");
|
|
t_AJISCarpet.Del(dtAJISCarpet.Rows[0]);
|
|
|
|
}
|
|
}
|
|
|
|
DataRow drAJIS = t_AJIS.Table.NewRow();
|
|
drAJIS["MessageDateTime"] = MessageDateTime;
|
|
drAJIS["ProductionNo"] = ProductionNo;
|
|
drAJIS["SequenceNo"] = SequenceNo;
|
|
drAJIS["ArrivalDateTime"] = ArrivalDateTime;
|
|
drAJIS["FileName"] = filename;
|
|
drAJIS["UNH"] = UNH;
|
|
drAJIS["type"] = dtPJIS.Rows.Count > 0 ? dtPJIS.Rows[0]["type"].ToString() : "";
|
|
drAJIS["code"] = dtPJIS.Rows.Count > 0 ? dtPJIS.Rows[0]["code"].ToString() : "";
|
|
drAJIS["FLProdNo"] = dtPJIS.Rows.Count > 0 ? dtPJIS.Rows[0]["FLProdNo"].ToString() : "";
|
|
drAJIS["FRProdNo"] = dtPJIS.Rows.Count > 0 ? dtPJIS.Rows[0]["FRProdNo"].ToString() : "";
|
|
drAJIS["RLProdNo"] = dtPJIS.Rows.Count > 0 ? dtPJIS.Rows[0]["RLProdNo"].ToString() : "";
|
|
drAJIS["RRProdNo"] = dtPJIS.Rows.Count > 0 ? dtPJIS.Rows[0]["RRProdNo"].ToString() : "";
|
|
drAJIS["AssemblyLine"] = dtPJIS.Rows.Count > 0 ? dtPJIS.Rows[0]["AssemblyLine"].ToString() : "";
|
|
drAJIS["Baumuster"] = dtPJIS.Rows.Count > 0 ? dtPJIS.Rows[0]["Baumuster"].ToString() : "";
|
|
drAJIS["Location"] = dtPJIS.Rows.Count > 0 ? dtPJIS.Rows[0]["Location"].ToString() : "";
|
|
drAJIS["Address"] = Address;
|
|
if (ErrorMsg != "")
|
|
{
|
|
drAJIS["IsError"] = true;
|
|
drAJIS["ErrorMsg"] = ErrorMsg;
|
|
}
|
|
t_AJIS.Add(drAJIS);
|
|
|
|
DataRow drAJISCarpet = t_AJISCarpet.Table.NewRow();
|
|
drAJISCarpet["MessageDateTime"] = MessageDateTime;
|
|
drAJISCarpet["ProductionNo"] = ProductionNo;
|
|
drAJISCarpet["SequenceNo"] = SequenceNo;
|
|
drAJISCarpet["ArrivalDateTime"] = ArrivalDateTime;
|
|
drAJISCarpet["FileName"] = filename;
|
|
drAJISCarpet["UNH"] = UNH;
|
|
drAJISCarpet["moduno"] = dtPJISCarpet.Rows.Count > 0 ? dtPJISCarpet.Rows[0]["moduno"].ToString() : "";
|
|
drAJISCarpet["AssemblyLine"] = dtPJISCarpet.Rows.Count > 0 ? dtPJISCarpet.Rows[0]["AssemblyLine"].ToString() : "";
|
|
drAJISCarpet["Baumuster"] = dtPJISCarpet.Rows.Count > 0 ? dtPJISCarpet.Rows[0]["Baumuster"].ToString() : "";
|
|
drAJISCarpet["Location"] = dtPJISCarpet.Rows.Count > 0 ? dtPJISCarpet.Rows[0]["Location"].ToString() : "";
|
|
drAJISCarpet["Address"] = Address;
|
|
if (ErrorMsg != "")
|
|
{
|
|
drAJISCarpet["IsError"] = true;
|
|
drAJISCarpet["ErrorMsg"] = ErrorMsgCarpet;
|
|
}
|
|
t_AJISCarpet.Add(drAJISCarpet);
|
|
|
|
//写接口
|
|
if (ErrorMsg == "")
|
|
{
|
|
Entity_byAJISToMES byAJISToMES = new Entity_byAJISToMES();
|
|
DataRow drbyAJISToMES = byAJISToMES.Table.NewRow();
|
|
drbyAJISToMES["ProductionNo"] = ProductionNo;
|
|
drbyAJISToMES["SequenceNo"] = SequenceNo;
|
|
drbyAJISToMES["FLProdNo"] = dtPJIS.Rows[0]["FLProdNo"].ToString();
|
|
drbyAJISToMES["FRProdNo"] = dtPJIS.Rows[0]["FRProdNo"].ToString();
|
|
drbyAJISToMES["RLProdNo"] = dtPJIS.Rows[0]["RLProdNo"].ToString();
|
|
drbyAJISToMES["RRProdNo"] = dtPJIS.Rows[0]["RRProdNo"].ToString();
|
|
byAJISToMES.Add(drbyAJISToMES);
|
|
}
|
|
|
|
|
|
db.Commit();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
if (db != null) db.Rollback();
|
|
throw ex;
|
|
}
|
|
finally
|
|
{
|
|
if (db != null) db.EndTrans();
|
|
}
|
|
|
|
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
//处理预测Delfor
|
|
public static void ProcessDELFOR(string[] sp_text, string filename)
|
|
{
|
|
Entity_t_DELFOR t_DELFOR = new Entity_t_DELFOR();
|
|
Entity_t_DELFOR_All t_DELFOR_All = new Entity_t_DELFOR_All();
|
|
Entity_t_ModunoABase t_ModunoABase = new Entity_t_ModunoABase();
|
|
|
|
string SupplierID = "";
|
|
string Address = "";
|
|
string CalloffNumber = "";
|
|
string CalloffDate = "";
|
|
string CalloffNumberOld = "";
|
|
string CalloffDateOld = "";
|
|
string OrderNumber = "";
|
|
string LastDeliveryNoteNumber = "";
|
|
string LastDeliveryNoteDate = "";
|
|
string LastDeliveryNoteQuantity = "0";
|
|
string CumQtyReceive = "0";
|
|
string TransmissionNumber = "";
|
|
string Storage = "";
|
|
string Plant = "";
|
|
string Dock = "";
|
|
string PartNumber = "";
|
|
string PartDescription = "";
|
|
string Status = "";
|
|
string Rate = "";
|
|
string Quantity = "0";
|
|
string StartDate = "";
|
|
string EndDate = "";
|
|
|
|
bool IsGetCallOffOld = false;
|
|
|
|
#region 解析数据字段
|
|
foreach (string line_text in sp_text)
|
|
{
|
|
if (line_text.Trim() == "") continue;
|
|
string[] sp_line = line_text.Split('+');
|
|
|
|
if (sp_line[0] == "UNH")
|
|
{
|
|
TransmissionNumber = sp_line[1];
|
|
}
|
|
|
|
if (sp_line[0] == "NAD")
|
|
{
|
|
if (sp_line[1] == "SE") SupplierID = sp_line[2].Split(':')[0];
|
|
}
|
|
|
|
if (sp_line[0] == "NAD")
|
|
{
|
|
if (sp_line[1] == "BY") Address = sp_line[2].Split(':')[0];
|
|
}
|
|
|
|
if (sp_line[0] == "RFF")
|
|
{
|
|
if (sp_line[1].Split(':')[0] == "AAN") CalloffNumber = sp_line[1].Split(':')[1];
|
|
}
|
|
|
|
if (sp_line[0] == "UNB")
|
|
{
|
|
CalloffDate = sp_line[4].Split(':')[0];
|
|
}
|
|
|
|
if (sp_line[0] == "RFF")
|
|
{
|
|
if (sp_line[1].Split(':')[0] == "AIF")
|
|
{
|
|
CalloffNumberOld = "";
|
|
if (sp_line[1].Split(':').Length >= 2)
|
|
{
|
|
CalloffNumberOld = sp_line[1].Split(':')[1];
|
|
}
|
|
}
|
|
}
|
|
|
|
if (sp_line[0] == "RFF")
|
|
{
|
|
if (sp_line[1].Split(':')[0] == "ON")
|
|
{
|
|
OrderNumber = sp_line[1].Split(':')[1];
|
|
|
|
|
|
//删除原来的数据
|
|
t_DELFOR.Del($"[Address]='{Address}' and [Plant]='{Plant}' and [PartNumber]='{PartNumber}' and [Dock]='{Dock}'");
|
|
}
|
|
}
|
|
|
|
if (sp_line[0] == "RFF")
|
|
{
|
|
if (sp_line[1].Split(':')[0] == "AAK") LastDeliveryNoteNumber = sp_line[1].Split(':')[1];
|
|
}
|
|
|
|
if (sp_line[0] == "DTM")
|
|
{
|
|
if (sp_line[1].Split(':')[0] == "11") LastDeliveryNoteDate = sp_line[1].Split(':')[1];
|
|
}
|
|
|
|
if (sp_line[0] == "QTY")
|
|
{
|
|
if (sp_line[1].Split(':')[0] == "12") LastDeliveryNoteQuantity = sp_line[1].Split(':')[1];
|
|
}
|
|
|
|
if (sp_line[0] == "QTY")
|
|
{
|
|
if (sp_line[1].Split(':')[0] == "70") CumQtyReceive = sp_line[1].Split(':')[1];
|
|
}
|
|
|
|
if (sp_line[0] == "LOC")
|
|
{
|
|
if (sp_line[1] == "159")
|
|
{
|
|
Storage = sp_line[2].Split(':')[0];
|
|
|
|
}
|
|
}
|
|
|
|
if (sp_line[0] == "NAD")
|
|
{
|
|
if (sp_line[1] == "ST") Plant = sp_line[2].Split(':')[0];
|
|
}
|
|
|
|
if (sp_line[0] == "LOC")
|
|
{
|
|
if (sp_line[1] == "11")
|
|
{
|
|
Dock = sp_line[2].Split(':')[0];
|
|
|
|
|
|
}
|
|
}
|
|
|
|
if (sp_line[0] == "LIN")
|
|
{
|
|
PartNumber = sp_line[3].Split(':')[0];
|
|
PartDescription = ""; //取描述
|
|
DataTable dt = t_ModunoABase.GetData($"[moduno]='{PartNumber}'").Tables[0];
|
|
if (dt.Rows.Count > 0) PartDescription = dt.Rows[0]["Description"].ToString();
|
|
|
|
}
|
|
|
|
if (sp_line[0] == "QTY")
|
|
{
|
|
string[] sp_qty = sp_line[1].Split(':');
|
|
if (sp_qty[0] == "113") Quantity = sp_qty[1];
|
|
}
|
|
|
|
|
|
if (sp_line[0] == "SCC")
|
|
{
|
|
//inforamtion = (sp_line.Length >= 2 ? sp_line[1] : "") + " " + (sp_line.Length >= 4 ? sp_line[3] : "");
|
|
|
|
Status = "";
|
|
Rate = "";
|
|
|
|
if (sp_line.Length >= 2) Status = sp_line[1];
|
|
if (sp_line.Length >= 4) Rate = sp_line[3];
|
|
|
|
}
|
|
|
|
if (sp_line[0] == "DTM")
|
|
{
|
|
string[] sp_time = sp_line[1].Split(':');
|
|
if (sp_time[0] == "2") StartDate = sp_time[1]; //单独要货日期
|
|
if (sp_time[0] == "191") StartDate = sp_time[1]; //单独要货日期
|
|
|
|
if (sp_time[0] == "158") StartDate = sp_time[1]; //按时间段要货
|
|
if (sp_time[0] == "159") EndDate = sp_time[1]; //按时间段要货
|
|
|
|
if (sp_time[0] == "194") StartDate = sp_time[1]; //按时间段要货
|
|
if (sp_time[0] == "206") EndDate = sp_time[1]; //按时间段要货
|
|
|
|
//DTM + 2 '要货日期
|
|
//DTM + 158 '开始日期
|
|
//DTM + 159 '结束日期
|
|
//DTM + 191 '要货日期
|
|
//DTM + 194 '开始日期
|
|
//DTM + 206 '结束日期
|
|
//DTM + 323 '从第多少周到多少周 201905-201915 //2019第05周到2019第15周 先不用
|
|
|
|
if (sp_time[0] == "2" || sp_time[0] == "191" || sp_time[0] == "159" || sp_time[0] == "206")
|
|
{
|
|
if (sp_time[0] == "2") EndDate = "";
|
|
if (sp_time[0] == "191") EndDate = "";
|
|
|
|
if (StartDate.Trim() == "") continue;
|
|
|
|
|
|
if (!IsGetCallOffOld)
|
|
{
|
|
//取上一个版本的日期
|
|
|
|
DataTable dtLast = t_DELFOR_All.GetData("top 1 CalloffDate", $"[Address]='{Address}' and [Plant]='{Plant}' and [PartNumber]='{PartNumber}' and [Dock]='{Dock}' and [CalloffNumber]<='{CalloffNumber}'", "[CalloffNumber] desc").Tables[0];
|
|
if (dtLast.Rows.Count > 0)
|
|
{
|
|
if (dtLast.Rows[0]["CalloffDate"] != DBNull.Value)
|
|
{
|
|
CalloffDateOld = Convert.ToDateTime(dtLast.Rows[0]["CalloffDate"]).ToString("yyyy-MM-dd");
|
|
}
|
|
}
|
|
|
|
IsGetCallOffOld = true;
|
|
}
|
|
|
|
DataRow drNew = t_DELFOR.Table.NewRow();
|
|
drNew["SupplierID"] = SupplierID;
|
|
drNew["Address"] = Address;
|
|
drNew["CalloffNumber"] = CalloffNumber;
|
|
drNew["CalloffDate"] = GetDateTime(CalloffDate, ServerDateTimeType.Date);
|
|
drNew["CalloffNumberOld"] = CalloffNumberOld;
|
|
if(CalloffDateOld != "") drNew["CalloffDateOld"] = CalloffDateOld;
|
|
drNew["OrderNumber"] = OrderNumber;
|
|
drNew["LastDeliveryNoteNumber"] = LastDeliveryNoteNumber;
|
|
if(LastDeliveryNoteDate != "") drNew["LastDeliveryNoteDate"] = GetDateTime(LastDeliveryNoteDate, ServerDateTimeType.Date);
|
|
drNew["LastDeliveryNoteQuantity"] = LastDeliveryNoteQuantity;
|
|
drNew["CumQtyReceive"] = CumQtyReceive;
|
|
drNew["TransmissionNumber"] = TransmissionNumber;
|
|
drNew["Storage"] = Storage;
|
|
drNew["Plant"] = Plant;
|
|
drNew["Dock"] = Dock;
|
|
drNew["PartNumber"] = PartNumber;
|
|
drNew["PartDescription"] = PartDescription;
|
|
drNew["Quantity"] = Quantity;
|
|
drNew["StartDate"] = GetDateTime(StartDate, ServerDateTimeType.Date);
|
|
if (EndDate != "") drNew["EndDate"] = GetDateTime(EndDate, ServerDateTimeType.Date);
|
|
drNew["Status"] = Status;
|
|
drNew["Rate"] = Rate;
|
|
drNew["filename"] = filename;
|
|
t_DELFOR.Add(drNew);
|
|
|
|
|
|
DataRow drNewAll = t_DELFOR_All.Table.NewRow();
|
|
drNewAll["SupplierID"] = SupplierID;
|
|
drNewAll["Address"] = Address;
|
|
drNewAll["CalloffNumber"] = CalloffNumber;
|
|
drNewAll["CalloffDate"] = GetDateTime(CalloffDate, ServerDateTimeType.Date);
|
|
drNewAll["CalloffNumberOld"] = CalloffNumberOld;
|
|
if (CalloffDateOld != "") drNewAll["CalloffDateOld"] = CalloffDateOld;
|
|
drNewAll["OrderNumber"] = OrderNumber;
|
|
drNewAll["LastDeliveryNoteNumber"] = LastDeliveryNoteNumber;
|
|
if (LastDeliveryNoteDate != "") drNewAll["LastDeliveryNoteDate"] = GetDateTime(LastDeliveryNoteDate, ServerDateTimeType.Date);
|
|
drNewAll["LastDeliveryNoteQuantity"] = LastDeliveryNoteQuantity;
|
|
drNewAll["CumQtyReceive"] = CumQtyReceive;
|
|
drNewAll["TransmissionNumber"] = TransmissionNumber;
|
|
drNewAll["Storage"] = Storage;
|
|
drNewAll["Plant"] = Plant;
|
|
drNewAll["Dock"] = Dock;
|
|
drNewAll["PartNumber"] = PartNumber;
|
|
drNewAll["PartDescription"] = PartDescription;
|
|
drNewAll["Quantity"] = Quantity;
|
|
drNewAll["StartDate"] = GetDateTime(StartDate, ServerDateTimeType.Date);
|
|
if (EndDate != "") drNewAll["EndDate"] = GetDateTime(EndDate, ServerDateTimeType.Date);
|
|
drNewAll["Status"] = Status;
|
|
drNewAll["Rate"] = Rate;
|
|
drNew["filename"] = filename;
|
|
t_DELFOR_All.Add(drNewAll);
|
|
|
|
}
|
|
|
|
}
|
|
}
|
|
#endregion
|
|
|
|
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
|
#region 私有函数
|
|
|
|
private static void MoveFile(FileInfo file, string MovePath)
|
|
{
|
|
//string filename1 = Path_Receive_YZ + "\\" + file.Name;
|
|
string filename1 = file.FullName;
|
|
string filename2 = MovePath + "\\" + file.Name;
|
|
|
|
try
|
|
{
|
|
if (File.Exists(filename2)) File.Delete(filename2);
|
|
File.Move(filename1, filename2);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MyLogger.Write("移动文件错误 " + filename1 + "->" + filename2 + ",原因为:" + ex.Message);
|
|
}
|
|
}
|
|
|
|
private static void MoveFile(FileInfo file, string MovePath, string NewName)
|
|
{
|
|
//string filename1 = Path_Receive_YZ + "\\" + file.Name;
|
|
string filename1 = file.FullName;
|
|
string filename2 = MovePath + "\\" + NewName + file.Name;
|
|
|
|
try
|
|
{
|
|
if (File.Exists(filename2)) File.Delete(filename2);
|
|
File.Move(filename1, filename2);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
MyLogger.Write("移动文件错误 " + filename1 + "->" + filename2 + ",原因为:" + ex.Message);
|
|
}
|
|
}
|
|
|
|
private static string IsFileOK(string[] sp_text, string filename)
|
|
{
|
|
if (sp_text[0].Substring(0, 3) != "UNA") throw new Exception(filename + " 不以UNA开头");
|
|
if (sp_text[sp_text.Length - 2].Substring(0, 3) != "UNZ") throw new Exception(filename + " 不以UNZ结尾");
|
|
if (sp_text[sp_text.Length - 3].Substring(0, 3) != "UNT") throw new Exception(filename + " 未找到UNT");
|
|
|
|
//int segment_count = Convert.ToInt32(sp_text[sp_text.Length - 3].Split('+')[1]);
|
|
//if (segment_count != sp_text.Length - 4) throw new Exception(filename + " 段数不正确");
|
|
|
|
string BGM = sp_text[3];
|
|
if (BGM.Substring(0, 3) != "BGM") throw new Exception(filename + " 未找到BGM");
|
|
|
|
if (BGM.IndexOf("+241+") >= 0) return "241-DELFOR";
|
|
if (BGM.IndexOf("+307:") >= 0)
|
|
{
|
|
if (BGM.IndexOf("JSP") >= 0) return "307-JSP";
|
|
if (BGM.IndexOf("JSA") >= 0) return "307-JSA";
|
|
}
|
|
|
|
return "";
|
|
|
|
}
|
|
|
|
private static string GetDateTime(string sDateTime, ServerDateTimeType dType)
|
|
{
|
|
if (sDateTime.Length != 6 &&
|
|
sDateTime.Length != 8 &&
|
|
sDateTime.Length != 10 &&
|
|
sDateTime.Length != 12 &&
|
|
sDateTime.Length != 14)
|
|
throw new Exception("[" + sDateTime + "]日期时间格式错误!");
|
|
|
|
string Result = "";
|
|
|
|
string year = "";
|
|
string month = "";
|
|
string day = "";
|
|
|
|
string h = "";
|
|
string m = "";
|
|
string s = "";
|
|
string mi = "0";
|
|
|
|
if (sDateTime.Length == 6)
|
|
{
|
|
year = "20" + sDateTime.Substring(0, 2);
|
|
month = sDateTime.Substring(2, 2);
|
|
day = sDateTime.Substring(4, 2);
|
|
|
|
h = "0";
|
|
m = "0";
|
|
s = "0";
|
|
mi = "0";
|
|
}
|
|
else
|
|
{
|
|
|
|
if (sDateTime.Length == 10)
|
|
{
|
|
|
|
year = "20" + sDateTime.Substring(0, 2);
|
|
month = sDateTime.Substring(2, 2);
|
|
day = sDateTime.Substring(4, 2);
|
|
|
|
h = sDateTime.Substring(6, 2);
|
|
m = sDateTime.Substring(8, 2);
|
|
s = "0";
|
|
}
|
|
else
|
|
{
|
|
year = sDateTime.Substring(0, 4);
|
|
month = sDateTime.Substring(4, 2);
|
|
day = sDateTime.Substring(6, 2);
|
|
|
|
h = sDateTime.Length != 8 ? sDateTime.Substring(8, 2) : "0";
|
|
m = sDateTime.Length != 8 ? sDateTime.Substring(10, 2) : "0";
|
|
s = sDateTime.Length != 8 ? (sDateTime.Length == 14 ? sDateTime.Substring(12, 2) : "0") : "0";
|
|
mi = "0";
|
|
|
|
}
|
|
}
|
|
|
|
if (month.Length == 1) month = "0" + month;
|
|
if (day.Length == 1) day = "0" + day;
|
|
if (h.Length == 1) h = "0" + h;
|
|
if (m.Length == 1) m = "0" + m;
|
|
if (s.Length == 1) s = "0" + s;
|
|
if (mi.Length == 1) mi = "00" + mi;
|
|
if (mi.Length == 2) mi = "0" + mi;
|
|
|
|
if (dType == ServerDateTimeType.DateTime)
|
|
{
|
|
Result = year + "-" + month + "-" + day + " " + h + ":" + m + ":" + s;
|
|
}
|
|
|
|
if (dType == ServerDateTimeType.Date)
|
|
{
|
|
Result = year + "-" + month + "-" + day;
|
|
}
|
|
|
|
if (dType == ServerDateTimeType.Time)
|
|
{
|
|
Result = h + ":" + m + ":" + s;
|
|
}
|
|
|
|
if (dType == ServerDateTimeType.Batch)
|
|
{
|
|
Result = year.Substring(2, 2) + month + day;
|
|
}
|
|
|
|
if (dType == ServerDateTimeType.BillNo)
|
|
{
|
|
Result = year + month + day + h + m + s + mi;
|
|
}
|
|
|
|
return Result;
|
|
}
|
|
|
|
#endregion
|
|
|
|
#region 判断文件是否被占用
|
|
|
|
[DllImport("kernel32.dll")]
|
|
private static extern IntPtr _lopen(string lpPathName, int iReadWrite);
|
|
|
|
[DllImport("kernel32.dll")]
|
|
private static extern bool CloseHandle(IntPtr hObject);
|
|
|
|
|
|
|
|
private static bool IsUseFile(string filename)
|
|
{
|
|
const int OF_READWRITE = 2;
|
|
const int OF_SHARE_DENY_NONE = 0x40;
|
|
IntPtr HFILE_ERROR = new IntPtr(-1);
|
|
|
|
if (!File.Exists(filename)) throw new Exception(filename + " 文件不存在");
|
|
|
|
IntPtr vHandle = _lopen(filename, OF_READWRITE | OF_SHARE_DENY_NONE);
|
|
if (vHandle == HFILE_ERROR)
|
|
{
|
|
return true;
|
|
}
|
|
CloseHandle(vHandle);
|
|
return false;
|
|
}
|
|
|
|
#endregion
|
|
|
|
}
|
|
|
|
#region 其他类
|
|
|
|
public enum ServerDateTimeType
|
|
{
|
|
DateTime = 1,
|
|
Date = 2,
|
|
Date2 = 6,
|
|
Date3 = 13,
|
|
Time = 3,
|
|
Time1 = 10,
|
|
Time2 = 11,
|
|
Time3 = 12, //10:02
|
|
Batch = 4,
|
|
BillNo = 5,
|
|
DateTime1 = 6, //01.02.2014
|
|
DateTime2 = 7, //01.02.2014 06.07s
|
|
DateTime3 = 9, //2014-01-20 18:50
|
|
YearMonth = 8,
|
|
}
|
|
|
|
public class PlannedLine
|
|
{
|
|
public string MessageDateTime = "";
|
|
public string ProductionNo = "";
|
|
public string SequenceNo = "";
|
|
public string AssemblyLine = "";
|
|
public string Location = "";
|
|
public string DeliveryDateTime = "";
|
|
public List<PlannedLineCode> lst_plannedLineCode;
|
|
public DataRow drOptionBOM;
|
|
public string AdColor;
|
|
public string AgColor;
|
|
public int isalter = 0;
|
|
public string Baumuster;
|
|
public string UNH;
|
|
public string DemandDate;
|
|
public string Code;
|
|
public string moduno;
|
|
public string Address;
|
|
public string ErrorMessage = "";
|
|
public bool IsCarpet = false; //是否地毯
|
|
}
|
|
|
|
public class PlannedLineCode
|
|
{
|
|
public string Code;
|
|
public string Value;
|
|
}
|
|
|
|
public class ModunoABase
|
|
{
|
|
public string cartype;
|
|
public string moduno;
|
|
}
|
|
|
|
public class PlanedItem
|
|
{
|
|
public string Address;
|
|
public string CarType;
|
|
public string ProductionNo;
|
|
public string SequenceNo;
|
|
public string PartNumber;
|
|
public string Qty;
|
|
public string DelveryDate;
|
|
|
|
}
|
|
|
|
public class MatchObject
|
|
{
|
|
public List<PlannedLine> lines;
|
|
public List<PlanedItem> items;
|
|
}
|
|
|
|
public class PlanedProductionNo
|
|
{
|
|
public string Address;
|
|
public string ProductionNo;
|
|
|
|
}
|
|
|
|
#endregion
|
|
|
|
|
|
}
|
|
|