Ver Fonte

质检-日志填报
1、创建按月封装实体类
2、查询按月封装
3、删除按月封装

LHB há 1 mês atrás
pai
commit
16d2bb2ae2

+ 20 - 0
blade-service-api/blade-business-api/src/main/java/org/springblade/business/dto/StartTimeAndEndTime.java

@@ -0,0 +1,20 @@
+package org.springblade.business.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * @author LHB
+ */
+@Data
+public class StartTimeAndEndTime {
+    @ApiModelProperty("开始时间")
+    @NotBlank(message = "开始时间不能为空")
+    private String startTime;
+    @ApiModelProperty("结束时间")
+    @NotBlank(message = "结束时间不能为空")
+    private String endTime;
+}

+ 18 - 71
blade-service-api/blade-business-api/src/main/java/org/springblade/business/entity/ContractLogMonthPack.java

@@ -3,6 +3,8 @@ package org.springblade.business.entity;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import java.util.Date;
+
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 /**
@@ -16,48 +18,63 @@ public class ContractLogMonthPack {
      * 
      */
     @TableId
+    @ApiModelProperty("id")
     private Long id;
 
     /**
      * 项目id
      */
+    @ApiModelProperty("项目id")
     private Long projectId;
 
     /**
      * 合同段id
      */
+    @ApiModelProperty("合同段id")
     private Long contractId;
 
     /**
      * 私有WBS树p_key_id
      */
+    @ApiModelProperty("私有WBS树p_key_id")
     private Long wbsNodeId;
 
     /**
      *  日志类型
      */
+    @ApiModelProperty("日志类型")
     private Integer wbsNodeType;
 
     /**
      * 文件名称
      */
+    @ApiModelProperty("文件名称")
     private String fileName;
 
     /**
      * 上当月中最后一份文件的日期
      */
-    private Date recordTime;
+    @ApiModelProperty("上当月中最后一份文件的日期")
+    private String recordTime;
 
     /**
      * 合同段名称
      */
+    @ApiModelProperty("合同段名称(责任者)")
     private String contractName;
 
     /**
      *  页数
      */
+    @ApiModelProperty("页数")
     private Integer page;
 
+    /**
+     * pdf路径
+     */
+    @ApiModelProperty("pdf路径")
+    private String pdfUrl;
+
     /**
      *  创建时间
      */
