zhuo
2025-02-22 13c00d34e03f8c45d7b17a42bee5cff8f54c2b9c
添加设备验收校准
已添加20个文件
1015 ■■■■■ 文件已修改
cnas-device/src/main/java/com/ruoyi/device/controller/DeviceAcceptanceController.java 133 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/controller/DeviceMetricRecordController.java 89 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/dto/DeviceMetricRecordDto.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceAcceptanceFileMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceAcceptanceMapper.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceMetricsCopyMapper.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceAcceptance.java 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceAcceptanceFile.java 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceMetricsCopy.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/service/DeviceAcceptanceFileService.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/service/DeviceAcceptanceService.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/service/DeviceMetricRecordService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/service/DeviceMetricsCopyService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceAcceptanceFileServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceAcceptanceServiceImpl.java 159 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceMetricRecordServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceMetricsCopyServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/resources/mapper/DeviceAcceptanceMapper.xml 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/utils/FileSaveUtil.java 179 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/src/main/java/com/ruoyi/common/utils/MyUtil.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
cnas-device/src/main/java/com/ruoyi/device/controller/DeviceAcceptanceController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,133 @@
package com.ruoyi.device.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.device.pojo.DeviceAcceptance;
import com.ruoyi.device.pojo.DeviceAcceptanceFile;
import com.ruoyi.device.service.DeviceAcceptanceFileService;
import com.ruoyi.device.service.DeviceAcceptanceService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
/**
 * <p>
 * è®¾å¤‡éªŒæ”¶(装备) å‰ç«¯æŽ§åˆ¶å™¨
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-12-20 01:45:14
 */
@Api(tags = "设备验收(装备)")
@AllArgsConstructor
@RestController
@RequestMapping("/deviceAcceptance")
public class DeviceAcceptanceController {
    private DeviceAcceptanceService deviceAcceptanceService;
    private DeviceAcceptanceFileService deviceAcceptanceFileService;
    /**
     * è®¾å¤‡éªŒæ”¶åˆ—表
     * @return
     */
    @ApiOperation(value = "设备验收列表")
    @GetMapping("/pageDeviceAcceptance")
    public Result<IPage<DeviceAcceptance>> pageDeviceAcceptance(Page page, DeviceAcceptance deviceAcceptance) {
        return Result.success(deviceAcceptanceService.pageDeviceAcceptance(page, deviceAcceptance));
    }
    /**
     * æŸ¥è¯¢è®¾å¤‡éªŒæ”¶
     * @return
     */
    @ApiOperation(value = "查询设备验收")
    @GetMapping("/getDeviceAcceptance")
    public Result getDeviceAcceptance(Integer acceptanceId){
        return Result.success(deviceAcceptanceService.getById(acceptanceId));
    }
    /**
     * åˆ é™¤è®¾å¤‡éªŒæ”¶
     * @return
     */
    @ApiOperation(value = "删除设备验收")
    @GetMapping("/delDeviceAcceptance")
    public Result delDeviceAcceptance(Integer acceptanceId){
        return Result.success(deviceAcceptanceService.removeById(acceptanceId));
    }
    /**
     * æ–°å¢žè®¾å¤‡éªŒæ”¶
     * @return
     */
    @ApiOperation(value = "新增设备验收")
    @PostMapping("/addDeviceAcceptance")
    public Result addDeviceAcceptance(@RequestBody DeviceAcceptance deviceAcceptance){
        return Result.success(deviceAcceptanceService.save(deviceAcceptance));
    }
    /**
     * æ–°å¢žè®¾å¤‡éªŒæ”¶
     * @return
     */
    @ApiOperation(value = "编辑设备验收")
    @PostMapping("/updateDeviceAcceptance")
    public Result updateDeviceAcceptance(@RequestBody DeviceAcceptance deviceAcceptance){
        return Result.success(deviceAcceptanceService.updateById(deviceAcceptance));
    }
    /**
     * è®¾å¤‡éªŒæ”¶å¯¼å‡º
     * @param acceptanceId  è®¾å¤‡éªŒæ”¶id
     * @param response   å“åº”体
     * @return
     */
    @ApiOperation(value = "设备验收导出")
    @GetMapping("/exportDeviceAcceptance")
    public void exportDeviceAcceptance(Integer acceptanceId, HttpServletResponse response){
        deviceAcceptanceService.exportDeviceAcceptance(acceptanceId, response);
    }
    /**
     * è®¾å¤‡éªŒæ”¶é™„件新增
     * @param acceptanceId
     * @param file
     * @return
     */
    @ApiOperation(value = "设备验收附件新增")
    @PostMapping("/uploadDeviceAcceptanceFile")
    public Result<?> uploadDeviceAcceptanceFile(Integer acceptanceId, MultipartFile file) {
        return Result.success(deviceAcceptanceService.uploadDeviceAcceptanceFile(acceptanceId, file));
    }
    /**
     * è®¾å¤‡éªŒæ”¶é™„件列表
     * @return
     */
    @ApiOperation(value = "设备验收附件列表")
    @GetMapping("/getDeviceAcceptanceFileList")
    public Result<List<DeviceAcceptanceFile>> getVerifyMethodFileList(Integer acceptanceId){
        return Result.success(deviceAcceptanceFileService.list(Wrappers.<DeviceAcceptanceFile>lambdaQuery()
                .eq(DeviceAcceptanceFile::getAcceptanceId, acceptanceId)));
    }
    /**
     * è®¾å¤‡éªŒæ”¶é™„件删除
     * @return
     */
    @ApiOperation(value = "设备验收附件删除")
    @GetMapping("/delDeviceAcceptanceFileList")
    public Result delDeviceAcceptanceFileList(Integer acceptanceFileId){
        return Result.success(deviceAcceptanceFileService.removeById(acceptanceFileId));
    }
}
cnas-device/src/main/java/com/ruoyi/device/controller/DeviceMetricRecordController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,89 @@
package com.ruoyi.device.controller;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.common.core.domain.Result;
import com.ruoyi.common.numgen.NumberGenerator;
import com.ruoyi.common.utils.FileSaveUtil;
import com.ruoyi.device.dto.DeviceMetricRecordDto;
import com.ruoyi.device.pojo.DeviceMetricRecord;
import com.ruoyi.device.pojo.DeviceMetricsCopy;
import com.ruoyi.device.service.DeviceMetricRecordService;
import com.ruoyi.device.service.DeviceMetricsCopyService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
/**
 * <p>
 * è®¾å¤‡æ ¡å‡† - æ ¡å‡†è®°å½• å‰ç«¯æŽ§åˆ¶å™¨
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-09-27 10:20:01
 */
