大屏业务完善

This commit is contained in:
lhx
2025-11-13 17:38:10 +08:00
parent 7834610b3f
commit c6bc11e9b8
38 changed files with 881 additions and 2455 deletions

View File

@@ -1392,8 +1392,8 @@ java.sql.SQLSyntaxErrorException: Unknown column 'sols.standard_id' in 'field li
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)
at java.base/java.lang.Thread.run(Thread.java:840) at java.base/java.lang.Thread.run(Thread.java:840)
2025-11-12 16:44:33.098 [http-nio-8800-exec-1] ERROR o.a.c.c.C.[.[localhost].[/dc].[dispatcherServlet]:175 - Servlet.service() for servlet [dispatcherServlet] in context with path [/dc] threw exception [Request processing failed: java.lang.NullPointerException: Cannot invoke "java.lang.Integer.intValue()" because the return value of "com.dc.dc_project.model.dto.LaboratoryDto.getType()" is null] with root cause 2025-11-12 16:44:33.098 [http-nio-8800-exec-1] ERROR o.a.c.c.C.[.[localhost].[/dc].[dispatcherServlet]:175 - Servlet.service() for servlet [dispatcherServlet] in context with path [/dc] threw exception [Request processing failed: java.lang.NullPointerException: Cannot invoke "java.lang.Integer.intValue()" because the return value of "com.dc.dc_project.model.dto.bigScreen.LaboratoryDto.getType()" is null] with root cause
java.lang.NullPointerException: Cannot invoke "java.lang.Integer.intValue()" because the return value of "com.dc.dc_project.model.dto.LaboratoryDto.getType()" is null java.lang.NullPointerException: Cannot invoke "java.lang.Integer.intValue()" because the return value of "com.dc.dc_project.model.dto.bigScreen.LaboratoryDto.getType()" is null
at com.dc.dc_project.service.impl.LaboratoryServiceImpl.getList(LaboratoryServiceImpl.java:41) at com.dc.dc_project.service.impl.LaboratoryServiceImpl.getList(LaboratoryServiceImpl.java:41)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
@@ -1462,3 +1462,128 @@ java.lang.NullPointerException: Cannot invoke "java.lang.Integer.intValue()" bec
at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63)
at java.base/java.lang.Thread.run(Thread.java:840) at java.base/java.lang.Thread.run(Thread.java:840)
2025-11-13 16:45:44.741 [main] ERROR org.springframework.boot.SpringApplication:859 - Application run failed
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'laboratoryBigScreenController' defined in file [D:\p1\dc_project\target\classes\com\dc\dc_project\controller\bigScreen\LaboratoryBigScreenController.class]: Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'laboratoryServiceImpl' defined in file [D:\p1\dc_project\target\classes\com\dc\dc_project\service\impl\LaboratoryServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'standardCategoryServiceImpl': Unsatisfied dependency expressed through field 'baseMapper': Error creating bean with name 'standardCategoryMapper' defined in file [D:\p1\dc_project\target\classes\com\dc\dc_project\mapper\StandardCategoryMapper.class]: Unsatisfied dependency expressed through bean property 'sqlSessionFactory': Error creating bean with name 'sqlSessionFactory' defined in class path resource [com/baomidou/mybatisplus/autoconfigure/MybatisPlusAutoConfiguration.class]: Failed to instantiate [org.apache.ibatis.session.SqlSessionFactory]: Factory method 'sqlSessionFactory' threw exception with message: Failed to parse mapping resource: 'file [D:\p1\dc_project\target\classes\mapper\RecordEntrustMapper.xml]'
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:795)
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:237)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1375)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1212)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:562)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:975)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:971)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:625)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:754)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:456)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:335)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1363)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1352)
at com.dc.dc_project.DcProjectApplication.main(DcProjectApplication.java:12)
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'laboratoryServiceImpl' defined in file [D:\p1\dc_project\target\classes\com\dc\dc_project\service\impl\LaboratoryServiceImpl.class]: Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'standardCategoryServiceImpl': Unsatisfied dependency expressed through field 'baseMapper': Error creating bean with name 'standardCategoryMapper' defined in file [D:\p1\dc_project\target\classes\com\dc\dc_project\mapper\StandardCategoryMapper.class]: Unsatisfied dependency expressed through bean property 'sqlSessionFactory': Error creating bean with name 'sqlSessionFactory' defined in class path resource [com/baomidou/mybatisplus/autoconfigure/MybatisPlusAutoConfiguration.class]: Failed to instantiate [org.apache.ibatis.session.SqlSessionFactory]: Factory method 'sqlSessionFactory' threw exception with message: Failed to parse mapping resource: 'file [D:\p1\dc_project\target\classes\mapper\RecordEntrustMapper.xml]'
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:795)
at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:237)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1375)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1212)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:562)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200)
at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:254)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1443)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1353)
at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:904)
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:782)
... 19 common frames omitted
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'standardCategoryServiceImpl': Unsatisfied dependency expressed through field 'baseMapper': Error creating bean with name 'standardCategoryMapper' defined in file [D:\p1\dc_project\target\classes\com\dc\dc_project\mapper\StandardCategoryMapper.class]: Unsatisfied dependency expressed through bean property 'sqlSessionFactory': Error creating bean with name 'sqlSessionFactory' defined in class path resource [com/baomidou/mybatisplus/autoconfigure/MybatisPlusAutoConfiguration.class]: Failed to instantiate [org.apache.ibatis.session.SqlSessionFactory]: Factory method 'sqlSessionFactory' threw exception with message: Failed to parse mapping resource: 'file [D:\p1\dc_project\target\classes\mapper\RecordEntrustMapper.xml]'
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:788)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:768)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:145)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:509)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1439)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200)
at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:254)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1443)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1353)
at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:904)
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:782)
... 33 common frames omitted
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'standardCategoryMapper' defined in file [D:\p1\dc_project\target\classes\com\dc\dc_project\mapper\StandardCategoryMapper.class]: Unsatisfied dependency expressed through bean property 'sqlSessionFactory': Error creating bean with name 'sqlSessionFactory' defined in class path resource [com/baomidou/mybatisplus/autoconfigure/MybatisPlusAutoConfiguration.class]: Failed to instantiate [org.apache.ibatis.session.SqlSessionFactory]: Factory method 'sqlSessionFactory' threw exception with message: Failed to parse mapping resource: 'file [D:\p1\dc_project\target\classes\mapper\RecordEntrustMapper.xml]'
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireByType(AbstractAutowireCapableBeanFactory.java:1536)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1430)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200)
at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:254)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1443)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1353)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:785)
... 48 common frames omitted
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in class path resource [com/baomidou/mybatisplus/autoconfigure/MybatisPlusAutoConfiguration.class]: Failed to instantiate [org.apache.ibatis.session.SqlSessionFactory]: Factory method 'sqlSessionFactory' threw exception with message: Failed to parse mapping resource: 'file [D:\p1\dc_project\target\classes\mapper\RecordEntrustMapper.xml]'
at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:648)
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:636)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1355)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1185)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:562)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:522)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:337)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:335)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200)
at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:254)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1443)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1353)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireByType(AbstractAutowireCapableBeanFactory.java:1521)
... 59 common frames omitted
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.apache.ibatis.session.SqlSessionFactory]: Factory method 'sqlSessionFactory' threw exception with message: Failed to parse mapping resource: 'file [D:\p1\dc_project\target\classes\mapper\RecordEntrustMapper.xml]'
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:178)
at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:644)
... 72 common frames omitted
Caused by: java.io.IOException: Failed to parse mapping resource: 'file [D:\p1\dc_project\target\classes\mapper\RecordEntrustMapper.xml]'
at com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean.buildSqlSessionFactory(MybatisSqlSessionFactoryBean.java:670)
at com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean.afterPropertiesSet(MybatisSqlSessionFactoryBean.java:543)
at com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean.getObject(MybatisSqlSessionFactoryBean.java:701)
at com.baomidou.mybatisplus.autoconfigure.MybatisPlusAutoConfiguration.sqlSessionFactory(MybatisPlusAutoConfiguration.java:213)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:569)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:146)
... 73 common frames omitted
Caused by: org.apache.ibatis.builder.BuilderException: Error creating document instance. Cause: org.xml.sax.SAXParseException; lineNumber: 50; columnNumber: 32; 元素内容必须由格式正确的字符数据或标记组成。
at org.apache.ibatis.parsing.XPathParser.createDocument(XPathParser.java:262)
at org.apache.ibatis.parsing.XPathParser.<init>(XPathParser.java:127)
at com.baomidou.mybatisplus.core.MybatisXMLMapperBuilder.<init>(MybatisXMLMapperBuilder.java:87)
at com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean.buildSqlSessionFactory(MybatisSqlSessionFactoryBean.java:667)
... 81 common frames omitted
Caused by: org.xml.sax.SAXParseException: 元素内容必须由格式正确的字符数据或标记组成。
at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:204)
at java.xml/com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.java:178)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:400)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:327)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.java:1465)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.startOfMarkup(XMLDocumentFragmentScannerImpl.java:2589)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2679)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:605)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:542)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:889)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:825)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
at java.xml/com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:247)
at java.xml/com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:342)
at org.apache.ibatis.parsing.XPathParser.createDocument(XPathParser.java:260)
... 84 common frames omitted

