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}"); } } }