@Api(tags = "设备 - è®¾å¤‡æ ¡å‡†")
@RestController
@RequestMapping("/deviceMetricRecord")
public class DeviceMetricRecordController {
    @Autowired
    private DeviceMetricRecordService deviceMetricRecordService;
    @Autowired
    private DeviceMetricsCopyService deviceMetricsCopyService;
    @Autowired
    private NumberGenerator<DeviceMetricRecord> numberGenerator;
    @ApiOperation("设备校准分页查询")
    @GetMapping("/deviceMetricRecordPage")
    public Result deviceMetricRecordPage(@RequestParam("deviceId") Integer deviceId, Page page, @RequestParam("type") String type) {
        return Result.success(deviceMetricRecordService.page(page, Wrappers.<DeviceMetricRecord>lambdaQuery()
                .eq(DeviceMetricRecord::getDeviceId, deviceId)
                .eq(DeviceMetricRecord::getType, type)));
    }
    @ApiOperation("设备校准 æ–°å¢ž æ›´æ–°")
    @PostMapping("/addOrUpdateDeviceMetricRecord")
    public Result addOrUpdateDeviceMetricRecord(@RequestBody DeviceMetricRecordDto deviceMetricRecordDto) {
        if (ObjectUtils.isEmpty(deviceMetricRecordDto.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(5, "SBJZ" + year + month, DeviceMetricRecord::getProcessNumber);
            deviceMetricRecordDto.setProcessNumber(processNumber);
        }
        deviceMetricRecordService.saveOrUpdate(deviceMetricRecordDto);
        if (CollectionUtils.isNotEmpty(deviceMetricRecordDto.getDeviceMetricsCopyList())) {
            deviceMetricRecordDto.getDeviceMetricsCopyList().forEach(i -> i.setDeviceMetricsId(deviceMetricRecordDto.getId()));
            deviceMetricsCopyService.saveOrUpdateBatch(deviceMetricRecordDto.getDeviceMetricsCopyList());
        }
        return Result.success();
    }
    @ApiOperation("设备校准 åˆ é™¤")
    @DeleteMapping("/deleteDeviceMetricRecord")
    public Result deleteDeviceMetricRecord(@RequestParam("id") Integer id) {
        DeviceMetricRecord deviceMetricRecord = deviceMetricRecordService.getById(id);
        deviceMetricsCopyService.remove(Wrappers.<DeviceMetricsCopy>lambdaQuery()
                .eq(DeviceMetricsCopy::getDeviceMetricsId, id));
        // åˆ é™¤æ–‡ä»¶
        FileSaveUtil.DeleteFile(deviceMetricRecord.getSystemFileName());
        return Result.success(deviceMetricRecordService.removeById(id));
    }
    @ApiOperation("设备校准 æ ¡å‡†æ¡ç›®æŸ¥è¯¢")
    @GetMapping("/showDeviceMetricsCopy")
    public Result showDeviceMetricsCopy(@RequestParam("id") Integer id, @RequestParam("type") String type) {
        return Result.success(deviceMetricsCopyService.list(Wrappers.<DeviceMetricsCopy>lambdaQuery()
                .eq(DeviceMetricsCopy::getDeviceMetricsId, id)
                .eq(DeviceMetricsCopy::getType, type)));
    }
}
cnas-device/src/main/java/com/ruoyi/device/dto/DeviceMetricRecordDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,13 @@
package com.ruoyi.device.dto;
import com.ruoyi.device.pojo.DeviceMetricRecord;
import com.ruoyi.device.pojo.DeviceMetricsCopy;
import lombok.Data;
import java.util.List;
@Data
public class DeviceMetricRecordDto extends DeviceMetricRecord {
    private List<DeviceMetricsCopy> deviceMetricsCopyList;
}
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceAcceptanceFileMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package com.ruoyi.device.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.device.pojo.DeviceAcceptanceFile;
/**
 * <p>
 * è®¾å¤‡éªŒæ”¶(装备)附件表 Mapper æŽ¥å£
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-12-20 01:45:26
 */
public interface DeviceAcceptanceFileMapper extends BaseMapper<DeviceAcceptanceFile> {
}
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceAcceptanceMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,27 @@
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.DeviceAcceptance;
import org.apache.ibatis.annotations.Param;
/**
 * <p>
 * è®¾å¤‡éªŒæ”¶(装备) Mapper æŽ¥å£
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-12-20 01:45:14
 */
public interface DeviceAcceptanceMapper extends BaseMapper<DeviceAcceptance> {
    /**
     * è®¾å¤‡éªŒæ”¶åˆ—表
     * @param page
     * @param ew
     * @return
     */
    IPage<DeviceAcceptance> pageDeviceAcceptance(Page page, @Param("ew") QueryWrapper<DeviceAcceptance> ew);
}
cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceMetricsCopyMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package com.ruoyi.device.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.device.pojo.DeviceMetricsCopy;
/**
 * <p>
 * è®¾å¤‡æ ¡å‡† - æ ¡å‡†è®°å½• - æ ¡å‡†æ¡ç›® Mapper æŽ¥å£
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-09-27 10:20:11
 */
public interface DeviceMetricsCopyMapper extends BaseMapper<DeviceMetricsCopy> {
}
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceAcceptance.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,77 @@
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-20 01:45:14
 */
@Getter
@Setter
@TableName("device_acceptance")
@ApiModel(value = "DeviceAcceptance对象", description = "设备验收(装备)")
public class DeviceAcceptance {
    @TableId(value = "acceptance_id", type = IdType.AUTO)
    private Integer acceptanceId;
    @ApiModelProperty("设备id")
    private Integer deviceId;
    @ApiModelProperty("到货日期")
    private LocalDate arrivalDate;
    @ApiModelProperty("金额")
    private String goldAmount;
    @ApiModelProperty("维修单位")
    private String maintenanceunit;
    @ApiModelProperty("收设备主机和备份情况")
    private String spareParts;
    @ApiModelProperty("安装和调试情况")
    private String installationDebugging;
    @ApiModelProperty("验收情况")
    private String checkSituation;
    @ApiModelProperty("接收签字")
    private String receivingSignature;
    @ApiModelProperty("厂家代表")
    private String producer;
    @ApiModelProperty("接收人")
    private String recipient;
    @ApiModelProperty("接收时间")
    private String recipientDate;
    @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;
}
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceAcceptanceFile.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,58 @@
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.io.Serializable;
import java.time.LocalDateTime;
/**
 * <p>
 * è®¾å¤‡éªŒæ”¶(装备)附件表
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-12-20 01:45:26
 */
@Getter
@Setter
@TableName("device_acceptance_file")
@ApiModel(value = "DeviceAcceptanceFile对象", description = "设备验收(装备)附件表")
public class DeviceAcceptanceFile implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId(value = "acceptance_file_id", type = IdType.AUTO)
    private Integer acceptanceFileId;
    @ApiModelProperty("设备验收id")
    private Integer acceptanceId;
    @ApiModelProperty("类型:1图片/2文件")
    private Integer type;
    @ApiModelProperty("附件路径")
    private String fileUrl;
    @ApiModelProperty("附件名称")
    private String fileName;
    @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;
}
cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceMetricsCopy.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,66 @@
package com.ruoyi.device.pojo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
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-27 10:20:11
 */
