package com.uas.eis.task; import com.uas.eis.core.TableCreator; import com.uas.eis.core.config.SpObserver; import com.uas.eis.dao.BaseDao; import com.uas.eis.dao.SqlRowList; import com.uas.eis.entity.DataChip; import com.uas.eis.entity.DataChipTestLog; import com.uas.eis.service.FileParseService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.BeanPropertyRowMapper; import org.springframework.stereotype.Component; import java.util.Date; import java.util.List; import java.util.concurrent.CountDownLatch; import java.util.stream.Collectors; /** * 赛美特文件对接解析 * */ @Component public class FileParseTask { private final Logger logger = LoggerFactory.getLogger(this.getClass()); @Autowired private BaseDao baseDao; @Autowired private FileParseService fileParseService; @Autowired private TableCreator tableCreator; public void dataDeal(){ //wafer_id='BF241002603#01' AND List dataChipTestLogs = baseDao.getJdbcTemplate().query("select wafer_id,lot_id,status,data_path,counter_path from (select wafer_id,lot_id,status,data_path,counter_path from " + " DATACENTER$MESFILE WHERE DEALSTATE_=0 ORDER BY DBID_ ASC ) where " + " rownum<=10", new BeanPropertyRowMapper<>(DataChipTestLog.class)); List distinctLotIds = dataChipTestLogs.stream().map(DataChipTestLog::getLot_id).distinct() .collect(Collectors.toList()); SpObserver.putSp("datacenter"); for (String lotId : distinctLotIds){ tableCreator.createTable("DATA$"+lotId); } SpObserver.back(); logger.info("Data文件解析执行开始:文件数"+dataChipTestLogs.size()); Date date = new Date(); if(!dataChipTestLogs.isEmpty()){ final CountDownLatch countDownLatch = new CountDownLatch(dataChipTestLogs.size()); try { dataChipTestLogs.stream().forEach(dataChipTestLog -> { fileParseService.EDCDataDeal(dataChipTestLog,countDownLatch); }); countDownLatch.await(); } catch (InterruptedException e) { e.printStackTrace(); } } // baseDao.execute("INSERT INTO DATACENTER$TASKLOG(NAME_,DURATION_) VALUES ('Data文件解析',"+(new Date().getTime()-date.getTime())/1000+")"); logger.info("Data文件解析执行结束:用时"+((new Date().getTime()-date.getTime())/1000)); } }