File diff suppressed because it is too large Load Diff

View File

@@ -2,8 +2,9 @@ package com.dc.dc_project.controller.bigScreen;
import com.dc.dc_project.common.ResponseResult; import com.dc.dc_project.common.ResponseResult;
import com.dc.dc_project.model.dto.LaboratoryDto; import com.dc.dc_project.model.dto.bigScreen.LaboratoryDto;
import com.dc.dc_project.model.vo.BigScreenStatistics; import com.dc.dc_project.model.dto.bigScreen.RecordBigScreenDto;
import com.dc.dc_project.model.dto.bigScreen.SystemWarningDto;
import com.dc.dc_project.service.BigScreenService; import com.dc.dc_project.service.BigScreenService;
import com.dc.dc_project.service.LaboratoryService; import com.dc.dc_project.service.LaboratoryService;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
@@ -28,7 +29,7 @@ public class LaboratoryBigScreenController {
} }
@PostMapping("/Statistics") @PostMapping("/Statistics")
@Operation(summary = "大屏统计信息") @Operation(summary = "大屏统计信息——总数统计")
public ResponseResult getStatistics() { public ResponseResult getStatistics() {
return bigScreenService.getPigStatistics(); return bigScreenService.getPigStatistics();
} }
@@ -39,5 +40,17 @@ public class LaboratoryBigScreenController {
return bigScreenService.getRecordEntrustStatistics(); return bigScreenService.getRecordEntrustStatistics();
} }
@PostMapping("/record")
@Operation(summary = "本年实验室委托统计2")
public ResponseResult recordReport(@RequestBody RecordBigScreenDto recordBigScreenDto) {
return bigScreenService.getRecordEntrustStatistics2(recordBigScreenDto);
}
@PostMapping("/system_warning")
@Operation(summary = "系统预警信息")
public ResponseResult systemWarning(@RequestBody SystemWarningDto systemWarningDto) {
return bigScreenService.getSystemWarning(systemWarningDto);
}
} }

View File

@@ -1,7 +1,12 @@
package com.dc.dc_project.mapper; package com.dc.dc_project.mapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dc.dc_project.model.dto.bigScreen.SystemWarningDto;
import com.dc.dc_project.model.pojo.Equipment; import com.dc.dc_project.model.pojo.Equipment;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dc.dc_project.model.vo.BasePageVo;
import com.dc.dc_project.model.vo.bigScreen.SystemWarningItemVo;
/** /**
* @author ADMIN * @author ADMIN
@@ -11,6 +16,15 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
*/ */
public interface EquipmentMapper extends BaseMapper<Equipment> { public interface EquipmentMapper extends BaseMapper<Equipment> {
/**
* 获取设备超期
* @param nowStr
* @param systemWarningDto
* @return
*/
BasePageVo<SystemWarningItemVo> getCheckOverdueCount(String nowStr, IPage<SystemWarningItemVo> systemWarningDto);
BasePageVo<SystemWarningItemVo> getCheckExpiringCount(String nowStr, IPage<SystemWarningItemVo> page);
} }

View File

@@ -0,0 +1,18 @@
package com.dc.dc_project.mapper;
import com.dc.dc_project.model.pojo.RecordEngineering;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* @author ADMIN
* @description 针对表【sys_record_engineering(检测工程信息表)】的数据库操作Mapper
* @createDate 2025-11-13 10:23:23
* @Entity com.dc.dc_project.model.pojo.RecordEngineering
*/
public interface RecordEngineeringMapper extends BaseMapper<RecordEngineering> {
}

View File

@@ -1,7 +1,12 @@
package com.dc.dc_project.mapper; package com.dc.dc_project.mapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dc.dc_project.model.pojo.RecordEntrust; import com.dc.dc_project.model.pojo.RecordEntrust;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dc.dc_project.model.vo.bigScreen.RecordStatisticsVo;
import java.util.List;
/** /**
* @author ADMIN * @author ADMIN
@@ -11,6 +16,9 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
*/ */
public interface RecordEntrustMapper extends BaseMapper<RecordEntrust> { public interface RecordEntrustMapper extends BaseMapper<RecordEntrust> {
Long getCountByTime(String startTimeStr, String endTime);
Page<RecordStatisticsVo> getCountByTimeGroupE(String startTimeStr, String endTimeStr, IPage<RecordStatisticsVo> page);
} }

View File