@Getter
@Setter
@TableName("device_metrics_copy")
@ApiModel(value = "DeviceMetricsCopy对象", description = "设备校准 - æ ¡å‡†è®°å½• - æ ¡å‡†æ¡ç›®")
public class DeviceMetricsCopy implements Serializable {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty("id")
    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    @ApiModelProperty("设备校准 - æ ¡å‡†è®°å½•id")
    private Integer deviceMetricsId;
    @ApiModelProperty("计量参数")
    private String measurementParameter;
    @ApiModelProperty("量程范围")
    private String rangeOfMeasurement;
    @ApiModelProperty("最大允许误差")
    private String maxPermissibleError;
    @ApiModelProperty("判定标准")
    private String judgmentCriteria;
    @ApiModelProperty("创建人")
    private String createdBy;
    @ApiModelProperty("创建时间")
    private LocalDateTime creationTime;
    @ApiModelProperty("是否校准")
    private String isCalibration;
    @ApiModelProperty("判定结果")
    private String result;
    @ApiModelProperty("单项结果说明")
    private String singleResultStatement;
    @ApiModelProperty("calibrate:校准;examine:核查")
    private String type;
}
cnas-device/src/main/java/com/ruoyi/device/service/DeviceAcceptanceFileService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
package com.ruoyi.device.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.device.pojo.DeviceAcceptanceFile;
/**
 * <p>
 * è®¾å¤‡éªŒæ”¶(装备)附件表 æœåŠ¡ç±»
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-12-20 01:45:26
 */
