导入秩序册完善
This commit is contained in:
parent
ac01569cde
commit
221d937b8f
@ -80,7 +80,19 @@ public class OrderBookService : IDynamicApiController, ITransient
|
|||||||
[HttpGet("template")]
|
[HttpGet("template")]
|
||||||
public async Task<IActionResult> DownloadTemplate([FromQuery] string? projectMode)
|
public async Task<IActionResult> DownloadTemplate([FromQuery] string? projectMode)
|
||||||
{
|
{
|
||||||
var bytes = await new OrderBookTemplateExporter().ExportAsync();
|
var scoreRuleNames = await _scoreRuleRepository.AsQueryable()
|
||||||
|
.Where(x => !x.DeleteMark && x.Status == AvailabilityStatus.Enable)
|
||||||
|
.Select(x => x.RuleName)
|
||||||
|
.ToListAsync();
|
||||||
|
scoreRuleNames = scoreRuleNames
|
||||||
|
.Where(x => !string.IsNullOrWhiteSpace(x))
|
||||||
|
.Distinct(StringComparer.Ordinal)
|
||||||
|
.OrderBy(x => x, StringComparer.Ordinal)
|
||||||
|
.ToList();
|
||||||
|
if (scoreRuleNames.Count == 0)
|
||||||
|
throw Oops.Bah("当前没有已启用的计分规则,请先配置计分规则后再下载模板");
|
||||||
|
|
||||||
|
var bytes = await new OrderBookTemplateExporter(scoreRuleNames).ExportAsync();
|
||||||
return new FileContentResult(bytes, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
|
return new FileContentResult(bytes, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet")
|
||||||
{
|
{
|
||||||
FileDownloadName = "秩序册导入模板.xlsx"
|
FileDownloadName = "秩序册导入模板.xlsx"
|
||||||
@ -303,7 +315,8 @@ public class OrderBookService : IDynamicApiController, ITransient
|
|||||||
.Select(x => x.RuleName).ToListAsync();
|
.Select(x => x.RuleName).ToListAsync();
|
||||||
foreach (var entry in entries.Where(x => !string.IsNullOrWhiteSpace(x.ScoreRuleName)
|
foreach (var entry in entries.Where(x => !string.IsNullOrWhiteSpace(x.ScoreRuleName)
|
||||||
&& !existingNames.Contains(x.ScoreRuleName)))
|
&& !existingNames.Contains(x.ScoreRuleName)))
|
||||||
issues.Add(Issue(entry.Row, "计分规则", $"计分规则【{entry.ScoreRuleName}】不存在或已停用"));
|
issues.Add(Issue(entry.Row, "计分规则",
|
||||||
|
$"计分规则【{entry.ScoreRuleName}】不存在或已停用,请从最新版模板的「计分规则参考」工作表选择"));
|
||||||
}
|
}
|
||||||
|
|
||||||
private async Task ValidateRefereesAsync(
|
private async Task ValidateRefereesAsync(
|
||||||
@ -816,10 +829,18 @@ public class OrderBookService : IDynamicApiController, ITransient
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 秩序册导入模板导出器:出场秩序 + 裁判名单 两个工作表
|
/// 秩序册导入模板导出器:出场秩序 + 裁判名单 + 计分规则参考
|
||||||
/// </summary>
|
/// </summary>
|
||||||
internal sealed class OrderBookTemplateExporter : ExcelExportBase
|
internal sealed class OrderBookTemplateExporter : ExcelExportBase
|
||||||
{
|
{
|
||||||
|
private const int EntryInputEndRow = 1000;
|
||||||
|
private readonly IReadOnlyList<string> _scoreRuleNames;
|
||||||
|
|
||||||
|
public OrderBookTemplateExporter(IReadOnlyList<string> scoreRuleNames)
|
||||||
|
{
|
||||||
|
_scoreRuleNames = scoreRuleNames;
|
||||||
|
}
|
||||||
|
|
||||||
public override Task<byte[]> ExportAsync()
|
public override Task<byte[]> ExportAsync()
|
||||||
{
|
{
|
||||||
var headerColor = Color.FromArgb(217, 225, 242);
|
var headerColor = Color.FromArgb(217, 225, 242);
|
||||||
@ -827,12 +848,18 @@ internal sealed class OrderBookTemplateExporter : ExcelExportBase
|
|||||||
#region 出场秩序
|
#region 出场秩序
|
||||||
CreateWorksheet("出场秩序");
|
CreateWorksheet("出场秩序");
|
||||||
var entryHeaders = new[] { "项目名称*", "计分规则*", "组别名称*", "姓名*", "队伍名称", "单位", "场次*", "场地*" };
|
var entryHeaders = new[] { "项目名称*", "计分规则*", "组别名称*", "姓名*", "队伍名称", "单位", "场次*", "场地*" };
|
||||||
SetMergeTitle("秩序册 - 出场秩序(带*为必填,队伍名称和单位可不填)", 1, 1, 1, entryHeaders.Length, headerColor, 12);
|
SetMergeTitle("秩序册 - 出场秩序(带*为必填;计分规则请从下拉列表选择)", 1, 1, 1, entryHeaders.Length, headerColor, 12);
|
||||||
SetHeaders(entryHeaders, 2, headerColor);
|
SetHeaders(entryHeaders, 2, headerColor);
|
||||||
var sample = new[] { "个人花样", "个人花样(精英级)", "B", "崔一,崔二", "", "某某单位", "个人花样-1号场地", "1号场地" };
|
|
||||||
for (var c = 0; c < sample.Length; c++)
|
|
||||||
Worksheet.Cells[3, c + 1].Value = sample[c];
|
|
||||||
SetDataRowStyle(3, entryHeaders.Length);
|
SetDataRowStyle(3, entryHeaders.Length);
|
||||||
|
var scoreRuleValidation = Worksheet.DataValidations.AddListValidation($"B3:B{EntryInputEndRow}");
|
||||||
|
scoreRuleValidation.Formula.ExcelFormula = $"'计分规则参考'!$B$3:$B${_scoreRuleNames.Count + 2}";
|
||||||
|
scoreRuleValidation.AllowBlank = false;
|
||||||
|
scoreRuleValidation.ShowInputMessage = true;
|
||||||
|
scoreRuleValidation.PromptTitle = "请选择计分规则";
|
||||||
|
scoreRuleValidation.Prompt = "下拉列表来自当前已启用的计分规则。";
|
||||||
|
scoreRuleValidation.ShowErrorMessage = true;
|
||||||
|
scoreRuleValidation.ErrorTitle = "计分规则无效";
|
||||||
|
scoreRuleValidation.Error = "请选择下拉列表中的计分规则。";
|
||||||
SetColumnWidths(new double[] { 18, 22, 14, 22, 18, 22, 22, 16 });
|
SetColumnWidths(new double[] { 18, 22, 14, 22, 18, 22, 22, 16 });
|
||||||
FreezePanes(3, 1);
|
FreezePanes(3, 1);
|
||||||
#endregion
|
#endregion
|
||||||
@ -840,13 +867,25 @@ internal sealed class OrderBookTemplateExporter : ExcelExportBase
|
|||||||
#region 裁判名单
|
#region 裁判名单
|
||||||
CreateWorksheet("裁判名单");
|
CreateWorksheet("裁判名单");
|
||||||
var refereeHeaders = new[] { "序号", "姓名*", "手机号*" };
|
var refereeHeaders = new[] { "序号", "姓名*", "手机号*" };
|
||||||
SetMergeTitle("秩序册 - 裁判名单(裁判须先完成注册认证;无裁判可不填本工作表)", 1, 1, 1, refereeHeaders.Length, headerColor, 12);
|
SetMergeTitle("秩序册 - 裁判名单(须完成注册认证;无裁判可留空)", 1, 1, 1, refereeHeaders.Length, headerColor, 12);
|
||||||
SetHeaders(refereeHeaders, 2, headerColor);
|
SetHeaders(refereeHeaders, 2, headerColor);
|
||||||
var refereeSample = new[] { "1", "李四", "13900000000" };
|
|
||||||
for (var c = 0; c < refereeSample.Length; c++)
|
|
||||||
Worksheet.Cells[3, c + 1].Value = refereeSample[c];
|
|
||||||
SetDataRowStyle(3, refereeHeaders.Length);
|
SetDataRowStyle(3, refereeHeaders.Length);
|
||||||
SetColumnWidths(new double[] { 8, 16, 18 });
|
SetColumnWidths(new double[] { 10, 18, 22 });
|
||||||
|
FreezePanes(3, 1);
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region 计分规则参考
|
||||||
|
CreateWorksheet("计分规则参考");
|
||||||
|
var scoreRuleHeaders = new[] { "序号", "计分规则名称" };
|
||||||
|
SetMergeTitle("当前已启用的计分规则", 1, 1, 1, scoreRuleHeaders.Length, headerColor, 12);
|
||||||
|
SetHeaders(scoreRuleHeaders, 2, headerColor);
|
||||||
|
for (var i = 0; i < _scoreRuleNames.Count; i++)
|
||||||
|
{
|
||||||
|
Worksheet.Cells[i + 3, 1].Value = i + 1;
|
||||||
|
Worksheet.Cells[i + 3, 2].Value = _scoreRuleNames[i];
|
||||||
|
SetDataRowStyle(i + 3, scoreRuleHeaders.Length);
|
||||||
|
}
|
||||||
|
SetColumnWidths(new double[] { 8, 36 });
|
||||||
FreezePanes(3, 1);
|
FreezePanes(3, 1);
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user