These are chat archives for springjazzy/GIS_JKH_Integration

29th
Mar 2016
Norem
@shsa
Mar 29 2016 03:30
Общался с коллегами из РСО и они обратили внимание на то, что счет за услуги можно выставить только как Объем * Тариф, причем тариф задается с точностью до двух знаков после запятой, а например тариф за электроэнергию устанавливается с точностью до 5 знаков после запятой за кВтч. Можно было бы перейти на расчеты в МВтч, но и объем ограничен 2 знаками после запятой...
Анатолий
@Anat56
Mar 29 2016 04:33
@mixamarciv как я понял, нужно и по дому все данные заполнить, а не только подъезды
Дмитрий
@naut13
Mar 29 2016 06:12
Пытаюсь использовать SoapUI. Создаю новый соап проект, в качестве WSDL указываю:
http://127.0.0.1:8080/ext-bus-home-management-service/services/HomeManagementAsync?wsdl
в резултате получаю
Error loading [http://127.0.0.1:8080/ext-bus-home-management-service/services/HomeManagementAsync?wsdl]: org.apache.xmlbeans.XmlException: org.apache.xmlbeans.XmlException: error: Unexpected element: CDATA
Кто использует SoapUI, подскажите как ему скормить wsdl ?
Vershinin Sergey
@versh23
Mar 29 2016 06:13
@naut13 указывай лучше файлы, которые в архиве на сайте
по ссылке он пытается подтянуть xsd, которые под basic авторизацией лежат
Дмитрий
@naut13
Mar 29 2016 06:17
@versh23 Спасибо, так получилось.
Теперь я пытаюсь отправить запрос на http://127.0.0.1:8080/ext-bus-home-management-service/services/HomeManagementAsync
а справа вместо ответа "Could not open some files in work directory - please contact administrator". Не сталкивались с такой ошибкой?

HTTP/1.1 200 OK
Content-Disposition: attachment; filename="HomeManagementAsync"
Content-Type: application/octet-stream

Could not open some files in work directory - please contact administrator

Дмитрий
@naut13
Mar 29 2016 06:23
Отключил прокси и заработало!
Vershinin Sergey
@versh23
Mar 29 2016 06:24
@naut13 вы тоже решили сразу на асинхронные методы ориентироваться?
Дмитрий
@naut13
Mar 29 2016 06:29
@versh23 да. С моей точки зрения, чем отличает синхроный режим от асинхронного.
Синхронный: Вы вызываете метод, ждете пока этот метод будет обработан на сервере, получаете ответ.
Асинхронный: Вызываете метод. Получаете ответ, о том что вызов зафиксирован и не ждете пока Ваш метод будет обработан сервером.
Мне кажется, что в периоды пиковых нагрузок, их сервера могут долго обрабатывать методы.
Плюс меня напрягает возможность дублирования при синхронных методах.
Например: Вы отправляете запрос на создания ЛС. Соединение падает. Сервер на своей стороне запрос обработал и ЛС создал, но Ваше приложение об этом не знает, так как ответ от сервера не дошел. Вы заново отправляете запрос на создание ЛС и в результате на сервере создается второй ЛС.
Vershinin Sergey
@versh23
Mar 29 2016 06:36

@naut13 ну да, так и есть. полезно когда большие данные в обработку даете и не отвалится по таймауту) У меня лично нет опыта работы в в таком виде асинхронных сервисах, можете поделится вашей архиектурой, как будет организованная обработка?
По идее должно быть два сервиса - отсылать команды и проверять их статус завершения.
Но также надо учитывать последовательность команд, например сначало импортнуть дома, потом выставить КУ, потом помещений и только потом доли.

это как получается, что изначально запускается массовая команда на ИмпортДомов. через какое то время запускается сервис проверки статуса обработки команд, и если импорт прошел успешно запускается следующая по порядку.

т.е. надо отдельно хранить все ИД запросов отправленных, их состояния и типы, чтобы понимать, как их обработать и что делать дальше. Примерно такой алгоритм?

Syber79
@Syber79
Mar 29 2016 06:40
А никто в качестве РСО дома еще не грузил?
Пробую свой дом закинуть - ругается на ОКТМО
    <ns4:Error>
      <ns4:ErrorCode>SRV004062</ns4:ErrorCode>
      <ns4:Description>Необходимо выбрать значение ОКТМО из самого нижнего уровня справочника ОКТМО.</ns4:Description>
    </ns4:Error>
