zhuo
2025-02-22 03d2740ecb063e39e3453402607eecca048d332d
移植设备停用启用, 设备报废
已添加44个文件
1630 ■■■■■ 文件已修改
cnas-device/src/main/java/com/ruoyi/device/controller/DeviceBorrowController.java 73 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/controller/DeviceMaintenanceController.java 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/controller/DeviceScrappedController.java 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/controller/DeviceStateController.java 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/dto/DeviceScrappedDto.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/dto/DeviceStateDto.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/excel/DeviceStateExport.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceBorrowMapper.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceLogMapper.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceScrappedMapper.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceStateMapper.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceBorrow.java 133 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceLog.java 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceScrapped.java 105 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceState.java 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/service/DeviceBorrowService.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/service/DeviceMaintenanceService.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/service/DeviceScrappedService.java 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/service/DeviceStateService.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceBorrowServiceImpl.java 116 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceImpl.java 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceScrappedServiceImpl.java 179 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceStateServiceImpl.java 159 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/resources/mapper/DeviceBorrowMapper.xml 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/resources/mapper/DeviceScrappedMapper.xml 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/resources/mapper/DeviceStateMapper.xml 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/resources/static/word/acceptance-certificate.docx 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/resources/static/word/device-accident-report.docx 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/resources/static/word/device-breakdown-maintenance.docx 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/resources/static/word/device-calibration-plan.docx 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/resources/static/word/device-document.docx 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/resources/static/word/device-external-apply.docx 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/resources/static/word/device-inspection-record.docx 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/resources/static/word/device-scrapped.docx 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/resources/static/word/device-status.docx 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/resources/static/word/examine-plan-detail.docx 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/resources/static/word/examine-record.docx 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/resources/static/word/incident-report.docx 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/resources/static/word/maintenance-plan.docx 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/resources/static/word/maintenance-records.docx 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/resources/static/word/quipment-details.docx 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/resources/static/word/review-examine-record-contrast.docx 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/resources/static/word/traceability-management-details.docx 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/resources/static/word/use-record.docx 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/controller/DeviceBorrowController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,73 @@
package com.ruoyi.device.controller;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.device.pojo.DeviceBorrow;
import com.ruoyi.device.service.DeviceBorrowService;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
/**
 * <p>
 *  å‰ç«¯æŽ§åˆ¶å™¨
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-09-21 10:53:51
 */
@RestController
@RequestMapping("/deviceBorrow")
public class DeviceBorrowController {
    @Resource
    private DeviceBorrowService deviceBorrowService;
    //分页
    @PostMapping("/deviceBorrowPage")
    public Result deviceBorrowPage(Page page, DeviceBorrow deviceBorrow) throws Exception {
        return Result.success(deviceBorrowService.deviceBorrowPage(page, deviceBorrow));
    }
    //查询
    @GetMapping("/getDeviceBorrow")
    public Result getDeviceBorrow(Integer id) {
        return Result.success(deviceBorrowService.getDeviceBorrow(id));
    }
    //新增
    @PostMapping("/saveDeviceBorrow")
    public Result saveDeviceBorrow(@RequestBody DeviceBorrow deviceBorrow) {
        return Result.success(deviceBorrowService.saveDeviceBorrow(deviceBorrow));
    }
    //删除
    @PostMapping("/deleteDeviceBorrow")
    public Result deleteDeviceBorrow(Integer id) {
        return Result.success(deviceBorrowService.removeById(id));
    }
    //导出
    @PostMapping("/deviceBorrowExport")
    public Result deviceBorrowExport(@RequestParam("deviceId") Integer deviceId, HttpServletResponse response) throws Exception {
        List<DeviceBorrow> deviceBorrows = deviceBorrowService.getDeviceBorrowBydeviceId(deviceId);
        response.setHeader("requestType", "excel");
        response.setHeader("Access-Control-Expose-Headers", "requestType");
        // è®¾ç½®å•元格样式
        // ä¿å­˜åˆ°ç¬¬ä¸€ä¸ªsheet中
        EasyExcel.write(response.getOutputStream())
                .head(DeviceBorrow.class)
                .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) // è‡ªé€‚应列宽
                .sheet()
                .doWrite(deviceBorrows);
        return Result.success();
    }
}
cnas-device/src/main/java/com/ruoyi/device/controller/DeviceMaintenanceController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,98 @@
package com.ruoyi.device.controller;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.write.metadata.style.WriteCellStyle;
import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.common.numgen.NumberGenerator;
import com.ruoyi.device.excel.DeviceMaintenanceExport;
import com.ruoyi.device.pojo.DeviceMaintenance;
import com.ruoyi.device.service.DeviceMaintenanceService;
import io.swagger.annotations.ApiOperation;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Locale;
/**
 * todo: å­™æ²³æ»¨
 */
@RestController
@RequestMapping("/device-maintain")
public class DeviceMaintenanceController {
    @Autowired
    private DeviceMaintenanceService deviceMaintenanceService;
    @Autowired
    private NumberGenerator<DeviceMaintenance> numberGenerator;
    //增
    @PostMapping()
    public Result create(@RequestBody DeviceMaintenance deviceMaintenance){
        String year = new SimpleDateFormat("yy", Locale.CHINESE).format(new Date());
        String month = new SimpleDateFormat("MM", Locale.CHINESE).format(new Date());
        String processNumber = numberGenerator.generateNumberWithPrefix(3, "DG-TC-23FM " + month + "-" + year + month, DeviceMaintenance::getDeviceNumber);
        deviceMaintenance.setDeviceNumber(processNumber);
        return Result.success(deviceMaintenanceService.save(deviceMaintenance));
    }
    //通过deviceId查询维护数据
    @GetMapping("/getDeviceMaintenancePage")
    public Result getDeviceMaintenancePage(@RequestParam("deviceId") Integer deviceId, Page page, String deviceNumber){
        return Result.success(deviceMaintenanceService.getDeviceMaintenancePage(page, deviceId, deviceNumber));
    }
    //删
    @DeleteMapping("/delete/{id}")
    public void deleteDeviceFault(@PathVariable Integer id) {
        deviceMaintenanceService.removeById(id);
    }
    @GetMapping("/deviceMaintenanceExport")
    public Result deviceMaintenanceExport(@RequestParam("deviceId") Integer deviceId, HttpServletResponse response) throws IOException {
        List<DeviceMaintenanceExport> list = deviceMaintenanceService.deviceMaintenanceExport(deviceId);
        response.setHeader("requestType","excel");
        response.setHeader("Access-Control-Expose-Headers", "requestType");
        // è®¾ç½®å•元格样式
        // ä¿å­˜åˆ°ç¬¬ä¸€ä¸ªsheet中
        EasyExcel.write(response.getOutputStream())
                .head(DeviceMaintenanceExport.class)
                .registerWriteHandler(getHorizontalCellStyleStrategy((short) 12))
                .sheet()
                .doWrite(list);
        return Result.success();
    }
    @ApiOperation(value = "设备维护记录导出")
    @GetMapping("/exportMaintenanceRecord")
    public void exportMaintenanceRecord(@RequestParam("deviceId") Integer deviceId, HttpServletResponse response) throws Exception {
        deviceMaintenanceService.exportMaintenanceRecord(deviceId, response);
    }
    /**
     * å•元格样式策略
     */
    public static HorizontalCellStyleStrategy getHorizontalCellStyleStrategy(Short fontHeightInPoints) {
        // å†…容的策略
        WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
        // ã€æ°´å¹³å±…中需要使用以下两行】
        // è®¾ç½®æ–‡å­—左右居中
        contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.CENTER);
        // è®¾ç½®æ–‡å­—上下居中
        contentWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
        // è®¾ç½® è‡ªåŠ¨æ¢è¡Œ
        contentWriteCellStyle.setWrapped(true);
        // æ ·å¼ç­–ç•¥
        return new HorizontalCellStyleStrategy(null, contentWriteCellStyle);
    }
}
cnas-device/src/main/java/com/ruoyi/device/controller/DeviceScrappedController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,82 @@
package com.ruoyi.device.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.device.pojo.DeviceScrapped;
import com.ruoyi.device.service.DeviceScrappedService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;
/**
 * <p>
 * è®¾å¤‡æŠ¥åºŸç”³è¯·è¡¨ å‰ç«¯æŽ§åˆ¶å™¨
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-12-17 01:53:47
 */
