Commit 82308a03331ccbf4237a76799d878679a6150d53
1 parent
3675952c
Exists in
master
Redmine #4207
Showing
4 changed files
with
70 additions
and
11 deletions
Show diff stats
citgrp-patrimonio-api/src/main/java/br/com/centralit/api/model/SaidaTemporaria.java
... | ... | @@ -12,8 +12,10 @@ import javax.persistence.GenerationType; |
12 | 12 | import javax.persistence.Id; |
13 | 13 | import javax.persistence.ManyToOne; |
14 | 14 | import javax.persistence.OneToMany; |
15 | +import javax.persistence.Table; | |
15 | 16 | import javax.persistence.Temporal; |
16 | 17 | import javax.persistence.TemporalType; |
18 | +import javax.persistence.UniqueConstraint; | |
17 | 19 | |
18 | 20 | import org.hibernate.envers.Audited; |
19 | 21 | import org.hibernate.envers.NotAudited; |
... | ... | @@ -62,6 +64,7 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize; |
62 | 64 | */ |
63 | 65 | @Audited |
64 | 66 | @Entity |
67 | +@Table(uniqueConstraints = @UniqueConstraint(columnNames = {"codigo", "organizacao_id"})) | |
65 | 68 | public class SaidaTemporaria extends PersistentObjectAuditOrganizacao { |
66 | 69 | |
67 | 70 | /** Atributo serialVersionUID. */ | ... | ... |
citgrp-patrimonio-api/src/main/java/br/com/centralit/api/service/impl/TransferenciaServiceImpl.java
... | ... | @@ -202,7 +202,7 @@ public class TransferenciaServiceImpl extends GenericServiceImpl<Transferencia, |
202 | 202 | } else { |
203 | 203 | // SALVA A TRANSFERÊNCIA |
204 | 204 | Transferencia transferenciaSave = geraTransferenciaInterna(transferencia, transferenciaItemListTemp); |
205 | - geraCodigoAndSave(transferenciaSave); | |
205 | + this.transferenciaDao.save(transferenciaSave); | |
206 | 206 | this.salvarTermo(transferenciaSave, this.estruturaOrganizacionalService.getReference(idUltimaEstrutura)); |
207 | 207 | if (listaTransferenciaSalva != null) { |
208 | 208 | listaTransferenciaSalva.add(transferenciaSave); |
... | ... | @@ -229,21 +229,18 @@ public class TransferenciaServiceImpl extends GenericServiceImpl<Transferencia, |
229 | 229 | } |
230 | 230 | } |
231 | 231 | transferencia.setSaidaTemporariaItens(transferenciaItemListTemp); |
232 | - geraCodigoAndSave(transferencia); | |
232 | + this.transferenciaDao.save(transferencia); | |
233 | + configurarCodigo(transferencia); | |
233 | 234 | this.salvarTermo(transferencia, this.estruturaOrganizacionalService.getReference(idUltimaEstrutura)); |
234 | 235 | if (listaTransferenciaSalva != null) { |
235 | 236 | listaTransferenciaSalva.add(transferencia); |
236 | 237 | } |
237 | 238 | } |
238 | - | |
239 | - private synchronized void geraCodigoAndSave(Transferencia transferencia){ | |
240 | - configurarCodigo(transferencia); | |
241 | - this.transferenciaDao.save(transferencia); | |
242 | - } | |
243 | 239 | |
244 | 240 | private Transferencia geraTransferenciaInterna(Transferencia transferencia, List<TransferenciaItem> transferenciaItemListTemp) { |
245 | 241 | |
246 | 242 | Transferencia transferenciaSave = new Transferencia(); |
243 | + configurarCodigo(transferenciaSave); | |
247 | 244 | transferenciaSave.setAutor(transferencia.getAutor()); |
248 | 245 | transferenciaSave.setDataCriacao(transferencia.getDataCriacao()); |
249 | 246 | transferenciaSave.setDataTransferencia(transferencia.getDataTransferencia()); | ... | ... |
citgrp-patrimonio-web/src/main/java/br/com/centralit/controller/SaidaTemporariaController.java
... | ... | @@ -2,16 +2,18 @@ package br.com.centralit.controller; |
2 | 2 | |
3 | 3 | import java.util.Collection; |
4 | 4 | |
5 | +import org.apache.commons.beanutils.BeanUtilsBean; | |
6 | +import org.hibernate.exception.ConstraintViolationException; | |
5 | 7 | import org.springframework.beans.factory.annotation.Autowired; |
6 | 8 | import org.springframework.stereotype.Controller; |
7 | 9 | import org.springframework.web.bind.annotation.PathVariable; |
10 | +import org.springframework.web.bind.annotation.RequestBody; | |
8 | 11 | import org.springframework.web.bind.annotation.RequestMapping; |
9 | 12 | import org.springframework.web.bind.annotation.RequestMethod; |
10 | 13 | import org.springframework.web.bind.annotation.RequestParam; |
11 | 14 | import org.springframework.web.bind.annotation.ResponseBody; |
12 | 15 | |
13 | 16 | import br.com.centralit.api.model.SaidaTemporaria; |
14 | -import br.com.centralit.api.model.Transferencia; | |
15 | 17 | import br.com.centralit.api.service.SaidaTemporariaItemService; |
16 | 18 | import br.com.centralit.api.service.SaidaTemporariaService; |
17 | 19 | import br.com.centralit.framework.controller.GenericController; |
... | ... | @@ -102,6 +104,38 @@ public class SaidaTemporariaController extends GenericController<SaidaTemporaria |
102 | 104 | |
103 | 105 | return responseBody; |
104 | 106 | } |
107 | + | |
108 | + @RequestMapping(method = RequestMethod.POST, value = "") | |
109 | + @ResponseBody | |
110 | + public ResponseBodyWrapper save(@RequestBody SaidaTemporaria entity) throws Exception{ | |
111 | + boolean uniqueConstraintViolate = true; | |
112 | + | |
113 | + SaidaTemporaria saidaTemporaria = new SaidaTemporaria(); | |
114 | + | |
115 | + //TODO Solução temporária para evitar que sejam criadas transferencias com o código duplicado. Alterar solução quando for implementado o cache compartilhado | |
116 | + for(int i = 5; i > 0 && uniqueConstraintViolate; i--){ | |
117 | + try{ | |
118 | + saidaTemporaria = (SaidaTemporaria) BeanUtilsBean.getInstance().cloneBean(entity); | |
119 | + saidaTemporaria = this.saidaTemporariaService.save(saidaTemporaria); | |
120 | + uniqueConstraintViolate = false; | |
121 | + }catch(Throwable e){ | |
122 | + if(e.getCause() instanceof ConstraintViolationException){ | |
123 | + ConstraintViolationException ex = (ConstraintViolationException) e.getCause(); | |
124 | + if(ex.getSQLException().getMessage().contains("saidatemp_codigo_organizacao_id_key")){ | |
125 | + uniqueConstraintViolate = true; | |
126 | + }else{ | |
127 | + uniqueConstraintViolate = false; | |
128 | + } | |
129 | + }else{ | |
130 | + uniqueConstraintViolate = false; | |
131 | + } | |
132 | + } | |
133 | + } | |
134 | + | |
135 | + ResponseBodyWrapper responseBody = new ResponseBodyWrapper(saidaTemporaria, getEditView()); | |
136 | + | |
137 | + return responseBody; | |
138 | + } | |
105 | 139 | |
106 | 140 | |
107 | 141 | @RequestMapping(value = "/findIdsBemPatrimonialPorCodigoSaidaTemporaria", method = RequestMethod.GET, produces = "application/json") | ... | ... |
citgrp-patrimonio-web/src/main/java/br/com/centralit/controller/TransferenciaController.java
... | ... | @@ -9,9 +9,11 @@ import java.util.ArrayList; |
9 | 9 | import java.util.Arrays; |
10 | 10 | import java.util.Collection; |
11 | 11 | import java.util.HashMap; |
12 | +import java.util.LinkedList; | |
12 | 13 | import java.util.List; |
13 | 14 | import java.util.Map; |
14 | 15 | |
16 | +import javax.persistence.PersistenceException; | |
15 | 17 | import javax.servlet.http.HttpServletResponse; |
16 | 18 | |
17 | 19 | import net.sf.jasperreports.engine.JRException; |
... | ... | @@ -23,8 +25,9 @@ import net.sf.jasperreports.engine.JasperReport; |
23 | 25 | import net.sf.jasperreports.engine.design.JasperDesign; |
24 | 26 | import net.sf.jasperreports.engine.xml.JRXmlLoader; |
25 | 27 | |
28 | +import org.apache.commons.beanutils.BeanUtilsBean; | |
29 | +import org.hibernate.exception.ConstraintViolationException; | |
26 | 30 | import org.springframework.beans.factory.annotation.Autowired; |
27 | -import org.springframework.security.access.prepost.PreAuthorize; | |
28 | 31 | import org.springframework.security.core.context.SecurityContextHolder; |
29 | 32 | import org.springframework.stereotype.Controller; |
30 | 33 | import org.springframework.web.bind.annotation.PathVariable; |
... | ... | @@ -55,7 +58,6 @@ import br.com.centralit.framework.util.UtilColecao; |
55 | 58 | import br.com.centralit.framework.util.UtilDataBase; |
56 | 59 | import br.com.centralit.framework.util.UtilObjeto; |
57 | 60 | import br.com.centralit.framework.util.UtilString; |
58 | -import br.com.centralit.framework.view.ResultResponseVH; | |
59 | 61 | |
60 | 62 | /** |
61 | 63 | * <p><img src="http://centralit.com.br/images/logo_central.png"></p> |
... | ... | @@ -334,8 +336,31 @@ public class TransferenciaController extends GenericController<Transferencia>{ |
334 | 336 | @RequestMapping(method = RequestMethod.POST, value = "") |
335 | 337 | @ResponseBody |
336 | 338 | public ResponseBodyWrapper save(@RequestBody Transferencia objeto) throws Exception { |
339 | + boolean uniqueConstraintViolate = true; | |
340 | + List<Transferencia> transferencias = new LinkedList<Transferencia>(); | |
341 | + | |
342 | + //TODO Solução temporária para evitar que sejam criadas transferencias com o código duplicado. Alterar solução quando for implementado o cache compartilhado | |
343 | + for(int i = 5; i > 0 && uniqueConstraintViolate; i--){ | |
344 | + try{ | |
345 | + Transferencia transferencia = (Transferencia) BeanUtilsBean.getInstance().cloneBean(objeto); | |
346 | + transferencias = this.transferenciaService.salvarTransferencia(transferencia); | |
347 | + uniqueConstraintViolate = false; | |
348 | + }catch(PersistenceException e){ | |
349 | + if(e.getCause() instanceof ConstraintViolationException){ | |
350 | + ConstraintViolationException ex = (ConstraintViolationException) e.getCause(); | |
351 | + if(ex.getSQLException().getMessage().contains("trans_codigo_organizacao_id_key") | |
352 | + || ex.getSQLException().getMessage().contains("trans_codigo_organizacao_codigoasi_id_key")){ | |
353 | + uniqueConstraintViolate = true; | |
354 | + }else{ | |
355 | + uniqueConstraintViolate = false; | |
356 | + } | |
357 | + }else{ | |
358 | + uniqueConstraintViolate = false; | |
359 | + } | |
360 | + } | |
361 | + } | |
337 | 362 | |
338 | - ResponseBodyWrapper responseBody = new ResponseBodyWrapper(this.transferenciaService.salvarTransferencia(objeto), getEditView()); | |
363 | + ResponseBodyWrapper responseBody = new ResponseBodyWrapper(transferencias, getEditView()); | |
339 | 364 | |
340 | 365 | return responseBody; |
341 | 366 | } | ... | ... |