public interface DeviceAcceptanceFileService extends IService<DeviceAcceptanceFile> {
}
cnas-device/src/main/java/com/ruoyi/device/service/DeviceAcceptanceService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,39 @@
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.DeviceAcceptance;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
/**
 * <p>
 * è®¾å¤‡éªŒæ”¶(装备) æœåŠ¡ç±»
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-12-20 01:45:14
 */
public interface DeviceAcceptanceService extends IService<DeviceAcceptance> {
    /**
     * è®¾å¤‡éªŒæ”¶åˆ—表
     * @param page
     * @param deviceAcceptance
     * @return
     */
    IPage<DeviceAcceptance> pageDeviceAcceptance(Page page, DeviceAcceptance deviceAcceptance);
    boolean uploadDeviceAcceptanceFile(Integer acceptanceId, MultipartFile file);
    /**
     * è®¾å¤‡éªŒæ”¶å¯¼å‡º
     * @param acceptanceId  è®¾å¤‡éªŒæ”¶id
     * @param response   å“åº”体
     * @return
     */
    void exportDeviceAcceptance(Integer acceptanceId, HttpServletResponse response);
}
cnas-device/src/main/java/com/ruoyi/device/service/DeviceMetricRecordService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package com.ruoyi.device.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.device.pojo.DeviceMetricRecord;
/**
 * <p>
 * è®¾å¤‡æ ¡å‡† - æ ¡å‡†è®°å½• æœåŠ¡ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-09-27 10:20:01
 */
