gaoluyang
2025-02-15 9b2c4a6e9683a704a872e282eb1deab39f665195
资源要求-计量溯源性功能迁移
已修改3个文件
已添加35个文件
1719 ■■■■■ 文件已修改
cnas-require/pom.xml 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/controller/FeCalibrationScheduleController.java 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/controller/FeStandardSubstanceAcceptanceController.java 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/controller/FeStandardSubstanceController.java 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/controller/FeStandardSubstanceRecordController.java 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/dto/AcceptanceDto.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/excel/FeCalibrationScheduleExport.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/excel/FeLightningProtectionExcel.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/excel/FeStandardSubstanceExcel.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/mapper/FeCalibrationScheduleMapper.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/mapper/FeStandardSubstanceAcceptanceInspectionMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/mapper/FeStandardSubstanceAcceptanceMapper.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/mapper/FeStandardSubstanceMapper.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/mapper/FeStandardSubstanceRecordMapper.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/pojo/FeCalibrationSchedule.java 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/pojo/FeStandardSubstance.java 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/pojo/FeStandardSubstanceAcceptance.java 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/pojo/FeStandardSubstanceAcceptanceInspection.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/pojo/FeStandardSubstanceRecord.java 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/FeCalibrationScheduleService.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/FeStandardSubstanceAcceptanceInspectionService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/FeStandardSubstanceAcceptanceService.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/FeStandardSubstanceRecordService.java 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/FeStandardSubstanceService.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/impl/FeCalibrationScheduleServiceImpl.java 75 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/impl/FeStandardSubstanceAcceptanceInspectionServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/impl/FeStandardSubstanceAcceptanceServiceImpl.java 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/impl/FeStandardSubstanceRecordServiceImpl.java 79 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/service/impl/FeStandardSubstanceServiceImpl.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/vo/AcceptanceDetailsVo.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/vo/AcceptanceVo.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/src/main/java/com/ruoyi/require/vo/SubstanceRecordVo.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/pom.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
inspect-server/src/main/java/com/ruoyi/basic/util/HackLoopTableRenderPolicy.java 154 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pom.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/pom.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-framework/src/main/java/com/ruoyi/framework/exception/ErrorException.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-framework/src/main/java/com/ruoyi/framework/exception/MyFileException.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-require/pom.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,36 @@
<?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">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.ruoyi</groupId>
        <artifactId>ruoyi</artifactId>
        <version>3.8.9</version>
    </parent>
    <artifactId>cnas-require</artifactId>
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>com.ruoyi</groupId>
            <artifactId>ruoyi-common</artifactId>
        </dependency>
        <dependency>
            <groupId>com.ruoyi</groupId>
            <artifactId>ruoyi-framework</artifactId>
        </dependency>
        <dependency>
            <groupId>com.ruoyi</groupId>
            <artifactId>inspect-server</artifactId>
            <version>3.8.9</version>
        </dependency>
    </dependencies>
</project>
cnas-require/src/main/java/com/ruoyi/require/controller/FeCalibrationScheduleController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,97 @@
package com.ruoyi.require.controller;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.read.listener.PageReadListener;
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.require.excel.FeCalibrationScheduleExport;
import com.ruoyi.require.pojo.FeCalibrationSchedule;
import com.ruoyi.require.service.FeCalibrationScheduleService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
/**
 * <p>
 *
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-13 02:53:05
 */
@Api(tags = "量值溯源计划")
@RestController
@RequestMapping("/feCalibrationSchedule")
public class FeCalibrationScheduleController {
    @Resource
    private FeCalibrationScheduleService feCalibrationScheduleService;
    @ApiOperation(value = "量值溯源计划查询")
    @GetMapping("/getPageCalibrationSchedule")
    public Result<IPage<FeCalibrationSchedule>> getPageCalibrationSchedule(Page page, String instrumentName, String managementNumber) {
        IPage<FeCalibrationSchedule> ipage = feCalibrationScheduleService.page(page,instrumentName, managementNumber);
        return Result.success(ipage);
    }
    @ApiOperation(value = "量值溯源计划新增编辑")
    @PostMapping("/addCalibrationSchedule")
    public Result addCalibrationSchedule(@RequestBody FeCalibrationSchedule feCalibrationSchedule) {
        return Result.success(feCalibrationScheduleService.saveOrUpdate(feCalibrationSchedule));
    }
    @ApiOperation(value = "量值溯源计划删除")
    @GetMapping("/removeCalibrationSchedule")
    public Result removeCalibrationSchedule(Integer id) {
        return Result.success(feCalibrationScheduleService.removeById(id));
    }
    @ApiOperation(value = "量值溯源计划导出")
    @PostMapping("exportOfValueTraceabilityPlan")
    public void exportOfValueTraceabilityPlan(String instrumentName, String managementNumber,
                                       HttpServletResponse response) throws Exception {
        IPage<FeCalibrationSchedule> data = feCalibrationScheduleService.page(new Page<>(1, -1),instrumentName, managementNumber);
        List<FeCalibrationScheduleExport> studentList  = JSONObject.parseArray(JSON.toJSONString(data.getRecords()), FeCalibrationScheduleExport.class);
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.setHeader("requestType", "excel");
        response.setHeader("Access-Control-Expose-Headers", "requestType");
        // è®¾ç½®å•元格样式
        // ä¿å­˜åˆ°ç¬¬ä¸€ä¸ªsheet中
        EasyExcel.write(response.getOutputStream())
                .head(FeCalibrationScheduleExport.class)
                .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) // è‡ªé€‚应列宽
                .sheet("sheet")
                .doWrite(studentList);
    }
    @ApiOperation(value = "importOfValueTraceabilityPlan")
    @PostMapping("/importOfValueTraceabilityPlan")
    public void importOfValueTraceabilityPlan(MultipartFile file) throws IOException {
        if (file.isEmpty()) {
            return;
        }
        EasyExcel.read(file.getInputStream(), FeCalibrationScheduleExport.class, new PageReadListener<FeCalibrationScheduleExport>(dataList -> {
            List<FeCalibrationSchedule> studentList  = JSONObject.parseArray(JSON.toJSONString(dataList), FeCalibrationSchedule.class);
            feCalibrationScheduleService.saveOrUpdateBatch(studentList);
        })).sheet().doRead();
    }
