6 changed files with 130 additions and 6 deletions
			
			
		| @ -0,0 +1,28 @@ | |||||
|  | package com.userinformation.backend.controller; | ||||
|  | 
 | ||||
|  | import com.userinformation.backend.service.QualityCompareService; | ||||
|  | import com.userinformation.backend.util.RequestResult; | ||||
|  | import org.springframework.web.bind.annotation.RequestMapping; | ||||
|  | import org.springframework.web.bind.annotation.RestController; | ||||
|  | 
 | ||||
|  | import java.io.IOException; | ||||
|  | 
 | ||||
|  | /** | ||||
|  |  * @author: xiaowuler | ||||
|  |  * @createTime: 2022-05-05 16:31 | ||||
|  |  * @describe: 质控对比 控制层 | ||||
|  |  */ | ||||
|  | @RestController | ||||
|  | @RequestMapping("/qualityCompare") | ||||
|  | public class QualityCompareController { | ||||
|  | 
 | ||||
|  |     private final QualityCompareService qualityCompareService; | ||||
|  |     public QualityCompareController(QualityCompareService qualityCompareService) { | ||||
|  |         this.qualityCompareService = qualityCompareService; | ||||
|  |     } | ||||
|  | 
 | ||||
|  |     @RequestMapping("findByTimeAndElement") | ||||
|  |     public RequestResult findByTimeAndElement(String date, String var, String locate) throws IOException { | ||||
|  |         return RequestResult.success(qualityCompareService.findByTimeAndElement(date, var, locate)); | ||||
|  |     } | ||||
|  | } | ||||
| @ -0,0 +1,84 @@ | |||||
|  | package com.userinformation.backend.service; | ||||
|  | 
 | ||||
|  | import org.springframework.beans.factory.annotation.Value; | ||||
|  | import org.springframework.stereotype.Service; | ||||
|  | 
 | ||||
|  | import java.io.File; | ||||
|  | import java.io.IOException; | ||||
|  | import java.nio.file.Files; | ||||
|  | import java.nio.file.Paths; | ||||
|  | import java.time.Duration; | ||||
|  | import java.time.LocalDateTime; | ||||
|  | import java.time.format.DateTimeFormatter; | ||||
|  | import java.util.*; | ||||
|  | import java.util.concurrent.atomic.AtomicInteger; | ||||
|  | import java.util.stream.Collectors; | ||||
|  | 
 | ||||
|  | /** | ||||
|  |  * @author: xiaowuler | ||||
|  |  * @createTime: 2022-05-05 16:36 | ||||
|  |  * @describe: 质控对比服务层 | ||||
|  |  */ | ||||
|  | @Service | ||||
|  | public class QualityCompareService { | ||||
|  | 
 | ||||
|  |     private static final String SEPARATOR = ","; | ||||
|  |     private static final DateTimeFormatter TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); | ||||
|  |     private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy_M_d_HH"); | ||||
|  | 
 | ||||
|  |     @Value("${custom.quality-path}") | ||||
|  |     private String qualityPath; | ||||
|  | 
 | ||||
|  |     public List<Float[]> findByTimeAndElement(String date, String var, String locate) throws IOException { | ||||
|  | //        String filepath = qualityPath + var + "-" + date + ".CSV";
 | ||||
|  |         String filepath = "C:\\Users\\xiaowuler\\Desktop\\原始产品数据\\MEXT-2021-05-01.CSV"; | ||||
|  |         LocalDateTime time = LocalDateTime.parse("2021_" + date, DATE_FORMATTER).withHour(0).plusDays(1); | ||||
|  |         return read(filepath, time); | ||||
|  |     } | ||||
|  | 
 | ||||
|  |     private List<Float[]> read(String filepath, LocalDateTime time) throws IOException { | ||||
|  |         List<String> lines = Files.readAllLines(Paths.get(filepath)); | ||||
|  |         // 将文件数据进行反转,从最后一行开始读取
 | ||||
|  |         Collections.reverse(lines); | ||||
|  | 
 | ||||
|  |         List<Float[]> data = new ArrayList<>(288); | ||||
|  |         for(String line : lines){ | ||||
|  |             List<String> rows = Arrays.asList(line.split(SEPARATOR)); | ||||
|  |             // 相关数据时间转换,以比较,并按照10分钟间隔过滤
 | ||||
|  |             LocalDateTime targetTime = LocalDateTime.parse(rows.get(0), TIME_FORMATTER); | ||||
|  |             if (targetTime.isAfter(time)) { | ||||
|  |                 continue; | ||||
|  |             } | ||||
|  | 
 | ||||
|  |             time = fillNaN(time, targetTime, data); | ||||
|  |             data.add(getValues(rows)); | ||||
|  |             time = time.minusMinutes(5); | ||||
|  |         } | ||||
|  | 
 | ||||
|  |         Collections.reverse(data); | ||||
|  |         AtomicInteger index = new AtomicInteger(0); | ||||
|  |         // 匹配老师处理的数据
 | ||||
|  |         return data.stream().filter(values -> index.getAndIncrement() % 12 != 0).collect(Collectors.toList()); | ||||
|  |     } | ||||
|  | 
 | ||||
|  |     private LocalDateTime fillNaN(LocalDateTime time, LocalDateTime targetTime, List<Float[]> data){ | ||||
|  |         if (Duration.between(targetTime, time).toMinutes() > 5) { | ||||
|  |             Float[] values = new Float[801]; | ||||
|  |             Arrays.fill(values, Float.NaN); | ||||
|  |             data.add(values); | ||||
|  |             time = time.minusMinutes(10); | ||||
|  |             fillNaN(time, targetTime, data); | ||||
|  |         } | ||||
|  |         return time; | ||||
|  |     } | ||||
|  | 
 | ||||
|  |     private Float[] getValues(List<String> rows){ | ||||
|  |         Float[] values = rows.stream().skip(7).limit(801).map(row -> Float.parseFloat(row)).toArray(Float[]::new); | ||||
|  |         int length = values.length; | ||||
|  |         if (length != 801) { | ||||
|  |             values = Arrays.copyOf(values, 801); | ||||
|  |             Arrays.fill(values, length - 1, 800, Float.NaN); | ||||
|  |         } | ||||
|  |         return values; | ||||
|  |     } | ||||
|  | } | ||||
					Loading…
					
					
				
		Reference in new issue