jx pcn 下线补录来源于DB的采集数据

tags/yfai-pcn-ext-v1.0
王杰 1 year ago
parent 367b48d0c5
commit dd0ce48a6b

@ -23,4 +23,13 @@ public interface IJxProductDataService {
@Transactional(propagation = Propagation.REQUIRES_NEW, noRollbackFor = {ImppBusiException.class, Exception.class})
void insertProductDataNoRollback(List<MesProductData> productDataList);
/**
*
* @param organizeCode
* @param productSn
* @return
*/
@ApiOperation(value = "获取生产数据集合", notes = "获取生产数据集合")
List<MesProductData> findProductDataList(String organizeCode, String productSn);
}

@ -0,0 +1,20 @@
package cn.estsh.i3plus.ext.mes.pcn.api.job.jx;
import io.swagger.annotations.ApiOperation;
import java.util.Map;
/**
* @Author: wangjie
* @CreateDate: 2021/01/19 15:06
* @Description:
**/
public interface IJxRestoreProductDataService {
/**
*
* @param paramMap
*/
@ApiOperation(value = "嘉兴补录检测数据定时任务", notes = "嘉兴补录检测数据定时任务")
void doRestoreProductData(Map<String, Object> paramMap);
}

@ -0,0 +1,52 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.schedulejob.jx;
import cn.estsh.i3plus.ext.mes.pcn.api.job.jx.IJxRestoreProductDataService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import com.alibaba.fastjson.JSONObject;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.quartz.DisallowConcurrentExecution;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import java.util.Map;
/**
* @author wangjie
* @version 1.0
* @date 2021/2/2 16:44
**/
@Slf4j
@DisallowConcurrentExecution
@ApiOperation("嘉兴补录检测数据定时任务")
public class JxRestoreProductDataJob implements Job {
@Autowired
private IJxRestoreProductDataService restoreProductDataService;
@Override
public void execute(JobExecutionContext jobExecutionContext) {
Object param = jobExecutionContext.getJobDetail().getJobDataMap().get(MesPcnExtConstWords.PARAM);
if (StringUtils.isEmpty(param)) return;
log.info("RESTORE PRODUCT DATA JOB --- EXEC --- PARAM:{}", param.toString());
Map<String, Object> paramMap = JSONObject.parseObject(param.toString(), Map.class);
if (!paramMap.containsKey(MesPcnExtConstWords.ORGANIZE_CODE)) return;
log.info("工厂{} RESTORE PRODUCT DATA JOB --- EXEC -- START --- PARAM:{}", paramMap.get(MesPcnExtConstWords.ORGANIZE_CODE), param.toString());
long startTime = System.currentTimeMillis();
restoreProductDataService.doRestoreProductData(paramMap);
long endTime = System.currentTimeMillis();
log.info("工厂{} RESTORE PRODUCT DATA JOB --- EXEC --- END --- 耗时: {} ms", paramMap.get(MesPcnExtConstWords.ORGANIZE_CODE), endTime - startTime);
}
}

@ -21,7 +21,7 @@ import java.util.*;
import java.util.stream.Collectors;
/**
* PLC------
* PLC------
*/
@Slf4j
public class SxThirdPartyPlcCollectProductDataStepService implements ISxThirdPartyPlcCollectDataStepService {

@ -23,11 +23,13 @@ import cn.estsh.i3plus.platform.common.tool.MathOperation;
import cn.estsh.i3plus.platform.common.tool.TimeTool;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.*;
import cn.estsh.i3plus.pojo.mes.bean.MesPackageDetail;
import cn.estsh.i3plus.pojo.mes.bean.MesPart;
import cn.estsh.i3plus.pojo.mes.bean.MesRouteProcess;
import cn.estsh.i3plus.pojo.mes.bean.MesShift;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.model.StepResult;
import cn.estsh.i3plus.pojo.mes.repository.MesPackageDetailRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesProductDataRepository;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
@ -79,9 +81,6 @@ public class JxProdBusiStrategyCommonService implements IJxProdBusiStrategyServi
private MesRepairTaskRepository repairTaskRepository;
@Autowired
private MesProductDataRepository productDataRepository;
@Autowired
private IFsmRouteDataService fsmRouteDataService;
@Autowired
@ -528,30 +527,6 @@ public class JxProdBusiStrategyCommonService implements IJxProdBusiStrategyServi
}
private void doRestoreProductData(JxProdBusiStrategyParamsBuilder params) {
String workCellCode2Pd = ((StationRequestBean) params.getObj()).getWcpcMap().get(MesPcnExtConstWords.RESTORE_PD_FLAG);
if (StringUtils.isEmpty(workCellCode2Pd)) return;
List<MesProductData> productDataList = productDataRepository.findByProperty(
new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.PRODUCT_SN},
new Object[]{params.getOrganizeCode(), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), params.getProductSn()});
if (CollectionUtils.isEmpty(productDataList)) return;
for (MesProductData item : productDataList) {
if (null == item) continue;
if (!StringUtils.isEmpty(item.getOrderNo())) continue;
item.setPartNo(params.getOrderModel().getPartNo());
item.setPartDesc(params.getOrderModel().getPartNameRdd());
item.setOrderNo(params.getOrderModel().getOrderNo());
item.setSystemSyncStatus(MesPcnExtEnumUtil.IF_SYNC_STATUS.NO_SYNC.getValue());
ConvertBean.serviceModelUpdate(item, params.getUserInfo());
productDataRepository.save(item);
}
}
@Override
public void execFinalInspectionMarkRepair(JxProdBusiStrategyParamsBuilder params) {
@ -760,8 +735,6 @@ public class JxProdBusiStrategyCommonService implements IJxProdBusiStrategyServi
saveLineOffRecord(params);
doRestoreProductData(params);
return stepResult;
}
@ -991,6 +964,7 @@ public class JxProdBusiStrategyCommonService implements IJxProdBusiStrategyServi
record.setProductSn(params.getProductSn());
record.setWorkOrderNo(params.getOrderModel().getOrderNo());
record.setPartNo(params.getOrderModel().getPartNo());
record.setPartNameRdd(params.getOrderModel().getPartNameRdd());
record.setWorkOrderType(params.getOrderModel().getWorkOrderType());
record.setSystemSyncStatus(MesPcnExtEnumUtil.IF_SYNC_STATUS.NO_SYNC.getValue());
record.setOrganizeCode(params.getOrganizeCode());

