From cb18a381f1acfea1b6df91c838bac3882a57cea2 Mon Sep 17 00:00:00 2001 From: ouhaolan Date: Fri, 6 Mar 2026 15:43:56 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=8F=90=E4=BA=A4=E6=A0=87=E5=87=86?= =?UTF-8?q?=E6=A0=87=E7=AD=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/admin/tag/TagController.java | 106 ++++++++++++++ .../controller/admin/tag/vo/TagPageReqVO.java | 38 +++++ .../controller/admin/tag/vo/TagRespVO.java | 55 +++++++ .../controller/admin/tag/vo/TagSaveReqVO.java | 43 ++++++ .../admin/tagconfig/TagConfigController.java | 123 ++++++++++++++++ .../tagconfig/vo/TagConfigPageReqVO.java | 31 ++++ .../admin/tagconfig/vo/TagConfigRespVO.java | 48 ++++++ .../tagconfig/vo/TagConfigSaveAllReqVO.java | 19 +++ .../tagconfig/vo/TagConfigSaveReqVO.java | 35 +++++ .../TagSyncDetailController.java | 38 +++++ .../tagsyncdetail/vo/TagSyncDetailRespVO.java | 43 ++++++ .../TagSyncHistoryController.java | 46 ++++++ .../vo/TagSyncHistoryPageReqVO.java | 36 +++++ .../vo/TagSyncHistoryRespVO.java | 56 +++++++ .../ydoyun/dal/dataobject/tag/TagDO.java | 34 +++++ .../dal/dataobject/tagconfig/TagConfigDO.java | 31 ++++ .../tagsyncdetail/TagSyncDetailDO.java | 33 +++++ .../tagsynchistory/TagSyncHistoryDO.java | 33 +++++ .../ydoyun/dal/mysql/tag/TagMapper.java | 32 ++++ .../dal/mysql/tagconfig/TagConfigMapper.java | 32 ++++ .../tagsyncdetail/TagSyncDetailMapper.java | 17 +++ .../tagsynchistory/TagSyncHistoryMapper.java | 25 ++++ .../ydoyun/enums/ErrorCodeConstants.java | 10 +- .../module/ydoyun/service/tag/TagService.java | 19 +++ .../ydoyun/service/tag/TagServiceImpl.java | 67 +++++++++ .../service/tagconfig/TagConfigService.java | 22 +++ .../tagconfig/TagConfigServiceImpl.java | 138 ++++++++++++++++++ .../tagsyncdetail/TagSyncDetailService.java | 11 ++ .../TagSyncDetailServiceImpl.java | 29 ++++ .../tagsynchistory/TagSyncHistoryService.java | 14 ++ .../TagSyncHistoryServiceImpl.java | 34 +++++ .../main/resources/mapper/tag/TagMapper.xml | 4 + .../mapper/tagconfig/TagConfigMapper.xml | 4 + .../tagsyncdetail/TagSyncDetailMapper.xml | 4 + .../tagsynchistory/TagSyncHistoryMapper.xml | 4 + 35 files changed, 1308 insertions(+), 6 deletions(-) create mode 100644 yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/tag/TagController.java create mode 100644 yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/tag/vo/TagPageReqVO.java create mode 100644 yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/tag/vo/TagRespVO.java create mode 100644 yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/tag/vo/TagSaveReqVO.java create mode 100644 yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/tagconfig/TagConfigController.java create mode 100644 yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/tagconfig/vo/TagConfigPageReqVO.java create mode 100644 yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/tagconfig/vo/TagConfigRespVO.java create mode 100644 yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/tagconfig/vo/TagConfigSaveAllReqVO.java create mode 100644 yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/tagconfig/vo/TagConfigSaveReqVO.java create mode 100644 yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/tagsyncdetail/TagSyncDetailController.java create mode 100644 yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/tagsyncdetail/vo/TagSyncDetailRespVO.java create mode 100644 yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/tagsynchistory/TagSyncHistoryController.java create mode 100644 yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/tagsynchistory/vo/TagSyncHistoryPageReqVO.java create mode 100644 yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/tagsynchistory/vo/TagSyncHistoryRespVO.java create mode 100644 yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/dal/dataobject/tag/TagDO.java create mode 100644 yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/dal/dataobject/tagconfig/TagConfigDO.java create mode 100644 yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/dal/dataobject/tagsyncdetail/TagSyncDetailDO.java create mode 100644 yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/dal/dataobject/tagsynchistory/TagSyncHistoryDO.java create mode 100644 yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/dal/mysql/tag/TagMapper.java create mode 100644 yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/dal/mysql/tagconfig/TagConfigMapper.java create mode 100644 yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/dal/mysql/tagsyncdetail/TagSyncDetailMapper.java create mode 100644 yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/dal/mysql/tagsynchistory/TagSyncHistoryMapper.java create mode 100644 yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/service/tag/TagService.java create mode 100644 yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/service/tag/TagServiceImpl.java create mode 100644 yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/service/tagconfig/TagConfigService.java create mode 100644 yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/service/tagconfig/TagConfigServiceImpl.java create mode 100644 yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/service/tagsyncdetail/TagSyncDetailService.java create mode 100644 yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/service/tagsyncdetail/TagSyncDetailServiceImpl.java create mode 100644 yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/service/tagsynchistory/TagSyncHistoryService.java create mode 100644 yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/service/tagsynchistory/TagSyncHistoryServiceImpl.java create mode 100644 yudao-module-ydoyun/src/main/resources/mapper/tag/TagMapper.xml create mode 100644 yudao-module-ydoyun/src/main/resources/mapper/tagconfig/TagConfigMapper.xml create mode 100644 yudao-module-ydoyun/src/main/resources/mapper/tagsyncdetail/TagSyncDetailMapper.xml create mode 100644 yudao-module-ydoyun/src/main/resources/mapper/tagsynchistory/TagSyncHistoryMapper.xml diff --git a/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/tag/TagController.java b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/tag/TagController.java new file mode 100644 index 0000000..3a59ecd --- /dev/null +++ b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/tag/TagController.java @@ -0,0 +1,106 @@ +package cn.iocoder.yudao.module.ydoyun.controller.admin.tag; + +import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; +import javax.validation.*; +import javax.servlet.http.*; +import java.util.*; +import java.io.IOException; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT; + +import cn.iocoder.yudao.module.ydoyun.controller.admin.tag.vo.*; +import cn.iocoder.yudao.module.ydoyun.dal.dataobject.tag.TagDO; +import cn.iocoder.yudao.module.ydoyun.service.tag.TagService; + +@Tag(name = "管理后台 - 标准标签") +@RestController +@RequestMapping("/ydoyun/tag") +@Validated +public class TagController { + + @Resource + private TagService tagService; + + @PostMapping("/create") + @Operation(summary = "创建标准标签") + @PreAuthorize("@ss.hasPermission('ydoyun:tag:create')") + public CommonResult createTag(@Valid @RequestBody TagSaveReqVO createReqVO) { + return success(tagService.createTag(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新标准标签") + @PreAuthorize("@ss.hasPermission('ydoyun:tag:update')") + public CommonResult updateTag(@Valid @RequestBody TagSaveReqVO updateReqVO) { + tagService.updateTag(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除标准标签") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('ydoyun:tag:delete')") + public CommonResult deleteTag(@RequestParam("id") Long id) { + tagService.deleteTag(id); + return success(true); + } + + @DeleteMapping("/delete-list") + @Parameter(name = "ids", description = "编号", required = true) + @Operation(summary = "批量删除标准标签") + @PreAuthorize("@ss.hasPermission('ydoyun:tag:delete')") + public CommonResult deleteTagList(@RequestParam("ids") List ids) { + tagService.deleteTagListByIds(ids); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得标准标签") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('ydoyun:tag:query')") + public CommonResult getTag(@RequestParam("id") Long id) { + TagDO tag = tagService.getTag(id); + return success(BeanUtils.toBean(tag, TagRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得标准标签分页") + @PreAuthorize("@ss.hasPermission('ydoyun:tag:query')") + public CommonResult> getTagPage(@Valid TagPageReqVO pageReqVO) { + PageResult pageResult = tagService.getTagPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, TagRespVO.class)); + } + + @GetMapping("/list-by-type") + @Operation(summary = "按类型获取标签列表") + @Parameter(name = "type", description = "标签类型(product/store/supplier)") + @PreAuthorize("@ss.hasPermission('ydoyun:tag:query')") + public CommonResult> getTagListByType(@RequestParam(value = "type", required = false) String type) { + List list = tagService.getTagListByType(type); + return success(BeanUtils.toBean(list, TagRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出标准标签 Excel") + @PreAuthorize("@ss.hasPermission('ydoyun:tag:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportTagExcel(@Valid TagPageReqVO pageReqVO, HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = tagService.getTagPage(pageReqVO).getList(); + ExcelUtils.write(response, "标准标签.xls", "数据", TagRespVO.class, BeanUtils.toBean(list, TagRespVO.class)); + } +} diff --git a/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/tag/vo/TagPageReqVO.java b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/tag/vo/TagPageReqVO.java new file mode 100644 index 0000000..919200d --- /dev/null +++ b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/tag/vo/TagPageReqVO.java @@ -0,0 +1,38 @@ +package cn.iocoder.yudao.module.ydoyun.controller.admin.tag.vo; + +import lombok.*; +import io.swagger.v3.oas.annotations.media.Schema; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 标准标签分页 Request VO") +@Data +public class TagPageReqVO extends PageParam { + + @Schema(description = "标签名称") + private String name; + + @Schema(description = "标签类型(product/store/supplier)") + private String type; + + @Schema(description = "标签表达式") + private String expression; + + @Schema(description = "标签颜色") + private String color; + + @Schema(description = "SQL脚本") + private String sqlScript; + + @Schema(description = "是否代入参数(0否 1是)") + private Boolean useParams; + + @Schema(description = "参数列表(逗号分隔)") + private String params; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; +} diff --git a/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/tag/vo/TagRespVO.java b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/tag/vo/TagRespVO.java new file mode 100644 index 0000000..8ba1e66 --- /dev/null +++ b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/tag/vo/TagRespVO.java @@ -0,0 +1,55 @@ +package cn.iocoder.yudao.module.ydoyun.controller.admin.tag.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.time.LocalDateTime; +import cn.idev.excel.annotation.*; + +@Schema(description = "管理后台 - 标准标签 Response VO") +@Data +@ExcelIgnoreUnannotated +public class TagRespVO { + + @Schema(description = "主键ID") + @ExcelProperty("主键ID") + private Long id; + + @Schema(description = "标签名称") + @ExcelProperty("标签名称") + private String name; + + @Schema(description = "标签类型(product/store/supplier)") + @ExcelProperty("标签类型") + private String type; + + @Schema(description = "标签表达式") + @ExcelProperty("标签表达式") + private String expression; + + @Schema(description = "标签颜色") + @ExcelProperty("标签颜色") + private String color; + + @Schema(description = "SQL脚本") + @ExcelProperty("SQL脚本") + private String sqlScript; + + @Schema(description = "已拼接参数的SQL,执行时直接使用") + @ExcelProperty("已拼接SQL") + private String sqlScriptResolved; + + @Schema(description = "是否代入参数(0否 1是)") + @ExcelProperty("是否代入参数") + private Boolean useParams; + + @Schema(description = "参数列表(逗号分隔)") + @ExcelProperty("参数列表") + private String params; + + @Schema(description = "参数值 JSON,如 {\"参数1\":\"28\",\"参数2\":\"90\"}") + private String paramValues; + + @Schema(description = "创建时间") + @ExcelProperty("创建时间") + private LocalDateTime createTime; +} diff --git a/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/tag/vo/TagSaveReqVO.java b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/tag/vo/TagSaveReqVO.java new file mode 100644 index 0000000..46ef51e --- /dev/null +++ b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/tag/vo/TagSaveReqVO.java @@ -0,0 +1,43 @@ +package cn.iocoder.yudao.module.ydoyun.controller.admin.tag.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import javax.validation.constraints.*; + +@Schema(description = "管理后台 - 标准标签新增/修改 Request VO") +@Data +public class TagSaveReqVO { + + @Schema(description = "主键ID") + private Long id; + + @Schema(description = "标签名称", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "标签名称不能为空") + private String name; + + @Schema(description = "标签类型(product/store/supplier)", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "标签类型不能为空") + private String type; + + @Schema(description = "标签表达式") + private String expression; + + @Schema(description = "标签颜色") + private String color; + + @Schema(description = "SQL脚本") + private String sqlScript; + + @Schema(description = "已拼接参数的SQL,执行时直接使用") + private String sqlScriptResolved; + + @Schema(description = "是否代入参数(0否 1是)", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "是否代入参数不能为空") + private Boolean useParams; + + @Schema(description = "参数列表(逗号分隔)") + private String params; + + @Schema(description = "参数值 JSON,如 {\"参数1\":\"28\",\"参数2\":\"90\"}") + private String paramValues; +} diff --git a/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/tagconfig/TagConfigController.java b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/tagconfig/TagConfigController.java new file mode 100644 index 0000000..9d92c77 --- /dev/null +++ b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/tagconfig/TagConfigController.java @@ -0,0 +1,123 @@ +package cn.iocoder.yudao.module.ydoyun.controller.admin.tagconfig; + +import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; +import javax.validation.*; +import javax.servlet.http.*; +import java.util.*; +import java.io.IOException; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT; + +import cn.iocoder.yudao.module.ydoyun.controller.admin.tagconfig.vo.*; +import cn.iocoder.yudao.module.ydoyun.dal.dataobject.tagconfig.TagConfigDO; +import cn.iocoder.yudao.module.ydoyun.service.tagconfig.TagConfigService; + +@Tag(name = "管理后台 - 标签基础配置") +@RestController +@RequestMapping("/ydoyun/tag-config") +@Validated +public class TagConfigController { + + @Resource + private TagConfigService tagConfigService; + + @PostMapping("/create") + @Operation(summary = "创建标签同步配置") + @PreAuthorize("@ss.hasPermission('ydoyun:tag-config:create')") + public CommonResult createTagConfig(@Valid @RequestBody TagConfigSaveReqVO createReqVO) { + return success(tagConfigService.createTagConfig(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新标签同步配置") + @PreAuthorize("@ss.hasPermission('ydoyun:tag-config:update')") + public CommonResult updateTagConfig(@Valid @RequestBody TagConfigSaveReqVO updateReqVO) { + tagConfigService.updateTagConfig(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除标签同步配置") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('ydoyun:tag-config:delete')") + public CommonResult deleteTagConfig(@RequestParam("id") Long id) { + tagConfigService.deleteTagConfig(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得标签同步配置") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('ydoyun:tag-config:query')") + public CommonResult getTagConfig(@RequestParam("id") Long id) { + TagConfigDO tagConfig = tagConfigService.getTagConfig(id); + return success(BeanUtils.toBean(tagConfig, TagConfigRespVO.class)); + } + + @GetMapping("/get-by-database") + @Operation(summary = "根据数据源ID获得标签同步配置") + @Parameter(name = "databaseId", description = "数据源ID", required = true) + @PreAuthorize("@ss.hasPermission('ydoyun:tag-config:query')") + public CommonResult getTagConfigByDatabaseId(@RequestParam("databaseId") Long databaseId) { + TagConfigDO tagConfig = tagConfigService.getTagConfigByDatabaseId(databaseId); + return success(BeanUtils.toBean(tagConfig, TagConfigRespVO.class)); + } + + @GetMapping("/get-by-tenant") + @Operation(summary = "根据当前租户获得标签同步配置(每租户仅一条)") + @PreAuthorize("@ss.hasPermission('ydoyun:tag-config:query')") + public CommonResult getTagConfigByTenant() { + TagConfigDO tagConfig = tagConfigService.getTagConfigByTenant(); + return success(BeanUtils.toBean(tagConfig, TagConfigRespVO.class)); + } + + @PostMapping("/save") + @Operation(summary = "统一保存(配置+标准标签)") + @PreAuthorize("@ss.hasPermission('ydoyun:tag-config:create') or @ss.hasPermission('ydoyun:tag-config:update')") + public CommonResult saveAll(@Valid @RequestBody TagConfigSaveAllReqVO reqVO) { + tagConfigService.saveAll(reqVO); + return success(true); + } + + @GetMapping("/page") + @Operation(summary = "获得标签同步配置分页") + @PreAuthorize("@ss.hasPermission('ydoyun:tag-config:query')") + public CommonResult> getTagConfigPage(@Valid TagConfigPageReqVO pageReqVO) { + PageResult pageResult = tagConfigService.getTagConfigPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, TagConfigRespVO.class)); + } + + @PostMapping("/manual-sync") + @Operation(summary = "手动同步") + @Parameter(name = "tagConfigId", description = "标签配置ID", required = true) + @PreAuthorize("@ss.hasPermission('ydoyun:tag-config:sync')") + public CommonResult manualSync(@RequestParam("tagConfigId") Long tagConfigId) { + tagConfigService.manualSync(tagConfigId); + return success(true); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出标签同步配置 Excel") + @PreAuthorize("@ss.hasPermission('ydoyun:tag-config:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportTagConfigExcel(@Valid TagConfigPageReqVO pageReqVO, HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = tagConfigService.getTagConfigPage(pageReqVO).getList(); + ExcelUtils.write(response, "标签同步配置.xls", "数据", TagConfigRespVO.class, + BeanUtils.toBean(list, TagConfigRespVO.class)); + } +} diff --git a/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/tagconfig/vo/TagConfigPageReqVO.java b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/tagconfig/vo/TagConfigPageReqVO.java new file mode 100644 index 0000000..8fba14f --- /dev/null +++ b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/tagconfig/vo/TagConfigPageReqVO.java @@ -0,0 +1,31 @@ +package cn.iocoder.yudao.module.ydoyun.controller.admin.tagconfig.vo; + +import lombok.*; +import io.swagger.v3.oas.annotations.media.Schema; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 标签同步配置分页 Request VO") +@Data +public class TagConfigPageReqVO extends PageParam { + + @Schema(description = "同步数据源ID") + private Long databaseId; + + @Schema(description = "定时任务表达式(CRON)") + private String cronExpression; + + @Schema(description = "上次同步时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] lastSyncTime; + + @Schema(description = "下次预计同步时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] nextSyncTime; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; +} diff --git a/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/tagconfig/vo/TagConfigRespVO.java b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/tagconfig/vo/TagConfigRespVO.java new file mode 100644 index 0000000..4130803 --- /dev/null +++ b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/tagconfig/vo/TagConfigRespVO.java @@ -0,0 +1,48 @@ +package cn.iocoder.yudao.module.ydoyun.controller.admin.tagconfig.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.time.LocalDateTime; +import cn.idev.excel.annotation.*; + +@Schema(description = "管理后台 - 标签同步配置 Response VO") +@Data +@ExcelIgnoreUnannotated +public class TagConfigRespVO { + + @Schema(description = "主键ID") + @ExcelProperty("主键ID") + private Long id; + + @Schema(description = "同步数据源ID") + @ExcelProperty("同步数据源ID") + private Long databaseId; + + @Schema(description = "定时任务表达式(CRON)") + @ExcelProperty("定时任务表达式") + private String cronExpression; + + @Schema(description = "是否开启自动同步(0否 1是)") + @ExcelProperty("自动同步") + private Boolean autoSync; + + @Schema(description = "剔除大类(多选,逗号分隔)") + @ExcelProperty("剔除大类") + private String productCategoryIds; + + @Schema(description = "剔除仓库(多选,逗号分隔)") + @ExcelProperty("剔除仓库") + private String syncWarehouseIds; + + @Schema(description = "上次同步时间") + @ExcelProperty("上次同步时间") + private LocalDateTime lastSyncTime; + + @Schema(description = "下次预计同步时间") + @ExcelProperty("下次预计同步时间") + private LocalDateTime nextSyncTime; + + @Schema(description = "创建时间") + @ExcelProperty("创建时间") + private LocalDateTime createTime; +} diff --git a/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/tagconfig/vo/TagConfigSaveAllReqVO.java b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/tagconfig/vo/TagConfigSaveAllReqVO.java new file mode 100644 index 0000000..03b8cda --- /dev/null +++ b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/tagconfig/vo/TagConfigSaveAllReqVO.java @@ -0,0 +1,19 @@ +package cn.iocoder.yudao.module.ydoyun.controller.admin.tagconfig.vo; + +import cn.iocoder.yudao.module.ydoyun.controller.admin.tag.vo.TagSaveReqVO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import javax.validation.Valid; +import java.util.*; + +@Schema(description = "管理后台 - 标签配置统一保存 Request VO(配置+标准标签)") +@Data +public class TagConfigSaveAllReqVO { + + @Schema(description = "标签同步配置(可为空,不保存配置)") + private TagConfigSaveReqVO config; + + @Schema(description = "标准标签列表") + @Valid + private List tags = new ArrayList<>(); +} diff --git a/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/tagconfig/vo/TagConfigSaveReqVO.java b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/tagconfig/vo/TagConfigSaveReqVO.java new file mode 100644 index 0000000..46d3419 --- /dev/null +++ b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/tagconfig/vo/TagConfigSaveReqVO.java @@ -0,0 +1,35 @@ +package cn.iocoder.yudao.module.ydoyun.controller.admin.tagconfig.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import javax.validation.constraints.*; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 标签同步配置新增/修改 Request VO") +@Data +public class TagConfigSaveReqVO { + + @Schema(description = "主键ID") + private Long id; + + @Schema(description = "同步数据源ID(ydoyun_report_database.id),新增时必填") + private Long databaseId; + + @Schema(description = "定时任务表达式(CRON)") + private String cronExpression; + + @Schema(description = "是否开启自动同步(0否 1是)") + private Boolean autoSync; + + @Schema(description = "剔除大类(多选,逗号分隔)") + private String productCategoryIds; + + @Schema(description = "剔除仓库(多选,逗号分隔)") + private String syncWarehouseIds; + + @Schema(description = "上次同步时间") + private LocalDateTime lastSyncTime; + + @Schema(description = "下次预计同步时间") + private LocalDateTime nextSyncTime; +} diff --git a/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/tagsyncdetail/TagSyncDetailController.java b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/tagsyncdetail/TagSyncDetailController.java new file mode 100644 index 0000000..bf4dfb0 --- /dev/null +++ b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/tagsyncdetail/TagSyncDetailController.java @@ -0,0 +1,38 @@ +package cn.iocoder.yudao.module.ydoyun.controller.admin.tagsyncdetail; + +import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; + +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +import cn.iocoder.yudao.module.ydoyun.controller.admin.tagsyncdetail.vo.TagSyncDetailRespVO; +import cn.iocoder.yudao.module.ydoyun.dal.dataobject.tagsyncdetail.TagSyncDetailDO; +import cn.iocoder.yudao.module.ydoyun.service.tagsyncdetail.TagSyncDetailService; + +import java.util.List; + +@Tag(name = "管理后台 - 标签同步详情") +@RestController +@RequestMapping("/ydoyun/tag-sync-detail") +@Validated +public class TagSyncDetailController { + + @Resource + private TagSyncDetailService tagSyncDetailService; + + @GetMapping("/list-by-sync-history-id") + @Operation(summary = "根据同步记录ID获取详情列表") + @Parameter(name = "syncHistoryId", description = "同步记录ID", required = true) + @PreAuthorize("@ss.hasPermission('ydoyun:tag-sync-history:query')") + public CommonResult> getDetailListBySyncHistoryId(@RequestParam("syncHistoryId") Long syncHistoryId) { + List list = tagSyncDetailService.getDetailListBySyncHistoryId(syncHistoryId); + return success(BeanUtils.toBean(list, TagSyncDetailRespVO.class)); + } +} diff --git a/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/tagsyncdetail/vo/TagSyncDetailRespVO.java b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/tagsyncdetail/vo/TagSyncDetailRespVO.java new file mode 100644 index 0000000..413fb9a --- /dev/null +++ b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/tagsyncdetail/vo/TagSyncDetailRespVO.java @@ -0,0 +1,43 @@ +package cn.iocoder.yudao.module.ydoyun.controller.admin.tagsyncdetail.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 标签同步详情 Response VO") +@Data +public class TagSyncDetailRespVO { + + @Schema(description = "主键ID") + private Long id; + + @Schema(description = "同步记录ID") + private Long syncHistoryId; + + @Schema(description = "标签ID") + private Long tagId; + + @Schema(description = "标签名称") + private String tagName; + + @Schema(description = "标签类型") + private String tagType; + + @Schema(description = "实际执行的SQL脚本") + private String sqlExecuted; + + @Schema(description = "执行状态(success/fail)") + private String execStatus; + + @Schema(description = "影响记录数") + private Long recordCount; + + @Schema(description = "错误信息(失败时)") + private String errorMessage; + + @Schema(description = "执行顺序") + private Integer execOrder; + + @Schema(description = "创建时间") + private LocalDateTime createTime; +} diff --git a/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/tagsynchistory/TagSyncHistoryController.java b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/tagsynchistory/TagSyncHistoryController.java new file mode 100644 index 0000000..cd3f3dd --- /dev/null +++ b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/tagsynchistory/TagSyncHistoryController.java @@ -0,0 +1,46 @@ +package cn.iocoder.yudao.module.ydoyun.controller.admin.tagsynchistory; + +import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; +import javax.validation.*; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +import cn.iocoder.yudao.module.ydoyun.controller.admin.tagsynchistory.vo.*; +import cn.iocoder.yudao.module.ydoyun.dal.dataobject.tagsynchistory.TagSyncHistoryDO; +import cn.iocoder.yudao.module.ydoyun.service.tagsynchistory.TagSyncHistoryService; + +@Tag(name = "管理后台 - 标签同步历史") +@RestController +@RequestMapping("/ydoyun/tag-sync-history") +@Validated +public class TagSyncHistoryController { + + @Resource + private TagSyncHistoryService tagSyncHistoryService; + + @GetMapping("/get") + @Operation(summary = "获得标签同步历史") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('ydoyun:tag-sync-history:query')") + public CommonResult getTagSyncHistory(@RequestParam("id") Long id) { + TagSyncHistoryDO history = tagSyncHistoryService.getTagSyncHistory(id); + return success(BeanUtils.toBean(history, TagSyncHistoryRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得标签同步历史分页") + @PreAuthorize("@ss.hasPermission('ydoyun:tag-sync-history:query')") + public CommonResult> getTagSyncHistoryPage(@Valid TagSyncHistoryPageReqVO pageReqVO) { + PageResult pageResult = tagSyncHistoryService.getTagSyncHistoryPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, TagSyncHistoryRespVO.class)); + } +} diff --git a/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/tagsynchistory/vo/TagSyncHistoryPageReqVO.java b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/tagsynchistory/vo/TagSyncHistoryPageReqVO.java new file mode 100644 index 0000000..bd1991c --- /dev/null +++ b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/tagsynchistory/vo/TagSyncHistoryPageReqVO.java @@ -0,0 +1,36 @@ +package cn.iocoder.yudao.module.ydoyun.controller.admin.tagsynchistory.vo; + +import lombok.*; +import io.swagger.v3.oas.annotations.media.Schema; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 标签同步历史分页 Request VO") +@Data +public class TagSyncHistoryPageReqVO extends PageParam { + + @Schema(description = "标签同步配置ID") + private Long tagConfigId; + + @Schema(description = "同步类型(manual/cron)") + private String syncType; + + @Schema(description = "同步时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] syncTime; + + @Schema(description = "同步状态(success/fail)") + private String syncStatus; + + @Schema(description = "同步记录数") + private Long recordCount; + + @Schema(description = "错误信息") + private String errorMessage; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; +} diff --git a/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/tagsynchistory/vo/TagSyncHistoryRespVO.java b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/tagsynchistory/vo/TagSyncHistoryRespVO.java new file mode 100644 index 0000000..97373bd --- /dev/null +++ b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/controller/admin/tagsynchistory/vo/TagSyncHistoryRespVO.java @@ -0,0 +1,56 @@ +package cn.iocoder.yudao.module.ydoyun.controller.admin.tagsynchistory.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.time.LocalDateTime; +import cn.idev.excel.annotation.*; + +@Schema(description = "管理后台 - 标签同步历史 Response VO") +@Data +@ExcelIgnoreUnannotated +public class TagSyncHistoryRespVO { + + @Schema(description = "主键ID") + @ExcelProperty("主键ID") + private Long id; + + @Schema(description = "标签同步配置ID") + @ExcelProperty("标签同步配置ID") + private Long tagConfigId; + + @Schema(description = "同步类型(manual/cron)") + @ExcelProperty("同步类型") + private String syncType; + + @Schema(description = "同步时间") + @ExcelProperty("同步时间") + private LocalDateTime syncTime; + + @Schema(description = "同步状态(success/fail/partial)") + @ExcelProperty("同步状态") + private String syncStatus; + + @Schema(description = "本次同步标签总数") + @ExcelProperty("标签总数") + private Integer totalCount; + + @Schema(description = "成功数") + @ExcelProperty("成功数") + private Integer successCount; + + @Schema(description = "失败数") + @ExcelProperty("失败数") + private Integer failCount; + + @Schema(description = "同步记录数") + @ExcelProperty("同步记录数") + private Long recordCount; + + @Schema(description = "错误信息") + @ExcelProperty("错误信息") + private String errorMessage; + + @Schema(description = "创建时间") + @ExcelProperty("创建时间") + private LocalDateTime createTime; +} diff --git a/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/dal/dataobject/tag/TagDO.java b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/dal/dataobject/tag/TagDO.java new file mode 100644 index 0000000..4197094 --- /dev/null +++ b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/dal/dataobject/tag/TagDO.java @@ -0,0 +1,34 @@ +package cn.iocoder.yudao.module.ydoyun.dal.dataobject.tag; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; + +/** + * 标准标签 DO + */ +@TableName("ydoyun_tag") +@KeySequence("ydoyun_tag_seq") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class TagDO extends BaseDO { + + @TableId + private Long id; + private String name; + private String type; + private String expression; + private String color; + private String sqlScript; + private String sqlScriptResolved; + private Boolean useParams; + private String params; + /** 参数值 JSON,如 {"参数1":"28","参数2":"90"} */ + private String paramValues; +} diff --git a/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/dal/dataobject/tagconfig/TagConfigDO.java b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/dal/dataobject/tagconfig/TagConfigDO.java new file mode 100644 index 0000000..4dc2fa8 --- /dev/null +++ b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/dal/dataobject/tagconfig/TagConfigDO.java @@ -0,0 +1,31 @@ +package cn.iocoder.yudao.module.ydoyun.dal.dataobject.tagconfig; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; + +/** + * 标签同步配置 DO + */ +@TableName("ydoyun_tag_config") +@KeySequence("ydoyun_tag_config_seq") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class TagConfigDO extends BaseDO { + + @TableId + private Long id; + private Long databaseId; + private String cronExpression; + private Boolean autoSync; + private String productCategoryIds; + private String syncWarehouseIds; + private LocalDateTime lastSyncTime; + private LocalDateTime nextSyncTime; +} diff --git a/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/dal/dataobject/tagsyncdetail/TagSyncDetailDO.java b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/dal/dataobject/tagsyncdetail/TagSyncDetailDO.java new file mode 100644 index 0000000..eeb856e --- /dev/null +++ b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/dal/dataobject/tagsyncdetail/TagSyncDetailDO.java @@ -0,0 +1,33 @@ +package cn.iocoder.yudao.module.ydoyun.dal.dataobject.tagsyncdetail; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; + +/** + * 标签同步详情 DO(每条标签的执行明细) + */ +@TableName("ydoyun_tag_sync_detail") +@KeySequence("ydoyun_tag_sync_detail_seq") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class TagSyncDetailDO extends BaseDO { + + @TableId + private Long id; + private Long syncHistoryId; + private Long tagId; + private String tagName; + private String tagType; + private String sqlExecuted; + private String execStatus; + private Long recordCount; + private String errorMessage; + private Integer execOrder; +} diff --git a/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/dal/dataobject/tagsynchistory/TagSyncHistoryDO.java b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/dal/dataobject/tagsynchistory/TagSyncHistoryDO.java new file mode 100644 index 0000000..05ac1bb --- /dev/null +++ b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/dal/dataobject/tagsynchistory/TagSyncHistoryDO.java @@ -0,0 +1,33 @@ +package cn.iocoder.yudao.module.ydoyun.dal.dataobject.tagsynchistory; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; + +/** + * 标签同步历史 DO + */ +@TableName("ydoyun_tag_sync_history") +@KeySequence("ydoyun_tag_sync_history_seq") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class TagSyncHistoryDO extends BaseDO { + + @TableId + private Long id; + private Long tagConfigId; + private String syncType; + private LocalDateTime syncTime; + private String syncStatus; + private Integer totalCount; + private Integer successCount; + private Integer failCount; + private Long recordCount; + private String errorMessage; +} diff --git a/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/dal/mysql/tag/TagMapper.java b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/dal/mysql/tag/TagMapper.java new file mode 100644 index 0000000..6cd3107 --- /dev/null +++ b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/dal/mysql/tag/TagMapper.java @@ -0,0 +1,32 @@ +package cn.iocoder.yudao.module.ydoyun.dal.mysql.tag; + +import java.util.*; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.ydoyun.dal.dataobject.tag.TagDO; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.ydoyun.controller.admin.tag.vo.TagPageReqVO; + +@Mapper +public interface TagMapper extends BaseMapperX { + + default PageResult selectPage(TagPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .likeIfPresent(TagDO::getName, reqVO.getName()) + .eqIfPresent(TagDO::getType, reqVO.getType()) + .eqIfPresent(TagDO::getExpression, reqVO.getExpression()) + .eqIfPresent(TagDO::getColor, reqVO.getColor()) + .eqIfPresent(TagDO::getSqlScript, reqVO.getSqlScript()) + .eqIfPresent(TagDO::getUseParams, reqVO.getUseParams()) + .eqIfPresent(TagDO::getParams, reqVO.getParams()) + .betweenIfPresent(TagDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(TagDO::getId)); + } + + default java.util.List selectListByType(String type) { + return selectList(new LambdaQueryWrapperX() + .eqIfPresent(TagDO::getType, type) + .orderByDesc(TagDO::getId)); + } +} diff --git a/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/dal/mysql/tagconfig/TagConfigMapper.java b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/dal/mysql/tagconfig/TagConfigMapper.java new file mode 100644 index 0000000..b18556c --- /dev/null +++ b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/dal/mysql/tagconfig/TagConfigMapper.java @@ -0,0 +1,32 @@ +package cn.iocoder.yudao.module.ydoyun.dal.mysql.tagconfig; + +import java.util.*; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.ydoyun.dal.dataobject.tagconfig.TagConfigDO; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.ydoyun.controller.admin.tagconfig.vo.TagConfigPageReqVO; + +@Mapper +public interface TagConfigMapper extends BaseMapperX { + + default PageResult selectPage(TagConfigPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(TagConfigDO::getDatabaseId, reqVO.getDatabaseId()) + .eqIfPresent(TagConfigDO::getCronExpression, reqVO.getCronExpression()) + .betweenIfPresent(TagConfigDO::getLastSyncTime, reqVO.getLastSyncTime()) + .betweenIfPresent(TagConfigDO::getNextSyncTime, reqVO.getNextSyncTime()) + .betweenIfPresent(TagConfigDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(TagConfigDO::getId)); + } + + default TagConfigDO selectByDatabaseId(Long databaseId) { + return selectOne(TagConfigDO::getDatabaseId, databaseId); + } + + /** 根据租户查询配置(每租户仅一条) */ + default TagConfigDO selectOneByTenant() { + return selectOne(new LambdaQueryWrapperX().last("LIMIT 1")); + } +} diff --git a/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/dal/mysql/tagsyncdetail/TagSyncDetailMapper.java b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/dal/mysql/tagsyncdetail/TagSyncDetailMapper.java new file mode 100644 index 0000000..7868191 --- /dev/null +++ b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/dal/mysql/tagsyncdetail/TagSyncDetailMapper.java @@ -0,0 +1,17 @@ +package cn.iocoder.yudao.module.ydoyun.dal.mysql.tagsyncdetail; + +import java.util.*; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.module.ydoyun.dal.dataobject.tagsyncdetail.TagSyncDetailDO; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface TagSyncDetailMapper extends BaseMapperX { + + default List selectListBySyncHistoryId(Long syncHistoryId) { + return selectList(new LambdaQueryWrapperX() + .eq(TagSyncDetailDO::getSyncHistoryId, syncHistoryId) + .orderByAsc(TagSyncDetailDO::getExecOrder)); + } +} diff --git a/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/dal/mysql/tagsynchistory/TagSyncHistoryMapper.java b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/dal/mysql/tagsynchistory/TagSyncHistoryMapper.java new file mode 100644 index 0000000..244551b --- /dev/null +++ b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/dal/mysql/tagsynchistory/TagSyncHistoryMapper.java @@ -0,0 +1,25 @@ +package cn.iocoder.yudao.module.ydoyun.dal.mysql.tagsynchistory; + +import java.util.*; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.ydoyun.dal.dataobject.tagsynchistory.TagSyncHistoryDO; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.ydoyun.controller.admin.tagsynchistory.vo.TagSyncHistoryPageReqVO; + +@Mapper +public interface TagSyncHistoryMapper extends BaseMapperX { + + default PageResult selectPage(TagSyncHistoryPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(TagSyncHistoryDO::getTagConfigId, reqVO.getTagConfigId()) + .eqIfPresent(TagSyncHistoryDO::getSyncType, reqVO.getSyncType()) + .betweenIfPresent(TagSyncHistoryDO::getSyncTime, reqVO.getSyncTime()) + .eqIfPresent(TagSyncHistoryDO::getSyncStatus, reqVO.getSyncStatus()) + .eqIfPresent(TagSyncHistoryDO::getRecordCount, reqVO.getRecordCount()) + .likeIfPresent(TagSyncHistoryDO::getErrorMessage, reqVO.getErrorMessage()) + .betweenIfPresent(TagSyncHistoryDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(TagSyncHistoryDO::getId)); + } +} diff --git a/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/enums/ErrorCodeConstants.java b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/enums/ErrorCodeConstants.java index 21442d2..32201dd 100644 --- a/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/enums/ErrorCodeConstants.java +++ b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/enums/ErrorCodeConstants.java @@ -2,13 +2,7 @@ package cn.iocoder.yudao.module.ydoyun.enums; import cn.iocoder.yudao.framework.common.exception.ErrorCode; -/** - * Report 错误码枚举类 - * - * report 系统,使用 1-003-000-000 段 - */ public interface ErrorCodeConstants { - // TODO 待办:请将下面的错误码复制到 yudao-module-ydoyun 模块的 ErrorCodeConstants 类中。注意,请给“TODO 补充编号”设置一个错误码编号!!! // ========== 报表规则模板 1-024-000-000 ========== ErrorCode REPORT_TEMPLATE_NOT_EXISTS = new ErrorCode(1_024_000_000, "yudao-module-ydoyun 衣朵云报表项目不存在"); @@ -26,4 +20,8 @@ public interface ErrorCodeConstants { ErrorCode STORE_NOT_EXISTS = new ErrorCode(1_024_000_008, "门店不存在"); ErrorCode STORE_USER_NOT_EXISTS = new ErrorCode(1_024_000_009, "门店用户记录不存在"); ErrorCode CUSTOM_TAG_NOT_EXISTS = new ErrorCode(1_024_000_010, "自定义标签不存在"); + ErrorCode TAG_NOT_EXISTS = new ErrorCode(1_001_001_001, "标准标签不存在"); + ErrorCode TAG_CONFIG_NOT_EXISTS = new ErrorCode(1_001_001_002, "标签同步配置不存在"); + ErrorCode TAG_SYNC_HISTORY_NOT_EXISTS = new ErrorCode(1_001_001_003, "标签同步历史不存在"); + ErrorCode TAG_CONFIG_DATABASE_REQUIRED = new ErrorCode(1_001_001_004, "新增配置时同步数据源不能为空"); } diff --git a/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/service/tag/TagService.java b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/service/tag/TagService.java new file mode 100644 index 0000000..b1a42e6 --- /dev/null +++ b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/service/tag/TagService.java @@ -0,0 +1,19 @@ +package cn.iocoder.yudao.module.ydoyun.service.tag; + +import java.util.*; +import javax.validation.*; +import cn.iocoder.yudao.module.ydoyun.controller.admin.tag.vo.*; +import cn.iocoder.yudao.module.ydoyun.dal.dataobject.tag.TagDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; + +public interface TagService { + + Long createTag(@Valid TagSaveReqVO createReqVO); + void updateTag(@Valid TagSaveReqVO updateReqVO); + void deleteTag(Long id); + void deleteTagListByIds(List ids); + TagDO getTag(Long id); + PageResult getTagPage(TagPageReqVO pageReqVO); + List getTagListByType(String type); +} diff --git a/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/service/tag/TagServiceImpl.java b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/service/tag/TagServiceImpl.java new file mode 100644 index 0000000..ab95f7c --- /dev/null +++ b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/service/tag/TagServiceImpl.java @@ -0,0 +1,67 @@ +package cn.iocoder.yudao.module.ydoyun.service.tag; + +import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import java.util.*; +import cn.iocoder.yudao.module.ydoyun.controller.admin.tag.vo.*; +import cn.iocoder.yudao.module.ydoyun.dal.dataobject.tag.TagDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.ydoyun.dal.mysql.tag.TagMapper; +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.ydoyun.enums.ErrorCodeConstants.TAG_NOT_EXISTS; + +@Service +@Validated +public class TagServiceImpl implements TagService { + + @Resource + private TagMapper tagMapper; + + @Override + public Long createTag(TagSaveReqVO createReqVO) { + TagDO tag = BeanUtils.toBean(createReqVO, TagDO.class); + tagMapper.insert(tag); + return tag.getId(); + } + + @Override + public void updateTag(TagSaveReqVO updateReqVO) { + validateTagExists(updateReqVO.getId()); + TagDO updateObj = BeanUtils.toBean(updateReqVO, TagDO.class); + tagMapper.updateById(updateObj); + } + + @Override + public void deleteTag(Long id) { + validateTagExists(id); + tagMapper.deleteById(id); + } + + @Override + public void deleteTagListByIds(List ids) { + tagMapper.deleteByIds(ids); + } + + private void validateTagExists(Long id) { + if (tagMapper.selectById(id) == null) { + throw exception(TAG_NOT_EXISTS); + } + } + + @Override + public TagDO getTag(Long id) { + return tagMapper.selectById(id); + } + + @Override + public PageResult getTagPage(TagPageReqVO pageReqVO) { + return tagMapper.selectPage(pageReqVO); + } + + @Override + public List getTagListByType(String type) { + return tagMapper.selectListByType(type); + } +} diff --git a/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/service/tagconfig/TagConfigService.java b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/service/tagconfig/TagConfigService.java new file mode 100644 index 0000000..fb9084a --- /dev/null +++ b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/service/tagconfig/TagConfigService.java @@ -0,0 +1,22 @@ +package cn.iocoder.yudao.module.ydoyun.service.tagconfig; + +import java.util.*; +import javax.validation.*; +import cn.iocoder.yudao.module.ydoyun.controller.admin.tagconfig.vo.*; +import cn.iocoder.yudao.module.ydoyun.dal.dataobject.tagconfig.TagConfigDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; + +public interface TagConfigService { + + Long createTagConfig(@Valid TagConfigSaveReqVO createReqVO); + void updateTagConfig(@Valid TagConfigSaveReqVO updateReqVO); + void deleteTagConfig(Long id); + void deleteTagConfigListByIds(List ids); + TagConfigDO getTagConfig(Long id); + TagConfigDO getTagConfigByDatabaseId(Long databaseId); + TagConfigDO getTagConfigByTenant(); + PageResult getTagConfigPage(TagConfigPageReqVO pageReqVO); + void saveAll(@Valid TagConfigSaveAllReqVO reqVO); + void manualSync(Long tagConfigId); +} diff --git a/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/service/tagconfig/TagConfigServiceImpl.java b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/service/tagconfig/TagConfigServiceImpl.java new file mode 100644 index 0000000..ae032d7 --- /dev/null +++ b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/service/tagconfig/TagConfigServiceImpl.java @@ -0,0 +1,138 @@ +package cn.iocoder.yudao.module.ydoyun.service.tagconfig; + +import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import java.time.LocalDateTime; +import java.util.*; +import cn.iocoder.yudao.module.ydoyun.controller.admin.tag.vo.TagSaveReqVO; +import cn.iocoder.yudao.module.ydoyun.controller.admin.tagconfig.vo.*; +import cn.iocoder.yudao.module.ydoyun.dal.dataobject.tagconfig.TagConfigDO; +import cn.iocoder.yudao.module.ydoyun.dal.dataobject.tagsynchistory.TagSyncHistoryDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.ydoyun.dal.mysql.tagconfig.TagConfigMapper; +import cn.iocoder.yudao.module.ydoyun.dal.mysql.tagsynchistory.TagSyncHistoryMapper; +import cn.iocoder.yudao.module.ydoyun.service.tag.TagService; +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.ydoyun.enums.ErrorCodeConstants.TAG_CONFIG_DATABASE_REQUIRED; +import static cn.iocoder.yudao.module.ydoyun.enums.ErrorCodeConstants.TAG_CONFIG_NOT_EXISTS; + +@Service +@Validated +public class TagConfigServiceImpl implements TagConfigService { + + @Resource + private TagConfigMapper tagConfigMapper; + + @Resource + private TagSyncHistoryMapper tagSyncHistoryMapper; + + @Resource + private TagService tagService; + + @Override + public Long createTagConfig(TagConfigSaveReqVO createReqVO) { + TagConfigDO tagConfig = BeanUtils.toBean(createReqVO, TagConfigDO.class); + tagConfigMapper.insert(tagConfig); + return tagConfig.getId(); + } + + @Override + public void updateTagConfig(TagConfigSaveReqVO updateReqVO) { + validateTagConfigExists(updateReqVO.getId()); + TagConfigDO updateObj = BeanUtils.toBean(updateReqVO, TagConfigDO.class); + tagConfigMapper.updateById(updateObj); + } + + @Override + public void deleteTagConfig(Long id) { + validateTagConfigExists(id); + tagConfigMapper.deleteById(id); + } + + @Override + public void deleteTagConfigListByIds(List ids) { + tagConfigMapper.deleteByIds(ids); + } + + private void validateTagConfigExists(Long id) { + if (tagConfigMapper.selectById(id) == null) { + throw exception(TAG_CONFIG_NOT_EXISTS); + } + } + + @Override + public TagConfigDO getTagConfig(Long id) { + return tagConfigMapper.selectById(id); + } + + @Override + public TagConfigDO getTagConfigByDatabaseId(Long databaseId) { + return tagConfigMapper.selectByDatabaseId(databaseId); + } + + @Override + public TagConfigDO getTagConfigByTenant() { + return tagConfigMapper.selectOneByTenant(); + } + + @Override + public void saveAll(TagConfigSaveAllReqVO reqVO) { + if (reqVO.getConfig() != null) { + TagConfigSaveReqVO config = reqVO.getConfig(); + if (config.getId() != null) { + validateTagConfigExists(config.getId()); + TagConfigDO updateObj = BeanUtils.toBean(config, TagConfigDO.class); + tagConfigMapper.updateById(updateObj); + } else { + TagConfigDO existing = tagConfigMapper.selectOneByTenant(); + if (existing != null) { + config.setId(existing.getId()); + TagConfigDO updateObj = BeanUtils.toBean(config, TagConfigDO.class); + tagConfigMapper.updateById(updateObj); + } else { + if (config.getDatabaseId() == null) { + throw exception(TAG_CONFIG_DATABASE_REQUIRED); + } + TagConfigDO tagConfig = BeanUtils.toBean(config, TagConfigDO.class); + tagConfigMapper.insert(tagConfig); + } + } + } + if (reqVO.getTags() != null && !reqVO.getTags().isEmpty()) { + for (TagSaveReqVO tagVO : reqVO.getTags()) { + if (tagVO.getId() != null) { + tagService.updateTag(tagVO); + } else { + tagService.createTag(tagVO); + } + } + } + } + + @Override + public PageResult getTagConfigPage(TagConfigPageReqVO pageReqVO) { + return tagConfigMapper.selectPage(pageReqVO); + } + + @Override + public void manualSync(Long tagConfigId) { + validateTagConfigExists(tagConfigId); + TagConfigDO config = tagConfigMapper.selectById(tagConfigId); + LocalDateTime now = LocalDateTime.now(); + TagSyncHistoryDO history = TagSyncHistoryDO.builder() + .tagConfigId(tagConfigId) + .syncType("manual") + .syncTime(now) + .syncStatus("success") + .totalCount(0) + .successCount(0) + .failCount(0) + .recordCount(0L) + .build(); + tagSyncHistoryMapper.insert(history); + config.setLastSyncTime(now); + tagConfigMapper.updateById(config); + } +} diff --git a/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/service/tagsyncdetail/TagSyncDetailService.java b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/service/tagsyncdetail/TagSyncDetailService.java new file mode 100644 index 0000000..46e9658 --- /dev/null +++ b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/service/tagsyncdetail/TagSyncDetailService.java @@ -0,0 +1,11 @@ +package cn.iocoder.yudao.module.ydoyun.service.tagsyncdetail; + +import java.util.*; +import cn.iocoder.yudao.module.ydoyun.dal.dataobject.tagsyncdetail.TagSyncDetailDO; + +public interface TagSyncDetailService { + + List getDetailListBySyncHistoryId(Long syncHistoryId); + + void insertBatch(List list); +} diff --git a/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/service/tagsyncdetail/TagSyncDetailServiceImpl.java b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/service/tagsyncdetail/TagSyncDetailServiceImpl.java new file mode 100644 index 0000000..04d7191 --- /dev/null +++ b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/service/tagsyncdetail/TagSyncDetailServiceImpl.java @@ -0,0 +1,29 @@ +package cn.iocoder.yudao.module.ydoyun.service.tagsyncdetail; + +import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import java.util.*; +import cn.iocoder.yudao.module.ydoyun.dal.dataobject.tagsyncdetail.TagSyncDetailDO; +import cn.iocoder.yudao.module.ydoyun.dal.mysql.tagsyncdetail.TagSyncDetailMapper; + +@Service +@Validated +public class TagSyncDetailServiceImpl implements TagSyncDetailService { + + @Resource + private TagSyncDetailMapper tagSyncDetailMapper; + + @Override + public List getDetailListBySyncHistoryId(Long syncHistoryId) { + return tagSyncDetailMapper.selectListBySyncHistoryId(syncHistoryId); + } + + @Override + public void insertBatch(List list) { + if (list == null || list.isEmpty()) { + return; + } + list.forEach(tagSyncDetailMapper::insert); + } +} diff --git a/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/service/tagsynchistory/TagSyncHistoryService.java b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/service/tagsynchistory/TagSyncHistoryService.java new file mode 100644 index 0000000..2689529 --- /dev/null +++ b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/service/tagsynchistory/TagSyncHistoryService.java @@ -0,0 +1,14 @@ +package cn.iocoder.yudao.module.ydoyun.service.tagsynchistory; + +import java.util.*; +import javax.validation.*; +import cn.iocoder.yudao.module.ydoyun.controller.admin.tagsynchistory.vo.*; +import cn.iocoder.yudao.module.ydoyun.dal.dataobject.tagsynchistory.TagSyncHistoryDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; + +public interface TagSyncHistoryService { + + PageResult getTagSyncHistoryPage(TagSyncHistoryPageReqVO pageReqVO); + TagSyncHistoryDO getTagSyncHistory(Long id); +} diff --git a/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/service/tagsynchistory/TagSyncHistoryServiceImpl.java b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/service/tagsynchistory/TagSyncHistoryServiceImpl.java new file mode 100644 index 0000000..628b8f5 --- /dev/null +++ b/yudao-module-ydoyun/src/main/java/cn/iocoder/yudao/module/ydoyun/service/tagsynchistory/TagSyncHistoryServiceImpl.java @@ -0,0 +1,34 @@ +package cn.iocoder.yudao.module.ydoyun.service.tagsynchistory; + +import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import java.util.*; +import cn.iocoder.yudao.module.ydoyun.controller.admin.tagsynchistory.vo.*; +import cn.iocoder.yudao.module.ydoyun.dal.dataobject.tagsynchistory.TagSyncHistoryDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.ydoyun.dal.mysql.tagsynchistory.TagSyncHistoryMapper; +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.ydoyun.enums.ErrorCodeConstants.TAG_SYNC_HISTORY_NOT_EXISTS; + +@Service +@Validated +public class TagSyncHistoryServiceImpl implements TagSyncHistoryService { + + @Resource + private TagSyncHistoryMapper tagSyncHistoryMapper; + + @Override + public PageResult getTagSyncHistoryPage(TagSyncHistoryPageReqVO pageReqVO) { + return tagSyncHistoryMapper.selectPage(pageReqVO); + } + + @Override + public TagSyncHistoryDO getTagSyncHistory(Long id) { + TagSyncHistoryDO history = tagSyncHistoryMapper.selectById(id); + if (history == null) { + throw exception(TAG_SYNC_HISTORY_NOT_EXISTS); + } + return history; + } +} diff --git a/yudao-module-ydoyun/src/main/resources/mapper/tag/TagMapper.xml b/yudao-module-ydoyun/src/main/resources/mapper/tag/TagMapper.xml new file mode 100644 index 0000000..eaf5045 --- /dev/null +++ b/yudao-module-ydoyun/src/main/resources/mapper/tag/TagMapper.xml @@ -0,0 +1,4 @@ + + + + diff --git a/yudao-module-ydoyun/src/main/resources/mapper/tagconfig/TagConfigMapper.xml b/yudao-module-ydoyun/src/main/resources/mapper/tagconfig/TagConfigMapper.xml new file mode 100644 index 0000000..71065fb --- /dev/null +++ b/yudao-module-ydoyun/src/main/resources/mapper/tagconfig/TagConfigMapper.xml @@ -0,0 +1,4 @@ + + + + diff --git a/yudao-module-ydoyun/src/main/resources/mapper/tagsyncdetail/TagSyncDetailMapper.xml b/yudao-module-ydoyun/src/main/resources/mapper/tagsyncdetail/TagSyncDetailMapper.xml new file mode 100644 index 0000000..6ac7693 --- /dev/null +++ b/yudao-module-ydoyun/src/main/resources/mapper/tagsyncdetail/TagSyncDetailMapper.xml @@ -0,0 +1,4 @@ + + + + diff --git a/yudao-module-ydoyun/src/main/resources/mapper/tagsynchistory/TagSyncHistoryMapper.xml b/yudao-module-ydoyun/src/main/resources/mapper/tagsynchistory/TagSyncHistoryMapper.xml new file mode 100644 index 0000000..c7f9c14 --- /dev/null +++ b/yudao-module-ydoyun/src/main/resources/mapper/tagsynchistory/TagSyncHistoryMapper.xml @@ -0,0 +1,4 @@ + + + +