| | |
| | | import com.ruoyi.inspect.pojo.*; |
| | | import com.ruoyi.inspect.service.*; |
| | | import com.ruoyi.inspect.util.HackLoopTableRenderPolicy; |
| | | import com.ruoyi.inspect.util.ReportResultTableRenderPolicy; |
| | | import com.ruoyi.inspect.util.PreserveReportPicturePlaceholderHandler; |
| | | import com.ruoyi.inspect.util.ReportSignaturePictureUtils; |
| | | import com.ruoyi.inspect.vo.InsOrderPlanTaskSwitchVo; |
| | |
| | | } |
| | | |
| | | |
| | | // 添加设备记录 |
| | | threadPoolTaskExecutor.execute(() -> { |
| | | // 添加设备使用记录 |
| | | addDeviceRecord(insSample, userId); |
| | | }); |
| | | // 原始记录保存后,按当前模板选用的设备生成使用记录 |
| | | syncDeviceRecordsFromTemplate(saveInsContextDto.getOrderId(), saveInsContextDto.getSampleId(), |
| | | saveInsContextDto.getCurrentTable(), userId); |
| | | } |
| | | |
| | | /** |
| | |
| | | .and(w -> w.isNull(InsProduct::getLastValue).or().eq(InsProduct::getLastValue, ""))); |
| | | sample.setInsState(unfinished == 0 ? 2 : 1); |
| | | insSampleMapper.updateById(sample); |
| | | |
| | | // 原始记录保存后,按当前模板选用的设备生成使用记录 |
| | | syncDeviceRecordsFromTemplate(dto.getOrderId(), dto.getSampleId(), dto.getTemplateId(), userId); |
| | | } |
| | | |
| | | /** |
| | |
| | | } |
| | | } |
| | | |
| | | private synchronized void addDeviceRecord(InsSample insSample, Integer userId) { |
| | | InsOrder order = insOrderMapper.selectById(insSample.getInsOrderId()); |
| | | /** |
| | | * 原始记录保存后,按当前模板选用的设备生成待填写的使用记录。 |
| | | * 同一订单、样品、设备只生成一条;温湿度和使用日期取原始记录快照, |
| | | * 时间默认 10:00-19:30;已经手工填写过的记录不会被覆盖。 |
| | | */ |
| | | private synchronized void syncDeviceRecordsFromTemplate(Integer orderId, Integer sampleId, |
| | | Integer templateId, Integer userId) { |
| | | if (orderId == null || sampleId == null || templateId == null) { |
| | | return; |
| | | } |
| | | InsOrder order = insOrderMapper.selectById(orderId); |
| | | InsSample sample = insSampleMapper.selectById(sampleId); |
| | | if (order == null || sample == null) { |
| | | return; |
| | | } |
| | | List<Integer> deviceIds = insOrderTemplateDeviceMapper |
| | | .selectDeviceIdsByOrderAndTemplate(orderId, templateId); |
| | | if (CollectionUtils.isEmpty(deviceIds)) { |
| | | return; |
| | | } |
| | | InsOrderStandardTemplate snapshot = insOrderStandardTemplateService.getOne( |
| | | Wrappers.<InsOrderStandardTemplate>lambdaQuery() |
| | | .eq(InsOrderStandardTemplate::getInsOrderId, orderId) |
| | | .eq(InsOrderStandardTemplate::getTemplateId, templateId) |
| | | .last("limit 1")); |
| | | String temperature = snapshot == null || StringUtils.isBlank(snapshot.getTemperature()) |
| | | ? order.getTemperature() : snapshot.getTemperature(); |
| | | String humidity = snapshot == null || StringUtils.isBlank(snapshot.getHumidity()) |
| | | ? order.getHumidity() : snapshot.getHumidity(); |
| | | // 原始记录没有检测日期时留空,不默认当天 |
| | | LocalDateTime useStartDate = null; |
| | | LocalDateTime useEndDate = null; |
| | | if (snapshot != null && snapshot.getDetectionTime() != null) { |
| | | useStartDate = snapshot.getDetectionTime().atTime(10, 0); |
| | | LocalDate endDate = snapshot.getDetectionEndTime() != null |
| | | ? snapshot.getDetectionEndTime() : snapshot.getDetectionTime(); |
| | | useEndDate = endDate.atTime(19, 30); |
| | | } |
| | | User user = userMapper.selectById(userId); |
| | | // 查询设备使用记录查询该订单的使用记录 |
| | | List<InsOrderDeviceRecordDto> deviceRecordDtoList = insOrderDeviceRecordMapper.selectDeviceNumber(insSample.getInsOrderId()); |
| | | Set<String> recordCodeset = deviceRecordDtoList.stream().map(InsOrderDeviceRecordDto::getManagementNumber).collect(Collectors.toSet()); |
| | | |
| | | // 获取订单设备编号 |
| | | List<InsProductResult> resultList = insProductResultMapper.selectResultByOrderId(insSample.getInsOrderId()); |
| | | Set<String> deviceCodeSet = new HashSet<>(); |
| | | for (InsProductResult result : resultList) { |
| | | // 添加设备编号 |
| | | List<JSONObject> jsonObjects = JSON.parseArray(result.getEquipValue(), JSONObject.class); |
| | | for (JSONObject jsonObject : jsonObjects) { |
| | | if (!"".equals(jsonObject.get("v") + "")) { |
| | | List<String> v = StrUtil.split(jsonObject.get("v") + "", ","); |
| | | deviceCodeSet.addAll(v); |
| | | } |
| | | String usePerson = user == null ? "" : user.getName(); |
| | | String sampleCode = StringUtils.isNotBlank(sample.getSampleCode()) |
| | | ? sample.getSampleCode() : order.getEntrustCode(); |
| | | for (Integer deviceId : deviceIds) { |
| | | if (deviceId == null) { |
| | | continue; |
| | | } |
| | | InsOrderDeviceRecord existing = insOrderDeviceRecordMapper.selectOne( |
| | | Wrappers.<InsOrderDeviceRecord>lambdaQuery() |
| | | .eq(InsOrderDeviceRecord::getInsOrderId, orderId) |
| | | .eq(InsOrderDeviceRecord::getDeviceId, deviceId) |
| | | .eq(InsOrderDeviceRecord::getSampleCode, sampleCode) |
| | | .last("limit 1")); |
| | | if (existing != null) { |
| | | // 只补自动生成但尚未填写的记录 |
| | | if (existing.getUseStartDate() != null) { |
| | | continue; |
| | | } |
| | | InsOrderDeviceRecord update = new InsOrderDeviceRecord(); |
| | | update.setId(existing.getId()); |
| | | if (StringUtils.isBlank(existing.getTemperature())) { |
| | | update.setTemperature(temperature); |
| | | } |
| | | if (StringUtils.isBlank(existing.getHumidity())) { |
| | | update.setHumidity(humidity); |
| | | } |
| | | if (useStartDate != null) { |
| | | update.setUseStartDate(useStartDate); |
| | | update.setUseEndDate(useEndDate); |
| | | } |
| | | if (existing.getUsePersonId() == null) { |
| | | update.setUsePersonId(userId); |
| | | } |
| | | if (StringUtils.isBlank(existing.getUsePerson())) { |
| | | update.setUsePerson(usePerson); |
| | | } |
| | | insOrderDeviceRecordMapper.updateById(update); |
| | | continue; |
| | | } |
| | | InsOrderDeviceRecord record = new InsOrderDeviceRecord(); |
| | | record.setInsOrderId(orderId); |
| | | record.setDeviceId(deviceId); |
| | | record.setSampleCode(sampleCode); |
| | | record.setTemperature(temperature); |
| | | record.setHumidity(humidity); |
| | | record.setUseStartDate(useStartDate); |
| | | record.setUseEndDate(useEndDate); |
| | | record.setUseBefore(1); |
| | | record.setUseAfter(1); |
| | | record.setUsePersonId(userId); |
| | | record.setUsePerson(usePerson); |
| | | insOrderDeviceRecordMapper.insert(record); |
| | | } |
| | | // 1.判断是否有没有添加的使用记录 |
| | | Set<String> orderDeviceNumbers = getDeviceDifference(deviceCodeSet, recordCodeset); |
| | | // 添加使用记录, 根据编号查询设备id |
| | | if (CollectionUtils.isNotEmpty(orderDeviceNumbers)) { |
| | | List<Integer> orderDeviceIds = insOrderDeviceRecordMapper.selectDeviceIdsByNumbers(orderDeviceNumbers); |
| | | List<InsOrderDeviceRecord> collect = orderDeviceIds.stream().map(deviceId -> { |
| | | InsOrderDeviceRecord insOrderDeviceRecord = new InsOrderDeviceRecord(); |
| | | insOrderDeviceRecord.setInsOrderId(insSample.getInsOrderId()); |
| | | insOrderDeviceRecord.setDeviceId(deviceId); |
| | | insOrderDeviceRecord.setSampleCode(order.getEntrustCode()); |
| | | insOrderDeviceRecord.setUseBefore(1); |
| | | insOrderDeviceRecord.setUseAfter(1); |
| | | insOrderDeviceRecord.setUsePerson(user.getName()); |
| | | insOrderDeviceRecord.setUsePersonId(user.getId()); |
| | | return insOrderDeviceRecord; |
| | | }).collect(Collectors.toList()); |
| | | |
| | | insOrderDeviceRecordService.saveBatch(collect); |
| | | |
| | | } |
| | | |
| | | // 2.判断是否取消了设备使用 |
| | | Set<String> repoprNumbers = getDeviceDifference(recordCodeset, deviceCodeSet); |
| | | if (CollectionUtils.isNotEmpty(repoprNumbers)) { |
| | | List<Integer> reportDeviceIds = insOrderDeviceRecordMapper.selectDeviceIdsByNumbers(repoprNumbers); |
| | | insOrderDeviceRecordMapper.delete(Wrappers.<InsOrderDeviceRecord>lambdaQuery() |
| | | .in(InsOrderDeviceRecord::getDeviceId, reportDeviceIds) |
| | | .eq(InsOrderDeviceRecord::getInsOrderId, insSample.getInsOrderId())); |
| | | } |
| | | } |
| | | |
| | | private static Set<String> getDeviceDifference(Set<String> number1, Set<String> number2) { |
| | | return number1.stream().filter(s1 -> number2.stream().noneMatch(s2 -> s1.equals(s2))) |
| | | .collect(Collectors.toSet()); |
| | | } |
| | | |
| | | |
| | |
| | | } |
| | | |
| | | // 检验人员提交复核时不生成报告;全部试验室复核通过后生成报告。 |
| | | if (report == null || StringUtils.isBlank(report.getUrl())) { |
| | | boolean returnedFromReport = report != null && Objects.equals(report.getIsPass(), 0); |
| | | if (report == null || StringUtils.isBlank(report.getUrl()) || returnedFromReport) { |
| | | this.generateReport(orderId, DETECTION_REPORT, writeUserId); |
| | | } |
| | | // 直绑模板订单同时生成检验报告,两份文件共用同一条审批记录。 |
| | | if (directTemplateOrder && (report == null || StringUtils.isBlank(report.getInspectionUrl()))) { |
| | | if (directTemplateOrder && (report == null || StringUtils.isBlank(report.getInspectionUrl()) |
| | | || returnedFromReport)) { |
| | | this.generateReport(orderId, INSPECTION_REPORT, writeUserId); |
| | | } |
| | | report = insReportMapper.selectOne(Wrappers.<InsReport>lambdaQuery() |
| | |
| | | } |
| | | Configure configure = Configure.builder() |
| | | .bind("deviceList", new HackLoopTableRenderPolicy()) |
| | | .bind("r", new HackLoopTableRenderPolicy(true)) |
| | | .bind("r", new ReportResultTableRenderPolicy()) |
| | | .setValidErrorHandler(new PreserveReportPicturePlaceholderHandler()) |
| | | .useSpringEL(true) |
| | | .build(); |