XiaoRuby
2023-08-19 d0a6fc23f31f924cb1744397478dc4c7c57c04e1
Merge remote-tracking branch 'origin/master'
已修改32个文件
已重命名3个文件
已删除8个文件
已添加49个文件
3223 ■■■■■ 文件已修改
.idea/.gitignore 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/aws.xml 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/compiler.xml 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/encodings.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/jarRepositories.xml 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/misc.xml 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/vcs.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-server/pom.xml 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-server/src/main/java/com/yuanchu/limslaboratory/controller/CnasAnnualPlanController.java 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-server/src/main/java/com/yuanchu/limslaboratory/controller/CnasSatisfactionSurveyController.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-server/src/main/java/com/yuanchu/limslaboratory/mapper/CnasAnnualPlanMapper.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-server/src/main/java/com/yuanchu/limslaboratory/mapper/CnasSatisfactionSurveyMapper.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-server/src/main/java/com/yuanchu/limslaboratory/pojo/CnasAnnualPlan.java 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-server/src/main/java/com/yuanchu/limslaboratory/pojo/CnasSatisfactionSurvey.java 143 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-server/src/main/java/com/yuanchu/limslaboratory/pojo/Dto/CnasSatisfactionSurveyPageDto.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/CnasAnnualPlanVo.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/CnasSatisfactionSurveyVo.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-server/src/main/java/com/yuanchu/limslaboratory/service/CnasAnnualPlanService.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-server/src/main/java/com/yuanchu/limslaboratory/service/CnasSatisfactionSurveyService.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-server/src/main/java/com/yuanchu/limslaboratory/service/impl/CnasAnnualPlanServiceImpl.java 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-server/src/main/java/com/yuanchu/limslaboratory/service/impl/CnasSatisfactionSurveyServiceImpl.java 206 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-server/src/main/resources/mapper/CnasAnnualPlanMapper.xml 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-server/src/main/resources/mapper/CnasSatisfactionSurveyMapper.xml 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/pom.xml 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/com/yuanchu/limslaboratory/utils/MultipartFileToFileUtil.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/com/yuanchu/limslaboratory/utils/MyUtil.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/com/yuanchu/limslaboratory/utils/ThreadPoolConfig.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
framework/src/main/java/com/yuanchu/limslaboratory/utils/Threads.java 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/InspectionController.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/NonConformanceReviewController.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/NonConformingFeedbackController.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/PlanController.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/ReportAuditingController.java 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/ReportController.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/NonConformanceReviewMapper.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/NonConformingFeedbackMapper.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/PlanMapper.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/ReportMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/Dto/NonConformanceReviewDto.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/Dto/NonConformingFeedbackDto.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/NonConformanceReview.java 102 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/NonConformingFeedback.java 53 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/Report.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/NonConformanceReviewVo.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/NonConformingFeedbackVo.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/PlanVo.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/ReportAuditingVo.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/ReportVo.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/java/com/yuanchu/limslaboratory/service/NonConformanceReviewService.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/java/com/yuanchu/limslaboratory/service/NonConformingFeedbackService.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/java/com/yuanchu/limslaboratory/service/PlanService.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/java/com/yuanchu/limslaboratory/service/ReportAuditingService.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/InspectionServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/LinkBasicInformationServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/NonConformanceReviewServiceImpl.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/NonConformingFeedbackServiceImpl.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/PlanServiceImpl.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/ReportAuditingServiceImpl.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/ReportCheckServiceImpl.java 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/ReportServiceImpl.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/resources/mapper/NonConformingFeedbackMapper.xml 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/resources/mapper/PlanMapper.xml 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspection-server/src/main/resources/mapper/ReportMapper.xml 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/ClassifyController.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/MeteringPlanController.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
laboratory-server/src/main/java/com/yuanchu/limslaboratory/mapper/ClassifyMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
laboratory-server/src/main/java/com/yuanchu/limslaboratory/mapper/MeteringPlanMapper.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/LimitPage.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/MeteringPlanAndInfo.java 52 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/MeteringPlanAndInfoAndIns.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/MetricalInfoAndIns.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/MetricalInformation.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/GetPlanMeasureInstrumentDto.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/SelectMeasurementLedgerDto.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/SelectMeteringPlanDto.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/MeteringPlanService.java 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/ClassifyServiceImpl.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/MeteringPlanServiceImpl.java 55 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/MetricalInformationServiceImpl.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
laboratory-server/src/main/resources/mapper/ClassifyMapper.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
laboratory-server/src/main/resources/mapper/MeteringPlanMapper.xml 183 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
laboratory-server/src/main/resources/mapper/MetricalInformationMapper.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pom.xml 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
standard-server/src/main/resources/mapper/MaterialMapper.xml 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sys/pom.xml 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sys/src/main/java/com/yuanchu/limslaboratory/CodeGenerator.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sys/src/main/resources/application-dev.yml 14 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
sys/src/test/java/com/yuanchu/limslaboratory/SysApplicationTests.java 168 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user-server/src/main/java/com/yuanchu/limslaboratory/pojo/User.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
user-server/src/main/java/com/yuanchu/limslaboratory/service/impl/UserServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
user-server/src/main/java/com/yuanchu/limslaboratory/vo/PagePersonnelVo.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
user-server/src/main/resources/mapper/UserMapper.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
.idea/.gitignore
ÎļþÒÑɾ³ý
.idea/aws.xml
ÎļþÒÑɾ³ý
.idea/compiler.xml
ÎļþÒÑɾ³ý
.idea/encodings.xml
ÎļþÒÑɾ³ý
.idea/jarRepositories.xml
ÎļþÒÑɾ³ý
.idea/misc.xml
ÎļþÒÑɾ³ý
.idea/vcs.xml
ÎļþÒÑɾ³ý
cnas-server/pom.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,81 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>lims-laboratory</artifactId>
        <groupId>com.yuanchu</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.yuanchu.limslaboratory</groupId>
    <artifactId>cnas-server</artifactId>
    <packaging>jar</packaging>
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    <dependencies>
        <dependency>
            <groupId>com.yunchu.limslaboratory</groupId>
            <artifactId>framework</artifactId>
            <version>${project.parent.version}</version>
        </dependency>
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.8.12</version>
        </dependency>
        <!--底下四个都是poi依赖-->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>4.1.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>4.1.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml-schemas</artifactId>
            <version>4.1.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-scratchpad</artifactId>
            <version>4.1.2</version>
        </dependency>
        <dependency>
            <groupId>com.yunchu.limslaboratory</groupId>
            <artifactId>user-server</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>4.1.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>4.1.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml-schemas</artifactId>
            <version>4.1.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-scratchpad</artifactId>
            <version>4.1.2</version>
        </dependency>
    </dependencies>
</project>
cnas-server/src/main/java/com/yuanchu/limslaboratory/controller/CnasAnnualPlanController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,99 @@
package com.yuanchu.limslaboratory.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuanchu.limslaboratory.pojo.CnasAnnualPlan;
import com.yuanchu.limslaboratory.pojo.vo.CnasAnnualPlanVo;
import com.yuanchu.limslaboratory.service.CnasAnnualPlanService;
import com.yuanchu.limslaboratory.utils.JackSonUtil;
import com.yuanchu.limslaboratory.utils.RedisUtil;
import com.yuanchu.limslaboratory.vo.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
 * <p>
 * å®¡æ ¸å¹´åº¦è®¡åˆ’表 å‰ç«¯æŽ§åˆ¶å™¨
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2023-08-10 11:50:11
 */
@Api(tags = "CNAS管理-->审核年度计划")
@RestController
@RequestMapping("/cnasAnnualPlan")
public class CnasAnnualPlanController {
    @Resource
    private CnasAnnualPlanService cnasAnnualPlanService;
    @ApiOperation(value = "查询审查计划")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "page", value = "初始页", dataTypeClass = Integer.class, required = true),
            @ApiImplicitParam(name = "pageSize", value = "每一页数量", dataTypeClass = Integer.class, required = true),
            @ApiImplicitParam(name = "planTime", value = "检验开始时间", dataTypeClass = Date.class),
    })
    @GetMapping("/selectAllList")
    public Result selectAllList(Integer page, Integer pageSize, @DateTimeFormat(pattern = "yyyy-MM") Date planTime) {
        IPage<CnasAnnualPlanVo> reportPage = cnasAnnualPlanService.selectAllList(new Page(page, pageSize), planTime);
        Map<String, Object> map = new HashMap<>();
        map.put("total", reportPage.getTotal());
        map.put("row", reportPage.getRecords());
        return Result.success(map);
    }
    @ApiOperation(value = "新增审查计划")
    @PostMapping("/addCnasAnnualPlan")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "CnasAnnualPlan", value = "审查对象", dataTypeClass = Integer.class, required = true)
    })
    public Result addCnasAnnualPlan(@RequestHeader("X-Token") String token, @RequestBody CnasAnnualPlan cnasAnnualPlan) throws Exception {
        Object object = RedisUtil.get(token);
        Map<String, Object> unmarshal = JackSonUtil.unmarshal(JackSonUtil.marshal(object), Map.class);
        String name = (String) unmarshal.get("name");
        cnasAnnualPlan.setKeyboarder(name);
        //todo:获取name有问题
        cnasAnnualPlanService.save(cnasAnnualPlan);
        return Result.success();
    }
    @ApiOperation(value = "上传附件")
    @PostMapping("/addAccessory")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "auditTime", value = "审核日期", dataTypeClass = Date.class, required = true),
            @ApiImplicitParam(name = "file", value = "附件文件", dataTypeClass = MultipartFile.class, required = true)
    })
    public Result addAccessory(@RequestHeader("X-Token") String token, Date auditTime, MultipartFile file) throws Exception {
        //解析当前登录用户
        Object object = RedisUtil.get(token);
        Map<String, Object> unmarshal = JackSonUtil.unmarshal(JackSonUtil.marshal(object), Map.class);
        String name = (String) unmarshal.get("name");
        cnasAnnualPlanService.addAccessory(name, auditTime, file);
        return Result.success();
    }
    @ApiOperation(value = "删除年度计划")
    @GetMapping("/deleteCnasAnnualPlan")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "planId", value = "审核日期", dataTypeClass = Integer.class, required = true)
    })
    public Result deleteCnasAnnualPlan(Integer planId) {
        Integer isDeleteSuccess = cnasAnnualPlanService.deleteCnasAnnualPlan(planId);
        if (isDeleteSuccess == 1){
            return Result.success("删除成功");
        } else {
            return Result.fail("删除失败");
        }
    }
}
cnas-server/src/main/java/com/yuanchu/limslaboratory/controller/CnasSatisfactionSurveyController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,63 @@
package com.yuanchu.limslaboratory.controller;
import com.yuanchu.limslaboratory.pojo.CnasSatisfactionSurvey;
import com.yuanchu.limslaboratory.pojo.Dto.CnasSatisfactionSurveyPageDto;
import com.yuanchu.limslaboratory.pojo.vo.CnasSatisfactionSurveyVo;
import com.yuanchu.limslaboratory.service.CnasSatisfactionSurveyService;
import com.yuanchu.limslaboratory.vo.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.util.Map;
/**
 * @Author å¼ å®¾
 * @Date 2023/8/10
 */
@RestController
@RequestMapping("/cnasSatisfactionSurvey")
@Api(tags = "CNAS-->满意度调查")
public class CnasSatisfactionSurveyController {
    @Resource
    private CnasSatisfactionSurveyService service;
    /**
     * èŽ·å–æ»¡æ„åº¦è°ƒæŸ¥ä¿¡æ¯
     * @return
     */
    @ApiOperation(value = "获取满意度调查")
    @GetMapping("/getCnasSatisfactionSurvey")
    public Result<CnasSatisfactionSurveyVo>getCnasSatisfactionSurvey(CnasSatisfactionSurveyPageDto cnasSatisfactionSurveyPageDto){
        return Result.success(service.getCnasSatisfactionSurvey(cnasSatisfactionSurveyPageDto));
    }
    @GetMapping("/getFillNameAndId")
    @ApiOperation(value = "获取当前录取人")
    public Result<Map>getFillNameAndId(@RequestHeader("X-Token")String token){
        return Result.success(service.getFillNameAndTd(token));
    }
    /**
     * é™„件上传
     * @param file
     * @return
     */
    @ApiOperation(value = "附件上传")
    @PostMapping(value = "/uploadFile",consumes = MediaType.MULTIPART_FORM_DATA_VALUE, produces = {MediaType.APPLICATION_JSON_VALUE})
    public Result<Map>wordParse(MultipartFile file){
        return Result.success(service.wordParse(file));
    }
    @ApiOperation(value = "满意度调查新增")
    @PostMapping("/addSurvey")
    public Result<Boolean>addSurvey(@RequestBody CnasSatisfactionSurvey cnasSatisfactionSurvey){
        System.out.println(cnasSatisfactionSurvey+"=============");
        return Result.success(service.addSurvey(cnasSatisfactionSurvey));
    }
}
cnas-server/src/main/java/com/yuanchu/limslaboratory/mapper/CnasAnnualPlanMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
package com.yuanchu.limslaboratory.mapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuanchu.limslaboratory.pojo.CnasAnnualPlan;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yuanchu.limslaboratory.pojo.vo.CnasAnnualPlanVo;
import java.util.Date;
/**
 * <p>
 * å®¡æ ¸å¹´åº¦è®¡åˆ’表 Mapper æŽ¥å£
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2023-08-10 11:50:11
 */
public interface CnasAnnualPlanMapper extends BaseMapper<CnasAnnualPlan> {
    /**
     * æŸ¥è¯¢å®¡æ ¸è®¡åˆ’
     * @return
     */
    IPage<CnasAnnualPlanVo> selectAllList(Page<Object> objectPage, Integer year, Integer month);
}
cnas-server/src/main/java/com/yuanchu/limslaboratory/mapper/CnasSatisfactionSurveyMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
package com.yuanchu.limslaboratory.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuanchu.limslaboratory.pojo.CnasSatisfactionSurvey;
import org.springframework.stereotype.Repository;
/**
 * @Author å¼ å®¾
 * @Date 2023/8/10
 */
@Repository
public interface CnasSatisfactionSurveyMapper extends BaseMapper<CnasSatisfactionSurvey> {
    IPage<CnasSatisfactionSurvey>selectCnasSatisfactionSurvey(Page<CnasSatisfactionSurvey>page, String surveyDate,String entryDate);
}
cnas-server/src/main/java/com/yuanchu/limslaboratory/pojo/CnasAnnualPlan.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,86 @@
package com.yuanchu.limslaboratory.pojo;
import com.baomidou.mybatisplus.annotation.*;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.Date;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
/**
 * <p>
 * å®¡æ ¸å¹´åº¦è®¡åˆ’表
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2023-08-10 11:50:11
 */
