|
|
@@ -1,13 +1,27 @@
|
|
|
package com.uas.eis.serviceImpl;
|
|
|
|
|
|
import com.uas.eis.dao.BaseDao;
|
|
|
+import com.uas.eis.entity.DataChip;
|
|
|
import com.uas.eis.service.DataDealService;
|
|
|
+import com.uas.eis.utils.SmbUtil;
|
|
|
+import jcifs.smb.SmbFile;
|
|
|
+import jcifs.smb.SmbFileInputStream;
|
|
|
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
|
|
+import org.apache.poi.ss.usermodel.Row;
|
|
|
+import org.apache.poi.ss.usermodel.Sheet;
|
|
|
+import org.apache.poi.ss.usermodel.Workbook;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.scheduling.annotation.Async;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
+import java.io.BufferedInputStream;
|
|
|
+import java.io.InputStream;
|
|
|
+import java.text.SimpleDateFormat;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Date;
|
|
|
+import java.util.List;
|
|
|
import java.util.concurrent.CountDownLatch;
|
|
|
|
|
|
/**
|
|
|
@@ -24,24 +38,103 @@ public class DataDealServiceImpl implements DataDealService {
|
|
|
|
|
|
@Override
|
|
|
@Async("taskExecutor")
|
|
|
- public void EDCDataDeal(String path, CountDownLatch countDownLatch) {
|
|
|
- logger.info("线程-" + Thread.currentThread().getId() + "在执行写入");
|
|
|
- int k = 0;
|
|
|
+ public void EDCDataDeal(DataChip dataChip, CountDownLatch countDownLatch) {
|
|
|
try {
|
|
|
-
|
|
|
- for (int i = 0; i < 1000000000; i++) {
|
|
|
- k++;
|
|
|
- for (int j = 0; j < 10000; j++) {
|
|
|
- // k++;
|
|
|
+ //读取文件EXCEL解析
|
|
|
+ String FilePath=dataChip.getDatapath_();
|
|
|
+ Date testdate = dataChip.getTestdate_();
|
|
|
+ String TableName = "RECORD$"+new SimpleDateFormat("yyMMdd").format(testdate);
|
|
|
+ //打开文件流
|
|
|
+ SmbFile smbFile = SmbUtil.getCurrentFile(FilePath);
|
|
|
+ InputStream is = new BufferedInputStream(new SmbFileInputStream(smbFile));
|
|
|
+ Workbook book = new HSSFWorkbook(is);
|
|
|
+ Sheet st=book.getSheet("Data");
|
|
|
+ Row labelRow = st.getRow(13);
|
|
|
+ List<String> items = new ArrayList<>();
|
|
|
+ for(int i=2 ; i <=labelRow.getPhysicalNumberOfCells(); i++){
|
|
|
+ items.add(labelRow.getCell(i).getStringCellValue().replace((i-1)+" ","").trim());
|
|
|
+ }
|
|
|
+ //关键信息解析
|
|
|
+ StringBuffer mainBuffer = new StringBuffer();
|
|
|
+ int mainBeginRow = 14;
|
|
|
+ List<String> itemCols = new ArrayList<>();
|
|
|
+ for(int j = 0 ; j < items.size(); j++ ){
|
|
|
+ mainBuffer.append("INSERT INTO DATACENTER$CHIP_DATAMAIN(CHIPCODE_,DATE_,ITEM_NAME,DETNO,BIAS1,BIAS2,BIAS3,MINLIMIT,MAXLIMIT,AVG_,STDEV,MIN_,MAX_) VALUES (");
|
|
|
+ mainBuffer.append("'"+dataChip.getChipcode_()+"',SYSDATE,'"+items.get(j)+"',"+(j+1)+",");
|
|
|
+ mainBuffer.append("'"+st.getRow(mainBeginRow).getCell(j+2).getStringCellValue().trim()+"',");
|
|
|
+ mainBuffer.append("'"+st.getRow(mainBeginRow+1).getCell(j+2).getStringCellValue().trim()+"',");
|
|
|
+ mainBuffer.append("'"+st.getRow(mainBeginRow+2).getCell(j+2).getStringCellValue().trim()+"',");
|
|
|
+ mainBuffer.append("'"+st.getRow(mainBeginRow+3).getCell(j+2).getStringCellValue().trim()+"',");
|
|
|
+ mainBuffer.append("'"+st.getRow(mainBeginRow+4).getCell(j+2).getStringCellValue().trim()+"',");
|
|
|
+ mainBuffer.append("'"+st.getRow(mainBeginRow+5).getCell(j+2).getStringCellValue().trim()+"',");
|
|
|
+ mainBuffer.append("'"+st.getRow(mainBeginRow+6).getCell(j+2).getStringCellValue().trim()+"',");
|
|
|
+ mainBuffer.append("'"+st.getRow(mainBeginRow+7).getCell(j+2).getStringCellValue().trim()+"',");
|
|
|
+ mainBuffer.append("'"+st.getRow(mainBeginRow+8).getCell(j+2).getStringCellValue().trim()+"'); ");
|
|
|
+ itemCols.add("ITEM"+(j+1));
|
|
|
+ }
|
|
|
+ List<String> sqls =new ArrayList<String>();
|
|
|
+ sqls.add("BEGIN "+mainBuffer.toString()+" END;");
|
|
|
+ int allRow = st.getLastRowNum()-23;//总行数
|
|
|
+ //分批3000行处理
|
|
|
+ int a = allRow / 3000;
|
|
|
+ int b = allRow % 3000;
|
|
|
+ StringBuffer detailBuffer=new StringBuffer();
|
|
|
+ String dynamicCols = String.join(",",itemCols);
|
|
|
+ String ValueSql = "";
|
|
|
+ String cellValue= "";
|
|
|
+ Row dataRow = null;
|
|
|
+ if(a > 0) {
|
|
|
+ for ( int i = 0 ; i < a ; i++){
|
|
|
+ detailBuffer.setLength(0);
|
|
|
+ for(int k = i*3000 ; k < (i+1)*3000 ; k++){
|
|
|
+ detailBuffer.append("INSERT INTO "+TableName+"@SHENAI_EDCDATA (CHIPCODE,DETNO,"+String.join(",",dynamicCols)+") VALUES " +
|
|
|
+ "('"+dataChip.getChipcode_()+"',"+(k+1));
|
|
|
+ ValueSql = "";
|
|
|
+ dataRow = st.getRow(k+24);
|
|
|
+ for ( int m = 0 ; m < items.size() ; m++) {
|
|
|
+ cellValue = dataRow.getCell(m+2).getStringCellValue();
|
|
|
+ ValueSql += cellValue !=null? "'"+cellValue.trim()+"'" : "''";
|
|
|
+ if(m < items.size()-1 ) {
|
|
|
+ ValueSql += ",";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ detailBuffer.append(","+ValueSql+");");
|
|
|
+ }
|
|
|
+ sqls.add(" BEGIN "+detailBuffer.toString()+" END;");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(b >0 ){
|
|
|
+ detailBuffer.setLength(0);
|
|
|
+ for(int k = 0 ; k < b ; k++){
|
|
|
+ detailBuffer.append("INSERT INTO "+TableName+"@SHENAI_EDCDATA (CHIPCODE,DETNO,"+String.join(",",dynamicCols)+") VALUES " +
|
|
|
+ "('"+dataChip.getChipcode_()+"',"+(a*3000+k+1));
|
|
|
+ ValueSql = "";
|
|
|
+ dataRow = st.getRow(a*3000+k+24);
|
|
|
+ for ( int m = 0 ; m < items.size() ; m++) {
|
|
|
+ cellValue = dataRow.getCell(m+2).getStringCellValue();
|
|
|
+ ValueSql += cellValue !=null? "'"+cellValue.trim()+"'" : "''";
|
|
|
+ if(m < items.size()-1 ) {
|
|
|
+ ValueSql += ",";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ detailBuffer.append(","+ValueSql+");");
|
|
|
}
|
|
|
+ sqls.add("BEGIN "+detailBuffer.toString()+" END;");
|
|
|
}
|
|
|
+ //插入归档
|
|
|
+
|
|
|
+ //更新为失效状态
|
|
|
+ sqls.add("UPDATE CHIPTABLE@SHENAI_EDCDATA SET STATUS_=0 WHERE CHIP_CODE='"+dataChip.getChipcode_()+"'");
|
|
|
+ //插入有效
|
|
|
+ sqls.add("INSERT INTO CHIPTABLE@SHENAI_EDCDATA (CHIP_CODE,TABLE_NAME,STATUS_) VALUES ('"+dataChip.getChipcode_()+"','"+TableName+"',-1)");
|
|
|
+ //更新读写状态
|
|
|
+ sqls.add("UPDATE DATACENTER$CHIP SET READSTATUS_=-1 WHERE ID_="+dataChip.getId_());//更新成功执行
|
|
|
+ baseDao.getJdbcTemplate().batchUpdate(sqls.toArray(new String[sqls.size()]));
|
|
|
}catch (Exception e) {
|
|
|
+ baseDao.execute("UPDATE DATACENTER$CHIP SET READSTATUS_=-99 WHERE ID_="+dataChip.getId_());
|
|
|
e.printStackTrace();
|
|
|
-
|
|
|
} finally {
|
|
|
countDownLatch.countDown();
|
|
|
}
|
|
|
- System.out.println("线程" + Thread.currentThread().getId() + "执行结束:"+k);
|
|
|
-
|
|
|
}
|
|
|
}
|