DiffBatchQueryDAOImpl.java
package com.mycim.server.wip.dao.impl;
import com.mycim.framework.jdbc.JdbcTemplate;
import com.mycim.framework.jdbc.Page;
import com.mycim.framework.jdbc.mapper.RowMapper;
import com.mycim.framework.utils.lang.StringUtils;
import com.mycim.framework.utils.lang.collections.MapUtils;
import com.mycim.framework.utils.lang.math.NumberUtils;
import com.mycim.framework.utils.lang.time.DateUtils;
import com.mycim.server.wip.dao.DiffBatchQueryDAO;
import com.mycim.server.wip.dao.mapper.BatchLotStoreMapper;
import com.mycim.valueobject.consts.DataBaseNames;
import com.mycim.valueobject.wip.BatchLotStore;
import com.mycim.valueobject.wip.EqpRcpDiffBatchSetupInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import org.springframework.util.CollectionUtils;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.*;
/**
* @author finatice.yang
* @date 2021/6/30
**/
@Repository
public class DiffBatchQueryDAOImpl implements DiffBatchQueryDAO {
@Autowired
JdbcTemplate jdbcTemplate;
private StringBuilder getBatchLotStoreBaseSql() {
StringBuilder sql = new StringBuilder("SELECT ");
sql.append("BASE.BATCH_ID,BASE.LOT_ID,BASE.LOT_RRN,BASE.MONITOR_LOT_ID,BASE.MONITOR_LOT_RRN, ");
sql.append("BASE.SEQUENCE,BASE.EQPT_ID,BASE.EQPT_RRN,BASE.RECIPE_ID,BASE.RECIPE_RRN ");
sql.append("FROM batch_lot_store base ");
return sql;
}
@Override
public BatchLotStore getBatchLotStoreByToRrn(Long lotRrn) {
StringBuilder sql = getBatchLotStoreBaseSql();
sql.append(" WHERE BASE.LOT_RRN = ?");
return jdbcTemplate.queryForObjectWithNull(sql.toString(), new Object[]{lotRrn}, new BatchLotStoreMapper());
}
@Override
public List<BatchLotStore> getBatchLotStore(String batchId) {
StringBuilder sql = getBatchLotStoreBaseSql();
sql.append(" WHERE BASE.BATCH_ID = ? order by BASE.sequence");
return jdbcTemplate.query(sql.toString(), new Object[]{batchId}, new BatchLotStoreMapper());
}
@Override
public List<BatchLotStore> getBatchLotStore(long monitorRrn) {
StringBuilder sql = getBatchLotStoreBaseSql();
sql.append(" WHERE BASE.MONITOR_LOT_RRN = ? order by BASE.sequence");
return jdbcTemplate.query(sql.toString(), new Object[]{monitorRrn}, new BatchLotStoreMapper());
}
@Override
public boolean checkLotInBatch(Long lotRrn) {
StringBuilder sql = new StringBuilder("SELECT COUNT(LOT_RRN) FROM ");
sql.append(DataBaseNames.BATCH_LOT_STORE).append(" WHERE LOT_RRN = ? OR MONITOR_LOT_RRN = ?");
Long count = jdbcTemplate.queryForObjectWithNull(sql.toString(), new Object[]{lotRrn,lotRrn}, Long.class);
return Objects.nonNull(count) && count.longValue() > 0;
}
@Override
public boolean checkLotIsBatchMonitorLot(Long monitorLotRrn) {
StringBuilder sql = new StringBuilder("SELECT COUNT(LOT_RRN) FROM ");
sql.append(DataBaseNames.BATCH_LOT_STORE).append(" WHERE MONITOR_LOT_RRN = ?");
Long count = jdbcTemplate.queryForObjectWithNull(sql.toString(), new Object[]{monitorLotRrn}, Long.class);
return Objects.nonNull(count) && count.longValue() > 0;
}
@Override
public String getBatchIdByLotRrn(Long lotRrn) {
StringBuilder sql = new StringBuilder("SELECT BATCH_ID FROM ");
sql.append(DataBaseNames.BATCH_LOT_STORE).append(" WHERE LOT_RRN = ? OR MONITOR_LOT_RRN = ?");
List<String> results = jdbcTemplate.query(sql.toString(), new Object[]{lotRrn, lotRrn}, String.class);
String batchId = StringUtils.EMPTY;
if (!CollectionUtils.isEmpty(results) && results.size() > 0) {
batchId = results.get(0);
}
return batchId;
}
@Override
public int getPrefixBatchIdCount(String batchId) {
String sql = "SELECT count(DISTINCT batch_id) from BATCH_LOT_STORE_H where instr(batch_id,?)>0 ";
Object[] args = new Object[]{batchId};
return jdbcTemplate.queryForObjectWithNull(sql, args, int.class);
}
@Override
public List<Map<String, Object>> getBatchLotStoreHistory(BatchLotStore storeCondition, Boolean showAll) {
StringBuilder sql = new StringBuilder("SELECT ");
sql.append("B.BATCH_ID,B.SEQUENCE,B.TRANS_RRN,B.LOT_STEP_SEQUENCE,B.DE_TRANS_RRN,");
sql.append("B.DE_LOT_STEP_SEQUENCE,B.LOT_ID,B.LOT_RRN,B.MONITOR_LOT_ID,B.MONITOR_LOT_RRN,");
sql.append("B.TRANS_USER_ID,B.TRANS_TIME,B.DE_TRANS_USER_ID,B.DE_TRANS_TIME ");
sql.append(" FROM BATCH_LOT_STORE_H B WHERE 1=1 ");
List<Object> argList = new ArrayList<>();
if (StringUtils.isNotBlank(storeCondition.getBatchId())) {
sql.append(" AND B.BATCH_ID = ? ");
argList.add(storeCondition.getBatchId());
}
if (StringUtils.isNotBlank(storeCondition.getEqptId())) {
sql.append(" AND B.EQPT_ID = ? ");
argList.add(storeCondition.getEqptId());
}
if (storeCondition.getLotRrn() != null && storeCondition.getLotRrn().longValue() > 0) {
sql.append(" AND B.LOT_RRN = ? ");
argList.add(storeCondition.getLotRrn());
}
if (!showAll) {
sql.append(" AND B.DE_TRANS_RRN IS NULL ");
}
sql.append(" ORDER BY B.BATCH_ID,B.SEQUENCE");
List<Map<String, Object>> list = jdbcTemplate
.query(sql.toString(), argList.toArray(), new RowMapper<Map<String, Object>>() {
@Override
public Map<String, Object> mapRow(ResultSet rs, int rowNum) throws SQLException {
Map<String, Object> map = MapUtils.newHashMap();
map.put("batchId", rs.getString("BATCH_ID"));
map.put("lotId", rs.getString("LOT_ID"));
map.put("lotRrn", rs.getLong("LOT_RRN"));
map.put("transRrn", rs.getLong("TRANS_RRN"));
map.put("lotStepSequence", rs.getLong("LOT_STEP_SEQUENCE"));
map.put("monitorLotId", rs.getString("MONITOR_LOT_ID"));
map.put("monitorLotRrn", rs.getLong("MONITOR_LOT_RRN"));
map.put("deTransRrn", rs.getLong("DE_TRANS_RRN"));
map.put("deLotStepSequence", rs.getLong("DE_LOT_STEP_SEQUENCE"));
map.put("batchCreateTime",
DateUtils.formatDate(rs.getTimestamp("TRANS_TIME"), DateUtils.DATE_FORMAT4DATE));
String batchDeleteTime = rs.getString("DE_TRANS_TIME") == null ? "" : DateUtils
.formatDate(rs.getTimestamp("DE_TRANS_TIME"), DateUtils.DATE_FORMAT4DATE);
map.put("batchDeleteTime", batchDeleteTime);
if (StringUtils.isBlank(batchDeleteTime)) {
map.put("inLineBatch", NumberUtils.INTEGER_ONE.toString());
}
return map;
}
});
return list;
}
@Override
public List<EqpRcpDiffBatchSetupInfo> getEqpRecipeDiffBatchSet(long equipmentRrn) {
String sql = "SELECT EQPT_ID,EQPT_RRN,RECIPE_ID,RECIPE_RRN,MONITOR_PRODUCT_ID,MONITOR_PRODUCT_RRN," +
"MONITOR_LOWER_LIMIT,EDC_FLAG FROM DIFF_EQPT_BATCH_SET WHERE EQPT_RRN = ?";
return jdbcTemplate
.query(sql, new Object[]{equipmentRrn}, (RowMapper<EqpRcpDiffBatchSetupInfo>) (rs, rowNum) -> {
EqpRcpDiffBatchSetupInfo setupInfo = new EqpRcpDiffBatchSetupInfo();
setupInfo.setEqptId(rs.getString("EQPT_ID"));
setupInfo.setEqptRrn(rs.getLong("EQPT_RRN"));
setupInfo.setRecipeId(rs.getString("RECIPE_ID"));
setupInfo.setRecipeRrn(rs.getLong("RECIPE_RRN"));
setupInfo.setMonitorProductId(rs.getString("MONITOR_PRODUCT_ID"));
setupInfo.setMonitorProductRrn(rs.getLong("MONITOR_PRODUCT_RRN"));
setupInfo.setMonitorLimit(rs.getInt("MONITOR_LOWER_LIMIT"));
setupInfo.setEdcFlag(rs.getBoolean("EDC_FLAG"));
return setupInfo;
});
}
@Override
public Page getEqpRcpBatchSetupHistory(Map<String, Object> condition, Page page) {
String sql = "SELECT D.TRANS_ID,D.TRANS_TIME,D.TRANS_USER_ID,D.EQPT_ID,D.RECIPE_ID,D.MONITOR_PRODUCT_ID," +
" D.MONITOR_LOWER_LIMIT,D.EDC_FLAG FROM DIFF_EQPT_BATCH_SET_H D WHERE 1=1 ";
List<Object> args = new ArrayList<Object>();
if (StringUtils.isNotBlank(MapUtils.getString(condition, "eqptRrn"))) {
sql += " AND D.EQPT_RRN = ?";
args.add(MapUtils.getLong(condition, "eqptRrn"));
}
sql += " ORDER BY D.TRANS_TIME DESC";
return jdbcTemplate.queryForPage(page, sql, args.toArray(), new RowMapper<Map<String, Object>>() {
@Override
public Map<String, Object> mapRow(ResultSet rs, int rowNum) throws SQLException {
Map<String, Object> map = MapUtils.newHashMap();
map.put("transId", rs.getString("TRANS_ID"));
map.put("transTime", rs.getTimestamp("TRANS_TIME") == null ? "" : DateUtils
.formatDate(rs.getTimestamp("TRANS_TIME"), DateUtils.DATE_FORMAT4DATE));
map.put("transPerformedBy", rs.getString("TRANS_USER_ID"));
map.put("eqptId", rs.getString("EQPT_ID"));
map.put("recipeId", rs.getString("RECIPE_ID"));
map.put("productId", rs.getString("MONITOR_PRODUCT_ID"));
map.put("limit", rs.getLong("MONITOR_LOWER_LIMIT"));
map.put("edcFlag", rs.getString("EDC_FLAG"));
return map;
}
});
}
}