diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/controller/LawsComplianceBoardController.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/controller/LawsComplianceBoardController.java index b5167fba8..0c5724ec6 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/controller/LawsComplianceBoardController.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/controller/LawsComplianceBoardController.java @@ -14,6 +14,8 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import java.util.Map; @Api(tags="法规符合性看板") @@ -42,4 +44,26 @@ public class LawsComplianceBoardController { JSONObject result = this.lawsComplianceBoardService.queryComplianceResultList(params); return Result.OK(result); } + + /** + * 导出符合性结果 + * @param response + * @param request + * @param params + */ + @RequestMapping(value = "/exportComplianceResult") + public void exportComplianceResult(HttpServletResponse response, HttpServletRequest request,@RequestParam Map params){ + this.lawsComplianceBoardService.exportComplianceResult(response,request,params); + } + + /** + * 导出符合性结果明细 + * @param response + * @param request + * @param params + */ + @RequestMapping(value = "/exportComplianceResultDetail") + public void exportComplianceResultDetail(HttpServletResponse response, HttpServletRequest request,@RequestParam Map params){ + this.lawsComplianceBoardService.exportComplianceResultDetail(response,request,params); + } } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/mapper/LawsComplianceBoardMapper.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/mapper/LawsComplianceBoardMapper.java index cc7849ae8..3cbc308d1 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/mapper/LawsComplianceBoardMapper.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/mapper/LawsComplianceBoardMapper.java @@ -8,7 +8,7 @@ import java.util.Map; public interface LawsComplianceBoardMapper { /** - * 查询出 启动过 设计、prehomo、验证符合性、法规技术评估、法规意见收集其中一个流程 的数据 + * 分页查询出 启动过 设计、prehomo、验证符合性、法规技术评估、法规意见收集其中一个流程 的数据 * @param page * @param params * @return @@ -21,4 +21,11 @@ public interface LawsComplianceBoardMapper { * @return */ List> queryComplianceResultList(@Param("params") Map params); + + /** + * 查询出 启动过 设计、prehomo、验证符合性、法规技术评估、法规意见收集其中一个流程 的数据列表 + * @param params + * @return + */ + List> queryList(Map params); } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/mapper/xml/LawsComplianceBoardMapper.xml b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/mapper/xml/LawsComplianceBoardMapper.xml index 08027e0bf..84fbb04fa 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/mapper/xml/LawsComplianceBoardMapper.xml +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/mapper/xml/LawsComplianceBoardMapper.xml @@ -62,4 +62,41 @@ and pni.project_name like CONCAT(CONCAT('%',#{params.projectName}),'%') + + + + + where 1=1 + + + and id ${idOperator} #{id} + + + and type ${typeOperator} #{type} + + + diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/ILawsComplianceBoardService.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/ILawsComplianceBoardService.java index 12260ef23..f3aea42f7 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/ILawsComplianceBoardService.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/ILawsComplianceBoardService.java @@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.jero.common.api.vo.Result; import net.sf.json.JSONObject; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import java.util.Map; public interface ILawsComplianceBoardService { @@ -15,4 +17,20 @@ public interface ILawsComplianceBoardService { * @return */ JSONObject queryComplianceResultList(Map params); + + /** + * 导出符合性结果 + * @param response + * @param request + * @param params + */ + void exportComplianceResult(HttpServletResponse response, HttpServletRequest request, Map params); + + /** + * 导出符合性结果明细 + * @param response + * @param request + * @param params + */ + void exportComplianceResultDetail(HttpServletResponse response, HttpServletRequest request, Map params); } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/LawsComplianceBoardServiceImpl.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/LawsComplianceBoardServiceImpl.java index c95840dda..a477675b0 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/LawsComplianceBoardServiceImpl.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/service/impl/LawsComplianceBoardServiceImpl.java @@ -3,6 +3,8 @@ package com.jero.modules.project.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.jero.common.constant.enums.CutEnum; +import com.jero.common.exception.JeroBootException; import com.jero.modules.document.enums.FieldTypeEnum; import com.jero.modules.document.service.IBussDocumentLibraryEOService; import com.jero.modules.document.vo.QueryConditionVO; @@ -16,12 +18,19 @@ import com.jero.modules.system.util.StringUtils; import net.sf.json.JSONObject; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; +import org.apache.poi.hssf.usermodel.HSSFSheet; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.ss.usermodel.*; import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.*; +import java.util.Arrays; import java.util.List; import java.util.Map; @@ -83,6 +92,145 @@ public class LawsComplianceBoardServiceImpl implements ILawsComplianceBoardServi return result; } + @Override + public void exportComplianceResult(HttpServletResponse response, HttpServletRequest request, Map params) { + String cut = (String) params.get("cut"); + String condition = this.getConditionStr(params); + params.put("condition",condition); + List> exportData = this.lawsComplianceBoardMapper.queryList(params); + if(CollectionUtils.isNotEmpty(exportData)){ + String title = ""; + String fileName = ""; + if(StringUtils.equals(cut, CutEnum.CN.getValue())){ + title = "编号,标题,状态,技术领域,责任领域,相关项目,设计符合性,Pre-Homo确认,验证符合性"; + fileName = "符合性结果" + ".xlsx"; + }else if(StringUtils.equals(cut,CutEnum.EN.getValue())){ + title = "Serial number,Title,State,Technology territory,Responsible Field,Relevant project,Design conformance,Pre-Homo Confirm,Verify conformance"; + fileName = "Compliance results" + ".xlsx"; + } + OutputStream os = null; + HSSFWorkbook workbook = new HSSFWorkbook(); + + try { + response.setHeader("Content-Disposition", + "attachment; filename=" + fileName); + response.setContentType("application/force-download"); + + HSSFSheet sheet = workbook.createSheet("sheet1"); + + CellStyle titleCellStyle = workbook.createCellStyle(); + titleCellStyle.setAlignment(HorizontalAlignment.CENTER);//垂直居中 + titleCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);//水平居中 + titleCellStyle.setWrapText(true);//自动换行 + + //创建表头 + String[] firstLineTitleArr = title.split(","); + Row firstRow = sheet.createRow(0); + + //设置居中、表头值。 + for (int i = 0; i <= firstLineTitleArr.length; i++){ + Cell cell = firstRow.createCell(i); + cell.setCellStyle(titleCellStyle); + cell.setCellValue(firstLineTitleArr[i]); + } + + //设置导出数据 + if(CollectionUtils.isNotEmpty(exportData)) { + int rowIndex = 1; + for (int dataIndex = 0; dataIndex < exportData.size(); dataIndex++) { + Row dataRow = sheet.createRow(rowIndex); + dataRow.createCell(0).setCellValue(exportData.get(dataIndex).get("serialNumber").toString()); + dataRow.createCell(1).setCellValue(exportData.get(dataIndex).get("title").toString()); + dataRow.createCell(2).setCellValue(exportData.get(dataIndex).get("state").toString()); + dataRow.createCell(3).setCellValue(exportData.get(dataIndex).get("technologyTerritory").toString()); + + dataRow.createCell(4).setCellValue(exportData.get(dataIndex).get("dutyTerritory").toString()); + dataRow.createCell(5).setCellValue(exportData.get(dataIndex).get("projectName").toString()); + dataRow.createCell(6).setCellValue(exportData.get(dataIndex).get("designStatus").toString()); + dataRow.createCell(7).setCellValue(exportData.get(dataIndex).get("prehomoStats").toString()); + dataRow.createCell(8).setCellValue(exportData.get(dataIndex).get("verifyStatus").toString()); + rowIndex ++; + } + } + os = response.getOutputStream(); + workbook.write(os); + os.flush(); + }catch (IOException ex){ + if(CutEnum.CN.getValue().equals(cut)){ + throw new JeroBootException("下载文件失败"); + }else{ + throw new JeroBootException("Failed to download file"); + } + } + } + } + + @Override + public void exportComplianceResultDetail(HttpServletResponse response, HttpServletRequest request, Map params) { + String cut = (String) params.get("cut"); + List> exportData = this.lawsComplianceBoardMapper.queryComplianceResultList(params); + if(CollectionUtils.isNotEmpty(exportData)){ + String title = ""; + String fileName = ""; + if(StringUtils.equals(cut, CutEnum.CN.getValue())){ + title = "责任领域,相关项目,设计符合性,Pre-Homo确认,验证符合性"; + fileName = "符合性结果" + ".xlsx"; + }else if(StringUtils.equals(cut,CutEnum.EN.getValue())){ + title = "Responsible Field,Relevant project,Design conformance,Pre-Homo Confirm,Verify conformance"; + fileName = "Compliance results" + ".xlsx"; + } + OutputStream os = null; + HSSFWorkbook workbook = new HSSFWorkbook(); + + try { + response.setHeader("Content-Disposition", + "attachment; filename=" + fileName); + response.setContentType("application/force-download"); + + HSSFSheet sheet = workbook.createSheet("sheet1"); + + CellStyle titleCellStyle = workbook.createCellStyle(); + titleCellStyle.setAlignment(HorizontalAlignment.CENTER);//垂直居中 + titleCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);//水平居中 + titleCellStyle.setWrapText(true);//自动换行 + + //创建表头 + String[] firstLineTitleArr = title.split(","); + Row firstRow = sheet.createRow(0); + + //设置居中、表头值。 + for (int i = 0; i <= firstLineTitleArr.length; i++){ + Cell cell = firstRow.createCell(i); + cell.setCellStyle(titleCellStyle); + cell.setCellValue(firstLineTitleArr[i]); + } + + //设置导出数据 + if(CollectionUtils.isNotEmpty(exportData)) { + int rowIndex = 1; + for (int dataIndex = 0; dataIndex < exportData.size(); dataIndex++) { + Row dataRow = sheet.createRow(rowIndex); + dataRow.createCell(0).setCellValue(exportData.get(dataIndex).get("dutyTerritory").toString()); + dataRow.createCell(1).setCellValue(exportData.get(dataIndex).get("projectName").toString()); + dataRow.createCell(2).setCellValue(exportData.get(dataIndex).get("designStatus").toString()); + dataRow.createCell(3).setCellValue(exportData.get(dataIndex).get("prehomoStats").toString()); + dataRow.createCell(4).setCellValue(exportData.get(dataIndex).get("verifyStatus").toString()); + rowIndex ++; + } + } + os = response.getOutputStream(); + workbook.write(os); + os.flush(); + }catch (IOException ex){ + if(CutEnum.CN.getValue().equals(cut)){ + throw new JeroBootException("下载文件失败"); + }else{ + throw new JeroBootException("Failed to download file"); + } + } + } + } + @NotNull public String getConditionStr(Map parameter) { @@ -184,6 +332,19 @@ public class LawsComplianceBoardServiceImpl implements ILawsComplianceBoardServi } } + String ids = (String) parameter.get("ids"); + if(StringUtils.isNotEmpty(ids)){ + List idList = Arrays.asList(ids.split(",")); + String idStr = ""; + for (String id : idList) { + idStr += "'"+id+"',"; + } + if(StringUtils.isNotEmpty(idStr)){ + idStr = idStr.substring(0,idStr.length()-1); + conditionSb.append(" and id in("+idStr+")"); + } + } + //处理列表表头排序 /*if (StringUtils.isNotBlank((String) parameter.get("orderByField"))) { conditionSb.append(" order by " + (String) parameter.get("orderByField")); diff --git a/jero-web/src/common/lang/en-us.js b/jero-web/src/common/lang/en-us.js index 6330d07f4..3d6d5c93d 100644 --- a/jero-web/src/common/lang/en-us.js +++ b/jero-web/src/common/lang/en-us.js @@ -1151,6 +1151,9 @@ module.exports = { CommentsCollectionResultsForReference:'Comments Collection Results For Reference', TechnicalEvaluationResultsForReference:'Technical Evaluation Results For Reference', ComplianceConfirmationRecord:'Compliance Confirmation Record', + noComparisonDocumentSelected:'No comparison document selected', + RemarkInfo:'Remarks Info', + initiateDocumentComparison:'Initiate Document Comparison', Deriveconformanceresults:'Derive Conformance Results', Regulatorycompliancekanban:'Regulatory Compliance Kanban', } \ No newline at end of file diff --git a/jero-web/src/common/lang/zh-cn.js b/jero-web/src/common/lang/zh-cn.js index 0772fdc44..18530b213 100644 --- a/jero-web/src/common/lang/zh-cn.js +++ b/jero-web/src/common/lang/zh-cn.js @@ -1157,4 +1157,7 @@ module.exports = { ComplianceConfirmationRecord:'符合性确认记录', Deriveconformanceresults:'导出符合性结果', Regulatorycompliancekanban:'法规符合性看板', + noComparisonDocumentSelected:'未选择对比文档', + RemarkInfo:'备注信息', + initiateDocumentComparison:'发起文档对比', } \ No newline at end of file diff --git a/jero-web/src/components/layouts/TabLayout.vue b/jero-web/src/components/layouts/TabLayout.vue index 216d49f12..42889f88b 100644 --- a/jero-web/src/components/layouts/TabLayout.vue +++ b/jero-web/src/components/layouts/TabLayout.vue @@ -97,6 +97,7 @@ this.$route.path == '/handshakeProcess' || this.$route.path == '/projectStatusAndProgress' || this.$route.path == '/TaskPlanList' || + this.$route.path == '/initiateDocumentComparison' || this.$route.path == '/evaluationProcess' || this.$route.path == '/evaluationResultsClause' || this.$route.path == '/evaluationResultsWhole' || diff --git a/jero-web/src/config/router.config.js b/jero-web/src/config/router.config.js index 648696c1d..827486c44 100644 --- a/jero-web/src/config/router.config.js +++ b/jero-web/src/config/router.config.js @@ -382,6 +382,11 @@ export const constantRouterMap = [ name: 'evaluationProcess', component: () => import(/* webpackChunkName: "user" */ '@/views/processCenter/processForm/evaluationProcess/index') }, + { + path: '/initiateDocumentComparison', + name: 'initiateDocumentComparison', + component: () => import(/* webpackChunkName: "user" */ '@/views/documentTools/documentComparison/components/initiateComparison') + }, { path: '/handshakeProcess', name: 'handshakeProcess', diff --git a/jero-web/src/views/documentTools/documentComparison/components/initiateComparison.vue b/jero-web/src/views/documentTools/documentComparison/components/initiateComparison.vue new file mode 100644 index 000000000..5d8f4bae2 --- /dev/null +++ b/jero-web/src/views/documentTools/documentComparison/components/initiateComparison.vue @@ -0,0 +1,445 @@ + + + + + \ No newline at end of file diff --git a/jero-web/src/views/documentTools/documentComparison/index.vue b/jero-web/src/views/documentTools/documentComparison/index.vue index 9038af696..af40eee99 100644 --- a/jero-web/src/views/documentTools/documentComparison/index.vue +++ b/jero-web/src/views/documentTools/documentComparison/index.vue @@ -260,7 +260,10 @@ }, initiatingProcessClick(){ - + let newUrl = this.$router.resolve({ + path: '/initiateDocumentComparison', + }) + window.open(newUrl.href, '_blank') }, deleteData(val){ let _this = this