初始化
This commit is contained in:
26
BLW_Log/services/DelLogJob.cs
Normal file
26
BLW_Log/services/DelLogJob.cs
Normal file
@@ -0,0 +1,26 @@
|
||||
using BLW_Log.Models;
|
||||
using DAL.PGModels;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Quartz;
|
||||
|
||||
namespace BLW_Log.services
|
||||
{
|
||||
public class DelLogJob : IJob
|
||||
{
|
||||
public readonly PostgresContext DbContext;
|
||||
public DelLogJob(PostgresContext db) { this.DbContext = db; }
|
||||
|
||||
|
||||
public async Task Execute(IJobExecutionContext context)
|
||||
{
|
||||
//using (var a = new LowmachinelogContext())
|
||||
//{
|
||||
string ti = DateTime.Now.AddDays(-90).ToString("yyyy-MM-dd HH:mm:ss");
|
||||
string sql = string.Format(@"delete from dev_monitorlog where CreateTime<='{0}';
|
||||
DELETE from iot_monitorlog where TriggerTime<='{0}';
|
||||
delete from webapi_monitorlog where InvokStart_Time<='{0}';", ti);
|
||||
await DbContext.Database.ExecuteSqlRawAsync(sql);
|
||||
//}
|
||||
}
|
||||
}
|
||||
}
|
||||
32
BLW_Log/services/DelSucess_Fault_File.cs
Normal file
32
BLW_Log/services/DelSucess_Fault_File.cs
Normal file
@@ -0,0 +1,32 @@
|
||||
using Commonlib;
|
||||
using System.Data;
|
||||
using Quartz;
|
||||
using NLog;
|
||||
|
||||
namespace BLW_Log.services
|
||||
{
|
||||
public class DelSucess_Fault_File : IJob
|
||||
{
|
||||
private static readonly Logger _logger = LogManager.GetCurrentClassLogger();
|
||||
public Task Execute(IJobExecutionContext context)
|
||||
{
|
||||
string[] dealwith_files = Directory.GetFiles(ExcelScan.DealWithDir);
|
||||
|
||||
|
||||
_logger.Info("开始读取 各个文件数据");
|
||||
List<DataTable> list_table = new List<DataTable>();
|
||||
foreach (var item in dealwith_files)
|
||||
{
|
||||
string fileName = Path.GetFileName(item);
|
||||
bool bbb = fileName.StartsWith(ExcelScan.上传成功);
|
||||
bool ccc = fileName.StartsWith(ExcelScan.上传失败);
|
||||
bool ddd = bbb || ccc;
|
||||
if (ddd == false)
|
||||
{
|
||||
File.Delete(item);
|
||||
}
|
||||
}
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
}
|
||||
}
|
||||
15
BLW_Log/services/ExcelGenerate.cs
Normal file
15
BLW_Log/services/ExcelGenerate.cs
Normal file
@@ -0,0 +1,15 @@
|
||||
|
||||
namespace BLW_Log.services
|
||||
{
|
||||
public class ExcelGenerate : BackgroundService
|
||||
{
|
||||
public ExcelGenerate()
|
||||
{
|
||||
}
|
||||
|
||||
protected override Task ExecuteAsync(CancellationToken stoppingToken)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
}
|
||||
115
BLW_Log/services/ExcelScan.cs
Normal file
115
BLW_Log/services/ExcelScan.cs
Normal file
@@ -0,0 +1,115 @@
|
||||
using System.Data;
|
||||
using Commonlib;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using NLog;
|
||||
using Quartz;
|
||||
|
||||
namespace BLW_Log.services
|
||||
{
|
||||
public class ExcelScan : IJob
|
||||
{
|
||||
private static readonly Logger _logger = LogManager.GetCurrentClassLogger();
|
||||
public static string sourceDir = @"Excel\上传目录"; // 上传的目录路径
|
||||
public static string DealWithDir = @"Excel\处理"; // 处理的目录路径
|
||||
public static string targetDir = @"Excel\target_jindie"; // 马丽要使用的目录路径
|
||||
public static string JinDieBakDir = @"Excel\target_jindie_bak"; // 马丽要使用的目录路径
|
||||
public static string KongBaiDir = @"Excel\空白"; // 马丽要使用的目录路径
|
||||
public static string 上传成功 = "[上传成功]";
|
||||
public static string 上传失败 = "[上传失败]";
|
||||
public Task Execute(IJobExecutionContext context)
|
||||
{
|
||||
try
|
||||
{
|
||||
string 现在时间 = DateTime.Now.ToString("yyyyMMddHHmmss");
|
||||
string 现在时间_天 = DateTime.Now.ToString("yyyyMMdd");
|
||||
|
||||
// 获取源目录所有文件
|
||||
string[] files = Directory.GetFiles(sourceDir);
|
||||
|
||||
|
||||
_logger.Info("移动文件到各自的目录");
|
||||
foreach (string file in files)
|
||||
{
|
||||
string fileNameGGG = Path.GetFileName(file);
|
||||
string ssk = Path.GetExtension(fileNameGGG);
|
||||
if (ssk.Equals(".xls") || ssk.Equals(".xlsx"))
|
||||
{
|
||||
if (!fileNameGGG.StartsWith(上传成功) && fileNameGGG.StartsWith(上传失败) == false)
|
||||
{
|
||||
|
||||
string fileName = Path.GetFileName(file);
|
||||
DataTable DT = null;
|
||||
try
|
||||
{
|
||||
DT = ExcelHelper.ReadExcelToDataTable(file);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
string Fault_Src_File = Path.Combine(sourceDir, 上传失败 + "_错误03_" + fileName);
|
||||
File.Copy(file, Fault_Src_File, true);
|
||||
File.Delete(file);
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
//01 文件缺少必要列
|
||||
//02 文件格式错误
|
||||
//03 文件损坏
|
||||
//8 さ8
|
||||
//文件内容格式错误←
|
||||
//未知错误,请联系管理员←
|
||||
bool hasColumn0 = DT.Columns.Contains("项目名称");
|
||||
bool hasColumn1 = DT.Columns.Contains("产品料号");
|
||||
bool hasColumn2 = DT.Columns.Contains("产品名称");
|
||||
bool hasColumn3 = DT.Columns.Contains("发货数量");
|
||||
bool hasColumn4 = DT.Columns.Contains("单价");
|
||||
bool hasColumn5 = DT.Columns.Contains("销售");
|
||||
//bool hasColumn6 = DT.Columns.Contains("单位");
|
||||
|
||||
bool bf = hasColumn0 && hasColumn1 && hasColumn2 && hasColumn3 && hasColumn4 && hasColumn5;
|
||||
//&&hasColumn6;
|
||||
|
||||
|
||||
|
||||
if (bf == false)
|
||||
{
|
||||
string Fault_Src_File = Path.Combine(sourceDir, 上传失败 + "_错误01_" + fileName);
|
||||
File.Copy(file, Fault_Src_File, true);
|
||||
File.Delete(file);
|
||||
}
|
||||
else
|
||||
{
|
||||
string Success_Src_File = Path.Combine(sourceDir, 上传成功 + "_" + fileName);
|
||||
File.Copy(file, Success_Src_File, true);
|
||||
//File.Copy(ExcelScan.KongBaiDir + "\\空白文件.xlsx", Success_Src_File, true);
|
||||
string bak_Dir = @"Excel\bak\" + 现在时间; // 备份的目录路径
|
||||
if (!Directory.Exists(bak_Dir))
|
||||
{
|
||||
Directory.CreateDirectory(bak_Dir);
|
||||
}
|
||||
string bakFile = Path.Combine(bak_Dir, fileName);
|
||||
// 移动文件(覆盖已存在文件)
|
||||
File.Copy(file, bakFile, true);
|
||||
|
||||
string destFile = Path.Combine(DealWithDir, fileName);
|
||||
File.Move(file, destFile, true);
|
||||
|
||||
//File.Move(file, destFile, true);
|
||||
_logger.Info("复制文件" + fileName + "到" + bakFile);
|
||||
_logger.Info("移动文件" + fileName + "到" + destFile);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
_logger.Info("移动文件完成");
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.Error("Excel 预检失败: " + ex.Message);
|
||||
}
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
}
|
||||
}
|
||||
93
BLW_Log/services/Id_G.cs
Normal file
93
BLW_Log/services/Id_G.cs
Normal file
@@ -0,0 +1,93 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Common
|
||||
{
|
||||
public class IdWorker
|
||||
{
|
||||
//起始的时间戳
|
||||
private static long START_STMP = 1480166465631L;
|
||||
|
||||
//每一部分占用的位数
|
||||
private static int SEQUENCE_BIT = 12; //序列号占用的位数
|
||||
private static int MACHINE_BIT = 5; //机器标识占用的位数
|
||||
private static int DATACENTER_BIT = 5;//数据中心占用的位数
|
||||
|
||||
//每一部分的最大值
|
||||
private static long MAX_DATACENTER_NUM = -1L ^ (-1L << DATACENTER_BIT);
|
||||
private static long MAX_MACHINE_NUM = -1L ^ (-1L << MACHINE_BIT);
|
||||
private static long MAX_SEQUENCE = -1L ^ (-1L << SEQUENCE_BIT);
|
||||
|
||||
//每一部分向左的位移
|
||||
private static int MACHINE_LEFT = SEQUENCE_BIT;
|
||||
private static int DATACENTER_LEFT = SEQUENCE_BIT + MACHINE_BIT;
|
||||
private static int TIMESTMP_LEFT = DATACENTER_LEFT + DATACENTER_BIT;
|
||||
|
||||
private long datacenterId = 1; //数据中心
|
||||
private long machineId = 1; //机器标识
|
||||
private long sequence = 0L; //序列号
|
||||
private long lastStmp = -1L;//上一次时间戳
|
||||
|
||||
#region 单例:完全懒汉
|
||||
private static readonly Lazy<IdWorker> lazy = new Lazy<IdWorker>(() => new IdWorker());
|
||||
public static IdWorker Singleton { get { return lazy.Value; } }
|
||||
private IdWorker() { }
|
||||
#endregion
|
||||
|
||||
public IdWorker(long cid, long mid)
|
||||
{
|
||||
if (cid > MAX_DATACENTER_NUM || cid < 0) throw new Exception($"中心Id应在(0,{MAX_DATACENTER_NUM})之间");
|
||||
if (mid > MAX_MACHINE_NUM || mid < 0) throw new Exception($"机器Id应在(0,{MAX_MACHINE_NUM})之间");
|
||||
datacenterId = cid;
|
||||
machineId = mid;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 产生下一个ID
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public long nextId()
|
||||
{
|
||||
long currStmp = getNewstmp();
|
||||
if (currStmp < lastStmp) throw new Exception("时钟倒退,Id生成失败!");
|
||||
|
||||
if (currStmp == lastStmp)
|
||||
{
|
||||
//相同毫秒内,序列号自增
|
||||
sequence = (sequence + 1) & MAX_SEQUENCE;
|
||||
//同一毫秒的序列数已经达到最大
|
||||
if (sequence == 0L) currStmp = getNextMill();
|
||||
}
|
||||
else
|
||||
{
|
||||
//不同毫秒内,序列号置为0
|
||||
sequence = 0L;
|
||||
}
|
||||
|
||||
lastStmp = currStmp;
|
||||
|
||||
return (currStmp - START_STMP) << TIMESTMP_LEFT //时间戳部分
|
||||
| datacenterId << DATACENTER_LEFT //数据中心部分
|
||||
| machineId << MACHINE_LEFT //机器标识部分
|
||||
| sequence; //序列号部分
|
||||
}
|
||||
|
||||
private long getNextMill()
|
||||
{
|
||||
long mill = getNewstmp();
|
||||
while (mill <= lastStmp)
|
||||
{
|
||||
mill = getNewstmp();
|
||||
}
|
||||
return mill;
|
||||
}
|
||||
|
||||
private long getNewstmp()
|
||||
{
|
||||
return (long)(DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds;
|
||||
}
|
||||
}
|
||||
}
|
||||
11
BLW_Log/services/LogRecord.cs
Normal file
11
BLW_Log/services/LogRecord.cs
Normal file
@@ -0,0 +1,11 @@
|
||||
|
||||
namespace BLW_Log.services
|
||||
{
|
||||
public class LogRecord : BackgroundService
|
||||
{
|
||||
protected override Task ExecuteAsync(CancellationToken stoppingToken)
|
||||
{
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
}
|
||||
}
|
||||
461
BLW_Log/services/MyExcel.cs
Normal file
461
BLW_Log/services/MyExcel.cs
Normal file
@@ -0,0 +1,461 @@
|
||||
using System.Data;
|
||||
using System.Transactions;
|
||||
using ChinhDo.Transactions;
|
||||
using Common;
|
||||
using Commonlib;
|
||||
using LiteDB;
|
||||
using NLog;
|
||||
using NPOI.POIFS.Crypt.Dsig;
|
||||
using Quartz;
|
||||
|
||||
namespace BLW_Log.services
|
||||
{
|
||||
public class Customer
|
||||
{
|
||||
public int Id { get; set; }
|
||||
public string Name { get; set; }
|
||||
}
|
||||
public class MyExcel : IJob
|
||||
{
|
||||
private static readonly Logger _logger = LogManager.GetCurrentClassLogger();
|
||||
public static void ExcelDealWith()
|
||||
{
|
||||
NewMethod(true);
|
||||
}
|
||||
|
||||
public static void NewMethod(bool Is_Auto = true)
|
||||
{
|
||||
string 现在时间_天 = DateTime.Now.ToString("yyyy/MM/dd");
|
||||
string 现在时间天 = DateTime.Now.ToString("yyyy-MM-dd");
|
||||
if (Is_Auto == false)
|
||||
{
|
||||
现在时间天 = DateTime.Now.ToString("yyyy-MM-dd#HH:mm:ss:fff");
|
||||
}
|
||||
try
|
||||
{
|
||||
|
||||
DataTable dt = new DataTable();
|
||||
dt.Columns.Add(new DataColumn() { ColumnName = "[表头]单据编号(*)", DataType = typeof(string), MaxLength = 225 });
|
||||
dt.Columns.Add(new DataColumn() { ColumnName = "[表头]日期(*)", DataType = typeof(string), MaxLength = 225 });
|
||||
dt.Columns.Add(new DataColumn() { ColumnName = "[表头]购货单位(*)", DataType = typeof(string), MaxLength = 225 });
|
||||
dt.Columns.Add(new DataColumn() { ColumnName = "[表头][自定义]项目名称:", DataType = typeof(string), MaxLength = 225 });
|
||||
dt.Columns.Add(new DataColumn() { ColumnName = "[表头]币别(*)", DataType = typeof(string), MaxLength = 225 });
|
||||
dt.Columns.Add(new DataColumn() { ColumnName = "[表头]汇率(*)", DataType = typeof(string), MaxLength = 225 });
|
||||
dt.Columns.Add(new DataColumn() { ColumnName = "[表头]结算日期(*)", DataType = typeof(string), MaxLength = 225 });
|
||||
dt.Columns.Add(new DataColumn() { ColumnName = "[表头]销售方式", DataType = typeof(string), MaxLength = 225 });
|
||||
dt.Columns.Add(new DataColumn() { ColumnName = "[表头]交货方式", DataType = typeof(string), MaxLength = 225 });
|
||||
dt.Columns.Add(new DataColumn() { ColumnName = "[表头]发货地点", DataType = typeof(string), MaxLength = 225 });
|
||||
dt.Columns.Add(new DataColumn() { ColumnName = "[表头]收货地址", DataType = typeof(string), MaxLength = 225 });
|
||||
dt.Columns.Add(new DataColumn() { ColumnName = "[表头]结算方式", DataType = typeof(string), MaxLength = 225 });
|
||||
dt.Columns.Add(new DataColumn() { ColumnName = "[表头]摘要", DataType = typeof(string), MaxLength = 225 });
|
||||
dt.Columns.Add(new DataColumn() { ColumnName = "[表头]业务员", DataType = typeof(string), MaxLength = 225 });
|
||||
dt.Columns.Add(new DataColumn() { ColumnName = "[表头][自定义]技术员", DataType = typeof(string), MaxLength = 225 });
|
||||
dt.Columns.Add(new DataColumn() { ColumnName = "物料代码(*)", DataType = typeof(string), MaxLength = 225 });
|
||||
dt.Columns.Add(new DataColumn() { ColumnName = "物料名称", DataType = typeof(string), MaxLength = 225 });
|
||||
dt.Columns.Add(new DataColumn() { ColumnName = "规格型号", DataType = typeof(string), MaxLength = 225 });
|
||||
dt.Columns.Add(new DataColumn() { ColumnName = "单位(*)", DataType = typeof(string), MaxLength = 225 });
|
||||
dt.Columns.Add(new DataColumn() { ColumnName = "数量(*)", DataType = typeof(string) });
|
||||
dt.Columns.Add(new DataColumn() { ColumnName = "税率(%)(*)", DataType = typeof(decimal) });
|
||||
dt.Columns.Add(new DataColumn() { ColumnName = "折扣率(%)(*)", DataType = typeof(decimal) });
|
||||
dt.Columns.Add(new DataColumn() { ColumnName = "交货日期(*)", DataType = typeof(string) });
|
||||
dt.Columns.Add(new DataColumn() { ColumnName = "辅助属性", DataType = typeof(string) });
|
||||
dt.Columns.Add(new DataColumn() { ColumnName = "备注", DataType = typeof(string) });
|
||||
dt.Columns.Add(new DataColumn() { ColumnName = "客户料号", DataType = typeof(string) });
|
||||
dt.Columns.Add(new DataColumn() { ColumnName = "客户商品名称", DataType = typeof(string) });
|
||||
dt.Columns.Add(new DataColumn() { ColumnName = "单价", DataType = typeof(string) });
|
||||
|
||||
//获取需要处理的所有文件
|
||||
string[] dealwith_files = Directory.GetFiles(ExcelScan.DealWithDir);
|
||||
|
||||
|
||||
_logger.Info("开始读取 各个文件数据");
|
||||
List<DataTable> list_table = new List<DataTable>();
|
||||
foreach (var item in dealwith_files)
|
||||
{
|
||||
string fileName = Path.GetFileName(item);
|
||||
bool bbb = fileName.StartsWith(ExcelScan.上传成功);
|
||||
bool ccc = fileName.StartsWith(ExcelScan.上传失败);
|
||||
bool ddd = bbb && ccc;
|
||||
if (ddd == false)
|
||||
{
|
||||
_logger.Info("读取文件" + fileName + "的数据");
|
||||
var DT = ExcelHelper.ReadExcelToDataTable(ExcelScan.DealWithDir + "\\" + fileName);
|
||||
DataTable NewDt = removeEmpty(DT);
|
||||
list_table.Add(NewDt);
|
||||
}
|
||||
}
|
||||
|
||||
_logger.Info("合并各个文件数据");
|
||||
DataTable BigTable = MergeDataTables(list_table);
|
||||
|
||||
|
||||
_logger.Info("合并件数据完成");
|
||||
|
||||
|
||||
_logger.Info("生成 金蝶系统需要的数据 ");
|
||||
var QQ = BigTable.Rows.Cast<DataRow>();
|
||||
var QQ1 = QQ.GroupBy(A => A.Field<string>("项目名称"));
|
||||
IdWorker idworker = IdWorker.Singleton;
|
||||
using var db = new LiteDatabase(@"MyData.db");
|
||||
foreach (var item in QQ1)
|
||||
{
|
||||
string? 项目名称 = item.Key;
|
||||
//string currentdate = DateTime.Now.ToString("yyyyMMddHHmmssfff");
|
||||
//S1123698807356395520
|
||||
//S1123698807356395520
|
||||
//S1123698807444475904
|
||||
|
||||
//string idaaaa = idworker.nextId().ToString();
|
||||
//idaaaa = idaaaa.Substring(10, idaaaa.Length - 10);
|
||||
|
||||
// 获得 customer 集合
|
||||
var col = db.GetCollection<Customer>("customers");
|
||||
// 创建你的新 customer 实例
|
||||
var customer = new Customer
|
||||
{
|
||||
Name = Guid.NewGuid().ToString(),
|
||||
};
|
||||
|
||||
col.EnsureIndex(x => x.Name, true);
|
||||
// 插入新的 customer 文档 (Id 是自增的)
|
||||
col.Insert(customer);
|
||||
//col.DeleteMany(A=>A.Id<=2000);
|
||||
|
||||
string idaaaa = customer.Id.ToString();
|
||||
|
||||
idaaaa = idaaaa.PadLeft(10, '0');
|
||||
string 单据编号 = "S" + idaaaa;
|
||||
Thread.Sleep(20);
|
||||
string 现在时间 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
||||
|
||||
foreach (var item1 in item)
|
||||
{
|
||||
string? 产品料号 = item1["产品料号"]?.ToString();
|
||||
string? 产品名称 = item1["产品名称"]?.ToString();
|
||||
string? 发货数量 = item1["发货数量"]?.ToString();
|
||||
string? 发货单价 = item1["单价"]?.ToString();
|
||||
string? 销售 = item1["销售"]?.ToString();
|
||||
string? 客户名称 = item1["客户名称"]?.ToString();
|
||||
//string? 单位 = item1["单位"]?.ToString();
|
||||
|
||||
产品料号 = 产品料号?.Replace(" ", "");
|
||||
|
||||
DataRow dr = dt.NewRow();
|
||||
dr["[表头]单据编号(*)"] = 单据编号;
|
||||
dr["[表头]日期(*)"] = 现在时间;
|
||||
/*dr["[表头]购货单位(*)"] = 项目名称;*/
|
||||
dr["[表头]购货单位(*)"] = 项目名称;
|
||||
dr["[表头][自定义]项目名称:"] = 客户名称;
|
||||
dr["[表头]币别(*)"] = "人民币";
|
||||
dr["[表头]汇率(*)"] = "1";
|
||||
|
||||
dr["[表头]结算日期(*)"] = 现在时间_天;
|
||||
|
||||
dr["[表头]销售方式"] = "";
|
||||
dr["[表头]交货方式"] = "";
|
||||
dr["[表头]发货地点"] = "";
|
||||
dr["[表头]收货地址"] = "";
|
||||
dr["[表头]结算方式"] = "";
|
||||
dr["[表头]摘要"] = "";
|
||||
dr["[表头]业务员"] = 销售;
|
||||
dr["[表头][自定义]技术员"] = "邹竟";
|
||||
dr["物料代码(*)"] = 产品料号;
|
||||
dr["物料名称"] = "";
|
||||
dr["规格型号"] = "";
|
||||
dr["单位(*)"] = "个";
|
||||
dr["数量(*)"] = 发货数量;
|
||||
dr["税率(%)(*)"] = "0";
|
||||
dr["折扣率(%)(*)"] = "0";
|
||||
dr["交货日期(*)"] = 现在时间_天;
|
||||
dr["辅助属性"] = "";
|
||||
dr["备注"] = "";
|
||||
|
||||
|
||||
dr["客户料号"] = "";
|
||||
dr["客户商品名称"] = "";
|
||||
if (!string.IsNullOrWhiteSpace(发货单价))
|
||||
{
|
||||
dr["单价"] = 发货单价;
|
||||
}
|
||||
else
|
||||
{
|
||||
dr["单价"] = "0";
|
||||
}
|
||||
dt.Rows.Add(dr);
|
||||
}
|
||||
}
|
||||
_logger.Info("生成 Excel 数据完成 ");
|
||||
|
||||
string FinalFileResult = string.Format("{0}\\{1}.xlsx", ExcelScan.targetDir, 现在时间天);
|
||||
//创建新的Excel
|
||||
ExcelHelper.CreateNewExcel(FinalFileResult, dt);
|
||||
|
||||
_logger.Info("生成 Excel 完成。Excel的名字为:" + FinalFileResult);
|
||||
|
||||
string fileNameFFF = Path.GetFileName(FinalFileResult);
|
||||
string bakDirFFF = ExcelScan.JinDieBakDir + "\\" + 现在时间天;
|
||||
if (!Directory.Exists(bakDirFFF))
|
||||
{
|
||||
Directory.CreateDirectory(bakDirFFF);
|
||||
}
|
||||
string bakname = bakDirFFF + "\\" + fileNameFFF;
|
||||
File.Copy(FinalFileResult, bakname, true);
|
||||
|
||||
|
||||
_logger.Info("生成 Excel 备份完成。Excel的名字为:" + FinalFileResult);
|
||||
foreach (var item in dealwith_files)
|
||||
{
|
||||
File.Delete(item);
|
||||
}
|
||||
|
||||
string[] source_files = Directory.GetFiles(ExcelScan.sourceDir);
|
||||
foreach (var item in source_files)
|
||||
{
|
||||
File.Delete(item);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.Error("生成财务需要的数据出错:" + ex.Message);
|
||||
}
|
||||
}
|
||||
public static void TempNewMethod(bool Is_Auto = true)
|
||||
{
|
||||
string 现在时间_天 = DateTime.Now.ToString("yyyy/MM/dd");
|
||||
string 现在时间天 = DateTime.Now.ToString("yyyy-MM-dd");
|
||||
if (Is_Auto == false)
|
||||
{
|
||||
现在时间天 = DateTime.Now.ToString("yyyy-MM-dd#HH:mm:ss:fff");
|
||||
}
|
||||
try
|
||||
{
|
||||
|
||||
DataTable dt = new DataTable();
|
||||
dt.Columns.Add(new DataColumn() { ColumnName = "[表头]单据编号(*)", DataType = typeof(string), MaxLength = 225 });
|
||||
dt.Columns.Add(new DataColumn() { ColumnName = "[表头]日期(*)", DataType = typeof(string), MaxLength = 225 });
|
||||
dt.Columns.Add(new DataColumn() { ColumnName = "[表头]购货单位(*)", DataType = typeof(string), MaxLength = 225 });
|
||||
dt.Columns.Add(new DataColumn() { ColumnName = "[表头][自定义]项目名称:", DataType = typeof(string), MaxLength = 225 });
|
||||
dt.Columns.Add(new DataColumn() { ColumnName = "[表头]币别(*)", DataType = typeof(string), MaxLength = 225 });
|
||||
dt.Columns.Add(new DataColumn() { ColumnName = "[表头]汇率(*)", DataType = typeof(string), MaxLength = 225 });
|
||||
dt.Columns.Add(new DataColumn() { ColumnName = "[表头]结算日期(*)", DataType = typeof(string), MaxLength = 225 });
|
||||
dt.Columns.Add(new DataColumn() { ColumnName = "[表头]销售方式", DataType = typeof(string), MaxLength = 225 });
|
||||
dt.Columns.Add(new DataColumn() { ColumnName = "[表头]交货方式", DataType = typeof(string), MaxLength = 225 });
|
||||
dt.Columns.Add(new DataColumn() { ColumnName = "[表头]发货地点", DataType = typeof(string), MaxLength = 225 });
|
||||
dt.Columns.Add(new DataColumn() { ColumnName = "[表头]收货地址", DataType = typeof(string), MaxLength = 225 });
|
||||
dt.Columns.Add(new DataColumn() { ColumnName = "[表头]结算方式", DataType = typeof(string), MaxLength = 225 });
|
||||
dt.Columns.Add(new DataColumn() { ColumnName = "[表头]摘要", DataType = typeof(string), MaxLength = 225 });
|
||||
dt.Columns.Add(new DataColumn() { ColumnName = "[表头]业务员", DataType = typeof(string), MaxLength = 225 });
|
||||
dt.Columns.Add(new DataColumn() { ColumnName = "[表头][自定义]技术员", DataType = typeof(string), MaxLength = 225 });
|
||||
dt.Columns.Add(new DataColumn() { ColumnName = "物料代码(*)", DataType = typeof(string), MaxLength = 225 });
|
||||
dt.Columns.Add(new DataColumn() { ColumnName = "物料名称", DataType = typeof(string), MaxLength = 225 });
|
||||
dt.Columns.Add(new DataColumn() { ColumnName = "规格型号", DataType = typeof(string), MaxLength = 225 });
|
||||
dt.Columns.Add(new DataColumn() { ColumnName = "单位(*)", DataType = typeof(string), MaxLength = 225 });
|
||||
dt.Columns.Add(new DataColumn() { ColumnName = "数量(*)", DataType = typeof(string) });
|
||||
dt.Columns.Add(new DataColumn() { ColumnName = "税率(%)(*)", DataType = typeof(decimal) });
|
||||
dt.Columns.Add(new DataColumn() { ColumnName = "折扣率(%)(*)", DataType = typeof(decimal) });
|
||||
dt.Columns.Add(new DataColumn() { ColumnName = "交货日期(*)", DataType = typeof(string) });
|
||||
dt.Columns.Add(new DataColumn() { ColumnName = "辅助属性", DataType = typeof(string) });
|
||||
dt.Columns.Add(new DataColumn() { ColumnName = "备注", DataType = typeof(string) });
|
||||
dt.Columns.Add(new DataColumn() { ColumnName = "客户料号", DataType = typeof(string) });
|
||||
dt.Columns.Add(new DataColumn() { ColumnName = "客户商品名称", DataType = typeof(string) });
|
||||
dt.Columns.Add(new DataColumn() { ColumnName = "单价", DataType = typeof(string) });
|
||||
|
||||
//获取需要处理的所有文件
|
||||
string[] dealwith_files = Directory.GetFiles(ExcelScan.DealWithDir);
|
||||
|
||||
|
||||
_logger.Info("开始读取 各个文件数据");
|
||||
List<DataTable> list_table = new List<DataTable>();
|
||||
foreach (var item in dealwith_files)
|
||||
{
|
||||
string fileName = Path.GetFileName(item);
|
||||
bool bbb = fileName.StartsWith(ExcelScan.上传成功);
|
||||
bool ccc = fileName.StartsWith(ExcelScan.上传失败);
|
||||
bool ddd = bbb && ccc;
|
||||
if (ddd == false)
|
||||
{
|
||||
_logger.Info("读取文件" + fileName + "的数据");
|
||||
var DT = ExcelHelper.ReadExcelToDataTable(ExcelScan.DealWithDir + "\\" + fileName);
|
||||
DataTable NewDt = removeEmpty(DT);
|
||||
list_table.Add(NewDt);
|
||||
}
|
||||
}
|
||||
|
||||
_logger.Info("合并各个文件数据");
|
||||
DataTable BigTable = MergeDataTables(list_table);
|
||||
|
||||
|
||||
_logger.Info("合并件数据完成");
|
||||
|
||||
|
||||
_logger.Info("生成 金蝶系统需要的数据 ");
|
||||
var QQ = BigTable.Rows.Cast<DataRow>();
|
||||
var QQ1 = QQ.GroupBy(A => A.Field<string>("项目名称"));
|
||||
IdWorker idworker = IdWorker.Singleton;
|
||||
using var db = new LiteDatabase(@"MyData.db");
|
||||
foreach (var item in QQ1)
|
||||
{
|
||||
string? 项目名称 = item.Key;
|
||||
//string currentdate = DateTime.Now.ToString("yyyyMMddHHmmssfff");
|
||||
//S1123698807356395520
|
||||
//S1123698807356395520
|
||||
//S1123698807444475904
|
||||
|
||||
//string idaaaa = idworker.nextId().ToString();
|
||||
//idaaaa = idaaaa.Substring(10, idaaaa.Length - 10);
|
||||
|
||||
// 获得 customer 集合
|
||||
var col = db.GetCollection<Customer>("customers");
|
||||
// 创建你的新 customer 实例
|
||||
var customer = new Customer
|
||||
{
|
||||
Name = Guid.NewGuid().ToString(),
|
||||
};
|
||||
|
||||
col.EnsureIndex(x => x.Name, true);
|
||||
// 插入新的 customer 文档 (Id 是自增的)
|
||||
col.Insert(customer);
|
||||
//col.DeleteMany(A=>A.Id<=2000);
|
||||
|
||||
string idaaaa = customer.Id.ToString();
|
||||
|
||||
idaaaa = idaaaa.PadLeft(10, '0');
|
||||
string 单据编号 = "S" + idaaaa;
|
||||
Thread.Sleep(20);
|
||||
string 现在时间 = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
|
||||
|
||||
foreach (var item1 in item)
|
||||
{
|
||||
string? 产品料号 = item1["产品料号"]?.ToString();
|
||||
string? 产品名称 = item1["产品名称"]?.ToString();
|
||||
string? 发货数量 = item1["发货数量"]?.ToString();
|
||||
string? 发货单价 = item1["单价"]?.ToString();
|
||||
string? 销售 = item1["销售"]?.ToString();
|
||||
string? 客户名称 = item1["客户名称"]?.ToString();
|
||||
//string? 单位 = item1["单位"]?.ToString();
|
||||
|
||||
产品料号 = 产品料号?.Replace(" ", "");
|
||||
|
||||
DataRow dr = dt.NewRow();
|
||||
dr["[表头]单据编号(*)"] = 单据编号;
|
||||
dr["[表头]日期(*)"] = 现在时间;
|
||||
/*dr["[表头]购货单位(*)"] = 项目名称;*/
|
||||
dr["[表头]购货单位(*)"] = 项目名称;
|
||||
dr["[表头][自定义]项目名称:"] = 客户名称;
|
||||
dr["[表头]币别(*)"] = "人民币";
|
||||
dr["[表头]汇率(*)"] = "1";
|
||||
|
||||
dr["[表头]结算日期(*)"] = 现在时间_天;
|
||||
|
||||
dr["[表头]销售方式"] = "";
|
||||
dr["[表头]交货方式"] = "";
|
||||
dr["[表头]发货地点"] = "";
|
||||
dr["[表头]收货地址"] = "";
|
||||
dr["[表头]结算方式"] = "";
|
||||
dr["[表头]摘要"] = "";
|
||||
dr["[表头]业务员"] = 销售;
|
||||
dr["[表头][自定义]技术员"] = "邹竟";
|
||||
dr["物料代码(*)"] = 产品料号;
|
||||
dr["物料名称"] = "";
|
||||
dr["规格型号"] = "";
|
||||
dr["单位(*)"] = "个";
|
||||
dr["数量(*)"] = 发货数量;
|
||||
dr["税率(%)(*)"] = "0";
|
||||
dr["折扣率(%)(*)"] = "0";
|
||||
dr["交货日期(*)"] = 现在时间_天;
|
||||
dr["辅助属性"] = "";
|
||||
dr["备注"] = "";
|
||||
|
||||
|
||||
dr["客户料号"] = "";
|
||||
dr["客户商品名称"] = "";
|
||||
if (!string.IsNullOrWhiteSpace(发货单价))
|
||||
{
|
||||
dr["单价"] = 发货单价;
|
||||
}
|
||||
else
|
||||
{
|
||||
dr["单价"] = "0";
|
||||
}
|
||||
dt.Rows.Add(dr);
|
||||
}
|
||||
}
|
||||
_logger.Info("生成 Excel 数据完成 ");
|
||||
|
||||
string namesss = 现在时间天 + "-" + DateTime.Now.ToString("mmss");
|
||||
string FinalFileResult = string.Format("{0}\\{1}.xlsx", ExcelScan.targetDir, namesss);
|
||||
//创建新的Excel
|
||||
ExcelHelper.CreateNewExcel(FinalFileResult, dt);
|
||||
|
||||
_logger.Info("生成 Excel 完成。Excel的名字为:" + FinalFileResult);
|
||||
|
||||
string fileNameFFF = Path.GetFileName(FinalFileResult);
|
||||
string bakDirFFF = ExcelScan.JinDieBakDir + "\\" + 现在时间天;
|
||||
if (!Directory.Exists(bakDirFFF))
|
||||
{
|
||||
Directory.CreateDirectory(bakDirFFF);
|
||||
}
|
||||
string bakname = bakDirFFF + "\\" + fileNameFFF;
|
||||
File.Copy(FinalFileResult, bakname, true);
|
||||
|
||||
|
||||
_logger.Info("生成 Excel 备份完成。Excel的名字为:" + FinalFileResult);
|
||||
foreach (var item in dealwith_files)
|
||||
{
|
||||
File.Delete(item);
|
||||
}
|
||||
|
||||
string[] source_files = Directory.GetFiles(ExcelScan.sourceDir);
|
||||
foreach (var item in source_files)
|
||||
{
|
||||
File.Delete(item);
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.Error("生成财务需要的数据出错:" + ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
protected static DataTable removeEmpty(DataTable dt)
|
||||
{
|
||||
List<DataRow> rows = new List<DataRow>();
|
||||
for (int i = 0; i < dt.Rows.Count; i++)
|
||||
{
|
||||
string sss = dt.Rows[i]["项目名称"].ToString();
|
||||
if (string.IsNullOrWhiteSpace(sss))
|
||||
{
|
||||
rows.Add(dt.Rows[i]);
|
||||
}
|
||||
}
|
||||
foreach (DataRow row in rows)
|
||||
{
|
||||
dt.Rows.Remove(row);
|
||||
}
|
||||
return dt;
|
||||
}
|
||||
public static DataTable MergeDataTables(List<DataTable> tables)
|
||||
{
|
||||
if (tables == null || tables.Count == 0)
|
||||
return new DataTable();
|
||||
|
||||
DataTable mergedTable = tables[0].Clone();
|
||||
|
||||
foreach (DataTable table in tables)
|
||||
{
|
||||
if (table != null)
|
||||
{
|
||||
mergedTable.Merge(table);
|
||||
}
|
||||
}
|
||||
|
||||
return mergedTable;
|
||||
}
|
||||
|
||||
public Task Execute(IJobExecutionContext context)
|
||||
{
|
||||
ExcelDealWith();
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
}
|
||||
}
|
||||
19
BLW_Log/services/MyTimer.cs
Normal file
19
BLW_Log/services/MyTimer.cs
Normal file
@@ -0,0 +1,19 @@
|
||||
|
||||
|
||||
|
||||
|
||||
namespace BLW_Log.services
|
||||
{
|
||||
public class MyTimer : IHostedService
|
||||
{
|
||||
public Task StartAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public Task StopAsync(CancellationToken cancellationToken)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
}
|
||||
}
|
||||
53
BLW_Log/services/TaskQueue.cs
Normal file
53
BLW_Log/services/TaskQueue.cs
Normal file
@@ -0,0 +1,53 @@
|
||||
using System.Collections.Concurrent;
|
||||
using BLW_Log.Models;
|
||||
using Common;
|
||||
using Commonlib;
|
||||
using DAL.PGModels;
|
||||
using Microsoft.Extensions.Caching.Memory;
|
||||
using Newtonsoft.Json;
|
||||
using static BLW_Log.Controllers.LowerMachineLogController;
|
||||
|
||||
namespace BLW_Log.services
|
||||
{
|
||||
public record N
|
||||
{
|
||||
public string DeviceName { get; set; }
|
||||
public string DeviceType { get; set; }
|
||||
public string Address { get; set; }
|
||||
public ushort Status { get; set; }
|
||||
}
|
||||
public class TaskQueue
|
||||
{
|
||||
public readonly ConcurrentQueue<string> _tasks = new ConcurrentQueue<string>();
|
||||
private readonly SemaphoreSlim _signal = new(0);
|
||||
|
||||
public void EnqueueTask(string task)
|
||||
{
|
||||
_tasks.Enqueue(task);
|
||||
_signal.Release();
|
||||
}
|
||||
|
||||
public async Task<string> DequeueAsync()
|
||||
{
|
||||
await _signal.WaitAsync();
|
||||
_tasks.TryDequeue(out var task);
|
||||
return task!;
|
||||
}
|
||||
}
|
||||
public class BackgroundTaskService : BackgroundService
|
||||
{
|
||||
private readonly TaskQueue _queue;
|
||||
|
||||
public readonly IMemoryCache _memoryCache;
|
||||
public BackgroundTaskService(TaskQueue queue, IMemoryCache cache)
|
||||
{
|
||||
this._queue = queue;
|
||||
this._memoryCache = cache;
|
||||
}
|
||||
|
||||
async protected override Task ExecuteAsync(CancellationToken ct)
|
||||
{
|
||||
await Task.CompletedTask;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user