Я им и так, вроде ОКТМО города даю...
    OKTMORefType OKTMORef = new OKTMORefType();
    OKTMORef.setCode("71876000"); 
    OKTMORef.setName("Город Сургут");
    houseBasicRSOType.setOKTMO(OKTMORef);
Vershinin Sergey
@versh23
Mar 29 2016 06:42
@Syber79 они обещали расшраить справочник октмо) а пока в ФИАС не всегда корректный указывается
Дмитрий
@naut13
Mar 29 2016 06:42
@versh23 Сейчас пока решил реализовать отправку в асинхроном режиме. С очередью отправки решил разбираться по ходу пьесы, когда уже будут готовы методы на отправку.
Сейчас мне это видится так: Будет несколько сервисов:
Syber79
@Syber79
Mar 29 2016 06:43
Попробую другой регион
Анатолий
@Anat56
Mar 29 2016 06:43
ОКТМО длинее должен быть
Vershinin Sergey
@versh23
Mar 29 2016 06:43
@Syber79 в лк гис жкх есть справочник ОКТМО, можете там посмотреть
Анатолий
@Anat56
Mar 29 2016 06:43
у нас по региону в ФИАС тоже ОКТМО не полный
Syber79
@Syber79
Mar 29 2016 06:43
О! Позырю
Анатолий
@Anat56
Mar 29 2016 06:44
т.е. скорее всего должен быть 71876000001
у нас тоже почти у всех домов 8-ми-значный код в ФИАС стоит
в областном центре
Vershinin Sergey
@versh23
Mar 29 2016 06:47
да, именно такой 71876000001
blob
Syber79
@Syber79
Mar 29 2016 06:51
Сработало
  <ns5:CommonResult>
    <ns4:GUID>9d702a84-0dde-4dba-a254-81234375ff82</ns4:GUID>
    <ns4:TransportGUID>93bf17d8-df96-4d53-b4ba-01b9f4ce774a</ns4:TransportGUID>
    <ns4:UniqueNumber>pcc00002</ns4:UniqueNumber>
    <ns4:UpdateDate>2016-03-29T09:52:30.838+03:00</ns4:UpdateDate>
    <ns5:ImportHouseRSO>
      <ns5:GKNRelationshipStatus>
        <ns5:Status>N</ns5:Status>
        <ns5:AppartmentHouseAcceptedParameter>OlsonTZ</ns5:AppartmentHouseAcceptedParameter>
        <ns5:AppartmentHouseAcceptedParameter>FiasHouseGuid</ns5:AppartmentHouseAcceptedParameter>
        <ns5:AppartmentHouseAcceptedParameter>OKTMO</ns5:AppartmentHouseAcceptedParameter>
      </ns5:GKNRelationshipStatus>
    </ns5:ImportHouseRSO>
  </ns5:CommonResult>
Но это будет тот еще ад - налаживать эти кодосвязи
Дмитрий
@naut13
Mar 29 2016 06:58
@versh23
Как организовывать очередь отправки - пока еще не придумал. Самый простой вариант - не отправлять данные ниже уровнем, пока не будут отправлены все данные текущего уровня. Т.е. не отправлять приборы учета, пока не отправятся все ЛС.
gvoxel
@gvoxel
Mar 29 2016 07:46
Еще раз спрошу) Кто нибудь собирал на линуксе https://github.com/Good-Samaritan/signature-demo?
Denis Ilyushchenko
@gizmo75rus
Mar 29 2016 08:19
Кто как борется с SecurityNegotiationException "Не удалось установить безопасный канал для SSL/TLS с полномочиями "54.76.42.99:60045"
Анатолий
@Anat56
Mar 29 2016 08:21
@gizmo75rus было уже в теме - либо в конфиге <system.net> <settings> <servicePointManager checkCertificateName="false" checkCertificateRevocationList="false"/> </settings> </system.net>
Denis Ilyushchenko
@gizmo75rus
Mar 29 2016 08:21
Сделано
Анатолий
@Anat56
Mar 29 2016 08:22
у них сертификат просто невалидный на тестовом сервере
Denis Ilyushchenko
@gizmo75rus
Mar 29 2016 08:22
Nsi NsiCommon RegisterCommon - работает нормальна а вот HouseManagment нет
Анатолий
@Anat56
Mar 29 2016 08:23
разницы быть не должно вроде как с точки зрения организации канала
может HouseManagment настроен в конфиге по другому?
Denis Ilyushchenko
@gizmo75rus
Mar 29 2016 08:30
Да и я также думаю
Чертовщина какая то
Дмитрий
@naut13
Mar 29 2016 08:31
        //https://msdn.microsoft.com/en-us/library/system.net.servicepointmanager.servercertificatevalidationcallback.aspx
        //необходимо, что бы подавить эксэпшн из-за кривого сертификата на сервере
        ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