//    Equipment quantity traceability management
    @ApiOperation(value = "量值溯源计划导出word")
    @GetMapping("/exportWordOfValueTraceabilityPlan")
    public void exportWordOfValueTraceabilityPlan(HttpServletResponse response) throws IOException {
        feCalibrationScheduleService.exportWordOfValueTraceabilityPlan(response);
    }
}
cnas-require/src/main/java/com/ruoyi/require/controller/FeStandardSubstanceAcceptanceController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,89 @@
package com.ruoyi.require.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.require.dto.AcceptanceDto;
import com.ruoyi.require.pojo.FeStandardSubstanceAcceptanceInspection;
import com.ruoyi.require.service.FeStandardSubstanceAcceptanceInspectionService;
import com.ruoyi.require.service.FeStandardSubstanceAcceptanceService;
import com.ruoyi.require.vo.AcceptanceVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
/**
 * <p>
 * æ ‡å‡†ç‰©è´¨éªŒæ”¶ å‰ç«¯æŽ§åˆ¶å™¨
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-14 03:29:41
 */
@Api(tags = "标准物质验收")
@RestController
@RequestMapping("/feStandardSubstanceAcceptance")
public class FeStandardSubstanceAcceptanceController {
    @Autowired
    private FeStandardSubstanceAcceptanceInspectionService inspectionService;
    @Resource
    private FeStandardSubstanceAcceptanceService feStandardSubstanceAcceptanceService;
    @ApiOperation(value = "新增")
    @PostMapping("/addAcceptance")
    @Transactional
    public Result addAcceptance(@RequestBody AcceptanceDto dto) {
        feStandardSubstanceAcceptanceService.addAcceptance(dto);
        return Result.success();
    }
    @ApiOperation(value = "标准物质验收查询")
    @GetMapping("/getPageAcceptance")
    public Result<IPage<AcceptanceVo>> getPageAcceptance(Page page, String name) {
        IPage<AcceptanceVo> ipage = feStandardSubstanceAcceptanceService.getPageAcceptance(page, name);
        return Result.success(ipage);
    }
    @ApiOperation(value = "标准物质验收删除")
    @GetMapping("/deleteAcceptance/{id}")
    public Result deleteAcceptance(@PathVariable("id") Integer id) {
        return Result.success(feStandardSubstanceAcceptanceService.deleteAcceptance(id));
    }
    @ApiOperation(value = "编辑")
    @PostMapping("/updateAcceptance")
    public Result updateAcceptance(@RequestBody AcceptanceDto acceptanceDto) {
        feStandardSubstanceAcceptanceService.updateById(acceptanceDto.getAcceptance());
        for (FeStandardSubstanceAcceptanceInspection v : acceptanceDto.getList()) {
            if (v.getId()== null) {
                inspectionService.save(v);
            }else {
                inspectionService.updateById(v);
            }
        }
        return Result.success();
    }
    @ApiOperation(value = "标准物质验收查询")
    @GetMapping("/getAcceptanceDetails")
    public Result getAcceptanceDetails(Integer id) {
        return Result.success(feStandardSubstanceAcceptanceService.getAcceptanceDetails(id));
    }
    @ApiOperation("导出标准物质验收")
    @GetMapping("/exportFeStandardSubstanceAcceptance")
    public Result exportFeStandardSubstanceAcceptance(HttpServletResponse response) {
        feStandardSubstanceAcceptanceService.exportFeStandardSubstanceAcceptance(response);
        return Result.success();
    }
}
cnas-require/src/main/java/com/ruoyi/require/controller/FeStandardSubstanceController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,80 @@
package com.ruoyi.require.controller;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.require.excel.FeStandardSubstanceExcel;
import com.ruoyi.require.pojo.FeStandardSubstance;
import com.ruoyi.require.service.FeStandardSubstanceService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
 * <p>
 * æ ‡å‡†ç‰©è´¨æ¸…单 å‰ç«¯æŽ§åˆ¶å™¨
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-13 03:58:59
 */
@Api(tags = "标准物质清单")
@RestController
@RequestMapping("/feStandardSubstance")
public class FeStandardSubstanceController {
    @Resource
    private FeStandardSubstanceService feStandardSubstanceService;
    @ApiOperation(value = "标准物质清单查询")
    @GetMapping("/getPageStandardSubstance")
    public Result<IPage<FeStandardSubstance>> getPageStandardSubstance(Page page, FeStandardSubstance feStandardSubstance) {
        IPage<FeStandardSubstance> ipage = feStandardSubstanceService.page(page, feStandardSubstance);
        return Result.success(ipage);
    }
    @ApiOperation(value = "标准物质清单新增编辑")
    @PostMapping("/addStandardSubstance")
    public Result addStandardSubstance(@RequestBody FeStandardSubstance feStandardSubstance) {
        return Result.success(feStandardSubstanceService.saveOrUpdate(feStandardSubstance));
    }
    @ApiOperation(value = "标准物质清单删除")
    @GetMapping("/removeStandardSubstance")
    public Result removeStandardSubstance(Integer id) {
        return Result.success(feStandardSubstanceService.removeById(id));
    }
    @ApiOperation(value = "标准物质清单查询所有")
    @GetMapping("/getStandardSubstanceAll")
    public Result<List<FeStandardSubstance>> getStandardSubstanceAll( ) {
        return Result.success(feStandardSubstanceService.list());
    }
    @ApiOperation(value = "标准物质清单导出")
    @GetMapping("exportOfStandardSubstanceList")
    public void exportOfStandardSubstanceList(FeStandardSubstance feStandardSubstance,
                                              HttpServletResponse response) throws Exception {
        IPage<FeStandardSubstance> ipage = feStandardSubstanceService.page(new Page<>(1, -1), feStandardSubstance);
        List<FeStandardSubstanceExcel> studentList  = JSONObject.parseArray(JSON.toJSONString(ipage.getRecords()), FeStandardSubstanceExcel.class);
        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
        response.setHeader("requestType", "excel");
        response.setHeader("Access-Control-Expose-Headers", "requestType");
        // è®¾ç½®å•元格样式
        // ä¿å­˜åˆ°ç¬¬ä¸€ä¸ªsheet中
        EasyExcel.write(response.getOutputStream())
                .head(FeStandardSubstanceExcel.class)
                .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) // è‡ªé€‚应列宽
                .sheet("sheet")
                .doWrite(studentList);
    }
}
cnas-require/src/main/java/com/ruoyi/require/controller/FeStandardSubstanceRecordController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,63 @@
package com.ruoyi.require.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.require.pojo.FeStandardSubstanceRecord;
import com.ruoyi.require.service.FeStandardSubstanceRecordService;
import com.ruoyi.require.vo.SubstanceRecordVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
 * <p>
 * æ ‡å‡†ç‰©è´¨æ¸…单借用归还记录表 å‰ç«¯æŽ§åˆ¶å™¨
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-14 01:49:11
 */
