package com.eop.client.gws3793c; import java.net.URL; import java.text.SimpleDateFormat; import java.util.Date; import java.util.UUID; import javax.xml.namespace.QName; import com.eop.client.gws3793c.types.AppData; import ru.codeinside.gws.api.Client; import ru.codeinside.gws.api.ClientRequest; import ru.codeinside.gws.api.ClientResponse; import ru.codeinside.gws.api.ExchangeContext; import ru.codeinside.gws.api.InfoSystem; import ru.codeinside.gws.api.Packet; import ru.codeinside.gws.api.Revision; import ru.codeinside.gws.api.XmlTypes; import unisoft.ws.fnszdl.rq1.Документ.ЗапросНП; import unisoft.ws.fnszdl.rq1.Документ.СвЮЛ; import unisoft.ws.fnszdl.rs2.Документ.СвЗад; import unisoft.ws.fnszdl.rs2.Документ.СвЗад.ПерНО; public class FNSClient implements Client{ public static final QName GET_RESPONSE_RQ = new QName("http://ws.unisoft/", "getResponse"); public static final QName GET_RESPONSE_RS = new QName("http://ws.unisoft/", "GetResponseRs"); public static final QName SEND_REQUEST_RQ = new QName("http://ws.unisoft/", "sendRequest"); public static final QName SEND_REQUEST_RS = new QName("http://ws.unisoft/", "SendRequestRs"); public static final String SMEV_REQUEST_ID = "smevRequestId"; public static final String SMEV_ERORR = "smevError"; public static final String SMEV_ORIGIN_REQUEST_ID = "smevOriginRequestId"; public static final String SMEV_POOL = "smevPool"; public static final String KOD_OBR = "codeObr"; public static final String SYSTEM_ERROR = "99"; public static final String STATUS = "status"; public static final String VERS_FORM = "4.02"; @Override public Revision getRevision() { return Revision.rev120315; } @Override public URL getWsdlUrl() { return getClass().getClassLoader().getResource("wsdl/smev/v_2_4/FNSZDLService.wsdl"); } @Override public ClientRequest createClientRequest(ExchangeContext ctx) { final String originRequestId = (String) ctx.getVariable(SMEV_ORIGIN_REQUEST_ID); final String requestId = (String) ctx.getVariable(SMEV_REQUEST_ID); final Boolean smevPool = (Boolean) ctx.getVariable(SMEV_POOL); final Packet packet = new Packet(); packet.recipient = new InfoSystem("FNS001001", "ФНС России"); packet.typeCode = Packet.Type.SERVICE; packet.serviceName = "FNSZDLWS"; //Сервис предоставления Сведений о наличии (отсутствии) задолженности по уплате налогов, сборов, пеней, штрафов packet.date = new Date(); packet.exchangeType = "2"; packet.originRequestIdRef = originRequestId; packet.testMsg = (String) ctx.getVariable("smevTest"); packet.sender = new InfoSystem("008201", "Комплексная система предоставления государственных и муниципальных услуг Пензенской области"); packet.originator = new InfoSystem("008201", "Комплексная система предоставления государственных и муниципальных услуг Пензенской области"); final ClientRequest request = new ClientRequest(); request.packet = packet; if (Boolean.TRUE == smevPool) { packet.status = Packet.Status.PING; packet.requestIdRef = requestId; request.action = GET_RESPONSE_RQ; request.appData = createAppData(ctx, true); } else { packet.status = Packet.Status.REQUEST; request.action = SEND_REQUEST_RQ; request.appData = createAppData(ctx, false); } return request; } private String createAppData(ExchangeContext ctx, boolean ping) { if (!ping){ unisoft.ws.fnszdl.rq1.Документ документ = new unisoft.ws.fnszdl.rq1.Документ(); СвЮЛ свЮЛ = new СвЮЛ(); свЮЛ.setИННЮЛ((String) ctx.getVariable("INNUL")); свЮЛ.setНаимЮЛ((String) ctx.getVariable("NaimUL")); свЮЛ.setОГРН((String) ctx.getVariable("OGRN")); ЗапросНП запросНП = new ЗапросНП(); Date date = (Date) ctx.getVariable("dataNa"); String dataNa = new SimpleDateFormat("dd.MM.yyyy").format(date); запросНП.setДатаНа(dataNa); if (((String) ctx.getVariable("INNFL_INNUL")).equals("INNFL")) запросНП.setИННФЛ((String) ctx.getVariable("INNFL")); else запросНП.setИННЮЛ((String) ctx.getVariable("INNUL")); String идЗапрос = UUID.randomUUID().toString(); документ.setВерсФорм(VERS_FORM); документ.setЗапросНП(запросНП); документ.setСвЮЛ(свЮЛ); документ.setИдЗапросП(идЗапрос); return new XmlTypes(unisoft.ws.fnszdl.rq1.Документ.class).toXml(документ); } else { unisoft.ws.fnszdl.rq2.Документ документ = new unisoft.ws.fnszdl.rq2.Документ(); String идЗапрос = (String) ctx.getVariable(SMEV_ORIGIN_REQUEST_ID); if ((идЗапрос == null)||(идЗапрос.equals(""))) ctx.setVariable(SMEV_POOL, false); документ.setВерсФорм(VERS_FORM); документ.setИдЗапросФ(идЗапрос); return new XmlTypes(unisoft.ws.fnszdl.rq2.Документ.class).toXml(документ); } } @Override public void processClientResponse(ClientResponse response, ExchangeContext context) { Boolean pooled = (Boolean) context.getVariable(SMEV_POOL); if (response.verifyResult.error != null) { //ошибка? context.setVariable(SMEV_POOL, false); context.setVariable(SMEV_ERORR, response.verifyResult.error); } else if (!(GET_RESPONSE_RS.equals(response.action)||(SEND_REQUEST_RS.equals(response.action)))) { //правильный метод? context.setVariable(SMEV_POOL, false); context.setVariable(SMEV_ERORR, "Неизвестный ответ " + response.action); } else { if ((response.packet.status == Packet.Status.ACCEPT)&&(Boolean.TRUE != pooled)) { //Обработка первичного запроса context.setVariable(SMEV_POOL, false); AppData appData = (AppData) XmlTypes.elementToBean(response.appData, AppData.class); unisoft.ws.fnszdl.rs1.Документ документ = appData.getДокументПервичныйОтвет(); if (документ != null){ String кодОбр = документ.getКодОбр(); if ((кодОбр != null)&&(!кодОбр.toString().equals(""))) { //Если есть код обработки, то сервер нас не принял if (кодОбр.equals("82")) { context.setVariable(SMEV_ERORR, "Ошибка форматно-логического контроля"); context.setVariable(STATUS, "Ошибка"); }else if (кодОбр.equals(SYSTEM_ERROR)) { context.setVariable(SMEV_ERORR, "Системная ошибка"); context.setVariable(STATUS, "Ошибка"); } context.setVariable(KOD_OBR, кодОбр); } else { // противном случае наш запрос зарегистрирован, сохраняем идентификатор запроса context.setVariable(SMEV_REQUEST_ID, response.packet.requestIdRef); context.setVariable(SMEV_ORIGIN_REQUEST_ID, документ.getИдЗапросФ()); context.setVariable(SMEV_POOL, true); } }else context.setVariable(KOD_OBR, SYSTEM_ERROR); } else { //обработка вторичных запросов context.setVariable(SMEV_POOL, false); AppData appData = (AppData) XmlTypes.elementToBean(response.appData, AppData.class); unisoft.ws.fnszdl.rs2.Документ документ = appData.getДокументВторичныйОтвет(); if (документ != null){ String кодОбр = документ.getКодОбр(); if ((кодОбр != null)&&(кодОбр.equals("52"))) { //Ответ еще не готов? - продолжаем опрос context.setVariable(SMEV_POOL, true); } else { //Ответ готов if ((кодОбр != null)&&(!кодОбр.toString().equals(""))) { //Записываем код обработки, если он имеется context.setVariable(KOD_OBR, кодОбр); } else { //получен результат, пихаем его в форму СвЗад свЗад = документ.getСвЗад(); if (свЗад != null){ if (свЗад.getДатаНа() != null) context.setVariable("dataNa_response", свЗад.getДатаНа()); if (свЗад.getИННФЛ() != null) context.setVariable("INNFL_response", свЗад.getИННФЛ()); if (свЗад.getИННЮЛ() != null) context.setVariable("INNUL_response", свЗад.getИННЮЛ()); ПерНО перНО = свЗад.getПерНО(); if (перНО != null){ if (перНО.getКодИФНС() != null && перНО.getКодИФНС().size() > 0){ context.setVariable("perNO_response", перНО.getКодИФНС().size()); for (int i = 0; i < перНО.getКодИФНС().size(); i++) { String codeIFNS = перНО.getКодИФНС().get(i); context.setVariable("perNO_codeIFNS_response_" + String.valueOf(i+1), codeIFNS); } } } if (свЗад.getПрЗад() != null) context.setVariable("prZad_response", свЗад.getПрЗад()); } } } }else{ context.setVariable(SMEV_ERORR, "Системная ошибка"); context.setVariable(STATUS, "Ошибка"); context.setVariable(KOD_OBR, SYSTEM_ERROR); } } } } }