Skip to content

Commit

Permalink
添加版本控制(后端)
Browse files Browse the repository at this point in the history
  • Loading branch information
NoneDay committed Oct 11, 2024
1 parent e834fb2 commit 682d9f0
Show file tree
Hide file tree
Showing 2 changed files with 90 additions and 22 deletions.
96 changes: 79 additions & 17 deletions end/reportWeb/Controllers/DesignController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
using System.Text.RegularExpressions;
using reportWeb.Pages;
using SqlKata.Execution;
using System.Xml;
namespace reportWeb.Controllers
{
[Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)]
Expand Down Expand Up @@ -491,23 +492,32 @@ string getReal_path(string target, String file_type)
return Json(new { errcode = 1, message = "非法命令" });
}
return Json(new { errcode = 0, message = "保存成功" });


}
[HttpPost]
public async Task<IActionResult> Open(String reportName, string zb_dict_str, string zb_param)
public async Task<IActionResult> Open(String reportName, string cur_version = "")
{
if (reportName.StartsWith("/"))
reportName = reportName.Substring(1);
if (cur_version == null)
cur_version = "";
var file_path = Path.Combine(this.rpt_group.report_path, reportName);
if (file_path.StartsWith(this.rpt_group.report_path)
&& System.IO.File.Exists(file_path))
{
using Env parent_env = new Env("open");
await XmlReport.templateValue2Env(this.rpt_group.report_path, reportName, parent_env);
var xmlDoc = (await XmlReport.getReportXmlDoc(this.rpt_group.report_path, reportName, isDesign: true)).xml;
//var ret = XmlReport.reportToXmlDocumnt(XmlReport.loadReport(file_path), false).OuterXml;
//var report_content = await System.IO.File.ReadAllTextAsync(file_path, System.Text.Encoding.UTF8);

XmlDocument xmlDoc;
var versions = ReportVersions(reportName);
if (cur_version == "" || cur_version == versions[0][0])
{
xmlDoc = (await XmlReport.getReportXmlDoc(this.rpt_group.report_path, reportName, isDesign: true)).xml;
}
else
{
cur_version = DateTime.Parse(cur_version).ToString("yyyy_MM_dd_HH_mm_ss");
xmlDoc = (await XmlReport.getReportXmlDoc(this.rpt_group.report_path, ".backup/" + reportName + cur_version, isDesign: true)).xml;
}
var conn_list = from x in this.rpt_group.db_connection_list select x.name;
var ttt = await range_level(xmlDoc.OuterXml, reportName);
return Json(new
Expand All @@ -516,12 +526,34 @@ public async Task<IActionResult> Open(String reportName, string zb_dict_str, str
conn_list,
range_level = ttt.range_level,
defaultsetting = ttt.defaultsetting,
versions,
parent_defaultsetting = new Dictionary<String, String>((from x in parent_env.TemplateGet("out_keys").Split(",") select new KeyValuePair<string, string>(x, parent_env.TemplateGet(x))))
}
);
}
return Json(new { errcode = 1, message = "路径错误" });
}

private List<string[]> ReportVersions(string reportName)
{
var versions = new List<string[]>();
var back_file_info = new FileInfo(Path.Combine(this.rpt_group.report_path, ".backup", reportName + "_desc"));
versions.Add(new String[] { new FileInfo(Path.Combine(this.rpt_group.report_path, reportName)).LastWriteTime.ToString("yyyy-MM-dd HH:mm:ss"), "当前版本" });
//versions.Add("当前版本");
if (System.IO.File.Exists(back_file_info.FullName))
{
versions.AddRange(System.IO.File.ReadAllText(back_file_info.FullName).Split(version_split).Skip(1).Select(x =>
{
return (new String[] { x.Substring(0, "yyyy-MM-dd HH:mm:ss".Length), x.Substring("yyyy-MM-dd HH:mm:ss".Length).Trim() });
}).Reverse());
if (versions[1][0] == versions[0][0])
{
versions.RemoveAt(0);
}
}
return versions;
}