@Api(tags = "标准物质清单借用归还记录")
@RestController
@RequestMapping("/feStandardSubstanceRecord")
public class FeStandardSubstanceRecordController {
    @Resource
    private FeStandardSubstanceRecordService feStandardSubstanceRecordService;
    @ApiOperation(value = "标准物质清单借用")
    @PostMapping("/borrowSubstance")
    @Transactional
    public Result borrowSubstance(@RequestBody FeStandardSubstanceRecord record) {
        feStandardSubstanceRecordService.borrowSubstance(record);
        return Result.success();
    }
    @ApiOperation(value = "标准物质清单归还")
    @PostMapping("/returnSubstance")
    @Transactional
    public Result returnSubstance(@RequestBody FeStandardSubstanceRecord record) {
        feStandardSubstanceRecordService.returnSubstance(record);
        return Result.success();
    }
    @ApiOperation(value = "标准物质清单领用查询")
    @PostMapping("/getSubstanceRecord")
    public Result getSubstanceRecord(Integer id) {
        return Result.success(feStandardSubstanceRecordService.getSubstanceRecord(id));
    }
    @ApiOperation(value = "分页查询")
    @PostMapping("/getPageSubstanceRecord")
    public Result<IPage<SubstanceRecordVo>> getPageSubstanceRecord(Page page, @RequestBody SubstanceRecordVo vo) {
        IPage<SubstanceRecordVo> ipage = feStandardSubstanceRecordService.getPage(page,vo);
        return Result.success(ipage);
    }
}
cnas-require/src/main/java/com/ruoyi/require/dto/AcceptanceDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,15 @@
package com.ruoyi.require.dto;
import com.ruoyi.require.pojo.FeStandardSubstanceAcceptance;
import com.ruoyi.require.pojo.FeStandardSubstanceAcceptanceInspection;
import lombok.Data;
import java.util.List;
@Data
public class AcceptanceDto {
    private FeStandardSubstanceAcceptance acceptance;
    private List<FeStandardSubstanceAcceptanceInspection> list;
}
cnas-require/src/main/java/com/ruoyi/require/excel/FeCalibrationScheduleExport.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,36 @@
package com.ruoyi.require.excel;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import java.time.LocalDateTime;
@Data
public class FeCalibrationScheduleExport {
    @ExcelProperty("仪器名称")
    private String instrumentName;
    @ExcelProperty("规格型号")
    private String model;
    @ExcelProperty("管理编号")
    private Integer managementNumber;
    @ExcelProperty("技术指标")
    private String technicalIndicators;
    @ExcelProperty("检定周期")
    private String verificationCyde;
    @ExcelProperty("检定单位")
    private String verificationUnit;
    @ExcelProperty("最近检定时间")
    private LocalDateTime recentlyTime;
    @ExcelProperty("计划下次检定时间")
    private LocalDateTime nextTime;
    @ExcelProperty("备注")
    private String remark;
}
cnas-require/src/main/java/com/ruoyi/require/excel/FeLightningProtectionExcel.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
package com.ruoyi.require.excel;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
@Data
public class FeLightningProtectionExcel {
    @ExcelProperty("原文件名")
    private String fileName;
    @ExcelProperty("检测日期")
    private String detectionDate;
    @ExcelProperty("有效期")
    private String termValidity;
    @ExcelProperty("检测单位")
    private String detectionUnit;
    @ExcelProperty("创建时间")
    private String createTime;
}
cnas-require/src/main/java/com/ruoyi/require/excel/FeStandardSubstanceExcel.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,54 @@
package com.ruoyi.require.excel;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import java.time.LocalDateTime;
@Data
public class FeStandardSubstanceExcel {
    @ExcelProperty("标准物质名称")
    private String name;
    @ExcelProperty("规格型号")
    private String model;
    @ExcelProperty("生产厂家")
    private String factoryManufacturer;
    @ExcelProperty("出场编号")
    private String factoryNum;
    @ExcelProperty("管理编号")
    private String manageNum;
    @ExcelProperty("不确定度")
    private String uncertainty;
    @ExcelProperty("数量")
    private Long quantity;
    @ExcelProperty("购置日期")
    private LocalDateTime acquisitionDate;
    @ExcelProperty("有效期")
    private LocalDateTime effectiveDate;
    @ExcelProperty("文档编号")
    private String fileNum;
    @ExcelProperty("存放位置")
    private String position;
    @ExcelProperty("借调状态")
    private Integer state;
    @ExcelProperty("备注")
    private String remark;
    @ExcelProperty("创建人")
    private String createUser;
    @ExcelProperty("创建日期")
    private LocalDateTime createTime;
}
cnas-require/src/main/java/com/ruoyi/require/mapper/FeCalibrationScheduleMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.ruoyi.require.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.ruoyi.require.pojo.FeCalibrationSchedule;
import org.apache.ibatis.annotations.Param;
/**
 * <p>
 *
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-13 02:53:05
 */
public interface FeCalibrationScheduleMapper extends BaseMapper<FeCalibrationSchedule> {
    IPage<FeCalibrationSchedule> ipage(Page page, @Param("instrumentName") String instrumentName, @Param("managementNumber") String managementNumber);
}
cnas-require/src/main/java/com/ruoyi/require/mapper/FeStandardSubstanceAcceptanceInspectionMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package com.ruoyi.require.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.require.pojo.FeStandardSubstanceAcceptanceInspection;
/**
 * <p>
 * éªŒæ”¶å¼€ç®±è®°å½• Mapper æŽ¥å£
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-14 03:30:09
 */
public interface FeStandardSubstanceAcceptanceInspectionMapper extends BaseMapper<FeStandardSubstanceAcceptanceInspection> {
}
cnas-require/src/main/java/com/ruoyi/require/mapper/FeStandardSubstanceAcceptanceMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
package com.ruoyi.require.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.ruoyi.require.pojo.FeStandardSubstanceAcceptance;
import com.ruoyi.require.vo.AcceptanceVo;
import org.apache.ibatis.annotations.Param;
/**
 * <p>
 * æ ‡å‡†ç‰©è´¨éªŒæ”¶ Mapper æŽ¥å£
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-14 03:29:41
 */
public interface FeStandardSubstanceAcceptanceMapper extends BaseMapper<FeStandardSubstanceAcceptance> {
    IPage<AcceptanceVo> getPageAcceptance(Page page, @Param("name")String name);
}
cnas-require/src/main/java/com/ruoyi/require/mapper/FeStandardSubstanceMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.ruoyi.require.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.ruoyi.require.pojo.FeStandardSubstance;
import org.apache.ibatis.annotations.Param;
/**
 * <p>
 * æ ‡å‡†ç‰©è´¨æ¸…单 Mapper æŽ¥å£
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-13 03:58:59
 */