@@ -77,74 +94,4 @@ public class ContractLogMonthPack {
      *  修改人
      */
     private Long updateUser;
-
-    @Override
-    public boolean equals(Object that) {
-        if (this == that) {
-            return true;
-        }
-        if (that == null) {
-            return false;
-        }
-        if (getClass() != that.getClass()) {
-            return false;
-        }
-        ContractLogMonthPack other = (ContractLogMonthPack) that;
-        return (this.getId() == null ? other.getId() == null : this.getId().equals(other.getId()))
-            && (this.getProjectId() == null ? other.getProjectId() == null : this.getProjectId().equals(other.getProjectId()))
-            && (this.getContractId() == null ? other.getContractId() == null : this.getContractId().equals(other.getContractId()))
-            && (this.getWbsNodeId() == null ? other.getWbsNodeId() == null : this.getWbsNodeId().equals(other.getWbsNodeId()))
-            && (this.getWbsNodeType() == null ? other.getWbsNodeType() == null : this.getWbsNodeType().equals(other.getWbsNodeType()))
-            && (this.getFileName() == null ? other.getFileName() == null : this.getFileName().equals(other.getFileName()))
-            && (this.getRecordTime() == null ? other.getRecordTime() == null : this.getRecordTime().equals(other.getRecordTime()))
-            && (this.getContractName() == null ? other.getContractName() == null : this.getContractName().equals(other.getContractName()))
-            && (this.getPage() == null ? other.getPage() == null : this.getPage().equals(other.getPage()))
-            && (this.getCreateTime() == null ? other.getCreateTime() == null : this.getCreateTime().equals(other.getCreateTime()))
-            && (this.getCreateUser() == null ? other.getCreateUser() == null : this.getCreateUser().equals(other.getCreateUser()))
-            && (this.getUpdateTime() == null ? other.getUpdateTime() == null : this.getUpdateTime().equals(other.getUpdateTime()))
-            && (this.getUpdateUser() == null ? other.getUpdateUser() == null : this.getUpdateUser().equals(other.getUpdateUser()));
-    }
-
-    @Override
-    public int hashCode() {
-        final int prime = 31;
-        int result = 1;
-        result = prime * result + ((getId() == null) ? 0 : getId().hashCode());
-        result = prime * result + ((getProjectId() == null) ? 0 : getProjectId().hashCode());
-        result = prime * result + ((getContractId() == null) ? 0 : getContractId().hashCode());
-        result = prime * result + ((getWbsNodeId() == null) ? 0 : getWbsNodeId().hashCode());
-        result = prime * result + ((getWbsNodeType() == null) ? 0 : getWbsNodeType().hashCode());
-        result = prime * result + ((getFileName() == null) ? 0 : getFileName().hashCode());
-        result = prime * result + ((getRecordTime() == null) ? 0 : getRecordTime().hashCode());
-        result = prime * result + ((getContractName() == null) ? 0 : getContractName().hashCode());
-        result = prime * result + ((getPage() == null) ? 0 : getPage().hashCode());
-        result = prime * result + ((getCreateTime() == null) ? 0 : getCreateTime().hashCode());
-        result = prime * result + ((getCreateUser() == null) ? 0 : getCreateUser().hashCode());
-        result = prime * result + ((getUpdateTime() == null) ? 0 : getUpdateTime().hashCode());
-        result = prime * result + ((getUpdateUser() == null) ? 0 : getUpdateUser().hashCode());
-        return result;
-    }
-
-    @Override
-    public String toString() {
-        StringBuilder sb = new StringBuilder();
-        sb.append(getClass().getSimpleName());
-        sb.append(" [");
-        sb.append("Hash = ").append(hashCode());
-        sb.append(", id=").append(id);
-        sb.append(", projectId=").append(projectId);
-        sb.append(", contractId=").append(contractId);
-        sb.append(", wbsNodeId=").append(wbsNodeId);
-        sb.append(", wbsNodeType=").append(wbsNodeType);
-        sb.append(", fileName=").append(fileName);
-        sb.append(", recordTime=").append(recordTime);
-        sb.append(", contractName=").append(contractName);
-        sb.append(", page=").append(page);
-        sb.append(", createTime=").append(createTime);
-        sb.append(", createUser=").append(createUser);
-        sb.append(", updateTime=").append(updateTime);
-        sb.append(", updateUser=").append(updateUser);
-        sb.append("]");
-        return sb.toString();
-    }
 }

+ 5 - 10
blade-service-api/blade-business-api/src/main/java/org/springblade/business/vo/ContractLogVO.java

@@ -1,10 +1,13 @@
 package org.springblade.business.vo;
 
 import io.swagger.annotations.ApiModelProperty;
+import org.springblade.business.dto.StartTimeAndEndTime;
 import org.springblade.business.entity.ContractLog;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