public interface DeviceMetricRecordService extends IService<DeviceMetricRecord> {
}
cnas-device/src/main/java/com/ruoyi/device/service/DeviceMetricsCopyService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,16 @@
package com.ruoyi.device.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.device.pojo.DeviceMetricsCopy;
/**
 * <p>
 * è®¾å¤‡æ ¡å‡† - æ ¡å‡†è®°å½• - æ ¡å‡†æ¡ç›® æœåŠ¡ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-09-27 10:20:11
 */
public interface DeviceMetricsCopyService extends IService<DeviceMetricsCopy> {
}
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceAcceptanceFileServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.ruoyi.device.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.device.mapper.DeviceAcceptanceFileMapper;
import com.ruoyi.device.pojo.DeviceAcceptanceFile;
import com.ruoyi.device.service.DeviceAcceptanceFileService;
import org.springframework.stereotype.Service;
/**
 * <p>
 * è®¾å¤‡éªŒæ”¶(装备)附件表 æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-12-20 01:45:26
 */
@Service
public class DeviceAcceptanceFileServiceImpl extends ServiceImpl<DeviceAcceptanceFileMapper, DeviceAcceptanceFile> implements DeviceAcceptanceFileService {
}
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceAcceptanceServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,159 @@
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.utils.QueryWrappers;
import com.ruoyi.device.mapper.DeviceAcceptanceFileMapper;
import com.ruoyi.device.mapper.DeviceAcceptanceMapper;
import com.ruoyi.device.mapper.DeviceMapper;
import com.ruoyi.device.pojo.Device;
import com.ruoyi.device.pojo.DeviceAcceptance;
import com.ruoyi.device.pojo.DeviceAcceptanceFile;
import com.ruoyi.device.service.DeviceAcceptanceService;
import com.ruoyi.framework.exception.ErrorException;
import com.ruoyi.inspect.util.HackLoopTableRenderPolicy;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
/**
 * <p>
 * è®¾å¤‡éªŒæ”¶(装备) æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author æ±Ÿè‹éµ·é›ç½‘络科技有限公司
 * @since 2024-12-20 01:45:14
 */
@Service
public class DeviceAcceptanceServiceImpl extends ServiceImpl<DeviceAcceptanceMapper, DeviceAcceptance> implements DeviceAcceptanceService {
    @Resource
    private DeviceAcceptanceFileMapper deviceAcceptanceFileMapper;
    @Resource
    private DeviceMapper deviceMapper;
    @Value("${file.path}")
    private String imgUrl;
    @Value("${wordUrl}")
    private String wordUrl;
    /**
     * è®¾å¤‡éªŒæ”¶åˆ—表
     * @param page
     * @param deviceAcceptance
     * @return
     */
    @Override
    public IPage<DeviceAcceptance> pageDeviceAcceptance(Page page, DeviceAcceptance deviceAcceptance) {
        return baseMapper.pageDeviceAcceptance(page, QueryWrappers.queryWrappers(deviceAcceptance));
    }
    /**
     * è®¾å¤‡éªŒæ”¶é™„ä»¶
     * @param acceptanceId
     * @param file
     * @return
     */
    @Override
    public boolean uploadDeviceAcceptanceFile(Integer acceptanceId, MultipartFile file) {
        if (acceptanceId == null) {
            throw new ErrorException("缺少验收id");
        }
        String urlString;
        String pathName;
        String path;
        String filename = file.getOriginalFilename();
        String contentType = file.getContentType();
        DeviceAcceptanceFile acceptanceFile = new DeviceAcceptanceFile();
        acceptanceFile.setAcceptanceId(acceptanceId);
        acceptanceFile.setFileName(filename);
        if (contentType != null && contentType.startsWith("image/")) {
            // æ˜¯å›¾ç‰‡
            path = imgUrl;
            acceptanceFile.setType(1);
        } else {
            // æ˜¯æ–‡ä»¶
            path = wordUrl;
            acceptanceFile.setType(2);
        }
        try {
            File realpath = new File(path);
            if (!realpath.exists()) {
                realpath.mkdirs();
            }
            pathName = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyMMddHHmmss")) + "_" + file.getOriginalFilename();
            urlString = realpath + "/" + pathName;
            file.transferTo(new File(urlString));
            acceptanceFile.setFileUrl(pathName);
            deviceAcceptanceFileMapper.insert(acceptanceFile);
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            System.err.println("附件上传错误");
            return false;
        }
    }
    /**
     * è®¾å¤‡éªŒæ”¶å¯¼å‡º
     * @param acceptanceId  è®¾å¤‡éªŒæ”¶id
     * @param response   å“åº”体
     * @return
     */
    @Override
    public void exportDeviceAcceptance(Integer acceptanceId, HttpServletResponse response) {
        DeviceAcceptance deviceAcceptance = baseMapper.selectById(acceptanceId);
        if (deviceAcceptance == null) {
            throw new ErrorException("设备验收不存在");
        }
        Device device = null;
        if (deviceAcceptance.getDeviceId() != null) {
            device = deviceMapper.selectById(deviceAcceptance.getDeviceId());
        }
        // èŽ·å–è·¯å¾„
        InputStream inputStream = this.getClass().getResourceAsStream("/static/word/acceptance-certificate.docx");
        Configure configure = Configure.builder()
                .bind("deviceInspectionRecordDetailsList", new HackLoopTableRenderPolicy())
                .build();
        Device finalDevice = device;
        String deviceName = device.getDeviceName() == null ? "" : device.getDeviceName();
        XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
                new HashMap<String, Object>() {{
                    put("deviceAcceptance", deviceAcceptance);
                    put("device", finalDevice);
                }});
        try {
            response.setContentType("application/msword");
            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("导出失败");
        }
    }
}
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceMetricRecordServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.ruoyi.device.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.device.mapper.DeviceMetricRecordMapper;
import com.ruoyi.device.pojo.DeviceMetricRecord;
import com.ruoyi.device.service.DeviceMetricRecordService;
import org.springframework.stereotype.Service;
/**
 * <p>
 * è®¾å¤‡æ ¡å‡† - æ ¡å‡†è®°å½• æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-09-27 10:20:01
 */