public interface FeStandardSubstanceMapper extends BaseMapper<FeStandardSubstance> {
    IPage<FeStandardSubstance> getPage(Page page,@Param("ew")FeStandardSubstance feStandardSubstance);
}
cnas-require/src/main/java/com/ruoyi/require/mapper/FeStandardSubstanceRecordMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
package com.ruoyi.require.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.ruoyi.require.pojo.FeStandardSubstanceRecord;
import com.ruoyi.require.vo.SubstanceRecordVo;
import org.apache.ibatis.annotations.Param;
/**
 * <p>
 * æ ‡å‡†ç‰©è´¨æ¸…单借用归还记录表 Mapper æŽ¥å£
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-14 01:49:11
 */
public interface FeStandardSubstanceRecordMapper extends BaseMapper<FeStandardSubstanceRecord> {
    IPage<SubstanceRecordVo> getPage(Page page,@Param("ew") SubstanceRecordVo vo);
}
cnas-require/src/main/java/com/ruoyi/require/pojo/FeCalibrationSchedule.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,85 @@
package com.ruoyi.require.pojo;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
 * <p>
 * ä»ªå™¨è®¾å¤‡æ£€å®š/校准计划表
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-13 02:53:05
 */
@Getter
@Setter
@TableName("cnas_fe_calibration_schedule")
@ApiModel(value = "FeCalibrationSchedule对象", description = "仪器设备检定/校准计划表")
public class FeCalibrationSchedule implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty("仪器名称")
    private String instrumentName;
    @ApiModelProperty("规格型号")
    private String model;
    @ApiModelProperty("管理编号")
    private String managementNumber;
    @ApiModelProperty("技术指标")
    private String technicalIndicators;
    @ApiModelProperty("检定周期")
    private String verificationCyde;
    @ApiModelProperty("检定单位")
    private String verificationUnit;
    @ApiModelProperty("最近检定时间")
    private LocalDateTime recentlyTime;
    @ApiModelProperty("计划下次检定时间")
    private LocalDateTime nextTime;
    @ApiModelProperty("备注")
    private String remark;
    @ApiModelProperty("编制")
    private String organization;
    @ApiModelProperty("编制日期")
    private LocalDateTime organizationDate;
    @ApiModelProperty("批准")
    private String approve;
    @ApiModelProperty("批准日期")
    private LocalDateTime approveDate;
    @TableField(fill = FieldFill.INSERT)
    private String createUser;
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private String updateUser;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
    @ApiModelProperty("序号id, å¯¼å‡ºä½¿ç”¨")
    @TableField(exist = false, select = false)
    private Integer index;
}
cnas-require/src/main/java/com/ruoyi/require/pojo/FeStandardSubstance.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,81 @@
package com.ruoyi.require.pojo;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
 * <p>
 * æ ‡å‡†ç‰©è´¨æ¸…单
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-13 03:58:59
 */
@Getter
@Setter
@TableName("cnas_fe_standard_substance")
@ApiModel(value = "FeStandardSubstance对象", description = "标准物质清单")
public class FeStandardSubstance implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty("标准物质名称")
    private String name;
    @ApiModelProperty("规格型号")
    private String model;
    @ApiModelProperty("生产厂家")
    private String factoryManufacturer;
    @ApiModelProperty("出场编号")
    private String factoryNum;
    @ApiModelProperty("管理编号")
    private String manageNum;
    @ApiModelProperty("不确定度")
    private String uncertainty;
    @ApiModelProperty("数量")
    private Long quantity;
    @ApiModelProperty("购置日期")
    private LocalDateTime acquisitionDate;
    @ApiModelProperty("有效期")
    private LocalDateTime effectiveDate;
    @ApiModelProperty("文档编号")
    private String fileNum;
    @ApiModelProperty("存放位置")
    private String position;
    @ApiModelProperty("借调状态(0:未借调 1:已借调)")
    private Integer state;
    @ApiModelProperty("备注")
    private String remark;
    @TableField(fill = FieldFill.INSERT)
    private String createUser;
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private String updateUser;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
}
cnas-require/src/main/java/com/ruoyi/require/pojo/FeStandardSubstanceAcceptance.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,86 @@
package com.ruoyi.require.pojo;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
 * <p>
 * æ ‡å‡†ç‰©è´¨éªŒæ”¶
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-14 03:29:41
 */
@Getter
@Setter
@TableName("cnas_fe_standard_substance_acceptance")
@ApiModel(value = "FeStandardSubstanceAcceptance对象", description = "标准物质验收")
public class FeStandardSubstanceAcceptance implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty("清单id")
    @ExcelProperty("清单id")
    private Integer substanceId;
    @ApiModelProperty("到货日期")
    @ExcelProperty("到货日期")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private LocalDate arriveDate;
    @ApiModelProperty("维修单位")
    @ExcelProperty("维修单位")
    private String maintenanceUnit;
    @ApiModelProperty("参数")
    @ExcelProperty("参数")
    private String perameters;
    @ApiModelProperty("安装调试情况")
    @ExcelProperty("安装调试情况")
    private String installation;
    @ApiModelProperty("验收情况")
    @ExcelProperty("验收情况")
    private String situation;
    @ApiModelProperty("接受签字")
    @ExcelProperty("接受签字")
    private String signature;
    @ApiModelProperty("厂家代表")
    @ExcelProperty("厂家代表")
    private String producer;
    @ApiModelProperty("接收人")
    @ExcelProperty("接收人")
    private String recipient;
    @ApiModelProperty("附件")
    @ExcelProperty("附件")
    private String file;
    @TableField(fill = FieldFill.INSERT)
    private String createUser;
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private String updateUser;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
}
cnas-require/src/main/java/com/ruoyi/require/pojo/FeStandardSubstanceAcceptanceInspection.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,47 @@
package com.ruoyi.require.pojo;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
 * <p>
 * éªŒæ”¶å¼€ç®±è®°å½•
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-14 03:30:09
 */
@Getter
@Setter
@TableName("cnas_fe_standard_substance_acceptance_inspection")
@ApiModel(value = "FeStandardSubstanceAcceptanceInspection对象", description = "验收开箱记录")
public class FeStandardSubstanceAcceptanceInspection implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    private Integer acceptanceId;
    private String name;
    private Integer number;
    @TableField(fill = FieldFill.INSERT)
    private String createUser;
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private String updateUser;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
}
cnas-require/src/main/java/com/ruoyi/require/pojo/FeStandardSubstanceRecord.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,78 @@
package com.ruoyi.require.pojo;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
 * <p>
 * æ ‡å‡†ç‰©è´¨æ¸…单借用归还记录表
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-14 01:49:11
 */
