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