Merge remote-tracking branch 'origin/test' into test
This commit is contained in:
@@ -26,6 +26,8 @@ import com.zt.plat.framework.datapermission.core.annotation.DeptDataPermissionIg
|
||||
import static com.zt.plat.framework.common.pojo.CommonResult.success;
|
||||
|
||||
import com.zt.plat.framework.excel.core.util.ExcelUtils;
|
||||
import com.zt.plat.framework.security.core.LoginUser;
|
||||
import com.zt.plat.framework.security.core.util.SecurityFrameworkUtils;
|
||||
import com.zt.plat.module.qms.business.bus.controller.vo.*;
|
||||
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessSampleEntrustDepartmentDO;
|
||||
import com.zt.plat.module.qms.business.bus.service.BusinessSampleEntrustDepartmentService;
|
||||
@@ -89,6 +91,10 @@ public class BusinessSampleEntrustDepartmentController implements BusinessContro
|
||||
@Operation(summary = "获得委检登记分析部门业务分页")
|
||||
// @PreAuthorize("@ss.hasPermission('t:business-sample-entrust-department:query')")
|
||||
public CommonResult<PageResult<BusinessSampleEntrustDepartmentExtendRespVO>> getBusinessSampleEntrustDepartmentPage(@Valid BusinessSampleEntrustDepartmentPageReqVO pageReqVO) {
|
||||
if (pageReqVO.getAssayDepartmentId() == null) {
|
||||
LoginUser loginUser = SecurityFrameworkUtils.getLoginUser();
|
||||
pageReqVO.setAssayDepartmentId(loginUser.getVisitDeptId());
|
||||
}
|
||||
PageResult<BusinessSampleEntrustDepartmentExtendRespVO> pageResult = businessSampleEntrustDepartmentService.getBusinessSampleEntrustDepartmentPage(pageReqVO);
|
||||
return success(pageResult);
|
||||
}
|
||||
|
||||
@@ -31,6 +31,9 @@ public class BusinessSampleEntrustFilePageReqVO extends PageParam {
|
||||
@Schema(description = "路径")
|
||||
private String filePath;
|
||||
|
||||
@Schema(description = "扩展信息")
|
||||
private String externalInfomation;
|
||||
|
||||
@Schema(description = "所属部门")
|
||||
private String systemDepartmentCode;
|
||||
|
||||
|
||||
@@ -42,6 +42,9 @@ public class BusinessSampleEntrustFileRespVO {
|
||||
@ExcelProperty("路径")
|
||||
private String filePath;
|
||||
|
||||
@Schema(description = "扩展信息")
|
||||
private String externalInfomation;
|
||||
|
||||
@Schema(description = "所属部门")
|
||||
@ExcelProperty("所属部门")
|
||||
private String systemDepartmentCode;
|
||||
|
||||
@@ -31,6 +31,9 @@ public class BusinessSampleEntrustFileSaveReqVO {
|
||||
@Schema(description = "路径")
|
||||
private String filePath;
|
||||
|
||||
@Schema(description = "扩展信息")
|
||||
private String externalInfomation;
|
||||
|
||||
@Schema(description = "所属部门")
|
||||
private String systemDepartmentCode;
|
||||
|
||||
|
||||
@@ -62,6 +62,11 @@ public class BusinessSampleEntrustFileDO extends BusinessBaseDO {
|
||||
@TableField("FILE_PATH")
|
||||
private String filePath;
|
||||
/**
|
||||
* 扩展信息
|
||||
*/
|
||||
@TableField("EXT_INF")
|
||||
private String externalInfomation;
|
||||
/**
|
||||
* 所属部门
|
||||
*/
|
||||
@TableField("SYS_DEPT_CD")
|
||||
|
||||
@@ -32,6 +32,7 @@ public interface BusinessSampleEntrustFileMapper extends BaseMapperX<BusinessSam
|
||||
.eqIfPresent(BusinessSampleEntrustFileDO::getFileId, reqVO.getFileId())
|
||||
.likeIfPresent(BusinessSampleEntrustFileDO::getFileName, reqVO.getFileName())
|
||||
.eqIfPresent(BusinessSampleEntrustFileDO::getFilePath, reqVO.getFilePath())
|
||||
.eqIfPresent(BusinessSampleEntrustFileDO::getExternalInfomation, reqVO.getExternalInfomation())
|
||||
.eqIfPresent(BusinessSampleEntrustFileDO::getSystemDepartmentCode, reqVO.getSystemDepartmentCode())
|
||||
.betweenIfPresent(BusinessSampleEntrustFileDO::getCreateTime, reqVO.getCreateTime())
|
||||
.eqIfPresent(BusinessSampleEntrustFileDO::getRemark, reqVO.getRemark())
|
||||
@@ -50,6 +51,7 @@ public interface BusinessSampleEntrustFileMapper extends BaseMapperX<BusinessSam
|
||||
.eqIfPresent(BusinessSampleEntrustFileDO::getFileId, reqVO.getFileId())
|
||||
.likeIfPresent(BusinessSampleEntrustFileDO::getFileName, reqVO.getFileName())
|
||||
.eqIfPresent(BusinessSampleEntrustFileDO::getFilePath, reqVO.getFilePath())
|
||||
.eqIfPresent(BusinessSampleEntrustFileDO::getExternalInfomation, reqVO.getExternalInfomation())
|
||||
.eqIfPresent(BusinessSampleEntrustFileDO::getSystemDepartmentCode, reqVO.getSystemDepartmentCode())
|
||||
.betweenIfPresent(BusinessSampleEntrustFileDO::getCreateTime, reqVO.getCreateTime())
|
||||
.eqIfPresent(BusinessSampleEntrustFileDO::getRemark, reqVO.getRemark())
|
||||
|
||||
@@ -782,6 +782,9 @@ public class SampleEntrustGenSampleDataCmp extends NodeComponent {
|
||||
if (usageCount <= 0) {//如果没有上报检测项目,则跳出当前循环
|
||||
continue;
|
||||
}
|
||||
//需要上报的检测项目
|
||||
List<Long> usageReportDicProjectIdList = businessAssayProjectDataDOList.stream().filter(f -> businessAssayTaskDataAssayDepartmentIdList.contains(f.getBusinessAssayTaskDataId()) && (QmsCommonConstant.ASSAY_PROJECT_USAGE_REPORT.equals(f.getUsage()) || QmsCommonConstant.ASSAY_PROJECT_USAGE_INGREDIENT_REPORT.equals(f.getUsage()))).map(m -> m.getDictionaryProjectId()).distinct().collect(Collectors.toList());
|
||||
List<String> usageReportProjectNameList = dictionaryProjectList.stream().filter(f -> usageReportDicProjectIdList.contains(f.getId())).map(m -> m.getShowName()).collect(Collectors.toList());
|
||||
|
||||
BusinessSampleEntrustDepartmentDO businessSampleEntrustDepartmentDO = new BusinessSampleEntrustDepartmentDO();
|
||||
businessSampleEntrustDepartmentDO.setId(IdWorker.getId());
|
||||
@@ -800,7 +803,7 @@ public class SampleEntrustGenSampleDataCmp extends NodeComponent {
|
||||
return Arrays.stream(parts)
|
||||
.map(String::trim) // 去除每个ID前后的空格
|
||||
.filter(s -> !s.isEmpty()); // 过滤掉空项(例如 "101,,102" 中间的空项)
|
||||
}).distinct().collect(Collectors.toList());
|
||||
}).filter(f -> usageReportProjectNameList.contains(f)).distinct().collect(Collectors.toList());
|
||||
businessSampleEntrustDepartmentDO.setAssayProject(CollUtil.join(assayProjectList, ","));
|
||||
|
||||
List<Long> configAssayMethodIdAssayDepartmentIdList = businessAssayTaskDataAssayDepartmentList.stream().map(m -> m.getConfigAssayMethodId()).distinct().collect(Collectors.toList());
|
||||
@@ -814,6 +817,16 @@ public class SampleEntrustGenSampleDataCmp extends NodeComponent {
|
||||
|
||||
List<Long> businessBaseSampleIdList = businessAssayTaskDataAssayDepartmentList.stream().map(m -> m.getBusinessBaseSampleId()).distinct().collect(Collectors.toList());
|
||||
for (Long businessBaseSampleId : businessBaseSampleIdList) {
|
||||
//获取当前主样的分析任务id
|
||||
List<Long> currBaseBusinessAssayTaskDataAssayDepartmentIdList = businessAssayTaskDataAssayDepartmentList.stream().filter(f -> f.getBusinessBaseSampleId().equals(businessBaseSampleId)).map(m -> m.getId()).collect(Collectors.toList());
|
||||
//统计检测项目是上报的或者配料上报的数量
|
||||
usageCount = businessAssayProjectDataDOList.stream().filter(f -> currBaseBusinessAssayTaskDataAssayDepartmentIdList.contains(f.getBusinessAssayTaskDataId()) && (QmsCommonConstant.ASSAY_PROJECT_USAGE_REPORT.equals(f.getUsage()) || QmsCommonConstant.ASSAY_PROJECT_USAGE_INGREDIENT_REPORT.equals(f.getUsage()))).count();
|
||||
if (usageCount <= 0) {//如果没有上报检测项目,则跳出当前循环
|
||||
continue;
|
||||
}
|
||||
List<Long> currBaseUsageReportDicProjectIdList = businessAssayProjectDataDOList.stream().filter(f -> currBaseBusinessAssayTaskDataAssayDepartmentIdList.contains(f.getBusinessAssayTaskDataId()) && (QmsCommonConstant.ASSAY_PROJECT_USAGE_REPORT.equals(f.getUsage()) || QmsCommonConstant.ASSAY_PROJECT_USAGE_INGREDIENT_REPORT.equals(f.getUsage()))).map(m -> m.getDictionaryProjectId()).distinct().collect(Collectors.toList());
|
||||
List<String> currBaseUsageReportProjectNameList = dictionaryProjectList.stream().filter(f -> currBaseUsageReportDicProjectIdList.contains(f.getId())).map(m -> m.getShowName()).collect(Collectors.toList());
|
||||
|
||||
BusinessSampleEntrustDetailDO businessSampleEntrustDetailDO = sampleEntrustDetailList.stream().filter(f -> f.getBusinessBaseSampleId().equals(businessBaseSampleId)).findFirst().orElse(null);
|
||||
|
||||
BusinessSampleEntrustDepartmentDetailDO businessSampleEntrustDepartmentDetailDO = new BusinessSampleEntrustDepartmentDetailDO();
|
||||
@@ -836,7 +849,7 @@ public class SampleEntrustGenSampleDataCmp extends NodeComponent {
|
||||
return Arrays.stream(parts)
|
||||
.map(String::trim) // 去除每个ID前后的空格
|
||||
.filter(s -> !s.isEmpty()); // 过滤掉空项(例如 "101,,102" 中间的空项)
|
||||
}).distinct().collect(Collectors.toList());
|
||||
}).filter(f -> currBaseUsageReportProjectNameList.contains(f)).distinct().collect(Collectors.toList());
|
||||
businessSampleEntrustDepartmentDetailDO.setAssayProject(CollUtil.join(sampleAssayProjectList, ","));
|
||||
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.zt.plat.module.qms.business.bus.service;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
@@ -15,6 +16,7 @@ import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import com.zt.plat.framework.common.exception.ServiceException;
|
||||
@@ -216,9 +218,14 @@ public class SampleDeptEntrustDocAuditServiceImpl implements SampleDeptEntrustDo
|
||||
Long loginUserId = SecurityFrameworkUtils.getLoginUserId();
|
||||
Long businessSampleEntrustDepartmentId = param.getBusinessSampleEntrustDepartmentId();
|
||||
BusinessSampleEntrustDepartmentDO businessSampleEntrustDepartmentDO = businessSampleEntrustDepartmentMapper.selectById(businessSampleEntrustDepartmentId);
|
||||
if (QmsCommonConstant.YES.equals(businessSampleEntrustDepartmentDO.getIsReported())) {
|
||||
throw new ServiceException(1_032_100_000, "当前商检报告已审核!");
|
||||
}
|
||||
|
||||
businessSampleEntrustDepartmentDO.setIsReported(QmsCommonConstant.YES);
|
||||
businessSampleEntrustDepartmentDO.setReportOperator(nickName);
|
||||
businessSampleEntrustDepartmentDO.setReportOperatorId(loginUserId);
|
||||
businessSampleEntrustDepartmentDO.setReportTime(LocalDateTime.now());
|
||||
businessSampleEntrustDepartmentDO.setAssayStatus(QmsCommonConstant.CHECKED);
|
||||
|
||||
Set<String> assayOperatorSet = new HashSet<>();
|
||||
@@ -290,6 +297,13 @@ public class SampleDeptEntrustDocAuditServiceImpl implements SampleDeptEntrustDo
|
||||
businessFileApi.createBusinessFile(businessFileSaveReqDTO);
|
||||
|
||||
//设置附件
|
||||
JSONObject fileExtInfoJSON = new JSONObject();
|
||||
fileExtInfoJSON.put("taskNo", businessAssayTaskJson.getString("taskNo"));
|
||||
fileExtInfoJSON.put("taskName", businessAssayTaskJson.getString("taskName"));
|
||||
fileExtInfoJSON.put("assayOperator", businessAssayTaskJson.getString("assayOperator"));
|
||||
fileExtInfoJSON.put("assayTime", businessAssayTaskJson.getString("assayTime"));
|
||||
fileExtInfoJSON.put("reportOperator", businessAssayTaskJson.getString("reportOperator"));
|
||||
fileExtInfoJSON.put("reportTime", businessAssayTaskJson.getString("reportTime"));
|
||||
BusinessSampleEntrustFileDO businessSampleEntrustFileDO = new BusinessSampleEntrustFileDO();
|
||||
businessSampleEntrustFileDO.setBusinessSampleEntrustRegistrationId(businessSampleEntrustDepartmentDO.getBusinessSampleEntrustRegistrationId());
|
||||
businessSampleEntrustFileDO.setBusinessSampleEntrustDepartmentId(businessSampleEntrustDepartmentDO.getId());
|
||||
@@ -297,6 +311,7 @@ public class SampleDeptEntrustDocAuditServiceImpl implements SampleDeptEntrustDo
|
||||
businessSampleEntrustFileDO.setFileId(fileRespDTO.getId());
|
||||
businessSampleEntrustFileDO.setFileName(fileRespDTO.getName());
|
||||
businessSampleEntrustFileDO.setFilePath(fileRespDTO.getDirectory());
|
||||
businessSampleEntrustFileDO.setExternalInfomation(fileExtInfoJSON.toJSONString());
|
||||
|
||||
businessSampleEntrustFileDOList.add(businessSampleEntrustFileDO);
|
||||
|
||||
@@ -329,7 +344,7 @@ public class SampleDeptEntrustDocAuditServiceImpl implements SampleDeptEntrustDo
|
||||
formData.put("sampleCategory", sampleCategory);
|
||||
formData.put("entrustCode", businessSampleEntrustRegistrationDO.getEntrustNumber());
|
||||
|
||||
jsonObjectParam.put("assayReportDataList", businessAssayReportDataList);
|
||||
jsonObjectParam.put("assayReportDataList", JSON.parseArray(JSON.toJSONString(businessAssayReportDataList)));
|
||||
jsonObjectParam.put("itemNameList", param.getAssayProject());
|
||||
jsonObjectParam.put("signatureData", signatureData);
|
||||
jsonObjectParam.put("formData", formData);
|
||||
@@ -364,6 +379,11 @@ public class SampleDeptEntrustDocAuditServiceImpl implements SampleDeptEntrustDo
|
||||
businessFileApi.createBusinessFile(businessFileSaveReqDTO);
|
||||
|
||||
//设置附件
|
||||
JSONObject fileExtInfoJSON = new JSONObject();
|
||||
fileExtInfoJSON.put("entrustNumber", businessSampleEntrustRegistrationDO.getEntrustNumber());
|
||||
fileExtInfoJSON.put("assayDepartmentName", businessSampleEntrustDepartmentDO.getAssayDepartmentName());
|
||||
fileExtInfoJSON.put("reportOperator", businessSampleEntrustDepartmentDO.getReportOperator());
|
||||
fileExtInfoJSON.put("reportTime", DateUtil.formatLocalDateTime(businessSampleEntrustDepartmentDO.getReportTime()));
|
||||
BusinessSampleEntrustFileDO businessSampleEntrustFileDO = new BusinessSampleEntrustFileDO();
|
||||
businessSampleEntrustFileDO.setBusinessSampleEntrustRegistrationId(businessSampleEntrustDepartmentDO.getBusinessSampleEntrustRegistrationId());
|
||||
businessSampleEntrustFileDO.setBusinessSampleEntrustDepartmentId(businessSampleEntrustDepartmentDO.getId());
|
||||
@@ -371,6 +391,7 @@ public class SampleDeptEntrustDocAuditServiceImpl implements SampleDeptEntrustDo
|
||||
businessSampleEntrustFileDO.setFileId(fileRespDTO.getId());
|
||||
businessSampleEntrustFileDO.setFileName(fileRespDTO.getName());
|
||||
businessSampleEntrustFileDO.setFilePath(fileRespDTO.getDirectory());
|
||||
businessSampleEntrustFileDO.setExternalInfomation(fileExtInfoJSON.toJSONString());
|
||||
|
||||
businessSampleEntrustFileDOList.add(businessSampleEntrustFileDO);
|
||||
|
||||
|
||||
@@ -137,9 +137,29 @@ public class ReportDocumentAssistService {
|
||||
.body(bodyStr)
|
||||
.timeout(15000)
|
||||
.execute();
|
||||
log.info("html2pdf--end at {}", LocalDateTime.now());
|
||||
if (response.getStatus() != 200) {
|
||||
// 尝试读取错误响应体以便调试(注意:如果流已消费则无法再次读取,这里 bodyStream 还没读)
|
||||
String errorBody = response.body();
|
||||
log.error("HTML2PDF 服务返回错误状态码: {}, 响应内容: {}", response.getStatus(), errorBody);
|
||||
throw new IOException("生成 PDF 失败,远程服务返回状态码: " + response.getStatus() + ", 详情: " + errorBody);
|
||||
}
|
||||
|
||||
// 只有状态码为 200 时,才读取流
|
||||
InputStream inputStream = response.bodyStream();
|
||||
return IOUtils.toByteArray(inputStream);
|
||||
if (inputStream == null) {
|
||||
throw new IOException("生成 PDF 失败,响应流为空");
|
||||
}
|
||||
|
||||
byte[] pdfBytes = IOUtils.toByteArray(inputStream);
|
||||
|
||||
// 【可选防御性检查】验证返回的数据是否真的像 PDF (以 %PDF 开头)
|
||||
if (pdfBytes.length < 5 || !(new String(pdfBytes, 0, 4).startsWith("%PDF"))) {
|
||||
log.error("生成的 PDF 数据头校验失败,前100字节: {}", new String(pdfBytes, 0, Math.min(100, pdfBytes.length)));
|
||||
throw new IOException("生成的文件不是有效的 PDF 格式,可能是服务端返回了错误信息");
|
||||
}
|
||||
|
||||
log.info("html2pdf--end at {}, 文件大小: {} bytes", LocalDateTime.now(), pdfBytes.length);
|
||||
return pdfBytes;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -103,7 +103,7 @@ public class PdfHelper {
|
||||
pdfDocument.save(baos);
|
||||
return baos.toByteArray();
|
||||
} catch (Exception e) {
|
||||
log.error("处理pdf出错!");
|
||||
log.error("处理pdf出错!", e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user