diff --git a/openhis-server/core-framework/src/main/java/com/core/framework/aspectj/TransactionAspect.java b/openhis-server/core-framework/src/main/java/com/core/framework/aspectj/TransactionAspect.java new file mode 100644 index 00000000..5852dd2d --- /dev/null +++ b/openhis-server/core-framework/src/main/java/com/core/framework/aspectj/TransactionAspect.java @@ -0,0 +1,51 @@ +package com.core.framework.aspectj; + +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.AfterReturning; +import org.aspectj.lang.annotation.AfterThrowing; +import org.springframework.stereotype.Component; +import org.springframework.transaction.PlatformTransactionManager; +import org.springframework.transaction.TransactionStatus; +import org.springframework.transaction.support.DefaultTransactionDefinition; + +@Aspect +@Component +public class TransactionAspect { + + private final PlatformTransactionManager transactionManager; + private TransactionStatus transactionStatus; + + public TransactionAspect(PlatformTransactionManager transactionManager) { + this.transactionManager = transactionManager; + } + + @Before("@annotation(org.springframework.web.bind.annotation.PostMapping) || " + + "@annotation(org.springframework.web.bind.annotation.GetMapping) || " + + "@annotation(org.springframework.web.bind.annotation.PutMapping) || " + + "@annotation(org.springframework.web.bind.annotation.DeleteMapping)") + public void beginTransaction() { + transactionStatus = transactionManager.getTransaction(new DefaultTransactionDefinition()); + } + + @AfterReturning("@annotation(org.springframework.web.bind.annotation.PostMapping) || " + + "@annotation(org.springframework.web.bind.annotation.GetMapping) || " + + "@annotation(org.springframework.web.bind.annotation.PutMapping) || " + + "@annotation(org.springframework.web.bind.annotation.DeleteMapping)") + public void commitTransaction() { + if (transactionStatus != null && !transactionStatus.isCompleted()) { + transactionManager.commit(transactionStatus); + } + } + + @AfterThrowing(pointcut = "@annotation(org.springframework.web.bind.annotation.PostMapping) || " + + "@annotation(org.springframework.web.bind.annotation.GetMapping) || " + + "@annotation(org.springframework.web.bind.annotation.PutMapping) || " + + "@annotation(org.springframework.web.bind.annotation.DeleteMapping)", + throwing = "ex") + public void rollbackTransaction(Exception ex) { + if (transactionStatus != null && !transactionStatus.isCompleted()) { + transactionManager.rollback(transactionStatus); + } + } +} diff --git a/openhis-server/openhis-application/src/main/java/com/openhis/web/basicservice/controller/HealthcareServiceController.java b/openhis-server/openhis-application/src/main/java/com/openhis/web/basicservice/controller/HealthcareServiceController.java index 0a5a97a2..3198e07e 100644 --- a/openhis-server/openhis-application/src/main/java/com/openhis/web/basicservice/controller/HealthcareServiceController.java +++ b/openhis-server/openhis-application/src/main/java/com/openhis/web/basicservice/controller/HealthcareServiceController.java @@ -73,7 +73,6 @@ public class HealthcareServiceController { * 服务管理 新增 */ @PostMapping(value = "/healthcare-service") - @Transactional(rollbackFor = Exception.class) public R add(@Validated @RequestBody HealthcareServiceAddOrUpdateParam healthcareServiceAddOrUpdateParam) { // 服务管理-表单数据 HealthcareService healthcareServiceFormData = healthcareServiceAddOrUpdateParam.getHealthcareServiceFormData(); @@ -137,7 +136,6 @@ public class HealthcareServiceController { * @return 删除结果 */ @DeleteMapping(value = "/healthcare-service") - @Transactional(rollbackFor = Exception.class) public R delete(@RequestParam Long id) { boolean res = iHealthcareServiceService.removeById(id); // 同时删除非同定价 diff --git a/openhis-server/openhis-domain/src/main/java/com/openhis/administration/service/impl/ChargeItemDefinitionServiceImpl.java b/openhis-server/openhis-domain/src/main/java/com/openhis/administration/service/impl/ChargeItemDefinitionServiceImpl.java index 8b9f238d..9a10c5f1 100644 --- a/openhis-server/openhis-domain/src/main/java/com/openhis/administration/service/impl/ChargeItemDefinitionServiceImpl.java +++ b/openhis-server/openhis-domain/src/main/java/com/openhis/administration/service/impl/ChargeItemDefinitionServiceImpl.java @@ -86,7 +86,6 @@ public class ChargeItemDefinitionServiceImpl extends ServiceImpl