@Service
public class DeviceMetricRecordServiceImpl extends ServiceImpl<DeviceMetricRecordMapper, DeviceMetricRecord> implements DeviceMetricRecordService {
}
cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceMetricsCopyServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.ruoyi.device.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.device.mapper.DeviceMetricsCopyMapper;
import com.ruoyi.device.pojo.DeviceMetricsCopy;
import com.ruoyi.device.service.DeviceMetricsCopyService;
import org.springframework.stereotype.Service;
/**
 * <p>
 * è®¾å¤‡æ ¡å‡† - æ ¡å‡†è®°å½• - æ ¡å‡†æ¡ç›® æœåŠ¡å®žçŽ°ç±»
 * </p>
 *
 * @author èŠ¯å¯¼è½¯ä»¶ï¼ˆæ±Ÿè‹ï¼‰æœ‰é™å…¬å¸
 * @since 2024-09-27 10:20:11
 */
@Service
public class DeviceMetricsCopyServiceImpl extends ServiceImpl<DeviceMetricsCopyMapper, DeviceMetricsCopy> implements DeviceMetricsCopyService {
}
cnas-device/src/main/resources/mapper/DeviceAcceptanceMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ruoyi.device.mapper.DeviceAcceptanceMapper">
    <!-- è®¾å¤‡éªŒæ”¶åˆ—表 -->
    <select id="pageDeviceAcceptance" resultType="com.ruoyi.device.pojo.DeviceAcceptance">
        select * from (
        select *
        from device_acceptance
        order by create_time desc
        ) a
        <if test="ew.customSqlSegment != null and ew.customSqlSegment != ''">
            ${ew.customSqlSegment}
        </if>
    </select>
</mapper>
ruoyi-common/src/main/java/com/ruoyi/common/utils/FileSaveUtil.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,179 @@
package com.ruoyi.common.utils;
import com.alibaba.excel.util.IoUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.util.FileSystemUtils;
import org.springframework.util.ObjectUtils;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.PostConstruct;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Random;
/**
 * ä¿å­˜æ–‡ä»¶å·¥å…·
 */
