Commit 83e5b400a941d59a111a7ad6c90d8f0839817938

Authored by andre guimaraes
1 parent 988d4b86

Alterações na consulta a documentos do processo, agora exibindo mais informações…

… sobre os documentos.
src/main/java/br/gov/ans/integracao/sei/dao/DocumentoDAO.java
@@ -82,7 +82,7 @@ public class DocumentoDAO { @@ -82,7 +82,7 @@ public class DocumentoDAO {
82 } 82 }
83 83
84 @SuppressWarnings("unchecked") 84 @SuppressWarnings("unchecked")
85 - public List<DocumentoResumido> getDocumentosProcesso(String idProcedimento){ 85 + public List<DocumentoResumido> getDocumentosProcessoV1(String idProcedimento){
86 HashMap<String, Object> parametros = new HashMap<String, Object>(); 86 HashMap<String, Object> parametros = new HashMap<String, Object>();
87 87
88 StringBuilder builder = new StringBuilder("SELECT pr.protocolo_formatado_pesquisa numero, s.nome tipo, d.numero numeroInformado, "); 88 StringBuilder builder = new StringBuilder("SELECT pr.protocolo_formatado_pesquisa numero, s.nome tipo, d.numero numeroInformado, ");
@@ -103,5 +103,46 @@ public class DocumentoDAO { @@ -103,5 +103,46 @@ public class DocumentoDAO {
103 103
104 return query.getResultList(); 104 return query.getResultList();
105 } 105 }
  106 +
  107 + @SuppressWarnings("unchecked")
  108 + public List<DocumentoResumido> getDocumentosProcesso(String idProcedimento, String codigoTipo, String origem, boolean somenteAssinados){
  109 + HashMap<String, Object> parametros = new HashMap<String, Object>();
  110 +
  111 + StringBuilder builder = new StringBuilder("SELECT pr.protocolo_formatado_pesquisa numero, s.nome tipo, s.id_serie codigoTipo, d.numero numeroInformado, ");
  112 + builder.append("CASE pr.sta_protocolo WHEN 'G' THEN 'GERADO' ELSE 'RECEBIDO' END origem, d.id_tipo_conferencia tipoConferencia, ");
  113 + builder.append("pr.dta_geracao dataGeracao, null as processo, null as unidade, ");
  114 + builder.append("CASE WHEN a.id_assinatura is null THEN false ELSE true END assinado ");
  115 + builder.append("FROM documento AS d ");
  116 +
  117 + if(somenteAssinados){
  118 + builder.append("RIGHT JOIN assinatura AS a ON d.id_documento = a.id_documento ");
  119 + }else{
  120 + builder.append("LEFT JOIN assinatura AS a ON d.id_documento = a.id_documento ");
  121 + }
  122 +
  123 + builder.append("JOIN protocolo AS pr ON pr.id_protocolo = d.id_documento ");
  124 + builder.append("JOIN serie AS s ON d.id_serie = s.id_serie ");
  125 + builder.append("WHERE d.id_procedimento = :idProcedimento ");
  126 +
  127 + parametros.put("idProcedimento", idProcedimento);
  128 +
  129 + if(StringUtils.isNotBlank(codigoTipo)){
  130 + builder.append("AND s.id_serie = :codigoTipo ");
  131 + parametros.put("codigoTipo", codigoTipo);
  132 + }
  133 +
  134 + if(StringUtils.isNotBlank(origem)){
  135 + builder.append("AND pr.sta_protocolo = :origem ");
  136 + parametros.put("origem", origem);
  137 + }
  138 +
  139 + builder.append("GROUP BY numero ORDER BY pr.dta_geracao ASC");
  140 +
  141 + Query query = em.createNativeQuery(builder.toString(), DocumentoResumido.class);
  142 +
  143 + setQueryParameters(query, parametros);
  144 +
  145 + return query.getResultList();
  146 + }
106 147
107 } 148 }
src/main/java/br/gov/ans/integracao/sei/rest/ProcessoResource.java
@@ -1134,24 +1134,33 @@ public class ProcessoResource { @@ -1134,24 +1134,33 @@ public class ProcessoResource {
1134 * @apiParam (Path Parameters) {String} unidade Sigla da Unidade cadastrada no SEI. 1134 * @apiParam (Path Parameters) {String} unidade Sigla da Unidade cadastrada no SEI.
1135 * @apiParam (Path Parameters) {String} processo Número do processo. 1135 * @apiParam (Path Parameters) {String} processo Número do processo.
1136 * 1136 *
  1137 + * @apiParam (Query Parameters) {String} [tipo=null] Identificador do tipo do documento, caso seja necessário filtrar pelo tipo
  1138 + * @apiParam (Query Parameters) {String = "G (gerado/interno), R (recebido/externo)"} [origem=null] Filtra os documentos por gerados ou recebidos
  1139 + * @apiParam (Query Parameters) {boolean} [somenteAssinados=false] Exibir somente documentos assinados
1137 * 1140 *
1138 * @apiExample Exemplo de requisição: 1141 * @apiExample Exemplo de requisição:
1139 * curl -i https://<host>/sei-broker/service/cosap/processos/33910003149201793/documentos 1142 * curl -i https://<host>/sei-broker/service/cosap/processos/33910003149201793/documentos
1140 * 1143 *
1141 * @apiSuccess (Sucesso Response Body - 200) {List} documentos Lista com os documentos encontrados. 1144 * @apiSuccess (Sucesso Response Body - 200) {List} documentos Lista com os documentos encontrados.
1142 * @apiSuccess (Sucesso Response Body - 200) {DocumentoResumido} documentos.documentoResumido Resumo do documento encontrado no SEI. 1145 * @apiSuccess (Sucesso Response Body - 200) {DocumentoResumido} documentos.documentoResumido Resumo do documento encontrado no SEI.
  1146 + * @apiSuccess (Sucesso Response Body - 200) {boolean} documentos.documentoResumido.assinado Boolean indicando se o documento foi assinado.
  1147 + * @apiSuccess (Sucesso Response Body - 200) {String} documentos.documentoResumido.codigoTipo Identificador do tipo do documento.
  1148 + * @apiSuccess (Sucesso Response Body - 200) {Data} documentos.documentoResumido.dataGeracao Data de geração do documento.
1143 * @apiSuccess (Sucesso Response Body - 200) {String} documentos.documentoResumido.numero Número do documento. 1149 * @apiSuccess (Sucesso Response Body - 200) {String} documentos.documentoResumido.numero Número do documento.
1144 - * @apiSuccess (Sucesso Response Body - 200) {String} documentos.documentoResumido.tipo Tipo do documento.  
1145 * @apiSuccess (Sucesso Response Body - 200) {String="GERADO","RECEBIDO"} documentos.documentoResumido.origem Origem do documento, se o mesmo é um documento "GERADO" internamente ou "RECEBIDO" de uma fonte externa. 1150 * @apiSuccess (Sucesso Response Body - 200) {String="GERADO","RECEBIDO"} documentos.documentoResumido.origem Origem do documento, se o mesmo é um documento "GERADO" internamente ou "RECEBIDO" de uma fonte externa.
1146 - * @apiSuccess (Sucesso Response Body - 200) {Data} documentos.documentoResumido.dataGeracao Data de geração do documento. 1151 + * @apiSuccess (Sucesso Response Body - 200) {String} documentos.documentoResumido.tipo Tipo do documento.
  1152 + * @apiSuccess (Sucesso Response Body - 200) {String} documentos.documentoResumido.tipoConferencia Tipo de conferência do documento.
1147 * 1153 *
1148 * @apiSuccessExample {json} Success-Response: 1154 * @apiSuccessExample {json} Success-Response:
1149 * HTTP/1.1 200 OK 1155 * HTTP/1.1 200 OK
1150 * { 1156 * {
  1157 + * "assinado": true,
  1158 + * "codigoTipo": "5",
1151 * "dataGeracao": "2015-08-10T00:00:00-03:00", 1159 * "dataGeracao": "2015-08-10T00:00:00-03:00",
1152 * "numero": "0670949", 1160 * "numero": "0670949",
1153 * "origem": "RECEBIDO", 1161 * "origem": "RECEBIDO",
1154 * "tipo": "Despacho" 1162 * "tipo": "Despacho"
  1163 + * "tipoConferencia": "4",
1155 * } 1164 * }
1156 * 1165 *
1157 * @apiErrorExample {json} Error-Response: 1166 * @apiErrorExample {json} Error-Response:
@@ -1164,11 +1173,12 @@ public class ProcessoResource { @@ -1164,11 +1173,12 @@ public class ProcessoResource {
1164 @GET 1173 @GET
1165 @Path("/{unidade}/processos/{processo:\\d+}/documentos") 1174 @Path("/{unidade}/processos/{processo:\\d+}/documentos")
1166 @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) 1175 @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
1167 - public List<DocumentoResumido> listarDocumentosPorProcesso(@PathParam("unidade") String unidade, @PathParam("processo") String processo) throws RemoteException, Exception{ 1176 + public List<DocumentoResumido> listarDocumentosPorProcesso(@PathParam("unidade") String unidade, @PathParam("processo") String processo, @QueryParam("tipo")String tipo,
  1177 + @QueryParam("origem") String origem, @QueryParam("somenteAssinados") boolean somenteAssinados) throws RemoteException, Exception{
1168 try{ 1178 try{
1169 BigInteger idProcedimento = processoDAO.getIdProcedimento(formatarNumeroProcesso(processo)); 1179 BigInteger idProcedimento = processoDAO.getIdProcedimento(formatarNumeroProcesso(processo));
1170 1180
1171 - List<DocumentoResumido> documentosProcesso = documentoDAO.getDocumentosProcesso(idProcedimento.toString()); 1181 + List<DocumentoResumido> documentosProcesso = documentoDAO.getDocumentosProcesso(idProcedimento.toString(), tipo, origem, somenteAssinados);
1172 1182
1173 if(documentosProcesso.isEmpty()){ 1183 if(documentosProcesso.isEmpty()){
1174 throw new ResourceNotFoundException(messages.getMessage("erro.processo.sem.documentos",formatarNumeroProcesso(processo))); 1184 throw new ResourceNotFoundException(messages.getMessage("erro.processo.sem.documentos",formatarNumeroProcesso(processo)));
src/main/webapp/api-docs/api_data.js
@@ -7145,6 +7145,35 @@ define({ &quot;api&quot;: [ @@ -7145,6 +7145,35 @@ define({ &quot;api&quot;: [
7145 "field": "processo", 7145 "field": "processo",
7146 "description": "<p>Número do processo.</p>" 7146 "description": "<p>Número do processo.</p>"
7147 } 7147 }
  7148 + ],
  7149 + "Query Parameters": [
  7150 + {
  7151 + "group": "Query Parameters",
  7152 + "type": "String",
  7153 + "optional": true,
  7154 + "field": "tipo",
  7155 + "defaultValue": "null",
  7156 + "description": "<p>Identificador do tipo do documento, caso seja necessário filtrar pelo tipo</p>"
  7157 + },
  7158 + {
  7159 + "group": "Query Parameters",
  7160 + "type": "String",
  7161 + "allowedValues": [
  7162 + "\"G (gerado/interno), R (recebido/externo)\""
  7163 + ],
  7164 + "optional": true,
  7165 + "field": "origem",
  7166 + "defaultValue": "null",
  7167 + "description": "<p>Filtra os documentos por gerados ou recebidos</p>"
  7168 + },
  7169 + {
  7170 + "group": "Query Parameters",
  7171 + "type": "boolean",
  7172 + "optional": true,
  7173 + "field": "somenteAssinados",
  7174 + "defaultValue": "false",
  7175 + "description": "<p>Exibir somente documentos assinados</p>"
  7176 + }
7148 ] 7177 ]
7149 } 7178 }
7150 }, 7179 },
@@ -7174,17 +7203,31 @@ define({ &quot;api&quot;: [ @@ -7174,17 +7203,31 @@ define({ &quot;api&quot;: [
7174 }, 7203 },
7175 { 7204 {
7176 "group": "Sucesso Response Body - 200", 7205 "group": "Sucesso Response Body - 200",
  7206 + "type": "boolean",
  7207 + "optional": false,
  7208 + "field": "documentos.documentoResumido.assinado",
  7209 + "description": "<p>Boolean indicando se o documento foi assinado.</p>"
  7210 + },
  7211 + {
  7212 + "group": "Sucesso Response Body - 200",
7177 "type": "String", 7213 "type": "String",
7178 "optional": false, 7214 "optional": false,
7179 - "field": "documentos.documentoResumido.numero",  
7180 - "description": "<p>Número do documento.</p>" 7215 + "field": "documentos.documentoResumido.codigoTipo",
  7216 + "description": "<p>Identificador do tipo do documento.</p>"
  7217 + },
  7218 + {
  7219 + "group": "Sucesso Response Body - 200",
  7220 + "type": "Data",
  7221 + "optional": false,
  7222 + "field": "documentos.documentoResumido.dataGeracao",
  7223 + "description": "<p>Data de geração do documento.</p>"
7181 }, 7224 },
7182 { 7225 {
7183 "group": "Sucesso Response Body - 200", 7226 "group": "Sucesso Response Body - 200",
7184 "type": "String", 7227 "type": "String",
7185 "optional": false, 7228 "optional": false,
7186 - "field": "documentos.documentoResumido.tipo",  
7187 - "description": "<p>Tipo do documento.</p>" 7229 + "field": "documentos.documentoResumido.numero",
  7230 + "description": "<p>Número do documento.</p>"
7188 }, 7231 },
7189 { 7232 {
7190 "group": "Sucesso Response Body - 200", 7233 "group": "Sucesso Response Body - 200",
@@ -7199,17 +7242,24 @@ define({ &quot;api&quot;: [ @@ -7199,17 +7242,24 @@ define({ &quot;api&quot;: [
7199 }, 7242 },
7200 { 7243 {
7201 "group": "Sucesso Response Body - 200", 7244 "group": "Sucesso Response Body - 200",
7202 - "type": "Data", 7245 + "type": "String",
7203 "optional": false, 7246 "optional": false,
7204 - "field": "documentos.documentoResumido.dataGeracao",  
7205 - "description": "<p>Data de geração do documento.</p>" 7247 + "field": "documentos.documentoResumido.tipo",
  7248 + "description": "<p>Tipo do documento.</p>"
  7249 + },
  7250 + {
  7251 + "group": "Sucesso Response Body - 200",
  7252 + "type": "String",
  7253 + "optional": false,
  7254 + "field": "documentos.documentoResumido.tipoConferencia",
  7255 + "description": "<p>Tipo de conferência do documento.</p>"
7206 } 7256 }
7207 ] 7257 ]
7208 }, 7258 },
7209 "examples": [ 7259 "examples": [
7210 { 7260 {
7211 "title": "Success-Response:", 7261 "title": "Success-Response:",
7212 - "content": "HTTP/1.1 200 OK\n{\n \"dataGeracao\": \"2015-08-10T00:00:00-03:00\",\n \"numero\": \"0670949\",\n \"origem\": \"RECEBIDO\",\n \"tipo\": \"Despacho\"\n}", 7262 + "content": "HTTP/1.1 200 OK\n{\n \"assinado\": true,\n \"codigoTipo\": \"5\",\n \"dataGeracao\": \"2015-08-10T00:00:00-03:00\",\n \"numero\": \"0670949\",\n \"origem\": \"RECEBIDO\",\n \"tipo\": \"Despacho\"\n \"tipoConferencia\": \"4\",\n}",
7213 "type": "json" 7263 "type": "json"
7214 } 7264 }
7215 ] 7265 ]
src/main/webapp/api-docs/api_data.json
@@ -7145,6 +7145,35 @@ @@ -7145,6 +7145,35 @@
7145 "field": "processo", 7145 "field": "processo",
7146 "description": "<p>Número do processo.</p>" 7146 "description": "<p>Número do processo.</p>"
7147 } 7147 }
  7148 + ],
  7149 + "Query Parameters": [
  7150 + {
  7151 + "group": "Query Parameters",
  7152 + "type": "String",
  7153 + "optional": true,
  7154 + "field": "tipo",
  7155 + "defaultValue": "null",
  7156 + "description": "<p>Identificador do tipo do documento, caso seja necessário filtrar pelo tipo</p>"
  7157 + },
  7158 + {
  7159 + "group": "Query Parameters",
  7160 + "type": "String",
  7161 + "allowedValues": [
  7162 + "\"G (gerado/interno), R (recebido/externo)\""
  7163 + ],
  7164 + "optional": true,
  7165 + "field": "origem",
  7166 + "defaultValue": "null",
  7167 + "description": "<p>Filtra os documentos por gerados ou recebidos</p>"
  7168 + },
  7169 + {
  7170 + "group": "Query Parameters",
  7171 + "type": "boolean",
  7172 + "optional": true,
  7173 + "field": "somenteAssinados",
  7174 + "defaultValue": "false",
  7175 + "description": "<p>Exibir somente documentos assinados</p>"
  7176 + }
7148 ] 7177 ]
7149 } 7178 }
7150 }, 7179 },
@@ -7174,17 +7203,31 @@ @@ -7174,17 +7203,31 @@
7174 }, 7203 },
7175 { 7204 {
7176 "group": "Sucesso Response Body - 200", 7205 "group": "Sucesso Response Body - 200",
  7206 + "type": "boolean",
  7207 + "optional": false,
  7208 + "field": "documentos.documentoResumido.assinado",
  7209 + "description": "<p>Boolean indicando se o documento foi assinado.</p>"
  7210 + },
  7211 + {
  7212 + "group": "Sucesso Response Body - 200",
7177 "type": "String", 7213 "type": "String",
7178 "optional": false, 7214 "optional": false,
7179 - "field": "documentos.documentoResumido.numero",  
7180 - "description": "<p>Número do documento.</p>" 7215 + "field": "documentos.documentoResumido.codigoTipo",
  7216 + "description": "<p>Identificador do tipo do documento.</p>"
  7217 + },
  7218 + {
  7219 + "group": "Sucesso Response Body - 200",
  7220 + "type": "Data",
  7221 + "optional": false,
  7222 + "field": "documentos.documentoResumido.dataGeracao",
  7223 + "description": "<p>Data de geração do documento.</p>"
7181 }, 7224 },
7182 { 7225 {
7183 "group": "Sucesso Response Body - 200", 7226 "group": "Sucesso Response Body - 200",
7184 "type": "String", 7227 "type": "String",
7185 "optional": false, 7228 "optional": false,
7186 - "field": "documentos.documentoResumido.tipo",  
7187 - "description": "<p>Tipo do documento.</p>" 7229 + "field": "documentos.documentoResumido.numero",
  7230 + "description": "<p>Número do documento.</p>"
7188 }, 7231 },
7189 { 7232 {
7190 "group": "Sucesso Response Body - 200", 7233 "group": "Sucesso Response Body - 200",
@@ -7199,17 +7242,24 @@ @@ -7199,17 +7242,24 @@
7199 }, 7242 },
7200 { 7243 {
7201 "group": "Sucesso Response Body - 200", 7244 "group": "Sucesso Response Body - 200",
7202 - "type": "Data", 7245 + "type": "String",
7203 "optional": false, 7246 "optional": false,
7204 - "field": "documentos.documentoResumido.dataGeracao",  
7205 - "description": "<p>Data de geração do documento.</p>" 7247 + "field": "documentos.documentoResumido.tipo",
  7248 + "description": "<p>Tipo do documento.</p>"
  7249 + },
  7250 + {
  7251 + "group": "Sucesso Response Body - 200",
  7252 + "type": "String",
  7253 + "optional": false,
  7254 + "field": "documentos.documentoResumido.tipoConferencia",
  7255 + "description": "<p>Tipo de conferência do documento.</p>"
7206 } 7256 }
7207 ] 7257 ]
7208 }, 7258 },
7209 "examples": [ 7259 "examples": [
7210 { 7260 {
7211 "title": "Success-Response:", 7261 "title": "Success-Response:",
7212 - "content": "HTTP/1.1 200 OK\n{\n \"dataGeracao\": \"2015-08-10T00:00:00-03:00\",\n \"numero\": \"0670949\",\n \"origem\": \"RECEBIDO\",\n \"tipo\": \"Despacho\"\n}", 7262 + "content": "HTTP/1.1 200 OK\n{\n \"assinado\": true,\n \"codigoTipo\": \"5\",\n \"dataGeracao\": \"2015-08-10T00:00:00-03:00\",\n \"numero\": \"0670949\",\n \"origem\": \"RECEBIDO\",\n \"tipo\": \"Despacho\"\n \"tipoConferencia\": \"4\",\n}",
7213 "type": "json" 7263 "type": "json"
7214 } 7264 }
7215 ] 7265 ]
src/main/webapp/api-docs/api_project.js
@@ -8,7 +8,7 @@ define({ @@ -8,7 +8,7 @@ define({
8 "apidoc": "0.2.0", 8 "apidoc": "0.2.0",
9 "generator": { 9 "generator": {
10 "name": "apidoc", 10 "name": "apidoc",
11 - "time": "2017-09-22T18:42:40.088Z", 11 + "time": "2017-09-25T19:36:35.343Z",
12 "url": "http://apidocjs.com", 12 "url": "http://apidocjs.com",
13 "version": "0.15.1" 13 "version": "0.15.1"
14 } 14 }
src/main/webapp/api-docs/api_project.json
@@ -8,7 +8,7 @@ @@ -8,7 +8,7 @@
8 "apidoc": "0.2.0", 8 "apidoc": "0.2.0",
9 "generator": { 9 "generator": {
10 "name": "apidoc", 10 "name": "apidoc",
11 - "time": "2017-09-22T18:42:40.088Z", 11 + "time": "2017-09-25T19:36:35.343Z",
12 "url": "http://apidocjs.com", 12 "url": "http://apidocjs.com",
13 "version": "0.15.1" 13 "version": "0.15.1"
14 } 14 }