@Getter
@Setter
@TableName("cnas_fe_standard_substance_record")
@ApiModel(value = "FeStandardSubstanceRecord对象", description = "标准物质清单借用归还记录表")
public class FeStandardSubstanceRecord implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty("物质id")
    private Integer substanceId;
    @ApiModelProperty("借用-完好性")
    private String integrity;
    @ApiModelProperty("借用-借用人")
    private String borrowUser;
    @ApiModelProperty("借用-联系方式")
    private String phone;
    @ApiModelProperty("借用-借出日期")
    private LocalDateTime borrowDate;
    @ApiModelProperty("归还日期")
    private LocalDateTime borrowReturnDate;
    @ApiModelProperty("借出人")
    private String lender;
    @ApiModelProperty("归还-检查人")
    private String rummager;
    @ApiModelProperty("0:借用 1:归还")
    private String status;
    @ApiModelProperty("归还人")
    private String returnedPerson;
    @ApiModelProperty("归还-日期")
    private LocalDateTime returnDate;
    @ApiModelProperty("归还-完好性")
    private String returnIntegrity;
    @TableField(fill = FieldFill.INSERT)
    private String createUser;
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private String updateUser;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
}
cnas-require/src/main/java/com/ruoyi/require/service/FeCalibrationScheduleService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
package com.ruoyi.require.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.require.pojo.FeCalibrationSchedule;
import javax.servlet.http.HttpServletResponse;
/**
 * <p>
 *
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-13 02:53:05
 */
public interface FeCalibrationScheduleService extends IService<FeCalibrationSchedule> {
    IPage<FeCalibrationSchedule> page(Page page,String instrumentName, String managementNumber);
    /**
     * é‡å€¼æº¯æºè®¡åˆ’导出word
     *
     * @param response å“åº”添加word
     */
    void exportWordOfValueTraceabilityPlan(HttpServletResponse response);
}
cnas-require/src/main/java/com/ruoyi/require/service/FeStandardSubstanceAcceptanceInspectionService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package com.ruoyi.require.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.require.pojo.FeStandardSubstanceAcceptanceInspection;
/**
 * <p>
 * éªŒæ”¶å¼€ç®±è®°å½• æœåŠ¡ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-14 03:30:09
 */
public interface FeStandardSubstanceAcceptanceInspectionService extends IService<FeStandardSubstanceAcceptanceInspection> {
}
cnas-require/src/main/java/com/ruoyi/require/service/FeStandardSubstanceAcceptanceService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,33 @@
package com.ruoyi.require.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.require.dto.AcceptanceDto;
import com.ruoyi.require.pojo.FeStandardSubstanceAcceptance;
import com.ruoyi.require.vo.AcceptanceDetailsVo;
import com.ruoyi.require.vo.AcceptanceVo;
import javax.servlet.http.HttpServletResponse;
/**
 * <p>
 * æ ‡å‡†ç‰©è´¨éªŒæ”¶ æœåŠ¡ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-14 03:29:41
 */
public interface FeStandardSubstanceAcceptanceService extends IService<FeStandardSubstanceAcceptance> {
    void addAcceptance(AcceptanceDto dto);
    IPage<AcceptanceVo> getPageAcceptance(Page page, String name);
    AcceptanceDetailsVo getAcceptanceDetails(Integer id);
    Integer deleteAcceptance(Integer id);
    void exportFeStandardSubstanceAcceptance(HttpServletResponse response);
}
cnas-require/src/main/java/com/ruoyi/require/service/FeStandardSubstanceRecordService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,30 @@
package com.ruoyi.require.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.require.pojo.FeStandardSubstanceRecord;
import com.ruoyi.require.vo.SubstanceRecordVo;
import java.util.List;
/**
 * <p>
 * æ ‡å‡†ç‰©è´¨æ¸…单借用归还记录表 æœåŠ¡ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-14 01:49:11
 */
public interface FeStandardSubstanceRecordService extends IService<FeStandardSubstanceRecord> {
    void borrowSubstance(FeStandardSubstanceRecord feStandardSubstanceRecord);
    void returnSubstance(FeStandardSubstanceRecord feStandardSubstanceRecord);
    List<FeStandardSubstanceRecord> getSubstanceRecord(Integer id);
    IPage<SubstanceRecordVo> getPage(Page page, SubstanceRecordVo vo);
}
cnas-require/src/main/java/com/ruoyi/require/service/FeStandardSubstanceService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
package com.ruoyi.require.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.require.pojo.FeStandardSubstance;
/**
 * <p>
 * æ ‡å‡†ç‰©è´¨æ¸…单 æœåŠ¡ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-13 03:58:59
 */
public interface FeStandardSubstanceService extends IService<FeStandardSubstance> {
    IPage<FeStandardSubstance> page(Page page, FeStandardSubstance feStandardSubstance);
}
cnas-require/src/main/java/com/ruoyi/require/service/impl/FeCalibrationScheduleServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,75 @@
package com.ruoyi.require.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.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.ruoyi.basic.util.HackLoopTableRenderPolicy;
import com.ruoyi.require.mapper.FeCalibrationScheduleMapper;
import com.ruoyi.require.pojo.FeCalibrationSchedule;
import com.ruoyi.require.service.FeCalibrationScheduleService;
import org.springframework.stereotype.Service;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.List;
/**
 * <p>
 *
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-13 02:53:05
 */
@Service
public class FeCalibrationScheduleServiceImpl extends ServiceImpl<FeCalibrationScheduleMapper, FeCalibrationSchedule> implements FeCalibrationScheduleService {
    @Override
    public IPage<FeCalibrationSchedule> page(Page page, String instrumentName, String managementNumber) {
        IPage<FeCalibrationSchedule> ipage = this.baseMapper.ipage(page,instrumentName, managementNumber);
        return ipage;
    }
    @Override
    public void exportWordOfValueTraceabilityPlan(HttpServletResponse response) {
        List<FeCalibrationSchedule> feCalibrationSchedules = this.baseMapper.selectList(null);
        int size = feCalibrationSchedules.size();
        for (int i = 0; i < size; i++) {
            FeCalibrationSchedule feCalibrationSchedule = feCalibrationSchedules.get(i);
            feCalibrationSchedule.setIndex(i + 1);
        }
        // èŽ·å–è·¯å¾„
        InputStream inputStream = this.getClass().getResourceAsStream("/static/value-traceability-plan.docx");
        Configure configure = Configure.builder()
                .bind("feCalibrationSchedule", new HackLoopTableRenderPolicy())
                .build();
        FeCalibrationSchedule feCalibrationSchedule = size > 0 ? feCalibrationSchedules.get(0) : null;
        XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
                new HashMap<String, Object>() {{
                    put("feCalibrationSchedule", feCalibrationSchedules);
                }}
        );
        try {
            response.setContentType("application/msword");
            String fileName = URLEncoder.encode(
                    "仪器设备量值溯源管理总体计划", "UTF-8");
            response.setHeader("Content-disposition",
                    "attachment;filename=" + fileName + ".docx");
            OutputStream os = response.getOutputStream();
            template.write(os);
            os.flush();
            os.close();
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("导出失败");
        }
    }
}
cnas-require/src/main/java/com/ruoyi/require/service/impl/FeStandardSubstanceAcceptanceInspectionServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.ruoyi.require.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.require.mapper.FeStandardSubstanceAcceptanceInspectionMapper;
import com.ruoyi.require.pojo.FeStandardSubstanceAcceptanceInspection;
import com.ruoyi.require.service.FeStandardSubstanceAcceptanceInspectionService;
import org.springframework.stereotype.Service;
/**
 * <p>
 * éªŒæ”¶å¼€ç®±è®°å½• æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-14 03:30:09
 */
