using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;
using CsvHelper;
using CsvHelper.Configuration;
using HH.WCS.Mobox3.RiDong.generalMethod;
using HH.WCS.Mobox3.RiDong.models;
namespace HH.WCS.Mobox3.RiDong.util;
///
/// System.IO.Directory类帮助方法类
///
public static class DirectoryHelper
{
///
/// 获取指定路径内的文件
///
public static void GainData()
{
string folderPath = "D:\\FTP\\AS400";
// string folderPath = "C:\\ftp\\AS400";
// string folderPath = "D:\\Work Tools\\Project Files\\Studio Projects Files\\日东项目\\ftp\\AS400";
if (!Directory.Exists(folderPath))
{
Console.WriteLine($"指定的文件夹 {folderPath} 不存在。");
return;
}
bool delete = false;
string[] files = Directory.GetFiles(folderPath, "*.csv");
foreach (string file in files)
{
// 读取处理文件
ProcessCsvFile(file, ref delete);
// 删除文件
if (delete)
{
File.Delete(file);
}
}
}
///
/// 读取数据并进行处理
///
///
///
private static void ProcessCsvFile(string filePath, ref bool delete)
{
var fileName = Path.GetFileName(filePath);
var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
//Delimiter = ";", // 自定义分隔符
IgnoreBlankLines = true, // 忽略空行
AllowComments = true, // 允许注释行
BadDataFound = null,
HasHeaderRecord = false
};
try
{
using (var reader = new StreamReader(filePath))
using (var csv = new CsvReader(reader, config))
{
if (fileName.StartsWith("MO"))
{
// LogHelper.Info($"ftp文件读取{fileName}");
List materialOuts = new List();
while (csv.Read())
{
// if (csv.GetField(100) == "")
// {
MaterialOut materialOut = new MaterialOut
{
S_TRANSACTION = csv.GetField(0),
S_TRAN_SUB_SEQ = csv.GetField(1),
S_TRANSACTION_TYPE = csv.GetField(2),
S_SO = csv.GetField(3),
S_ORDER_LINE = csv.GetField(4),
S_END_USER = csv.GetField(5),
S_INT_ITEM_CODE = csv.GetField(6),
S_INT_PRODUCT_CODE = csv.GetField(7),
S_COLOR_CODE = csv.GetField(8),
S_WAREHOUSE_CODE = csv.GetField(9),
S_STORE = csv.GetField(10),
S_LOT = csv.GetField(11),
S_LOR_QUANTITYOT = csv.GetField(12),
D_CREATION_DATE = csv.GetField(13),
// T_CREATION_TIME = csv.GetField(14),
S_USER_NAME = csv.GetField(15),
S_ORIG_TRANSACTION = csv.GetField(16),
D_RESULT_DATE = csv.GetField(17),
// T_RESULT_TIME = csv.GetField(18),
S_WMST = csv.GetField(19),
S_ACTUAL_QUANTITY = csv.GetField(20),
D_COMPLETE_DATE = csv.GetField(21),
// T_COMPLETE_TIME = csv.GetField(22)
};
if (AdoSqlMethod.QueryCount(p =>
p.S_TRANSACTION == materialOut.S_TRANSACTION) == 0)
{
var first = materialOuts.FirstOrDefault(p =>
p.S_TRANSACTION == materialOut.S_TRANSACTION &&
p.S_LOT == materialOut.S_LOT &&
p.S_INT_PRODUCT_CODE == materialOut.S_INT_PRODUCT_CODE);
if (first != null)
{
first.S_LOR_QUANTITYOT += materialOut.S_LOR_QUANTITYOT;
}
else
{
materialOuts.Add(materialOut);
}
}
if (materialOut.S_TRANSACTION_TYPE == 211)
{
var outboundOrder = AdoSqlMethod.QueryFirst(p=>p.S_NO == materialOut.S_TRANSACTION && p.N_B_STATE == 0);
if (outboundOrder != null)
{
// 修改为取消,重新写方法
if (AdoSqlMethod.UpdateFirstOutBoundStart(outboundOrder,
$"update TN_Outbound_Order SET N_B_STATE = 5, SET FTP_CANCEL = 'Y' WHERE N_B_STATE = 0 and S_NO = {materialOut.S_TRANSACTION}"))
{
// 修改成功
}
else
{
// 修改失败
AdoSqlMethod.UpdateFirstOutBoundStart(outboundOrder,
$"update TN_Outbound_Order SET FTP_CANCEL = 'N' WHERE S_NO = {materialOut.S_TRANSACTION}");
}
}
}
// }
}
if(materialOuts.Count > 0)
// 将数据添加进数据库中,然后对于的数据需要生成任务
AdoSqlMethod.AddList(materialOuts);
// 写入领用单(要过滤的,用文件名当作单号,已经处理的不要重复处理,正常情况下处理完就删除了,测试时候关闭自动删除)
delete = true;
}
else if (fileName.StartsWith("DO"))
{
List doOuts = new List();
while (csv.Read())
{
// if (csv.GetField(100) == "")
// {
DoOut doOut = new DoOut
{
S_TRANSACTION = csv.GetField(0),
S_TRAN_SUB_SEQ = csv.GetField(1),
S_TRANSACTION_TYPE = csv.GetField(2),
S_SO = csv.GetField(3),
S_ORDER_LINE = csv.GetField(4),
S_END_USER = csv.GetField(5),
S_INT_ITEM_CODE = csv.GetField(6),
S_INT_PRODUCT_CODE = csv.GetField(7),
S_COLOR_CODE = csv.GetField(8),
S_WAREHOUSE_CODE = csv.GetField(9),
S_STORE = csv.GetField(10),
S_LOT = csv.GetField(11),
S_LOR_QUANTITYOT = csv.GetField(12),
S_PRODUCT_SIGN = csv.GetField(13),
D_CREATION_DATE = csv.GetField(14),
// T_CREATION_TIME = csv.GetField(15),
D_SEND_DATE = csv.GetField(16),
// T_SEND_TIME = csv.GetField(17),
S_USER_NAME = csv.GetField(18),
S_ORIG_TRANSACTION = csv.GetField(19),
D_RESULT_DATE = csv.GetField(20),
// T_RESULT_TIME = csv.GetField(21),
S_WMST = csv.GetField(22),
S_ACTUAL_QUANTITY = csv.GetField(23),
D_COMPLETE_DATE = csv.GetField(24),
// T_COMPLETE_TIME = csv.GetField(25),
};
if (AdoSqlMethod.QueryCount(p =>
p.S_TRANSACTION == doOut.S_TRANSACTION) == 0 && doOut.S_TRANSACTION_TYPE == 210)
{
var first = doOuts.FirstOrDefault(p =>
p.S_TRANSACTION == doOut.S_TRANSACTION && p.S_LOT == doOut.S_LOT &&
p.S_INT_PRODUCT_CODE == doOut.S_INT_PRODUCT_CODE && p.S_SO == doOut.S_SO);
if (first != null)
{
first.S_LOR_QUANTITYOT += doOut.S_LOR_QUANTITYOT;
}
else
{
doOuts.Add(doOut);
}
}
if (doOut.S_TRANSACTION_TYPE == 211)
{
var outboundOrder = AdoSqlMethod.QueryFirst(p=>p.S_NO == doOut.S_TRANSACTION && p.N_B_STATE == 0);
if (outboundOrder != null)
{
// 修改为取消,重新写方法
if (AdoSqlMethod.UpdateFirstOutBoundStart(outboundOrder,
$"update TN_Outbound_Order SET N_B_STATE = 5, SET FTP_CANCEL = 'Y' WHERE N_B_STATE = 0 and S_NO = {doOut.S_TRANSACTION}"))
{
// 修改成功
}
else
{
// 修改失败
AdoSqlMethod.UpdateFirstOutBoundStart(outboundOrder,
$"update TN_Outbound_Order SET FTP_CANCEL = 'N' WHERE S_NO = {doOut.S_TRANSACTION}");
}
}
}
// }
}
if (doOuts.Count > 0)
{
// 将数据添加进数据库中,然后对于的数据需要生成任务
AdoSqlMethod.AddList(doOuts);
}
// 任务生成成功,打标记,然后将文件进行删除
// 写入出库单
delete = true;
}
else if (fileName.StartsWith("PRD"))
{
List tnMaterials = new List();
while (csv.Read())
{
var type = csv.GetField(19);
var type2 = "";
if (type == "C")
{
type2 = "制品";
}
else if (type == "R")
{
type2 = "原料";
}
var tnMaterial = new TN_Material()
{
// 规格编码
S_MATERIAL_CODE = csv.GetField(4),
// 物料编码
S_ITEM_CODE = csv.GetField(0),
// 规格
S_MATERIAL = csv.GetField(5),
S_MATERIAL_TYPE = type2,
// F_WEIGHT = item.WEIGHT,
};
if (AdoSqlMethod.QueryCount(p => p.S_ITEM_CODE == tnMaterial.S_ITEM_CODE) == 0)
{
// AdoSqlMethod- .QueryFirst(p=>p.INTERNAL_ITEM_CODE == tnMaterial.INTERNAL_ITEM_CODE);
tnMaterials.Add(tnMaterial);
}
}
// 将数据添加进数据库中
AdoSqlMethod.AddList(tnMaterials);
// 任务生成成功,打标记,然后将文件进行删除
// 写入出库单
delete = true;
}
else if (fileName.StartsWith("ITM"))
{
int readNumber = 0;
int updateNumber = 0;
while (csv.Read())
{
readNumber++;
var INTERNAL_ITEM_CODE = csv.GetField(2);
var tnMaterials = AdoSqlMethod.QueryList(p =>
p.S_MATERIAL_CODE == INTERNAL_ITEM_CODE);
string name = csv.GetField(0);
if (tnMaterials.Count > 0)
{
foreach (var tnMaterial in tnMaterials)
{
tnMaterial.S_ITEM_NAME = name;
}
AdoSqlMethod.UpdateList(tnMaterials, p => new { p.S_ITEM_NAME });
updateNumber++;
}
}
if (readNumber == updateNumber)
{
// 读取的数据条数和操作的数据条数一致删除
delete = true;
}
}
}
}
catch (Exception ex)
{
Console.WriteLine($"处理文件 {filePath} 时出现异常: {ex.Message}");
}
}
}