|
@@ -4,6 +4,14 @@ import com.uas.eis.dao.BaseDao;
|
|
|
import com.uas.eis.entity.DataChip;
|
|
import com.uas.eis.entity.DataChip;
|
|
|
import com.uas.eis.service.DataDealService;
|
|
import com.uas.eis.service.DataDealService;
|
|
|
import com.uas.eis.utils.SmbUtil;
|
|
import com.uas.eis.utils.SmbUtil;
|
|
|
|
|
+import com.uas.eis.utils.StringUtil;
|
|
|
|
|
+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;
|
|
|
import jcifs.smb.SmbFile;
|
|
import jcifs.smb.SmbFile;
|
|
|
import jcifs.smb.SmbFileInputStream;
|
|
import jcifs.smb.SmbFileInputStream;
|
|
|
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
|
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
|
|
@@ -16,141 +24,145 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.scheduling.annotation.Async;
|
|
import org.springframework.scheduling.annotation.Async;
|
|
|
import org.springframework.stereotype.Service;
|
|
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;
|
|
|
|
|
-
|
|
|
|
|
-/**
|
|
|
|
|
- * @Author: zhouy
|
|
|
|
|
- * @Date: 2020/5/22 13:55
|
|
|
|
|
- */
|
|
|
|
|
@Service
|
|
@Service
|
|
|
-public class DataDealServiceImpl implements DataDealService {
|
|
|
|
|
-
|
|
|
|
|
- private final Logger logger = LoggerFactory.getLogger(this.getClass());
|
|
|
|
|
|
|
+public class DataDealServiceImpl implements DataDealService
|
|
|
|
|
+{
|
|
|
|
|
+ private final Logger logger = LoggerFactory.getLogger(getClass());
|
|
|
|
|
|
|
|
@Autowired
|
|
@Autowired
|
|
|
BaseDao baseDao;
|
|
BaseDao baseDao;
|
|
|
|
|
|
|
|
- @Override
|
|
|
|
|
@Async("taskExecutor")
|
|
@Async("taskExecutor")
|
|
|
|
|
+ @Override
|
|
|
public void EDCDataDeal(DataChip dataChip, CountDownLatch countDownLatch) {
|
|
public void EDCDataDeal(DataChip dataChip, CountDownLatch countDownLatch) {
|
|
|
try {
|
|
try {
|
|
|
- logger.info(dataChip.getChipcode_()+"Data文件解析开始");
|
|
|
|
|
- //读取文件EXCEL解析
|
|
|
|
|
- String FilePath=dataChip.getDatapath_();
|
|
|
|
|
|
|
+ this.logger.info(new StringBuilder().append(dataChip.getChipcode_()).append("Data文件解析开始").toString());
|
|
|
|
|
+
|
|
|
|
|
+ String FilePath = dataChip.getDatapath_();
|
|
|
Date testdate = dataChip.getTestdate_();
|
|
Date testdate = dataChip.getTestdate_();
|
|
|
- String TableName = "RECORD$"+new SimpleDateFormat("yyMMdd").format(testdate);
|
|
|
|
|
- //打开文件流
|
|
|
|
|
|
|
+ String TableName = new StringBuilder().append("RECORD$").append(new SimpleDateFormat("yyMMdd").format(testdate)).toString();
|
|
|
|
|
+
|
|
|
SmbFile smbFile = SmbUtil.getCurrentFile(FilePath);
|
|
SmbFile smbFile = SmbUtil.getCurrentFile(FilePath);
|
|
|
- if(smbFile.exists()){
|
|
|
|
|
|
|
+ if (smbFile.exists()) {
|
|
|
InputStream is = new BufferedInputStream(new SmbFileInputStream(smbFile));
|
|
InputStream is = new BufferedInputStream(new SmbFileInputStream(smbFile));
|
|
|
Workbook book = new HSSFWorkbook(is);
|
|
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());
|
|
|
|
|
|
|
+ Sheet st = book.getSheetAt(0);
|
|
|
|
|
+ int labelIndex = 13;
|
|
|
|
|
+ int mainBeginRow = 14;
|
|
|
|
|
+ int dataStart = 24;
|
|
|
|
|
+ if ((StringUtil.hasText(dataChip.getJdfpath_())) && (dataChip.getJdfpath_().endsWith(".njdf"))) {
|
|
|
|
|
+ labelIndex = 18;
|
|
|
|
|
+ mainBeginRow = 19;
|
|
|
|
|
+ dataStart = 30;
|
|
|
|
|
+ }
|
|
|
|
|
+ Row labelRow = st.getRow(labelIndex);
|
|
|
|
|
+ List items = new ArrayList();
|
|
|
|
|
+ for (int i = 2; i <= labelRow.getPhysicalNumberOfCells(); i++) {
|
|
|
|
|
+ items.add(labelRow.getCell(i).getStringCellValue().replace(new StringBuilder().append(i - 1).append(" ").toString(), "").trim());
|
|
|
}
|
|
}
|
|
|
- //关键信息解析
|
|
|
|
|
|
|
+
|
|
|
StringBuffer mainBuffer = new StringBuffer();
|
|
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 itemCols = new ArrayList();
|
|
|
|
|
+ for (int j = 0; j < items.size(); j++) {
|
|
|
|
|
+ itemCols.add(new StringBuilder().append("ITEM").append(j + 1).toString());
|
|
|
|
|
+ if ((!"SOT-SOT".equals(items.get(j))) || (st.getRow(mainBeginRow).getCell(j + 2) != null))
|
|
|
|
|
+ {
|
|
|
|
|
+ mainBuffer.append("INSERT INTO DATACENTER$CHIP_DATAMAIN(CHIPCODE_,DATE_,ITEM_NAME,DETNO,BIAS1,BIAS2,BIAS3,MINLIMIT,MAXLIMIT,AVG_,STDEV,MIN_,MAX_) VALUES (");
|
|
|
|
|
+ mainBuffer.append(new StringBuilder().append("'").append(dataChip.getChipcode_()).append("',SYSDATE,'").append((String)items.get(j)).append("',").append(j + 1).append(",").toString());
|
|
|
|
|
+ mainBuffer.append(new StringBuilder().append("'").append(st.getRow(mainBeginRow).getCell(j + 2).getStringCellValue().trim()).append("',").toString());
|
|
|
|
|
+ mainBuffer.append(new StringBuilder().append("'").append(st.getRow(mainBeginRow + 1).getCell(j + 2).getStringCellValue().trim()).append("',").toString());
|
|
|
|
|
+ mainBuffer.append(new StringBuilder().append("'").append(st.getRow(mainBeginRow + 2).getCell(j + 2).getStringCellValue().trim()).append("',").toString());
|
|
|
|
|
+ mainBuffer.append(new StringBuilder().append("'").append(st.getRow(mainBeginRow + 3).getCell(j + 2).getStringCellValue().trim()).append("',").toString());
|
|
|
|
|
+ mainBuffer.append(new StringBuilder().append("'").append(st.getRow(mainBeginRow + 4).getCell(j + 2).getStringCellValue().trim()).append("',").toString());
|
|
|
|
|
+ mainBuffer.append(new StringBuilder().append("'").append(st.getRow(mainBeginRow + 5).getCell(j + 2).getStringCellValue().trim()).append("',").toString());
|
|
|
|
|
+ switch (st.getRow(mainBeginRow + 6).getCell(j + 2).getCellType()) {
|
|
|
|
|
+ case 0:
|
|
|
|
|
+ mainBuffer.append(new StringBuilder().append("'").append(st.getRow(mainBeginRow + 6).getCell(j + 2).getNumericCellValue()).append("',").toString());
|
|
|
|
|
+ break;
|
|
|
|
|
+ case 1:
|
|
|
|
|
+ mainBuffer.append(new StringBuilder().append("'").append(st.getRow(mainBeginRow + 6).getCell(j + 2).getStringCellValue().trim()).append("',").toString());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ mainBuffer.append(new StringBuilder().append("'").append(st.getRow(mainBeginRow + 7).getCell(j + 2).getStringCellValue().trim()).append("',").toString());
|
|
|
|
|
+ mainBuffer.append(new StringBuilder().append("'").append(st.getRow(mainBeginRow + 8).getCell(j + 2).getStringCellValue().trim()).append("'); ").toString());
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
- List<String> sqls =new ArrayList<String>();
|
|
|
|
|
- sqls.add("DELETE FROM DATACENTER$CHIP_DATAMAIN WHERE CHIPCODE_='"+dataChip.getChipcode_()+"'");
|
|
|
|
|
- sqls.add("BEGIN "+mainBuffer.toString()+" END;");
|
|
|
|
|
- sqls.add("DELETE FROM "+TableName+"@SHENAI_EDCDATA WHERE CHIPCODE='"+dataChip.getChipcode_()+"'");
|
|
|
|
|
|
|
+ List sqls = new ArrayList();
|
|
|
|
|
+ sqls.add(new StringBuilder().append("DELETE FROM DATACENTER$CHIP_DATAMAIN WHERE CHIPCODE_='").append(dataChip.getChipcode_()).append("'").toString());
|
|
|
|
|
+ sqls.add(new StringBuilder().append("BEGIN ").append(mainBuffer.toString()).append(" END;").toString());
|
|
|
|
|
+ sqls.add(new StringBuilder().append("DELETE FROM ").append(TableName).append("@SHENAI_EDCDATA WHERE CHIPCODE='").append(dataChip.getChipcode_()).append("'").toString());
|
|
|
|
|
+
|
|
|
|
|
+ int allRow = st.getLastRowNum() - (dataStart - 1);
|
|
|
|
|
|
|
|
- int allRow = st.getLastRowNum()-23;//总行数
|
|
|
|
|
- //分批3000行处理
|
|
|
|
|
int a = allRow / 3000;
|
|
int a = allRow / 3000;
|
|
|
int b = allRow % 3000;
|
|
int b = allRow % 3000;
|
|
|
- StringBuffer detailBuffer=new StringBuffer();
|
|
|
|
|
- String dynamicCols = String.join(",",itemCols);
|
|
|
|
|
|
|
+ StringBuffer detailBuffer = new StringBuffer();
|
|
|
|
|
+ String dynamicCols = String.join(",", itemCols);
|
|
|
String ValueSql = "";
|
|
String ValueSql = "";
|
|
|
- String cellValue= "";
|
|
|
|
|
|
|
+ String cellValue = "";
|
|
|
Row dataRow = null;
|
|
Row dataRow = null;
|
|
|
- if(a > 0) {
|
|
|
|
|
- for ( int i = 0 ; i < a ; i++){
|
|
|
|
|
|
|
+ if (a > 0) {
|
|
|
|
|
+ for (int i = 0; i < a; i++) {
|
|
|
detailBuffer.setLength(0);
|
|
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));
|
|
|
|
|
|
|
+ for (int k = i * 3000; k < (i + 1) * 3000; k++) {
|
|
|
|
|
+ detailBuffer.append(new StringBuilder().append("INSERT INTO ").append(TableName).append("@SHENAI_EDCDATA (CHIPCODE,DETNO,").append(String.join(",", new CharSequence[] { dynamicCols })).append(") VALUES ").append("('")
|
|
|
|
|
+ .append(dataChip
|
|
|
|
|
+ .getChipcode_()).append("',").append(k + 1).toString());
|
|
|
ValueSql = "";
|
|
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 += ",";
|
|
|
|
|
|
|
+ dataRow = st.getRow(k + dataStart);
|
|
|
|
|
+ for (int m = 0; m < items.size(); m++) {
|
|
|
|
|
+ cellValue = dataRow.getCell(m + 2).getStringCellValue();
|
|
|
|
|
+ ValueSql = new StringBuilder().append(ValueSql).append(cellValue != null ? new StringBuilder().append("'").append(cellValue.trim()).append("'").toString() : "''").toString();
|
|
|
|
|
+ if (m < items.size() - 1) {
|
|
|
|
|
+ ValueSql = new StringBuilder().append(ValueSql).append(",").toString();
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- detailBuffer.append(","+ValueSql+");");
|
|
|
|
|
|
|
+ detailBuffer.append(new StringBuilder().append(",").append(ValueSql).append(");").toString());
|
|
|
}
|
|
}
|
|
|
- sqls.add(" BEGIN "+detailBuffer.toString()+" END;");
|
|
|
|
|
|
|
+ sqls.add(new StringBuilder().append(" BEGIN ").append(detailBuffer.toString()).append(" END;").toString());
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- if(b >0 ){
|
|
|
|
|
|
|
+ if (b > 0) {
|
|
|
detailBuffer.setLength(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));
|
|
|
|
|
|
|
+ for (int k = 0; k < b; k++) {
|
|
|
|
|
+ detailBuffer.append(new StringBuilder().append("INSERT INTO ").append(TableName).append("@SHENAI_EDCDATA (CHIPCODE,DETNO,").append(String.join(",", new CharSequence[] { dynamicCols })).append(") VALUES ").append("('")
|
|
|
|
|
+ .append(dataChip
|
|
|
|
|
+ .getChipcode_()).append("',").append(a * 3000 + k + 1).toString());
|
|
|
ValueSql = "";
|
|
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 += ",";
|
|
|
|
|
|
|
+ dataRow = st.getRow(a * 3000 + k + dataStart);
|
|
|
|
|
+ for (int m = 0; m < items.size(); m++) {
|
|
|
|
|
+ cellValue = dataRow.getCell(m + 2).getStringCellValue();
|
|
|
|
|
+ ValueSql = new StringBuilder().append(ValueSql).append(cellValue != null ? new StringBuilder().append("'").append(cellValue.trim()).append("'").toString() : "''").toString();
|
|
|
|
|
+ if (m < items.size() - 1) {
|
|
|
|
|
+ ValueSql = new StringBuilder().append(ValueSql).append(",").toString();
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- detailBuffer.append(","+ValueSql+");");
|
|
|
|
|
|
|
+ detailBuffer.append(new StringBuilder().append(",").append(ValueSql).append(");").toString());
|
|
|
}
|
|
}
|
|
|
- sqls.add("BEGIN "+detailBuffer.toString()+" END;");
|
|
|
|
|
|
|
+ sqls.add(new StringBuilder().append("BEGIN ").append(detailBuffer.toString()).append(" END;").toString());
|
|
|
}
|
|
}
|
|
|
- //插入归档
|
|
|
|
|
|
|
|
|
|
- //更新为失效状态
|
|
|
|
|
- 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()]));
|
|
|
|
|
- }else {
|
|
|
|
|
- //文件不存在
|
|
|
|
|
- baseDao.execute("UPDATE DATACENTER$CHIP SET READSTATUS_=-100 WHERE ID_="+dataChip.getId_());
|
|
|
|
|
- }
|
|
|
|
|
- logger.info(dataChip.getChipcode_()+"Data文件解析结束");
|
|
|
|
|
|
|
+ sqls.add(new StringBuilder().append("UPDATE CHIPTABLE@SHENAI_EDCDATA SET STATUS_=0 WHERE CHIP_CODE='").append(dataChip.getChipcode_()).append("'").toString());
|
|
|
|
|
+
|
|
|
|
|
+ sqls.add(new StringBuilder().append("INSERT INTO CHIPTABLE@SHENAI_EDCDATA (CHIP_CODE,TABLE_NAME,STATUS_) VALUES ('").append(dataChip.getChipcode_()).append("','").append(TableName).append("',-1)").toString());
|
|
|
|
|
|
|
|
- }catch (Exception e) {
|
|
|
|
|
- baseDao.execute("UPDATE DATACENTER$CHIP SET READSTATUS_=-99 WHERE ID_="+dataChip.getId_());
|
|
|
|
|
|
|
+ sqls.add(new StringBuilder().append("UPDATE DATACENTER$CHIP SET READSTATUS_=-1 WHERE ID_=").append(dataChip.getId_()).toString());
|
|
|
|
|
+ this.baseDao.getJdbcTemplate().batchUpdate((String[])sqls.toArray(new String[sqls.size()]));
|
|
|
|
|
+ }
|
|
|
|
|
+ else {
|
|
|
|
|
+ this.baseDao.execute(new StringBuilder().append("UPDATE DATACENTER$CHIP SET READSTATUS_=-100 WHERE ID_=").append(dataChip.getId_()).toString());
|
|
|
|
|
+ }
|
|
|
|
|
+ this.logger.info(new StringBuilder().append(dataChip.getChipcode_()).append("Data文件解析结束").toString());
|
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
|
+ this.logger.error(new StringBuilder().append("Exception:芯片号:").append(dataChip.getChipcode_()).toString(), e);
|
|
|
e.printStackTrace();
|
|
e.printStackTrace();
|
|
|
|
|
+ this.baseDao.execute(new StringBuilder().append("UPDATE DATACENTER$CHIP SET READSTATUS_=-99 WHERE ID_=").append(dataChip.getId_()).toString());
|
|
|
} finally {
|
|
} finally {
|
|
|
countDownLatch.countDown();
|
|
countDownLatch.countDown();
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
@Override
|
|
@Override
|
|
|
- public void EDCCounterDeal(List<String> codes) {
|
|
|
|
|
-
|
|
|
|
|
|
|
+ public void EDCCounterDeal(List<String> codes)
|
|
|
|
|
+ {
|
|
|
}
|
|
}
|
|
|
-}
|
|
|
|
|
|
|
+}
|