@@ -1,7 +1,10 @@
package com.dc.dc_project.mapper; package com.dc.dc_project.mapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.dc.dc_project.model.pojo.RecordSample; import com.dc.dc_project.model.pojo.RecordSample;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.dc.dc_project.model.vo.BasePageVo;
import com.dc.dc_project.model.vo.bigScreen.SystemWarningItemVo;
/** /**
* @author ADMIN * @author ADMIN
@@ -11,6 +14,9 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
*/ */
public interface RecordSampleMapper extends BaseMapper<RecordSample> { public interface RecordSampleMapper extends BaseMapper<RecordSample> {
BasePageVo<SystemWarningItemVo> getCheckNotCheckedCount(String nowStr, IPage<SystemWarningItemVo> page);
BasePageVo<SystemWarningItemVo> getCheckNotChecked(String nowStr, IPage<SystemWarningItemVo> page);
} }

View File

@@ -1,4 +0,0 @@
package com.dc.dc_project.model;
public class Base {
}

View File

@@ -0,0 +1,11 @@
package com.dc.dc_project.model.dto;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = true)
public class BasePage<T> extends Page<T> {
}

View File

@@ -1,4 +1,4 @@
package com.dc.dc_project.model.dto; package com.dc.dc_project.model.dto.bigScreen;
import lombok.Data; import lombok.Data;

View File

@@ -0,0 +1,23 @@
package com.dc.dc_project.model.dto.bigScreen;
import com.dc.dc_project.model.dto.BasePage;
import lombok.Data;
import lombok.EqualsAndHashCode;
@EqualsAndHashCode(callSuper = true)
@Data
public class RecordBigScreenDto extends BasePage<RecordBigScreenDto> {
/**
* 年份
*/
private String year;
/**
* 分类模式
* 1按项目
* 2按工程
*/
private Integer typeMode;
}

View File

@@ -0,0 +1,26 @@
package com.dc.dc_project.model.dto.bigScreen;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dc.dc_project.model.dto.BasePage;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
@EqualsAndHashCode(callSuper = true)
@Data
@AllArgsConstructor
@NoArgsConstructor
public class SystemWarningDto extends Page<SystemWarningDto> {
/**
* 查询类型模式
* 1.检验超期设备
* 2.检测超期设备
* 3.超期未检验样品
* 4.临期未检验样品
*/
private Long typeMode = 1L;
}

View File

@@ -75,64 +75,9 @@ public class Org {
@TableField(value = "is_deleted") @TableField(value = "is_deleted")
private Integer isDeleted; private Integer isDeleted;
@Override /**
public boolean equals(Object that) { * 负责人id
if (this == that) { */
return true; @TableField(value = "leader_id")
} private Long leaderId;
if (that == null) {
return false;
}
if (getClass() != that.getClass()) {
return false;
}
Org other = (Org) that;
return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId()))
&& (this.getParentId() == null ? other.getParentId() == null : this.getParentId().equals(other.getParentId()))
&& (this.getName() == null ? other.getName() == null : this.getName().equals(other.getName()))
&& (this.getType() == null ? other.getType() == null : this.getType().equals(other.getType()))
&& (this.getCode() == null ? other.getCode() == null : this.getCode().equals(other.getCode()))
&& (this.getSortOrder() == null ? other.getSortOrder() == null : this.getSortOrder().equals(other.getSortOrder()))
&& (this.getRemark() == null ? other.getRemark() == null : this.getRemark().equals(other.getRemark()))
&& (this.getCreatedAt() == null ? other.getCreatedAt() == null : this.getCreatedAt().equals(other.getCreatedAt()))
&& (this.getUpdatedAt() == null ? other.getUpdatedAt() == null : this.getUpdatedAt().equals(other.getUpdatedAt()))
&& (this.getIsDeleted() == null ? other.getIsDeleted() == null : this.getIsDeleted().equals(other.getIsDeleted()));
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((getId() == null) ? 0 : getId().hashCode());
result = prime * result + ((getParentId() == null) ? 0 : getParentId().hashCode());
result = prime * result + ((getName() == null) ? 0 : getName().hashCode());
result = prime * result + ((getType() == null) ? 0 : getType().hashCode());
result = prime * result + ((getCode() == null) ? 0 : getCode().hashCode());
result = prime * result + ((getSortOrder() == null) ? 0 : getSortOrder().hashCode());
result = prime * result + ((getRemark() == null) ? 0 : getRemark().hashCode());
result = prime * result + ((getCreatedAt() == null) ? 0 : getCreatedAt().hashCode());
result = prime * result + ((getUpdatedAt() == null) ? 0 : getUpdatedAt().hashCode());
result = prime * result + ((getIsDeleted() == null) ? 0 : getIsDeleted().hashCode());
return result;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(getClass().getSimpleName());
sb.append(" [");
sb.append("Hash = ").append(hashCode());
sb.append(", id=").append(id);
sb.append(", parentId=").append(parentId);
sb.append(", name=").append(name);
sb.append(", type=").append(type);
sb.append(", code=").append(code);
sb.append(", sortOrder=").append(sortOrder);
sb.append(", remark=").append(remark);
sb.append(", createdAt=").append(createdAt);
sb.append(", updatedAt=").append(updatedAt);
sb.append(", isDeleted=").append(isDeleted);
sb.append("]");
return sb.toString();
}
} }

View File

@@ -0,0 +1,55 @@
package com.dc.dc_project.model.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.time.LocalDateTime;
import lombok.Data;
/**
* 检测工程信息表
* @TableName sys_record_engineering
*/
@TableName(value ="sys_record_engineering")
@Data
public class RecordEngineering {
/**
* 主键ID
*/
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 工程名称
*/
@TableField(value = "engineering_name")
private String engineeringName;
/**
* 创建时间
*/
@TableField(value = "created_at")
private LocalDateTime createdAt;
/**
* 更新时间
*/
@TableField(value = "updated_at")
private LocalDateTime updatedAt;
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append(getClass().getSimpleName());
sb.append(" [");
sb.append("Hash = ").append(hashCode());
sb.append(", id=").append(id);
sb.append(", engineeringName=").append(engineeringName);
sb.append(", createdAt=").append(createdAt);
sb.append(", updatedAt=").append(updatedAt);
sb.append("]");
return sb.toString();
}
}

View File

