Commit 82308a03331ccbf4237a76799d878679a6150d53

Authored by Ronan Tavares Camargo
1 parent 3675952c
Exists in master

Redmine #4207

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&lt;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&lt;Transferencia&gt;{
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 }
... ...