From 5674646820b59acb143f514a7062e467476ce7cf Mon Sep 17 00:00:00 2001 From: maochaoying <925670706@qq.com> Date: Fri, 30 Jun 2023 10:18:07 +0800 Subject: [PATCH] =?UTF-8?q?excel=20=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../iflytop/nuclear/controller/TaskController.java | 28 ++++++++++++++++++++- .../nuclear/controller/UploadController.java | 11 +++----- .../iflytop/nuclear/model/NuclearCoreConfig.java | 2 +- .../com/iflytop/nuclear/service/UploadService.java | 2 +- .../nuclear/service/impl/TaskServiceImpl.java | 14 +++++++++++ .../nuclear/service/impl/UploadServiceImpl.java | 5 ++-- src/main/java/com/iflytop/nuclear/vo/TaskVO.java | 2 ++ uploadfiles/xlsx/20230630/堆芯模版.xlsx | Bin 0 -> 12790 bytes 8 files changed, 51 insertions(+), 13 deletions(-) create mode 100644 uploadfiles/xlsx/20230630/堆芯模版.xlsx diff --git a/src/main/java/com/iflytop/nuclear/controller/TaskController.java b/src/main/java/com/iflytop/nuclear/controller/TaskController.java index 0cd11e8..bdbd0ce 100644 --- a/src/main/java/com/iflytop/nuclear/controller/TaskController.java +++ b/src/main/java/com/iflytop/nuclear/controller/TaskController.java @@ -1,7 +1,11 @@ package com.iflytop.nuclear.controller; import com.alibaba.fastjson2.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.iflytop.nuclear.model.Account; +import com.iflytop.nuclear.model.NuclearCoreConfig; import com.iflytop.nuclear.model.Task; +import com.iflytop.nuclear.service.NuclearCoreConfigService; import com.iflytop.nuclear.service.TaskService; import com.iflytop.nuclear.utils.JwtTokenUtils; import com.iflytop.nuclear.utils.ResponseData; @@ -30,6 +34,8 @@ public class TaskController { @Autowired TaskService taskService; @Autowired + NuclearCoreConfigService nuclearCoreConfigService; + @Autowired HttpServletRequest request; @PostMapping("/create") @@ -42,7 +48,7 @@ public class TaskController { return ResponseData.success(jsonObject); } - @GetMapping("list") + @GetMapping("/list") public ResponseData getTaskListByUserId() { String token = request.getHeader("Authorization"); if (token.length() > 0){ @@ -56,4 +62,24 @@ public class TaskController { } return ResponseData.fail("用户登陆信息错误"); } + + @PostMapping("/delete/{id}") + public ResponseData deleteTask(@PathVariable(name = "id") int id) { + boolean b = taskService.removeById(id); + JSONObject jo = new JSONObject(); + jo.put("result", b); + return ResponseData.success(jo); + } + + @PostMapping("/delete/excel/{id}") + public ResponseData deleteTaskExcel(@PathVariable(name = "id") int id) { + QueryWrapper nuclearCoreConfigQueryWrapper = new QueryWrapper<>(); + nuclearCoreConfigQueryWrapper.eq("task_id", id); + boolean remove = nuclearCoreConfigService.remove(nuclearCoreConfigQueryWrapper); + JSONObject jo = new JSONObject(); + jo.put("result", remove); + return ResponseData.success(jo); + } + + } diff --git a/src/main/java/com/iflytop/nuclear/controller/UploadController.java b/src/main/java/com/iflytop/nuclear/controller/UploadController.java index 122b73c..322f5fd 100644 --- a/src/main/java/com/iflytop/nuclear/controller/UploadController.java +++ b/src/main/java/com/iflytop/nuclear/controller/UploadController.java @@ -7,10 +7,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.CrossOrigin; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.io.File; @@ -34,14 +31,14 @@ public class UploadController { @Autowired UploadService uploadService; - @PostMapping("/upload") - public ResponseData uploadToLocal(MultipartFile file) throws IOException { + @PostMapping("/upload/{id}") + public ResponseData uploadToLocal(MultipartFile file, @PathVariable(name = "id") int taskId) throws IOException { // 对当前文件中内容格式进行校验 boolean isValid = uploadService.verifyFileFormat(file); if (!isValid) { return ResponseData.fail("上传文件内容未按照标准版式排版"); } - boolean isSuccess = uploadService.saveFileContentToDB(file); + boolean isSuccess = uploadService.saveFileContentToDB(file, taskId); // 获取文件原本的名字 String originName = file.getOriginalFilename(); // 判断文件是否是pdf文件 diff --git a/src/main/java/com/iflytop/nuclear/model/NuclearCoreConfig.java b/src/main/java/com/iflytop/nuclear/model/NuclearCoreConfig.java index 29a5db6..eeaa194 100644 --- a/src/main/java/com/iflytop/nuclear/model/NuclearCoreConfig.java +++ b/src/main/java/com/iflytop/nuclear/model/NuclearCoreConfig.java @@ -22,7 +22,7 @@ public class NuclearCoreConfig { @TableId private Long id; @TableField("task_id") - private Long taskId; + private int taskId; @TableField("first_sign") private String firstSign; @TableField("serial_number") diff --git a/src/main/java/com/iflytop/nuclear/service/UploadService.java b/src/main/java/com/iflytop/nuclear/service/UploadService.java index 55333f2..b2af372 100644 --- a/src/main/java/com/iflytop/nuclear/service/UploadService.java +++ b/src/main/java/com/iflytop/nuclear/service/UploadService.java @@ -13,5 +13,5 @@ import java.io.IOException; public interface UploadService { boolean verifyFileFormat(MultipartFile file) throws IOException; - boolean saveFileContentToDB(MultipartFile file) throws IOException; + boolean saveFileContentToDB(MultipartFile file, int taskId) throws IOException; } diff --git a/src/main/java/com/iflytop/nuclear/service/impl/TaskServiceImpl.java b/src/main/java/com/iflytop/nuclear/service/impl/TaskServiceImpl.java index 7e5856e..5d2dfb7 100644 --- a/src/main/java/com/iflytop/nuclear/service/impl/TaskServiceImpl.java +++ b/src/main/java/com/iflytop/nuclear/service/impl/TaskServiceImpl.java @@ -4,7 +4,9 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.iflytop.nuclear.mapper.TaskMapper; import com.iflytop.nuclear.model.Account; +import com.iflytop.nuclear.model.NuclearCoreConfig; import com.iflytop.nuclear.model.Task; +import com.iflytop.nuclear.service.NuclearCoreConfigService; import com.iflytop.nuclear.service.TaskService; import com.iflytop.nuclear.vo.TaskVO; import org.springframework.beans.factory.annotation.Autowired; @@ -20,6 +22,9 @@ import java.util.List; @Service public class TaskServiceImpl extends ServiceImpl implements TaskService { + @Autowired + NuclearCoreConfigService nuclearCoreConfigService; + @Override public List getTaskInfoByUsername(String username, String user_role) { List list = null; @@ -32,6 +37,14 @@ public class TaskServiceImpl extends ServiceImpl implements Ta } List result= new ArrayList<>(); for (Task task: list) { + // 查询该task上传过excel吗 + QueryWrapper nuclearCoreConfigQueryWrapper = new QueryWrapper<>(); + nuclearCoreConfigQueryWrapper.eq("task_id", task.getId()); + List nuclearCoreConfigList = nuclearCoreConfigService.list(nuclearCoreConfigQueryWrapper); + boolean canUpload = true; + if (nuclearCoreConfigList.size() > 0) { + canUpload = false; + } TaskVO taskVO = TaskVO.builder() .taskName(task.getTaskName()) .checkOrder(task.getCheckOrder()) @@ -42,6 +55,7 @@ public class TaskServiceImpl extends ServiceImpl implements Ta .operatorName(task.getOperatorId()) .startTime(task.getStartTime()) .endTime(task.getEndTime()) + .canUpload(canUpload) .build(); result.add(taskVO); } diff --git a/src/main/java/com/iflytop/nuclear/service/impl/UploadServiceImpl.java b/src/main/java/com/iflytop/nuclear/service/impl/UploadServiceImpl.java index b2910f3..88578b1 100644 --- a/src/main/java/com/iflytop/nuclear/service/impl/UploadServiceImpl.java +++ b/src/main/java/com/iflytop/nuclear/service/impl/UploadServiceImpl.java @@ -49,7 +49,7 @@ public class UploadServiceImpl implements UploadService { } @Override - public boolean saveFileContentToDB(MultipartFile file) throws IOException { + public boolean saveFileContentToDB(MultipartFile file, int taskId) throws IOException { InputStream inputStream = file.getInputStream(); Workbook wb = new XSSFWorkbook(inputStream); Sheet sheet = wb.getSheetAt(0); @@ -90,12 +90,11 @@ public class UploadServiceImpl implements UploadService { String serialNumber = startIndex + "-" + (j + 1) ; // 创建存储数据库对象list // 临时taskid - Long taskid = 1L; NuclearCoreConfig nuclearCoreConfig = NuclearCoreConfig.builder() .percent(s2) .firstSign(s1) .secondSign(s3) - .taskId(taskid) + .taskId(taskId) .serialNumber(serialNumber) .build(); nuclearCoreConfigArrayList.add(nuclearCoreConfig); diff --git a/src/main/java/com/iflytop/nuclear/vo/TaskVO.java b/src/main/java/com/iflytop/nuclear/vo/TaskVO.java index 2fbf056..f941c2f 100644 --- a/src/main/java/com/iflytop/nuclear/vo/TaskVO.java +++ b/src/main/java/com/iflytop/nuclear/vo/TaskVO.java @@ -35,5 +35,7 @@ public class TaskVO { private Date startTime; + private boolean canUpload; + private Date endTime; } diff --git a/uploadfiles/xlsx/20230630/堆芯模版.xlsx b/uploadfiles/xlsx/20230630/堆芯模版.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..0bebed05c97067b897b8fc5e5b66eddf2c1a7922 GIT binary patch literal 12790 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 literal 0 HcmV?d00001