diff --git a/oracle-data/oracle-source/src/main/java/com/njcn/oracle/bo/param/MigrationParam.java b/oracle-data/oracle-source/src/main/java/com/njcn/oracle/bo/param/MigrationParam.java index 6a6f788..b531635 100644 --- a/oracle-data/oracle-source/src/main/java/com/njcn/oracle/bo/param/MigrationParam.java +++ b/oracle-data/oracle-source/src/main/java/com/njcn/oracle/bo/param/MigrationParam.java @@ -1,5 +1,6 @@ package com.njcn.oracle.bo.param; +import com.fasterxml.jackson.annotation.JsonFormat; import lombok.Data; import java.time.LocalDateTime; @@ -9,9 +10,11 @@ import java.util.List; public class MigrationParam { //起始时间 + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss") private LocalDateTime startTime; //截止时间 + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern="yyyy-MM-dd HH:mm:ss") private LocalDateTime endTime; //指标名,对应表映射后的实体名 diff --git a/oracle-data/oracle-source/src/main/java/com/njcn/oracle/bo/param/ServiceType.java b/oracle-data/oracle-source/src/main/java/com/njcn/oracle/bo/param/ServiceType.java new file mode 100644 index 0000000..4ec7425 --- /dev/null +++ b/oracle-data/oracle-source/src/main/java/com/njcn/oracle/bo/param/ServiceType.java @@ -0,0 +1,57 @@ +package com.njcn.oracle.bo.param; + +import com.njcn.oracle.bo.po.*; + +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +/** + * Description: + * Date: 2024/1/4 13:54【需求编号】 + * + * @author clam + * @version V1.0.0 + */ +public enum ServiceType { + DataFlicker, + DataFluc, + DataHarmphasicI, + DataHarmphasicV, + DataHarmpowerP, + DataHarmpowerQ, + DataHarmpowerS, + DataHarmrateI, + DataHarmrateV, + DataInharmI, + DataInharmV, + DataI, + DataPlt, + DataV, + DayFlicker, + DayFluc, + DayHarmphasicI, + DayHarmphasicV, + DayHarmpowerP, + DayHarmpowerQ, + DayHarmpowerS, + DayHarmrateI, + DayHarmrateV, + DayInharmI, + DayInharmV, + DayI, + DayPlt, + DayV, + LimitRate, + LimitTarget; + + /** + * 获取所有可执行的组件类型, + * 除了"目录"类型,其他都可以执行 + * @return + */ + public static List getExecutableTypes() { + return Arrays.stream(ServiceType.values()).collect(Collectors.toList()); + } + + } diff --git a/oracle-data/oracle-source/src/main/java/com/njcn/oracle/controller/DataSyncController.java b/oracle-data/oracle-source/src/main/java/com/njcn/oracle/controller/DataSyncController.java new file mode 100644 index 0000000..90c2ea5 --- /dev/null +++ b/oracle-data/oracle-source/src/main/java/com/njcn/oracle/controller/DataSyncController.java @@ -0,0 +1,58 @@ +package com.njcn.oracle.controller; + +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.extra.spring.SpringUtil; +import com.njcn.oracle.bo.param.MigrationParam; +import com.njcn.oracle.mybatis.service.IReplenishMybatisService; +import com.njcn.oracle.service.ServiceExecutorStore; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * Description: + * Date: 2024/1/3 14:57【需求编号】 + * + * @author clam + * @version V1.0.0 + */ +@Validated +@Slf4j +@RestController +@RequestMapping("/data") +@Api(tags = "数据同步") +@AllArgsConstructor +public class DataSyncController { + + private final ServiceExecutorStore serviceExecutorStore; + @PostMapping("/dataSync") + @ApiOperation("新增组件") + @ApiImplicitParam(name = "componentParam", value = "组件数据", required = true) + public void dataSync(@RequestBody MigrationParam migrationParam) { + + List tableNames = migrationParam.getTableNames(); + tableNames.stream().forEach(temp->{ +// IReplenishMybatisService executor = (IReplenishMybatisService)SpringUtil.getBean("com.njcn.oracle.service.impl." + temp + "ServiceImpl"); + IReplenishMybatisService executor = serviceExecutorStore.getExecutor(temp); + List list = executor.queryData(migrationParam); + if(CollectionUtil.isNotEmpty(list)){ + executor.clearTargetData(migrationParam); + executor.insertBatchByDB(list); + } + + }); + + } + + + +} diff --git a/oracle-data/oracle-source/src/main/java/com/njcn/oracle/mybatis/service/IReplenishMybatisService.java b/oracle-data/oracle-source/src/main/java/com/njcn/oracle/mybatis/service/IReplenishMybatisService.java index bd090df..39747dc 100644 --- a/oracle-data/oracle-source/src/main/java/com/njcn/oracle/mybatis/service/IReplenishMybatisService.java +++ b/oracle-data/oracle-source/src/main/java/com/njcn/oracle/mybatis/service/IReplenishMybatisService.java @@ -2,6 +2,7 @@ package com.njcn.oracle.mybatis.service; import com.baomidou.mybatisplus.extension.service.IService; import com.njcn.oracle.bo.param.MigrationParam; +import com.njcn.oracle.bo.param.ServiceType; import com.njcn.oracle.bo.po.DataFlicker; import java.time.LocalDateTime; @@ -14,6 +15,8 @@ import java.util.List; */ public interface IReplenishMybatisService extends IService { + ServiceType getServiceType(); + /*** * 当批量插入数据量过大时,可以指定尺寸交给mybatis,每次插入多少条记录 * @author hongawen diff --git a/oracle-data/oracle-source/src/main/java/com/njcn/oracle/mybatis/service/impl/ReplenishMybatisServiceImpl.java b/oracle-data/oracle-source/src/main/java/com/njcn/oracle/mybatis/service/impl/ReplenishMybatisServiceImpl.java index db5fb69..8f0efbe 100644 --- a/oracle-data/oracle-source/src/main/java/com/njcn/oracle/mybatis/service/impl/ReplenishMybatisServiceImpl.java +++ b/oracle-data/oracle-source/src/main/java/com/njcn/oracle/mybatis/service/impl/ReplenishMybatisServiceImpl.java @@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.njcn.oracle.mybatis.mapper.BatchBaseMapper; import com.njcn.oracle.mybatis.service.IReplenishMybatisService; +import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StopWatch; @@ -15,6 +16,7 @@ import java.util.List; * @version 1.0.0 * @date 2023年06月06日 18:16 */ +@Service public abstract class ReplenishMybatisServiceImpl, T> extends ServiceImpl, T> implements IReplenishMybatisService { @Override diff --git a/oracle-data/oracle-source/src/main/java/com/njcn/oracle/service/ServiceExecutorStore.java b/oracle-data/oracle-source/src/main/java/com/njcn/oracle/service/ServiceExecutorStore.java new file mode 100644 index 0000000..0b7b7c9 --- /dev/null +++ b/oracle-data/oracle-source/src/main/java/com/njcn/oracle/service/ServiceExecutorStore.java @@ -0,0 +1,44 @@ +package com.njcn.oracle.service; + +import com.njcn.oracle.bo.param.ServiceType; +import com.njcn.oracle.mybatis.service.IReplenishMybatisService; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.tuple.Pair; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Description: + * Date: 2024/1/4 13:43【需求编号】 + * + * @author clam + * @version V1.0.0 + */ +@Service +@Slf4j +public class ServiceExecutorStore { + + private final Map annotationMap = new HashMap<>(); + + @Autowired + public ServiceExecutorStore(List Services) { + for (IReplenishMybatisService executor : Services) { + annotationMap.put(executor.getServiceType().name(),executor); + } + for (ServiceType type : ServiceType.getExecutableTypes()) { + log.info("ServiceType [{}] doesn't have ServiceType executor", type); + + } + + } + + + public IReplenishMybatisService getExecutor(String serviceType) { + IReplenishMybatisService executor = annotationMap.get(serviceType); + return executor; + } +} diff --git a/oracle-data/oracle-source/src/main/java/com/njcn/oracle/service/impl/DataFlickerServiceImpl.java b/oracle-data/oracle-source/src/main/java/com/njcn/oracle/service/impl/DataFlickerServiceImpl.java index 36f7b79..7f36b7e 100644 --- a/oracle-data/oracle-source/src/main/java/com/njcn/oracle/service/impl/DataFlickerServiceImpl.java +++ b/oracle-data/oracle-source/src/main/java/com/njcn/oracle/service/impl/DataFlickerServiceImpl.java @@ -4,8 +4,10 @@ import cn.hutool.core.collection.CollectionUtil; import com.baomidou.dynamic.datasource.annotation.DS; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.njcn.oracle.bo.param.MigrationParam; +import com.njcn.oracle.bo.param.ServiceType; import com.njcn.oracle.bo.po.DataFlicker; import com.njcn.oracle.mapper.DataFlickerMapper; +import com.njcn.oracle.mybatis.service.IReplenishMybatisService; import com.njcn.oracle.mybatis.service.impl.ReplenishMybatisServiceImpl; import com.njcn.oracle.service.IDataFlickerService; import org.springframework.stereotype.Service; @@ -47,6 +49,12 @@ public class DataFlickerServiceImpl extends ReplenishMybatisServiceImpl