Merge branch 'dev' into test
This commit is contained in:
@@ -72,6 +72,8 @@ knife4j:
|
|||||||
|
|
||||||
# MyBatis Plus 的配置项
|
# MyBatis Plus 的配置项
|
||||||
mybatis-plus:
|
mybatis-plus:
|
||||||
|
mapper-locations:
|
||||||
|
- classpath*:mapper/**/*.xml
|
||||||
configuration:
|
configuration:
|
||||||
map-underscore-to-camel-case: true # 虽然默认为 true ,但是还是显示去指定下。
|
map-underscore-to-camel-case: true # 虽然默认为 true ,但是还是显示去指定下。
|
||||||
global-config:
|
global-config:
|
||||||
|
|||||||
76
base-server/src/main/resources/logback-spring.xml
Normal file
76
base-server/src/main/resources/logback-spring.xml
Normal file
@@ -0,0 +1,76 @@
|
|||||||
|
<configuration>
|
||||||
|
<!-- 引用 Spring Boot 的 logback 基础配置 -->
|
||||||
|
<include resource="org/springframework/boot/logging/logback/defaults.xml" />
|
||||||
|
<!-- 变量 zt.info.base-package,基础业务包 -->
|
||||||
|
<springProperty scope="context" name="zt.info.base-package" source="zt.info.base-package"/>
|
||||||
|
<!-- 格式化输出:%d 表示日期,%X{tid} SkWalking 链路追踪编号,%thread 表示线程名,%-5level:级别从左显示 5 个字符宽度,%msg:日志消息,%n是换行符 -->
|
||||||
|
<property name="PATTERN_DEFAULT" value="%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} | %highlight(${LOG_LEVEL_PATTERN:-%5p} ${PID:- }) | %boldYellow(%thread [%tid]) %boldGreen(%-40.40logger{39}) | %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/>
|
||||||
|
|
||||||
|
<!-- 控制台 Appender -->
|
||||||
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
|
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
|
||||||
|
<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
|
||||||
|
<pattern>${PATTERN_DEFAULT}</pattern>
|
||||||
|
</layout>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<!-- 文件 Appender -->
|
||||||
|
<!-- 参考 Spring Boot 的 file-appender.xml 编写 -->
|
||||||
|
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||||
|
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
|
||||||
|
<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
|
||||||
|
<pattern>${PATTERN_DEFAULT}</pattern>
|
||||||
|
</layout>
|
||||||
|
</encoder>
|
||||||
|
<!-- 日志文件名 -->
|
||||||
|
<file>${LOG_FILE}</file>
|
||||||
|
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
|
||||||
|
<!-- 滚动后的日志文件名 -->
|
||||||
|
<fileNamePattern>${LOGBACK_ROLLINGPOLICY_FILE_NAME_PATTERN:-${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz}</fileNamePattern>
|
||||||
|
<!-- 启动服务时,是否清理历史日志,一般不建议清理 -->
|
||||||
|
<cleanHistoryOnStart>${LOGBACK_ROLLINGPOLICY_CLEAN_HISTORY_ON_START:-false}</cleanHistoryOnStart>
|
||||||
|
<!-- 日志文件,到达多少容量,进行滚动 -->
|
||||||
|
<maxFileSize>${LOGBACK_ROLLINGPOLICY_MAX_FILE_SIZE:-10MB}</maxFileSize>
|
||||||
|
<!-- 日志文件的总大小,0 表示不限制 -->
|
||||||
|
<totalSizeCap>${LOGBACK_ROLLINGPOLICY_TOTAL_SIZE_CAP:-0}</totalSizeCap>
|
||||||
|
<!-- 日志文件的保留天数 -->
|
||||||
|
<maxHistory>${LOGBACK_ROLLINGPOLICY_MAX_HISTORY:-30}</maxHistory>
|
||||||
|
</rollingPolicy>
|
||||||
|
</appender>
|
||||||
|
<!-- 异步写入日志,提升性能 -->
|
||||||
|
<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
|
||||||
|
<!-- 不丢失日志。默认的,如果队列的 80% 已满,则会丢弃 TRACT、DEBUG、INFO 级别的日志 -->
|
||||||
|
<discardingThreshold>0</discardingThreshold>
|
||||||
|
<!-- 更改默认的队列的深度,该值会影响性能。默认值为 256 -->
|
||||||
|
<queueSize>256</queueSize>
|
||||||
|
<appender-ref ref="FILE"/>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<!-- SkyWalking GRPC 日志收集,实现日志中心。注意:SkyWalking 8.4.0 版本开始支持 -->
|
||||||
|
<appender name="GRPC" class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.log.GRPCLogClientAppender">
|
||||||
|
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
|
||||||
|
<layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout">
|
||||||
|
<pattern>${PATTERN_DEFAULT}</pattern>
|
||||||
|
</layout>
|
||||||
|
</encoder>
|
||||||
|
</appender>
|
||||||
|
|
||||||
|
<!-- 本地环境 -->
|
||||||
|
<springProfile name="local,dev">
|
||||||
|
<root level="DEBUG">
|
||||||
|
<appender-ref ref="STDOUT"/>
|
||||||
|
<appender-ref ref="GRPC"/> <!-- 本地环境下,如果不想接入 SkyWalking 日志服务,可以注释掉本行 -->
|
||||||
|
<appender-ref ref="ASYNC"/> <!-- 本地环境下,如果不想打印日志,可以注释掉本行 -->
|
||||||
|
</root>
|
||||||
|
</springProfile>
|
||||||
|
<!-- 其它环境 -->
|
||||||
|
<springProfile name="test,stage,prod,default">
|
||||||
|
<root level="INFO">
|
||||||
|
<appender-ref ref="STDOUT"/>
|
||||||
|
<appender-ref ref="ASYNC"/>
|
||||||
|
<appender-ref ref="GRPC"/>
|
||||||
|
</root>
|
||||||
|
</springProfile>
|
||||||
|
|
||||||
|
</configuration>
|
||||||
2
pom.xml
2
pom.xml
@@ -19,7 +19,7 @@
|
|||||||
<url>https://github.com/YunaiV/ruoyi-vue-pro</url>
|
<url>https://github.com/YunaiV/ruoyi-vue-pro</url>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<revision>3.0.44</revision>
|
<revision>3.0.45</revision>
|
||||||
<!-- Maven 相关 -->
|
<!-- Maven 相关 -->
|
||||||
<java.version>17</java.version>
|
<java.version>17</java.version>
|
||||||
<maven.compiler.source>${java.version}</maven.compiler.source>
|
<maven.compiler.source>${java.version}</maven.compiler.source>
|
||||||
|
|||||||
@@ -0,0 +1,51 @@
|
|||||||
|
package com.zt.plat.module.base.controller.admin.base;
|
||||||
|
|
||||||
|
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;
|
||||||
|
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.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.tags.Tag;
|
||||||
|
import jakarta.annotation.Resource;
|
||||||
|
import jakarta.validation.Valid;
|
||||||
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
|
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 static com.zt.plat.framework.common.pojo.CommonResult.success;
|
||||||
|
|
||||||
|
@Tag(name = "管理后台 - 主数据同步")
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/base/master-data-sync")
|
||||||
|
@Validated
|
||||||
|
public class MasterDataSyncController {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private MasterDataSyncService masterDataSyncService;
|
||||||
|
@Resource
|
||||||
|
private MasterDataCategorySyncService masterDataCategorySyncService;
|
||||||
|
|
||||||
|
@PostMapping("/execute")
|
||||||
|
@Operation(summary = "执行主数据同步")
|
||||||
|
@PreAuthorize("@ss.hasPermission('base:master-data-sync:execute')")
|
||||||
|
public CommonResult<MasterDataSyncReport> execute(@Valid @RequestBody MasterDataSyncReqVO reqVO) {
|
||||||
|
MasterDataSyncCommand command = BeanUtils.toBean(reqVO, MasterDataSyncCommand.class);
|
||||||
|
MasterDataSyncReport report = masterDataSyncService.sync(command);
|
||||||
|
return success(report);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/categories")
|
||||||
|
@Operation(summary = "同步物料分类")
|
||||||
|
@PreAuthorize("@ss.hasPermission('base:master-data-sync:categories')")
|
||||||
|
public CommonResult<MasterDataCategorySyncReport> syncCategories() {
|
||||||
|
MasterDataCategorySyncReport report = masterDataCategorySyncService.syncAll();
|
||||||
|
return success(report);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
package com.zt.plat.module.base.controller.admin.base.vo;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
import jakarta.validation.constraints.Positive;
|
||||||
|
import lombok.Data;
|
||||||
|
import org.springframework.format.annotation.DateTimeFormat;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@Schema(description = "主数据同步请求参数")
|
||||||
|
public class MasterDataSyncReqVO {
|
||||||
|
|
||||||
|
@Schema(description = "增量同步的起始记录时间,留空执行全量")
|
||||||
|
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||||
|
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
|
||||||
|
private LocalDateTime since;
|
||||||
|
|
||||||
|
@Schema(description = "拉取批大小,不填写则使用配置默认值")
|
||||||
|
@Positive(message = "batchSize 必须为正数")
|
||||||
|
private Integer batchSize;
|
||||||
|
|
||||||
|
@Schema(description = "指定要刷新同步的物料编码列表")
|
||||||
|
private List<String> materialCodes;
|
||||||
|
|
||||||
|
@Schema(description = "可选的本次同步记录数上限,未填写表示不限制")
|
||||||
|
@Positive(message = "recordLimit 必须为正数")
|
||||||
|
private Long recordLimit;
|
||||||
|
}
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
package com.zt.plat.module.base.dal.dataobject.masterdata;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 外部 MDM 分类视图的数据对象。
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class MdmMaterialCategoryDO {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分类主键 ID(CODEID)。
|
||||||
|
*/
|
||||||
|
private Long codeId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分类编码,例如 01 / 0101 / 010101。
|
||||||
|
*/
|
||||||
|
private String code;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 分类名称(DESC1)。
|
||||||
|
*/
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 备注信息(DESC2)。
|
||||||
|
*/
|
||||||
|
private String remark;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 父级分类主键 ID(PARENTID)。
|
||||||
|
*/
|
||||||
|
private Long parentCodeId;
|
||||||
|
}
|
||||||
@@ -0,0 +1,35 @@
|
|||||||
|
package com.zt.plat.module.base.dal.dataobject.masterdata;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 外部 MDM MySQL 物料视图的投影,用于承接同步字段。
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class MdmMaterialViewDO {
|
||||||
|
|
||||||
|
private Long codeId;
|
||||||
|
private String materialCode;
|
||||||
|
private String categoryCode;
|
||||||
|
private String categoryName;
|
||||||
|
private String materialName;
|
||||||
|
private String baseUnitCode;
|
||||||
|
private String baseUnitName;
|
||||||
|
private String shortDescription;
|
||||||
|
private String longDescription;
|
||||||
|
private String chalcoCode;
|
||||||
|
private String majorClassCode;
|
||||||
|
private String majorClassName;
|
||||||
|
private String specification;
|
||||||
|
private String model;
|
||||||
|
private String texture;
|
||||||
|
private String drawingNumber;
|
||||||
|
private String orderNumber;
|
||||||
|
private String otherParameters;
|
||||||
|
private String equipmentCategory;
|
||||||
|
private String manufacturer;
|
||||||
|
private String source;
|
||||||
|
private LocalDateTime recordTime;
|
||||||
|
}
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
package com.zt.plat.module.base.dal.mysql.masterdata;
|
||||||
|
|
||||||
|
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 java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 读取外部 MDM 分类视图的 Mapper。
|
||||||
|
*/
|
||||||
|
@Mapper
|
||||||
|
@DS(MasterDataSyncConstants.DEFAULT_SOURCE_DATASOURCE)
|
||||||
|
public interface MdmMaterialCategoryMapper {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 拉取全部分类档案。
|
||||||
|
*/
|
||||||
|
List<MdmMaterialCategoryDO> selectAll();
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
package com.zt.plat.module.base.dal.mysql.masterdata;
|
||||||
|
|
||||||
|
import com.baomidou.dynamic.datasource.annotation.DS;
|
||||||
|
import com.zt.plat.module.base.dal.dataobject.masterdata.MdmMaterialViewDO;
|
||||||
|
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.Collection;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Mapper that exposes read-only access to the external MDM material view.
|
||||||
|
*/
|
||||||
|
@Mapper
|
||||||
|
@DS(MasterDataSyncConstants.DEFAULT_SOURCE_DATASOURCE)
|
||||||
|
public interface MdmMaterialViewMapper {
|
||||||
|
|
||||||
|
List<MdmMaterialViewDO> selectSlice(@Param("offset") long offset,
|
||||||
|
@Param("limit") int limit,
|
||||||
|
@Param("since") LocalDateTime since,
|
||||||
|
@Param("codes") Collection<String> codes);
|
||||||
|
|
||||||
|
Long countEligible(@Param("since") LocalDateTime since,
|
||||||
|
@Param("codes") Collection<String> codes);
|
||||||
|
}
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
package com.zt.plat.module.base.framework.sync.config;
|
||||||
|
|
||||||
|
import okhttp3.OkHttpClient;
|
||||||
|
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 主数据同步用到的基础配置。
|
||||||
|
*/
|
||||||
|
@Configuration
|
||||||
|
@EnableConfigurationProperties(MasterDataSyncProperties.class)
|
||||||
|
public class MasterDataSyncConfiguration {
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public OkHttpClient masterDataSyncOkHttpClient(MasterDataSyncProperties properties) {
|
||||||
|
MasterDataSyncProperties.HttpProperties http = properties.getHttp();
|
||||||
|
return new OkHttpClient.Builder()
|
||||||
|
.connectTimeout(http.getConnectTimeout())
|
||||||
|
.readTimeout(http.getReadTimeout())
|
||||||
|
.writeTimeout(http.getWriteTimeout())
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
}
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user