广丰卷烟厂数采质量分析系统
feat(moudule(qa)): 1.新增Oracle多数据源
2.新增喂丝机对应关系、第三方储丝柜信息视图等
已修改4个文件
已添加23个文件
2046 ■■■■■ 文件已修改
RuoYi-Vue-Plus/ruoyi-admin/pom.xml 16 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
RuoYi-Vue-Plus/ruoyi-admin/src/main/resources/application-dev.yml 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
RuoYi-Vue-Plus/ruoyi-modules/ruoyi-generator/pom.xml 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/controller/FeedmatchTimeDataController.java 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/controller/StoreSilkInfoController.java 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/domain/FeedmatchTimeData.java 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/domain/StoreSilkInfo.java 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/domain/bo/FeedmatchTimeDataBo.java 163 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/domain/bo/StoreSilkInfoBo.java 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/domain/vo/FeedmatchTimeDataVo.java 196 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/domain/vo/StoreSilkInfoVo.java 100 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/mapper/FeedmatchTimeDataMapper.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/mapper/StoreSilkInfoMapper.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/service/IFeedmatchTimeDataService.java 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/service/IStoreSilkInfoService.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/service/impl/FeedmatchTimeDataServiceImpl.java 133 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/service/impl/StoreSilkInfoServiceImpl.java 156 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/md/controller/MdShiftController.java 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/md/domain/MdShift.java 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/md/domain/bo/MdShiftBo.java 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/md/domain/vo/MdShiftVo.java 112 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/md/mapper/MdShiftMapper.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/md/service/IMdShiftService.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/md/service/impl/MdShiftServiceImpl.java 134 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/resources/mapper/analy/FeedmatchTimeDataMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/resources/mapper/analy/StoreSilkInfoMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/resources/mapper/md/MdShiftMapper.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
RuoYi-Vue-Plus/ruoyi-admin/pom.xml
@@ -25,15 +25,15 @@
<!--        &lt;!&ndash; mp支持的数据库均支持 åªéœ€è¦å¢žåŠ å¯¹åº”çš„jdbc依赖即可 &ndash;&gt;-->
<!--        &lt;!&ndash; Oracle &ndash;&gt;-->
<!--        <dependency>-->
<!--            <groupId>com.oracle.database.jdbc</groupId>-->
<!--            <artifactId>ojdbc8</artifactId>-->
<!--        </dependency>-->
        <dependency>
            <groupId>com.oracle.database.jdbc</groupId>
            <artifactId>ojdbc8</artifactId>
        </dependency>
<!--        &lt;!&ndash; å…¼å®¹oracle低版本 &ndash;&gt;-->
<!--        <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>
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
RuoYi-Vue-Plus/ruoyi-modules/ruoyi-generator/pom.xml
@@ -66,11 +66,11 @@
        </dependency>
        <!-- anyline支持100+种类型数据库 æ·»åŠ å¯¹åº”çš„jdbc依赖与anyline对应数据库依赖包即可 -->
<!--        <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>
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));
    }
}
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));
    }
}
RuoYi-Vue-Plus/ruoyi-modules/ruoyi-qa/src/main/java/org/dromara/analy/domain/FeedmatchTimeData.java
old mode 100755 new mode 100644
@@ -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;
}
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;
}
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;
}
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;
}
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;
}
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;
}
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;
/**
 * å–‚丝机对应关系Mapper接口
 *
 * @author zhuguifei
 * @date 2026-03-02
 */
public interface FeedmatchTimeDataMapper extends BaseMapperPlus<FeedmatchTimeData, FeedmatchTimeDataVo> {
}
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;
/**
 * å‚¨ä¸æŸœäº§é‡Mapper接口
 *
 * @author zhuguifei
 * @date 2026-03-02
 */
public interface StoreSilkInfoMapper extends BaseMapperPlus<StoreSilkInfo, StoreSilkInfoVo> {
}
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;
/**
 * å–‚丝机对应关系Service接口
 *
 * @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);
}
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;
/**
 * å‚¨ä¸æŸœäº§é‡Service接口
 *
 * @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);
}
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;
/**
 * å–‚丝机对应关系Service业务层处理
 *
 * @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;
    }
}
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;
/**
 * å‚¨ä¸æŸœäº§é‡Service业务层处理
 *
 * @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;
    }
}
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));
    }
}
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;
}
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;
}
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;
}
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> {
}
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);
}
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;
    }
}
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>
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>
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>