From dd0ce48a6b521bd58e2e164640d31536aa77bb02 Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Sun, 4 Feb 2024 12:10:07 +0800 Subject: [PATCH] =?UTF-8?q?jx=20pcn=20=E4=B8=8B=E7=BA=BF=E8=A1=A5=E5=BD=95?= =?UTF-8?q?=E6=9D=A5=E6=BA=90=E4=BA=8EDB=E7=9A=84=E9=87=87=E9=9B=86?= =?UTF-8?q?=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/pcn/api/busi/jx/IJxProductDataService.java | 9 ++ .../api/job/jx/IJxRestoreProductDataService.java | 20 +++++ .../schedulejob/jx/JxRestoreProductDataJob.java | 52 +++++++++++ ...ThirdPartyPlcCollectProductDataStepService.java | 2 +- .../busi/jx/JxProdBusiStrategyCommonService.java | 36 ++------ .../serviceimpl/busi/jx/JxProductDataService.java | 10 +++ .../job/jx/JxRestoreProductDataService.java | 100 +++++++++++++++++++++ .../mes/pcn/pojo/bean/SxWorkCellLineOffRecord.java | 4 + .../ext/mes/pcn/pojo/util/MesPcnExtConstWords.java | 3 - 9 files changed, 201 insertions(+), 35 deletions(-) create mode 100644 modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/job/jx/IJxRestoreProductDataService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/schedulejob/jx/JxRestoreProductDataJob.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/job/jx/JxRestoreProductDataService.java diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/jx/IJxProductDataService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/jx/IJxProductDataService.java index 9a99d8c..f547f61 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/jx/IJxProductDataService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/jx/IJxProductDataService.java @@ -23,4 +23,13 @@ public interface IJxProductDataService { @Transactional(propagation = Propagation.REQUIRES_NEW, noRollbackFor = {ImppBusiException.class, Exception.class}) void insertProductDataNoRollback(List productDataList); + /** + * 获取生产数据集合 + * @param organizeCode 组织代码 + * @param productSn 产品条码 + * @return 生产数据集合 + */ + @ApiOperation(value = "获取生产数据集合", notes = "获取生产数据集合") + List findProductDataList(String organizeCode, String productSn); + } diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/job/jx/IJxRestoreProductDataService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/job/jx/IJxRestoreProductDataService.java new file mode 100644 index 0000000..0f3eecb --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/job/jx/IJxRestoreProductDataService.java @@ -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 paramMap); +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/schedulejob/jx/JxRestoreProductDataJob.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/schedulejob/jx/JxRestoreProductDataJob.java new file mode 100644 index 0000000..1822972 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/schedulejob/jx/JxRestoreProductDataJob.java @@ -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 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); + + } +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/collect/SxThirdPartyPlcCollectProductDataStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/collect/SxThirdPartyPlcCollectProductDataStepService.java index 36aee44..c5f524f 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/collect/SxThirdPartyPlcCollectProductDataStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/collect/SxThirdPartyPlcCollectProductDataStepService.java @@ -21,7 +21,7 @@ import java.util.*; import java.util.stream.Collectors; /** - * 第三方PLC数据采集定时任务---步骤执行---写节拍 + * 第三方PLC数据采集定时任务---步骤执行---写检测数据 */ @Slf4j public class SxThirdPartyPlcCollectProductDataStepService implements ISxThirdPartyPlcCollectDataStepService { diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/jx/JxProdBusiStrategyCommonService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/jx/JxProdBusiStrategyCommonService.java index cf468e6..980c477 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/jx/JxProdBusiStrategyCommonService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/jx/JxProdBusiStrategyCommonService.java @@ -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 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()); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/jx/JxProductDataService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/jx/JxProductDataService.java index 16dd2de..99e3946 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/jx/JxProductDataService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/jx/JxProductDataService.java @@ -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 productDataList) { productDataList.forEach(o -> productDataRepository.insert(o)); } + + @Override + public List 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}); + } + } \ No newline at end of file diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/job/jx/JxRestoreProductDataService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/job/jx/JxRestoreProductDataService.java new file mode 100644 index 0000000..0d8eac3 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/job/jx/JxRestoreProductDataService.java @@ -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 paramMap) { + + String organizeCode = (String) paramMap.get(MesPcnExtConstWords.ORGANIZE_CODE); + + Integer limit = paramMap.containsKey(MesPcnExtConstWords.LIMIT) ? (Integer) paramMap.get(MesPcnExtConstWords.LIMIT) : 100; + + Map> productDataMap = findProductData(organizeCode, limit); + + if (CollectionUtils.isEmpty(productDataMap)) return; + + for (Map.Entry> 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> 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 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 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; + } + +} diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/bean/SxWorkCellLineOffRecord.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/bean/SxWorkCellLineOffRecord.java index 0b8210b..8438263 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/bean/SxWorkCellLineOffRecord.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/bean/SxWorkCellLineOffRecord.java @@ -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; diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java index 7c89c29..a7ecc04 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/util/MesPcnExtConstWords.java @@ -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";