@Data
@TableName("cnas_annual_plan")
@ApiModel(value="CnasAnnualPlan对象", description="")
public class CnasAnnualPlan implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId(value = "id", type = IdType.AUTO)
    @ApiModelProperty(value = "主键id")
    private Integer id;
    @ApiModelProperty(value = "性质,0:内审,1:管理评审")
    private Integer auditType;
    @ApiModelProperty(value = "部门")
    private String department;
    @ApiModelProperty(value = "审核目的")
    private String auditPurpose;
    @ApiModelProperty(value = "审核组长")
    private String auditLeader;
    @ApiModelProperty(value = "审核组员")
    private String auditEmp;
    @ApiModelProperty(value = "审核依据")
    private String auditPursuant;
    @ApiModelProperty(value = "审核范围")
    private String auditScope;
    @ApiModelProperty(value = "编制人员")
    private String writeUser;
    @ApiModelProperty(value = "录入人员")
    private String keyboarder;
    @ApiModelProperty(value = "计划时间")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date planTime;
    @ApiModelProperty(value = "不合格项目数")
    private Integer count;
    @TableLogic(value = "1", delval = "0")
    @ApiModelProperty(value = "逻辑删除 æ­£å¸¸>=1,删除<=0", hidden = true)
    private Integer state;
    @ApiModelProperty(value = "审核日期")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date auditTime;
    @TableField(fill = FieldFill.INSERT)
    @ApiModelProperty(value = "编制日期")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date createTime;
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;
}
cnas-server/src/main/java/com/yuanchu/limslaboratory/pojo/CnasSatisfactionSurvey.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,143 @@
package com.yuanchu.limslaboratory.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.Date;
import java.time.LocalDateTime;
/**
 * @Author å¼ å®¾
 * @Date 2023/8/10
 */
@Data
@TableName("cnas_satisfaction_survey")
public class CnasSatisfactionSurvey implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * ä¸»é”®id
     */
    @TableId(value = "id", type = IdType.ASSIGN_ID)
    private Long id;
    /**
     * é¡¹ç›®åç§°
     */
    private String projectName;
    /**
     * è°ƒæŸ¥æ—¥æœŸ
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date surveyDate;
    /**
     * å®¢æˆ·å•位名称
     */
    private String userUnit;
    ///**
    // * æ—¥æœŸ
    // */
    //@DateTimeFormat(pattern = "yyyy-MM-dd")
    //@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    //private Date dateInfo;
    /**
     * å¡«å†™äººå§“名
     */
    private String fillName;
    /**
     * èŒä½
     */
    private String post;
    /**
     * è”系电话
     */
    private String telephone;
    /**
     * å½•入日期
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date entryDate;
    /**
     * å½•入人id
     */
    private Long userId;
    /**
     * å½•入人名称
     */
    private String userName;
    /**
     * é™„件地址
     */
    private String fileUrl;
    /**
     * æœåŠ¡æ€åº¦
     */
    private String serviceAttitude;
    /**
     * æŠ€æœ¯èƒ½åŠ›
     */
    private String technicalPower;
    /**
     * æ£€æµ‹å·¥ä½œ
     */
    private String testJob;
    /**
     * æ”¹è¿›è¦æ±‚
     */
    private String improvementRequirements;
    /**
     * å…¶ä»–补充
     */
    private String otherSupplements;
    @TableLogic(value = "1")
    private Integer state;
    @DateTimeFormat(
            pattern = "yyyy-MM-dd HH:mm:ss"
    )
    @JsonFormat(
            pattern = "yyyy-MM-dd HH:mm:ss"
    )
    private LocalDateTime createdTime;
    @DateTimeFormat(
            pattern = "yyyy-MM-dd HH:mm:ss"
    )
    @JsonFormat(
            pattern = "yyyy-MM-dd HH:mm:ss"
    )
    private LocalDateTime updatedTime;
    /**
     * æ”¶è´¹åˆç†æ€§
     */
    private String reasonableCharge;
}
cnas-server/src/main/java/com/yuanchu/limslaboratory/pojo/Dto/CnasSatisfactionSurveyPageDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
package com.yuanchu.limslaboratory.pojo.Dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.sql.Date;
/**
 * @Author å¼ å®¾
 * @Date 2023/8/10
 */
@Data
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="CnasSatisfactionSurveyDto", description="")
public class CnasSatisfactionSurveyPageDto implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value = "当前页", example = "1", required = true)
    private Long currentPage;
    @ApiModelProperty(value = "分页多少条", example = "10", required = true)
    private Long pageNum;
    @ApiModelProperty(value = "调查日期", example = "2020-01-02")
    private Date surveyDate;
    @ApiModelProperty(value = "录入日期", example = "2025-06-08")
    private Date entryDate;
}
cnas-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/CnasAnnualPlanVo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.yuanchu.limslaboratory.pojo.vo;
import com.yuanchu.limslaboratory.pojo.CnasAnnualPlan;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@Data
public class CnasAnnualPlanVo extends CnasAnnualPlan implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value = "年份")
    private Integer year;
    @ApiModelProperty(value = "月份")
    private Integer month;
    @ApiModelProperty(value = "审核状态,0:即将开始,1:完成,2:逾期")
    private Integer auditState;
}
cnas-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/CnasSatisfactionSurveyVo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
package com.yuanchu.limslaboratory.pojo.vo;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.yuanchu.limslaboratory.pojo.CnasSatisfactionSurvey;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
 * @Author å¼ å®¾
 * @Date 2023/8/10
 */
@Data
public class CnasSatisfactionSurveyVo implements Serializable {
    private static final long serialVersionUID = 1L;
    @JsonSerialize
    private List<CnasSatisfactionSurvey> cnasSatisfactionSurveyList;
    @JsonSerialize
    private Long total;
    public CnasSatisfactionSurveyVo(List<CnasSatisfactionSurvey> cnasSatisfactionSurveyList, Long total) {
        this.cnasSatisfactionSurveyList = cnasSatisfactionSurveyList;
        this.total = total;
    }
}
cnas-server/src/main/java/com/yuanchu/limslaboratory/service/CnasAnnualPlanService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,38 @@
package com.yuanchu.limslaboratory.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuanchu.limslaboratory.pojo.CnasAnnualPlan;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yuanchu.limslaboratory.pojo.vo.CnasAnnualPlanVo;
import org.springframework.web.multipart.MultipartFile;
import java.util.Date;
/**
 * <p>
 * å®¡æ ¸å¹´åº¦è®¡åˆ’表 æœåŠ¡ç±»
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2023-08-10 11:50:11
 */
public interface CnasAnnualPlanService extends IService<CnasAnnualPlan> {
    /**
     * æŸ¥è¯¢å®¡æ ¸è®¡åˆ’
     * @return
     */
    IPage<CnasAnnualPlanVo> selectAllList(Page<Object> objectPage, Date planTime);
    /**
     * ä¸Šä¼ é™„ä»¶
     */
    void addAccessory(String name, Date auditTime, MultipartFile file);
    /**
     * åˆ é™¤å¹´åº¦è®¡åˆ’
     * @return
     */
    Integer deleteCnasAnnualPlan(Integer planId);
}
cnas-server/src/main/java/com/yuanchu/limslaboratory/service/CnasSatisfactionSurveyService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,42 @@
package com.yuanchu.limslaboratory.service;
import com.yuanchu.limslaboratory.pojo.CnasSatisfactionSurvey;
import com.yuanchu.limslaboratory.pojo.Dto.CnasSatisfactionSurveyPageDto;
import com.yuanchu.limslaboratory.pojo.vo.CnasSatisfactionSurveyVo;
import org.springframework.web.multipart.MultipartFile;
import java.util.Map;
/**
 * @Author å¼ å®¾
 * @Date 2023/8/10
 */
public interface CnasSatisfactionSurveyService{
    /**
     * èŽ·å–æ»¡æ„åº¦è°ƒæŸ¥ä¿¡æ¯
     * @param cnasSatisfactionSurveyPageDto
     * @return
     */
    CnasSatisfactionSurveyVo getCnasSatisfactionSurvey(CnasSatisfactionSurveyPageDto cnasSatisfactionSurveyPageDto);
    /**
     * èŽ·å–å½“å‰å½•å…¥äºº
     * @return
     */
    Map<String, Object> getFillNameAndTd(String token);
    /**
     * è§£æžword
     * @param file
     * @return
     */
    Map<String, String> wordParse(MultipartFile file);
    /**
     * æ–°å¢žæ»¡æ„åº¦è°ƒæŸ¥
     * @param cnasSatisfactionSurvey
     * @return
     */
    Boolean addSurvey(CnasSatisfactionSurvey cnasSatisfactionSurvey);
}
cnas-server/src/main/java/com/yuanchu/limslaboratory/service/impl/CnasAnnualPlanServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,92 @@
package com.yuanchu.limslaboratory.service.impl;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuanchu.limslaboratory.pojo.CnasAnnualPlan;
import com.yuanchu.limslaboratory.mapper.CnasAnnualPlanMapper;
import com.yuanchu.limslaboratory.pojo.vo.CnasAnnualPlanVo;
import com.yuanchu.limslaboratory.service.CnasAnnualPlanService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.util.Date;
/**
 * <p>
 * å®¡æ ¸å¹´åº¦è®¡åˆ’表 æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2023-08-10 11:50:11
 */
@Service
public class CnasAnnualPlanServiceImpl extends ServiceImpl<CnasAnnualPlanMapper, CnasAnnualPlan> implements CnasAnnualPlanService {
    @Resource
    private CnasAnnualPlanMapper cnasAnnualPlanMapper;
    /**
     * æŸ¥è¯¢å®¡æ ¸è®¡åˆ’
     *
     * @return
     */
    @Override
    public IPage<CnasAnnualPlanVo> selectAllList(Page<Object> objectPage, Date planTime) {
        //判断是否有日期
        Integer yearTime = null;
        Integer monthTime = null;
        if (planTime != null) {
            yearTime = DateUtil.year(planTime);
            monthTime = DateUtil.month(planTime) + 2;
        }
        IPage<CnasAnnualPlanVo> page = cnasAnnualPlanMapper.selectAllList(objectPage, yearTime, monthTime);
        page.getRecords().forEach(cnasAnnualPlanVo -> {
            //获取计划时间
            Date time = cnasAnnualPlanVo.getPlanTime();
            //添加年月
            cnasAnnualPlanVo.setYear(DateUtil.year(time));
            cnasAnnualPlanVo.setMonth(DateUtil.month(time) + 1);
            //判断审核状态
            //获取当前时间
            Date nowDate = new Date();
            //获取当前的年月
            int year = DateUtil.year(nowDate);
            int month = DateUtil.month(nowDate) + 1;
            if (cnasAnnualPlanVo.getAuditTime() == null && month > cnasAnnualPlanVo.getMonth() || year > cnasAnnualPlanVo.getYear()) {
                cnasAnnualPlanVo.setAuditState(2);
            } else if (cnasAnnualPlanVo.getAuditTime() != null) {
                cnasAnnualPlanVo.setAuditState(1);
            } else {
                cnasAnnualPlanVo.setAuditState(0);
            }
        });
        return page;
    }
    /**
     * ä¸Šä¼ é™„ä»¶
     */
    @Override
    public void addAccessory(String name, Date auditTime, MultipartFile file) {
        //todo: ä¸Šä¼ é™„件未完成
    }
    /**
     * åˆ é™¤å¹´åº¦è®¡åˆ’
     *
     * @return
     */
    @Override
    public Integer deleteCnasAnnualPlan(Integer planId) {
        LambdaUpdateWrapper<CnasAnnualPlan> updateWrapper = new LambdaUpdateWrapper<>();
        updateWrapper.eq(CnasAnnualPlan::getId, planId);
        updateWrapper.set(CnasAnnualPlan::getState, 0);
        return cnasAnnualPlanMapper.update(new CnasAnnualPlan(), updateWrapper);
    }
}
cnas-server/src/main/java/com/yuanchu/limslaboratory/service/impl/CnasSatisfactionSurveyServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,206 @@
package com.yuanchu.limslaboratory.service.impl;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuanchu.limslaboratory.mapper.CnasSatisfactionSurveyMapper;
import com.yuanchu.limslaboratory.pojo.CnasSatisfactionSurvey;
import com.yuanchu.limslaboratory.pojo.Dto.CnasSatisfactionSurveyPageDto;
import com.yuanchu.limslaboratory.pojo.vo.CnasSatisfactionSurveyVo;
import com.yuanchu.limslaboratory.service.CnasSatisfactionSurveyService;
import com.yuanchu.limslaboratory.service.UserService;
import com.yuanchu.limslaboratory.utils.MultipartFileToFileUtil;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.extractor.WordExtractor;
import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.*;
import java.util.stream.Collectors;
/**
 * @Author å¼ å®¾
 * @Date 2023/8/10
 */
