diff --git a/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/base/enums/ErrorCodeConstants.java b/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/base/enums/ErrorCodeConstants.java index 64186da1..338cdb35 100644 --- a/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/base/enums/ErrorCodeConstants.java +++ b/zt-module-base/zt-module-base-api/src/main/java/com/zt/plat/module/base/enums/ErrorCodeConstants.java @@ -72,4 +72,5 @@ public interface ErrorCodeConstants { // ========== 主数据同步 ========== ErrorCode MASTER_DATA_SYNC_DISABLED = new ErrorCode(1_027_900_001, "主数据同步功能已禁用"); ErrorCode MASTER_DATA_SYNC_BATCH_SIZE_TOO_LARGE = new ErrorCode(1_027_900_002, "最大批次不得超过 1000"); + ErrorCode MASTER_DATA_SYNC_SINCE_NULL = new ErrorCode(1_027_900_003, "同步日期不能为空"); } diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/base/MasterDataSyncController.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/base/MasterDataSyncController.java index be85284f..ec2dcd9b 100644 --- a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/base/MasterDataSyncController.java +++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/controller/admin/base/MasterDataSyncController.java @@ -1,5 +1,6 @@ package com.zt.plat.module.base.controller.admin.base; +import com.fasterxml.jackson.annotation.JsonFormat; import com.zt.plat.framework.common.pojo.CommonResult; import com.zt.plat.framework.common.util.object.BeanUtils; import com.zt.plat.module.base.controller.admin.base.vo.MasterDataSyncReqVO; @@ -9,16 +10,23 @@ import com.zt.plat.module.base.service.masterdatasync.dto.MasterDataSyncCommand; import com.zt.plat.module.base.service.masterdatasync.dto.MasterDataSyncReport; import com.zt.plat.module.base.service.masterdatasync.dto.MasterDataCategorySyncReport; import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Parameters; import io.swagger.v3.oas.annotations.tags.Tag; import jakarta.annotation.Resource; import jakarta.validation.Valid; +import org.springframework.format.annotation.DateTimeFormat; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; 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.RequestParam; import org.springframework.web.bind.annotation.RestController; +import java.time.LocalDateTime; + import static com.zt.plat.framework.common.pojo.CommonResult.success; @Tag(name = "管理后台 - 主数据同步") @@ -41,11 +49,15 @@ public class MasterDataSyncController { return success(report); } - @PostMapping("/categories") + @GetMapping("/categories") @Operation(summary = "同步物料分类") @PreAuthorize("@ss.hasPermission('base:master-data-sync:categories')") - public CommonResult syncCategories() { - MasterDataCategorySyncReport report = masterDataCategorySyncService.syncAll(); + @Parameters({ + @Parameter(name = "since", description = "增量同步的起始记录时间", required = true) + }) + public CommonResult syncCategories(@RequestParam("since") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime since) { + MasterDataCategorySyncReport report = masterDataCategorySyncService.syncByAuditTime( since); return success(report); } } diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/mysql/masterdata/MdmMaterialCategoryMapper.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/mysql/masterdata/MdmMaterialCategoryMapper.java index ec8770ae..93a1dae2 100644 --- a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/mysql/masterdata/MdmMaterialCategoryMapper.java +++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/dal/mysql/masterdata/MdmMaterialCategoryMapper.java @@ -4,7 +4,9 @@ import com.baomidou.dynamic.datasource.annotation.DS; import com.zt.plat.module.base.dal.dataobject.masterdata.MdmMaterialCategoryDO; import com.zt.plat.module.base.framework.sync.constant.MasterDataSyncConstants; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import java.time.LocalDateTime; import java.util.List; /** @@ -18,4 +20,9 @@ public interface MdmMaterialCategoryMapper { * 拉取全部分类档案。 */ List selectAll(); + + /** + * 查询分类档案,仅拉取审核时间时间大于指定时间段的数据审核通过数据 + */ + List selectByAuditTime(@Param("since") LocalDateTime since); } diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/job/MasterDataSyncJob.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/job/MasterDataSyncJob.java new file mode 100644 index 00000000..3a1e3d41 --- /dev/null +++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/job/MasterDataSyncJob.java @@ -0,0 +1,60 @@ +package com.zt.plat.module.base.job; + +import cn.hutool.core.date.LocalDateTimeUtil; +import com.xxl.job.core.handler.annotation.XxlJob; +import com.zt.plat.framework.common.util.object.BeanUtils; +import com.zt.plat.module.base.service.masterdatasync.MasterDataCategorySyncService; +import com.zt.plat.module.base.service.masterdatasync.MasterDataSyncService; +import com.zt.plat.module.base.service.masterdatasync.dto.MasterDataCategorySyncReport; +import com.zt.plat.module.base.service.masterdatasync.dto.MasterDataSyncCommand; +import com.zt.plat.module.base.service.masterdatasync.dto.MasterDataSyncReport; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.time.LocalDateTime; + +/** + * 物料同步定时任务 + * 2026/2/26 14:30 + */ +@Component +@Slf4j +public class MasterDataSyncJob { + + @Resource + private MasterDataSyncService masterDataSyncService; + @Resource + private MasterDataCategorySyncService masterDataCategorySyncService; + + /** + * 同步物料数据(同步今天00:00:00 ~ 当前时间) + */ + @XxlJob("syncMasterData") + public void syncMasterData() { + log.info("[同步物料数据][开始执行]"); + MasterDataSyncCommand command = new MasterDataSyncCommand(); + command.setSince(LocalDateTimeUtil.beginOfDay(LocalDateTime.now())); + MasterDataSyncReport report = masterDataSyncService.sync(command); + if (report.isSuccess()) { + log.info("[同步物料数据][结束执行][成功]"); + } else { + log.error("[同步物料数据][结束执行][失败]" + report.getMessage()); + } + } + + /** + * 同步物料分类(同步今天 00:00:00 ~ 当前时间 通过审核的数据) + */ + @XxlJob("syncCategories") + public void syncCategories() { + log.info("[同步物料分类][开始执行]"); + MasterDataCategorySyncReport report = masterDataCategorySyncService.syncByAuditTime(LocalDateTimeUtil.beginOfDay(LocalDateTime.now())); + if (report.isSuccess()) { + log.info("[同步物料分类][结束执行][成功]"); + } else { + log.error("[同步物料分类][结束执行][失败]" + report.getMessage()); + } + } + +} diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/masterdatasync/MasterDataCategorySyncService.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/masterdatasync/MasterDataCategorySyncService.java index 3e33148d..933a85c2 100644 --- a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/masterdatasync/MasterDataCategorySyncService.java +++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/masterdatasync/MasterDataCategorySyncService.java @@ -2,10 +2,14 @@ package com.zt.plat.module.base.service.masterdatasync; import com.zt.plat.module.base.service.masterdatasync.dto.MasterDataCategorySyncReport; +import java.time.LocalDateTime; + /** * 物料分类同步服务接口。 */ public interface MasterDataCategorySyncService { MasterDataCategorySyncReport syncAll(); + + MasterDataCategorySyncReport syncByAuditTime(LocalDateTime since); } diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/masterdatasync/MasterDataCategorySyncServiceImpl.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/masterdatasync/MasterDataCategorySyncServiceImpl.java index 96c098b3..bec84b43 100644 --- a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/masterdatasync/MasterDataCategorySyncServiceImpl.java +++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/masterdatasync/MasterDataCategorySyncServiceImpl.java @@ -14,6 +14,7 @@ import jakarta.annotation.Resource; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import java.time.LocalDateTime; import java.util.ArrayList; import java.util.Comparator; import java.util.LinkedHashMap; @@ -40,14 +41,28 @@ public class MasterDataCategorySyncServiceImpl implements MasterDataCategorySync @Resource private MasterDataSyncProperties properties; + @Override public MasterDataCategorySyncReport syncAll() { + List categories = mdmMaterialCategoryMapper.selectAll(); + return doSync(categories); + } + + @Override + public MasterDataCategorySyncReport syncByAuditTime(LocalDateTime since) { + if (since == null) { + throw ServiceExceptionUtil.exception(ErrorCodeConstants.MASTER_DATA_SYNC_SINCE_NULL); + } + List categories = mdmMaterialCategoryMapper.selectByAuditTime(since); + return doSync(categories); + } + + public MasterDataCategorySyncReport doSync(List categories) { if (!properties.isEnabled()) { throw ServiceExceptionUtil.exception(ErrorCodeConstants.MASTER_DATA_SYNC_DISABLED); } MasterDataCategorySyncReport report = MasterDataCategorySyncReport.start(); try { - List categories = mdmMaterialCategoryMapper.selectAll(); if (CollUtil.isEmpty(categories)) { report.markSuccess(); return report; diff --git a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/masterdatasync/MasterDataSyncServiceImpl.java b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/masterdatasync/MasterDataSyncServiceImpl.java index 651d728e..d47b5124 100644 --- a/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/masterdatasync/MasterDataSyncServiceImpl.java +++ b/zt-module-base/zt-module-base-server/src/main/java/com/zt/plat/module/base/service/masterdatasync/MasterDataSyncServiceImpl.java @@ -73,7 +73,7 @@ public class MasterDataSyncServiceImpl implements MasterDataSyncService { if (!properties.isEnabled()) { throw ServiceExceptionUtil.exception(ErrorCodeConstants.MASTER_DATA_SYNC_DISABLED); } - if (command.getBatchSize() > 1000) { + if (command.getBatchSize() != null && command.getBatchSize() > 1000) { throw ServiceExceptionUtil.exception(ErrorCodeConstants.MASTER_DATA_SYNC_BATCH_SIZE_TOO_LARGE, command.getBatchSize()); } MasterDataSyncReport report = MasterDataSyncReport.start(command); diff --git a/zt-module-base/zt-module-base-server/src/main/resources/mapper/masterdata/MdmMaterialCategoryMapper.xml b/zt-module-base/zt-module-base-server/src/main/resources/mapper/masterdata/MdmMaterialCategoryMapper.xml index 426986bb..2c1c3d10 100644 --- a/zt-module-base/zt-module-base-server/src/main/resources/mapper/masterdata/MdmMaterialCategoryMapper.xml +++ b/zt-module-base/zt-module-base-server/src/main/resources/mapper/masterdata/MdmMaterialCategoryMapper.xml @@ -14,4 +14,19 @@ ORDER BY CODE ASC + +