| | |
| | | import java.util.concurrent.atomic.AtomicReference; |
| | | import java.util.regex.Pattern; |
| | | import java.util.stream.Collectors; |
| | | import java.util.stream.Stream; |
| | | |
| | | /** |
| | | * 检验任务-业务实现层 |
| | |
| | | |
| | | @Override |
| | | public int uploadFile(Integer orderId, MultipartFile file) { |
| | | if (orderId == null || file == null || file.isEmpty()) { |
| | | throw new ErrorException("请选择要上传的附件"); |
| | | } |
| | | String urlString; |
| | | String pathName; |
| | | String path; |
| | |
| | | urlString = realpath + "/" + pathName; |
| | | file.transferTo(new File(urlString)); |
| | | insOrderFile.setFileUrl(pathName); |
| | | return insOrderFileMapper.insert(insOrderFile); |
| | | return insOrderFileMapper.insert(insOrderFile) > 0 ? insOrderFile.getId() : 0; |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | System.err.println("附件上传错误"); |
| | |
| | | boolean directTemplateOrder = isDirectTemplateOrder(orderId); |
| | | if (currentState != null && Objects.equals(currentState.getInsState(), 5) |
| | | && existingReport != null && StringUtils.isNotBlank(existingReport.getUrl()) |
| | | && Objects.equals(existingReport.getIsPass(), 1) |
| | | && (!directTemplateOrder || StringUtils.isNotBlank(existingReport.getInspectionUrl()))) { |
| | | // 防止复核页面重复点击或网络重试重复生成报告、重复发起报告审批。 |
| | | // 仅对仍在报告编制中的记录防重复;退回检验任务的报告需要继续执行并恢复 is_pass。 |
| | | return 1; |
| | | } |
| | | if (directTemplateOrder && Objects.equals(type, 1) |
| | |
| | | if (StringUtils.isBlank(tempPdfName)) { |
| | | throw new ErrorException("报告预览文件生成失败"); |
| | | } |
| | | // generateReport 会写入当前时间;重新生成不应改变原审批记录时间。 |
| | | // generateReport 会写入当前时间,部分报告还会暂时写入 is_pass=0; |
| | | // 重新生成不应改变原审批记录时间和可见状态。 |
| | | insReportMapper.update(null, Wrappers.<InsReport>lambdaUpdate() |
| | | .eq(InsReport::getId, reportId) |
| | | .set(InsReport::getWriteTime, report.getWriteTime()) |
| | | .set(InsReport::getIsPass, report.getIsPass()) |
| | | .set(InsReport::getTempUrlPdf, "/word/" + tempPdfName)); |
| | | } |
| | | |
| | |
| | | String insTime = formatReportTestDate(detectionDates); |
| | | String insTimeEn = formatReportTestDateEn(detectionDates, monthNames); |
| | | |
| | | // 检验环境:优先汇总各模板填写的温湿度,报告展示全部模板的最小值到最大值。 |
| | | // 检验环境:优先汇总各模板填写的温度,报告展示全部模板的最小值到最大值。 |
| | | String environment = buildReportEnvironment(orderId, insOrder); |
| | | String finalEnvironment = environment; |
| | | LocalDateTime finalSendTime = sendTime; |
| | |
| | | String finalResultRemark = resultRemark; |
| | | String equipmentText = buildEquipmentText(finalDeviceList); |
| | | String issueDate = now.format(DateTimeFormatter.ofPattern("yyyy年MM月dd日")); |
| | | String conclusionDate = now.format(DateTimeFormatter.ofPattern("yyyy 年 MM 月 dd 日")); |
| | | String finalReportModelStr = finalModelStr; |
| | | LocalDateTime finalReportSendTime = finalSendTime; |
| | | XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render( |
| | |
| | | put("customer", finalCustomerName); |
| | | put("category", finalDetectionCategory); |
| | | put("date", issueDate); |
| | | put("conclusionDate", conclusionDate); |
| | | put("maker", defaultReportText(insOrder.getProduction(), "/")); |
| | | put("env", finalEnvironment); |
| | | put("qty", defaultReportText(insOrder.getTestQuantity(), "/")); |
| | |
| | | for (Map<String, String> device : deviceList) { |
| | | String name = getMapText(device, "deviceName", "device_name"); |
| | | String managementNumber = getMapText(device, "managementNumber", "management_number"); |
| | | String factoryNo = getMapText(device, "factoryNo", "factory_no"); |
| | | if (StringUtils.isBlank(name) || "/".equals(name.trim())) { |
| | | continue; |
| | | } |
| | | String number = StringUtils.isBlank(managementNumber) || "/".equals(managementNumber.trim()) |
| | | ? "出厂编号" : managementNumber.trim(); |
| | | String item = name.trim() + ":" + number; |
| | | String number = managementNumber; |
| | | if (StringUtils.isBlank(number) || "/".equals(number.trim())) { |
| | | number = factoryNo; |
| | | } |
| | | if (StringUtils.isBlank(number) || "/".equals(number.trim())) { |
| | | continue; |
| | | } |
| | | String item = name.trim() + ":" + number.trim(); |
| | | equipmentItems.add(item); |
| | | } |
| | | if (equipmentItems.isEmpty()) { |
| | |
| | | List<InsOrderStandardTemplate> snapshots = insOrderStandardTemplateService.list( |
| | | Wrappers.<InsOrderStandardTemplate>lambdaQuery() |
| | | .eq(InsOrderStandardTemplate::getInsOrderId, orderId) |
| | | .select(InsOrderStandardTemplate::getTemperature, |
| | | InsOrderStandardTemplate::getHumidity)); |
| | | .select(InsOrderStandardTemplate::getTemperature)); |
| | | List<String> temperatures = snapshots.stream() |
| | | .map(InsOrderStandardTemplate::getTemperature) |
| | | .filter(StringUtils::isNotBlank) |
| | | .collect(Collectors.toList()); |
| | | List<String> humidities = snapshots.stream() |
| | | .map(InsOrderStandardTemplate::getHumidity) |
| | | .filter(StringUtils::isNotBlank) |
| | | .collect(Collectors.toList()); |
| | | |
| | | String temperature = formatConditionRange(temperatures, order.getTemperature(), "℃"); |
| | | String humidity = formatConditionRange(humidities, order.getHumidity(), "%RH"); |
| | | return Stream.of(temperature, humidity) |
| | | .filter(StringUtils::isNotBlank) |
| | | .collect(Collectors.joining(" ")); |
| | | return formatConditionRange(temperatures, order.getTemperature(), "℃"); |
| | | } |
| | | |
| | | private static String formatConditionRange(List<String> values, String fallback, String unit) { |