Forráskód Böngészése

多数据库配置

chenkq 3 hete
szülő
commit
00eae45ad1

+ 0 - 4
java/storlead-sasa/storlead-trade/src/main/java/com/storlead/trade/controller/CustomerAiAnalysisController.java

@@ -14,7 +14,6 @@ import com.storlead.trade.service.CustomerAnalysisResultEntityService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.BeanUtils;
-import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.ObjectUtils;
 import org.springframework.web.bind.annotation.*;
@@ -83,7 +82,6 @@ public class CustomerAiAnalysisController {
 
     @PostMapping(value = "/add")
     @ApiOperation(value = "客户AI分析结果添加", notes = "客户AI分析结果添加")
-    @Transactional(rollbackFor = Throwable.class)
     public Result<?> add(@RequestBody CustomerAnalysisResultDTO dto) {
         CustomerAnalysisResultEntity entity = new CustomerAnalysisResultEntity();
         BeanUtils.copyProperties(dto, entity);
@@ -96,7 +94,6 @@ public class CustomerAiAnalysisController {
 
     @PostMapping(value = "/edit")
     @ApiOperation(value = "客户AI分析结果修改", notes = "客户AI分析结果修改")
-    @Transactional(rollbackFor = Throwable.class)
     public Result<?> edit(@RequestBody CustomerAnalysisResultDTO dto) {
         if (ObjectUtils.isEmpty(dto.getId())) {
             return Result.error("id不能为空");
@@ -112,7 +109,6 @@ public class CustomerAiAnalysisController {
 
     @PostMapping(value = "/delete")
     @ApiOperation(value = "客户AI分析结果删除", notes = "客户AI分析结果删除")
-    @Transactional(rollbackFor = Throwable.class)
     public Result<?> delete(@RequestBody CustomerAnalysisResultDTO dto) {
         boolean isOk = false;
         Long id = dto.getId();

+ 0 - 6
java/storlead-sasa/storlead-trade/src/main/java/com/storlead/trade/controller/MarketingCampaignSopDetailController.java

@@ -16,7 +16,6 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.BeanUtils;
 import org.springframework.jdbc.core.JdbcTemplate;
-import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.ObjectUtils;
 import org.springframework.web.bind.annotation.*;
@@ -105,7 +104,6 @@ public class MarketingCampaignSopDetailController {
      */
     @PostMapping("/add")
     @ApiOperation(value = "新增营销活动SOP明细", notes = "支持单条新增")
-    @Transactional(rollbackFor = Throwable.class)
     public Result<?> add(@RequestBody MarketingCampaignSopDetailDTO dto) {
         if (ObjectUtils.isEmpty(dto.getMarketingCampaignId())) {
             return Result.error("营销活动id不能为空");
@@ -125,7 +123,6 @@ public class MarketingCampaignSopDetailController {
 
     @PostMapping("/add-confirm")
     @ApiOperation(value = "确认创建/编辑营销活动", notes = "根据智能调度类型生成待发送邮件")
-    @Transactional(rollbackFor = Throwable.class)
     public Result<?> addConfirm(@RequestBody MarketingCampaignSopDetailDTO dto) {
         if (ObjectUtils.isEmpty(dto.getMarketingCampaignId())) {
             return Result.error("营销活动id不能为空");
@@ -348,7 +345,6 @@ public class MarketingCampaignSopDetailController {
      */
     @PostMapping("/add/batch")
     @ApiOperation(value = "批量新增营销活动SOP明细", notes = "支持批量新增")
-    @Transactional(rollbackFor = Throwable.class)
     public Result<?> addBatch(@RequestBody List<MarketingCampaignSopDetailDTO> dtoList) {
         if (CollectionUtils.isEmpty(dtoList)) {
             return Result.error("数据不能为空");
@@ -371,7 +367,6 @@ public class MarketingCampaignSopDetailController {
      */
     @PostMapping("/edit")
     @ApiOperation(value = "编辑营销活动SOP明细", notes = "编辑营销活动SOP明细")
-    @Transactional(rollbackFor = Throwable.class)
     public Result<?> edit(@RequestBody MarketingCampaignSopDetailDTO dto) {
         if (ObjectUtils.isEmpty(dto.getId())) {
             return Result.error("id不能为空");
@@ -390,7 +385,6 @@ public class MarketingCampaignSopDetailController {
      */
     @PostMapping("/delete")
     @ApiOperation(value = "删除营销活动SOP明细", notes = "支持单条id或批量idList删除")
-    @Transactional(rollbackFor = Throwable.class)
     public Result<?> delete(@RequestBody MarketingCampaignSopDetailDTO dto) {
         boolean isOk = false;
         Long id = dto.getId();

+ 0 - 4
java/storlead-sasa/storlead-trade/src/main/java/com/storlead/trade/controller/MarketingController.java

@@ -7,7 +7,6 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.ObjectUtils;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -34,7 +33,6 @@ public class MarketingController {
 
     @PostMapping(value = "/add")
     @ApiOperation(value = "营销: 营销活动添加", notes = "营销: 营销活动添加简报")
-    @Transactional(rollbackFor = Throwable.class)
     public Result<?> add(@RequestBody MarketingCampaignDTO marketingCampaignDTO) {
         Result<Object> result = marketingService.addMarket(marketingCampaignDTO);
         return Result.result(result);
@@ -42,7 +40,6 @@ public class MarketingController {
 
     @PostMapping(value = "/edit")
     @ApiOperation(value = "营销: 营销活动修改", notes = "营销: 营销活动修改")
-    @Transactional(rollbackFor = Throwable.class)
     public Result<?> edit(@RequestBody MarketingCampaignDTO marketingCampaignDTO) {
         Result<Object> result = marketingService.editMarket(marketingCampaignDTO);
         return Result.result(result);
@@ -50,7 +47,6 @@ public class MarketingController {
 
     @PostMapping(value = "/delete")
     @ApiOperation(value = "营销: 营销活动修改", notes = "营销: 营销活动修改")
-    @Transactional(rollbackFor = Throwable.class)
     public Result<?> delete(@RequestBody MarketingCampaignDTO marketingCampaignDTO) {
         boolean isOk = false;
         Long id = marketingCampaignDTO.getId();

+ 2 - 2
java/storlead-sasa/storlead-trade/src/main/java/com/storlead/trade/service/impl/CustomerAnalysisResultEntityServiceImpl.java

@@ -6,7 +6,7 @@ import com.storlead.framework.common.constant.DSConstants;
 import com.storlead.trade.entity.CustomerAnalysisResultEntity;
 import com.storlead.trade.mapper.CustomerAnalysisResultEntityMapper;
 import com.storlead.trade.service.CustomerAnalysisResultEntityService;
-import com.storlead.framework.mybatis.service.impl.MyBaseServiceImpl;
+import com.storlead.trade.service.impl.support.TradeDataSourceServiceImpl;
 import org.springframework.stereotype.Service;
 
 import java.util.List;
@@ -15,7 +15,7 @@ import java.util.Map;
 @Service
 @DS(DSConstants.DATASOURCE_TRADE)
 public class CustomerAnalysisResultEntityServiceImpl
-        extends MyBaseServiceImpl<CustomerAnalysisResultEntityMapper, CustomerAnalysisResultEntity>
+        extends TradeDataSourceServiceImpl<CustomerAnalysisResultEntityMapper, CustomerAnalysisResultEntity>
         implements CustomerAnalysisResultEntityService {
 
     @Override

+ 2 - 2
java/storlead-sasa/storlead-trade/src/main/java/com/storlead/trade/service/impl/CustomerBaseEntityServiceImpl.java

@@ -10,7 +10,7 @@ import com.storlead.trade.entity.CustomerBaseEntity;
 import com.storlead.trade.mapper.CustomerBaseEntityMapper;
 import com.storlead.trade.service.CustomerBaseEntityService;
 import com.storlead.trade.vo.MarketingCampaignCustomerVO;
-import com.storlead.framework.mybatis.service.impl.MyBaseServiceImpl;
+import com.storlead.trade.service.impl.support.TradeDataSourceServiceImpl;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
@@ -18,7 +18,7 @@ import javax.annotation.Resource;
 @Service
 @DS(DSConstants.DATASOURCE_TRADE)
 public class CustomerBaseEntityServiceImpl
-        extends MyBaseServiceImpl<CustomerBaseEntityMapper, CustomerBaseEntity>
+        extends TradeDataSourceServiceImpl<CustomerBaseEntityMapper, CustomerBaseEntity>
         implements CustomerBaseEntityService {
 
     @Resource

+ 5 - 2
java/storlead-sasa/storlead-trade/src/main/java/com/storlead/trade/service/impl/MarketingCampaignEntityServiceImpl.java

@@ -17,9 +17,10 @@ import com.storlead.trade.service.*;
 import com.storlead.trade.vo.MarketingCampaignVO;
 import com.storlead.framework.common.constant.CommonConstant;
 import com.storlead.framework.common.result.Result;
-import com.storlead.framework.mybatis.service.impl.MyBaseServiceImpl;
+import com.storlead.trade.service.impl.support.TradeDataSourceServiceImpl;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
 
@@ -32,7 +33,7 @@ import java.util.stream.Collectors;
 @Service
 @DS(DSConstants.DATASOURCE_TRADE)
 public class MarketingCampaignEntityServiceImpl
-        extends MyBaseServiceImpl<MarketingCampaignEntityMapper, MarketingCampaignEntity>
+        extends TradeDataSourceServiceImpl<MarketingCampaignEntityMapper, MarketingCampaignEntity>
         implements MarketingCampaignEntityService {
 
     @Resource
@@ -96,6 +97,7 @@ public class MarketingCampaignEntityServiceImpl
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public Result<Object> addMarket(MarketingCampaignDTO marketingCampaignDTO) {
         MarketingCampaignEntity marketingCampaignEntity = new MarketingCampaignEntity();
         BeanUtils.copyProperties(marketingCampaignDTO, marketingCampaignEntity);
@@ -153,6 +155,7 @@ public class MarketingCampaignEntityServiceImpl
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public Result<Object> editMarket(MarketingCampaignDTO marketingCampaignDTO) {
         MarketingCampaignEntity marketingCampaignEntity = new MarketingCampaignEntity();
         BeanUtils.copyProperties(marketingCampaignDTO, marketingCampaignEntity);

+ 2 - 3
java/storlead-sasa/storlead-trade/src/main/java/com/storlead/trade/service/impl/MarketingCampaignSopDetailServiceImpl.java

@@ -2,11 +2,10 @@ package com.storlead.trade.service.impl;
 
 import com.baomidou.dynamic.datasource.annotation.DS;
 import com.storlead.framework.common.constant.DSConstants;
-
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.storlead.trade.entity.MarketingCampaignSopDetailEntity;
 import com.storlead.trade.mapper.MarketingCampaignSopDetailMapper;
 import com.storlead.trade.service.MarketingCampaignSopDetailService;
+import com.storlead.trade.service.impl.support.TradeDataSourceServiceImpl;
 import org.springframework.stereotype.Service;
 
 /**
@@ -15,6 +14,6 @@ import org.springframework.stereotype.Service;
 @Service
 @DS(DSConstants.DATASOURCE_TRADE)
 public class MarketingCampaignSopDetailServiceImpl
-        extends ServiceImpl<MarketingCampaignSopDetailMapper, MarketingCampaignSopDetailEntity>
+        extends TradeDataSourceServiceImpl<MarketingCampaignSopDetailMapper, MarketingCampaignSopDetailEntity>
         implements MarketingCampaignSopDetailService {
 }

+ 4 - 3
java/storlead-sasa/storlead-trade/src/main/java/com/storlead/trade/service/impl/SopDetailServiceImpl.java

@@ -2,11 +2,10 @@ package com.storlead.trade.service.impl;
 
 import com.baomidou.dynamic.datasource.annotation.DS;
 import com.storlead.framework.common.constant.DSConstants;
-
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.storlead.trade.entity.SopDetailEntity;
 import com.storlead.trade.mapper.SopDetailMapper;
 import com.storlead.trade.service.SopDetailService;
+import com.storlead.trade.service.impl.support.TradeDataSourceServiceImpl;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 
@@ -16,5 +15,7 @@ import org.springframework.stereotype.Service;
 @Slf4j
 @Service
 @DS(DSConstants.DATASOURCE_TRADE)
-public class SopDetailServiceImpl extends ServiceImpl<SopDetailMapper, SopDetailEntity> implements SopDetailService {
+public class SopDetailServiceImpl
+        extends TradeDataSourceServiceImpl<SopDetailMapper, SopDetailEntity>
+        implements SopDetailService {
 }

+ 59 - 0
java/storlead-sasa/storlead-trade/src/main/java/com/storlead/trade/service/impl/support/TradeDataSourceServiceImpl.java

@@ -0,0 +1,59 @@
+package com.storlead.trade.service.impl.support;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import com.baomidou.dynamic.datasource.toolkit.DynamicDataSourceContextHolder;
+import com.storlead.framework.common.constant.DSConstants;
+import com.storlead.framework.mybatis.entity.SysBaseField;
+import com.storlead.framework.mybatis.mapper.MyBaseMapper;
+import com.storlead.framework.mybatis.service.impl.MyBaseServiceImpl;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Collection;
+
+/**
+ * trade 库 Service 基类。
+ * <p>
+ * MyBatis-Plus 的 {@code saveBatch}/{@code updateBatchById} 走 SqlSession 批量执行,
+ * 不会经过 Mapper 代理上的 @DS;且 Controller 层若先开 @Transactional 会绑定 primary(master)。
+ * 这里在批量方法上强制 push trade,保证批量写入落到 trade 库。
+ */
+@DS(DSConstants.DATASOURCE_TRADE)
+public abstract class TradeDataSourceServiceImpl<M extends MyBaseMapper<T>, T extends SysBaseField>
+        extends MyBaseServiceImpl<M, T> {
+
+    @Override
+    @DS(DSConstants.DATASOURCE_TRADE)
+    @Transactional(rollbackFor = Exception.class)
+    public boolean saveBatch(Collection<T> entityList, int batchSize) {
+        DynamicDataSourceContextHolder.push(DSConstants.DATASOURCE_TRADE);
+        try {
+            return super.saveBatch(entityList, batchSize);
+        } finally {
+            DynamicDataSourceContextHolder.poll();
+        }
+    }
+
+    @Override
+    @DS(DSConstants.DATASOURCE_TRADE)
+    @Transactional(rollbackFor = Exception.class)
+    public boolean updateBatchById(Collection<T> entityList, int batchSize) {
+        DynamicDataSourceContextHolder.push(DSConstants.DATASOURCE_TRADE);
+        try {
+            return super.updateBatchById(entityList, batchSize);
+        } finally {
+            DynamicDataSourceContextHolder.poll();
+        }
+    }
+
+    @Override
+    @DS(DSConstants.DATASOURCE_TRADE)
+    @Transactional(rollbackFor = Exception.class)
+    public boolean saveOrUpdateBatch(Collection<T> entityList, int batchSize) {
+        DynamicDataSourceContextHolder.push(DSConstants.DATASOURCE_TRADE);
+        try {
+            return super.saveOrUpdateBatch(entityList, batchSize);
+        } finally {
+            DynamicDataSourceContextHolder.poll();
+        }
+    }
+}