@@ -129,64 +129,12 @@ public class RecordEntrust {
@TableField(value = "is_deleted") @TableField(value = "is_deleted")
private Integer isDeleted; private Integer isDeleted;
@Override /**
public boolean equals(Object that) { * 所属工程ID
if (this == that) { */
return true; @TableField(value = "engineering_id")
} private Long engineeringId;
if (that == null) {
return false;
}
if (getClass() != that.getClass()) {
return false;
}
RecordEntrust other = (RecordEntrust) that;
return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId()))
&& (this.getEntrustNo() == null ? other.getEntrustNo() == null : this.getEntrustNo().equals(other.getEntrustNo()))
&& (this.getOrgId() == null ? other.getOrgId() == null : this.getOrgId().equals(other.getOrgId()))
&& (this.getClientName() == null ? other.getClientName() == null : this.getClientName().equals(other.getClientName()))
&& (this.getEntrustDate() == null ? other.getEntrustDate() == null : this.getEntrustDate().equals(other.getEntrustDate()))
&& (this.getContactName() == null ? other.getContactName() == null : this.getContactName().equals(other.getContactName()))
&& (this.getContactPhone() == null ? other.getContactPhone() == null : this.getContactPhone().equals(other.getContactPhone()))
&& (this.getSampleName() == null ? other.getSampleName() == null : this.getSampleName().equals(other.getSampleName()))
&& (this.getSampleCode() == null ? other.getSampleCode() == null : this.getSampleCode().equals(other.getSampleCode()))
&& (this.getSampleType() == null ? other.getSampleType() == null : this.getSampleType().equals(other.getSampleType()))
&& (this.getReceiveDate() == null ? other.getReceiveDate() == null : this.getReceiveDate().equals(other.getReceiveDate()))
&& (this.getTestType() == null ? other.getTestType() == null : this.getTestType().equals(other.getTestType()))
&& (this.getStatus() == null ? other.getStatus() == null : this.getStatus().equals(other.getStatus()))
&& (this.getRemark() == null ? other.getRemark() == null : this.getRemark().equals(other.getRemark()))
&& (this.getCreatedBy() == null ? other.getCreatedBy() == null : this.getCreatedBy().equals(other.getCreatedBy()))
&& (this.getUpdatedBy() == null ? other.getUpdatedBy() == null : this.getUpdatedBy().equals(other.getUpdatedBy()))
&& (this.getCreatedAt() == null ? other.getCreatedAt() == null : this.getCreatedAt().equals(other.getCreatedAt()))
&& (this.getUpdatedAt() == null ? other.getUpdatedAt() == null : this.getUpdatedAt().equals(other.getUpdatedAt()))
&& (this.getIsDeleted() == null ? other.getIsDeleted() == null : this.getIsDeleted().equals(other.getIsDeleted()));
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((getId() == null) ? 0 : getId().hashCode());
result = prime * result + ((getEntrustNo() == null) ? 0 : getEntrustNo().hashCode());
result = prime * result + ((getOrgId() == null) ? 0 : getOrgId().hashCode());
result = prime * result + ((getClientName() == null) ? 0 : getClientName().hashCode());
result = prime * result + ((getEntrustDate() == null) ? 0 : getEntrustDate().hashCode());
result = prime * result + ((getContactName() == null) ? 0 : getContactName().hashCode());
result = prime * result + ((getContactPhone() == null) ? 0 : getContactPhone().hashCode());
result = prime * result + ((getSampleName() == null) ? 0 : getSampleName().hashCode());
result = prime * result + ((getSampleCode() == null) ? 0 : getSampleCode().hashCode());
result = prime * result + ((getSampleType() == null) ? 0 : getSampleType().hashCode());
result = prime * result + ((getReceiveDate() == null) ? 0 : getReceiveDate().hashCode());
result = prime * result + ((getTestType() == null) ? 0 : getTestType().hashCode());
result = prime * result + ((getStatus() == null) ? 0 : getStatus().hashCode());
result = prime * result + ((getRemark() == null) ? 0 : getRemark().hashCode());
result = prime * result + ((getCreatedBy() == null) ? 0 : getCreatedBy().hashCode());
result = prime * result + ((getUpdatedBy() == null) ? 0 : getUpdatedBy().hashCode());
result = prime * result + ((getCreatedAt() == null) ? 0 : getCreatedAt().hashCode());
result = prime * result + ((getUpdatedAt() == null) ? 0 : getUpdatedAt().hashCode());
result = prime * result + ((getIsDeleted() == null) ? 0 : getIsDeleted().hashCode());
return result;
}
@Override @Override
public String toString() { public String toString() {

View File

@@ -123,63 +123,11 @@ public class RecordSample {
*/ */
@TableField(value = "is_deleted") @TableField(value = "is_deleted")
private Integer isDeleted; private Integer isDeleted;
/**
@Override * 检测时间
public boolean equals(Object that) { */
if (this == that) { @TableField(value = "calibration_date")
return true; private LocalDateTime calibrationDate;
}
if (that == null) {
return false;
}
if (getClass() != that.getClass()) {
return false;
}
RecordSample other = (RecordSample) that;
return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId()))
&& (this.getEntrustId() == null ? other.getEntrustId() == null : this.getEntrustId().equals(other.getEntrustId()))
&& (this.getSampleCode() == null ? other.getSampleCode() == null : this.getSampleCode().equals(other.getSampleCode()))
&& (this.getSampleName() == null ? other.getSampleName() == null : this.getSampleName().equals(other.getSampleName()))
&& (this.getSampleType() == null ? other.getSampleType() == null : this.getSampleType().equals(other.getSampleType()))
&& (this.getSamplingDate() == null ? other.getSamplingDate() == null : this.getSamplingDate().equals(other.getSamplingDate()))
&& (this.getSamplingPoint() == null ? other.getSamplingPoint() == null : this.getSamplingPoint().equals(other.getSamplingPoint()))
&& (this.getSamplingPosition() == null ? other.getSamplingPosition() == null : this.getSamplingPosition().equals(other.getSamplingPosition()))
&& (this.getRepresentativeCount() == null ? other.getRepresentativeCount() == null : this.getRepresentativeCount().equals(other.getRepresentativeCount()))
&& (this.getConditionDesc() == null ? other.getConditionDesc() == null : this.getConditionDesc().equals(other.getConditionDesc()))
&& (this.getStorageLocation() == null ? other.getStorageLocation() == null : this.getStorageLocation().equals(other.getStorageLocation()))
&& (this.getStatus() == null ? other.getStatus() == null : this.getStatus().equals(other.getStatus()))
&& (this.getRemark() == null ? other.getRemark() == null : this.getRemark().equals(other.getRemark()))
&& (this.getCreatedBy() == null ? other.getCreatedBy() == null : this.getCreatedBy().equals(other.getCreatedBy()))
&& (this.getUpdatedBy() == null ? other.getUpdatedBy() == null : this.getUpdatedBy().equals(other.getUpdatedBy()))
&& (this.getCreatedAt() == null ? other.getCreatedAt() == null : this.getCreatedAt().equals(other.getCreatedAt()))
&& (this.getUpdatedAt() == null ? other.getUpdatedAt() == null : this.getUpdatedAt().equals(other.getUpdatedAt()))
&& (this.getIsDeleted() == null ? other.getIsDeleted() == null : this.getIsDeleted().equals(other.getIsDeleted()));
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((getId() == null) ? 0 : getId().hashCode());
result = prime * result + ((getEntrustId() == null) ? 0 : getEntrustId().hashCode());
result = prime * result + ((getSampleCode() == null) ? 0 : getSampleCode().hashCode());
result = prime * result + ((getSampleName() == null) ? 0 : getSampleName().hashCode());
result = prime * result + ((getSampleType() == null) ? 0 : getSampleType().hashCode());
result = prime * result + ((getSamplingDate() == null) ? 0 : getSamplingDate().hashCode());
result = prime * result + ((getSamplingPoint() == null) ? 0 : getSamplingPoint().hashCode());
result = prime * result + ((getSamplingPosition() == null) ? 0 : getSamplingPosition().hashCode());
result = prime * result + ((getRepresentativeCount() == null) ? 0 : getRepresentativeCount().hashCode());
result = prime * result + ((getConditionDesc() == null) ? 0 : getConditionDesc().hashCode());
result = prime * result + ((getStorageLocation() == null) ? 0 : getStorageLocation().hashCode());
result = prime * result + ((getStatus() == null) ? 0 : getStatus().hashCode());
result = prime * result + ((getRemark() == null) ? 0 : getRemark().hashCode());
result = prime * result + ((getCreatedBy() == null) ? 0 : getCreatedBy().hashCode());
result = prime * result + ((getUpdatedBy() == null) ? 0 : getUpdatedBy().hashCode());
result = prime * result + ((getCreatedAt() == null) ? 0 : getCreatedAt().hashCode());
result = prime * result + ((getUpdatedAt() == null) ? 0 : getUpdatedAt().hashCode());
result = prime * result + ((getIsDeleted() == null) ? 0 : getIsDeleted().hashCode());
return result;
}
@Override @Override
public String toString() { public String toString() {

View File

@@ -0,0 +1,7 @@
package com.dc.dc_project.model.vo;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
public class BasePageVo<T> extends Page<T> {
}

View File

@@ -1,22 +0,0 @@
package com.dc.dc_project.model.vo;
import lombok.Data;
@Data
public class RecordEntrustStatisticsVo {
/**
* 月份
*/
private Integer month;
/**
* 委托总数量
*/
private Long entrustCount;
/**
* 报告数量
*/
private Long reportCount;
}

View File

@@ -1,4 +1,4 @@
package com.dc.dc_project.model.vo; package com.dc.dc_project.model.vo.bigScreen;
import lombok.Data; import lombok.Data;

View File

@@ -1,9 +1,7 @@
package com.dc.dc_project.model.vo; package com.dc.dc_project.model.vo.bigScreen;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.dc.dc_project.enums.laboratory.LaboratoryType; import com.dc.dc_project.enums.laboratory.LaboratoryType;
import com.dc.dc_project.model.pojo.Laboratory; import com.dc.dc_project.model.pojo.Laboratory;
import lombok.Data; import lombok.Data;

View File

@@ -0,0 +1,42 @@
package com.dc.dc_project.model.vo.bigScreen;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class RecordEntrustStatisticsVo {
/**
* 年份
*/
private String year;
/**
* 月份
*/
private Integer month;
/**
* 委托总数量
*/
private Long entrustCount;
/**
* 报告数量
*/
private Long reportCount;
private List<RecordEntrustStatisticsVo> recordEntrustStatisticsVos;
public RecordEntrustStatisticsVo(String year) {
this.year = year;
}
public RecordEntrustStatisticsVo(RecordEntrustStatisticsVo recordEntrustStatisticsVo) {
this.year = recordEntrustStatisticsVo.getYear();
}
}

View File

@@ -0,0 +1,46 @@
package com.dc.dc_project.model.vo.bigScreen;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class RecordStatisticsVo {
/**
* 年份
*/
private String year;
/**
* 工程名称
*/
private String engineeringName;
private String engineeringId;
/**
* 委托总数量
*/
private Long entrustCount;
/**
* 报告数量
*/
private Long reportCount;
/**
* 不合格数量
*/
private Long unqualifiedCount;
/**
* 不合格率
*/
private Double unqualifiedRate;
}

View File

@@ -0,0 +1,34 @@
package com.dc.dc_project.model.vo.bigScreen;
import com.dc.dc_project.model.vo.BasePageVo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
@NoArgsConstructor
@AllArgsConstructor
@Data
public class SystemWarningItemVo{
/**
* id
*/
private Long id;
/**
* 名称
*/
private String name;
/**
* 日期
*/
private String date;
/**
* 天数
*/
private Long day;
}

View File

@@ -0,0 +1,46 @@
package com.dc.dc_project.model.vo.bigScreen;
import com.dc.dc_project.model.vo.BasePageVo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* 设备预警信息
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class SystemWarningVo {
/**
* 检验超期设备数
*/
private Long checkOverdueCount;
/**
* 检校临期设备数
*/
private Long checkExpiringCount;
/**
* 超期未检验样品数
*/
private Long checkNotCheckedCount;
/**
* 临期未检验样品数
*/
private Long checkNotCheckedExpiringCount;
/**
* 预警信息
*/
private BasePageVo<SystemWarningItemVo> equipmentWarningItemVos;
}

View File

@@ -1,6 +1,8 @@
package com.dc.dc_project.service; package com.dc.dc_project.service;
import com.dc.dc_project.common.ResponseResult; import com.dc.dc_project.common.ResponseResult;
import com.dc.dc_project.model.dto.bigScreen.RecordBigScreenDto;
import com.dc.dc_project.model.dto.bigScreen.SystemWarningDto;
public interface BigScreenService { public interface BigScreenService {
/** /**
@@ -14,4 +16,16 @@ public interface BigScreenService {
* @return * @return
*/ */
ResponseResult getRecordEntrustStatistics(); ResponseResult getRecordEntrustStatistics();
/**
* 大屏委托统计信息2
* @return
*/
ResponseResult getRecordEntrustStatistics2(RecordBigScreenDto recordBigScreenDto);
/**
* 大屏系统预警信息
* @return
*/
ResponseResult getSystemWarning(SystemWarningDto systemWarningDto);
} }

View File

@@ -1,7 +1,7 @@
package com.dc.dc_project.service; package com.dc.dc_project.service;
import com.dc.dc_project.common.ResponseResult; import com.dc.dc_project.common.ResponseResult;
import com.dc.dc_project.model.dto.LaboratoryDto; import com.dc.dc_project.model.dto.bigScreen.LaboratoryDto;
import com.dc.dc_project.model.pojo.Laboratory; import com.dc.dc_project.model.pojo.Laboratory;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;

View File

@@ -0,0 +1,13 @@
package com.dc.dc_project.service;
import com.dc.dc_project.model.pojo.RecordEngineering;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* @author ADMIN
* @description 针对表【sys_record_engineering(检测工程信息表)】的数据库操作Service
* @createDate 2025-11-13 10:23:23
*/
public interface RecordEngineeringService extends IService<RecordEngineering> {
}

View File

@@ -1,9 +1,12 @@
package com.dc.dc_project.service; package com.dc.dc_project.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.dc.dc_project.model.pojo.RecordEntrust; import com.dc.dc_project.model.pojo.RecordEntrust;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.dc.dc_project.model.vo.bigScreen.RecordStatisticsVo;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List;
/** /**
* @author ADMIN * @author ADMIN
@@ -13,4 +16,5 @@ import java.time.LocalDateTime;
public interface RecordEntrustService extends IService<RecordEntrust> { public interface RecordEntrustService extends IService<RecordEntrust> {
Long getCountByTime(String startTimeStr, String endTime); Long getCountByTime(String startTimeStr, String endTime);
} }

View File

@@ -1,18 +1,24 @@
package com.dc.dc_project.service.impl; package com.dc.dc_project.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.dc.dc_project.common.ResponseResult; import com.dc.dc_project.common.ResponseResult;
import com.dc.dc_project.model.pojo.RecordEntrust; import com.dc.dc_project.mapper.EquipmentMapper;
import com.dc.dc_project.model.vo.BigScreenStatistics; import com.dc.dc_project.mapper.RecordEntrustMapper;
import com.dc.dc_project.model.vo.RecordEntrustStatisticsVo; import com.dc.dc_project.mapper.RecordSampleMapper;
import com.dc.dc_project.model.dto.bigScreen.RecordBigScreenDto;
import com.dc.dc_project.model.dto.bigScreen.SystemWarningDto;
import com.dc.dc_project.model.vo.BasePageVo;
import com.dc.dc_project.model.vo.bigScreen.*;
import com.dc.dc_project.service.*; import com.dc.dc_project.service.*;
import com.dc.dc_project.utils.DateUtils;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.List;
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor
@@ -20,10 +26,14 @@ public class BigScreenServiceImpl implements BigScreenService {
private final LaboratoryService laboratoryService; private final LaboratoryService laboratoryService;
private final EquipmentService equipmentService; private final EquipmentService equipmentService;
private final EquipmentMapper equipmentMapper;
private final RecordSampleMapper recordSampleMapper;
private final StandardService standardService; private final StandardService standardService;
private final PersonnelService personnelService; private final PersonnelService personnelService;
private final RecordEntrustService recordEntrustService; private final RecordEntrustService recordEntrustService;
private final RecordEntrustMapper recordEntrustMapper;
private final RecordReportService recordReportService; private final RecordReportService recordReportService;
@Override @Override
public ResponseResult getPigStatistics() { public ResponseResult getPigStatistics() {
BigScreenStatistics bigScreenStatistics = new BigScreenStatistics(); BigScreenStatistics bigScreenStatistics = new BigScreenStatistics();
@@ -42,14 +52,15 @@ public class BigScreenServiceImpl implements BigScreenService {
public ResponseResult getRecordEntrustStatistics() { public ResponseResult getRecordEntrustStatistics() {
// 获取本年时间 // 获取本年时间
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss"); DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
RecordEntrustStatisticsVo root = new RecordEntrustStatisticsVo(DateUtils.getCurrentYear());
for (int i = 1; i < 13; i++) {
// 本年开始时间1月1日 00:00:00 // 本年开始时间1月1日 00:00:00
LocalDateTime startTime = LocalDateTime.of(LocalDateTime.now().getYear(), 1, 1, 0, 0, 0); LocalDateTime startTime = LocalDateTime.of(LocalDateTime.now().getYear(), i, 1, 0, 0, 0);
String startTimeStr = startTime.format(dtf); String startTimeStr = startTime.format(dtf);
// 结束时间为当前时间 // 结束时间为当前时间
LocalDateTime endTime = LocalDateTime.now(); LocalDateTime endTime = LocalDateTime.of(LocalDateTime.now().getYear(), i, 31, 0, 0, 0);
String endTimeStr = endTime.format(dtf); String endTimeStr = endTime.format(dtf);
for (int i = 1; i < 13; i++) { RecordEntrustStatisticsVo recordEntrustStatistics = new RecordEntrustStatisticsVo(root);
RecordEntrustStatisticsVo recordEntrustStatistics = new RecordEntrustStatisticsVo();
recordEntrustStatistics.setMonth(i); recordEntrustStatistics.setMonth(i);
recordEntrustStatistics.setEntrustCount( recordEntrustStatistics.setEntrustCount(
recordEntrustService.getCountByTime(startTimeStr, endTimeStr) recordEntrustService.getCountByTime(startTimeStr, endTimeStr)
@@ -57,7 +68,68 @@ public class BigScreenServiceImpl implements BigScreenService {
recordEntrustStatistics.setReportCount( recordEntrustStatistics.setReportCount(
recordReportService.getCountByTime(startTimeStr, endTimeStr) recordReportService.getCountByTime(startTimeStr, endTimeStr)
); );
root.getRecordEntrustStatisticsVos().add(recordEntrustStatistics);
} }
return null; return ResponseResult.success(root);
} }
@Override
public ResponseResult getRecordEntrustStatistics2(RecordBigScreenDto recordBigScreenDto) {
// 开始时间1月1日 00:00:00
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
LocalDateTime startTime = LocalDateTime.of(Integer.parseInt(recordBigScreenDto.getYear()), 1, 1, 0, 0, 0);
String startTimeStr = startTime.format(dtf);
// 结束时间
LocalDateTime endTime = LocalDateTime.of(Integer.parseInt(recordBigScreenDto.getYear()), 12, 31, 0, 0, 0);
String endTimeStr = endTime.format(dtf);
Page<RecordStatisticsVo> page = new Page<>(
recordBigScreenDto.getCurrent(), recordBigScreenDto.getSize());
if (recordBigScreenDto.getTypeMode() == 1) {
// 工程
page = recordEntrustMapper.getCountByTimeGroupE(startTimeStr, endTimeStr, page);
for (RecordStatisticsVo recordStatisticsVo : page.getRecords()) {
recordStatisticsVo.setYear(recordBigScreenDto.getYear());
recordStatisticsVo.setUnqualifiedRate(recordStatisticsVo.getUnqualifiedCount() * 1.0 / recordStatisticsVo.getReportCount());
}
} else if (recordBigScreenDto.getTypeMode() == 2) {
// 按项目
} else {
return ResponseResult.error("参数错误");
}
return ResponseResult.success(page);
}
@Override
public ResponseResult getSystemWarning(SystemWarningDto systemWarningDto) {
// 当前时间
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
LocalDateTime now = LocalDateTime.now();
String nowStr = now.format(dtf);
// 数量统计
IPage<SystemWarningItemVo> page = new Page<>(systemWarningDto.getCurrent(), systemWarningDto.getSize());
BasePageVo<SystemWarningItemVo> checkOverdue = equipmentMapper.getCheckOverdueCount(nowStr, page);
BasePageVo<SystemWarningItemVo> checkExpiring = equipmentMapper.getCheckExpiringCount(nowStr, page);
BasePageVo<SystemWarningItemVo> checkNotCheckedCount = recordSampleMapper.getCheckNotCheckedCount(nowStr, page);
BasePageVo<SystemWarningItemVo> checkNotChecked = recordSampleMapper.getCheckNotChecked(nowStr, page);
SystemWarningVo systemWarningVo = new SystemWarningVo(
checkOverdue.getTotal(),
checkExpiring.getTotal(),
checkNotCheckedCount.getTotal(),
checkNotChecked.getTotal(),
checkOverdue
);
if (systemWarningDto.getTypeMode() == 2) {
systemWarningVo.setEquipmentWarningItemVos(checkExpiring);
} else if (systemWarningDto.getTypeMode() == 3) {
systemWarningVo.setEquipmentWarningItemVos(checkNotCheckedCount);
} else if (systemWarningDto.getTypeMode() == 4) {
systemWarningVo.setEquipmentWarningItemVos(checkNotChecked);
}
return ResponseResult.success(systemWarningVo);
}
} }

View File

@@ -3,19 +3,17 @@ package com.dc.dc_project.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dc.dc_project.common.ResponseResult; import com.dc.dc_project.common.ResponseResult;
import com.dc.dc_project.model.dto.LaboratoryDto; import com.dc.dc_project.model.dto.bigScreen.LaboratoryDto;
import com.dc.dc_project.model.pojo.Laboratory; import com.dc.dc_project.model.pojo.Laboratory;
import com.dc.dc_project.model.pojo.Standard;
import com.dc.dc_project.model.pojo.StandardCategory; import com.dc.dc_project.model.pojo.StandardCategory;
import com.dc.dc_project.model.vo.BigScreenStatistics; import com.dc.dc_project.model.vo.bigScreen.BigScreenStatistics;
import com.dc.dc_project.model.vo.LaboratoryVo; import com.dc.dc_project.model.vo.bigScreen.LaboratoryVo;
import com.dc.dc_project.service.LaboratoryService; import com.dc.dc_project.service.LaboratoryService;
import com.dc.dc_project.mapper.LaboratoryMapper; import com.dc.dc_project.mapper.LaboratoryMapper;
import com.dc.dc_project.service.StandardCategoryService; import com.dc.dc_project.service.StandardCategoryService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.dc.dc_project.enums.laboratory.LaboratoryType;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;

View File

@@ -0,0 +1,22 @@
package com.dc.dc_project.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.dc.dc_project.model.pojo.RecordEngineering;
import com.dc.dc_project.service.RecordEngineeringService;
import com.dc.dc_project.mapper.RecordEngineeringMapper;
import org.springframework.stereotype.Service;
/**
* @author ADMIN
* @description 针对表【sys_record_engineering(检测工程信息表)】的数据库操作Service实现
* @createDate 2025-11-13 10:23:23
*/
@Service
public class RecordEngineeringServiceImpl extends ServiceImpl<RecordEngineeringMapper, RecordEngineering>
implements RecordEngineeringService{
}

View File

@@ -19,7 +19,7 @@ public class RecordEntrustServiceImpl extends ServiceImpl<RecordEntrustMapper, R
@Override @Override
public Long getCountByTime(String startTimeStr, String endTime) { public Long getCountByTime(String startTimeStr, String endTime) {
return baseMapper.getCountByTime(startTimeStr, endTime);
} }
} }

