http://127.0.0.1:50003/cservice?act=GetVersion
https://127.0.0.1:50004/cservice?act=GetVersion
Обе ссылки должны выдавать один и тот же результат, пример:
{"result": "1.0.4.3"}
{"result": "1.0.4.3"}
Пример запуска:
showme_azknums.py 2.54.0.500_FB_21003_UFALEI_2022-01-04
Пример результата:
C:\apps\azk\f\2.54.0.500_FB_21003_UFALEI_2022-01-04АЦК-Финансы: 2.54.0.500
Отчеты АЦК: 2.54.0.80
СОФИТ: 2.54.0.447
Модуль ЕИС: 12.0.0.1
Исходный код скрипта:
# 09.01.2022# Утилита сообщает версии системной сборки АЦК-Финансы и ее подсистем - отчеты, СОФИТ, ЕИС - в указанной пользователем папке.
# Принцип утилиты строится на том, что в каждой сборке АЦК-Финансы есть определенные jar-файлы (символизирующие системную сборку и ее подсистемы), содержащие определенные properties-файлы, в которых есть переменные "version.major", "version.minor", "version.release", "version.build" с информацией о полном номере версии (патча).
import sys, os, zipfile, webbrowser
# Список проверяемых jar-файлов и properties-файлов:
check_list = [
# АЦК-Финансы:
{"jar": "server/AzkServer.jar", "properties": "com/bssys/version.properties", "encoding": "windows-1251"}
,{"jar": "server/AzkRepKernel.jar", "properties": "com/bssys/azkserver/reports/repversion.properties", "encoding": "windows-1251"}
,{"jar": "server/AzkSofit.jar", "properties": "com/bssys/azkserver/sofit/sofitversion.properties", "encoding": "windows-1251"}
,{"jar": "server/eis.jar", "properties": "azk/eis/version.properties", "encoding": "windows-1251"}
# АЦК-Госзаказ:
,{"jar": "server/ordersrv.jar", "properties": "com/bssys/version.properties", "encoding": "unicode_escape"}
]
# Папка сборки АЦК, которую пользователь указал в командной строке при запуске утилиты:
azkdir = ''
if len(sys.argv) == 2: azkdir = sys.argv[1]
tmp_env_dir = os.environ['TEMP']
tmpdir = os.path.join(tmp_env_dir, 'showme_nums_temp')
outputfile = os.path.join(tmp_env_dir, 'showme_nums_output.txt')
outputfile_write = open(outputfile,'w')
ss_out = sys.stdout
sys.stdout = outputfile_write
if len(azkdir) > 0 and os.path.isdir(azkdir):
print(os.path.abspath(azkdir))
for jarfile in check_list:
product_name = ''
version_major = ''
version_minor = ''
version_release = ''
version_build = ''
# jarpath - полный путь к jar-файлу из check_list:
jarpath = os.path.join(azkdir, jarfile["jar"])
if os.path.isfile(jarpath) and zipfile.is_zipfile(jarpath):
# Извлекаем properties-файлы из jar-файла:
zipfile.ZipFile(jarpath).extract(jarfile["properties"], path=tmpdir)
# print(tmpdir + check_list[jarfile])
tmpjarfile = os.path.join(tmpdir, jarfile["properties"])
tmpjarfile_read = open(tmpjarfile, mode="r", encoding=jarfile["encoding"])
for tmpjarfile_line in tmpjarfile_read:
# Убираем лишний символ переноса в конце строки jar-файла:
tmpjarfile_line = tmpjarfile_line.replace('\n','')
# Делим строку по символу "=":
tmpjarfile_split = tmpjarfile_line.split('=')
if tmpjarfile_split[0] == 'product.name':
product_name = tmpjarfile_split[1]
if tmpjarfile_split[0] == 'version.major':
version_major = tmpjarfile_split[1]
if tmpjarfile_split[0] == 'version.minor':
version_minor = tmpjarfile_split[1]
if tmpjarfile_split[0] == 'version.release':
version_release = tmpjarfile_split[1]
if tmpjarfile_split[0] == 'version.build':
version_build = tmpjarfile_split[1]
if len(product_name) > 0:
print(f'{product_name}: {version_major}.{version_minor}.{version_release}.{version_build}')
elif len(azkdir) > 0 and not os.path.isdir(azkdir):
print(f"Указана несуществующая папка сборки АЦК: {azkdir}")
else:
print(f"Утилиту \"{os.path.basename(__file__)}\" нужно запускать с указанием папки сборки АЦК, в формате:\n{os.path.basename(__file__)} <папка сборки АЦК>\n\nПример:\n{os.path.basename(__file__)} azkfin2.54.0.500_ORA_21001_AMUR")
outputfile_write.close()
sys.stdout = ss_out
#input("\nНажмите клавишу \"Enter\" для закрытия окна...")
#Открыть файл с результатом в ассоциированном приложении:
webbrowser.open(outputfile)
*Описание проблемы:*
*Цель/потребность доработки:*
*Предлагаемое решение Заказчика:*
*Заключение сотрудника БФТ (L2):*
+Предлагаемое решение Сотрудника БФТ (L2) (согласовано с Заказчиком):+
*История обращений:*
[SP-|https://sd.bftcom.com/browse/SP-] → [FIN-|https://jira.bftcom.com/browse/FIN-]
*Контактные данные Заказчика:*
*Описание проблемы:*
*Предусловия:*
*Порядок действий:*
*Ожидаемый результат:*
*Фактический результат:*
*БД:*
*Заключение:*
*Обоснование заключения:*
*Временное решение:*
*Информация о критичности:*
#Путь к папке, где находится томкат с приложением
tcHome=c:/azk/a/bin/analysis_stable/tomcat
#URI к репозитарию обновлений. Пока поддерживается только протокол файловой системы
buildRepo.uri=file:///c:/azk/a/bin/analysis_stable/update_dirs
ERROR Provider "c" not installed
REQUEST URL:
/rest/qoti-rich-filters/latest/gadgets/controller/load-quick-filters
REQUEST TYPE:
POST
REQUEST DATA:
{"richFilterId":8,"wantedFilters":"20-26-s25-d168-d105-d107-d111-d110-d123-d125-d126-d127-d128-d121-d167","activeFilters":{"dynamic":{"customfield_26713":["34920"]}}}
STATUS CODE:
500
STACK TRACE:
java.lang.NullPointerException
at java.util.LinkedHashSet.(LinkedHashSet.java:168)
at com.google.common.collect.Maps$7.transformEntry(Maps.java:1812)
at com.google.common.collect.Maps$10.getValue(Maps.java:1857)
at com.google.common.collect.ImmutableMap.copyOf(ImmutableMap.java:292)
...

cf[26713] = ...по выпадающим значениям после знака "=" можно понять, что за поле скрывается под идентификатором 26713.
Оператор '~' не поддерживается 'Бюджет проекта ПУ' полем.или
The operator '~' is not supported by the 'Бюджет проекта ПУ' field.
issueFunction in issueFieldMatch("project = FIN AND issuetype in (Доработка) AND statusCategory != Done AND status not in (Сделан) AND \"Бюджет проекта ПУ\" is not null and statusCategory != Done", "Бюджет проекта ПУ", "(?i)Сопр")
issueFunction in issueFieldMatch("project = FIN AND issuetype in (Доработка) AND statusCategory != Done AND status not in (Сделан)", "Зафиксирован срок выдачи", "^\\u002b$")
issueFunction in issueFieldMatch("project = FIN AND issuetype in (Доработка) AND statusCategory != Done AND status not in (Сделан) AND \"Зафиксирован срок выдачи\" is not null", "Зафиксирован срок выдачи", "^\\u002b$")
labels not in (Ошибка_БЛ)то же самое что и
labels != Ошибка_БЛ
labels != Ошибка_БЛнужно применять
(labels != Ошибка_БЛ or labels is null)
project = SP AND "Ответственный L2" = currentUser() AND created >= startOfMonth() AND created < endOfMonth() AND issueFunction not in worklogged("after startOfMonth() before endOfMonth() by currentUser()")
"Служебная линия обработки" = L2 and (status = Новая or (status = "Получена информация" and "Ответственный L2" = currentUser()))Редакция №2:
("Служебная линия обработки" = L2 and status = Новая)
or
("Служебная линия обработки" = L2 and status = "Получена информация" and "Ответственный L2" = currentUser())
or
("Служебная линия обработки" = L2 and status = "Запрос информации внутр" and "Ответственный L2" = currentUser() and "Линия OLA" = 3)
"Служебная линия обработки" = L2 and status = "В работе" and "Ответственный L2" = currentUser()
"Служебная линия обработки" = L3 and "Ответственный L3" = currentUser()


select replace(replace(ASCIISTR('Документ "Сведение о платеже" не создан'),'\','\u'),'"','\"') from dual;В обратную сторону:
select UNISTR(replace(replace('\u0414\u043E\u043A\u0443\u043C\u0435\u043D\u0442 \"\u0421\u0432\u0435\u0434\u0435\u043D\u0438\u0435 \u043E \u043F\u043B\u0430\u0442\u0435\u0436\u0435\" \u043D\u0435 \u0441\u043E\u0437\u0434\u0430\u043D','\u','\'),'\"','"')) from dual;