From 13c00d34e03f8c45d7b17a42bee5cff8f54c2b9c Mon Sep 17 00:00:00 2001 From: zhuo <2089219845@qq.com> Date: 星期六, 22 二月 2025 14:54:44 +0800 Subject: [PATCH] 添加设备验收校准 --- cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceAcceptanceFileMapper.java | 16 cnas-device/src/main/java/com/ruoyi/device/controller/DeviceAcceptanceController.java | 133 +++++++ cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceMetricsCopyMapper.java | 16 cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceAcceptance.java | 77 ++++ cnas-device/src/main/java/com/ruoyi/device/dto/DeviceMetricRecordDto.java | 13 cnas-device/src/main/java/com/ruoyi/device/controller/DeviceMetricRecordController.java | 89 +++++ cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceAcceptanceMapper.java | 27 + cnas-device/src/main/java/com/ruoyi/device/service/DeviceMetricRecordService.java | 16 cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceAcceptanceFile.java | 58 +++ cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceMetricsCopy.java | 66 +++ cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceAcceptanceFileServiceImpl.java | 20 + cnas-device/src/main/java/com/ruoyi/device/service/DeviceAcceptanceFileService.java | 17 + cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceMetricRecordServiceImpl.java | 20 + cnas-device/src/main/resources/mapper/DeviceAcceptanceMapper.xml | 17 + ruoyi-common/src/main/java/com/ruoyi/common/utils/FileSaveUtil.java | 179 ++++++++++ cnas-device/src/main/java/com/ruoyi/device/service/DeviceMetricsCopyService.java | 16 cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceAcceptanceServiceImpl.java | 159 +++++++++ ruoyi-common/src/main/java/com/ruoyi/common/utils/MyUtil.java | 17 + cnas-device/src/main/java/com/ruoyi/device/service/DeviceAcceptanceService.java | 39 ++ cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceMetricsCopyServiceImpl.java | 20 + 20 files changed, 1,015 insertions(+), 0 deletions(-) diff --git a/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceAcceptanceController.java b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceAcceptanceController.java new file mode 100644 index 0000000..27c15bf --- /dev/null +++ b/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)); + } +} diff --git a/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceMetricRecordController.java b/cnas-device/src/main/java/com/ruoyi/device/controller/DeviceMetricRecordController.java new file mode 100644 index 0000000..67ce760 --- /dev/null +++ b/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))); + } +} diff --git a/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceMetricRecordDto.java b/cnas-device/src/main/java/com/ruoyi/device/dto/DeviceMetricRecordDto.java new file mode 100644 index 0000000..bf0918c --- /dev/null +++ b/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; +} diff --git a/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceAcceptanceFileMapper.java b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceAcceptanceFileMapper.java new file mode 100644 index 0000000..e6eb335 --- /dev/null +++ b/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> { + +} diff --git a/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceAcceptanceMapper.java b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceAcceptanceMapper.java new file mode 100644 index 0000000..31bdb87 --- /dev/null +++ b/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); +} diff --git a/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceMetricsCopyMapper.java b/cnas-device/src/main/java/com/ruoyi/device/mapper/DeviceMetricsCopyMapper.java new file mode 100644 index 0000000..4c1824a --- /dev/null +++ b/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> { + +} diff --git a/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceAcceptance.java b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceAcceptance.java new file mode 100644 index 0000000..2c66be9 --- /dev/null +++ b/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("鍘傚浠h〃") + 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; +} diff --git a/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceAcceptanceFile.java b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceAcceptanceFile.java new file mode 100644 index 0000000..914f15e --- /dev/null +++ b/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; +} diff --git a/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceMetricsCopy.java b/cnas-device/src/main/java/com/ruoyi/device/pojo/DeviceMetricsCopy.java new file mode 100644 index 0000000..fb7d79b --- /dev/null +++ b/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; +} diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/DeviceAcceptanceFileService.java b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceAcceptanceFileService.java new file mode 100644 index 0000000..11218d1 --- /dev/null +++ b/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> { + + +} diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/DeviceAcceptanceService.java b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceAcceptanceService.java new file mode 100644 index 0000000..3446429 --- /dev/null +++ b/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); +} diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/DeviceMetricRecordService.java b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceMetricRecordService.java new file mode 100644 index 0000000..d55a281 --- /dev/null +++ b/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> { + +} diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/DeviceMetricsCopyService.java b/cnas-device/src/main/java/com/ruoyi/device/service/DeviceMetricsCopyService.java new file mode 100644 index 0000000..be7c8cc --- /dev/null +++ b/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> { + +} diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceAcceptanceFileServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceAcceptanceFileServiceImpl.java new file mode 100644 index 0000000..aa4577c --- /dev/null +++ b/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 { + +} diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceAcceptanceServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceAcceptanceServiceImpl.java new file mode 100644 index 0000000..911c0e5 --- /dev/null +++ b/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("瀵煎嚭澶辫触"); + } + } +} diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceMetricRecordServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceMetricRecordServiceImpl.java new file mode 100644 index 0000000..8ce075f --- /dev/null +++ b/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 { + +} diff --git a/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceMetricsCopyServiceImpl.java b/cnas-device/src/main/java/com/ruoyi/device/service/impl/DeviceMetricsCopyServiceImpl.java new file mode 100644 index 0000000..22d1535 --- /dev/null +++ b/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 { + +} diff --git a/cnas-device/src/main/resources/mapper/DeviceAcceptanceMapper.xml b/cnas-device/src/main/resources/mapper/DeviceAcceptanceMapper.xml new file mode 100644 index 0000000..45071c4 --- /dev/null +++ b/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> diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/FileSaveUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/FileSaveUtil.java new file mode 100644 index 0000000..da4ca5f --- /dev/null +++ b/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 { + + // 鍙杫ml涓殑璺緞 + / + 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; + } + + /** + * 淇濆瓨鏂囦欢鍒皐ord鏂囦欢澶归噷 + * @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(); + } +} diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/utils/MyUtil.java b/ruoyi-common/src/main/java/com/ruoyi/common/utils/MyUtil.java new file mode 100644 index 0000000..bbf9da3 --- /dev/null +++ b/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> { + + + + + +} -- Gitblit v1.9.3