>> targetColumns(@RequestParam("table") String table) {
+ if (!table.matches("^[A-Za-z0-9_]+$")) {
+ return Result.error("非法表名");
+ }
+ return Result.OK(metaMapper.listTargetColumns(table));
+ }
+}
diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/mcs/entity/MesXslMcsSyncConfig.java b/jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/mcs/entity/MesXslMcsSyncConfig.java
new file mode 100644
index 00000000..32957fa2
--- /dev/null
+++ b/jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/mcs/entity/MesXslMcsSyncConfig.java
@@ -0,0 +1,126 @@
+package org.jeecg.modules.xslmes.mcs.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * MES上辅机 中间表采集配置(通用)
+ * 按 bizType 区分不同业务(密炼动作/报警/配方等),供秒级定时采集统一复用
+ *
+ * @author GHT
+ * @date 2026-06-17 for:【MES上辅机】密炼动作秒级采集
+ */
+@Data
+@TableName("mes_xsl_mcs_sync_config")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@Schema(description = "MES上辅机中间表采集配置")
+public class MesXslMcsSyncConfig implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(type = IdType.ASSIGN_ID)
+ @Schema(description = "主键")
+ private String id;
+
+ @Schema(description = "业务类型(采集任务唯一标识,如 MIX_ACT 密炼动作;通用配置可为空)")
+ private String bizType;
+
+ @Schema(description = "配置名称")
+ private String configName;
+
+ @Schema(description = "业务名称")
+ private String bizName;
+
+ @Schema(description = "源中间表名")
+ private String sourceTable;
+
+ @Schema(description = "源中间表注释")
+ private String sourceTableComment;
+
+ @Schema(description = "MES目标表名")
+ private String targetTable;
+
+ @Schema(description = "MES目标表注释")
+ private String targetTableComment;
+
+ @Schema(description = "采集时间间隔(秒),默认1秒")
+ private Integer intervalSeconds;
+
+ @Schema(description = "采集状态(0停止,1运行)")
+ private String status;
+
+ @Schema(description = "采集模式(FULL全量匹配,TIME时间匹配,INCR增量匹配-标记位回写)")
+ private String syncMode;
+
+ @Schema(description = "时间列/标记列(源表列名)。TIME模式=时间列;INCR模式=同步标记列(为空表示未采集,采集后回写'1')")
+ private String incrColumn;
+
+ @Schema(description = "时间范围(TODAY当天,LAST7最近七天)")
+ private String timeWindow;
+
+ @Schema(description = "每轮最大采集行数(INCR模式TOP N)")
+ private Integer batchLimit;
+
+ @Schema(description = "增量采集高水位(INCR模式自动维护)")
+ private String lastWatermark;
+
+ @Schema(description = "增量标记采集条件(IS_NULL为空,EQ_EMPTY等于匹配值,NE_EMPTY不等于匹配值),INCR模式用")
+ private String flagCondition;
+
+ //update-begin---author:GHT ---date:20260617 for:【MES上辅机】增量采集条件等于/不等于支持自定义匹配值-----------
+ @Schema(description = "增量标记采集条件比较值(EQ_EMPTY/NE_EMPTY 用,留空表示空字符串),INCR模式用")
+ private String flagMatchValue;
+ //update-end---author:GHT ---date:20260617 for:【MES上辅机】增量采集条件等于/不等于支持自定义匹配值-----------
+
+ @Schema(description = "增量标记采集完成后回写值(默认1),INCR模式用")
+ private String flagWriteValue;
+
+ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ @Schema(description = "最近一次采集时间")
+ private Date lastSyncTime;
+
+ @Schema(description = "最近一次采集结果")
+ private String lastSyncResult;
+
+ @Schema(description = "备注")
+ private String remark;
+
+ @Schema(description = "租户ID")
+ private Integer tenantId;
+
+ private String createBy;
+
+ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date createTime;
+
+ private String updateBy;
+
+ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date updateTime;
+
+ private Integer delFlag;
+
+ @TableField(exist = false)
+ @Schema(description = "字段映射明细(主子保存/详情用)")
+ private List fieldList;
+
+ @TableField(exist = false)
+ @Schema(description = "采集任务是否运行中(运行态由调度器实时给出)")
+ private Boolean running;
+}
diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/mcs/entity/MesXslMcsSyncField.java b/jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/mcs/entity/MesXslMcsSyncField.java
new file mode 100644
index 00000000..436c305a
--- /dev/null
+++ b/jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/mcs/entity/MesXslMcsSyncField.java
@@ -0,0 +1,75 @@
+package org.jeecg.modules.xslmes.mcs.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * MES上辅机 采集字段映射(中间库源字段 → MES目标字段)
+ *
+ * @author GHT
+ * @date 2026-06-17 for:【MES上辅机】采集配置-表与字段绑定
+ */
+@Data
+@TableName("mes_xsl_mcs_sync_field")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@Schema(description = "MES上辅机采集字段映射")
+public class MesXslMcsSyncField implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @TableId(type = IdType.ASSIGN_ID)
+ @Schema(description = "主键")
+ private String id;
+
+ @Schema(description = "采集配置ID")
+ private String configId;
+
+ @Schema(description = "中间库源字段名")
+ private String sourceField;
+
+ @Schema(description = "源字段注释")
+ private String sourceFieldComment;
+
+ @Schema(description = "源字段类型")
+ private String sourceFieldType;
+
+ @Schema(description = "MES目标字段名(接收字段)")
+ private String targetField;
+
+ @Schema(description = "MES目标字段注释")
+ private String targetFieldComment;
+
+ @Schema(description = "是否匹配键(0否,1是)")
+ private String matchKey;
+
+ @Schema(description = "排序")
+ private Integer sortNo;
+
+ @Schema(description = "租户ID")
+ private Integer tenantId;
+
+ private String createBy;
+
+ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date createTime;
+
+ private String updateBy;
+
+ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
+ @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date updateTime;
+
+ private Integer delFlag;
+}
diff --git a/jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/mcs/mapper/McsMetaMapper.java b/jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/mcs/mapper/McsMetaMapper.java
new file mode 100644
index 00000000..3e3480b9
--- /dev/null
+++ b/jeecg-boot/jeecg-boot-module/jeecg-module-xslmes/src/main/java/org/jeecg/modules/xslmes/mcs/mapper/McsMetaMapper.java
@@ -0,0 +1,58 @@
+package org.jeecg.modules.xslmes.mcs.mapper;
+
+import com.baomidou.dynamic.datasource.annotation.DS;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 中间库(SQL Server) / MES(MySQL) 表与字段元数据查询。
+ * 源表元数据走 sqlserver_mcs 数据源,目标表元数据走默认 MES 库。
+ *
+ * @author GHT
+ * @date 2026-06-17 for:【MES上辅机】采集配置-表与字段绑定
+ */
+public interface McsMetaMapper {
+
+ /**
+ * 中间库表清单(含表注释 MS_Description)
+ */
+ @DS("sqlserver_mcs")
+ @Select("SELECT t.name AS tableName, CAST(ep.value AS NVARCHAR(200)) AS tableComment "
+ + "FROM sys.tables t "
+ + "LEFT JOIN sys.extended_properties ep ON ep.major_id = t.object_id AND ep.minor_id = 0 AND ep.name = 'MS_Description' "
+ + "ORDER BY t.name")
+ List