فهرست منبع

优化PAD表数据写入

koul 4 روز پیش
والد
کامیت
4eef16178b
1فایلهای تغییر یافته به همراه36 افزوده شده و 24 حذف شده
  1. 36 24
      src/main/java/com/uas/eis/serviceImpl/MESHelperServiceImpl.java

+ 36 - 24
src/main/java/com/uas/eis/serviceImpl/MESHelperServiceImpl.java

@@ -680,30 +680,42 @@ public class MESHelperServiceImpl implements MESHelperService {
 				baseDao.execute("insert into array(ARRAYID, ARRAYSTATUS, ARRAYBARCODE, MACHINEID)" +
 								"values('"+ARRAYID+"','"+ArrayStatus+"','"+ArrayBarCode+"','"+ID+"')"
 					);
-				for (int j=0;j<Pads.size();j++){
-					JSONObject map2=Pads.getJSONObject(j);
-					String ComponentID=map2.get("ComponentID").toString();
-					String Type=map2.get("Type").toString();
-					String PerArea=map2.get("PerArea").toString();
-					String Height=map2.get("Height").toString();
-					String PerVolume=map2.get("PerVolume").toString();
-					String XOffset=map2.get("XOffset").toString();
-					String YOffset=map2.get("YOffset").toString();
-					String PadSizeX=map2.get("PadSizeX").toString();
-					String PadSizeY=map2.get("PadSizeY").toString();
-					String Area=map2.get("Area").toString();
-					String PerHeight=map2.get("PerHeight").toString();
-					String Volume=map2.get("Volume").toString();
-					String Result=map2.get("Result").toString();
-					String Errcode=map2.get("Errcode").toString();
-					String PinNum=map2.get("PinNum").toString();
-					String Barcode=map2.get("Barcode").toString();
-					String Date=map2.get("Date").toString();
-					String Time=map2.get("Time").toString();
-					int PADID=baseDao.getSeqId("pad_seq");
-					baseDao.execute("insert into pad(PADID, COMPONENTID, TYPE, PERAREA, HEIGHT, PERVOLUME, XOFFSET, YOFFSET, PADSIZEX, PADSIZEY, AREA, PERHEIGHT, VOLUME, RESULT, ERRCODE, PINNUM, BARCODE, DATE1, TIME, ARRAYID, INDATE)" +
-							"values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,sysdate)",PADID, ComponentID, Type, PerArea, Height, PerVolume,
-							XOffset, YOffset, PadSizeX, PadSizeY, Area, PerHeight, Volume, Result, Errcode, PinNum, Barcode, Date, Time, ARRAYID);
+			int padCount = Pads.size();
+				if (padCount > 0) {
+					// 批量插入 Pads:PADID 由 pad_seq.nextval 在 SQL 内直接分配,避免逐条获取序列
+					String padSql = "insert into pad(PADID, COMPONENTID, TYPE, PERAREA, HEIGHT, PERVOLUME, XOFFSET, YOFFSET, PADSIZEX, PADSIZEY, AREA, PERHEIGHT, VOLUME, RESULT, ERRCODE, PINNUM, BARCODE, DATE1, TIME, ARRAYID, INDATE)" +
+							"values(pad_seq.nextval,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,sysdate)";
+					List<Object[]> batchArgs = new ArrayList<Object[]>(padCount);
+					for (int j=0;j<padCount;j++){
+						JSONObject map2=Pads.getJSONObject(j);
+						batchArgs.add(new Object[]{
+								map2.optString("ComponentID"),
+								map2.optString("Type"),
+								map2.optString("PerArea"),
+								map2.optString("Height"),
+								map2.optString("PerVolume"),
+								map2.optString("XOffset"),
+								map2.optString("YOffset"),
+								map2.optString("PadSizeX"),
+								map2.optString("PadSizeY"),
+								map2.optString("Area"),
+								map2.optString("PerHeight"),
+								map2.optString("Volume"),
+								map2.optString("Result"),
+								map2.optString("Errcode"),
+								map2.optString("PinNum"),
+								map2.optString("Barcode"),
+								map2.optString("Date"),
+								map2.optString("Time"),
+								ARRAYID
+						});
+					}
+					// 每批 1000 条执行批量插入,减少单批过大导致的内存/锁开销
+					int batchSize = 1000;
+					for (int from=0; from<batchArgs.size(); from+=batchSize){
+						int to = Math.min(from + batchSize, batchArgs.size());
+						baseDao.getJdbcTemplate().batchUpdate(padSql, batchArgs.subList(from, to));
+					}
 				}
 			}
 			rmap.put("EventCode","0");