@Slf4j
@Component
public class FileSaveUtil {
    // å–yml中的路径 + /
    private static String FILE_PATH;
    private static String WORD_URL_PATH;
    private static String[] ALLOWED;
    @Value("${file.path}")
    private String file;
    @Value("${wordUrl}")
    private String wordUrl;
    @Value("${file.allowed}")
    private String[] allowed;
    @PostConstruct
    public void getFile() {
        FILE_PATH = this.file;
    }
    @PostConstruct
    public void getWordUrl(){
        WORD_URL_PATH = this.wordUrl;
    }
    @PostConstruct
    public void getAllowed(){
        ALLOWED = this.allowed;
    }
    /**
     * å­˜å‚¨æ–‡ä»¶ä¸»å‡½æ•°
     * @param file æ–‡ä»¶äºŒè¿›åˆ¶æµ
     * @return è¿”回文件名称用于存储数据库
     */
    public static String StoreFile(MultipartFile file) {
        String originalFilename = file.getOriginalFilename();
        // ç”Ÿæˆéšæœºåç§°ï¼šæ—¶é—´_随机6位数字
        String FileName = System.currentTimeMillis() + "_" + getNumber(6);
        String suffix = null;
        if (originalFilename != null) {
            suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
            // å¦‚果后缀名不通过抛出异常
            if (!isFileAllowed(suffix)){
                throw new RuntimeException(suffix);
            }
        }
        // åç§°æ‹¼æŽ¥
        String fileName = FileName + suffix;
        // è¿›è¡Œå­˜å‚¨
        try {
            storeFileWithFileName(file.getBytes(), fileName);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        return fileName;
    }
    public static Boolean DeleteFile(String fileName) {
        if (ObjectUtils.isEmpty(fileName)) {
            return false;
        }
        return FileSystemUtils.deleteRecursively(new File(FILE_PATH + "/" + fileName));
    }
    /**
     * å­˜å‚¨æ–‡ä»¶å‡½æ•°
     * @param content æ–‡ä»¶äºŒè¿›åˆ¶æµ
     * @param fileName æ–‡ä»¶åç§°
     */
    private static void storeFileWithFileName(byte[] content, String fileName) {
        // å­˜å‚¨è·¯å¾„
        String path = FILE_PATH + File.separatorChar;
        // ç›®å½•不存在则创建
        File file = new File(path);
        if (!file.exists()) {
            file.mkdirs();
        }
        // å¼€å§‹å­˜å‚¨
        try (FileOutputStream os = new FileOutputStream(path + fileName);
             ByteArrayInputStream is = new ByteArrayInputStream(content)) {
             IoUtils.copy(is, os);
        } catch (IOException e) {
            throw new RuntimeException("文件存储格式异常");
        }
    }
    /**
     * åˆ¤æ–­æ–‡ä»¶æ˜¯å¦è¢«å…è®¸ä¸Šä¼ 
     *
     * @param fileName æ–‡ä»¶å
     * @return å…è®¸true, å¦åˆ™false
     */
    private static boolean isFileAllowed(String fileName) {
        // èŽ·å–åŽç¼€å
        String suffixName = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();
        for (String allow : ALLOWED) {
            if (allow.equals(suffixName)) {
                return true;
            }
        }
        return false;
    }
    /**
     * ä¿å­˜æ–‡ä»¶åˆ°word文件夹里
     * @param file
     * @return
     */
    public static String uploadWordFile(MultipartFile file) {
        String urlString;
        String pathName;
        String path;
        try {
            String contentType = file.getContentType();
            if (contentType != null && contentType.startsWith("image/")) {
                // æ˜¯å›¾ç‰‡
                path = FILE_PATH;
            } else {
                // æ˜¯æ–‡ä»¶
                path = WORD_URL_PATH;
            }
            File realpath = new File(path);
            if (!realpath.exists()) {
                realpath.mkdirs();
            }
            pathName = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyMMddHHmmss")) + "-" + file.getOriginalFilename();
            urlString = realpath + "/" + pathName;
            file.transferTo(new File(urlString));
            return pathName;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
    /**
     * èŽ·å–éšæœºæ•°å­—
     * @param n ä½æ•°
     * @return è¿”回随机值
     */
    public static String getNumber(int n) {
        char[] chars = "1234567890".toCharArray();
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < n; i++) {
            char c = chars[new Random().nextInt(chars.length)];
            sb.append(c);
        }
        return sb.toString();
    }
}
ruoyi-common/src/main/java/com/ruoyi/common/utils/MyUtil.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,17 @@
package com.ruoyi.common.utils;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;
@Component
public class MyUtil<T> {
}