diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java index 114283e..d9b2bab 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java @@ -171,4 +171,12 @@ return ReturnUtil.success(super.packForBT(certificateReportService.certificateMonitorsById(customerSampleIdRequest))); } + + @ApiOperation("导出word打印") + @PostMapping("/exportFile") + public void exportOriginalFile(@RequestBody @Valid IdDTO idDTO, HttpServletResponse response) throws Exception { + certificateReportService.exportOriginalFile(idDTO, response); + } + + } diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java index 114283e..d9b2bab 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java @@ -171,4 +171,12 @@ return ReturnUtil.success(super.packForBT(certificateReportService.certificateMonitorsById(customerSampleIdRequest))); } + + @ApiOperation("导出word打印") + @PostMapping("/exportFile") + public void exportOriginalFile(@RequestBody @Valid IdDTO idDTO, HttpServletResponse response) throws Exception { + certificateReportService.exportOriginalFile(idDTO, response); + } + + } diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index cf47c98..9e7b379 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -177,7 +177,7 @@ return labExecutiveInfoService.sampleReceive(requestList); } - @ApiOperation("实验室检测-扫描增加任务到检测中(任务分发管理中待分发->检测中 / 实验室任务待检测->检测中)") + @ApiOperation("我的检测-扫描增加任务到检测中(任务分发管理中待分发->检测中 / 实验室任务待检测->检测中)") @PostMapping("/myExecutive/add") public ReturnDTO sampleAdd(@RequestBody @Valid List requestList) { return labExecutiveInfoService.sampleAdd(requestList); diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java index 114283e..d9b2bab 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java @@ -171,4 +171,12 @@ return ReturnUtil.success(super.packForBT(certificateReportService.certificateMonitorsById(customerSampleIdRequest))); } + + @ApiOperation("导出word打印") + @PostMapping("/exportFile") + public void exportOriginalFile(@RequestBody @Valid IdDTO idDTO, HttpServletResponse response) throws Exception { + certificateReportService.exportOriginalFile(idDTO, response); + } + + } diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index cf47c98..9e7b379 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -177,7 +177,7 @@ return labExecutiveInfoService.sampleReceive(requestList); } - @ApiOperation("实验室检测-扫描增加任务到检测中(任务分发管理中待分发->检测中 / 实验室任务待检测->检测中)") + @ApiOperation("我的检测-扫描增加任务到检测中(任务分发管理中待分发->检测中 / 实验室任务待检测->检测中)") @PostMapping("/myExecutive/add") public ReturnDTO sampleAdd(@RequestBody @Valid List requestList) { return labExecutiveInfoService.sampleAdd(requestList); diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java index db996fc..ad1431a 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java @@ -56,7 +56,7 @@ @ApiOperation("原始记录详情") @PostMapping("/detail") - public ReturnDTO originalDetail(@RequestBody @Valid IdDTO idDTO) throws Exception{ + public ReturnDTO originalDetail(@RequestBody @Valid IdDTO idDTO) throws Exception { Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); @@ -99,10 +99,16 @@ businessOriginalRecordService.originExport(request, response); } + @ApiOperation("导出word打印") + @PostMapping("/exportFile") + public void exportOriginalFile(@RequestBody @Valid IdDTO idDTO, HttpServletResponse response) throws Exception { + businessOriginalRecordService.exportOriginalFile(idDTO, response); + } + @ApiOperation("根据委托单id查询关联样品信息(分页)") @PostMapping("/samplesByOderId") - public ReturnDTO> samplesByOderId(@RequestBody @Valid OriginRecordRequest request) { + public ReturnDTO> samplesByOderId(@RequestBody @Valid OriginRecordRequest request) { Page page = PageFactory.defaultPage(); return ReturnUtil.success(super.packForBT(businessOriginalRecordService.samplesByOderId(page, request))); } diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java index 114283e..d9b2bab 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java @@ -171,4 +171,12 @@ return ReturnUtil.success(super.packForBT(certificateReportService.certificateMonitorsById(customerSampleIdRequest))); } + + @ApiOperation("导出word打印") + @PostMapping("/exportFile") + public void exportOriginalFile(@RequestBody @Valid IdDTO idDTO, HttpServletResponse response) throws Exception { + certificateReportService.exportOriginalFile(idDTO, response); + } + + } diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index cf47c98..9e7b379 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -177,7 +177,7 @@ return labExecutiveInfoService.sampleReceive(requestList); } - @ApiOperation("实验室检测-扫描增加任务到检测中(任务分发管理中待分发->检测中 / 实验室任务待检测->检测中)") + @ApiOperation("我的检测-扫描增加任务到检测中(任务分发管理中待分发->检测中 / 实验室任务待检测->检测中)") @PostMapping("/myExecutive/add") public ReturnDTO sampleAdd(@RequestBody @Valid List requestList) { return labExecutiveInfoService.sampleAdd(requestList); diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java index db996fc..ad1431a 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java @@ -56,7 +56,7 @@ @ApiOperation("原始记录详情") @PostMapping("/detail") - public ReturnDTO originalDetail(@RequestBody @Valid IdDTO idDTO) throws Exception{ + public ReturnDTO originalDetail(@RequestBody @Valid IdDTO idDTO) throws Exception { Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); @@ -99,10 +99,16 @@ businessOriginalRecordService.originExport(request, response); } + @ApiOperation("导出word打印") + @PostMapping("/exportFile") + public void exportOriginalFile(@RequestBody @Valid IdDTO idDTO, HttpServletResponse response) throws Exception { + businessOriginalRecordService.exportOriginalFile(idDTO, response); + } + @ApiOperation("根据委托单id查询关联样品信息(分页)") @PostMapping("/samplesByOderId") - public ReturnDTO> samplesByOderId(@RequestBody @Valid OriginRecordRequest request) { + public ReturnDTO> samplesByOderId(@RequestBody @Valid OriginRecordRequest request) { Page page = PageFactory.defaultPage(); return ReturnUtil.success(super.packForBT(businessOriginalRecordService.samplesByOderId(page, request))); } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java index 72500d6..81def5d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java @@ -5,4 +5,5 @@ String CALIBRATION_CERTIFICATE = "自有设备内部检校证书"; String TEST_ORDER = "检测委托单"; String CALIBRATION_ORDER = "检定或校准委托单"; + String ORIGINAL_RECORD = "原始记录"; } diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java index 114283e..d9b2bab 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java @@ -171,4 +171,12 @@ return ReturnUtil.success(super.packForBT(certificateReportService.certificateMonitorsById(customerSampleIdRequest))); } + + @ApiOperation("导出word打印") + @PostMapping("/exportFile") + public void exportOriginalFile(@RequestBody @Valid IdDTO idDTO, HttpServletResponse response) throws Exception { + certificateReportService.exportOriginalFile(idDTO, response); + } + + } diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index cf47c98..9e7b379 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -177,7 +177,7 @@ return labExecutiveInfoService.sampleReceive(requestList); } - @ApiOperation("实验室检测-扫描增加任务到检测中(任务分发管理中待分发->检测中 / 实验室任务待检测->检测中)") + @ApiOperation("我的检测-扫描增加任务到检测中(任务分发管理中待分发->检测中 / 实验室任务待检测->检测中)") @PostMapping("/myExecutive/add") public ReturnDTO sampleAdd(@RequestBody @Valid List requestList) { return labExecutiveInfoService.sampleAdd(requestList); diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java index db996fc..ad1431a 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java @@ -56,7 +56,7 @@ @ApiOperation("原始记录详情") @PostMapping("/detail") - public ReturnDTO originalDetail(@RequestBody @Valid IdDTO idDTO) throws Exception{ + public ReturnDTO originalDetail(@RequestBody @Valid IdDTO idDTO) throws Exception { Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); @@ -99,10 +99,16 @@ businessOriginalRecordService.originExport(request, response); } + @ApiOperation("导出word打印") + @PostMapping("/exportFile") + public void exportOriginalFile(@RequestBody @Valid IdDTO idDTO, HttpServletResponse response) throws Exception { + businessOriginalRecordService.exportOriginalFile(idDTO, response); + } + @ApiOperation("根据委托单id查询关联样品信息(分页)") @PostMapping("/samplesByOderId") - public ReturnDTO> samplesByOderId(@RequestBody @Valid OriginRecordRequest request) { + public ReturnDTO> samplesByOderId(@RequestBody @Valid OriginRecordRequest request) { Page page = PageFactory.defaultPage(); return ReturnUtil.success(super.packForBT(businessOriginalRecordService.samplesByOderId(page, request))); } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java index 72500d6..81def5d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java @@ -5,4 +5,5 @@ String CALIBRATION_CERTIFICATE = "自有设备内部检校证书"; String TEST_ORDER = "检测委托单"; String CALIBRATION_ORDER = "检定或校准委托单"; + String ORIGINAL_RECORD = "原始记录"; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java index f42477a..3f1a3b2 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java @@ -12,6 +12,7 @@ put(TEST_REPORT, TEST_REPORT_BEAN); //测试报告 put(TEST_ORDER, TEST_ORDER_BEAN); //检测委托单 put(CALIBRATION_ORDER, CALIBRATION_ORDER_BEAN); //检定或校准委托单 + put(ORIGINAL_RECORD, ORIGINAL_RECORD_BEAN); //检定或校准委托单 } }); diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java index 114283e..d9b2bab 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java @@ -171,4 +171,12 @@ return ReturnUtil.success(super.packForBT(certificateReportService.certificateMonitorsById(customerSampleIdRequest))); } + + @ApiOperation("导出word打印") + @PostMapping("/exportFile") + public void exportOriginalFile(@RequestBody @Valid IdDTO idDTO, HttpServletResponse response) throws Exception { + certificateReportService.exportOriginalFile(idDTO, response); + } + + } diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index cf47c98..9e7b379 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -177,7 +177,7 @@ return labExecutiveInfoService.sampleReceive(requestList); } - @ApiOperation("实验室检测-扫描增加任务到检测中(任务分发管理中待分发->检测中 / 实验室任务待检测->检测中)") + @ApiOperation("我的检测-扫描增加任务到检测中(任务分发管理中待分发->检测中 / 实验室任务待检测->检测中)") @PostMapping("/myExecutive/add") public ReturnDTO sampleAdd(@RequestBody @Valid List requestList) { return labExecutiveInfoService.sampleAdd(requestList); diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java index db996fc..ad1431a 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java @@ -56,7 +56,7 @@ @ApiOperation("原始记录详情") @PostMapping("/detail") - public ReturnDTO originalDetail(@RequestBody @Valid IdDTO idDTO) throws Exception{ + public ReturnDTO originalDetail(@RequestBody @Valid IdDTO idDTO) throws Exception { Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); @@ -99,10 +99,16 @@ businessOriginalRecordService.originExport(request, response); } + @ApiOperation("导出word打印") + @PostMapping("/exportFile") + public void exportOriginalFile(@RequestBody @Valid IdDTO idDTO, HttpServletResponse response) throws Exception { + businessOriginalRecordService.exportOriginalFile(idDTO, response); + } + @ApiOperation("根据委托单id查询关联样品信息(分页)") @PostMapping("/samplesByOderId") - public ReturnDTO> samplesByOderId(@RequestBody @Valid OriginRecordRequest request) { + public ReturnDTO> samplesByOderId(@RequestBody @Valid OriginRecordRequest request) { Page page = PageFactory.defaultPage(); return ReturnUtil.success(super.packForBT(businessOriginalRecordService.samplesByOderId(page, request))); } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java index 72500d6..81def5d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java @@ -5,4 +5,5 @@ String CALIBRATION_CERTIFICATE = "自有设备内部检校证书"; String TEST_ORDER = "检测委托单"; String CALIBRATION_ORDER = "检定或校准委托单"; + String ORIGINAL_RECORD = "原始记录"; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java index f42477a..3f1a3b2 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java @@ -12,6 +12,7 @@ put(TEST_REPORT, TEST_REPORT_BEAN); //测试报告 put(TEST_ORDER, TEST_ORDER_BEAN); //检测委托单 put(CALIBRATION_ORDER, CALIBRATION_ORDER_BEAN); //检定或校准委托单 + put(ORIGINAL_RECORD, ORIGINAL_RECORD_BEAN); //检定或校准委托单 } }); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java index bf23ba3..3f0b946 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java @@ -15,4 +15,6 @@ //检定或校准委托单 String CALIBRATION_ORDER_BEAN = "calibrationOrderBean"; + //校准证书 + String ORIGINAL_RECORD_BEAN = "originalRecord"; } diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java index 114283e..d9b2bab 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java @@ -171,4 +171,12 @@ return ReturnUtil.success(super.packForBT(certificateReportService.certificateMonitorsById(customerSampleIdRequest))); } + + @ApiOperation("导出word打印") + @PostMapping("/exportFile") + public void exportOriginalFile(@RequestBody @Valid IdDTO idDTO, HttpServletResponse response) throws Exception { + certificateReportService.exportOriginalFile(idDTO, response); + } + + } diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index cf47c98..9e7b379 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -177,7 +177,7 @@ return labExecutiveInfoService.sampleReceive(requestList); } - @ApiOperation("实验室检测-扫描增加任务到检测中(任务分发管理中待分发->检测中 / 实验室任务待检测->检测中)") + @ApiOperation("我的检测-扫描增加任务到检测中(任务分发管理中待分发->检测中 / 实验室任务待检测->检测中)") @PostMapping("/myExecutive/add") public ReturnDTO sampleAdd(@RequestBody @Valid List requestList) { return labExecutiveInfoService.sampleAdd(requestList); diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java index db996fc..ad1431a 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java @@ -56,7 +56,7 @@ @ApiOperation("原始记录详情") @PostMapping("/detail") - public ReturnDTO originalDetail(@RequestBody @Valid IdDTO idDTO) throws Exception{ + public ReturnDTO originalDetail(@RequestBody @Valid IdDTO idDTO) throws Exception { Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); @@ -99,10 +99,16 @@ businessOriginalRecordService.originExport(request, response); } + @ApiOperation("导出word打印") + @PostMapping("/exportFile") + public void exportOriginalFile(@RequestBody @Valid IdDTO idDTO, HttpServletResponse response) throws Exception { + businessOriginalRecordService.exportOriginalFile(idDTO, response); + } + @ApiOperation("根据委托单id查询关联样品信息(分页)") @PostMapping("/samplesByOderId") - public ReturnDTO> samplesByOderId(@RequestBody @Valid OriginRecordRequest request) { + public ReturnDTO> samplesByOderId(@RequestBody @Valid OriginRecordRequest request) { Page page = PageFactory.defaultPage(); return ReturnUtil.success(super.packForBT(businessOriginalRecordService.samplesByOderId(page, request))); } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java index 72500d6..81def5d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java @@ -5,4 +5,5 @@ String CALIBRATION_CERTIFICATE = "自有设备内部检校证书"; String TEST_ORDER = "检测委托单"; String CALIBRATION_ORDER = "检定或校准委托单"; + String ORIGINAL_RECORD = "原始记录"; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java index f42477a..3f1a3b2 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java @@ -12,6 +12,7 @@ put(TEST_REPORT, TEST_REPORT_BEAN); //测试报告 put(TEST_ORDER, TEST_ORDER_BEAN); //检测委托单 put(CALIBRATION_ORDER, CALIBRATION_ORDER_BEAN); //检定或校准委托单 + put(ORIGINAL_RECORD, ORIGINAL_RECORD_BEAN); //检定或校准委托单 } }); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java index bf23ba3..3f0b946 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java @@ -15,4 +15,6 @@ //检定或校准委托单 String CALIBRATION_ORDER_BEAN = "calibrationOrderBean"; + //校准证书 + String ORIGINAL_RECORD_BEAN = "originalRecord"; } diff --git a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml index 56b4ae5..79db2e5 100644 --- a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml @@ -43,9 +43,9 @@ - SELECT - orderId,id,sampleName,sampleModel,manufacturingNo,appendixDescn,measureContent,remark,sampleStatus,customerName,measurePeriod, + SELECT orderId,id,sampleName,sampleModel,manufacturingNo,appendixDescn,measureContent,remark,sampleStatus,customerName,measurePeriod, validDeadline,measureLastTime,sampleNo,orderCode,customerNo FROM ( SELECT sample_name AS "sampleName",sample_no AS "sampleNo",sample_model AS "sampleModel",manufacturing_no AS @@ -126,14 +125,14 @@ )csi JOIN ( - SELECT sample_status AS "sampleStatus",sample_id as "sampleId",order_id AS "orderId",order_code AS "orderCode" - FROM business_order_sample_relation bosr - JOIN ( - SELECT id,order_code - FROM business_order - WHERE customer_id=#{request.customerId} - )bo ON bo.id=bosr.order_id - WHERE interchange_id is null + SELECT sample_status AS "sampleStatus",sample_id as "sampleId",order_id AS "orderId",order_code AS "orderCode" + FROM business_order_sample_relation bosr + JOIN ( + SELECT id,order_code + FROM business_order + WHERE customer_id=#{request.customerId} + )bo ON bo.id=bosr.order_id + WHERE interchange_id is null )bor ON bor.sampleId=csi.id ORDER BY create_time DESC diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java index 114283e..d9b2bab 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java @@ -171,4 +171,12 @@ return ReturnUtil.success(super.packForBT(certificateReportService.certificateMonitorsById(customerSampleIdRequest))); } + + @ApiOperation("导出word打印") + @PostMapping("/exportFile") + public void exportOriginalFile(@RequestBody @Valid IdDTO idDTO, HttpServletResponse response) throws Exception { + certificateReportService.exportOriginalFile(idDTO, response); + } + + } diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index cf47c98..9e7b379 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -177,7 +177,7 @@ return labExecutiveInfoService.sampleReceive(requestList); } - @ApiOperation("实验室检测-扫描增加任务到检测中(任务分发管理中待分发->检测中 / 实验室任务待检测->检测中)") + @ApiOperation("我的检测-扫描增加任务到检测中(任务分发管理中待分发->检测中 / 实验室任务待检测->检测中)") @PostMapping("/myExecutive/add") public ReturnDTO sampleAdd(@RequestBody @Valid List requestList) { return labExecutiveInfoService.sampleAdd(requestList); diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java index db996fc..ad1431a 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java @@ -56,7 +56,7 @@ @ApiOperation("原始记录详情") @PostMapping("/detail") - public ReturnDTO originalDetail(@RequestBody @Valid IdDTO idDTO) throws Exception{ + public ReturnDTO originalDetail(@RequestBody @Valid IdDTO idDTO) throws Exception { Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); @@ -99,10 +99,16 @@ businessOriginalRecordService.originExport(request, response); } + @ApiOperation("导出word打印") + @PostMapping("/exportFile") + public void exportOriginalFile(@RequestBody @Valid IdDTO idDTO, HttpServletResponse response) throws Exception { + businessOriginalRecordService.exportOriginalFile(idDTO, response); + } + @ApiOperation("根据委托单id查询关联样品信息(分页)") @PostMapping("/samplesByOderId") - public ReturnDTO> samplesByOderId(@RequestBody @Valid OriginRecordRequest request) { + public ReturnDTO> samplesByOderId(@RequestBody @Valid OriginRecordRequest request) { Page page = PageFactory.defaultPage(); return ReturnUtil.success(super.packForBT(businessOriginalRecordService.samplesByOderId(page, request))); } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java index 72500d6..81def5d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java @@ -5,4 +5,5 @@ String CALIBRATION_CERTIFICATE = "自有设备内部检校证书"; String TEST_ORDER = "检测委托单"; String CALIBRATION_ORDER = "检定或校准委托单"; + String ORIGINAL_RECORD = "原始记录"; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java index f42477a..3f1a3b2 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java @@ -12,6 +12,7 @@ put(TEST_REPORT, TEST_REPORT_BEAN); //测试报告 put(TEST_ORDER, TEST_ORDER_BEAN); //检测委托单 put(CALIBRATION_ORDER, CALIBRATION_ORDER_BEAN); //检定或校准委托单 + put(ORIGINAL_RECORD, ORIGINAL_RECORD_BEAN); //检定或校准委托单 } }); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java index bf23ba3..3f0b946 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java @@ -15,4 +15,6 @@ //检定或校准委托单 String CALIBRATION_ORDER_BEAN = "calibrationOrderBean"; + //校准证书 + String ORIGINAL_RECORD_BEAN = "originalRecord"; } diff --git a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml index 56b4ae5..79db2e5 100644 --- a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml @@ -43,9 +43,9 @@ - SELECT - orderId,id,sampleName,sampleModel,manufacturingNo,appendixDescn,measureContent,remark,sampleStatus,customerName,measurePeriod, + SELECT orderId,id,sampleName,sampleModel,manufacturingNo,appendixDescn,measureContent,remark,sampleStatus,customerName,measurePeriod, validDeadline,measureLastTime,sampleNo,orderCode,customerNo FROM ( SELECT sample_name AS "sampleName",sample_no AS "sampleNo",sample_model AS "sampleModel",manufacturing_no AS @@ -126,14 +125,14 @@ )csi JOIN ( - SELECT sample_status AS "sampleStatus",sample_id as "sampleId",order_id AS "orderId",order_code AS "orderCode" - FROM business_order_sample_relation bosr - JOIN ( - SELECT id,order_code - FROM business_order - WHERE customer_id=#{request.customerId} - )bo ON bo.id=bosr.order_id - WHERE interchange_id is null + SELECT sample_status AS "sampleStatus",sample_id as "sampleId",order_id AS "orderId",order_code AS "orderCode" + FROM business_order_sample_relation bosr + JOIN ( + SELECT id,order_code + FROM business_order + WHERE customer_id=#{request.customerId} + )bo ON bo.id=bosr.order_id + WHERE interchange_id is null )bor ON bor.sampleId=csi.id ORDER BY create_time DESC diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java index 58ca71e..2306f21 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java @@ -228,4 +228,32 @@ @ApiModelProperty(value = "证书类型名称", dataType = "String") private String certificateReportTypeName; + @TableField("deliver_time") + @ApiModelProperty(value = "接收日期", dataType = "String") + private String deliverTime; + + @TableField("appearance_status") + @ApiModelProperty(value = "外观状态", dataType = "String") + private String appearanceStatus; + + @TableField("certificate_require") + @ApiModelProperty(value = "证书要求", dataType = "String") + private String certificateRequire; + + @TableField("sample_remark") + @ApiModelProperty(value = "样品备注", dataType = "String") + private String sampleRemark; + + @TableField("calibration_time") + @ApiModelProperty(value = "校验日期", dataType = "String") + private String calibrationTime; + + @TableField("verifier_id") + @ApiModelProperty(value = "联系人Id", dataType = "Long") + private Long verifierId; + + @TableField("verifier") + @ApiModelProperty(value = "联系人", dataType = "String") + private String verifier; + } diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java index 114283e..d9b2bab 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java @@ -171,4 +171,12 @@ return ReturnUtil.success(super.packForBT(certificateReportService.certificateMonitorsById(customerSampleIdRequest))); } + + @ApiOperation("导出word打印") + @PostMapping("/exportFile") + public void exportOriginalFile(@RequestBody @Valid IdDTO idDTO, HttpServletResponse response) throws Exception { + certificateReportService.exportOriginalFile(idDTO, response); + } + + } diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index cf47c98..9e7b379 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -177,7 +177,7 @@ return labExecutiveInfoService.sampleReceive(requestList); } - @ApiOperation("实验室检测-扫描增加任务到检测中(任务分发管理中待分发->检测中 / 实验室任务待检测->检测中)") + @ApiOperation("我的检测-扫描增加任务到检测中(任务分发管理中待分发->检测中 / 实验室任务待检测->检测中)") @PostMapping("/myExecutive/add") public ReturnDTO sampleAdd(@RequestBody @Valid List requestList) { return labExecutiveInfoService.sampleAdd(requestList); diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java index db996fc..ad1431a 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java @@ -56,7 +56,7 @@ @ApiOperation("原始记录详情") @PostMapping("/detail") - public ReturnDTO originalDetail(@RequestBody @Valid IdDTO idDTO) throws Exception{ + public ReturnDTO originalDetail(@RequestBody @Valid IdDTO idDTO) throws Exception { Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); @@ -99,10 +99,16 @@ businessOriginalRecordService.originExport(request, response); } + @ApiOperation("导出word打印") + @PostMapping("/exportFile") + public void exportOriginalFile(@RequestBody @Valid IdDTO idDTO, HttpServletResponse response) throws Exception { + businessOriginalRecordService.exportOriginalFile(idDTO, response); + } + @ApiOperation("根据委托单id查询关联样品信息(分页)") @PostMapping("/samplesByOderId") - public ReturnDTO> samplesByOderId(@RequestBody @Valid OriginRecordRequest request) { + public ReturnDTO> samplesByOderId(@RequestBody @Valid OriginRecordRequest request) { Page page = PageFactory.defaultPage(); return ReturnUtil.success(super.packForBT(businessOriginalRecordService.samplesByOderId(page, request))); } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java index 72500d6..81def5d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java @@ -5,4 +5,5 @@ String CALIBRATION_CERTIFICATE = "自有设备内部检校证书"; String TEST_ORDER = "检测委托单"; String CALIBRATION_ORDER = "检定或校准委托单"; + String ORIGINAL_RECORD = "原始记录"; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java index f42477a..3f1a3b2 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java @@ -12,6 +12,7 @@ put(TEST_REPORT, TEST_REPORT_BEAN); //测试报告 put(TEST_ORDER, TEST_ORDER_BEAN); //检测委托单 put(CALIBRATION_ORDER, CALIBRATION_ORDER_BEAN); //检定或校准委托单 + put(ORIGINAL_RECORD, ORIGINAL_RECORD_BEAN); //检定或校准委托单 } }); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java index bf23ba3..3f0b946 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java @@ -15,4 +15,6 @@ //检定或校准委托单 String CALIBRATION_ORDER_BEAN = "calibrationOrderBean"; + //校准证书 + String ORIGINAL_RECORD_BEAN = "originalRecord"; } diff --git a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml index 56b4ae5..79db2e5 100644 --- a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml @@ -43,9 +43,9 @@ - SELECT - orderId,id,sampleName,sampleModel,manufacturingNo,appendixDescn,measureContent,remark,sampleStatus,customerName,measurePeriod, + SELECT orderId,id,sampleName,sampleModel,manufacturingNo,appendixDescn,measureContent,remark,sampleStatus,customerName,measurePeriod, validDeadline,measureLastTime,sampleNo,orderCode,customerNo FROM ( SELECT sample_name AS "sampleName",sample_no AS "sampleNo",sample_model AS "sampleModel",manufacturing_no AS @@ -126,14 +125,14 @@ )csi JOIN ( - SELECT sample_status AS "sampleStatus",sample_id as "sampleId",order_id AS "orderId",order_code AS "orderCode" - FROM business_order_sample_relation bosr - JOIN ( - SELECT id,order_code - FROM business_order - WHERE customer_id=#{request.customerId} - )bo ON bo.id=bosr.order_id - WHERE interchange_id is null + SELECT sample_status AS "sampleStatus",sample_id as "sampleId",order_id AS "orderId",order_code AS "orderCode" + FROM business_order_sample_relation bosr + JOIN ( + SELECT id,order_code + FROM business_order + WHERE customer_id=#{request.customerId} + )bo ON bo.id=bosr.order_id + WHERE interchange_id is null )bor ON bor.sampleId=csi.id ORDER BY create_time DESC diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java index 58ca71e..2306f21 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java @@ -228,4 +228,32 @@ @ApiModelProperty(value = "证书类型名称", dataType = "String") private String certificateReportTypeName; + @TableField("deliver_time") + @ApiModelProperty(value = "接收日期", dataType = "String") + private String deliverTime; + + @TableField("appearance_status") + @ApiModelProperty(value = "外观状态", dataType = "String") + private String appearanceStatus; + + @TableField("certificate_require") + @ApiModelProperty(value = "证书要求", dataType = "String") + private String certificateRequire; + + @TableField("sample_remark") + @ApiModelProperty(value = "样品备注", dataType = "String") + private String sampleRemark; + + @TableField("calibration_time") + @ApiModelProperty(value = "校验日期", dataType = "String") + private String calibrationTime; + + @TableField("verifier_id") + @ApiModelProperty(value = "联系人Id", dataType = "Long") + private Long verifierId; + + @TableField("verifier") + @ApiModelProperty(value = "联系人", dataType = "String") + private String verifier; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java index d2647ac..e2e8349 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java @@ -137,6 +137,31 @@ @TableField("update_time") private String updateTime; + + + @TableField("deliver_time") + @ApiModelProperty(value = "接收时间", dataType = "String") + private String deliverTime; + + @TableField("appearance_status") + @ApiModelProperty(value = "外观状态", dataType = "String") + private String appearanceStatus; + + @TableField("certificate_require") + @ApiModelProperty(value = "证书要求", dataType = "String") + private String certificateRequire; + + @TableField("sample_remark") + @ApiModelProperty(value = "样品状态", dataType = "String") + private String sampleRemark; + + @TableField("verifier_id") + @ApiModelProperty(value = "校验人员ID", dataType = "Long") + private Long verifierId; + + @TableField(exist = false) + @ApiModelProperty(value = "校验人员", dataType = "String") + private String verifierName; /** * 委托单信息 */ diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java index 114283e..d9b2bab 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java @@ -171,4 +171,12 @@ return ReturnUtil.success(super.packForBT(certificateReportService.certificateMonitorsById(customerSampleIdRequest))); } + + @ApiOperation("导出word打印") + @PostMapping("/exportFile") + public void exportOriginalFile(@RequestBody @Valid IdDTO idDTO, HttpServletResponse response) throws Exception { + certificateReportService.exportOriginalFile(idDTO, response); + } + + } diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index cf47c98..9e7b379 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -177,7 +177,7 @@ return labExecutiveInfoService.sampleReceive(requestList); } - @ApiOperation("实验室检测-扫描增加任务到检测中(任务分发管理中待分发->检测中 / 实验室任务待检测->检测中)") + @ApiOperation("我的检测-扫描增加任务到检测中(任务分发管理中待分发->检测中 / 实验室任务待检测->检测中)") @PostMapping("/myExecutive/add") public ReturnDTO sampleAdd(@RequestBody @Valid List requestList) { return labExecutiveInfoService.sampleAdd(requestList); diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java index db996fc..ad1431a 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java @@ -56,7 +56,7 @@ @ApiOperation("原始记录详情") @PostMapping("/detail") - public ReturnDTO originalDetail(@RequestBody @Valid IdDTO idDTO) throws Exception{ + public ReturnDTO originalDetail(@RequestBody @Valid IdDTO idDTO) throws Exception { Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); @@ -99,10 +99,16 @@ businessOriginalRecordService.originExport(request, response); } + @ApiOperation("导出word打印") + @PostMapping("/exportFile") + public void exportOriginalFile(@RequestBody @Valid IdDTO idDTO, HttpServletResponse response) throws Exception { + businessOriginalRecordService.exportOriginalFile(idDTO, response); + } + @ApiOperation("根据委托单id查询关联样品信息(分页)") @PostMapping("/samplesByOderId") - public ReturnDTO> samplesByOderId(@RequestBody @Valid OriginRecordRequest request) { + public ReturnDTO> samplesByOderId(@RequestBody @Valid OriginRecordRequest request) { Page page = PageFactory.defaultPage(); return ReturnUtil.success(super.packForBT(businessOriginalRecordService.samplesByOderId(page, request))); } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java index 72500d6..81def5d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java @@ -5,4 +5,5 @@ String CALIBRATION_CERTIFICATE = "自有设备内部检校证书"; String TEST_ORDER = "检测委托单"; String CALIBRATION_ORDER = "检定或校准委托单"; + String ORIGINAL_RECORD = "原始记录"; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java index f42477a..3f1a3b2 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java @@ -12,6 +12,7 @@ put(TEST_REPORT, TEST_REPORT_BEAN); //测试报告 put(TEST_ORDER, TEST_ORDER_BEAN); //检测委托单 put(CALIBRATION_ORDER, CALIBRATION_ORDER_BEAN); //检定或校准委托单 + put(ORIGINAL_RECORD, ORIGINAL_RECORD_BEAN); //检定或校准委托单 } }); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java index bf23ba3..3f0b946 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java @@ -15,4 +15,6 @@ //检定或校准委托单 String CALIBRATION_ORDER_BEAN = "calibrationOrderBean"; + //校准证书 + String ORIGINAL_RECORD_BEAN = "originalRecord"; } diff --git a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml index 56b4ae5..79db2e5 100644 --- a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml @@ -43,9 +43,9 @@ - SELECT - orderId,id,sampleName,sampleModel,manufacturingNo,appendixDescn,measureContent,remark,sampleStatus,customerName,measurePeriod, + SELECT orderId,id,sampleName,sampleModel,manufacturingNo,appendixDescn,measureContent,remark,sampleStatus,customerName,measurePeriod, validDeadline,measureLastTime,sampleNo,orderCode,customerNo FROM ( SELECT sample_name AS "sampleName",sample_no AS "sampleNo",sample_model AS "sampleModel",manufacturing_no AS @@ -126,14 +125,14 @@ )csi JOIN ( - SELECT sample_status AS "sampleStatus",sample_id as "sampleId",order_id AS "orderId",order_code AS "orderCode" - FROM business_order_sample_relation bosr - JOIN ( - SELECT id,order_code - FROM business_order - WHERE customer_id=#{request.customerId} - )bo ON bo.id=bosr.order_id - WHERE interchange_id is null + SELECT sample_status AS "sampleStatus",sample_id as "sampleId",order_id AS "orderId",order_code AS "orderCode" + FROM business_order_sample_relation bosr + JOIN ( + SELECT id,order_code + FROM business_order + WHERE customer_id=#{request.customerId} + )bo ON bo.id=bosr.order_id + WHERE interchange_id is null )bor ON bor.sampleId=csi.id ORDER BY create_time DESC diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java index 58ca71e..2306f21 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java @@ -228,4 +228,32 @@ @ApiModelProperty(value = "证书类型名称", dataType = "String") private String certificateReportTypeName; + @TableField("deliver_time") + @ApiModelProperty(value = "接收日期", dataType = "String") + private String deliverTime; + + @TableField("appearance_status") + @ApiModelProperty(value = "外观状态", dataType = "String") + private String appearanceStatus; + + @TableField("certificate_require") + @ApiModelProperty(value = "证书要求", dataType = "String") + private String certificateRequire; + + @TableField("sample_remark") + @ApiModelProperty(value = "样品备注", dataType = "String") + private String sampleRemark; + + @TableField("calibration_time") + @ApiModelProperty(value = "校验日期", dataType = "String") + private String calibrationTime; + + @TableField("verifier_id") + @ApiModelProperty(value = "联系人Id", dataType = "Long") + private Long verifierId; + + @TableField("verifier") + @ApiModelProperty(value = "联系人", dataType = "String") + private String verifier; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java index d2647ac..e2e8349 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java @@ -137,6 +137,31 @@ @TableField("update_time") private String updateTime; + + + @TableField("deliver_time") + @ApiModelProperty(value = "接收时间", dataType = "String") + private String deliverTime; + + @TableField("appearance_status") + @ApiModelProperty(value = "外观状态", dataType = "String") + private String appearanceStatus; + + @TableField("certificate_require") + @ApiModelProperty(value = "证书要求", dataType = "String") + private String certificateRequire; + + @TableField("sample_remark") + @ApiModelProperty(value = "样品状态", dataType = "String") + private String sampleRemark; + + @TableField("verifier_id") + @ApiModelProperty(value = "校验人员ID", dataType = "Long") + private Long verifierId; + + @TableField(exist = false) + @ApiModelProperty(value = "校验人员", dataType = "String") + private String verifierName; /** * 委托单信息 */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java index a558165..c7ae4d4 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; import com.casic.missiles.constants.MeterDictCode; +import io.swagger.annotations.Api; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.NoArgsConstructor; @@ -76,6 +77,10 @@ @ApiModelProperty(value = " 客户特殊要求", dataType = "String") private String specialRequire; + @TableField(exist = false) + @ApiModelProperty(value = "接收时间", dataType = "String") + private String deliverTime; + @ApiModelProperty(value = " 检定方式", dataType = "String") @DictCodeField(message = "检定方式不合法", cacheName = MeterDictCode.MEASURE_TYPE) diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java index 114283e..d9b2bab 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java @@ -171,4 +171,12 @@ return ReturnUtil.success(super.packForBT(certificateReportService.certificateMonitorsById(customerSampleIdRequest))); } + + @ApiOperation("导出word打印") + @PostMapping("/exportFile") + public void exportOriginalFile(@RequestBody @Valid IdDTO idDTO, HttpServletResponse response) throws Exception { + certificateReportService.exportOriginalFile(idDTO, response); + } + + } diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index cf47c98..9e7b379 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -177,7 +177,7 @@ return labExecutiveInfoService.sampleReceive(requestList); } - @ApiOperation("实验室检测-扫描增加任务到检测中(任务分发管理中待分发->检测中 / 实验室任务待检测->检测中)") + @ApiOperation("我的检测-扫描增加任务到检测中(任务分发管理中待分发->检测中 / 实验室任务待检测->检测中)") @PostMapping("/myExecutive/add") public ReturnDTO sampleAdd(@RequestBody @Valid List requestList) { return labExecutiveInfoService.sampleAdd(requestList); diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java index db996fc..ad1431a 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java @@ -56,7 +56,7 @@ @ApiOperation("原始记录详情") @PostMapping("/detail") - public ReturnDTO originalDetail(@RequestBody @Valid IdDTO idDTO) throws Exception{ + public ReturnDTO originalDetail(@RequestBody @Valid IdDTO idDTO) throws Exception { Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); @@ -99,10 +99,16 @@ businessOriginalRecordService.originExport(request, response); } + @ApiOperation("导出word打印") + @PostMapping("/exportFile") + public void exportOriginalFile(@RequestBody @Valid IdDTO idDTO, HttpServletResponse response) throws Exception { + businessOriginalRecordService.exportOriginalFile(idDTO, response); + } + @ApiOperation("根据委托单id查询关联样品信息(分页)") @PostMapping("/samplesByOderId") - public ReturnDTO> samplesByOderId(@RequestBody @Valid OriginRecordRequest request) { + public ReturnDTO> samplesByOderId(@RequestBody @Valid OriginRecordRequest request) { Page page = PageFactory.defaultPage(); return ReturnUtil.success(super.packForBT(businessOriginalRecordService.samplesByOderId(page, request))); } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java index 72500d6..81def5d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java @@ -5,4 +5,5 @@ String CALIBRATION_CERTIFICATE = "自有设备内部检校证书"; String TEST_ORDER = "检测委托单"; String CALIBRATION_ORDER = "检定或校准委托单"; + String ORIGINAL_RECORD = "原始记录"; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java index f42477a..3f1a3b2 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java @@ -12,6 +12,7 @@ put(TEST_REPORT, TEST_REPORT_BEAN); //测试报告 put(TEST_ORDER, TEST_ORDER_BEAN); //检测委托单 put(CALIBRATION_ORDER, CALIBRATION_ORDER_BEAN); //检定或校准委托单 + put(ORIGINAL_RECORD, ORIGINAL_RECORD_BEAN); //检定或校准委托单 } }); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java index bf23ba3..3f0b946 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java @@ -15,4 +15,6 @@ //检定或校准委托单 String CALIBRATION_ORDER_BEAN = "calibrationOrderBean"; + //校准证书 + String ORIGINAL_RECORD_BEAN = "originalRecord"; } diff --git a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml index 56b4ae5..79db2e5 100644 --- a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml @@ -43,9 +43,9 @@ - SELECT - orderId,id,sampleName,sampleModel,manufacturingNo,appendixDescn,measureContent,remark,sampleStatus,customerName,measurePeriod, + SELECT orderId,id,sampleName,sampleModel,manufacturingNo,appendixDescn,measureContent,remark,sampleStatus,customerName,measurePeriod, validDeadline,measureLastTime,sampleNo,orderCode,customerNo FROM ( SELECT sample_name AS "sampleName",sample_no AS "sampleNo",sample_model AS "sampleModel",manufacturing_no AS @@ -126,14 +125,14 @@ )csi JOIN ( - SELECT sample_status AS "sampleStatus",sample_id as "sampleId",order_id AS "orderId",order_code AS "orderCode" - FROM business_order_sample_relation bosr - JOIN ( - SELECT id,order_code - FROM business_order - WHERE customer_id=#{request.customerId} - )bo ON bo.id=bosr.order_id - WHERE interchange_id is null + SELECT sample_status AS "sampleStatus",sample_id as "sampleId",order_id AS "orderId",order_code AS "orderCode" + FROM business_order_sample_relation bosr + JOIN ( + SELECT id,order_code + FROM business_order + WHERE customer_id=#{request.customerId} + )bo ON bo.id=bosr.order_id + WHERE interchange_id is null )bor ON bor.sampleId=csi.id ORDER BY create_time DESC diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java index 58ca71e..2306f21 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java @@ -228,4 +228,32 @@ @ApiModelProperty(value = "证书类型名称", dataType = "String") private String certificateReportTypeName; + @TableField("deliver_time") + @ApiModelProperty(value = "接收日期", dataType = "String") + private String deliverTime; + + @TableField("appearance_status") + @ApiModelProperty(value = "外观状态", dataType = "String") + private String appearanceStatus; + + @TableField("certificate_require") + @ApiModelProperty(value = "证书要求", dataType = "String") + private String certificateRequire; + + @TableField("sample_remark") + @ApiModelProperty(value = "样品备注", dataType = "String") + private String sampleRemark; + + @TableField("calibration_time") + @ApiModelProperty(value = "校验日期", dataType = "String") + private String calibrationTime; + + @TableField("verifier_id") + @ApiModelProperty(value = "联系人Id", dataType = "Long") + private Long verifierId; + + @TableField("verifier") + @ApiModelProperty(value = "联系人", dataType = "String") + private String verifier; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java index d2647ac..e2e8349 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java @@ -137,6 +137,31 @@ @TableField("update_time") private String updateTime; + + + @TableField("deliver_time") + @ApiModelProperty(value = "接收时间", dataType = "String") + private String deliverTime; + + @TableField("appearance_status") + @ApiModelProperty(value = "外观状态", dataType = "String") + private String appearanceStatus; + + @TableField("certificate_require") + @ApiModelProperty(value = "证书要求", dataType = "String") + private String certificateRequire; + + @TableField("sample_remark") + @ApiModelProperty(value = "样品状态", dataType = "String") + private String sampleRemark; + + @TableField("verifier_id") + @ApiModelProperty(value = "校验人员ID", dataType = "Long") + private Long verifierId; + + @TableField(exist = false) + @ApiModelProperty(value = "校验人员", dataType = "String") + private String verifierName; /** * 委托单信息 */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java index a558165..c7ae4d4 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; import com.casic.missiles.constants.MeterDictCode; +import io.swagger.annotations.Api; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.NoArgsConstructor; @@ -76,6 +77,10 @@ @ApiModelProperty(value = " 客户特殊要求", dataType = "String") private String specialRequire; + @TableField(exist = false) + @ApiModelProperty(value = "接收时间", dataType = "String") + private String deliverTime; + @ApiModelProperty(value = " 检定方式", dataType = "String") @DictCodeField(message = "检定方式不合法", cacheName = MeterDictCode.MEASURE_TYPE) diff --git a/casic-metering-service/pom.xml b/casic-metering-service/pom.xml index 6aede7a..aa8aa4d 100644 --- a/casic-metering-service/pom.xml +++ b/casic-metering-service/pom.xml @@ -23,12 +23,24 @@ com.casic casic-metering-model 2.0.0 + + + org.apache.poi + poi-ooxml + + com.casic casic-metering-common 2.0.0 + + + org.apache.poi + poi-ooxml + + org.springframework.boot @@ -48,13 +60,22 @@ com.new.reader reader-api - com.deepoove poi-tl 1.10.0 + + + org.apache.logging.log4j + log4j-api + + - + + org.apache.poi + poi + 4.1.2 + com.aspose aspose-words diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java index 114283e..d9b2bab 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java @@ -171,4 +171,12 @@ return ReturnUtil.success(super.packForBT(certificateReportService.certificateMonitorsById(customerSampleIdRequest))); } + + @ApiOperation("导出word打印") + @PostMapping("/exportFile") + public void exportOriginalFile(@RequestBody @Valid IdDTO idDTO, HttpServletResponse response) throws Exception { + certificateReportService.exportOriginalFile(idDTO, response); + } + + } diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index cf47c98..9e7b379 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -177,7 +177,7 @@ return labExecutiveInfoService.sampleReceive(requestList); } - @ApiOperation("实验室检测-扫描增加任务到检测中(任务分发管理中待分发->检测中 / 实验室任务待检测->检测中)") + @ApiOperation("我的检测-扫描增加任务到检测中(任务分发管理中待分发->检测中 / 实验室任务待检测->检测中)") @PostMapping("/myExecutive/add") public ReturnDTO sampleAdd(@RequestBody @Valid List requestList) { return labExecutiveInfoService.sampleAdd(requestList); diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java index db996fc..ad1431a 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java @@ -56,7 +56,7 @@ @ApiOperation("原始记录详情") @PostMapping("/detail") - public ReturnDTO originalDetail(@RequestBody @Valid IdDTO idDTO) throws Exception{ + public ReturnDTO originalDetail(@RequestBody @Valid IdDTO idDTO) throws Exception { Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); @@ -99,10 +99,16 @@ businessOriginalRecordService.originExport(request, response); } + @ApiOperation("导出word打印") + @PostMapping("/exportFile") + public void exportOriginalFile(@RequestBody @Valid IdDTO idDTO, HttpServletResponse response) throws Exception { + businessOriginalRecordService.exportOriginalFile(idDTO, response); + } + @ApiOperation("根据委托单id查询关联样品信息(分页)") @PostMapping("/samplesByOderId") - public ReturnDTO> samplesByOderId(@RequestBody @Valid OriginRecordRequest request) { + public ReturnDTO> samplesByOderId(@RequestBody @Valid OriginRecordRequest request) { Page page = PageFactory.defaultPage(); return ReturnUtil.success(super.packForBT(businessOriginalRecordService.samplesByOderId(page, request))); } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java index 72500d6..81def5d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java @@ -5,4 +5,5 @@ String CALIBRATION_CERTIFICATE = "自有设备内部检校证书"; String TEST_ORDER = "检测委托单"; String CALIBRATION_ORDER = "检定或校准委托单"; + String ORIGINAL_RECORD = "原始记录"; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java index f42477a..3f1a3b2 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java @@ -12,6 +12,7 @@ put(TEST_REPORT, TEST_REPORT_BEAN); //测试报告 put(TEST_ORDER, TEST_ORDER_BEAN); //检测委托单 put(CALIBRATION_ORDER, CALIBRATION_ORDER_BEAN); //检定或校准委托单 + put(ORIGINAL_RECORD, ORIGINAL_RECORD_BEAN); //检定或校准委托单 } }); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java index bf23ba3..3f0b946 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java @@ -15,4 +15,6 @@ //检定或校准委托单 String CALIBRATION_ORDER_BEAN = "calibrationOrderBean"; + //校准证书 + String ORIGINAL_RECORD_BEAN = "originalRecord"; } diff --git a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml index 56b4ae5..79db2e5 100644 --- a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml @@ -43,9 +43,9 @@ - SELECT - orderId,id,sampleName,sampleModel,manufacturingNo,appendixDescn,measureContent,remark,sampleStatus,customerName,measurePeriod, + SELECT orderId,id,sampleName,sampleModel,manufacturingNo,appendixDescn,measureContent,remark,sampleStatus,customerName,measurePeriod, validDeadline,measureLastTime,sampleNo,orderCode,customerNo FROM ( SELECT sample_name AS "sampleName",sample_no AS "sampleNo",sample_model AS "sampleModel",manufacturing_no AS @@ -126,14 +125,14 @@ )csi JOIN ( - SELECT sample_status AS "sampleStatus",sample_id as "sampleId",order_id AS "orderId",order_code AS "orderCode" - FROM business_order_sample_relation bosr - JOIN ( - SELECT id,order_code - FROM business_order - WHERE customer_id=#{request.customerId} - )bo ON bo.id=bosr.order_id - WHERE interchange_id is null + SELECT sample_status AS "sampleStatus",sample_id as "sampleId",order_id AS "orderId",order_code AS "orderCode" + FROM business_order_sample_relation bosr + JOIN ( + SELECT id,order_code + FROM business_order + WHERE customer_id=#{request.customerId} + )bo ON bo.id=bosr.order_id + WHERE interchange_id is null )bor ON bor.sampleId=csi.id ORDER BY create_time DESC diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java index 58ca71e..2306f21 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java @@ -228,4 +228,32 @@ @ApiModelProperty(value = "证书类型名称", dataType = "String") private String certificateReportTypeName; + @TableField("deliver_time") + @ApiModelProperty(value = "接收日期", dataType = "String") + private String deliverTime; + + @TableField("appearance_status") + @ApiModelProperty(value = "外观状态", dataType = "String") + private String appearanceStatus; + + @TableField("certificate_require") + @ApiModelProperty(value = "证书要求", dataType = "String") + private String certificateRequire; + + @TableField("sample_remark") + @ApiModelProperty(value = "样品备注", dataType = "String") + private String sampleRemark; + + @TableField("calibration_time") + @ApiModelProperty(value = "校验日期", dataType = "String") + private String calibrationTime; + + @TableField("verifier_id") + @ApiModelProperty(value = "联系人Id", dataType = "Long") + private Long verifierId; + + @TableField("verifier") + @ApiModelProperty(value = "联系人", dataType = "String") + private String verifier; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java index d2647ac..e2e8349 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java @@ -137,6 +137,31 @@ @TableField("update_time") private String updateTime; + + + @TableField("deliver_time") + @ApiModelProperty(value = "接收时间", dataType = "String") + private String deliverTime; + + @TableField("appearance_status") + @ApiModelProperty(value = "外观状态", dataType = "String") + private String appearanceStatus; + + @TableField("certificate_require") + @ApiModelProperty(value = "证书要求", dataType = "String") + private String certificateRequire; + + @TableField("sample_remark") + @ApiModelProperty(value = "样品状态", dataType = "String") + private String sampleRemark; + + @TableField("verifier_id") + @ApiModelProperty(value = "校验人员ID", dataType = "Long") + private Long verifierId; + + @TableField(exist = false) + @ApiModelProperty(value = "校验人员", dataType = "String") + private String verifierName; /** * 委托单信息 */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java index a558165..c7ae4d4 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; import com.casic.missiles.constants.MeterDictCode; +import io.swagger.annotations.Api; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.NoArgsConstructor; @@ -76,6 +77,10 @@ @ApiModelProperty(value = " 客户特殊要求", dataType = "String") private String specialRequire; + @TableField(exist = false) + @ApiModelProperty(value = "接收时间", dataType = "String") + private String deliverTime; + @ApiModelProperty(value = " 检定方式", dataType = "String") @DictCodeField(message = "检定方式不合法", cacheName = MeterDictCode.MEASURE_TYPE) diff --git a/casic-metering-service/pom.xml b/casic-metering-service/pom.xml index 6aede7a..aa8aa4d 100644 --- a/casic-metering-service/pom.xml +++ b/casic-metering-service/pom.xml @@ -23,12 +23,24 @@ com.casic casic-metering-model 2.0.0 + + + org.apache.poi + poi-ooxml + + com.casic casic-metering-common 2.0.0 + + + org.apache.poi + poi-ooxml + + org.springframework.boot @@ -48,13 +60,22 @@ com.new.reader reader-api - com.deepoove poi-tl 1.10.0 + + + org.apache.logging.log4j + log4j-api + + - + + org.apache.poi + poi + 4.1.2 + com.aspose aspose-words diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java index 020624d..b9509c2 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java @@ -1,16 +1,19 @@ package com.casic.missiles.service.Impl.business; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.BaseApprovalSubmitRequest; +import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.business.certificate.CertificateMonitorResponse; @@ -41,6 +44,7 @@ import com.casic.missiles.service.business.IBusinessCertificateReportService; import com.casic.missiles.service.business.IBusinessOriginalRecordService; import com.casic.missiles.service.flowable.ApprovalOperateService; +import com.casic.missiles.service.listeners.register.PrintFileRegister; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; import com.casic.missiles.utils.PageUtil; @@ -55,9 +59,14 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; import java.util.*; import java.util.stream.Collectors; +import static com.casic.missiles.enums.business.FilePrintTypeEnum.CALIBRATION_CERTIFICATE; +import static com.casic.missiles.enums.notifyevent.PrintFileDataBeanNameAliasEnum.CALIBRATION_CERTIFICATE_BEAN; +import static com.casic.missiles.enums.notifyevent.PrintFileDataBeanNameAliasEnum.ORIGINAL_RECORD_BEAN; + /** *

* 业务管理-证书报告 服务实现类 @@ -88,6 +97,10 @@ private CustomerSampleServiceImpl sampleService; @Autowired private MeterStaffMapper staffMapper; + @Autowired + private PrintFileRegister printFileRegister; + @Autowired + private AbstractPermissionContext permissionContext; /** * 保存证书报告信息 @@ -326,6 +339,24 @@ return certificateMonitorResponsePage; } + @Override + public void exportOriginalFile(@Valid IdDTO idDTO, HttpServletResponse response) { + BusinessCertificateReport certificateReport = this.baseMapper.detailById(idDTO.getId()); + getApprovalSignName(certificateReport); + if (certificateReport.getOriginalRecordId() != null) { + try { + certificateReport.setBusinessOriginalRecord(originalRecordService.originalDetail(certificateReport.getOriginalRecordId())); + if (Objects.isNull(certificateReport.getBusinessOriginalRecord())) { + certificateReport.setBusinessOriginalRecord(new BusinessOriginalRecord()); + } + certificateReport.setCertificateReportTypeName(dictService.getDictNameByCode(MeterDictEnum.CERTIFICATION_CLASS, certificateReport.getCertificateReportType())); + printFileRegister.registerPrintFile(certificateReport,CALIBRATION_CERTIFICATE,response); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + private List handleApprovalStatus(Page page, CertificateReportApprovalRequest request) { List approvalList = new ArrayList<>(); List businessKeys = new ArrayList<>(); @@ -382,7 +413,7 @@ //合并未通过-拒绝和未通过-驳回 approvalList.addAll(rejectApprovalList); //分页处理 - if(!CollectionUtils.isEmpty(approvalList)) { + if (!CollectionUtils.isEmpty(approvalList)) { Page pages = PageUtil.getPages((int) page.getCurrent(), (int) page.getSize(), approvalList); page.setTotal(approvalList.size()); approvalList = pages.getRecords(); @@ -439,7 +470,7 @@ String approvalSignNames = ""; String[] approvalSignIds = certificateReport.getApprovalSignIds().split(","); for (String approvalSignId : approvalSignIds) { - approvalSignNames += approvalSignNameMap.get(Long.valueOf(approvalSignId))+ ","; + approvalSignNames += approvalSignNameMap.get(Long.valueOf(approvalSignId)) + ","; } approvalSignNames = approvalSignNames.substring(0, approvalSignNames.length() - 1); certificateReport.setApprovalSignName(approvalSignNames); diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java index 114283e..d9b2bab 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java @@ -171,4 +171,12 @@ return ReturnUtil.success(super.packForBT(certificateReportService.certificateMonitorsById(customerSampleIdRequest))); } + + @ApiOperation("导出word打印") + @PostMapping("/exportFile") + public void exportOriginalFile(@RequestBody @Valid IdDTO idDTO, HttpServletResponse response) throws Exception { + certificateReportService.exportOriginalFile(idDTO, response); + } + + } diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index cf47c98..9e7b379 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -177,7 +177,7 @@ return labExecutiveInfoService.sampleReceive(requestList); } - @ApiOperation("实验室检测-扫描增加任务到检测中(任务分发管理中待分发->检测中 / 实验室任务待检测->检测中)") + @ApiOperation("我的检测-扫描增加任务到检测中(任务分发管理中待分发->检测中 / 实验室任务待检测->检测中)") @PostMapping("/myExecutive/add") public ReturnDTO sampleAdd(@RequestBody @Valid List requestList) { return labExecutiveInfoService.sampleAdd(requestList); diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java index db996fc..ad1431a 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java @@ -56,7 +56,7 @@ @ApiOperation("原始记录详情") @PostMapping("/detail") - public ReturnDTO originalDetail(@RequestBody @Valid IdDTO idDTO) throws Exception{ + public ReturnDTO originalDetail(@RequestBody @Valid IdDTO idDTO) throws Exception { Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); @@ -99,10 +99,16 @@ businessOriginalRecordService.originExport(request, response); } + @ApiOperation("导出word打印") + @PostMapping("/exportFile") + public void exportOriginalFile(@RequestBody @Valid IdDTO idDTO, HttpServletResponse response) throws Exception { + businessOriginalRecordService.exportOriginalFile(idDTO, response); + } + @ApiOperation("根据委托单id查询关联样品信息(分页)") @PostMapping("/samplesByOderId") - public ReturnDTO> samplesByOderId(@RequestBody @Valid OriginRecordRequest request) { + public ReturnDTO> samplesByOderId(@RequestBody @Valid OriginRecordRequest request) { Page page = PageFactory.defaultPage(); return ReturnUtil.success(super.packForBT(businessOriginalRecordService.samplesByOderId(page, request))); } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java index 72500d6..81def5d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java @@ -5,4 +5,5 @@ String CALIBRATION_CERTIFICATE = "自有设备内部检校证书"; String TEST_ORDER = "检测委托单"; String CALIBRATION_ORDER = "检定或校准委托单"; + String ORIGINAL_RECORD = "原始记录"; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java index f42477a..3f1a3b2 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java @@ -12,6 +12,7 @@ put(TEST_REPORT, TEST_REPORT_BEAN); //测试报告 put(TEST_ORDER, TEST_ORDER_BEAN); //检测委托单 put(CALIBRATION_ORDER, CALIBRATION_ORDER_BEAN); //检定或校准委托单 + put(ORIGINAL_RECORD, ORIGINAL_RECORD_BEAN); //检定或校准委托单 } }); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java index bf23ba3..3f0b946 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java @@ -15,4 +15,6 @@ //检定或校准委托单 String CALIBRATION_ORDER_BEAN = "calibrationOrderBean"; + //校准证书 + String ORIGINAL_RECORD_BEAN = "originalRecord"; } diff --git a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml index 56b4ae5..79db2e5 100644 --- a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml @@ -43,9 +43,9 @@ - SELECT - orderId,id,sampleName,sampleModel,manufacturingNo,appendixDescn,measureContent,remark,sampleStatus,customerName,measurePeriod, + SELECT orderId,id,sampleName,sampleModel,manufacturingNo,appendixDescn,measureContent,remark,sampleStatus,customerName,measurePeriod, validDeadline,measureLastTime,sampleNo,orderCode,customerNo FROM ( SELECT sample_name AS "sampleName",sample_no AS "sampleNo",sample_model AS "sampleModel",manufacturing_no AS @@ -126,14 +125,14 @@ )csi JOIN ( - SELECT sample_status AS "sampleStatus",sample_id as "sampleId",order_id AS "orderId",order_code AS "orderCode" - FROM business_order_sample_relation bosr - JOIN ( - SELECT id,order_code - FROM business_order - WHERE customer_id=#{request.customerId} - )bo ON bo.id=bosr.order_id - WHERE interchange_id is null + SELECT sample_status AS "sampleStatus",sample_id as "sampleId",order_id AS "orderId",order_code AS "orderCode" + FROM business_order_sample_relation bosr + JOIN ( + SELECT id,order_code + FROM business_order + WHERE customer_id=#{request.customerId} + )bo ON bo.id=bosr.order_id + WHERE interchange_id is null )bor ON bor.sampleId=csi.id ORDER BY create_time DESC diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java index 58ca71e..2306f21 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java @@ -228,4 +228,32 @@ @ApiModelProperty(value = "证书类型名称", dataType = "String") private String certificateReportTypeName; + @TableField("deliver_time") + @ApiModelProperty(value = "接收日期", dataType = "String") + private String deliverTime; + + @TableField("appearance_status") + @ApiModelProperty(value = "外观状态", dataType = "String") + private String appearanceStatus; + + @TableField("certificate_require") + @ApiModelProperty(value = "证书要求", dataType = "String") + private String certificateRequire; + + @TableField("sample_remark") + @ApiModelProperty(value = "样品备注", dataType = "String") + private String sampleRemark; + + @TableField("calibration_time") + @ApiModelProperty(value = "校验日期", dataType = "String") + private String calibrationTime; + + @TableField("verifier_id") + @ApiModelProperty(value = "联系人Id", dataType = "Long") + private Long verifierId; + + @TableField("verifier") + @ApiModelProperty(value = "联系人", dataType = "String") + private String verifier; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java index d2647ac..e2e8349 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java @@ -137,6 +137,31 @@ @TableField("update_time") private String updateTime; + + + @TableField("deliver_time") + @ApiModelProperty(value = "接收时间", dataType = "String") + private String deliverTime; + + @TableField("appearance_status") + @ApiModelProperty(value = "外观状态", dataType = "String") + private String appearanceStatus; + + @TableField("certificate_require") + @ApiModelProperty(value = "证书要求", dataType = "String") + private String certificateRequire; + + @TableField("sample_remark") + @ApiModelProperty(value = "样品状态", dataType = "String") + private String sampleRemark; + + @TableField("verifier_id") + @ApiModelProperty(value = "校验人员ID", dataType = "Long") + private Long verifierId; + + @TableField(exist = false) + @ApiModelProperty(value = "校验人员", dataType = "String") + private String verifierName; /** * 委托单信息 */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java index a558165..c7ae4d4 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; import com.casic.missiles.constants.MeterDictCode; +import io.swagger.annotations.Api; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.NoArgsConstructor; @@ -76,6 +77,10 @@ @ApiModelProperty(value = " 客户特殊要求", dataType = "String") private String specialRequire; + @TableField(exist = false) + @ApiModelProperty(value = "接收时间", dataType = "String") + private String deliverTime; + @ApiModelProperty(value = " 检定方式", dataType = "String") @DictCodeField(message = "检定方式不合法", cacheName = MeterDictCode.MEASURE_TYPE) diff --git a/casic-metering-service/pom.xml b/casic-metering-service/pom.xml index 6aede7a..aa8aa4d 100644 --- a/casic-metering-service/pom.xml +++ b/casic-metering-service/pom.xml @@ -23,12 +23,24 @@ com.casic casic-metering-model 2.0.0 + + + org.apache.poi + poi-ooxml + + com.casic casic-metering-common 2.0.0 + + + org.apache.poi + poi-ooxml + + org.springframework.boot @@ -48,13 +60,22 @@ com.new.reader reader-api - com.deepoove poi-tl 1.10.0 + + + org.apache.logging.log4j + log4j-api + + - + + org.apache.poi + poi + 4.1.2 + com.aspose aspose-words diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java index 020624d..b9509c2 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java @@ -1,16 +1,19 @@ package com.casic.missiles.service.Impl.business; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.BaseApprovalSubmitRequest; +import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.business.certificate.CertificateMonitorResponse; @@ -41,6 +44,7 @@ import com.casic.missiles.service.business.IBusinessCertificateReportService; import com.casic.missiles.service.business.IBusinessOriginalRecordService; import com.casic.missiles.service.flowable.ApprovalOperateService; +import com.casic.missiles.service.listeners.register.PrintFileRegister; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; import com.casic.missiles.utils.PageUtil; @@ -55,9 +59,14 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; import java.util.*; import java.util.stream.Collectors; +import static com.casic.missiles.enums.business.FilePrintTypeEnum.CALIBRATION_CERTIFICATE; +import static com.casic.missiles.enums.notifyevent.PrintFileDataBeanNameAliasEnum.CALIBRATION_CERTIFICATE_BEAN; +import static com.casic.missiles.enums.notifyevent.PrintFileDataBeanNameAliasEnum.ORIGINAL_RECORD_BEAN; + /** *

* 业务管理-证书报告 服务实现类 @@ -88,6 +97,10 @@ private CustomerSampleServiceImpl sampleService; @Autowired private MeterStaffMapper staffMapper; + @Autowired + private PrintFileRegister printFileRegister; + @Autowired + private AbstractPermissionContext permissionContext; /** * 保存证书报告信息 @@ -326,6 +339,24 @@ return certificateMonitorResponsePage; } + @Override + public void exportOriginalFile(@Valid IdDTO idDTO, HttpServletResponse response) { + BusinessCertificateReport certificateReport = this.baseMapper.detailById(idDTO.getId()); + getApprovalSignName(certificateReport); + if (certificateReport.getOriginalRecordId() != null) { + try { + certificateReport.setBusinessOriginalRecord(originalRecordService.originalDetail(certificateReport.getOriginalRecordId())); + if (Objects.isNull(certificateReport.getBusinessOriginalRecord())) { + certificateReport.setBusinessOriginalRecord(new BusinessOriginalRecord()); + } + certificateReport.setCertificateReportTypeName(dictService.getDictNameByCode(MeterDictEnum.CERTIFICATION_CLASS, certificateReport.getCertificateReportType())); + printFileRegister.registerPrintFile(certificateReport,CALIBRATION_CERTIFICATE,response); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + private List handleApprovalStatus(Page page, CertificateReportApprovalRequest request) { List approvalList = new ArrayList<>(); List businessKeys = new ArrayList<>(); @@ -382,7 +413,7 @@ //合并未通过-拒绝和未通过-驳回 approvalList.addAll(rejectApprovalList); //分页处理 - if(!CollectionUtils.isEmpty(approvalList)) { + if (!CollectionUtils.isEmpty(approvalList)) { Page pages = PageUtil.getPages((int) page.getCurrent(), (int) page.getSize(), approvalList); page.setTotal(approvalList.size()); approvalList = pages.getRecords(); @@ -439,7 +470,7 @@ String approvalSignNames = ""; String[] approvalSignIds = certificateReport.getApprovalSignIds().split(","); for (String approvalSignId : approvalSignIds) { - approvalSignNames += approvalSignNameMap.get(Long.valueOf(approvalSignId))+ ","; + approvalSignNames += approvalSignNameMap.get(Long.valueOf(approvalSignId)) + ","; } approvalSignNames = approvalSignNames.substring(0, approvalSignNames.length() - 1); certificateReport.setApprovalSignName(approvalSignNames); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOriginalRecordServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOriginalRecordServiceImpl.java index 1c602b8..84d5f00 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOriginalRecordServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOriginalRecordServiceImpl.java @@ -1,12 +1,15 @@ package com.casic.missiles.service.Impl.business; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.business.originRecord.OriginRecordRequest; @@ -19,18 +22,32 @@ import com.casic.missiles.model.business.BusinessOriginalRecord; import com.casic.missiles.model.customer.CustomerSampleInfo; import com.casic.missiles.model.system.SystemTemplate; +import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.modular.system.service.IUserService; +import com.casic.missiles.modular.system.service.impl.UserServiceImpl; import com.casic.missiles.service.business.*; import com.casic.missiles.service.customer.CustomerSampleService; +import com.casic.missiles.service.listeners.register.PrintFileRegister; import com.casic.missiles.service.system.ISystemTemplateService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; +import liquibase.pro.packaged.A; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; +import org.springframework.util.ObjectUtils; +import org.springframework.util.StringUtils; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.util.List; +import java.util.Map; +import java.util.stream.Collector; +import java.util.stream.Collectors; + +import static com.casic.missiles.enums.business.FilePrintTypeEnum.ORIGINAL_RECORD; +import static com.casic.missiles.enums.notifyevent.PrintFileDataBeanNameAliasEnum.ORIGINAL_RECORD_BEAN; /** *

@@ -58,11 +75,19 @@ private IBaseExportService iBaseExportService; @Resource private ISystemTemplateService templateService; + @Autowired + private PrintFileRegister printFileRegister; + @Autowired + private AbstractPermissionContext permissionContext; @Override public Page originListPage(Page page, OriginRecordRequest request) throws Exception { // 获取列表 + List userList = permissionContext.getUserService().list(null); + Map userMap = userList.stream().collect( + Collectors.toMap(User::getId, User::getName) + ); Page originalRecordPage = this.baseMapper.originListPage(page, request); if (!CollectionUtils.isEmpty(originalRecordPage.getRecords())) { for (BusinessOriginalRecord record : originalRecordPage.getRecords()) { @@ -70,6 +95,9 @@ if (!StrUtil.isBlankIfStr(record.getSampleId())) { record.setCustomerSampleInfo(customerSampleService.sampleDetail(record.getSampleId())); } + if (!ObjectUtils.isEmpty(record.getVerifierId())) { + record.setVerifierName(userMap.get(record.getVerifierId())); + } } } return originalRecordPage; @@ -101,7 +129,10 @@ businessOriginalRecord.setFileList(originalRecordFileRelationService.getFilesByOriginalRecordId(id)); //查询是否有关联的监测设备 businessOriginalRecord.setEquipmentInfoList(originalRecordEquipmentRelationService.getEquipmentsByOriginalRecordId(id)); - + User user = permissionContext.getUserService().getById(businessOriginalRecord.getVerifierId()); + if (!ObjectUtils.isEmpty(user)) { + businessOriginalRecord.setVerifierName(user.getName()); + } //字典值转换 DictCodeUtils.convertDictCodeToName(businessOriginalRecord); @@ -181,6 +212,41 @@ } } + @Override + public void exportOriginalFile(IdDTO idDTO, HttpServletResponse response) throws Exception { + BusinessOriginalRecord businessOriginalRecord = this.baseMapper.selectById(idDTO.getId()); + if (businessOriginalRecord != null) { + //查询样品详情 + if (businessOriginalRecord.getSampleId() != null) { + businessOriginalRecord.setCustomerSampleInfo(customerSampleService.sampleDetail(businessOriginalRecord.getSampleId())); + } + //查询环境记录单详情 + if (businessOriginalRecord.getEnvironmentId() != null) { + businessOriginalRecord.setBusinessEnvironmentRecord(businessEnvironmentRecordService.environmentDetail(businessOriginalRecord.getEnvironmentId())); + } + //查询委托单详情 + if (businessOriginalRecord.getOrderId() != null) { + businessOriginalRecord.setBusinessOrder(businessOrderService.orderDetail(businessOriginalRecord.getOrderId())); + } + + //查询是否有关联的计量文件 + businessOriginalRecord.setFileList(originalRecordFileRelationService.getFilesByOriginalRecordId(idDTO.getId())); + //查询是否有关联的监测设备 + businessOriginalRecord.setEquipmentInfoList(originalRecordEquipmentRelationService.getEquipmentsByOriginalRecordId(idDTO.getId())); + + //字典值转换 + DictCodeUtils.convertDictCodeToName(businessOriginalRecord); + + //显示模板名称 + if (null != businessOriginalRecord.getTemplateId()) { + SystemTemplate systemTemplate = templateService.getById(businessOriginalRecord.getTemplateId()); + if (systemTemplate != null) { + printFileRegister.registerPrintFile(businessOriginalRecord, ORIGINAL_RECORD, response); + } + } + } + } + private void initBusinessEnvironmentRecord(BusinessOriginalRecord businessOriginalRecord) { Long maxNo = this.baseMapper.selectMaxCode(); String originNo = NumberGeneratorUtil.getContactNo(PrefixCodeEnum.ORIGIN_PREFIX, maxNo); diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java index 114283e..d9b2bab 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java @@ -171,4 +171,12 @@ return ReturnUtil.success(super.packForBT(certificateReportService.certificateMonitorsById(customerSampleIdRequest))); } + + @ApiOperation("导出word打印") + @PostMapping("/exportFile") + public void exportOriginalFile(@RequestBody @Valid IdDTO idDTO, HttpServletResponse response) throws Exception { + certificateReportService.exportOriginalFile(idDTO, response); + } + + } diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index cf47c98..9e7b379 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -177,7 +177,7 @@ return labExecutiveInfoService.sampleReceive(requestList); } - @ApiOperation("实验室检测-扫描增加任务到检测中(任务分发管理中待分发->检测中 / 实验室任务待检测->检测中)") + @ApiOperation("我的检测-扫描增加任务到检测中(任务分发管理中待分发->检测中 / 实验室任务待检测->检测中)") @PostMapping("/myExecutive/add") public ReturnDTO sampleAdd(@RequestBody @Valid List requestList) { return labExecutiveInfoService.sampleAdd(requestList); diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java index db996fc..ad1431a 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java @@ -56,7 +56,7 @@ @ApiOperation("原始记录详情") @PostMapping("/detail") - public ReturnDTO originalDetail(@RequestBody @Valid IdDTO idDTO) throws Exception{ + public ReturnDTO originalDetail(@RequestBody @Valid IdDTO idDTO) throws Exception { Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); @@ -99,10 +99,16 @@ businessOriginalRecordService.originExport(request, response); } + @ApiOperation("导出word打印") + @PostMapping("/exportFile") + public void exportOriginalFile(@RequestBody @Valid IdDTO idDTO, HttpServletResponse response) throws Exception { + businessOriginalRecordService.exportOriginalFile(idDTO, response); + } + @ApiOperation("根据委托单id查询关联样品信息(分页)") @PostMapping("/samplesByOderId") - public ReturnDTO> samplesByOderId(@RequestBody @Valid OriginRecordRequest request) { + public ReturnDTO> samplesByOderId(@RequestBody @Valid OriginRecordRequest request) { Page page = PageFactory.defaultPage(); return ReturnUtil.success(super.packForBT(businessOriginalRecordService.samplesByOderId(page, request))); } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java index 72500d6..81def5d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java @@ -5,4 +5,5 @@ String CALIBRATION_CERTIFICATE = "自有设备内部检校证书"; String TEST_ORDER = "检测委托单"; String CALIBRATION_ORDER = "检定或校准委托单"; + String ORIGINAL_RECORD = "原始记录"; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java index f42477a..3f1a3b2 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java @@ -12,6 +12,7 @@ put(TEST_REPORT, TEST_REPORT_BEAN); //测试报告 put(TEST_ORDER, TEST_ORDER_BEAN); //检测委托单 put(CALIBRATION_ORDER, CALIBRATION_ORDER_BEAN); //检定或校准委托单 + put(ORIGINAL_RECORD, ORIGINAL_RECORD_BEAN); //检定或校准委托单 } }); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java index bf23ba3..3f0b946 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java @@ -15,4 +15,6 @@ //检定或校准委托单 String CALIBRATION_ORDER_BEAN = "calibrationOrderBean"; + //校准证书 + String ORIGINAL_RECORD_BEAN = "originalRecord"; } diff --git a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml index 56b4ae5..79db2e5 100644 --- a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml @@ -43,9 +43,9 @@ - SELECT - orderId,id,sampleName,sampleModel,manufacturingNo,appendixDescn,measureContent,remark,sampleStatus,customerName,measurePeriod, + SELECT orderId,id,sampleName,sampleModel,manufacturingNo,appendixDescn,measureContent,remark,sampleStatus,customerName,measurePeriod, validDeadline,measureLastTime,sampleNo,orderCode,customerNo FROM ( SELECT sample_name AS "sampleName",sample_no AS "sampleNo",sample_model AS "sampleModel",manufacturing_no AS @@ -126,14 +125,14 @@ )csi JOIN ( - SELECT sample_status AS "sampleStatus",sample_id as "sampleId",order_id AS "orderId",order_code AS "orderCode" - FROM business_order_sample_relation bosr - JOIN ( - SELECT id,order_code - FROM business_order - WHERE customer_id=#{request.customerId} - )bo ON bo.id=bosr.order_id - WHERE interchange_id is null + SELECT sample_status AS "sampleStatus",sample_id as "sampleId",order_id AS "orderId",order_code AS "orderCode" + FROM business_order_sample_relation bosr + JOIN ( + SELECT id,order_code + FROM business_order + WHERE customer_id=#{request.customerId} + )bo ON bo.id=bosr.order_id + WHERE interchange_id is null )bor ON bor.sampleId=csi.id ORDER BY create_time DESC diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java index 58ca71e..2306f21 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java @@ -228,4 +228,32 @@ @ApiModelProperty(value = "证书类型名称", dataType = "String") private String certificateReportTypeName; + @TableField("deliver_time") + @ApiModelProperty(value = "接收日期", dataType = "String") + private String deliverTime; + + @TableField("appearance_status") + @ApiModelProperty(value = "外观状态", dataType = "String") + private String appearanceStatus; + + @TableField("certificate_require") + @ApiModelProperty(value = "证书要求", dataType = "String") + private String certificateRequire; + + @TableField("sample_remark") + @ApiModelProperty(value = "样品备注", dataType = "String") + private String sampleRemark; + + @TableField("calibration_time") + @ApiModelProperty(value = "校验日期", dataType = "String") + private String calibrationTime; + + @TableField("verifier_id") + @ApiModelProperty(value = "联系人Id", dataType = "Long") + private Long verifierId; + + @TableField("verifier") + @ApiModelProperty(value = "联系人", dataType = "String") + private String verifier; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java index d2647ac..e2e8349 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java @@ -137,6 +137,31 @@ @TableField("update_time") private String updateTime; + + + @TableField("deliver_time") + @ApiModelProperty(value = "接收时间", dataType = "String") + private String deliverTime; + + @TableField("appearance_status") + @ApiModelProperty(value = "外观状态", dataType = "String") + private String appearanceStatus; + + @TableField("certificate_require") + @ApiModelProperty(value = "证书要求", dataType = "String") + private String certificateRequire; + + @TableField("sample_remark") + @ApiModelProperty(value = "样品状态", dataType = "String") + private String sampleRemark; + + @TableField("verifier_id") + @ApiModelProperty(value = "校验人员ID", dataType = "Long") + private Long verifierId; + + @TableField(exist = false) + @ApiModelProperty(value = "校验人员", dataType = "String") + private String verifierName; /** * 委托单信息 */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java index a558165..c7ae4d4 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; import com.casic.missiles.constants.MeterDictCode; +import io.swagger.annotations.Api; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.NoArgsConstructor; @@ -76,6 +77,10 @@ @ApiModelProperty(value = " 客户特殊要求", dataType = "String") private String specialRequire; + @TableField(exist = false) + @ApiModelProperty(value = "接收时间", dataType = "String") + private String deliverTime; + @ApiModelProperty(value = " 检定方式", dataType = "String") @DictCodeField(message = "检定方式不合法", cacheName = MeterDictCode.MEASURE_TYPE) diff --git a/casic-metering-service/pom.xml b/casic-metering-service/pom.xml index 6aede7a..aa8aa4d 100644 --- a/casic-metering-service/pom.xml +++ b/casic-metering-service/pom.xml @@ -23,12 +23,24 @@ com.casic casic-metering-model 2.0.0 + + + org.apache.poi + poi-ooxml + + com.casic casic-metering-common 2.0.0 + + + org.apache.poi + poi-ooxml + + org.springframework.boot @@ -48,13 +60,22 @@ com.new.reader reader-api - com.deepoove poi-tl 1.10.0 + + + org.apache.logging.log4j + log4j-api + + - + + org.apache.poi + poi + 4.1.2 + com.aspose aspose-words diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java index 020624d..b9509c2 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java @@ -1,16 +1,19 @@ package com.casic.missiles.service.Impl.business; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.BaseApprovalSubmitRequest; +import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.business.certificate.CertificateMonitorResponse; @@ -41,6 +44,7 @@ import com.casic.missiles.service.business.IBusinessCertificateReportService; import com.casic.missiles.service.business.IBusinessOriginalRecordService; import com.casic.missiles.service.flowable.ApprovalOperateService; +import com.casic.missiles.service.listeners.register.PrintFileRegister; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; import com.casic.missiles.utils.PageUtil; @@ -55,9 +59,14 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; import java.util.*; import java.util.stream.Collectors; +import static com.casic.missiles.enums.business.FilePrintTypeEnum.CALIBRATION_CERTIFICATE; +import static com.casic.missiles.enums.notifyevent.PrintFileDataBeanNameAliasEnum.CALIBRATION_CERTIFICATE_BEAN; +import static com.casic.missiles.enums.notifyevent.PrintFileDataBeanNameAliasEnum.ORIGINAL_RECORD_BEAN; + /** *

* 业务管理-证书报告 服务实现类 @@ -88,6 +97,10 @@ private CustomerSampleServiceImpl sampleService; @Autowired private MeterStaffMapper staffMapper; + @Autowired + private PrintFileRegister printFileRegister; + @Autowired + private AbstractPermissionContext permissionContext; /** * 保存证书报告信息 @@ -326,6 +339,24 @@ return certificateMonitorResponsePage; } + @Override + public void exportOriginalFile(@Valid IdDTO idDTO, HttpServletResponse response) { + BusinessCertificateReport certificateReport = this.baseMapper.detailById(idDTO.getId()); + getApprovalSignName(certificateReport); + if (certificateReport.getOriginalRecordId() != null) { + try { + certificateReport.setBusinessOriginalRecord(originalRecordService.originalDetail(certificateReport.getOriginalRecordId())); + if (Objects.isNull(certificateReport.getBusinessOriginalRecord())) { + certificateReport.setBusinessOriginalRecord(new BusinessOriginalRecord()); + } + certificateReport.setCertificateReportTypeName(dictService.getDictNameByCode(MeterDictEnum.CERTIFICATION_CLASS, certificateReport.getCertificateReportType())); + printFileRegister.registerPrintFile(certificateReport,CALIBRATION_CERTIFICATE,response); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + private List handleApprovalStatus(Page page, CertificateReportApprovalRequest request) { List approvalList = new ArrayList<>(); List businessKeys = new ArrayList<>(); @@ -382,7 +413,7 @@ //合并未通过-拒绝和未通过-驳回 approvalList.addAll(rejectApprovalList); //分页处理 - if(!CollectionUtils.isEmpty(approvalList)) { + if (!CollectionUtils.isEmpty(approvalList)) { Page pages = PageUtil.getPages((int) page.getCurrent(), (int) page.getSize(), approvalList); page.setTotal(approvalList.size()); approvalList = pages.getRecords(); @@ -439,7 +470,7 @@ String approvalSignNames = ""; String[] approvalSignIds = certificateReport.getApprovalSignIds().split(","); for (String approvalSignId : approvalSignIds) { - approvalSignNames += approvalSignNameMap.get(Long.valueOf(approvalSignId))+ ","; + approvalSignNames += approvalSignNameMap.get(Long.valueOf(approvalSignId)) + ","; } approvalSignNames = approvalSignNames.substring(0, approvalSignNames.length() - 1); certificateReport.setApprovalSignName(approvalSignNames); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOriginalRecordServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOriginalRecordServiceImpl.java index 1c602b8..84d5f00 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOriginalRecordServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOriginalRecordServiceImpl.java @@ -1,12 +1,15 @@ package com.casic.missiles.service.Impl.business; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.business.originRecord.OriginRecordRequest; @@ -19,18 +22,32 @@ import com.casic.missiles.model.business.BusinessOriginalRecord; import com.casic.missiles.model.customer.CustomerSampleInfo; import com.casic.missiles.model.system.SystemTemplate; +import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.modular.system.service.IUserService; +import com.casic.missiles.modular.system.service.impl.UserServiceImpl; import com.casic.missiles.service.business.*; import com.casic.missiles.service.customer.CustomerSampleService; +import com.casic.missiles.service.listeners.register.PrintFileRegister; import com.casic.missiles.service.system.ISystemTemplateService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; +import liquibase.pro.packaged.A; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; +import org.springframework.util.ObjectUtils; +import org.springframework.util.StringUtils; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.util.List; +import java.util.Map; +import java.util.stream.Collector; +import java.util.stream.Collectors; + +import static com.casic.missiles.enums.business.FilePrintTypeEnum.ORIGINAL_RECORD; +import static com.casic.missiles.enums.notifyevent.PrintFileDataBeanNameAliasEnum.ORIGINAL_RECORD_BEAN; /** *

@@ -58,11 +75,19 @@ private IBaseExportService iBaseExportService; @Resource private ISystemTemplateService templateService; + @Autowired + private PrintFileRegister printFileRegister; + @Autowired + private AbstractPermissionContext permissionContext; @Override public Page originListPage(Page page, OriginRecordRequest request) throws Exception { // 获取列表 + List userList = permissionContext.getUserService().list(null); + Map userMap = userList.stream().collect( + Collectors.toMap(User::getId, User::getName) + ); Page originalRecordPage = this.baseMapper.originListPage(page, request); if (!CollectionUtils.isEmpty(originalRecordPage.getRecords())) { for (BusinessOriginalRecord record : originalRecordPage.getRecords()) { @@ -70,6 +95,9 @@ if (!StrUtil.isBlankIfStr(record.getSampleId())) { record.setCustomerSampleInfo(customerSampleService.sampleDetail(record.getSampleId())); } + if (!ObjectUtils.isEmpty(record.getVerifierId())) { + record.setVerifierName(userMap.get(record.getVerifierId())); + } } } return originalRecordPage; @@ -101,7 +129,10 @@ businessOriginalRecord.setFileList(originalRecordFileRelationService.getFilesByOriginalRecordId(id)); //查询是否有关联的监测设备 businessOriginalRecord.setEquipmentInfoList(originalRecordEquipmentRelationService.getEquipmentsByOriginalRecordId(id)); - + User user = permissionContext.getUserService().getById(businessOriginalRecord.getVerifierId()); + if (!ObjectUtils.isEmpty(user)) { + businessOriginalRecord.setVerifierName(user.getName()); + } //字典值转换 DictCodeUtils.convertDictCodeToName(businessOriginalRecord); @@ -181,6 +212,41 @@ } } + @Override + public void exportOriginalFile(IdDTO idDTO, HttpServletResponse response) throws Exception { + BusinessOriginalRecord businessOriginalRecord = this.baseMapper.selectById(idDTO.getId()); + if (businessOriginalRecord != null) { + //查询样品详情 + if (businessOriginalRecord.getSampleId() != null) { + businessOriginalRecord.setCustomerSampleInfo(customerSampleService.sampleDetail(businessOriginalRecord.getSampleId())); + } + //查询环境记录单详情 + if (businessOriginalRecord.getEnvironmentId() != null) { + businessOriginalRecord.setBusinessEnvironmentRecord(businessEnvironmentRecordService.environmentDetail(businessOriginalRecord.getEnvironmentId())); + } + //查询委托单详情 + if (businessOriginalRecord.getOrderId() != null) { + businessOriginalRecord.setBusinessOrder(businessOrderService.orderDetail(businessOriginalRecord.getOrderId())); + } + + //查询是否有关联的计量文件 + businessOriginalRecord.setFileList(originalRecordFileRelationService.getFilesByOriginalRecordId(idDTO.getId())); + //查询是否有关联的监测设备 + businessOriginalRecord.setEquipmentInfoList(originalRecordEquipmentRelationService.getEquipmentsByOriginalRecordId(idDTO.getId())); + + //字典值转换 + DictCodeUtils.convertDictCodeToName(businessOriginalRecord); + + //显示模板名称 + if (null != businessOriginalRecord.getTemplateId()) { + SystemTemplate systemTemplate = templateService.getById(businessOriginalRecord.getTemplateId()); + if (systemTemplate != null) { + printFileRegister.registerPrintFile(businessOriginalRecord, ORIGINAL_RECORD, response); + } + } + } + } + private void initBusinessEnvironmentRecord(BusinessOriginalRecord businessOriginalRecord) { Long maxNo = this.baseMapper.selectMaxCode(); String originNo = NumberGeneratorUtil.getContactNo(PrefixCodeEnum.ORIGIN_PREFIX, maxNo); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/SystemTemplateUserRelationServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/SystemTemplateUserRelationServiceImpl.java index 315f0a2..493349b 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/SystemTemplateUserRelationServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/SystemTemplateUserRelationServiceImpl.java @@ -8,7 +8,7 @@ /** *

- * 原始记录/证书报告模板与用户关联表(原始记录/证书报告模板可使用人) 服务实现类 + * /证书报告模板与用户关联表(原始记录/证书报告模板可使用人) 服务实现类 *

* * @author wangpeng diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java index 114283e..d9b2bab 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java @@ -171,4 +171,12 @@ return ReturnUtil.success(super.packForBT(certificateReportService.certificateMonitorsById(customerSampleIdRequest))); } + + @ApiOperation("导出word打印") + @PostMapping("/exportFile") + public void exportOriginalFile(@RequestBody @Valid IdDTO idDTO, HttpServletResponse response) throws Exception { + certificateReportService.exportOriginalFile(idDTO, response); + } + + } diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index cf47c98..9e7b379 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -177,7 +177,7 @@ return labExecutiveInfoService.sampleReceive(requestList); } - @ApiOperation("实验室检测-扫描增加任务到检测中(任务分发管理中待分发->检测中 / 实验室任务待检测->检测中)") + @ApiOperation("我的检测-扫描增加任务到检测中(任务分发管理中待分发->检测中 / 实验室任务待检测->检测中)") @PostMapping("/myExecutive/add") public ReturnDTO sampleAdd(@RequestBody @Valid List requestList) { return labExecutiveInfoService.sampleAdd(requestList); diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java index db996fc..ad1431a 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java @@ -56,7 +56,7 @@ @ApiOperation("原始记录详情") @PostMapping("/detail") - public ReturnDTO originalDetail(@RequestBody @Valid IdDTO idDTO) throws Exception{ + public ReturnDTO originalDetail(@RequestBody @Valid IdDTO idDTO) throws Exception { Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); @@ -99,10 +99,16 @@ businessOriginalRecordService.originExport(request, response); } + @ApiOperation("导出word打印") + @PostMapping("/exportFile") + public void exportOriginalFile(@RequestBody @Valid IdDTO idDTO, HttpServletResponse response) throws Exception { + businessOriginalRecordService.exportOriginalFile(idDTO, response); + } + @ApiOperation("根据委托单id查询关联样品信息(分页)") @PostMapping("/samplesByOderId") - public ReturnDTO> samplesByOderId(@RequestBody @Valid OriginRecordRequest request) { + public ReturnDTO> samplesByOderId(@RequestBody @Valid OriginRecordRequest request) { Page page = PageFactory.defaultPage(); return ReturnUtil.success(super.packForBT(businessOriginalRecordService.samplesByOderId(page, request))); } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java index 72500d6..81def5d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java @@ -5,4 +5,5 @@ String CALIBRATION_CERTIFICATE = "自有设备内部检校证书"; String TEST_ORDER = "检测委托单"; String CALIBRATION_ORDER = "检定或校准委托单"; + String ORIGINAL_RECORD = "原始记录"; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java index f42477a..3f1a3b2 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java @@ -12,6 +12,7 @@ put(TEST_REPORT, TEST_REPORT_BEAN); //测试报告 put(TEST_ORDER, TEST_ORDER_BEAN); //检测委托单 put(CALIBRATION_ORDER, CALIBRATION_ORDER_BEAN); //检定或校准委托单 + put(ORIGINAL_RECORD, ORIGINAL_RECORD_BEAN); //检定或校准委托单 } }); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java index bf23ba3..3f0b946 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java @@ -15,4 +15,6 @@ //检定或校准委托单 String CALIBRATION_ORDER_BEAN = "calibrationOrderBean"; + //校准证书 + String ORIGINAL_RECORD_BEAN = "originalRecord"; } diff --git a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml index 56b4ae5..79db2e5 100644 --- a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml @@ -43,9 +43,9 @@ - SELECT - orderId,id,sampleName,sampleModel,manufacturingNo,appendixDescn,measureContent,remark,sampleStatus,customerName,measurePeriod, + SELECT orderId,id,sampleName,sampleModel,manufacturingNo,appendixDescn,measureContent,remark,sampleStatus,customerName,measurePeriod, validDeadline,measureLastTime,sampleNo,orderCode,customerNo FROM ( SELECT sample_name AS "sampleName",sample_no AS "sampleNo",sample_model AS "sampleModel",manufacturing_no AS @@ -126,14 +125,14 @@ )csi JOIN ( - SELECT sample_status AS "sampleStatus",sample_id as "sampleId",order_id AS "orderId",order_code AS "orderCode" - FROM business_order_sample_relation bosr - JOIN ( - SELECT id,order_code - FROM business_order - WHERE customer_id=#{request.customerId} - )bo ON bo.id=bosr.order_id - WHERE interchange_id is null + SELECT sample_status AS "sampleStatus",sample_id as "sampleId",order_id AS "orderId",order_code AS "orderCode" + FROM business_order_sample_relation bosr + JOIN ( + SELECT id,order_code + FROM business_order + WHERE customer_id=#{request.customerId} + )bo ON bo.id=bosr.order_id + WHERE interchange_id is null )bor ON bor.sampleId=csi.id ORDER BY create_time DESC diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java index 58ca71e..2306f21 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java @@ -228,4 +228,32 @@ @ApiModelProperty(value = "证书类型名称", dataType = "String") private String certificateReportTypeName; + @TableField("deliver_time") + @ApiModelProperty(value = "接收日期", dataType = "String") + private String deliverTime; + + @TableField("appearance_status") + @ApiModelProperty(value = "外观状态", dataType = "String") + private String appearanceStatus; + + @TableField("certificate_require") + @ApiModelProperty(value = "证书要求", dataType = "String") + private String certificateRequire; + + @TableField("sample_remark") + @ApiModelProperty(value = "样品备注", dataType = "String") + private String sampleRemark; + + @TableField("calibration_time") + @ApiModelProperty(value = "校验日期", dataType = "String") + private String calibrationTime; + + @TableField("verifier_id") + @ApiModelProperty(value = "联系人Id", dataType = "Long") + private Long verifierId; + + @TableField("verifier") + @ApiModelProperty(value = "联系人", dataType = "String") + private String verifier; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java index d2647ac..e2e8349 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java @@ -137,6 +137,31 @@ @TableField("update_time") private String updateTime; + + + @TableField("deliver_time") + @ApiModelProperty(value = "接收时间", dataType = "String") + private String deliverTime; + + @TableField("appearance_status") + @ApiModelProperty(value = "外观状态", dataType = "String") + private String appearanceStatus; + + @TableField("certificate_require") + @ApiModelProperty(value = "证书要求", dataType = "String") + private String certificateRequire; + + @TableField("sample_remark") + @ApiModelProperty(value = "样品状态", dataType = "String") + private String sampleRemark; + + @TableField("verifier_id") + @ApiModelProperty(value = "校验人员ID", dataType = "Long") + private Long verifierId; + + @TableField(exist = false) + @ApiModelProperty(value = "校验人员", dataType = "String") + private String verifierName; /** * 委托单信息 */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java index a558165..c7ae4d4 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; import com.casic.missiles.constants.MeterDictCode; +import io.swagger.annotations.Api; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.NoArgsConstructor; @@ -76,6 +77,10 @@ @ApiModelProperty(value = " 客户特殊要求", dataType = "String") private String specialRequire; + @TableField(exist = false) + @ApiModelProperty(value = "接收时间", dataType = "String") + private String deliverTime; + @ApiModelProperty(value = " 检定方式", dataType = "String") @DictCodeField(message = "检定方式不合法", cacheName = MeterDictCode.MEASURE_TYPE) diff --git a/casic-metering-service/pom.xml b/casic-metering-service/pom.xml index 6aede7a..aa8aa4d 100644 --- a/casic-metering-service/pom.xml +++ b/casic-metering-service/pom.xml @@ -23,12 +23,24 @@ com.casic casic-metering-model 2.0.0 + + + org.apache.poi + poi-ooxml + +
com.casic casic-metering-common 2.0.0 + + + org.apache.poi + poi-ooxml + + org.springframework.boot @@ -48,13 +60,22 @@ com.new.reader reader-api - com.deepoove poi-tl 1.10.0 + + + org.apache.logging.log4j + log4j-api + + - + + org.apache.poi + poi + 4.1.2 + com.aspose aspose-words diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java index 020624d..b9509c2 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java @@ -1,16 +1,19 @@ package com.casic.missiles.service.Impl.business; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.BaseApprovalSubmitRequest; +import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.business.certificate.CertificateMonitorResponse; @@ -41,6 +44,7 @@ import com.casic.missiles.service.business.IBusinessCertificateReportService; import com.casic.missiles.service.business.IBusinessOriginalRecordService; import com.casic.missiles.service.flowable.ApprovalOperateService; +import com.casic.missiles.service.listeners.register.PrintFileRegister; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; import com.casic.missiles.utils.PageUtil; @@ -55,9 +59,14 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; import java.util.*; import java.util.stream.Collectors; +import static com.casic.missiles.enums.business.FilePrintTypeEnum.CALIBRATION_CERTIFICATE; +import static com.casic.missiles.enums.notifyevent.PrintFileDataBeanNameAliasEnum.CALIBRATION_CERTIFICATE_BEAN; +import static com.casic.missiles.enums.notifyevent.PrintFileDataBeanNameAliasEnum.ORIGINAL_RECORD_BEAN; + /** *

* 业务管理-证书报告 服务实现类 @@ -88,6 +97,10 @@ private CustomerSampleServiceImpl sampleService; @Autowired private MeterStaffMapper staffMapper; + @Autowired + private PrintFileRegister printFileRegister; + @Autowired + private AbstractPermissionContext permissionContext; /** * 保存证书报告信息 @@ -326,6 +339,24 @@ return certificateMonitorResponsePage; } + @Override + public void exportOriginalFile(@Valid IdDTO idDTO, HttpServletResponse response) { + BusinessCertificateReport certificateReport = this.baseMapper.detailById(idDTO.getId()); + getApprovalSignName(certificateReport); + if (certificateReport.getOriginalRecordId() != null) { + try { + certificateReport.setBusinessOriginalRecord(originalRecordService.originalDetail(certificateReport.getOriginalRecordId())); + if (Objects.isNull(certificateReport.getBusinessOriginalRecord())) { + certificateReport.setBusinessOriginalRecord(new BusinessOriginalRecord()); + } + certificateReport.setCertificateReportTypeName(dictService.getDictNameByCode(MeterDictEnum.CERTIFICATION_CLASS, certificateReport.getCertificateReportType())); + printFileRegister.registerPrintFile(certificateReport,CALIBRATION_CERTIFICATE,response); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + private List handleApprovalStatus(Page page, CertificateReportApprovalRequest request) { List approvalList = new ArrayList<>(); List businessKeys = new ArrayList<>(); @@ -382,7 +413,7 @@ //合并未通过-拒绝和未通过-驳回 approvalList.addAll(rejectApprovalList); //分页处理 - if(!CollectionUtils.isEmpty(approvalList)) { + if (!CollectionUtils.isEmpty(approvalList)) { Page pages = PageUtil.getPages((int) page.getCurrent(), (int) page.getSize(), approvalList); page.setTotal(approvalList.size()); approvalList = pages.getRecords(); @@ -439,7 +470,7 @@ String approvalSignNames = ""; String[] approvalSignIds = certificateReport.getApprovalSignIds().split(","); for (String approvalSignId : approvalSignIds) { - approvalSignNames += approvalSignNameMap.get(Long.valueOf(approvalSignId))+ ","; + approvalSignNames += approvalSignNameMap.get(Long.valueOf(approvalSignId)) + ","; } approvalSignNames = approvalSignNames.substring(0, approvalSignNames.length() - 1); certificateReport.setApprovalSignName(approvalSignNames); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOriginalRecordServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOriginalRecordServiceImpl.java index 1c602b8..84d5f00 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOriginalRecordServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOriginalRecordServiceImpl.java @@ -1,12 +1,15 @@ package com.casic.missiles.service.Impl.business; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.business.originRecord.OriginRecordRequest; @@ -19,18 +22,32 @@ import com.casic.missiles.model.business.BusinessOriginalRecord; import com.casic.missiles.model.customer.CustomerSampleInfo; import com.casic.missiles.model.system.SystemTemplate; +import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.modular.system.service.IUserService; +import com.casic.missiles.modular.system.service.impl.UserServiceImpl; import com.casic.missiles.service.business.*; import com.casic.missiles.service.customer.CustomerSampleService; +import com.casic.missiles.service.listeners.register.PrintFileRegister; import com.casic.missiles.service.system.ISystemTemplateService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; +import liquibase.pro.packaged.A; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; +import org.springframework.util.ObjectUtils; +import org.springframework.util.StringUtils; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.util.List; +import java.util.Map; +import java.util.stream.Collector; +import java.util.stream.Collectors; + +import static com.casic.missiles.enums.business.FilePrintTypeEnum.ORIGINAL_RECORD; +import static com.casic.missiles.enums.notifyevent.PrintFileDataBeanNameAliasEnum.ORIGINAL_RECORD_BEAN; /** *

@@ -58,11 +75,19 @@ private IBaseExportService iBaseExportService; @Resource private ISystemTemplateService templateService; + @Autowired + private PrintFileRegister printFileRegister; + @Autowired + private AbstractPermissionContext permissionContext; @Override public Page originListPage(Page page, OriginRecordRequest request) throws Exception { // 获取列表 + List userList = permissionContext.getUserService().list(null); + Map userMap = userList.stream().collect( + Collectors.toMap(User::getId, User::getName) + ); Page originalRecordPage = this.baseMapper.originListPage(page, request); if (!CollectionUtils.isEmpty(originalRecordPage.getRecords())) { for (BusinessOriginalRecord record : originalRecordPage.getRecords()) { @@ -70,6 +95,9 @@ if (!StrUtil.isBlankIfStr(record.getSampleId())) { record.setCustomerSampleInfo(customerSampleService.sampleDetail(record.getSampleId())); } + if (!ObjectUtils.isEmpty(record.getVerifierId())) { + record.setVerifierName(userMap.get(record.getVerifierId())); + } } } return originalRecordPage; @@ -101,7 +129,10 @@ businessOriginalRecord.setFileList(originalRecordFileRelationService.getFilesByOriginalRecordId(id)); //查询是否有关联的监测设备 businessOriginalRecord.setEquipmentInfoList(originalRecordEquipmentRelationService.getEquipmentsByOriginalRecordId(id)); - + User user = permissionContext.getUserService().getById(businessOriginalRecord.getVerifierId()); + if (!ObjectUtils.isEmpty(user)) { + businessOriginalRecord.setVerifierName(user.getName()); + } //字典值转换 DictCodeUtils.convertDictCodeToName(businessOriginalRecord); @@ -181,6 +212,41 @@ } } + @Override + public void exportOriginalFile(IdDTO idDTO, HttpServletResponse response) throws Exception { + BusinessOriginalRecord businessOriginalRecord = this.baseMapper.selectById(idDTO.getId()); + if (businessOriginalRecord != null) { + //查询样品详情 + if (businessOriginalRecord.getSampleId() != null) { + businessOriginalRecord.setCustomerSampleInfo(customerSampleService.sampleDetail(businessOriginalRecord.getSampleId())); + } + //查询环境记录单详情 + if (businessOriginalRecord.getEnvironmentId() != null) { + businessOriginalRecord.setBusinessEnvironmentRecord(businessEnvironmentRecordService.environmentDetail(businessOriginalRecord.getEnvironmentId())); + } + //查询委托单详情 + if (businessOriginalRecord.getOrderId() != null) { + businessOriginalRecord.setBusinessOrder(businessOrderService.orderDetail(businessOriginalRecord.getOrderId())); + } + + //查询是否有关联的计量文件 + businessOriginalRecord.setFileList(originalRecordFileRelationService.getFilesByOriginalRecordId(idDTO.getId())); + //查询是否有关联的监测设备 + businessOriginalRecord.setEquipmentInfoList(originalRecordEquipmentRelationService.getEquipmentsByOriginalRecordId(idDTO.getId())); + + //字典值转换 + DictCodeUtils.convertDictCodeToName(businessOriginalRecord); + + //显示模板名称 + if (null != businessOriginalRecord.getTemplateId()) { + SystemTemplate systemTemplate = templateService.getById(businessOriginalRecord.getTemplateId()); + if (systemTemplate != null) { + printFileRegister.registerPrintFile(businessOriginalRecord, ORIGINAL_RECORD, response); + } + } + } + } + private void initBusinessEnvironmentRecord(BusinessOriginalRecord businessOriginalRecord) { Long maxNo = this.baseMapper.selectMaxCode(); String originNo = NumberGeneratorUtil.getContactNo(PrefixCodeEnum.ORIGIN_PREFIX, maxNo); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/SystemTemplateUserRelationServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/SystemTemplateUserRelationServiceImpl.java index 315f0a2..493349b 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/SystemTemplateUserRelationServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/SystemTemplateUserRelationServiceImpl.java @@ -8,7 +8,7 @@ /** *

- * 原始记录/证书报告模板与用户关联表(原始记录/证书报告模板可使用人) 服务实现类 + * /证书报告模板与用户关联表(原始记录/证书报告模板可使用人) 服务实现类 *

* * @author wangpeng diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessCertificateReportService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessCertificateReportService.java index 81cb155..8460e4d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessCertificateReportService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessCertificateReportService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.dto.BaseApprovalSubmitRequest; +import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.business.certificate.CertificateMonitorResponse; import com.casic.missiles.dto.business.certificate.CertificateReportApprovalRequest; @@ -11,8 +12,10 @@ import com.casic.missiles.dto.customer.sample.CustomerSampleIdRequest; import com.casic.missiles.dto.flowable.ApprovalDeleteRequest; import com.casic.missiles.model.business.BusinessCertificateReport; +import org.springframework.web.bind.annotation.RequestBody; import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; import java.util.List; /** @@ -47,5 +50,7 @@ Page certificateMonitorsById(CustomerSampleIdRequest customerSampleIdRequest) throws Exception; + void exportOriginalFile(@RequestBody @Valid IdDTO idDTO, HttpServletResponse response); + Page certificateRecordsById(CustomerSampleIdRequest customerSampleIdRequest) throws Exception; } diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java index 114283e..d9b2bab 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java @@ -171,4 +171,12 @@ return ReturnUtil.success(super.packForBT(certificateReportService.certificateMonitorsById(customerSampleIdRequest))); } + + @ApiOperation("导出word打印") + @PostMapping("/exportFile") + public void exportOriginalFile(@RequestBody @Valid IdDTO idDTO, HttpServletResponse response) throws Exception { + certificateReportService.exportOriginalFile(idDTO, response); + } + + } diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index cf47c98..9e7b379 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -177,7 +177,7 @@ return labExecutiveInfoService.sampleReceive(requestList); } - @ApiOperation("实验室检测-扫描增加任务到检测中(任务分发管理中待分发->检测中 / 实验室任务待检测->检测中)") + @ApiOperation("我的检测-扫描增加任务到检测中(任务分发管理中待分发->检测中 / 实验室任务待检测->检测中)") @PostMapping("/myExecutive/add") public ReturnDTO sampleAdd(@RequestBody @Valid List requestList) { return labExecutiveInfoService.sampleAdd(requestList); diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java index db996fc..ad1431a 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java @@ -56,7 +56,7 @@ @ApiOperation("原始记录详情") @PostMapping("/detail") - public ReturnDTO originalDetail(@RequestBody @Valid IdDTO idDTO) throws Exception{ + public ReturnDTO originalDetail(@RequestBody @Valid IdDTO idDTO) throws Exception { Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); @@ -99,10 +99,16 @@ businessOriginalRecordService.originExport(request, response); } + @ApiOperation("导出word打印") + @PostMapping("/exportFile") + public void exportOriginalFile(@RequestBody @Valid IdDTO idDTO, HttpServletResponse response) throws Exception { + businessOriginalRecordService.exportOriginalFile(idDTO, response); + } + @ApiOperation("根据委托单id查询关联样品信息(分页)") @PostMapping("/samplesByOderId") - public ReturnDTO> samplesByOderId(@RequestBody @Valid OriginRecordRequest request) { + public ReturnDTO> samplesByOderId(@RequestBody @Valid OriginRecordRequest request) { Page page = PageFactory.defaultPage(); return ReturnUtil.success(super.packForBT(businessOriginalRecordService.samplesByOderId(page, request))); } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java index 72500d6..81def5d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java @@ -5,4 +5,5 @@ String CALIBRATION_CERTIFICATE = "自有设备内部检校证书"; String TEST_ORDER = "检测委托单"; String CALIBRATION_ORDER = "检定或校准委托单"; + String ORIGINAL_RECORD = "原始记录"; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java index f42477a..3f1a3b2 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java @@ -12,6 +12,7 @@ put(TEST_REPORT, TEST_REPORT_BEAN); //测试报告 put(TEST_ORDER, TEST_ORDER_BEAN); //检测委托单 put(CALIBRATION_ORDER, CALIBRATION_ORDER_BEAN); //检定或校准委托单 + put(ORIGINAL_RECORD, ORIGINAL_RECORD_BEAN); //检定或校准委托单 } }); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java index bf23ba3..3f0b946 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java @@ -15,4 +15,6 @@ //检定或校准委托单 String CALIBRATION_ORDER_BEAN = "calibrationOrderBean"; + //校准证书 + String ORIGINAL_RECORD_BEAN = "originalRecord"; } diff --git a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml index 56b4ae5..79db2e5 100644 --- a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml @@ -43,9 +43,9 @@ - SELECT - orderId,id,sampleName,sampleModel,manufacturingNo,appendixDescn,measureContent,remark,sampleStatus,customerName,measurePeriod, + SELECT orderId,id,sampleName,sampleModel,manufacturingNo,appendixDescn,measureContent,remark,sampleStatus,customerName,measurePeriod, validDeadline,measureLastTime,sampleNo,orderCode,customerNo FROM ( SELECT sample_name AS "sampleName",sample_no AS "sampleNo",sample_model AS "sampleModel",manufacturing_no AS @@ -126,14 +125,14 @@ )csi JOIN ( - SELECT sample_status AS "sampleStatus",sample_id as "sampleId",order_id AS "orderId",order_code AS "orderCode" - FROM business_order_sample_relation bosr - JOIN ( - SELECT id,order_code - FROM business_order - WHERE customer_id=#{request.customerId} - )bo ON bo.id=bosr.order_id - WHERE interchange_id is null + SELECT sample_status AS "sampleStatus",sample_id as "sampleId",order_id AS "orderId",order_code AS "orderCode" + FROM business_order_sample_relation bosr + JOIN ( + SELECT id,order_code + FROM business_order + WHERE customer_id=#{request.customerId} + )bo ON bo.id=bosr.order_id + WHERE interchange_id is null )bor ON bor.sampleId=csi.id ORDER BY create_time DESC diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java index 58ca71e..2306f21 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java @@ -228,4 +228,32 @@ @ApiModelProperty(value = "证书类型名称", dataType = "String") private String certificateReportTypeName; + @TableField("deliver_time") + @ApiModelProperty(value = "接收日期", dataType = "String") + private String deliverTime; + + @TableField("appearance_status") + @ApiModelProperty(value = "外观状态", dataType = "String") + private String appearanceStatus; + + @TableField("certificate_require") + @ApiModelProperty(value = "证书要求", dataType = "String") + private String certificateRequire; + + @TableField("sample_remark") + @ApiModelProperty(value = "样品备注", dataType = "String") + private String sampleRemark; + + @TableField("calibration_time") + @ApiModelProperty(value = "校验日期", dataType = "String") + private String calibrationTime; + + @TableField("verifier_id") + @ApiModelProperty(value = "联系人Id", dataType = "Long") + private Long verifierId; + + @TableField("verifier") + @ApiModelProperty(value = "联系人", dataType = "String") + private String verifier; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java index d2647ac..e2e8349 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java @@ -137,6 +137,31 @@ @TableField("update_time") private String updateTime; + + + @TableField("deliver_time") + @ApiModelProperty(value = "接收时间", dataType = "String") + private String deliverTime; + + @TableField("appearance_status") + @ApiModelProperty(value = "外观状态", dataType = "String") + private String appearanceStatus; + + @TableField("certificate_require") + @ApiModelProperty(value = "证书要求", dataType = "String") + private String certificateRequire; + + @TableField("sample_remark") + @ApiModelProperty(value = "样品状态", dataType = "String") + private String sampleRemark; + + @TableField("verifier_id") + @ApiModelProperty(value = "校验人员ID", dataType = "Long") + private Long verifierId; + + @TableField(exist = false) + @ApiModelProperty(value = "校验人员", dataType = "String") + private String verifierName; /** * 委托单信息 */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java index a558165..c7ae4d4 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; import com.casic.missiles.constants.MeterDictCode; +import io.swagger.annotations.Api; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.NoArgsConstructor; @@ -76,6 +77,10 @@ @ApiModelProperty(value = " 客户特殊要求", dataType = "String") private String specialRequire; + @TableField(exist = false) + @ApiModelProperty(value = "接收时间", dataType = "String") + private String deliverTime; + @ApiModelProperty(value = " 检定方式", dataType = "String") @DictCodeField(message = "检定方式不合法", cacheName = MeterDictCode.MEASURE_TYPE) diff --git a/casic-metering-service/pom.xml b/casic-metering-service/pom.xml index 6aede7a..aa8aa4d 100644 --- a/casic-metering-service/pom.xml +++ b/casic-metering-service/pom.xml @@ -23,12 +23,24 @@ com.casic casic-metering-model 2.0.0 + + + org.apache.poi + poi-ooxml + +
com.casic casic-metering-common 2.0.0 + + + org.apache.poi + poi-ooxml + + org.springframework.boot @@ -48,13 +60,22 @@ com.new.reader reader-api - com.deepoove poi-tl 1.10.0 + + + org.apache.logging.log4j + log4j-api + + - + + org.apache.poi + poi + 4.1.2 + com.aspose aspose-words diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java index 020624d..b9509c2 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java @@ -1,16 +1,19 @@ package com.casic.missiles.service.Impl.business; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.BaseApprovalSubmitRequest; +import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.business.certificate.CertificateMonitorResponse; @@ -41,6 +44,7 @@ import com.casic.missiles.service.business.IBusinessCertificateReportService; import com.casic.missiles.service.business.IBusinessOriginalRecordService; import com.casic.missiles.service.flowable.ApprovalOperateService; +import com.casic.missiles.service.listeners.register.PrintFileRegister; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; import com.casic.missiles.utils.PageUtil; @@ -55,9 +59,14 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; import java.util.*; import java.util.stream.Collectors; +import static com.casic.missiles.enums.business.FilePrintTypeEnum.CALIBRATION_CERTIFICATE; +import static com.casic.missiles.enums.notifyevent.PrintFileDataBeanNameAliasEnum.CALIBRATION_CERTIFICATE_BEAN; +import static com.casic.missiles.enums.notifyevent.PrintFileDataBeanNameAliasEnum.ORIGINAL_RECORD_BEAN; + /** *

* 业务管理-证书报告 服务实现类 @@ -88,6 +97,10 @@ private CustomerSampleServiceImpl sampleService; @Autowired private MeterStaffMapper staffMapper; + @Autowired + private PrintFileRegister printFileRegister; + @Autowired + private AbstractPermissionContext permissionContext; /** * 保存证书报告信息 @@ -326,6 +339,24 @@ return certificateMonitorResponsePage; } + @Override + public void exportOriginalFile(@Valid IdDTO idDTO, HttpServletResponse response) { + BusinessCertificateReport certificateReport = this.baseMapper.detailById(idDTO.getId()); + getApprovalSignName(certificateReport); + if (certificateReport.getOriginalRecordId() != null) { + try { + certificateReport.setBusinessOriginalRecord(originalRecordService.originalDetail(certificateReport.getOriginalRecordId())); + if (Objects.isNull(certificateReport.getBusinessOriginalRecord())) { + certificateReport.setBusinessOriginalRecord(new BusinessOriginalRecord()); + } + certificateReport.setCertificateReportTypeName(dictService.getDictNameByCode(MeterDictEnum.CERTIFICATION_CLASS, certificateReport.getCertificateReportType())); + printFileRegister.registerPrintFile(certificateReport,CALIBRATION_CERTIFICATE,response); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + private List handleApprovalStatus(Page page, CertificateReportApprovalRequest request) { List approvalList = new ArrayList<>(); List businessKeys = new ArrayList<>(); @@ -382,7 +413,7 @@ //合并未通过-拒绝和未通过-驳回 approvalList.addAll(rejectApprovalList); //分页处理 - if(!CollectionUtils.isEmpty(approvalList)) { + if (!CollectionUtils.isEmpty(approvalList)) { Page pages = PageUtil.getPages((int) page.getCurrent(), (int) page.getSize(), approvalList); page.setTotal(approvalList.size()); approvalList = pages.getRecords(); @@ -439,7 +470,7 @@ String approvalSignNames = ""; String[] approvalSignIds = certificateReport.getApprovalSignIds().split(","); for (String approvalSignId : approvalSignIds) { - approvalSignNames += approvalSignNameMap.get(Long.valueOf(approvalSignId))+ ","; + approvalSignNames += approvalSignNameMap.get(Long.valueOf(approvalSignId)) + ","; } approvalSignNames = approvalSignNames.substring(0, approvalSignNames.length() - 1); certificateReport.setApprovalSignName(approvalSignNames); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOriginalRecordServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOriginalRecordServiceImpl.java index 1c602b8..84d5f00 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOriginalRecordServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOriginalRecordServiceImpl.java @@ -1,12 +1,15 @@ package com.casic.missiles.service.Impl.business; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.business.originRecord.OriginRecordRequest; @@ -19,18 +22,32 @@ import com.casic.missiles.model.business.BusinessOriginalRecord; import com.casic.missiles.model.customer.CustomerSampleInfo; import com.casic.missiles.model.system.SystemTemplate; +import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.modular.system.service.IUserService; +import com.casic.missiles.modular.system.service.impl.UserServiceImpl; import com.casic.missiles.service.business.*; import com.casic.missiles.service.customer.CustomerSampleService; +import com.casic.missiles.service.listeners.register.PrintFileRegister; import com.casic.missiles.service.system.ISystemTemplateService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; +import liquibase.pro.packaged.A; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; +import org.springframework.util.ObjectUtils; +import org.springframework.util.StringUtils; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.util.List; +import java.util.Map; +import java.util.stream.Collector; +import java.util.stream.Collectors; + +import static com.casic.missiles.enums.business.FilePrintTypeEnum.ORIGINAL_RECORD; +import static com.casic.missiles.enums.notifyevent.PrintFileDataBeanNameAliasEnum.ORIGINAL_RECORD_BEAN; /** *

@@ -58,11 +75,19 @@ private IBaseExportService iBaseExportService; @Resource private ISystemTemplateService templateService; + @Autowired + private PrintFileRegister printFileRegister; + @Autowired + private AbstractPermissionContext permissionContext; @Override public Page originListPage(Page page, OriginRecordRequest request) throws Exception { // 获取列表 + List userList = permissionContext.getUserService().list(null); + Map userMap = userList.stream().collect( + Collectors.toMap(User::getId, User::getName) + ); Page originalRecordPage = this.baseMapper.originListPage(page, request); if (!CollectionUtils.isEmpty(originalRecordPage.getRecords())) { for (BusinessOriginalRecord record : originalRecordPage.getRecords()) { @@ -70,6 +95,9 @@ if (!StrUtil.isBlankIfStr(record.getSampleId())) { record.setCustomerSampleInfo(customerSampleService.sampleDetail(record.getSampleId())); } + if (!ObjectUtils.isEmpty(record.getVerifierId())) { + record.setVerifierName(userMap.get(record.getVerifierId())); + } } } return originalRecordPage; @@ -101,7 +129,10 @@ businessOriginalRecord.setFileList(originalRecordFileRelationService.getFilesByOriginalRecordId(id)); //查询是否有关联的监测设备 businessOriginalRecord.setEquipmentInfoList(originalRecordEquipmentRelationService.getEquipmentsByOriginalRecordId(id)); - + User user = permissionContext.getUserService().getById(businessOriginalRecord.getVerifierId()); + if (!ObjectUtils.isEmpty(user)) { + businessOriginalRecord.setVerifierName(user.getName()); + } //字典值转换 DictCodeUtils.convertDictCodeToName(businessOriginalRecord); @@ -181,6 +212,41 @@ } } + @Override + public void exportOriginalFile(IdDTO idDTO, HttpServletResponse response) throws Exception { + BusinessOriginalRecord businessOriginalRecord = this.baseMapper.selectById(idDTO.getId()); + if (businessOriginalRecord != null) { + //查询样品详情 + if (businessOriginalRecord.getSampleId() != null) { + businessOriginalRecord.setCustomerSampleInfo(customerSampleService.sampleDetail(businessOriginalRecord.getSampleId())); + } + //查询环境记录单详情 + if (businessOriginalRecord.getEnvironmentId() != null) { + businessOriginalRecord.setBusinessEnvironmentRecord(businessEnvironmentRecordService.environmentDetail(businessOriginalRecord.getEnvironmentId())); + } + //查询委托单详情 + if (businessOriginalRecord.getOrderId() != null) { + businessOriginalRecord.setBusinessOrder(businessOrderService.orderDetail(businessOriginalRecord.getOrderId())); + } + + //查询是否有关联的计量文件 + businessOriginalRecord.setFileList(originalRecordFileRelationService.getFilesByOriginalRecordId(idDTO.getId())); + //查询是否有关联的监测设备 + businessOriginalRecord.setEquipmentInfoList(originalRecordEquipmentRelationService.getEquipmentsByOriginalRecordId(idDTO.getId())); + + //字典值转换 + DictCodeUtils.convertDictCodeToName(businessOriginalRecord); + + //显示模板名称 + if (null != businessOriginalRecord.getTemplateId()) { + SystemTemplate systemTemplate = templateService.getById(businessOriginalRecord.getTemplateId()); + if (systemTemplate != null) { + printFileRegister.registerPrintFile(businessOriginalRecord, ORIGINAL_RECORD, response); + } + } + } + } + private void initBusinessEnvironmentRecord(BusinessOriginalRecord businessOriginalRecord) { Long maxNo = this.baseMapper.selectMaxCode(); String originNo = NumberGeneratorUtil.getContactNo(PrefixCodeEnum.ORIGIN_PREFIX, maxNo); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/SystemTemplateUserRelationServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/SystemTemplateUserRelationServiceImpl.java index 315f0a2..493349b 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/SystemTemplateUserRelationServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/SystemTemplateUserRelationServiceImpl.java @@ -8,7 +8,7 @@ /** *

- * 原始记录/证书报告模板与用户关联表(原始记录/证书报告模板可使用人) 服务实现类 + * /证书报告模板与用户关联表(原始记录/证书报告模板可使用人) 服务实现类 *

* * @author wangpeng diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessCertificateReportService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessCertificateReportService.java index 81cb155..8460e4d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessCertificateReportService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessCertificateReportService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.dto.BaseApprovalSubmitRequest; +import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.business.certificate.CertificateMonitorResponse; import com.casic.missiles.dto.business.certificate.CertificateReportApprovalRequest; @@ -11,8 +12,10 @@ import com.casic.missiles.dto.customer.sample.CustomerSampleIdRequest; import com.casic.missiles.dto.flowable.ApprovalDeleteRequest; import com.casic.missiles.model.business.BusinessCertificateReport; +import org.springframework.web.bind.annotation.RequestBody; import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; import java.util.List; /** @@ -47,5 +50,7 @@ Page certificateMonitorsById(CustomerSampleIdRequest customerSampleIdRequest) throws Exception; + void exportOriginalFile(@RequestBody @Valid IdDTO idDTO, HttpServletResponse response); + Page certificateRecordsById(CustomerSampleIdRequest customerSampleIdRequest) throws Exception; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessOriginalRecordService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessOriginalRecordService.java index cbb6b40..047f931 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessOriginalRecordService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessOriginalRecordService.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.business.originRecord.OriginRecordRequest; import com.casic.missiles.model.business.BusinessOriginalRecord; @@ -11,7 +12,7 @@ /** *

- * 服务类 + * 服务类 *

* * @author wangpeng @@ -21,7 +22,7 @@ Page originListPage(Page page, OriginRecordRequest request) throws Exception; - Page samplesByOderId(Page sampleInfoPage, OriginRecordRequest request) ; + Page samplesByOderId(Page sampleInfoPage, OriginRecordRequest request); BusinessOriginalRecord originalDetail(Long id) throws Exception; @@ -33,5 +34,7 @@ void originExport(OriginRecordRequest request, HttpServletResponse response); + void exportOriginalFile(IdDTO idDTO, HttpServletResponse response) throws Exception; + } diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java index 114283e..d9b2bab 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java @@ -171,4 +171,12 @@ return ReturnUtil.success(super.packForBT(certificateReportService.certificateMonitorsById(customerSampleIdRequest))); } + + @ApiOperation("导出word打印") + @PostMapping("/exportFile") + public void exportOriginalFile(@RequestBody @Valid IdDTO idDTO, HttpServletResponse response) throws Exception { + certificateReportService.exportOriginalFile(idDTO, response); + } + + } diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index cf47c98..9e7b379 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -177,7 +177,7 @@ return labExecutiveInfoService.sampleReceive(requestList); } - @ApiOperation("实验室检测-扫描增加任务到检测中(任务分发管理中待分发->检测中 / 实验室任务待检测->检测中)") + @ApiOperation("我的检测-扫描增加任务到检测中(任务分发管理中待分发->检测中 / 实验室任务待检测->检测中)") @PostMapping("/myExecutive/add") public ReturnDTO sampleAdd(@RequestBody @Valid List requestList) { return labExecutiveInfoService.sampleAdd(requestList); diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java index db996fc..ad1431a 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java @@ -56,7 +56,7 @@ @ApiOperation("原始记录详情") @PostMapping("/detail") - public ReturnDTO originalDetail(@RequestBody @Valid IdDTO idDTO) throws Exception{ + public ReturnDTO originalDetail(@RequestBody @Valid IdDTO idDTO) throws Exception { Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); @@ -99,10 +99,16 @@ businessOriginalRecordService.originExport(request, response); } + @ApiOperation("导出word打印") + @PostMapping("/exportFile") + public void exportOriginalFile(@RequestBody @Valid IdDTO idDTO, HttpServletResponse response) throws Exception { + businessOriginalRecordService.exportOriginalFile(idDTO, response); + } + @ApiOperation("根据委托单id查询关联样品信息(分页)") @PostMapping("/samplesByOderId") - public ReturnDTO> samplesByOderId(@RequestBody @Valid OriginRecordRequest request) { + public ReturnDTO> samplesByOderId(@RequestBody @Valid OriginRecordRequest request) { Page page = PageFactory.defaultPage(); return ReturnUtil.success(super.packForBT(businessOriginalRecordService.samplesByOderId(page, request))); } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java index 72500d6..81def5d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java @@ -5,4 +5,5 @@ String CALIBRATION_CERTIFICATE = "自有设备内部检校证书"; String TEST_ORDER = "检测委托单"; String CALIBRATION_ORDER = "检定或校准委托单"; + String ORIGINAL_RECORD = "原始记录"; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java index f42477a..3f1a3b2 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java @@ -12,6 +12,7 @@ put(TEST_REPORT, TEST_REPORT_BEAN); //测试报告 put(TEST_ORDER, TEST_ORDER_BEAN); //检测委托单 put(CALIBRATION_ORDER, CALIBRATION_ORDER_BEAN); //检定或校准委托单 + put(ORIGINAL_RECORD, ORIGINAL_RECORD_BEAN); //检定或校准委托单 } }); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java index bf23ba3..3f0b946 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java @@ -15,4 +15,6 @@ //检定或校准委托单 String CALIBRATION_ORDER_BEAN = "calibrationOrderBean"; + //校准证书 + String ORIGINAL_RECORD_BEAN = "originalRecord"; } diff --git a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml index 56b4ae5..79db2e5 100644 --- a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml @@ -43,9 +43,9 @@ - SELECT - orderId,id,sampleName,sampleModel,manufacturingNo,appendixDescn,measureContent,remark,sampleStatus,customerName,measurePeriod, + SELECT orderId,id,sampleName,sampleModel,manufacturingNo,appendixDescn,measureContent,remark,sampleStatus,customerName,measurePeriod, validDeadline,measureLastTime,sampleNo,orderCode,customerNo FROM ( SELECT sample_name AS "sampleName",sample_no AS "sampleNo",sample_model AS "sampleModel",manufacturing_no AS @@ -126,14 +125,14 @@ )csi JOIN ( - SELECT sample_status AS "sampleStatus",sample_id as "sampleId",order_id AS "orderId",order_code AS "orderCode" - FROM business_order_sample_relation bosr - JOIN ( - SELECT id,order_code - FROM business_order - WHERE customer_id=#{request.customerId} - )bo ON bo.id=bosr.order_id - WHERE interchange_id is null + SELECT sample_status AS "sampleStatus",sample_id as "sampleId",order_id AS "orderId",order_code AS "orderCode" + FROM business_order_sample_relation bosr + JOIN ( + SELECT id,order_code + FROM business_order + WHERE customer_id=#{request.customerId} + )bo ON bo.id=bosr.order_id + WHERE interchange_id is null )bor ON bor.sampleId=csi.id ORDER BY create_time DESC diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java index 58ca71e..2306f21 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java @@ -228,4 +228,32 @@ @ApiModelProperty(value = "证书类型名称", dataType = "String") private String certificateReportTypeName; + @TableField("deliver_time") + @ApiModelProperty(value = "接收日期", dataType = "String") + private String deliverTime; + + @TableField("appearance_status") + @ApiModelProperty(value = "外观状态", dataType = "String") + private String appearanceStatus; + + @TableField("certificate_require") + @ApiModelProperty(value = "证书要求", dataType = "String") + private String certificateRequire; + + @TableField("sample_remark") + @ApiModelProperty(value = "样品备注", dataType = "String") + private String sampleRemark; + + @TableField("calibration_time") + @ApiModelProperty(value = "校验日期", dataType = "String") + private String calibrationTime; + + @TableField("verifier_id") + @ApiModelProperty(value = "联系人Id", dataType = "Long") + private Long verifierId; + + @TableField("verifier") + @ApiModelProperty(value = "联系人", dataType = "String") + private String verifier; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java index d2647ac..e2e8349 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java @@ -137,6 +137,31 @@ @TableField("update_time") private String updateTime; + + + @TableField("deliver_time") + @ApiModelProperty(value = "接收时间", dataType = "String") + private String deliverTime; + + @TableField("appearance_status") + @ApiModelProperty(value = "外观状态", dataType = "String") + private String appearanceStatus; + + @TableField("certificate_require") + @ApiModelProperty(value = "证书要求", dataType = "String") + private String certificateRequire; + + @TableField("sample_remark") + @ApiModelProperty(value = "样品状态", dataType = "String") + private String sampleRemark; + + @TableField("verifier_id") + @ApiModelProperty(value = "校验人员ID", dataType = "Long") + private Long verifierId; + + @TableField(exist = false) + @ApiModelProperty(value = "校验人员", dataType = "String") + private String verifierName; /** * 委托单信息 */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java index a558165..c7ae4d4 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; import com.casic.missiles.constants.MeterDictCode; +import io.swagger.annotations.Api; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.NoArgsConstructor; @@ -76,6 +77,10 @@ @ApiModelProperty(value = " 客户特殊要求", dataType = "String") private String specialRequire; + @TableField(exist = false) + @ApiModelProperty(value = "接收时间", dataType = "String") + private String deliverTime; + @ApiModelProperty(value = " 检定方式", dataType = "String") @DictCodeField(message = "检定方式不合法", cacheName = MeterDictCode.MEASURE_TYPE) diff --git a/casic-metering-service/pom.xml b/casic-metering-service/pom.xml index 6aede7a..aa8aa4d 100644 --- a/casic-metering-service/pom.xml +++ b/casic-metering-service/pom.xml @@ -23,12 +23,24 @@ com.casic casic-metering-model 2.0.0 + + + org.apache.poi + poi-ooxml + +
com.casic casic-metering-common 2.0.0 + + + org.apache.poi + poi-ooxml + + org.springframework.boot @@ -48,13 +60,22 @@ com.new.reader reader-api - com.deepoove poi-tl 1.10.0 + + + org.apache.logging.log4j + log4j-api + + - + + org.apache.poi + poi + 4.1.2 + com.aspose aspose-words diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java index 020624d..b9509c2 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java @@ -1,16 +1,19 @@ package com.casic.missiles.service.Impl.business; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.BaseApprovalSubmitRequest; +import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.business.certificate.CertificateMonitorResponse; @@ -41,6 +44,7 @@ import com.casic.missiles.service.business.IBusinessCertificateReportService; import com.casic.missiles.service.business.IBusinessOriginalRecordService; import com.casic.missiles.service.flowable.ApprovalOperateService; +import com.casic.missiles.service.listeners.register.PrintFileRegister; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; import com.casic.missiles.utils.PageUtil; @@ -55,9 +59,14 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; import java.util.*; import java.util.stream.Collectors; +import static com.casic.missiles.enums.business.FilePrintTypeEnum.CALIBRATION_CERTIFICATE; +import static com.casic.missiles.enums.notifyevent.PrintFileDataBeanNameAliasEnum.CALIBRATION_CERTIFICATE_BEAN; +import static com.casic.missiles.enums.notifyevent.PrintFileDataBeanNameAliasEnum.ORIGINAL_RECORD_BEAN; + /** *

* 业务管理-证书报告 服务实现类 @@ -88,6 +97,10 @@ private CustomerSampleServiceImpl sampleService; @Autowired private MeterStaffMapper staffMapper; + @Autowired + private PrintFileRegister printFileRegister; + @Autowired + private AbstractPermissionContext permissionContext; /** * 保存证书报告信息 @@ -326,6 +339,24 @@ return certificateMonitorResponsePage; } + @Override + public void exportOriginalFile(@Valid IdDTO idDTO, HttpServletResponse response) { + BusinessCertificateReport certificateReport = this.baseMapper.detailById(idDTO.getId()); + getApprovalSignName(certificateReport); + if (certificateReport.getOriginalRecordId() != null) { + try { + certificateReport.setBusinessOriginalRecord(originalRecordService.originalDetail(certificateReport.getOriginalRecordId())); + if (Objects.isNull(certificateReport.getBusinessOriginalRecord())) { + certificateReport.setBusinessOriginalRecord(new BusinessOriginalRecord()); + } + certificateReport.setCertificateReportTypeName(dictService.getDictNameByCode(MeterDictEnum.CERTIFICATION_CLASS, certificateReport.getCertificateReportType())); + printFileRegister.registerPrintFile(certificateReport,CALIBRATION_CERTIFICATE,response); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + private List handleApprovalStatus(Page page, CertificateReportApprovalRequest request) { List approvalList = new ArrayList<>(); List businessKeys = new ArrayList<>(); @@ -382,7 +413,7 @@ //合并未通过-拒绝和未通过-驳回 approvalList.addAll(rejectApprovalList); //分页处理 - if(!CollectionUtils.isEmpty(approvalList)) { + if (!CollectionUtils.isEmpty(approvalList)) { Page pages = PageUtil.getPages((int) page.getCurrent(), (int) page.getSize(), approvalList); page.setTotal(approvalList.size()); approvalList = pages.getRecords(); @@ -439,7 +470,7 @@ String approvalSignNames = ""; String[] approvalSignIds = certificateReport.getApprovalSignIds().split(","); for (String approvalSignId : approvalSignIds) { - approvalSignNames += approvalSignNameMap.get(Long.valueOf(approvalSignId))+ ","; + approvalSignNames += approvalSignNameMap.get(Long.valueOf(approvalSignId)) + ","; } approvalSignNames = approvalSignNames.substring(0, approvalSignNames.length() - 1); certificateReport.setApprovalSignName(approvalSignNames); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOriginalRecordServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOriginalRecordServiceImpl.java index 1c602b8..84d5f00 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOriginalRecordServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOriginalRecordServiceImpl.java @@ -1,12 +1,15 @@ package com.casic.missiles.service.Impl.business; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.business.originRecord.OriginRecordRequest; @@ -19,18 +22,32 @@ import com.casic.missiles.model.business.BusinessOriginalRecord; import com.casic.missiles.model.customer.CustomerSampleInfo; import com.casic.missiles.model.system.SystemTemplate; +import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.modular.system.service.IUserService; +import com.casic.missiles.modular.system.service.impl.UserServiceImpl; import com.casic.missiles.service.business.*; import com.casic.missiles.service.customer.CustomerSampleService; +import com.casic.missiles.service.listeners.register.PrintFileRegister; import com.casic.missiles.service.system.ISystemTemplateService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; +import liquibase.pro.packaged.A; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; +import org.springframework.util.ObjectUtils; +import org.springframework.util.StringUtils; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.util.List; +import java.util.Map; +import java.util.stream.Collector; +import java.util.stream.Collectors; + +import static com.casic.missiles.enums.business.FilePrintTypeEnum.ORIGINAL_RECORD; +import static com.casic.missiles.enums.notifyevent.PrintFileDataBeanNameAliasEnum.ORIGINAL_RECORD_BEAN; /** *

@@ -58,11 +75,19 @@ private IBaseExportService iBaseExportService; @Resource private ISystemTemplateService templateService; + @Autowired + private PrintFileRegister printFileRegister; + @Autowired + private AbstractPermissionContext permissionContext; @Override public Page originListPage(Page page, OriginRecordRequest request) throws Exception { // 获取列表 + List userList = permissionContext.getUserService().list(null); + Map userMap = userList.stream().collect( + Collectors.toMap(User::getId, User::getName) + ); Page originalRecordPage = this.baseMapper.originListPage(page, request); if (!CollectionUtils.isEmpty(originalRecordPage.getRecords())) { for (BusinessOriginalRecord record : originalRecordPage.getRecords()) { @@ -70,6 +95,9 @@ if (!StrUtil.isBlankIfStr(record.getSampleId())) { record.setCustomerSampleInfo(customerSampleService.sampleDetail(record.getSampleId())); } + if (!ObjectUtils.isEmpty(record.getVerifierId())) { + record.setVerifierName(userMap.get(record.getVerifierId())); + } } } return originalRecordPage; @@ -101,7 +129,10 @@ businessOriginalRecord.setFileList(originalRecordFileRelationService.getFilesByOriginalRecordId(id)); //查询是否有关联的监测设备 businessOriginalRecord.setEquipmentInfoList(originalRecordEquipmentRelationService.getEquipmentsByOriginalRecordId(id)); - + User user = permissionContext.getUserService().getById(businessOriginalRecord.getVerifierId()); + if (!ObjectUtils.isEmpty(user)) { + businessOriginalRecord.setVerifierName(user.getName()); + } //字典值转换 DictCodeUtils.convertDictCodeToName(businessOriginalRecord); @@ -181,6 +212,41 @@ } } + @Override + public void exportOriginalFile(IdDTO idDTO, HttpServletResponse response) throws Exception { + BusinessOriginalRecord businessOriginalRecord = this.baseMapper.selectById(idDTO.getId()); + if (businessOriginalRecord != null) { + //查询样品详情 + if (businessOriginalRecord.getSampleId() != null) { + businessOriginalRecord.setCustomerSampleInfo(customerSampleService.sampleDetail(businessOriginalRecord.getSampleId())); + } + //查询环境记录单详情 + if (businessOriginalRecord.getEnvironmentId() != null) { + businessOriginalRecord.setBusinessEnvironmentRecord(businessEnvironmentRecordService.environmentDetail(businessOriginalRecord.getEnvironmentId())); + } + //查询委托单详情 + if (businessOriginalRecord.getOrderId() != null) { + businessOriginalRecord.setBusinessOrder(businessOrderService.orderDetail(businessOriginalRecord.getOrderId())); + } + + //查询是否有关联的计量文件 + businessOriginalRecord.setFileList(originalRecordFileRelationService.getFilesByOriginalRecordId(idDTO.getId())); + //查询是否有关联的监测设备 + businessOriginalRecord.setEquipmentInfoList(originalRecordEquipmentRelationService.getEquipmentsByOriginalRecordId(idDTO.getId())); + + //字典值转换 + DictCodeUtils.convertDictCodeToName(businessOriginalRecord); + + //显示模板名称 + if (null != businessOriginalRecord.getTemplateId()) { + SystemTemplate systemTemplate = templateService.getById(businessOriginalRecord.getTemplateId()); + if (systemTemplate != null) { + printFileRegister.registerPrintFile(businessOriginalRecord, ORIGINAL_RECORD, response); + } + } + } + } + private void initBusinessEnvironmentRecord(BusinessOriginalRecord businessOriginalRecord) { Long maxNo = this.baseMapper.selectMaxCode(); String originNo = NumberGeneratorUtil.getContactNo(PrefixCodeEnum.ORIGIN_PREFIX, maxNo); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/SystemTemplateUserRelationServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/SystemTemplateUserRelationServiceImpl.java index 315f0a2..493349b 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/SystemTemplateUserRelationServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/SystemTemplateUserRelationServiceImpl.java @@ -8,7 +8,7 @@ /** *

- * 原始记录/证书报告模板与用户关联表(原始记录/证书报告模板可使用人) 服务实现类 + * /证书报告模板与用户关联表(原始记录/证书报告模板可使用人) 服务实现类 *

* * @author wangpeng diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessCertificateReportService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessCertificateReportService.java index 81cb155..8460e4d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessCertificateReportService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessCertificateReportService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.dto.BaseApprovalSubmitRequest; +import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.business.certificate.CertificateMonitorResponse; import com.casic.missiles.dto.business.certificate.CertificateReportApprovalRequest; @@ -11,8 +12,10 @@ import com.casic.missiles.dto.customer.sample.CustomerSampleIdRequest; import com.casic.missiles.dto.flowable.ApprovalDeleteRequest; import com.casic.missiles.model.business.BusinessCertificateReport; +import org.springframework.web.bind.annotation.RequestBody; import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; import java.util.List; /** @@ -47,5 +50,7 @@ Page certificateMonitorsById(CustomerSampleIdRequest customerSampleIdRequest) throws Exception; + void exportOriginalFile(@RequestBody @Valid IdDTO idDTO, HttpServletResponse response); + Page certificateRecordsById(CustomerSampleIdRequest customerSampleIdRequest) throws Exception; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessOriginalRecordService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessOriginalRecordService.java index cbb6b40..047f931 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessOriginalRecordService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessOriginalRecordService.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.business.originRecord.OriginRecordRequest; import com.casic.missiles.model.business.BusinessOriginalRecord; @@ -11,7 +12,7 @@ /** *

- * 服务类 + * 服务类 *

* * @author wangpeng @@ -21,7 +22,7 @@ Page originListPage(Page page, OriginRecordRequest request) throws Exception; - Page samplesByOderId(Page sampleInfoPage, OriginRecordRequest request) ; + Page samplesByOderId(Page sampleInfoPage, OriginRecordRequest request); BusinessOriginalRecord originalDetail(Long id) throws Exception; @@ -33,5 +34,7 @@ void originExport(OriginRecordRequest request, HttpServletResponse response); + void exportOriginalFile(IdDTO idDTO, HttpServletResponse response) throws Exception; + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java new file mode 100644 index 0000000..63d9aaf --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java @@ -0,0 +1,99 @@ +package com.casic.missiles.service.listeners.register; + +import com.casic.missiles.service.listeners.register.FilePrintRegisterUtils; +import com.casic.missiles.utils.QRCodeUtil; +import com.deepoove.poi.XWPFTemplate; +import com.deepoove.poi.config.Configure; +import com.deepoove.poi.config.ConfigureBuilder; +import com.spire.doc.Document; +import com.spire.doc.FileFormat; +import org.apache.coyote.OutputBuffer; + +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author cz + */ +public class Example { + + private static String localPathUrl = "D:\\casic\\cut\\"; + + /** + * 多个word合并为一个doc样例 + */ + public static void mergeDoc() { + String word1Url = localPathUrl + "211.docx"; +// String word2Url = localPathUrl + "202.docx"; +// //加载文档1 + Document doc1 = new Document(word1Url); +// //调用方法将文档2插入到文档1 +// doc1.insertTextFromFile(word2Url, FileFormat.Docx_2010); +// //保存合并后的文档 +// doc1.saveToFile(word1Url, FileFormat.Docx_2010); + doc1.saveToFile(localPathUrl + "add.docx", FileFormat.Docx); + } + + /** + * 表格合并样例 + */ + public static void tableMerge() { + String localPathUrl = "D:\\casic\\cut\\"; + // 目标文件地址 + String wordOldUrl = localPathUrl + "204.doc"; + Map params = new HashMap<>(); + List> assetList = new ArrayList<>(); + for (int i = 0; i < 8; i++) { + Map assetMap = new HashMap<>(); + assetMap.put("seq", String.valueOf(i / 4)); + assetMap.put("customer", "供方" + String.valueOf(i / 4)); + assetMap.put("customerName", "供方名字" + i); + assetMap.put("model", "型号" + i); + assetMap.put("startDate", "启用时间" + i); + assetMap.put("trainCondition", "维修时间"); + assetMap.put("status", "我醉"); + assetMap.put("evaluate", "我醒"); + assetList.add(assetMap); + } + params.put("train", assetList); + params.put("staffName", "张三"); + params.put("gender", "男"); + params.put("birthday", "2202-10-5"); + params.put("nation", "汉"); + params.put("enlistmentDate", "2196-9-18"); + params.put("partyDate", "2188-9-18"); + params.put("degree", "博士"); + params.put("test", "\uF052"); + params.put("error", "\uF0A3"); +// String newOldUrl = FilePrintRegisterUtils.exportWord(wordOldUrl, localPathUrl, "temp.docx", params, null); +// System.out.println(newOldUrl); + } + + + private static void textBoxTest() throws IOException { + Map map = new HashMap<>(); + ConfigureBuilder builder = Configure.builder(); + XWPFTemplate compile = XWPFTemplate.compile("D:\\casic\\cut\\204.docx", builder.build()); + compile.render(map); + compile.writeToFile("D:\\casic\\cut\\out_test3.docx"); + } + + + /** + * 1、生成二维码图片 + * 2、二维码图片进行图片的合成 + * 3、 + * @param args + * @throws Exception + */ + public static void main(String[] args) throws Exception { + OutputStream output =new FileOutputStream("D:\\casic\\cut\\test.png"); + QRCodeUtil.getQRCode("D:\\casic\\cut\\1航天检定模版v1.xls", output); + } + +} diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java index 114283e..d9b2bab 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java @@ -171,4 +171,12 @@ return ReturnUtil.success(super.packForBT(certificateReportService.certificateMonitorsById(customerSampleIdRequest))); } + + @ApiOperation("导出word打印") + @PostMapping("/exportFile") + public void exportOriginalFile(@RequestBody @Valid IdDTO idDTO, HttpServletResponse response) throws Exception { + certificateReportService.exportOriginalFile(idDTO, response); + } + + } diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index cf47c98..9e7b379 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -177,7 +177,7 @@ return labExecutiveInfoService.sampleReceive(requestList); } - @ApiOperation("实验室检测-扫描增加任务到检测中(任务分发管理中待分发->检测中 / 实验室任务待检测->检测中)") + @ApiOperation("我的检测-扫描增加任务到检测中(任务分发管理中待分发->检测中 / 实验室任务待检测->检测中)") @PostMapping("/myExecutive/add") public ReturnDTO sampleAdd(@RequestBody @Valid List requestList) { return labExecutiveInfoService.sampleAdd(requestList); diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java index db996fc..ad1431a 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java @@ -56,7 +56,7 @@ @ApiOperation("原始记录详情") @PostMapping("/detail") - public ReturnDTO originalDetail(@RequestBody @Valid IdDTO idDTO) throws Exception{ + public ReturnDTO originalDetail(@RequestBody @Valid IdDTO idDTO) throws Exception { Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); @@ -99,10 +99,16 @@ businessOriginalRecordService.originExport(request, response); } + @ApiOperation("导出word打印") + @PostMapping("/exportFile") + public void exportOriginalFile(@RequestBody @Valid IdDTO idDTO, HttpServletResponse response) throws Exception { + businessOriginalRecordService.exportOriginalFile(idDTO, response); + } + @ApiOperation("根据委托单id查询关联样品信息(分页)") @PostMapping("/samplesByOderId") - public ReturnDTO> samplesByOderId(@RequestBody @Valid OriginRecordRequest request) { + public ReturnDTO> samplesByOderId(@RequestBody @Valid OriginRecordRequest request) { Page page = PageFactory.defaultPage(); return ReturnUtil.success(super.packForBT(businessOriginalRecordService.samplesByOderId(page, request))); } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java index 72500d6..81def5d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java @@ -5,4 +5,5 @@ String CALIBRATION_CERTIFICATE = "自有设备内部检校证书"; String TEST_ORDER = "检测委托单"; String CALIBRATION_ORDER = "检定或校准委托单"; + String ORIGINAL_RECORD = "原始记录"; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java index f42477a..3f1a3b2 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java @@ -12,6 +12,7 @@ put(TEST_REPORT, TEST_REPORT_BEAN); //测试报告 put(TEST_ORDER, TEST_ORDER_BEAN); //检测委托单 put(CALIBRATION_ORDER, CALIBRATION_ORDER_BEAN); //检定或校准委托单 + put(ORIGINAL_RECORD, ORIGINAL_RECORD_BEAN); //检定或校准委托单 } }); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java index bf23ba3..3f0b946 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java @@ -15,4 +15,6 @@ //检定或校准委托单 String CALIBRATION_ORDER_BEAN = "calibrationOrderBean"; + //校准证书 + String ORIGINAL_RECORD_BEAN = "originalRecord"; } diff --git a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml index 56b4ae5..79db2e5 100644 --- a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml @@ -43,9 +43,9 @@ - SELECT - orderId,id,sampleName,sampleModel,manufacturingNo,appendixDescn,measureContent,remark,sampleStatus,customerName,measurePeriod, + SELECT orderId,id,sampleName,sampleModel,manufacturingNo,appendixDescn,measureContent,remark,sampleStatus,customerName,measurePeriod, validDeadline,measureLastTime,sampleNo,orderCode,customerNo FROM ( SELECT sample_name AS "sampleName",sample_no AS "sampleNo",sample_model AS "sampleModel",manufacturing_no AS @@ -126,14 +125,14 @@ )csi JOIN ( - SELECT sample_status AS "sampleStatus",sample_id as "sampleId",order_id AS "orderId",order_code AS "orderCode" - FROM business_order_sample_relation bosr - JOIN ( - SELECT id,order_code - FROM business_order - WHERE customer_id=#{request.customerId} - )bo ON bo.id=bosr.order_id - WHERE interchange_id is null + SELECT sample_status AS "sampleStatus",sample_id as "sampleId",order_id AS "orderId",order_code AS "orderCode" + FROM business_order_sample_relation bosr + JOIN ( + SELECT id,order_code + FROM business_order + WHERE customer_id=#{request.customerId} + )bo ON bo.id=bosr.order_id + WHERE interchange_id is null )bor ON bor.sampleId=csi.id ORDER BY create_time DESC diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java index 58ca71e..2306f21 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java @@ -228,4 +228,32 @@ @ApiModelProperty(value = "证书类型名称", dataType = "String") private String certificateReportTypeName; + @TableField("deliver_time") + @ApiModelProperty(value = "接收日期", dataType = "String") + private String deliverTime; + + @TableField("appearance_status") + @ApiModelProperty(value = "外观状态", dataType = "String") + private String appearanceStatus; + + @TableField("certificate_require") + @ApiModelProperty(value = "证书要求", dataType = "String") + private String certificateRequire; + + @TableField("sample_remark") + @ApiModelProperty(value = "样品备注", dataType = "String") + private String sampleRemark; + + @TableField("calibration_time") + @ApiModelProperty(value = "校验日期", dataType = "String") + private String calibrationTime; + + @TableField("verifier_id") + @ApiModelProperty(value = "联系人Id", dataType = "Long") + private Long verifierId; + + @TableField("verifier") + @ApiModelProperty(value = "联系人", dataType = "String") + private String verifier; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java index d2647ac..e2e8349 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java @@ -137,6 +137,31 @@ @TableField("update_time") private String updateTime; + + + @TableField("deliver_time") + @ApiModelProperty(value = "接收时间", dataType = "String") + private String deliverTime; + + @TableField("appearance_status") + @ApiModelProperty(value = "外观状态", dataType = "String") + private String appearanceStatus; + + @TableField("certificate_require") + @ApiModelProperty(value = "证书要求", dataType = "String") + private String certificateRequire; + + @TableField("sample_remark") + @ApiModelProperty(value = "样品状态", dataType = "String") + private String sampleRemark; + + @TableField("verifier_id") + @ApiModelProperty(value = "校验人员ID", dataType = "Long") + private Long verifierId; + + @TableField(exist = false) + @ApiModelProperty(value = "校验人员", dataType = "String") + private String verifierName; /** * 委托单信息 */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java index a558165..c7ae4d4 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; import com.casic.missiles.constants.MeterDictCode; +import io.swagger.annotations.Api; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.NoArgsConstructor; @@ -76,6 +77,10 @@ @ApiModelProperty(value = " 客户特殊要求", dataType = "String") private String specialRequire; + @TableField(exist = false) + @ApiModelProperty(value = "接收时间", dataType = "String") + private String deliverTime; + @ApiModelProperty(value = " 检定方式", dataType = "String") @DictCodeField(message = "检定方式不合法", cacheName = MeterDictCode.MEASURE_TYPE) diff --git a/casic-metering-service/pom.xml b/casic-metering-service/pom.xml index 6aede7a..aa8aa4d 100644 --- a/casic-metering-service/pom.xml +++ b/casic-metering-service/pom.xml @@ -23,12 +23,24 @@ com.casic casic-metering-model 2.0.0 + + + org.apache.poi + poi-ooxml + +
com.casic casic-metering-common 2.0.0 + + + org.apache.poi + poi-ooxml + + org.springframework.boot @@ -48,13 +60,22 @@ com.new.reader reader-api - com.deepoove poi-tl 1.10.0 + + + org.apache.logging.log4j + log4j-api + + - + + org.apache.poi + poi + 4.1.2 + com.aspose aspose-words diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java index 020624d..b9509c2 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java @@ -1,16 +1,19 @@ package com.casic.missiles.service.Impl.business; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.BaseApprovalSubmitRequest; +import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.business.certificate.CertificateMonitorResponse; @@ -41,6 +44,7 @@ import com.casic.missiles.service.business.IBusinessCertificateReportService; import com.casic.missiles.service.business.IBusinessOriginalRecordService; import com.casic.missiles.service.flowable.ApprovalOperateService; +import com.casic.missiles.service.listeners.register.PrintFileRegister; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; import com.casic.missiles.utils.PageUtil; @@ -55,9 +59,14 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; import java.util.*; import java.util.stream.Collectors; +import static com.casic.missiles.enums.business.FilePrintTypeEnum.CALIBRATION_CERTIFICATE; +import static com.casic.missiles.enums.notifyevent.PrintFileDataBeanNameAliasEnum.CALIBRATION_CERTIFICATE_BEAN; +import static com.casic.missiles.enums.notifyevent.PrintFileDataBeanNameAliasEnum.ORIGINAL_RECORD_BEAN; + /** *

* 业务管理-证书报告 服务实现类 @@ -88,6 +97,10 @@ private CustomerSampleServiceImpl sampleService; @Autowired private MeterStaffMapper staffMapper; + @Autowired + private PrintFileRegister printFileRegister; + @Autowired + private AbstractPermissionContext permissionContext; /** * 保存证书报告信息 @@ -326,6 +339,24 @@ return certificateMonitorResponsePage; } + @Override + public void exportOriginalFile(@Valid IdDTO idDTO, HttpServletResponse response) { + BusinessCertificateReport certificateReport = this.baseMapper.detailById(idDTO.getId()); + getApprovalSignName(certificateReport); + if (certificateReport.getOriginalRecordId() != null) { + try { + certificateReport.setBusinessOriginalRecord(originalRecordService.originalDetail(certificateReport.getOriginalRecordId())); + if (Objects.isNull(certificateReport.getBusinessOriginalRecord())) { + certificateReport.setBusinessOriginalRecord(new BusinessOriginalRecord()); + } + certificateReport.setCertificateReportTypeName(dictService.getDictNameByCode(MeterDictEnum.CERTIFICATION_CLASS, certificateReport.getCertificateReportType())); + printFileRegister.registerPrintFile(certificateReport,CALIBRATION_CERTIFICATE,response); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + private List handleApprovalStatus(Page page, CertificateReportApprovalRequest request) { List approvalList = new ArrayList<>(); List businessKeys = new ArrayList<>(); @@ -382,7 +413,7 @@ //合并未通过-拒绝和未通过-驳回 approvalList.addAll(rejectApprovalList); //分页处理 - if(!CollectionUtils.isEmpty(approvalList)) { + if (!CollectionUtils.isEmpty(approvalList)) { Page pages = PageUtil.getPages((int) page.getCurrent(), (int) page.getSize(), approvalList); page.setTotal(approvalList.size()); approvalList = pages.getRecords(); @@ -439,7 +470,7 @@ String approvalSignNames = ""; String[] approvalSignIds = certificateReport.getApprovalSignIds().split(","); for (String approvalSignId : approvalSignIds) { - approvalSignNames += approvalSignNameMap.get(Long.valueOf(approvalSignId))+ ","; + approvalSignNames += approvalSignNameMap.get(Long.valueOf(approvalSignId)) + ","; } approvalSignNames = approvalSignNames.substring(0, approvalSignNames.length() - 1); certificateReport.setApprovalSignName(approvalSignNames); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOriginalRecordServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOriginalRecordServiceImpl.java index 1c602b8..84d5f00 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOriginalRecordServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOriginalRecordServiceImpl.java @@ -1,12 +1,15 @@ package com.casic.missiles.service.Impl.business; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.business.originRecord.OriginRecordRequest; @@ -19,18 +22,32 @@ import com.casic.missiles.model.business.BusinessOriginalRecord; import com.casic.missiles.model.customer.CustomerSampleInfo; import com.casic.missiles.model.system.SystemTemplate; +import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.modular.system.service.IUserService; +import com.casic.missiles.modular.system.service.impl.UserServiceImpl; import com.casic.missiles.service.business.*; import com.casic.missiles.service.customer.CustomerSampleService; +import com.casic.missiles.service.listeners.register.PrintFileRegister; import com.casic.missiles.service.system.ISystemTemplateService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; +import liquibase.pro.packaged.A; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; +import org.springframework.util.ObjectUtils; +import org.springframework.util.StringUtils; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.util.List; +import java.util.Map; +import java.util.stream.Collector; +import java.util.stream.Collectors; + +import static com.casic.missiles.enums.business.FilePrintTypeEnum.ORIGINAL_RECORD; +import static com.casic.missiles.enums.notifyevent.PrintFileDataBeanNameAliasEnum.ORIGINAL_RECORD_BEAN; /** *

@@ -58,11 +75,19 @@ private IBaseExportService iBaseExportService; @Resource private ISystemTemplateService templateService; + @Autowired + private PrintFileRegister printFileRegister; + @Autowired + private AbstractPermissionContext permissionContext; @Override public Page originListPage(Page page, OriginRecordRequest request) throws Exception { // 获取列表 + List userList = permissionContext.getUserService().list(null); + Map userMap = userList.stream().collect( + Collectors.toMap(User::getId, User::getName) + ); Page originalRecordPage = this.baseMapper.originListPage(page, request); if (!CollectionUtils.isEmpty(originalRecordPage.getRecords())) { for (BusinessOriginalRecord record : originalRecordPage.getRecords()) { @@ -70,6 +95,9 @@ if (!StrUtil.isBlankIfStr(record.getSampleId())) { record.setCustomerSampleInfo(customerSampleService.sampleDetail(record.getSampleId())); } + if (!ObjectUtils.isEmpty(record.getVerifierId())) { + record.setVerifierName(userMap.get(record.getVerifierId())); + } } } return originalRecordPage; @@ -101,7 +129,10 @@ businessOriginalRecord.setFileList(originalRecordFileRelationService.getFilesByOriginalRecordId(id)); //查询是否有关联的监测设备 businessOriginalRecord.setEquipmentInfoList(originalRecordEquipmentRelationService.getEquipmentsByOriginalRecordId(id)); - + User user = permissionContext.getUserService().getById(businessOriginalRecord.getVerifierId()); + if (!ObjectUtils.isEmpty(user)) { + businessOriginalRecord.setVerifierName(user.getName()); + } //字典值转换 DictCodeUtils.convertDictCodeToName(businessOriginalRecord); @@ -181,6 +212,41 @@ } } + @Override + public void exportOriginalFile(IdDTO idDTO, HttpServletResponse response) throws Exception { + BusinessOriginalRecord businessOriginalRecord = this.baseMapper.selectById(idDTO.getId()); + if (businessOriginalRecord != null) { + //查询样品详情 + if (businessOriginalRecord.getSampleId() != null) { + businessOriginalRecord.setCustomerSampleInfo(customerSampleService.sampleDetail(businessOriginalRecord.getSampleId())); + } + //查询环境记录单详情 + if (businessOriginalRecord.getEnvironmentId() != null) { + businessOriginalRecord.setBusinessEnvironmentRecord(businessEnvironmentRecordService.environmentDetail(businessOriginalRecord.getEnvironmentId())); + } + //查询委托单详情 + if (businessOriginalRecord.getOrderId() != null) { + businessOriginalRecord.setBusinessOrder(businessOrderService.orderDetail(businessOriginalRecord.getOrderId())); + } + + //查询是否有关联的计量文件 + businessOriginalRecord.setFileList(originalRecordFileRelationService.getFilesByOriginalRecordId(idDTO.getId())); + //查询是否有关联的监测设备 + businessOriginalRecord.setEquipmentInfoList(originalRecordEquipmentRelationService.getEquipmentsByOriginalRecordId(idDTO.getId())); + + //字典值转换 + DictCodeUtils.convertDictCodeToName(businessOriginalRecord); + + //显示模板名称 + if (null != businessOriginalRecord.getTemplateId()) { + SystemTemplate systemTemplate = templateService.getById(businessOriginalRecord.getTemplateId()); + if (systemTemplate != null) { + printFileRegister.registerPrintFile(businessOriginalRecord, ORIGINAL_RECORD, response); + } + } + } + } + private void initBusinessEnvironmentRecord(BusinessOriginalRecord businessOriginalRecord) { Long maxNo = this.baseMapper.selectMaxCode(); String originNo = NumberGeneratorUtil.getContactNo(PrefixCodeEnum.ORIGIN_PREFIX, maxNo); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/SystemTemplateUserRelationServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/SystemTemplateUserRelationServiceImpl.java index 315f0a2..493349b 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/SystemTemplateUserRelationServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/SystemTemplateUserRelationServiceImpl.java @@ -8,7 +8,7 @@ /** *

- * 原始记录/证书报告模板与用户关联表(原始记录/证书报告模板可使用人) 服务实现类 + * /证书报告模板与用户关联表(原始记录/证书报告模板可使用人) 服务实现类 *

* * @author wangpeng diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessCertificateReportService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessCertificateReportService.java index 81cb155..8460e4d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessCertificateReportService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessCertificateReportService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.dto.BaseApprovalSubmitRequest; +import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.business.certificate.CertificateMonitorResponse; import com.casic.missiles.dto.business.certificate.CertificateReportApprovalRequest; @@ -11,8 +12,10 @@ import com.casic.missiles.dto.customer.sample.CustomerSampleIdRequest; import com.casic.missiles.dto.flowable.ApprovalDeleteRequest; import com.casic.missiles.model.business.BusinessCertificateReport; +import org.springframework.web.bind.annotation.RequestBody; import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; import java.util.List; /** @@ -47,5 +50,7 @@ Page certificateMonitorsById(CustomerSampleIdRequest customerSampleIdRequest) throws Exception; + void exportOriginalFile(@RequestBody @Valid IdDTO idDTO, HttpServletResponse response); + Page certificateRecordsById(CustomerSampleIdRequest customerSampleIdRequest) throws Exception; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessOriginalRecordService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessOriginalRecordService.java index cbb6b40..047f931 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessOriginalRecordService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessOriginalRecordService.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.business.originRecord.OriginRecordRequest; import com.casic.missiles.model.business.BusinessOriginalRecord; @@ -11,7 +12,7 @@ /** *

- * 服务类 + * 服务类 *

* * @author wangpeng @@ -21,7 +22,7 @@ Page originListPage(Page page, OriginRecordRequest request) throws Exception; - Page samplesByOderId(Page sampleInfoPage, OriginRecordRequest request) ; + Page samplesByOderId(Page sampleInfoPage, OriginRecordRequest request); BusinessOriginalRecord originalDetail(Long id) throws Exception; @@ -33,5 +34,7 @@ void originExport(OriginRecordRequest request, HttpServletResponse response); + void exportOriginalFile(IdDTO idDTO, HttpServletResponse response) throws Exception; + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java new file mode 100644 index 0000000..63d9aaf --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java @@ -0,0 +1,99 @@ +package com.casic.missiles.service.listeners.register; + +import com.casic.missiles.service.listeners.register.FilePrintRegisterUtils; +import com.casic.missiles.utils.QRCodeUtil; +import com.deepoove.poi.XWPFTemplate; +import com.deepoove.poi.config.Configure; +import com.deepoove.poi.config.ConfigureBuilder; +import com.spire.doc.Document; +import com.spire.doc.FileFormat; +import org.apache.coyote.OutputBuffer; + +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author cz + */ +public class Example { + + private static String localPathUrl = "D:\\casic\\cut\\"; + + /** + * 多个word合并为一个doc样例 + */ + public static void mergeDoc() { + String word1Url = localPathUrl + "211.docx"; +// String word2Url = localPathUrl + "202.docx"; +// //加载文档1 + Document doc1 = new Document(word1Url); +// //调用方法将文档2插入到文档1 +// doc1.insertTextFromFile(word2Url, FileFormat.Docx_2010); +// //保存合并后的文档 +// doc1.saveToFile(word1Url, FileFormat.Docx_2010); + doc1.saveToFile(localPathUrl + "add.docx", FileFormat.Docx); + } + + /** + * 表格合并样例 + */ + public static void tableMerge() { + String localPathUrl = "D:\\casic\\cut\\"; + // 目标文件地址 + String wordOldUrl = localPathUrl + "204.doc"; + Map params = new HashMap<>(); + List> assetList = new ArrayList<>(); + for (int i = 0; i < 8; i++) { + Map assetMap = new HashMap<>(); + assetMap.put("seq", String.valueOf(i / 4)); + assetMap.put("customer", "供方" + String.valueOf(i / 4)); + assetMap.put("customerName", "供方名字" + i); + assetMap.put("model", "型号" + i); + assetMap.put("startDate", "启用时间" + i); + assetMap.put("trainCondition", "维修时间"); + assetMap.put("status", "我醉"); + assetMap.put("evaluate", "我醒"); + assetList.add(assetMap); + } + params.put("train", assetList); + params.put("staffName", "张三"); + params.put("gender", "男"); + params.put("birthday", "2202-10-5"); + params.put("nation", "汉"); + params.put("enlistmentDate", "2196-9-18"); + params.put("partyDate", "2188-9-18"); + params.put("degree", "博士"); + params.put("test", "\uF052"); + params.put("error", "\uF0A3"); +// String newOldUrl = FilePrintRegisterUtils.exportWord(wordOldUrl, localPathUrl, "temp.docx", params, null); +// System.out.println(newOldUrl); + } + + + private static void textBoxTest() throws IOException { + Map map = new HashMap<>(); + ConfigureBuilder builder = Configure.builder(); + XWPFTemplate compile = XWPFTemplate.compile("D:\\casic\\cut\\204.docx", builder.build()); + compile.render(map); + compile.writeToFile("D:\\casic\\cut\\out_test3.docx"); + } + + + /** + * 1、生成二维码图片 + * 2、二维码图片进行图片的合成 + * 3、 + * @param args + * @throws Exception + */ + public static void main(String[] args) throws Exception { + OutputStream output =new FileOutputStream("D:\\casic\\cut\\test.png"); + QRCodeUtil.getQRCode("D:\\casic\\cut\\1航天检定模版v1.xls", output); + } + +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java index 4fb3b33..da44ae2 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java @@ -2,12 +2,15 @@ import cn.hutool.core.lang.Assert; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.util.ListUtils; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.casic.missiles.dto.business.certificate.ElectronicImage; import com.casic.missiles.dto.business.file.FilePrintRegister; -import com.casic.missiles.service.listeners.util.ParseWord07; +import com.casic.missiles.service.listeners.util.ParseWord07; import com.casic.missiles.service.listeners.util.PdfUtils; +import com.casic.missiles.utils.QRCodeUtil; import com.spire.doc.*; import com.spire.doc.documents.*; import com.spire.doc.fields.DocPicture; @@ -45,20 +48,7 @@ */ public static String filePrintGenerate(FilePrintRegister filePrintRegister) throws RuntimeException { //1、按照模板填充数据,并导出word,执行填充行数之后,再进行页数的填充 - String wordOldUrl = exportWord(filePrintRegister.getTemplatePath(), filePrintRegister.getTemDir(), filePrintRegister.getFileName(), filePrintRegister.getParams()); -// Document document = new Document(); -// document.loadFromFile(wordOldUrl); -// document.getPageCount(); - //设置透明属性 1、获取照片 2、签章背景透明设置 3、设置照片路径和照片类型进行图片保存 -// for (ElectronicImage electronicSeal : filePrintRegister.getElectronicImageList()) { -// BufferedImage bi = readImage(electronicSeal.getElectronicSealImageUrl()); -// BufferedImage electronSealImage = convertLayout(bi, electronicSeal.getDiaphaneity()); -// String stampImgUrl = electronicSeal.getElectronicSealImageUrl(); -// String imagePath = stampImgUrl.substring(0, stampImgUrl.length() - 4) + "1.png"; -// String[] imageCutOffContents = stampImgUrl.split("."); -// electronicSeal.setElectronicSealImageUrl(imagePath); -// saveFile(electronSealImage, imageCutOffContents[imageCutOffContents.length - 1], imagePath); -// } +// String wordOldUrl = exportWord(filePrintRegister.getTemplatePath(), filePrintRegister.getTemDir(), filePrintRegister.getFileName(), filePrintRegister.getParams()); // 初始化world,pdf名称参数 String wordNewUrl = filePrintRegister.getTemplatePath(); //默认转为docx,只需要进行docx的替换即可 @@ -71,24 +61,24 @@ .collect( Collectors.groupingBy(ElectronicImage::getKeyWord) ); - //3、根据关键字进行添加签章和签字 - for (Map.Entry> entry : sameKeyWordSealMaps.entrySet()) { - List electronicSeals = entry.getValue(); - addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSeals); - } - //获取没有关键字的图片,即绝对路径的图片 - List absolutePathImageList = filePrintRegister.getElectronicImageList().stream() - .filter(electronicImage -> StringUtils.isEmpty(electronicImage.getKeyWord())) - .collect(Collectors.toList()); - //根据设置的绝对路径进行图片的填充 - for (ElectronicImage absolutePathImage : absolutePathImageList) { - addAbsolutePathStamp(wordOldUrl, wordNewUrl, absolutePathImage); - } - //由于合成word总页数存在不准确,先转换为pdf进行获取合成证书总页数, 处理齐缝章 +// //3、根据关键字进行添加签章和签字 +// for (Map.Entry> entry : sameKeyWordSealMaps.entrySet()) { +// List electronicSeals = entry.getValue(); +// addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSeals); +// } +//// //获取没有关键字的图片,即绝对路径的图片 +// List absolutePathImageList = filePrintRegister.getElectronicImageList().stream() +// .filter(electronicImage -> StringUtils.isEmpty(electronicImage.getKeyWord())) +// .collect(Collectors.toList()); +// //根据设置的绝对路径进行图片的填充 +// for (ElectronicImage absolutePathImage : absolutePathImageList) { +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, absolutePathImage); +// } +// 由于合成word总页数存在不准确,先转换为pdf进行获取合成证书总页数, 处理齐缝章 } // 4、将新word转化为pdf文件 - wordToPdf(wordNewUrl, pdfNewUrl); - return pdfNewUrl; +// wordToPdf(wordNewUrl, pdfNewUrl); + return filePrintRegister.getTemplatePath(); } @@ -163,7 +153,7 @@ * @param pdfNewUrl 存储新PDF文件路径 */ public static void wordToPdf(String wordNewUrl, String pdfNewUrl) { - PdfUtils.doc2pdf(wordNewUrl,pdfNewUrl); + PdfUtils.doc2pdf(wordNewUrl, pdfNewUrl); //// 将新Word文档转换为PDF文件 // Document document = new Document(); // document.loadFromFile(wordNewUrl); @@ -442,62 +432,27 @@ public static void main(String[] args) throws RuntimeException { - String pathUrl = "D:\\casic"; - String localPathUrl = "D:\\casic\\"; - // 目标文件地址 - String wordOldUrl = pathUrl + "\\工作记录单.docx"; - // 添加电子印章后文件存放地址 - String wordNewUrl = localPathUrl + "\\tem1.docx"; - Map params = new HashMap<>(); - List> assetList = new ArrayList<>(); - for (int i = 0; i < 3; i++) { - Map assetMap = new HashMap<>(); - assetMap.put("assetName", "我不是设备名称"); - assetMap.put("model", "我不是型号"); - assetMap.put("assetNo", "我是设备编号"); - assetList.add(assetMap); - } - params.put("assetList", assetList); - params.put("logNo", "本编号"); - params.put("laboratoryName", "此去半生"); - params.put("executiveAddress", "猜猜我在哪里"); - exportWord(wordOldUrl, localPathUrl, "temp.docx", params); + } -// //WORD转PDF存放位置 -// String pdfNewUrl = localPathUrl + "\\tem.pdf"; -// //电子印章图片地址 -// String stampNameImgUr = localPathUrl + "\\name1_1678844060471.png"; -// //电子签名图片地址 -// String stampSealImgUrl = localPathUrl + "\\ceshi.jpg"; -// // word文档内容关键字 -// FilePrintRegisterUtils addStampUtils = new FilePrintRegisterUtils(); -// List electronicSealList = new ArrayList(11); -// ElectronicImage electronicImage = defaultElectronicSignName("批准人"); -// electronicImage.setElectronicSealImageUrl(stampNameImgUr); -// electronicSealList.add(electronicImage); -// addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); -// //加载文档 -// Document document = new Document(); -// document.loadFromFile(wordOldUrl); -// //获取段落总数 -// int count = document.getPageCount(); -// System.out.println(count); -// String[] imageCutOffContents = stampSealImgUrl.split("\\."); -// CropPicture cropPicture = CropPicture.builder() -// .targetImgUrl(stampSealImgUrl) -// .cutCols(count) -// .cutRows(1) -// .subfileUrl(imageCutOffContents[imageCutOffContents.length - 2]) -// .subfileType("." + imageCutOffContents[imageCutOffContents.length - 1]) -// .build(); -// try { -// ImageTool.crosswiseCutting(cropPicture); -// } catch (IOException ex) { -// -// } -//// 将新word转化为pdf文件 -//// addStampUtils.wordToPdf(wordNewUrl, pdfNewUrl); + public static void QRCodeExcel() throws Exception { +// String path = "D:\\casic\\cut\\"; +// String fileName = path + "1航天检定模版v1.xls"; +// List list = ListUtils.newArrayList(); +// ImageDemoData imageDemoData = new ImageDemoData(); +// list.add(imageDemoData); +// // 创建字节数组输出流 +// ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); +// // 调用 QrCodeUtil.generate() 生成二维码,并将结果写入输出流 +// QRCodeUtil.getQRCode("helloworld", outputStream); +// // 从输出流中获取生成的二维码图像数据 +// byte[] qrCodeData = outputStream.toByteArray(); +// imageDemoData.setByteArray(qrCodeData); +// imageDemoData.setShortDesc("helloworld"); +// // 关闭输出流 +// outputStream.close(); +// // 写入数据 +// EasyExcel.write(fileName, ImageDemoData.class).sheet().doWrite(list); } protected static ElectronicImage defaultElectronicSignSeal(String keyWord, float horizontal) { diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java index 114283e..d9b2bab 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java @@ -171,4 +171,12 @@ return ReturnUtil.success(super.packForBT(certificateReportService.certificateMonitorsById(customerSampleIdRequest))); } + + @ApiOperation("导出word打印") + @PostMapping("/exportFile") + public void exportOriginalFile(@RequestBody @Valid IdDTO idDTO, HttpServletResponse response) throws Exception { + certificateReportService.exportOriginalFile(idDTO, response); + } + + } diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index cf47c98..9e7b379 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -177,7 +177,7 @@ return labExecutiveInfoService.sampleReceive(requestList); } - @ApiOperation("实验室检测-扫描增加任务到检测中(任务分发管理中待分发->检测中 / 实验室任务待检测->检测中)") + @ApiOperation("我的检测-扫描增加任务到检测中(任务分发管理中待分发->检测中 / 实验室任务待检测->检测中)") @PostMapping("/myExecutive/add") public ReturnDTO sampleAdd(@RequestBody @Valid List requestList) { return labExecutiveInfoService.sampleAdd(requestList); diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java index db996fc..ad1431a 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java @@ -56,7 +56,7 @@ @ApiOperation("原始记录详情") @PostMapping("/detail") - public ReturnDTO originalDetail(@RequestBody @Valid IdDTO idDTO) throws Exception{ + public ReturnDTO originalDetail(@RequestBody @Valid IdDTO idDTO) throws Exception { Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); @@ -99,10 +99,16 @@ businessOriginalRecordService.originExport(request, response); } + @ApiOperation("导出word打印") + @PostMapping("/exportFile") + public void exportOriginalFile(@RequestBody @Valid IdDTO idDTO, HttpServletResponse response) throws Exception { + businessOriginalRecordService.exportOriginalFile(idDTO, response); + } + @ApiOperation("根据委托单id查询关联样品信息(分页)") @PostMapping("/samplesByOderId") - public ReturnDTO> samplesByOderId(@RequestBody @Valid OriginRecordRequest request) { + public ReturnDTO> samplesByOderId(@RequestBody @Valid OriginRecordRequest request) { Page page = PageFactory.defaultPage(); return ReturnUtil.success(super.packForBT(businessOriginalRecordService.samplesByOderId(page, request))); } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java index 72500d6..81def5d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java @@ -5,4 +5,5 @@ String CALIBRATION_CERTIFICATE = "自有设备内部检校证书"; String TEST_ORDER = "检测委托单"; String CALIBRATION_ORDER = "检定或校准委托单"; + String ORIGINAL_RECORD = "原始记录"; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java index f42477a..3f1a3b2 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java @@ -12,6 +12,7 @@ put(TEST_REPORT, TEST_REPORT_BEAN); //测试报告 put(TEST_ORDER, TEST_ORDER_BEAN); //检测委托单 put(CALIBRATION_ORDER, CALIBRATION_ORDER_BEAN); //检定或校准委托单 + put(ORIGINAL_RECORD, ORIGINAL_RECORD_BEAN); //检定或校准委托单 } }); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java index bf23ba3..3f0b946 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java @@ -15,4 +15,6 @@ //检定或校准委托单 String CALIBRATION_ORDER_BEAN = "calibrationOrderBean"; + //校准证书 + String ORIGINAL_RECORD_BEAN = "originalRecord"; } diff --git a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml index 56b4ae5..79db2e5 100644 --- a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml @@ -43,9 +43,9 @@ - SELECT - orderId,id,sampleName,sampleModel,manufacturingNo,appendixDescn,measureContent,remark,sampleStatus,customerName,measurePeriod, + SELECT orderId,id,sampleName,sampleModel,manufacturingNo,appendixDescn,measureContent,remark,sampleStatus,customerName,measurePeriod, validDeadline,measureLastTime,sampleNo,orderCode,customerNo FROM ( SELECT sample_name AS "sampleName",sample_no AS "sampleNo",sample_model AS "sampleModel",manufacturing_no AS @@ -126,14 +125,14 @@ )csi JOIN ( - SELECT sample_status AS "sampleStatus",sample_id as "sampleId",order_id AS "orderId",order_code AS "orderCode" - FROM business_order_sample_relation bosr - JOIN ( - SELECT id,order_code - FROM business_order - WHERE customer_id=#{request.customerId} - )bo ON bo.id=bosr.order_id - WHERE interchange_id is null + SELECT sample_status AS "sampleStatus",sample_id as "sampleId",order_id AS "orderId",order_code AS "orderCode" + FROM business_order_sample_relation bosr + JOIN ( + SELECT id,order_code + FROM business_order + WHERE customer_id=#{request.customerId} + )bo ON bo.id=bosr.order_id + WHERE interchange_id is null )bor ON bor.sampleId=csi.id ORDER BY create_time DESC diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java index 58ca71e..2306f21 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java @@ -228,4 +228,32 @@ @ApiModelProperty(value = "证书类型名称", dataType = "String") private String certificateReportTypeName; + @TableField("deliver_time") + @ApiModelProperty(value = "接收日期", dataType = "String") + private String deliverTime; + + @TableField("appearance_status") + @ApiModelProperty(value = "外观状态", dataType = "String") + private String appearanceStatus; + + @TableField("certificate_require") + @ApiModelProperty(value = "证书要求", dataType = "String") + private String certificateRequire; + + @TableField("sample_remark") + @ApiModelProperty(value = "样品备注", dataType = "String") + private String sampleRemark; + + @TableField("calibration_time") + @ApiModelProperty(value = "校验日期", dataType = "String") + private String calibrationTime; + + @TableField("verifier_id") + @ApiModelProperty(value = "联系人Id", dataType = "Long") + private Long verifierId; + + @TableField("verifier") + @ApiModelProperty(value = "联系人", dataType = "String") + private String verifier; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java index d2647ac..e2e8349 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java @@ -137,6 +137,31 @@ @TableField("update_time") private String updateTime; + + + @TableField("deliver_time") + @ApiModelProperty(value = "接收时间", dataType = "String") + private String deliverTime; + + @TableField("appearance_status") + @ApiModelProperty(value = "外观状态", dataType = "String") + private String appearanceStatus; + + @TableField("certificate_require") + @ApiModelProperty(value = "证书要求", dataType = "String") + private String certificateRequire; + + @TableField("sample_remark") + @ApiModelProperty(value = "样品状态", dataType = "String") + private String sampleRemark; + + @TableField("verifier_id") + @ApiModelProperty(value = "校验人员ID", dataType = "Long") + private Long verifierId; + + @TableField(exist = false) + @ApiModelProperty(value = "校验人员", dataType = "String") + private String verifierName; /** * 委托单信息 */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java index a558165..c7ae4d4 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; import com.casic.missiles.constants.MeterDictCode; +import io.swagger.annotations.Api; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.NoArgsConstructor; @@ -76,6 +77,10 @@ @ApiModelProperty(value = " 客户特殊要求", dataType = "String") private String specialRequire; + @TableField(exist = false) + @ApiModelProperty(value = "接收时间", dataType = "String") + private String deliverTime; + @ApiModelProperty(value = " 检定方式", dataType = "String") @DictCodeField(message = "检定方式不合法", cacheName = MeterDictCode.MEASURE_TYPE) diff --git a/casic-metering-service/pom.xml b/casic-metering-service/pom.xml index 6aede7a..aa8aa4d 100644 --- a/casic-metering-service/pom.xml +++ b/casic-metering-service/pom.xml @@ -23,12 +23,24 @@ com.casic casic-metering-model 2.0.0 + + + org.apache.poi + poi-ooxml + +
com.casic casic-metering-common 2.0.0 + + + org.apache.poi + poi-ooxml + + org.springframework.boot @@ -48,13 +60,22 @@ com.new.reader reader-api - com.deepoove poi-tl 1.10.0 + + + org.apache.logging.log4j + log4j-api + + - + + org.apache.poi + poi + 4.1.2 + com.aspose aspose-words diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java index 020624d..b9509c2 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java @@ -1,16 +1,19 @@ package com.casic.missiles.service.Impl.business; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.BaseApprovalSubmitRequest; +import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.business.certificate.CertificateMonitorResponse; @@ -41,6 +44,7 @@ import com.casic.missiles.service.business.IBusinessCertificateReportService; import com.casic.missiles.service.business.IBusinessOriginalRecordService; import com.casic.missiles.service.flowable.ApprovalOperateService; +import com.casic.missiles.service.listeners.register.PrintFileRegister; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; import com.casic.missiles.utils.PageUtil; @@ -55,9 +59,14 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; import java.util.*; import java.util.stream.Collectors; +import static com.casic.missiles.enums.business.FilePrintTypeEnum.CALIBRATION_CERTIFICATE; +import static com.casic.missiles.enums.notifyevent.PrintFileDataBeanNameAliasEnum.CALIBRATION_CERTIFICATE_BEAN; +import static com.casic.missiles.enums.notifyevent.PrintFileDataBeanNameAliasEnum.ORIGINAL_RECORD_BEAN; + /** *

* 业务管理-证书报告 服务实现类 @@ -88,6 +97,10 @@ private CustomerSampleServiceImpl sampleService; @Autowired private MeterStaffMapper staffMapper; + @Autowired + private PrintFileRegister printFileRegister; + @Autowired + private AbstractPermissionContext permissionContext; /** * 保存证书报告信息 @@ -326,6 +339,24 @@ return certificateMonitorResponsePage; } + @Override + public void exportOriginalFile(@Valid IdDTO idDTO, HttpServletResponse response) { + BusinessCertificateReport certificateReport = this.baseMapper.detailById(idDTO.getId()); + getApprovalSignName(certificateReport); + if (certificateReport.getOriginalRecordId() != null) { + try { + certificateReport.setBusinessOriginalRecord(originalRecordService.originalDetail(certificateReport.getOriginalRecordId())); + if (Objects.isNull(certificateReport.getBusinessOriginalRecord())) { + certificateReport.setBusinessOriginalRecord(new BusinessOriginalRecord()); + } + certificateReport.setCertificateReportTypeName(dictService.getDictNameByCode(MeterDictEnum.CERTIFICATION_CLASS, certificateReport.getCertificateReportType())); + printFileRegister.registerPrintFile(certificateReport,CALIBRATION_CERTIFICATE,response); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + private List handleApprovalStatus(Page page, CertificateReportApprovalRequest request) { List approvalList = new ArrayList<>(); List businessKeys = new ArrayList<>(); @@ -382,7 +413,7 @@ //合并未通过-拒绝和未通过-驳回 approvalList.addAll(rejectApprovalList); //分页处理 - if(!CollectionUtils.isEmpty(approvalList)) { + if (!CollectionUtils.isEmpty(approvalList)) { Page pages = PageUtil.getPages((int) page.getCurrent(), (int) page.getSize(), approvalList); page.setTotal(approvalList.size()); approvalList = pages.getRecords(); @@ -439,7 +470,7 @@ String approvalSignNames = ""; String[] approvalSignIds = certificateReport.getApprovalSignIds().split(","); for (String approvalSignId : approvalSignIds) { - approvalSignNames += approvalSignNameMap.get(Long.valueOf(approvalSignId))+ ","; + approvalSignNames += approvalSignNameMap.get(Long.valueOf(approvalSignId)) + ","; } approvalSignNames = approvalSignNames.substring(0, approvalSignNames.length() - 1); certificateReport.setApprovalSignName(approvalSignNames); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOriginalRecordServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOriginalRecordServiceImpl.java index 1c602b8..84d5f00 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOriginalRecordServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOriginalRecordServiceImpl.java @@ -1,12 +1,15 @@ package com.casic.missiles.service.Impl.business; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.business.originRecord.OriginRecordRequest; @@ -19,18 +22,32 @@ import com.casic.missiles.model.business.BusinessOriginalRecord; import com.casic.missiles.model.customer.CustomerSampleInfo; import com.casic.missiles.model.system.SystemTemplate; +import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.modular.system.service.IUserService; +import com.casic.missiles.modular.system.service.impl.UserServiceImpl; import com.casic.missiles.service.business.*; import com.casic.missiles.service.customer.CustomerSampleService; +import com.casic.missiles.service.listeners.register.PrintFileRegister; import com.casic.missiles.service.system.ISystemTemplateService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; +import liquibase.pro.packaged.A; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; +import org.springframework.util.ObjectUtils; +import org.springframework.util.StringUtils; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.util.List; +import java.util.Map; +import java.util.stream.Collector; +import java.util.stream.Collectors; + +import static com.casic.missiles.enums.business.FilePrintTypeEnum.ORIGINAL_RECORD; +import static com.casic.missiles.enums.notifyevent.PrintFileDataBeanNameAliasEnum.ORIGINAL_RECORD_BEAN; /** *

@@ -58,11 +75,19 @@ private IBaseExportService iBaseExportService; @Resource private ISystemTemplateService templateService; + @Autowired + private PrintFileRegister printFileRegister; + @Autowired + private AbstractPermissionContext permissionContext; @Override public Page originListPage(Page page, OriginRecordRequest request) throws Exception { // 获取列表 + List userList = permissionContext.getUserService().list(null); + Map userMap = userList.stream().collect( + Collectors.toMap(User::getId, User::getName) + ); Page originalRecordPage = this.baseMapper.originListPage(page, request); if (!CollectionUtils.isEmpty(originalRecordPage.getRecords())) { for (BusinessOriginalRecord record : originalRecordPage.getRecords()) { @@ -70,6 +95,9 @@ if (!StrUtil.isBlankIfStr(record.getSampleId())) { record.setCustomerSampleInfo(customerSampleService.sampleDetail(record.getSampleId())); } + if (!ObjectUtils.isEmpty(record.getVerifierId())) { + record.setVerifierName(userMap.get(record.getVerifierId())); + } } } return originalRecordPage; @@ -101,7 +129,10 @@ businessOriginalRecord.setFileList(originalRecordFileRelationService.getFilesByOriginalRecordId(id)); //查询是否有关联的监测设备 businessOriginalRecord.setEquipmentInfoList(originalRecordEquipmentRelationService.getEquipmentsByOriginalRecordId(id)); - + User user = permissionContext.getUserService().getById(businessOriginalRecord.getVerifierId()); + if (!ObjectUtils.isEmpty(user)) { + businessOriginalRecord.setVerifierName(user.getName()); + } //字典值转换 DictCodeUtils.convertDictCodeToName(businessOriginalRecord); @@ -181,6 +212,41 @@ } } + @Override + public void exportOriginalFile(IdDTO idDTO, HttpServletResponse response) throws Exception { + BusinessOriginalRecord businessOriginalRecord = this.baseMapper.selectById(idDTO.getId()); + if (businessOriginalRecord != null) { + //查询样品详情 + if (businessOriginalRecord.getSampleId() != null) { + businessOriginalRecord.setCustomerSampleInfo(customerSampleService.sampleDetail(businessOriginalRecord.getSampleId())); + } + //查询环境记录单详情 + if (businessOriginalRecord.getEnvironmentId() != null) { + businessOriginalRecord.setBusinessEnvironmentRecord(businessEnvironmentRecordService.environmentDetail(businessOriginalRecord.getEnvironmentId())); + } + //查询委托单详情 + if (businessOriginalRecord.getOrderId() != null) { + businessOriginalRecord.setBusinessOrder(businessOrderService.orderDetail(businessOriginalRecord.getOrderId())); + } + + //查询是否有关联的计量文件 + businessOriginalRecord.setFileList(originalRecordFileRelationService.getFilesByOriginalRecordId(idDTO.getId())); + //查询是否有关联的监测设备 + businessOriginalRecord.setEquipmentInfoList(originalRecordEquipmentRelationService.getEquipmentsByOriginalRecordId(idDTO.getId())); + + //字典值转换 + DictCodeUtils.convertDictCodeToName(businessOriginalRecord); + + //显示模板名称 + if (null != businessOriginalRecord.getTemplateId()) { + SystemTemplate systemTemplate = templateService.getById(businessOriginalRecord.getTemplateId()); + if (systemTemplate != null) { + printFileRegister.registerPrintFile(businessOriginalRecord, ORIGINAL_RECORD, response); + } + } + } + } + private void initBusinessEnvironmentRecord(BusinessOriginalRecord businessOriginalRecord) { Long maxNo = this.baseMapper.selectMaxCode(); String originNo = NumberGeneratorUtil.getContactNo(PrefixCodeEnum.ORIGIN_PREFIX, maxNo); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/SystemTemplateUserRelationServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/SystemTemplateUserRelationServiceImpl.java index 315f0a2..493349b 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/SystemTemplateUserRelationServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/SystemTemplateUserRelationServiceImpl.java @@ -8,7 +8,7 @@ /** *

- * 原始记录/证书报告模板与用户关联表(原始记录/证书报告模板可使用人) 服务实现类 + * /证书报告模板与用户关联表(原始记录/证书报告模板可使用人) 服务实现类 *

* * @author wangpeng diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessCertificateReportService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessCertificateReportService.java index 81cb155..8460e4d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessCertificateReportService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessCertificateReportService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.dto.BaseApprovalSubmitRequest; +import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.business.certificate.CertificateMonitorResponse; import com.casic.missiles.dto.business.certificate.CertificateReportApprovalRequest; @@ -11,8 +12,10 @@ import com.casic.missiles.dto.customer.sample.CustomerSampleIdRequest; import com.casic.missiles.dto.flowable.ApprovalDeleteRequest; import com.casic.missiles.model.business.BusinessCertificateReport; +import org.springframework.web.bind.annotation.RequestBody; import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; import java.util.List; /** @@ -47,5 +50,7 @@ Page certificateMonitorsById(CustomerSampleIdRequest customerSampleIdRequest) throws Exception; + void exportOriginalFile(@RequestBody @Valid IdDTO idDTO, HttpServletResponse response); + Page certificateRecordsById(CustomerSampleIdRequest customerSampleIdRequest) throws Exception; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessOriginalRecordService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessOriginalRecordService.java index cbb6b40..047f931 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessOriginalRecordService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessOriginalRecordService.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.business.originRecord.OriginRecordRequest; import com.casic.missiles.model.business.BusinessOriginalRecord; @@ -11,7 +12,7 @@ /** *

- * 服务类 + * 服务类 *

* * @author wangpeng @@ -21,7 +22,7 @@ Page originListPage(Page page, OriginRecordRequest request) throws Exception; - Page samplesByOderId(Page sampleInfoPage, OriginRecordRequest request) ; + Page samplesByOderId(Page sampleInfoPage, OriginRecordRequest request); BusinessOriginalRecord originalDetail(Long id) throws Exception; @@ -33,5 +34,7 @@ void originExport(OriginRecordRequest request, HttpServletResponse response); + void exportOriginalFile(IdDTO idDTO, HttpServletResponse response) throws Exception; + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java new file mode 100644 index 0000000..63d9aaf --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java @@ -0,0 +1,99 @@ +package com.casic.missiles.service.listeners.register; + +import com.casic.missiles.service.listeners.register.FilePrintRegisterUtils; +import com.casic.missiles.utils.QRCodeUtil; +import com.deepoove.poi.XWPFTemplate; +import com.deepoove.poi.config.Configure; +import com.deepoove.poi.config.ConfigureBuilder; +import com.spire.doc.Document; +import com.spire.doc.FileFormat; +import org.apache.coyote.OutputBuffer; + +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author cz + */ +public class Example { + + private static String localPathUrl = "D:\\casic\\cut\\"; + + /** + * 多个word合并为一个doc样例 + */ + public static void mergeDoc() { + String word1Url = localPathUrl + "211.docx"; +// String word2Url = localPathUrl + "202.docx"; +// //加载文档1 + Document doc1 = new Document(word1Url); +// //调用方法将文档2插入到文档1 +// doc1.insertTextFromFile(word2Url, FileFormat.Docx_2010); +// //保存合并后的文档 +// doc1.saveToFile(word1Url, FileFormat.Docx_2010); + doc1.saveToFile(localPathUrl + "add.docx", FileFormat.Docx); + } + + /** + * 表格合并样例 + */ + public static void tableMerge() { + String localPathUrl = "D:\\casic\\cut\\"; + // 目标文件地址 + String wordOldUrl = localPathUrl + "204.doc"; + Map params = new HashMap<>(); + List> assetList = new ArrayList<>(); + for (int i = 0; i < 8; i++) { + Map assetMap = new HashMap<>(); + assetMap.put("seq", String.valueOf(i / 4)); + assetMap.put("customer", "供方" + String.valueOf(i / 4)); + assetMap.put("customerName", "供方名字" + i); + assetMap.put("model", "型号" + i); + assetMap.put("startDate", "启用时间" + i); + assetMap.put("trainCondition", "维修时间"); + assetMap.put("status", "我醉"); + assetMap.put("evaluate", "我醒"); + assetList.add(assetMap); + } + params.put("train", assetList); + params.put("staffName", "张三"); + params.put("gender", "男"); + params.put("birthday", "2202-10-5"); + params.put("nation", "汉"); + params.put("enlistmentDate", "2196-9-18"); + params.put("partyDate", "2188-9-18"); + params.put("degree", "博士"); + params.put("test", "\uF052"); + params.put("error", "\uF0A3"); +// String newOldUrl = FilePrintRegisterUtils.exportWord(wordOldUrl, localPathUrl, "temp.docx", params, null); +// System.out.println(newOldUrl); + } + + + private static void textBoxTest() throws IOException { + Map map = new HashMap<>(); + ConfigureBuilder builder = Configure.builder(); + XWPFTemplate compile = XWPFTemplate.compile("D:\\casic\\cut\\204.docx", builder.build()); + compile.render(map); + compile.writeToFile("D:\\casic\\cut\\out_test3.docx"); + } + + + /** + * 1、生成二维码图片 + * 2、二维码图片进行图片的合成 + * 3、 + * @param args + * @throws Exception + */ + public static void main(String[] args) throws Exception { + OutputStream output =new FileOutputStream("D:\\casic\\cut\\test.png"); + QRCodeUtil.getQRCode("D:\\casic\\cut\\1航天检定模版v1.xls", output); + } + +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java index 4fb3b33..da44ae2 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java @@ -2,12 +2,15 @@ import cn.hutool.core.lang.Assert; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.util.ListUtils; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.casic.missiles.dto.business.certificate.ElectronicImage; import com.casic.missiles.dto.business.file.FilePrintRegister; -import com.casic.missiles.service.listeners.util.ParseWord07; +import com.casic.missiles.service.listeners.util.ParseWord07; import com.casic.missiles.service.listeners.util.PdfUtils; +import com.casic.missiles.utils.QRCodeUtil; import com.spire.doc.*; import com.spire.doc.documents.*; import com.spire.doc.fields.DocPicture; @@ -45,20 +48,7 @@ */ public static String filePrintGenerate(FilePrintRegister filePrintRegister) throws RuntimeException { //1、按照模板填充数据,并导出word,执行填充行数之后,再进行页数的填充 - String wordOldUrl = exportWord(filePrintRegister.getTemplatePath(), filePrintRegister.getTemDir(), filePrintRegister.getFileName(), filePrintRegister.getParams()); -// Document document = new Document(); -// document.loadFromFile(wordOldUrl); -// document.getPageCount(); - //设置透明属性 1、获取照片 2、签章背景透明设置 3、设置照片路径和照片类型进行图片保存 -// for (ElectronicImage electronicSeal : filePrintRegister.getElectronicImageList()) { -// BufferedImage bi = readImage(electronicSeal.getElectronicSealImageUrl()); -// BufferedImage electronSealImage = convertLayout(bi, electronicSeal.getDiaphaneity()); -// String stampImgUrl = electronicSeal.getElectronicSealImageUrl(); -// String imagePath = stampImgUrl.substring(0, stampImgUrl.length() - 4) + "1.png"; -// String[] imageCutOffContents = stampImgUrl.split("."); -// electronicSeal.setElectronicSealImageUrl(imagePath); -// saveFile(electronSealImage, imageCutOffContents[imageCutOffContents.length - 1], imagePath); -// } +// String wordOldUrl = exportWord(filePrintRegister.getTemplatePath(), filePrintRegister.getTemDir(), filePrintRegister.getFileName(), filePrintRegister.getParams()); // 初始化world,pdf名称参数 String wordNewUrl = filePrintRegister.getTemplatePath(); //默认转为docx,只需要进行docx的替换即可 @@ -71,24 +61,24 @@ .collect( Collectors.groupingBy(ElectronicImage::getKeyWord) ); - //3、根据关键字进行添加签章和签字 - for (Map.Entry> entry : sameKeyWordSealMaps.entrySet()) { - List electronicSeals = entry.getValue(); - addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSeals); - } - //获取没有关键字的图片,即绝对路径的图片 - List absolutePathImageList = filePrintRegister.getElectronicImageList().stream() - .filter(electronicImage -> StringUtils.isEmpty(electronicImage.getKeyWord())) - .collect(Collectors.toList()); - //根据设置的绝对路径进行图片的填充 - for (ElectronicImage absolutePathImage : absolutePathImageList) { - addAbsolutePathStamp(wordOldUrl, wordNewUrl, absolutePathImage); - } - //由于合成word总页数存在不准确,先转换为pdf进行获取合成证书总页数, 处理齐缝章 +// //3、根据关键字进行添加签章和签字 +// for (Map.Entry> entry : sameKeyWordSealMaps.entrySet()) { +// List electronicSeals = entry.getValue(); +// addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSeals); +// } +//// //获取没有关键字的图片,即绝对路径的图片 +// List absolutePathImageList = filePrintRegister.getElectronicImageList().stream() +// .filter(electronicImage -> StringUtils.isEmpty(electronicImage.getKeyWord())) +// .collect(Collectors.toList()); +// //根据设置的绝对路径进行图片的填充 +// for (ElectronicImage absolutePathImage : absolutePathImageList) { +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, absolutePathImage); +// } +// 由于合成word总页数存在不准确,先转换为pdf进行获取合成证书总页数, 处理齐缝章 } // 4、将新word转化为pdf文件 - wordToPdf(wordNewUrl, pdfNewUrl); - return pdfNewUrl; +// wordToPdf(wordNewUrl, pdfNewUrl); + return filePrintRegister.getTemplatePath(); } @@ -163,7 +153,7 @@ * @param pdfNewUrl 存储新PDF文件路径 */ public static void wordToPdf(String wordNewUrl, String pdfNewUrl) { - PdfUtils.doc2pdf(wordNewUrl,pdfNewUrl); + PdfUtils.doc2pdf(wordNewUrl, pdfNewUrl); //// 将新Word文档转换为PDF文件 // Document document = new Document(); // document.loadFromFile(wordNewUrl); @@ -442,62 +432,27 @@ public static void main(String[] args) throws RuntimeException { - String pathUrl = "D:\\casic"; - String localPathUrl = "D:\\casic\\"; - // 目标文件地址 - String wordOldUrl = pathUrl + "\\工作记录单.docx"; - // 添加电子印章后文件存放地址 - String wordNewUrl = localPathUrl + "\\tem1.docx"; - Map params = new HashMap<>(); - List> assetList = new ArrayList<>(); - for (int i = 0; i < 3; i++) { - Map assetMap = new HashMap<>(); - assetMap.put("assetName", "我不是设备名称"); - assetMap.put("model", "我不是型号"); - assetMap.put("assetNo", "我是设备编号"); - assetList.add(assetMap); - } - params.put("assetList", assetList); - params.put("logNo", "本编号"); - params.put("laboratoryName", "此去半生"); - params.put("executiveAddress", "猜猜我在哪里"); - exportWord(wordOldUrl, localPathUrl, "temp.docx", params); + } -// //WORD转PDF存放位置 -// String pdfNewUrl = localPathUrl + "\\tem.pdf"; -// //电子印章图片地址 -// String stampNameImgUr = localPathUrl + "\\name1_1678844060471.png"; -// //电子签名图片地址 -// String stampSealImgUrl = localPathUrl + "\\ceshi.jpg"; -// // word文档内容关键字 -// FilePrintRegisterUtils addStampUtils = new FilePrintRegisterUtils(); -// List electronicSealList = new ArrayList(11); -// ElectronicImage electronicImage = defaultElectronicSignName("批准人"); -// electronicImage.setElectronicSealImageUrl(stampNameImgUr); -// electronicSealList.add(electronicImage); -// addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); -// //加载文档 -// Document document = new Document(); -// document.loadFromFile(wordOldUrl); -// //获取段落总数 -// int count = document.getPageCount(); -// System.out.println(count); -// String[] imageCutOffContents = stampSealImgUrl.split("\\."); -// CropPicture cropPicture = CropPicture.builder() -// .targetImgUrl(stampSealImgUrl) -// .cutCols(count) -// .cutRows(1) -// .subfileUrl(imageCutOffContents[imageCutOffContents.length - 2]) -// .subfileType("." + imageCutOffContents[imageCutOffContents.length - 1]) -// .build(); -// try { -// ImageTool.crosswiseCutting(cropPicture); -// } catch (IOException ex) { -// -// } -//// 将新word转化为pdf文件 -//// addStampUtils.wordToPdf(wordNewUrl, pdfNewUrl); + public static void QRCodeExcel() throws Exception { +// String path = "D:\\casic\\cut\\"; +// String fileName = path + "1航天检定模版v1.xls"; +// List list = ListUtils.newArrayList(); +// ImageDemoData imageDemoData = new ImageDemoData(); +// list.add(imageDemoData); +// // 创建字节数组输出流 +// ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); +// // 调用 QrCodeUtil.generate() 生成二维码,并将结果写入输出流 +// QRCodeUtil.getQRCode("helloworld", outputStream); +// // 从输出流中获取生成的二维码图像数据 +// byte[] qrCodeData = outputStream.toByteArray(); +// imageDemoData.setByteArray(qrCodeData); +// imageDemoData.setShortDesc("helloworld"); +// // 关闭输出流 +// outputStream.close(); +// // 写入数据 +// EasyExcel.write(fileName, ImageDemoData.class).sheet().doWrite(list); } protected static ElectronicImage defaultElectronicSignSeal(String keyWord, float horizontal) { diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java index 9037b0c..aeaa778 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java @@ -18,6 +18,7 @@ import org.springframework.stereotype.Component; import org.springframework.web.multipart.MultipartFile; +import javax.servlet.http.HttpServletResponse; import java.io.*; import java.util.List; import java.util.Objects; @@ -28,7 +29,7 @@ */ @Component @Slf4j -public class PrintFileRegister { +public class PrintFileRegister extends PrintFileSupport { @Autowired private MinioClient minioClient; @@ -40,6 +41,16 @@ private String localFileDir; /** + * 新增,增加文件流回传下载 + * @param printFileRegister + * @param prefixType + * @return + */ + public String registerPrintFile(Object printFileRegister, String prefixType) { + return this.registerPrintFile(printFileRegister, prefixType, null); + } + + /** * 打印文件注册到服务器上有以下几个步骤 * 1、根据打印证书的类型,获取自定义的注册打印文件对象 * 2、进行远程文件的下载工作,支持文件的读写权限操作 @@ -48,7 +59,7 @@ * 5、递归删除因为打印产生的文件信息 * 6、返还打印产生的证书文件 */ - public String registerPrintFile(Object printFileRegister, String prefixType) { + public String registerPrintFile(Object printFileRegister, String prefixType, HttpServletResponse response) { String tempLocalFileDir = localFileDir; Assert.isFalse(Objects.isNull(printFileRegister), () -> { throw new RuntimeException("the certificateReport is null,please check your params..."); @@ -72,13 +83,17 @@ //合并注册 String certificatePdfUrl = FilePrintRegisterUtils.filePrintGenerate(metaData); //上传到服务器 - String certificatePdfName=uploadCertificate(certificatePdfUrl); +// String certificatePdfName = uploadCertificate(certificatePdfUrl); + //如果文件路径不为空,回传文件流 + if(StringUtils.isNotEmpty(certificatePdfUrl)){ + createResponseFileInput(certificatePdfUrl,response); + } //删除无效的文件 File invalidFile = new File(tempLocalFileDir); log.debug("invalid print file start delete, the file directory is {}", tempLocalFileDir); //删除运行空间下的文件 deleteFile(invalidFile); - return certificatePdfName; + return certificatePdfUrl; } throw new RuntimeException("the bean mapped to this certificate type is empty..."); } @@ -87,98 +102,12 @@ * 创建文件目录,为mini下载文件准备目录 */ private void getLocalFileDir(String tempLocalFileDir) { - File file = new File(tempLocalFileDir); //以. + File file = new File(tempLocalFileDir); //以 if (file.exists()) { deleteFile(file); } boolean dr = file.mkdirs(); //创建目录 } - /** - * 从mini文件服务器下载文件,获取文件的读写权限,用户证书报告的生成 - */ - private void downTemplateFile(String fileName, String tempLocalFileDir) { - InputStream in = null; - ByteArrayOutputStream out = null; - try { - in = minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(fileName).build()); - out = new ByteArrayOutputStream(); - IOUtils.copy(in, out); - //封装返回值 - byte[] bytes = out.toByteArray(); - FilePrintRegisterUtils.byteToFile(bytes, tempLocalFileDir, fileName); - } catch (Exception e) { - e.printStackTrace(); - } finally { - try { - if (in != null) { - try { - in.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - if (out != null) { - out.close(); - } - } catch (IOException e) { - e.printStackTrace(); - } - } - } - /** - * 通过生成的证书报告,将证书报告上传到远程mini的文件服务器 - */ - public String uploadCertificate(String certificatePrintUrl) { - //上传证书 - File file = new File(certificatePrintUrl); - //获取file对象的文件输入流 - FileInputStream input = null; - List nameList = null; - try { - input = new FileInputStream(file); - MultipartFile multipartFile = new MockMultipartFile("file", file.getName(), MediaType.MULTIPART_FORM_DATA_VALUE, IOUtils.toByteArray(input)); - MultipartFile[] multipartFiles = new MultipartFile[1]; - multipartFiles[0] = multipartFile; - nameList = minioUtil.upload(multipartFiles); - } catch (IOException ie) { - log.error("Description Failed to upload the certificate to the server,the failed reason is {}...", ie); - } finally { - if (input != null) { - try { - input.close(); - } catch (IOException e) { - log.error("the upload Certificate input stream release is anomaly"); - } - } - return nameList.get(0); - } - } - - /** - * 对打印报告产生的空间进行清除,还原空间 - */ - private void deleteFile(File invalidFile) { - //返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。 - File[] files = invalidFile.listFiles(); - if (files != null) {//如果包含文件进行删除操作 - for (int i = 0; i < files.length; i++) { - if (files[i].isFile()) { - //删除子文件 - files[i].delete(); - } else if (files[i].isDirectory()) { - //通过递归的方法找到子目录的文件 - deleteFile(files[i]); - } - } - } - if (invalidFile.list().length == 0) { - log.debug("invalid print file has already delete success!"); - } - //删除子目录 - if (invalidFile != null && invalidFile.isDirectory()) { - invalidFile.delete(); - } - } } diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java index 114283e..d9b2bab 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java @@ -171,4 +171,12 @@ return ReturnUtil.success(super.packForBT(certificateReportService.certificateMonitorsById(customerSampleIdRequest))); } + + @ApiOperation("导出word打印") + @PostMapping("/exportFile") + public void exportOriginalFile(@RequestBody @Valid IdDTO idDTO, HttpServletResponse response) throws Exception { + certificateReportService.exportOriginalFile(idDTO, response); + } + + } diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index cf47c98..9e7b379 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -177,7 +177,7 @@ return labExecutiveInfoService.sampleReceive(requestList); } - @ApiOperation("实验室检测-扫描增加任务到检测中(任务分发管理中待分发->检测中 / 实验室任务待检测->检测中)") + @ApiOperation("我的检测-扫描增加任务到检测中(任务分发管理中待分发->检测中 / 实验室任务待检测->检测中)") @PostMapping("/myExecutive/add") public ReturnDTO sampleAdd(@RequestBody @Valid List requestList) { return labExecutiveInfoService.sampleAdd(requestList); diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java index db996fc..ad1431a 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java @@ -56,7 +56,7 @@ @ApiOperation("原始记录详情") @PostMapping("/detail") - public ReturnDTO originalDetail(@RequestBody @Valid IdDTO idDTO) throws Exception{ + public ReturnDTO originalDetail(@RequestBody @Valid IdDTO idDTO) throws Exception { Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); @@ -99,10 +99,16 @@ businessOriginalRecordService.originExport(request, response); } + @ApiOperation("导出word打印") + @PostMapping("/exportFile") + public void exportOriginalFile(@RequestBody @Valid IdDTO idDTO, HttpServletResponse response) throws Exception { + businessOriginalRecordService.exportOriginalFile(idDTO, response); + } + @ApiOperation("根据委托单id查询关联样品信息(分页)") @PostMapping("/samplesByOderId") - public ReturnDTO> samplesByOderId(@RequestBody @Valid OriginRecordRequest request) { + public ReturnDTO> samplesByOderId(@RequestBody @Valid OriginRecordRequest request) { Page page = PageFactory.defaultPage(); return ReturnUtil.success(super.packForBT(businessOriginalRecordService.samplesByOderId(page, request))); } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java index 72500d6..81def5d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java @@ -5,4 +5,5 @@ String CALIBRATION_CERTIFICATE = "自有设备内部检校证书"; String TEST_ORDER = "检测委托单"; String CALIBRATION_ORDER = "检定或校准委托单"; + String ORIGINAL_RECORD = "原始记录"; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java index f42477a..3f1a3b2 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java @@ -12,6 +12,7 @@ put(TEST_REPORT, TEST_REPORT_BEAN); //测试报告 put(TEST_ORDER, TEST_ORDER_BEAN); //检测委托单 put(CALIBRATION_ORDER, CALIBRATION_ORDER_BEAN); //检定或校准委托单 + put(ORIGINAL_RECORD, ORIGINAL_RECORD_BEAN); //检定或校准委托单 } }); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java index bf23ba3..3f0b946 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java @@ -15,4 +15,6 @@ //检定或校准委托单 String CALIBRATION_ORDER_BEAN = "calibrationOrderBean"; + //校准证书 + String ORIGINAL_RECORD_BEAN = "originalRecord"; } diff --git a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml index 56b4ae5..79db2e5 100644 --- a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml @@ -43,9 +43,9 @@ - SELECT - orderId,id,sampleName,sampleModel,manufacturingNo,appendixDescn,measureContent,remark,sampleStatus,customerName,measurePeriod, + SELECT orderId,id,sampleName,sampleModel,manufacturingNo,appendixDescn,measureContent,remark,sampleStatus,customerName,measurePeriod, validDeadline,measureLastTime,sampleNo,orderCode,customerNo FROM ( SELECT sample_name AS "sampleName",sample_no AS "sampleNo",sample_model AS "sampleModel",manufacturing_no AS @@ -126,14 +125,14 @@ )csi JOIN ( - SELECT sample_status AS "sampleStatus",sample_id as "sampleId",order_id AS "orderId",order_code AS "orderCode" - FROM business_order_sample_relation bosr - JOIN ( - SELECT id,order_code - FROM business_order - WHERE customer_id=#{request.customerId} - )bo ON bo.id=bosr.order_id - WHERE interchange_id is null + SELECT sample_status AS "sampleStatus",sample_id as "sampleId",order_id AS "orderId",order_code AS "orderCode" + FROM business_order_sample_relation bosr + JOIN ( + SELECT id,order_code + FROM business_order + WHERE customer_id=#{request.customerId} + )bo ON bo.id=bosr.order_id + WHERE interchange_id is null )bor ON bor.sampleId=csi.id ORDER BY create_time DESC diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java index 58ca71e..2306f21 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java @@ -228,4 +228,32 @@ @ApiModelProperty(value = "证书类型名称", dataType = "String") private String certificateReportTypeName; + @TableField("deliver_time") + @ApiModelProperty(value = "接收日期", dataType = "String") + private String deliverTime; + + @TableField("appearance_status") + @ApiModelProperty(value = "外观状态", dataType = "String") + private String appearanceStatus; + + @TableField("certificate_require") + @ApiModelProperty(value = "证书要求", dataType = "String") + private String certificateRequire; + + @TableField("sample_remark") + @ApiModelProperty(value = "样品备注", dataType = "String") + private String sampleRemark; + + @TableField("calibration_time") + @ApiModelProperty(value = "校验日期", dataType = "String") + private String calibrationTime; + + @TableField("verifier_id") + @ApiModelProperty(value = "联系人Id", dataType = "Long") + private Long verifierId; + + @TableField("verifier") + @ApiModelProperty(value = "联系人", dataType = "String") + private String verifier; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java index d2647ac..e2e8349 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java @@ -137,6 +137,31 @@ @TableField("update_time") private String updateTime; + + + @TableField("deliver_time") + @ApiModelProperty(value = "接收时间", dataType = "String") + private String deliverTime; + + @TableField("appearance_status") + @ApiModelProperty(value = "外观状态", dataType = "String") + private String appearanceStatus; + + @TableField("certificate_require") + @ApiModelProperty(value = "证书要求", dataType = "String") + private String certificateRequire; + + @TableField("sample_remark") + @ApiModelProperty(value = "样品状态", dataType = "String") + private String sampleRemark; + + @TableField("verifier_id") + @ApiModelProperty(value = "校验人员ID", dataType = "Long") + private Long verifierId; + + @TableField(exist = false) + @ApiModelProperty(value = "校验人员", dataType = "String") + private String verifierName; /** * 委托单信息 */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java index a558165..c7ae4d4 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; import com.casic.missiles.constants.MeterDictCode; +import io.swagger.annotations.Api; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.NoArgsConstructor; @@ -76,6 +77,10 @@ @ApiModelProperty(value = " 客户特殊要求", dataType = "String") private String specialRequire; + @TableField(exist = false) + @ApiModelProperty(value = "接收时间", dataType = "String") + private String deliverTime; + @ApiModelProperty(value = " 检定方式", dataType = "String") @DictCodeField(message = "检定方式不合法", cacheName = MeterDictCode.MEASURE_TYPE) diff --git a/casic-metering-service/pom.xml b/casic-metering-service/pom.xml index 6aede7a..aa8aa4d 100644 --- a/casic-metering-service/pom.xml +++ b/casic-metering-service/pom.xml @@ -23,12 +23,24 @@ com.casic casic-metering-model 2.0.0 + + + org.apache.poi + poi-ooxml + +
com.casic casic-metering-common 2.0.0 + + + org.apache.poi + poi-ooxml + + org.springframework.boot @@ -48,13 +60,22 @@ com.new.reader reader-api - com.deepoove poi-tl 1.10.0 + + + org.apache.logging.log4j + log4j-api + + - + + org.apache.poi + poi + 4.1.2 + com.aspose aspose-words diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java index 020624d..b9509c2 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java @@ -1,16 +1,19 @@ package com.casic.missiles.service.Impl.business; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.BaseApprovalSubmitRequest; +import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.business.certificate.CertificateMonitorResponse; @@ -41,6 +44,7 @@ import com.casic.missiles.service.business.IBusinessCertificateReportService; import com.casic.missiles.service.business.IBusinessOriginalRecordService; import com.casic.missiles.service.flowable.ApprovalOperateService; +import com.casic.missiles.service.listeners.register.PrintFileRegister; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; import com.casic.missiles.utils.PageUtil; @@ -55,9 +59,14 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; import java.util.*; import java.util.stream.Collectors; +import static com.casic.missiles.enums.business.FilePrintTypeEnum.CALIBRATION_CERTIFICATE; +import static com.casic.missiles.enums.notifyevent.PrintFileDataBeanNameAliasEnum.CALIBRATION_CERTIFICATE_BEAN; +import static com.casic.missiles.enums.notifyevent.PrintFileDataBeanNameAliasEnum.ORIGINAL_RECORD_BEAN; + /** *

* 业务管理-证书报告 服务实现类 @@ -88,6 +97,10 @@ private CustomerSampleServiceImpl sampleService; @Autowired private MeterStaffMapper staffMapper; + @Autowired + private PrintFileRegister printFileRegister; + @Autowired + private AbstractPermissionContext permissionContext; /** * 保存证书报告信息 @@ -326,6 +339,24 @@ return certificateMonitorResponsePage; } + @Override + public void exportOriginalFile(@Valid IdDTO idDTO, HttpServletResponse response) { + BusinessCertificateReport certificateReport = this.baseMapper.detailById(idDTO.getId()); + getApprovalSignName(certificateReport); + if (certificateReport.getOriginalRecordId() != null) { + try { + certificateReport.setBusinessOriginalRecord(originalRecordService.originalDetail(certificateReport.getOriginalRecordId())); + if (Objects.isNull(certificateReport.getBusinessOriginalRecord())) { + certificateReport.setBusinessOriginalRecord(new BusinessOriginalRecord()); + } + certificateReport.setCertificateReportTypeName(dictService.getDictNameByCode(MeterDictEnum.CERTIFICATION_CLASS, certificateReport.getCertificateReportType())); + printFileRegister.registerPrintFile(certificateReport,CALIBRATION_CERTIFICATE,response); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + private List handleApprovalStatus(Page page, CertificateReportApprovalRequest request) { List approvalList = new ArrayList<>(); List businessKeys = new ArrayList<>(); @@ -382,7 +413,7 @@ //合并未通过-拒绝和未通过-驳回 approvalList.addAll(rejectApprovalList); //分页处理 - if(!CollectionUtils.isEmpty(approvalList)) { + if (!CollectionUtils.isEmpty(approvalList)) { Page pages = PageUtil.getPages((int) page.getCurrent(), (int) page.getSize(), approvalList); page.setTotal(approvalList.size()); approvalList = pages.getRecords(); @@ -439,7 +470,7 @@ String approvalSignNames = ""; String[] approvalSignIds = certificateReport.getApprovalSignIds().split(","); for (String approvalSignId : approvalSignIds) { - approvalSignNames += approvalSignNameMap.get(Long.valueOf(approvalSignId))+ ","; + approvalSignNames += approvalSignNameMap.get(Long.valueOf(approvalSignId)) + ","; } approvalSignNames = approvalSignNames.substring(0, approvalSignNames.length() - 1); certificateReport.setApprovalSignName(approvalSignNames); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOriginalRecordServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOriginalRecordServiceImpl.java index 1c602b8..84d5f00 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOriginalRecordServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOriginalRecordServiceImpl.java @@ -1,12 +1,15 @@ package com.casic.missiles.service.Impl.business; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.business.originRecord.OriginRecordRequest; @@ -19,18 +22,32 @@ import com.casic.missiles.model.business.BusinessOriginalRecord; import com.casic.missiles.model.customer.CustomerSampleInfo; import com.casic.missiles.model.system.SystemTemplate; +import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.modular.system.service.IUserService; +import com.casic.missiles.modular.system.service.impl.UserServiceImpl; import com.casic.missiles.service.business.*; import com.casic.missiles.service.customer.CustomerSampleService; +import com.casic.missiles.service.listeners.register.PrintFileRegister; import com.casic.missiles.service.system.ISystemTemplateService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; +import liquibase.pro.packaged.A; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; +import org.springframework.util.ObjectUtils; +import org.springframework.util.StringUtils; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.util.List; +import java.util.Map; +import java.util.stream.Collector; +import java.util.stream.Collectors; + +import static com.casic.missiles.enums.business.FilePrintTypeEnum.ORIGINAL_RECORD; +import static com.casic.missiles.enums.notifyevent.PrintFileDataBeanNameAliasEnum.ORIGINAL_RECORD_BEAN; /** *

@@ -58,11 +75,19 @@ private IBaseExportService iBaseExportService; @Resource private ISystemTemplateService templateService; + @Autowired + private PrintFileRegister printFileRegister; + @Autowired + private AbstractPermissionContext permissionContext; @Override public Page originListPage(Page page, OriginRecordRequest request) throws Exception { // 获取列表 + List userList = permissionContext.getUserService().list(null); + Map userMap = userList.stream().collect( + Collectors.toMap(User::getId, User::getName) + ); Page originalRecordPage = this.baseMapper.originListPage(page, request); if (!CollectionUtils.isEmpty(originalRecordPage.getRecords())) { for (BusinessOriginalRecord record : originalRecordPage.getRecords()) { @@ -70,6 +95,9 @@ if (!StrUtil.isBlankIfStr(record.getSampleId())) { record.setCustomerSampleInfo(customerSampleService.sampleDetail(record.getSampleId())); } + if (!ObjectUtils.isEmpty(record.getVerifierId())) { + record.setVerifierName(userMap.get(record.getVerifierId())); + } } } return originalRecordPage; @@ -101,7 +129,10 @@ businessOriginalRecord.setFileList(originalRecordFileRelationService.getFilesByOriginalRecordId(id)); //查询是否有关联的监测设备 businessOriginalRecord.setEquipmentInfoList(originalRecordEquipmentRelationService.getEquipmentsByOriginalRecordId(id)); - + User user = permissionContext.getUserService().getById(businessOriginalRecord.getVerifierId()); + if (!ObjectUtils.isEmpty(user)) { + businessOriginalRecord.setVerifierName(user.getName()); + } //字典值转换 DictCodeUtils.convertDictCodeToName(businessOriginalRecord); @@ -181,6 +212,41 @@ } } + @Override + public void exportOriginalFile(IdDTO idDTO, HttpServletResponse response) throws Exception { + BusinessOriginalRecord businessOriginalRecord = this.baseMapper.selectById(idDTO.getId()); + if (businessOriginalRecord != null) { + //查询样品详情 + if (businessOriginalRecord.getSampleId() != null) { + businessOriginalRecord.setCustomerSampleInfo(customerSampleService.sampleDetail(businessOriginalRecord.getSampleId())); + } + //查询环境记录单详情 + if (businessOriginalRecord.getEnvironmentId() != null) { + businessOriginalRecord.setBusinessEnvironmentRecord(businessEnvironmentRecordService.environmentDetail(businessOriginalRecord.getEnvironmentId())); + } + //查询委托单详情 + if (businessOriginalRecord.getOrderId() != null) { + businessOriginalRecord.setBusinessOrder(businessOrderService.orderDetail(businessOriginalRecord.getOrderId())); + } + + //查询是否有关联的计量文件 + businessOriginalRecord.setFileList(originalRecordFileRelationService.getFilesByOriginalRecordId(idDTO.getId())); + //查询是否有关联的监测设备 + businessOriginalRecord.setEquipmentInfoList(originalRecordEquipmentRelationService.getEquipmentsByOriginalRecordId(idDTO.getId())); + + //字典值转换 + DictCodeUtils.convertDictCodeToName(businessOriginalRecord); + + //显示模板名称 + if (null != businessOriginalRecord.getTemplateId()) { + SystemTemplate systemTemplate = templateService.getById(businessOriginalRecord.getTemplateId()); + if (systemTemplate != null) { + printFileRegister.registerPrintFile(businessOriginalRecord, ORIGINAL_RECORD, response); + } + } + } + } + private void initBusinessEnvironmentRecord(BusinessOriginalRecord businessOriginalRecord) { Long maxNo = this.baseMapper.selectMaxCode(); String originNo = NumberGeneratorUtil.getContactNo(PrefixCodeEnum.ORIGIN_PREFIX, maxNo); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/SystemTemplateUserRelationServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/SystemTemplateUserRelationServiceImpl.java index 315f0a2..493349b 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/SystemTemplateUserRelationServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/SystemTemplateUserRelationServiceImpl.java @@ -8,7 +8,7 @@ /** *

- * 原始记录/证书报告模板与用户关联表(原始记录/证书报告模板可使用人) 服务实现类 + * /证书报告模板与用户关联表(原始记录/证书报告模板可使用人) 服务实现类 *

* * @author wangpeng diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessCertificateReportService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessCertificateReportService.java index 81cb155..8460e4d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessCertificateReportService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessCertificateReportService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.dto.BaseApprovalSubmitRequest; +import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.business.certificate.CertificateMonitorResponse; import com.casic.missiles.dto.business.certificate.CertificateReportApprovalRequest; @@ -11,8 +12,10 @@ import com.casic.missiles.dto.customer.sample.CustomerSampleIdRequest; import com.casic.missiles.dto.flowable.ApprovalDeleteRequest; import com.casic.missiles.model.business.BusinessCertificateReport; +import org.springframework.web.bind.annotation.RequestBody; import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; import java.util.List; /** @@ -47,5 +50,7 @@ Page certificateMonitorsById(CustomerSampleIdRequest customerSampleIdRequest) throws Exception; + void exportOriginalFile(@RequestBody @Valid IdDTO idDTO, HttpServletResponse response); + Page certificateRecordsById(CustomerSampleIdRequest customerSampleIdRequest) throws Exception; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessOriginalRecordService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessOriginalRecordService.java index cbb6b40..047f931 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessOriginalRecordService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessOriginalRecordService.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.business.originRecord.OriginRecordRequest; import com.casic.missiles.model.business.BusinessOriginalRecord; @@ -11,7 +12,7 @@ /** *

- * 服务类 + * 服务类 *

* * @author wangpeng @@ -21,7 +22,7 @@ Page originListPage(Page page, OriginRecordRequest request) throws Exception; - Page samplesByOderId(Page sampleInfoPage, OriginRecordRequest request) ; + Page samplesByOderId(Page sampleInfoPage, OriginRecordRequest request); BusinessOriginalRecord originalDetail(Long id) throws Exception; @@ -33,5 +34,7 @@ void originExport(OriginRecordRequest request, HttpServletResponse response); + void exportOriginalFile(IdDTO idDTO, HttpServletResponse response) throws Exception; + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java new file mode 100644 index 0000000..63d9aaf --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java @@ -0,0 +1,99 @@ +package com.casic.missiles.service.listeners.register; + +import com.casic.missiles.service.listeners.register.FilePrintRegisterUtils; +import com.casic.missiles.utils.QRCodeUtil; +import com.deepoove.poi.XWPFTemplate; +import com.deepoove.poi.config.Configure; +import com.deepoove.poi.config.ConfigureBuilder; +import com.spire.doc.Document; +import com.spire.doc.FileFormat; +import org.apache.coyote.OutputBuffer; + +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author cz + */ +public class Example { + + private static String localPathUrl = "D:\\casic\\cut\\"; + + /** + * 多个word合并为一个doc样例 + */ + public static void mergeDoc() { + String word1Url = localPathUrl + "211.docx"; +// String word2Url = localPathUrl + "202.docx"; +// //加载文档1 + Document doc1 = new Document(word1Url); +// //调用方法将文档2插入到文档1 +// doc1.insertTextFromFile(word2Url, FileFormat.Docx_2010); +// //保存合并后的文档 +// doc1.saveToFile(word1Url, FileFormat.Docx_2010); + doc1.saveToFile(localPathUrl + "add.docx", FileFormat.Docx); + } + + /** + * 表格合并样例 + */ + public static void tableMerge() { + String localPathUrl = "D:\\casic\\cut\\"; + // 目标文件地址 + String wordOldUrl = localPathUrl + "204.doc"; + Map params = new HashMap<>(); + List> assetList = new ArrayList<>(); + for (int i = 0; i < 8; i++) { + Map assetMap = new HashMap<>(); + assetMap.put("seq", String.valueOf(i / 4)); + assetMap.put("customer", "供方" + String.valueOf(i / 4)); + assetMap.put("customerName", "供方名字" + i); + assetMap.put("model", "型号" + i); + assetMap.put("startDate", "启用时间" + i); + assetMap.put("trainCondition", "维修时间"); + assetMap.put("status", "我醉"); + assetMap.put("evaluate", "我醒"); + assetList.add(assetMap); + } + params.put("train", assetList); + params.put("staffName", "张三"); + params.put("gender", "男"); + params.put("birthday", "2202-10-5"); + params.put("nation", "汉"); + params.put("enlistmentDate", "2196-9-18"); + params.put("partyDate", "2188-9-18"); + params.put("degree", "博士"); + params.put("test", "\uF052"); + params.put("error", "\uF0A3"); +// String newOldUrl = FilePrintRegisterUtils.exportWord(wordOldUrl, localPathUrl, "temp.docx", params, null); +// System.out.println(newOldUrl); + } + + + private static void textBoxTest() throws IOException { + Map map = new HashMap<>(); + ConfigureBuilder builder = Configure.builder(); + XWPFTemplate compile = XWPFTemplate.compile("D:\\casic\\cut\\204.docx", builder.build()); + compile.render(map); + compile.writeToFile("D:\\casic\\cut\\out_test3.docx"); + } + + + /** + * 1、生成二维码图片 + * 2、二维码图片进行图片的合成 + * 3、 + * @param args + * @throws Exception + */ + public static void main(String[] args) throws Exception { + OutputStream output =new FileOutputStream("D:\\casic\\cut\\test.png"); + QRCodeUtil.getQRCode("D:\\casic\\cut\\1航天检定模版v1.xls", output); + } + +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java index 4fb3b33..da44ae2 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java @@ -2,12 +2,15 @@ import cn.hutool.core.lang.Assert; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.util.ListUtils; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.casic.missiles.dto.business.certificate.ElectronicImage; import com.casic.missiles.dto.business.file.FilePrintRegister; -import com.casic.missiles.service.listeners.util.ParseWord07; +import com.casic.missiles.service.listeners.util.ParseWord07; import com.casic.missiles.service.listeners.util.PdfUtils; +import com.casic.missiles.utils.QRCodeUtil; import com.spire.doc.*; import com.spire.doc.documents.*; import com.spire.doc.fields.DocPicture; @@ -45,20 +48,7 @@ */ public static String filePrintGenerate(FilePrintRegister filePrintRegister) throws RuntimeException { //1、按照模板填充数据,并导出word,执行填充行数之后,再进行页数的填充 - String wordOldUrl = exportWord(filePrintRegister.getTemplatePath(), filePrintRegister.getTemDir(), filePrintRegister.getFileName(), filePrintRegister.getParams()); -// Document document = new Document(); -// document.loadFromFile(wordOldUrl); -// document.getPageCount(); - //设置透明属性 1、获取照片 2、签章背景透明设置 3、设置照片路径和照片类型进行图片保存 -// for (ElectronicImage electronicSeal : filePrintRegister.getElectronicImageList()) { -// BufferedImage bi = readImage(electronicSeal.getElectronicSealImageUrl()); -// BufferedImage electronSealImage = convertLayout(bi, electronicSeal.getDiaphaneity()); -// String stampImgUrl = electronicSeal.getElectronicSealImageUrl(); -// String imagePath = stampImgUrl.substring(0, stampImgUrl.length() - 4) + "1.png"; -// String[] imageCutOffContents = stampImgUrl.split("."); -// electronicSeal.setElectronicSealImageUrl(imagePath); -// saveFile(electronSealImage, imageCutOffContents[imageCutOffContents.length - 1], imagePath); -// } +// String wordOldUrl = exportWord(filePrintRegister.getTemplatePath(), filePrintRegister.getTemDir(), filePrintRegister.getFileName(), filePrintRegister.getParams()); // 初始化world,pdf名称参数 String wordNewUrl = filePrintRegister.getTemplatePath(); //默认转为docx,只需要进行docx的替换即可 @@ -71,24 +61,24 @@ .collect( Collectors.groupingBy(ElectronicImage::getKeyWord) ); - //3、根据关键字进行添加签章和签字 - for (Map.Entry> entry : sameKeyWordSealMaps.entrySet()) { - List electronicSeals = entry.getValue(); - addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSeals); - } - //获取没有关键字的图片,即绝对路径的图片 - List absolutePathImageList = filePrintRegister.getElectronicImageList().stream() - .filter(electronicImage -> StringUtils.isEmpty(electronicImage.getKeyWord())) - .collect(Collectors.toList()); - //根据设置的绝对路径进行图片的填充 - for (ElectronicImage absolutePathImage : absolutePathImageList) { - addAbsolutePathStamp(wordOldUrl, wordNewUrl, absolutePathImage); - } - //由于合成word总页数存在不准确,先转换为pdf进行获取合成证书总页数, 处理齐缝章 +// //3、根据关键字进行添加签章和签字 +// for (Map.Entry> entry : sameKeyWordSealMaps.entrySet()) { +// List electronicSeals = entry.getValue(); +// addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSeals); +// } +//// //获取没有关键字的图片,即绝对路径的图片 +// List absolutePathImageList = filePrintRegister.getElectronicImageList().stream() +// .filter(electronicImage -> StringUtils.isEmpty(electronicImage.getKeyWord())) +// .collect(Collectors.toList()); +// //根据设置的绝对路径进行图片的填充 +// for (ElectronicImage absolutePathImage : absolutePathImageList) { +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, absolutePathImage); +// } +// 由于合成word总页数存在不准确,先转换为pdf进行获取合成证书总页数, 处理齐缝章 } // 4、将新word转化为pdf文件 - wordToPdf(wordNewUrl, pdfNewUrl); - return pdfNewUrl; +// wordToPdf(wordNewUrl, pdfNewUrl); + return filePrintRegister.getTemplatePath(); } @@ -163,7 +153,7 @@ * @param pdfNewUrl 存储新PDF文件路径 */ public static void wordToPdf(String wordNewUrl, String pdfNewUrl) { - PdfUtils.doc2pdf(wordNewUrl,pdfNewUrl); + PdfUtils.doc2pdf(wordNewUrl, pdfNewUrl); //// 将新Word文档转换为PDF文件 // Document document = new Document(); // document.loadFromFile(wordNewUrl); @@ -442,62 +432,27 @@ public static void main(String[] args) throws RuntimeException { - String pathUrl = "D:\\casic"; - String localPathUrl = "D:\\casic\\"; - // 目标文件地址 - String wordOldUrl = pathUrl + "\\工作记录单.docx"; - // 添加电子印章后文件存放地址 - String wordNewUrl = localPathUrl + "\\tem1.docx"; - Map params = new HashMap<>(); - List> assetList = new ArrayList<>(); - for (int i = 0; i < 3; i++) { - Map assetMap = new HashMap<>(); - assetMap.put("assetName", "我不是设备名称"); - assetMap.put("model", "我不是型号"); - assetMap.put("assetNo", "我是设备编号"); - assetList.add(assetMap); - } - params.put("assetList", assetList); - params.put("logNo", "本编号"); - params.put("laboratoryName", "此去半生"); - params.put("executiveAddress", "猜猜我在哪里"); - exportWord(wordOldUrl, localPathUrl, "temp.docx", params); + } -// //WORD转PDF存放位置 -// String pdfNewUrl = localPathUrl + "\\tem.pdf"; -// //电子印章图片地址 -// String stampNameImgUr = localPathUrl + "\\name1_1678844060471.png"; -// //电子签名图片地址 -// String stampSealImgUrl = localPathUrl + "\\ceshi.jpg"; -// // word文档内容关键字 -// FilePrintRegisterUtils addStampUtils = new FilePrintRegisterUtils(); -// List electronicSealList = new ArrayList(11); -// ElectronicImage electronicImage = defaultElectronicSignName("批准人"); -// electronicImage.setElectronicSealImageUrl(stampNameImgUr); -// electronicSealList.add(electronicImage); -// addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); -// //加载文档 -// Document document = new Document(); -// document.loadFromFile(wordOldUrl); -// //获取段落总数 -// int count = document.getPageCount(); -// System.out.println(count); -// String[] imageCutOffContents = stampSealImgUrl.split("\\."); -// CropPicture cropPicture = CropPicture.builder() -// .targetImgUrl(stampSealImgUrl) -// .cutCols(count) -// .cutRows(1) -// .subfileUrl(imageCutOffContents[imageCutOffContents.length - 2]) -// .subfileType("." + imageCutOffContents[imageCutOffContents.length - 1]) -// .build(); -// try { -// ImageTool.crosswiseCutting(cropPicture); -// } catch (IOException ex) { -// -// } -//// 将新word转化为pdf文件 -//// addStampUtils.wordToPdf(wordNewUrl, pdfNewUrl); + public static void QRCodeExcel() throws Exception { +// String path = "D:\\casic\\cut\\"; +// String fileName = path + "1航天检定模版v1.xls"; +// List list = ListUtils.newArrayList(); +// ImageDemoData imageDemoData = new ImageDemoData(); +// list.add(imageDemoData); +// // 创建字节数组输出流 +// ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); +// // 调用 QrCodeUtil.generate() 生成二维码,并将结果写入输出流 +// QRCodeUtil.getQRCode("helloworld", outputStream); +// // 从输出流中获取生成的二维码图像数据 +// byte[] qrCodeData = outputStream.toByteArray(); +// imageDemoData.setByteArray(qrCodeData); +// imageDemoData.setShortDesc("helloworld"); +// // 关闭输出流 +// outputStream.close(); +// // 写入数据 +// EasyExcel.write(fileName, ImageDemoData.class).sheet().doWrite(list); } protected static ElectronicImage defaultElectronicSignSeal(String keyWord, float horizontal) { diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java index 9037b0c..aeaa778 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java @@ -18,6 +18,7 @@ import org.springframework.stereotype.Component; import org.springframework.web.multipart.MultipartFile; +import javax.servlet.http.HttpServletResponse; import java.io.*; import java.util.List; import java.util.Objects; @@ -28,7 +29,7 @@ */ @Component @Slf4j -public class PrintFileRegister { +public class PrintFileRegister extends PrintFileSupport { @Autowired private MinioClient minioClient; @@ -40,6 +41,16 @@ private String localFileDir; /** + * 新增,增加文件流回传下载 + * @param printFileRegister + * @param prefixType + * @return + */ + public String registerPrintFile(Object printFileRegister, String prefixType) { + return this.registerPrintFile(printFileRegister, prefixType, null); + } + + /** * 打印文件注册到服务器上有以下几个步骤 * 1、根据打印证书的类型,获取自定义的注册打印文件对象 * 2、进行远程文件的下载工作,支持文件的读写权限操作 @@ -48,7 +59,7 @@ * 5、递归删除因为打印产生的文件信息 * 6、返还打印产生的证书文件 */ - public String registerPrintFile(Object printFileRegister, String prefixType) { + public String registerPrintFile(Object printFileRegister, String prefixType, HttpServletResponse response) { String tempLocalFileDir = localFileDir; Assert.isFalse(Objects.isNull(printFileRegister), () -> { throw new RuntimeException("the certificateReport is null,please check your params..."); @@ -72,13 +83,17 @@ //合并注册 String certificatePdfUrl = FilePrintRegisterUtils.filePrintGenerate(metaData); //上传到服务器 - String certificatePdfName=uploadCertificate(certificatePdfUrl); +// String certificatePdfName = uploadCertificate(certificatePdfUrl); + //如果文件路径不为空,回传文件流 + if(StringUtils.isNotEmpty(certificatePdfUrl)){ + createResponseFileInput(certificatePdfUrl,response); + } //删除无效的文件 File invalidFile = new File(tempLocalFileDir); log.debug("invalid print file start delete, the file directory is {}", tempLocalFileDir); //删除运行空间下的文件 deleteFile(invalidFile); - return certificatePdfName; + return certificatePdfUrl; } throw new RuntimeException("the bean mapped to this certificate type is empty..."); } @@ -87,98 +102,12 @@ * 创建文件目录,为mini下载文件准备目录 */ private void getLocalFileDir(String tempLocalFileDir) { - File file = new File(tempLocalFileDir); //以. + File file = new File(tempLocalFileDir); //以 if (file.exists()) { deleteFile(file); } boolean dr = file.mkdirs(); //创建目录 } - /** - * 从mini文件服务器下载文件,获取文件的读写权限,用户证书报告的生成 - */ - private void downTemplateFile(String fileName, String tempLocalFileDir) { - InputStream in = null; - ByteArrayOutputStream out = null; - try { - in = minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(fileName).build()); - out = new ByteArrayOutputStream(); - IOUtils.copy(in, out); - //封装返回值 - byte[] bytes = out.toByteArray(); - FilePrintRegisterUtils.byteToFile(bytes, tempLocalFileDir, fileName); - } catch (Exception e) { - e.printStackTrace(); - } finally { - try { - if (in != null) { - try { - in.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - if (out != null) { - out.close(); - } - } catch (IOException e) { - e.printStackTrace(); - } - } - } - /** - * 通过生成的证书报告,将证书报告上传到远程mini的文件服务器 - */ - public String uploadCertificate(String certificatePrintUrl) { - //上传证书 - File file = new File(certificatePrintUrl); - //获取file对象的文件输入流 - FileInputStream input = null; - List nameList = null; - try { - input = new FileInputStream(file); - MultipartFile multipartFile = new MockMultipartFile("file", file.getName(), MediaType.MULTIPART_FORM_DATA_VALUE, IOUtils.toByteArray(input)); - MultipartFile[] multipartFiles = new MultipartFile[1]; - multipartFiles[0] = multipartFile; - nameList = minioUtil.upload(multipartFiles); - } catch (IOException ie) { - log.error("Description Failed to upload the certificate to the server,the failed reason is {}...", ie); - } finally { - if (input != null) { - try { - input.close(); - } catch (IOException e) { - log.error("the upload Certificate input stream release is anomaly"); - } - } - return nameList.get(0); - } - } - - /** - * 对打印报告产生的空间进行清除,还原空间 - */ - private void deleteFile(File invalidFile) { - //返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。 - File[] files = invalidFile.listFiles(); - if (files != null) {//如果包含文件进行删除操作 - for (int i = 0; i < files.length; i++) { - if (files[i].isFile()) { - //删除子文件 - files[i].delete(); - } else if (files[i].isDirectory()) { - //通过递归的方法找到子目录的文件 - deleteFile(files[i]); - } - } - } - if (invalidFile.list().length == 0) { - log.debug("invalid print file has already delete success!"); - } - //删除子目录 - if (invalidFile != null && invalidFile.isDirectory()) { - invalidFile.delete(); - } - } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileSupport.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileSupport.java new file mode 100644 index 0000000..2aee62e --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileSupport.java @@ -0,0 +1,220 @@ +package com.casic.missiles.service.listeners.register; + +import com.casic.missiles.utils.MinioUtil; +import io.minio.GetObjectArgs; +import io.minio.MinioClient; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.MediaType; +import org.springframework.mock.web.MockMultipartFile; +import org.springframework.stereotype.Component; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletResponse; +import java.io.*; +import java.net.URLEncoder; +import java.nio.file.Files; +import java.nio.file.StandardCopyOption; +import java.util.List; + +@Component +@Slf4j +public class PrintFileSupport { + + @Autowired + private MinioClient minioClient; + @Autowired + private MinioUtil minioUtil; + @Value("${minio.bucketName}") + private String bucketName; + + /** + * 返回文件流 + * + * @param printDocUrl 文件流路径,pdf,word + * @param response + */ + protected String createResponseFileInput(String printDocUrl, HttpServletResponse response) { + if (response == null) { +// return null; + return uploadCertificate(printDocUrl); + } + File file = new File(printDocUrl); + InputStream in = null; + ByteArrayOutputStream out = null; + try { + FileInputStream fis = new FileInputStream(file); + out = new ByteArrayOutputStream(); + IOUtils.copy(fis, out); + //封装返回值 + byte[] data = out.toByteArray(); + response.reset(); + response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(file.getName(), "UTF-8")); + response.addHeader("Content-Length", "" + data.length); + response.setHeader("Access-Control-Allow-Origin", "*"); + response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE"); + response.setHeader("Access-Control-Max-Age", "3600"); + response.setHeader("Access-Control-Allow-Credentials", "true"); + response.setHeader("Access-Control-Allow-Headers", "*"); + response.setContentType("application/octet-stream;charset=UTF-8"); + IOUtils.copy(fis, response.getOutputStream()); + OutputStream outputStream = new BufferedOutputStream(response.getOutputStream()); + outputStream.write(data); + outputStream.flush(); + outputStream.close(); + response.flushBuffer(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + if (in != null) { + try { + in.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + if (out != null) { + out.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + return ""; + } + + + /** + * 从mini文件服务器下载文件,获取文件的读写权限,用户证书报告的生成 + */ + protected void downTemplateFile(String fileNames, String tempLocalFileDir) { + if (StringUtils.isEmpty(fileNames)) { + return; + } + + InputStream in = null; + ByteArrayOutputStream out = null; + try { + String[] fileNameList = fileNames.split(","); + for (String fileName : fileNameList) { + in = minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(fileName).build()); + out = new ByteArrayOutputStream(); + IOUtils.copy(in, out); + //封装返回值 + byte[] bytes = out.toByteArray(); + FilePrintRegisterUtils.byteToFile(bytes, tempLocalFileDir, fileName); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + if (in != null) { + try { + in.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + if (out != null) { + out.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + /** + * 通过生成的证书报告,将证书报告上传到远程mini的文件服务器 + */ + protected String uploadCertificate(String certificatePrintUrl) { + //上传证书 + File file = new File(certificatePrintUrl); + //获取file对象的文件输入流 + FileInputStream input = null; + List nameList = null; + try { + input = new FileInputStream(file); + MultipartFile multipartFile = new MockMultipartFile("file", file.getName(), MediaType.MULTIPART_FORM_DATA_VALUE, IOUtils.toByteArray(input)); + MultipartFile[] multipartFiles = new MultipartFile[1]; + multipartFiles[0] = multipartFile; + nameList = minioUtil.upload(multipartFiles); + } catch (IOException ie) { + log.error("Description Failed to upload the certificate to the server,the failed reason is {}...", ie); + } finally { + if (input != null) { + try { + input.close(); + } catch (IOException e) { + log.error("the upload Certificate input stream release is anomaly"); + } + } + return nameList.get(0); + } + } + + /** + * 创建文件目录,为mini下载文件准备临时工作空间 + */ + protected void createLocalFileDir(String tempLocalFileDir) { + File file = new File(tempLocalFileDir); //以. + if (file.exists()) { + deleteFile(file); + } + file.mkdirs(); //创建目录 + } + + /** + * 对打印报告产生的工作空间进行删除,归还内存 + */ + protected void deleteFile(File invalidFile) { + //返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。 + File[] files = invalidFile.listFiles(); + int length=files.length; + if (files != null) {//如果包含文件进行删除操作 + for (int i = 0; i < length; i++) { + if (files[i].isFile()) { + //删除子文件 + files[i].delete(); + } else if (files[i].isDirectory()) { + //通过递归的方法找到子目录的文件 + deleteFile(files[i]); + } + } + } + if (invalidFile.list().length == 0) { + log.debug("invalid print file has already delete success!"); + } + //删除子目录 + if (invalidFile != null && invalidFile.isDirectory()) { + invalidFile.delete(); + } + } + + /** + * 文件转移,将源文件转移到指定的目录下面 + * + * @param sourceFileUrl 源文件路径 + * @param targetDir 转移目录 + */ + protected void fileMove(String targetDir, String sourceFileUrl) { + // 创建源文件和目标文件对象 + File destinationFolder = new File(targetDir); + //如果不存在则进行创建 + if (!destinationFolder.exists()) { + destinationFolder.mkdirs(); //创建目录 + } + File sourceFile = new File(sourceFileUrl); + try { + // 使用Java 7的Files类将文件移动到目标文件夹中 + Files.move(sourceFile.toPath(), destinationFolder.toPath().resolve(sourceFile.getName()), StandardCopyOption.REPLACE_EXISTING); + } catch (IOException e) { + e.printStackTrace(); + } + } + +} diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java index 114283e..d9b2bab 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java @@ -171,4 +171,12 @@ return ReturnUtil.success(super.packForBT(certificateReportService.certificateMonitorsById(customerSampleIdRequest))); } + + @ApiOperation("导出word打印") + @PostMapping("/exportFile") + public void exportOriginalFile(@RequestBody @Valid IdDTO idDTO, HttpServletResponse response) throws Exception { + certificateReportService.exportOriginalFile(idDTO, response); + } + + } diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index cf47c98..9e7b379 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -177,7 +177,7 @@ return labExecutiveInfoService.sampleReceive(requestList); } - @ApiOperation("实验室检测-扫描增加任务到检测中(任务分发管理中待分发->检测中 / 实验室任务待检测->检测中)") + @ApiOperation("我的检测-扫描增加任务到检测中(任务分发管理中待分发->检测中 / 实验室任务待检测->检测中)") @PostMapping("/myExecutive/add") public ReturnDTO sampleAdd(@RequestBody @Valid List requestList) { return labExecutiveInfoService.sampleAdd(requestList); diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java index db996fc..ad1431a 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java @@ -56,7 +56,7 @@ @ApiOperation("原始记录详情") @PostMapping("/detail") - public ReturnDTO originalDetail(@RequestBody @Valid IdDTO idDTO) throws Exception{ + public ReturnDTO originalDetail(@RequestBody @Valid IdDTO idDTO) throws Exception { Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); @@ -99,10 +99,16 @@ businessOriginalRecordService.originExport(request, response); } + @ApiOperation("导出word打印") + @PostMapping("/exportFile") + public void exportOriginalFile(@RequestBody @Valid IdDTO idDTO, HttpServletResponse response) throws Exception { + businessOriginalRecordService.exportOriginalFile(idDTO, response); + } + @ApiOperation("根据委托单id查询关联样品信息(分页)") @PostMapping("/samplesByOderId") - public ReturnDTO> samplesByOderId(@RequestBody @Valid OriginRecordRequest request) { + public ReturnDTO> samplesByOderId(@RequestBody @Valid OriginRecordRequest request) { Page page = PageFactory.defaultPage(); return ReturnUtil.success(super.packForBT(businessOriginalRecordService.samplesByOderId(page, request))); } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java index 72500d6..81def5d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java @@ -5,4 +5,5 @@ String CALIBRATION_CERTIFICATE = "自有设备内部检校证书"; String TEST_ORDER = "检测委托单"; String CALIBRATION_ORDER = "检定或校准委托单"; + String ORIGINAL_RECORD = "原始记录"; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java index f42477a..3f1a3b2 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java @@ -12,6 +12,7 @@ put(TEST_REPORT, TEST_REPORT_BEAN); //测试报告 put(TEST_ORDER, TEST_ORDER_BEAN); //检测委托单 put(CALIBRATION_ORDER, CALIBRATION_ORDER_BEAN); //检定或校准委托单 + put(ORIGINAL_RECORD, ORIGINAL_RECORD_BEAN); //检定或校准委托单 } }); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java index bf23ba3..3f0b946 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java @@ -15,4 +15,6 @@ //检定或校准委托单 String CALIBRATION_ORDER_BEAN = "calibrationOrderBean"; + //校准证书 + String ORIGINAL_RECORD_BEAN = "originalRecord"; } diff --git a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml index 56b4ae5..79db2e5 100644 --- a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml @@ -43,9 +43,9 @@ - SELECT - orderId,id,sampleName,sampleModel,manufacturingNo,appendixDescn,measureContent,remark,sampleStatus,customerName,measurePeriod, + SELECT orderId,id,sampleName,sampleModel,manufacturingNo,appendixDescn,measureContent,remark,sampleStatus,customerName,measurePeriod, validDeadline,measureLastTime,sampleNo,orderCode,customerNo FROM ( SELECT sample_name AS "sampleName",sample_no AS "sampleNo",sample_model AS "sampleModel",manufacturing_no AS @@ -126,14 +125,14 @@ )csi JOIN ( - SELECT sample_status AS "sampleStatus",sample_id as "sampleId",order_id AS "orderId",order_code AS "orderCode" - FROM business_order_sample_relation bosr - JOIN ( - SELECT id,order_code - FROM business_order - WHERE customer_id=#{request.customerId} - )bo ON bo.id=bosr.order_id - WHERE interchange_id is null + SELECT sample_status AS "sampleStatus",sample_id as "sampleId",order_id AS "orderId",order_code AS "orderCode" + FROM business_order_sample_relation bosr + JOIN ( + SELECT id,order_code + FROM business_order + WHERE customer_id=#{request.customerId} + )bo ON bo.id=bosr.order_id + WHERE interchange_id is null )bor ON bor.sampleId=csi.id ORDER BY create_time DESC diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java index 58ca71e..2306f21 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java @@ -228,4 +228,32 @@ @ApiModelProperty(value = "证书类型名称", dataType = "String") private String certificateReportTypeName; + @TableField("deliver_time") + @ApiModelProperty(value = "接收日期", dataType = "String") + private String deliverTime; + + @TableField("appearance_status") + @ApiModelProperty(value = "外观状态", dataType = "String") + private String appearanceStatus; + + @TableField("certificate_require") + @ApiModelProperty(value = "证书要求", dataType = "String") + private String certificateRequire; + + @TableField("sample_remark") + @ApiModelProperty(value = "样品备注", dataType = "String") + private String sampleRemark; + + @TableField("calibration_time") + @ApiModelProperty(value = "校验日期", dataType = "String") + private String calibrationTime; + + @TableField("verifier_id") + @ApiModelProperty(value = "联系人Id", dataType = "Long") + private Long verifierId; + + @TableField("verifier") + @ApiModelProperty(value = "联系人", dataType = "String") + private String verifier; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java index d2647ac..e2e8349 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java @@ -137,6 +137,31 @@ @TableField("update_time") private String updateTime; + + + @TableField("deliver_time") + @ApiModelProperty(value = "接收时间", dataType = "String") + private String deliverTime; + + @TableField("appearance_status") + @ApiModelProperty(value = "外观状态", dataType = "String") + private String appearanceStatus; + + @TableField("certificate_require") + @ApiModelProperty(value = "证书要求", dataType = "String") + private String certificateRequire; + + @TableField("sample_remark") + @ApiModelProperty(value = "样品状态", dataType = "String") + private String sampleRemark; + + @TableField("verifier_id") + @ApiModelProperty(value = "校验人员ID", dataType = "Long") + private Long verifierId; + + @TableField(exist = false) + @ApiModelProperty(value = "校验人员", dataType = "String") + private String verifierName; /** * 委托单信息 */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java index a558165..c7ae4d4 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; import com.casic.missiles.constants.MeterDictCode; +import io.swagger.annotations.Api; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.NoArgsConstructor; @@ -76,6 +77,10 @@ @ApiModelProperty(value = " 客户特殊要求", dataType = "String") private String specialRequire; + @TableField(exist = false) + @ApiModelProperty(value = "接收时间", dataType = "String") + private String deliverTime; + @ApiModelProperty(value = " 检定方式", dataType = "String") @DictCodeField(message = "检定方式不合法", cacheName = MeterDictCode.MEASURE_TYPE) diff --git a/casic-metering-service/pom.xml b/casic-metering-service/pom.xml index 6aede7a..aa8aa4d 100644 --- a/casic-metering-service/pom.xml +++ b/casic-metering-service/pom.xml @@ -23,12 +23,24 @@ com.casic casic-metering-model 2.0.0 + + + org.apache.poi + poi-ooxml + +
com.casic casic-metering-common 2.0.0 + + + org.apache.poi + poi-ooxml + + org.springframework.boot @@ -48,13 +60,22 @@ com.new.reader reader-api - com.deepoove poi-tl 1.10.0 + + + org.apache.logging.log4j + log4j-api + + - + + org.apache.poi + poi + 4.1.2 + com.aspose aspose-words diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java index 020624d..b9509c2 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java @@ -1,16 +1,19 @@ package com.casic.missiles.service.Impl.business; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.BaseApprovalSubmitRequest; +import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.business.certificate.CertificateMonitorResponse; @@ -41,6 +44,7 @@ import com.casic.missiles.service.business.IBusinessCertificateReportService; import com.casic.missiles.service.business.IBusinessOriginalRecordService; import com.casic.missiles.service.flowable.ApprovalOperateService; +import com.casic.missiles.service.listeners.register.PrintFileRegister; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; import com.casic.missiles.utils.PageUtil; @@ -55,9 +59,14 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; import java.util.*; import java.util.stream.Collectors; +import static com.casic.missiles.enums.business.FilePrintTypeEnum.CALIBRATION_CERTIFICATE; +import static com.casic.missiles.enums.notifyevent.PrintFileDataBeanNameAliasEnum.CALIBRATION_CERTIFICATE_BEAN; +import static com.casic.missiles.enums.notifyevent.PrintFileDataBeanNameAliasEnum.ORIGINAL_RECORD_BEAN; + /** *

* 业务管理-证书报告 服务实现类 @@ -88,6 +97,10 @@ private CustomerSampleServiceImpl sampleService; @Autowired private MeterStaffMapper staffMapper; + @Autowired + private PrintFileRegister printFileRegister; + @Autowired + private AbstractPermissionContext permissionContext; /** * 保存证书报告信息 @@ -326,6 +339,24 @@ return certificateMonitorResponsePage; } + @Override + public void exportOriginalFile(@Valid IdDTO idDTO, HttpServletResponse response) { + BusinessCertificateReport certificateReport = this.baseMapper.detailById(idDTO.getId()); + getApprovalSignName(certificateReport); + if (certificateReport.getOriginalRecordId() != null) { + try { + certificateReport.setBusinessOriginalRecord(originalRecordService.originalDetail(certificateReport.getOriginalRecordId())); + if (Objects.isNull(certificateReport.getBusinessOriginalRecord())) { + certificateReport.setBusinessOriginalRecord(new BusinessOriginalRecord()); + } + certificateReport.setCertificateReportTypeName(dictService.getDictNameByCode(MeterDictEnum.CERTIFICATION_CLASS, certificateReport.getCertificateReportType())); + printFileRegister.registerPrintFile(certificateReport,CALIBRATION_CERTIFICATE,response); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + private List handleApprovalStatus(Page page, CertificateReportApprovalRequest request) { List approvalList = new ArrayList<>(); List businessKeys = new ArrayList<>(); @@ -382,7 +413,7 @@ //合并未通过-拒绝和未通过-驳回 approvalList.addAll(rejectApprovalList); //分页处理 - if(!CollectionUtils.isEmpty(approvalList)) { + if (!CollectionUtils.isEmpty(approvalList)) { Page pages = PageUtil.getPages((int) page.getCurrent(), (int) page.getSize(), approvalList); page.setTotal(approvalList.size()); approvalList = pages.getRecords(); @@ -439,7 +470,7 @@ String approvalSignNames = ""; String[] approvalSignIds = certificateReport.getApprovalSignIds().split(","); for (String approvalSignId : approvalSignIds) { - approvalSignNames += approvalSignNameMap.get(Long.valueOf(approvalSignId))+ ","; + approvalSignNames += approvalSignNameMap.get(Long.valueOf(approvalSignId)) + ","; } approvalSignNames = approvalSignNames.substring(0, approvalSignNames.length() - 1); certificateReport.setApprovalSignName(approvalSignNames); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOriginalRecordServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOriginalRecordServiceImpl.java index 1c602b8..84d5f00 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOriginalRecordServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOriginalRecordServiceImpl.java @@ -1,12 +1,15 @@ package com.casic.missiles.service.Impl.business; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.business.originRecord.OriginRecordRequest; @@ -19,18 +22,32 @@ import com.casic.missiles.model.business.BusinessOriginalRecord; import com.casic.missiles.model.customer.CustomerSampleInfo; import com.casic.missiles.model.system.SystemTemplate; +import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.modular.system.service.IUserService; +import com.casic.missiles.modular.system.service.impl.UserServiceImpl; import com.casic.missiles.service.business.*; import com.casic.missiles.service.customer.CustomerSampleService; +import com.casic.missiles.service.listeners.register.PrintFileRegister; import com.casic.missiles.service.system.ISystemTemplateService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; +import liquibase.pro.packaged.A; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; +import org.springframework.util.ObjectUtils; +import org.springframework.util.StringUtils; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.util.List; +import java.util.Map; +import java.util.stream.Collector; +import java.util.stream.Collectors; + +import static com.casic.missiles.enums.business.FilePrintTypeEnum.ORIGINAL_RECORD; +import static com.casic.missiles.enums.notifyevent.PrintFileDataBeanNameAliasEnum.ORIGINAL_RECORD_BEAN; /** *

@@ -58,11 +75,19 @@ private IBaseExportService iBaseExportService; @Resource private ISystemTemplateService templateService; + @Autowired + private PrintFileRegister printFileRegister; + @Autowired + private AbstractPermissionContext permissionContext; @Override public Page originListPage(Page page, OriginRecordRequest request) throws Exception { // 获取列表 + List userList = permissionContext.getUserService().list(null); + Map userMap = userList.stream().collect( + Collectors.toMap(User::getId, User::getName) + ); Page originalRecordPage = this.baseMapper.originListPage(page, request); if (!CollectionUtils.isEmpty(originalRecordPage.getRecords())) { for (BusinessOriginalRecord record : originalRecordPage.getRecords()) { @@ -70,6 +95,9 @@ if (!StrUtil.isBlankIfStr(record.getSampleId())) { record.setCustomerSampleInfo(customerSampleService.sampleDetail(record.getSampleId())); } + if (!ObjectUtils.isEmpty(record.getVerifierId())) { + record.setVerifierName(userMap.get(record.getVerifierId())); + } } } return originalRecordPage; @@ -101,7 +129,10 @@ businessOriginalRecord.setFileList(originalRecordFileRelationService.getFilesByOriginalRecordId(id)); //查询是否有关联的监测设备 businessOriginalRecord.setEquipmentInfoList(originalRecordEquipmentRelationService.getEquipmentsByOriginalRecordId(id)); - + User user = permissionContext.getUserService().getById(businessOriginalRecord.getVerifierId()); + if (!ObjectUtils.isEmpty(user)) { + businessOriginalRecord.setVerifierName(user.getName()); + } //字典值转换 DictCodeUtils.convertDictCodeToName(businessOriginalRecord); @@ -181,6 +212,41 @@ } } + @Override + public void exportOriginalFile(IdDTO idDTO, HttpServletResponse response) throws Exception { + BusinessOriginalRecord businessOriginalRecord = this.baseMapper.selectById(idDTO.getId()); + if (businessOriginalRecord != null) { + //查询样品详情 + if (businessOriginalRecord.getSampleId() != null) { + businessOriginalRecord.setCustomerSampleInfo(customerSampleService.sampleDetail(businessOriginalRecord.getSampleId())); + } + //查询环境记录单详情 + if (businessOriginalRecord.getEnvironmentId() != null) { + businessOriginalRecord.setBusinessEnvironmentRecord(businessEnvironmentRecordService.environmentDetail(businessOriginalRecord.getEnvironmentId())); + } + //查询委托单详情 + if (businessOriginalRecord.getOrderId() != null) { + businessOriginalRecord.setBusinessOrder(businessOrderService.orderDetail(businessOriginalRecord.getOrderId())); + } + + //查询是否有关联的计量文件 + businessOriginalRecord.setFileList(originalRecordFileRelationService.getFilesByOriginalRecordId(idDTO.getId())); + //查询是否有关联的监测设备 + businessOriginalRecord.setEquipmentInfoList(originalRecordEquipmentRelationService.getEquipmentsByOriginalRecordId(idDTO.getId())); + + //字典值转换 + DictCodeUtils.convertDictCodeToName(businessOriginalRecord); + + //显示模板名称 + if (null != businessOriginalRecord.getTemplateId()) { + SystemTemplate systemTemplate = templateService.getById(businessOriginalRecord.getTemplateId()); + if (systemTemplate != null) { + printFileRegister.registerPrintFile(businessOriginalRecord, ORIGINAL_RECORD, response); + } + } + } + } + private void initBusinessEnvironmentRecord(BusinessOriginalRecord businessOriginalRecord) { Long maxNo = this.baseMapper.selectMaxCode(); String originNo = NumberGeneratorUtil.getContactNo(PrefixCodeEnum.ORIGIN_PREFIX, maxNo); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/SystemTemplateUserRelationServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/SystemTemplateUserRelationServiceImpl.java index 315f0a2..493349b 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/SystemTemplateUserRelationServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/SystemTemplateUserRelationServiceImpl.java @@ -8,7 +8,7 @@ /** *

- * 原始记录/证书报告模板与用户关联表(原始记录/证书报告模板可使用人) 服务实现类 + * /证书报告模板与用户关联表(原始记录/证书报告模板可使用人) 服务实现类 *

* * @author wangpeng diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessCertificateReportService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessCertificateReportService.java index 81cb155..8460e4d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessCertificateReportService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessCertificateReportService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.dto.BaseApprovalSubmitRequest; +import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.business.certificate.CertificateMonitorResponse; import com.casic.missiles.dto.business.certificate.CertificateReportApprovalRequest; @@ -11,8 +12,10 @@ import com.casic.missiles.dto.customer.sample.CustomerSampleIdRequest; import com.casic.missiles.dto.flowable.ApprovalDeleteRequest; import com.casic.missiles.model.business.BusinessCertificateReport; +import org.springframework.web.bind.annotation.RequestBody; import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; import java.util.List; /** @@ -47,5 +50,7 @@ Page certificateMonitorsById(CustomerSampleIdRequest customerSampleIdRequest) throws Exception; + void exportOriginalFile(@RequestBody @Valid IdDTO idDTO, HttpServletResponse response); + Page certificateRecordsById(CustomerSampleIdRequest customerSampleIdRequest) throws Exception; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessOriginalRecordService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessOriginalRecordService.java index cbb6b40..047f931 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessOriginalRecordService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessOriginalRecordService.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.business.originRecord.OriginRecordRequest; import com.casic.missiles.model.business.BusinessOriginalRecord; @@ -11,7 +12,7 @@ /** *

- * 服务类 + * 服务类 *

* * @author wangpeng @@ -21,7 +22,7 @@ Page originListPage(Page page, OriginRecordRequest request) throws Exception; - Page samplesByOderId(Page sampleInfoPage, OriginRecordRequest request) ; + Page samplesByOderId(Page sampleInfoPage, OriginRecordRequest request); BusinessOriginalRecord originalDetail(Long id) throws Exception; @@ -33,5 +34,7 @@ void originExport(OriginRecordRequest request, HttpServletResponse response); + void exportOriginalFile(IdDTO idDTO, HttpServletResponse response) throws Exception; + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java new file mode 100644 index 0000000..63d9aaf --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java @@ -0,0 +1,99 @@ +package com.casic.missiles.service.listeners.register; + +import com.casic.missiles.service.listeners.register.FilePrintRegisterUtils; +import com.casic.missiles.utils.QRCodeUtil; +import com.deepoove.poi.XWPFTemplate; +import com.deepoove.poi.config.Configure; +import com.deepoove.poi.config.ConfigureBuilder; +import com.spire.doc.Document; +import com.spire.doc.FileFormat; +import org.apache.coyote.OutputBuffer; + +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author cz + */ +public class Example { + + private static String localPathUrl = "D:\\casic\\cut\\"; + + /** + * 多个word合并为一个doc样例 + */ + public static void mergeDoc() { + String word1Url = localPathUrl + "211.docx"; +// String word2Url = localPathUrl + "202.docx"; +// //加载文档1 + Document doc1 = new Document(word1Url); +// //调用方法将文档2插入到文档1 +// doc1.insertTextFromFile(word2Url, FileFormat.Docx_2010); +// //保存合并后的文档 +// doc1.saveToFile(word1Url, FileFormat.Docx_2010); + doc1.saveToFile(localPathUrl + "add.docx", FileFormat.Docx); + } + + /** + * 表格合并样例 + */ + public static void tableMerge() { + String localPathUrl = "D:\\casic\\cut\\"; + // 目标文件地址 + String wordOldUrl = localPathUrl + "204.doc"; + Map params = new HashMap<>(); + List> assetList = new ArrayList<>(); + for (int i = 0; i < 8; i++) { + Map assetMap = new HashMap<>(); + assetMap.put("seq", String.valueOf(i / 4)); + assetMap.put("customer", "供方" + String.valueOf(i / 4)); + assetMap.put("customerName", "供方名字" + i); + assetMap.put("model", "型号" + i); + assetMap.put("startDate", "启用时间" + i); + assetMap.put("trainCondition", "维修时间"); + assetMap.put("status", "我醉"); + assetMap.put("evaluate", "我醒"); + assetList.add(assetMap); + } + params.put("train", assetList); + params.put("staffName", "张三"); + params.put("gender", "男"); + params.put("birthday", "2202-10-5"); + params.put("nation", "汉"); + params.put("enlistmentDate", "2196-9-18"); + params.put("partyDate", "2188-9-18"); + params.put("degree", "博士"); + params.put("test", "\uF052"); + params.put("error", "\uF0A3"); +// String newOldUrl = FilePrintRegisterUtils.exportWord(wordOldUrl, localPathUrl, "temp.docx", params, null); +// System.out.println(newOldUrl); + } + + + private static void textBoxTest() throws IOException { + Map map = new HashMap<>(); + ConfigureBuilder builder = Configure.builder(); + XWPFTemplate compile = XWPFTemplate.compile("D:\\casic\\cut\\204.docx", builder.build()); + compile.render(map); + compile.writeToFile("D:\\casic\\cut\\out_test3.docx"); + } + + + /** + * 1、生成二维码图片 + * 2、二维码图片进行图片的合成 + * 3、 + * @param args + * @throws Exception + */ + public static void main(String[] args) throws Exception { + OutputStream output =new FileOutputStream("D:\\casic\\cut\\test.png"); + QRCodeUtil.getQRCode("D:\\casic\\cut\\1航天检定模版v1.xls", output); + } + +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java index 4fb3b33..da44ae2 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java @@ -2,12 +2,15 @@ import cn.hutool.core.lang.Assert; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.util.ListUtils; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.casic.missiles.dto.business.certificate.ElectronicImage; import com.casic.missiles.dto.business.file.FilePrintRegister; -import com.casic.missiles.service.listeners.util.ParseWord07; +import com.casic.missiles.service.listeners.util.ParseWord07; import com.casic.missiles.service.listeners.util.PdfUtils; +import com.casic.missiles.utils.QRCodeUtil; import com.spire.doc.*; import com.spire.doc.documents.*; import com.spire.doc.fields.DocPicture; @@ -45,20 +48,7 @@ */ public static String filePrintGenerate(FilePrintRegister filePrintRegister) throws RuntimeException { //1、按照模板填充数据,并导出word,执行填充行数之后,再进行页数的填充 - String wordOldUrl = exportWord(filePrintRegister.getTemplatePath(), filePrintRegister.getTemDir(), filePrintRegister.getFileName(), filePrintRegister.getParams()); -// Document document = new Document(); -// document.loadFromFile(wordOldUrl); -// document.getPageCount(); - //设置透明属性 1、获取照片 2、签章背景透明设置 3、设置照片路径和照片类型进行图片保存 -// for (ElectronicImage electronicSeal : filePrintRegister.getElectronicImageList()) { -// BufferedImage bi = readImage(electronicSeal.getElectronicSealImageUrl()); -// BufferedImage electronSealImage = convertLayout(bi, electronicSeal.getDiaphaneity()); -// String stampImgUrl = electronicSeal.getElectronicSealImageUrl(); -// String imagePath = stampImgUrl.substring(0, stampImgUrl.length() - 4) + "1.png"; -// String[] imageCutOffContents = stampImgUrl.split("."); -// electronicSeal.setElectronicSealImageUrl(imagePath); -// saveFile(electronSealImage, imageCutOffContents[imageCutOffContents.length - 1], imagePath); -// } +// String wordOldUrl = exportWord(filePrintRegister.getTemplatePath(), filePrintRegister.getTemDir(), filePrintRegister.getFileName(), filePrintRegister.getParams()); // 初始化world,pdf名称参数 String wordNewUrl = filePrintRegister.getTemplatePath(); //默认转为docx,只需要进行docx的替换即可 @@ -71,24 +61,24 @@ .collect( Collectors.groupingBy(ElectronicImage::getKeyWord) ); - //3、根据关键字进行添加签章和签字 - for (Map.Entry> entry : sameKeyWordSealMaps.entrySet()) { - List electronicSeals = entry.getValue(); - addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSeals); - } - //获取没有关键字的图片,即绝对路径的图片 - List absolutePathImageList = filePrintRegister.getElectronicImageList().stream() - .filter(electronicImage -> StringUtils.isEmpty(electronicImage.getKeyWord())) - .collect(Collectors.toList()); - //根据设置的绝对路径进行图片的填充 - for (ElectronicImage absolutePathImage : absolutePathImageList) { - addAbsolutePathStamp(wordOldUrl, wordNewUrl, absolutePathImage); - } - //由于合成word总页数存在不准确,先转换为pdf进行获取合成证书总页数, 处理齐缝章 +// //3、根据关键字进行添加签章和签字 +// for (Map.Entry> entry : sameKeyWordSealMaps.entrySet()) { +// List electronicSeals = entry.getValue(); +// addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSeals); +// } +//// //获取没有关键字的图片,即绝对路径的图片 +// List absolutePathImageList = filePrintRegister.getElectronicImageList().stream() +// .filter(electronicImage -> StringUtils.isEmpty(electronicImage.getKeyWord())) +// .collect(Collectors.toList()); +// //根据设置的绝对路径进行图片的填充 +// for (ElectronicImage absolutePathImage : absolutePathImageList) { +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, absolutePathImage); +// } +// 由于合成word总页数存在不准确,先转换为pdf进行获取合成证书总页数, 处理齐缝章 } // 4、将新word转化为pdf文件 - wordToPdf(wordNewUrl, pdfNewUrl); - return pdfNewUrl; +// wordToPdf(wordNewUrl, pdfNewUrl); + return filePrintRegister.getTemplatePath(); } @@ -163,7 +153,7 @@ * @param pdfNewUrl 存储新PDF文件路径 */ public static void wordToPdf(String wordNewUrl, String pdfNewUrl) { - PdfUtils.doc2pdf(wordNewUrl,pdfNewUrl); + PdfUtils.doc2pdf(wordNewUrl, pdfNewUrl); //// 将新Word文档转换为PDF文件 // Document document = new Document(); // document.loadFromFile(wordNewUrl); @@ -442,62 +432,27 @@ public static void main(String[] args) throws RuntimeException { - String pathUrl = "D:\\casic"; - String localPathUrl = "D:\\casic\\"; - // 目标文件地址 - String wordOldUrl = pathUrl + "\\工作记录单.docx"; - // 添加电子印章后文件存放地址 - String wordNewUrl = localPathUrl + "\\tem1.docx"; - Map params = new HashMap<>(); - List> assetList = new ArrayList<>(); - for (int i = 0; i < 3; i++) { - Map assetMap = new HashMap<>(); - assetMap.put("assetName", "我不是设备名称"); - assetMap.put("model", "我不是型号"); - assetMap.put("assetNo", "我是设备编号"); - assetList.add(assetMap); - } - params.put("assetList", assetList); - params.put("logNo", "本编号"); - params.put("laboratoryName", "此去半生"); - params.put("executiveAddress", "猜猜我在哪里"); - exportWord(wordOldUrl, localPathUrl, "temp.docx", params); + } -// //WORD转PDF存放位置 -// String pdfNewUrl = localPathUrl + "\\tem.pdf"; -// //电子印章图片地址 -// String stampNameImgUr = localPathUrl + "\\name1_1678844060471.png"; -// //电子签名图片地址 -// String stampSealImgUrl = localPathUrl + "\\ceshi.jpg"; -// // word文档内容关键字 -// FilePrintRegisterUtils addStampUtils = new FilePrintRegisterUtils(); -// List electronicSealList = new ArrayList(11); -// ElectronicImage electronicImage = defaultElectronicSignName("批准人"); -// electronicImage.setElectronicSealImageUrl(stampNameImgUr); -// electronicSealList.add(electronicImage); -// addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); -// //加载文档 -// Document document = new Document(); -// document.loadFromFile(wordOldUrl); -// //获取段落总数 -// int count = document.getPageCount(); -// System.out.println(count); -// String[] imageCutOffContents = stampSealImgUrl.split("\\."); -// CropPicture cropPicture = CropPicture.builder() -// .targetImgUrl(stampSealImgUrl) -// .cutCols(count) -// .cutRows(1) -// .subfileUrl(imageCutOffContents[imageCutOffContents.length - 2]) -// .subfileType("." + imageCutOffContents[imageCutOffContents.length - 1]) -// .build(); -// try { -// ImageTool.crosswiseCutting(cropPicture); -// } catch (IOException ex) { -// -// } -//// 将新word转化为pdf文件 -//// addStampUtils.wordToPdf(wordNewUrl, pdfNewUrl); + public static void QRCodeExcel() throws Exception { +// String path = "D:\\casic\\cut\\"; +// String fileName = path + "1航天检定模版v1.xls"; +// List list = ListUtils.newArrayList(); +// ImageDemoData imageDemoData = new ImageDemoData(); +// list.add(imageDemoData); +// // 创建字节数组输出流 +// ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); +// // 调用 QrCodeUtil.generate() 生成二维码,并将结果写入输出流 +// QRCodeUtil.getQRCode("helloworld", outputStream); +// // 从输出流中获取生成的二维码图像数据 +// byte[] qrCodeData = outputStream.toByteArray(); +// imageDemoData.setByteArray(qrCodeData); +// imageDemoData.setShortDesc("helloworld"); +// // 关闭输出流 +// outputStream.close(); +// // 写入数据 +// EasyExcel.write(fileName, ImageDemoData.class).sheet().doWrite(list); } protected static ElectronicImage defaultElectronicSignSeal(String keyWord, float horizontal) { diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java index 9037b0c..aeaa778 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java @@ -18,6 +18,7 @@ import org.springframework.stereotype.Component; import org.springframework.web.multipart.MultipartFile; +import javax.servlet.http.HttpServletResponse; import java.io.*; import java.util.List; import java.util.Objects; @@ -28,7 +29,7 @@ */ @Component @Slf4j -public class PrintFileRegister { +public class PrintFileRegister extends PrintFileSupport { @Autowired private MinioClient minioClient; @@ -40,6 +41,16 @@ private String localFileDir; /** + * 新增,增加文件流回传下载 + * @param printFileRegister + * @param prefixType + * @return + */ + public String registerPrintFile(Object printFileRegister, String prefixType) { + return this.registerPrintFile(printFileRegister, prefixType, null); + } + + /** * 打印文件注册到服务器上有以下几个步骤 * 1、根据打印证书的类型,获取自定义的注册打印文件对象 * 2、进行远程文件的下载工作,支持文件的读写权限操作 @@ -48,7 +59,7 @@ * 5、递归删除因为打印产生的文件信息 * 6、返还打印产生的证书文件 */ - public String registerPrintFile(Object printFileRegister, String prefixType) { + public String registerPrintFile(Object printFileRegister, String prefixType, HttpServletResponse response) { String tempLocalFileDir = localFileDir; Assert.isFalse(Objects.isNull(printFileRegister), () -> { throw new RuntimeException("the certificateReport is null,please check your params..."); @@ -72,13 +83,17 @@ //合并注册 String certificatePdfUrl = FilePrintRegisterUtils.filePrintGenerate(metaData); //上传到服务器 - String certificatePdfName=uploadCertificate(certificatePdfUrl); +// String certificatePdfName = uploadCertificate(certificatePdfUrl); + //如果文件路径不为空,回传文件流 + if(StringUtils.isNotEmpty(certificatePdfUrl)){ + createResponseFileInput(certificatePdfUrl,response); + } //删除无效的文件 File invalidFile = new File(tempLocalFileDir); log.debug("invalid print file start delete, the file directory is {}", tempLocalFileDir); //删除运行空间下的文件 deleteFile(invalidFile); - return certificatePdfName; + return certificatePdfUrl; } throw new RuntimeException("the bean mapped to this certificate type is empty..."); } @@ -87,98 +102,12 @@ * 创建文件目录,为mini下载文件准备目录 */ private void getLocalFileDir(String tempLocalFileDir) { - File file = new File(tempLocalFileDir); //以. + File file = new File(tempLocalFileDir); //以 if (file.exists()) { deleteFile(file); } boolean dr = file.mkdirs(); //创建目录 } - /** - * 从mini文件服务器下载文件,获取文件的读写权限,用户证书报告的生成 - */ - private void downTemplateFile(String fileName, String tempLocalFileDir) { - InputStream in = null; - ByteArrayOutputStream out = null; - try { - in = minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(fileName).build()); - out = new ByteArrayOutputStream(); - IOUtils.copy(in, out); - //封装返回值 - byte[] bytes = out.toByteArray(); - FilePrintRegisterUtils.byteToFile(bytes, tempLocalFileDir, fileName); - } catch (Exception e) { - e.printStackTrace(); - } finally { - try { - if (in != null) { - try { - in.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - if (out != null) { - out.close(); - } - } catch (IOException e) { - e.printStackTrace(); - } - } - } - /** - * 通过生成的证书报告,将证书报告上传到远程mini的文件服务器 - */ - public String uploadCertificate(String certificatePrintUrl) { - //上传证书 - File file = new File(certificatePrintUrl); - //获取file对象的文件输入流 - FileInputStream input = null; - List nameList = null; - try { - input = new FileInputStream(file); - MultipartFile multipartFile = new MockMultipartFile("file", file.getName(), MediaType.MULTIPART_FORM_DATA_VALUE, IOUtils.toByteArray(input)); - MultipartFile[] multipartFiles = new MultipartFile[1]; - multipartFiles[0] = multipartFile; - nameList = minioUtil.upload(multipartFiles); - } catch (IOException ie) { - log.error("Description Failed to upload the certificate to the server,the failed reason is {}...", ie); - } finally { - if (input != null) { - try { - input.close(); - } catch (IOException e) { - log.error("the upload Certificate input stream release is anomaly"); - } - } - return nameList.get(0); - } - } - - /** - * 对打印报告产生的空间进行清除,还原空间 - */ - private void deleteFile(File invalidFile) { - //返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。 - File[] files = invalidFile.listFiles(); - if (files != null) {//如果包含文件进行删除操作 - for (int i = 0; i < files.length; i++) { - if (files[i].isFile()) { - //删除子文件 - files[i].delete(); - } else if (files[i].isDirectory()) { - //通过递归的方法找到子目录的文件 - deleteFile(files[i]); - } - } - } - if (invalidFile.list().length == 0) { - log.debug("invalid print file has already delete success!"); - } - //删除子目录 - if (invalidFile != null && invalidFile.isDirectory()) { - invalidFile.delete(); - } - } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileSupport.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileSupport.java new file mode 100644 index 0000000..2aee62e --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileSupport.java @@ -0,0 +1,220 @@ +package com.casic.missiles.service.listeners.register; + +import com.casic.missiles.utils.MinioUtil; +import io.minio.GetObjectArgs; +import io.minio.MinioClient; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.MediaType; +import org.springframework.mock.web.MockMultipartFile; +import org.springframework.stereotype.Component; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletResponse; +import java.io.*; +import java.net.URLEncoder; +import java.nio.file.Files; +import java.nio.file.StandardCopyOption; +import java.util.List; + +@Component +@Slf4j +public class PrintFileSupport { + + @Autowired + private MinioClient minioClient; + @Autowired + private MinioUtil minioUtil; + @Value("${minio.bucketName}") + private String bucketName; + + /** + * 返回文件流 + * + * @param printDocUrl 文件流路径,pdf,word + * @param response + */ + protected String createResponseFileInput(String printDocUrl, HttpServletResponse response) { + if (response == null) { +// return null; + return uploadCertificate(printDocUrl); + } + File file = new File(printDocUrl); + InputStream in = null; + ByteArrayOutputStream out = null; + try { + FileInputStream fis = new FileInputStream(file); + out = new ByteArrayOutputStream(); + IOUtils.copy(fis, out); + //封装返回值 + byte[] data = out.toByteArray(); + response.reset(); + response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(file.getName(), "UTF-8")); + response.addHeader("Content-Length", "" + data.length); + response.setHeader("Access-Control-Allow-Origin", "*"); + response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE"); + response.setHeader("Access-Control-Max-Age", "3600"); + response.setHeader("Access-Control-Allow-Credentials", "true"); + response.setHeader("Access-Control-Allow-Headers", "*"); + response.setContentType("application/octet-stream;charset=UTF-8"); + IOUtils.copy(fis, response.getOutputStream()); + OutputStream outputStream = new BufferedOutputStream(response.getOutputStream()); + outputStream.write(data); + outputStream.flush(); + outputStream.close(); + response.flushBuffer(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + if (in != null) { + try { + in.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + if (out != null) { + out.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + return ""; + } + + + /** + * 从mini文件服务器下载文件,获取文件的读写权限,用户证书报告的生成 + */ + protected void downTemplateFile(String fileNames, String tempLocalFileDir) { + if (StringUtils.isEmpty(fileNames)) { + return; + } + + InputStream in = null; + ByteArrayOutputStream out = null; + try { + String[] fileNameList = fileNames.split(","); + for (String fileName : fileNameList) { + in = minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(fileName).build()); + out = new ByteArrayOutputStream(); + IOUtils.copy(in, out); + //封装返回值 + byte[] bytes = out.toByteArray(); + FilePrintRegisterUtils.byteToFile(bytes, tempLocalFileDir, fileName); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + if (in != null) { + try { + in.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + if (out != null) { + out.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + /** + * 通过生成的证书报告,将证书报告上传到远程mini的文件服务器 + */ + protected String uploadCertificate(String certificatePrintUrl) { + //上传证书 + File file = new File(certificatePrintUrl); + //获取file对象的文件输入流 + FileInputStream input = null; + List nameList = null; + try { + input = new FileInputStream(file); + MultipartFile multipartFile = new MockMultipartFile("file", file.getName(), MediaType.MULTIPART_FORM_DATA_VALUE, IOUtils.toByteArray(input)); + MultipartFile[] multipartFiles = new MultipartFile[1]; + multipartFiles[0] = multipartFile; + nameList = minioUtil.upload(multipartFiles); + } catch (IOException ie) { + log.error("Description Failed to upload the certificate to the server,the failed reason is {}...", ie); + } finally { + if (input != null) { + try { + input.close(); + } catch (IOException e) { + log.error("the upload Certificate input stream release is anomaly"); + } + } + return nameList.get(0); + } + } + + /** + * 创建文件目录,为mini下载文件准备临时工作空间 + */ + protected void createLocalFileDir(String tempLocalFileDir) { + File file = new File(tempLocalFileDir); //以. + if (file.exists()) { + deleteFile(file); + } + file.mkdirs(); //创建目录 + } + + /** + * 对打印报告产生的工作空间进行删除,归还内存 + */ + protected void deleteFile(File invalidFile) { + //返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。 + File[] files = invalidFile.listFiles(); + int length=files.length; + if (files != null) {//如果包含文件进行删除操作 + for (int i = 0; i < length; i++) { + if (files[i].isFile()) { + //删除子文件 + files[i].delete(); + } else if (files[i].isDirectory()) { + //通过递归的方法找到子目录的文件 + deleteFile(files[i]); + } + } + } + if (invalidFile.list().length == 0) { + log.debug("invalid print file has already delete success!"); + } + //删除子目录 + if (invalidFile != null && invalidFile.isDirectory()) { + invalidFile.delete(); + } + } + + /** + * 文件转移,将源文件转移到指定的目录下面 + * + * @param sourceFileUrl 源文件路径 + * @param targetDir 转移目录 + */ + protected void fileMove(String targetDir, String sourceFileUrl) { + // 创建源文件和目标文件对象 + File destinationFolder = new File(targetDir); + //如果不存在则进行创建 + if (!destinationFolder.exists()) { + destinationFolder.mkdirs(); //创建目录 + } + File sourceFile = new File(sourceFileUrl); + try { + // 使用Java 7的Files类将文件移动到目标文件夹中 + Files.move(sourceFile.toPath(), destinationFolder.toPath().resolve(sourceFile.getName()), StandardCopyOption.REPLACE_EXISTING); + } catch (IOException e) { + e.printStackTrace(); + } + } + +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/original/OriginalRecord.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/original/OriginalRecord.java new file mode 100644 index 0000000..e140056 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/original/OriginalRecord.java @@ -0,0 +1,44 @@ +package com.casic.missiles.service.listeners.register.data.original; + +import com.casic.missiles.dto.business.certificate.ElectronicImage; +import com.casic.missiles.dto.business.file.FilePrintRegister; +import com.casic.missiles.dto.flowable.ApprovalLogResponse; +import com.casic.missiles.enums.notifyevent.PrintFileDataBeanNameAliasEnum; +import com.casic.missiles.model.business.BusinessCertificateReport; +import com.casic.missiles.model.business.BusinessOriginalRecord; +import com.casic.missiles.model.business.BusinessSiteExecutiveInfo; +import com.casic.missiles.service.listeners.register.data.PrintFileDataGeneric; +import com.casic.missiles.service.listeners.register.data.PrintFileDataSupport; +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 原始记录生成 + * 校准证书参数生成 + */ +@Component(PrintFileDataBeanNameAliasEnum.ORIGINAL_RECORD_BEAN) +public class OriginalRecord extends PrintFileDataSupport implements PrintFileDataGeneric { + + @Override + public FilePrintRegister CustomizedPrintFileRegister(Object object, String templateFileDir) { + BusinessOriginalRecord metaData = (BusinessOriginalRecord) object; + //初始化,生成模板文件 + FilePrintRegister filePrintRegister = initialization(templateFileDir, metaData.getId(), getTemplateName(metaData.getTemplateId())); + //定制化签名开发预处理,定制化参数 + customizedSignNamesParamCreator(); + //填充定制化的参数 + filePrintRegister.setParams(certificateFileParamCreator(metaData.getOrderId(), metaData.getSampleId())); + return filePrintRegister; + } + + + @Override + protected void customizedSignNamesParamCreator() { + keyParamList = Arrays.asList("发起人", "核验人", "审核人" ); + customizedSignNames = Arrays.asList("校准人", "核验人", "批准人" ); + } +} diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java index 114283e..d9b2bab 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java @@ -171,4 +171,12 @@ return ReturnUtil.success(super.packForBT(certificateReportService.certificateMonitorsById(customerSampleIdRequest))); } + + @ApiOperation("导出word打印") + @PostMapping("/exportFile") + public void exportOriginalFile(@RequestBody @Valid IdDTO idDTO, HttpServletResponse response) throws Exception { + certificateReportService.exportOriginalFile(idDTO, response); + } + + } diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index cf47c98..9e7b379 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -177,7 +177,7 @@ return labExecutiveInfoService.sampleReceive(requestList); } - @ApiOperation("实验室检测-扫描增加任务到检测中(任务分发管理中待分发->检测中 / 实验室任务待检测->检测中)") + @ApiOperation("我的检测-扫描增加任务到检测中(任务分发管理中待分发->检测中 / 实验室任务待检测->检测中)") @PostMapping("/myExecutive/add") public ReturnDTO sampleAdd(@RequestBody @Valid List requestList) { return labExecutiveInfoService.sampleAdd(requestList); diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java index db996fc..ad1431a 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java @@ -56,7 +56,7 @@ @ApiOperation("原始记录详情") @PostMapping("/detail") - public ReturnDTO originalDetail(@RequestBody @Valid IdDTO idDTO) throws Exception{ + public ReturnDTO originalDetail(@RequestBody @Valid IdDTO idDTO) throws Exception { Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); @@ -99,10 +99,16 @@ businessOriginalRecordService.originExport(request, response); } + @ApiOperation("导出word打印") + @PostMapping("/exportFile") + public void exportOriginalFile(@RequestBody @Valid IdDTO idDTO, HttpServletResponse response) throws Exception { + businessOriginalRecordService.exportOriginalFile(idDTO, response); + } + @ApiOperation("根据委托单id查询关联样品信息(分页)") @PostMapping("/samplesByOderId") - public ReturnDTO> samplesByOderId(@RequestBody @Valid OriginRecordRequest request) { + public ReturnDTO> samplesByOderId(@RequestBody @Valid OriginRecordRequest request) { Page page = PageFactory.defaultPage(); return ReturnUtil.success(super.packForBT(businessOriginalRecordService.samplesByOderId(page, request))); } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java index 72500d6..81def5d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java @@ -5,4 +5,5 @@ String CALIBRATION_CERTIFICATE = "自有设备内部检校证书"; String TEST_ORDER = "检测委托单"; String CALIBRATION_ORDER = "检定或校准委托单"; + String ORIGINAL_RECORD = "原始记录"; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java index f42477a..3f1a3b2 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java @@ -12,6 +12,7 @@ put(TEST_REPORT, TEST_REPORT_BEAN); //测试报告 put(TEST_ORDER, TEST_ORDER_BEAN); //检测委托单 put(CALIBRATION_ORDER, CALIBRATION_ORDER_BEAN); //检定或校准委托单 + put(ORIGINAL_RECORD, ORIGINAL_RECORD_BEAN); //检定或校准委托单 } }); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java index bf23ba3..3f0b946 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java @@ -15,4 +15,6 @@ //检定或校准委托单 String CALIBRATION_ORDER_BEAN = "calibrationOrderBean"; + //校准证书 + String ORIGINAL_RECORD_BEAN = "originalRecord"; } diff --git a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml index 56b4ae5..79db2e5 100644 --- a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml @@ -43,9 +43,9 @@ - SELECT - orderId,id,sampleName,sampleModel,manufacturingNo,appendixDescn,measureContent,remark,sampleStatus,customerName,measurePeriod, + SELECT orderId,id,sampleName,sampleModel,manufacturingNo,appendixDescn,measureContent,remark,sampleStatus,customerName,measurePeriod, validDeadline,measureLastTime,sampleNo,orderCode,customerNo FROM ( SELECT sample_name AS "sampleName",sample_no AS "sampleNo",sample_model AS "sampleModel",manufacturing_no AS @@ -126,14 +125,14 @@ )csi JOIN ( - SELECT sample_status AS "sampleStatus",sample_id as "sampleId",order_id AS "orderId",order_code AS "orderCode" - FROM business_order_sample_relation bosr - JOIN ( - SELECT id,order_code - FROM business_order - WHERE customer_id=#{request.customerId} - )bo ON bo.id=bosr.order_id - WHERE interchange_id is null + SELECT sample_status AS "sampleStatus",sample_id as "sampleId",order_id AS "orderId",order_code AS "orderCode" + FROM business_order_sample_relation bosr + JOIN ( + SELECT id,order_code + FROM business_order + WHERE customer_id=#{request.customerId} + )bo ON bo.id=bosr.order_id + WHERE interchange_id is null )bor ON bor.sampleId=csi.id ORDER BY create_time DESC diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java index 58ca71e..2306f21 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java @@ -228,4 +228,32 @@ @ApiModelProperty(value = "证书类型名称", dataType = "String") private String certificateReportTypeName; + @TableField("deliver_time") + @ApiModelProperty(value = "接收日期", dataType = "String") + private String deliverTime; + + @TableField("appearance_status") + @ApiModelProperty(value = "外观状态", dataType = "String") + private String appearanceStatus; + + @TableField("certificate_require") + @ApiModelProperty(value = "证书要求", dataType = "String") + private String certificateRequire; + + @TableField("sample_remark") + @ApiModelProperty(value = "样品备注", dataType = "String") + private String sampleRemark; + + @TableField("calibration_time") + @ApiModelProperty(value = "校验日期", dataType = "String") + private String calibrationTime; + + @TableField("verifier_id") + @ApiModelProperty(value = "联系人Id", dataType = "Long") + private Long verifierId; + + @TableField("verifier") + @ApiModelProperty(value = "联系人", dataType = "String") + private String verifier; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java index d2647ac..e2e8349 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java @@ -137,6 +137,31 @@ @TableField("update_time") private String updateTime; + + + @TableField("deliver_time") + @ApiModelProperty(value = "接收时间", dataType = "String") + private String deliverTime; + + @TableField("appearance_status") + @ApiModelProperty(value = "外观状态", dataType = "String") + private String appearanceStatus; + + @TableField("certificate_require") + @ApiModelProperty(value = "证书要求", dataType = "String") + private String certificateRequire; + + @TableField("sample_remark") + @ApiModelProperty(value = "样品状态", dataType = "String") + private String sampleRemark; + + @TableField("verifier_id") + @ApiModelProperty(value = "校验人员ID", dataType = "Long") + private Long verifierId; + + @TableField(exist = false) + @ApiModelProperty(value = "校验人员", dataType = "String") + private String verifierName; /** * 委托单信息 */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java index a558165..c7ae4d4 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; import com.casic.missiles.constants.MeterDictCode; +import io.swagger.annotations.Api; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.NoArgsConstructor; @@ -76,6 +77,10 @@ @ApiModelProperty(value = " 客户特殊要求", dataType = "String") private String specialRequire; + @TableField(exist = false) + @ApiModelProperty(value = "接收时间", dataType = "String") + private String deliverTime; + @ApiModelProperty(value = " 检定方式", dataType = "String") @DictCodeField(message = "检定方式不合法", cacheName = MeterDictCode.MEASURE_TYPE) diff --git a/casic-metering-service/pom.xml b/casic-metering-service/pom.xml index 6aede7a..aa8aa4d 100644 --- a/casic-metering-service/pom.xml +++ b/casic-metering-service/pom.xml @@ -23,12 +23,24 @@ com.casic casic-metering-model 2.0.0 + + + org.apache.poi + poi-ooxml + +
com.casic casic-metering-common 2.0.0 + + + org.apache.poi + poi-ooxml + + org.springframework.boot @@ -48,13 +60,22 @@ com.new.reader reader-api - com.deepoove poi-tl 1.10.0 + + + org.apache.logging.log4j + log4j-api + + - + + org.apache.poi + poi + 4.1.2 + com.aspose aspose-words diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java index 020624d..b9509c2 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java @@ -1,16 +1,19 @@ package com.casic.missiles.service.Impl.business; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.BaseApprovalSubmitRequest; +import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.business.certificate.CertificateMonitorResponse; @@ -41,6 +44,7 @@ import com.casic.missiles.service.business.IBusinessCertificateReportService; import com.casic.missiles.service.business.IBusinessOriginalRecordService; import com.casic.missiles.service.flowable.ApprovalOperateService; +import com.casic.missiles.service.listeners.register.PrintFileRegister; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; import com.casic.missiles.utils.PageUtil; @@ -55,9 +59,14 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; import java.util.*; import java.util.stream.Collectors; +import static com.casic.missiles.enums.business.FilePrintTypeEnum.CALIBRATION_CERTIFICATE; +import static com.casic.missiles.enums.notifyevent.PrintFileDataBeanNameAliasEnum.CALIBRATION_CERTIFICATE_BEAN; +import static com.casic.missiles.enums.notifyevent.PrintFileDataBeanNameAliasEnum.ORIGINAL_RECORD_BEAN; + /** *

* 业务管理-证书报告 服务实现类 @@ -88,6 +97,10 @@ private CustomerSampleServiceImpl sampleService; @Autowired private MeterStaffMapper staffMapper; + @Autowired + private PrintFileRegister printFileRegister; + @Autowired + private AbstractPermissionContext permissionContext; /** * 保存证书报告信息 @@ -326,6 +339,24 @@ return certificateMonitorResponsePage; } + @Override + public void exportOriginalFile(@Valid IdDTO idDTO, HttpServletResponse response) { + BusinessCertificateReport certificateReport = this.baseMapper.detailById(idDTO.getId()); + getApprovalSignName(certificateReport); + if (certificateReport.getOriginalRecordId() != null) { + try { + certificateReport.setBusinessOriginalRecord(originalRecordService.originalDetail(certificateReport.getOriginalRecordId())); + if (Objects.isNull(certificateReport.getBusinessOriginalRecord())) { + certificateReport.setBusinessOriginalRecord(new BusinessOriginalRecord()); + } + certificateReport.setCertificateReportTypeName(dictService.getDictNameByCode(MeterDictEnum.CERTIFICATION_CLASS, certificateReport.getCertificateReportType())); + printFileRegister.registerPrintFile(certificateReport,CALIBRATION_CERTIFICATE,response); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + private List handleApprovalStatus(Page page, CertificateReportApprovalRequest request) { List approvalList = new ArrayList<>(); List businessKeys = new ArrayList<>(); @@ -382,7 +413,7 @@ //合并未通过-拒绝和未通过-驳回 approvalList.addAll(rejectApprovalList); //分页处理 - if(!CollectionUtils.isEmpty(approvalList)) { + if (!CollectionUtils.isEmpty(approvalList)) { Page pages = PageUtil.getPages((int) page.getCurrent(), (int) page.getSize(), approvalList); page.setTotal(approvalList.size()); approvalList = pages.getRecords(); @@ -439,7 +470,7 @@ String approvalSignNames = ""; String[] approvalSignIds = certificateReport.getApprovalSignIds().split(","); for (String approvalSignId : approvalSignIds) { - approvalSignNames += approvalSignNameMap.get(Long.valueOf(approvalSignId))+ ","; + approvalSignNames += approvalSignNameMap.get(Long.valueOf(approvalSignId)) + ","; } approvalSignNames = approvalSignNames.substring(0, approvalSignNames.length() - 1); certificateReport.setApprovalSignName(approvalSignNames); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOriginalRecordServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOriginalRecordServiceImpl.java index 1c602b8..84d5f00 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOriginalRecordServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOriginalRecordServiceImpl.java @@ -1,12 +1,15 @@ package com.casic.missiles.service.Impl.business; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.business.originRecord.OriginRecordRequest; @@ -19,18 +22,32 @@ import com.casic.missiles.model.business.BusinessOriginalRecord; import com.casic.missiles.model.customer.CustomerSampleInfo; import com.casic.missiles.model.system.SystemTemplate; +import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.modular.system.service.IUserService; +import com.casic.missiles.modular.system.service.impl.UserServiceImpl; import com.casic.missiles.service.business.*; import com.casic.missiles.service.customer.CustomerSampleService; +import com.casic.missiles.service.listeners.register.PrintFileRegister; import com.casic.missiles.service.system.ISystemTemplateService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; +import liquibase.pro.packaged.A; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; +import org.springframework.util.ObjectUtils; +import org.springframework.util.StringUtils; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.util.List; +import java.util.Map; +import java.util.stream.Collector; +import java.util.stream.Collectors; + +import static com.casic.missiles.enums.business.FilePrintTypeEnum.ORIGINAL_RECORD; +import static com.casic.missiles.enums.notifyevent.PrintFileDataBeanNameAliasEnum.ORIGINAL_RECORD_BEAN; /** *

@@ -58,11 +75,19 @@ private IBaseExportService iBaseExportService; @Resource private ISystemTemplateService templateService; + @Autowired + private PrintFileRegister printFileRegister; + @Autowired + private AbstractPermissionContext permissionContext; @Override public Page originListPage(Page page, OriginRecordRequest request) throws Exception { // 获取列表 + List userList = permissionContext.getUserService().list(null); + Map userMap = userList.stream().collect( + Collectors.toMap(User::getId, User::getName) + ); Page originalRecordPage = this.baseMapper.originListPage(page, request); if (!CollectionUtils.isEmpty(originalRecordPage.getRecords())) { for (BusinessOriginalRecord record : originalRecordPage.getRecords()) { @@ -70,6 +95,9 @@ if (!StrUtil.isBlankIfStr(record.getSampleId())) { record.setCustomerSampleInfo(customerSampleService.sampleDetail(record.getSampleId())); } + if (!ObjectUtils.isEmpty(record.getVerifierId())) { + record.setVerifierName(userMap.get(record.getVerifierId())); + } } } return originalRecordPage; @@ -101,7 +129,10 @@ businessOriginalRecord.setFileList(originalRecordFileRelationService.getFilesByOriginalRecordId(id)); //查询是否有关联的监测设备 businessOriginalRecord.setEquipmentInfoList(originalRecordEquipmentRelationService.getEquipmentsByOriginalRecordId(id)); - + User user = permissionContext.getUserService().getById(businessOriginalRecord.getVerifierId()); + if (!ObjectUtils.isEmpty(user)) { + businessOriginalRecord.setVerifierName(user.getName()); + } //字典值转换 DictCodeUtils.convertDictCodeToName(businessOriginalRecord); @@ -181,6 +212,41 @@ } } + @Override + public void exportOriginalFile(IdDTO idDTO, HttpServletResponse response) throws Exception { + BusinessOriginalRecord businessOriginalRecord = this.baseMapper.selectById(idDTO.getId()); + if (businessOriginalRecord != null) { + //查询样品详情 + if (businessOriginalRecord.getSampleId() != null) { + businessOriginalRecord.setCustomerSampleInfo(customerSampleService.sampleDetail(businessOriginalRecord.getSampleId())); + } + //查询环境记录单详情 + if (businessOriginalRecord.getEnvironmentId() != null) { + businessOriginalRecord.setBusinessEnvironmentRecord(businessEnvironmentRecordService.environmentDetail(businessOriginalRecord.getEnvironmentId())); + } + //查询委托单详情 + if (businessOriginalRecord.getOrderId() != null) { + businessOriginalRecord.setBusinessOrder(businessOrderService.orderDetail(businessOriginalRecord.getOrderId())); + } + + //查询是否有关联的计量文件 + businessOriginalRecord.setFileList(originalRecordFileRelationService.getFilesByOriginalRecordId(idDTO.getId())); + //查询是否有关联的监测设备 + businessOriginalRecord.setEquipmentInfoList(originalRecordEquipmentRelationService.getEquipmentsByOriginalRecordId(idDTO.getId())); + + //字典值转换 + DictCodeUtils.convertDictCodeToName(businessOriginalRecord); + + //显示模板名称 + if (null != businessOriginalRecord.getTemplateId()) { + SystemTemplate systemTemplate = templateService.getById(businessOriginalRecord.getTemplateId()); + if (systemTemplate != null) { + printFileRegister.registerPrintFile(businessOriginalRecord, ORIGINAL_RECORD, response); + } + } + } + } + private void initBusinessEnvironmentRecord(BusinessOriginalRecord businessOriginalRecord) { Long maxNo = this.baseMapper.selectMaxCode(); String originNo = NumberGeneratorUtil.getContactNo(PrefixCodeEnum.ORIGIN_PREFIX, maxNo); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/SystemTemplateUserRelationServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/SystemTemplateUserRelationServiceImpl.java index 315f0a2..493349b 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/SystemTemplateUserRelationServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/SystemTemplateUserRelationServiceImpl.java @@ -8,7 +8,7 @@ /** *

- * 原始记录/证书报告模板与用户关联表(原始记录/证书报告模板可使用人) 服务实现类 + * /证书报告模板与用户关联表(原始记录/证书报告模板可使用人) 服务实现类 *

* * @author wangpeng diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessCertificateReportService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessCertificateReportService.java index 81cb155..8460e4d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessCertificateReportService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessCertificateReportService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.dto.BaseApprovalSubmitRequest; +import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.business.certificate.CertificateMonitorResponse; import com.casic.missiles.dto.business.certificate.CertificateReportApprovalRequest; @@ -11,8 +12,10 @@ import com.casic.missiles.dto.customer.sample.CustomerSampleIdRequest; import com.casic.missiles.dto.flowable.ApprovalDeleteRequest; import com.casic.missiles.model.business.BusinessCertificateReport; +import org.springframework.web.bind.annotation.RequestBody; import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; import java.util.List; /** @@ -47,5 +50,7 @@ Page certificateMonitorsById(CustomerSampleIdRequest customerSampleIdRequest) throws Exception; + void exportOriginalFile(@RequestBody @Valid IdDTO idDTO, HttpServletResponse response); + Page certificateRecordsById(CustomerSampleIdRequest customerSampleIdRequest) throws Exception; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessOriginalRecordService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessOriginalRecordService.java index cbb6b40..047f931 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessOriginalRecordService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessOriginalRecordService.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.business.originRecord.OriginRecordRequest; import com.casic.missiles.model.business.BusinessOriginalRecord; @@ -11,7 +12,7 @@ /** *

- * 服务类 + * 服务类 *

* * @author wangpeng @@ -21,7 +22,7 @@ Page originListPage(Page page, OriginRecordRequest request) throws Exception; - Page samplesByOderId(Page sampleInfoPage, OriginRecordRequest request) ; + Page samplesByOderId(Page sampleInfoPage, OriginRecordRequest request); BusinessOriginalRecord originalDetail(Long id) throws Exception; @@ -33,5 +34,7 @@ void originExport(OriginRecordRequest request, HttpServletResponse response); + void exportOriginalFile(IdDTO idDTO, HttpServletResponse response) throws Exception; + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java new file mode 100644 index 0000000..63d9aaf --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java @@ -0,0 +1,99 @@ +package com.casic.missiles.service.listeners.register; + +import com.casic.missiles.service.listeners.register.FilePrintRegisterUtils; +import com.casic.missiles.utils.QRCodeUtil; +import com.deepoove.poi.XWPFTemplate; +import com.deepoove.poi.config.Configure; +import com.deepoove.poi.config.ConfigureBuilder; +import com.spire.doc.Document; +import com.spire.doc.FileFormat; +import org.apache.coyote.OutputBuffer; + +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author cz + */ +public class Example { + + private static String localPathUrl = "D:\\casic\\cut\\"; + + /** + * 多个word合并为一个doc样例 + */ + public static void mergeDoc() { + String word1Url = localPathUrl + "211.docx"; +// String word2Url = localPathUrl + "202.docx"; +// //加载文档1 + Document doc1 = new Document(word1Url); +// //调用方法将文档2插入到文档1 +// doc1.insertTextFromFile(word2Url, FileFormat.Docx_2010); +// //保存合并后的文档 +// doc1.saveToFile(word1Url, FileFormat.Docx_2010); + doc1.saveToFile(localPathUrl + "add.docx", FileFormat.Docx); + } + + /** + * 表格合并样例 + */ + public static void tableMerge() { + String localPathUrl = "D:\\casic\\cut\\"; + // 目标文件地址 + String wordOldUrl = localPathUrl + "204.doc"; + Map params = new HashMap<>(); + List> assetList = new ArrayList<>(); + for (int i = 0; i < 8; i++) { + Map assetMap = new HashMap<>(); + assetMap.put("seq", String.valueOf(i / 4)); + assetMap.put("customer", "供方" + String.valueOf(i / 4)); + assetMap.put("customerName", "供方名字" + i); + assetMap.put("model", "型号" + i); + assetMap.put("startDate", "启用时间" + i); + assetMap.put("trainCondition", "维修时间"); + assetMap.put("status", "我醉"); + assetMap.put("evaluate", "我醒"); + assetList.add(assetMap); + } + params.put("train", assetList); + params.put("staffName", "张三"); + params.put("gender", "男"); + params.put("birthday", "2202-10-5"); + params.put("nation", "汉"); + params.put("enlistmentDate", "2196-9-18"); + params.put("partyDate", "2188-9-18"); + params.put("degree", "博士"); + params.put("test", "\uF052"); + params.put("error", "\uF0A3"); +// String newOldUrl = FilePrintRegisterUtils.exportWord(wordOldUrl, localPathUrl, "temp.docx", params, null); +// System.out.println(newOldUrl); + } + + + private static void textBoxTest() throws IOException { + Map map = new HashMap<>(); + ConfigureBuilder builder = Configure.builder(); + XWPFTemplate compile = XWPFTemplate.compile("D:\\casic\\cut\\204.docx", builder.build()); + compile.render(map); + compile.writeToFile("D:\\casic\\cut\\out_test3.docx"); + } + + + /** + * 1、生成二维码图片 + * 2、二维码图片进行图片的合成 + * 3、 + * @param args + * @throws Exception + */ + public static void main(String[] args) throws Exception { + OutputStream output =new FileOutputStream("D:\\casic\\cut\\test.png"); + QRCodeUtil.getQRCode("D:\\casic\\cut\\1航天检定模版v1.xls", output); + } + +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java index 4fb3b33..da44ae2 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java @@ -2,12 +2,15 @@ import cn.hutool.core.lang.Assert; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.util.ListUtils; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.casic.missiles.dto.business.certificate.ElectronicImage; import com.casic.missiles.dto.business.file.FilePrintRegister; -import com.casic.missiles.service.listeners.util.ParseWord07; +import com.casic.missiles.service.listeners.util.ParseWord07; import com.casic.missiles.service.listeners.util.PdfUtils; +import com.casic.missiles.utils.QRCodeUtil; import com.spire.doc.*; import com.spire.doc.documents.*; import com.spire.doc.fields.DocPicture; @@ -45,20 +48,7 @@ */ public static String filePrintGenerate(FilePrintRegister filePrintRegister) throws RuntimeException { //1、按照模板填充数据,并导出word,执行填充行数之后,再进行页数的填充 - String wordOldUrl = exportWord(filePrintRegister.getTemplatePath(), filePrintRegister.getTemDir(), filePrintRegister.getFileName(), filePrintRegister.getParams()); -// Document document = new Document(); -// document.loadFromFile(wordOldUrl); -// document.getPageCount(); - //设置透明属性 1、获取照片 2、签章背景透明设置 3、设置照片路径和照片类型进行图片保存 -// for (ElectronicImage electronicSeal : filePrintRegister.getElectronicImageList()) { -// BufferedImage bi = readImage(electronicSeal.getElectronicSealImageUrl()); -// BufferedImage electronSealImage = convertLayout(bi, electronicSeal.getDiaphaneity()); -// String stampImgUrl = electronicSeal.getElectronicSealImageUrl(); -// String imagePath = stampImgUrl.substring(0, stampImgUrl.length() - 4) + "1.png"; -// String[] imageCutOffContents = stampImgUrl.split("."); -// electronicSeal.setElectronicSealImageUrl(imagePath); -// saveFile(electronSealImage, imageCutOffContents[imageCutOffContents.length - 1], imagePath); -// } +// String wordOldUrl = exportWord(filePrintRegister.getTemplatePath(), filePrintRegister.getTemDir(), filePrintRegister.getFileName(), filePrintRegister.getParams()); // 初始化world,pdf名称参数 String wordNewUrl = filePrintRegister.getTemplatePath(); //默认转为docx,只需要进行docx的替换即可 @@ -71,24 +61,24 @@ .collect( Collectors.groupingBy(ElectronicImage::getKeyWord) ); - //3、根据关键字进行添加签章和签字 - for (Map.Entry> entry : sameKeyWordSealMaps.entrySet()) { - List electronicSeals = entry.getValue(); - addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSeals); - } - //获取没有关键字的图片,即绝对路径的图片 - List absolutePathImageList = filePrintRegister.getElectronicImageList().stream() - .filter(electronicImage -> StringUtils.isEmpty(electronicImage.getKeyWord())) - .collect(Collectors.toList()); - //根据设置的绝对路径进行图片的填充 - for (ElectronicImage absolutePathImage : absolutePathImageList) { - addAbsolutePathStamp(wordOldUrl, wordNewUrl, absolutePathImage); - } - //由于合成word总页数存在不准确,先转换为pdf进行获取合成证书总页数, 处理齐缝章 +// //3、根据关键字进行添加签章和签字 +// for (Map.Entry> entry : sameKeyWordSealMaps.entrySet()) { +// List electronicSeals = entry.getValue(); +// addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSeals); +// } +//// //获取没有关键字的图片,即绝对路径的图片 +// List absolutePathImageList = filePrintRegister.getElectronicImageList().stream() +// .filter(electronicImage -> StringUtils.isEmpty(electronicImage.getKeyWord())) +// .collect(Collectors.toList()); +// //根据设置的绝对路径进行图片的填充 +// for (ElectronicImage absolutePathImage : absolutePathImageList) { +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, absolutePathImage); +// } +// 由于合成word总页数存在不准确,先转换为pdf进行获取合成证书总页数, 处理齐缝章 } // 4、将新word转化为pdf文件 - wordToPdf(wordNewUrl, pdfNewUrl); - return pdfNewUrl; +// wordToPdf(wordNewUrl, pdfNewUrl); + return filePrintRegister.getTemplatePath(); } @@ -163,7 +153,7 @@ * @param pdfNewUrl 存储新PDF文件路径 */ public static void wordToPdf(String wordNewUrl, String pdfNewUrl) { - PdfUtils.doc2pdf(wordNewUrl,pdfNewUrl); + PdfUtils.doc2pdf(wordNewUrl, pdfNewUrl); //// 将新Word文档转换为PDF文件 // Document document = new Document(); // document.loadFromFile(wordNewUrl); @@ -442,62 +432,27 @@ public static void main(String[] args) throws RuntimeException { - String pathUrl = "D:\\casic"; - String localPathUrl = "D:\\casic\\"; - // 目标文件地址 - String wordOldUrl = pathUrl + "\\工作记录单.docx"; - // 添加电子印章后文件存放地址 - String wordNewUrl = localPathUrl + "\\tem1.docx"; - Map params = new HashMap<>(); - List> assetList = new ArrayList<>(); - for (int i = 0; i < 3; i++) { - Map assetMap = new HashMap<>(); - assetMap.put("assetName", "我不是设备名称"); - assetMap.put("model", "我不是型号"); - assetMap.put("assetNo", "我是设备编号"); - assetList.add(assetMap); - } - params.put("assetList", assetList); - params.put("logNo", "本编号"); - params.put("laboratoryName", "此去半生"); - params.put("executiveAddress", "猜猜我在哪里"); - exportWord(wordOldUrl, localPathUrl, "temp.docx", params); + } -// //WORD转PDF存放位置 -// String pdfNewUrl = localPathUrl + "\\tem.pdf"; -// //电子印章图片地址 -// String stampNameImgUr = localPathUrl + "\\name1_1678844060471.png"; -// //电子签名图片地址 -// String stampSealImgUrl = localPathUrl + "\\ceshi.jpg"; -// // word文档内容关键字 -// FilePrintRegisterUtils addStampUtils = new FilePrintRegisterUtils(); -// List electronicSealList = new ArrayList(11); -// ElectronicImage electronicImage = defaultElectronicSignName("批准人"); -// electronicImage.setElectronicSealImageUrl(stampNameImgUr); -// electronicSealList.add(electronicImage); -// addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); -// //加载文档 -// Document document = new Document(); -// document.loadFromFile(wordOldUrl); -// //获取段落总数 -// int count = document.getPageCount(); -// System.out.println(count); -// String[] imageCutOffContents = stampSealImgUrl.split("\\."); -// CropPicture cropPicture = CropPicture.builder() -// .targetImgUrl(stampSealImgUrl) -// .cutCols(count) -// .cutRows(1) -// .subfileUrl(imageCutOffContents[imageCutOffContents.length - 2]) -// .subfileType("." + imageCutOffContents[imageCutOffContents.length - 1]) -// .build(); -// try { -// ImageTool.crosswiseCutting(cropPicture); -// } catch (IOException ex) { -// -// } -//// 将新word转化为pdf文件 -//// addStampUtils.wordToPdf(wordNewUrl, pdfNewUrl); + public static void QRCodeExcel() throws Exception { +// String path = "D:\\casic\\cut\\"; +// String fileName = path + "1航天检定模版v1.xls"; +// List list = ListUtils.newArrayList(); +// ImageDemoData imageDemoData = new ImageDemoData(); +// list.add(imageDemoData); +// // 创建字节数组输出流 +// ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); +// // 调用 QrCodeUtil.generate() 生成二维码,并将结果写入输出流 +// QRCodeUtil.getQRCode("helloworld", outputStream); +// // 从输出流中获取生成的二维码图像数据 +// byte[] qrCodeData = outputStream.toByteArray(); +// imageDemoData.setByteArray(qrCodeData); +// imageDemoData.setShortDesc("helloworld"); +// // 关闭输出流 +// outputStream.close(); +// // 写入数据 +// EasyExcel.write(fileName, ImageDemoData.class).sheet().doWrite(list); } protected static ElectronicImage defaultElectronicSignSeal(String keyWord, float horizontal) { diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java index 9037b0c..aeaa778 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java @@ -18,6 +18,7 @@ import org.springframework.stereotype.Component; import org.springframework.web.multipart.MultipartFile; +import javax.servlet.http.HttpServletResponse; import java.io.*; import java.util.List; import java.util.Objects; @@ -28,7 +29,7 @@ */ @Component @Slf4j -public class PrintFileRegister { +public class PrintFileRegister extends PrintFileSupport { @Autowired private MinioClient minioClient; @@ -40,6 +41,16 @@ private String localFileDir; /** + * 新增,增加文件流回传下载 + * @param printFileRegister + * @param prefixType + * @return + */ + public String registerPrintFile(Object printFileRegister, String prefixType) { + return this.registerPrintFile(printFileRegister, prefixType, null); + } + + /** * 打印文件注册到服务器上有以下几个步骤 * 1、根据打印证书的类型,获取自定义的注册打印文件对象 * 2、进行远程文件的下载工作,支持文件的读写权限操作 @@ -48,7 +59,7 @@ * 5、递归删除因为打印产生的文件信息 * 6、返还打印产生的证书文件 */ - public String registerPrintFile(Object printFileRegister, String prefixType) { + public String registerPrintFile(Object printFileRegister, String prefixType, HttpServletResponse response) { String tempLocalFileDir = localFileDir; Assert.isFalse(Objects.isNull(printFileRegister), () -> { throw new RuntimeException("the certificateReport is null,please check your params..."); @@ -72,13 +83,17 @@ //合并注册 String certificatePdfUrl = FilePrintRegisterUtils.filePrintGenerate(metaData); //上传到服务器 - String certificatePdfName=uploadCertificate(certificatePdfUrl); +// String certificatePdfName = uploadCertificate(certificatePdfUrl); + //如果文件路径不为空,回传文件流 + if(StringUtils.isNotEmpty(certificatePdfUrl)){ + createResponseFileInput(certificatePdfUrl,response); + } //删除无效的文件 File invalidFile = new File(tempLocalFileDir); log.debug("invalid print file start delete, the file directory is {}", tempLocalFileDir); //删除运行空间下的文件 deleteFile(invalidFile); - return certificatePdfName; + return certificatePdfUrl; } throw new RuntimeException("the bean mapped to this certificate type is empty..."); } @@ -87,98 +102,12 @@ * 创建文件目录,为mini下载文件准备目录 */ private void getLocalFileDir(String tempLocalFileDir) { - File file = new File(tempLocalFileDir); //以. + File file = new File(tempLocalFileDir); //以 if (file.exists()) { deleteFile(file); } boolean dr = file.mkdirs(); //创建目录 } - /** - * 从mini文件服务器下载文件,获取文件的读写权限,用户证书报告的生成 - */ - private void downTemplateFile(String fileName, String tempLocalFileDir) { - InputStream in = null; - ByteArrayOutputStream out = null; - try { - in = minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(fileName).build()); - out = new ByteArrayOutputStream(); - IOUtils.copy(in, out); - //封装返回值 - byte[] bytes = out.toByteArray(); - FilePrintRegisterUtils.byteToFile(bytes, tempLocalFileDir, fileName); - } catch (Exception e) { - e.printStackTrace(); - } finally { - try { - if (in != null) { - try { - in.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - if (out != null) { - out.close(); - } - } catch (IOException e) { - e.printStackTrace(); - } - } - } - /** - * 通过生成的证书报告,将证书报告上传到远程mini的文件服务器 - */ - public String uploadCertificate(String certificatePrintUrl) { - //上传证书 - File file = new File(certificatePrintUrl); - //获取file对象的文件输入流 - FileInputStream input = null; - List nameList = null; - try { - input = new FileInputStream(file); - MultipartFile multipartFile = new MockMultipartFile("file", file.getName(), MediaType.MULTIPART_FORM_DATA_VALUE, IOUtils.toByteArray(input)); - MultipartFile[] multipartFiles = new MultipartFile[1]; - multipartFiles[0] = multipartFile; - nameList = minioUtil.upload(multipartFiles); - } catch (IOException ie) { - log.error("Description Failed to upload the certificate to the server,the failed reason is {}...", ie); - } finally { - if (input != null) { - try { - input.close(); - } catch (IOException e) { - log.error("the upload Certificate input stream release is anomaly"); - } - } - return nameList.get(0); - } - } - - /** - * 对打印报告产生的空间进行清除,还原空间 - */ - private void deleteFile(File invalidFile) { - //返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。 - File[] files = invalidFile.listFiles(); - if (files != null) {//如果包含文件进行删除操作 - for (int i = 0; i < files.length; i++) { - if (files[i].isFile()) { - //删除子文件 - files[i].delete(); - } else if (files[i].isDirectory()) { - //通过递归的方法找到子目录的文件 - deleteFile(files[i]); - } - } - } - if (invalidFile.list().length == 0) { - log.debug("invalid print file has already delete success!"); - } - //删除子目录 - if (invalidFile != null && invalidFile.isDirectory()) { - invalidFile.delete(); - } - } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileSupport.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileSupport.java new file mode 100644 index 0000000..2aee62e --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileSupport.java @@ -0,0 +1,220 @@ +package com.casic.missiles.service.listeners.register; + +import com.casic.missiles.utils.MinioUtil; +import io.minio.GetObjectArgs; +import io.minio.MinioClient; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.MediaType; +import org.springframework.mock.web.MockMultipartFile; +import org.springframework.stereotype.Component; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletResponse; +import java.io.*; +import java.net.URLEncoder; +import java.nio.file.Files; +import java.nio.file.StandardCopyOption; +import java.util.List; + +@Component +@Slf4j +public class PrintFileSupport { + + @Autowired + private MinioClient minioClient; + @Autowired + private MinioUtil minioUtil; + @Value("${minio.bucketName}") + private String bucketName; + + /** + * 返回文件流 + * + * @param printDocUrl 文件流路径,pdf,word + * @param response + */ + protected String createResponseFileInput(String printDocUrl, HttpServletResponse response) { + if (response == null) { +// return null; + return uploadCertificate(printDocUrl); + } + File file = new File(printDocUrl); + InputStream in = null; + ByteArrayOutputStream out = null; + try { + FileInputStream fis = new FileInputStream(file); + out = new ByteArrayOutputStream(); + IOUtils.copy(fis, out); + //封装返回值 + byte[] data = out.toByteArray(); + response.reset(); + response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(file.getName(), "UTF-8")); + response.addHeader("Content-Length", "" + data.length); + response.setHeader("Access-Control-Allow-Origin", "*"); + response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE"); + response.setHeader("Access-Control-Max-Age", "3600"); + response.setHeader("Access-Control-Allow-Credentials", "true"); + response.setHeader("Access-Control-Allow-Headers", "*"); + response.setContentType("application/octet-stream;charset=UTF-8"); + IOUtils.copy(fis, response.getOutputStream()); + OutputStream outputStream = new BufferedOutputStream(response.getOutputStream()); + outputStream.write(data); + outputStream.flush(); + outputStream.close(); + response.flushBuffer(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + if (in != null) { + try { + in.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + if (out != null) { + out.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + return ""; + } + + + /** + * 从mini文件服务器下载文件,获取文件的读写权限,用户证书报告的生成 + */ + protected void downTemplateFile(String fileNames, String tempLocalFileDir) { + if (StringUtils.isEmpty(fileNames)) { + return; + } + + InputStream in = null; + ByteArrayOutputStream out = null; + try { + String[] fileNameList = fileNames.split(","); + for (String fileName : fileNameList) { + in = minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(fileName).build()); + out = new ByteArrayOutputStream(); + IOUtils.copy(in, out); + //封装返回值 + byte[] bytes = out.toByteArray(); + FilePrintRegisterUtils.byteToFile(bytes, tempLocalFileDir, fileName); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + if (in != null) { + try { + in.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + if (out != null) { + out.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + /** + * 通过生成的证书报告,将证书报告上传到远程mini的文件服务器 + */ + protected String uploadCertificate(String certificatePrintUrl) { + //上传证书 + File file = new File(certificatePrintUrl); + //获取file对象的文件输入流 + FileInputStream input = null; + List nameList = null; + try { + input = new FileInputStream(file); + MultipartFile multipartFile = new MockMultipartFile("file", file.getName(), MediaType.MULTIPART_FORM_DATA_VALUE, IOUtils.toByteArray(input)); + MultipartFile[] multipartFiles = new MultipartFile[1]; + multipartFiles[0] = multipartFile; + nameList = minioUtil.upload(multipartFiles); + } catch (IOException ie) { + log.error("Description Failed to upload the certificate to the server,the failed reason is {}...", ie); + } finally { + if (input != null) { + try { + input.close(); + } catch (IOException e) { + log.error("the upload Certificate input stream release is anomaly"); + } + } + return nameList.get(0); + } + } + + /** + * 创建文件目录,为mini下载文件准备临时工作空间 + */ + protected void createLocalFileDir(String tempLocalFileDir) { + File file = new File(tempLocalFileDir); //以. + if (file.exists()) { + deleteFile(file); + } + file.mkdirs(); //创建目录 + } + + /** + * 对打印报告产生的工作空间进行删除,归还内存 + */ + protected void deleteFile(File invalidFile) { + //返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。 + File[] files = invalidFile.listFiles(); + int length=files.length; + if (files != null) {//如果包含文件进行删除操作 + for (int i = 0; i < length; i++) { + if (files[i].isFile()) { + //删除子文件 + files[i].delete(); + } else if (files[i].isDirectory()) { + //通过递归的方法找到子目录的文件 + deleteFile(files[i]); + } + } + } + if (invalidFile.list().length == 0) { + log.debug("invalid print file has already delete success!"); + } + //删除子目录 + if (invalidFile != null && invalidFile.isDirectory()) { + invalidFile.delete(); + } + } + + /** + * 文件转移,将源文件转移到指定的目录下面 + * + * @param sourceFileUrl 源文件路径 + * @param targetDir 转移目录 + */ + protected void fileMove(String targetDir, String sourceFileUrl) { + // 创建源文件和目标文件对象 + File destinationFolder = new File(targetDir); + //如果不存在则进行创建 + if (!destinationFolder.exists()) { + destinationFolder.mkdirs(); //创建目录 + } + File sourceFile = new File(sourceFileUrl); + try { + // 使用Java 7的Files类将文件移动到目标文件夹中 + Files.move(sourceFile.toPath(), destinationFolder.toPath().resolve(sourceFile.getName()), StandardCopyOption.REPLACE_EXISTING); + } catch (IOException e) { + e.printStackTrace(); + } + } + +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/original/OriginalRecord.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/original/OriginalRecord.java new file mode 100644 index 0000000..e140056 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/original/OriginalRecord.java @@ -0,0 +1,44 @@ +package com.casic.missiles.service.listeners.register.data.original; + +import com.casic.missiles.dto.business.certificate.ElectronicImage; +import com.casic.missiles.dto.business.file.FilePrintRegister; +import com.casic.missiles.dto.flowable.ApprovalLogResponse; +import com.casic.missiles.enums.notifyevent.PrintFileDataBeanNameAliasEnum; +import com.casic.missiles.model.business.BusinessCertificateReport; +import com.casic.missiles.model.business.BusinessOriginalRecord; +import com.casic.missiles.model.business.BusinessSiteExecutiveInfo; +import com.casic.missiles.service.listeners.register.data.PrintFileDataGeneric; +import com.casic.missiles.service.listeners.register.data.PrintFileDataSupport; +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 原始记录生成 + * 校准证书参数生成 + */ +@Component(PrintFileDataBeanNameAliasEnum.ORIGINAL_RECORD_BEAN) +public class OriginalRecord extends PrintFileDataSupport implements PrintFileDataGeneric { + + @Override + public FilePrintRegister CustomizedPrintFileRegister(Object object, String templateFileDir) { + BusinessOriginalRecord metaData = (BusinessOriginalRecord) object; + //初始化,生成模板文件 + FilePrintRegister filePrintRegister = initialization(templateFileDir, metaData.getId(), getTemplateName(metaData.getTemplateId())); + //定制化签名开发预处理,定制化参数 + customizedSignNamesParamCreator(); + //填充定制化的参数 + filePrintRegister.setParams(certificateFileParamCreator(metaData.getOrderId(), metaData.getSampleId())); + return filePrintRegister; + } + + + @Override + protected void customizedSignNamesParamCreator() { + keyParamList = Arrays.asList("发起人", "核验人", "审核人" ); + customizedSignNames = Arrays.asList("校准人", "核验人", "批准人" ); + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/site/EnvironmentalRecordData.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/site/EnvironmentalRecordData.java index f144866..134190c 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/site/EnvironmentalRecordData.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/site/EnvironmentalRecordData.java @@ -169,5 +169,4 @@ filePrintRegister.getParams().put("assetList", assetList); return this; } - } diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java index 114283e..d9b2bab 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessCertificateReportController.java @@ -171,4 +171,12 @@ return ReturnUtil.success(super.packForBT(certificateReportService.certificateMonitorsById(customerSampleIdRequest))); } + + @ApiOperation("导出word打印") + @PostMapping("/exportFile") + public void exportOriginalFile(@RequestBody @Valid IdDTO idDTO, HttpServletResponse response) throws Exception { + certificateReportService.exportOriginalFile(idDTO, response); + } + + } diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java index cf47c98..9e7b379 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessLabExecutiveInfoController.java @@ -177,7 +177,7 @@ return labExecutiveInfoService.sampleReceive(requestList); } - @ApiOperation("实验室检测-扫描增加任务到检测中(任务分发管理中待分发->检测中 / 实验室任务待检测->检测中)") + @ApiOperation("我的检测-扫描增加任务到检测中(任务分发管理中待分发->检测中 / 实验室任务待检测->检测中)") @PostMapping("/myExecutive/add") public ReturnDTO sampleAdd(@RequestBody @Valid List requestList) { return labExecutiveInfoService.sampleAdd(requestList); diff --git a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java index db996fc..ad1431a 100644 --- a/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java +++ b/casic-metering-api/src/main/java/com/casic/missiles/controller/business/BusinessOriginalRecordController.java @@ -56,7 +56,7 @@ @ApiOperation("原始记录详情") @PostMapping("/detail") - public ReturnDTO originalDetail(@RequestBody @Valid IdDTO idDTO) throws Exception{ + public ReturnDTO originalDetail(@RequestBody @Valid IdDTO idDTO) throws Exception { Assert.isFalse(Objects.isNull(idDTO.getId()), () -> { throw new BusinessException(BusinessExceptionEnum.ID_NULL); }); @@ -99,10 +99,16 @@ businessOriginalRecordService.originExport(request, response); } + @ApiOperation("导出word打印") + @PostMapping("/exportFile") + public void exportOriginalFile(@RequestBody @Valid IdDTO idDTO, HttpServletResponse response) throws Exception { + businessOriginalRecordService.exportOriginalFile(idDTO, response); + } + @ApiOperation("根据委托单id查询关联样品信息(分页)") @PostMapping("/samplesByOderId") - public ReturnDTO> samplesByOderId(@RequestBody @Valid OriginRecordRequest request) { + public ReturnDTO> samplesByOderId(@RequestBody @Valid OriginRecordRequest request) { Page page = PageFactory.defaultPage(); return ReturnUtil.success(super.packForBT(businessOriginalRecordService.samplesByOderId(page, request))); } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java index 72500d6..81def5d 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/business/FilePrintTypeEnum.java @@ -5,4 +5,5 @@ String CALIBRATION_CERTIFICATE = "自有设备内部检校证书"; String TEST_ORDER = "检测委托单"; String CALIBRATION_ORDER = "检定或校准委托单"; + String ORIGINAL_RECORD = "原始记录"; } diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java index f42477a..3f1a3b2 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/AwareFilePrintTypeEnum.java @@ -12,6 +12,7 @@ put(TEST_REPORT, TEST_REPORT_BEAN); //测试报告 put(TEST_ORDER, TEST_ORDER_BEAN); //检测委托单 put(CALIBRATION_ORDER, CALIBRATION_ORDER_BEAN); //检定或校准委托单 + put(ORIGINAL_RECORD, ORIGINAL_RECORD_BEAN); //检定或校准委托单 } }); diff --git a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java index bf23ba3..3f0b946 100644 --- a/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java +++ b/casic-metering-common/src/main/java/com/casic/missiles/enums/notifyevent/PrintFileDataBeanNameAliasEnum.java @@ -15,4 +15,6 @@ //检定或校准委托单 String CALIBRATION_ORDER_BEAN = "calibrationOrderBean"; + //校准证书 + String ORIGINAL_RECORD_BEAN = "originalRecord"; } diff --git a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml index 56b4ae5..79db2e5 100644 --- a/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml +++ b/casic-metering-dao/src/main/resources/mapper/customer/CustomerSampleMapper.xml @@ -43,9 +43,9 @@ - SELECT - orderId,id,sampleName,sampleModel,manufacturingNo,appendixDescn,measureContent,remark,sampleStatus,customerName,measurePeriod, + SELECT orderId,id,sampleName,sampleModel,manufacturingNo,appendixDescn,measureContent,remark,sampleStatus,customerName,measurePeriod, validDeadline,measureLastTime,sampleNo,orderCode,customerNo FROM ( SELECT sample_name AS "sampleName",sample_no AS "sampleNo",sample_model AS "sampleModel",manufacturing_no AS @@ -126,14 +125,14 @@ )csi JOIN ( - SELECT sample_status AS "sampleStatus",sample_id as "sampleId",order_id AS "orderId",order_code AS "orderCode" - FROM business_order_sample_relation bosr - JOIN ( - SELECT id,order_code - FROM business_order - WHERE customer_id=#{request.customerId} - )bo ON bo.id=bosr.order_id - WHERE interchange_id is null + SELECT sample_status AS "sampleStatus",sample_id as "sampleId",order_id AS "orderId",order_code AS "orderCode" + FROM business_order_sample_relation bosr + JOIN ( + SELECT id,order_code + FROM business_order + WHERE customer_id=#{request.customerId} + )bo ON bo.id=bosr.order_id + WHERE interchange_id is null )bor ON bor.sampleId=csi.id ORDER BY create_time DESC diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java index 58ca71e..2306f21 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessCertificateReport.java @@ -228,4 +228,32 @@ @ApiModelProperty(value = "证书类型名称", dataType = "String") private String certificateReportTypeName; + @TableField("deliver_time") + @ApiModelProperty(value = "接收日期", dataType = "String") + private String deliverTime; + + @TableField("appearance_status") + @ApiModelProperty(value = "外观状态", dataType = "String") + private String appearanceStatus; + + @TableField("certificate_require") + @ApiModelProperty(value = "证书要求", dataType = "String") + private String certificateRequire; + + @TableField("sample_remark") + @ApiModelProperty(value = "样品备注", dataType = "String") + private String sampleRemark; + + @TableField("calibration_time") + @ApiModelProperty(value = "校验日期", dataType = "String") + private String calibrationTime; + + @TableField("verifier_id") + @ApiModelProperty(value = "联系人Id", dataType = "Long") + private Long verifierId; + + @TableField("verifier") + @ApiModelProperty(value = "联系人", dataType = "String") + private String verifier; + } diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java index d2647ac..e2e8349 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/business/BusinessOriginalRecord.java @@ -137,6 +137,31 @@ @TableField("update_time") private String updateTime; + + + @TableField("deliver_time") + @ApiModelProperty(value = "接收时间", dataType = "String") + private String deliverTime; + + @TableField("appearance_status") + @ApiModelProperty(value = "外观状态", dataType = "String") + private String appearanceStatus; + + @TableField("certificate_require") + @ApiModelProperty(value = "证书要求", dataType = "String") + private String certificateRequire; + + @TableField("sample_remark") + @ApiModelProperty(value = "样品状态", dataType = "String") + private String sampleRemark; + + @TableField("verifier_id") + @ApiModelProperty(value = "校验人员ID", dataType = "Long") + private Long verifierId; + + @TableField(exist = false) + @ApiModelProperty(value = "校验人员", dataType = "String") + private String verifierName; /** * 委托单信息 */ diff --git a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java index a558165..c7ae4d4 100644 --- a/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java +++ b/casic-metering-model/src/main/java/com/casic/missiles/model/customer/CustomerSampleInfo.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableName; import com.casic.missiles.annotation.DictCodeField; import com.casic.missiles.constants.MeterDictCode; +import io.swagger.annotations.Api; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.NoArgsConstructor; @@ -76,6 +77,10 @@ @ApiModelProperty(value = " 客户特殊要求", dataType = "String") private String specialRequire; + @TableField(exist = false) + @ApiModelProperty(value = "接收时间", dataType = "String") + private String deliverTime; + @ApiModelProperty(value = " 检定方式", dataType = "String") @DictCodeField(message = "检定方式不合法", cacheName = MeterDictCode.MEASURE_TYPE) diff --git a/casic-metering-service/pom.xml b/casic-metering-service/pom.xml index 6aede7a..aa8aa4d 100644 --- a/casic-metering-service/pom.xml +++ b/casic-metering-service/pom.xml @@ -23,12 +23,24 @@ com.casic casic-metering-model 2.0.0 + + + org.apache.poi + poi-ooxml + +
com.casic casic-metering-common 2.0.0 + + + org.apache.poi + poi-ooxml + + org.springframework.boot @@ -48,13 +60,22 @@ com.new.reader reader-api - com.deepoove poi-tl 1.10.0 + + + org.apache.logging.log4j + log4j-api + + - + + org.apache.poi + poi + 4.1.2 + com.aspose aspose-words diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java index 020624d..b9509c2 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessCertificateReportServiceImpl.java @@ -1,16 +1,19 @@ package com.casic.missiles.service.Impl.business; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.date.DateUtil; import cn.hutool.core.lang.Assert; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.application.service.AbstractDictService; import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.page.PageFactory; import com.casic.missiles.core.shiro.ShiroKit; import com.casic.missiles.dto.BaseApprovalSubmitRequest; +import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.business.certificate.CertificateMonitorResponse; @@ -41,6 +44,7 @@ import com.casic.missiles.service.business.IBusinessCertificateReportService; import com.casic.missiles.service.business.IBusinessOriginalRecordService; import com.casic.missiles.service.flowable.ApprovalOperateService; +import com.casic.missiles.service.listeners.register.PrintFileRegister; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; import com.casic.missiles.utils.PageUtil; @@ -55,9 +59,14 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; import java.util.*; import java.util.stream.Collectors; +import static com.casic.missiles.enums.business.FilePrintTypeEnum.CALIBRATION_CERTIFICATE; +import static com.casic.missiles.enums.notifyevent.PrintFileDataBeanNameAliasEnum.CALIBRATION_CERTIFICATE_BEAN; +import static com.casic.missiles.enums.notifyevent.PrintFileDataBeanNameAliasEnum.ORIGINAL_RECORD_BEAN; + /** *

* 业务管理-证书报告 服务实现类 @@ -88,6 +97,10 @@ private CustomerSampleServiceImpl sampleService; @Autowired private MeterStaffMapper staffMapper; + @Autowired + private PrintFileRegister printFileRegister; + @Autowired + private AbstractPermissionContext permissionContext; /** * 保存证书报告信息 @@ -326,6 +339,24 @@ return certificateMonitorResponsePage; } + @Override + public void exportOriginalFile(@Valid IdDTO idDTO, HttpServletResponse response) { + BusinessCertificateReport certificateReport = this.baseMapper.detailById(idDTO.getId()); + getApprovalSignName(certificateReport); + if (certificateReport.getOriginalRecordId() != null) { + try { + certificateReport.setBusinessOriginalRecord(originalRecordService.originalDetail(certificateReport.getOriginalRecordId())); + if (Objects.isNull(certificateReport.getBusinessOriginalRecord())) { + certificateReport.setBusinessOriginalRecord(new BusinessOriginalRecord()); + } + certificateReport.setCertificateReportTypeName(dictService.getDictNameByCode(MeterDictEnum.CERTIFICATION_CLASS, certificateReport.getCertificateReportType())); + printFileRegister.registerPrintFile(certificateReport,CALIBRATION_CERTIFICATE,response); + } catch (Exception e) { + e.printStackTrace(); + } + } + } + private List handleApprovalStatus(Page page, CertificateReportApprovalRequest request) { List approvalList = new ArrayList<>(); List businessKeys = new ArrayList<>(); @@ -382,7 +413,7 @@ //合并未通过-拒绝和未通过-驳回 approvalList.addAll(rejectApprovalList); //分页处理 - if(!CollectionUtils.isEmpty(approvalList)) { + if (!CollectionUtils.isEmpty(approvalList)) { Page pages = PageUtil.getPages((int) page.getCurrent(), (int) page.getSize(), approvalList); page.setTotal(approvalList.size()); approvalList = pages.getRecords(); @@ -439,7 +470,7 @@ String approvalSignNames = ""; String[] approvalSignIds = certificateReport.getApprovalSignIds().split(","); for (String approvalSignId : approvalSignIds) { - approvalSignNames += approvalSignNameMap.get(Long.valueOf(approvalSignId))+ ","; + approvalSignNames += approvalSignNameMap.get(Long.valueOf(approvalSignId)) + ","; } approvalSignNames = approvalSignNames.substring(0, approvalSignNames.length() - 1); certificateReport.setApprovalSignName(approvalSignNames); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOriginalRecordServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOriginalRecordServiceImpl.java index 1c602b8..84d5f00 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOriginalRecordServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/business/BusinessOriginalRecordServiceImpl.java @@ -1,12 +1,15 @@ package com.casic.missiles.service.Impl.business; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.casic.missiles.core.application.context.AbstractPermissionContext; import com.casic.missiles.core.base.service.IBaseExportService; import com.casic.missiles.core.model.auth.AuthUser; import com.casic.missiles.core.shiro.ShiroKit; +import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.ReturnUtil; import com.casic.missiles.dto.business.originRecord.OriginRecordRequest; @@ -19,18 +22,32 @@ import com.casic.missiles.model.business.BusinessOriginalRecord; import com.casic.missiles.model.customer.CustomerSampleInfo; import com.casic.missiles.model.system.SystemTemplate; +import com.casic.missiles.modular.system.model.User; +import com.casic.missiles.modular.system.service.IUserService; +import com.casic.missiles.modular.system.service.impl.UserServiceImpl; import com.casic.missiles.service.business.*; import com.casic.missiles.service.customer.CustomerSampleService; +import com.casic.missiles.service.listeners.register.PrintFileRegister; import com.casic.missiles.service.system.ISystemTemplateService; import com.casic.missiles.utils.DictCodeUtils; import com.casic.missiles.utils.NumberGeneratorUtil; +import liquibase.pro.packaged.A; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; +import org.springframework.util.ObjectUtils; +import org.springframework.util.StringUtils; import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.util.List; +import java.util.Map; +import java.util.stream.Collector; +import java.util.stream.Collectors; + +import static com.casic.missiles.enums.business.FilePrintTypeEnum.ORIGINAL_RECORD; +import static com.casic.missiles.enums.notifyevent.PrintFileDataBeanNameAliasEnum.ORIGINAL_RECORD_BEAN; /** *

@@ -58,11 +75,19 @@ private IBaseExportService iBaseExportService; @Resource private ISystemTemplateService templateService; + @Autowired + private PrintFileRegister printFileRegister; + @Autowired + private AbstractPermissionContext permissionContext; @Override public Page originListPage(Page page, OriginRecordRequest request) throws Exception { // 获取列表 + List userList = permissionContext.getUserService().list(null); + Map userMap = userList.stream().collect( + Collectors.toMap(User::getId, User::getName) + ); Page originalRecordPage = this.baseMapper.originListPage(page, request); if (!CollectionUtils.isEmpty(originalRecordPage.getRecords())) { for (BusinessOriginalRecord record : originalRecordPage.getRecords()) { @@ -70,6 +95,9 @@ if (!StrUtil.isBlankIfStr(record.getSampleId())) { record.setCustomerSampleInfo(customerSampleService.sampleDetail(record.getSampleId())); } + if (!ObjectUtils.isEmpty(record.getVerifierId())) { + record.setVerifierName(userMap.get(record.getVerifierId())); + } } } return originalRecordPage; @@ -101,7 +129,10 @@ businessOriginalRecord.setFileList(originalRecordFileRelationService.getFilesByOriginalRecordId(id)); //查询是否有关联的监测设备 businessOriginalRecord.setEquipmentInfoList(originalRecordEquipmentRelationService.getEquipmentsByOriginalRecordId(id)); - + User user = permissionContext.getUserService().getById(businessOriginalRecord.getVerifierId()); + if (!ObjectUtils.isEmpty(user)) { + businessOriginalRecord.setVerifierName(user.getName()); + } //字典值转换 DictCodeUtils.convertDictCodeToName(businessOriginalRecord); @@ -181,6 +212,41 @@ } } + @Override + public void exportOriginalFile(IdDTO idDTO, HttpServletResponse response) throws Exception { + BusinessOriginalRecord businessOriginalRecord = this.baseMapper.selectById(idDTO.getId()); + if (businessOriginalRecord != null) { + //查询样品详情 + if (businessOriginalRecord.getSampleId() != null) { + businessOriginalRecord.setCustomerSampleInfo(customerSampleService.sampleDetail(businessOriginalRecord.getSampleId())); + } + //查询环境记录单详情 + if (businessOriginalRecord.getEnvironmentId() != null) { + businessOriginalRecord.setBusinessEnvironmentRecord(businessEnvironmentRecordService.environmentDetail(businessOriginalRecord.getEnvironmentId())); + } + //查询委托单详情 + if (businessOriginalRecord.getOrderId() != null) { + businessOriginalRecord.setBusinessOrder(businessOrderService.orderDetail(businessOriginalRecord.getOrderId())); + } + + //查询是否有关联的计量文件 + businessOriginalRecord.setFileList(originalRecordFileRelationService.getFilesByOriginalRecordId(idDTO.getId())); + //查询是否有关联的监测设备 + businessOriginalRecord.setEquipmentInfoList(originalRecordEquipmentRelationService.getEquipmentsByOriginalRecordId(idDTO.getId())); + + //字典值转换 + DictCodeUtils.convertDictCodeToName(businessOriginalRecord); + + //显示模板名称 + if (null != businessOriginalRecord.getTemplateId()) { + SystemTemplate systemTemplate = templateService.getById(businessOriginalRecord.getTemplateId()); + if (systemTemplate != null) { + printFileRegister.registerPrintFile(businessOriginalRecord, ORIGINAL_RECORD, response); + } + } + } + } + private void initBusinessEnvironmentRecord(BusinessOriginalRecord businessOriginalRecord) { Long maxNo = this.baseMapper.selectMaxCode(); String originNo = NumberGeneratorUtil.getContactNo(PrefixCodeEnum.ORIGIN_PREFIX, maxNo); diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/SystemTemplateUserRelationServiceImpl.java b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/SystemTemplateUserRelationServiceImpl.java index 315f0a2..493349b 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/SystemTemplateUserRelationServiceImpl.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/Impl/system/SystemTemplateUserRelationServiceImpl.java @@ -8,7 +8,7 @@ /** *

- * 原始记录/证书报告模板与用户关联表(原始记录/证书报告模板可使用人) 服务实现类 + * /证书报告模板与用户关联表(原始记录/证书报告模板可使用人) 服务实现类 *

* * @author wangpeng diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessCertificateReportService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessCertificateReportService.java index 81cb155..8460e4d 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessCertificateReportService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessCertificateReportService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.casic.missiles.dto.BaseApprovalSubmitRequest; +import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.business.certificate.CertificateMonitorResponse; import com.casic.missiles.dto.business.certificate.CertificateReportApprovalRequest; @@ -11,8 +12,10 @@ import com.casic.missiles.dto.customer.sample.CustomerSampleIdRequest; import com.casic.missiles.dto.flowable.ApprovalDeleteRequest; import com.casic.missiles.model.business.BusinessCertificateReport; +import org.springframework.web.bind.annotation.RequestBody; import javax.servlet.http.HttpServletResponse; +import javax.validation.Valid; import java.util.List; /** @@ -47,5 +50,7 @@ Page certificateMonitorsById(CustomerSampleIdRequest customerSampleIdRequest) throws Exception; + void exportOriginalFile(@RequestBody @Valid IdDTO idDTO, HttpServletResponse response); + Page certificateRecordsById(CustomerSampleIdRequest customerSampleIdRequest) throws Exception; } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessOriginalRecordService.java b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessOriginalRecordService.java index cbb6b40..047f931 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessOriginalRecordService.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/business/IBusinessOriginalRecordService.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; +import com.casic.missiles.dto.IdDTO; import com.casic.missiles.dto.ReturnDTO; import com.casic.missiles.dto.business.originRecord.OriginRecordRequest; import com.casic.missiles.model.business.BusinessOriginalRecord; @@ -11,7 +12,7 @@ /** *

- * 服务类 + * 服务类 *

* * @author wangpeng @@ -21,7 +22,7 @@ Page originListPage(Page page, OriginRecordRequest request) throws Exception; - Page samplesByOderId(Page sampleInfoPage, OriginRecordRequest request) ; + Page samplesByOderId(Page sampleInfoPage, OriginRecordRequest request); BusinessOriginalRecord originalDetail(Long id) throws Exception; @@ -33,5 +34,7 @@ void originExport(OriginRecordRequest request, HttpServletResponse response); + void exportOriginalFile(IdDTO idDTO, HttpServletResponse response) throws Exception; + } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java new file mode 100644 index 0000000..63d9aaf --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/Example.java @@ -0,0 +1,99 @@ +package com.casic.missiles.service.listeners.register; + +import com.casic.missiles.service.listeners.register.FilePrintRegisterUtils; +import com.casic.missiles.utils.QRCodeUtil; +import com.deepoove.poi.XWPFTemplate; +import com.deepoove.poi.config.Configure; +import com.deepoove.poi.config.ConfigureBuilder; +import com.spire.doc.Document; +import com.spire.doc.FileFormat; +import org.apache.coyote.OutputBuffer; + +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @author cz + */ +public class Example { + + private static String localPathUrl = "D:\\casic\\cut\\"; + + /** + * 多个word合并为一个doc样例 + */ + public static void mergeDoc() { + String word1Url = localPathUrl + "211.docx"; +// String word2Url = localPathUrl + "202.docx"; +// //加载文档1 + Document doc1 = new Document(word1Url); +// //调用方法将文档2插入到文档1 +// doc1.insertTextFromFile(word2Url, FileFormat.Docx_2010); +// //保存合并后的文档 +// doc1.saveToFile(word1Url, FileFormat.Docx_2010); + doc1.saveToFile(localPathUrl + "add.docx", FileFormat.Docx); + } + + /** + * 表格合并样例 + */ + public static void tableMerge() { + String localPathUrl = "D:\\casic\\cut\\"; + // 目标文件地址 + String wordOldUrl = localPathUrl + "204.doc"; + Map params = new HashMap<>(); + List> assetList = new ArrayList<>(); + for (int i = 0; i < 8; i++) { + Map assetMap = new HashMap<>(); + assetMap.put("seq", String.valueOf(i / 4)); + assetMap.put("customer", "供方" + String.valueOf(i / 4)); + assetMap.put("customerName", "供方名字" + i); + assetMap.put("model", "型号" + i); + assetMap.put("startDate", "启用时间" + i); + assetMap.put("trainCondition", "维修时间"); + assetMap.put("status", "我醉"); + assetMap.put("evaluate", "我醒"); + assetList.add(assetMap); + } + params.put("train", assetList); + params.put("staffName", "张三"); + params.put("gender", "男"); + params.put("birthday", "2202-10-5"); + params.put("nation", "汉"); + params.put("enlistmentDate", "2196-9-18"); + params.put("partyDate", "2188-9-18"); + params.put("degree", "博士"); + params.put("test", "\uF052"); + params.put("error", "\uF0A3"); +// String newOldUrl = FilePrintRegisterUtils.exportWord(wordOldUrl, localPathUrl, "temp.docx", params, null); +// System.out.println(newOldUrl); + } + + + private static void textBoxTest() throws IOException { + Map map = new HashMap<>(); + ConfigureBuilder builder = Configure.builder(); + XWPFTemplate compile = XWPFTemplate.compile("D:\\casic\\cut\\204.docx", builder.build()); + compile.render(map); + compile.writeToFile("D:\\casic\\cut\\out_test3.docx"); + } + + + /** + * 1、生成二维码图片 + * 2、二维码图片进行图片的合成 + * 3、 + * @param args + * @throws Exception + */ + public static void main(String[] args) throws Exception { + OutputStream output =new FileOutputStream("D:\\casic\\cut\\test.png"); + QRCodeUtil.getQRCode("D:\\casic\\cut\\1航天检定模版v1.xls", output); + } + +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java index 4fb3b33..da44ae2 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/FilePrintRegisterUtils.java @@ -2,12 +2,15 @@ import cn.hutool.core.lang.Assert; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.util.ListUtils; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.casic.missiles.dto.business.certificate.ElectronicImage; import com.casic.missiles.dto.business.file.FilePrintRegister; -import com.casic.missiles.service.listeners.util.ParseWord07; +import com.casic.missiles.service.listeners.util.ParseWord07; import com.casic.missiles.service.listeners.util.PdfUtils; +import com.casic.missiles.utils.QRCodeUtil; import com.spire.doc.*; import com.spire.doc.documents.*; import com.spire.doc.fields.DocPicture; @@ -45,20 +48,7 @@ */ public static String filePrintGenerate(FilePrintRegister filePrintRegister) throws RuntimeException { //1、按照模板填充数据,并导出word,执行填充行数之后,再进行页数的填充 - String wordOldUrl = exportWord(filePrintRegister.getTemplatePath(), filePrintRegister.getTemDir(), filePrintRegister.getFileName(), filePrintRegister.getParams()); -// Document document = new Document(); -// document.loadFromFile(wordOldUrl); -// document.getPageCount(); - //设置透明属性 1、获取照片 2、签章背景透明设置 3、设置照片路径和照片类型进行图片保存 -// for (ElectronicImage electronicSeal : filePrintRegister.getElectronicImageList()) { -// BufferedImage bi = readImage(electronicSeal.getElectronicSealImageUrl()); -// BufferedImage electronSealImage = convertLayout(bi, electronicSeal.getDiaphaneity()); -// String stampImgUrl = electronicSeal.getElectronicSealImageUrl(); -// String imagePath = stampImgUrl.substring(0, stampImgUrl.length() - 4) + "1.png"; -// String[] imageCutOffContents = stampImgUrl.split("."); -// electronicSeal.setElectronicSealImageUrl(imagePath); -// saveFile(electronSealImage, imageCutOffContents[imageCutOffContents.length - 1], imagePath); -// } +// String wordOldUrl = exportWord(filePrintRegister.getTemplatePath(), filePrintRegister.getTemDir(), filePrintRegister.getFileName(), filePrintRegister.getParams()); // 初始化world,pdf名称参数 String wordNewUrl = filePrintRegister.getTemplatePath(); //默认转为docx,只需要进行docx的替换即可 @@ -71,24 +61,24 @@ .collect( Collectors.groupingBy(ElectronicImage::getKeyWord) ); - //3、根据关键字进行添加签章和签字 - for (Map.Entry> entry : sameKeyWordSealMaps.entrySet()) { - List electronicSeals = entry.getValue(); - addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSeals); - } - //获取没有关键字的图片,即绝对路径的图片 - List absolutePathImageList = filePrintRegister.getElectronicImageList().stream() - .filter(electronicImage -> StringUtils.isEmpty(electronicImage.getKeyWord())) - .collect(Collectors.toList()); - //根据设置的绝对路径进行图片的填充 - for (ElectronicImage absolutePathImage : absolutePathImageList) { - addAbsolutePathStamp(wordOldUrl, wordNewUrl, absolutePathImage); - } - //由于合成word总页数存在不准确,先转换为pdf进行获取合成证书总页数, 处理齐缝章 +// //3、根据关键字进行添加签章和签字 +// for (Map.Entry> entry : sameKeyWordSealMaps.entrySet()) { +// List electronicSeals = entry.getValue(); +// addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSeals); +// } +//// //获取没有关键字的图片,即绝对路径的图片 +// List absolutePathImageList = filePrintRegister.getElectronicImageList().stream() +// .filter(electronicImage -> StringUtils.isEmpty(electronicImage.getKeyWord())) +// .collect(Collectors.toList()); +// //根据设置的绝对路径进行图片的填充 +// for (ElectronicImage absolutePathImage : absolutePathImageList) { +// addAbsolutePathStamp(wordOldUrl, wordNewUrl, absolutePathImage); +// } +// 由于合成word总页数存在不准确,先转换为pdf进行获取合成证书总页数, 处理齐缝章 } // 4、将新word转化为pdf文件 - wordToPdf(wordNewUrl, pdfNewUrl); - return pdfNewUrl; +// wordToPdf(wordNewUrl, pdfNewUrl); + return filePrintRegister.getTemplatePath(); } @@ -163,7 +153,7 @@ * @param pdfNewUrl 存储新PDF文件路径 */ public static void wordToPdf(String wordNewUrl, String pdfNewUrl) { - PdfUtils.doc2pdf(wordNewUrl,pdfNewUrl); + PdfUtils.doc2pdf(wordNewUrl, pdfNewUrl); //// 将新Word文档转换为PDF文件 // Document document = new Document(); // document.loadFromFile(wordNewUrl); @@ -442,62 +432,27 @@ public static void main(String[] args) throws RuntimeException { - String pathUrl = "D:\\casic"; - String localPathUrl = "D:\\casic\\"; - // 目标文件地址 - String wordOldUrl = pathUrl + "\\工作记录单.docx"; - // 添加电子印章后文件存放地址 - String wordNewUrl = localPathUrl + "\\tem1.docx"; - Map params = new HashMap<>(); - List> assetList = new ArrayList<>(); - for (int i = 0; i < 3; i++) { - Map assetMap = new HashMap<>(); - assetMap.put("assetName", "我不是设备名称"); - assetMap.put("model", "我不是型号"); - assetMap.put("assetNo", "我是设备编号"); - assetList.add(assetMap); - } - params.put("assetList", assetList); - params.put("logNo", "本编号"); - params.put("laboratoryName", "此去半生"); - params.put("executiveAddress", "猜猜我在哪里"); - exportWord(wordOldUrl, localPathUrl, "temp.docx", params); + } -// //WORD转PDF存放位置 -// String pdfNewUrl = localPathUrl + "\\tem.pdf"; -// //电子印章图片地址 -// String stampNameImgUr = localPathUrl + "\\name1_1678844060471.png"; -// //电子签名图片地址 -// String stampSealImgUrl = localPathUrl + "\\ceshi.jpg"; -// // word文档内容关键字 -// FilePrintRegisterUtils addStampUtils = new FilePrintRegisterUtils(); -// List electronicSealList = new ArrayList(11); -// ElectronicImage electronicImage = defaultElectronicSignName("批准人"); -// electronicImage.setElectronicSealImageUrl(stampNameImgUr); -// electronicSealList.add(electronicImage); -// addSameKeyWordStamp(wordOldUrl, wordNewUrl, electronicSealList); -// //加载文档 -// Document document = new Document(); -// document.loadFromFile(wordOldUrl); -// //获取段落总数 -// int count = document.getPageCount(); -// System.out.println(count); -// String[] imageCutOffContents = stampSealImgUrl.split("\\."); -// CropPicture cropPicture = CropPicture.builder() -// .targetImgUrl(stampSealImgUrl) -// .cutCols(count) -// .cutRows(1) -// .subfileUrl(imageCutOffContents[imageCutOffContents.length - 2]) -// .subfileType("." + imageCutOffContents[imageCutOffContents.length - 1]) -// .build(); -// try { -// ImageTool.crosswiseCutting(cropPicture); -// } catch (IOException ex) { -// -// } -//// 将新word转化为pdf文件 -//// addStampUtils.wordToPdf(wordNewUrl, pdfNewUrl); + public static void QRCodeExcel() throws Exception { +// String path = "D:\\casic\\cut\\"; +// String fileName = path + "1航天检定模版v1.xls"; +// List list = ListUtils.newArrayList(); +// ImageDemoData imageDemoData = new ImageDemoData(); +// list.add(imageDemoData); +// // 创建字节数组输出流 +// ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); +// // 调用 QrCodeUtil.generate() 生成二维码,并将结果写入输出流 +// QRCodeUtil.getQRCode("helloworld", outputStream); +// // 从输出流中获取生成的二维码图像数据 +// byte[] qrCodeData = outputStream.toByteArray(); +// imageDemoData.setByteArray(qrCodeData); +// imageDemoData.setShortDesc("helloworld"); +// // 关闭输出流 +// outputStream.close(); +// // 写入数据 +// EasyExcel.write(fileName, ImageDemoData.class).sheet().doWrite(list); } protected static ElectronicImage defaultElectronicSignSeal(String keyWord, float horizontal) { diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java index 9037b0c..aeaa778 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileRegister.java @@ -18,6 +18,7 @@ import org.springframework.stereotype.Component; import org.springframework.web.multipart.MultipartFile; +import javax.servlet.http.HttpServletResponse; import java.io.*; import java.util.List; import java.util.Objects; @@ -28,7 +29,7 @@ */ @Component @Slf4j -public class PrintFileRegister { +public class PrintFileRegister extends PrintFileSupport { @Autowired private MinioClient minioClient; @@ -40,6 +41,16 @@ private String localFileDir; /** + * 新增,增加文件流回传下载 + * @param printFileRegister + * @param prefixType + * @return + */ + public String registerPrintFile(Object printFileRegister, String prefixType) { + return this.registerPrintFile(printFileRegister, prefixType, null); + } + + /** * 打印文件注册到服务器上有以下几个步骤 * 1、根据打印证书的类型,获取自定义的注册打印文件对象 * 2、进行远程文件的下载工作,支持文件的读写权限操作 @@ -48,7 +59,7 @@ * 5、递归删除因为打印产生的文件信息 * 6、返还打印产生的证书文件 */ - public String registerPrintFile(Object printFileRegister, String prefixType) { + public String registerPrintFile(Object printFileRegister, String prefixType, HttpServletResponse response) { String tempLocalFileDir = localFileDir; Assert.isFalse(Objects.isNull(printFileRegister), () -> { throw new RuntimeException("the certificateReport is null,please check your params..."); @@ -72,13 +83,17 @@ //合并注册 String certificatePdfUrl = FilePrintRegisterUtils.filePrintGenerate(metaData); //上传到服务器 - String certificatePdfName=uploadCertificate(certificatePdfUrl); +// String certificatePdfName = uploadCertificate(certificatePdfUrl); + //如果文件路径不为空,回传文件流 + if(StringUtils.isNotEmpty(certificatePdfUrl)){ + createResponseFileInput(certificatePdfUrl,response); + } //删除无效的文件 File invalidFile = new File(tempLocalFileDir); log.debug("invalid print file start delete, the file directory is {}", tempLocalFileDir); //删除运行空间下的文件 deleteFile(invalidFile); - return certificatePdfName; + return certificatePdfUrl; } throw new RuntimeException("the bean mapped to this certificate type is empty..."); } @@ -87,98 +102,12 @@ * 创建文件目录,为mini下载文件准备目录 */ private void getLocalFileDir(String tempLocalFileDir) { - File file = new File(tempLocalFileDir); //以. + File file = new File(tempLocalFileDir); //以 if (file.exists()) { deleteFile(file); } boolean dr = file.mkdirs(); //创建目录 } - /** - * 从mini文件服务器下载文件,获取文件的读写权限,用户证书报告的生成 - */ - private void downTemplateFile(String fileName, String tempLocalFileDir) { - InputStream in = null; - ByteArrayOutputStream out = null; - try { - in = minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(fileName).build()); - out = new ByteArrayOutputStream(); - IOUtils.copy(in, out); - //封装返回值 - byte[] bytes = out.toByteArray(); - FilePrintRegisterUtils.byteToFile(bytes, tempLocalFileDir, fileName); - } catch (Exception e) { - e.printStackTrace(); - } finally { - try { - if (in != null) { - try { - in.close(); - } catch (IOException e) { - e.printStackTrace(); - } - } - if (out != null) { - out.close(); - } - } catch (IOException e) { - e.printStackTrace(); - } - } - } - /** - * 通过生成的证书报告,将证书报告上传到远程mini的文件服务器 - */ - public String uploadCertificate(String certificatePrintUrl) { - //上传证书 - File file = new File(certificatePrintUrl); - //获取file对象的文件输入流 - FileInputStream input = null; - List nameList = null; - try { - input = new FileInputStream(file); - MultipartFile multipartFile = new MockMultipartFile("file", file.getName(), MediaType.MULTIPART_FORM_DATA_VALUE, IOUtils.toByteArray(input)); - MultipartFile[] multipartFiles = new MultipartFile[1]; - multipartFiles[0] = multipartFile; - nameList = minioUtil.upload(multipartFiles); - } catch (IOException ie) { - log.error("Description Failed to upload the certificate to the server,the failed reason is {}...", ie); - } finally { - if (input != null) { - try { - input.close(); - } catch (IOException e) { - log.error("the upload Certificate input stream release is anomaly"); - } - } - return nameList.get(0); - } - } - - /** - * 对打印报告产生的空间进行清除,还原空间 - */ - private void deleteFile(File invalidFile) { - //返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。 - File[] files = invalidFile.listFiles(); - if (files != null) {//如果包含文件进行删除操作 - for (int i = 0; i < files.length; i++) { - if (files[i].isFile()) { - //删除子文件 - files[i].delete(); - } else if (files[i].isDirectory()) { - //通过递归的方法找到子目录的文件 - deleteFile(files[i]); - } - } - } - if (invalidFile.list().length == 0) { - log.debug("invalid print file has already delete success!"); - } - //删除子目录 - if (invalidFile != null && invalidFile.isDirectory()) { - invalidFile.delete(); - } - } } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileSupport.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileSupport.java new file mode 100644 index 0000000..2aee62e --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/PrintFileSupport.java @@ -0,0 +1,220 @@ +package com.casic.missiles.service.listeners.register; + +import com.casic.missiles.utils.MinioUtil; +import io.minio.GetObjectArgs; +import io.minio.MinioClient; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.MediaType; +import org.springframework.mock.web.MockMultipartFile; +import org.springframework.stereotype.Component; +import org.springframework.web.multipart.MultipartFile; + +import javax.servlet.http.HttpServletResponse; +import java.io.*; +import java.net.URLEncoder; +import java.nio.file.Files; +import java.nio.file.StandardCopyOption; +import java.util.List; + +@Component +@Slf4j +public class PrintFileSupport { + + @Autowired + private MinioClient minioClient; + @Autowired + private MinioUtil minioUtil; + @Value("${minio.bucketName}") + private String bucketName; + + /** + * 返回文件流 + * + * @param printDocUrl 文件流路径,pdf,word + * @param response + */ + protected String createResponseFileInput(String printDocUrl, HttpServletResponse response) { + if (response == null) { +// return null; + return uploadCertificate(printDocUrl); + } + File file = new File(printDocUrl); + InputStream in = null; + ByteArrayOutputStream out = null; + try { + FileInputStream fis = new FileInputStream(file); + out = new ByteArrayOutputStream(); + IOUtils.copy(fis, out); + //封装返回值 + byte[] data = out.toByteArray(); + response.reset(); + response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(file.getName(), "UTF-8")); + response.addHeader("Content-Length", "" + data.length); + response.setHeader("Access-Control-Allow-Origin", "*"); + response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE"); + response.setHeader("Access-Control-Max-Age", "3600"); + response.setHeader("Access-Control-Allow-Credentials", "true"); + response.setHeader("Access-Control-Allow-Headers", "*"); + response.setContentType("application/octet-stream;charset=UTF-8"); + IOUtils.copy(fis, response.getOutputStream()); + OutputStream outputStream = new BufferedOutputStream(response.getOutputStream()); + outputStream.write(data); + outputStream.flush(); + outputStream.close(); + response.flushBuffer(); + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + if (in != null) { + try { + in.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + if (out != null) { + out.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + return ""; + } + + + /** + * 从mini文件服务器下载文件,获取文件的读写权限,用户证书报告的生成 + */ + protected void downTemplateFile(String fileNames, String tempLocalFileDir) { + if (StringUtils.isEmpty(fileNames)) { + return; + } + + InputStream in = null; + ByteArrayOutputStream out = null; + try { + String[] fileNameList = fileNames.split(","); + for (String fileName : fileNameList) { + in = minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(fileName).build()); + out = new ByteArrayOutputStream(); + IOUtils.copy(in, out); + //封装返回值 + byte[] bytes = out.toByteArray(); + FilePrintRegisterUtils.byteToFile(bytes, tempLocalFileDir, fileName); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + if (in != null) { + try { + in.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + if (out != null) { + out.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + /** + * 通过生成的证书报告,将证书报告上传到远程mini的文件服务器 + */ + protected String uploadCertificate(String certificatePrintUrl) { + //上传证书 + File file = new File(certificatePrintUrl); + //获取file对象的文件输入流 + FileInputStream input = null; + List nameList = null; + try { + input = new FileInputStream(file); + MultipartFile multipartFile = new MockMultipartFile("file", file.getName(), MediaType.MULTIPART_FORM_DATA_VALUE, IOUtils.toByteArray(input)); + MultipartFile[] multipartFiles = new MultipartFile[1]; + multipartFiles[0] = multipartFile; + nameList = minioUtil.upload(multipartFiles); + } catch (IOException ie) { + log.error("Description Failed to upload the certificate to the server,the failed reason is {}...", ie); + } finally { + if (input != null) { + try { + input.close(); + } catch (IOException e) { + log.error("the upload Certificate input stream release is anomaly"); + } + } + return nameList.get(0); + } + } + + /** + * 创建文件目录,为mini下载文件准备临时工作空间 + */ + protected void createLocalFileDir(String tempLocalFileDir) { + File file = new File(tempLocalFileDir); //以. + if (file.exists()) { + deleteFile(file); + } + file.mkdirs(); //创建目录 + } + + /** + * 对打印报告产生的工作空间进行删除,归还内存 + */ + protected void deleteFile(File invalidFile) { + //返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件。 + File[] files = invalidFile.listFiles(); + int length=files.length; + if (files != null) {//如果包含文件进行删除操作 + for (int i = 0; i < length; i++) { + if (files[i].isFile()) { + //删除子文件 + files[i].delete(); + } else if (files[i].isDirectory()) { + //通过递归的方法找到子目录的文件 + deleteFile(files[i]); + } + } + } + if (invalidFile.list().length == 0) { + log.debug("invalid print file has already delete success!"); + } + //删除子目录 + if (invalidFile != null && invalidFile.isDirectory()) { + invalidFile.delete(); + } + } + + /** + * 文件转移,将源文件转移到指定的目录下面 + * + * @param sourceFileUrl 源文件路径 + * @param targetDir 转移目录 + */ + protected void fileMove(String targetDir, String sourceFileUrl) { + // 创建源文件和目标文件对象 + File destinationFolder = new File(targetDir); + //如果不存在则进行创建 + if (!destinationFolder.exists()) { + destinationFolder.mkdirs(); //创建目录 + } + File sourceFile = new File(sourceFileUrl); + try { + // 使用Java 7的Files类将文件移动到目标文件夹中 + Files.move(sourceFile.toPath(), destinationFolder.toPath().resolve(sourceFile.getName()), StandardCopyOption.REPLACE_EXISTING); + } catch (IOException e) { + e.printStackTrace(); + } + } + +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/original/OriginalRecord.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/original/OriginalRecord.java new file mode 100644 index 0000000..e140056 --- /dev/null +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/original/OriginalRecord.java @@ -0,0 +1,44 @@ +package com.casic.missiles.service.listeners.register.data.original; + +import com.casic.missiles.dto.business.certificate.ElectronicImage; +import com.casic.missiles.dto.business.file.FilePrintRegister; +import com.casic.missiles.dto.flowable.ApprovalLogResponse; +import com.casic.missiles.enums.notifyevent.PrintFileDataBeanNameAliasEnum; +import com.casic.missiles.model.business.BusinessCertificateReport; +import com.casic.missiles.model.business.BusinessOriginalRecord; +import com.casic.missiles.model.business.BusinessSiteExecutiveInfo; +import com.casic.missiles.service.listeners.register.data.PrintFileDataGeneric; +import com.casic.missiles.service.listeners.register.data.PrintFileDataSupport; +import org.springframework.stereotype.Component; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 原始记录生成 + * 校准证书参数生成 + */ +@Component(PrintFileDataBeanNameAliasEnum.ORIGINAL_RECORD_BEAN) +public class OriginalRecord extends PrintFileDataSupport implements PrintFileDataGeneric { + + @Override + public FilePrintRegister CustomizedPrintFileRegister(Object object, String templateFileDir) { + BusinessOriginalRecord metaData = (BusinessOriginalRecord) object; + //初始化,生成模板文件 + FilePrintRegister filePrintRegister = initialization(templateFileDir, metaData.getId(), getTemplateName(metaData.getTemplateId())); + //定制化签名开发预处理,定制化参数 + customizedSignNamesParamCreator(); + //填充定制化的参数 + filePrintRegister.setParams(certificateFileParamCreator(metaData.getOrderId(), metaData.getSampleId())); + return filePrintRegister; + } + + + @Override + protected void customizedSignNamesParamCreator() { + keyParamList = Arrays.asList("发起人", "核验人", "审核人" ); + customizedSignNames = Arrays.asList("校准人", "核验人", "批准人" ); + } +} diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/site/EnvironmentalRecordData.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/site/EnvironmentalRecordData.java index f144866..134190c 100644 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/site/EnvironmentalRecordData.java +++ b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/register/data/site/EnvironmentalRecordData.java @@ -169,5 +169,4 @@ filePrintRegister.getParams().put("assetList", assetList); return this; } - } diff --git a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/util/Example.java b/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/util/Example.java deleted file mode 100644 index 6eb413f..0000000 --- a/casic-metering-service/src/main/java/com/casic/missiles/service/listeners/util/Example.java +++ /dev/null @@ -1,87 +0,0 @@ -package com.casic.missiles.service.listeners.util; - -import com.casic.missiles.service.listeners.register.FilePrintRegisterUtils; -import com.deepoove.poi.XWPFTemplate; -import com.deepoove.poi.config.Configure; -import com.deepoove.poi.config.ConfigureBuilder; -import com.spire.doc.Document; -import com.spire.doc.FileFormat; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * @author cz - */ -public class Example { - - private static String localPathUrl = "D:\\casic\\cut\\"; - - /** - * 多个word合并为一个doc样例 - */ - public static void mergeDoc() { - String word1Url = localPathUrl + "211.docx"; -// String word2Url = localPathUrl + "202.docx"; -// //加载文档1 - Document doc1 = new Document(word1Url); -// //调用方法将文档2插入到文档1 -// doc1.insertTextFromFile(word2Url, FileFormat.Docx_2010); -// //保存合并后的文档 -// doc1.saveToFile(word1Url, FileFormat.Docx_2010); - doc1.saveToFile(localPathUrl + "add.docx", FileFormat.Docx); - } - - /** - * 表格合并样例 - */ - public static void tableMerge() { - String localPathUrl = "D:\\casic\\cut\\"; - // 目标文件地址 - String wordOldUrl = localPathUrl + "204.doc"; - Map params = new HashMap<>(); - List> assetList = new ArrayList<>(); - for (int i = 0; i < 8; i++) { - Map assetMap = new HashMap<>(); - assetMap.put("seq", String.valueOf(i / 4)); - assetMap.put("customer", "供方" + String.valueOf(i / 4)); - assetMap.put("customerName", "供方名字" + i); - assetMap.put("model", "型号" + i); - assetMap.put("startDate", "启用时间" + i); - assetMap.put("trainCondition", "维修时间"); - assetMap.put("status", "我醉"); - assetMap.put("evaluate", "我醒"); - assetList.add(assetMap); - } - params.put("train", assetList); - params.put("staffName", "张三"); - params.put("gender", "男"); - params.put("birthday", "2202-10-5"); - params.put("nation", "汉"); - params.put("enlistmentDate", "2196-9-18"); - params.put("partyDate", "2188-9-18"); - params.put("degree", "博士"); - params.put("test", "\uF052"); - params.put("error", "\uF0A3"); -// String newOldUrl = FilePrintRegisterUtils.exportWord(wordOldUrl, localPathUrl, "temp.docx", params, null); -// System.out.println(newOldUrl); - } - - - private static void textBoxTest() throws IOException { - Map map = new HashMap<>(); - ConfigureBuilder builder = Configure.builder(); - XWPFTemplate compile = XWPFTemplate.compile("D:\\casic\\cut\\204.docx", builder.build()); - compile.render(map); - compile.writeToFile("D:\\casic\\cut\\out_test3.docx"); - } - - public static void main(String[] args) throws Exception { - FilePrintRegisterUtils.wordToPdf("D:\\casic\\cut\\200.docx","D:\\casic\\cut\\200.pdf"); - } - - -}