+import javax.validation.Valid;
+import javax.validation.constraints.NotEmpty;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -51,6 +54,8 @@ public class ContractLogVO extends ContractLog {
 
 
     @ApiModelProperty(value = "按月封装时间范围")
+    @NotEmpty(message = "请选择时间范围")
+    @Valid
     private List<StartTimeAndEndTime> startTimeAndEndTimes;
 
     public void setSelectNodeList(String primaryKeyId, String title) {
@@ -72,14 +77,4 @@ public class ContractLogVO extends ContractLog {
 
     }
 
-    /**
-     * 开始时间-结束时间
-     */
-    @Data
-    static class StartTimeAndEndTime{
-        @ApiModelProperty("开始时间")
-        private String startTime;
-        @ApiModelProperty("结束时间")
-        private String endTime;
-    }
 }

+ 30 - 1
blade-service/blade-business/src/main/java/org/springblade/business/controller/ContractLogController.java

@@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
@@ -44,6 +45,7 @@ import org.springframework.beans.BeanUtils;
 import org.springframework.jdbc.core.BeanPropertyRowMapper;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import java.io.IOException;
@@ -674,7 +676,34 @@ public class ContractLogController extends BladeController {
     @PostMapping("/byMonthPack")
     @ApiOperationSupport(order = 2)
     @ApiOperation(value = "按月打包")
-    public R<Boolean> byMonthPack(@RequestBody ContractLogVO logVo) {
+    public R<Boolean> byMonthPack(@RequestBody @Validated ContractLogVO logVo) {
         return R.data(this.contractLogService.byMonthPack(logVo));
     }
+
+    /**
+     * 查询按月打包
+     *
+     * @param logVo 查询条件
+     * @return 结果
+     */
+    @PostMapping("/selectByMonthPack")
+    @ApiOperationSupport(order = 2)
+    @ApiOperation(value = "查询按月打包")
+    public R<Page<ContractLogMonthPack>> selectByMonthPack(@RequestBody ContractLogVO logVo) {
+        return R.data(this.contractLogService.selectByMonthPack(logVo));
+    }
+
+    /**
+     * 删除按月打包
+     *
+     * @param id id
+     * @return 结果
+     */
+    @GetMapping("/deleteByMonthPack")
+    @ApiOperationSupport(order = 1)
+    @ApiOperation(value = "删除按月打包")
+    @ApiImplicitParam(name = "id", value = "id", required = true)
+    public R<Boolean> deleteByMonthPack(@RequestParam Long id) {
+        return R.data(this.contractLogService.deleteByMonthPack(id));
+    }
 }

+ 14 - 0
blade-service/blade-business/src/main/java/org/springblade/business/service/IContractLogService.java

@@ -16,7 +16,9 @@
  */
 package org.springblade.business.service;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.springblade.business.entity.ContractLog;
+import org.springblade.business.entity.ContractLogMonthPack;
 import org.springblade.business.vo.ContractLogVO;
 import org.springblade.business.vo.FileUserVO;
 import org.springblade.core.mp.base.BaseService;
@@ -52,4 +54,16 @@ public interface IContractLogService extends BaseService<ContractLog> {
      * @return
      */
     Boolean byMonthPack(ContractLogVO logVo);
+    /**
+     * 查询按月封装
+     * @param logVo
+     * @return
+     */
+    Page<ContractLogMonthPack> selectByMonthPack(ContractLogVO logVo);
+    /**
+     * 删除按月打包
+     * @param logVo
+     * @return
+     */
+    Boolean deleteByMonthPack(Long id);
 }

+ 133 - 1
blade-service/blade-business/src/main/java/org/springblade/business/service/impl/ContractLogServiceImpl.java

@@ -16,11 +16,19 @@
  */
 package org.springblade.business.service.impl;
 
+import cn.hutool.core.date.DateField;
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.nacos.shaded.org.checkerframework.checker.units.qual.A;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.spire.pdf.PdfPageBase;
 import org.apache.commons.lang.StringUtils;
+import org.springblade.business.dto.StartTimeAndEndTime;
 import org.springblade.business.entity.ContractLog;
 import org.springblade.business.entity.ContractLogMonthPack;
 import org.springblade.business.entity.Task;
@@ -28,19 +36,28 @@ import org.springblade.business.entity.TaskParallel;
 import org.springblade.business.mapper.ContractLogMapper;
 import org.springblade.business.service.ContractLogMonthPackService;
 import org.springblade.business.service.IContractLogService;
+import org.springblade.business.utils.FileUtils;
 import org.springblade.business.vo.ContractLogVO;
 import org.springblade.business.vo.FileUserVO;
+import org.springblade.common.utils.SnowFlakeUtil;
 import org.springblade.core.mp.base.BaseServiceImpl;
 import org.springblade.core.mp.support.Condition;
 import org.springblade.core.mp.support.Query;
+import org.springblade.core.oss.model.BladeFile;
 import org.springblade.core.secure.utils.AuthUtil;
-import org.springblade.core.tool.utils.ObjectUtil;
+import org.springblade.core.secure.utils.SecureUtil;
+import org.springblade.core.tool.utils.*;
 import org.springblade.manager.feign.ExcelTabClient;
+import org.springblade.resource.feign.NewIOSSClient;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.dao.DataAccessException;
 import org.springframework.jdbc.core.BeanPropertyRowMapper;
 import org.springframework.jdbc.core.JdbcTemplate;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
+import java.io.File;
+import java.io.FileNotFoundException;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -63,6 +80,9 @@ public class ContractLogServiceImpl extends BaseServiceImpl<ContractLogMapper, C
     @Autowired
     private ContractLogMonthPackService contractLogMonthPackService;
 
+    @Autowired
+    private NewIOSSClient newIOSSClient;
+
 
     public ContractLogServiceImpl(JdbcTemplate jdbcTemplate) {
         this.jdbcTemplate = jdbcTemplate;
@@ -215,14 +235,126 @@ public class ContractLogServiceImpl extends BaseServiceImpl<ContractLogMapper, C
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public Boolean byMonthPack(ContractLogVO logVo) {
+        //获取当前用户id
+        Long userId = SecureUtil.getUserId();
 
+        //所有月份
+        List<DateTime> monthAll = new ArrayList<>();
+
+        logVo.getStartTimeAndEndTimes().forEach(f -> {
+            List<DateTime> dateTimes = DateUtil.rangeToList(DateUtil.parse(f.getStartTime(),"yyyy-MM"), DateUtil.parse(f.getEndTime(),"yyyy-MM"), DateField.MONTH);
+            monthAll.addAll(dateTimes);
+        });
 
+        //查询所有数据
+        List<ContractLog> contractLogs = baseMapper.selectList(Wrappers.<ContractLog>lambdaQuery()
+                .eq(ContractLog::getContractId, logVo.getContractId())
+                .eq(ContractLog::getWbsNodeId, logVo.getWbsNodeId())
+                .isNotNull(ContractLog::getPdfUrl)
+                .orderByAsc(ContractLog::getRecordTime)
+        );
 
+        //按月分组
+        Map<String, List<ContractLog>> collect = contractLogs.stream().filter(f -> StringUtil.isNotBlank(f.getRecordTime())).collect(Collectors.groupingBy(log -> {
+            String dateStr = log.getRecordTime();
+            // 提取年月部分
+            return dateStr.substring(0, 7);
+        }));
+        //对分组中的数据按时间排序
         List<ContractLogMonthPack> contractLogMonthPacks = new ArrayList<>();
 
+        monthAll.forEach(f -> {
+
+            //根据月份获取数据
+            List<ContractLog> monthLogs = collect.get(DateUtil.format(f, "yyyy-MM"));
+
+            if(CollectionUtil.isNotEmpty(monthLogs)){
+                ContractLog contractLog = monthLogs.get(0);
+
+                String nodeName = null;
+                String contractName = null;
+                try {
+                    //查询节点名称
+                    nodeName = jdbcTemplate.queryForObject("select node_name from m_wbs_tree_private where p_key_id = " + contractLog.getWbsNodeId(), String.class);
+                    contractName = jdbcTemplate.queryForObject("select contract_name from m_contract_info where id = " + contractLog.getContractId(), String.class);
+                } catch (DataAccessException e) {}
+                if(nodeName != null && contractName != null){
+                    ContractLogMonthPack contractLogMonthPack = new ContractLogMonthPack();
+                    contractLogMonthPack.setId(SnowFlakeUtil.getId());
+                    contractLogMonthPack.setContractId(contractLog.getContractId());
+                    contractLogMonthPack.setProjectId(contractLog.getProjectId());
+                    contractLogMonthPack.setWbsNodeId(contractLog.getWbsNodeId());
+                    contractLogMonthPack.setWbsNodeType(contractLog.getWbsNodeType());
+                    contractLogMonthPack.setFileName(DateUtil.format(f, "yyyy年MM月 ") + nodeName);
+                    contractLogMonthPack.setRecordTime(monthLogs.get(monthLogs.size()-1).getRecordTime().replaceAll("-",""));
+                    contractLogMonthPack.setContractName(contractName);
+                    contractLogMonthPack.setCreateUser(userId);
 
+                    //排序
+                    monthLogs.sort(Comparator.comparing(ContractLog::getRecordTime));
+                    List<String> pdfFiles = monthLogs.stream().map(ContractLog::getPdfUrl).collect(Collectors.toList());
+
+                    try {
+                        String filePath = FileUtils.getSysLocalFileUrl();
+                        Long id = SnowFlakeUtil.getId();
+                        String trialPdf = filePath + "/pdf/" + id + ".pdf";
+                        File trialPdf2 = ResourceUtil.getFile(trialPdf);
+                        if (trialPdf2.exists()) {
+                            trialPdf2.delete();
+                        }
+                        //合并日志pdf
+                        int page = FileUtils.mergePdfPublicMethods(pdfFiles, trialPdf);
+                        contractLogMonthPack.setPage(page);
+                        BladeFile bladeFile = this.newIOSSClient.uploadFile(id + ".pdf", trialPdf);
+                        if (bladeFile != null && ObjectUtils.isNotEmpty(bladeFile.getLink())) {
+                            contractLogMonthPack.setPdfUrl(bladeFile.getLink());
+                        }
+                    } catch (FileNotFoundException e) {
+                        throw new RuntimeException(e);
+                    }
+                    contractLogMonthPacks.add(contractLogMonthPack);
+                }
+            }
+        });
+        List<String> collect1 = contractLogMonthPacks.stream().map(ContractLogMonthPack::getRecordTime).collect(Collectors.toList());
+        //删除文件
+        List<ContractLogMonthPack> list = contractLogMonthPackService.list(Wrappers.<ContractLogMonthPack>lambdaQuery()
+                .eq(ContractLogMonthPack::getContractId, logVo.getContractId())
+                .eq(ContractLogMonthPack::getWbsNodeId, logVo.getWbsNodeId())
+                .in(ContractLogMonthPack::getRecordTime, collect1));
+
+        if(CollectionUtil.isNotEmpty(list)){
+            //删除文件
+            list.forEach(f -> {
+                if(StringUtil.isNotBlank(f.getPdfUrl())){
+                    String pdfName = f.getPdfUrl().split("upload")[1];
+                    this.newIOSSClient.removeFile("upload" + pdfName);
+                }
+            });
+            //删除数据
+            contractLogMonthPackService.removeBatchByIds(list);
+        }
 
         return contractLogMonthPackService.saveBatch(contractLogMonthPacks);
     }
+
+    @Override
+    public Page<ContractLogMonthPack> selectByMonthPack(ContractLogVO logVo) {
+        return contractLogMonthPackService.page(new Page<>(logVo.getCurrent(), logVo.getSize()), Wrappers.<ContractLogMonthPack>lambdaQuery()
+                .eq(ContractLogMonthPack::getContractId, logVo.getContractId())
+                .eq(ContractLogMonthPack::getWbsNodeId, logVo.getWbsNodeId())
+                .orderByDesc(ContractLogMonthPack::getRecordTime));
+    }
+
+    @Override
+    public Boolean deleteByMonthPack(Long id) {
+        ContractLogMonthPack byId = contractLogMonthPackService.getById(id);
+        if(byId != null && StringUtil.isNotBlank(byId.getPdfUrl())){
+            String pdfName = byId.getPdfUrl().split("upload")[1];
+            this.newIOSSClient.removeFile("upload" + pdfName);
+        }
+        return contractLogMonthPackService.removeById(id);
+    }
 }

+ 4 - 4
blade-service/blade-business/src/main/java/org/springblade/business/utils/FileUtils.java

@@ -517,9 +517,9 @@ public class FileUtils {
     /**
      * 合并方法
      */
-    public static void mergePdfPublicMethods(List<String> urlList, String localImgUrl) {
+    public static int mergePdfPublicMethods(List<String> urlList, String localImgUrl) {
         PdfReader reader = null;
-
+        int count = 0;
         Document doc = new Document();
         PdfCopy pdfCopy = null;
         try {
@@ -533,7 +533,7 @@ public class FileUtils {
                     reader = new PdfReader(CommonUtil.getOSSInputStream(urlStr));
 
                     pageCount = reader.getNumberOfPages();
-
+                    count += pageCount;
                     for (int i = 0; i < pageCount; ++i) {
                         int is = i + 1;
                         pdfCopy.addPage(pdfCopy.getImportedPage(reader, is));
@@ -546,7 +546,6 @@ public class FileUtils {
                     }
                 }
             }
-
         } catch (Exception e) {
             e.printStackTrace();
         } finally {
@@ -556,6 +555,7 @@ public class FileUtils {
             }
             doc.close();
         }
+        return count;
     }
 
     public static String getSysLocalFileUrl() {