@Api(tags = "设备报废申请表")
@AllArgsConstructor
@RestController
@RequestMapping("/deviceScrapped")
public class DeviceScrappedController {
    private DeviceScrappedService deviceScrappedService;
    /**
     * è®¾å¤‡æŠ¥åºŸç”³è¯·åˆ—表
     * @return
     */
    @ApiOperation(value = "设备报废申请列表")
    @PostMapping("/pageDeviceScrapped")
    public Result<IPage<DeviceScrapped>> pageDeviceScrapped(Page page, DeviceScrapped deviceScrapped) {
        return Result.success(deviceScrappedService.pageDeviceScrapped(page, deviceScrapped));
    }
    /**
     * æŸ¥è¯¢è®¾å¤‡æŠ¥åºŸç”³è¯·
     * @return
     */
    @ApiOperation(value = "查询设备报废申请")
    @GetMapping("/getDeviceScrapped")
    public Result getDeviceScrapped(Integer scrappedId){
        return Result.success(deviceScrappedService.getById(scrappedId));
    }
    /**
     * åˆ é™¤è®¾å¤‡æ ¸æŸ¥è®¡åˆ’详情
     * @return
     */
    @ApiOperation(value = "删除设备报废申请")
    @GetMapping("/delDeviceScrapped")
    public Result delDeviceScrapped(Integer scrappedId){
        return Result.success(deviceScrappedService.removeById(scrappedId));
    }
    /**
     * æ–°å¢žè®¾å¤‡æŠ¥åºŸç”³è¯·
     * @return
     */
    @ApiOperation(value = "新增设备报废申请")
    @PostMapping("/addDeviceScrapped")
    public Result addDeviceScrapped(@RequestBody DeviceScrapped deviceScrapped){
        return Result.success(deviceScrappedService.addDeviceScrapped(deviceScrapped));
    }
    /**
     * å¯¼å‡ºè®¾å¤‡æŠ¥åºŸç”³è¯·
     */
    @ApiOperation("导出设备报废申请")
    @GetMapping("/exportDeviceScrapped")
    public Result exportDeviceScrapped(Integer scrappedId, HttpServletResponse response) {
        return deviceScrappedService.exportDeviceScrapped(scrappedId, response);
    }
}
cnas-device/src/main/java/com/ruoyi/device/controller/DeviceStateController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,87 @@
package com.ruoyi.device.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.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.common.numgen.NumberGenerator;
import com.ruoyi.device.dto.DeviceStateDto;
import com.ruoyi.device.excel.DeviceStateExport;
import com.ruoyi.device.pojo.DeviceState;
import com.ruoyi.device.service.DeviceStateService;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Locale;
/**
 * <p>
 * è®¾å¤‡åœç”¨/启用 å‰ç«¯æŽ§åˆ¶å™¨
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-09-26 09:51:40
 */
@RestController
@RequestMapping("/deviceState")
public class DeviceStateController {
    @Autowired
    private DeviceStateService deviceStateService;
    @Autowired
    private NumberGenerator<DeviceState> numberGenerator;
    @PostMapping("saveDeviceState")
    public Result saveIncidentReportData(@RequestBody DeviceState deviceState) {
        if (ObjectUtils.isEmpty(deviceState.getProcessNumber())) {
            String year = new SimpleDateFormat("yy", Locale.CHINESE).format(new Date());
            String month = new SimpleDateFormat("MM", Locale.CHINESE).format(new Date());
            String processNumber = numberGenerator.generateNumberWithPrefix(3, "DG-TC-23FM " + month + "-" + year + month, DeviceState::getProcessNumber);
            deviceState.setProcessNumber(processNumber);
        }
        deviceStateService.saveOrUpdate(deviceState);
        return Result.success();
    }
    @GetMapping("/getDeviceStatePage")
    public Result getDeviceStatePage(@RequestParam("deviceId") Integer deviceId, Page page, String processNumber){
        return Result.success(deviceStateService.getDeviceStatePage(deviceId, page, processNumber));
    }
    @DeleteMapping("/deleteDeviceState")
    public Result deleteDeviceState(@RequestParam("stateId") Integer stateId){
        return Result.success(deviceStateService.removeById(stateId));
    }
    @PostMapping("/deviceStateExport")
    public Result deviceStateExport(@RequestParam("deviceId") Integer deviceId, String processNumber, HttpServletResponse response) throws Exception {
        IPage<DeviceStateDto> deviceBorrows = deviceStateService.getDeviceStatePage(deviceId, new Page<>(1, -1), processNumber);
        List<DeviceStateExport> studentList  = JSONObject.parseArray(JSON.toJSONString(deviceBorrows.getRecords()), DeviceStateExport.class);
        response.setHeader("requestType", "excel");
        response.setHeader("Access-Control-Expose-Headers", "requestType");
        // è®¾ç½®å•元格样式
        // ä¿å­˜åˆ°ç¬¬ä¸€ä¸ªsheet中
        EasyExcel.write(response.getOutputStream())
                .head(DeviceStateExport.class)
                .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) // è‡ªé€‚应列宽
                .sheet("sheet")
                .doWrite(studentList);
        return Result.success();
    }
    @ApiOperation(value = "设备启动/停止导出")
    @GetMapping("/exportDeviceStatus")
    public void exportDeviceStatus(@RequestParam("processNumber") String processNumber,@RequestParam("deviceId") Integer deviceId, HttpServletResponse response) throws Exception {
        deviceStateService.exportDeviceStatus(deviceId, processNumber, response);
    }
}
cnas-device/src/main/java/com/ruoyi/device/dto/DeviceScrappedDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,26 @@
package com.ruoyi.device.dto;
import com.ruoyi.device.pojo.DeviceScrapped;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
 * Author: yuan
 * Date: 2024-12-17 æ˜ŸæœŸäºŒ 18:34:17
 * Description:
 */
