Доработка
This commit is contained in:
1 parent
450387d25a
commit
2b47ff8e24
13 files changed
+598
-566
No files matched your search
@@ -1,13 +1,21 @@
|
|||||||
# mtstep вер1.0
|
# mtstep вер1.0
|
||||||
|
|
||||||
## Утилита для пропуска вопросов тренажера для сдачи тестов по аттестации лиц на право проектирования средств обеспечения пожарной безопасности зданий и сооружений, введённых в эксплуатацию с сайта: https://digital.mchs.gov.ru/fgpn/simulator
|
## Утилита для пропуска вопросов тренажера для сдачи тестов по аттестации лиц на право проектирования средств обеспечения пожарной безопасности зданий и сооружений, введённых в эксплуатацию с сайта: https://digital.mchs.gov.ru/fgpn/simulator
|
||||||
|
|
||||||
## Инструкция
|
## Инструкция
|
||||||
#### 1. Необходимо выбрать пункт `"марафон"`
|
|
||||||
#### 2. Нажать на `"Начать тестирование"`
|
|
||||||
#### 3. Из адресной строки: `"https://digital.mchs.gov.ru/testing/instance/75342faa-c77c-4811-abbe-ff8d8cec32a8"` выделить `"75342faa-c77c-4811-abbe-ff8d8cec32a8"`. Всегда индивидуальный при каждом начале тестирования и скопировать его в буфер обмена.
|
|
||||||
#### 4. Запустить программу `"mtstep"`
|
|
||||||
#### 5. Вставить в поле `"Необходимо ввести UUID сессии для начала загрузки"` скопированый в буфер обмена UUID (`"75342faa-c77c-4811-abbe-ff8d8cec32a8"`), у Вас будет другой необходимо ввести свой.
|
|
||||||
#### 6. Далее необходимо указать номер с какого вопроса хотите начинать отвечать
|
|
||||||
#### 7. После окончания работы утилиты, необходимо обновить страницу с тестами не закрывая ее.
|
|
||||||
#### 8. После чего страница перегрузится с того номера вопроса который был указан.
|
|
||||||
|
|
||||||
|
#### 1. Необходимо выбрать пункт `"марафон"`
|
||||||
|
|
||||||
|
#### 2. Нажать на `"Начать тестирование"`
|
||||||
|
|
||||||
|
#### 3. Из адресной строки: `"https://digital.mchs.gov.ru/testing/instance/75342faa-c77c-4811-abbe-ff8d8cec32a8"` выделить `"75342faa-c77c-4811-abbe-ff8d8cec32a8"`. Всегда индивидуальный при каждом начале тестирования и скопировать его в буфер обмена.
|
||||||
|
|
||||||
|
#### 4. Запустить программу `"mtstep"`
|
||||||
|
|
||||||
|
#### 5. Вставить в поле `"Необходимо ввести UUID сессии"` скопированый в буфер обмена UUID (`"75342faa-c77c-4811-abbe-ff8d8cec32a8"`), у Вас будет другой необходимо ввести свой.
|
||||||
|
|
||||||
|
#### 6. Далее необходимо указать номер с какого вопроса хотите начинать отвечать
|
||||||
|
|
||||||
|
#### 7. После окончания работы утилиты, необходимо обновить страницу с тестами не закрывая ее.
|
||||||
|
|
||||||
|
#### 8. После чего страница перегрузится с того номера вопроса который был указан.
|
||||||
+23
-11
@@ -2,6 +2,7 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"os"
|
||||||
|
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
"gitstore.ru/tolikproh/mchstest/internal/cnst"
|
"gitstore.ru/tolikproh/mchstest/internal/cnst"
|
||||||
@@ -10,24 +11,35 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
fmt.Println("Загрузка вопросов для тестирования с сайта:", cnst.Url)
|
fmt.Println("Загрузка вопросов для тестирования с сайта: https://digital.mchs.gov.ru/fgpn/simulator")
|
||||||
uidMchs, err := uuid.Parse(util.InputTerminal("Необходимо ввести UUID сессии для начала загрузки"))
|
uidMchs, err := uuid.Parse(util.InputTerminal("Необходимо ввести UUID сессии для начала загрузки"))
|
||||||
if err != nil {
|
util.Check(err, "ОШИБКА: формат UUID не верный. Зазрузка отменена.")
|
||||||
fmt.Println("ОШИБКА: формат UUID не верный. Зазрузка отменена.")
|
filename := util.InputTerminal("Введите имя файла для сохранения")
|
||||||
} else {
|
util.Check(err, "")
|
||||||
|
|
||||||
var rN model.ReqNull
|
var rN model.ReqNull
|
||||||
var rA model.ReqAnswer
|
var rA model.ReqAnswer
|
||||||
body, _ := util.ReqestToSiteJSON(rN, cnst.Url, uidMchs)
|
f, err := os.Create(filename + ".json")
|
||||||
fmt.Println("[")
|
util.Check(err, "")
|
||||||
|
defer f.Close()
|
||||||
|
|
||||||
|
body, err := util.ReqestToSiteJSON(rN, cnst.Url, uidMchs)
|
||||||
|
util.Check(err, "")
|
||||||
|
_, err = f.WriteString("[\n")
|
||||||
|
util.Check(err, "")
|
||||||
|
fmt.Print("Выполняется сохранение")
|
||||||
for i := 0; i < 520; i++ {
|
for i := 0; i < 520; i++ {
|
||||||
d := model.UnmarshalJSONToMTType(body)
|
d := model.UnmarshalJSONToMTType(body)
|
||||||
fmt.Print(model.MTTypeToJSON(d), ",\n")
|
_, err = f.WriteString(model.MTTypeToJSON(d) + ",\n")
|
||||||
|
util.Check(err, "")
|
||||||
rA.Answer = d.ValidAnswer
|
rA.Answer = d.ValidAnswer
|
||||||
body, _ = util.ReqestToSiteJSON(rA, cnst.Url, uidMchs)
|
body, err = util.ReqestToSiteJSON(rA, cnst.Url, uidMchs)
|
||||||
|
util.Check(err, "")
|
||||||
|
fmt.Print(".")
|
||||||
}
|
}
|
||||||
d := model.UnmarshalJSONToMTType(body)
|
d := model.UnmarshalJSONToMTType(body)
|
||||||
fmt.Println(model.MTTypeToJSON(d))
|
_, err = f.WriteString(model.MTTypeToJSON(d) + "\n]")
|
||||||
fmt.Println("]")
|
util.Check(err, "")
|
||||||
}
|
fmt.Println("\nСохранение списка вопросов завершено в файле", filename+".json")
|
||||||
|
|
||||||
}
|
}
|
||||||
+13
-11
@@ -2,30 +2,32 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
"gitstore.ru/tolikproh/mchstest/internal/model"
|
"gitstore.ru/tolikproh/mchstest/internal/model"
|
||||||
|
"gitstore.ru/tolikproh/mchstest/pkg/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
var inTest []model.MTType
|
var inTest []model.MTType
|
||||||
var outTest []model.MTParseT
|
var outTest []model.MTParseT
|
||||||
bs, err := ioutil.ReadFile("mchs_test.json")
|
filename := util.InputTerminal("Введите имя файла базы данных сохранненой с сайта для парсинга (json)")
|
||||||
if err != nil {
|
|
||||||
fmt.Println(err)
|
bs, err := ioutil.ReadFile(filename + ".json")
|
||||||
os.Exit(1)
|
util.Check(err, "")
|
||||||
}
|
|
||||||
|
|
||||||
err = json.Unmarshal(bs, &inTest)
|
err = json.Unmarshal(bs, &inTest)
|
||||||
if err != nil {
|
util.Check(err, "")
|
||||||
fmt.Println(err)
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, in := range inTest {
|
for _, in := range inTest {
|
||||||
outTest = append(outTest, in.Parse())
|
outTest = append(outTest, in.Parse())
|
||||||
}
|
}
|
||||||
fmt.Println(model.SaveToExel("mchs_test.xlsx", &outTest))
|
model.SaveToExel(filename+".xlsx", &outTest)
|
||||||
|
|
||||||
|
outTestJSON, err := json.Marshal(outTest)
|
||||||
|
util.Check(err, "")
|
||||||
|
|
||||||
|
err = os.WriteFile(filename+"_parse.json", outTestJSON, 0644)
|
||||||
|
util.Check(err, "")
|
||||||
}
|
}
|
||||||
+10
-15
@@ -11,21 +11,19 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
|
||||||
fmt.Println("Утилита для пропуска подготовительных вопросов (марафон) к тестированию с сайта: https://digital.mchs.gov.ru/fgpn/simulator")
|
fmt.Println("Утилита для пропуска подготовительных вопросов (марафон) к тестированию с сайта: https://digital.mchs.gov.ru/fgpn/simulator")
|
||||||
uidMchs, err := uuid.Parse(util.InputTerminalStr("Необходимо ввести UUID сессии для начала загрузки"))
|
uidMchs, err := uuid.Parse(util.InputTerminal("Необходимо ввести UUID сессии"))
|
||||||
if err != nil {
|
util.Check(err, "ОШИБКА: формат UUID не верный. Завершение работы.")
|
||||||
fmt.Println("ОШИБКА: формат UUID не верный. Завершение работы.")
|
|
||||||
|
|
||||||
} else {
|
numMchsStr := util.InputTerminal("Необходимо ввести номер вопроса (с 1 до 520)")
|
||||||
numMchsStr := util.InputTerminalStr("Необходимо ввести номер вопроса (с 1 до 520)")
|
|
||||||
numMchs, err := strconv.Atoi(numMchsStr)
|
numMchs, err := strconv.Atoi(numMchsStr)
|
||||||
if err != nil {
|
util.Check(err, "ОШИБКА: необходимо ввести номер в диапазоне с 1 до 520. Завершение работы.")
|
||||||
fmt.Println("ОШИБКА: необходимо ввести номер в диапазоне с 1 до 520. Завершение работы.")
|
|
||||||
|
|
||||||
}
|
|
||||||
if numMchs <= 0 || numMchs > 520 {
|
if numMchs <= 0 || numMchs > 520 {
|
||||||
fmt.Println("ОШИБКА: не верный диапазон (должно быть с 1 до 520). Завершение работы.")
|
util.Check(nil, "ОШИБКА: не верный диапазон (должно быть с 1 до 520). Завершение работы.")
|
||||||
} else {
|
}
|
||||||
|
|
||||||
var rN model.ReqNull
|
var rN model.ReqNull
|
||||||
var rA model.ReqAnswer
|
var rA model.ReqAnswer
|
||||||
fmt.Print("Выполняется")
|
fmt.Print("Выполняется")
|
||||||
@@ -34,11 +32,8 @@ func main() {
|
|||||||
d := model.UnmarshalJSONToMTType(body)
|
d := model.UnmarshalJSONToMTType(body)
|
||||||
fmt.Print(".")
|
fmt.Print(".")
|
||||||
rA.Answer = d.ValidAnswer
|
rA.Answer = d.ValidAnswer
|
||||||
body, _ = util.ReqestToSiteJSON(rA, cnst.Url, uidMchs)
|
body, err = util.ReqestToSiteJSON(rA, cnst.Url, uidMchs)
|
||||||
|
util.Check(err, "")
|
||||||
}
|
}
|
||||||
fmt.Println("\nРабота выполнена, пропущено", numMchs, "вопросов! Обновите страницу на сайте и продолжайте отвечать на подготовительные вопросы.")
|
fmt.Println("\nРабота выполнена, пропущено", numMchs, "вопросов! Обновите страницу на сайте и продолжайте отвечать на подготовительные вопросы.")
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
Binary file not shown.
Regular → Executable
BIN
Binary file not shown.
BIN
Binary file not shown.
@@ -0,0 +1,14 @@
|
|||||||
|
package util
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Check(e error, msg string) {
|
||||||
|
if e != nil {
|
||||||
|
fmt.Println(msg)
|
||||||
|
fmt.Println(e)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
}
|
||||||
+521
-521
File diff suppressed because it is too large.
Load diff
Executable
BIN
Binary file not shown.
@@ -0,0 +1 @@
|
|||||||
|
[{"question_number":1,"questions_count":521,"content_question":"Какого типа окрасочных камер с применением ЛВЖ и ГЖ необходимо защищать автоматическими установками пожаротушения:","answers":[{"title":"только покрасочные камеры с активным водяным полом","correct":false},{"title":"независимо от типа","correct":true},{"title":"только покрасочные камеры с фронтальной завесой","correct":false},{"title":"только покрасочные камеры с боковыми стенами","correct":false}]},{"question_number":2,"questions_count":521,"content_question":"Какое количество ПК-с и с каким минимальным расходом необходимо предусматривать в зданиях общежитий коридорного типа при количестве этажей до 10 включительно (или при высоте здания до 28 м включительно):","answers":[{"title":"1 ПК-с с расходом диктующего ПК-с 2,5 л/с","correct":true},{"title":"2 ПК-с с расходом диктующего ПК-с 2,5 л/с","correct":false},{"title":"1 ПК-с с расходом диктующего ПК-с 3 л/с","correct":false},{"title":"2 ПК-с с расходом диктующего ПК-с 3 л/с","correct":false}]},{"question_number":3,"questions_count":521,"content_question":"Какое количество ПК-с и с каким минимальным расходом необходимо предусматривать в зданиях общежитий коридорного типа при числе этажей свыше 10 до 16 включительно (или при высоте здания свыше 28 м):","answers":[{"title":"1 ПК-с с расходом диктующего ПК-с 2,5 л/с","correct":false},{"title":"2 ПК-с с расходом диктующего ПК-с 2,5 л/с","correct":true},{"title":"1 ПК-с с расходом диктующего ПК-с 3 л/с","correct":false},{"title":"2 ПК-с с расходом диктующего ПК-с 3 л/с","correct":false}]},{"question_number":4,"questions_count":521,"content_question":"Необходимо ли оборудовать системой пожарной сигнализации здания автостоянок закрытого типа надземные одноэтажные IV степени огнестойкости и класса конструктивной пожарной опасности С2 общей площадью пожарного отсека 700 м2:","answers":[{"title":"нет","correct":false},{"title":"только при общей площади пожарного отсека менее 500 м2","correct":false},{"title":"на усмотрение проектной организации","correct":false},{"title":"да","correct":true}]},{"question_number":5,"questions_count":521,"content_question":"Откуда допускается предусматривать дистанционное включение насосов ВПВ:","answers":[{"title":"из диспетчерского пункта либо пожарного поста","correct":true},{"title":"от кнопок ручного пуска, установленных возле или внутри пожарных шкафов ВПВ","correct":true},{"title":"от кнопок ручного пуска, установленных на расстоянии от пожарных шкафов не более чем на 15 м","correct":false},{"title":"только из помещения пожарного поста","correct":false}]},{"question_number":6,"questions_count":521,"content_question":"Какого типа сушильных камер (кроме камер с влажностью внутреннего воздуха свыше 60% при температуре свыше 24 °C) необходимо защищать автоматическими установками пожаротушения:","answers":[{"title":"только жидкостные камеры","correct":false},{"title":"независимо от типа","correct":true},{"title":"только радиационные камеры","correct":false},{"title":"только кондуктивные камеры","correct":false}]},{"question_number":7,"questions_count":521,"content_question":"Эвакуационные знаки пожарной безопасности, указывающие направление движения, следует устанавливать:","answers":[{"title":"в местах поворотов коридоров","correct":true},{"title":"в коридорах длиноLine truncated
|
||||||
Reference in new issue
Block a user