@Service
public class CnasSatisfactionSurveyServiceImpl implements CnasSatisfactionSurveyService {
    private static final List<String> SELECT_LIST = Arrays.asList( "☑满意=0", "☑一般=1",  "☑不满意=2");
    @Resource
    private CnasSatisfactionSurveyMapper mapper;
    @Resource
    private UserService userService;
    @Override
    public CnasSatisfactionSurveyVo getCnasSatisfactionSurvey(CnasSatisfactionSurveyPageDto cnasSatisfactionSurveyPageDto) {
        Page<CnasSatisfactionSurvey>page=new Page<>(cnasSatisfactionSurveyPageDto.getCurrentPage(), cnasSatisfactionSurveyPageDto.getPageNum(),true);
        String surveyDate=DateUtil.format(cnasSatisfactionSurveyPageDto.getSurveyDate(), "yyyyMMdd");
        String entryDate=DateUtil.format(cnasSatisfactionSurveyPageDto.getEntryDate(), "yyyyMMdd");;
        IPage<CnasSatisfactionSurvey> cnasSatisfactionSurveyIPage = mapper.selectCnasSatisfactionSurvey(page,surveyDate,entryDate);
        return new CnasSatisfactionSurveyVo(cnasSatisfactionSurveyIPage.getRecords(),cnasSatisfactionSurveyIPage.getTotal());
    }
    /**
     *  èŽ·å–ç”¨æˆ·ä¿¡æ¯
     * @param token
     * @return
     */
    @Override
    public Map<String, Object> getFillNameAndTd(String token) {
        Map<String, Object> userInfo = userService.getUserInfo(token);
        return userInfo;
    }
    @Override
    public Map<String, String> wordParse(MultipartFile file) {
        Map<String, String>result=null;
        File multipartFileToFile = null;
        try {
            multipartFileToFile=MultipartFileToFileUtil.multipartFileToFile(file);
            result=parseWord(multipartFileToFile);
        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            MultipartFileToFileUtil.delteTempFile(multipartFileToFile);
        }
        return result;
    }
    @Override
    public Boolean addSurvey(CnasSatisfactionSurvey cnasSatisfactionSurvey) {
        cnasSatisfactionSurvey.setCreatedTime(DateUtil.toLocalDateTime(DateUtil.date()));
        return mapper.insert(cnasSatisfactionSurvey)>1;
    }
    /**
     * è§£æžword
     * @param file
     * @return
     */
    public static Map<String,String> parseWord(File file){
        String info = "";
        try {
            FileInputStream fis = new FileInputStream(file);
            String[] split = file.getName().split("\\.");
            if ("doc".equals(split[split.length-1])) {
                // è¯»å–doc文件
                HWPFDocument doc = new HWPFDocument(fis);
                WordExtractor docExtractor = new WordExtractor(doc);
                String text = docExtractor.getText();
                info = text.trim();
                docExtractor.close();
            } else if ("docx".equals(split[split.length-1])) {
                // è¯»å–docx文件
                XWPFDocument docx = new XWPFDocument(fis);
                XWPFWordExtractor docxExtractor = new XWPFWordExtractor(docx);
                String text = docxExtractor.getText();
                System.out.println("docx:");
                info = text.trim();
                docxExtractor.close();
            } else {
                System.out.println("不是word文件");
            }
            fis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        List<String> infoList = new ArrayList<String>();
        String[] split = info.split("\n");
        for (int i = 0; i < split.length; i++) {
            if (i > 2) {
                infoList.add(split[i]
                        .replaceAll("\r","")
                        .replaceAll(" ","")
                        .replaceAll("\t","")
                        .replaceAll("\\s","").replaceAll(" +",""));
            }
        }
        Map<String, String> result = new HashMap<>();
        //第一行
        String unitName="单位名称Unitname";
        String projectName="项目名称Projectname";
        String[] one = infoList.get(0).replace(unitName, "").split(projectName);
        result.put("unitName",one[0]);
        result.put("projectName",one[1]);
        String fillName="填表人姓名/日期Name/dateofthepersonfillingintheform";
        String post="职位Posts";
        String telephone="联系电话Contactnumber";
        String email="邮编Zip";
        String[] split1 = infoList.get(1).replace(fillName, "").split(post);
        result.put("fillName",split1[0]);
        String[] split2 = split1[1].split(telephone);
        result.put("post",split2[0]);
        String[] split3 = split2[1].split(email);
        result.put("telephone",split3[0]);
        result.put("email",split3[1]);
        //第二行
        String serviceAttitude="服务态度Serviceattitude";
        //服务态度和建议
        String two = getSelectAndAdvise(infoList.get(2), serviceAttitude);
        result.put("serviceAttitude",two);
        //第三行
        String technicalPower="技术能力Technicalcompetence";
        String three = getSelectAndAdvise(infoList.get(3), technicalPower);
        result.put("technicalPower",three);
        //第四行
        String testJob="检测工作Inspectionwork";
        String four = getSelectAndAdvise(infoList.get(4), testJob);
        result.put("testJob",four);
        //第五行
        String reasonableCharge="收费合理性Reasonablefees";
        String five = getSelectAndAdvise(infoList.get(5), reasonableCharge);
        result.put("reasonableCharge",five);
        //第六行
        String improvementRequirements="改进的要求:";
        String requirementsForImprovement="Requirementsforimprovement:";
        String six = infoList.get(6).replace(improvementRequirements, "").replace(requirementsForImprovement, "");
        result.put("improvementRequirements",six);
        //第七行
        String otherSupplements="您对我们的希望:";
        String otherEnglish="Whatyouwantfromus:";
        String seven = infoList.get(7).replace(otherSupplements, "").replace(otherEnglish, "");
        result.put("otherSupplements",seven);
        return result;
    }
    /**
     * èŽ·å–é€‰æ‹©ä»¥åŠå»ºè®®
     * @param str
     * @param type
     * @return
     */
    public static String getSelectAndAdvise(String str,String type){
        String adviseInfo="建议:";
        String suggestion="Suggestion:";
        String satisfied="Satisfied";
        String general="General";
        String dissatisfied="Dissatisfied";
        String[] split4 = str.replace(type, "").replace(suggestion, "").split(adviseInfo);
        List<String>select=new ArrayList<>();
        String advise=split4[1];
        String[] split5 = split4[0].split(satisfied);
        select.add(split5[0]);
        String[] split6 = split5[1].split(general);
        select.add(split6[0]);
        select.add(split6[1].replace(dissatisfied,""));
        String selected = getSelected(select);
        return selected+"/$"+advise;
    }
    public static String getSelected(List<String> select){
        String collect = SELECT_LIST.stream().filter(item -> select.stream()
                .map(e -> e).collect(Collectors.toList())
                .contains(item.split("=")[0])).collect(Collectors.joining());
        return collect.split("=")[1];
    }
}
cnas-server/src/main/resources/mapper/CnasAnnualPlanMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
<?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.yuanchu.limslaboratory.mapper.CnasAnnualPlanMapper">
    <!--查询审核计划-->
    <select id="selectAllList" resultType="com.yuanchu.limslaboratory.pojo.vo.CnasAnnualPlanVo">
        select id,
        audit_type,
        department,
        audit_purpose,
        audit_leader,
        audit_emp,
        audit_pursuant,
        audit_scope,
        write_user,
        keyboarder,
        plan_time,
        count,
        state,
        audit_time,
        update_time
        from cnas_annual_plan
        where state = 1
        <if test="year != null and month != null">
            and year(plan_time) = #{year}
            and month(plan_time) = #{month}
        </if>
        order by id desc
    </select>
</mapper>
cnas-server/src/main/resources/mapper/CnasSatisfactionSurveyMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,38 @@
<?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.yuanchu.limslaboratory.mapper.CnasSatisfactionSurveyMapper">
    <select id="selectCnasSatisfactionSurvey"
            resultType="CnasSatisfactionSurvey">
        SELECT
            css.id id,
            css.project_name projectName,
            css.survey_date surveyDate,
            css.user_unit userUnit,
            css.`fill_name` fillName,
            css.post post,
            css.telephone telephone,
            css.entry_date entryDate,
            u.`name` userName,
            css.service_attitude serviceAttitude,
            css.technical_power technicalPower,
            css.test_job testJob,
            css.reasonable_charge reasonableCharge,
            css.improvement_requirements improvementRequirements,
            css.other_supplements otherSupplements
        FROM
            cnas_satisfaction_survey css,
            `user` u
        WHERE
            1 = 1
          AND css.user_id = u.id
          and css.state=1
        <if test="surveyDate!=null">
            and date_format(css.survey_date,'%Y%m%d') = ${surveyDate}
        </if>
        <if test="entryDate!=null">
            and date_format(css.entry_date,'%Y%m%d') = ${entryDate}
        </if>
        order by css.id Desc
    </select>
</mapper>
framework/pom.xml
@@ -12,7 +12,6 @@
    <version>0.0.1-SNAPSHOT</version>
    <name>framework</name>
    <description>framework</description>
    <packaging>jar</packaging>
    <dependencies>
        <!--数据库连接池-->
@@ -20,7 +19,12 @@
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>${commons.lang3}</version>
        </dependency>
        <!-- mysql驱动 -->
        <dependency>
            <groupId>mysql</groupId>
@@ -38,6 +42,11 @@
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.8.18</version>
        </dependency>
    </dependencies>
</project>
framework/src/main/java/com/yuanchu/limslaboratory/utils/MultipartFileToFileUtil.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,70 @@
package com.yuanchu.limslaboratory.utils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
/**
 * @Author å¼ å®¾
 * @Date 2022/8/5
 */
@Slf4j
public class MultipartFileToFileUtil {
    /**
     * MultipartFile è½¬ File
     *
     * @param file
     * @throws Exception
     */
    public static File multipartFileToFile(MultipartFile file) throws Exception {
        File toFile = null;
        if (file.equals("") || file.getSize() <= 0) {
            file = null;
        } else {
            InputStream ins = null;
            ins = file.getInputStream();
            toFile = new File(file.getOriginalFilename());
            inputStreamToFile(ins, toFile);
            ins.close();
        }
        return toFile;
    }
    //获取流文件
    private static void inputStreamToFile(InputStream ins, File file) {
        try {
            OutputStream os = new FileOutputStream(file);
            int bytesRead = 0;
            byte[] buffer = new byte[8192];
            while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {
                os.write(buffer, 0, bytesRead);
            }
            os.close();
            ins.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    /**
     * åˆ é™¤æœ¬åœ°ä¸´æ—¶æ–‡ä»¶
     * @param file
     */
    public static void delteTempFile(File file) {
        if (file != null) {
            String name = file.getName();
            File del = new File(file.toURI());
            if (del.delete()){
                log.info("删除临时文件"+name+"成功!");
            }else {
                log.error("删除临时文件"+name+"失败!");
            }
        }
    }
}
framework/src/main/java/com/yuanchu/limslaboratory/utils/MyUtil.java
@@ -63,13 +63,13 @@
        return sb.toString();
    }
    public static String getTimeSixNumberCode(String prefix){
    public static String getTimeSixNumberCode(String prefix,String name){
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        String format = simpleDateFormat.format(new Date());
        String timeStr = format.replace("-", "");
        long incrNum = RedisUtil.incr("num", 1);
        long incrNum = RedisUtil.incr(name, 1);
        if(incrNum == 1){
            RedisUtil.expire("num", 60 * 60 * 24);
            RedisUtil.expire(name, 60 * 60 * 24);
        }
        String sixIncr = String.format("%06d", incrNum);
        return prefix + timeStr + sixIncr;
framework/src/main/java/com/yuanchu/limslaboratory/utils/ThreadPoolConfig.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,62 @@
package com.yuanchu.limslaboratory.utils;
import org.apache.commons.lang3.concurrent.BasicThreadFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.ThreadPoolExecutor;
/**
 * çº¿ç¨‹æ± é…ç½®
 *
 * @author å¼ å®¾
 **/
@Configuration
public class ThreadPoolConfig
{
    // æ ¸å¿ƒçº¿ç¨‹æ± å¤§å°
    private int corePoolSize = 50;
    // æœ€å¤§å¯åˆ›å»ºçš„线程数
    private int maxPoolSize = 200;
    // é˜Ÿåˆ—最大长度
    private int queueCapacity = 1000;
    // çº¿ç¨‹æ± ç»´æŠ¤çº¿ç¨‹æ‰€å…è®¸çš„空闲时间
    private int keepAliveSeconds = 300;
    @Bean(name = "threadPoolTaskExecutor")
    public ThreadPoolTaskExecutor threadPoolTaskExecutor()
    {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setMaxPoolSize(maxPoolSize);
        executor.setCorePoolSize(corePoolSize);
        executor.setQueueCapacity(queueCapacity);
        executor.setKeepAliveSeconds(keepAliveSeconds);
        // çº¿ç¨‹æ± å¯¹æ‹’绝任务(无线程可用)的处理策略
        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
        return executor;
    }
    /**
     * æ‰§è¡Œå‘¨æœŸæ€§æˆ–定时任务
     */
    @Bean(name = "scheduledExecutorService")
    protected ScheduledExecutorService scheduledExecutorService()
    {
        return new ScheduledThreadPoolExecutor(corePoolSize,
                new BasicThreadFactory.Builder().namingPattern("schedule-pool-%d").daemon(true).build())
        {
            @Override
            protected void afterExecute(Runnable r, Throwable t)
            {
                super.afterExecute(r, t);
                Threads.printException(r, t);
            }
        };
    }
}
framework/src/main/java/com/yuanchu/limslaboratory/utils/Threads.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,96 @@
package com.yuanchu.limslaboratory.utils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.concurrent.*;
/**
 * çº¿ç¨‹ç›¸å…³å·¥å…·ç±».
 *
 * @author å¼ å®¾
 */
public class Threads
{
    private static final Logger logger = LoggerFactory.getLogger(Threads.class);
    /**
     * sleep等待,单位为毫秒
     */
    public static void sleep(long milliseconds)
    {
        try
        {
            Thread.sleep(milliseconds);
        }
        catch (InterruptedException e)
        {
            return;
        }
    }
    /**
     * åœæ­¢çº¿ç¨‹æ± 
     * å…ˆä½¿ç”¨shutdown, åœæ­¢æŽ¥æ”¶æ–°ä»»åŠ¡å¹¶å°è¯•å®Œæˆæ‰€æœ‰å·²å­˜åœ¨ä»»åŠ¡.
     * å¦‚果超时, åˆ™è°ƒç”¨shutdownNow, å–消在workQueue中Pending的任务,并中断所有阻塞函数.
     * å¦‚果仍人超時,則強制退出.
     * å¦å¯¹åœ¨shutdown时线程本身被调用中断做了处理.
     */
    public static void shutdownAndAwaitTermination(ExecutorService pool)
    {
        if (pool != null && !pool.isShutdown())
        {
            pool.shutdown();
            try
            {
                if (!pool.awaitTermination(120, TimeUnit.SECONDS))
                {
                    pool.shutdownNow();
                    if (!pool.awaitTermination(120, TimeUnit.SECONDS))
                    {
                        logger.info("Pool did not terminate");
                    }
                }
            }
            catch (InterruptedException ie)
            {
                pool.shutdownNow();
                Thread.currentThread().interrupt();
            }
        }
    }
    /**
     * æ‰“印线程异常信息
     */
    public static void printException(Runnable r, Throwable t)
    {
        if (t == null && r instanceof Future<?>)
        {
            try
            {
                Future<?> future = (Future<?>) r;
                if (future.isDone())
                {
                    future.get();
                }
            }
            catch (CancellationException ce)
            {
                t = ce;
            }
            catch (ExecutionException ee)
            {
                t = ee.getCause();
            }
            catch (InterruptedException ie)
            {
                Thread.currentThread().interrupt();
            }
        }
        if (t != null)
        {
            logger.error(t.getMessage(), t);
        }
    }
}
inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/InspectionController.java
@@ -7,6 +7,7 @@
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.yuanchu.limslaboratory.pojo.Inspection;
import com.yuanchu.limslaboratory.pojo.Report;
import com.yuanchu.limslaboratory.pojo.vo.InspectionVo;
import com.yuanchu.limslaboratory.service.LinkBasicInformationService;
import com.yuanchu.limslaboratory.service.RawMaterialService;
@@ -21,6 +22,7 @@
import org.springframework.web.bind.annotation.*;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuanchu.limslaboratory.service.InspectionService;
import javax.annotation.Resource;
/**
@@ -66,13 +68,13 @@
    @GetMapping("/selectAll")
    public Result selectAll(Integer type) {
        switch (type) {
            case 0 :
            case 0:
                //原材料
                return Result.success(rawMaterialService.selectRawmaAll());
            case 1 :
            case 1:
                //委托单
                return Result.success(linkBasicInformationService.selectLinkAll());
            case 2 :
            case 2:
                //成品检验
                return Result.success("请输入检验信息!");
        }
@@ -88,7 +90,7 @@
    })
    @GetMapping("/selectRawmaById")
    public Result selectRawmaById(Integer id, String startTime, String endTime) throws ParseException {
        return Result.success(rawMaterialService.selectRawmaById(id,startTime,endTime));
        return Result.success(rawMaterialService.selectRawmaById(id, startTime, endTime));
    }
@@ -97,6 +99,8 @@
            @ApiImplicitParam(name = "bid", value = "委托报检单id", dataTypeClass = Integer.class, required = true),
            @ApiImplicitParam(name = "did", value = "委托报检样品id", dataTypeClass = Integer.class, required = true)
    })
    @GetMapping("/selectLinkByid")
    public Result selectLinkByid(Integer bid, Integer did) {
        return Result.success(linkBasicInformationService.selectLinkByid(bid, did));
@@ -133,7 +137,6 @@
        }
        return Result.success(inspectionService.updateInspectsById(id));
    }
}
inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/NonConformanceReviewController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
package com.yuanchu.limslaboratory.controller;
import com.yuanchu.limslaboratory.pojo.Dto.NonConformingFeedbackDto;
import com.yuanchu.limslaboratory.pojo.NonConformanceReview;
import com.yuanchu.limslaboratory.pojo.vo.NonConformanceReviewVo;
import com.yuanchu.limslaboratory.service.NonConformanceReviewService;
import com.yuanchu.limslaboratory.vo.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
 * @Author å¼ å®¾
 * @Date 2023/8/9
 */
@Api(tags = "试验管理-->不合格品评审")
@RestController
@RequestMapping("/nonConformanceReview")
public class NonConformanceReviewController {
    @Resource
    private NonConformanceReviewService service;
    @GetMapping("/getNonConformanceReview")
    @ApiOperation("不合格品反馈-->获取不合格品评审信息")
    public Result<NonConformanceReviewVo> getNonConformanceReview(NonConformingFeedbackDto nonConformingFeedbackDto){
        return Result.success(service.getNonConformanceReviewVo(nonConformingFeedbackDto));
    }
}
inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/NonConformingFeedbackController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
package com.yuanchu.limslaboratory.controller;
import com.yuanchu.limslaboratory.pojo.Dto.NonConformingFeedbackDto;
import com.yuanchu.limslaboratory.pojo.NonConformingFeedback;
import com.yuanchu.limslaboratory.pojo.vo.NonConformingFeedbackVo;
import com.yuanchu.limslaboratory.service.NonConformingFeedbackService;
import com.yuanchu.limslaboratory.vo.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
 * @Author å¼ å®¾
 * @Date 2023/8/9
 */
@Api(tags = "试验管理-->不合格品反馈")
@RestController
@RequestMapping("/non-conforming-feedback")
public class NonConformingFeedbackController {
    @Resource
    private NonConformingFeedbackService service;
    @GetMapping("/getNonConformingFeedback")
    @ApiOperation("不合格品反馈-->获取不合格品信息")
    public Result<NonConformingFeedbackVo> getNonConformingFeedback(NonConformingFeedbackDto nonConformingFeedbackDto){
        return Result.success(service.getNonConformingFeedback(nonConformingFeedbackDto));
    }
}
inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/PlanController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,47 @@
package com.yuanchu.limslaboratory.controller;
import com.yuanchu.limslaboratory.pojo.vo.PlanVo;
import com.yuanchu.limslaboratory.service.PlanService;
import com.yuanchu.limslaboratory.vo.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.*;
/**
 * <p>
 * å‰ç«¯æŽ§åˆ¶å™¨
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2023-08-09
 */
@Api(tags = "检验模块-->检验计划")
@RestController
@RequestMapping("/plan")
public class PlanController {
    @Resource
    private PlanService planService;
    @ApiOperation("查询检验计划")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "device", value = "设备名称Id", dataTypeClass = String.class),
            @ApiImplicitParam(name = "beginTime", value = "检验开始时间", dataTypeClass = Date.class),
            @ApiImplicitParam(name = "endTime", value = "检验结束时间", dataTypeClass = Date.class),
            @ApiImplicitParam(name = "user", value = "检验人", dataTypeClass = String.class)
    })
    @GetMapping("/selectAllPlan")
    public Result selectAllPlan(String device, @DateTimeFormat(pattern = "yyyy-MM-dd") Date beginTime, @DateTimeFormat(pattern = "yyyy-MM-dd") Date endTime, String user) {
        List<PlanVo> planVoList = planService.selectAllPlan(device, beginTime, endTime, user);
        return Result.success(planVoList);
    }
}
inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/ReportAuditingController.java
ÎļþÃû´Ó inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/ReportCheckController.java ÐÞ¸Ä
@@ -3,18 +3,18 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuanchu.limslaboratory.pojo.vo.ReportCheckVo;
import com.yuanchu.limslaboratory.service.ReportCheckService;
import com.yuanchu.limslaboratory.pojo.vo.ReportAuditingVo;
import com.yuanchu.limslaboratory.service.ReportAuditingService;
import com.yuanchu.limslaboratory.vo.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;
@@ -29,13 +29,13 @@
 */
@Api(tags = "检验模块-->报告审核")
@RestController
@RequestMapping("/reportCheck")
public class ReportCheckController {
@RequestMapping("/reportAuditing")
public class ReportAuditingController {
    /**
     * æœåŠ¡å¯¹è±¡
     */
    @Autowired
    private ReportCheckService reportCheckService;
    @Resource
    private ReportAuditingService reportAuditingService;
    @ApiOperation("查询报告审核内容")
    @ApiImplicitParams(value = {
@@ -44,9 +44,9 @@
            @ApiImplicitParam(name = "status", value = "状态(为空=全部)", dataTypeClass = Integer.class),
            @ApiImplicitParam(name = "name", value = "搜索信息", dataTypeClass = String.class)
    })
    @GetMapping("/selectAllReportCheck")
    @GetMapping("/selectAllReportAuditing")
    public Result selectAllReportCheck(Integer page, Integer pageSize, Integer status, String name) {
        IPage<ReportCheckVo> reportPage = reportCheckService.selectAllReportCheck(new Page<Object>(page, pageSize), status, name);
        IPage<ReportAuditingVo> reportPage = reportAuditingService.selectAllReportAuditing(new Page<Object>(page, pageSize), status, name);
        Map<String, Object> map = new HashMap<>();
        map.put("total", reportPage.getTotal());
        map.put("row", reportPage.getRecords());
inspection-server/src/main/java/com/yuanchu/limslaboratory/controller/ReportController.java
@@ -15,6 +15,7 @@
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;
@@ -34,7 +35,7 @@
    /**
     * æœåŠ¡å¯¹è±¡
     */
    @Autowired
    @Resource
    private ReportService reportService;
    @ApiOperation("查询检验报告")
inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/NonConformanceReviewMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.yuanchu.limslaboratory.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuanchu.limslaboratory.pojo.Dto.NonConformanceReviewDto;
import com.yuanchu.limslaboratory.pojo.Dto.NonConformingFeedbackDto;
import com.yuanchu.limslaboratory.pojo.NonConformanceReview;
import com.yuanchu.limslaboratory.pojo.NonConformingFeedback;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
/**
 * @Author å¼ å®¾
 * @Date 2023/8/9
 */
@Repository
public interface NonConformanceReviewMapper extends BaseMapper<NonConformanceReview> {
}
inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/NonConformingFeedbackMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
package com.yuanchu.limslaboratory.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuanchu.limslaboratory.mybatis_config.MyBaseMapper;
import com.yuanchu.limslaboratory.pojo.Dto.NonConformingFeedbackDto;
import com.yuanchu.limslaboratory.pojo.LinkDetection;
import com.yuanchu.limslaboratory.pojo.NonConformingFeedback;
import com.yuanchu.limslaboratory.pojo.RawMaterial;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.Objects;
/**
 * @Author å¼ å®¾
 * @Date 2023/8/9
 */
@Repository
public interface NonConformingFeedbackMapper extends BaseMapper<NonConformingFeedback> {
    IPage<NonConformingFeedback> selectNonConformingFeedback(@Param("nonConformingFeedbackDto") NonConformingFeedbackDto nonConformingFeedbackDto, Page page);
}
inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/PlanMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
package com.yuanchu.limslaboratory.mapper;
import com.yuanchu.limslaboratory.pojo.vo.PlanVo;
import java.util.Date;
import java.util.List;
public interface PlanMapper {
    /**
     * æŸ¥è¯¢æ£€éªŒè®¡åˆ’
     * @return
     */
    List<PlanVo> selectAllPlan(String device, Date beginTime, Date endTime, String user);
}
inspection-server/src/main/java/com/yuanchu/limslaboratory/mapper/ReportMapper.java
@@ -4,7 +4,7 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuanchu.limslaboratory.pojo.Report;
import com.yuanchu.limslaboratory.pojo.vo.ReportCheckVo;
import com.yuanchu.limslaboratory.pojo.vo.ReportAuditingVo;
import com.yuanchu.limslaboratory.pojo.vo.ReportVo;
/**
@@ -28,6 +28,6 @@
     * æŸ¥è¯¢æŠ¥å‘Šå®¡æ ¸
     * @return
     */
    IPage<ReportCheckVo> selectAllReportCheck(Page<Object> page, Integer status, String name);
    IPage<ReportAuditingVo> selectAllReportAuditing(Page<Object> page, Integer status, String name);
}
inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/Dto/NonConformanceReviewDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,37 @@
package com.yuanchu.limslaboratory.pojo.Dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
/**
 * @Author å¼ å®¾
 * @Date 2023/8/9
 */
@Data
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="NonConformanceReviewDto对象", description="")
public class NonConformanceReviewDto implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value = "当前页", example = "1", required = true)
    private Long currentPage;
    @ApiModelProperty(value = "分页多少条", example = "10", required = true)
    private Long pageNum;
    @ApiModelProperty(value = "样品编号", example = "1680929494813868034", required = true)
    private String materialCode;
    @ApiModelProperty(value = "样品名称", example = "电线电缆", required = true)
    private String materialName;
    @ApiModelProperty(value = "申请单号", example = "XG-UGYUGH", required = true)
    private String inspectionCode;
}
inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/Dto/NonConformingFeedbackDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
package com.yuanchu.limslaboratory.pojo.Dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
/**
 * @Author å¼ å®¾
 * @Date 2023/8/9
 */
