Jelajahi Sumber

工时填报时长问题,请假添加文件上传

zhouyy 2 bulan lalu
induk
melakukan
9e9a5d19ed

+ 6 - 4
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/controller/ReportController.java

@@ -2105,7 +2105,8 @@ public class ReportController {
 
                     int minutes = (int)time/1000/60;
                     double hours = minutes*1.0f/60;
-                    report.setWorkingTime(hours);
+                    double tmpRes = new BigDecimal(minutes * 1.0f / 60).setScale(2, RoundingMode.HALF_UP).doubleValue();
+                    report.setWorkingTime(tmpRes);
                     report.setCost(hourCost.multiply(new BigDecimal(hours)));
                 } catch (ParseException e) {
                     e.printStackTrace();
@@ -2118,7 +2119,7 @@ public class ReportController {
             try {
                 double totalHours = 0;
                 long totalSeconds = 0l;
-                double totalHoursTmp = 0;
+//                double totalHoursTmp = 0;
                 for (int t=0;t<array.size(); t++) {
                     JSONObject jsonObject = array.getJSONObject(t);
                     WorktimeItem item = JSONObject.toJavaObject(jsonObject, WorktimeItem.class);
@@ -2143,8 +2144,9 @@ public class ReportController {
                     jsonObject.put("time", hours);
                     totalHours += hours;
                 }
-                totalHoursTmp = ((int)totalSeconds/1000/60)*1.0f/60;
-                report.setWorkingTime(totalHoursTmp);
+//                totalHoursTmp = ((int)totalSeconds/1000/60)*1.0f/60;
+                double tmpRes = new BigDecimal(((int)totalSeconds/1000/60)*1.0f/60).setScale(2, RoundingMode.HALF_UP).doubleValue();
+                report.setWorkingTime(tmpRes);
                 report.setCost(hourCost.multiply(new BigDecimal(totalHours)));
                 report.setContent(array.toJSONString());
             } catch (ParseException e) {

+ 59 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/entity/LeaveSheetFiles.java

@@ -0,0 +1,59 @@
+package com.management.platform.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class LeaveSheetFiles extends Model<LeaveSheetFiles> {
+    private static final long serialVersionUID=1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @TableField("leave_sheet_id")
+    private Integer leaveSheetId;
+
+    @TableField("document_name")
+    private String documentName;
+
+    @TableField("server_name")
+    private String serverName;
+
+    @TableField("url")
+    private String url;
+
+    @TableField("indate")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date indate;
+
+    @TableField("size")
+    private String size;
+
+    @TableField("document_type")
+    private Integer documentType;
+
+    /**
+     * 上传人id
+     */
+    @TableField("creator_id")
+    private String creatorId;
+
+    /**
+     * 上传人姓名
+     */
+    @TableField("creator_name")
+    private String creatorName;
+
+}

+ 10 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/exception/FileCheckException.java

@@ -0,0 +1,10 @@
+package com.management.platform.exception;
+
+public class FileCheckException extends Exception{
+    public FileCheckException() {
+    }
+
+    public FileCheckException(String message) {
+        super(message);
+    }
+}

+ 7 - 0
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/mapper/LeaveSheetFilesMapper.java

@@ -0,0 +1,7 @@
+package com.management.platform.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.management.platform.entity.LeaveSheetFiles;
+
+public interface LeaveSheetFilesMapper extends BaseMapper<LeaveSheetFiles> {
+}

+ 78 - 14
fhKeeper/formulahousekeeper/management-platform/src/main/java/com/management/platform/service/impl/LeaveSheetServiceImpl.java

@@ -11,11 +11,12 @@ import com.management.platform.controller.AuditWorkflowSettingController;
 import com.management.platform.entity.*;
 import com.management.platform.entity.vo.SysRichFunction;
 import com.management.platform.entity.vo.UserRestTimeVO;
+import com.management.platform.exception.FileCheckException;
 import com.management.platform.mapper.*;
 import com.management.platform.service.*;
-import com.management.platform.util.HttpRespMsg;
-import com.management.platform.util.MessageUtils;
-import com.management.platform.util.WorkDayCalculateUtils;
+import com.management.platform.task.SFTPAsyncUploader;
+import com.management.platform.util.*;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -25,6 +26,8 @@ import org.springframework.web.multipart.MultipartFile;
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
+import java.io.File;
+import java.io.IOException;
 import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
@@ -81,26 +84,37 @@ public class LeaveSheetServiceImpl extends ServiceImpl<LeaveSheetMapper, LeaveSh
     @Value(value = "${upload.path}")
     private String path;
 
-    public void checkFile(MultipartFile file){
+    @Autowired
+    private SFTPAsyncUploader sftpAsyncUploader;
+
+    @Resource
+    private LeaveSheetFilesMapper leaveSheetFilesMapper;
+
+    public void checkFile(MultipartFile file) throws FileCheckException {
         if(file.isEmpty()){
-            throw new RuntimeException("文件大小不能为0");
+            throw new FileCheckException("文件大小不能为0");
         }
         if(org.apache.commons.lang3.StringUtils.isBlank(file.getOriginalFilename())){
-            throw new RuntimeException("文件名不能为空");
+            throw new FileCheckException("文件名不能为空");
+        }
+        if(file.getOriginalFilename().split("\\.").length > 2){
+            throw new FileCheckException("文件名中.不能出现多个");
         }
-//        if(file.getOriginalFilename().){
-//
-//        }
     }
 
     @Override
     public HttpRespMsg add(LeaveSheet sheet, String userId, MultipartFile[] files) {
-//        if(null != files && files.length > 0){
-//            for (MultipartFile file : files) {
-//
-//            }
-//        }
         HttpRespMsg msg = new HttpRespMsg();
+        if(null != files && files.length > 0){
+            try {
+                for (MultipartFile file : files) {
+                    checkFile(file);
+                }
+            } catch (FileCheckException e) {
+                msg.setError(e.getMessage());
+                return msg;
+            }
+        }
         boolean isNew = false;
         if (sheet.getId() == null) {
             isNew = true;
@@ -172,6 +186,56 @@ public class LeaveSheetServiceImpl extends ServiceImpl<LeaveSheetMapper, LeaveSh
         if (wxCorpInfo != null) {
             sendAuditNotifyMsg(wxCorpInfo, user, sheet);
         }
+        if(null != files && files.length > 0){
+            for (MultipartFile file : files) {
+                LeaveSheetFiles leaveSheetFiles = new LeaveSheetFiles();
+                leaveSheetFiles.setDocumentName(file.getOriginalFilename());
+                leaveSheetFiles.setLeaveSheetId(sheet.getId());
+                leaveSheetFiles.setCreatorId(userId);
+                leaveSheetFiles.setCreatorName(user.getName());
+                String fileSuffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
+                leaveSheetFiles.setDocumentType(DocumentTypeUtil.DocumentType(fileSuffix));
+                //处理文件
+                File dir = new File(path);
+                if (!dir.exists()) {
+                    dir.mkdir();
+                }
+                String fileName = "";
+                if (file != null && !file.isEmpty()) {
+                    fileName = file.getOriginalFilename();
+
+                    int pos = fileName.lastIndexOf(".");
+                    String suffix = fileName.substring(pos).toLowerCase();
+                    //用uuid替换原始的文件名
+                    String purFName = UUID.randomUUID().toString().replaceAll("-", "");
+                    fileName = purFName + suffix;
+                    File saveFile = new File(dir, fileName);
+                    try {
+                        saveFile.createNewFile();
+                        file.transferTo(saveFile);
+                        //异步上传到备份服务器
+                        sftpAsyncUploader.uploadFileAsync(saveFile);
+                        //计算文件大小
+                        long fileSize = saveFile.length();
+                        String fileLength = FileUtil.getReadableFileSize(fileSize);
+                        leaveSheetFiles.setServerName(path + fileName);
+                        leaveSheetFiles.setSize(fileLength);
+                        String pathPrefix = "/upload/";
+                        leaveSheetFiles.setUrl(pathPrefix + fileName);
+                        leaveSheetFilesMapper.insert(leaveSheetFiles);
+                    } catch (IOException e) {
+                        e.printStackTrace();
+                        fileName = null;
+                        msg.setError(e.getMessage() + ", path=" + dir.getAbsolutePath());
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                        fileName = null;
+                        msg.setError(e.getMessage() + ", path=" + dir.getAbsolutePath());
+                    }
+                }
+            }
+        }
+
         return msg;
     }