/
AstroJohn
/
MailRobot
Обзор
Документация
Войти
/
AstroJohn
/
MailRobot
Код
Запросы
0
Задачи
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
TwoCapitals/LogScoringTwoCapitals.cs
192 строки
5 KB
AstroJohn
1st commit
11 сен 2024, 13:31
11 сен 2024, 13:31
0f57dc5
Код
Авторство
О чём код?
using System.Collections.Generic; using System.Data.Entity; using System.Linq; using System.Text; using Common; using DbContext; using DbContext.Models; using LogProcessingModels.Scoring; using LogScoring; namespace TwoCapitals { [ContestProcessor("TWOCAPITALS")] public class LogScoringTwoCapitals : LogScoringBaseHf { public override string MySqlTableNamePrefix => "TWOCAPITALS_"; public override bool CheckOperatorsTagForRussianCallsigns => false; public override bool IsVhf => false; public override int? TourDuration => null; /// <summary> /// Допустимы повторы на разных диапазонах /// </summary> public override bool IsDupesByBandAllowed => true; /// <summary> /// Допустимы повторы разными видами работы /// </summary> public override bool IsDupesByModeAllowed => false; /// <summary> /// Множитель по диапазонам /// </summary> public override bool IsMultByBand => false; /// <summary> /// Множитель по видам работы /// </summary> public override bool IsMultByMode => false; protected override string GetMult(Qsos qso, int multType) { return null; } protected override int[] MultiplierTypes => new int[] { }; protected override decimal CalcQsoPoints(Qsos qso, LogFiles log) { return 1; } protected override int GetScore(int points, IEnumerable<LogFilesBandResultsMults> mult, int? qsos = null) { return points; } public override string GetTextScore(Log log, IEnumerable<LogFilesBandResults> scores) { var builder = new StringBuilder(); var scoresArray = scores.ToArray(); /* CALLSIGN: RX9CBS CATEGORY: SINGLE-OP LOW L ======================== Band Mode QSOs Points ======================== 80 m CW 0 0 40 m CW 32 31 ------------------------ Total All 32 31 ======================== Score: 31 */ var bands = new [] { "80 m", "40 m" }; var modes = new [] { "CW" }; builder.AppendLine($"CALLSIGN: {log.Station.Call}"); builder.AppendLine($"CATEGORY: {log.Category.Category}"); builder.AppendLine("========================"); builder.AppendLine(" Band Mode QSOs Points"); builder.AppendLine("========================"); foreach (var band in bands) foreach (var mode in modes) { var bandId = Bands.FirstOrDefault(x => x.BandLong == band)?.Id; var modeId = Modes.FirstOrDefault(x => x.Mode == mode)?.Id; var bandModeScore = scoresArray.FirstOrDefault(x => x.ModeId == modeId && x.BandId == bandId); var line = bandModeScore == null ? $"{band,5}{mode,6}{0,6:D}{0,7:N0}" : $"{band,5}{mode,6}{bandModeScore.Qsos,6:D}{bandModeScore.Points,7:N0}"; builder.AppendLine(line); } var score = scoresArray.FirstOrDefault(x => x.ModeId == 0 && x.BandId == 0); builder.AppendLine("------------------------"); builder.AppendLine($"{"Total",5}{"All",6}{score?.Qsos,6:D}{score?.Points,7:N0}"); builder.AppendLine("========================"); builder.AppendLine($"Score: {score?.Score:N0}"); return builder.ToString(); } protected override void AfterCrossCheckProcessing(CrossCheckDb context) { base.AfterCrossCheckProcessing(context); var sqlCommandText = @" Update LogFilesCategory Set LogFilesCategory.Category = left(LogFilesCategory.Category, len(LogFilesCategory.Category) - 1) + Stns.Letter From LogFilesCategory Join ( Select Call1 Call, Case When isnumeric(NrSent) = 0 Then right(NrSent, 1) Else 'N' End Letter From QSOs Group By Call1, Case When isnumeric(NrSent) = 0 Then right(NrSent, 1) Else 'N' End ) Stns On Stns.Call = LogFilescategory.Call Where LogFilesCategory.Category <> 'CHECKLOG' And LogFilesCategory.Category <> 'MODEL' Declare @Calls Table ( Call Varchar(30), cnt Int ) Insert @Calls Select Call2 Call, count(*) cnt From QSOs Where ErrType = 'nl' Group By Call2 Having count(*) >= 5 Update QSOs Set ErrType = '+' From QSOs Join @Calls Calls On Calls.Call = QSOs.Call2 Where QSOs.ErrType = 'nl'"; context.Database.ExecuteSqlCommand(sqlCommandText); } protected override void UploadResults(CrossCheckDb context) { base.UploadResults(context); var sqlCommandText = @"Exec TWOCAPITALS_Teams"; context.Database.ExecuteSqlCommand(TransactionalBehavior.DoNotEnsureTransaction, sqlCommandText); } protected override void BeforeCrossCheckProcessing(CrossCheckDb context) { var sqlCommandText = @" -- убираем незначащие нули из номеров Update QSOs Set NrSent = cast(cast(left(NrSent, len(NrSent) - 1) As Int) As Varchar) + right(NrSent, 1) Where isnumeric(right(NrSent, 1)) = 0 And isnumeric(left(NrSent, len(NrSent) - 1)) = 1 Update QSOs Set NrRcvd = cast(cast(left(NrRcvd, len(NrRcvd) - 1) As Int) As Varchar) + right(NrRcvd, 1) Where isnumeric(right(NrRcvd, 1)) = 0 And isnumeric(left(NrRcvd, len(NrRcvd) - 1)) = 1 Update QSOs Set NrSent = cast(cast(NrSent As Int) As Varchar) Where isnumeric(NrSent) = 1 Update QSOs Set NrRcvd = cast(cast(NrRcvd As Int) As Varchar) Where isnumeric(NrRcvd) = 1"; context.Database.ExecuteSqlCommand(sqlCommandText); } } }