From b3f5792c1778c919e6f839992b3a112208f9a22c Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期四, 05 三月 2026 16:45:02 +0800
Subject: [PATCH] lims模块

---
 src/main/java/com/ruoyi/lims/service/impl/ExperimentServiceImpl.java      |   24 +
 src/main/resources/mapper/lims/DataCollectionMapper.xml                   |   28 +
 src/main/java/com/ruoyi/lims/service/impl/RealtimeMonitorServiceImpl.java |   24 +
 src/main/java/com/ruoyi/lims/service/DataInterfaceService.java            |   11 
 src/main/resources/mapper/lims/ExperimentMapper.xml                       |   27 +
 src/main/resources/mapper/lims/SampleMapper.xml                           |   26 +
 src/main/java/com/ruoyi/lims/service/impl/SampleServiceImpl.java          |   24 +
 src/main/java/com/ruoyi/lims/mapper/RealtimeMonitorMapper.java            |    9 
 src/main/java/com/ruoyi/lims/controller/SampleController.java             |   55 ++
 src/main/java/com/ruoyi/lims/pojo/Sample.java                             |  118 +++++
 src/main/java/com/ruoyi/lims/pojo/DataInterface.java                      |  112 +++++
 src/main/java/com/ruoyi/lims/controller/DataCollectionController.java     |   55 ++
 src/main/java/com/ruoyi/lims/mapper/DataInterfaceMapper.java              |    9 
 src/main/java/com/ruoyi/lims/service/DataCollectionService.java           |   11 
 src/main/java/com/ruoyi/lims/controller/RealtimeMonitorController.java    |   49 ++
 src/main/java/com/ruoyi/lims/controller/ExperimentController.java         |   55 ++
 src/main/java/com/ruoyi/lims/service/ExperimentService.java               |   11 
 src/main/java/com/ruoyi/lims/service/impl/DataInterfaceServiceImpl.java   |   40 +
 src/main/resources/mapper/lims/RealtimeMonitorMapper.xml                  |   32 +
 src/main/java/com/ruoyi/lims/service/impl/DataCollectionServiceImpl.java  |   24 +
 src/main/resources/mapper/lims/DataInterfaceMapper.xml                    |   25 +
 src/main/java/com/ruoyi/lims/mapper/DataCollectionMapper.java             |    9 
 src/main/java/com/ruoyi/lims/pojo/RealtimeMonitor.java                    |  137 ++++++
 src/main/java/com/ruoyi/lims/service/RealtimeMonitorService.java          |   13 
 src/main/java/com/ruoyi/lims/pojo/Experiment.java                         |  122 +++++
 src/main/java/com/ruoyi/lims/service/SampleService.java                   |   11 
 src/main/java/com/ruoyi/lims/controller/DataInterfaceController.java      |   57 ++
 src/main/java/com/ruoyi/lims/mapper/ExperimentMapper.java                 |    9 
 src/main/java/com/ruoyi/lims/pojo/DataCollection.java                     |  128 +++++
 src/main/java/com/ruoyi/lims/mapper/SampleMapper.java                     |    9 
 30 files changed, 1,264 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/ruoyi/lims/controller/DataCollectionController.java b/src/main/java/com/ruoyi/lims/controller/DataCollectionController.java
