|
|
|
@ -15,6 +15,7 @@ import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
import org.springframework.util.CollectionUtils;
|
|
|
|
|
import org.springframework.util.StringUtils;
|
|
|
|
|
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.Map;
|
|
|
|
@ -42,50 +43,66 @@ public class JxRestoreProductDataService implements IJxRestoreProductDataService
|
|
|
|
|
|
|
|
|
|
Integer limit = paramMap.containsKey(MesPcnExtConstWords.LIMIT) ? (Integer) paramMap.get(MesPcnExtConstWords.LIMIT) : 100;
|
|
|
|
|
|
|
|
|
|
Map<String, List<MesProductData>> productDataMap = findProductData(organizeCode, limit);
|
|
|
|
|
List<MesProductData> productDataList = findProductDataList(organizeCode, limit);
|
|
|
|
|
|
|
|
|
|
if (CollectionUtils.isEmpty(productDataMap)) return;
|
|
|
|
|
log.info("工厂{} RESTORE PRODUCT DATA JOB --- EXEC --- PRODUCT DATA SIZE:[{}]", organizeCode, CollectionUtils.isEmpty(productDataList) ? 0 : productDataList.size());
|
|
|
|
|
|
|
|
|
|
for (Map.Entry<String, List<MesProductData>> entry : productDataMap.entrySet()) {
|
|
|
|
|
if (CollectionUtils.isEmpty(productDataList)) return;
|
|
|
|
|
|
|
|
|
|
if (null == entry) continue;
|
|
|
|
|
doRestoreProductData(organizeCode, getProductDataMapByPs(productDataList), true);
|
|
|
|
|
|
|
|
|
|
SxWorkCellLineOffRecord workCellLineOffRecord = getWorkCellLineOffRecord(organizeCode, entry.getKey());
|
|
|
|
|
doRestoreProductData(organizeCode, getProductDataMapBySn(productDataList), false);
|
|
|
|
|
|
|
|
|
|
Integer count = doRestoreProductData(entry.getValue(), workCellLineOffRecord);
|
|
|
|
|
|
|
|
|
|
log.info("工厂{} RESTORE PRODUCT DATA JOB --- EXEC --- PRODUCT SN:{} --- COMPLETED:[{}] --- UNCOMPLETE:[{}]", organizeCode, entry.getKey(), count, entry.getValue().size());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
private Map<String, List<MesProductData>> getProductDataMapByPs(List<MesProductData> productDataList) {
|
|
|
|
|
return CollectionUtils.isEmpty(productDataList) ? null :
|
|
|
|
|
productDataList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getProductSn()))).collect(Collectors.groupingBy(MesProductData::getProductSn));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private Map<String, List<MesProductData>> getProductDataMapBySn(List<MesProductData> productDataList) {
|
|
|
|
|
return CollectionUtils.isEmpty(productDataList) ? null :
|
|
|
|
|
productDataList.stream().filter(o -> (null != o && StringUtils.isEmpty(o.getProductSn()) && !StringUtils.isEmpty(o.getSerialNumber()))).collect(Collectors.groupingBy(MesProductData::getSerialNumber));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private Map<String, List<MesProductData>> findProductData(String organizeCode, Integer limit) {
|
|
|
|
|
private List<MesProductData> findProductDataList(String organizeCode, Integer limit) {
|
|
|
|
|
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
|
DdlPreparedPack.getNumberSmallerEqualPack(0, MesPcnExtConstWords.SYSTEM_SYNC_STATUS, packBean);
|
|
|
|
|
DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{MesPcnExtConstWords.SYSTEM_SYNC_STATUS}, packBean);
|
|
|
|
|
List<MesProductData> productDataList = productDataRepository.findByHqlTopWhere(packBean, limit);
|
|
|
|
|
|
|
|
|
|
log.info("工厂{} RESTORE PRODUCT DATA JOB --- EXEC --- PRODUCT DATA SIZE:[{}]", organizeCode, CollectionUtils.isEmpty(productDataList) ? 0 : productDataList.size());
|
|
|
|
|
|
|
|
|
|
return CollectionUtils.isEmpty(productDataList) ? null :
|
|
|
|
|
productDataList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesProductData::getProductSn));
|
|
|
|
|
return productDataRepository.findByHqlTopWhere(packBean, limit);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private SxWorkCellLineOffRecord getWorkCellLineOffRecord(String organizeCode, String productSn) {
|
|
|
|
|
private SxWorkCellLineOffRecord getWorkCellLineOffRecord(String organizeCode, String sn, Boolean flag) {
|
|
|
|
|
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
|
|
|
|
|
DdlPreparedPack.getStringEqualPack(productSn, MesPcnExtConstWords.PRODUCT_SN, packBean);
|
|
|
|
|
if (flag) DdlPreparedPack.getStringEqualPack(sn, MesPcnExtConstWords.PRODUCT_SN, packBean);
|
|
|
|
|
else DdlPreparedPack.getStringEqualPack(sn, MesPcnExtConstWords.SERIAL_NUMBER, packBean);
|
|
|
|
|
DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{MesPcnExtConstWords.CREATE_DATE_TIME}, packBean);
|
|
|
|
|
return workCellLineOffRecordRepository.getByProperty(packBean);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void doRestoreProductData(String organizeCode, Map<String, List<MesProductData>> productDataMap, Boolean flag) {
|
|
|
|
|
|
|
|
|
|
for (Map.Entry<String, List<MesProductData>> entry : productDataMap.entrySet()) {
|
|
|
|
|
|
|
|
|
|
if (null == entry) continue;
|
|
|
|
|
|
|
|
|
|
SxWorkCellLineOffRecord workCellLineOffRecord = getWorkCellLineOffRecord(organizeCode, entry.getKey(), flag);
|
|
|
|
|
|
|
|
|
|
Integer count = doRestoreProductData(entry.getValue(), workCellLineOffRecord);
|
|
|
|
|
|
|
|
|
|
log.info("工厂{} RESTORE PRODUCT DATA JOB --- EXEC --- SN:{} --- {} --- QTY:[{}] --- COMPLETED:[{}]", organizeCode, entry.getKey(), flag ? "产品条码" : "过程条码", entry.getValue().size(), count);
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private Integer doRestoreProductData(List<MesProductData> productDataList, SxWorkCellLineOffRecord workCellLineOffRecord) {
|
|
|
|
|
Integer count = 0;
|
|
|
|
|
if (null != workCellLineOffRecord) count = productDataList.size();
|
|
|
|
|
for (MesProductData productData : productDataList) {
|
|
|
|
|
if (null == productData) continue;
|
|
|
|
|
if (count == 0) productData.setSystemSyncStatus(productData.getSystemSyncStatus() > 0 ? 0 : productData.getSystemSyncStatus() - 1);
|
|
|
|
|
if (count == 0) productData.setSystemSyncStatus(productData.getSystemSyncStatus() - 1);
|
|
|
|
|
else {
|
|
|
|
|
productData.setProductSn(workCellLineOffRecord.getProductSn());
|
|
|
|
|
productData.setOrderNo(workCellLineOffRecord.getWorkOrderNo());
|
|
|
|
|
productData.setPartNo(workCellLineOffRecord.getPartNo());
|
|
|
|
|
productData.setPartDesc(workCellLineOffRecord.getPartNameRdd());
|
|
|
|
|