@Service
public class FeStandardSubstanceAcceptanceInspectionServiceImpl extends ServiceImpl<FeStandardSubstanceAcceptanceInspectionMapper, FeStandardSubstanceAcceptanceInspection> implements FeStandardSubstanceAcceptanceInspectionService {
}
cnas-require/src/main/java/com/ruoyi/require/service/impl/FeStandardSubstanceAcceptanceServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,116 @@
package com.ruoyi.require.service.impl;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.require.dto.AcceptanceDto;
import com.ruoyi.require.mapper.FeStandardSubstanceAcceptanceInspectionMapper;
import com.ruoyi.require.mapper.FeStandardSubstanceAcceptanceMapper;
import com.ruoyi.require.mapper.FeStandardSubstanceMapper;
import com.ruoyi.require.pojo.FeStandardSubstance;
import com.ruoyi.require.pojo.FeStandardSubstanceAcceptance;
import com.ruoyi.require.pojo.FeStandardSubstanceAcceptanceInspection;
import com.ruoyi.require.service.FeStandardSubstanceAcceptanceInspectionService;
import com.ruoyi.require.service.FeStandardSubstanceAcceptanceService;
import com.ruoyi.require.vo.AcceptanceDetailsVo;
import com.ruoyi.require.vo.AcceptanceVo;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.List;
/**
 * <p>
 * æ ‡å‡†ç‰©è´¨éªŒæ”¶ æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-14 03:29:41
 */
