99 lines
4.5 KiB
C#
99 lines
4.5 KiB
C#
using ICSharpCode.SharpZipLib.Zip;
|
|
using Learun.Application.TwoDevelopment.ZZDT_EC;
|
|
using Learun.Util;
|
|
using Learun.Util.SqlSugar;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Threading.Tasks;
|
|
using ec_projectEntity = Learun.Application.TwoDevelopment.ZZDT_EC.ec_projectEntity;
|
|
|
|
namespace Learun.Application.Web.Common
|
|
{
|
|
/// <summary>
|
|
/// 项目备份作业
|
|
/// </summary>
|
|
public class ProjectBakupJob
|
|
{
|
|
/// <summary>
|
|
/// 备份执行
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public static void Execute()
|
|
{
|
|
var projects = SqlSugarHelper.Db.Queryable<ec_projectEntity>().ToList();
|
|
//项目过滤条件,可以配置备份的项目
|
|
//.Where(x => x.ProjectId == "c151f5d4-cbe1-4522-945c-501b1ad990d5").ToList();
|
|
projects.ForEach(x =>
|
|
{
|
|
//UserInfo userInfo = LoginUserInfo.Get();
|
|
//获取要备份的数据库表名
|
|
List<string> list_tblName = BackupTable.GetBackupTableList();
|
|
list_tblName.Add("lr_base_annexesfile");
|
|
string filename = x.ProjectName + "_备份_" + DateTime.Now.ToString("yyyyMMddHHmmss");//文件名
|
|
string filePath = string.Format("{0}/{1}/{2}/{3}/{4}/{5}", Config.GetValue("AnnexesFile"), "Backup", "System", DateTime.Now.ToString("yyyyMMdd"), Guid.NewGuid().ToString("D"), filename);
|
|
string ZipFilesPath = filePath + ".zip";//ZIP包存放的路径
|
|
long fileSize = 0;
|
|
var bakupIBLL = new ec_project_bakupBLL();
|
|
new TaskFactory().StartNew(() =>
|
|
{
|
|
try
|
|
{
|
|
string sqlitePath = Path.Combine(filePath, "dbbackup");
|
|
if (!Directory.Exists(sqlitePath))
|
|
{
|
|
Directory.CreateDirectory(sqlitePath);
|
|
}
|
|
|
|
sqlitePath = Path.Combine(sqlitePath, "sqlitebackup.db");
|
|
//创建sqlite文件
|
|
SqliteHelper.NewSqliteDatabase(sqlitePath);
|
|
string fileBackupPath = filePath + "/filebackup";
|
|
if (!Directory.Exists(fileBackupPath))
|
|
{
|
|
Directory.CreateDirectory(fileBackupPath);
|
|
}
|
|
//往sqlite里面添加和插入表数据
|
|
bakupIBLL.CreateAndAddBySqlit(x.ProjectId, list_tblName, sqlitePath, fileBackupPath, x.ProjectIndex.ToString());
|
|
//提交
|
|
SqliteHelper.SaveChange();
|
|
|
|
//将集合生成为压缩文件
|
|
ZipOutputStream stream = new ZipOutputStream(File.Create(ZipFilesPath));
|
|
stream.SetLevel(0); // 压缩级别 0-9
|
|
byte[] buffer = new byte[4096]; //缓冲区大小
|
|
string[] filenames = Directory.GetFiles(filePath, "*.*", SearchOption.AllDirectories);
|
|
foreach (string file in filenames)
|
|
{
|
|
ZipEntry entry = new ZipEntry(file.Replace(filePath, ""));
|
|
stream.PutNextEntry(entry);
|
|
|
|
using (FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
|
|
{
|
|
int sourceBytes;
|
|
do
|
|
{
|
|
sourceBytes = fs.Read(buffer, 0, buffer.Length);
|
|
stream.Write(buffer, 0, sourceBytes);
|
|
} while (sourceBytes > 0);
|
|
}
|
|
}
|
|
fileSize = stream.Length;
|
|
|
|
stream.Finish();
|
|
stream.Close();
|
|
//Directory.Delete(filePath.Replace('/', '\\'), true);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
SqliteHelper.Close();
|
|
}
|
|
}).ContinueWith(t => {
|
|
//往数据库备份表中和附件表中插入数据
|
|
bakupIBLL.SaveEntity(x.ProjectId, x.ProjectName, ZipFilesPath, "System", "超级管理员", fileSize);
|
|
});
|
|
});
|
|
}
|
|
}
|
|
}
|