Merge remote-tracking branch 'origin/dev_20230831_problem' into dev_20230831_problem

This commit is contained in:
zyx.net
2023-09-07 17:55:50 +08:00
3 changed files with 468 additions and 66 deletions
@@ -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<NcrTrackMapper, NcrTrackVO>
@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<NcrTrackVO> getPageInfo(NcrTrackVO ncrTrackVO) {
@@ -890,36 +903,183 @@ public class NcrTrackServiceImpl extends ServiceImpl<NcrTrackMapper, NcrTrackVO>
*/
@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<NcrTrackVO> dataList = getPageInfo(ncrTrackVO);
List<NcrTrackInfoVO> dataInfoList = new ArrayList<>();
List<NcrTrackVO> 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<String> fileList = dataList.stream()
.filter(e -> StringUtils.isNotBlank(e.getFile())).map(NcrTrackVO::getFile).collect(Collectors.toList());
List<String> 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<NcrTrackVOEn> 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<String> connectIdList = new ArrayList<>();
if(!fileList.isEmpty()){
connectIdList.addAll(fileList);
}
if(!approvalEvidenceList.isEmpty()){
connectIdList.addAll(approvalEvidenceList);
}
if(!connectIdList.isEmpty()){
List<OSSFile> fileInfosList = iOSSFileService.getFileInfosByConnectId(StringUtils.join(connectIdList, ","));
for (NcrTrackVO trackVO : ncrTrackVOList) {
String folder = trackVO.getTitle()+sdfTemp.format(trackVO.getCreateTime());
List<String> 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<OSSFile> 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<NcrTrackVO> dataList = getPageInfo(ncrTrackVO);
// List<NcrTrackInfoVO> 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");
// }
// }
// }
}
@@ -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<ProblemManagementVO> approvalEvidenceLinkList;
@ApiModelProperty(value = "相关法规中文名")
private String lawsName;
// @TableField(exist = false)
// @ApiModelProperty(value = "相关项目中文名")
// private String projectName;
@ApiModelProperty(value = "详情文件回显")
private List<OSSFile> fileList;
@@ -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<NcrTrackVOEn> 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<ProblemManagementVO> fileLinkList;
@ApiModelProperty(value = "进度追踪(前端传参)")
private List<ProblemManagementVO> progressTrackingList;
@ApiModelProperty(value = "审批证据链接(前端传参)")
private List<ProblemManagementVO> approvalEvidenceLinkList;
@ApiModelProperty(value = "详情文件回显")
private List<OSSFile> fileList;
@ApiModelProperty(value = "详情文件回显")
private List<OSSFile> approvalEvidenceFileList;
//用于区分旧数据和新数据(旧数据->old,新数据->new
@ApiModelProperty(value = "旧数据->old,新数据->new")
private String flag;
}