@Data
public class DeviceScrappedDto extends DeviceScrapped {
    @ApiModelProperty("申请时间")
    private String applicantDateStr;
    @ApiModelProperty("部门负责人填写时间")
    private String departmentHeadDateStr;
    @ApiModelProperty("计量室人填写时间")
    private String meteringRoomDateStr;
    @ApiModelProperty("批准人填写时间")
    private String approverDateStr;
}
cnas-device/src/main/java/com/ruoyi/device/dto/DeviceStateDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,32 @@
package com.ruoyi.device.dto;
import com.ruoyi.device.pojo.DeviceState;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@Data
public class DeviceStateDto extends DeviceState {
    @ApiModelProperty(value = "设备名称")
    private String deviceName;
    @ApiModelProperty(value = "规格型号")
    private String specificationModel;
    @ApiModelProperty(value = "管理编号")
    private String managementNumber;
    @ApiModelProperty(value = "操作日期 yyyy-MM-dd")
    private String submitDateString;
    @ApiModelProperty("负责人审批日期 yyyy-MM-dd")
    private String departmentDateString;
    @ApiModelProperty("计量室审批日期 yyyy-MM-dd")
    private String measuringRoomDateString;
    @ApiModelProperty("批准日期 yyyy-MM-dd")
    private String approvalDateString;
    @ApiModelProperty(value = "设备类型")
    private String largeCategory;
}
cnas-device/src/main/java/com/ruoyi/device/excel/DeviceStateExport.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,36 @@
package com.ruoyi.device.excel;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import java.time.LocalDateTime;
@Data
public class DeviceStateExport {
    @ExcelProperty(value = "设备名称")
    private String deviceName;
    @ExcelProperty(value = "规格型号")
    private String specificationModel;
    @ExcelProperty(value = "管理编号")
    private String managementNumber;
    @ExcelProperty("设备状态")
    private String deviceStatus;
    @ExcelProperty("停用启用理由")
    private String reason;
    @ExcelProperty("提交人")
    private String createUser;
    @ExcelProperty("提交日期")
    private LocalDateTime createTime;
    @ExcelProperty("当前状态")
    private String currentState;
    @ExcelProperty("当前负责人")
    private String currentResponsible;
}
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceBorrowMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,25 @@
package com.ruoyi.device.mapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
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.device.pojo.DeviceBorrow;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
 * <p>
 *  Mapper æŽ¥å£
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-09-21 10:53:51
 */
public interface DeviceBorrowMapper extends BaseMapper<DeviceBorrow> {
    IPage<DeviceBorrow> deviceBorrowPage(Page page, @Param("ew")QueryWrapper<DeviceBorrow> ew);
    List<DeviceBorrow> getDeviceBorrowBydeviceId(Integer deviceId);
}
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceLogMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,9 @@
package com.ruoyi.device.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.device.pojo.DeviceLog;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface DeviceLogMapper extends BaseMapper<DeviceLog> {
}
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceScrappedMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,35 @@
package com.ruoyi.device.mapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
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.device.dto.DeviceScrappedDto;
import com.ruoyi.device.pojo.DeviceScrapped;
import org.apache.ibatis.annotations.Param;
/**
 * <p>
 * è®¾å¤‡æŠ¥åºŸç”³è¯·è¡¨ Mapper æŽ¥å£
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-12-17 01:53:47
 */
public interface DeviceScrappedMapper extends BaseMapper<DeviceScrapped> {
    /**
     * è®¾å¤‡æŠ¥åºŸç”³è¯·åˆ—表
     * @param page
     * @param ew
     * @return
     */
    IPage<DeviceScrapped> pageDeviceScrapped(Page page, @Param("ew") QueryWrapper<DeviceScrapped> ew);
    /**
     * æ ¹æ®id查询设备报废申请
     * @param scrappedId
     * @return
     */
    DeviceScrappedDto selectDeviceScrappedById(@Param("scrappedId") Integer scrappedId);
}
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceStateMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.ruoyi.device.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.device.dto.DeviceStateDto;
import com.ruoyi.device.pojo.DeviceState;
/**
 * <p>
 * è®¾å¤‡åœç”¨/启用 Mapper æŽ¥å£
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-09-26 09:51:40
 */
public interface DeviceStateMapper extends BaseMapper<DeviceState> {
    IPage<DeviceStateDto> getDeviceStatePage(Integer deviceId, Page page, String processNumber);
}
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceBorrow.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,133 @@
package com.ruoyi.device.pojo;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
/**
 * <p>
 *
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-09-21 10:53:51
 */