@Data
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="NonConformingFeedbackDto对象", description="")
public class NonConformingFeedbackDto implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value = "当前页", example = "1", required = true)
    private Long currentPage;
    @ApiModelProperty(value = "分页多少条", example = "10", required = true)
    private Long pageNum;
    @ApiModelProperty(value = "样品编号", example = "1680929494813868034", required = true)
    private String materialCode;
    @ApiModelProperty(value = "样品名称", example = "电线电缆", required = true)
    private String materialName;
    @ApiModelProperty(value = "申请单号", example = "XG-UGYUGH", required = true)
    private String inspectionCode;
}
inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/NonConformanceReview.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,102 @@
package com.yuanchu.limslaboratory.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.sql.Date;
import java.time.LocalDateTime;
/**
 * @Author å¼ å®¾
 * @Date 2023/8/9
 */
@Data
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="不符合品评审对象", description="")
@TableName("tb_non_conformance_review")
public class NonConformanceReview implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId(value = "id", type = IdType.ASSIGN_ID)
    private Long id;
    /**
     * æ ·å“ç¼–号
     */
    private String materialCode;
    /**
     * æ ·å“åç§°
     */
    private String materialName;
    /**
     * ç”³è¯·å•号
     */
    private String inspectionCode;
    /**
     * ç™»è®°æ—¥æœŸ
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date createTime;
    /**
     * å®žéªŒè´Ÿè´£äºº
     */
    private String testManager;
    /**
     * è§„格型号
     */
    private String specifications;
    /**
     * åˆ›å»ºäºº
     */
    private String createdUser;
    /**
     * åˆ›å»ºæ—¶é—´
     */
    @DateTimeFormat(
            pattern = "yyyy-MM-dd HH:mm:ss"
    )
    @JsonFormat(
            pattern = "yyyy-MM-dd HH:mm:ss"
    )
    private LocalDateTime createdTime;
    /**
     * ä¿®æ”¹äºº
     */
    private String updatedUser;
    /**
     * ä¿®æ”¹æ—¶é—´
     */
    @DateTimeFormat(
            pattern = "yyyy-MM-dd HH:mm:ss"
    )
    @JsonFormat(
            pattern = "yyyy-MM-dd HH:mm:ss"
    )
    private LocalDateTime updatedTime;
    /**
     * é€»è¾‘删除
     */
    @TableLogic(value = "1")
    private Integer state;
}
inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/NonConformingFeedback.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,53 @@
package com.yuanchu.limslaboratory.pojo;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.sql.Date;
/**
 * @Author å¼ å®¾
 * @Date 2023/8/9
 */
@Data
@EqualsAndHashCode(callSuper = false)
public class NonConformingFeedback  implements Serializable {
    private static final long serialVersionUID = 1L;
    /**
     * æ ·å“ç¼–号
     */
    private String materialCode;
    /**
     * æ ·å“åç§°
     */
    private String materialName;
    /**
     * ç”³è¯·å•号
     */
    private String inspectionCode;
    /**
     * ç™»è®°æ—¥æœŸ
     */
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date createTime;
    /**
     * å®žéªŒè´Ÿè´£äºº
     */
    private String testManager;
    /**
     * è§„格型号
     */
    private String specifications;
}
inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/Report.java
@@ -20,8 +20,8 @@
 */