@ -1,6 +1,8 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi.jx;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.jx.IJxProductDataService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesProductData;
import cn.estsh.i3plus.pojo.mes.repository.MesProductDataRepository;
import lombok.extern.slf4j.Slf4j;
@ -25,4 +27,12 @@ public class JxProductDataService implements IJxProductDataService {
public void insertProductDataNoRollback(List<MesProductData> productDataList) {
productDataList.forEach(o -> productDataRepository.insert(o));
}
@Override
public List<MesProductData> findProductDataList(String organizeCode, String productSn) {
return productDataRepository.findByProperty(
new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.PRODUCT_SN},
new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), productSn});
}
}

@ -0,0 +1,100 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.job.jx;
import cn.estsh.i3plus.ext.mes.pcn.api.job.jx.IJxRestoreProductDataService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.bean.SxWorkCellLineOffRecord;
import cn.estsh.i3plus.ext.mes.pcn.pojo.repository.SxWorkCellLineOffRecordRepository;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtEnumUtil;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesProductData;
import cn.estsh.i3plus.pojo.mes.repository.MesProductDataRepository;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @Author: wangjie
* @CreateDate: 2019/8/23 1:16 PM
* @Description:
**/
@Slf4j
@Service
public class JxRestoreProductDataService implements IJxRestoreProductDataService {
@Autowired
private SxWorkCellLineOffRecordRepository workCellLineOffRecordRepository;
@Autowired
private MesProductDataRepository productDataRepository;
@Override
public void doRestoreProductData(Map<String, Object> paramMap) {
String organizeCode = (String) paramMap.get(MesPcnExtConstWords.ORGANIZE_CODE);
Integer limit = paramMap.containsKey(MesPcnExtConstWords.LIMIT) ? (Integer) paramMap.get(MesPcnExtConstWords.LIMIT) : 100;
Map<String, List<MesProductData>> productDataMap = findProductData(organizeCode, limit);
if (CollectionUtils.isEmpty(productDataMap)) return;
for (Map.Entry<String, List<MesProductData>> entry : productDataMap.entrySet()) {
if (null == entry) continue;
SxWorkCellLineOffRecord workCellLineOffRecord = getWorkCellLineOffRecord(organizeCode, entry.getKey());
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>> findProductData(String organizeCode, Integer limit) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getIsNull(MesPcnExtConstWords.ORDER_NO, packBean);
DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.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));
}
private SxWorkCellLineOffRecord getWorkCellLineOffRecord(String organizeCode, String productSn) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(productSn, MesPcnExtConstWords.PRODUCT_SN, packBean);
DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{MesPcnExtConstWords.CREATE_DATE_TIME}, packBean);
return workCellLineOffRecordRepository.getByProperty(packBean);
}
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() == 1 ? 3 : productData.getSystemSyncStatus() + 1);
else {
productData.setOrderNo(workCellLineOffRecord.getWorkOrderNo());
productData.setPartNo(workCellLineOffRecord.getPartNo());
productData.setPartDesc(workCellLineOffRecord.getPartNameRdd());
productData.setSystemSyncStatus(MesPcnExtEnumUtil.IF_SYNC_STATUS.NO_SYNC.getValue());
ConvertBean.serviceModelUpdate(productData, MesPcnExtConstWords.JOB);
}
productDataRepository.save(productData);
}
return count;
}
}

@ -62,6 +62,10 @@ public class SxWorkCellLineOffRecord extends BaseBean implements Serializable {
@ApiParam("物料号")
private String partNo;
@Column(name = "PART_NAME_RDD")
@ApiParam("物料名称")
private String partNameRdd;
@Column(name = "WORK_ORDER_TYPE")
@ApiParam("工单类型")
private Integer workOrderType;

@ -1050,9 +1050,6 @@ public class MesPcnExtConstWords {
//下线箱包二检工位参数配置
public static final String KEY_PART_RECHECK = "KEY_PART_RECHECK";
//是否补录采集数据缺失属性工位参数配置
public static final String RESTORE_PD_FLAG = "RESTORE_PD_FLAG";
public static final String DEFAULT_STRATEGY = "defaultStrategy";
public static final String SERIAL_NUMBER_ARR_FIELD = "serialNumberArrField";
public static final String PRODUCT_SN_ARR_FIELD = "productSnArrField";

Loading…
Cancel
Save