2025-03-28 09:49:56 +08:00

146 lines
6.5 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Configuration;
using System.IO;
using System.Linq;
using System.ServiceProcess;
using SocketTransfer.SDK;
using HZQR.Common;
namespace Unzip
{
partial class UnzipFileService : ServiceBase
{
/// <summary>
/// 流水数据库连接字符串
/// </summary>
string _OracleConnStr = ConfigurationManager.AppSettings["OracleConnStr"].ToString();
/// <summary>
/// 经营数据的数据库连接字符串
/// </summary>
string _OracleConnStr_Business = ConfigurationManager.AppSettings["OracleConnStr_Business"].ToString();
string ZipUrl = ConfigurationManager.AppSettings["ZipUrl"].ToString(); //待解压文件绝对路径
string ExecTime = ConfigurationManager.AppSettings["ExecTime"].ToString(); //服务执行间隔时间,小时为单位
System.Timers.Timer _timer = new System.Timers.Timer(); //定时器
public UnzipFileService()
{
InitializeComponent();
}
#region ->
protected override void OnStart(string[] args)
{
// TODO: 在此处添加代码以启动服务。
int ExecMinutes = Convert.ToInt32(ExecTime == "" ? "1" : ExecTime);
int _interval = ExecMinutes * 60 * 1000; //设置定时任务执行间隔(分钟)
_timer.Interval = _interval;
_timer.AutoReset = true;
_timer.Enabled = true;
_timer.Elapsed += new System.Timers.ElapsedEventHandler(ActionRun);
_timer.Start();
LogUtil.WriteLog("文件解压服务启动");
RunProccess();
}
#endregion
#region ->
protected override void OnStop()
{
// TODO: 在此处添加代码以执行停止服务所需的关闭操作。
_timer.AutoReset = false;
_timer.Enabled = false;
_timer.Stop();
LogUtil.WriteLog("文件解压服务停止");
}
#endregion
#region ->
private void ActionRun(object sender, System.Timers.ElapsedEventArgs e)
{
RunProccess();
//处理异常解压缩日志
ReUnzipErrorFile();
}
#endregion
#region ->
/// <summary>
/// 解压收银机上传的文本文件,并插入数据库
/// 自然日口径:前一日销售流水表、前一日销售流水明细表
/// 账期口径:单品数据表、异常稽核表、异常稽核明细表、异常稽核统计表、移动支付异常记录表、促销流水表、日志文件
/// </summary>
public void RunProccess()
{
try
{
if (ZipUrl == "")
{
LogUtil.WriteLog("文件解压失败:文件夹路径不能为空");
}
else
{
string fileName = ZipUrl;
//获取存储流水、异常稽核、移动支付的数据库连接数据库在151orcl
OracleHelper _OracleHelper = new OracleHelper(_OracleConnStr.Split(',')[0],
_OracleConnStr.Split(',')[1], _OracleConnStr.Split(',')[2], _OracleConnStr.Split(',')[3]);
//获取存储单品数据、促销流水的数据库连接数据库在175orcl
OracleHelper _OracleHelper_Business = new OracleHelper(_OracleConnStr_Business.Split(',')[0],
_OracleConnStr_Business.Split(',')[1], _OracleConnStr_Business.Split(',')[2], _OracleConnStr_Business.Split(',')[3]);
//获取给定路径下-所有匹配文件
DirectoryInfo dir = new DirectoryInfo(@fileName.TrimEnd('\\'));
//解压自然日文件夹下面的压缩文件:销售
Method.UnZipHelper.UnZipDirFiles(dir, "PosDataFile_NaturalDay", _OracleHelper, _OracleHelper_Business);
//解压日结营收文件夹下面的压缩文件
Method.UnZipHelper.UnZipDirFiles(dir, "PosDataFile_EndAccount", _OracleHelper, _OracleHelper_Business);
//解压重传的日结营收文件夹下面的压缩文件
Method.UnZipHelper.ReUnZipDirFiles(dir, "PosDataFile_ReEndAccount", _OracleHelper, _OracleHelper_Business);
}
}
catch (Exception ex)
{
LogUtil.WriteLog("文件解压失败:" + ex.Message);
}
finally
{
LogUtil.WriteLog("///------------执行结束------------///");
}
}
#endregion
#region ->
public void ReUnzipErrorFile()
{
try
{
if (ZipUrl == "")
{
LogUtil.WriteLog("文件解压失败:文件夹路径不能为空");
}
else
{
//获取存储流水的数据库连接数据库在151orcl
OracleHelper _OracleHelper = new OracleHelper(_OracleConnStr.Split(',')[0],
_OracleConnStr.Split(',')[1], _OracleConnStr.Split(',')[2], _OracleConnStr.Split(',')[3]);
//记录异常日志的数据库连接数据库在175orcl
OracleHelper _OracleHelper_Business = new OracleHelper(_OracleConnStr_Business.Split(',')[0],
_OracleConnStr_Business.Split(',')[1], _OracleConnStr_Business.Split(',')[2], _OracleConnStr_Business.Split(',')[3]);
//获取自然日压缩文件所在的文件目录
string fileName = ZipUrl + "\\PosDataFile_NaturalDay";
DirectoryInfo dirDaily = new DirectoryInfo(@fileName.TrimEnd('\\'));
//重新检测解压缩异常的日志记录
Method.UnZipHelper.ReUnzipErrorFile(dirDaily, _OracleHelper, _OracleHelper_Business);
}
}
catch (Exception ex)
{
LogUtil.WriteLog("文件解压失败:" + ex.Message);
}
finally
{
LogUtil.WriteLog("///------------执行结束------------///");
}
}
#endregion
}
}