@Data
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="InspectionReport对象", description="")
@TableName("inspection_report")
@ApiModel(value="Report对象", description="")
@TableName("report")
public class Report implements Serializable {
    private static final long serialVersionUID = 1L;
@@ -38,8 +38,8 @@
    @ApiModelProperty(value = "审核结论")
    private String conclusion;
    @ApiModelProperty(value = "审核人id")
    private Integer userId;
    @ApiModelProperty(value = "审核人")
    private String approver;
    @ApiModelProperty(value = "关联 ç”³è¯·è¡¨id")
    private Integer inspectionId;
inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/NonConformanceReviewVo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,30 @@
package com.yuanchu.limslaboratory.pojo.vo;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.yuanchu.limslaboratory.pojo.NonConformanceReview;
import com.yuanchu.limslaboratory.pojo.NonConformingFeedback;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
 * @Author å¼ å®¾
 * @Date 2023/8/9
 */
@Data
public class NonConformanceReviewVo implements Serializable {
    private static final long serialVersionUID = 1L;
    @JsonSerialize
    private List<NonConformanceReview> nonConformanceReviewList;
    @JsonSerialize
    private Long total;
    public NonConformanceReviewVo(List<NonConformanceReview> nonConformanceReviewList, Long total) {
        this.nonConformanceReviewList = nonConformanceReviewList;
        this.total = total;
    }
}
inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/NonConformingFeedbackVo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,32 @@
package com.yuanchu.limslaboratory.pojo.vo;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.yuanchu.limslaboratory.pojo.Inspection;
import com.yuanchu.limslaboratory.pojo.InspectionMaterial;
import com.yuanchu.limslaboratory.pojo.NonConformingFeedback;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.util.List;
/**
 * @Author å¼ å®¾
 * @Date 2023/8/9
 */
@Data
public class NonConformingFeedbackVo implements Serializable {
    private static final long serialVersionUID = 1L;
    @JsonSerialize
    private List<NonConformingFeedback> nonConformingFeedbackList;
    @JsonSerialize
    private Long total;
    public NonConformingFeedbackVo(List<NonConformingFeedback> nonConformingFeedbackList, Long total) {
        this.nonConformingFeedbackList = nonConformingFeedbackList;
        this.total = total;
    }
}
inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/PlanVo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,54 @@
package com.yuanchu.limslaboratory.pojo.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
 * æ£€éªŒè®¡åˆ’VO
 */
@Data
public class PlanVo {
    @ApiModelProperty(value = "设备名称")
    @JsonSerialize
    private String device;
    @ApiModelProperty(value = "样品名称")
    @JsonSerialize
    private String samplename;
    @ApiModelProperty(value = "样品编号")
    @JsonSerialize
    private String sampleid;
    @ApiModelProperty(value = "规格型号")
    @JsonSerialize
    private String modelandspecification;
    @ApiModelProperty(value = "单位")
    @JsonSerialize
    private String unit;
    @ApiModelProperty(value = "数量")
    @JsonSerialize
    private Integer amount;
    @ApiModelProperty(value = "检验项目")
    @JsonSerialize
    private String checkproject;
    @ApiModelProperty(value = "检验人")
    @JsonSerialize
    private String checker;
    @ApiModelProperty(value = "计划工期")
    @JsonSerialize
    private Integer duration;
    @ApiModelProperty(value = "检验进度0:未分配, 50:检验中, 100:已完成")
    @JsonSerialize
    private Integer progress;
    @ApiModelProperty(value = "计划开始时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8")
    private Date starttime;
    @ApiModelProperty(value = "计划结束时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8")
    private Date finishtime;
    //判断项目状态
    private Integer state;
}
inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/ReportAuditingVo.java
ÎļþÃû´Ó inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/ReportCheckVo.java ÐÞ¸Ä
@@ -11,7 +11,7 @@
 * æŠ¥å‘Šå®¡æ ¸
 */
@Data
public class ReportCheckVo {
public class ReportAuditingVo {
    @ApiModelProperty(value = "样品编号")
    @JsonSerialize
    private String materialCode;
@@ -28,9 +28,9 @@
    @JsonSerialize
    private Integer approver;
    @ApiModelProperty(value = "提交日期")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date submitTime;
    @ApiModelProperty(value = "审核日期")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    private Date checkTime;
}
inspection-server/src/main/java/com/yuanchu/limslaboratory/pojo/vo/ReportVo.java
@@ -21,7 +21,7 @@
    @ApiModelProperty(value = "审批人")
    @JsonSerialize
    private Integer approver;
    @ApiModelProperty(value = "审批状态 0:待提交 1:待审核;2:待签字;3:已完成")
    @ApiModelProperty(value = "审批状态 0:待提交 1:待审核;2:已审核")
    @JsonSerialize
    private Integer status;
    @ApiModelProperty(value = "检验结论")
@@ -29,5 +29,5 @@
    private String conclusion;
    @ApiModelProperty(value = "编制人")
    @JsonSerialize
    private Integer userId;
    private String name;
}
inspection-server/src/main/java/com/yuanchu/limslaboratory/service/NonConformanceReviewService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.yuanchu.limslaboratory.service;
import com.yuanchu.limslaboratory.pojo.Dto.NonConformingFeedbackDto;
import com.yuanchu.limslaboratory.pojo.vo.NonConformanceReviewVo;
import com.yuanchu.limslaboratory.pojo.vo.NonConformingFeedbackVo;
/**
 * @Author å¼ å®¾
 * @Date 2023/8/9
 */
public interface NonConformanceReviewService {
    /**
     * å¾—到不合格品提交信息
     * @param nonConformingFeedbackDto
     * @return
     */
    NonConformanceReviewVo getNonConformanceReviewVo(NonConformingFeedbackDto nonConformingFeedbackDto);
}
inspection-server/src/main/java/com/yuanchu/limslaboratory/service/NonConformingFeedbackService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
package com.yuanchu.limslaboratory.service;
import com.yuanchu.limslaboratory.pojo.Dto.NonConformingFeedbackDto;
import com.yuanchu.limslaboratory.pojo.vo.NonConformingFeedbackVo;
/**
 * @Author å¼ å®¾
 * @Date 2023/8/9
 */
public interface NonConformingFeedbackService {
    /**
     * å¾—到不合格品反馈信息
     * @param nonConformingFeedbackDto
     * @return
     */
    NonConformingFeedbackVo getNonConformingFeedback(NonConformingFeedbackDto nonConformingFeedbackDto);
}
inspection-server/src/main/java/com/yuanchu/limslaboratory/service/PlanService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,23 @@
package com.yuanchu.limslaboratory.service;
import com.yuanchu.limslaboratory.pojo.vo.PlanVo;
import java.util.Date;
import java.util.List;
/**
 * <p>
 *  æœåŠ¡ç±»
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2023-08-09
 */
public interface PlanService {
    /**
     * æŸ¥è¯¢æ£€éªŒè®¡åˆ’
     * @return
     */
    List<PlanVo> selectAllPlan(String device, Date beginTime, Date endTime, String user);
}
inspection-server/src/main/java/com/yuanchu/limslaboratory/service/ReportAuditingService.java
ÎļþÃû´Ó inspection-server/src/main/java/com/yuanchu/limslaboratory/service/ReportCheckService.java ÐÞ¸Ä
@@ -4,7 +4,7 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yuanchu.limslaboratory.pojo.Report;
import com.yuanchu.limslaboratory.pojo.vo.ReportCheckVo;
import com.yuanchu.limslaboratory.pojo.vo.ReportAuditingVo;
/**
 * <p>
@@ -14,12 +14,12 @@
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2023-08-07
 */
public interface ReportCheckService extends IService<Report> {
public interface ReportAuditingService extends IService<Report> {
    /**
     * é¡¹ç›®å®¡æ ¸è¡¨æŸ¥è¯¢
     * @return
     */
    IPage<ReportCheckVo> selectAllReportCheck(Page<Object> page, Integer status, String name);
    IPage<ReportAuditingVo> selectAllReportAuditing(Page<Object> page, Integer status, String name);
}
inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/InspectionServiceImpl.java
@@ -13,6 +13,7 @@
import com.yuanchu.limslaboratory.pojo.vo.InspectDetailVo;
import com.yuanchu.limslaboratory.pojo.vo.InspectionVo;
import com.yuanchu.limslaboratory.service.*;
import com.yuanchu.limslaboratory.utils.MyUtil;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
@@ -58,6 +59,9 @@
    @Resource
    UserMapper userMapper;
    @Resource
    ReportMapper reportMapper;
    /**
     * æŸ¥è¯¢æ£€éªŒç”³è¯·å•列表
@@ -192,6 +196,22 @@
                .build();
        inspectionMapper.updateById(inspection);
        //生成报告单
        Report report = new Report();
        //生成报告单号
        String code = MyUtil.getTimeSixNumberCode("BG","BG");
        //获取检验结论
        String conclusion = "";
        Inspection inspection1 = inspectionMapper.selectById(id);
        if (inspection1.getInspectionStatus().equals(1)) {
            conclusion = "合格";
        }else {
            conclusion = "不合格";
        }
        report.setCode(code);
        report.setStatus(0);
        report.setConclusion(conclusion);
        report.setInspectionId(id);
        reportMapper.insert(report);
        return true;
    }
inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/LinkBasicInformationServiceImpl.java
@@ -35,7 +35,7 @@
    @Override
    public String addLinkBasicInformation(LinkBasicInformation linkBasicInformation) {
        String code = MyUtil.getTimeSixNumberCode("SL");
        String code = MyUtil.getTimeSixNumberCode("SL","SL");
        linkBasicInformation.setEntrustCoding(code);
        int insert = linkBasicInformationMapper.insert(linkBasicInformation);
        if (insert == 1) {
inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/NonConformanceReviewServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,42 @@
package com.yuanchu.limslaboratory.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuanchu.limslaboratory.mapper.NonConformanceReviewMapper;
import com.yuanchu.limslaboratory.pojo.Dto.NonConformingFeedbackDto;
import com.yuanchu.limslaboratory.pojo.NonConformanceReview;
import com.yuanchu.limslaboratory.pojo.vo.NonConformanceReviewVo;
import com.yuanchu.limslaboratory.service.NonConformanceReviewService;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import javax.annotation.Resource;
/**
 * @Author å¼ å®¾
 * @Date 2023/8/9
 */
@Service
public class NonConformanceReviewServiceImpl implements NonConformanceReviewService {
    @Resource
    private NonConformanceReviewMapper mapper;
    @Override
    public NonConformanceReviewVo getNonConformanceReviewVo(NonConformingFeedbackDto nonConformingFeedbackDto) {
        QueryWrapper<NonConformanceReview>queryWrapper= new QueryWrapper<>();
        if (StringUtils.hasText(nonConformingFeedbackDto.getMaterialCode())){
            queryWrapper.lambda().and(a->a.eq(NonConformanceReview::getMaterialCode,nonConformingFeedbackDto.getMaterialCode()));
        }
        if (StringUtils.hasText(nonConformingFeedbackDto.getMaterialName())){
            queryWrapper.lambda().and(a->a.eq(NonConformanceReview::getMaterialName,nonConformingFeedbackDto.getMaterialName()));
        }
        if (StringUtils.hasText(nonConformingFeedbackDto.getInspectionCode())){
            queryWrapper.lambda().and(a->a.eq(NonConformanceReview::getInspectionCode,nonConformingFeedbackDto.getInspectionCode()));
        }
        Page<NonConformanceReview> page = new Page<>(nonConformingFeedbackDto.getCurrentPage(), nonConformingFeedbackDto.getPageNum(), true);
        IPage<NonConformanceReview> iPage = mapper.selectPage(page, queryWrapper);
        return new NonConformanceReviewVo(iPage.getRecords(),iPage.getTotal());
    }
}
inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/NonConformingFeedbackServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,34 @@
package com.yuanchu.limslaboratory.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuanchu.limslaboratory.mapper.NonConformingFeedbackMapper;
import com.yuanchu.limslaboratory.pojo.Dto.NonConformingFeedbackDto;
import com.yuanchu.limslaboratory.pojo.NonConformingFeedback;
import com.yuanchu.limslaboratory.pojo.vo.NonConformingFeedbackVo;
import com.yuanchu.limslaboratory.service.NonConformingFeedbackService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
/**
 * @Author å¼ å®¾
 * @Date 2023/8/9
 */
@Service
public class NonConformingFeedbackServiceImpl implements NonConformingFeedbackService {
    @Resource
    private NonConformingFeedbackMapper mapper;
    @Override
    public NonConformingFeedbackVo getNonConformingFeedback(NonConformingFeedbackDto nonConformingFeedbackDto) {
        Page<Object> page = new Page<>(nonConformingFeedbackDto.getCurrentPage(), nonConformingFeedbackDto.getPageNum(), true);
        IPage<NonConformingFeedback> iPage = mapper.selectNonConformingFeedback(nonConformingFeedbackDto, page);
        return new NonConformingFeedbackVo(iPage.getRecords(),iPage.getTotal());
    }
}
inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/PlanServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,61 @@
package com.yuanchu.limslaboratory.service.impl;
import com.yuanchu.limslaboratory.mapper.PlanMapper;
import com.yuanchu.limslaboratory.pojo.vo.PlanVo;
import com.yuanchu.limslaboratory.service.PlanService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
/**
 * <p>
 * æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2023-08-09
 */
@Service
public class PlanServiceImpl implements PlanService {
    @Resource
    private PlanMapper planMapper;
    /**
     * æŸ¥è¯¢æ£€éªŒè®¡åˆ’
     *
     * @return
     */
    @Override
    public List<PlanVo> selectAllPlan(String device, Date beginTime, Date endTime, String user) {
        //获取数据库数据
        List<PlanVo> planVos = planMapper.selectAllPlan(device, beginTime, endTime, user);
        //添加计划工期和检验进度
        planVos.forEach(planVo -> {
            //添加检验进度
            //判断是否是已完成
            if (planVo.getState() != null) {
                planVo.setProgress(100);
            }
            //判断是否是未分配
            if (planVo.getCheckproject() == null) {
                planVo.setProgress(0);
            }
            //判断是否是进行中
            if (planVo.getState() == null && planVo.getCheckproject() != null) {
                planVo.setProgress(50);
            }
            //添加计划工期
            if (planVo.getFinishtime() != null && planVo.getStarttime() != null) {
                long startTimeInMillis = planVo.getStarttime().getTime();
                long endTimeInMillis = planVo.getFinishtime().getTime();
                long durationInMillis = endTimeInMillis - startTimeInMillis;
                long duration = durationInMillis / (1000 * 60 * 60);
                planVo.setDuration(Integer.valueOf((int) duration));
            }
        });
        return planVos;
    }
}
inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/ReportAuditingServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,37 @@
package com.yuanchu.limslaboratory.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.yuanchu.limslaboratory.mapper.ReportMapper;
import com.yuanchu.limslaboratory.pojo.Report;
import com.yuanchu.limslaboratory.pojo.vo.ReportAuditingVo;
import com.yuanchu.limslaboratory.service.ReportAuditingService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
/**
 * <p>
 * æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2023-08-07
 */
@Service
public class ReportAuditingServiceImpl extends ServiceImpl<ReportMapper, Report> implements ReportAuditingService {
    @Resource
    private ReportMapper reportMapper;
    /**
     * é¡¹ç›®å®¡æ ¸è¡¨æŸ¥è¯¢
     * @return
     */
    @Override
    public IPage<ReportAuditingVo> selectAllReportAuditing(Page<Object> page, Integer status, String name) {
        return reportMapper.selectAllReportAuditing(page, status, name);
    }
}
inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/ReportCheckServiceImpl.java
ÎļþÒÑɾ³ý
inspection-server/src/main/java/com/yuanchu/limslaboratory/service/impl/ReportServiceImpl.java
@@ -10,6 +10,8 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
/**
 * <p>
 * æœåŠ¡å®žçŽ°ç±»
@@ -21,7 +23,7 @@
@Service
public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> implements ReportService {
    @Autowired
    @Resource
    private ReportMapper reportMapper;
    /**
inspection-server/src/main/resources/mapper/NonConformingFeedbackMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
<?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.yuanchu.limslaboratory.mapper.NonConformingFeedbackMapper">
    <select id="selectNonConformingFeedback" resultType="nonConformingFeedback" parameterType="com.yuanchu.limslaboratory.pojo.Dto.NonConformingFeedbackDto">
        SELECT
            im.`code` materialCode,
            im.`name` materialName,
            i.`code` inspectionCode,
            i.create_time createTime,
            u.`name` testManager,
            im.specifications specifications
        FROM
            inspection i,
            inspection_material im,
            `user` u
        WHERE
            1 = 1
          AND i.id = im.inspection_id
          AND i.user_id = u.id
        <if test="nonConformingFeedbackDto.materialCode!=null and nonConformingFeedbackDto.materialCode!=''">
            and  im.`code` like concat("%",#{nonConformingFeedbackDto.materialCode},"%")
        </if>
        <if test="nonConformingFeedbackDto.materialName!=null and nonConformingFeedbackDto.materialName!=''">
            and im.`name` like concat("%",#{nonConformingFeedbackDto.materialName},"%")
        </if>
        <if test="nonConformingFeedbackDto.inspectionCode!=null and nonConformingFeedbackDto.inspectionCode!=''">
            and im.specifications like concat("%",#{nonConformingFeedbackDto.inspectionCode},"%")
        </if>
          and i.state=1
          and im.state=1
        and i.inspection_status =0
    </select>
</mapper>
inspection-server/src/main/resources/mapper/PlanMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,40 @@
<?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.yuanchu.limslaboratory.mapper.PlanMapper">
    <!--查询检验计划-->
    <select id="selectAllPlan" resultType="com.yuanchu.limslaboratory.pojo.vo.PlanVo">
        select i.equipment_name device,
        im.name samplename,
        im.code sampleid,
        im.specifications modelandspecification,
        im.unit unit,
        im.num amount,
        ip.name checkproject,
        u.name checker,
        ip.start_time starttime,
        ip.end_time finishtime,
        ip.test_state state
        from instrument i
        left join (select ip.*
        from inspection_product ip
        right join (select instrument_id, max(ip.end_time) t
        from inspection_product ip
        group by instrument_id) it
        on ip.instrument_id = it.instrument_id and ip.end_time = it.t) ip
        on i.id = ip.instrument_id
        left join inspection_material im on im.id = ip.inspection_material_id
        left join user u on u.id = ip.user_id
        <where>
            <if test="device != null and device != null">
                and i.equipment_name = #{device}
            </if>
            <if test="user != null and user != null">
                and u.name = #{user}
            </if>
            <if test="beginTime != null and endTime != null">
                and ip.start_time between #{beginTime} and #{endTime}
            </if>
        </where>
    </select>
</mapper>
inspection-server/src/main/resources/mapper/ReportMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,57 @@
<?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.yuanchu.limslaboratory.mapper.ReportMapper">
    <!--查询检验报告-->
    <select id="selectAllReport" resultType="com.yuanchu.limslaboratory.pojo.vo.ReportVo">select im.code materialCode,
        r.code reportCode,
        i.code inspectionCode,
        r.approver approver,
        r.status status,
        r.conclusion conclusion,
        u.name name
        from report r
        join inspection i on r.inspection_id = i.id
        join user u on i.user_id = u.id
        join inspection_material im on i.id = im.inspection_id
        <where>
            r.state = 1
            <if test="status != null">
                and r.status = #{status}
            </if>
            <if test="name != null and name != ''">
                and im.code like concat('%', #{name}, '%')
                or i.code like concat('%', #{name}, '%')
                or r.code like concat('%', #{name}, '%')
            </if>
        </where>
    </select>
    <!--查询报告审核-->
    <select id="selectAllReportAuditing" resultType="com.yuanchu.limslaboratory.pojo.vo.ReportAuditingVo">
        select im.code materialCode,
        r.code reportCode,
        im.name materialName,
        r.status status,
        r.approver approver,
        DATE_FORMAT(r.`create_time`, '%Y-%m-%d') submitTime,
        DATE_FORMAT(r.`check_time`, '%Y-%m-%d') checkTime
        from report r
        join inspection i on r.inspection_id = i.id
        join inspection_material im on i.id = im.inspection_id
        <where>
            r.state = 1
            <if test="status == null">
                and r.status in (0, 1)
            </if>
            <if test="status != null">
                and r.status = #{status}
            </if>
            <if test="name != null and name != ''">
                and im.code like concat('%', #{name}, '%')
                or i.code like concat('%', #{name}, '%')
                or im.name like concat('%', #{name}, '%')
            </if>
        </where>
    </select>
</mapper>
laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/ClassifyController.java
@@ -36,11 +36,11 @@
    public Result<?> addClassifyInformation(@RequestBody Classify classify) {
        Integer isAddClassifySuccess = classifyService.addClassifyInformation(classify);
        if (isAddClassifySuccess == 1) {
            return Result.success("添加分类【"+ classify.getSonName() +"】成功!");
            return Result.success("1-$添加分类【"+ classify.getSonName() +"】成功!");
        } else if (isAddClassifySuccess == 2) {
            return Result.fail("抱歉重复添加分类名称【"+ classify.getSonName() +"】,添加失败!");
            return Result.success("2-$抱歉重复添加分类名称【"+ classify.getSonName() +"】,添加失败!");
        }
        return Result.fail("添加分类【"+ classify.getSonName() +"】失败!");
        return Result.success("0-$添加分类【"+ classify.getSonName() +"】失败!");
    }
    @ApiOperation("分类侧边栏列表:如果sonName为空,则带着father_name的Id进行点击操作")
laboratory-server/src/main/java/com/yuanchu/limslaboratory/controller/MeteringPlanController.java
@@ -5,6 +5,9 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuanchu.limslaboratory.pojo.Instrument;
import com.yuanchu.limslaboratory.pojo.MeteringPlan;
import com.yuanchu.limslaboratory.pojo.dto.GetPlanMeasureInstrumentDto;
import com.yuanchu.limslaboratory.pojo.dto.SelectMeasurementLedgerDto;
import com.yuanchu.limslaboratory.pojo.dto.SelectMeteringPlanDto;
import com.yuanchu.limslaboratory.service.MeteringPlanService;
import com.yuanchu.limslaboratory.utils.JackSonUtil;
import com.yuanchu.limslaboratory.utils.RedisUtil;
@@ -46,25 +49,27 @@
    }
    @ApiOperation("计量计划分页查询")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "pageNo", value = "起始页", dataTypeClass = Integer.class, required = true),
            @ApiImplicitParam(name = "pageSize", value = "每一页数量", dataTypeClass = Integer.class, required = true),
            @ApiImplicitParam(name = "measureCodeOrNameOrUnit", value = "每一页数量", dataTypeClass = Integer.class, required = true)
    })
    @GetMapping("/plan_page_list")
    public Result<?> pagingQueryOfMeteringPlan(Integer pageNo, Integer pageSize, String measureCodeOrNameOrUnit) {
        IPage<Map<String, Object>> page = meteringPlanService.pagingQueryOfMeteringPlan(measureCodeOrNameOrUnit, new Page<Objects>(pageNo, pageSize));
        return Result.success(page);
    public Result<?> pagingQueryOfMeteringPlan(SelectMeteringPlanDto dto) {
        return Result.success(meteringPlanService.pagingQueryOfMeteringPlan(dto));
    }
    @ApiOperation("计量台账分页查询")
    @ApiImplicitParams(value = {
            @ApiImplicitParam(name = "pageNo", value = "起始页", dataTypeClass = Integer.class, required = true),
            @ApiImplicitParam(name = "pageSize", value = "每一页数量", dataTypeClass = Integer.class, required = true)
    })
    @GetMapping("/standing_page_list")
    public Result<?> pagingQueryOfMeasurementLedger(Integer pageNo, Integer pageSize) {
        IPage<Map<String, Object>> page = meteringPlanService.pagingQueryOfMeasurementLedger(new Page<Objects>(pageNo, pageSize));
    public Result<?> pagingQueryOfMeasurementLedger(SelectMeasurementLedgerDto selectMeasurementLedgerDto) {
        IPage<Map<String, Object>> page = meteringPlanService.pagingQueryOfMeasurementLedger(selectMeasurementLedgerDto);
        return Result.success(page);
    }
    @ApiOperation("单询计划信息")
    @GetMapping("/getPlanMeasureInstrument")
    public Result<?> getPlanMeasureInstrument(GetPlanMeasureInstrumentDto dto){
        return Result.success(meteringPlanService.getPlanMeasureInstrument(dto));
    }
    @ApiOperation("计划信息之下分页")
    @GetMapping("/limitGetPlanMeasureInstrument")
    public Result<?> limitGetPlanMeasureInstrument(GetPlanMeasureInstrumentDto dto){
        return Result.success(meteringPlanService.limitGetPlanMeasureInstrument(dto));
    }
}
laboratory-server/src/main/java/com/yuanchu/limslaboratory/mapper/ClassifyMapper.java
@@ -3,6 +3,8 @@
import com.yuanchu.limslaboratory.pojo.Classify;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import java.util.List;
/**
 * <p>
 *  Mapper æŽ¥å£
@@ -13,4 +15,6 @@
 */
public interface ClassifyMapper extends BaseMapper<Classify> {
    List<Classify> selectOneByName(Classify classify);
}
laboratory-server/src/main/java/com/yuanchu/limslaboratory/mapper/MeteringPlanMapper.java
@@ -2,9 +2,14 @@
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuanchu.limslaboratory.pojo.MeteringPlan;
import com.yuanchu.limslaboratory.pojo.*;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yuanchu.limslaboratory.pojo.dto.GetPlanMeasureInstrumentDto;
import com.yuanchu.limslaboratory.pojo.dto.SelectMeasurementLedgerDto;
import com.yuanchu.limslaboratory.pojo.dto.SelectMeteringPlanDto;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -18,5 +23,22 @@
 */
public interface MeteringPlanMapper extends BaseMapper<MeteringPlan> {
    IPage<Map<String, Object>> pagingQueryOfMeasurementLedger(Page<Objects> page);
    IPage<Map<String, Object>> pagingQueryOfMeasurementLedger(Page<Objects> page,@Param("dto") SelectMeasurementLedgerDto dto);
    /**
     * åˆ†é¡µæŸ¥è¯¢è®¡åˆ’
     * @param dto
     * @param limitPage
     * @return
     */
    List<MeteringPlanAndInfo>limitConditionMeteringPlan(@Param("dto")SelectMeteringPlanDto dto, @Param("limitPage") LimitPage limitPage);
    Map<String, Object>getTotal(@Param("dto")SelectMeteringPlanDto dto);
    MeteringPlanAndInfoAndIns getPlanMeasureInstrument(@Param("limitPage") LimitPage limitPage,Long id);
    List<MetricalInfoAndIns> limitGetPlanMeasureInstrument(@Param("limitPage")LimitPage limitPage, Long id);
    Map<String, Object> countPlanMeasurIns(Long id);
}
laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/LimitPage.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.yuanchu.limslaboratory.pojo;
import lombok.Data;
import java.io.Serializable;
/**
 * @Author å¼ å®¾
 * @Date 2023/8/17
 */
@Data
public class LimitPage implements Serializable {
    private Long start, end;
    public LimitPage(Long start, Long end) {
        this.start = start;
        this.end = end;
    }
}
laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/MeteringPlanAndInfo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,52 @@
package com.yuanchu.limslaboratory.pojo;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
 * @Author å¼ å®¾
 * @Date 2023/8/17
 */
@Data
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="MeteringPlanAndInfo", description="")
public class MeteringPlanAndInfo implements Serializable {
    private Long id;
    private String createPerson;
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd", iso = DateTimeFormat.ISO.DATE_TIME)
    @ApiModelProperty(value = "开始日期", example = "2023-07-06", required = true, dataType = "date")
    private Date beginTime;
    private String plannedOrderNumber;
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd", iso = DateTimeFormat.ISO.DATE_TIME)
    @ApiModelProperty(value = "结束日期", example = "2023-07-06", required = true, dataType = "date")
    private Date endTime;
    private String unit;
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd", iso = DateTimeFormat.ISO.DATE_TIME)
    private Date createTime;
    private String measurePerson;
    private Integer status;
    private List<MetricalInformation>resultList;
}
laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/MeteringPlanAndInfoAndIns.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
package com.yuanchu.limslaboratory.pojo;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.util.List;
/**
 * @Author å¼ å®¾
 * @Date 2023/8/18
 */
@Data
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="MeteringPlanAndInfoAndIns对象", description="")
public class MeteringPlanAndInfoAndIns extends MeteringPlanAndInfo implements Serializable {
    List<MetricalInfoAndIns>metricalInfoAndInsList;
}
laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/MetricalInfoAndIns.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,48 @@
package com.yuanchu.limslaboratory.pojo;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.util.Date;
/**
 * @Author å¼ å®¾
 * @Date 2023/8/18
 */
