From 275a85689266231fbdb0fd6e7615c06eb7fbf7b2 Mon Sep 17 00:00:00 2001
From: zhuguifei <312353457@qq.com>
Date: 星期三, 04 三月 2026 12:51:47 +0800
Subject: [PATCH] feat(moudule(qa)): 1.新增Oracle多数据源 2.新增喂丝机对应关系、第三方储丝柜信息视图等
---
RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/domain/vo/FeedmatchTimeDataVo.java | 196 +++++
RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/service/IFeedmatchTimeDataService.java | 69 +
RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/resources/mapper/analy/FeedmatchTimeDataMapper.xml | 6
RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/resources/mapper/analy/StoreSilkInfoMapper.xml | 6
RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/domain/FeedmatchTimeData.java | 78 +-
RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/mapper/FeedmatchTimeDataMapper.java | 15
RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/mapper/StoreSilkInfoMapper.java | 15
RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/md/service/impl/MdShiftServiceImpl.java | 134 +++
RuoYi-Vue-Plus/ruoyi-admin/src/main/resources/application-dev.yml | 12
RuoYi-Vue-Plus/ruoyi-admin/pom.xml | 16
RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/md/mapper/MdShiftMapper.java | 15
RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/md/domain/bo/MdShiftBo.java | 92 ++
RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/domain/StoreSilkInfo.java | 82 ++
RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/md/domain/MdShift.java | 93 ++
RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/service/IStoreSilkInfoService.java | 68 +
RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/service/impl/FeedmatchTimeDataServiceImpl.java | 133 +++
RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/service/impl/StoreSilkInfoServiceImpl.java | 156 ++++
RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/domain/bo/FeedmatchTimeDataBo.java | 163 ++++
RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/resources/mapper/md/MdShiftMapper.xml | 6
RuoYi-Vue-Plus/ruoyi-modules/ruoyi-generator/pom.xml | 10
RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/md/service/IMdShiftService.java | 68 +
RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/md/domain/vo/MdShiftVo.java | 112 +++
RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/domain/vo/StoreSilkInfoVo.java | 100 ++
RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/md/controller/MdShiftController.java | 105 +++
RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/domain/bo/StoreSilkInfoBo.java | 84 ++
RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/controller/StoreSilkInfoController.java | 106 +++
RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/controller/FeedmatchTimeDataController.java | 106 +++
27 files changed, 1,992 insertions(+), 54 deletions(-)
diff --git a/RuoYi-Vue-Plus/ruoyi-admin/pom.xml b/RuoYi-Vue-Plus/ruoyi-admin/pom.xml
index 25600a1..f16c7a1 100755
--- a/RuoYi-Vue-Plus/ruoyi-admin/pom.xml
+++ b/RuoYi-Vue-Plus/ruoyi-admin/pom.xml
@@ -25,15 +25,15 @@
<!-- <!– mp鏀寔鐨勬暟鎹簱鍧囨敮鎸� 鍙渶瑕佸鍔犲搴旂殑jdbc渚濊禆鍗冲彲 –>-->
<!-- <!– Oracle –>-->
-<!-- <dependency>-->
-<!-- <groupId>com.oracle.database.jdbc</groupId>-->
-<!-- <artifactId>ojdbc8</artifactId>-->
-<!-- </dependency>-->
+ <dependency>
+ <groupId>com.oracle.database.jdbc</groupId>
+ <artifactId>ojdbc8</artifactId>
+ </dependency>
<!-- <!– 鍏煎oracle浣庣増鏈� –>-->
-<!-- <dependency>-->
-<!-- <groupId>com.oracle.database.nls</groupId>-->
-<!-- <artifactId>orai18n</artifactId>-->
-<!-- </dependency>-->
+ <dependency>
+ <groupId>com.oracle.database.nls</groupId>
+ <artifactId>orai18n</artifactId>
+ </dependency>
<!-- PostgreSql -->
<dependency>
<groupId>org.postgresql</groupId>
diff --git a/RuoYi-Vue-Plus/ruoyi-admin/src/main/resources/application-dev.yml b/RuoYi-Vue-Plus/ruoyi-admin/src/main/resources/application-dev.yml
index 8e3efe6..d63a6d8 100755
--- a/RuoYi-Vue-Plus/ruoyi-admin/src/main/resources/application-dev.yml
+++ b/RuoYi-Vue-Plus/ruoyi-admin/src/main/resources/application-dev.yml
@@ -64,12 +64,12 @@
# url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true
# username:
# password:
-# oracle:
-# type: ${spring.datasource.type}
-# driverClassName: oracle.jdbc.OracleDriver
-# url: jdbc:oracle:thin:@//localhost:1521/XE
-# username: ROOT
-# password: root
+ oracle:
+ type: ${spring.datasource.type}
+ driverClassName: oracle.jdbc.OracleDriver
+ url: jdbc:oracle:thin:@192.168.2.26:1521:orcl
+ username: gfsc
+ password: lbit
# postgres:
# type: ${spring.datasource.type}
# driverClassName: org.postgresql.Driver
diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-generator/pom.xml b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-generator/pom.xml
index fa5dc25..ab25430 100755
--- a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-generator/pom.xml
+++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-generator/pom.xml
@@ -66,11 +66,11 @@
</dependency>
<!-- anyline鏀寔100+绉嶇被鍨嬫暟鎹簱 娣诲姞瀵瑰簲鐨刯dbc渚濊禆涓巃nyline瀵瑰簲鏁版嵁搴撲緷璧栧寘鍗冲彲 -->
-<!-- <dependency>-->
-<!-- <groupId>org.anyline</groupId>-->
-<!-- <artifactId>anyline-data-jdbc-oracle</artifactId>-->
-<!-- <version>${anyline.version}</version>-->
-<!-- </dependency>-->
+ <dependency>
+ <groupId>org.anyline</groupId>
+ <artifactId>anyline-data-jdbc-oracle</artifactId>
+ <version>${anyline.version}</version>
+ </dependency>
<dependency>
<groupId>org.anyline</groupId>
diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/controller/FeedmatchTimeDataController.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/controller/FeedmatchTimeDataController.java
new file mode 100644
index 0000000..40eff2c
--- /dev/null
+++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/controller/FeedmatchTimeDataController.java
@@ -0,0 +1,106 @@
+package org.dromara.analy.controller;
+
+import java.util.Date;
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.excel.utils.ExcelUtil;
+import org.dromara.analy.domain.vo.FeedmatchTimeDataVo;
+import org.dromara.analy.domain.bo.FeedmatchTimeDataBo;
+import org.dromara.analy.service.IFeedmatchTimeDataService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 鍠備笣鏈哄搴斿叧绯�
+ *
+ * @author zhuguifei
+ * @date 2026-03-02
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/analy/feedMatch")
+public class FeedmatchTimeDataController extends BaseController {
+
+ private final IFeedmatchTimeDataService feedmatchTimeDataService;
+
+ /**
+ * 鏌ヨ鍠備笣鏈哄搴斿叧绯诲垪琛�
+ */
+ @SaCheckPermission("analy:feedMatch:list")
+ @GetMapping("/list")
+ public TableDataInfo<FeedmatchTimeDataVo> list(FeedmatchTimeDataBo bo, PageQuery pageQuery) {
+ return feedmatchTimeDataService.queryPageList(bo, pageQuery);
+ }
+
+ /**
+ * 瀵煎嚭鍠備笣鏈哄搴斿叧绯诲垪琛�
+ */
+ @SaCheckPermission("analy:feedMatch:export")
+ @Log(title = "鍠備笣鏈哄搴斿叧绯�", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(FeedmatchTimeDataBo bo, HttpServletResponse response) {
+ List<FeedmatchTimeDataVo> list = feedmatchTimeDataService.queryList(bo);
+ ExcelUtil.exportExcel(list, "鍠備笣鏈哄搴斿叧绯�", FeedmatchTimeDataVo.class, response);
+ }
+
+ /**
+ * 鑾峰彇鍠備笣鏈哄搴斿叧绯昏缁嗕俊鎭�
+ *
+ * @param time 涓婚敭
+ */
+ @SaCheckPermission("analy:feedMatch:query")
+ @GetMapping("/{time}")
+ public R<FeedmatchTimeDataVo> getInfo(@NotNull(message = "涓婚敭涓嶈兘涓虹┖")
+ @PathVariable Date time) {
+ return R.ok(feedmatchTimeDataService.queryById(time));
+ }
+
+ /**
+ * 鏂板鍠備笣鏈哄搴斿叧绯�
+ */
+ @SaCheckPermission("analy:feedMatch:add")
+ @Log(title = "鍠備笣鏈哄搴斿叧绯�", businessType = BusinessType.INSERT)
+ @RepeatSubmit()
+ @PostMapping()
+ public R<Void> add(@Validated(AddGroup.class) @RequestBody FeedmatchTimeDataBo bo) {
+ return toAjax(feedmatchTimeDataService.insertByBo(bo));
+ }
+
+ /**
+ * 淇敼鍠備笣鏈哄搴斿叧绯�
+ */
+ @SaCheckPermission("analy:feedMatch:edit")
+ @Log(title = "鍠備笣鏈哄搴斿叧绯�", businessType = BusinessType.UPDATE)
+ @RepeatSubmit()
+ @PutMapping()
+ public R<Void> edit(@Validated(EditGroup.class) @RequestBody FeedmatchTimeDataBo bo) {
+ return toAjax(feedmatchTimeDataService.updateByBo(bo));
+ }
+
+ /**
+ * 鍒犻櫎鍠備笣鏈哄搴斿叧绯�
+ *
+ * @param times 涓婚敭涓�
+ */
+ @SaCheckPermission("analy:feedMatch:remove")
+ @Log(title = "鍠備笣鏈哄搴斿叧绯�", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{times}")
+ public R<Void> remove(@NotEmpty(message = "涓婚敭涓嶈兘涓虹┖")
+ @PathVariable Date[] times) {
+ return toAjax(feedmatchTimeDataService.deleteWithValidByIds(List.of(times), true));
+ }
+}
diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/controller/StoreSilkInfoController.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/controller/StoreSilkInfoController.java
new file mode 100644
index 0000000..e8c9fa4
--- /dev/null
+++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/controller/StoreSilkInfoController.java
@@ -0,0 +1,106 @@
+package org.dromara.analy.controller;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.excel.utils.ExcelUtil;
+import org.dromara.analy.domain.vo.StoreSilkInfoVo;
+import org.dromara.analy.domain.bo.StoreSilkInfoBo;
+import org.dromara.analy.service.IStoreSilkInfoService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 鍌ㄤ笣鏌滀骇閲�
+ *
+ * @author zhuguifei
+ * @date 2026-03-02
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/analy/storeSilk")
+public class StoreSilkInfoController extends BaseController {
+
+ private final IStoreSilkInfoService storeSilkInfoService;
+
+ /**
+ * 鏌ヨ鍌ㄤ笣鏌滀骇閲忓垪琛�
+ */
+ @SaCheckPermission("analy:storeSilk:list")
+ @GetMapping("/list")
+ public TableDataInfo<StoreSilkInfoVo> list(StoreSilkInfoBo bo, PageQuery pageQuery) {
+
+ return storeSilkInfoService.queryPageList(bo, pageQuery);
+ }
+
+ /**
+ * 瀵煎嚭鍌ㄤ笣鏌滀骇閲忓垪琛�
+ */
+ @SaCheckPermission("analy:storeSilk:export")
+ @Log(title = "鍌ㄤ笣鏌滀骇閲�", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(StoreSilkInfoBo bo, HttpServletResponse response) {
+ List<StoreSilkInfoVo> list = storeSilkInfoService.queryList(bo);
+ ExcelUtil.exportExcel(list, "鍌ㄤ笣鏌滀骇閲�", StoreSilkInfoVo.class, response);
+ }
+
+ /**
+ * 鑾峰彇鍌ㄤ笣鏌滀骇閲忚缁嗕俊鎭�
+ *
+ * @param id 涓婚敭
+ */
+ @SaCheckPermission("analy:storeSilk:query")
+ @GetMapping("/{id}")
+ public R<StoreSilkInfoVo> getInfo(@NotNull(message = "涓婚敭涓嶈兘涓虹┖")
+ @PathVariable Long id) {
+ return R.ok(storeSilkInfoService.queryById(id));
+ }
+
+ /**
+ * 鏂板鍌ㄤ笣鏌滀骇閲�
+ */
+ @SaCheckPermission("analy:storeSilk:add")
+ @Log(title = "鍌ㄤ笣鏌滀骇閲�", businessType = BusinessType.INSERT)
+ @RepeatSubmit()
+ @PostMapping()
+ public R<Void> add(@Validated(AddGroup.class) @RequestBody StoreSilkInfoBo bo) {
+ return toAjax(storeSilkInfoService.insertByBo(bo));
+ }
+
+ /**
+ * 淇敼鍌ㄤ笣鏌滀骇閲�
+ */
+ @SaCheckPermission("analy:storeSilk:edit")
+ @Log(title = "鍌ㄤ笣鏌滀骇閲�", businessType = BusinessType.UPDATE)
+ @RepeatSubmit()
+ @PutMapping()
+ public R<Void> edit(@Validated(EditGroup.class) @RequestBody StoreSilkInfoBo bo) {
+ return toAjax(storeSilkInfoService.updateByBo(bo));
+ }
+
+ /**
+ * 鍒犻櫎鍌ㄤ笣鏌滀骇閲�
+ *
+ * @param ids 涓婚敭涓�
+ */
+ @SaCheckPermission("analy:storeSilk:remove")
+ @Log(title = "鍌ㄤ笣鏌滀骇閲�", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public R<Void> remove(@NotEmpty(message = "涓婚敭涓嶈兘涓虹┖")
+ @PathVariable Long[] ids) {
+ return toAjax(storeSilkInfoService.deleteWithValidByIds(List.of(ids), true));
+ }
+}
diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/domain/FeedmatchTimeData.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/domain/FeedmatchTimeData.java
old mode 100755
new mode 100644
index 09ad4bd..a53d88a
--- a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/domain/FeedmatchTimeData.java
+++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/domain/FeedmatchTimeData.java
@@ -5,13 +5,15 @@
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
import java.io.Serial;
/**
- * 鍠備笣鏈哄垎鏋愬璞� feedmatch_time_data
+ * 鍠備笣鏈哄搴斿叧绯诲璞� feedmatch_time_data
*
* @author zhuguifei
- * @date 2026-01-29
+ * @date 2026-03-02
*/
@Data
@EqualsAndHashCode(callSuper = true)
@@ -22,24 +24,14 @@
private static final long serialVersionUID = 1L;
/**
- * 鏃堕棿
+ * 鏃堕棿鎴�
*/
private Date time;
/**
- * Key
+ * 鐝+鏈哄彴
*/
private String key;
-
- /**
- * 鐝 (1浣嶆暟瀛�)
- */
- private Integer shift;
-
- /**
- * 璁惧鍙� (3浣嶆暟瀛�)
- */
- private Integer equNo;
/**
* 鏁版嵁鏇存柊鏃堕棿
@@ -49,106 +41,122 @@
/**
* 1#鍠備笣鏈哄搴旂殑绗竴涓偍涓濇煖
*/
- private Integer fs11;
+ private String fs11;
/**
* 1#鍠備笣鏈哄搴旂殑绗簩涓偍涓濇煖
*/
- private Integer fs12;
+ private String fs12;
/**
* 2#鍠備笣鏈哄搴旂殑绗竴涓偍涓濇煖
*/
- private Integer fs21;
+ private String fs21;
/**
* 2#鍠備笣鏈哄搴旂殑绗簩涓偍涓濇煖
*/
- private Integer fs22;
+ private String fs22;
/**
* 3#鍠備笣鏈哄搴旂殑绗竴涓偍涓濇煖
*/
- private Integer fs31;
+ private String fs31;
/**
* 3#鍠備笣鏈哄搴旂殑绗簩涓偍涓濇煖
*/
- private Integer fs32;
+ private String fs32;
/**
* 4#鍠備笣鏈哄搴旂殑绗竴涓偍涓濇煖
*/
- private Integer fs41;
+ private String fs41;
/**
* 4#鍠備笣鏈哄搴旂殑绗簩涓偍涓濇煖
*/
- private Integer fs42;
+ private String fs42;
/**
* 1#鏈虹粍瀵瑰簲鐨勫杺涓濇満鍜岀閬�
*/
- private Integer pipe01;
+ private Long pipe01;
/**
* 2#鏈虹粍瀵瑰簲鐨勫杺涓濇満鍜岀閬�
*/
- private Integer pipe02;
+ private Long pipe02;
/**
* 3#鏈虹粍瀵瑰簲鐨勫杺涓濇満鍜岀閬�
*/
- private Integer pipe03;
+ private Long pipe03;
/**
* 4#鏈虹粍瀵瑰簲鐨勫杺涓濇満鍜岀閬�
*/
- private Integer pipe04;
+ private Long pipe04;
/**
* 5#鏈虹粍瀵瑰簲鐨勫杺涓濇満鍜岀閬�
*/
- private Integer pipe05;
+ private Long pipe05;
/**
* 6#鏈虹粍瀵瑰簲鐨勫杺涓濇満鍜岀閬�
*/
- private Integer pipe06;
+ private Long pipe06;
/**
* 7#鏈虹粍瀵瑰簲鐨勫杺涓濇満鍜岀閬�
*/
- private Integer pipe07;
+ private Long pipe07;
/**
* 8#鏈虹粍瀵瑰簲鐨勫杺涓濇満鍜岀閬�
*/
- private Integer pipe08;
+ private Long pipe08;
/**
* 9#鏈虹粍瀵瑰簲鐨勫杺涓濇満鍜岀閬�
*/
- private Integer pipe09;
+ private Long pipe09;
/**
* 10#鏈虹粍瀵瑰簲鐨勫杺涓濇満鍜岀閬�
*/
- private Integer pipe10;
+ private Long pipe10;
/**
* 11#鏈虹粍瀵瑰簲鐨勫杺涓濇満鍜岀閬�
*/
- private Integer pipe11;
+ private Long pipe11;
/**
* 12#鏈虹粍瀵瑰簲鐨勫杺涓濇満鍜岀閬�
*/
- private Integer pipe12;
+ private Long pipe12;
/**
* 鍠備笣鏈虹姸鎬� 1-杩炴帴 0-鏂紑
*/
- private Integer wsjState;
+ private Long wsjState;
+
+ /**
+ * 鐝
+ */
+ private Long shift;
+
+ /**
+ * 鏈哄彴
+ */
+ private Long equNo;
+
+ /**
+ * 澶囨敞
+ */
+ private String remark;
+
}
diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/domain/StoreSilkInfo.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/domain/StoreSilkInfo.java
new file mode 100644
index 0000000..8c23f46
--- /dev/null
+++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/domain/StoreSilkInfo.java
@@ -0,0 +1,82 @@
+package org.dromara.analy.domain;
+
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+import java.io.Serial;
+
+/**
+ * 鍌ㄤ笣鏌滀骇閲忓璞� oracle_store_silk
+ *
+ * @author zhuguifei
+ * @date 2026-03-02
+ */
+@Data
+@TableName("oracle_store_silk")
+public class StoreSilkInfo {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * id
+ */
+ @TableId(value = "id")
+ private Long id;
+
+ /**
+ * 鐗屽彿
+ */
+ private String materialname;
+
+ /**
+ * 鎵规鍙�
+ */
+ private String batchcode;
+
+ /**
+ * 鎶曟枡鏃ユ湡
+ */
+ private Date actualstarttime;
+
+ /**
+ * 鎶曟枡閲嶉噺
+ */
+ private Long jobinput;
+
+ /**
+ * 鎹熻�楅噸閲�
+ */
+ private Long weightloss;
+
+ /**
+ * 鍑哄彾涓濈巼
+ */
+ private Long slkrate;
+
+ /**
+ * 鍌ㄤ笣鏌滈噸閲�
+ */
+ private Long weight;
+
+ /**
+ * 鍌ㄤ笣鏌滃嚭鏂欏紑濮嬫椂闂�
+ */
+ private Date distimebegin;
+
+ /**
+ * 鍌ㄤ笣鏌滃嚭鏂欑粨鏉熸椂闂�
+ */
+ private Date distimeend;
+
+ /**
+ * 鏌滃瓙鍙�(鏈綅)
+ */
+ private String siloid;
+
+
+}
diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/domain/bo/FeedmatchTimeDataBo.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/domain/bo/FeedmatchTimeDataBo.java
new file mode 100644
index 0000000..7cbf1c4
--- /dev/null
+++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/domain/bo/FeedmatchTimeDataBo.java
@@ -0,0 +1,163 @@
+package org.dromara.analy.domain.bo;
+
+import org.dromara.analy.domain.FeedmatchTimeData;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+/**
+ * 鍠備笣鏈哄搴斿叧绯讳笟鍔″璞� feedmatch_time_data
+ *
+ * @author zhuguifei
+ * @date 2026-03-02
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = FeedmatchTimeData.class, reverseConvertGenerate = false)
+public class FeedmatchTimeDataBo extends BaseEntity {
+
+ /**
+ * 鏃堕棿鎴�
+ */
+ @NotNull(message = "鏃堕棿鎴充笉鑳戒负绌�", groups = { AddGroup.class, EditGroup.class })
+ private Date time;
+
+ /**
+ * 鐝+鏈哄彴
+ */
+ @NotBlank(message = "鐝+鏈哄彴涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class })
+ private String key;
+
+ /**
+ * 鏁版嵁鏇存柊鏃堕棿
+ */
+ private String dacUpTime;
+
+ /**
+ * 1#鍠備笣鏈哄搴旂殑绗竴涓偍涓濇煖
+ */
+ private String fs11;
+
+ /**
+ * 1#鍠備笣鏈哄搴旂殑绗簩涓偍涓濇煖
+ */
+ private String fs12;
+
+ /**
+ * 2#鍠備笣鏈哄搴旂殑绗竴涓偍涓濇煖
+ */
+ private String fs21;
+
+ /**
+ * 2#鍠備笣鏈哄搴旂殑绗簩涓偍涓濇煖
+ */
+ private String fs22;
+
+ /**
+ * 3#鍠備笣鏈哄搴旂殑绗竴涓偍涓濇煖
+ */
+ private String fs31;
+
+ /**
+ * 3#鍠備笣鏈哄搴旂殑绗簩涓偍涓濇煖
+ */
+ private String fs32;
+
+ /**
+ * 4#鍠備笣鏈哄搴旂殑绗竴涓偍涓濇煖
+ */
+ private String fs41;
+
+ /**
+ * 4#鍠備笣鏈哄搴旂殑绗簩涓偍涓濇煖
+ */
+ private String fs42;
+
+ /**
+ * 1#鏈虹粍瀵瑰簲鐨勫杺涓濇満鍜岀閬�
+ */
+ private Long pipe01;
+
+ /**
+ * 2#鏈虹粍瀵瑰簲鐨勫杺涓濇満鍜岀閬�
+ */
+ private Long pipe02;
+
+ /**
+ * 3#鏈虹粍瀵瑰簲鐨勫杺涓濇満鍜岀閬�
+ */
+ private Long pipe03;
+
+ /**
+ * 4#鏈虹粍瀵瑰簲鐨勫杺涓濇満鍜岀閬�
+ */
+ private Long pipe04;
+
+ /**
+ * 5#鏈虹粍瀵瑰簲鐨勫杺涓濇満鍜岀閬�
+ */
+ private Long pipe05;
+
+ /**
+ * 6#鏈虹粍瀵瑰簲鐨勫杺涓濇満鍜岀閬�
+ */
+ private Long pipe06;
+
+ /**
+ * 7#鏈虹粍瀵瑰簲鐨勫杺涓濇満鍜岀閬�
+ */
+ private Long pipe07;
+
+ /**
+ * 8#鏈虹粍瀵瑰簲鐨勫杺涓濇満鍜岀閬�
+ */
+ private Long pipe08;
+
+ /**
+ * 9#鏈虹粍瀵瑰簲鐨勫杺涓濇満鍜岀閬�
+ */
+ private Long pipe09;
+
+ /**
+ * 10#鏈虹粍瀵瑰簲鐨勫杺涓濇満鍜岀閬�
+ */
+ private Long pipe10;
+
+ /**
+ * 11#鏈虹粍瀵瑰簲鐨勫杺涓濇満鍜岀閬�
+ */
+ private Long pipe11;
+
+ /**
+ * 12#鏈虹粍瀵瑰簲鐨勫杺涓濇満鍜岀閬�
+ */
+ private Long pipe12;
+
+ /**
+ * 鍠備笣鏈虹姸鎬� 1-杩炴帴 0-鏂紑
+ */
+ private Long wsjState;
+
+ /**
+ * 鐝
+ */
+ private Long shift;
+
+ /**
+ * 鏈哄彴
+ */
+ private Long equNo;
+
+ /**
+ * 澶囨敞
+ */
+ private String remark;
+
+
+}
diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/domain/bo/StoreSilkInfoBo.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/domain/bo/StoreSilkInfoBo.java
new file mode 100644
index 0000000..23a5268
--- /dev/null
+++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/domain/bo/StoreSilkInfoBo.java
@@ -0,0 +1,84 @@
+package org.dromara.analy.domain.bo;
+
+import org.dromara.analy.domain.StoreSilkInfo;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+/**
+ * 鍌ㄤ笣鏌滀骇閲忎笟鍔″璞� oracle_store_silk
+ *
+ * @author zhuguifei
+ * @date 2026-03-02
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = StoreSilkInfo.class, reverseConvertGenerate = false)
+public class StoreSilkInfoBo extends BaseEntity {
+
+ /**
+ * id
+ */
+ @NotNull(message = "id涓嶈兘涓虹┖", groups = { EditGroup.class })
+ private Long id;
+
+ /**
+ * 鐗屽彿
+ */
+ @NotBlank(message = "鐗屽彿涓嶈兘涓虹┖", groups = { AddGroup.class, EditGroup.class })
+ private String materialname;
+
+ /**
+ * 鎵规鍙�
+ */
+ @NotBlank(message = "鎵规鍙蜂笉鑳戒负绌�", groups = { AddGroup.class, EditGroup.class })
+ private String batchcode;
+
+ /**
+ * 鎶曟枡鏃ユ湡
+ */
+ private Date actualstarttime;
+
+ /**
+ * 鎶曟枡閲嶉噺
+ */
+ private Long jobinput;
+
+ /**
+ * 鎹熻�楅噸閲�
+ */
+ private Long weightloss;
+
+ /**
+ * 鍑哄彾涓濈巼
+ */
+ private Long slkrate;
+
+ /**
+ * 鍌ㄤ笣鏌滈噸閲�
+ */
+ private Long weight;
+
+ /**
+ * 鍌ㄤ笣鏌滃嚭鏂欏紑濮嬫椂闂�
+ */
+ private Date distimebegin;
+
+ /**
+ * 鍌ㄤ笣鏌滃嚭鏂欑粨鏉熸椂闂�
+ */
+ private Date distimeend;
+
+ /**
+ * 鏌滃瓙鍙�(鏈綅)
+ */
+ private String siloid;
+
+
+}
diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/domain/vo/FeedmatchTimeDataVo.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/domain/vo/FeedmatchTimeDataVo.java
new file mode 100644
index 0000000..a34f951
--- /dev/null
+++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/domain/vo/FeedmatchTimeDataVo.java
@@ -0,0 +1,196 @@
+package org.dromara.analy.domain.vo;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.dromara.analy.domain.FeedmatchTimeData;
+import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
+import cn.idev.excel.annotation.ExcelProperty;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+
+/**
+ * 鍠備笣鏈哄搴斿叧绯昏鍥惧璞� feedmatch_time_data
+ *
+ * @author zhuguifei
+ * @date 2026-03-02
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = FeedmatchTimeData.class)
+public class FeedmatchTimeDataVo implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 鏃堕棿鎴�
+ */
+ @ExcelProperty(value = "鏃堕棿鎴�")
+ private Date time;
+
+ /**
+ * 鐝+鏈哄彴
+ */
+ @ExcelProperty(value = "鐝+鏈哄彴")
+ private String key;
+
+ /**
+ * 鏁版嵁鏇存柊鏃堕棿
+ */
+ @ExcelProperty(value = "鏁版嵁鏇存柊鏃堕棿")
+ private String dacUpTime;
+
+ /**
+ * 1#鍠備笣鏈哄搴旂殑绗竴涓偍涓濇煖
+ */
+ @ExcelProperty(value = "1#鍠備笣鏈哄搴旂殑绗竴涓偍涓濇煖")
+ private String fs11;
+
+ /**
+ * 1#鍠備笣鏈哄搴旂殑绗簩涓偍涓濇煖
+ */
+ @ExcelProperty(value = "1#鍠備笣鏈哄搴旂殑绗簩涓偍涓濇煖")
+ private String fs12;
+
+ /**
+ * 2#鍠備笣鏈哄搴旂殑绗竴涓偍涓濇煖
+ */
+ @ExcelProperty(value = "2#鍠備笣鏈哄搴旂殑绗竴涓偍涓濇煖")
+ private String fs21;
+
+ /**
+ * 2#鍠備笣鏈哄搴旂殑绗簩涓偍涓濇煖
+ */
+ @ExcelProperty(value = "2#鍠備笣鏈哄搴旂殑绗簩涓偍涓濇煖")
+ private String fs22;
+
+ /**
+ * 3#鍠備笣鏈哄搴旂殑绗竴涓偍涓濇煖
+ */
+ @ExcelProperty(value = "3#鍠備笣鏈哄搴旂殑绗竴涓偍涓濇煖")
+ private String fs31;
+
+ /**
+ * 3#鍠備笣鏈哄搴旂殑绗簩涓偍涓濇煖
+ */
+ @ExcelProperty(value = "3#鍠備笣鏈哄搴旂殑绗簩涓偍涓濇煖")
+ private String fs32;
+
+ /**
+ * 4#鍠備笣鏈哄搴旂殑绗竴涓偍涓濇煖
+ */
+ @ExcelProperty(value = "4#鍠備笣鏈哄搴旂殑绗竴涓偍涓濇煖")
+ private String fs41;
+
+ /**
+ * 4#鍠備笣鏈哄搴旂殑绗簩涓偍涓濇煖
+ */
+ @ExcelProperty(value = "4#鍠備笣鏈哄搴旂殑绗簩涓偍涓濇煖")
+ private String fs42;
+
+ /**
+ * 1#鏈虹粍瀵瑰簲鐨勫杺涓濇満鍜岀閬�
+ */
+ @ExcelProperty(value = "1#鏈虹粍瀵瑰簲鐨勫杺涓濇満鍜岀閬�")
+ private Long pipe01;
+
+ /**
+ * 2#鏈虹粍瀵瑰簲鐨勫杺涓濇満鍜岀閬�
+ */
+ @ExcelProperty(value = "2#鏈虹粍瀵瑰簲鐨勫杺涓濇満鍜岀閬�")
+ private Long pipe02;
+
+ /**
+ * 3#鏈虹粍瀵瑰簲鐨勫杺涓濇満鍜岀閬�
+ */
+ @ExcelProperty(value = "3#鏈虹粍瀵瑰簲鐨勫杺涓濇満鍜岀閬�")
+ private Long pipe03;
+
+ /**
+ * 4#鏈虹粍瀵瑰簲鐨勫杺涓濇満鍜岀閬�
+ */
+ @ExcelProperty(value = "4#鏈虹粍瀵瑰簲鐨勫杺涓濇満鍜岀閬�")
+ private Long pipe04;
+
+ /**
+ * 5#鏈虹粍瀵瑰簲鐨勫杺涓濇満鍜岀閬�
+ */
+ @ExcelProperty(value = "5#鏈虹粍瀵瑰簲鐨勫杺涓濇満鍜岀閬�")
+ private Long pipe05;
+
+ /**
+ * 6#鏈虹粍瀵瑰簲鐨勫杺涓濇満鍜岀閬�
+ */
+ @ExcelProperty(value = "6#鏈虹粍瀵瑰簲鐨勫杺涓濇満鍜岀閬�")
+ private Long pipe06;
+
+ /**
+ * 7#鏈虹粍瀵瑰簲鐨勫杺涓濇満鍜岀閬�
+ */
+ @ExcelProperty(value = "7#鏈虹粍瀵瑰簲鐨勫杺涓濇満鍜岀閬�")
+ private Long pipe07;
+
+ /**
+ * 8#鏈虹粍瀵瑰簲鐨勫杺涓濇満鍜岀閬�
+ */
+ @ExcelProperty(value = "8#鏈虹粍瀵瑰簲鐨勫杺涓濇満鍜岀閬�")
+ private Long pipe08;
+
+ /**
+ * 9#鏈虹粍瀵瑰簲鐨勫杺涓濇満鍜岀閬�
+ */
+ @ExcelProperty(value = "9#鏈虹粍瀵瑰簲鐨勫杺涓濇満鍜岀閬�")
+ private Long pipe09;
+
+ /**
+ * 10#鏈虹粍瀵瑰簲鐨勫杺涓濇満鍜岀閬�
+ */
+ @ExcelProperty(value = "10#鏈虹粍瀵瑰簲鐨勫杺涓濇満鍜岀閬�")
+ private Long pipe10;
+
+ /**
+ * 11#鏈虹粍瀵瑰簲鐨勫杺涓濇満鍜岀閬�
+ */
+ @ExcelProperty(value = "11#鏈虹粍瀵瑰簲鐨勫杺涓濇満鍜岀閬�")
+ private Long pipe11;
+
+ /**
+ * 12#鏈虹粍瀵瑰簲鐨勫杺涓濇満鍜岀閬�
+ */
+ @ExcelProperty(value = "12#鏈虹粍瀵瑰簲鐨勫杺涓濇満鍜岀閬�")
+ private Long pipe12;
+
+ /**
+ * 鍠備笣鏈虹姸鎬� 1-杩炴帴 0-鏂紑
+ */
+ @ExcelProperty(value = "鍠備笣鏈虹姸鎬� 1-杩炴帴 0-鏂紑")
+ private Long wsjState;
+
+ /**
+ * 鐝
+ */
+ @ExcelProperty(value = "鐝")
+ private Long shift;
+
+ /**
+ * 鏈哄彴
+ */
+ @ExcelProperty(value = "鏈哄彴")
+ private Long equNo;
+
+ /**
+ * 澶囨敞
+ */
+ @ExcelProperty(value = "澶囨敞")
+ private String remark;
+
+
+}
diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/domain/vo/StoreSilkInfoVo.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/domain/vo/StoreSilkInfoVo.java
new file mode 100644
index 0000000..0622110
--- /dev/null
+++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/domain/vo/StoreSilkInfoVo.java
@@ -0,0 +1,100 @@
+package org.dromara.analy.domain.vo;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.dromara.analy.domain.StoreSilkInfo;
+import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
+import cn.idev.excel.annotation.ExcelProperty;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+
+/**
+ * 鍌ㄤ笣鏌滀骇閲忚鍥惧璞� oracle_store_silk
+ *
+ * @author zhuguifei
+ * @date 2026-03-02
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = StoreSilkInfo.class)
+public class StoreSilkInfoVo implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * id
+ */
+ @ExcelProperty(value = "id")
+ private Long id;
+
+ /**
+ * 鐗屽彿
+ */
+ @ExcelProperty(value = "鐗屽彿")
+ private String materialname;
+
+ /**
+ * 鎵规鍙�
+ */
+ @ExcelProperty(value = "鎵规鍙�")
+ private String batchcode;
+
+ /**
+ * 鎶曟枡鏃ユ湡
+ */
+ @ExcelProperty(value = "鎶曟枡鏃ユ湡")
+ private Date actualstarttime;
+
+ /**
+ * 鎶曟枡閲嶉噺
+ */
+ @ExcelProperty(value = "鎶曟枡閲嶉噺")
+ private Long jobinput;
+
+ /**
+ * 鎹熻�楅噸閲�
+ */
+ @ExcelProperty(value = "鎹熻�楅噸閲�")
+ private Long weightloss;
+
+ /**
+ * 鍑哄彾涓濈巼
+ */
+ @ExcelProperty(value = "鍑哄彾涓濈巼")
+ private Long slkrate;
+
+ /**
+ * 鍌ㄤ笣鏌滈噸閲�
+ */
+ @ExcelProperty(value = "鍌ㄤ笣鏌滈噸閲�")
+ private Long weight;
+
+ /**
+ * 鍌ㄤ笣鏌滃嚭鏂欏紑濮嬫椂闂�
+ */
+ @ExcelProperty(value = "鍌ㄤ笣鏌滃嚭鏂欏紑濮嬫椂闂�")
+ private Date distimebegin;
+
+ /**
+ * 鍌ㄤ笣鏌滃嚭鏂欑粨鏉熸椂闂�
+ */
+ @ExcelProperty(value = "鍌ㄤ笣鏌滃嚭鏂欑粨鏉熸椂闂�")
+ private Date distimeend;
+
+ /**
+ * 鏌滃瓙鍙�(鏈綅)
+ */
+ @ExcelProperty(value = "鏌滃瓙鍙�(鏈綅)")
+ private String siloid;
+
+
+}
diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/mapper/FeedmatchTimeDataMapper.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/mapper/FeedmatchTimeDataMapper.java
new file mode 100644
index 0000000..94940e1
--- /dev/null
+++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/mapper/FeedmatchTimeDataMapper.java
@@ -0,0 +1,15 @@
+package org.dromara.analy.mapper;
+
+import org.dromara.analy.domain.FeedmatchTimeData;
+import org.dromara.analy.domain.vo.FeedmatchTimeDataVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 鍠備笣鏈哄搴斿叧绯籑apper鎺ュ彛
+ *
+ * @author zhuguifei
+ * @date 2026-03-02
+ */
+public interface FeedmatchTimeDataMapper extends BaseMapperPlus<FeedmatchTimeData, FeedmatchTimeDataVo> {
+
+}
diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/mapper/StoreSilkInfoMapper.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/mapper/StoreSilkInfoMapper.java
new file mode 100644
index 0000000..c988c3b
--- /dev/null
+++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/mapper/StoreSilkInfoMapper.java
@@ -0,0 +1,15 @@
+package org.dromara.analy.mapper;
+
+import org.dromara.analy.domain.StoreSilkInfo;
+import org.dromara.analy.domain.vo.StoreSilkInfoVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 鍌ㄤ笣鏌滀骇閲廙apper鎺ュ彛
+ *
+ * @author zhuguifei
+ * @date 2026-03-02
+ */
+public interface StoreSilkInfoMapper extends BaseMapperPlus<StoreSilkInfo, StoreSilkInfoVo> {
+
+}
diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/service/IFeedmatchTimeDataService.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/service/IFeedmatchTimeDataService.java
new file mode 100644
index 0000000..aadf438
--- /dev/null
+++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/service/IFeedmatchTimeDataService.java
@@ -0,0 +1,69 @@
+package org.dromara.analy.service;
+
+import org.dromara.analy.domain.vo.FeedmatchTimeDataVo;
+import org.dromara.analy.domain.bo.FeedmatchTimeDataBo;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+
+import java.util.Collection;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 鍠備笣鏈哄搴斿叧绯籗ervice鎺ュ彛
+ *
+ * @author zhuguifei
+ * @date 2026-03-02
+ */
+public interface IFeedmatchTimeDataService {
+
+ /**
+ * 鏌ヨ鍠備笣鏈哄搴斿叧绯�
+ *
+ * @param time 涓婚敭
+ * @return 鍠備笣鏈哄搴斿叧绯�
+ */
+ FeedmatchTimeDataVo queryById(Date time);
+
+ /**
+ * 鍒嗛〉鏌ヨ鍠備笣鏈哄搴斿叧绯诲垪琛�
+ *
+ * @param bo 鏌ヨ鏉′欢
+ * @param pageQuery 鍒嗛〉鍙傛暟
+ * @return 鍠備笣鏈哄搴斿叧绯诲垎椤靛垪琛�
+ */
+ TableDataInfo<FeedmatchTimeDataVo> queryPageList(FeedmatchTimeDataBo bo, PageQuery pageQuery);
+
+ /**
+ * 鏌ヨ绗﹀悎鏉′欢鐨勫杺涓濇満瀵瑰簲鍏崇郴鍒楄〃
+ *
+ * @param bo 鏌ヨ鏉′欢
+ * @return 鍠備笣鏈哄搴斿叧绯诲垪琛�
+ */
+ List<FeedmatchTimeDataVo> queryList(FeedmatchTimeDataBo bo);
+
+ /**
+ * 鏂板鍠備笣鏈哄搴斿叧绯�
+ *
+ * @param bo 鍠備笣鏈哄搴斿叧绯�
+ * @return 鏄惁鏂板鎴愬姛
+ */
+ Boolean insertByBo(FeedmatchTimeDataBo bo);
+
+ /**
+ * 淇敼鍠備笣鏈哄搴斿叧绯�
+ *
+ * @param bo 鍠備笣鏈哄搴斿叧绯�
+ * @return 鏄惁淇敼鎴愬姛
+ */
+ Boolean updateByBo(FeedmatchTimeDataBo bo);
+
+ /**
+ * 鏍¢獙骞舵壒閲忓垹闄ゅ杺涓濇満瀵瑰簲鍏崇郴淇℃伅
+ *
+ * @param ids 寰呭垹闄ょ殑涓婚敭闆嗗悎
+ * @param isValid 鏄惁杩涜鏈夋晥鎬ф牎楠�
+ * @return 鏄惁鍒犻櫎鎴愬姛
+ */
+ Boolean deleteWithValidByIds(Collection<Date> ids, Boolean isValid);
+}
diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/service/IStoreSilkInfoService.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/service/IStoreSilkInfoService.java
new file mode 100644
index 0000000..10c5157
--- /dev/null
+++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/service/IStoreSilkInfoService.java
@@ -0,0 +1,68 @@
+package org.dromara.analy.service;
+
+import org.dromara.analy.domain.vo.StoreSilkInfoVo;
+import org.dromara.analy.domain.bo.StoreSilkInfoBo;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 鍌ㄤ笣鏌滀骇閲廠ervice鎺ュ彛
+ *
+ * @author zhuguifei
+ * @date 2026-03-02
+ */
+public interface IStoreSilkInfoService {
+
+ /**
+ * 鏌ヨ鍌ㄤ笣鏌滀骇閲�
+ *
+ * @param id 涓婚敭
+ * @return 鍌ㄤ笣鏌滀骇閲�
+ */
+ StoreSilkInfoVo queryById(Long id);
+
+ /**
+ * 鍒嗛〉鏌ヨ鍌ㄤ笣鏌滀骇閲忓垪琛�
+ *
+ * @param bo 鏌ヨ鏉′欢
+ * @param pageQuery 鍒嗛〉鍙傛暟
+ * @return 鍌ㄤ笣鏌滀骇閲忓垎椤靛垪琛�
+ */
+ TableDataInfo<StoreSilkInfoVo> queryPageList(StoreSilkInfoBo bo, PageQuery pageQuery);
+
+ /**
+ * 鏌ヨ绗﹀悎鏉′欢鐨勫偍涓濇煖浜ч噺鍒楄〃
+ *
+ * @param bo 鏌ヨ鏉′欢
+ * @return 鍌ㄤ笣鏌滀骇閲忓垪琛�
+ */
+ List<StoreSilkInfoVo> queryList(StoreSilkInfoBo bo);
+
+ /**
+ * 鏂板鍌ㄤ笣鏌滀骇閲�
+ *
+ * @param bo 鍌ㄤ笣鏌滀骇閲�
+ * @return 鏄惁鏂板鎴愬姛
+ */
+ Boolean insertByBo(StoreSilkInfoBo bo);
+
+ /**
+ * 淇敼鍌ㄤ笣鏌滀骇閲�
+ *
+ * @param bo 鍌ㄤ笣鏌滀骇閲�
+ * @return 鏄惁淇敼鎴愬姛
+ */
+ Boolean updateByBo(StoreSilkInfoBo bo);
+
+ /**
+ * 鏍¢獙骞舵壒閲忓垹闄ゅ偍涓濇煖浜ч噺淇℃伅
+ *
+ * @param ids 寰呭垹闄ょ殑涓婚敭闆嗗悎
+ * @param isValid 鏄惁杩涜鏈夋晥鎬ф牎楠�
+ * @return 鏄惁鍒犻櫎鎴愬姛
+ */
+ Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
+}
diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/service/impl/FeedmatchTimeDataServiceImpl.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/service/impl/FeedmatchTimeDataServiceImpl.java
new file mode 100644
index 0000000..6169935
--- /dev/null
+++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/service/impl/FeedmatchTimeDataServiceImpl.java
@@ -0,0 +1,133 @@
+package org.dromara.analy.service.impl;
+
+import org.dromara.common.core.utils.MapstructUtils;
+import org.dromara.common.core.utils.StringUtils;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.dromara.analy.domain.bo.FeedmatchTimeDataBo;
+import org.dromara.analy.domain.vo.FeedmatchTimeDataVo;
+import org.dromara.analy.domain.FeedmatchTimeData;
+import org.dromara.analy.mapper.FeedmatchTimeDataMapper;
+import org.dromara.analy.service.IFeedmatchTimeDataService;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 鍠備笣鏈哄搴斿叧绯籗ervice涓氬姟灞傚鐞�
+ *
+ * @author zhuguifei
+ * @date 2026-03-02
+ */
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class FeedmatchTimeDataServiceImpl implements IFeedmatchTimeDataService {
+
+ private final FeedmatchTimeDataMapper baseMapper;
+
+ /**
+ * 鏌ヨ鍠備笣鏈哄搴斿叧绯�
+ *
+ * @param time 涓婚敭
+ * @return 鍠備笣鏈哄搴斿叧绯�
+ */
+ @Override
+ public FeedmatchTimeDataVo queryById(Date time){
+ return baseMapper.selectVoById(time);
+ }
+
+ /**
+ * 鍒嗛〉鏌ヨ鍠備笣鏈哄搴斿叧绯诲垪琛�
+ *
+ * @param bo 鏌ヨ鏉′欢
+ * @param pageQuery 鍒嗛〉鍙傛暟
+ * @return 鍠備笣鏈哄搴斿叧绯诲垎椤靛垪琛�
+ */
+ @Override
+ public TableDataInfo<FeedmatchTimeDataVo> queryPageList(FeedmatchTimeDataBo bo, PageQuery pageQuery) {
+ LambdaQueryWrapper<FeedmatchTimeData> lqw = buildQueryWrapper(bo);
+ Page<FeedmatchTimeDataVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+ return TableDataInfo.build(result);
+ }
+
+ /**
+ * 鏌ヨ绗﹀悎鏉′欢鐨勫杺涓濇満瀵瑰簲鍏崇郴鍒楄〃
+ *
+ * @param bo 鏌ヨ鏉′欢
+ * @return 鍠備笣鏈哄搴斿叧绯诲垪琛�
+ */
+ @Override
+ public List<FeedmatchTimeDataVo> queryList(FeedmatchTimeDataBo bo) {
+ LambdaQueryWrapper<FeedmatchTimeData> lqw = buildQueryWrapper(bo);
+ return baseMapper.selectVoList(lqw);
+ }
+
+ private LambdaQueryWrapper<FeedmatchTimeData> buildQueryWrapper(FeedmatchTimeDataBo bo) {
+ Map<String, Object> params = bo.getParams();
+ LambdaQueryWrapper<FeedmatchTimeData> lqw = Wrappers.lambdaQuery();
+ lqw.eq(bo.getTime() != null, FeedmatchTimeData::getTime, bo.getTime());
+ lqw.eq(StringUtils.isNotBlank(bo.getKey()), FeedmatchTimeData::getKey, bo.getKey());
+ return lqw;
+ }
+
+ /**
+ * 鏂板鍠備笣鏈哄搴斿叧绯�
+ *
+ * @param bo 鍠備笣鏈哄搴斿叧绯�
+ * @return 鏄惁鏂板鎴愬姛
+ */
+ @Override
+ public Boolean insertByBo(FeedmatchTimeDataBo bo) {
+ FeedmatchTimeData add = MapstructUtils.convert(bo, FeedmatchTimeData.class);
+ validEntityBeforeSave(add);
+ boolean flag = baseMapper.insert(add) > 0;
+ if (flag) {
+ bo.setTime(add.getTime());
+ }
+ return flag;
+ }
+
+ /**
+ * 淇敼鍠備笣鏈哄搴斿叧绯�
+ *
+ * @param bo 鍠備笣鏈哄搴斿叧绯�
+ * @return 鏄惁淇敼鎴愬姛
+ */
+ @Override
+ public Boolean updateByBo(FeedmatchTimeDataBo bo) {
+ FeedmatchTimeData update = MapstructUtils.convert(bo, FeedmatchTimeData.class);
+ validEntityBeforeSave(update);
+ return baseMapper.updateById(update) > 0;
+ }
+
+ /**
+ * 淇濆瓨鍓嶇殑鏁版嵁鏍¢獙
+ */
+ private void validEntityBeforeSave(FeedmatchTimeData entity){
+ //TODO 鍋氫竴浜涙暟鎹牎楠�,濡傚敮涓�绾︽潫
+ }
+
+ /**
+ * 鏍¢獙骞舵壒閲忓垹闄ゅ杺涓濇満瀵瑰簲鍏崇郴淇℃伅
+ *
+ * @param ids 寰呭垹闄ょ殑涓婚敭闆嗗悎
+ * @param isValid 鏄惁杩涜鏈夋晥鎬ф牎楠�
+ * @return 鏄惁鍒犻櫎鎴愬姛
+ */
+ @Override
+ public Boolean deleteWithValidByIds(Collection<Date> ids, Boolean isValid) {
+ if(isValid){
+ //TODO 鍋氫竴浜涗笟鍔′笂鐨勬牎楠�,鍒ゆ柇鏄惁闇�瑕佹牎楠�
+ }
+ return baseMapper.deleteByIds(ids) > 0;
+ }
+}
diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/service/impl/StoreSilkInfoServiceImpl.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/service/impl/StoreSilkInfoServiceImpl.java
new file mode 100644
index 0000000..389179e
--- /dev/null
+++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/service/impl/StoreSilkInfoServiceImpl.java
@@ -0,0 +1,156 @@
+package org.dromara.analy.service.impl;
+
+import org.dromara.common.core.utils.MapstructUtils;
+import org.dromara.common.core.utils.StringUtils;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.dromara.analy.domain.bo.StoreSilkInfoBo;
+import org.dromara.analy.domain.vo.StoreSilkInfoVo;
+import org.dromara.analy.domain.StoreSilkInfo;
+import org.dromara.analy.mapper.StoreSilkInfoMapper;
+import org.dromara.analy.service.IStoreSilkInfoService;
+import org.dromara.analy.mapper.FeedmatchTimeDataMapper;
+import org.dromara.analy.domain.FeedmatchTimeData;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+import java.util.HashMap;
+
+/**
+ * 鍌ㄤ笣鏌滀骇閲廠ervice涓氬姟灞傚鐞�
+ *
+ * @author zhuguifei
+ * @date 2026-03-02
+ */
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class StoreSilkInfoServiceImpl implements IStoreSilkInfoService {
+
+ private final StoreSilkInfoMapper baseMapper;
+ private final FeedmatchTimeDataMapper feedmatchTimeDataMapper;
+
+ /**
+ * 鏌ヨ鍌ㄤ笣鏌滀骇閲�
+ *
+ * @param id 涓婚敭
+ * @return 鍌ㄤ笣鏌滀骇閲�
+ */
+ @Override
+ public StoreSilkInfoVo queryById(Long id){
+ return baseMapper.selectVoById(id);
+ }
+
+ /**
+ * 鍒嗛〉鏌ヨ鍌ㄤ笣鏌滀骇閲忓垪琛�
+ *
+ * @param bo 鏌ヨ鏉′欢
+ * @param pageQuery 鍒嗛〉鍙傛暟
+ * @return 鍌ㄤ笣鏌滀骇閲忓垎椤靛垪琛�
+ */
+ @Override
+ public TableDataInfo<StoreSilkInfoVo> queryPageList(StoreSilkInfoBo bo, PageQuery pageQuery) {
+ LambdaQueryWrapper<StoreSilkInfo> lqw = buildQueryWrapper(bo);
+ Page<StoreSilkInfoVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+
+ queryFeedmatchData(result);
+ return TableDataInfo.build(result);
+ }
+
+ private void queryFeedmatchData(Page<StoreSilkInfoVo> page) {
+ if (page == null || page.getRecords() == null || page.getRecords().isEmpty()) {
+ return;
+ }
+ List<StoreSilkInfoVo> storeSilkInfoList = page.getRecords();
+
+ for (int i = 0; i < storeSilkInfoList.size(); i++) {
+ StoreSilkInfoVo storeSilkInfoVo = storeSilkInfoList.get(i);
+
+ }
+
+ }
+
+ /**
+ * 鏌ヨ绗﹀悎鏉′欢鐨勫偍涓濇煖浜ч噺鍒楄〃
+ *
+ * @param bo 鏌ヨ鏉′欢
+ * @return 鍌ㄤ笣鏌滀骇閲忓垪琛�
+ */
+ @Override
+ public List<StoreSilkInfoVo> queryList(StoreSilkInfoBo bo) {
+ LambdaQueryWrapper<StoreSilkInfo> lqw = buildQueryWrapper(bo);
+ return baseMapper.selectVoList(lqw);
+ }
+
+ private LambdaQueryWrapper<StoreSilkInfo> buildQueryWrapper(StoreSilkInfoBo bo) {
+ Map<String, Object> params = bo.getParams();
+ LambdaQueryWrapper<StoreSilkInfo> lqw = Wrappers.lambdaQuery();
+ lqw.orderByAsc(StoreSilkInfo::getId);
+ lqw.like(StringUtils.isNotBlank(bo.getMaterialname()), StoreSilkInfo::getMaterialname, bo.getMaterialname());
+ lqw.eq(StringUtils.isNotBlank(bo.getBatchcode()), StoreSilkInfo::getBatchcode, bo.getBatchcode());
+ lqw.eq(bo.getActualstarttime() != null, StoreSilkInfo::getActualstarttime, bo.getActualstarttime());
+ lqw.eq(bo.getDistimebegin() != null, StoreSilkInfo::getDistimebegin, bo.getDistimebegin());
+ lqw.eq(bo.getDistimeend() != null, StoreSilkInfo::getDistimeend, bo.getDistimeend());
+ lqw.eq(StringUtils.isNotBlank(bo.getSiloid()), StoreSilkInfo::getSiloid, bo.getSiloid());
+ return lqw;
+ }
+
+ /**
+ * 鏂板鍌ㄤ笣鏌滀骇閲�
+ *
+ * @param bo 鍌ㄤ笣鏌滀骇閲�
+ * @return 鏄惁鏂板鎴愬姛
+ */
+ @Override
+ public Boolean insertByBo(StoreSilkInfoBo bo) {
+ StoreSilkInfo add = MapstructUtils.convert(bo, StoreSilkInfo.class);
+ validEntityBeforeSave(add);
+ boolean flag = baseMapper.insert(add) > 0;
+ if (flag) {
+ bo.setId(add.getId());
+ }
+ return flag;
+ }
+
+ /**
+ * 淇敼鍌ㄤ笣鏌滀骇閲�
+ *
+ * @param bo 鍌ㄤ笣鏌滀骇閲�
+ * @return 鏄惁淇敼鎴愬姛
+ */
+ @Override
+ public Boolean updateByBo(StoreSilkInfoBo bo) {
+ StoreSilkInfo update = MapstructUtils.convert(bo, StoreSilkInfo.class);
+ validEntityBeforeSave(update);
+ return baseMapper.updateById(update) > 0;
+ }
+
+ /**
+ * 淇濆瓨鍓嶇殑鏁版嵁鏍¢獙
+ */
+ private void validEntityBeforeSave(StoreSilkInfo entity){
+ //TODO 鍋氫竴浜涙暟鎹牎楠�,濡傚敮涓�绾︽潫
+ }
+
+ /**
+ * 鏍¢獙骞舵壒閲忓垹闄ゅ偍涓濇煖浜ч噺淇℃伅
+ *
+ * @param ids 寰呭垹闄ょ殑涓婚敭闆嗗悎
+ * @param isValid 鏄惁杩涜鏈夋晥鎬ф牎楠�
+ * @return 鏄惁鍒犻櫎鎴愬姛
+ */
+ @Override
+ public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
+ if(isValid){
+ //TODO 鍋氫竴浜涗笟鍔′笂鐨勬牎楠�,鍒ゆ柇鏄惁闇�瑕佹牎楠�
+ }
+ return baseMapper.deleteByIds(ids) > 0;
+ }
+}
diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/md/controller/MdShiftController.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/md/controller/MdShiftController.java
new file mode 100644
index 0000000..72bc5f6
--- /dev/null
+++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/md/controller/MdShiftController.java
@@ -0,0 +1,105 @@
+package org.dromara.md.controller;
+
+import java.util.List;
+
+import lombok.RequiredArgsConstructor;
+import jakarta.servlet.http.HttpServletResponse;
+import jakarta.validation.constraints.*;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.dromara.common.idempotent.annotation.RepeatSubmit;
+import org.dromara.common.log.annotation.Log;
+import org.dromara.common.web.core.BaseController;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import org.dromara.common.log.enums.BusinessType;
+import org.dromara.common.excel.utils.ExcelUtil;
+import org.dromara.md.domain.vo.MdShiftVo;
+import org.dromara.md.domain.bo.MdShiftBo;
+import org.dromara.md.service.IMdShiftService;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+
+/**
+ * 鐝
+ *
+ * @author zhuguifei
+ * @date 2026-03-04
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/md/shift")
+public class MdShiftController extends BaseController {
+
+ private final IMdShiftService mdShiftService;
+
+ /**
+ * 鏌ヨ鐝鍒楄〃
+ */
+ @SaCheckPermission("md:shift:list")
+ @GetMapping("/list")
+ public TableDataInfo<MdShiftVo> list(MdShiftBo bo, PageQuery pageQuery) {
+ return mdShiftService.queryPageList(bo, pageQuery);
+ }
+
+ /**
+ * 瀵煎嚭鐝鍒楄〃
+ */
+ @SaCheckPermission("md:shift:export")
+ @Log(title = "鐝", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(MdShiftBo bo, HttpServletResponse response) {
+ List<MdShiftVo> list = mdShiftService.queryList(bo);
+ ExcelUtil.exportExcel(list, "鐝", MdShiftVo.class, response);
+ }
+
+ /**
+ * 鑾峰彇鐝璇︾粏淇℃伅
+ *
+ * @param id 涓婚敭
+ */
+ @SaCheckPermission("md:shift:query")
+ @GetMapping("/{id}")
+ public R<MdShiftVo> getInfo(@NotNull(message = "涓婚敭涓嶈兘涓虹┖")
+ @PathVariable String id) {
+ return R.ok(mdShiftService.queryById(id));
+ }
+
+ /**
+ * 鏂板鐝
+ */
+ @SaCheckPermission("md:shift:add")
+ @Log(title = "鐝", businessType = BusinessType.INSERT)
+ @RepeatSubmit()
+ @PostMapping()
+ public R<Void> add(@Validated(AddGroup.class) @RequestBody MdShiftBo bo) {
+ return toAjax(mdShiftService.insertByBo(bo));
+ }
+
+ /**
+ * 淇敼鐝
+ */
+ @SaCheckPermission("md:shift:edit")
+ @Log(title = "鐝", businessType = BusinessType.UPDATE)
+ @RepeatSubmit()
+ @PutMapping()
+ public R<Void> edit(@Validated(EditGroup.class) @RequestBody MdShiftBo bo) {
+ return toAjax(mdShiftService.updateByBo(bo));
+ }
+
+ /**
+ * 鍒犻櫎鐝
+ *
+ * @param ids 涓婚敭涓�
+ */
+ @SaCheckPermission("md:shift:remove")
+ @Log(title = "鐝", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{ids}")
+ public R<Void> remove(@NotEmpty(message = "涓婚敭涓嶈兘涓虹┖")
+ @PathVariable String[] ids) {
+ return toAjax(mdShiftService.deleteWithValidByIds(List.of(ids), true));
+ }
+}
diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/md/domain/MdShift.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/md/domain/MdShift.java
new file mode 100644
index 0000000..2c40db0
--- /dev/null
+++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/md/domain/MdShift.java
@@ -0,0 +1,93 @@
+package org.dromara.md.domain;
+
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+import java.io.Serial;
+
+/**
+ * 鐝瀵硅薄 MD_SHIFT
+ *
+ * @author zhuguifei
+ * @date 2026-03-04
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("MD_SHIFT")
+public class MdShift extends BaseEntity {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * ud
+ */
+ @TableId(value = "ID")
+ private String id;
+
+ /**
+ * 杞﹂棿澶栭敭
+ */
+ private String wsId;
+
+ /**
+ * 缂栫爜
+ */
+ private String code;
+
+ /**
+ * 鍚嶇О
+ */
+ private String name;
+
+ /**
+ * 鐝寮�濮嬫椂闂�
+ */
+ private String stim;
+
+ /**
+ * 鐝缁撴潫鏃堕棿
+ */
+ private String etim;
+
+ /**
+ * 鎺掑簭
+ */
+ private Long seq;
+
+ /**
+ * 鍚敤
+ */
+ private Long enable;
+
+ /**
+ * 鍒犻櫎
+ */
+ private Long del;
+
+ /**
+ * 鍒涘缓鐢ㄦ埛
+ */
+ private String createUserName;
+
+ /**
+ * 鍒涘缓鏃堕棿
+ */
+ private Date createUserTime;
+
+ /**
+ * 鏇存柊鐢ㄦ埛
+ */
+ private String updateUserName;
+
+ /**
+ * 鏇存柊鏃堕棿
+ */
+ private Date updateUserTime;
+
+
+}
diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/md/domain/bo/MdShiftBo.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/md/domain/bo/MdShiftBo.java
new file mode 100644
index 0000000..8e19413
--- /dev/null
+++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/md/domain/bo/MdShiftBo.java
@@ -0,0 +1,92 @@
+package org.dromara.md.domain.bo;
+
+import org.dromara.md.domain.MdShift;
+import org.dromara.common.mybatis.core.domain.BaseEntity;
+import org.dromara.common.core.validate.AddGroup;
+import org.dromara.common.core.validate.EditGroup;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import jakarta.validation.constraints.*;
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+/**
+ * 鐝涓氬姟瀵硅薄 MD_SHIFT
+ *
+ * @author zhuguifei
+ * @date 2026-03-04
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@AutoMapper(target = MdShift.class, reverseConvertGenerate = false)
+public class MdShiftBo extends BaseEntity {
+
+ /**
+ * ud
+ */
+ @NotBlank(message = "ud涓嶈兘涓虹┖", groups = { EditGroup.class })
+ private String id;
+
+ /**
+ * 杞﹂棿澶栭敭
+ */
+ private String wsId;
+
+ /**
+ * 缂栫爜
+ */
+ private String code;
+
+ /**
+ * 鍚嶇О
+ */
+ private String name;
+
+ /**
+ * 鐝寮�濮嬫椂闂�
+ */
+ private String stim;
+
+ /**
+ * 鐝缁撴潫鏃堕棿
+ */
+ private String etim;
+
+ /**
+ * 鎺掑簭
+ */
+ private Long seq;
+
+ /**
+ * 鍚敤
+ */
+ private Long enable;
+
+ /**
+ * 鍒犻櫎
+ */
+ private Long del;
+
+ /**
+ * 鍒涘缓鐢ㄦ埛
+ */
+ private String createUserName;
+
+ /**
+ * 鍒涘缓鏃堕棿
+ */
+ private Date createUserTime;
+
+ /**
+ * 鏇存柊鐢ㄦ埛
+ */
+ private String updateUserName;
+
+ /**
+ * 鏇存柊鏃堕棿
+ */
+ private Date updateUserTime;
+
+
+}
diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/md/domain/vo/MdShiftVo.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/md/domain/vo/MdShiftVo.java
new file mode 100644
index 0000000..9d9e8cd
--- /dev/null
+++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/md/domain/vo/MdShiftVo.java
@@ -0,0 +1,112 @@
+package org.dromara.md.domain.vo;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.dromara.md.domain.MdShift;
+import cn.idev.excel.annotation.ExcelIgnoreUnannotated;
+import cn.idev.excel.annotation.ExcelProperty;
+import org.dromara.common.excel.annotation.ExcelDictFormat;
+import org.dromara.common.excel.convert.ExcelDictConvert;
+import io.github.linpeilie.annotations.AutoMapper;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+
+
+/**
+ * 鐝瑙嗗浘瀵硅薄 MD_SHIFT
+ *
+ * @author zhuguifei
+ * @date 2026-03-04
+ */
+@Data
+@ExcelIgnoreUnannotated
+@AutoMapper(target = MdShift.class)
+public class MdShiftVo implements Serializable {
+
+ @Serial
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * ud
+ */
+ @ExcelProperty(value = "ud")
+ private String id;
+
+ /**
+ * 杞﹂棿澶栭敭
+ */
+ @ExcelProperty(value = "杞﹂棿澶栭敭")
+ private String wsId;
+
+ /**
+ * 缂栫爜
+ */
+ @ExcelProperty(value = "缂栫爜")
+ private String code;
+
+ /**
+ * 鍚嶇О
+ */
+ @ExcelProperty(value = "鍚嶇О")
+ private String name;
+
+ /**
+ * 鐝寮�濮嬫椂闂�
+ */
+ @ExcelProperty(value = "鐝寮�濮嬫椂闂�")
+ private String stim;
+
+ /**
+ * 鐝缁撴潫鏃堕棿
+ */
+ @ExcelProperty(value = "鐝缁撴潫鏃堕棿")
+ private String etim;
+
+ /**
+ * 鎺掑簭
+ */
+ @ExcelProperty(value = "鎺掑簭")
+ private Long seq;
+
+ /**
+ * 鍚敤
+ */
+ @ExcelProperty(value = "鍚敤")
+ private Long enable;
+
+ /**
+ * 鍒犻櫎
+ */
+ @ExcelProperty(value = "鍒犻櫎")
+ private Long del;
+
+ /**
+ * 鍒涘缓鐢ㄦ埛
+ */
+ @ExcelProperty(value = "鍒涘缓鐢ㄦ埛")
+ private String createUserName;
+
+ /**
+ * 鍒涘缓鏃堕棿
+ */
+ @ExcelProperty(value = "鍒涘缓鏃堕棿")
+ private Date createUserTime;
+
+ /**
+ * 鏇存柊鐢ㄦ埛
+ */
+ @ExcelProperty(value = "鏇存柊鐢ㄦ埛")
+ private String updateUserName;
+
+ /**
+ * 鏇存柊鏃堕棿
+ */
+ @ExcelProperty(value = "鏇存柊鏃堕棿")
+ private Date updateUserTime;
+
+
+}
diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/md/mapper/MdShiftMapper.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/md/mapper/MdShiftMapper.java
new file mode 100644
index 0000000..836d099
--- /dev/null
+++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/md/mapper/MdShiftMapper.java
@@ -0,0 +1,15 @@
+package org.dromara.md.mapper;
+
+import org.dromara.md.domain.MdShift;
+import org.dromara.md.domain.vo.MdShiftVo;
+import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
+
+/**
+ * 鐝Mapper鎺ュ彛
+ *
+ * @author zhuguifei
+ * @date 2026-03-04
+ */
+public interface MdShiftMapper extends BaseMapperPlus<MdShift, MdShiftVo> {
+
+}
diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/md/service/IMdShiftService.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/md/service/IMdShiftService.java
new file mode 100644
index 0000000..9d38f20
--- /dev/null
+++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/md/service/IMdShiftService.java
@@ -0,0 +1,68 @@
+package org.dromara.md.service;
+
+import org.dromara.md.domain.vo.MdShiftVo;
+import org.dromara.md.domain.bo.MdShiftBo;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 鐝Service鎺ュ彛
+ *
+ * @author zhuguifei
+ * @date 2026-03-04
+ */
+public interface IMdShiftService {
+
+ /**
+ * 鏌ヨ鐝
+ *
+ * @param id 涓婚敭
+ * @return 鐝
+ */
+ MdShiftVo queryById(String id);
+
+ /**
+ * 鍒嗛〉鏌ヨ鐝鍒楄〃
+ *
+ * @param bo 鏌ヨ鏉′欢
+ * @param pageQuery 鍒嗛〉鍙傛暟
+ * @return 鐝鍒嗛〉鍒楄〃
+ */
+ TableDataInfo<MdShiftVo> queryPageList(MdShiftBo bo, PageQuery pageQuery);
+
+ /**
+ * 鏌ヨ绗﹀悎鏉′欢鐨勭彮娆″垪琛�
+ *
+ * @param bo 鏌ヨ鏉′欢
+ * @return 鐝鍒楄〃
+ */
+ List<MdShiftVo> queryList(MdShiftBo bo);
+
+ /**
+ * 鏂板鐝
+ *
+ * @param bo 鐝
+ * @return 鏄惁鏂板鎴愬姛
+ */
+ Boolean insertByBo(MdShiftBo bo);
+
+ /**
+ * 淇敼鐝
+ *
+ * @param bo 鐝
+ * @return 鏄惁淇敼鎴愬姛
+ */
+ Boolean updateByBo(MdShiftBo bo);
+
+ /**
+ * 鏍¢獙骞舵壒閲忓垹闄ょ彮娆′俊鎭�
+ *
+ * @param ids 寰呭垹闄ょ殑涓婚敭闆嗗悎
+ * @param isValid 鏄惁杩涜鏈夋晥鎬ф牎楠�
+ * @return 鏄惁鍒犻櫎鎴愬姛
+ */
+ Boolean deleteWithValidByIds(Collection<String> ids, Boolean isValid);
+}
diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/md/service/impl/MdShiftServiceImpl.java b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/md/service/impl/MdShiftServiceImpl.java
new file mode 100644
index 0000000..8c697b5
--- /dev/null
+++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/md/service/impl/MdShiftServiceImpl.java
@@ -0,0 +1,134 @@
+package org.dromara.md.service.impl;
+
+import org.dromara.common.core.utils.MapstructUtils;
+import org.dromara.common.core.utils.StringUtils;
+import org.dromara.common.mybatis.core.page.TableDataInfo;
+import org.dromara.common.mybatis.core.page.PageQuery;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.dromara.md.domain.bo.MdShiftBo;
+import org.dromara.md.domain.vo.MdShiftVo;
+import org.dromara.md.domain.MdShift;
+import org.dromara.md.mapper.MdShiftMapper;
+import org.dromara.md.service.IMdShiftService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 鐝Service涓氬姟灞傚鐞�
+ *
+ * @author zhuguifei
+ * @date 2026-03-04
+ */
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class MdShiftServiceImpl implements IMdShiftService {
+
+ private final MdShiftMapper baseMapper;
+
+ /**
+ * 鏌ヨ鐝
+ *
+ * @param id 涓婚敭
+ * @return 鐝
+ */
+ @Override
+ public MdShiftVo queryById(String id){
+ return baseMapper.selectVoById(id);
+ }
+
+ /**
+ * 鍒嗛〉鏌ヨ鐝鍒楄〃
+ *
+ * @param bo 鏌ヨ鏉′欢
+ * @param pageQuery 鍒嗛〉鍙傛暟
+ * @return 鐝鍒嗛〉鍒楄〃
+ */
+ @Override
+ public TableDataInfo<MdShiftVo> queryPageList(MdShiftBo bo, PageQuery pageQuery) {
+ LambdaQueryWrapper<MdShift> lqw = buildQueryWrapper(bo);
+ Page<MdShiftVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+ return TableDataInfo.build(result);
+ }
+
+ /**
+ * 鏌ヨ绗﹀悎鏉′欢鐨勭彮娆″垪琛�
+ *
+ * @param bo 鏌ヨ鏉′欢
+ * @return 鐝鍒楄〃
+ */
+ @Override
+ public List<MdShiftVo> queryList(MdShiftBo bo) {
+ LambdaQueryWrapper<MdShift> lqw = buildQueryWrapper(bo);
+ return baseMapper.selectVoList(lqw);
+ }
+
+ private LambdaQueryWrapper<MdShift> buildQueryWrapper(MdShiftBo bo) {
+ Map<String, Object> params = bo.getParams();
+ LambdaQueryWrapper<MdShift> lqw = Wrappers.lambdaQuery();
+ lqw.orderByAsc(MdShift::getId);
+ lqw.eq(StringUtils.isNotBlank(bo.getCode()), MdShift::getCode, bo.getCode());
+ lqw.like(StringUtils.isNotBlank(bo.getName()), MdShift::getName, bo.getName());
+ lqw.eq(bo.getEnable() != null, MdShift::getEnable, bo.getEnable());
+ return lqw;
+ }
+
+ /**
+ * 鏂板鐝
+ *
+ * @param bo 鐝
+ * @return 鏄惁鏂板鎴愬姛
+ */
+ @Override
+ public Boolean insertByBo(MdShiftBo bo) {
+ MdShift add = MapstructUtils.convert(bo, MdShift.class);
+ validEntityBeforeSave(add);
+ boolean flag = baseMapper.insert(add) > 0;
+ if (flag) {
+ bo.setId(add.getId());
+ }
+ return flag;
+ }
+
+ /**
+ * 淇敼鐝
+ *
+ * @param bo 鐝
+ * @return 鏄惁淇敼鎴愬姛
+ */
+ @Override
+ public Boolean updateByBo(MdShiftBo bo) {
+ MdShift update = MapstructUtils.convert(bo, MdShift.class);
+ validEntityBeforeSave(update);
+ return baseMapper.updateById(update) > 0;
+ }
+
+ /**
+ * 淇濆瓨鍓嶇殑鏁版嵁鏍¢獙
+ */
+ private void validEntityBeforeSave(MdShift entity){
+ //TODO 鍋氫竴浜涙暟鎹牎楠�,濡傚敮涓�绾︽潫
+ }
+
+ /**
+ * 鏍¢獙骞舵壒閲忓垹闄ょ彮娆′俊鎭�
+ *
+ * @param ids 寰呭垹闄ょ殑涓婚敭闆嗗悎
+ * @param isValid 鏄惁杩涜鏈夋晥鎬ф牎楠�
+ * @return 鏄惁鍒犻櫎鎴愬姛
+ */
+ @Override
+ public Boolean deleteWithValidByIds(Collection<String> ids, Boolean isValid) {
+ if(isValid){
+ //TODO 鍋氫竴浜涗笟鍔′笂鐨勬牎楠�,鍒ゆ柇鏄惁闇�瑕佹牎楠�
+ }
+ return baseMapper.deleteByIds(ids) > 0;
+ }
+}
diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/resources/mapper/analy/FeedmatchTimeDataMapper.xml b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/resources/mapper/analy/FeedmatchTimeDataMapper.xml
new file mode 100644
index 0000000..2c37079
--- /dev/null
+++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/resources/mapper/analy/FeedmatchTimeDataMapper.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+ "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.dromara.analy.mapper.FeedmatchTimeDataMapper">
+</mapper>
diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/resources/mapper/analy/StoreSilkInfoMapper.xml b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/resources/mapper/analy/StoreSilkInfoMapper.xml
new file mode 100644
index 0000000..7ba13f7
--- /dev/null
+++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/resources/mapper/analy/StoreSilkInfoMapper.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+ "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.dromara.analy.mapper.StoreSilkInfoMapper">
+</mapper>
diff --git a/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/resources/mapper/md/MdShiftMapper.xml b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/resources/mapper/md/MdShiftMapper.xml
new file mode 100644
index 0000000..552cf76
--- /dev/null
+++ b/RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/resources/mapper/md/MdShiftMapper.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE mapper
+ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+ "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="org.dromara.md.mapper.MdShiftMapper">
+</mapper>
--
Gitblit v1.9.3