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;
|
|
/// <summary>
|
/// System.IO.Directory类帮助方法类
|
/// </summary>
|
public static class DirectoryHelper
|
{
|
/// <summary>
|
/// 获取指定路径内的文件
|
/// </summary>
|
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);
|
}
|
}
|
}
|
|
|
/// <summary>
|
/// 读取数据并进行处理
|
/// </summary>
|
/// <param name="filePath"></param>
|
/// <param name="delete"></param>
|
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<MaterialOut> materialOuts = new List<MaterialOut>();
|
|
while (csv.Read())
|
{
|
// if (csv.GetField<string>(100) == "")
|
// {
|
MaterialOut materialOut = new MaterialOut
|
{
|
S_TRANSACTION = csv.GetField<string>(0),
|
S_TRAN_SUB_SEQ = csv.GetField<string>(1),
|
S_TRANSACTION_TYPE = csv.GetField<int>(2),
|
S_SO = csv.GetField<string>(3),
|
S_ORDER_LINE = csv.GetField<int>(4),
|
S_END_USER = csv.GetField<string>(5),
|
S_INT_ITEM_CODE = csv.GetField<string>(6),
|
S_INT_PRODUCT_CODE = csv.GetField<string>(7),
|
S_COLOR_CODE = csv.GetField<string>(8),
|
S_WAREHOUSE_CODE = csv.GetField<string>(9),
|
S_STORE = csv.GetField<string>(10),
|
S_LOT = csv.GetField<string>(11),
|
S_LOR_QUANTITYOT = csv.GetField<int>(12),
|
D_CREATION_DATE = csv.GetField<string>(13),
|
// T_CREATION_TIME = csv.GetField<DateTime>(14),
|
S_USER_NAME = csv.GetField<string>(15),
|
S_ORIG_TRANSACTION = csv.GetField<string>(16),
|
D_RESULT_DATE = csv.GetField<string>(17),
|
// T_RESULT_TIME = csv.GetField<DateTime>(18),
|
S_WMST = csv.GetField<string>(19),
|
S_ACTUAL_QUANTITY = csv.GetField<string>(20),
|
D_COMPLETE_DATE = csv.GetField<string>(21),
|
// T_COMPLETE_TIME = csv.GetField<DateTime>(22)
|
};
|
|
if (AdoSqlMethod<MaterialOut>.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<OutboundOrder>.QueryFirst(p=>p.S_NO == materialOut.S_TRANSACTION && p.N_B_STATE == 0);
|
|
if (outboundOrder != null)
|
{
|
// 修改为取消,重新写方法
|
if (AdoSqlMethod<OutboundOrder>.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<OutboundOrder>.UpdateFirstOutBoundStart(outboundOrder,
|
$"update TN_Outbound_Order SET FTP_CANCEL = 'N' WHERE S_NO = {materialOut.S_TRANSACTION}");
|
}
|
}
|
}
|
// }
|
}
|
|
if(materialOuts.Count > 0)
|
// 将数据添加进数据库中,然后对于的数据需要生成任务
|
AdoSqlMethod<MaterialOut>.AddList(materialOuts);
|
|
// 写入领用单(要过滤的,用文件名当作单号,已经处理的不要重复处理,正常情况下处理完就删除了,测试时候关闭自动删除)
|
delete = true;
|
}
|
else if (fileName.StartsWith("DO"))
|
{
|
List<DoOut> doOuts = new List<DoOut>();
|
|
while (csv.Read())
|
{
|
// if (csv.GetField<string>(100) == "")
|
// {
|
DoOut doOut = new DoOut
|
{
|
S_TRANSACTION = csv.GetField<string>(0),
|
S_TRAN_SUB_SEQ = csv.GetField<string>(1),
|
S_TRANSACTION_TYPE = csv.GetField<int>(2),
|
S_SO = csv.GetField<string>(3),
|
S_ORDER_LINE = csv.GetField<int>(4),
|
S_END_USER = csv.GetField<string>(5),
|
S_INT_ITEM_CODE = csv.GetField<string>(6),
|
S_INT_PRODUCT_CODE = csv.GetField<string>(7),
|
S_COLOR_CODE = csv.GetField<string>(8),
|
S_WAREHOUSE_CODE = csv.GetField<string>(9),
|
S_STORE = csv.GetField<string>(10),
|
S_LOT = csv.GetField<string>(11),
|
S_LOR_QUANTITYOT = csv.GetField<int>(12),
|
S_PRODUCT_SIGN = csv.GetField<string>(13),
|
D_CREATION_DATE = csv.GetField<string>(14),
|
// T_CREATION_TIME = csv.GetField<DateTime>(15),
|
D_SEND_DATE = csv.GetField<string>(16),
|
// T_SEND_TIME = csv.GetField<DateTime>(17),
|
S_USER_NAME = csv.GetField<string>(18),
|
S_ORIG_TRANSACTION = csv.GetField<string>(19),
|
D_RESULT_DATE = csv.GetField<string>(20),
|
// T_RESULT_TIME = csv.GetField<DateTime>(21),
|
S_WMST = csv.GetField<string>(22),
|
S_ACTUAL_QUANTITY = csv.GetField<string>(23),
|
D_COMPLETE_DATE = csv.GetField<string>(24),
|
// T_COMPLETE_TIME = csv.GetField<DateTime>(25),
|
};
|
|
if (AdoSqlMethod<DoOut>.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<OutboundOrder>.QueryFirst(p=>p.S_NO == doOut.S_TRANSACTION && p.N_B_STATE == 0);
|
|
if (outboundOrder != null)
|
{
|
// 修改为取消,重新写方法
|
if (AdoSqlMethod<OutboundOrder>.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<OutboundOrder>.UpdateFirstOutBoundStart(outboundOrder,
|
$"update TN_Outbound_Order SET FTP_CANCEL = 'N' WHERE S_NO = {doOut.S_TRANSACTION}");
|
}
|
}
|
}
|
// }
|
}
|
|
if (doOuts.Count > 0)
|
{
|
// 将数据添加进数据库中,然后对于的数据需要生成任务
|
AdoSqlMethod<DoOut>.AddList(doOuts);
|
}
|
// 任务生成成功,打标记,然后将文件进行删除
|
// 写入出库单
|
delete = true;
|
}
|
else if (fileName.StartsWith("PRD"))
|
{
|
List<TN_Material> tnMaterials = new List<TN_Material>();
|
|
while (csv.Read())
|
{
|
var type = csv.GetField<string>(19);
|
var type2 = "";
|
|
if (type == "C")
|
{
|
type2 = "制品";
|
}
|
else if (type == "R")
|
{
|
type2 = "原料";
|
}
|
|
var tnMaterial = new TN_Material()
|
{
|
// 规格编码
|
S_MATERIAL_CODE = csv.GetField<string>(4),
|
// 物料编码
|
S_ITEM_CODE = csv.GetField<string>(0),
|
// 规格
|
S_MATERIAL = csv.GetField<string>(5),
|
S_MATERIAL_TYPE = type2,
|
// F_WEIGHT = item.WEIGHT,
|
};
|
|
if (AdoSqlMethod<TN_Material>.QueryCount(p => p.S_ITEM_CODE == tnMaterial.S_ITEM_CODE) == 0)
|
{
|
// AdoSqlMethod<Item>.QueryFirst(p=>p.INTERNAL_ITEM_CODE == tnMaterial.INTERNAL_ITEM_CODE);
|
tnMaterials.Add(tnMaterial);
|
}
|
}
|
|
// 将数据添加进数据库中
|
AdoSqlMethod<TN_Material>.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<string>(2);
|
|
var tnMaterials = AdoSqlMethod<TN_Material>.QueryList(p =>
|
p.S_MATERIAL_CODE == INTERNAL_ITEM_CODE);
|
|
string name = csv.GetField<string>(0);
|
|
if (tnMaterials.Count > 0)
|
{
|
foreach (var tnMaterial in tnMaterials)
|
{
|
tnMaterial.S_ITEM_NAME = name;
|
}
|
|
AdoSqlMethod<TN_Material>.UpdateList(tnMaterials, p => new { p.S_ITEM_NAME });
|
updateNumber++;
|
}
|
}
|
|
if (readNumber == updateNumber)
|
{
|
// 读取的数据条数和操作的数据条数一致删除
|
delete = true;
|
}
|
}
|
}
|
}
|
catch (Exception ex)
|
{
|
Console.WriteLine($"处理文件 {filePath} 时出现异常: {ex.Message}");
|
}
|
}
|
}
|