From 81ff79b946d5f3d311549c6ac8929226d90ddcde Mon Sep 17 00:00:00 2001 From: zhn <947514737@qq.com> Date: Thu, 7 Sep 2023 17:39:45 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/NcrTrackServiceImpl.java | 182 ++++++++++++- .../jero/modules/project/vo/NcrTrackVO.java | 98 +++---- .../jero/modules/project/vo/NcrTrackVOEn.java | 254 ++++++++++++++++++ 3 files changed, 468 insertions(+), 66 deletions(-) create mode 100644 jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/vo/NcrTrackVOEn.java diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/NcrTrackServiceImpl.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/NcrTrackServiceImpl.java index 01d0bda9e..c673e6334 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/NcrTrackServiceImpl.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/NcrTrackServiceImpl.java @@ -1,5 +1,7 @@ package com.jero.modules.project.service.impl; +import cn.hutool.core.util.ZipUtil; +import com.aliyuncs.utils.IOUtils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -8,8 +10,9 @@ import com.jero.common.constant.enums.CutEnum; import com.jero.common.exception.JeroBootException; import com.jero.common.system.vo.DictModel; import com.jero.common.system.vo.LoginUser; +import com.jero.common.util.oss.CosBootUtil; import com.jero.modules.document.entity.BussDocumentLibraryEO; -import com.jero.modules.document.service.IBussDocumentLibraryEOService; +import com.jero.modules.document.service.impl.BussDocumentLibraryEOServiceImpl; import com.jero.modules.dummy.enums.OrderEnum; import com.jero.modules.oss.entity.OSSFile; import com.jero.modules.oss.service.IOSSFileService; @@ -23,8 +26,8 @@ import com.jero.modules.project.enums.ReviewResultEnum; import com.jero.modules.project.mapper.NcrTrackMapper; import com.jero.modules.project.mapper.ProblemManagementEOMapper; import com.jero.modules.project.service.INcrTrackService; -import com.jero.modules.project.vo.NcrTrackInfoVO; import com.jero.modules.project.vo.NcrTrackVO; +import com.jero.modules.project.vo.NcrTrackVOEn; import com.jero.modules.project.vo.ProblemManagementVO; import com.jero.modules.system.entity.SysDictItem; import com.jero.modules.system.entity.SysUser; @@ -33,25 +36,33 @@ import com.jero.modules.system.service.IProjectUserDutyTerritoryService; import com.jero.modules.system.service.ISysDictService; import com.jero.modules.system.service.ISysUserService; import com.jero.modules.system.service.impl.SysDictItemServiceImpl; +import com.jero.modules.system.util.PDFUtils; import com.jero.modules.wkflow.enums.FlowTypeEnum; import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.shiro.SecurityUtils; +import org.aspectj.util.FileUtil; import org.jeecgframework.poi.excel.ExcelExportUtil; import org.jeecgframework.poi.excel.entity.ExportParams; import org.jeecgframework.poi.excel.entity.enmus.ExcelType; import org.jetbrains.annotations.NotNull; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; import java.io.IOException; +import java.io.InputStream; import java.io.OutputStream; import java.text.Collator; +import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -89,9 +100,11 @@ public class NcrTrackServiceImpl extends ServiceImpl @Autowired private ProblemManagementEOMapper problemManagementEOMapper; @Autowired - private IBussDocumentLibraryEOService bussDocumentLibraryEOService; + private BussDocumentLibraryEOServiceImpl bussDocumentLibraryEOService; @Autowired private IOSSFileService iOSSFileService; + @Value(value = "${jero.path.upload}") + private String uploadpath; @Override public List getPageInfo(NcrTrackVO ncrTrackVO) { @@ -890,36 +903,183 @@ public class NcrTrackServiceImpl extends ServiceImpl */ @Override public void exportData(HttpServletResponse response, HttpServletRequest request, NcrTrackVO ncrTrackVO) { + OutputStream os = null; try { + LoginUser loginUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + SimpleDateFormat sdfTemp = new SimpleDateFormat("yyyy-MM-dd"); //导出的数据 List dataList = getPageInfo(ncrTrackVO); - List dataInfoList = new ArrayList<>(); + List ncrTrackVOList = new ArrayList<>(); + for (NcrTrackVO trackVO : dataList) { + if(ObjectUtils.isNotEmpty(trackVO.getCreateTime())){ + trackVO.setCreateTimeStr(sdf.format(trackVO.getCreateTime())); + } + NcrTrackVO ncrTrackVO1 = new NcrTrackVO(); + BeanUtils.copyProperties(trackVO,ncrTrackVO1); + ncrTrackVOList.add(ncrTrackVO1); + } + + List fileList = dataList.stream() + .filter(e -> StringUtils.isNotBlank(e.getFile())).map(NcrTrackVO::getFile).collect(Collectors.toList()); + List approvalEvidenceList = dataList + .stream().filter(e -> StringUtils.isNotBlank(e.getApprovalEvidence())).map(NcrTrackVO::getApprovalEvidence).collect(Collectors.toList()); + + response.setContentType("application/force-download"); Workbook workbook = new XSSFWorkbook(); - OutputStream excelOS = response.getOutputStream();; ExportParams exportParams = new ExportParams(); exportParams.setType(ExcelType.XSSF); - if(StringUtils.isBlank(ncrTrackVO.getProjectLibraryId())){ + List dataInfoList = new ArrayList<>(); + if(CutEnum.CN.getValue().equals(ncrTrackVO.getCut())){ workbook = ExcelExportUtil.exportExcel(exportParams, NcrTrackVO.class, dataList); }else{ - //项目详情中的导出(没有相关项目字段) for (NcrTrackVO trackVO : dataList) { - NcrTrackInfoVO ncrTrackInfoVO = new NcrTrackInfoVO(); - BeanUtils.copyProperties(trackVO,ncrTrackInfoVO); - dataInfoList.add(ncrTrackInfoVO); + if(ObjectUtils.isNotEmpty(trackVO.getCreateTime())){ + trackVO.setCreateTimeStr(sdf.format(trackVO.getCreateTime())); + } + NcrTrackVOEn ncrTrackVOEn = new NcrTrackVOEn(); + BeanUtils.copyProperties(trackVO,ncrTrackVOEn); + dataInfoList.add(ncrTrackVOEn); } - workbook = ExcelExportUtil.exportExcel(exportParams, NcrTrackInfoVO.class, dataInfoList); + workbook = ExcelExportUtil.exportExcel(exportParams, NcrTrackVOEn.class, dataInfoList); } + String path = uploadpath + "/tempZip"; + File fileTemp = new File(path); + if (fileTemp.exists()) { + fileTemp.delete(); + } + fileTemp.mkdirs(); + //excel + String name = ""; + if(CutEnum.CN.getValue().equals(ncrTrackVO.getCut())){ + name = "问题管理"; + }else{ + name = "Problem management"; + } + OutputStream excelOS = new FileOutputStream(path + File.separator + name + sdfTemp.format(new Date())+".xlsx"); workbook.write(excelOS); excelOS.flush(); + + List connectIdList = new ArrayList<>(); + if(!fileList.isEmpty()){ + connectIdList.addAll(fileList); + } + if(!approvalEvidenceList.isEmpty()){ + connectIdList.addAll(approvalEvidenceList); + } + if(!connectIdList.isEmpty()){ + List fileInfosList = iOSSFileService.getFileInfosByConnectId(StringUtils.join(connectIdList, ",")); + for (NcrTrackVO trackVO : ncrTrackVOList) { + String folder = trackVO.getTitle()+sdfTemp.format(trackVO.getCreateTime()); + List connectIdListTemp = new ArrayList<>(); + if(StringUtils.isNotBlank(trackVO.getFile())){ + connectIdListTemp.add(trackVO.getFile()); + } + if(StringUtils.isNotBlank(trackVO.getApprovalEvidence())){ + connectIdListTemp.add(trackVO.getApprovalEvidence()); + } + if(!connectIdListTemp.isEmpty()){ + List ossFileList = fileInfosList.stream().filter(e -> connectIdListTemp.contains(e.getConnectId())).collect(Collectors.toList()); + if (ossFileList.size() != 0) { + String fileNowPath = path + File.separator + folder; + File file = new File(fileNowPath); + if (file.exists()) { + file.delete(); + } + file.mkdirs(); + for (OSSFile ossFile : ossFileList) { + String url = ossFile.getUrl(); + //判断文件是否存在 + if(StringUtils.isNotBlank(url)){ + //判断文件是否存在 + boolean b = CosBootUtil.doesObjectExist(url); + if(b){ + InputStream download = CosBootUtil.download(url); + if(url.endsWith(".pdf") || url.endsWith(".PDF")){ + String currentTime = sdf.format(new Date()); + String waterContent = loginUser.getUsername() + " " + currentTime; + File newFile = PDFUtils.PDFWatermark(download,uploadpath,ossFile.getFileName(),waterContent); + download = new FileInputStream(newFile.getPath()); + } + bussDocumentLibraryEOService.copyFile(download, fileNowPath + File.separator + ossFile.getFileName()); + } + } + } + } + } + } + } + + ZipUtil.zip(path, path + ".zip"); + //文件 + FileInputStream fis = new FileInputStream(path + ".zip"); + os = response.getOutputStream(); + + int len = 0; + while ((len = fis.read()) != -1) { + os.write(len); + } + os.flush(); + fis.close(); + + + + + } catch (IOException e) { if(CutEnum.CN.getValue().equals(ncrTrackVO.getCut())){ throw new JeroBootException("下载文件失败"); }else{ throw new JeroBootException("Failed to download file"); } + } finally { + IOUtils.closeQuietly(os); + File file = new File(uploadpath + "/tempZip"); + FileUtil.deleteContents(file); + File fileTemp = new File(uploadpath + "/tempZip.zip"); + FileUtil.deleteContents(fileTemp); } } +// /** +// * 导出数据 +// * @param response +// * @param request +// * @param ncrTrackVO +// */ +// @Override +// public void exportData(HttpServletResponse response, HttpServletRequest request, NcrTrackVO ncrTrackVO) { +// try { +// //导出的数据 +// List dataList = getPageInfo(ncrTrackVO); +// List dataInfoList = new ArrayList<>(); +// response.setContentType("application/force-download"); +// Workbook workbook = new XSSFWorkbook(); +// OutputStream excelOS = response.getOutputStream();; +// ExportParams exportParams = new ExportParams(); +// exportParams.setType(ExcelType.XSSF); +// if(StringUtils.isBlank(ncrTrackVO.getProjectLibraryId())){ +// workbook = ExcelExportUtil.exportExcel(exportParams, NcrTrackVO.class, dataList); +// }else{ +// //项目详情中的导出(没有相关项目字段) +// for (NcrTrackVO trackVO : dataList) { +// NcrTrackInfoVO ncrTrackInfoVO = new NcrTrackInfoVO(); +// BeanUtils.copyProperties(trackVO,ncrTrackInfoVO); +// dataInfoList.add(ncrTrackInfoVO); +// } +// workbook = ExcelExportUtil.exportExcel(exportParams, NcrTrackInfoVO.class, dataInfoList); +// } +// workbook.write(excelOS); +// excelOS.flush(); +// +// } catch (IOException e) { +// if(CutEnum.CN.getValue().equals(ncrTrackVO.getCut())){ +// throw new JeroBootException("下载文件失败"); +// }else{ +// throw new JeroBootException("Failed to download file"); +// } +// } +// } } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/vo/NcrTrackVO.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/vo/NcrTrackVO.java index 4a2852935..f1f1e1264 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/vo/NcrTrackVO.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/vo/NcrTrackVO.java @@ -35,10 +35,7 @@ public class NcrTrackVO implements Serializable { private String userId; - @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") - @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") - @ApiModelProperty(value = "创建日期") - private java.util.Date createTime; + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") @@ -52,29 +49,61 @@ public class NcrTrackVO implements Serializable { private String standId; //编号 - @Excel(name = "编号", width = 20) private String serialNumber; //标题 @Excel(name = "标题", width = 20) private String title; - //流程类型 - @Excel(name = "流程类型", width = 20) - private String flowType; + @Excel(name = "问题类型", width = 20) + private String problemType_dictText; + + /**ps_issue*/ + @ApiModelProperty(value = "ps_issue") + @Excel(name = "PS_ISSUE", width = 20) + private java.lang.String psIssue; + + @ApiModelProperty(value = "创建人") + @Excel(name = "创建人", width = 20) + private java.lang.String createBy; + + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "创建日期") +// @Excel(name = "创建时间", width = 20) + private java.util.Date createTime; + + @Excel(name = "创建时间", width = 20) + private String createTimeStr; + + @ApiModelProperty(value = "相关法规") + @Excel(name = "相关法规", width = 20) + private String lawsName; + + @Excel(name = "相关项目", width = 20) + private String projectName; - //责任领域 duty_territory @Dict(dicCode ="duty_territory") - @Excel(name = "责任领域", width = 20,dicCode ="duty_territory") + @Excel(name = "责任部门", width = 20) private String dutyTerritory; + /**问题状态*/ + @ApiModelProperty(value = "问题状态") + @Excel(name = "问题状态", width = 20) + private java.lang.String problemState; + + /**描述和分析*/ + @ApiModelProperty(value = "描述和分析") + @Excel(name = "描述和分析", width = 20) + private java.lang.String description; + + + //流程类型 + private String flowType; + //流程类型标识(枚举) private String flowTypeNumber; - //相关项目 - @Excel(name = "相关项目", width = 20) - private String projectName; - //目标市场 private String targetMarket; @@ -85,17 +114,12 @@ public class NcrTrackVO implements Serializable { private String projectVersion; //问题类型 -// @Dict(dicCode ="wen4_ti2_lei4_xing2") - @Excel(name = "问题类型", width = 20) private String problemType; - private String problemType_dictText; //发起人 - @Excel(name = "发起人", width = 20) private String initiator; //责任人 - @Excel(name = "责任人", width = 20) private String duty; //项目库id @@ -112,8 +136,6 @@ public class NcrTrackVO implements Serializable { //验证符合性确认 verify_p_id private String verifyPId; - - //设计发起人 design_initiator_id private String designInitiatorId; //pre发起人 prehomo_initiator_id @@ -169,44 +191,16 @@ public class NcrTrackVO implements Serializable { - /**标题*/ -// @Excel(name = "标题", width = 15) -// @ApiModelProperty(value = "标题") -// private java.lang.String title; -// -// /**问题类型*/ -// @Excel(name = "问题类型", width = 15) -// @ApiModelProperty(value = "问题类型") -// private java.lang.String problemType; - - @ApiModelProperty(value = "创建人") - private java.lang.String createBy; - - /**ps_issue*/ - @ApiModelProperty(value = "ps_issue") - private java.lang.String psIssue; - /**相关法规*/ @ApiModelProperty(value = "相关法规") private java.lang.String lawsId; /**相关项目*/ - @Excel(name = "相关项目", width = 15) @ApiModelProperty(value = "相关项目") private java.lang.String projectId; -// /**责任部门*/ -// @ApiModelProperty(value = "责任部门") -// @Excel(name = "*责任领域", width = 15,dicCode ="duty_territory") -// private java.lang.String dutyTerritory; - /**问题状态*/ - @ApiModelProperty(value = "问题状态") - private java.lang.String problemState; - /**描述和分析*/ - @ApiModelProperty(value = "描述和分析") - private java.lang.String description; /**相关文件链接*/ @ApiModelProperty(value = "相关文件链接") @@ -242,12 +236,6 @@ public class NcrTrackVO implements Serializable { @ApiModelProperty(value = "审批证据链接(前端传参)") private List approvalEvidenceLinkList; - @ApiModelProperty(value = "相关法规中文名") - private String lawsName; - -// @TableField(exist = false) -// @ApiModelProperty(value = "相关项目中文名") -// private String projectName; @ApiModelProperty(value = "详情文件回显") private List fileList; diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/vo/NcrTrackVOEn.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/vo/NcrTrackVOEn.java new file mode 100644 index 000000000..831f9e3e8 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/vo/NcrTrackVOEn.java @@ -0,0 +1,254 @@ +package com.jero.modules.project.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.jero.common.aspect.annotation.Dict; +import com.jero.modules.oss.entity.OSSFile; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.experimental.Accessors; +import org.jeecgframework.poi.excel.annotation.Excel; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + + +/** + * @Description: 项目未符合项跟踪 + * @Author: jero-boot + * @Date: 2022-04-29 + * @Version: V1.0 + */ +@Data +@Accessors(chain = true) +@EqualsAndHashCode(callSuper = false) +public class NcrTrackVOEn implements Serializable { + + + //任务清单id + private String id; + + //用于导出时勾选数据 + private String uuid; + + private String userId; + + + + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "修改日期") + private java.util.Date updateTime; + + //中英文切换 + private String cut; + + //文档库ID + private String standId; + + //编号 + private String serialNumber; + + //标题 + @Excel(name = "Title", width = 20) + private String title; + + @Excel(name = "Issue Type", width = 20) + private String problemType_dictText; + + /**ps_issue*/ + @ApiModelProperty(value = "ps_issue") + @Excel(name = "PS-ISSUE", width = 20) + private String psIssue; + + @ApiModelProperty(value = "创建人") + @Excel(name = "Creator", width = 20) + private String createBy; + + @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value = "创建日期") +// @Excel(name = "Create Date", width = 20) + private java.util.Date createTime; + @Excel(name = "Create Date", width = 20) + private String createTimeStr; + + @ApiModelProperty(value = "相关法规") + @Excel(name = " Related Regualtions", width = 20) + private String lawsName; + + @Excel(name = "Related Project", width = 20) + private String projectName; + + @Dict(dicCode ="duty_territory") + @Excel(name = "Resonsible Field", width = 20) + private String dutyTerritory; + + /**问题状态*/ + @ApiModelProperty(value = "问题状态") + @Excel(name = "Status", width = 20) + private String problemState; + + /**描述和分析*/ + @ApiModelProperty(value = "描述和分析") + @Excel(name = "Description", width = 20) + private String description; + + + //流程类型 + private String flowType; + + //流程类型标识(枚举) + private String flowTypeNumber; + + //目标市场 + private String targetMarket; + + //年款 + private String yearName; + + //项目版本 + private String projectVersion; + + //问题类型 + private String problemType; + + //发起人 + private String initiator; + + //责任人 + private String duty; + + //项目库id + private String projectLibraryId; + //不符合 + private String inconformity; + //待追踪 + private String track; + + //设计符合性确认 design_p_id + private String designPId; + //PreHomo确认 prehomo_p_id + private String prehomoPId; + //验证符合性确认 verify_p_id + private String verifyPId; + + //设计发起人 design_initiator_id + private String designInitiatorId; + //pre发起人 prehomo_initiator_id + private String prehomoInitiatorId; + //验证发起人 verify_initiator_id + private String verifyInitiatorId; + + + //设计责任人 design_duty_id + private String designDutyId; + //pre责任人 prehomo_duty_id + private String prehomoDutyId; + //验证责任人 verify_duty_id + private String verifyDutyId; + + + //设计问题类型 design_flow_task_status + private String designFlowTaskStatus; + //pre问题类型 prehomo_flow_task_status + private String prehomoFlowTaskStatus; + //验证问题类型 verify_flow_task_status + private String verifyFlowTaskStatus; + + private List ncrTrackVOList = new ArrayList<>(); + + + //以下字段跳转适用(还有项目库id) + //待办任务id + private String taskId; + //法规清单id + private String projectLawsInventoryId; + //流程实例id + private String prcId; + //流程类型 + private String prcType; + //状态:待办 、已办 + private String status; + //任务清单详情id + private String projectTaskInventoryDetailId; + //任务节点定义key + private String taskDefinitionKey; + //是否是系统管理员角色 + private String administrator; + + + //排序(1->正序, 2->倒序) + private String orderBy; + + //排序字段 + private String orderByField; + + private String flowStatus; + + + + /**相关法规*/ + @ApiModelProperty(value = "相关法规") + private String lawsId; + + /**相关项目*/ + @ApiModelProperty(value = "相关项目") + private String projectId; + + + + + /**相关文件链接*/ + @ApiModelProperty(value = "相关文件链接") + private String fileLink; + + /**相关文件*/ + @ApiModelProperty(value = "相关文件") + private String file; + + /**进度追踪*/ + @ApiModelProperty(value = "进度追踪") + private String progressTracking; + + /**结论*/ + @ApiModelProperty(value = "结论") + private String conclusion; + + /**审批证据*/ + @ApiModelProperty(value = "审批证据") + private String approvalEvidence; + + /**审批证据链接*/ + @ApiModelProperty(value = "审批证据链接") + private String approvalEvidenceLink; + + + @ApiModelProperty(value = "相关文件地址链接(前端传参)") + private List fileLinkList; + + @ApiModelProperty(value = "进度追踪(前端传参)") + private List progressTrackingList; + + @ApiModelProperty(value = "审批证据链接(前端传参)") + private List approvalEvidenceLinkList; + + + @ApiModelProperty(value = "详情文件回显") + private List fileList; + + @ApiModelProperty(value = "详情文件回显") + private List approvalEvidenceFileList; + + //用于区分旧数据和新数据(旧数据->old,新数据->new) + @ApiModelProperty(value = "旧数据->old,新数据->new") + private String flag; + + + + + + +}