new file mode 100644
index 0000000..12dfbeb
--- /dev/null
+++ b/src/main/java/com/ruoyi/lims/controller/DataCollectionController.java
@@ -0,0 +1,55 @@
+package com.ruoyi.lims.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.lims.pojo.DataCollection;
+import com.ruoyi.lims.service.DataCollectionService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+@AllArgsConstructor
+@RequestMapping("/lims/dataCollection")
+@Api(value = "DataCollection", tags = "鏁版嵁閲囬泦涓庡鐞嗚〃")
+public class DataCollectionController {
+
+    private DataCollectionService dataCollectionservice;
+
+    @GetMapping("/listPage")
+    @ApiOperation("鍒嗛〉鏌ヨ鎵�鏈夋暟鎹噰闆嗕笌澶勭悊琛�")
+    public AjaxResult listPage(Page<DataCollection> page, DataCollection dataCollection) {
+        IPage<DataCollection> listPage = dataCollectionservice.listPage(page, dataCollection);
+        return AjaxResult.success(listPage);
+    }
+
+    @GetMapping("/{id}")
+    @ApiOperation("鏍规嵁ID鏌ヨ鏁版嵁閲囬泦涓庡鐞嗚〃")
+    public AjaxResult getDataCollection(@PathVariable Long id) {
+        return AjaxResult.success(dataCollectionservice.getById(id));
+    }
+
+    @PostMapping("/add")
+    @ApiOperation("鏂板鏁版嵁閲囬泦涓庡鐞嗚〃")
+    public AjaxResult add(@RequestBody DataCollection dataCollection) {
+        return AjaxResult.success(dataCollectionservice.save(dataCollection));
+    }
+
+    @PostMapping("/update")
+    @ApiOperation("淇敼鏁版嵁閲囬泦涓庡鐞嗚〃")
+    public AjaxResult update(@RequestBody DataCollection dataCollection) {
+        return AjaxResult.success(dataCollectionservice.updateById(dataCollection));
+    }
+
+    @DeleteMapping("/delete")
+    @ApiOperation("鍒犻櫎鏁版嵁閲囬泦涓庡鐞嗚〃")
+    public AjaxResult delete(@RequestBody List<Long> ids) {
+        if (CollectionUtils.isEmpty(ids)) return AjaxResult.error("璇蜂紶鍏ヨ鍒犻櫎鐨処D");
+        return AjaxResult.success(dataCollectionservice.removeBatchByIds(ids));
+    }
+}
diff --git a/src/main/java/com/ruoyi/lims/controller/DataInterfaceController.java b/src/main/java/com/ruoyi/lims/controller/DataInterfaceController.java
new file mode 100644
index 0000000..387493a
--- /dev/null
+++ b/src/main/java/com/ruoyi/lims/controller/DataInterfaceController.java
@@ -0,0 +1,57 @@
+package com.ruoyi.lims.controller;
+
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.lims.pojo.DataInterface;
+import com.ruoyi.lims.service.DataInterfaceService;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+import io.swagger.annotations.Api;
+import org.springframework.web.bind.annotation.*;
+import lombok.AllArgsConstructor;
+import io.swagger.annotations.ApiOperation;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+
+import java.util.List;
+
+@RestController
+@AllArgsConstructor
+@RequestMapping("/lims/dataInterface")
+@Api(value = "DataInterface", tags = "鏁版嵁鎺ュ彛绠$悊琛�")
+public class DataInterfaceController {
+
+    private DataInterfaceService dataInterfaceservice;
+
+    @GetMapping("/listPage")
+    @ApiOperation("鍒嗛〉鏌ヨ鎵�鏈夋暟鎹帴鍙g鐞嗚〃")
+    public AjaxResult listPage(Page<DataInterface> page, DataInterface dataInterface) {
+        IPage<DataInterface> listPage = dataInterfaceservice.listPage(page, dataInterface);
+        return AjaxResult.success(listPage);
+    }
+
+    @GetMapping("/{id}")
+    @ApiOperation("鏍规嵁ID鏌ヨ鏁版嵁鎺ュ彛")
+    public AjaxResult getDataInterface(@PathVariable Long id) {
+        return AjaxResult.success(dataInterfaceservice.getById(id));
+    }
+
+    @PostMapping("/add")
+    @ApiOperation("鏂板鏁版嵁鎺ュ彛绠$悊琛�")
+    public AjaxResult add(@RequestBody DataInterface dataInterface) {
+        return AjaxResult.success(dataInterfaceservice.save(dataInterface));
+    }
+
+    @PostMapping("/update")
+    @ApiOperation("淇敼鏁版嵁鎺ュ彛绠$悊琛�")
+    public AjaxResult update(@RequestBody DataInterface dataInterface) {
+        return AjaxResult.success(dataInterfaceservice.updateById(dataInterface));
+    }
+
+    @DeleteMapping("/delete")
+    @ApiOperation("鍒犻櫎鏁版嵁鎺ュ彛绠$悊琛�")
+    public AjaxResult delete(@RequestBody List<Long> ids) {
+        if (CollectionUtils.isEmpty(ids)) return AjaxResult.error("璇蜂紶鍏ヨ鍒犻櫎鐨処D");
+        return AjaxResult.success(dataInterfaceservice.removeBatchByIds(ids));
+    }
+}
diff --git a/src/main/java/com/ruoyi/lims/controller/ExperimentController.java b/src/main/java/com/ruoyi/lims/controller/ExperimentController.java
new file mode 100644
index 0000000..f85584d
--- /dev/null
+++ b/src/main/java/com/ruoyi/lims/controller/ExperimentController.java
@@ -0,0 +1,55 @@
+package com.ruoyi.lims.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.lims.pojo.Experiment;
+import com.ruoyi.lims.service.ExperimentService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+@AllArgsConstructor
+@RequestMapping("/lims/experiment")
+@Api(value = "Experiment", tags = "瀹為獙绠$悊琛�")
+public class ExperimentController {
+
+    private ExperimentService experimentservice;
+
+    @GetMapping("/listPage")
+    @ApiOperation("鍒嗛〉鏌ヨ鎵�鏈夊疄楠岀鐞嗚〃")
+    public AjaxResult listPage(Page<Experiment> page, Experiment experiment) {
+        IPage<Experiment> listPage = experimentservice.listPage(page, experiment);
+        return AjaxResult.success(listPage);
+    }
+
+    @GetMapping("/{id}")
+    @ApiOperation("鏍规嵁ID鏌ヨ瀹為獙绠$悊琛�")
+    public AjaxResult getExperiment(@PathVariable Long id) {
+        return AjaxResult.success(experimentservice.getById(id));
+    }
+
+    @PostMapping("/add")
+    @ApiOperation("鏂板瀹為獙绠$悊琛�")
+    public AjaxResult add(@RequestBody Experiment experiment) {
+        return AjaxResult.success(experimentservice.save(experiment));
+    }
+
+    @PostMapping("/update")
+    @ApiOperation("淇敼瀹為獙绠$悊琛�")
+    public AjaxResult update(@RequestBody Experiment experiment) {
+        return AjaxResult.success(experimentservice.updateById(experiment));
+    }
+
+    @DeleteMapping("/delete")
+    @ApiOperation("鍒犻櫎瀹為獙绠$悊琛�")
+    public AjaxResult delete(@RequestBody List<Long> ids) {
+        if (CollectionUtils.isEmpty(ids)) return AjaxResult.error("璇蜂紶鍏ヨ鍒犻櫎鐨処D");
+        return AjaxResult.success(experimentservice.removeBatchByIds(ids));
+    }
+}
diff --git a/src/main/java/com/ruoyi/lims/controller/RealtimeMonitorController.java b/src/main/java/com/ruoyi/lims/controller/RealtimeMonitorController.java
new file mode 100644
index 0000000..5af8fdd
--- /dev/null
+++ b/src/main/java/com/ruoyi/lims/controller/RealtimeMonitorController.java
@@ -0,0 +1,49 @@
+package com.ruoyi.lims.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.lims.pojo.RealtimeMonitor;
+import com.ruoyi.lims.service.RealtimeMonitorService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+@AllArgsConstructor
+@RequestMapping("/lims/realtimeMonitor")
+@Api(value = "RealtimeMonitor", tags = "瀹炴椂鐩戞帶涓庨璀﹁〃")
+public class RealtimeMonitorController {
+
+    private RealtimeMonitorService realtimeMonitorservice;
+
+    @GetMapping("/listPage")
+    @ApiOperation("鍒嗛〉鏌ヨ鎵�鏈夊疄鏃剁洃鎺т笌棰勮琛�")
+    public AjaxResult listPage(Page<RealtimeMonitor> page, RealtimeMonitor realtimeMonitor) {
+        IPage<RealtimeMonitor> listPage = realtimeMonitorservice.listPage(page, realtimeMonitor);
+        return AjaxResult.success(listPage);
+    }
+
+    @PostMapping("/add")
+    @ApiOperation("鏂板瀹炴椂鐩戞帶涓庨璀﹁〃")
+    public AjaxResult add(@RequestBody RealtimeMonitor realtimeMonitor) {
+        return AjaxResult.success(realtimeMonitorservice.save(realtimeMonitor));
+    }
+
+    @PostMapping("/update")
+    @ApiOperation("淇敼瀹炴椂鐩戞帶涓庨璀﹁〃")
+    public AjaxResult update(@RequestBody RealtimeMonitor realtimeMonitor) {
+        return AjaxResult.success(realtimeMonitorservice.updateById(realtimeMonitor));
+    }
+
+    @DeleteMapping("/delete")
+    @ApiOperation("鍒犻櫎瀹炴椂鐩戞帶涓庨璀﹁〃")
+    public AjaxResult delete(@RequestBody List<Long> ids) {
+        if (CollectionUtils.isEmpty(ids)) return AjaxResult.error("璇蜂紶鍏ヨ鍒犻櫎鐨処D");
+        return AjaxResult.success(realtimeMonitorservice.removeBatchByIds(ids));
+    }
+}
diff --git a/src/main/java/com/ruoyi/lims/controller/SampleController.java b/src/main/java/com/ruoyi/lims/controller/SampleController.java
new file mode 100644
index 0000000..b707596
--- /dev/null
+++ b/src/main/java/com/ruoyi/lims/controller/SampleController.java
@@ -0,0 +1,55 @@
+package com.ruoyi.lims.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import com.ruoyi.lims.pojo.Sample;
+import com.ruoyi.lims.service.SampleService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+@AllArgsConstructor
+@RequestMapping("/lims/sample")
+@Api(value = "Sample", tags = "鏍峰搧绠$悊琛�")
+public class SampleController {
+
+    private SampleService sampleservice;
+
+    @GetMapping("/listPage")
+    @ApiOperation("鍒嗛〉鏌ヨ鎵�鏈夋牱鍝佺鐞嗚〃")
+    public AjaxResult listPage(Page<Sample> page, Sample sample) {
+        IPage<Sample> listPage = sampleservice.listPage(page, sample);
+        return AjaxResult.success(listPage);
+    }
+
+    @GetMapping("/{id}")
+    @ApiOperation("鏍规嵁ID鏌ヨ鏍峰搧绠$悊琛�")
+    public AjaxResult getSample(@PathVariable Long id) {
+        return AjaxResult.success(sampleservice.getById(id));
+    }
+
+    @PostMapping("/add")
+    @ApiOperation("鏂板鏍峰搧绠$悊琛�")
+    public AjaxResult add(@RequestBody Sample sample) {
+        return AjaxResult.success(sampleservice.save(sample));
+    }
+
+    @PostMapping("/update")
+    @ApiOperation("淇敼鏍峰搧绠$悊琛�")
+    public AjaxResult update(@RequestBody Sample sample) {
+        return AjaxResult.success(sampleservice.updateById(sample));
+    }
+
+    @DeleteMapping("/delete")
+    @ApiOperation("鍒犻櫎鏍峰搧绠$悊琛�")
+    public AjaxResult delete(@RequestBody List<Long> ids) {
+        if (CollectionUtils.isEmpty(ids)) return AjaxResult.error("璇蜂紶鍏ヨ鍒犻櫎鐨処D");
+        return AjaxResult.success(sampleservice.removeBatchByIds(ids));
+    }
+}
diff --git a/src/main/java/com/ruoyi/lims/mapper/DataCollectionMapper.java b/src/main/java/com/ruoyi/lims/mapper/DataCollectionMapper.java
new file mode 100644
index 0000000..3c9c251
--- /dev/null
+++ b/src/main/java/com/ruoyi/lims/mapper/DataCollectionMapper.java
@@ -0,0 +1,9 @@
+package com.ruoyi.lims.mapper;
+
+import com.ruoyi.lims.pojo.DataCollection;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface DataCollectionMapper extends BaseMapper<DataCollection> {
+}
diff --git a/src/main/java/com/ruoyi/lims/mapper/DataInterfaceMapper.java b/src/main/java/com/ruoyi/lims/mapper/DataInterfaceMapper.java
new file mode 100644
index 0000000..6aed5c3
--- /dev/null
+++ b/src/main/java/com/ruoyi/lims/mapper/DataInterfaceMapper.java
@@ -0,0 +1,9 @@
+package com.ruoyi.lims.mapper;
+
+import com.ruoyi.lims.pojo.DataInterface;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface DataInterfaceMapper extends BaseMapper<DataInterface> {
+}
diff --git a/src/main/java/com/ruoyi/lims/mapper/ExperimentMapper.java b/src/main/java/com/ruoyi/lims/mapper/ExperimentMapper.java
new file mode 100644
index 0000000..14fad08
--- /dev/null
+++ b/src/main/java/com/ruoyi/lims/mapper/ExperimentMapper.java
@@ -0,0 +1,9 @@
+package com.ruoyi.lims.mapper;
+
+import com.ruoyi.lims.pojo.Experiment;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface ExperimentMapper extends BaseMapper<Experiment> {
+}
diff --git a/src/main/java/com/ruoyi/lims/mapper/RealtimeMonitorMapper.java b/src/main/java/com/ruoyi/lims/mapper/RealtimeMonitorMapper.java
new file mode 100644
index 0000000..a142064
--- /dev/null
+++ b/src/main/java/com/ruoyi/lims/mapper/RealtimeMonitorMapper.java
@@ -0,0 +1,9 @@
+package com.ruoyi.lims.mapper;
+
+import com.ruoyi.lims.pojo.RealtimeMonitor;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface RealtimeMonitorMapper extends BaseMapper<RealtimeMonitor> {
+}
diff --git a/src/main/java/com/ruoyi/lims/mapper/SampleMapper.java b/src/main/java/com/ruoyi/lims/mapper/SampleMapper.java
new file mode 100644
index 0000000..58bd220
--- /dev/null
+++ b/src/main/java/com/ruoyi/lims/mapper/SampleMapper.java
@@ -0,0 +1,9 @@
+package com.ruoyi.lims.mapper;
+
+import com.ruoyi.lims.pojo.Sample;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface SampleMapper extends BaseMapper<Sample> {
+}
diff --git a/src/main/java/com/ruoyi/lims/pojo/DataCollection.java b/src/main/java/com/ruoyi/lims/pojo/DataCollection.java
new file mode 100644
index 0000000..006aa01
--- /dev/null
+++ b/src/main/java/com/ruoyi/lims/pojo/DataCollection.java
@@ -0,0 +1,128 @@
+package com.ruoyi.lims.pojo;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+@Data
+@TableName("lims_data_collection")
+@ApiModel(description="鏁版嵁閲囬泦涓庡鐞嗚〃")
+public class DataCollection implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 涓婚敭ID
+    */
+    @ApiModelProperty(value="涓婚敭ID")
+    private Long id;
+    /**
+    * 閲囬泦缂栧彿
+    */
+    @ApiModelProperty(value="閲囬泦缂栧彿")
+    private String collectionCode;
+    /**
+    * 璁惧鍚嶇О
+    */
+    @ApiModelProperty(value="璁惧鍚嶇О")
+    private String deviceName;
+    /**
+    * 璁惧缂栧彿
+    */
+    @ApiModelProperty(value="璁惧缂栧彿")
+    private String deviceCode;
+    /**
+    * 鏁版嵁绫诲瀷(temperature-娓╁害,humidity-婀垮害,pressure-鍘嬪姏,flow-娴侀噺,concentration-娴撳害)
+    */
+    @ApiModelProperty(value="鏁版嵁绫诲瀷(temperature-娓╁害,humidity-婀垮害,pressure-鍘嬪姏,flow-娴侀噺,concentration-娴撳害)")
+    private String dataType;
+    /**
+    * 閲囬泦鏁板��
+    */
+    @ApiModelProperty(value="閲囬泦鏁板��")
+    private BigDecimal collectionValue;
+    /**
+    * 璁¢噺鍗曚綅(celsius-鎽勬皬搴�,percent-鐧惧垎姣�,pa-甯曟柉鍗�,lmin-鍗�/鍒嗛挓,mgl-姣厠/鍗�)
+    */
+    @ApiModelProperty(value="璁¢噺鍗曚綅(celsius-鎽勬皬搴�,percent-鐧惧垎姣�,pa-甯曟柉鍗�,lmin-鍗�/鍒嗛挓,mgl-姣厠/鍗�)")
+    private String unit;
+    /**
+    * 閲囬泦鏃堕棿
+    */
+    @ApiModelProperty(value="閲囬泦鏃堕棿")
+    private LocalDateTime collectionTime;
+    /**
+    * 閲囬泦鐘舵��(collecting-閲囬泦涓�,processing-澶勭悊涓�,completed-宸插畬鎴�,failed-澶辫触)
+    */
+    @ApiModelProperty(value="閲囬泦鐘舵��(collecting-閲囬泦涓�,processing-澶勭悊涓�,completed-宸插畬鎴�,failed-澶辫触)")
+    private String collectionStatus;
+    /**
+    * 鏁版嵁璐ㄩ噺(qualified-鍚堟牸,abnormal-寮傚父,pending-寰呮牎楠�)
+    */
+    @ApiModelProperty(value="鏁版嵁璐ㄩ噺(qualified-鍚堟牸,abnormal-寮傚父,pending-寰呮牎楠�)")
+    private String dataQuality;
+    /**
+    * 澶勭悊鏂瑰紡(autoClean-鑷姩娓呮礂,manualVerify-浜哄伐鏍¢獙,dataTransform-鏁版嵁杞崲)
+    */
+    @ApiModelProperty(value="澶勭悊鏂瑰紡(autoClean-鑷姩娓呮礂,manualVerify-浜哄伐鏍¢獙,dataTransform-鏁版嵁杞崲)")
+    private String processMethod;
+    /**
+    * 鍘熷鏁版嵁
+    */
+    @ApiModelProperty(value="鍘熷鏁版嵁")
+    private String rawData;
+    /**
+    * 澶勭悊鍚庢暟鎹�
+    */
+    @ApiModelProperty(value="澶勭悊鍚庢暟鎹�")
+    private String processedData;
+    /**
+    * 澶囨敞
+    */
+    @ApiModelProperty(value="澶囨敞")
+    private String remark;
+    /**
+    * 缁存姢浜�
+    */
+    @ApiModelProperty(value="缁存姢浜�")
+    private String maintainer;
+    /**
+    * 缁存姢鏃堕棿
+    */
+    @ApiModelProperty(value="缁存姢鏃堕棿")
+    private LocalDate maintenanceTime;
+
+    /**
+    * 鍒犻櫎鏍囧織(0-姝e父,2-鍒犻櫎)
+    */
+    @ApiModelProperty(value="鍒犻櫎鏍囧織(0-姝e父,2-鍒犻櫎)")
+    private String delFlag;
+
+    @ApiModelProperty(value = "绉熸埛ID")
+    @TableField(fill = FieldFill.INSERT)
+    private Long tenantId;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "鍒涘缓鐢ㄦ埛")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @ApiModelProperty(value = "淇敼鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty(value = "淇敼鐢ㄦ埛")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+}
diff --git a/src/main/java/com/ruoyi/lims/pojo/DataInterface.java b/src/main/java/com/ruoyi/lims/pojo/DataInterface.java
new file mode 100644
index 0000000..7ec36ba
--- /dev/null
+++ b/src/main/java/com/ruoyi/lims/pojo/DataInterface.java
@@ -0,0 +1,112 @@
+package com.ruoyi.lims.pojo;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+
+@Data
+@TableName("lims_data_interface")
+@ApiModel(description="鏁版嵁鎺ュ彛绠$悊琛�")
+public class DataInterface implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 涓婚敭ID
+    */
+    @ApiModelProperty(value="涓婚敭ID")
+    private Long id;
+    /**
+    * 鎺ュ彛鍚嶇О
+    */
+    @ApiModelProperty(value="鎺ュ彛鍚嶇О")
+    private String interfaceName;
+    /**
+    * 鎺ュ彛缂栫爜
+    */
+    @ApiModelProperty(value="鎺ュ彛缂栫爜")
+    private String interfaceCode;
+    /**
+    * 璁惧绫诲瀷(instrument-浠櫒浠〃,software-杞欢绯荤粺,sensor-浼犳劅鍣�)
+    */
+    @ApiModelProperty(value="璁惧绫诲瀷(instrument-浠櫒浠〃,software-杞欢绯荤粺,sensor-浼犳劅鍣�)")
+    private String deviceType;
+    /**
+    * 璁惧鍚嶇О
+    */
+    @ApiModelProperty(value="璁惧鍚嶇О")
+    private String deviceName;
+    /**
+    * 杩炴帴鍗忚(http,tcp,mqtt,modbus,opcua)
+    */
+    @ApiModelProperty(value="杩炴帴鍗忚(http,tcp,mqtt,modbus,opcua)")
+    private String protocol;
+    /**
+    * 杩炴帴鍦板潃
+    */
+    @ApiModelProperty(value="杩炴帴鍦板潃")
+    private String connectionUrl;
+    /**
+    * 绔彛鍙�
+    */
+    @ApiModelProperty(value="绔彛鍙�")
+    private String port;
+    /**
+    * 鎺ュ彛鐘舵��(1-鍚敤,0-绂佺敤)
+    */
+    @ApiModelProperty(value="鎺ュ彛鐘舵��(1-鍚敤,0-绂佺敤)")
+    private String status;
+    /**
+    * 鎺ュ彛鎻忚堪
+    */
+    @ApiModelProperty(value="鎺ュ彛鎻忚堪")
+    private String description;
+    /**
+    * 缁存姢浜�
+    */
+    @ApiModelProperty(value="缁存姢浜�")
+    private String maintainer;
+    /**
+    * 缁存姢鏃堕棿
+    */
+    @ApiModelProperty(value="缁存姢鏃堕棿")
+    private LocalDate maintenanceTime;
+
+    /**
+    * 澶囨敞
+    */
+    @ApiModelProperty(value="澶囨敞")
+    private String remark;
+    /**
+    * 鍒犻櫎鏍囧織(0-姝e父,2-鍒犻櫎)
+    */
+    @ApiModelProperty(value="鍒犻櫎鏍囧織(0-姝e父,2-鍒犻櫎)")
+    private String delFlag;
+
+    @ApiModelProperty(value = "绉熸埛ID")
+    @TableField(fill = FieldFill.INSERT)
+    private Long tenantId;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "鍒涘缓鐢ㄦ埛")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @ApiModelProperty(value = "淇敼鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty(value = "淇敼鐢ㄦ埛")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+}
diff --git a/src/main/java/com/ruoyi/lims/pojo/Experiment.java b/src/main/java/com/ruoyi/lims/pojo/Experiment.java
new file mode 100644
index 0000000..d750d12
--- /dev/null
+++ b/src/main/java/com/ruoyi/lims/pojo/Experiment.java
@@ -0,0 +1,122 @@
+package com.ruoyi.lims.pojo;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+@Data
+@TableName("lims_experiment")
+@ApiModel(description="瀹為獙绠$悊琛�")
+public class Experiment implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 涓婚敭ID
+    */
+    @ApiModelProperty(value="涓婚敭ID")
+    private Long id;
+    /**
+    * 瀹為獙缂栧彿
+    */
+    @ApiModelProperty(value="瀹為獙缂栧彿")
+    private String experimentCode;
+    /**
+    * 瀹為獙鍚嶇О
+    */
+    @ApiModelProperty(value="瀹為獙鍚嶇О")
+    private String experimentName;
+    /**
+    * 瀹為獙绫诲瀷(chemicalAnalysis-鍖栧鍒嗘瀽,physicalTest-鐗╃悊娴嬭瘯,microbialTest-寰敓鐗╂娴�,performanceTest-鎬ц兘娴嬭瘯)
+    */
+    @ApiModelProperty(value="瀹為獙绫诲瀷(chemicalAnalysis-鍖栧鍒嗘瀽,physicalTest-鐗╃悊娴嬭瘯,microbialTest-寰敓鐗╂娴�,performanceTest-鎬ц兘娴嬭瘯)")
+    private String experimentType;
+    /**
+    * 瀹為獙鏍囧噯
+    */
+    @ApiModelProperty(value="瀹為獙鏍囧噯")
+    private String experimentStandard;
+    /**
+    * 璁″垝寮�濮嬫棩鏈�
+    */
+    @ApiModelProperty(value="璁″垝寮�濮嬫棩鏈�")
+    private LocalDate planStartDate;
+    /**
+    * 璁″垝缁撴潫鏃ユ湡
+    */
+    @ApiModelProperty(value="璁″垝缁撴潫鏃ユ湡")
+    private LocalDate planEndDate;
+    /**
+    * 瀹為獙璐熻矗浜�
+    */
+    @ApiModelProperty(value="瀹為獙璐熻矗浜�")
+    private String responsiblePerson;
+    /**
+    * 瀹為獙鐘舵��(planned-璁″垝涓�,inProgress-杩涜涓�,completed-宸插畬鎴�,cancelled-宸插彇娑�)
+    */
+    @ApiModelProperty(value="瀹為獙鐘舵��(planned-璁″垝涓�,inProgress-杩涜涓�,completed-宸插畬鎴�,cancelled-宸插彇娑�)")
+    private String experimentStatus;
+    /**
+    * 瀹為獙鐩殑
+    */
+    @ApiModelProperty(value="瀹為獙鐩殑")
+    private String experimentPurpose;
+    /**
+    * 瀹為獙杩囩▼
+    */
+    @ApiModelProperty(value="瀹為獙杩囩▼")
+    private String experimentProcess;
+    /**
+    * 瀹為獙缁撴灉
+    */
+    @ApiModelProperty(value="瀹為獙缁撴灉")
+    private String experimentResult;
+    /**
+    * 缁存姢浜�
+    */
+    @ApiModelProperty(value="缁存姢浜�")
+    private String maintainer;
+    /**
+    * 缁存姢鏃堕棿
+    */
+    @ApiModelProperty(value="缁存姢鏃堕棿")
+    private LocalDate maintenanceTime;
+
+    /**
+    * 澶囨敞
+    */
+    @ApiModelProperty(value="澶囨敞")
+    private String remark;
+    /**
+    * 鍒犻櫎鏍囧織(0-姝e父,2-鍒犻櫎)
+    */
+    @ApiModelProperty(value="鍒犻櫎鏍囧織(0-姝e父,2-鍒犻櫎)")
+    private String delFlag;
+
+    @ApiModelProperty(value = "绉熸埛ID")
+    @TableField(fill = FieldFill.INSERT)
+    private Long tenantId;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "鍒涘缓鐢ㄦ埛")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @ApiModelProperty(value = "淇敼鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty(value = "淇敼鐢ㄦ埛")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+}
diff --git a/src/main/java/com/ruoyi/lims/pojo/RealtimeMonitor.java b/src/main/java/com/ruoyi/lims/pojo/RealtimeMonitor.java
new file mode 100644
index 0000000..e727ca5
--- /dev/null
+++ b/src/main/java/com/ruoyi/lims/pojo/RealtimeMonitor.java
@@ -0,0 +1,137 @@
+package com.ruoyi.lims.pojo;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+@Data
+@TableName("lims_realtime_monitor")
+@ApiModel(description="瀹炴椂鐩戞帶涓庨璀﹁〃")
+public class RealtimeMonitor implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 涓婚敭ID
+    */
+    @ApiModelProperty(value="涓婚敭ID")
+    private Long id;
+    /**
+    * 鐩戞帶缂栧彿
+    */
+    @ApiModelProperty(value="鐩戞帶缂栧彿")
+    private String monitorCode;
+    /**
+    * 鐩戞帶瀵硅薄
+    */
+    @ApiModelProperty(value="鐩戞帶瀵硅薄")
+    private String monitorTarget;
+    /**
+    * 鐩戞帶绫诲瀷(temperature-娓╁害鐩戞帶,humidity-婀垮害鐩戞帶,pressure-鍘嬪姏鐩戞帶,equipment-璁惧鐘舵��,experiment-瀹為獙杩囩▼)
+    */
+    @ApiModelProperty(value="鐩戞帶绫诲瀷(temperature-娓╁害鐩戞帶,humidity-婀垮害鐩戞帶,pressure-鍘嬪姏鐩戞帶,equipment-璁惧鐘舵��,experiment-瀹為獙杩囩▼)")
+    private String monitorType;
+    /**
+    * 鐩戞帶鎸囨爣
+    */
+    @ApiModelProperty(value="鐩戞帶鎸囨爣")
+    private String monitorIndicator;
+    /**
+    * 褰撳墠鏁板��
+    */
+    @ApiModelProperty(value="褰撳墠鏁板��")
+    private BigDecimal currentValue;
+    /**
+    * 璁¢噺鍗曚綅
+    */
+    @ApiModelProperty(value="璁¢噺鍗曚綅")
+    private String unit;
+    /**
+    * 涓婇檺闃堝��
+    */
+    @ApiModelProperty(value="涓婇檺闃堝��")
+    private BigDecimal upperLimit;
+    /**
+    * 涓嬮檺闃堝��
+    */
+    @ApiModelProperty(value="涓嬮檺闃堝��")
+    private BigDecimal lowerLimit;
+    /**
+    * 棰勮鐘舵��(normal-姝e父,warning-棰勮,alert-鍛婅,resolved-宸插鐞�)
+    */
+    @ApiModelProperty(value="棰勮鐘舵��(normal-姝e父,warning-棰勮,alert-鍛婅,resolved-宸插鐞�)")
+    private String alertStatus;
+    /**
+    * 棰勮绾у埆(low-涓�鑸�,medium-閲嶈,high-绱ф��)
+    */
+    @ApiModelProperty(value="棰勮绾у埆(low-涓�鑸�,medium-閲嶈,high-绱ф��)")
+    private String alertLevel;
+    /**
+    * 鐩戞帶鏃堕棿
+    */
+    @ApiModelProperty(value="鐩戞帶鏃堕棿")
+    private LocalDateTime monitorTime;
+    /**
+    * 棰勮鎻忚堪
+    */
+    @ApiModelProperty(value="棰勮鎻忚堪")
+    private String alertDescription;
+    /**
+    * 澶勭悊浜�
+    */
+    @ApiModelProperty(value="澶勭悊浜�")
+    private String handler;
+    /**
+    * 澶勭悊鎺柦
+    */
+    @ApiModelProperty(value="澶勭悊鎺柦")
+    private String handleMeasure;
+    /**
+    * 澶囨敞
+    */
+    @ApiModelProperty(value="澶囨敞")
+    private String remark;
+    /**
+    * 缁存姢浜�
+    */
+    @ApiModelProperty(value="缁存姢浜�")
+    private String maintainer;
+    /**
+    * 缁存姢鏃堕棿
+    */
+    @ApiModelProperty(value="缁存姢鏃堕棿")
+    private LocalDate maintenanceTime;
+    /**
+    * 鍒犻櫎鏍囧織(0-姝e父,2-鍒犻櫎)
+    */
+    @ApiModelProperty(value="鍒犻櫎鏍囧織(0-姝e父,2-鍒犻櫎)")
+    private String delFlag;
+
+    @ApiModelProperty(value = "绉熸埛ID")
+    @TableField(fill = FieldFill.INSERT)
+    private Long tenantId;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "鍒涘缓鐢ㄦ埛")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @ApiModelProperty(value = "淇敼鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty(value = "淇敼鐢ㄦ埛")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+}
diff --git a/src/main/java/com/ruoyi/lims/pojo/Sample.java b/src/main/java/com/ruoyi/lims/pojo/Sample.java
new file mode 100644
index 0000000..7bbce35
--- /dev/null
+++ b/src/main/java/com/ruoyi/lims/pojo/Sample.java
@@ -0,0 +1,118 @@
+package com.ruoyi.lims.pojo;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+@Data
+@TableName("lims_sample")
+@ApiModel(description="鏍峰搧绠$悊琛�")
+public class Sample implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 涓婚敭ID
+    */
+    @ApiModelProperty(value="涓婚敭ID")
+    private Long id;
+    /**
+    * 鏍峰搧缂栧彿
+    */
+    @ApiModelProperty(value="鏍峰搧缂栧彿")
+    private String sampleCode;
+    /**
+    * 鏍峰搧鍚嶇О
+    */
+    @ApiModelProperty(value="鏍峰搧鍚嶇О")
+    private String sampleName;
+    /**
+    * 鏍峰搧绫诲瀷(rawMaterial-鍘熸枡,semiFinished-鍗婃垚鍝�,finishedProduct-鎴愬搧,retainedSample-鐣欐牱)
+    */
+    @ApiModelProperty(value="鏍峰搧绫诲瀷(rawMaterial-鍘熸枡,semiFinished-鍗婃垚鍝�,finishedProduct-鎴愬搧,retainedSample-鐣欐牱)")
+    private String sampleType;
+    /**
+    * 鏍峰搧瑙勬牸
+    */
+    @ApiModelProperty(value="鏍峰搧瑙勬牸")
+    private String specification;
+    /**
+    * 鍏ュ簱鏃ユ湡
+    */
+    @ApiModelProperty(value="鍏ュ簱鏃ユ湡")
+    private LocalDate inStockDate;
+    /**
+    * 瀛樺偍浣嶇疆
+    */
+    @ApiModelProperty(value="瀛樺偍浣嶇疆")
+    private String storageLocation;
+    /**
+    * 鏍峰搧鏁伴噺
+    */
+    @ApiModelProperty(value="鏍峰搧鏁伴噺")
+    private BigDecimal quantity;
+    /**
+    * 璁¢噺鍗曚綅(g,kg,ml,L,piece)
+    */
+    @ApiModelProperty(value="璁¢噺鍗曚綅(g,kg,ml,L,piece)")
+    private String unit;
+    /**
+    * 鏍峰搧鐘舵��(inStock-鍦ㄥ簱,outStock-鍑哄簱,testing-妫�娴嬩腑,destroyed-宸查攢姣�)
+    */
+    @ApiModelProperty(value="鏍峰搧鐘舵��(inStock-鍦ㄥ簱,outStock-鍑哄簱,testing-妫�娴嬩腑,destroyed-宸查攢姣�)")
+    private String sampleStatus;
+    /**
+    * 鏈夋晥鏈熻嚦
+    */
+    @ApiModelProperty(value="鏈夋晥鏈熻嚦")
+    private LocalDate validityDate;
+    /**
+    * 澶囨敞
+    */
+    @ApiModelProperty(value="澶囨敞")
+    private String remark;
+    /**
+    * 缁存姢浜�
+    */
+    @ApiModelProperty(value="缁存姢浜�")
+    private String maintainer;
+    /**
+    * 缁存姢鏃堕棿
+    */
+    @ApiModelProperty(value="缁存姢鏃堕棿")
+    private LocalDate maintenanceTime;
+
+    /**
+    * 鍒犻櫎鏍囧織(0-姝e父,2-鍒犻櫎)
+    */
+    @ApiModelProperty(value="鍒犻櫎鏍囧織(0-姝e父,2-鍒犻櫎)")
+    private String delFlag;
+
+    @ApiModelProperty(value = "绉熸埛ID")
+    @TableField(fill = FieldFill.INSERT)
+    private Long tenantId;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "鍒涘缓鐢ㄦ埛")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @ApiModelProperty(value = "淇敼鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty(value = "淇敼鐢ㄦ埛")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+}
diff --git a/src/main/java/com/ruoyi/lims/service/DataCollectionService.java b/src/main/java/com/ruoyi/lims/service/DataCollectionService.java
new file mode 100644
index 0000000..ff4c7f9
--- /dev/null
+++ b/src/main/java/com/ruoyi/lims/service/DataCollectionService.java
@@ -0,0 +1,11 @@
+package com.ruoyi.lims.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.lims.pojo.DataCollection;
+
+public interface DataCollectionService extends IService<DataCollection> {
+    IPage<DataCollection> listPage(Page<DataCollection> page, DataCollection dataCollection);
+
+}
diff --git a/src/main/java/com/ruoyi/lims/service/DataInterfaceService.java b/src/main/java/com/ruoyi/lims/service/DataInterfaceService.java
new file mode 100644
index 0000000..e15e4fd
--- /dev/null
+++ b/src/main/java/com/ruoyi/lims/service/DataInterfaceService.java
@@ -0,0 +1,11 @@
+package com.ruoyi.lims.service;
+
+import com.ruoyi.lims.pojo.DataInterface;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+
+public interface DataInterfaceService extends IService<DataInterface> {
+    IPage<DataInterface> listPage(Page<DataInterface> page, DataInterface dataInterface);
+
+}
diff --git a/src/main/java/com/ruoyi/lims/service/ExperimentService.java b/src/main/java/com/ruoyi/lims/service/ExperimentService.java
new file mode 100644
index 0000000..2609b58
--- /dev/null
+++ b/src/main/java/com/ruoyi/lims/service/ExperimentService.java
@@ -0,0 +1,11 @@
+package com.ruoyi.lims.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.lims.pojo.Experiment;
+
+public interface ExperimentService extends IService<Experiment> {
+    IPage<Experiment> listPage(Page<Experiment> page, Experiment experiment);
+
+}
diff --git a/src/main/java/com/ruoyi/lims/service/RealtimeMonitorService.java b/src/main/java/com/ruoyi/lims/service/RealtimeMonitorService.java
new file mode 100644
index 0000000..2ee524d
--- /dev/null
+++ b/src/main/java/com/ruoyi/lims/service/RealtimeMonitorService.java
@@ -0,0 +1,13 @@
+package com.ruoyi.lims.service;
+
+import com.ruoyi.lims.pojo.RealtimeMonitor;
+import com.ruoyi.lims.mapper.RealtimeMonitorMapper;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import java.util.List;
+
+public interface RealtimeMonitorService extends IService<RealtimeMonitor> {
+    IPage<RealtimeMonitor> listPage(Page<RealtimeMonitor> page, RealtimeMonitor realtimeMonitor);
+
+}
diff --git a/src/main/java/com/ruoyi/lims/service/SampleService.java b/src/main/java/com/ruoyi/lims/service/SampleService.java
new file mode 100644
index 0000000..a1be55a
--- /dev/null
+++ b/src/main/java/com/ruoyi/lims/service/SampleService.java
@@ -0,0 +1,11 @@
+package com.ruoyi.lims.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.lims.pojo.Sample;
+
+public interface SampleService extends IService<Sample> {
+    IPage<Sample> listPage(Page<Sample> page, Sample sample);
+
+}
diff --git a/src/main/java/com/ruoyi/lims/service/impl/DataCollectionServiceImpl.java b/src/main/java/com/ruoyi/lims/service/impl/DataCollectionServiceImpl.java
new file mode 100644
index 0000000..4ccde0b
--- /dev/null
+++ b/src/main/java/com/ruoyi/lims/service/impl/DataCollectionServiceImpl.java
@@ -0,0 +1,24 @@
+package com.ruoyi.lims.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.lims.mapper.DataCollectionMapper;
+import com.ruoyi.lims.pojo.DataCollection;
+import com.ruoyi.lims.service.DataCollectionService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+@Service
+@RequiredArgsConstructor
+@Transactional(rollbackFor = Exception.class)
+public class DataCollectionServiceImpl extends ServiceImpl<DataCollectionMapper, DataCollection> implements DataCollectionService {
+
+    private final DataCollectionMapper dataCollectionmapper;
+
+    @Override
+    public IPage<DataCollection> listPage(Page<DataCollection> page, DataCollection dataCollection) {
+        return dataCollectionmapper.selectPage(page, null);
+    }
+}
diff --git a/src/main/java/com/ruoyi/lims/service/impl/DataInterfaceServiceImpl.java b/src/main/java/com/ruoyi/lims/service/impl/DataInterfaceServiceImpl.java
new file mode 100644
index 0000000..dc227a2
--- /dev/null
+++ b/src/main/java/com/ruoyi/lims/service/impl/DataInterfaceServiceImpl.java
@@ -0,0 +1,40 @@
+package com.ruoyi.lims.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.lims.pojo.DataInterface;
+import com.ruoyi.lims.service.DataInterfaceService;
+import com.ruoyi.lims.mapper.DataInterfaceMapper;
+import org.springframework.stereotype.Service;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import lombok.RequiredArgsConstructor;
+import org.springframework.transaction.annotation.Transactional;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+
+import java.util.List;
+
+@Service
+@RequiredArgsConstructor
+@Transactional(rollbackFor = Exception.class)
+public class DataInterfaceServiceImpl extends ServiceImpl<DataInterfaceMapper, DataInterface> implements DataInterfaceService {
+
+    private final DataInterfaceMapper dataInterfacemapper;
+
+    @Override
+    public IPage<DataInterface> listPage(Page<DataInterface> page, DataInterface dataInterface) {
+        LambdaQueryWrapper<DataInterface> queryWrapper = new LambdaQueryWrapper<>();
+
+        if (StringUtils.isNotBlank(dataInterface.getInterfaceName())) {
+            queryWrapper.like(DataInterface::getInterfaceName, dataInterface.getInterfaceName());
+        }
+
+        if (StringUtils.isNotBlank(dataInterface.getDeviceType())) {
+            queryWrapper.like(DataInterface::getDeviceType, dataInterface.getDeviceType());
+        }
+
+        queryWrapper.orderByDesc(DataInterface::getUpdateTime);
+
+        return dataInterfacemapper.selectPage(page, queryWrapper);
+    }
+}
diff --git a/src/main/java/com/ruoyi/lims/service/impl/ExperimentServiceImpl.java b/src/main/java/com/ruoyi/lims/service/impl/ExperimentServiceImpl.java
new file mode 100644
index 0000000..f30ad6e
--- /dev/null
+++ b/src/main/java/com/ruoyi/lims/service/impl/ExperimentServiceImpl.java
@@ -0,0 +1,24 @@
+package com.ruoyi.lims.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.lims.mapper.ExperimentMapper;
+import com.ruoyi.lims.pojo.Experiment;
+import com.ruoyi.lims.service.ExperimentService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+@Service
+@RequiredArgsConstructor
+@Transactional(rollbackFor = Exception.class)
+public class ExperimentServiceImpl extends ServiceImpl<ExperimentMapper, Experiment> implements ExperimentService {
+
+    private final ExperimentMapper experimentmapper;
+
+    @Override
+    public IPage<Experiment> listPage(Page<Experiment> page, Experiment experiment) {
+        return experimentmapper.selectPage(page, null);
+    }
+}
diff --git a/src/main/java/com/ruoyi/lims/service/impl/RealtimeMonitorServiceImpl.java b/src/main/java/com/ruoyi/lims/service/impl/RealtimeMonitorServiceImpl.java
new file mode 100644
index 0000000..dc9adf3
--- /dev/null
+++ b/src/main/java/com/ruoyi/lims/service/impl/RealtimeMonitorServiceImpl.java
@@ -0,0 +1,24 @@
+package com.ruoyi.lims.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.lims.mapper.RealtimeMonitorMapper;
+import com.ruoyi.lims.pojo.RealtimeMonitor;
+import com.ruoyi.lims.service.RealtimeMonitorService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+@Service
+@RequiredArgsConstructor
+@Transactional(rollbackFor = Exception.class)
+public class RealtimeMonitorServiceImpl extends ServiceImpl<RealtimeMonitorMapper, RealtimeMonitor> implements RealtimeMonitorService {
+
+    private final RealtimeMonitorMapper realtimeMonitormapper;
+
+    @Override
+    public IPage<RealtimeMonitor> listPage(Page<RealtimeMonitor> page, RealtimeMonitor realtimeMonitor) {
+        return realtimeMonitormapper.selectPage(page, null);
+    }
+}
diff --git a/src/main/java/com/ruoyi/lims/service/impl/SampleServiceImpl.java b/src/main/java/com/ruoyi/lims/service/impl/SampleServiceImpl.java
new file mode 100644
index 0000000..dd5d3ec
--- /dev/null
+++ b/src/main/java/com/ruoyi/lims/service/impl/SampleServiceImpl.java
@@ -0,0 +1,24 @@
+package com.ruoyi.lims.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.lims.mapper.SampleMapper;
+import com.ruoyi.lims.pojo.Sample;
+import com.ruoyi.lims.service.SampleService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+@Service
+@RequiredArgsConstructor
+@Transactional(rollbackFor = Exception.class)
+public class SampleServiceImpl extends ServiceImpl<SampleMapper, Sample> implements SampleService {
+
+    private final SampleMapper samplemapper;
+
+    @Override
+    public IPage<Sample> listPage(Page<Sample> page, Sample sample) {
+        return samplemapper.selectPage(page, null);
+    }
+}
diff --git a/src/main/resources/mapper/lims/DataCollectionMapper.xml b/src/main/resources/mapper/lims/DataCollectionMapper.xml
new file mode 100644
index 0000000..9480ae3
--- /dev/null
+++ b/src/main/resources/mapper/lims/DataCollectionMapper.xml
@@ -0,0 +1,28 @@
+<?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="com.ruoyi.lims.mapper.DataCollectionMapper">
+    <resultMap id="BaseResultMap" type="com.ruoyi.lims.pojo.DataCollection">
+        <id column="id" property="id" />
+                <result column="collection_code" property="collectionCode" />
+                <result column="device_name" property="deviceName" />
+                <result column="device_code" property="deviceCode" />
+                <result column="data_type" property="dataType" />
+                <result column="collection_value" property="collectionValue" />
+                <result column="unit" property="unit" />
+                <result column="collection_time" property="collectionTime" />
+                <result column="collection_status" property="collectionStatus" />
+                <result column="data_quality" property="dataQuality" />
+                <result column="process_method" property="processMethod" />
+                <result column="raw_data" property="rawData" />
+                <result column="processed_data" property="processedData" />
+                <result column="remark" property="remark" />
+                <result column="maintainer" property="maintainer" />
+                <result column="maintenance_time" property="maintenanceTime" />
+                <result column="create_time" property="createTime" />
+                <result column="update_time" property="updateTime" />
+                <result column="del_flag" property="delFlag" />
+
+    </resultMap>
+</mapper>
diff --git a/src/main/resources/mapper/lims/DataInterfaceMapper.xml b/src/main/resources/mapper/lims/DataInterfaceMapper.xml
new file mode 100644
index 0000000..1bd5e14
--- /dev/null
+++ b/src/main/resources/mapper/lims/DataInterfaceMapper.xml
@@ -0,0 +1,25 @@
+<?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="com.ruoyi.lims.mapper.DataInterfaceMapper">
+    <resultMap id="BaseResultMap" type="com.ruoyi.lims.pojo.DataInterface">
+        <id column="id" property="id"/>
+        <result column="interface_name" property="interfaceName"/>
+        <result column="interface_code" property="interfaceCode"/>
+        <result column="device_type" property="deviceType"/>
+        <result column="device_name" property="deviceName"/>
+        <result column="protocol" property="protocol"/>
+        <result column="connection_url" property="connectionUrl"/>
+        <result column="port" property="port"/>
+        <result column="status" property="status"/>
+        <result column="description" property="description"/>
+        <result column="maintainer" property="maintainer"/>
+        <result column="maintenance_time" property="maintenanceTime"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="remark" property="remark"/>
+        <result column="del_flag" property="delFlag"/>
+
+    </resultMap>
+</mapper>
diff --git a/src/main/resources/mapper/lims/ExperimentMapper.xml b/src/main/resources/mapper/lims/ExperimentMapper.xml
new file mode 100644
index 0000000..3cf188b
--- /dev/null
+++ b/src/main/resources/mapper/lims/ExperimentMapper.xml
@@ -0,0 +1,27 @@
+<?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="com.ruoyi.lims.mapper.ExperimentMapper">
+    <resultMap id="BaseResultMap" type="com.ruoyi.lims.pojo.Experiment">
+        <id column="id" property="id" />
+                <result column="experiment_code" property="experimentCode" />
+                <result column="experiment_name" property="experimentName" />
+                <result column="experiment_type" property="experimentType" />
+                <result column="experiment_standard" property="experimentStandard" />
+                <result column="plan_start_date" property="planStartDate" />
+                <result column="plan_end_date" property="planEndDate" />
+                <result column="responsible_person" property="responsiblePerson" />
+                <result column="experiment_status" property="experimentStatus" />
+                <result column="experiment_purpose" property="experimentPurpose" />
+                <result column="experiment_process" property="experimentProcess" />
+                <result column="experiment_result" property="experimentResult" />
+                <result column="maintainer" property="maintainer" />
+                <result column="maintenance_time" property="maintenanceTime" />
+                <result column="create_time" property="createTime" />
+                <result column="update_time" property="updateTime" />
+                <result column="remark" property="remark" />
+                <result column="del_flag" property="delFlag" />
+
+    </resultMap>
+</mapper>
diff --git a/src/main/resources/mapper/lims/RealtimeMonitorMapper.xml b/src/main/resources/mapper/lims/RealtimeMonitorMapper.xml
new file mode 100644
index 0000000..ec5637b
--- /dev/null
+++ b/src/main/resources/mapper/lims/RealtimeMonitorMapper.xml
@@ -0,0 +1,32 @@
+<?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="com.ruoyi.lims.mapper.RealtimeMonitorMapper">
+    <resultMap id="BaseResultMap" type="com.ruoyi.lims.pojo.RealtimeMonitor">
+        <id column="id" property="id" />
+                <result column="monitor_code" property="monitorCode" />
+                <result column="monitor_target" property="monitorTarget" />
+                <result column="monitor_type" property="monitorType" />
+                <result column="monitor_indicator" property="monitorIndicator" />
+                <result column="current_value" property="currentValue" />
+                <result column="unit" property="unit" />
+                <result column="upper_limit" property="upperLimit" />
+                <result column="lower_limit" property="lowerLimit" />
+                <result column="alert_status" property="alertStatus" />
+                <result column="alert_level" property="alertLevel" />
+                <result column="monitor_time" property="monitorTime" />
+                <result column="alert_description" property="alertDescription" />
+                <result column="handler" property="handler" />
+                <result column="handle_measure" property="handleMeasure" />
+                <result column="remark" property="remark" />
+                <result column="maintainer" property="maintainer" />
+                <result column="maintenance_time" property="maintenanceTime" />
+                <result column="create_by" property="createBy" />
+                <result column="create_time" property="createTime" />
+                <result column="update_by" property="updateBy" />
+                <result column="update_time" property="updateTime" />
+                <result column="del_flag" property="delFlag" />
+
+    </resultMap>
+</mapper>
diff --git a/src/main/resources/mapper/lims/SampleMapper.xml b/src/main/resources/mapper/lims/SampleMapper.xml
new file mode 100644
index 0000000..4c241e5
--- /dev/null
+++ b/src/main/resources/mapper/lims/SampleMapper.xml
@@ -0,0 +1,26 @@
+<?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="com.ruoyi.lims.mapper.SampleMapper">
+    <resultMap id="BaseResultMap" type="com.ruoyi.lims.pojo.Sample">
+        <id column="id" property="id"/>
+        <result column="sample_code" property="sampleCode"/>
+        <result column="sample_name" property="sampleName"/>
+        <result column="sample_type" property="sampleType"/>
+        <result column="specification" property="specification"/>
+        <result column="in_stock_date" property="inStockDate"/>
+        <result column="storage_location" property="storageLocation"/>
+        <result column="quantity" property="quantity"/>
+        <result column="unit" property="unit"/>
+        <result column="sample_status" property="sampleStatus"/>
+        <result column="validity_date" property="validityDate"/>
+        <result column="remark" property="remark"/>
+        <result column="maintainer" property="maintainer"/>
+        <result column="maintenance_time" property="maintenanceTime"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="del_flag" property="delFlag"/>
+
+    </resultMap>
+</mapper>

--
Gitblit v1.9.3