146 lines
6.5 KiB
C#
146 lines
6.5 KiB
C#
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
|
||
}
|
||
}
|