@Service
public class FeStandardSubstanceAcceptanceServiceImpl extends ServiceImpl<FeStandardSubstanceAcceptanceMapper, FeStandardSubstanceAcceptance> implements FeStandardSubstanceAcceptanceService {
    @Resource
    private FeStandardSubstanceAcceptanceInspectionMapper feStandardSubstanceAcceptanceInspectionMapper;
    @Resource
    private FeStandardSubstanceAcceptanceInspectionService feStandardSubstanceAcceptanceInspectionService;
    @Resource
    private FeStandardSubstanceMapper feStandardSubstanceMapper;
    @Override
    public void addAcceptance(AcceptanceDto dto) {
        FeStandardSubstanceAcceptance acceptance = dto.getAcceptance();
        this.baseMapper.insert(acceptance);
        List<FeStandardSubstanceAcceptanceInspection> list = dto.getList();
        if (CollectionUtils.isNotEmpty(list)) {
            list.forEach(v -> {
                v.setAcceptanceId(acceptance.getId());
            });
            feStandardSubstanceAcceptanceInspectionService.saveBatch(list);
        }
    }
    @Override
    public IPage<AcceptanceVo> getPageAcceptance(Page page, String name) {
        return this.baseMapper.getPageAcceptance(page,name);
    }
    @Override
    public AcceptanceDetailsVo getAcceptanceDetails(Integer id) {
        FeStandardSubstanceAcceptance acceptance = this.baseMapper.selectById(id);
        FeStandardSubstance substance = feStandardSubstanceMapper.selectById(acceptance.getSubstanceId());
        QueryWrapper<FeStandardSubstanceAcceptanceInspection> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("acceptance_id",id);
        List<FeStandardSubstanceAcceptanceInspection> list = feStandardSubstanceAcceptanceInspectionMapper.selectList(queryWrapper);
        AcceptanceDetailsVo vo = new AcceptanceDetailsVo();
        vo.setSubstance(substance);
        vo.setAcceptance(acceptance);
        vo.setList(list);
        return vo;
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public Integer deleteAcceptance(Integer id) {
        feStandardSubstanceAcceptanceInspectionMapper.delete(new QueryWrapper<FeStandardSubstanceAcceptanceInspection>()
                .lambda().eq(FeStandardSubstanceAcceptanceInspection::getAcceptanceId,id));
        return this.baseMapper.deleteById(id);
    }
    @Override
    public void exportFeStandardSubstanceAcceptance(HttpServletResponse response) {
        List<FeStandardSubstanceAcceptance> list = this.list();
        response.setContentType("application/vnd.ms-excel");
        response.setCharacterEncoding("UTF-8");
        // è¿™é‡ŒURLEncoder.encode可以防止中文乱码 å½“ç„¶å’Œeasyexcel没有关系
        try {
            String fileName = URLEncoder.encode("标准物质验收", "UTF-8");
            response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
            // æ–°å»ºExcelWriter
            ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build();
            WriteSheet writeSheet = EasyExcel.writerSheet(0, "标准物质验收").head(FeStandardSubstanceAcceptance.class).build();
            excelWriter.write(list, writeSheet);
            // å…³é—­æµ
            excelWriter.finish();
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
            throw new RuntimeException("导出失败");
        } catch (IOException e) {
            e.printStackTrace();
            throw new RuntimeException("导出失败");
        }
    }
}
cnas-require/src/main/java/com/ruoyi/require/service/impl/FeStandardSubstanceRecordServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,79 @@
package com.ruoyi.require.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.framework.exception.ErrorException;
import com.ruoyi.require.mapper.FeStandardSubstanceMapper;
import com.ruoyi.require.mapper.FeStandardSubstanceRecordMapper;
import com.ruoyi.require.pojo.FeStandardSubstance;
import com.ruoyi.require.pojo.FeStandardSubstanceRecord;
import com.ruoyi.require.service.FeStandardSubstanceRecordService;
import com.ruoyi.require.vo.SubstanceRecordVo;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.List;
/**
 * <p>
 * æ ‡å‡†ç‰©è´¨æ¸…单借用归还记录表 æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-14 01:49:11
 */
@Transactional(rollbackFor = Exception.class)
@Service
public class FeStandardSubstanceRecordServiceImpl extends ServiceImpl<FeStandardSubstanceRecordMapper, FeStandardSubstanceRecord> implements FeStandardSubstanceRecordService {
    @Resource
    private FeStandardSubstanceMapper feStandardSubstanceMapper;
    @Override
    public void borrowSubstance(FeStandardSubstanceRecord feStandardSubstanceRecord) {
        FeStandardSubstance standardSubstance = feStandardSubstanceMapper.selectOne(Wrappers.<FeStandardSubstance>lambdaQuery()
                .eq(FeStandardSubstance::getId, feStandardSubstanceRecord.getSubstanceId())
                .eq(FeStandardSubstance::getState, 0)
                .last("limit 1"));
        if (ObjectUtils.isEmpty(standardSubstance)){
            throw new ErrorException("该物质已被借出!");
        }
        this.baseMapper.insert(feStandardSubstanceRecord);
        standardSubstance.setState(1);
        feStandardSubstanceMapper.updateById(standardSubstance);
    }
    @Override
    public void returnSubstance(FeStandardSubstanceRecord feStandardSubstanceRecord) {
        FeStandardSubstance standardSubstance = feStandardSubstanceMapper.selectOne(Wrappers.<FeStandardSubstance>lambdaQuery()
                .eq(FeStandardSubstance::getId, feStandardSubstanceRecord.getSubstanceId())
                .eq(FeStandardSubstance::getState, 1));
        if (ObjectUtils.isEmpty(standardSubstance)){
            throw new ErrorException("该物质未被领用,无需归还!");
        }
        standardSubstance.setState(0);
        feStandardSubstanceMapper.updateById(standardSubstance);
        System.out.println(feStandardSubstanceRecord);
        baseMapper.update(feStandardSubstanceRecord, Wrappers.<FeStandardSubstanceRecord>lambdaUpdate()
                .eq(FeStandardSubstanceRecord::getSubstanceId, feStandardSubstanceRecord.getSubstanceId())
                .eq(FeStandardSubstanceRecord::getStatus, 0));
    }
    @Override
    public List<FeStandardSubstanceRecord> getSubstanceRecord(Integer id) {
        QueryWrapper<FeStandardSubstanceRecord> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("substance_id",id);
        List<FeStandardSubstanceRecord> list = this.baseMapper.selectList(queryWrapper);
        return list;
    }
    @Override
    public IPage<SubstanceRecordVo> getPage(Page page, SubstanceRecordVo vo) {
        return this.baseMapper.getPage(page,vo);
    }
}
cnas-require/src/main/java/com/ruoyi/require/service/impl/FeStandardSubstanceServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
package com.ruoyi.require.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.require.mapper.FeStandardSubstanceMapper;
import com.ruoyi.require.pojo.FeStandardSubstance;
import com.ruoyi.require.service.FeStandardSubstanceService;
import org.springframework.stereotype.Service;
/**
 * <p>
 * æ ‡å‡†ç‰©è´¨æ¸…单 æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-11-13 03:58:59
 */
@Service
public class FeStandardSubstanceServiceImpl extends ServiceImpl<FeStandardSubstanceMapper, FeStandardSubstance> implements FeStandardSubstanceService {
    @Override
    public IPage<FeStandardSubstance> page(Page page, FeStandardSubstance feStandardSubstance) {
        return this.baseMapper.getPage(page,feStandardSubstance);
    }
}
cnas-require/src/main/java/com/ruoyi/require/vo/AcceptanceDetailsVo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,22 @@
package com.ruoyi.require.vo;
import com.ruoyi.require.pojo.FeStandardSubstance;
import com.ruoyi.require.pojo.FeStandardSubstanceAcceptance;
import com.ruoyi.require.pojo.FeStandardSubstanceAcceptanceInspection;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@Data
public class AcceptanceDetailsVo extends FeStandardSubstanceAcceptance {
    @ApiModelProperty("物质清单")
    private FeStandardSubstance substance;
    @ApiModelProperty("验收单")
    private FeStandardSubstanceAcceptance acceptance;
    @ApiModelProperty("开箱记录")
    private List<FeStandardSubstanceAcceptanceInspection> list;
}
cnas-require/src/main/java/com/ruoyi/require/vo/AcceptanceVo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,46 @@
package com.ruoyi.require.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDateTime;
@Data
public class AcceptanceVo {
    @ApiModelProperty("检验表id")
    private Integer id;
    @ApiModelProperty("标准物质名称")
    private String name;
    @ApiModelProperty("规格型号")
    private String model;
    @ApiModelProperty("生产厂家")
    private String factoryManufacturer;
    @ApiModelProperty("出场编号")
    private String factoryNum;
    @ApiModelProperty("管理编号")
    private String manageNum;
    @ApiModelProperty("不确定度")
    private String uncertainty;
    @ApiModelProperty("数量")
    private Long quantity;
    @ApiModelProperty("购置日期")
    private LocalDateTime acquisitionDate;
    @ApiModelProperty("有效期")
    private LocalDateTime effectiveDate;
    @ApiModelProperty("文档编号")
    private String fileNum;
    @ApiModelProperty("存放位置")
    private String position;
}
cnas-require/src/main/java/com/ruoyi/require/vo/SubstanceRecordVo.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,46 @@
package com.ruoyi.require.vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.time.LocalDateTime;
@Data
public class SubstanceRecordVo {
    @ApiModelProperty("id")
    private Integer id;
    @ApiModelProperty("标准物质名称")
    private String name;
    @ApiModelProperty("规格型号")
    private String model;
    @ApiModelProperty("出场编号")
    private String factoryNum;
    @ApiModelProperty("数量")
    private Long quantity;
    @ApiModelProperty("领用人")
    private String borrowUser;
    @ApiModelProperty("借出日期")
    private LocalDateTime borrowDate;
    @ApiModelProperty("归还日期")
    private LocalDateTime returnDate;
    @ApiModelProperty("归还人")
    private String returnedPerson;
    @ApiModelProperty("完好性")
    private String returnIntegrity;
    @ApiModelProperty("0:借用 1:归还")
    private String status;
    @ApiModelProperty("备注")
    private String remark;
}
inspect-server/pom.xml
@@ -24,6 +24,11 @@
            <groupId>com.ruoyi</groupId>
            <artifactId>ruoyi-system</artifactId>
        </dependency>
        <dependency>
            <groupId>com.deepoove</groupId>
            <artifactId>poi-tl</artifactId>
            <version>1.12.2</version>
        </dependency>
    </dependencies>
    <properties>
inspect-server/src/main/java/com/ruoyi/basic/util/HackLoopTableRenderPolicy.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,154 @@
/*
 * Copyright 2014-2020 Sayi
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.ruoyi.basic.util;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.exception.RenderException;
import com.deepoove.poi.policy.RenderPolicy;
import com.deepoove.poi.render.compute.RenderDataCompute;
import com.deepoove.poi.render.processor.DocumentProcessor;
import com.deepoove.poi.resolver.TemplateResolver;
import com.deepoove.poi.template.ElementTemplate;
import com.deepoove.poi.template.MetaTemplate;
import com.deepoove.poi.template.run.RunTemplate;
import com.deepoove.poi.util.ReflectionUtils;
import com.deepoove.poi.util.TableTools;
import org.apache.poi.xwpf.usermodel.*;
import org.apache.xmlbeans.XmlCursor;
import org.apache.xmlbeans.XmlObject;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRow;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTcPr;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTVMerge;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STMerge;
import java.util.Iterator;
import java.util.List;
/**
 * Hack for loop table row
 *
 * @author Sayi
 *
 */
public class HackLoopTableRenderPolicy implements RenderPolicy {
    private String prefix;
    private String suffix;
    private boolean onSameLine;
    public HackLoopTableRenderPolicy() {
        this(false);
    }
    public HackLoopTableRenderPolicy(boolean onSameLine) {
        this("[", "]", onSameLine);
    }
    public HackLoopTableRenderPolicy(String prefix, String suffix) {
        this(prefix, suffix, false);
    }
    public HackLoopTableRenderPolicy(String prefix, String suffix, boolean onSameLine) {
        this.prefix = prefix;
        this.suffix = suffix;
        this.onSameLine = onSameLine;
    }
    @Override
    public void render(ElementTemplate eleTemplate, Object data, XWPFTemplate template) {
        RunTemplate runTemplate = (RunTemplate) eleTemplate;
        XWPFRun run = runTemplate.getRun();
        try {
            if (!TableTools.isInsideTable(run)) {
                throw new IllegalStateException(
                        "The template tag " + runTemplate.getSource() + " must be inside a table");
            }
            XWPFTableCell tagCell = (XWPFTableCell) ((XWPFParagraph) run.getParent()).getBody();
            XWPFTable table = tagCell.getTableRow().getTable();
            run.setText("", 0);
            int templateRowIndex = getTemplateRowIndex(tagCell);
            if (null != data && data instanceof Iterable) {
                Iterator<?> iterator = ((Iterable<?>) data).iterator();
                XWPFTableRow templateRow = table.getRow(templateRowIndex);
                int insertPosition = templateRowIndex;
                TemplateResolver resolver = new TemplateResolver(template.getConfig().copy(prefix, suffix));
                boolean firstFlag = true;
                while (iterator.hasNext()) {
                    insertPosition = templateRowIndex++;
                    XWPFTableRow nextRow = table.insertNewTableRow(insertPosition);
                    setTableRow(table, templateRow, insertPosition);
                    // double set row
                    XmlCursor newCursor = templateRow.getCtRow().newCursor();
                    newCursor.toPrevSibling();
                    XmlObject object = newCursor.getObject();
                    nextRow = new XWPFTableRow((CTRow) object, table);
                    if (!firstFlag) {
                        // update VMerge cells for non-first row
                        List<XWPFTableCell> tableCells = nextRow.getTableCells();
                        for (XWPFTableCell cell : tableCells) {
                            CTTcPr tcPr = TableTools.getTcPr(cell);
                            CTVMerge vMerge = tcPr.getVMerge();
                            if (null == vMerge) continue;
                            if (STMerge.RESTART == vMerge.getVal()) {
                                vMerge.setVal(STMerge.CONTINUE);
                            }
                        }
                    } else {
                        firstFlag = false;
                    }
                    setTableRow(table, nextRow, insertPosition);
                    RenderDataCompute dataCompute = template.getConfig().getRenderDataComputeFactory()
                            .newCompute(iterator.next());
                    List<XWPFTableCell> cells = nextRow.getTableCells();
                    cells.forEach(cell -> {
                        List<MetaTemplate> templates = resolver.resolveBodyElements(cell.getBodyElements());
                        new DocumentProcessor(template, resolver, dataCompute).process(templates);
                    });
                }
            }
            table.removeRow(templateRowIndex);
            afterloop(table, data);
        } catch (Exception e) {
            throw new RenderException("HackLoopTable for " + eleTemplate + "error: " + e.getMessage(), e);
        }
    }
    private int getTemplateRowIndex(XWPFTableCell tagCell) {
        XWPFTableRow tagRow = tagCell.getTableRow();
        return onSameLine ? getRowIndex(tagRow) : (getRowIndex(tagRow) + 1);
    }
    protected void afterloop(XWPFTable table, Object data) {
    }
    @SuppressWarnings("unchecked")
    private void setTableRow(XWPFTable table, XWPFTableRow templateRow, int pos) {
        List<XWPFTableRow> rows = (List<XWPFTableRow>) ReflectionUtils.getValue("tableRows", table);
        rows.set(pos, templateRow);
        table.getCTTbl().setTrArray(pos, templateRow.getCtRow());
    }
    private int getRowIndex(XWPFTableRow row) {
        List<XWPFTableRow> rows = row.getTable().getRows();
        return rows.indexOf(row);
    }
}
pom.xml
@@ -339,6 +339,7 @@
        <module>basic-server</module>
        <module>inspect-server</module>
        <module>performance-server</module>
        <module>cnas-require</module>
    </modules>
    <packaging>pom</packaging>
ruoyi-admin/pom.xml
@@ -87,6 +87,12 @@
            <version>${ruoyi.version}</version>
        </dependency>
        <dependency>
            <groupId>com.ruoyi</groupId>
            <artifactId>cnas-require</artifactId>
            <version>${ruoyi.version}</version>
        </dependency>
    </dependencies>
    <build>
ruoyi-framework/src/main/java/com/ruoyi/framework/exception/ErrorException.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
package com.ruoyi.framework.exception;
public class ErrorException extends RuntimeException{
    public ErrorException(String msg){
        super(msg);
    }
}
ruoyi-framework/src/main/java/com/ruoyi/framework/exception/MyFileException.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
package com.ruoyi.framework.exception;
public class MyFileException extends RuntimeException{
    public MyFileException() {
    }
    public MyFileException(String message) {
        super(message);
    }
    public MyFileException(Throwable cause) {
        super(cause);
    }
    public MyFileException(String message, Throwable cause) {
        super(message, cause);
    }
}