@Data
@EqualsAndHashCode(callSuper = false)
@ApiModel(value="MeteringPlanAndInfoAndIns对象", description="")
public class MetricalInfoAndIns extends Instrument implements Serializable {
    @ApiModelProperty(value = "计量编号", example = "1", required = true)
    private String code;
    @ApiModelProperty(value = "计量单位", example = "GB", required = true)
    private String measurementUnit;
    @ApiModelProperty(value = "结束日期", example = "2026-07-06", required = true, dataType = "date")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd", iso = DateTimeFormat.ISO.DATE_TIME)
    private Date endDate;
    @ApiModelProperty(value = "结果: 1:合格;2:矫正后可用;3:不合格", example = "1", required = true)
    private Integer result;
    @ApiModelProperty(value = "创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd", iso = DateTimeFormat.ISO.DATE_TIME)
    private Date imCreateTime;
    private String measurementName;
    private String imCreateName;
}
laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/MetricalInformation.java
@@ -32,6 +32,9 @@
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty(value = "计量编号", example = "1", required = true)
    private String code;
    @ApiModelProperty(value = "用户关联Id", example = "7", required = true)
    private Integer userId;
laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/GetPlanMeasureInstrumentDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
package com.yuanchu.limslaboratory.pojo.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
/**
 * @Author å¼ å®¾
 * @Date 2023/8/18
 */
@Data
@EqualsAndHashCode(callSuper = false)
@ApiModel(value = "GetPlanMeasureInstrumentDto对象", description = "")
public class GetPlanMeasureInstrumentDto implements Serializable {
    @ApiModelProperty(value = "当前页", example = "1", required = true)
    private Long currentPage;
    @ApiModelProperty(value = "每页多少条", example = "10", required = true)
    private Long pageSize;
    @ApiModelProperty(value = "计划id", example = "10", required = true)
    private Long id;
}
laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/SelectMeasurementLedgerDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
package com.yuanchu.limslaboratory.pojo.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
/**
 * @Author å¼ å®¾
 * @Date 2023/8/16
 */
@Data
@EqualsAndHashCode(callSuper = false)
@ApiModel(value = "selectMeasurementLedgerDto对象", description = "")
public class SelectMeasurementLedgerDto implements Serializable {
    @ApiModelProperty(value = "当前页", example = "1", required = true)
    private Long currentPage;
    @ApiModelProperty(value = "每页多少条", example = "10", required = true)
    private Long pageSize;
    @ApiModelProperty(value = "仪器编码",  required = false)
    private String code;
    @ApiModelProperty(value = "仪器名称",  required = false)
    private String name;
    @ApiModelProperty(value = "计量单位",  required = false)
    private String unit;
}
laboratory-server/src/main/java/com/yuanchu/limslaboratory/pojo/dto/SelectMeteringPlanDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
package com.yuanchu.limslaboratory.pojo.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
/**
 * @Author å¼ å®¾
 * @Date 2023/8/16
 */
