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 82 }
83 83  
84 84 @SuppressWarnings("unchecked")
85   - public List<DocumentoResumido> getDocumentosProcesso(String idProcedimento){
  85 + public List<DocumentoResumido> getDocumentosProcessoV1(String idProcedimento){
86 86 HashMap<String, Object> parametros = new HashMap<String, Object>();
87 87  
88 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 103  
104 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 1134 * @apiParam (Path Parameters) {String} unidade Sigla da Unidade cadastrada no SEI.
1135 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 1141 * @apiExample Exemplo de requisição:
1139 1142 * curl -i https://<host>/sei-broker/service/cosap/processos/33910003149201793/documentos
1140 1143 *
1141 1144 * @apiSuccess (Sucesso Response Body - 200) {List} documentos Lista com os documentos encontrados.
1142 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 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 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 1154 * @apiSuccessExample {json} Success-Response:
1149 1155 * HTTP/1.1 200 OK
1150 1156 * {
  1157 + * "assinado": true,
  1158 + * "codigoTipo": "5",
1151 1159 * "dataGeracao": "2015-08-10T00:00:00-03:00",
1152 1160 * "numero": "0670949",
1153 1161 * "origem": "RECEBIDO",
1154 1162 * "tipo": "Despacho"
  1163 + * "tipoConferencia": "4",
1155 1164 * }
1156 1165 *
1157 1166 * @apiErrorExample {json} Error-Response:
... ... @@ -1164,11 +1173,12 @@ public class ProcessoResource {
1164 1173 @GET
1165 1174 @Path("/{unidade}/processos/{processo:\\d+}/documentos")
1166 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 1178 try{
1169 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 1183 if(documentosProcesso.isEmpty()){
1174 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 7145 "field": "processo",
7146 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 7203 },
7175 7204 {
7176 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 7213 "type": "String",
7178 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 7226 "group": "Sucesso Response Body - 200",
7184 7227 "type": "String",
7185 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 7233 "group": "Sucesso Response Body - 200",
... ... @@ -7199,17 +7242,24 @@ define({ &quot;api&quot;: [
7199 7242 },
7200 7243 {
7201 7244 "group": "Sucesso Response Body - 200",
7202   - "type": "Data",
  7245 + "type": "String",
7203 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 7259 "examples": [
7210 7260 {
7211 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 7263 "type": "json"
7214 7264 }
7215 7265 ]
... ...
src/main/webapp/api-docs/api_data.json
... ... @@ -7145,6 +7145,35 @@
7145 7145 "field": "processo",
7146 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 7203 },
7175 7204 {
7176 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 7213 "type": "String",
7178 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 7226 "group": "Sucesso Response Body - 200",
7184 7227 "type": "String",
7185 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 7233 "group": "Sucesso Response Body - 200",
... ... @@ -7199,17 +7242,24 @@
7199 7242 },
7200 7243 {
7201 7244 "group": "Sucesso Response Body - 200",
7202   - "type": "Data",
  7245 + "type": "String",
7203 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 7259 "examples": [
7210 7260 {
7211 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 7263 "type": "json"
7214 7264 }
7215 7265 ]
... ...
src/main/webapp/api-docs/api_project.js
... ... @@ -8,7 +8,7 @@ define({
8 8 "apidoc": "0.2.0",
9 9 "generator": {
10 10 "name": "apidoc",
11   - "time": "2017-09-22T18:42:40.088Z",
  11 + "time": "2017-09-25T19:36:35.343Z",
12 12 "url": "http://apidocjs.com",
13 13 "version": "0.15.1"
14 14 }
... ...
src/main/webapp/api-docs/api_project.json
... ... @@ -8,7 +8,7 @@
8 8 "apidoc": "0.2.0",
9 9 "generator": {
10 10 "name": "apidoc",
11   - "time": "2017-09-22T18:42:40.088Z",
  11 + "time": "2017-09-25T19:36:35.343Z",
12 12 "url": "http://apidocjs.com",
13 13 "version": "0.15.1"
14 14 }
... ...