View File

@@ -19,7 +19,6 @@ public class RecordReportServiceImpl extends ServiceImpl<RecordReportMapper, Rec
@Override @Override
public Long getCountByTime(String startTimeStr, String endTimeStr) { public Long getCountByTime(String startTimeStr, String endTimeStr) {
return baseMapper.getCountByTime(startTimeStr, endTimeStr); return baseMapper.getCountByTime(startTimeStr, endTimeStr);
} }
} }

View File

@@ -4,31 +4,6 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dc.dc_project.mapper.EquipmentMapper"> <mapper namespace="com.dc.dc_project.mapper.EquipmentMapper">
<resultMap id="BaseResultMap" type="com.dc.dc_project.model.pojo.Equipment">
<id property="id" column="id" />
<result property="org_id" column="org_id" />
<result property="name" column="name" />
<result property="model" column="model" />
<result property="manufacturer" column="manufacturer" />
<result property="serial_no" column="serial_no" />
<result property="purchase_date" column="purchase_date" />
<result property="price" column="price" />
<result property="range_value" column="range_value" />
<result property="accuracy" column="accuracy" />
<result property="status" column="status" />
<result property="calibration_org" column="calibration_org" />
<result property="calibration_date" column="calibration_date" />
<result property="valid_until" column="valid_until" />
<result property="remind_days" column="remind_days" />
<result property="location" column="location" />
<result property="responsible_user" column="responsible_user" />
<result property="remark" column="remark" />
<result property="created_at" column="created_at" />
<result property="updated_at" column="updated_at" />
<result property="created_by" column="created_by" />
<result property="updated_by" column="updated_by" />
<result property="is_deleted" column="is_deleted" />
</resultMap>
<sql id="Base_Column_List"> <sql id="Base_Column_List">
id,org_id,name,model,manufacturer,serial_no, id,org_id,name,model,manufacturer,serial_no,
@@ -37,4 +12,20 @@
responsible_user,remark,created_at,updated_at,created_by, responsible_user,remark,created_at,updated_at,created_by,
updated_by,is_deleted updated_by,is_deleted
</sql> </sql>
<select id="getCheckOverdueCount" resultType="com.dc.dc_project.model.vo.bigScreen.SystemWarningItemVo">
SELECT se.id, se.name, se.valid_until AS date, DATEDIFF(se.valid_until, #{nowStr}) AS day FROM sys_equipment se
<where>
se.valid_until <![CDATA[<]]> #{nowStr}
AND se.is_deleted = 0
</where>
ORDER BY se.valid_until ASC
</select>
<select id="getCheckExpiringCount" resultType="com.dc.dc_project.model.vo.bigScreen.SystemWarningItemVo">
SELECT se.id, se.name, se.valid_until AS date, DATEDIFF(se.valid_until, #{nowStr}) AS day FROM sys_equipment se
<where>
se.valid_until BETWEEN #{nowStr} AND DATE_ADD(#{nowStr}, INTERVAL 30 DAY)
AND se.is_deleted = 0
</where>
ORDER BY se.valid_until ASC
</select>
</mapper> </mapper>

View File

@@ -0,0 +1,17 @@
<?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.dc.dc_project.mapper.RecordEngineeringMapper">
<resultMap id="BaseResultMap" type="com.dc.dc_project.model.pojo.RecordEngineering">
<id property="id" column="id" />
<result property="engineeringName" column="engineering_name" />
<result property="createdAt" column="created_at" />
<result property="updatedAt" column="updated_at" />
</resultMap>
<sql id="Base_Column_List">
id,engineering_name,created_at,updated_at
</sql>
</mapper>

View File

@@ -4,32 +4,30 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dc.dc_project.mapper.RecordEntrustMapper"> <mapper namespace="com.dc.dc_project.mapper.RecordEntrustMapper">
<resultMap id="BaseResultMap" type="com.dc.dc_project.model.pojo.RecordEntrust">
<id property="id" column="id" />
<result property="entrust_no" column="entrust_no" />
<result property="org_id" column="org_id" />
<result property="client_name" column="client_name" />
<result property="entrust_date" column="entrust_date" />
<result property="contact_name" column="contact_name" />
<result property="contact_phone" column="contact_phone" />
<result property="sample_name" column="sample_name" />
<result property="sample_code" column="sample_code" />
<result property="sample_type" column="sample_type" />
<result property="receive_date" column="receive_date" />
<result property="test_type" column="test_type" />
<result property="status" column="status" />
<result property="remark" column="remark" />
<result property="created_by" column="created_by" />
<result property="updated_by" column="updated_by" />
<result property="created_at" column="created_at" />
<result property="updated_at" column="updated_at" />
<result property="is_deleted" column="is_deleted" />
</resultMap>
<sql id="Base_Column_List"> <sql id="Base_Column_List">
id,entrust_no,org_id,client_name,entrust_date,contact_name, id,entrust_no,org_id,client_name,entrust_date,contact_name,
contact_phone,sample_name,sample_code,sample_type,receive_date, contact_phone,sample_name,sample_code,sample_type,receive_date,
test_type,status,remark,created_by,updated_by, test_type,status,remark,created_by,updated_by,
created_at,updated_at,is_deleted created_at,updated_at,is_deleted
</sql> </sql>
<select id="getCountByTime" resultType="java.lang.Long">
select count(*) from sys_record_entrust where entrust_date between #{startTime} and #{endTime}
</select>
<select id="getCountByTimeGroupE" resultType="com.dc.dc_project.model.vo.bigScreen.RecordStatisticsVo">
SELECT
p.id AS engineering_id,
p.engineering_name AS engineering_name,
COUNT(DISTINCT e.id) AS entrust_count,
COUNT(r.id) AS report_count,
SUM(CASE WHEN r.conclusion = '不合格' OR r.conclusion LIKE '%不合格%' THEN 1 ELSE 0 END) AS unqualified_count
FROM sys_record_engineering p
LEFT JOIN sys_record_entrust e ON p.id = e.engineering_id
LEFT JOIN sys_record_report r ON e.id = r.entrust_id
<where>
e.create_time &gt;= #{startTimeStr}
AND e.create_time &lt;= #{endTimeStr}
</where>
GROUP BY p.id, p.engineering_name
ORDER BY entrust_count DESC;
</select>
</mapper> </mapper>

View File

@@ -4,20 +4,6 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dc.dc_project.mapper.RecordReportMapper"> <mapper namespace="com.dc.dc_project.mapper.RecordReportMapper">
<resultMap id="BaseResultMap" type="com.dc.dc_project.model.pojo.RecordReport">
<id property="id" column="id" />
<result property="report_no" column="report_no" />
<result property="entrust_id" column="entrust_id" />
<result property="issue_date" column="issue_date" />
<result property="reviewer_id" column="reviewer_id" />
<result property="approver_id" column="approver_id" />
<result property="status" column="status" />
<result property="conclusion" column="conclusion" />
<result property="file_url" column="file_url" />
<result property="remark" column="remark" />
<result property="created_at" column="created_at" />
<result property="updated_at" column="updated_at" />
</resultMap>
<sql id="Base_Column_List"> <sql id="Base_Column_List">
id,report_no,entrust_id,issue_date,reviewer_id,approver_id, id,report_no,entrust_id,issue_date,reviewer_id,approver_id,
@@ -25,6 +11,6 @@
updated_at updated_at
</sql> </sql>
<select id="getCountByTime" resultType="java.lang.Long"> <select id="getCountByTime" resultType="java.lang.Long">
select COUNT(*) from record_report select COUNT(*) from sys_record_report where issue_date between #{startTimeStr} and #{endTimeStr}
</select> </select>
</mapper> </mapper>

View File

@@ -4,26 +4,6 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.dc.dc_project.mapper.RecordSampleMapper"> <mapper namespace="com.dc.dc_project.mapper.RecordSampleMapper">
<resultMap id="BaseResultMap" type="com.dc.dc_project.model.pojo.RecordSample">
<id property="id" column="id" />
<result property="entrust_id" column="entrust_id" />
<result property="sample_code" column="sample_code" />
<result property="sample_name" column="sample_name" />
<result property="sample_type" column="sample_type" />
<result property="sampling_date" column="sampling_date" />
<result property="sampling_point" column="sampling_point" />
<result property="sampling_position" column="sampling_position" />
<result property="representative_count" column="representative_count" />
<result property="condition_desc" column="condition_desc" />
<result property="storage_location" column="storage_location" />
<result property="status" column="status" />
<result property="remark" column="remark" />
<result property="created_by" column="created_by" />
<result property="updated_by" column="updated_by" />
<result property="created_at" column="created_at" />
<result property="updated_at" column="updated_at" />
<result property="is_deleted" column="is_deleted" />
</resultMap>
<sql id="Base_Column_List"> <sql id="Base_Column_List">
id,entrust_id,sample_code,sample_name,sample_type,sampling_date, id,entrust_id,sample_code,sample_name,sample_type,sampling_date,
@@ -31,4 +11,29 @@
status,remark,created_by,updated_by,created_at, status,remark,created_by,updated_by,created_at,
updated_at,is_deleted updated_at,is_deleted
</sql> </sql>
<select id="getCheckNotCheckedCount" resultType="com.dc.dc_project.model.vo.bigScreen.SystemWarningItemVo">
SELECT sys.id, sys.sample_name, sys.calibration_date data, DATEDIFF(sys.calibration_date, #{nowStr}) AS day FROM sys_record_sample sys
<where>
sys.status != 2
AND sys.is_deleted = 0
AND sys.calibration_date &lt; #{nowStr}
</where>
ORDER BY sys.calibration_date ASC
LIMIT #{page.offset}, #{page.size}
</select>
<select id="getCheckNotChecked" resultType="com.dc.dc_project.model.vo.bigScreen.SystemWarningItemVo">
SELECT
sys.id,
sys.sample_name AS name,
sys.calibration_date AS date,
DATEDIFF(sys.calibration_date, #{nowStr}) AS day
FROM sys_record_sample sys
<where>
sys.status != 2
AND sys.is_deleted = 0
AND sys.calibration_date BETWEEN #{nowStr} AND DATE_ADD(#{nowStr}, INTERVAL 15 DAY)
</where>
ORDER BY sys.calibration_date ASC
LIMIT #{page.offset}, #{page.size}
</select>
</mapper> </mapper>