Denis Ilyushchenko
@gizmo75rus
Mar 29 2016 08:32
Зачем, в конфиге же указано. Хотя пробовал - тоже самое
))
Анатолий
@Anat56
Mar 29 2016 08:34
конфиг endpoint'а HouseManagment 'а не отличается случаем от остальных?
по биндингу и behaviorConfiguration
Denis Ilyushchenko
@gizmo75rus
Mar 29 2016 08:39
нет
mixamarciv
@mixamarciv
Mar 29 2016 10:54
как вы обновляете данные по домам? не могу никак поправить ошибки по НЕобязательным полям:
<ns4:ErrorCode>INT002022</ns4:ErrorCode>
<ns4:Description>Не заполнены обязательные поля: operationYear, floorCount, culturalHeritage, nonResidentialSquare, undergroundFloorCount, houseCondition, Год постройки, Общий износ здания</ns4:Description>

вот например запрос:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://dom.gosuslugi.ru/schema/integration/8.6.0.6/" xmlns:hous="http://dom.gosuslugi.ru/schema/integration/8.6.0.6/house-management/" xmlns:xd="http://www.w3.org/2000/09/xmldsig#">
   <soapenv:Header>
      <ns:RequestHeader>
         <ns:Date>${=javax.xml.datatype.DatatypeFactory.newInstance().newXMLGregorianCalendar(GregorianCalendar.getInstance())}</ns:Date>
         <ns:MessageGUID>${=java.util.UUID.randomUUID()}</ns:MessageGUID>
         <ns:SenderID>d55f32d0-b492-469c-9eab-b009e71add5b</ns:SenderID>
      </ns:RequestHeader>
   </soapenv:Header>
   <soapenv:Body>
      <hous:importHouseUORequest >
         <hous:ApartmentHouse>
            <hous:ApartmentHouseToUpdate>
               <hous:BasicCharacteristicts>
                  <hous:NoKNRegistered>true</hous:NoKNRegistered>
                  <hous:FIASHouseGuid>3db255a7-1325-4416-8c31-946aa3b150ef</hous:FIASHouseGuid>
                   <hous:TotalSquare>20</hous:TotalSquare>
                   <hous:ResidentialSquare>10</hous:ResidentialSquare>
                   <!--hous:NonResidentialSquare>10</hous:NonResidentialSquare-->
                </hous:BasicCharacteristicts>
                <hous:BuiltUpArea>10</hous:BuiltUpArea>
                <hous:MinFloorCount>10</hous:MinFloorCount>
               <ns:TransportGUID>${=java.util.UUID.randomUUID()}</ns:TransportGUID>
            </hous:ApartmentHouseToUpdate>
            <!--добавляем подъезды:-->
            <hous:EntranceToCreate>
               <hous:EntranceNum>1</hous:EntranceNum>
               <hous:StoreysCount>10</hous:StoreysCount>
               <hous:CreationDate>1990-01-01</hous:CreationDate>
               <ns:TransportGUID>${=java.util.UUID.randomUUID()}</ns:TransportGUID>
            </hous:EntranceToCreate>
         </hous:ApartmentHouse>
      </hous:importHouseUORequest>
   </soapenv:Body>
</soapenv:Envelope>

и если тут убрать комментарии над NonResidentialSquare то сервер выдает ошибку невалидного хмл:

<ns4:ErrorCode>FMT001300</ns4:ErrorCode>
<ns4:ErrorMessage>Line: 18. Column: 20. Message: cvc-complex-type.2.4.a: Invalid content was found starting with element 'hous:NonResidentialSquare'. One of '{"http://dom.gosuslugi.ru/schema/integration/8.6.0.6/house-management/":CulturalHeritage}' is expected.</ns4:ErrorMessage>
<ns4:StackTrace>ru.lanit.hcs.integration.common.exception.SoapFaultException: ru.lanit.hcs.integration.common.exception.XmlValidationException: Line: 18. Column: 20. Message: cvc-complex-type.2.4.a: Invalid content was found starting with element 'hous:NonResidentialSquare'. One of '{"http://dom.gosuslugi.ru/schema/integration/8.6.0.6/house-management/":CulturalHeritage}' is expected.
at ru.lanit.hcs.integration.common.spring.processor.ValidationProcessor.process(ValidationProcessor.java:94)
mixamarciv
@mixamarciv
Mar 29 2016 12:26
разобрался, оказывается важен ещё и порядок перечисления передаваемых параметров в хмлке, NonResidentialSquare всегда должен быть после UndergroundFloorCount и никак иначе..

вот почти верный запрос

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns="http://dom.gosuslugi.ru/schema/integration/8.6.0.6/" xmlns:hous="http://dom.gosuslugi.ru/schema/integration/8.6.0.6/house-management/" xmlns:xd="http://www.w3.org/2000/09/xmldsig#">
   <soapenv:Header>
      <ns:RequestHeader>
         <ns:Date>${=javax.xml.datatype.DatatypeFactory.newInstance().newXMLGregorianCalendar(GregorianCalendar.getInstance())}</ns:Date>
         <ns:MessageGUID>${=java.util.UUID.randomUUID()}</ns:MessageGUID>
         <ns:SenderID>d55f32d0-b492-469c-9eab-b009e71add5b</ns:SenderID>
      </ns:RequestHeader>
   </soapenv:Header>
   <soapenv:Body>
      <hous:importHouseUORequest >
         <hous:ApartmentHouse>
            <hous:ApartmentHouseToUpdate>
               <hous:BasicCharacteristicts>
                  <hous:NoKNRegistered>true</hous:NoKNRegistered>
                  <hous:FIASHouseGuid>3db255a7-1325-4416-8c31-946aa3b150ef</hous:FIASHouseGuid>
                   <hous:TotalSquare>20</hous:TotalSquare>
                   <hous:BuildingYear>1981</hous:BuildingYear>
                    <hous:UsedYear>1981</hous:UsedYear>
                     <hous:TotalWear>55.00</hous:TotalWear>
                    <hous:FloorCount>10</hous:FloorCount>
                   <hous:ResidentialSquare>10</hous:ResidentialSquare>
                   <hous:CulturalHeritage>false</hous:CulturalHeritage>
               </hous:BasicCharacteristicts>

                <hous:BuiltUpArea>100</hous:BuiltUpArea>
                <hous:UndergroundFloorCount>0</hous:UndergroundFloorCount>
                <hous:MinFloorCount>10</hous:MinFloorCount>
                <hous:NonResidentialSquare>10</hous:NonResidentialSquare>
               <ns:TransportGUID>${=java.util.UUID.randomUUID()}</ns:TransportGUID>
            </hous:ApartmentHouseToUpdate>
            <!--добавляем подъезды:-->
            <hous:EntranceToCreate>
               <hous:EntranceNum>1</hous:EntranceNum>
               <hous:StoreysCount>10</hous:StoreysCount>
               <hous:CreationDate>1990-01-01</hous:CreationDate>
               <ns:TransportGUID>${=java.util.UUID.randomUUID()}</ns:TransportGUID>
            </hous:EntranceToCreate>
         </hous:ApartmentHouse>
      </hous:importHouseUORequest>
   </soapenv:Body>
</soapenv:Envelope>

нехватает только параметра houseCondition:

<ns4:Description>Не заполнены обязательные поля: houseCondition</ns4:Description>

где и как его задать кто знает??

в справочнике о нем ни слова
developerts
@developerts
Mar 29 2016 13:25

У кого-нибудь сегодня были ответы типа

<ns4:Description>Не заполнены обязательные поля: porch.begDate, porch.floorCount</ns4:Description>

(Это в ответ на importHouseRSOData)

Пробовал добавить по аналогии с importHouseUOData, но тогда XML не проходит валидацию на сервере.
mixamarciv
@mixamarciv
Mar 29 2016 13:34
вот и у меня не проходит на importHouseUORequest, ты не знаешь как задать houseCondition в ApartmentHouseToUpdate?