private async Task insert_ds_param(string reportName, string zb_dict_str, string zb_param)
{
var file_path = Path.Combine(this.rpt_group.report_path, reportName);
Expand Down Expand Up @@ -645,13 +677,14 @@ private async Task insert_ds_param(string reportName, string zb_dict_str, string
xmlDoc.Save(file_path);

}
public async Task<IActionResult> Save(String reportName, String content, string zb_dict_str, string zb_param, IFormFile imgFile)
public async Task<IActionResult> Save(String reportName, String content, String cur_version, IFormFile imgFile, string desc)
{
if (reportName.StartsWith("/"))
reportName = reportName.Substring(1);
if (!Directory.Exists(this.rpt_group.report_path))
Directory.CreateDirectory(this.rpt_group.report_path);
var file_path = Path.Combine(this.rpt_group.report_path, reportName);

if (file_path.StartsWith(this.rpt_group.report_path))
{
var fileInfo = new FileInfo(file_path);
Expand All @@ -665,22 +698,49 @@ public async Task<IActionResult> Save(String reportName, String content, string
}
return Json(new { errcode = 0, message = "保存图片成功" }); ;
}
if (!fileInfo.Exists || (fileInfo.Exists && String.IsNullOrEmpty(zb_dict_str)))
{
System.Xml.XmlDocument xmlDoc = Content2XmlDoc(content.Replace("\r", ""));
xmlDoc.Save(file_path);
XmlReport.MemoryCacheInstance.Remove(file_path);
}
if (!String.IsNullOrEmpty(zb_dict_str))
{
await insert_ds_param(reportName, zb_dict_str, zb_param);
var now_time = DateTime.Now;
var all_versions = ReportVersions(reportName);
var LastWriteTime = fileInfo.LastWriteTime.ToString("yyyy-MM-dd HH:mm:ss");
var interval_day = TimeSpan.FromDays(configuration.GetValue<double>("auto_save_interval_day", 7.0d));
var back_file_path = Path.Combine(this.rpt_group.report_path, ".backup", reportName + now_time.ToString("yyyy_MM_dd_HH_mm_ss"));
var back_fileInfo = new FileInfo(back_file_path);
if (!Directory.Exists(back_fileInfo.DirectoryName))
Directory.CreateDirectory(back_fileInfo.DirectoryName);

if (fileInfo.Exists && fileInfo.LastWriteTime.ToString("yyyy-MM-dd HH:mm:ss") != cur_version)
{//旧版本报表覆盖新版本报表,先备份旧版本
System.IO.File.Copy(file_path, back_file_path);
System.IO.File.AppendAllLines(Path.Combine(this.rpt_group.report_path, ".backup", reportName + "_desc")
, new String[] { version_split + now_time.ToString("yyyy-MM-dd HH:mm:ss"),
$"恢复旧版本【{cur_version}】前的备份"
});
}
else if (fileInfo.Exists && now_time - fileInfo.LastWriteTime > interval_day)
{//超过指定间隔时间
System.IO.File.Copy(file_path, back_file_path);
System.IO.File.AppendAllLines(Path.Combine(this.rpt_group.report_path, ".backup", reportName + "_desc")
, new String[] { version_split + now_time.ToString("yyyy-MM-dd HH:mm:ss"),
$"间隔超过{interval_day}天自动对【{LastWriteTime}】备份"
});
}
//保存报表
System.Xml.XmlDocument xmlDoc = Content2XmlDoc(content.Replace("\r", ""));
xmlDoc.Save(file_path);

if (!string.IsNullOrWhiteSpace(desc))
{//如果有版本描述,备份当前报表
System.IO.File.Copy(file_path, back_file_path);
System.IO.File.AppendAllLines(Path.Combine(this.rpt_group.report_path, ".backup", reportName + "_desc")
, new String[] { version_split + now_time.ToString("yyyy-MM-dd HH:mm:ss"), desc });
}
return Json(new { errcode = 0, message = "保存成功" });
XmlReport.MemoryCacheInstance.Remove(file_path);
return Json(new { errcode = 0, message = "保存成功", versions = ReportVersions(reportName) });
}
return Json(new { errcode = 1, message = "路径错误" });


}
private static string version_split = "=========版本说明============";
static System.Xml.XmlDocument Content2XmlDoc(string content)
{
var xmlDoc = new System.Xml.XmlDocument();
Expand Down Expand Up @@ -825,6 +885,8 @@ public IActionResult List(String loc_path = ".")
//遍历文件夹
foreach (DirectoryInfo NextFolder in parent.GetDirectories())
{
if (NextFolder.Name == ".backup")
continue;
ret.children.Add(new MyFileInfo(NextFolder.FullName)
{
FileName = NextFolder.Name,
Expand Down
16 changes: 11 additions & 5 deletions end/reportWeb/Controllers/PdfController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ public byte[] buildPdf(string report_str, PageSetup ps)
int idx = 0;
for (; idx < 1000; idx++)
{
var cur_font = configuration["pdf_fonts" + ":" + idx] ;
var cur_font = configuration["pdf_fonts" + ":" + idx];
if (cur_font == null)
break;
FontProgram fontProgram = FontProgramFactory.CreateFont(cur_font);
Expand All @@ -104,7 +104,7 @@ public byte[] buildPdf(string report_str, PageSetup ps)
// fontProvider.AddFont(one);
//}
//String[] fonts = new string[] { "c:/windows/fonts/simfang.ttf" };




Expand Down Expand Up @@ -389,6 +389,7 @@ private Table addTable(ReportGridJSON rg, List<int> row_list, List<int> col_list
}
}
pdf_cell.SetBorder(Border.NO_BORDER);
float cur_font_size = 0;
foreach (var one_style in rg.find_style(rowNo, colNo))
{
switch (one_style.Key)
Expand All @@ -403,7 +404,8 @@ private Table addTable(ReportGridJSON rg, List<int> row_list, List<int> col_list
//ret["font-family"] = one_pair[1];
break;
case "FONT-SIZE":
pdf_cell.SetFontSize(float.Parse(one_style.Value));
cur_font_size = float.Parse(one_style.Value);
pdf_cell.SetFontSize(cur_font_size);
break;
case "font-weight":
pdf_cell.SetBold();
Expand Down Expand Up @@ -473,13 +475,15 @@ private Table addTable(ReportGridJSON rg, List<int> row_list, List<int> col_list
int deta = 0;
IBlockElement cur_pp = null;
var cur_str = cell_value == null ? "" : cell_value.ToString();
cur_str = (String.IsNullOrWhiteSpace(cur_str) ? "<span>&nbsp;</span>" : cur_str);
System.Web.HttpUtility.HtmlDecode(cur_str);
if (cur_str.StartsWith("<"))
{
var t_str = cur_str.Replace("width:100%", $"width:{max_width}pt").Replace("height:100%", $"height:{max_height}pt");
var t_list = HtmlConverter.ConvertToElements($"<div style='width:{max_width}pt;height:{max_height}pt'>{t_str}</div>", converterProperties);
var t_list = HtmlConverter.ConvertToElements($"<div style='font-size:{cur_font_size}pt;width:{max_width}pt;height:{max_height}pt'>{t_str}</div>", converterProperties);
if (t_list.Count == 1 && t_list[0] is IBlockElement)
{
cur_pp = (t_list[0] as iText.Layout.Element.Div).SetFont(sysFont).SetFontSize(11);
cur_pp = (t_list[0] as iText.Layout.Element.Div).SetFont(sysFont).SetFontSize(cur_font_size);
//(t_list[0] as iText.Layout.Element.Div).SetFontFamily(default_font).SetFontSize(11).GetRenderer();
//cur_pp.SetProperty(Property.AUTO_SCALE,)
//cur_pp.SetProperty(Property.HEIGHT, max_height);
Expand All @@ -497,6 +501,8 @@ private Table addTable(ReportGridJSON rg, List<int> row_list, List<int> col_list
// pdf_cell.SetFontSize(new_font_size);
}
cur_pp = new Paragraph(cur_str);
if (cur_str == "ⓧ")
pdf_cell.SetFont(sysFont);
}
pdf_cell.Add(cur_pp)
//replace_var_to_Paragraph(cell_value.ToString(),0,0)
Expand Down

0 comments on commit 682d9f0

Please sign in to comment.