UnitQueryDAOImpl.java
package com.mycim.server.wip.dao.impl;
import com.fa.sesa.threadlocal.LocalContext;
import com.mycim.framework.jdbc.JdbcTemplate;
import com.mycim.framework.jdbc.mapper.RowMapper;
import com.mycim.framework.utils.MiscUtils;
import com.mycim.framework.utils.lang.StringUtils;
import com.mycim.framework.utils.lang.collections.CollectionUtils;
import com.mycim.server.wip.dao.UnitQueryDAO;
import com.mycim.server.wip.dao.mapper.BoxForDieMapper;
import com.mycim.server.wip.dao.mapper.UnitMapRowMapper;
import com.mycim.server.wip.dao.mapper.UnitMapper;
import com.mycim.server.wip.dao.mapper.UnitTimeLimitStatusMapper;
import com.mycim.valueobject.consts.DataBaseNames;
import com.mycim.valueobject.consts.TimeLimitEnum;
import com.mycim.valueobject.prp.UnitRecycledInfo;
import com.mycim.valueobject.wip.*;
import org.apache.commons.beanutils.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.support.rowset.SqlRowSet;
import org.springframework.stereotype.Repository;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author yanbing.chen
* @version 6.0.0
* @date 2019/9/4
**/
@Repository
public class UnitQueryDAOImpl implements UnitQueryDAO {
@Autowired
JdbcTemplate jdbcTemplate;
@Override
public Unit getUnit(long unitRrn) {
String sql = "SELECT UNIT_RRN,FACILITY_RRN,UNIT_ID,STEP_SEQUENCE,LOT_RRN,LOT_STEP_SEQUENCE," + "CARRIER_RRN," +
"POSITION_IN_CARRIER,UNIT_STATUS,PROCESS_STATUS,BEFORE_STATUS," + "DUMMY_FLAG,DEFECTIVE_FLAG," +
"BONUS_FLAG,QTY,PROCESS_START_TIME,PROCESS_END_TIME," + "UNIT_MAP_RRN,RECIPE_ID,USAGE_LIMIT," +
"USAGE_COUNT,TOTAL_DIE_NUM,T7CODE,UNIT_ALIAS_1," + "UNIT_ALIAS_2,ITEM_ID,MARK_NUMBER," +
"MARK_NUMBER_COMMENT,incoming_type,AUTO_MONITOR_USED_FLAG,'' LOT_ID,CUSTOMER_T7CODE, MATERIAL_ID ";
sql += " FROM UNIT";
sql += " WHERE UNIT_RRN=? ";
Object[] args = new Object[]{new Long(unitRrn)};
return jdbcTemplate.queryForObjectWithNull(sql, args, new UnitMapper());
}
@Override
public List<Unit> getUnitList(Long lotRrn) {
StringBuilder sql = new StringBuilder("SELECT ");
sql.append(" U.UNIT_RRN, U.FACILITY_RRN, U.UNIT_ID, U.STEP_SEQUENCE, ");
sql.append(" U.LOT_RRN, U.LOT_STEP_SEQUENCE, U.CARRIER_RRN, U.POSITION_IN_CARRIER, ");
sql.append(" U.UNIT_STATUS, U.PROCESS_STATUS, U.BEFORE_STATUS, U.DUMMY_FLAG, U.DEFECTIVE_FLAG, U" +
".BONUS_FLAG, ");
sql.append(" U.QTY, U.PROCESS_START_TIME, U.PROCESS_END_TIME, U.UNIT_MAP_RRN, U.RECIPE_ID, ");
sql.append(" U.USAGE_LIMIT, U.USAGE_COUNT,U.UNIT_ALIAS_1,U.T7CODE,U.UNIT_ALIAS_2,U.ITEM_ID, ");
sql.append(" U.MARK_NUMBER,U.MARK_NUMBER_COMMENT,u.incoming_type,AUTO_MONITOR_USED_FLAG,L.LOT_ID,U.CUSTOMER_T7CODE ");
sql.append(" ,U.MATERIAL_ID ");
sql.append(" FROM ").append(DataBaseNames.UNIT).append(" U, ");
sql.append(DataBaseNames.LOT).append(" L ");
sql.append(" WHERE L.LOT_RRN=U.LOT_RRN AND U.LOT_RRN = ? ORDER BY U.POSITION_IN_CARRIER DESC");
return jdbcTemplate.query(sql.toString(), new Object[]{lotRrn}, new UnitMapper());
}
@Override
public List<Map> getUnits(Long lotRrn) {
List<Map> units = new ArrayList();
if (lotRrn != null) {
String sql = "SELECT u.UNIT_RRN,u.POSITION_IN_CARRIER,u.UNIT_ID,u.UNIT_STATUS,l.lot_id,u.lot_rrn," + "l" +
".carrier_rrn,c.instance_id,r.sum_loop_count,r.loop_count FROM " + "UNIT u left join lot l on u" +
".lot_rrn = l.lot_rrn " + "left join named_object C on l.carrier_rrn = C.instance_rrn " + "left " +
"join unit_recycled r on u.UNIT_RRN = r.UNIT_RRN " + " WHERE u.LOT_RRN =? " + "ORDER BY " +
"POSITION_IN_CARRIER ";
return jdbcTemplate.query(sql, new Object[]{lotRrn.longValue()}, new RowMapper<Map>() {
long seq = 1;
@Override
public Map mapRow(ResultSet rs, int rowNum) throws SQLException {
Map unit = new HashMap();
unit.put("unitRrn", new Long(rs.getLong("UNIT_RRN")));
unit.put("postionInCarrier", new Integer(rs.getInt("POSITION_IN_CARRIER")));
unit.put("position", new Integer(rs.getInt("POSITION_IN_CARRIER")));
unit.put("unitId", rs.getString("UNIT_ID"));
unit.put("seq", new Long(seq++));
unit.put("unitStatus", rs.getString("UNIT_STATUS"));
unit.put("lotId", rs.getString("lot_id"));
unit.put("lotRrn", rs.getString("lot_rrn"));
unit.put("carrierRrn", rs.getString("carrier_rrn"));
unit.put("carrierId", rs.getString("instance_id"));
unit.put("loopCount", rs.getInt("loop_count"));
unit.put("sumLoopCount", rs.getInt("sum_loop_count"));
return unit;
}
});
}
return units;
}
@Override
public List<Map> getUnitsByParentLotRrn(long lotRrn) {
String sql = "SELECT U.UNIT_RRN,U.POSITION_IN_CARRIER,U.UNIT_ID,U.UNIT_STATUS,L.LOT_ID,U.LOT_RRN," +
"L.CARRIER_RRN,C.INSTANCE_ID,R.SUM_LOOP_COUNT,R.LOOP_COUNT FROM UNIT U LEFT JOIN LOT L ON " +
"U.LOT_RRN = L.LOT_RRN LEFT JOIN NAMED_OBJECT C ON L.CARRIER_RRN = C.INSTANCE_RRN LEFT " +
"JOIN UNIT_RECYCLED R ON U.UNIT_RRN = R.UNIT_RRN WHERE U.LOT_RRN IN " +
"(SELECT LOT_RRN FROM LOT WHERE LOT_RRN = ? OR BASED_LOT_RRN =?) ORDER BY POSITION_IN_CARRIER ";
List<Map> units = jdbcTemplate.query(sql, new Object[]{lotRrn, lotRrn}, new RowMapper<Map>() {
long seq = 1;
@Override
public Map mapRow(ResultSet rs, int rowNum) throws SQLException {
Map unit = new HashMap();
unit.put("unitRrn", new Long(rs.getLong("UNIT_RRN")));
unit.put("postionInCarrier", new Integer(rs.getInt("POSITION_IN_CARRIER")));
unit.put("position", new Integer(rs.getInt("POSITION_IN_CARRIER")));
unit.put("unitId", rs.getString("UNIT_ID"));
unit.put("seq", new Long(seq++));
unit.put("unitStatus", rs.getString("UNIT_STATUS"));
unit.put("lotId", rs.getString("LOT_ID"));
unit.put("lotRrn", rs.getString("LOT_RRN"));
unit.put("carrierRrn", rs.getString("CARRIER_RRN"));
unit.put("carrierId", rs.getString("INSTANCE_ID"));
unit.put("loopCount", rs.getInt("LOOP_COUNT"));
unit.put("sumLoopCount", rs.getInt("SUM_LOOP_COUNT"));
return unit;
}
});
return units == null ? new ArrayList<>() : units;
}
@Override
public List<Unit> getUnitHistoryListByCarrierMapRrn(long oldCarrierMapRrn) {
String sql = "SELECT CMH.UNIT_RRN, CMH.POSITION_IN_CARRIER, U.UNIT_ID, U.LOT_RRN, CMH.CARRIER_RRN "
+ " FROM CARRIER_MAPPING_H CMH "
+ " LEFT JOIN UNIT U ON CMH.UNIT_RRN = U.UNIT_RRN "
+ " WHERE CMH.CARRIER_MAP_RRN = ? "
+ " ORDER BY CMH.POSITION_IN_CARRIER";
List<Unit> units = jdbcTemplate.query(sql, new Object[]{oldCarrierMapRrn}, (RowMapper<Unit>) (rs, rowNum) -> {
Unit unit = new Unit();
unit.setUnitRrn(rs.getLong("UNIT_RRN"));
unit.setUnitId(rs.getString("UNIT_ID"));
unit.setLotRrn(rs.getLong("LOT_RRN"));
// unit.setLotId(rs.getString("LOT_ID"));
unit.setPositionInCarrier(rs.getInt("POSITION_IN_CARRIER"));
return unit;
});
return units == null ? new ArrayList<>() : units;
}
@Override
public List<Map> getUnitListHistory(long transRrn) {
String sql = "SELECT U.UNIT_ID,UH.*, TL.TRANS_ID, TL.TRANS_START_TIMESTAMP,TL.TRANS_PERFORMED_BY, TL.COMMENTS" +
" " + " FROM UNIT U,UNIT_MARK_NUMBER_MAPPING_H UH, TRANSACTION_LOG TL " + "WHERE U.UNIT_RRN = UH.UNIT_RRN AND UH" +
".TRANS_RRN=TL.TRANS_RRN AND UH.TRANS_RRN = ?";
return jdbcTemplate.query(sql, new Object[]{transRrn}, (rs, rowNum) -> {
Map unit = new HashMap();
unit.put("lotRrn", rs.getString("LOT_RRN"));
unit.put("unitRrn", rs.getString("UNIT_RRN"));
unit.put("unitId", rs.getString("UNIT_ID"));
unit.put("markNumber", rs.getString("MARK_NUMBER"));
unit.put("markNumberComment", rs.getString("MARK_NUMBER_COMMENT"));
unit.put("transId", rs.getString("TRANS_ID"));
unit.put("transStartTimestamp", rs.getString("TRANS_START_TIMESTAMP"));
unit.put("transPerformedBy", rs.getString("TRANS_PERFORMED_BY"));
unit.put("comments", rs.getString("COMMENTS"));
return unit;
});
}
@Override
public List<Map> getUnitListByLot(long lotRrn, Boolean filterStatus) {
this.updateCarrierMapRrn(lotRrn);
String sql = "SELECT U.LOT_RRN,U.UNIT_RRN,NVL(U.UNIT_ID,'N/A'),M.POSITION_IN_CARRIER" + " ,M.AVAILABLE_FLAG,U" +
".DUMMY_FLAG,U.UNIT_STATUS,L.lot_id,L.product_rrn,U.recipe_id," + " U.T7CODE,U.UNIT_ALIAS_1,U" +
".UNIT_ALIAS_2,U.ITEM_ID,U.MARK_NUMBER,U" + ".MARK_NUMBER_COMMENT," + " U.SOURCE_WAFER_ID,U" +
".SOURCE_WAFER_DIE_QTY " + " FROM (" + DataBaseNames.CARRIER_MAPPING + " M left join " +
DataBaseNames.UNIT + " U on M.UNIT_RRN=U.UNIT_RRN)," + DataBaseNames.LOT + " L," +
DataBaseNames.CARRIER + " C " + " WHERE L.LOT_RRN= " + lotRrn + " AND L.CARRIER_RRN=C.CARRIER_RRN";
if (filterStatus) {
sql = sql + " AND U.UNIT_STATUS !=" + StringUtils.wrapWithApostropheIfMissing(UnitStatus.LOST) +
" AND U.UNIT_STATUS !=" + StringUtils.wrapWithApostropheIfMissing(UnitStatus.SCRAPPED);
}
sql = sql + " AND C.CARRIER_MAP_RRN = M.CARRIER_MAP_RRN" + " AND L.LOT_RRN = U.LOT_RRN" + " ORDER BY M" +
".POSITION_IN_CARRIER";
return jdbcTemplate.query(sql, new RowMapper<Map>() {
@Override
public Map mapRow(ResultSet rs, int rowNum) throws SQLException {
Map unit = new HashMap();
unit = new HashMap<>();
unit.put("lotRrn", rs.getString(1));
unit.put("unitRrn", rs.getString(2));
unit.put("unitId", rs.getString(3));
unit.put("position", rs.getString(4));
// unit.put("available", rs.getString(5));
// unit.put("dummyflag", rs.getString(6));
unit.put("unitstatus", rs.getString(7));
unit.put("lotid", rs.getString(8));
if (StringUtils.isNotEmpty(rs.getString("T7CODE"))) {
unit.put("t7code", rs.getString("T7CODE"));
} else {
unit.put("t7code", "");
}
if (StringUtils.isNotEmpty(rs.getString(9))) {
// unit.put("productRrn", rs.getString(9));
}
if (StringUtils.isNotEmpty(rs.getString("recipe_id"))) {
unit.put("ppid", rs.getString("recipe_id"));
unit.put("recipeId", rs.getString("recipe_id"));
} else {
unit.put("ppid", "");
unit.put("recipeId", "");
}
if (StringUtils.isNotEmpty(rs.getString("UNIT_ALIAS_1"))) {
unit.put("unitAlias1", rs.getString("UNIT_ALIAS_1"));
} else {
unit.put("unitAlias1", "");
}
if (StringUtils.isNotEmpty(rs.getString("UNIT_ALIAS_2"))) {
unit.put("unitAlias2", rs.getString("UNIT_ALIAS_2"));
} else {
unit.put("unitAlias2", "");
}
if (StringUtils.isNotEmpty(rs.getString("ITEM_ID"))) {
unit.put("itemId", rs.getString("ITEM_ID"));
} else {
unit.put("itemId", "");
}
if (StringUtils.isNotEmpty(rs.getString("MARK_NUMBER"))) {
unit.put("markNumber", rs.getString("MARK_NUMBER"));
} else {
unit.put("markNumber", "");
}
if (StringUtils.isNotEmpty(rs.getString("MARK_NUMBER_COMMENT"))) {
unit.put("markNumberComment", rs.getString("MARK_NUMBER_COMMENT"));
} else {
unit.put("markNumberComment", "");
}
if (StringUtils.isNotEmpty(rs.getString("SOURCE_WAFER_ID"))) {
unit.put("sourceWaferId", rs.getString("SOURCE_WAFER_ID"));
} else {
unit.put("sourceWaferId", "");
}
if (StringUtils.isNotEmpty(rs.getString("SOURCE_WAFER_DIE_QTY"))) {
unit.put("sourceWaferDieQty", rs.getString("SOURCE_WAFER_DIE_QTY"));
} else {
unit.put("sourceWaferDieQty", "");
}
return unit;
}
});
}
@Override
public Unit getUnit(long facilityRrn, String unitId) {
String sql = "SELECT UNIT_RRN,FACILITY_RRN,UNIT_ID,STEP_SEQUENCE,LOT_RRN,LOT_STEP_SEQUENCE,CARRIER_RRN," +
"POSITION_IN_CARRIER,UNIT_STATUS,PROCESS_STATUS," + "BEFORE_STATUS,DUMMY_FLAG,DEFECTIVE_FLAG," +
"BONUS_FLAG," + "QTY,PROCESS_START_TIME,PROCESS_END_TIME,UNIT_MAP_RRN,usage_limit,usage_count FROM " +
DataBaseNames.UNIT + " WHERE FACILITY_RRN = ? and UNIT_ID = ?";
List units = jdbcTemplate.query(sql, new Object[]{facilityRrn, unitId}, new RowMapper() {
// TODO:mapper重构
@Override
public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
Unit unit = new Unit();
unit.setFacilityRrn(new Long(rs.getLong("FACILITY_RRN")));
unit.setUnitId(rs.getString("UNIT_ID"));
unit.setStepSequence(new Long(rs.getLong("STEP_SEQUENCE")));
unit.setLotRrn(new Long(rs.getLong("LOT_RRN")));
unit.setLotStepSequence(new Long(rs.getLong("LOT_STEP_SEQUENCE")));
unit.setCarrierRrn(new Long(rs.getLong("CARRIER_RRN")));
unit.setPositionInCarrier(new Integer(rs.getInt("POSITION_IN_CARRIER")));
unit.setUnitStatus(rs.getString("UNIT_STATUS"));
unit.setProcessStatus(rs.getString("PROCESS_STATUS"));
unit.setBeforeStatus(rs.getString("BEFORE_STATUS"));
unit.setDummyFlag(rs.getString("DUMMY_FLAG"));
unit.setDefectiveFlag(rs.getString("DEFECTIVE_FLAG"));
unit.setBonusFlag(rs.getString("BONUS_FLAG"));
unit.setQty(new Double(rs.getDouble("QTY")));
unit.setProcessStartTime(rs.getDate("PROCESS_START_TIME"));
unit.setProcessEndTime(rs.getDate("PROCESS_END_TIME"));
unit.setUnitMapRrn(new Long(rs.getLong("UNIT_MAP_RRN")));
unit.setUnitRrn(rs.getLong("UNIT_RRN"));
unit.setUsageCount(rs.getInt("usage_count"));
unit.setUsageLimit(rs.getInt("usage_limit"));
return unit;
}
});
return (units.size() > 0 ? (Unit) units.get(0) : null);
}
@Override
public List<Map<String, Object>> getUsefulUnits(long lotRrn) {
String sql = "SELECT UNIT_RRN,POSITION_IN_CARRIER,UNIT_ID,UNIT_STATUS,TOTAL_DIE_NUM " + " FROM UNIT " + " " +
"WHERE UNIT_STATUS != ? AND UNIT_STATUS != ? AND LOT_RRN= ?" + " ORDER BY POSITION_IN_CARRIER ASC";
return jdbcTemplate.query(sql, new Object[]{UnitStatus.LOST, UnitStatus.SCRAPPED, lotRrn}, new RowMapper() {
@Override
public Object mapRow(ResultSet rs, int rowNum) throws SQLException {
Map<String, Object> map = new HashMap<String, Object>();
map.put("unitRrn", rs.getLong("UNIT_RRN"));
map.put("positionInCarrier", rs.getInt("POSITION_IN_CARRIER"));
map.put("unitId", rs.getString("UNIT_ID"));
map.put("unitStatus", rs.getString("UNIT_STATUS"));
map.put("totalDieNum", rs.getLong("TOTAL_DIE_NUM"));
return map;
}
});
}
@Override
public int getLotWafeCount(long lotRrn) {
String sql = "SELECT COUNT(L.UNIT_RRN) FROM UNIT L WHERE L.LOT_RRN=?";
return jdbcTemplate.queryForObjectWithNull(sql, new Object[]{lotRrn}, int.class);
}
@Override
public List<Map<String,Long>> getLotRrnFromUnitStepRangeHistory(String unitId) {
String sql = "select distinct lot_rrn from unit_step_range_h where unit_rrn=(select unit_rrn " + "from unit " +
"where unit_id=?) ";
SqlRowSet rowSet= jdbcTemplate.queryForRowSet(sql, unitId);
List<Map<String,Long>> result =new ArrayList<>();
while (rowSet.next()){
Map<String,Long> item = new HashMap<>();
item.put("LOT_RRN",rowSet.getLong("lot_rrn"));
result.add(item);
}
return result;
}
@Override
public List<Map> getUnitListByCarrier(long carrierRrn) {
String sql = "SELECT U.LOT_RRN,U.UNIT_RRN,NVL(U.UNIT_ID,'N/A') UNIT_ID,M.POSITION_IN_CARRIER"
+ " ,M.AVAILABLE_FLAG,U.DUMMY_FLAG,U.UNIT_STATUS,L.LOT_ID,U.LOT_STEP_SEQUENCE,L"
+ ".PRODUCT_RRN,U.RECIPE_ID,U.T7CODE,U.UNIT_ALIAS_1,U.UNIT_ALIAS_2,U.ITEM_ID "
+ " FROM " + DataBaseNames.UNIT
+ " U left join " + DataBaseNames.CARRIER_MAPPING + " M on U.UNIT_RRN = M.UNIT_RRN,"
+ DataBaseNames.LOT + " L," + DataBaseNames.CARRIER
+ " C WHERE C.CARRIER_RRN= ? AND C.CARRIER_MAP_RRN = M.CARRIER_MAP_RRN"
+ " AND U.LOT_RRN=L.LOT_RRN AND U.UNIT_STATUS != ? AND U.UNIT_STATUS !=?"
+ " ORDER BY M.POSITION_IN_CARRIER";
return jdbcTemplate.query(sql, new Object[]{carrierRrn,UnitStatus.LOST,UnitStatus.SCRAPPED }, (RowMapper<Map>) (rs, rowNum) -> {
Map unit = new HashMap<>();
unit.put("lotRrn", rs.getString("LOT_RRN"));
unit.put("unitRrn", rs.getString("UNIT_RRN"));
unit.put("unitId", rs.getString("UNIT_ID"));
unit.put("position", rs.getString("POSITION_IN_CARRIER"));
unit.put("unitstatus", rs.getString("UNIT_STATUS"));
unit.put("lotid", rs.getString("LOT_ID"));
unit.put("lotId", rs.getString("LOT_ID"));
unit.put("t7code", StringUtils.defaultIfBlank(rs.getString("T7CODE"), StringUtils.EMPTY));
unit.put("ppid", StringUtils.defaultIfBlank(rs.getString("RECIPE_ID"), StringUtils.EMPTY));
unit.put("recipeId", StringUtils.defaultIfBlank(rs.getString("RECIPE_ID"), StringUtils.EMPTY));
unit.put("unitAlias1", StringUtils.defaultIfBlank(rs.getString("UNIT_ALIAS_1"), StringUtils.EMPTY));
unit.put("unitAlias2", StringUtils.defaultIfBlank(rs.getString("UNIT_ALIAS_2"), StringUtils.EMPTY));
unit.put("itemId", StringUtils.defaultIfBlank(rs.getString("ITEM_ID"), StringUtils.EMPTY));
return unit;
});
}
@Override
public Long getNumberOfUnitInCarrier(Long carrierRrn) {
StringBuilder sql = new StringBuilder("SELECT COUNT(UNIT_RRN) FROM ");
sql.append(DataBaseNames.CARRIER_MAPPING);
sql.append(" WHERE CARRIER_MAP_RRN IN ")
.append(" (SELECT CARRIER_MAP_RRN FROM CARRIER WHERE CARRIER_RRN = ?) ");
return jdbcTemplate.queryForObject(sql.toString(), new Object[]{carrierRrn}, Long.class);
}
@Override
public List<BoxForDie> getBoxsByLotRrn(Long lotRrn) {
String sql = "SELECT * FROM BOX_FOR_DIE WHERE LOT_RRN=" + lotRrn;
return jdbcTemplate.query(sql, new Object[]{}, new BoxForDieMapper());
}
@Override
public List<Map<String, Object>> getUnitsByLot(Lot lot) {
String sql =
"SELECT UNIT_RRN,POSITION_IN_CARRIER,UNIT_ID,UNIT_STATUS,DUMMY_FLAG FROM " + DataBaseNames.UNIT + " " +
"WHERE LOT_RRN=" + lot.getLotRrn() + " ORDER BY POSITION_IN_CARRIER ASC";
return jdbcTemplate.query(sql, new Object[]{}, new RowMapper<Map<String, Object>>() {
@Override
public Map<String, Object> mapRow(ResultSet rs, int rowNum) throws SQLException {
Map<String, Object> m = new HashMap();
m.put("UNIT_RRN", new Long(rs.getLong("UNIT_RRN")));
m.put("POSITION_IN_CARRIER", new Long(rs.getLong("POSITION_IN_CARRIER")));
m.put("UNIT_ID", rs.getString("UNIT_ID"));
m.put("UNIT_STATUS", rs.getString("UNIT_STATUS"));
m.put("DUMMY_FLAG", rs.getString("DUMMY_FLAG"));
return m;
}
});
}
@Override
public List<Map<String, Long>> getReworkUnitSeq(Long lotRrn, String processStepVersion) {
String sql = "select unit_rrn,nvl(max(rework_count), 0) as num from rework_unit_info_history" +
" where unit_rrn in (select u.unit_rrn from unit u where u.lot_rrn= ? )" +
" and process_step_version like ? group by unit_rrn order by unit_rrn";
List<Map<String, Long>> list = jdbcTemplate
.query(sql, new Object[]{lotRrn, processStepVersion + "%"}, new RowMapper<Map<String, Long>>() {
@Override
public Map<String, Long> mapRow(ResultSet rs, int rowNum) throws SQLException {
Map<String, Long> map = new HashMap<String, Long>();
map.put("unitRrn", rs.getLong("unit_Rrn"));
map.put("num", rs.getLong("num"));
return map;
}
});
return list;
}
@Override
public Long getMaxReworkCountByUnit(Long lotRrn, String processStepVersion) {
String sql = "select max(num) as num from (select nvl(max(rework_count), 0) as num from " +
" rework_unit_info_history where unit_rrn in (select u.unit_rrn from unit u where u.lot_rrn= ? )" +
" and process_step_version like ? group by unit_rrn order by unit_rrn) ";
return jdbcTemplate.queryForObject(sql, new Object[]{lotRrn, processStepVersion + "%"}, Long.class);
}
@Override
public Long getMaxReworkCountByUnit(Long transRrn) {
String sql = "SELECT MAX(NUM) AS NUM FROM (SELECT NVL(MAX(REWORK_COUNT), 0) AS NUM FROM " +
" REWORK_UNIT_INFO_HISTORY RH WHERE RH.TRANS_RRN = ? GROUP BY UNIT_RRN ORDER BY UNIT_RRN)";
return jdbcTemplate.queryForObject(sql, new Object[]{transRrn}, Long.class);
}
@Override
public List<Unit> getUnitListByT7Code(String t7Code) {
String sql = "SELECT UNIT_RRN,FACILITY_RRN,UNIT_ID,STEP_SEQUENCE,LOT_RRN,LOT_STEP_SEQUENCE,CARRIER_RRN," +
"POSITION_IN_CARRIER,UNIT_STATUS,PROCESS_STATUS," + "BEFORE_STATUS,DUMMY_FLAG,DEFECTIVE_FLAG," +
"BONUS_FLAG," + "QTY,PROCESS_START_TIME,PROCESS_END_TIME,UNIT_MAP_RRN,USAGE_LIMIT," + "USAGE_COUNT," +
"T7CODE,UNIT_ALIAS_1,UNIT_ALIAS_2 ,ITEM_ID FROM " + DataBaseNames.UNIT + " WHERE T7CODE = ? ";
List<Unit> list = jdbcTemplate.query(sql, new Object[]{t7Code}, new RowMapper<Unit>() {
@Override
public Unit mapRow(ResultSet rs, int rowNum) throws SQLException {
Unit unit = new Unit();
unit.setFacilityRrn(new Long(rs.getLong("FACILITY_RRN")));
unit.setUnitId(rs.getString("UNIT_ID"));
unit.setStepSequence(new Long(rs.getLong("STEP_SEQUENCE")));
unit.setLotRrn(new Long(rs.getLong("LOT_RRN")));
unit.setLotStepSequence(new Long(rs.getLong("LOT_STEP_SEQUENCE")));
unit.setCarrierRrn(new Long(rs.getLong("CARRIER_RRN")));
unit.setPositionInCarrier(new Integer(rs.getInt("POSITION_IN_CARRIER")));
unit.setUnitStatus(rs.getString("UNIT_STATUS"));
unit.setProcessStatus(rs.getString("PROCESS_STATUS"));
unit.setBeforeStatus(rs.getString("BEFORE_STATUS"));
unit.setDummyFlag(rs.getString("DUMMY_FLAG"));
unit.setDefectiveFlag(rs.getString("DEFECTIVE_FLAG"));
unit.setBonusFlag(rs.getString("BONUS_FLAG"));
unit.setQty(new Double(rs.getDouble("QTY")));
unit.setProcessStartTime(rs.getDate("PROCESS_START_TIME"));
unit.setProcessEndTime(rs.getDate("PROCESS_END_TIME"));
unit.setUnitMapRrn(new Long(rs.getLong("UNIT_MAP_RRN")));
unit.setUnitRrn(rs.getLong("UNIT_RRN"));
unit.setUsageCount(rs.getInt("usage_count"));
unit.setUsageLimit(rs.getInt("usage_limit"));
unit.setT7code(rs.getString("T7CODE"));
unit.setUnitAlias1(rs.getString("unit_alias_1"));
unit.setUnitAlias2(rs.getString("unit_alias_2"));
unit.setItemId(rs.getString("ITEM_ID"));
return unit;
}
});
return list;
}
@Override
public Unit getUnit4Alias(Long unitRrn, String unitId, String unitAlias) {
String sql = "SELECT UNIT_RRN,FACILITY_RRN,UNIT_ID,STEP_SEQUENCE,LOT_RRN,LOT_STEP_SEQUENCE,CARRIER_RRN," +
"POSITION_IN_CARRIER,UNIT_STATUS,PROCESS_STATUS," + "BEFORE_STATUS,DUMMY_FLAG,DEFECTIVE_FLAG," +
"BONUS_FLAG," + "QTY,PROCESS_START_TIME,PROCESS_END_TIME,UNIT_MAP_RRN," + "USAGE_LIMIT,USAGE_COUNT," +
"UNIT_ALIAS_1,UNIT_ALIAS_2,ITEM_ID FROM " + DataBaseNames.UNIT + " WHERE UNIT_RRN<>? AND ";
if (StringUtils.equals(unitAlias, "UNIT_ALIAS_1")) {
sql += "(UNIT_ID = ? OR UNIT_ALIAS_1 =?)";
} else {
sql += "(UNIT_ID = ? OR UNIT_ALIAS_2 =?)";
}
return jdbcTemplate.queryForObjectWithNull(sql, new Object[]{unitRrn, unitId, unitId}, new RowMapper<Unit>() {
@Override
public Unit mapRow(ResultSet rs, int rowNum) throws SQLException {
Unit unit = new Unit();
unit.setFacilityRrn(new Long(rs.getLong("FACILITY_RRN")));
unit.setUnitId(rs.getString("UNIT_ID"));
unit.setStepSequence(new Long(rs.getLong("STEP_SEQUENCE")));
unit.setLotRrn(new Long(rs.getLong("LOT_RRN")));
unit.setLotStepSequence(new Long(rs.getLong("LOT_STEP_SEQUENCE")));
unit.setCarrierRrn(new Long(rs.getLong("CARRIER_RRN")));
unit.setPositionInCarrier(new Integer(rs.getInt("POSITION_IN_CARRIER")));
unit.setUnitStatus(rs.getString("UNIT_STATUS"));
unit.setProcessStatus(rs.getString("PROCESS_STATUS"));
unit.setBeforeStatus(rs.getString("BEFORE_STATUS"));
unit.setDummyFlag(rs.getString("DUMMY_FLAG"));
unit.setDefectiveFlag(rs.getString("DEFECTIVE_FLAG"));
unit.setBonusFlag(rs.getString("BONUS_FLAG"));
unit.setQty(new Double(rs.getDouble("QTY")));
unit.setProcessStartTime(rs.getDate("PROCESS_START_TIME"));
unit.setProcessEndTime(rs.getDate("PROCESS_END_TIME"));
unit.setUnitMapRrn(new Long(rs.getLong("UNIT_MAP_RRN")));
unit.setUnitRrn(rs.getLong("UNIT_RRN"));
unit.setUsageCount(rs.getInt("usage_count"));
unit.setUsageLimit(rs.getInt("usage_limit"));
unit.setUnitAlias1(rs.getString("unit_alias_1"));
unit.setUnitAlias2(rs.getString("unit_alias_2"));
unit.setItemId(rs.getString("ITEM_ID"));
return unit;
}
});
}
@Override
public List<UnitTimelimitStatus> getUnitTimeLimitStatusForNormal() {
List args = new ArrayList();
StringBuilder sb = new StringBuilder();
sb.append(" SELECT ");
sb.append(" L.LOT_RRN,U.UNIT_ID,UTS.UNIT_RRN, TIMELIMIT_ID, TIMELIMIT_TYPE, ");
sb.append(" START_PRODUCT_RRN, START_PROCESS_RRN, START_PROCESS_VERSION, START_PROCESS_VERSION ," +
"START_ROUTE_RRN, START_OPERATION_RRN, ");
sb.append(" END_PRODUCT_RRN, END_PROCESS_RRN, END_ROUTE_RRN, END_OPERATION_RRN, ");
sb.append(" TIMELIMIT, START_TIME, STATUS, ADDITIONAL_TIMELIMIT, TIMELIMIT_RRN, TIME_TYPE, " + "LIMIT_TYPE, ");
sb.append(
" START_ROUTE_SEQ, START_OPERATION_SEQ, END_ROUTE_SEQ, END_OPERATION_SEQ, UTS.STEP_SEQUENCE, " + "UTS" +
".MODULE" + " ");
sb.append(" FROM " + DataBaseNames.UNIT_TIMELIMIT_STATUS + " uts,");
sb.append(DataBaseNames.UNIT + " u ,");
sb.append(DataBaseNames.LOT + " l ");
sb.append(" WHERE UTS.UNIT_RRN=U.UNIT_RRN AND U.LOT_RRN=L.LOT_RRN ");
sb.append(" AND UTS.STATUS=? ");
args.add(TimeLimitEnum.NORMAL_STATUS.getValue());
sb.append(" ORDER BY TIME_TYPE, START_TIME ");
return jdbcTemplate.query(sb.toString(), args.toArray(), new UnitTimeLimitStatusMapper());
}
@Override
public List<UnitTimelimitStatus> getUnitTimeLimitStatusByLotRrn(Long lotRrn, String targetStatus) {
List args = new ArrayList<>();
args.add(lotRrn);
StringBuilder sb = new StringBuilder();
sb.append(" SELECT ");
sb.append(" L.LOT_RRN,U.UNIT_ID,UTS.UNIT_RRN, TIMELIMIT_ID, TIMELIMIT_TYPE, ");
sb.append(" START_PRODUCT_RRN, START_PROCESS_RRN, START_PROCESS_VERSION, START_PROCESS_VERSION ," +
"START_ROUTE_RRN, START_OPERATION_RRN, ");
sb.append(" END_PRODUCT_RRN, END_PROCESS_RRN, END_ROUTE_RRN, END_OPERATION_RRN, ");
sb.append(" TIMELIMIT, START_TIME, STATUS, ADDITIONAL_TIMELIMIT, TIMELIMIT_RRN, TIME_TYPE, " + "LIMIT_TYPE, ");
sb.append(
" START_ROUTE_SEQ, START_OPERATION_SEQ, END_ROUTE_SEQ, END_OPERATION_SEQ, UTS.STEP_SEQUENCE, " + "UTS" +
".MODULE" + " ");
sb.append(" FROM " + DataBaseNames.UNIT_TIMELIMIT_STATUS + " uts,");
sb.append(DataBaseNames.UNIT + " u ,");
sb.append(DataBaseNames.LOT + " l ");
sb.append(" WHERE UTS.UNIT_RRN=U.UNIT_RRN AND U.LOT_RRN=L.LOT_RRN ");
sb.append(" AND L.LOT_RRN=? ");
if (StringUtils.isNotBlank(targetStatus)) {
sb.append(" AND UTS.STATUS=? ");
args.add(targetStatus);
}
sb.append(" ORDER BY TIME_TYPE, START_TIME ");
return jdbcTemplate.query(sb.toString(), args.toArray(), new UnitTimeLimitStatusMapper());
}
@Override
public List<Map<String, Object>> getUnitListFromCarrierMapping(Long lotRrn) {
String sql = "select t.unit_rrn,t.position_in_carrier,u.unit_id,u.qty " + "from carrier_mapping t,unit u " +
"where t.carrier_rrn=(select carrier_rrn from lot where lot_rrn=?) " + "and t.unit_rrn=u.unit_rrn " +
"and t.carrier_map_rrn=(select carrier_map_rrn from carrier where carrier_rrn =" +
"(select carrier_rrn from lot where lot_rrn=?)) " + "order by t.position_in_carrier";
Object[] args = new Object[]{new Long(lotRrn), new Long(lotRrn)};
return jdbcTemplate.query(sql, args, new RowMapper<Map<String, Object>>() {
@Override
public Map<String, Object> mapRow(ResultSet rs, int rowNum) throws SQLException {
Map<String, Object> unit = new HashMap();
unit.put("unit_rrn", new Long(rs.getLong(1)));
unit.put("unit_id", rs.getString(3));
unit.put("unit_qty", new Long(rs.getLong(4)));
unit.put("postionInCarrier", new Long(rs.getLong(2)));
unit.put("unitId", rs.getString("unit_id"));
return unit;
}
});
}
@Override
public List<UnitRecycledInfo> getUnitRecycledInfoByLotRrn(Long lotRrn) {
String sql =
"SELECT U.LOT_RRN, UR.PROCESS_RRN, UR.START_ROUTE_RRN, UR.START_OPERATION_RRN, UR" + ".END_ROUTE_RRN," +
" UR.END_OPERATION_RRN, UR.LOOP_COUNT, UR.SUM_LOOP_COUNT, UR.PROCESS_VERSION, U" + ".UNIT_ID" +
" FROM UNIT_RECYCLED UR,UNIT U,LOT L " +
" WHERE UR.UNIT_RRN =U.UNIT_RRN AND U.LOT_RRN=L.LOT_RRN AND L.LOT_RRN=? ";
List<UnitRecycledInfo> unitRecycledInfos = jdbcTemplate
.query(sql, new Object[]{lotRrn}, new RowMapper<UnitRecycledInfo>() {
@Override
public UnitRecycledInfo mapRow(ResultSet rs, int rowNum) throws SQLException {
UnitRecycledInfo unitRecycledInfo = new UnitRecycledInfo();
unitRecycledInfo.setLotRrn(rs.getLong("lot_rrn"));
unitRecycledInfo.setProcessRrn(rs.getLong("process_rrn"));
unitRecycledInfo.setStartRouteRrn(rs.getLong("start_route_rrn"));
unitRecycledInfo.setStartOperationRrn(rs.getLong("start_operation_rrn"));
unitRecycledInfo.setEndRouteRrn(rs.getLong("end_route_rrn"));
unitRecycledInfo.setEndOperationRrn(rs.getLong("end_operation_rrn"));
unitRecycledInfo.setLoopCount(rs.getInt("loop_count"));
unitRecycledInfo.setSumLoopCount(rs.getInt("SUM_LOOP_COUNT"));
unitRecycledInfo.setProcessVersion(rs.getInt("PROCESS_VERSION"));
unitRecycledInfo.setUnitId(rs.getString("UNIT_ID"));
return unitRecycledInfo;
}
});
return unitRecycledInfos;
}
@Override
public List<Unit> getAllUnits(Long lotRrn) {
String sql_select =
"SELECT UNIT_RRN,FACILITY_RRN,UNIT_ID,STEP_SEQUENCE," + "LOT_RRN,LOT_STEP_SEQUENCE," + "CARRIER_RRN," +
"POSITION_IN_CARRIER,UNIT_STATUS,PROCESS_STATUS," + "BEFORE_STATUS,DUMMY_FLAG," +
"DEFECTIVE_FLAG,BONUS_FLAG," + "QTY,PROCESS_START_TIME,PROCESS_END_TIME,UNIT_MAP_RRN," +
"RECIPE_ID," + "usage_limit,USAGE_COUNT,item_id,unit_alias_1,unit_alias_2, MATERIAL_ID," +
"T7CODE,MARK_NUMBER,MARK_NUMBER_COMMENT,incoming_type, AUTO_MONITOR_USED_FLAG ,'' LOT_ID,CUSTOMER_T7CODE " +
" FROM " + DataBaseNames.UNIT + " WHERE lot_rrn = ? ORDER" + " BY POSITION_IN_CARRIER";
Object[] args = new Object[1];
if (lotRrn == null) {
args[0] = 0;
} else {
args[0] = lotRrn.longValue();
}
return jdbcTemplate.query(sql_select, args, new UnitMapper());
}
@Override
public List<Map> getUnitListLot(Long lotRrn) {
String sql = "SELECT U.LOT_RRN,U.UNIT_RRN,NVL(U.UNIT_ID,'N/A'),M.POSITION_IN_CARRIER" + " ,M.AVAILABLE_FLAG,U" +
".DUMMY_FLAG,U.UNIT_STATUS,L.lot_id,L.product_rrn,U.recipe_id" + " FROM " + DataBaseNames.UNIT + " U " +
"left join " + DataBaseNames.CARRIER_MAPPING + " M on U.UNIT_RRN = M.UNIT_RRN," + DataBaseNames.LOT +
" L," + DataBaseNames.CARRIER + " C " + " WHERE L.LOT_RRN= " + lotRrn +
" AND L.CARRIER_RRN=C.CARRIER_RRN AND C.CARRIER_MAP_RRN = M.CARRIER_MAP_RRN" +
" AND L.LOT_RRN = U.LOT_RRN" + " ORDER BY M.POSITION_IN_CARRIER";
return jdbcTemplate.query(sql, new Object[]{}, new RowMapper<Map>() {
@Override
public Map mapRow(ResultSet rs, int rowNum) throws SQLException {
Map unit = new HashMap<>();
unit.put("lotRrn", rs.getString(1));
unit.put("unitRrn", rs.getString(2));
unit.put("unitId", rs.getString(3));
unit.put("position", rs.getString(4));
unit.put("available", rs.getString(5));
unit.put("dummyflag", rs.getString(6));
unit.put("unitstatus", rs.getString(7));
unit.put("lotid", rs.getString(8));
if (StringUtils.isNotEmpty(rs.getString(9))) {
unit.put("productRrn", rs.getString(9));
}
if (StringUtils.isNotEmpty(rs.getString("recipe_id"))) {
unit.put("ppid", rs.getString("recipe_id"));
unit.put("recipeId", rs.getString("recipe_id"));
} else {
unit.put("ppid", "");
unit.put("recipeId", "");
}
return unit;
}
});
}
@Override
public String getUnitIdByRrn(Long unitRrn) {
String sql = "SELECT UNIT_ID FROM " + DataBaseNames.UNIT + " WHERE UNIT_RRN=?";
return jdbcTemplate.queryForObject(sql, new Object[]{MiscUtils.parseSQL(unitRrn)}, String.class);
}
@Override
public String getUnitIdBySlotandLotRrnandCsdRrn(long lotRrn, long carrierRrn, Integer slot) {
long facilityRrn = LocalContext.getFacilityRrn();
StringBuilder sb = new StringBuilder();
sb.append(" select t.unit_id ");
sb.append(" from carrier_mapping c,unit t ");
sb.append(" where c.unit_rrn = t.unit_rrn ");
sb.append(" and t.lot_rrn =? ");
sb.append(" and c.carrier_rrn = ? ");
sb.append(" and t.facility_rrn = ? ");
sb.append(" and c.position_in_carrier = ? ");
return jdbcTemplate
.queryForObjectWithNull(sb.toString(), new Object[]{lotRrn, carrierRrn, facilityRrn, slot.intValue()},
String.class);
}
@Override
public List<Map<String, Object>> getUnitListByCarrierMapRrn(Long carrierMapRrn) {
String sql = "SELECT U.LOT_RRN,U.UNIT_RRN,NVL(U.UNIT_ID,'N/A'),M.POSITION_IN_CARRIER" + " ,M.AVAILABLE_FLAG,U" +
".DUMMY_FLAG,U.UNIT_STATUS,L.lot_id,U.LOT_STEP_SEQUENCE,L" + ".PRODUCT_RRN," + " U.recipe_id,U" +
".T7CODE,U.UNIT_ALIAS_1,U.UNIT_ALIAS_2,U.ITEM_ID " + " FROM (" + DataBaseNames.CARRIER_MAPPING + " M " +
"LEFT JOIN " + DataBaseNames.UNIT + " U ON M.UNIT_RRN = U.UNIT_RRN) ," + DataBaseNames.LOT + " L," +
DataBaseNames.CARRIER + " C " + " WHERE M.carrier_map_rrn= ? AND C.CARRIER_RRN = M.CARRIER_RRN" +
" AND U.LOT_RRN=L.LOT_RRN" + " ORDER BY M.POSITION_IN_CARRIER";
return jdbcTemplate.query(sql, new UnitMapRowMapper(), carrierMapRrn);
}
private void updateCarrierMapRrn(long lotRrn) {
String sql = "UPDATE CARRIER " + " SET CARRIER_MAP_RRN = (SELECT MAX(CARRIER_MAP_RRN)" + " FROM " +
"CARRIER_MAPPING" + " WHERE UNIT_RRN IN" + " (SELECT UNIT_RRN" + " FROM UNIT" + " WHERE LOT_RRN = ?))" +
" WHERE CARRIER_RRN =" + " (SELECT CARRIER_RRN FROM LOT WHERE LOT_RRN = ?)" + " AND " +
"(CARRIER_MAP_RRN IS NULL OR CARRIER_RRN = 0)";
Object[] args = new Object[]{new Long(lotRrn), new Long(lotRrn)};
jdbcTemplate.update(sql, args);
}
@Override
public List<Map> getUnpackUnitListByLot(long lotRrn) {
String sql = "SELECT u.UNIT_RRN,u.POSITION_IN_CARRIER,u.UNIT_ID,u.UNIT_STATUS,l.lot_id,u.lot_rrn," + "U" +
".SOURCE_WAFER_ID,U.SOURCE_WAFER_DIE_QTY, " + " l.carrier_rrn,c.instance_id,r.sum_loop_count,r" +
".loop_count " + " FROM " + DataBaseNames.UNIT + " u left join lot l on u.lot_rrn = l.lot_rrn left " +
"join named_object c on l" + ".carrier_rrn = c.instance_rrn left join unit_recycled r" + " on u" +
".UNIT_RRN = r.UNIT_RRN WHERE u.LOT_RRN =? " + " AND u.UNIT_RRN NOT IN (SELECT P.UNIT_RRN FROM " +
"ERP_PACKAGE_UNIT P WHERE P.LOT_RRN=?) " + " ORDER BY POSITION_IN_CARRIER ";
return jdbcTemplate.query(sql, new Object[]{lotRrn, lotRrn}, new RowMapper<Map>() {
long seq = 1;
@Override
public Map mapRow(ResultSet rs, int rowNum) throws SQLException {
Map unit = new HashMap();
unit.put("unitRrn", new Long(rs.getLong("UNIT_RRN")));
unit.put("postionInCarrier", new Integer(rs.getInt("POSITION_IN_CARRIER")));
unit.put("position", new Integer(rs.getInt("POSITION_IN_CARRIER")));
unit.put("unitId", rs.getString("UNIT_ID"));
unit.put("seq", new Long(seq++));
unit.put("unitStatus", rs.getString("UNIT_STATUS"));
unit.put("lotid", rs.getString("lot_id"));
unit.put("lotRrn", rs.getString("lot_rrn"));
unit.put("carrierRrn", rs.getString("carrier_rrn"));
unit.put("carrierId", rs.getString("instance_id"));
unit.put("loopCount", rs.getInt("loop_count"));
unit.put("sumLoopCount", rs.getInt("sum_loop_count"));
if (StringUtils.isNotEmpty(rs.getString("SOURCE_WAFER_ID"))) {
unit.put("sourceWaferId", rs.getString("SOURCE_WAFER_ID"));
} else {
unit.put("sourceWaferId", "");
}
if (StringUtils.isNotEmpty(rs.getString("SOURCE_WAFER_DIE_QTY"))) {
unit.put("sourceWaferDieQty", rs.getString("SOURCE_WAFER_DIE_QTY"));
} else {
unit.put("sourceWaferDieQty", "");
}
return unit;
}
});
}
@Override
public List<Unit> getUnitList(List<Long> lotRrnList) {
if (CollectionUtils.isEmpty(lotRrnList)) {
return new ArrayList<Unit>();
}
String sql = "SELECT UNIT_RRN,FACILITY_RRN,UNIT_ID,STEP_SEQUENCE,LOT_RRN,LOT_STEP_SEQUENCE," + "CARRIER_RRN," +
"POSITION_IN_CARRIER,UNIT_STATUS,PROCESS_STATUS,BEFORE_STATUS," + "DUMMY_FLAG,DEFECTIVE_FLAG," +
"BONUS_FLAG,QTY,PROCESS_START_TIME,PROCESS_END_TIME," + "UNIT_MAP_RRN,RECIPE_ID,USAGE_LIMIT," +
"USAGE_COUNT,TOTAL_DIE_NUM,T7CODE,UNIT_ALIAS_1," + "UNIT_ALIAS_2,ITEM_ID,MARK_NUMBER," +
"MARK_NUMBER_COMMENT,incoming_type,AUTO_MONITOR_USED_FLAG,'' LOT_ID,CUSTOMER_T7CODE,MATERIAL_ID ";
sql += " FROM UNIT";
sql += " WHERE LOT_RRN in (:lotRrns) ";
Map<String, Object> args = new HashMap<String, Object>();
args.put("lotRrns", lotRrnList);
return jdbcTemplate.query(sql, args, new UnitMapper());
}
public List<Unit> getUnitListByCustomerT7Code(String customerT7code) {
String sql = "SELECT UNIT_RRN,FACILITY_RRN,UNIT_ID,STEP_SEQUENCE,LOT_RRN,LOT_STEP_SEQUENCE,CARRIER_RRN," +
"POSITION_IN_CARRIER,UNIT_STATUS,PROCESS_STATUS," + "BEFORE_STATUS,DUMMY_FLAG,DEFECTIVE_FLAG," +
"BONUS_FLAG," + "QTY,PROCESS_START_TIME,PROCESS_END_TIME,UNIT_MAP_RRN,USAGE_LIMIT," + "USAGE_COUNT," +
"T7CODE,UNIT_ALIAS_1,UNIT_ALIAS_2 ,ITEM_ID,CUSTOMER_T7CODE FROM " + DataBaseNames.UNIT + " WHERE CUSTOMER_T7CODE = ? ";
List<Unit> list = jdbcTemplate.query(sql, new Object[]{customerT7code}, new RowMapper<Unit>() {
@Override
public Unit mapRow(ResultSet rs, int rowNum) throws SQLException {
Unit unit = new Unit();
unit.setFacilityRrn(new Long(rs.getLong("FACILITY_RRN")));
unit.setUnitId(rs.getString("UNIT_ID"));
unit.setStepSequence(new Long(rs.getLong("STEP_SEQUENCE")));
unit.setLotRrn(new Long(rs.getLong("LOT_RRN")));
unit.setLotStepSequence(new Long(rs.getLong("LOT_STEP_SEQUENCE")));
unit.setCarrierRrn(new Long(rs.getLong("CARRIER_RRN")));
unit.setPositionInCarrier(new Integer(rs.getInt("POSITION_IN_CARRIER")));
unit.setUnitStatus(rs.getString("UNIT_STATUS"));
unit.setProcessStatus(rs.getString("PROCESS_STATUS"));
unit.setBeforeStatus(rs.getString("BEFORE_STATUS"));
unit.setDummyFlag(rs.getString("DUMMY_FLAG"));
unit.setDefectiveFlag(rs.getString("DEFECTIVE_FLAG"));
unit.setBonusFlag(rs.getString("BONUS_FLAG"));
unit.setQty(new Double(rs.getDouble("QTY")));
unit.setProcessStartTime(rs.getDate("PROCESS_START_TIME"));
unit.setProcessEndTime(rs.getDate("PROCESS_END_TIME"));
unit.setUnitMapRrn(new Long(rs.getLong("UNIT_MAP_RRN")));
unit.setUnitRrn(rs.getLong("UNIT_RRN"));
unit.setUsageCount(rs.getInt("usage_count"));
unit.setUsageLimit(rs.getInt("usage_limit"));
unit.setT7code(rs.getString("T7CODE"));
unit.setUnitAlias1(rs.getString("unit_alias_1"));
unit.setUnitAlias2(rs.getString("unit_alias_2"));
unit.setItemId(rs.getString("ITEM_ID"));
unit.setCustomerT7Code(rs.getString("CUSTOMER_T7CODE"));
return unit;
}
});
return list;
}
@Override
public List<Unit> getUnitListByMaterialId(String materialId) {
String sql = "SELECT UNIT_RRN,FACILITY_RRN,UNIT_ID,STEP_SEQUENCE,LOT_RRN,LOT_STEP_SEQUENCE,CARRIER_RRN," +
"POSITION_IN_CARRIER,UNIT_STATUS,PROCESS_STATUS," + "BEFORE_STATUS,DUMMY_FLAG,DEFECTIVE_FLAG," +
"BONUS_FLAG," + "QTY,PROCESS_START_TIME,PROCESS_END_TIME,UNIT_MAP_RRN,USAGE_LIMIT," + "USAGE_COUNT," +
"T7CODE,UNIT_ALIAS_1,UNIT_ALIAS_2 ,ITEM_ID,MATERIAL_ID FROM " + DataBaseNames.UNIT + " WHERE MATERIAL_ID = ? ";
List<Unit> list = jdbcTemplate.query(sql, new Object[]{materialId}, new RowMapper<Unit>() {
@Override
public Unit mapRow(ResultSet rs, int rowNum) throws SQLException {
Unit unit = new Unit();
unit.setFacilityRrn(new Long(rs.getLong("FACILITY_RRN")));
unit.setUnitId(rs.getString("UNIT_ID"));
unit.setStepSequence(new Long(rs.getLong("STEP_SEQUENCE")));
unit.setLotRrn(new Long(rs.getLong("LOT_RRN")));
unit.setLotStepSequence(new Long(rs.getLong("LOT_STEP_SEQUENCE")));
unit.setCarrierRrn(new Long(rs.getLong("CARRIER_RRN")));
unit.setPositionInCarrier(new Integer(rs.getInt("POSITION_IN_CARRIER")));
unit.setUnitStatus(rs.getString("UNIT_STATUS"));
unit.setProcessStatus(rs.getString("PROCESS_STATUS"));
unit.setBeforeStatus(rs.getString("BEFORE_STATUS"));
unit.setDummyFlag(rs.getString("DUMMY_FLAG"));
unit.setDefectiveFlag(rs.getString("DEFECTIVE_FLAG"));
unit.setBonusFlag(rs.getString("BONUS_FLAG"));
unit.setQty(new Double(rs.getDouble("QTY")));
unit.setProcessStartTime(rs.getDate("PROCESS_START_TIME"));
unit.setProcessEndTime(rs.getDate("PROCESS_END_TIME"));
unit.setUnitMapRrn(new Long(rs.getLong("UNIT_MAP_RRN")));
unit.setUnitRrn(rs.getLong("UNIT_RRN"));
unit.setUsageCount(rs.getInt("usage_count"));
unit.setUsageLimit(rs.getInt("usage_limit"));
unit.setT7code(rs.getString("T7CODE"));
unit.setUnitAlias1(rs.getString("unit_alias_1"));
unit.setUnitAlias2(rs.getString("unit_alias_2"));
unit.setItemId(rs.getString("ITEM_ID"));
unit.setCustomerT7Code(rs.getString("MATERIAL_ID"));
return unit;
}
});
return list;
}
}