@Data
@EqualsAndHashCode(callSuper = false)
@ApiModel(value = "SelectMeteringPlanDto", description = "")
public class SelectMeteringPlanDto implements Serializable {
    @ApiModelProperty(value = "当前页", example = "1", required = true)
    private Long currentPage;
    @ApiModelProperty(value = "每页多少条", example = "10", required = true)
    private Long pageSize;
    @ApiModelProperty(value = "计划单号",  required = false)
    private String plannedOrderNumber;
}
laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/MeteringPlanService.java
@@ -4,7 +4,13 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuanchu.limslaboratory.pojo.MeteringPlan;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yuanchu.limslaboratory.pojo.MeteringPlanAndInfoAndIns;
import com.yuanchu.limslaboratory.pojo.MetricalInfoAndIns;
import com.yuanchu.limslaboratory.pojo.dto.GetPlanMeasureInstrumentDto;
import com.yuanchu.limslaboratory.pojo.dto.SelectMeasurementLedgerDto;
import com.yuanchu.limslaboratory.pojo.dto.SelectMeteringPlanDto;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -20,7 +26,11 @@
    Integer addMeteringPlanInformation(MeteringPlan meteringPlan);
    IPage<Map<String, Object>> pagingQueryOfMeteringPlan(String measureCodeOrNameOrUnit, Page<Objects> page);
    Map<String, Object> pagingQueryOfMeteringPlan(SelectMeteringPlanDto dto);
    IPage<Map<String, Object>> pagingQueryOfMeasurementLedger(Page<Objects> page);
    IPage<Map<String, Object>> pagingQueryOfMeasurementLedger(SelectMeasurementLedgerDto selectMeasurementLedgerDto);
    Map<String, Object> getPlanMeasureInstrument(GetPlanMeasureInstrumentDto dto);
    Map<String, Object> limitGetPlanMeasureInstrument(GetPlanMeasureInstrumentDto dto);
}
laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/ClassifyServiceImpl.java
@@ -1,5 +1,6 @@
package com.yuanchu.limslaboratory.service.impl;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.yuanchu.limslaboratory.pojo.Classify;
@@ -29,15 +30,12 @@
    @Override
    public Integer addClassifyInformation(Classify classify) {
        LambdaQueryWrapper<Classify> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(Classify::getFatherName, classify.getFatherName());
        wrapper.eq(Classify::getSonName, classify.getSonName());
        wrapper.eq(Classify::getState, 1);
        Classify classify1 = classifyMapper.selectOne(wrapper);
        if (ObjectUtils.isEmpty(classify1)){
            return classifyMapper.insert(classify);
        } else {
        List<Classify> classify1 = classifyMapper.selectOneByName(classify);
        if (classify1.size()>0){
            return 2;
        } else {
            classify.setCreateTime(DateUtil.date());
            return classifyMapper.insert(classify);
        }
    }
laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/MeteringPlanServiceImpl.java
@@ -3,9 +3,11 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yuanchu.limslaboratory.pojo.Instrument;
import com.yuanchu.limslaboratory.pojo.MeteringPlan;
import com.yuanchu.limslaboratory.pojo.*;
import com.yuanchu.limslaboratory.mapper.MeteringPlanMapper;
import com.yuanchu.limslaboratory.pojo.dto.GetPlanMeasureInstrumentDto;
import com.yuanchu.limslaboratory.pojo.dto.SelectMeasurementLedgerDto;
import com.yuanchu.limslaboratory.pojo.dto.SelectMeteringPlanDto;
import com.yuanchu.limslaboratory.service.MeteringPlanService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yuanchu.limslaboratory.utils.MyUtil;
@@ -14,9 +16,7 @@
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import java.util.Objects;
import java.util.*;
/**
 * <p>
@@ -34,18 +34,53 @@
    @Override
    public Integer addMeteringPlanInformation(MeteringPlan meteringPlan) {
        String timeSixNumber = MyUtil.getTimeSixNumberCode("P");
        String timeSixNumber = MyUtil.getTimeSixNumberCode("P","P");
        meteringPlan.setPlannedOrderNumber(timeSixNumber);
        return meteringPlanMapper.insert(meteringPlan);
    }
    @Override
    public IPage<Map<String, Object>> pagingQueryOfMeteringPlan(String measureCodeOrNameOrUnit, Page<Objects> page) {
        return null;
    public Map<String, Object> pagingQueryOfMeteringPlan(SelectMeteringPlanDto dto) {
        List<MeteringPlanAndInfo> page= meteringPlanMapper
                .limitConditionMeteringPlan(dto,new LimitPage((dto.getCurrentPage()-1)*dto.getPageSize(), dto.getPageSize()));
        page.forEach(l->{
            l.getResultList().forEach(r->{
                if (r.getResult() < 1) {
                    l.setStatus(0);
                }else {
                    l.setStatus(1);
                }
            });
            l.setResultList(null);
        });
        Map<String, Object>all=new HashMap<>(2);
        all.put("total",meteringPlanMapper.getTotal(dto).get("num"));
        all.put("list",page);
        return all;
    }
    @Override
    public IPage<Map<String, Object>> pagingQueryOfMeasurementLedger(Page<Objects> page) {
        return meteringPlanMapper.pagingQueryOfMeasurementLedger(page);
    public IPage<Map<String, Object>> pagingQueryOfMeasurementLedger(SelectMeasurementLedgerDto dto) {
        return meteringPlanMapper.pagingQueryOfMeasurementLedger(new Page<>(dto.getCurrentPage(),dto.getPageSize(),true),dto);
    }
    @Override
    public Map<String, Object> getPlanMeasureInstrument(GetPlanMeasureInstrumentDto dto) {
        MeteringPlanAndInfoAndIns planMeasureInstrument =
                meteringPlanMapper.getPlanMeasureInstrument
                        (new LimitPage((dto.getCurrentPage()-1)*dto.getPageSize(),
                                dto.getPageSize()), dto.getId());
        Map<String, Object> map = meteringPlanMapper.countPlanMeasurIns(dto.getId());
        map.put("list",planMeasureInstrument);
        return map;
    }
    @Override
    public Map<String, Object> limitGetPlanMeasureInstrument(GetPlanMeasureInstrumentDto dto) {
        Map<String, Object> map = meteringPlanMapper.countPlanMeasurIns(dto.getId());
        map.put("list",meteringPlanMapper
                .limitGetPlanMeasureInstrument(new LimitPage((dto.getCurrentPage()-1)*dto.getPageSize()
                        ,dto.getPageSize()),dto.getId()));
        return map;
    }
}
laboratory-server/src/main/java/com/yuanchu/limslaboratory/service/impl/MetricalInformationServiceImpl.java
@@ -36,6 +36,7 @@
            String fileName = FileSaveUtil.StoreFile(file);
            metricalInformation.setFilePath(fileName);
        }
        metricalInformation.setCode(MyUtil.getTimeSixNumberCode("METRICALCODE","METRICALCODE"));
        return metricalInformationMapper.insert(metricalInformation);
    }
laboratory-server/src/main/resources/mapper/ClassifyMapper.xml
@@ -2,4 +2,12 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yuanchu.limslaboratory.mapper.ClassifyMapper">
    <select id="selectOneByName" resultType="com.yuanchu.limslaboratory.pojo.Classify">
        SELECT id
        FROM classify
        WHERE state = 1
          <if test="fatherName!=null and fatherName!=''">
              AND father_name = #{fatherName}
          </if>
    </select>
</mapper>
laboratory-server/src/main/resources/mapper/MeteringPlanMapper.xml
@@ -3,9 +3,184 @@
<mapper namespace="com.yuanchu.limslaboratory.mapper.MeteringPlanMapper">
    <select id="pagingQueryOfMeasurementLedger" resultType="map">
        SELECT i.`equipment_code`, i.`equipment_name`, i.`specifications_models`, m.`create_time`, m.`uncertainty`,
               m.`end_date`, i.`term_validity`, i.`storage_place`, i.`conditions`
        FROM instrument i, metrical_information m
        WHERE i.`id` = m.`instrument_id`
        SELECT
        i.`equipment_code` equipmentCode,
        i.`equipment_name` equipmentName,
        m.measurement_unit measurementUnit,
        i.measuring_range measuringRange,
        i.term_validity termValidity,
        m.result result,
        m.end_date endDate,
        u.NAME name ,
        m.`create_time` createTime,
        m.code code
        FROM
        metrical_information m
        LEFT JOIN `user` u ON u.id = m.user_id
        LEFT JOIN instrument i ON i.`id` = m.`instrument_id`
        WHERE 1=1
        and (m.state=1 and i.state=1 and m.result is not null)
        <if test="dto.code!=null and dto.code!=''">
            and i.`equipment_code` like concat('%',#{dto.code},'%')
        </if>
        <if test="dto.name!=null and dto.name!=''">
            and i.`equipment_name` like concat('%',#{dto.name},'%')
        </if>
        <if test="dto.name!=null and dto.name!=''">
            and i.measurement_unit like concat('%',#{dto.unit},'%')
        </if>
    </select>
    <select id="limitConditionMeteringPlan" resultMap="MeteringPlanAndInfoMap">
        SELECT p.id id,
        u.`name` createName,
        p.planned_order_number plannedOrderNumber,
        p.begin_time beginTime,
        p.end_time endTime,
        IF(IFNULL(i.result, 0) > 0, 1, 0) status,
        (SELECT name FROM `user` u WHERE p.measure_person = u.id) measureName,
        i.`code` iCode,
        p.unit unit,
        p.create_time createTime
        FROM (SELECT id, unit ,measure_person, create_Person, begin_Time, end_Time, planned_order_number, create_time
        from metering_plan
        where 1=1
        <if test="dto.plannedOrderNumber!=null and dto.plannedOrderNumber!=''">
            and planned_order_number=#{plannedOrderNumber}
        </if>
        LIMIT #{limitPage.start},#{limitPage.end}) p
        LEFT JOIN metrical_information i ON p.id = i.plan
        LEFT JOIN `user` u ON p.create_Person = u.id
        where 1 = 1
    </select>
    <select id="getTotal" resultType="java.util.Map">
        select count(id) num from metering_plan where 1=1
        <if test="dto.plannedOrderNumber!=null and dto.plannedOrderNumber!=''">
            and planned_order_number=#{plannedOrderNumber}
        </if>
    </select>
    <select id="getPlanMeasureInstrument"
            resultMap="measureInsAndPlanMap">
        SELECT m.planned_order_number                              plannedOrderNumber,
               (SELECT NAME FROM USER WHERE id = m.measure_person) measureName,
               m.begin_time                                        beginTime,
               m.end_time                                          endTime,
               m.unit                                              unit,
               u.`name`                                            createName,
               m.create_time                                       createTime,
               im.equipment_code                                   equipmentCode,
               im.equipment_name                                   equipmentName,
               im.measuring_range                                  measuringRange,
               im.term_validity                                    termValidity,
               im.result                                           result,
               im.end_date                                         endDate,
               im.imName                                           imName,
               im.create_time                                      imCreateTime,
               im.measurement_unit                                 imUnit,
               im.`code`                                           imCode
        FROM metering_plan m
                 LEFT JOIN `user` u ON m.create_Person = u.id
                 LEFT JOIN (
            SELECT i.equipment_code,
                   i.equipment_name,
                   i.measuring_range,
                   i.term_validity,
                   im.result,
                   im.end_date,
                   (SELECT NAME FROM USER WHERE id = im.user_id) imName,
                   im.create_time,
                   im.measurement_unit,
                   im.`code`,
                   im.plan
            FROM metrical_information im,
                 metering_plan m,
                 instrument i
            WHERE im.instrument_id = i.id
              and m.id = im.plan
              and im.plan = #{id}
              LIMIT #{limitPage.start}
                , #{limitPage.end}
        ) im ON m.id = im.plan
        WHERE 1 = 1
          AND m.id = #{id}
    </select>
    <select id="limitGetPlanMeasureInstrument" resultMap="MetricalInfoAndInsMap">
        SELECT i.equipment_code                              equipmentCode,
               i.equipment_name                              equipmentName,
               i.measuring_range                             measuringRange,
               i.term_validity                               termValidity,
               im.result                                     result,
               im.end_date                                   endDate,
               (SELECT NAME FROM USER WHERE id = im.user_id) imName,
               im.create_time                                imCreateTime,
               im.measurement_unit                           imUnit,
               im.`code`                                     imCode
        FROM metrical_information im,
             metering_plan m,
             instrument i
        WHERE im.instrument_id = i.id
          and m.id = im.plan
          and im.plan = #{id} LIMIT #{limitPage.start}
            , #{limitPage.end}
    </select>
    <select id="countPlanMeasurIns" resultType="java.util.Map">
        SELECT count(im.id) total
        FROM metrical_information im,
             metering_plan m,
             instrument i
        WHERE im.instrument_id = i.id
          and m.id = im.plan
          and im.plan = #{id}
    </select>
    <resultMap id="MetricalInfoAndInsMap" type="MetricalInfoAndIns">
        <result property="code" column="imCode"/>
        <result property="measurementUnit" column="imUnit"/>
        <result property="imCreateTime" column="imCreateTime"/>
        <result property="measurementName" column="imName"/>
        <result property="endDate" column="endDate"/>
        <result property="result" column="result"/>
        <result property="termValidity" column="termValidity"/>
        <result property="measuringRange" column="measuringRange"/>
        <result property="equipmentName" column="equipmentName"/>
        <result property="equipmentCode" column="equipmentCode"/>
    </resultMap>
    <resultMap id="measureInsAndPlanMap" type="meteringPlanAndInfoAndIns">
        <result property="id" column="id"/>
        <result property="createPerson" column="createName"/>
        <result property="beginTime" column="beginTime"/>
        <result property="endTime" column="endTime"/>
        <result property="plannedOrderNumber" column="plannedOrderNumber"/>
        <result property="measurePerson" column="measureName"/>
        <result property="createTime" column="createTime"/>
        <result property="unit" column="unit"/>
        <collection property="metricalInfoAndInsList" ofType="metricalInfoAndIns">
            <result property="code" column="imCode"/>
            <result property="measurementUnit" column="imUnit"/>
            <result property="imCreateTime" column="imCreateTime"/>
            <result property="measurementName" column="imName"/>
            <result property="endDate" column="endDate"/>
            <result property="result" column="result"/>
            <result property="termValidity" column="termValidity"/>
            <result property="measuringRange" column="measuringRange"/>
            <result property="equipmentName" column="equipmentName"/>
            <result property="equipmentCode" column="equipmentCode"/>
        </collection>
    </resultMap>
    <resultMap id="MeteringPlanAndInfoMap" type="meteringPlanAndInfo">
        <result property="id" column="id"/>
        <result property="createPerson" column="createName"/>
        <result property="beginTime" column="beginTime"/>
        <result property="endTime" column="endTime"/>
        <result property="plannedOrderNumber" column="plannedOrderNumber"/>
        <result property="measurePerson" column="measureName"/>
        <result property="createTime" column="createTime"/>
        <result property="unit" column="unit"/>
        <collection property="resultList" ofType="MetricalInformation">
            <result property="code" column="iCode"/>
            <result property="result" column="status"/>
        </collection>
    </resultMap>
</mapper>
laboratory-server/src/main/resources/mapper/MetricalInformationMapper.xml
@@ -8,6 +8,7 @@
        FROM metrical_information m, `user` u
        WHERE m.`user_id` = u.`id`
        AND m.`state` = 1
          and result is not Null
        AND m.`instrument_id` = #{InstrumentId}
    </select>
</mapper>
pom.xml
@@ -22,6 +22,7 @@
        <module>standard-server</module>
        <module>inspection-server</module>
        <module>laboratory-server</module>
        <module>cnas-server</module>
    </modules>
    <properties>
@@ -36,7 +37,7 @@
        <openfeign.version>3.1.3</openfeign.version>
        <feign-okhttp.version>11.0</feign-okhttp.version>
        <shiro.version>1.5.3</shiro.version>
        <commons.lang3>3.12.0</commons.lang3>
        <!-- æ‰“包后导出的路径 -->
        <package.path>${project.build.directory}/LIMS</package.path>
    </properties>
standard-server/src/main/resources/mapper/MaterialMapper.xml
@@ -3,12 +3,12 @@
<mapper namespace="com.yuanchu.limslaboratory.mapper.MaterialMapper">
    <select id="selectMaterialLimit" resultType="Map">
        select id,code, name
        select id, code, name
        from lims_laboratory.material
        where state = 1
        and type = #{type}
          and type = #{type}
        order by create_time desc
            limit #{num1},#{num2}
            limit #{num1}, #{num2}
    </select>
    <select id="selectMaterialById" resultType="Map">
        select m.id,
@@ -28,7 +28,7 @@
             lims_laboratory.serial_number sn
        where m.specifications_id = s.id
          and s.serial_id = sn.id
          and m.id=#{materialId}
          and m.id = #{materialId}
    </select>
    <resultMap id="OneLevelTreeMap" type="Map">
@@ -56,15 +56,17 @@
    <select id="FourTree" resultMap="OneLevelTreeMap">
        SELECT m.`id` materialId, m.`name` materialName, s.`id` standardId, s.`name` standardName,
               f.`id` specificationsId, f.`name` specificationsName, p.`id` productId, p.`name` productName
        f.`id` specificationsId, f.`name` specificationsName, p.`id` productId, p.`name` productName
        FROM material m
                 LEFT JOIN (SELECT s.`id`, s.`name`, s.`material_id` FROM standard s WHERE s.`state` = 1) s ON m.id = s.`material_id`
                 LEFT JOIN (SELECT f.`id`, f.`name`, f.`standard_id` FROM specifications f WHERE f.`state` = 1
                                                                                             <if test="specificationsName != null and specificationsName != ''">
                                                                                                 AND f.`name` = #{specificationsName}
                                                                                             </if>
                                                                                           ) f ON s.`id` = f.`standard_id`
                 LEFT JOIN (SELECT p.`id`, p.`name`, p.`specifications_id` FROM product p WHERE p.`state` = 1) p ON f.`id` = p.`specifications_id`
        LEFT JOIN (SELECT s.`id`, s.`name`, s.`material_id` FROM standard s WHERE s.`state` = 1) s ON m.id =
        s.`material_id`
        LEFT JOIN (SELECT f.`id`, f.`name`, f.`standard_id` FROM specifications f WHERE f.`state` = 1
        <if test="specificationsName != null and specificationsName != ''">
            AND f.`name` = #{specificationsName}
        </if>
        ) f ON s.`id` = f.`standard_id`
        LEFT JOIN (SELECT p.`id`, p.`name`, p.`specifications_id` FROM product p WHERE p.`state` = 1) p ON f.`id` =
        p.`specifications_id`
        WHERE m.`state` = 1
    </select>
</mapper>
sys/pom.xml
@@ -22,6 +22,12 @@
            <artifactId>framework</artifactId>
            <version>${project.parent.version}</version>
        </dependency>
        <!--cnas模块-->
        <dependency>
            <groupId>com.yuanchu.limslaboratory</groupId>
            <artifactId>cnas-server</artifactId>
            <version>${project.parent.version}</version>
        </dependency>
        <!--用户服务模块-->
        <dependency>
@@ -63,12 +69,14 @@
            <artifactId>mybatis-plus-generator</artifactId>
        </dependency>
        <!-- framework: mybatis-plus代码生成需要一个模板引擎 -->
        <!-- https://mvnrepository.com/artifact/org.apache.velocity/velocity-engine-core -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-freemarker</artifactId>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.3</version>
        </dependency>
        <!--mysql-->
        <dependency>
            <groupId>mysql</groupId>
sys/src/main/java/com/yuanchu/limslaboratory/CodeGenerator.java
@@ -12,21 +12,23 @@
// æ¼”示例子,执行 main æ–¹æ³•控制台输入模块表名回车自动生成对应项目目录中
public class CodeGenerator {
    public static String database_url = "jdbc:mysql://localhost:3306/mom_ocean?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai";
    public static String database_username = "root";
    public static String database_url = "jdbc:mysql://192.168.110.209:3306/lims_laboratory?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai";
    public static String database_username = "user";
    public static String database_password= "123456";
    public static String author = "江苏鵷雏网络科技有限公司";
    public static String model_name = "/inspect-server"; // å¦‚果为分布式填子模块名称,如果不是分布式为空即可
    public static String setParent = "com.yuanchu.mom"; // åŒ…路径
    public static String model_name = "/cnas-server"; // å¦‚果为分布式填子模块名称,如果不是分布式为空即可
    public static String setParent = "com.yuanchu.limslaboratory"; // åŒ…路径
    public static void main(String[] args) {
        String projectPath = System.getProperty("user.dir");
        System.out.println(projectPath+"===================");
        String s = projectPath + "/lims-after" + model_name + "/src/main/java";
        String s1 = projectPath + "/lims-after" + model_name + "/src/main/resources/mapper";
        System.out.println();
        FastAutoGenerator.create(database_url, database_username, database_password)
                // å…¨å±€é…ç½®
                .globalConfig(builder -> {
                    builder.author(author) // è®¾ç½®ä½œè€…
                            .commentDate("yyyy-MM-dd hh:mm:ss")   //注释日期
                            .outputDir(projectPath + model_name + "/src/main/java") // æŒ‡å®šè¾“出目录
                            .outputDir(s) // æŒ‡å®šè¾“出目录
                            .disableOpenDir() //禁止打开输出目录,默认打开
                    ;
                })
@@ -34,7 +36,7 @@
                .packageConfig(builder -> {
                    builder.entity("pojo");
                    builder.parent(setParent) // è®¾ç½®çˆ¶åŒ…名
                            .pathInfo(Collections.singletonMap(OutputFile.xml, projectPath + model_name +  "/src/main/resources/mapper")); // è®¾ç½®mapperXml生成路径
                            .pathInfo(Collections.singletonMap(OutputFile.xml, s1)); // è®¾ç½®mapperXml生成路径
                })
                // ç­–略配置
                .strategyConfig(builder -> {
sys/src/main/resources/application-dev.yml
@@ -40,8 +40,8 @@
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driverClassName: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/lims_laboratory?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
    username: root
    url: jdbc:mysql://192.168.110.209:3306/lims_laboratory?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8
    username: user
    password: 123456
    druid:
      #   Druid数据源配置
@@ -65,21 +65,21 @@
    # redis数据库索引(默认为0),我们使用索引为3的数据库,避免和其他数据库冲突
    database: 0
    # redis服务器地址(默认为localhost)
    host: localhost
    host: 192.168.110.209
    # redis端口(默认为6379)
    port: 6380
    port: 6379
    # redis访问密码(默认为空)
    password: null
    # redis连接超时时间(单位毫秒)
    timeout: 5
    timeout: 50
    # redis连接池配置
    pool:
      # æœ€å¤§å¯ç”¨è¿žæŽ¥æ•°ï¼ˆé»˜è®¤ä¸º8,负数表示无限)
      max-active: 8
      max-active: 20
      # æœ€å¤§ç©ºé—²è¿žæŽ¥æ•°ï¼ˆé»˜è®¤ä¸º8,负数表示无限)
      max-idle: 8
      # æœ€å°ç©ºé—²è¿žæŽ¥æ•°ï¼ˆé»˜è®¤ä¸º0,该值只有为正数才有用)
      min-idle: 0
      min-idle: 5
      # ä»Žè¿žæŽ¥æ± ä¸­èŽ·å–è¿žæŽ¥æœ€å¤§ç­‰å¾…æ—¶é—´ï¼ˆé»˜è®¤ä¸º-1,单位为毫秒,负数表示无限)
      max-wait: -1
sys/src/test/java/com/yuanchu/limslaboratory/SysApplicationTests.java
@@ -1,9 +1,36 @@
package com.yuanchu.limslaboratory;
import com.yuanchu.limslaboratory.pojo.vo.PlanVo;
import com.yuanchu.limslaboratory.service.PlanService;
import com.yuanchu.limslaboratory.service.UserService;
import com.yuanchu.limslaboratory.utils.MyUtil;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.extractor.WordExtractor;
import org.apache.poi.xwpf.extractor.XWPFWordExtractor;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFParagraph;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import javax.annotation.Resource;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@SpringBootTest
class SysApplicationTests {
    @Resource
    private PlanService planService;
    @Resource
    private UserService userService;
    @Test
    void contextLoads() {
@@ -11,6 +38,147 @@
        System.out.println("newString === " + newString);
    }
    @Test
    void TT() {
        Map<String, Object> userInfo = userService.getUserInfo("eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhY2NvdW50IjoiYzhiMWFhYWNlYzM2NmMyNGU1ZDE4YzdlZWE5ZTU1MWIiLCJleHAiOjE2OTE3Mzk4MjV9.IZyU5jhTzpxedmmL25dhpkzQS7hth7gt-bzCx9fZyOk");
        System.out.println(userInfo.get("name"));
    }
    @Test
    void uploading() {
        // æ›¿æ¢ä¸ºdoc或docx文件的路径
        String filePath = "D:\\20892\\desktop\\QR-14-01-02+++内部审核年度计划.doc";
        String info = "";
        try {
            FileInputStream fis = new FileInputStream(filePath);
            if (filePath.endsWith(".doc")) {
                // è¯»å–doc文件
                HWPFDocument doc = new HWPFDocument(fis);
                WordExtractor docExtractor = new WordExtractor(doc);
                String text = docExtractor.getText();
                System.out.println("doc:");
                info = text.trim();
                docExtractor.close();
            } else if (filePath.endsWith(".docx")) {
                // è¯»å–docx文件
                XWPFDocument docx = new XWPFDocument(fis);
                XWPFWordExtractor docxExtractor = new XWPFWordExtractor(docx);
                String text = docxExtractor.getText();
                System.out.println("docx:");
                info = text.trim();
                docxExtractor.close();
            } else {
                System.out.println("不是word文件");
            }
            fis.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        List<String> infoList = new ArrayList<String>();
        String[] split = info.split("\n");
        for (int i = 0; i < split.length; i++) {
            System.out.println("======>" + split[i]);
            if (i > 2) {
                infoList.add(split[i]);
            }
        }
        Map<String, String> result = new HashMap<>();
        //客户单位/项目名称
        String[] proAndUnit = infoList.get(0).split("\t");
        for (int i = 0; i < proAndUnit.length; i++) {
            if (i == 1) {
                result.put("unitName", proAndUnit[i]);
            }
            if (i == 3) {
                result.put("projectName", proAndUnit[i]);
            }
        }
        //填表人姓名/职位/联系电话/邮编
        String npty = infoList.get(1);
        String nameAndDate = npty.split("form")[1].split("职位")[0];
        //姓名/日期
        result.put("nameAndDate", nameAndDate.trim());
        //职位
        String post = npty.split("Posts")[1].split("联系电话")[0];
        result.put("post", post.trim());
        //联系电话
        String phone = npty.split("number")[1].split("邮编")[0];
        result.put("telephone", phone);
        //邮编
        String email = npty.split("邮编")[1].split("\t")[1];
        result.put("email", email);
        //服务态度
        String replace = infoList.get(2).replace(" ", "").replace("\t", "");
        System.out.println(replace);
        String[] split1 = replace.split("☑");
        for (int i = 0; i < split1.length; i++) {
            System.out.println(split1[i]);
        }
        result.forEach((k, v) -> {
            System.out.println("k======>" + k);
            System.out.println("v======>" + v);
        });
    }
    @Test
    void upload() throws Exception {
        String filePath = "D:\\20892\\desktop\\QR-14-01-02+++内部审核年度计划.doc";
        String info = "";
        FileInputStream fis = new FileInputStream(filePath);
        if (filePath.endsWith(".doc")) {
            // è¯»å–doc文件
            HWPFDocument doc = new HWPFDocument(fis);
            WordExtractor docExtractor = new WordExtractor(doc);
            String text = docExtractor.getText();
            System.out.println("doc:");
            info = text.trim();
            docExtractor.close();
        } else if (filePath.endsWith(".docx")) {
            // è¯»å–docx文件
            XWPFDocument docx = new XWPFDocument(fis);
            XWPFWordExtractor docxExtractor = new XWPFWordExtractor(docx);
            String text = docxExtractor.getText();
            System.out.println("docx:");
            info = text.trim();
            docxExtractor.close();
        } else {
            System.out.println("不是word文件");
        }
//        System.out.println(info);
        List<String> infoList = new ArrayList<>();
        String[] split = info.split("\n");
        for (int i = 0; i < split.length; i++) {
            System.out.println("======>" + split[i]);
            if (i > 2) {
                infoList.add(split[i]);
            }
        }
    }
    @Test
    void testRedis(){
        boolean b=true;
        if (b) {
            this.contextLoads();
        } else {
            this.TT();
        }
        System.out.println(2024%100);
        new Thread(()->{
            String timeSixNumberCode = MyUtil.getTimeSixNumberCode("CS", "number");
            System.out.println(timeSixNumberCode);
        }).start();
        //new Thread(()->{
        //    String timeSixNumberCode = MyUtil.getTimeSixNumberCode("CS", "number");
        //    System.out.println(timeSixNumberCode);
        //}).start();
        //new Thread(()->{
        //    String timeSixNumberCode = MyUtil.getTimeSixNumberCode("CS", "number");
        //    System.out.println(timeSixNumberCode);
        //}).start();
    }
}
user-server/src/main/java/com/yuanchu/limslaboratory/pojo/User.java
@@ -54,7 +54,7 @@
    private String email;
    @ApiModelProperty(value = "年龄")
    private Integer age;
    private String age;
    @ApiModelProperty(value = "个性签名")
    private String info;
user-server/src/main/java/com/yuanchu/limslaboratory/service/impl/UserServiceImpl.java
@@ -49,6 +49,7 @@
            }
            Map<String, Object> data = new HashMap<>();
            data.put("name",loginUser.get("name"));
            data.put("id",loginUser.get("id"));
            data.put("remind", remind);
            return data;
        }
@@ -103,7 +104,7 @@
        User user = new User()
                .setName(newPersonnelVo.getName())
                .setAccount(newPersonnelVo.getAccount())
                .setAge(newPersonnelVo.getAge())
                .setAge(String.valueOf(newPersonnelVo.getAge()))
                .setPhone(newPersonnelVo.getPhone())
                .setEmail(newPersonnelVo.getEmail())
                .setRoleId(newPersonnelVo.getRole_id())
@@ -117,7 +118,7 @@
        User user = new User()
                .setName(updatePersonnelVo.getName())
                .setAccount(updatePersonnelVo.getAccount())
                .setAge(updatePersonnelVo.getAge())
                .setAge(String.valueOf(updatePersonnelVo.getAge()))
                .setPhone(updatePersonnelVo.getPhone())
                .setEmail(updatePersonnelVo.getEmail())
                .setRoleId(updatePersonnelVo.getRole_id())
user-server/src/main/java/com/yuanchu/limslaboratory/vo/PagePersonnelVo.java
@@ -26,7 +26,7 @@
    private Date createTime;
    @ApiModelProperty(value = "年龄", example = "23")
    private Integer age;
    private String age;
    @ApiModelProperty(value = "手机号", example = "12345678981")
    private String phone;
user-server/src/main/resources/mapper/UserMapper.xml
@@ -32,7 +32,7 @@
        IFNULL(u.`phone`, '---') phone, IFNULL(u.`email`, '---') email, u.`job_state`
        FROM `user` u, role r
        WHERE u.`role_id` = r.`id`
        <if test="name != null">
        <if test="name != null and name!=''">
            AND u.name = #{name}
        </if>
    </select>