LotAutoMonitorInqDaoImpl.java
package com.mycim.server.automonitor.dao.impl;
import com.mycim.framework.jdbc.JdbcTemplate;
import com.mycim.framework.jdbc.Page;
import com.mycim.framework.utils.lang.StringUtils;
import com.mycim.framework.utils.lang.collections.CollectionUtils;
import com.mycim.framework.utils.lang.collections.MapUtils;
import com.mycim.server.automonitor.dao.LotAutoMonitorInqDao;
import com.mycim.server.automonitor.dao.mapper.*;
import com.mycim.valueobject.SystemConstant;
import com.mycim.valueobject.automonitor.dto.LotAutoMonitorQueryDTO;
import com.mycim.valueobject.automonitor.dto.MonitorJobQueryDTO;
import com.mycim.valueobject.automonitor.entity.*;
import com.mycim.valueobject.automonitor.util.MonitorJobStatusConts;
import com.mycim.valueobject.consts.DataBaseNames;
import com.mycim.valueobject.wip.LotStatus;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author finatice.yang
* @date 2021/8/27
**/
@Repository
public class LotAutoMonitorInqDaoImpl implements LotAutoMonitorInqDao {
@Autowired
JdbcTemplate jdbcTemplate;
@Override
public boolean checkLotIsAutoMonitorLot(Long lotRrn) {
StringBuilder sql = new StringBuilder("SELECT COUNT(LOT_RRN) FROM ");
sql.append(DataBaseNames.AUTO_MONITOR_LOT_STORE);
sql.append(" WHERE lot_rrn = :lotRrn ");
// sql.append(" or (base_lot_rrn = :lotRrn and JOB_STATUS NOT IN (:jobStatus)) ");
Map<String, Object> paramMap = MapUtils.newHashMap();
paramMap.put("lotRrn", lotRrn);
paramMap.put("jobStatus", Arrays.asList(MonitorJobStatusConts.getCloseJobStatus()));
Long count = jdbcTemplate.queryForObject(sql.toString(), paramMap, Long.class);
return Objects.nonNull(count) && count.longValue() > 0;
}
@Override
public boolean checkLotInAutoMonitorBaseLot(Long lotRrn) {
StringBuilder sql = new StringBuilder("SELECT COUNT(LOT_RRN) FROM ");
sql.append(DataBaseNames.AUTO_MONITOR_LOT_STORE);
sql.append(" WHERE BASE_LOT_RRN = :lotRrn AND JOB_STATUS NOT IN (:jobStatus)");
Map<String, Object> paramMap = MapUtils.newHashMap();
paramMap.put("lotRrn", lotRrn);
paramMap.put("jobStatus", Arrays.asList(MonitorJobStatusConts.getCloseJobStatus()));
Long count = jdbcTemplate.queryForObject(sql.toString(), paramMap, Long.class);
return Objects.nonNull(count) && count.longValue() > 0;
}
@Override
public LotMonitorJobStore getLotMonitorJobStore(Long lotRrn) {
StringBuilder sql = new StringBuilder(getMonitorJobSql());
sql.append(" WHERE STORE.LOT_RRN = ? ");
Object[] args = new Object[]{lotRrn};
return jdbcTemplate.queryForObjectWithNull(sql.toString(), args, new LotMonitorJobStoreMapper());
}
@Override
public Page getMonitorJobListPage(Page page, MonitorJobQueryDTO queryDTO) {
StringBuilder sql = new StringBuilder(getMonitorJobSql());
sql.append(" WHERE 1=1 ");
List<Object> argList = new ArrayList<>();
if (StringUtils.isNotBlank(queryDTO.getEqptId())) {
sql.append(" AND STORE.EQUIPMENT_ID LIKE ? ");
argList.add(queryDTO.getEqptId());
}
if (StringUtils.isNotBlank(queryDTO.getItemType())) {
sql.append(" AND STORE.ITEM_TYPE like ? ");
argList.add(queryDTO.getItemType());
}
if (StringUtils.isNotBlank(queryDTO.getProductId())) {
sql.append(" AND L.PRODUCT_ID like ? ");
argList.add(queryDTO.getProductId());
}
if(StringUtils.isNotBlank(queryDTO.getCarrierId())){
sql.append(" AND L.CARRIER_ID LIKE ? ");
argList.add(queryDTO.getCarrierId());
}
if(StringUtils.isNotBlank(queryDTO.getLotId())) {
sql.append(" AND L.LOT_ID LIKE ? ");
argList.add(queryDTO.getLotId());
}
if (CollectionUtils.isNotEmpty(queryDTO.getJobStatus())) {
if (!queryDTO.getJobStatus().contains(SystemConstant.Str.ALL)) {
String statusList = queryDTO.getJobStatus().stream().map(status -> {
return "'" + status + "'";
}).collect(Collectors.joining(StringUtils.COMMA_SIGN));
sql.append(" AND STORE.JOB_STATUS IN (").append(statusList).append(")");
}
}
return jdbcTemplate.queryForPage(page, sql.toString(), argList.toArray(), new LotMonitorJobStoreMapper());
}
@Override
public LotAutoMonitorInfo getLotActiveAutoMonitorInfo(Long lotRrn) {
StringBuilder sb = getLotMonitorInfoSql();
sb.append(" WHERE JOB.JOB_STATUS NOT IN ('CANCEL','CLOSED') ");
sb.append(" AND L.LOT_RRN = ?");
Object[] args = new Object[]{lotRrn};
return jdbcTemplate.queryForObjectWithNull(sb.toString(), args, new LotAutoMonitorInfoMapper());
}
@Override
public LotAutoMonitorInfo getLotAutoMonitorInfo(Long lotRrn) {
StringBuilder sb = getLotMonitorInfoSql();
sb.append(" WHERE L.LOT_RRN = ?");
Object[] args = new Object[]{lotRrn};
return jdbcTemplate.queryForObjectWithNull(sb.toString(), args, new LotAutoMonitorInfoMapper());
}
@Override
public Page getLotMonitorLotPage(Page page, LotAutoMonitorQueryDTO queryDTO) {
StringBuilder sb = getLotMonitorInfoSql();
sb.append(" WHERE 1=1 ");
List<Object> argList = new ArrayList<>();
if (StringUtils.isNotEmpty(queryDTO.getLotId())) {
sb.append(" AND L.LOT_ID LIKE ? ");
argList.add(queryDTO.getLotId());
}
if (StringUtils.isNotEmpty(queryDTO.getCarrierId())) {
sb.append(" AND L.CARRIER_ID LIKE ? ");
argList.add(queryDTO.getCarrierId());
}
if (StringUtils.isNotEmpty(queryDTO.getMainEqptId())) {
sb.append(" AND item.EQUIPMENT_ID LIKE ? ");
argList.add(queryDTO.getMainEqptId());
}
if (StringUtils.isNotEmpty(queryDTO.getMainEqptLocation())) {
sb.append(" AND ITEM.EQUIPMENT_LOCATION LIKE ? ");
argList.add(queryDTO.getMainEqptLocation());
}
if (StringUtils.isNotEmpty(queryDTO.getItemType())) {
sb.append(" AND item.item_type LIKE ? ");
argList.add(queryDTO.getItemType());
}
if (StringUtils.isNotEmpty(queryDTO.getProductId())) {
sb.append(" AND L.PRODUCT_ID LIKE ?");
argList.add(queryDTO.getProductId());
}
if (CollectionUtils.isNotEmpty(queryDTO.getLotStatus())) {
if (!queryDTO.getLotStatus().contains(SystemConstant.Str.ALL)) {
String statusList = queryDTO.getLotStatus().stream().map(status -> {
return "'" + status + "'";
}).collect(Collectors.joining(StringUtils.COMMA_SIGN));
sb.append(" AND L.LOT_STATUS IN (").append(statusList).append(")");
}
} else {
sb.append(" AND JOB.JOB_STATUS NOT IN (?,?) ");
argList.addAll(Arrays.asList(MonitorJobStatusConts.getCloseJobStatus()));
}
if (CollectionUtils.isNotEmpty(queryDTO.getAutoMonitorJobStatus())) {
if (!queryDTO.getAutoMonitorJobStatus().contains(SystemConstant.Str.ALL)) {
String statusList = queryDTO.getAutoMonitorJobStatus().stream().map(status -> {
return "'" + status + "'";
}).collect(Collectors.joining(StringUtils.COMMA_SIGN));
sb.append(" AND JOB.JOB_STATUS IN (").append(statusList).append(")");
}
}
return jdbcTemplate.queryForPage(page, sb.toString(), argList.toArray(), new LotAutoMonitorInfoMapper());
}
@Override
public List<LotAutoMonitorInfo> getLotMonitorLotList(LotAutoMonitorQueryDTO queryDTO) {
StringBuilder sb = getLotMonitorInfoSql();
sb.append(" WHERE JOB.JOB_STATUS NOT IN (:jobStatus) ");
Map<String, Object> paramMap = MapUtils.newHashMap();
paramMap.put("jobStatus", Arrays.asList(MonitorJobStatusConts.getCloseJobStatus()));
if (CollectionUtils.isNotEmpty(queryDTO.getLotRrns())) {
sb.append(" AND L.LOT_RRN IN (:lotRrns) ");
paramMap.put("lotRrns", queryDTO.getLotRrns());
}
if (queryDTO.getCarrierRrn() != null && queryDTO.getCarrierRrn().longValue() > 0) {
sb.append(" AND L.carrier_rrn = :carrierRrn ");
paramMap.put("carrierRrn", queryDTO.getCarrierRrn());
}
if (queryDTO.getBaseLotRrn() != null && queryDTO.getBaseLotRrn().longValue() > 0) {
sb.append(" AND job.base_lot_rrn = :baseLotRrn ");
paramMap.put("baseLotRrn", queryDTO.getBaseLotRrn());
}
return jdbcTemplate.query(sb.toString(), paramMap, new LotAutoMonitorInfoMapper());
}
@Override
public List<MonitorCarrierMapping> getMonitorCarrierMappings(Long monitorCarrierRrn) {
StringBuffer sql = new StringBuffer("SELECT ");
sql.append(" MONITOR_CARRIER_RRN,MONITOR_CARRIER_ID,UNIT_RRN,UNIT_ID,POSITION,SOURCE_POSITION,LOT_RRN,LOT_ID ");
sql.append(" FROM ").append(DataBaseNames.AUTO_MONITOR_CARRIER_MAPPING);
sql.append(" WHERE MONITOR_CARRIER_RRN = ? ");
return jdbcTemplate.query(sql.toString(), new Object[]{monitorCarrierRrn}, new MonitorCarrierMappingMapper());
}
@Override
public List<LotMonitorJobStepEdcInfo> getStepEdcInfoList(Long transRrn) {
StringBuilder sql = new StringBuilder("SELECT ");
sql.append(" TRANS_RRN,LOT_RRN,LOT_ID,STEP_SEQUENCE,SEQUENCE,UNIT_RRN,UNIT_ID, ");
sql.append(" SPC_JOB_ID,SPC_JOB_NAME,DATA_VALUE,FORMULA,VIO_INFO ");
sql.append(" FROM ").append(DataBaseNames.AUTO_MONITOR_LOT_EDC_INFO);
sql.append(" WHERE TRANS_RRN = ?");
return jdbcTemplate.query(sql.toString(), new Object[]{transRrn}, new LotAutoMonitorEdcInfoMapper());
}
@Override
public Integer getLotStepEdcCount(Long lotRrn,Long stepSequence) {
StringBuilder sql = new StringBuilder("SELECT ");
sql.append(" count(sequence) FROM ").append(DataBaseNames.AUTO_MONITOR_LOT_EDC_INFO);
sql.append(" WHERE LOT_RRN = ? AND STEP_SEQUENCE = ? ");
return jdbcTemplate.queryForObjectWithNull(sql.toString(),new Object[]{lotRrn,stepSequence},Integer.class);
}
@Override
public List<String> getFinishLotIdList(Long baseLotRrn) {
StringBuilder sql = new StringBuilder("SELECT ");
sql.append(" AMS.LOT_ID FROM ").append(DataBaseNames.AUTO_MONITOR_LOT_STORE).append(" AMS ");
sql.append(" JOIN ").append(DataBaseNames.LOT).append(" L ");
sql.append(" ON AMS.LOT_RRN = L.LOT_RRN ");
sql.append(" WHERE AMS.BASE_LOT_RRN = :baseLotRrn ");
sql.append(" AND L.LOT_STATUS = :lotStatus");
sql.append(" AND AMS.JOB_STATUS NOT IN (:jobStatus) ");
Map<String, Object> paramMap = MapUtils.newHashMap();
paramMap.put("baseLotRrn", baseLotRrn);
paramMap.put("lotStatus", LotStatus.AUTO_MONITOR_JOB_FINISH);
paramMap.put("jobStatus", Arrays.asList(MonitorJobStatusConts.getCloseJobStatus()));
return jdbcTemplate.query(sql.toString(), paramMap, String.class);
}
@Override
public List<AutoMonitorUnitInfo> getAutoMonitorUnitInfoList(Long lotRrn) {
StringBuilder sql = new StringBuilder("SELECT ");
sql.append("UNIT_RRN,UNIT_ID,LOT_RRN,LOT_ID,CARRIER_RRN,CARRIER_ID,POSITION,");
sql.append("MONITOR_CARRIER_RRN,MONITOR_CARRIER_ID,MONITOR_CARRIER_POSITION ");
sql.append(" FROM ").append(DataBaseNames.AUTO_MONITOR_UNIT);
sql.append(" WHERE LOT_RRN = ?");
return jdbcTemplate.query(sql.toString(), new AutoMonitorUnitInfoMapper(), lotRrn);
}
@Override
public Page getAutoMonitorJobHistoryPage(Page page, MonitorJobQueryDTO queryDTO) {
StringBuilder sql = new StringBuilder("SELECT ");
sql.append(" trans_rrn,trans_id,trans_user_id,trans_time,trans_comments,");
sql.append(" lot_rrn,lot_id,base_lot_rrn,base_lot_id,equipment_rrn,equipment_id,item_type,qty1,");
sql.append(" process_rrn,process_id,process_version,product_rrn,product_id,");
sql.append(" job_status,workflow_rrn,workflow_version,workflow_id,wfl_step,");
sql.append(" monitor_carrier_rrn,monitor_carrier_id,carrier_rrn,carrier_id,merge_wfl_step ");
sql.append(" from ").append(DataBaseNames.AUTO_MONITOR_LOT_STORE_H);
sql.append(" WHERE 1=1 ");
List<Object> argList = new ArrayList<>();
if (StringUtils.isNotBlank(queryDTO.getEqptId())) {
sql.append(" AND EQUIPMENT_ID LIKE ? ");
argList.add(queryDTO.getEqptId());
}
if (StringUtils.isNotBlank(queryDTO.getItemType())) {
sql.append(" AND ITEM_TYPE like ? ");
argList.add(queryDTO.getItemType());
}
if (StringUtils.isNotBlank(queryDTO.getProductId())) {
sql.append(" AND PRODUCT_ID like ? ");
argList.add(queryDTO.getProductId());
}
if (StringUtils.isNotBlank(queryDTO.getCarrierId())) {
sql.append(" AND CARRIER_ID LIKE ? ");
argList.add(queryDTO.getCarrierId());
}
if (StringUtils.isNotBlank(queryDTO.getLotId())) {
sql.append(" AND LOT_ID LIKE ? ");
argList.add(queryDTO.getLotId());
}
sql.append(" order by trans_time desc");
return jdbcTemplate.queryForPage(page, sql.toString(), argList.toArray(), new AutoMonitorJobHistoryMapper());
}
private String getMonitorJobSql() {
StringBuilder sql = new StringBuilder("SELECT ");
sql.append(" STORE.LOT_RRN,L.LOT_ID,L.CARRIER_RRN,L.CARRIER_ID,STORE.BASE_LOT_RRN,STORE.BASE_LOT_ID,");
sql.append(" STORE.EQUIPMENT_RRN,STORE.EQUIPMENT_ID,STORE.ITEM_TYPE,STORE.QTY1,L.PRODUCT_RRN,L.PRODUCT_ID, ");
sql.append(" STORE.PROCESS_RRN,STORE.PROCESS_ID,STORE.PROCESS_VERSION,STORE.JOB_STATUS,STORE.MERGE_WFL_STEP, ");
sql.append(" STORE.WORKFLOW_RRN,STORE.WORKFLOW_VERSION,STORE.WFL_STEP, ");
sql.append(" STORE.MONITOR_CARRIER_RRN,STORE.MONITOR_CARRIER_ID ");
sql.append(" FROM ").append(DataBaseNames.AUTO_MONITOR_LOT_STORE).append(" STORE ");
sql.append(" LEFT JOIN ").append(" ( ");
sql.append(" SELECT L.LOT_RRN,L.LOT_ID,L.CARRIER_RRN,C.CARRIER_ID,L.QTY1,L.PRODUCT_RRN,P.PRODUCT_ID ");
sql.append(" FROM ").append(DataBaseNames.LOT).append(" L ");
sql.append(" LEFT JOIN ").append(DataBaseNames.CARRIER).append(" C ON L.CARRIER_RRN = C.CARRIER_RRN ");
sql.append(" LEFT JOIN ").append(DataBaseNames.PRODUCT).append(" P ON L.PRODUCT_RRN = P.SYS_RRN ");
sql.append(" ) L ").append(" ON STORE.LOT_RRN = L.LOT_RRN ");
return sql.toString();
}
private StringBuilder getLotMonitorInfoSql() {
StringBuilder sql = new StringBuilder("SELECT ");
sql.append("L.LOT_RRN,L.LOT_ID,L.CARRIER_RRN,L.CARRIER_ID,L.QTY1,L.LOT_STATUS,L.PRODUCT_ID,");
sql.append("l.lot_flow_seq,l.lot_stage_id,");
sql.append("JOB.BASE_LOT_ID,JOB.BASE_LOT_RRN,JOB.JOB_STATUS,JOB.MONITOR_CARRIER_RRN,JOB.MONITOR_CARRIER_ID,");
sql.append("ITEM.EQUIPMENT_RRN AS MAIN_EQUIPMENT_RRN,ITEM.EQUIPMENT_ID AS MAIN_EQUIPMENT_ID,");
sql.append("ITEM.EQUIPMENT_LOCATION,item.item_type,item.workflow_rrn,item.workflow_version,");
sql.append("ITEM.START_SPLIT_FLAG,");
sql.append("ITEM.MAIN_EQUIPMENT_TYPE,STEP.STEP_SEQUENCE,STEP.EQUIPMENT_TYPE,step.flow_seq,");
sql.append("step.operation_desc,step.recipe_id,step.stage_id,STEP.NONRT_SLOT_TYPE,");
sql.append("STEP.EQUIPMENT_RRN,STEP.EQUIPMENT_ID,STEP.EQUIPMENT_GROUP_RRN,STEP.EQUIPMENT_GROUP_ID,");
sql.append("STEP.RETICLE_RRN,STEP.RETICLE_ID, STEP.RETICLE_GROUP_RRN,STEP.RETICLE_GROUP_ID ");
sql.append(" FROM ").append(DataBaseNames.AUTO_MONITOR_LOT_STORE).append(" JOB ");
sql.append(" LEFT JOIN ");
sql.append(" (SELECT LOT.LOT_RRN,LOT.LOT_ID,LOT.CARRIER_RRN,LOT.QTY1,LOT.LOT_STATUS,LOT.OPERATION_RRN, ");
sql.append(" lot.flow_seq as lot_flow_seq, lot.stage_id as lot_stage_id, ");
sql.append(" P.PRODUCT_ID,C.CARRIER_ID FROM ").append(DataBaseNames.LOT);
sql.append(" LEFT JOIN ").append(DataBaseNames.CARRIER).append(" C ON LOT.CARRIER_RRN = C.CARRIER_RRN ");
sql.append(" LEFT JOIN ").append(DataBaseNames.PRODUCT).append(" P ON LOT.PRODUCT_RRN = P.SYS_RRN ");
sql.append(" ) L ON JOB.LOT_RRN = L.LOT_RRN");
sql.append(" LEFT JOIN");
sql.append(" (SELECT ITEM.WORKFLOW_RRN,ITEM.WORKFLOW_VERSION,ITEM.EQUIPMENT_RRN,ITEM.EQUIPMENT_ID,");
sql.append(" E.EQUIPMENT_LOCATION,ITEM.ITEM_TYPE,ITEM.MAIN_EQUIPMENT_TYPE,ITEM.START_SPLIT_FLAG ");
sql.append(" FROM ").append(DataBaseNames.AUTO_MONITOR_ITEM).append(" ITEM");
sql.append(" LEFT JOIN ").append(DataBaseNames.EQUIPMENT).append(" E ON ITEM.EQUIPMENT_RRN = E.EQPT_RRN ");
sql.append(" ) ITEM ON JOB.WORKFLOW_RRN = ITEM.WORKFLOW_RRN AND JOB.WORKFLOW_VERSION = ITEM.WORKFLOW_VERSION ");
sql.append(" LEFT JOIN ").append(DataBaseNames.AUTO_MONITOR_ITEM_STEP).append(" STEP ");
sql.append(" ON JOB.WORKFLOW_RRN = STEP.WORKFLOW_RRN AND JOB.WORKFLOW_VERSION = STEP.WORKFLOW_VERSION ");
sql.append(" AND L.OPERATION_RRN = STEP.OPERATION_RRN ");
return sql;
}
}