@Getter
@Setter
@TableName("device_borrow")
@ApiModel(value = "DeviceBorrow对象", description = "设备借用")
@ExcelIgnoreUnannotated
public class DeviceBorrow implements Serializable {
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty("流程编号")
    @ExcelProperty(value = "流程编号")
    private String processNumber;
    @ApiModelProperty("设备id")
    private Integer deviceId;
    @ApiModelProperty("管理编号")
    @ExcelProperty(value = "管理编号")
    private String unifyNumber;
    @ApiModelProperty("借用人")
    @ExcelProperty(value = "借用人")
    private String recipientUser;
    @ExcelProperty(value = "借用人联系方式")
    @ApiModelProperty("借用人联系方式")
    private String borrowerContactInformation;
    @ApiModelProperty("借用时状态")
    @ExcelProperty(value = "借用时状态")
    //0合格;1ç»´ä¿®;2停用;3报废
    private Integer recipientState;
    @ApiModelProperty("借用日期")
    @ExcelProperty(value = "提交日期")
    private Date recipientTime;
    @ApiModelProperty("借出人")
    @ExcelProperty(value = "借出人")
    private String submitUser;
    @ApiModelProperty("借出日期")
    @ExcelProperty(value = "借出日期")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty("当前状态")
    @ExcelProperty(value = "当前状态")
    private String nowState;
    @ApiModelProperty("当前责任人")
    @ExcelProperty(value = "当前责任人")
    private String nowUser;
    @ApiModelProperty("附件")
    //路径
    private String url;
    @ApiModelProperty("附件")
    @ExcelProperty(value = "附件")
    //文件名
    private String fileName;
    @ApiModelProperty("下环节责任人")
    private String nextUser;
    @ApiModelProperty("提交操作人")
    private String submitOperationUser;
    @ApiModelProperty("提交操作时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime submitOperationTime;
    @ApiModelProperty("归还人")
    private String rebackUser;
    @ApiModelProperty("归还日期")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime rebackTime;
    @ApiModelProperty("接受状态0合格;1ç»´ä¿®;2停用;3报废")
    private Integer receiveState;
    @ApiModelProperty("设备责任人")
    private String deviceUser;
    @ApiModelProperty("备注")
    private String note;
    @ApiModelProperty("接收操作人")
    private String receiveOperationUser;
    @ApiModelProperty("接收操作时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime receiveOperationTime;
    @ApiModelProperty("设备名称")
    @TableField(select = false, exist = false)
    @ExcelProperty(value = "设备名称")
    private String deviceName;
    @ApiModelProperty("流程跟踪")
    @TableField(select = false, exist = false)
    private List<DeviceLog> deviceLogs;
}
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceLog.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
package com.ruoyi.device.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
@TableName("device_log") // è®°å½•
public class DeviceLog implements Serializable {
    @TableId(type= IdType.AUTO)
    private Integer id;
    private String operator;
//    @JsonFormat()
    private LocalDateTime operationTime;
    private String operationType;
    private String operationContent;
    private Integer deviceId;
    //关联的表名
    private String relevanceForm;
    //关联的id
    private Integer relevanceId;
}
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceScrapped.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,105 @@
package com.ruoyi.device.pojo;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
 * <p>
 * è®¾å¤‡æŠ¥åºŸç”³è¯·è¡¨
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-12-17 01:53:47
 */
@Getter
@Setter
@TableName("device_scrapped")
@ApiModel(value = "DeviceScrapped对象", description = "设备报废申请表")
public class DeviceScrapped {
    @TableId(value = "scrapped_id", type = IdType.AUTO)
    private Integer scrappedId;
    @ApiModelProperty("设备id")
    private Integer deviceId;
    @ApiModelProperty("配件")
    private String parts;
    @ApiModelProperty("报废理由")
    private String reasonsForScrap;
    @ApiModelProperty("申请人id")
    private Integer applicantUserId;
    @ApiModelProperty("申请人")
    private String applicantUser;
    @ApiModelProperty("申请时间")
    private LocalDate applicantDate;
    @ApiModelProperty("部门负责人意见")
    private String departmentHeadOpinion;
    @ApiModelProperty("部门负责人id")
    private Integer departmentHeadUserId;
    @ApiModelProperty("部门负责人")
    private String departmentHeadUser;
    @ApiModelProperty("部门负责人填写时间")
    private LocalDate departmentHeadDate;
    @ApiModelProperty("计量室意见")
    private String meteringRoomOpinion;
    @ApiModelProperty("计量室人id")
    private Integer meteringRoomUserId;
    @ApiModelProperty("计量室人")
    private String meteringRoomUser;
    @ApiModelProperty("计量室人填写时间")
    private LocalDate meteringRoomDate;
    @ApiModelProperty("批准人意见")
    private String approverOpinion;
    @ApiModelProperty("批准人id")
    private Integer approverUserId;
    @ApiModelProperty("批准人")
    private String approverUser;
    @ApiModelProperty("批准人填写时间")
    private LocalDate approverDate;
    @ApiModelProperty("是否结束,0: æœªç»“束, 1:结束")
    private Integer isFinish;
    @ApiModelProperty("创建人")
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    @ApiModelProperty("创建时间")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
    @ApiModelProperty("修改人")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    @ApiModelProperty("修改时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;
    @TableField(exist = false,select = false)
    @ApiModelProperty("流程, 0:报废申请, 1申请部门负责人意见, 2:计量室意见, 3:批准人")
    private Integer flowType;
}
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceState.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,107 @@
package com.ruoyi.device.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 java.io.Serializable;
import java.time.LocalDateTime;
/**
 * <p>
 * è®¾å¤‡åœç”¨/启用
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-09-26 09:51:40
 */
@Getter
@Setter
@TableName("device_state")
@ApiModel(value = "DeviceState对象", description = "设备停用/启用")
public class DeviceState implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("设备停用启用id")
    @TableId(value = "state_id", type = IdType.AUTO)
    private Integer stateId;
    @ApiModelProperty("流程编号")
    private String processNumber;
    @ApiModelProperty("0配件")
    private String accessoryPart;
    @ApiModelProperty("0设备状态")
    private String deviceStatus;
    @ApiModelProperty("0停用启用理由")
    private String reason;
    @ApiModelProperty("0下环节责任人")
    private String submitNextPesponsible;
    @ApiModelProperty("0操作人")
    private String submitOperatingPersonnel;
    @ApiModelProperty("0日期")
    private LocalDateTime submitDate;
    @ApiModelProperty("1部门负责人意见")
    private String departmentReviewOpinion;
    @ApiModelProperty("1下环节责任人")
    private String departmentNextPesponsible;
    @ApiModelProperty("1操作人")
    private String departmentOperatingPersonnel;
    @ApiModelProperty("1日期")
    private LocalDateTime departmentDate;
    @ApiModelProperty("2计量室意见")
    private String measuringRoomReviewOpinion;
    @ApiModelProperty("2下环节责任人")
    private String measuringRoomNextPesponsible;
    @ApiModelProperty("2操作人")
    private String measuringRoomOperatingPersonnel;
    @ApiModelProperty("2日期")
    private LocalDateTime measuringRoomDate;
    @ApiModelProperty("3批准意见")
    private String approvalOpinion;
    @ApiModelProperty("3下环节责任人")
    private String approvalNextPesponsible;
    @ApiModelProperty("3操作人")
    private String approvalOperatingPersonnel;
    @ApiModelProperty("3日期")
    private LocalDateTime approvalDate;
    @ApiModelProperty("当前状态")
    private String currentState;
    @ApiModelProperty("设备Id")
    private Integer deviceId;
    @ApiModelProperty("当前环节负责人")
    private String currentResponsible;
    @ApiModelProperty("提交人")
    @ExcelProperty(value = "提交人")
    private String createUser;
    @ApiModelProperty("提交日期")
    @ExcelProperty(value = "提交日期")
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;
}
cnas-device/src/main/java/com/ruoyi/device/service/DeviceBorrowService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,28 @@
package com.ruoyi.device.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.device.pojo.DeviceBorrow;
import java.util.List;
import java.util.Map;
/**
 * <p>
 *  æœåŠ¡ç±»
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-09-21 10:53:51
 */
public interface DeviceBorrowService extends IService<DeviceBorrow> {
    IPage<DeviceBorrow> deviceBorrowPage(Page page, DeviceBorrow deviceBorrow);
    int saveDeviceBorrow(DeviceBorrow deviceBorrow);
    DeviceBorrow getDeviceBorrow(Integer id);
    List<DeviceBorrow> getDeviceBorrowBydeviceId(Integer deviceId);
}
cnas-device/src/main/java/com/ruoyi/device/service/DeviceMaintenanceService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,24 @@
package com.ruoyi.device.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.device.excel.DeviceMaintenanceExport;
import com.ruoyi.device.pojo.DeviceMaintenance;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
public interface DeviceMaintenanceService extends IService<DeviceMaintenance> {
    IPage<DeviceMaintenance> getDeviceMaintenancePage(Page page, Integer deviceId, String deviceNumber);
    List<DeviceMaintenanceExport> deviceMaintenanceExport(Integer deviceId);
    /**
     * å¯¼å‡ºWord设备维护记录
     *
     * @param deviceId
     * @param response
     */
    void exportMaintenanceRecord(Integer deviceId, HttpServletResponse response);
}
cnas-device/src/main/java/com/ruoyi/device/service/DeviceScrappedService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,43 @@
package com.ruoyi.device.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.common.core.domain.Result;
import com.ruoyi.device.pojo.DeviceScrapped;
import javax.servlet.http.HttpServletResponse;
/**
 * <p>
 * è®¾å¤‡æŠ¥åºŸç”³è¯·è¡¨ æœåŠ¡ç±»
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-12-17 01:53:47
 */
public interface DeviceScrappedService extends IService<DeviceScrapped> {
    /**
     * è®¾å¤‡æŠ¥åºŸç”³è¯·åˆ—表
     * @param page
     * @param deviceScrapped
     * @return
     */
    IPage<DeviceScrapped> pageDeviceScrapped(Page page, DeviceScrapped deviceScrapped);
    /**
     * æ–°å¢žè®¾å¤‡æŠ¥åºŸç”³è¯·
     * @param deviceScrapped
     * @return
     */
    boolean addDeviceScrapped(DeviceScrapped deviceScrapped);
    /**
     * ä¿®æ”¹è®¾å¤‡æŠ¥åºŸç”³è¯·
     * @param scrappedId è®¾å¤‡æŠ¥åºŸç”³è¯·id
     * @return
     */
    Result exportDeviceScrapped(Integer scrappedId, HttpServletResponse response);
}
cnas-device/src/main/java/com/ruoyi/device/service/DeviceStateService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,31 @@
package com.ruoyi.device.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.device.dto.DeviceStateDto;
import com.ruoyi.device.pojo.DeviceState;
import javax.servlet.http.HttpServletResponse;
/**
 * <p>
 * è®¾å¤‡åœç”¨/启用 æœåŠ¡ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-09-26 09:51:40
 */
public interface DeviceStateService extends IService<DeviceState> {
    IPage<DeviceStateDto> getDeviceStatePage(Integer deviceId, Page page, String processNumber);
    /**
     * å¯¼å‡ºè®¾å¤‡çŠ¶æ€
     *
     * @param deviceId
     * @param processNumber
     * @param response
     */
    void exportDeviceStatus(Integer deviceId, String processNumber, HttpServletResponse response);
}
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceBorrowServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,116 @@
package com.ruoyi.device.service.impl;
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.common.core.domain.entity.User;
import com.ruoyi.common.numgen.NumberGenerator;
import com.ruoyi.common.utils.QueryWrappers;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.device.mapper.DeviceBorrowMapper;
import com.ruoyi.device.mapper.DeviceLogMapper;
import com.ruoyi.device.pojo.DeviceBorrow;
import com.ruoyi.device.pojo.DeviceLog;
import com.ruoyi.device.service.DeviceBorrowService;
import com.ruoyi.system.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.*;
/**
 * <p>
 * æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-09-21 10:53:51
 */
@Service
@Transactional(rollbackFor = Exception.class)
public class DeviceBorrowServiceImpl extends ServiceImpl<DeviceBorrowMapper, DeviceBorrow> implements DeviceBorrowService {
    @Resource
    private DeviceBorrowMapper deviceBorrowMapper;
    @Resource
    private DeviceLogMapper deviceLogMapper;
    @Resource
    private UserMapper userMapper;
    @Autowired
    private NumberGenerator<DeviceBorrow> numberGenerator;
    @Override
    public IPage<DeviceBorrow> deviceBorrowPage(Page page, DeviceBorrow deviceBorrow) {
        return deviceBorrowMapper.deviceBorrowPage(page, QueryWrappers.queryWrappers(deviceBorrow));
    }
    @Override
    public int saveDeviceBorrow(DeviceBorrow deviceBorrow) {
        Integer userId = SecurityUtils.getUserId().intValue();
        User user = userMapper.selectById(userId);
        //新增的时候添加新建流程
        if (ObjectUtils.isEmpty(deviceBorrow.getId())) {
            deviceBorrow.setSubmitUser(user.getName());
            String year = new SimpleDateFormat("yy", Locale.CHINESE).format(new Date());
            String month = new SimpleDateFormat("MM", Locale.CHINESE).format(new Date());
            String processNumber = numberGenerator.generateNumberWithPrefix(3, "DG-TC-23FM " + month + "-" + year + month, DeviceBorrow::getProcessNumber);
            deviceBorrow.setProcessNumber(processNumber);
            deviceBorrowMapper.insert(deviceBorrow);
            DeviceLog deviceLog = new DeviceLog();
            deviceLog.setOperator(user.getName());
            deviceLog.setOperationTime(LocalDateTime.now());
            deviceLog.setOperationType("新建");
            deviceLog.setOperationContent("新建流程");
            deviceLog.setRelevanceForm("device_borrow");
            deviceLog.setRelevanceId(deviceBorrow.getId());
            deviceLogMapper.insert(deviceLog);
        } else {
            DeviceBorrow borrow = deviceBorrowMapper.selectById(deviceBorrow.getId());
            deviceBorrowMapper.updateById(deviceBorrow);
            //通过或者驳回增加流程跟踪
            if (deviceBorrow.getNowState().equals("关闭")) {
                DeviceLog deviceLog = new DeviceLog();
                deviceLog.setOperator(user.getName());
                deviceLog.setOperationTime(LocalDateTime.now());
                deviceLog.setOperationType("接收通过");
                deviceLog.setRelevanceForm("device_borrow");
                deviceLog.setRelevanceId(deviceBorrow.getId());
                deviceLogMapper.insert(deviceLog);
            }
            else if (deviceBorrow.getNowState().equals("提交") && borrow.getNowState().equals("接收")) {
                DeviceLog deviceLog = new DeviceLog();
                deviceLog.setOperator(user.getName());
                deviceLog.setOperationTime(LocalDateTime.now());
                deviceLog.setOperationType("接收驳回");
                deviceLog.setRelevanceForm("device_borrow");
                deviceLog.setRelevanceId(deviceBorrow.getId());
                deviceLogMapper.insert(deviceLog);
            }
        }
        return 0;
    }
    @Override
    public DeviceBorrow getDeviceBorrow(Integer id) {
        List<DeviceLog> deviceLogs = deviceLogMapper.selectList(Wrappers.<DeviceLog>lambdaQuery()
                .eq(DeviceLog::getRelevanceForm, "device_borrow")
                .eq(DeviceLog::getRelevanceId, id));
        DeviceBorrow deviceBorrow = deviceBorrowMapper.selectById(id);
        deviceBorrow.setDeviceLogs(deviceLogs);
        return deviceBorrow;
    }
    @Override
    public List<DeviceBorrow> getDeviceBorrowBydeviceId(Integer deviceId) {
        return deviceBorrowMapper.getDeviceBorrowBydeviceId(deviceId);
    }
}
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceMaintenanceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,86 @@
package com.ruoyi.device.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
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.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.ruoyi.device.excel.DeviceMaintenanceExport;
import com.ruoyi.device.mapper.DeviceMaintenanceMapper;
import com.ruoyi.device.mapper.DeviceMapper;
import com.ruoyi.device.pojo.DeviceMaintenance;
import com.ruoyi.device.service.DeviceMaintenanceService;
import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
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;
@Service
public class DeviceMaintenanceImpl extends ServiceImpl<DeviceMaintenanceMapper, DeviceMaintenance> implements DeviceMaintenanceService {
    @Override
    public IPage<DeviceMaintenance> getDeviceMaintenancePage(Page page, Integer deviceId, String deviceNumber) {
        return baseMapper.selectPage(page, Wrappers.<DeviceMaintenance>lambdaQuery()
                .eq(DeviceMaintenance::getDeviceId, deviceId)
                .like(DeviceMaintenance::getDeviceNumber, deviceNumber));
    }
    @Override
    public List<DeviceMaintenanceExport> deviceMaintenanceExport(Integer deviceId) {
        return baseMapper.deviceMaintenanceExport(deviceId);
    }
    @Override
    public void exportMaintenanceRecord(Integer deviceId, HttpServletResponse response) {
        // æŸ¥è¯¢cnas设备维修记录
        List<DeviceMaintenance> deviceMaintenanceList = baseMapper.selectList(Wrappers.<DeviceMaintenance>lambdaQuery()
                .eq(DeviceMaintenance::getDeviceId, deviceId)
                .select(DeviceMaintenance::getDate,
                        DeviceMaintenance::getDeviceNumber,
                        DeviceMaintenance::getDeviceName,
                        DeviceMaintenance::getManagementNumber,
                        DeviceMaintenance::getContent,
                        DeviceMaintenance::getName,
                        DeviceMaintenance::getComments));
        // èŽ·å–è·¯å¾„
        InputStream inputStream = this.getClass().getResourceAsStream("/static/word/maintenance-records.docx");
        Configure configure = Configure.builder()
                .bind("deviceMaintenanceList", new HackLoopTableRenderPolicy())
                .build();
        // èŽ·å–è®¾å¤‡ åç§° å’Œ ç¼–号
        DeviceMaintenance deviceMaintenance = deviceMaintenanceList.get(0);
        String deviceName = deviceMaintenance.getDeviceName();
        String managementNumber = deviceMaintenance.getManagementNumber();
        XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
                new HashMap<String, Object>() {{
                    put("deviceMaintenanceList", deviceMaintenanceList);
                    put("deviceName", deviceName);
                    put("managementNumber", managementNumber);
                }});
        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-device/src/main/java/com/ruoyi/device/service/impl/DeviceScrappedServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,179 @@
package com.ruoyi.device.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.common.core.domain.Result;
import com.ruoyi.common.core.domain.entity.User;
import com.ruoyi.common.utils.QueryWrappers;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.device.dto.DeviceScrappedDto;
import com.ruoyi.device.mapper.DeviceMapper;
import com.ruoyi.device.mapper.DeviceScrappedMapper;
import com.ruoyi.device.pojo.Device;
import com.ruoyi.device.pojo.DeviceScrapped;
import com.ruoyi.device.service.DeviceScrappedService;
import com.ruoyi.inspect.util.UserUtils;
import com.ruoyi.system.mapper.UserMapper;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.time.LocalDate;
import java.util.HashMap;
/**
 * <p>
 * è®¾å¤‡æŠ¥åºŸç”³è¯·è¡¨ æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-12-17 01:53:47
 */
@Service
public class DeviceScrappedServiceImpl extends ServiceImpl<DeviceScrappedMapper, DeviceScrapped> implements DeviceScrappedService {
    @Resource
    private DeviceMapper deivceMapper;
    @Resource
    private UserMapper userMapper;
    /**
     * è®¾å¤‡æŠ¥åºŸç”³è¯·åˆ—表
     *
     * @param deviceScrapped
     * @return
     */
    @Override
    public IPage<DeviceScrapped> pageDeviceScrapped(Page page, DeviceScrapped deviceScrapped) {
        return baseMapper.pageDeviceScrapped(page, QueryWrappers.queryWrappers(deviceScrapped));
    }
    /**
     * æ–°å¢žè®¾å¤‡æŠ¥åºŸç”³è¯·
     *
     * @return
     */
    @Override
    public boolean addDeviceScrapped(DeviceScrapped deviceScrapped) {
        DeviceScrapped scrapped = new DeviceScrapped();
        // å½“前登录用户信息和部门
        User user = userMapper.selectById(SecurityUtils.getUserId().intValue());
        switch (deviceScrapped.getFlowType()) {
            case 0:
                BeanUtils.copyProperties(deviceScrapped, scrapped);
                // ç”³è¯·
                scrapped.setReasonsForScrap(deviceScrapped.getReasonsForScrap());
                scrapped.setApplicantUserId(user.getId());
                scrapped.setApplicantUser(user.getName());
                scrapped.setApplicantDate(LocalDate.now());
                // å¤„理人信息
                User departmentHeadUser = userMapper.selectById(deviceScrapped.getDepartmentHeadUserId());
                scrapped.setApplicantUserId(departmentHeadUser.getId());
                scrapped.setApplicantUser(departmentHeadUser.getName());
                baseMapper.insert(scrapped);
                break;
            case 1:
                scrapped.setScrappedId(deviceScrapped.getScrappedId());
                // ç”³è¯·éƒ¨é—¨è´Ÿè´£äººæ„è§
                scrapped.setDepartmentHeadOpinion(deviceScrapped.getDepartmentHeadOpinion());
                scrapped.setDepartmentHeadDate(LocalDate.now());
                // è®¡é‡å®¤ä¿¡æ¯
                User meteringRoomUser = userMapper.selectById(deviceScrapped.getMeteringRoomUserId());
                scrapped.setMeteringRoomUserId(meteringRoomUser.getId());
                scrapped.setMeteringRoomUser(meteringRoomUser.getName());
                baseMapper.updateById(scrapped);
                break;
            case 2:
                scrapped.setScrappedId(deviceScrapped.getScrappedId());
                // è®¡é‡å®¤æ„è§
                scrapped.setMeteringRoomOpinion(deviceScrapped.getMeteringRoomOpinion());
                scrapped.setMeteringRoomDate(LocalDate.now());
                // æ‰¹å‡†äººä¿¡æ¯
                User approverUser = userMapper.selectById(deviceScrapped.getApproverUserId());
                scrapped.setApproverUserId(approverUser.getId());
                scrapped.setApproverUser(approverUser.getName());
                baseMapper.updateById(scrapped);
                break;
            case 3:
                scrapped.setScrappedId(deviceScrapped.getScrappedId());
                //批准人
                scrapped.setApproverOpinion(deviceScrapped.getApproverOpinion());
                scrapped.setApproverDate(LocalDate.now());
                scrapped.setIsFinish(1);
                baseMapper.updateById(scrapped);
                break;
        }
        return true;
    }
    /**
     * å¯¼å‡ºè®¾å¤‡æŠ¥åºŸç”³è¯·
     *
     * @param scrappedId è®¾å¤‡æŠ¥åºŸç”³è¯·id
     * @param response   å“åº”
     * @return ç»“æžœ
     */
    @Override
    public Result<?> exportDeviceScrapped(Integer scrappedId, HttpServletResponse response) {
        // æŸ¥è¯¢æŠ¥åºŸæ•°æ®
        DeviceScrappedDto deviceScrapped = baseMapper.selectDeviceScrappedById(scrappedId);
        if (deviceScrapped == null) {
            return Result.fail("设备报废申请不存在");
        }
        Device device = null;
        if (deviceScrapped.getDeviceId() != null) {
            device = deivceMapper.selectById(deviceScrapped.getDeviceId());
            device = device == null ? new Device() : device;
        }
        // èŽ·å–è·¯å¾„
        InputStream inputStream = this.getClass().getResourceAsStream("/static/word/device-scrapped.docx");
        Configure configure = Configure.builder()
                .build();
        Device finalDevice = device;
        XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
                new HashMap<String, Object>() {{
                    put("deviceScrapped", deviceScrapped);
                    put("device", finalDevice);
                    // ç”³è¯·äººç­¾å
                    put("applicantUrl", UserUtils.getFinalUserSignatureUrl(deviceScrapped.getApplicantUserId()));
                    // éƒ¨é—¨è´Ÿè´£äººç­¾å
                    put("headUrl", UserUtils.getFinalUserSignatureUrl(deviceScrapped.getDepartmentHeadUserId()));
                    // è®¡é‡å®¤ç­¾å
                    put("metrologyRoomUrl", UserUtils.getFinalUserSignatureUrl(deviceScrapped.getMeteringRoomUserId()));
                    // æ‰¹å‡†äººç­¾å
                    put("approverUrl", UserUtils.getFinalUserSignatureUrl(deviceScrapped.getApproverUserId()));
                }});
        try {
            response.setContentType("application/msword");
            String deviceName = device.getDeviceName() == null ? "" : device.getDeviceName();
            String fileName = URLEncoder.encode(
                    deviceName + "设备报废申请", "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("导出失败");
        }
        return Result.success();
    }
}
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceStateServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,159 @@
package com.ruoyi.device.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
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.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.deepoove.poi.data.Pictures;
import com.ruoyi.basic.mapper.LaboratoryMapper;
import com.ruoyi.basic.pojo.Laboratory;
import com.ruoyi.common.core.domain.entity.User;
import com.ruoyi.device.dto.DeviceStateDto;
import com.ruoyi.device.mapper.DeviceStateMapper;
import com.ruoyi.device.pojo.DeviceState;
import com.ruoyi.device.service.DeviceStateService;
import com.ruoyi.framework.exception.ErrorException;
import com.ruoyi.system.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
/**
 * <p>
 * è®¾å¤‡åœç”¨/启用 æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-09-26 09:51:40
 */
@Service
public class DeviceStateServiceImpl extends ServiceImpl<DeviceStateMapper, DeviceState> implements DeviceStateService {
    @Resource
    private LaboratoryMapper laboratoryMapper;
    @Resource
    private UserMapper userMapper;
    @Value("${file.path}")
    private String imgUrl;
    @Override
    public IPage<DeviceStateDto> getDeviceStatePage(Integer deviceId, Page page, String processNumber) {
        return baseMapper.getDeviceStatePage(deviceId, page, processNumber);
    }
    @Override
    public void exportDeviceStatus(Integer deviceId, String processNumber, HttpServletResponse response) {
        // æ ¹æ®æµç¨‹ç¼–号 æŸ¥è¯¢cnas设备状态
        DeviceStateDto deviceStateDto = baseMapper.getDeviceStatePage(deviceId,new Page<DeviceStateDto>(1,1), processNumber).getRecords().get(0);
        // å¯¹æ—¶é—´è¿›è¡Œä¿®æ”¹
        DateTimeFormatter format = DateTimeFormatter.ofPattern("yyyyå¹´MM月dd日");
        deviceStateDto.setSubmitDateString(deviceStateDto.getSubmitDate() != null ? deviceStateDto.getSubmitDate().format(format) : "  å¹´ æœˆ æ—¥");
        deviceStateDto.setDepartmentDateString(deviceStateDto.getDepartmentDate() != null? deviceStateDto.getDepartmentDate().format(format) : "  å¹´ æœˆ æ—¥");
        deviceStateDto.setMeasuringRoomDateString(deviceStateDto.getMeasuringRoomDate() != null? deviceStateDto.getMeasuringRoomDate().format(format) : "  å¹´ æœˆ æ—¥");
        deviceStateDto.setApprovalDateString(deviceStateDto.getApprovalDate() != null? deviceStateDto.getApprovalDate().format(format) : "  å¹´ æœˆ æ—¥");
        // æŸ¥è¯¢è®¾å¤‡å±žäºŽå“ªä¸ªå®žéªŒå®¤
        String laboratoryName;
        String largeCategory = deviceStateDto.getLargeCategory();
        if (StringUtils.isNotBlank(largeCategory)) {
            largeCategory = largeCategory.substring(0, 1);
            Laboratory laboratory = laboratoryMapper.selectOne(Wrappers.<Laboratory>lambdaQuery()
                    .eq(Laboratory::getLaboratoryNumber, largeCategory)
                    .select(Laboratory::getLaboratoryName));
            laboratoryName = laboratory.getLaboratoryName();
        } else {
            laboratoryName = "";
        }
        //todo: è®¾å¤‡çŠ¶æ€æŸ¥è¯¢ç­¾ååœ°å€ æš‚时人名查询
        //获取申请人的签名地址
        String applicantUrl = null;
        if (deviceStateDto.getSubmitOperatingPersonnel() != null) {
            applicantUrl = userMapper.selectOne(Wrappers.<User>lambdaQuery()
                            .eq(User::getName, deviceStateDto.getSubmitOperatingPersonnel()))
                    .getSignatureUrl();
            if (StringUtils.isBlank(applicantUrl)) {
                throw new ErrorException("找不到申请人的签名");
            }
        }
        //获取部门负责人的签名地址
        String headOfDepartmentUrl = null;
        if (deviceStateDto.getDepartmentNextPesponsible() != null) {
            headOfDepartmentUrl = userMapper.selectOne(Wrappers.<User>lambdaQuery()
                    .eq(User::getName, deviceStateDto.getDepartmentNextPesponsible()))
                    .getSignatureUrl();
            if (StringUtils.isBlank(headOfDepartmentUrl)) {
                throw new ErrorException("找不到部门负责人的签名");
            }
        }
        //获取计量室复测人的签名地址
        String measurementRoomUrl = null;
        if (deviceStateDto.getMeasuringRoomNextPesponsible() != null) {
            measurementRoomUrl = userMapper.selectOne(Wrappers.<User>lambdaQuery()
                            .eq(User::getName, deviceStateDto.getMeasuringRoomNextPesponsible()))
                    .getSignatureUrl();
            if (StringUtils.isBlank(measurementRoomUrl)) {
                throw new ErrorException("找不到计量室复测人的签名");
            }
        }
        //获取批准人的签名地址
        String approvedUrl = null;
        if (deviceStateDto.getApprovalNextPesponsible() != null) {
            approvedUrl = userMapper.selectOne(Wrappers.<User>lambdaQuery()
                            .eq(User::getName, deviceStateDto.getApprovalNextPesponsible()))
                    .getSignatureUrl();
            if (StringUtils.isBlank(approvedUrl)) {
                throw new ErrorException("找不到批准人的签名");
            }
        }
        // èŽ·å–è·¯å¾„
        InputStream inputStream = this.getClass().getResourceAsStream("/static/word/device-status.docx");
        Configure configure = Configure.builder()
                .build();
        String finalApplicantUrl = applicantUrl; // ç”³è¯·äººçš„签名地址
        String finalHeadOfDepartmentUrl = headOfDepartmentUrl; // éƒ¨é—¨è´Ÿè´£äººçš„签名地址
        String finalMeasurementRoomUrl = measurementRoomUrl; // è®¡é‡å®¤å¤æµ‹äººçš„签名地址
        String finalApprovedUrl = approvedUrl; // æ‰¹å‡†äººçš„签名地址
        XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
                new HashMap<String, Object>() {{
                    put("deviceStateDto", deviceStateDto);
                    put("submitOperatingPersonnelUrl", StringUtils.isNotBlank(finalApplicantUrl) ? Pictures.ofLocal(imgUrl + "/" + finalApplicantUrl).create() : null);
                    put("departmentNextPesponsibleUrl", StringUtils.isNotBlank(finalHeadOfDepartmentUrl) ? Pictures.ofLocal(imgUrl + "/" + finalHeadOfDepartmentUrl).create() : null);
                    put("measuringRoomNextPesponsibleUrl", StringUtils.isNotBlank(finalMeasurementRoomUrl) ? Pictures.ofLocal(imgUrl + "/" + finalMeasurementRoomUrl).create() : null);
                    put("approvalNextPesponsibleUrl", StringUtils.isNotBlank(finalApprovedUrl) ? Pictures.ofLocal(imgUrl + "/" + finalApprovedUrl).create() : null);
                    put("laboratory", laboratoryName);
                }});
        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-device/src/main/resources/mapper/DeviceBorrowMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.device.mapper.DeviceBorrowMapper">
    <select id="deviceBorrowPage" resultType="com.ruoyi.device.pojo.DeviceBorrow">
        select * from (
        select db.*,device_name
        from device_borrow db
        left join `center-lims`.device on db.device_id=device.id
        )a
        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
            ${ew.customSqlSegment}
        </if>
    </select>
    <select id="getDeviceBorrowBydeviceId" resultType="com.ruoyi.device.pojo.DeviceBorrow">
        select db.*,device_name
        from device_borrow db
                 left join `center-lims`.device on db.device_id=device.id
        where device_id=#{deviceId}
    </select>
</mapper>
cnas-device/src/main/resources/mapper/DeviceScrappedMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.device.mapper.DeviceScrappedMapper">
    <!-- è®¾å¤‡æŠ¥åºŸç”³è¯·åˆ—表 -->
    <select id="pageDeviceScrapped" resultType="com.ruoyi.device.pojo.DeviceScrapped">
        select * from (
        select *
        from device_scrapped
        order by create_time desc
        ) a
        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
            ${ew.customSqlSegment}
        </if>
    </select>
    <select id="selectDeviceScrappedById" resultType="com.ruoyi.device.dto.DeviceScrappedDto">
        select
            *,
            date_format(applicant_date,'%Yå¹´%m月%d日') as applicantDateStr,
            date_format(department_head_date,'%Yå¹´%m月%d日') as departmentHeadDateStr,
            date_format(metering_room_date,'%Yå¹´%m月%d日') as meteringRoomDateStr,
            date_format(approver_date,'%Yå¹´%m月%d日') as approverDateStr
        from device_scrapped
        where scrapped_id = #{scrappedId}
    </select>
</mapper>
cnas-device/src/main/resources/mapper/DeviceStateMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.device.mapper.DeviceStateMapper">
    <select id="getDeviceStatePage" resultType="com.ruoyi.device.dto.DeviceStateDto">
        select ds.*,
               d.device_name,
               d.management_number,
               d.specification_model,
               d.large_category
        from device_state ds
                 left join device d on d.id = ds.device_id
        where ds.device_id = #{deviceId}
        <if test="processNumber != '' and processNumber != null">
            and ds.process_number like concat('%', #{processNumber}, '%')
        </if>
    </select>
</mapper>
cnas-device/src/main/resources/static/word/acceptance-certificate.docx
Binary files differ
cnas-device/src/main/resources/static/word/device-accident-report.docx
Binary files differ
cnas-device/src/main/resources/static/word/device-breakdown-maintenance.docx
Binary files differ
cnas-device/src/main/resources/static/word/device-calibration-plan.docx
Binary files differ
cnas-device/src/main/resources/static/word/device-document.docx
Binary files differ
cnas-device/src/main/resources/static/word/device-external-apply.docx
Binary files differ
cnas-device/src/main/resources/static/word/device-inspection-record.docx
Binary files differ
cnas-device/src/main/resources/static/word/device-scrapped.docx
Binary files differ
cnas-device/src/main/resources/static/word/device-status.docx
Binary files differ
cnas-device/src/main/resources/static/word/examine-plan-detail.docx
Binary files differ
cnas-device/src/main/resources/static/word/examine-record.docx
Binary files differ
cnas-device/src/main/resources/static/word/incident-report.docx
Binary files differ
cnas-device/src/main/resources/static/word/maintenance-plan.docx
Binary files differ
cnas-device/src/main/resources/static/word/maintenance-records.docx
Binary files differ
cnas-device/src/main/resources/static/word/quipment-details.docx
Binary files differ
cnas-device/src/main/resources/static/word/review-examine-record-contrast.docx
Binary files differ
cnas-device/src/main/resources/static/word/traceability-management-details.docx
Binary files differ
cnas-device/src/main/resources/static/word/use-record.docx
Binary files differ