From 7574dfe69822c9ff3f8c6230039f87b11aae7452 Mon Sep 17 00:00:00 2001 From: jun Date: Fri, 28 Jun 2024 18:49:14 +0800 Subject: [PATCH 1/7] =?UTF-8?q?=E7=94=9F=E4=BA=A7=E5=BC=80=E6=A8=A1?= =?UTF-8?q?=E7=BB=9F=E8=AE=A1=E6=95=B0=E6=8D=AE=E5=8F=91=E9=80=81=20?= =?UTF-8?q?=E8=BF=BD=E6=BA=AF=E6=8A=A5=E8=A1=A8=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/busi/IMesProdMouldStatisticsService.java | 4 ++ .../schedulejob/MesProdMouldStatisticsJob.java | 23 +++++-- .../busi/MesProdMouldStatisticsServiceImpl.java | 77 ++++++++++++++++++++-- .../ext/mes/pcn/pojo/util/MesPcnExtConstWords.java | 9 +-- 4 files changed, 101 insertions(+), 12 deletions(-) diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProdMouldStatisticsService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProdMouldStatisticsService.java index 502cd5f..31cc201 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProdMouldStatisticsService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProdMouldStatisticsService.java @@ -13,4 +13,8 @@ public interface IMesProdMouldStatisticsService { @ApiOperation("汇总生产开模统计") void doSumMesProdMouldStatistics(String organizeCode, Integer pageSize, String userName); + + + @ApiOperation("发送生产开模统计数据") + void doSendMesProdMouldStatistics(String organizeCode,String userName); } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/schedulejob/MesProdMouldStatisticsJob.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/schedulejob/MesProdMouldStatisticsJob.java index 95de35d..752c0b6 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/schedulejob/MesProdMouldStatisticsJob.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/schedulejob/MesProdMouldStatisticsJob.java @@ -40,10 +40,25 @@ public class MesProdMouldStatisticsJob extends BaseMesScheduleJob { List wmsJobParamModelList = JsonUtilTool.toList(this.getJobParam(), WmsJobParamModel.class); if (!CollectionUtils.isEmpty(wmsJobParamModelList)) { for (WmsJobParamModel wmsJobParamModel : wmsJobParamModelList) { - long startTime = System.currentTimeMillis(); - mesProdMouldStatisticsService.doSumMesProdMouldStatistics(wmsJobParamModel.getOrganizeCode(), wmsJobParamModel.getPageSize(), "job"); - long endTime = System.currentTimeMillis(); - log.info("工厂{}生产开模统计job --- END --- 耗时: {} ms", wmsJobParamModel.getOrganizeCode(), endTime - startTime); + //统计数据 + try { + long startTime = System.currentTimeMillis(); + mesProdMouldStatisticsService.doSumMesProdMouldStatistics(wmsJobParamModel.getOrganizeCode(), wmsJobParamModel.getPageSize(), "job"); + long endTime = System.currentTimeMillis(); + log.info("工厂{}生产开模统计job --- END --- 耗时: {} ms", wmsJobParamModel.getOrganizeCode(), endTime - startTime); + } catch (Exception e) { + log.info("工厂{}生产开模统计job 执行失败{}", wmsJobParamModel.getOrganizeCode(), e); + } + //发送数据 + try { + long startTime = System.currentTimeMillis(); + mesProdMouldStatisticsService.doSendMesProdMouldStatistics(wmsJobParamModel.getOrganizeCode(), "job"); + long endTime = System.currentTimeMillis(); + log.info("工厂{}生产开模统计发送数据 --- END --- 耗时: {} ms", wmsJobParamModel.getOrganizeCode(), endTime - startTime); + } catch (Exception e) { + log.info("工厂{}生产开模统计发送数据 执行失败{}", wmsJobParamModel.getOrganizeCode(), e); + + } } } } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProdMouldStatisticsServiceImpl.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProdMouldStatisticsServiceImpl.java index 1b1a661..08d91e4 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProdMouldStatisticsServiceImpl.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProdMouldStatisticsServiceImpl.java @@ -2,25 +2,26 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProdMouldStatisticsService; import cn.estsh.i3plus.ext.mes.pcn.apiservice.dao.IMesProdMouldStatisticsDao; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +import cn.estsh.i3plus.mes.pcn.api.iservice.base.IConfigService; import cn.estsh.i3plus.mes.pcn.util.DateUtil; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.tool.TimeTool; 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.MesMouldMappingCfg; -import cn.estsh.i3plus.pojo.mes.bean.MesProdMouldRecord; -import cn.estsh.i3plus.pojo.mes.bean.MesProdMouldStatistics; -import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord; +import cn.estsh.i3plus.pojo.mes.bean.*; import cn.estsh.i3plus.pojo.mes.repository.IMesMouldMappingCfgRepository; import cn.estsh.i3plus.pojo.mes.repository.MesProdMouldRecordRepository; import cn.estsh.i3plus.pojo.mes.repository.MesProdMouldStatisticsRepository; import cn.estsh.i3plus.pojo.mes.repository.MesProductionRecordRepository; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import cn.hutool.http.HttpRequest; 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.ArrayList; import java.util.List; @@ -54,6 +55,9 @@ public class MesProdMouldStatisticsServiceImpl implements IMesProdMouldStatistic @Autowired private MesProdMouldStatisticsRepository mesProdMouldStatisticsRDao; + @Autowired + private IConfigService configService; + @Override public void doSumMesProdMouldStatistics(String organizeCode, Integer pageSize, String userName) { //查询未统计的开模记录数据 @@ -80,6 +84,52 @@ public class MesProdMouldStatisticsServiceImpl implements IMesProdMouldStatistic updateMesProductionRecord(organizeCode, userName, undStatisticsMesProdMouldRecordList.stream().map(MesProdMouldRecord::getId).collect(Collectors.toList())); } + @Override + public void doSendMesProdMouldStatistics(String organizeCode, String userName) { + Map mesConfigMap = getMesConfigMap(organizeCode); + if (mesConfigMap == null) { + return; + } + //发送URL + String sendUrl = getConfigValue(mesConfigMap, MesPcnExtConstWords.SEND_URL); + //发送data + String sendData = getConfigValue(mesConfigMap, MesPcnExtConstWords.SEND_DATA); + //发送item + String sendItemData = getConfigValue(mesConfigMap, MesPcnExtConstWords.SEND_ITEM_DATA); + if (Objects.isNull(sendUrl) || Objects.isNull(sendData) || Objects.isNull(sendItemData)) { + return; + } + //查询未发送数据 + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getNumEqualPack(CommonEnumUtil.FALSE, "systemSyncStatus", packBean); + DdlPreparedPack.getStringSmallerNotEqualPack(TimeTool.getToday(), "createDatetime", packBean); + DdlPreparedPack.getOrderBy("modifyDatetime", CommonEnumUtil.ASC_OR_DESC.ASC.getValue(), packBean); + List mesProdMouldStatisticsList = mesProdMouldStatisticsRDao.findByHqlWhere(packBean); + if (CollectionUtils.isEmpty(mesProdMouldStatisticsList)) { + log.info("不存在未发送的数据"); + return; + } + //发送数据 + StringBuilder itemData = new StringBuilder(); + for (MesProdMouldStatistics statistics : mesProdMouldStatisticsList) { + String time = TimeTool.parseStringFormat(statistics.getCreateDatetime(), "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd'T'HH:mm:ss"); + itemData.append(String.format(sendItemData, statistics.getAssetNum(), statistics.getEquipmentCode(), statistics.getQty(), time, "1117")); + } + String body = HttpRequest.post(sendUrl).header("Content-Type", "text/xml").body(String.format(sendData, itemData)).execute().body(); + //发送成功更新同步状态 + mesProdMouldStatisticsList.forEach(t -> { + if (!body.contains("messageID")) { + t.setSystemSyncStatus(CommonEnumUtil.FALSE); + t.setDescription(body); + } else { + t.setSystemSyncStatus(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); + } + ConvertBean.serviceModelUpdate(t, userName); + }); + mesProdMouldStatisticsRDao.saveAll(mesProdMouldStatisticsList); + + } + private void updateMesProductionRecord(String organizeCode, String userName, List idList) { //查询加工记录表 List mesProductionRecordList = getProductionRecordList(organizeCode, idList); @@ -105,6 +155,7 @@ public class MesProdMouldStatisticsServiceImpl implements IMesProdMouldStatistic mesProdMouldStatistic.setWorkDate(mesProdMouldRecordEntry.getKey()); mesProdMouldStatistic.setAssetNum(mesMouldMappingCfg.getAssetNum()); mesProdMouldStatistic.setMeterName(mesMouldMappingCfg.getMeterName()); + mesProdMouldStatistic.setEquipmentCode(mesMouldMappingCfg.getEquipmentCode()); mesProdMouldStatistic.setQty(mesProdMouldRecordEntry.getValue().size()); mesProdMouldStatistic.setOrganizeCode(organizeCode); ConvertBean.serviceModelInitialize(mesProdMouldStatistic, userName); @@ -141,4 +192,22 @@ public class MesProdMouldStatisticsServiceImpl implements IMesProdMouldStatistic DdlPreparedPack.getInPackList(idList, "mouldRecordId", packBean); return mesProductionRecordRDao.findByHqlWhere(packBean); } + + private String getConfigValue(Map mesConfigMap, String key) { + MesConfig mesConfig = mesConfigMap.get(key); + if (Objects.isNull(mesConfig) || StringUtils.isEmpty(mesConfig.getCfgValue())) { + log.info("参数【{}】未维护", key); + return null; + } + return mesConfig.getCfgValue(); + } + + private Map getMesConfigMap(String organizeCode) { + List mesConfigList = configService.findMesConfigByCfgCode(MesPcnExtConstWords.SEND_MES_PROD_MOULD_STATISTICS, organizeCode); + if (CollectionUtils.isEmpty(mesConfigList)) { + log.info("发送开模统计参数【{}】未维护", MesPcnExtConstWords.SEND_MES_PROD_MOULD_STATISTICS); + return null; + } + return mesConfigList.stream().collect(Collectors.toMap(MesConfig::getCfgKey, t -> t)); + } } 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 f7ac860..ae3ab48 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 @@ -313,10 +313,11 @@ public class MesPcnExtConstWords { public static final String CHANNEL = "channel"; public static final String EQUIPMENT_ID = "equipmentId"; - @Deprecated - public static final String OPC_WRITE_VARIABLE="/api/OPCService/WriteVariable"; - @Deprecated - public static final String OPC_READ_VARIABLE="/api/OPCService/ReadVariable"; + //发送开模统计数据 + public static final String SEND_MES_PROD_MOULD_STATISTICS = "SEND_MES_PROD_MOULD_STATISTICS"; + public static final String SEND_URL = "SEND_URL"; + public static final String SEND_DATA = "SEND_DATA"; + public static final String SEND_ITEM_DATA = "SEND_ITEM_DATA"; } From 69603b0aee8a79e081c7e8b695adf2759355d25f Mon Sep 17 00:00:00 2001 From: jun Date: Sat, 29 Jun 2024 16:45:18 +0800 Subject: [PATCH 2/7] =?UTF-8?q?=E7=94=9F=E4=BA=A7=E5=BC=80=E6=A8=A1?= =?UTF-8?q?=E7=BB=9F=E8=AE=A1=E8=A1=A8=EF=BC=8C=E5=88=A0=E9=99=A4=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E4=BB=A3=E7=A0=81=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../apiservice/serviceimpl/busi/MesProdMouldStatisticsServiceImpl.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProdMouldStatisticsServiceImpl.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProdMouldStatisticsServiceImpl.java index 08d91e4..3f59209 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProdMouldStatisticsServiceImpl.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProdMouldStatisticsServiceImpl.java @@ -113,7 +113,7 @@ public class MesProdMouldStatisticsServiceImpl implements IMesProdMouldStatistic StringBuilder itemData = new StringBuilder(); for (MesProdMouldStatistics statistics : mesProdMouldStatisticsList) { String time = TimeTool.parseStringFormat(statistics.getCreateDatetime(), "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd'T'HH:mm:ss"); - itemData.append(String.format(sendItemData, statistics.getAssetNum(), statistics.getEquipmentCode(), statistics.getQty(), time, "1117")); + itemData.append(String.format(sendItemData, statistics.getAssetNum(), statistics.getMeterName(), statistics.getQty(), time, "1117")); } String body = HttpRequest.post(sendUrl).header("Content-Type", "text/xml").body(String.format(sendData, itemData)).execute().body(); //发送成功更新同步状态 @@ -155,7 +155,6 @@ public class MesProdMouldStatisticsServiceImpl implements IMesProdMouldStatistic mesProdMouldStatistic.setWorkDate(mesProdMouldRecordEntry.getKey()); mesProdMouldStatistic.setAssetNum(mesMouldMappingCfg.getAssetNum()); mesProdMouldStatistic.setMeterName(mesMouldMappingCfg.getMeterName()); - mesProdMouldStatistic.setEquipmentCode(mesMouldMappingCfg.getEquipmentCode()); mesProdMouldStatistic.setQty(mesProdMouldRecordEntry.getValue().size()); mesProdMouldStatistic.setOrganizeCode(organizeCode); ConvertBean.serviceModelInitialize(mesProdMouldStatistic, userName); From a6cac78e8da6dd144b05e93ad7552c7b8acb8f1e Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Sat, 29 Jun 2024 22:18:06 +0800 Subject: [PATCH 3/7] =?UTF-8?q?=E5=89=8D=E9=81=93=E9=98=B2=E9=94=99?= =?UTF-8?q?=E5=B7=A5=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pcn/api/busi/IMesProductionRecordService.java | 3 + .../busi/MesProductionRecordService.java | 15 ++- .../step/MesProdCraftRouteCheckStepService.java | 110 ++++++++++++++++++--- 3 files changed, 112 insertions(+), 16 deletions(-) diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionRecordService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionRecordService.java index 8b13ad0..d68a324 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionRecordService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionRecordService.java @@ -29,6 +29,9 @@ public interface IMesProductionRecordService { */ Map checkSnTimeliness(String organizeCode, String serialNo, Long sourceId, Integer dataSource, Boolean isAssembly); + @ApiOperation(value = "根据零件条码查询加工记录信息") + List findProductionRecordList(String organizeCode, String productSn); + @ApiOperation(value = "根据零件条码,物料编码,工序代码,工艺代码查询加工记录信息") List findProductionRecordList(String organizeCode, String productSn, String partNo, String processCode, String craftCode); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProductionRecordService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProductionRecordService.java index af90bc1..dacaa71 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProductionRecordService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProductionRecordService.java @@ -12,9 +12,9 @@ import cn.estsh.i3plus.pojo.mes.repository.MesProductionAssemblyRepository; import cn.estsh.i3plus.pojo.mes.repository.MesProductionRecordRepository; import cn.estsh.i3plus.pojo.mes.repository.MesTimeEfficientCfgRepository; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; -import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; import java.text.ParseException; import java.text.SimpleDateFormat; @@ -134,11 +134,11 @@ public class MesProductionRecordService implements IMesProductionRecordService { for (MesTimeEfficientCfg timeliness : timelinessList) { List records = new ArrayList<>(); //时效性规则 零件号不为空 - if (StringUtils.isNoneBlank(timeliness.getPartNo())){ + if (!StringUtils.isEmpty(timeliness.getPartNo())){ records = recordList.stream().filter(item -> item.getPartNo().equals(timeliness.getPartNo())).sorted(Comparator.comparing(MesProductionRecord::getCompleteDateTime)).collect(Collectors.toList()); } //时效性规则 工艺不为空时 - if (StringUtils.isNoneBlank(timeliness.getCraftCode())){ + if (!StringUtils.isEmpty(timeliness.getCraftCode())){ records = recordList.stream().filter(item -> item.getCraftCode().equals(timeliness.getCraftCode())).sorted(Comparator.comparing(MesProductionRecord::getCompleteDateTime)).collect(Collectors.toList()); } @@ -192,7 +192,16 @@ public class MesProductionRecordService implements IMesProductionRecordService { } @Override + public List findProductionRecordList(String organizeCode, String productSn) { + if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(productSn)) return null; + return productionRecordRepository.findByProperty( + new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.PRODUCT_SN}, + new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), productSn}); + } + + @Override public List findProductionRecordList(String organizeCode, String productSn, String partNo, String processCode, String craftCode) { + if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(productSn) || StringUtils.isEmpty(partNo) || StringUtils.isEmpty(processCode) || StringUtils.isEmpty(craftCode)) return null; return productionRecordRepository.findByProperty( new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.PRODUCT_SN, MesPcnExtConstWords.PART_NO, MesPcnExtConstWords.PROCESS_CODE, MesPcnExtConstWords.CRAFT_CODE}, new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), productSn, partNo, processCode, craftCode}); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProdCraftRouteCheckStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProdCraftRouteCheckStepService.java index 2fa786e..a00ecdc 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProdCraftRouteCheckStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProdCraftRouteCheckStepService.java @@ -12,9 +12,11 @@ import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; import cn.estsh.i3plus.pojo.mes.bean.MesCraftRouteDetail; import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.model.StationResultBean; import cn.estsh.i3plus.pojo.mes.model.StepResult; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -79,24 +81,27 @@ public class MesProdCraftRouteCheckStepService extends BaseStepService { o.getCheckCraftResult().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) != 0)).map(MesProductionPsInContext::getPartNo).collect(Collectors.toList())).stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList()); if (CollectionUtils.isEmpty(partNoList)) return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, "主条码均已通过前道工艺防错验证!"); + //从上下文中取出生产线对象 + MesWorkCenter workCenter = productionProcessContext.getWorkCenter(); + //查询工艺路线数据 Map> craftRouteDataMap = new HashMap<>(); - partNoList.forEach(o -> doHandleProdCraftData(reqBean, o, craftRouteDataMap)); + partNoList.forEach(o -> doHandleProdCraftData(reqBean, workCenter, o, craftRouteDataMap)); if (CollectionUtils.isEmpty(craftRouteDataMap) || craftRouteDataMap.size() != partNoList.size()) return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("零件编码%s未匹配到产品工艺路线!", CollectionUtils.isEmpty(craftRouteDataMap) ? partNoList.toString() : partNoList.stream().filter(o -> (!StringUtils.isEmpty(o) && !craftRouteDataMap.containsKey(o))).collect(Collectors.toList()).toString())); //前道工艺防错验证处理 - doHandleProdCraftRouteCheck(reqBean, resultBean, stepResult, productionProcessContext, productionPsInContextList, craftRouteDataMap); + doHandleProdCraftRouteCheck(reqBean, resultBean, stepResult, productionProcessContext, workCenter, productionPsInContextList, craftRouteDataMap); return stepResult; } //查询工艺路线数据 - private void doHandleProdCraftData(StationRequestBean reqBean, String o, Map> craftRouteDataMap) { - List craftRouteDetailList = fsmRouteDataService.doHandleProdCraftData(reqBean, o); + private void doHandleProdCraftData(StationRequestBean reqBean, MesWorkCenter workCenter, String o, Map> craftRouteDataMap) { + List craftRouteDetailList = fsmRouteDataService.doHandleProdCraftData(reqBean, workCenter.getCenterType(), o); if (!CollectionUtils.isEmpty(craftRouteDetailList)) craftRouteDataMap.put(o, craftRouteDetailList); } @@ -126,14 +131,14 @@ public class MesProdCraftRouteCheckStepService extends BaseStepService { //前道工艺防错验证处理 private void doHandleProdCraftRouteCheck(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, - List productionPsInContextList, Map> craftRouteDataMap) { + MesWorkCenter workCenter, List productionPsInContextList, Map> craftRouteDataMap) { for (MesProductionPsInContext productionPsInContext : productionPsInContextList) { if (null == productionPsInContext || StringUtils.isEmpty(productionPsInContext.getPartNo()) || productionPsInContext.getIsCheckCraft().compareTo(MesPcnExtConstWords.ZERO) != 0) continue; //前道工艺防错验证 - Boolean result = doProdCraftRouteCheck(reqBean, stepResult, productionProcessContext, productionPsInContext, craftRouteDataMap.get(productionPsInContext.getPartNo())); + Boolean result = doProdCraftRouteCheck(reqBean, stepResult, productionProcessContext, workCenter, productionPsInContext, craftRouteDataMap.get(productionPsInContext.getPartNo())); if (!result) productionPsInContext.checkCraftResult(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); else productionPsInContext.checkCraftResult(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); @@ -149,7 +154,18 @@ public class MesProdCraftRouteCheckStepService extends BaseStepService { } //前道工艺防错验证 - private Boolean doProdCraftRouteCheck(StationRequestBean reqBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesProductionPsInContext productionPsInContext, List craftRouteDetailList) { + private Boolean doProdCraftRouteCheck(StationRequestBean reqBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesWorkCenter workCenter, MesProductionPsInContext productionPsInContext, List craftRouteDetailList) { + + //排序 + if (workCenter.getCenterType().compareTo(MesExtEnumUtil.WORK_CENTER_TYPE.SORT.getValue()) == 0) return doProdCraftRouteCheckSort(reqBean, stepResult, productionProcessContext, productionPsInContext, craftRouteDetailList); + + //非排序 + return doProdCraftRouteCheckNosort(reqBean, stepResult, productionProcessContext, productionPsInContext, craftRouteDetailList); + + } + + //前道工艺防错验证【排序】 + private Boolean doProdCraftRouteCheckSort(StationRequestBean reqBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesProductionPsInContext productionPsInContext, List craftRouteDetailList) { String message = StringUtils.isEmpty(stepResult.getMsg()) ? MesPcnExtConstWords.EMPTY : stepResult.getMsg() + MesPcnExtConstWords.SEMICOLON; @@ -193,10 +209,10 @@ public class MesProdCraftRouteCheckStepService extends BaseStepService { if (CollectionUtils.isEmpty(beforeCellCraftList) && !StringUtils.isEmpty(productionPsInContext.getCraftCode()) && !productionProcessContext.getCraftCode().equals(productionPsInContext.getCraftCode())) return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]已经过首道工艺[%s]", message, productionPsInContext.getProductSn(), productionProcessContext.getCraftCode())).isCompleted(); - //执行首道工艺 【非工位扫描直接生成的自制件条码】 当前主条码验证通过 + //执行首道工艺 当前主条码验证通过 if (CollectionUtils.isEmpty(beforeCellCraftList)) return true; - //当前主条码的工艺字段为空【非工位扫描直接生成的自制件条码】 + //当前主条码的工艺字段为空 if (StringUtils.isEmpty(productionPsInContext.getCraftCode()) && craftRouteDetailList.get(0).getIsChoose().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0) return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]未经过首道工艺[%s]", message, productionPsInContext.getProductSn(), craftRouteDetailList.get(0).getCraftCode())).isCompleted(); @@ -213,15 +229,83 @@ public class MesProdCraftRouteCheckStepService extends BaseStepService { //如果没有未完成的工艺, 则代表当前工位可操作 if (CollectionUtils.isEmpty(unCompleteCraftList)) return true; - //未完成工艺重新正序 - unCompleteCraftList = unCompleteCraftList.stream().filter(o -> null != o).sorted(Comparator.comparing(MesCraftRouteDetail::getSeq)).collect(Collectors.toList()); + //未完成工艺倒序 + unCompleteCraftList = unCompleteCraftList.stream().filter(o -> null != o).sorted(Comparator.comparing(MesCraftRouteDetail::getSeq).reversed()).collect(Collectors.toList()); Optional optional = unCompleteCraftList.stream().filter(o -> (null != o && o.getIsChoose() == CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue())).findFirst(); - if (null != optional && optional.isPresent()) - return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]未经过必过工艺[%s]", message, productionPsInContext.getProductSn(), optional.get().getCraftCode())).isCompleted(); + if (unCompleteCraftList.get(0).getIsChoose().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0) + return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]未经过必过工艺[%s]", message, productionPsInContext.getProductSn(), unCompleteCraftList.get(0).getCraftCode())).isCompleted(); return true; } + //前道工艺防错验证 【非排序】 + private Boolean doProdCraftRouteCheckNosort(StationRequestBean reqBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesProductionPsInContext productionPsInContext, List craftRouteDetailList) { + + String message = StringUtils.isEmpty(stepResult.getMsg()) ? MesPcnExtConstWords.EMPTY : stepResult.getMsg() + MesPcnExtConstWords.SEMICOLON; + + //判断主条码的当前工艺是否包含在产品工艺路线中 + Optional optionalPs = StringUtils.isEmpty(productionPsInContext.getCraftCode()) ? null : craftRouteDetailList.stream().filter(o -> (null != o && o.getCraftCode().equals(productionPsInContext.getCraftCode()))).findFirst(); + if (!StringUtils.isEmpty(productionPsInContext.getCraftCode()) && (null == optionalPs || !optionalPs.isPresent())) + return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]对应的工艺代码[%s]不匹配零件[%s]对应的产品工艺路线[%s]", + message, productionPsInContext.getProductSn(), productionPsInContext.getCraftCode(), productionPsInContext.getPartNo(), craftRouteDetailList.get(0).getCraftRouteCode())).isCompleted(); + + //验证工艺对应工序最多经过1个: 当前主条码的工艺字段有值, 对应的工艺路线明细信息设置了【true】, 当前工位的工艺与主条码的当前工艺相同, 当前工位的工序与主条码的当前工序不相同 + if (null != optionalPs && optionalPs.isPresent() && optionalPs.get().getAtMostProcess().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0 && productionProcessContext.getCraftCode().equals(productionPsInContext.getCraftCode()) && !reqBean.getProcessCode().equals(productionPsInContext.getProcessCode())) + return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]产品工艺路线[%s]相同工艺对应工序最多经过1个,上道工艺[%s]当前工位工艺[%s]", + message, productionPsInContext.getProductSn(), craftRouteDetailList.get(0).getCraftRouteCode(), productionPsInContext.getCraftCode(), productionProcessContext.getCraftCode())).isCompleted(); + + List productionRecordList = null; + //验证已完成工序最大重复次数: 如果当前工位的工序与主条码的当前工序一致的情况下, 根据条码+物料+工序+工艺查询加工记录, 判断加工记录条数 + if (null != optionalPs && optionalPs.isPresent() && optionalPs.get().getRepeatTimes().compareTo(MesPcnExtConstWords.ONE) > 0 && reqBean.getProcessCode().equals(productionPsInContext.getProcessCode())) { + //根据零件条码查询加工记录信息 + productionRecordList = productionRecordService.findProductionRecordList(reqBean.getOrganizeCode(), productionPsInContext.getProductSn()); + //条码+物料+工序+工艺搜集加工记录 + List filterList = CollectionUtils.isEmpty(productionRecordList) ? null : + productionRecordList.stream().filter(o -> (null != o && o.getPartNo().equals(productionPsInContext.getPartNo()) && o.getProcessCode().equals(reqBean.getProcessCode()) && o.getCraftCode().equals(productionProcessContext.getCraftCode()))).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(filterList) && filterList.size() >= optionalPs.get().getRepeatTimes()) + return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]当前工序[%s]产品工艺路线[%s]已完成工序最大重复次数[%s]", + message, productionPsInContext.getProductSn(), reqBean.getProcessCode(), craftRouteDetailList.get(0).getCraftRouteCode(), optionalPs.get().getRepeatTimes())).isCompleted(); + } + + //判断当前工位的工序对应的工艺是否包含在产品工艺路线中 + Optional optionalCell = craftRouteDetailList.stream().filter(o -> (null != o && o.getCraftCode().equals(productionProcessContext.getCraftCode()))).findFirst(); + //根据当前工位对应的工艺 获取 所有前道工艺, 如果当前工位的工序对应工艺不在工艺路线明细内, 则默认所有明细均为所有前道工艺, 否则搜集当前工位工序对应工艺前面的所有前道工艺 + List beforeCellCraftList; + if (null == optionalCell || !optionalCell.isPresent()) beforeCellCraftList = craftRouteDetailList; + else beforeCellCraftList = craftRouteDetailList.stream().filter(o -> (null != o && o.getSeq().compareTo(optionalCell.get().getSeq()) < 0)).collect(Collectors.toList()); + + //前道工艺不存在即当前为首道工艺 + if (CollectionUtils.isEmpty(beforeCellCraftList)) return true; + + //前道工艺正序 + beforeCellCraftList = beforeCellCraftList.stream().filter(o -> null != o).sorted(Comparator.comparing(MesCraftRouteDetail::getSeq)).collect(Collectors.toList()); + + //判断上面是否已经查询过数据 + if (!(null != optionalPs && optionalPs.isPresent() && optionalPs.get().getRepeatTimes().compareTo(MesPcnExtConstWords.ONE) > 0 && reqBean.getProcessCode().equals(productionPsInContext.getProcessCode()))) + productionRecordList = productionRecordService.findProductionRecordList(reqBean.getOrganizeCode(), productionPsInContext.getProductSn()); + + Map> prMapByCraft = CollectionUtils.isEmpty(productionRecordList) ? null : productionRecordList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesProductionRecord::getCraftCode)); + + //遍历前道工艺, 根据工艺查询加工记录是否存在, 并验证是否存在捆绑工艺 + for (int i = 0; i < beforeCellCraftList.size(); i ++) { + if (null == beforeCellCraftList.get(i)) continue; + Boolean isExist = isExistProductionRecord(prMapByCraft, beforeCellCraftList.get(i).getCraftCode()); + if (beforeCellCraftList.get(i).getIsChoose().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0 && !isExist) + return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]未经过必过工艺[%s]", message, productionPsInContext.getProductSn(), beforeCellCraftList.get(i).getCraftCode())).isCompleted(); + + if (i != 0 && beforeCellCraftList.get(i - 1).getIsBindNextCraft().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0 && isExistProductionRecord(prMapByCraft, beforeCellCraftList.get(i - 1).getCraftCode()) && !isExist) + return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]产品工艺路线[%s]工艺[%s]捆绑后道工艺", + message, productionPsInContext.getProductSn(), beforeCellCraftList.get(i).getCraftRouteCode(), beforeCellCraftList.get(i - 1).getCraftCode())).isCompleted(); + } + + return true; + + } + + private Boolean isExistProductionRecord(Map> prMapByCraft, String craftCode) { + return (CollectionUtils.isEmpty(prMapByCraft) || !prMapByCraft.containsKey(craftCode)) ? false : true; + } + } From 863917dfb71cb1cdbc24afd889a3236efd82a9e2 Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Sat, 29 Jun 2024 23:01:56 +0800 Subject: [PATCH 4/7] =?UTF-8?q?=E4=B8=8A=E4=B8=8B=E6=96=87key=20=E5=8F=98?= =?UTF-8?q?=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../IMesProductionCustomContextStepService.java | 9 --- .../IMesProductionDispatchContextStepService.java | 1 - .../IMesProductionProcessContextStepService.java | 10 ++++ .../MesFunctionChooseCavityOrderService.java | 6 +- .../step/MesWorkOrderCheckNosortStepService.java | 6 +- .../step/MesWorkOrderScanStepService.java | 4 +- .../MesProductionCustomContextStepService.java | 67 ++++++---------------- .../MesProductionDispatchContextStepService.java | 12 ++-- .../MesProductionProcessContextStepService.java | 21 +++++++ .../ext/mes/pcn/pojo/util/MesPcnExtConstWords.java | 4 +- 10 files changed, 63 insertions(+), 77 deletions(-) diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionCustomContextStepService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionCustomContextStepService.java index b1e2df1..e742de4 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionCustomContextStepService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionCustomContextStepService.java @@ -42,15 +42,6 @@ public interface IMesProductionCustomContextStepService { @ApiOperation(value = "发送工步内容") void sendStepContextMessage(StationRequestBean reqBean, List resultList); - @ApiOperation(value = "获取手动选择的腔数及工单信息上下文") - List getFunctionChooseCavityOrderContext(StationRequestBean reqBean); - - @ApiOperation(value = "保存选择/扫描/读取的腔数及工单信息上下文", notes = "[StationKvBean(key=cavity, name=腔数, value=3, seq=0), StationKvBean(key=cellMessageSource, name=工位信息来源, value=10, seq=1), StationKvBean(key=workOrderNo, name=加工单, value=工单1;工单2;工单3, seq=2)]") - Boolean saveFunctionChooseCavityOrderContext(StationRequestBean reqBean, List resultList); - - @ApiOperation(value = "删除手动选择的腔数及工单信息上下文") - void deleteFunctionChooseCavityOrderContext(StationRequestBean reqBean); - @ApiOperation(value = "验证上下文班次班组信息是否存在") Boolean checkProdShiftDataIsExistContext(String orgainzeCode, String workCenterCode); diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionDispatchContextStepService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionDispatchContextStepService.java index e1c6b0f..ae3c820 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionDispatchContextStepService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionDispatchContextStepService.java @@ -180,7 +180,6 @@ public interface IMesProductionDispatchContextStepService { @ApiOperation(value = "删除上下文产品加工规则信息集合") void deleteProdRuleDataContext(StationRequestBean reqBean); - @ApiOperation(value = "获取料桶原材料数据集合") List getMesRawPartChargingDataContext(StationRequestBean reqBean); diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionProcessContextStepService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionProcessContextStepService.java index 407ed15..3c1744f 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionProcessContextStepService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProductionProcessContextStepService.java @@ -6,6 +6,7 @@ import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext; import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable; import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg; import cn.estsh.i3plus.pojo.mes.bean.MesProdRouteOptParam; +import cn.estsh.i3plus.pojo.mes.model.StationKvBean; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import io.swagger.annotations.ApiOperation; @@ -101,5 +102,14 @@ public interface IMesProductionProcessContextStepService { @ApiOperation(value = "存储设备的装配件清单") Boolean saveAssemblyNosortCfgContext(StationRequestBean reqBean, List assemblyNosortCfgList); + @ApiOperation(value = "获取手动选择的腔数及工单信息上下文") + List getFunctionChooseCavityOrderContext(StationRequestBean reqBean); + + @ApiOperation(value = "保存选择/扫描/读取的腔数及工单信息上下文", notes = "[StationKvBean(key=cavity, name=腔数, value=3, seq=0), StationKvBean(key=cellMessageSource, name=工位信息来源, value=10, seq=1), StationKvBean(key=workOrderNo, name=加工单, value=工单1;工单2;工单3, seq=2)]") + Boolean saveFunctionChooseCavityOrderContext(StationRequestBean reqBean, List resultList); + + @ApiOperation(value = "删除手动选择的腔数及工单信息上下文") + void deleteFunctionChooseCavityOrderContext(StationRequestBean reqBean); + } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionChooseCavityOrderService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionChooseCavityOrderService.java index 73570cb..6261a15 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionChooseCavityOrderService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionChooseCavityOrderService.java @@ -1,6 +1,5 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.station.function; -import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionCustomContextStepService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; @@ -37,9 +36,6 @@ public class MesFunctionChooseCavityOrderService extends BaseSwsService implemen private IMesProductionProcessContextStepService productionProcessContextStepService; @Autowired - private IMesProductionCustomContextStepService productionCustomContextStepService; - - @Autowired private IShippingDispatchService shippingDispatchService; @Override @@ -66,7 +62,7 @@ public class MesFunctionChooseCavityOrderService extends BaseSwsService implemen } //保存手动选择的腔数及工单信息上下文 - productionCustomContextStepService.saveFunctionChooseCavityOrderContext(reqBean, resultList); + productionProcessContextStepService.saveFunctionChooseCavityOrderContext(reqBean, resultList); this.sendMessage(reqBean, resultBean.writeDbLog(), String.format("生产线[%s]工位[%s]%s成功,请等待验证! 提交信息[%s]", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), buttonDynamicModel.getButtonName(), buttonDynamicModel.getFunctionValue()), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCheckNosortStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCheckNosortStepService.java index 60671f8..67ec597 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCheckNosortStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCheckNosortStepService.java @@ -1,6 +1,5 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; -import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionCustomContextStepService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesWorkOrderExtService; @@ -42,9 +41,6 @@ public class MesWorkOrderCheckNosortStepService extends MesWorkOrderCheckStepSer private IMesProductionDispatchContextStepService productionDispatchContextStepService; @Autowired - private IMesProductionCustomContextStepService productionCustomContextStepService; - - @Autowired private IMesWorkOrderExtService workOrderExtService; @Autowired @@ -113,7 +109,7 @@ public class MesWorkOrderCheckNosortStepService extends MesWorkOrderCheckStepSer return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前上下文中的加工单信息全部为空腔,已清除当前的空腔数据!"); //保存选择/扫描/读取的腔数及工单信息上下文 - productionCustomContextStepService.saveFunctionChooseCavityOrderContext(reqBean, StationKvBeanUtil.addStationKvBeanList(new ArrayList<>(), + productionProcessContextStepService.saveFunctionChooseCavityOrderContext(reqBean, StationKvBeanUtil.addStationKvBeanList(new ArrayList<>(), new StationKvBean(MesPcnExtConstWords.CAVITY, "腔数", String.valueOf(productionPartContextList.size())), new StationKvBean(MesPcnExtConstWords.CELL_MESSAGE_SOURCE, "工位信息来源", MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ.getValueStr()), new StationKvBean(MesPcnExtConstWords.WORK_ORDER_NO, "加工单", equipVariableCollectContextList.stream().filter(o -> null != o).map(MesEquipVariableCollectContext::getEquipVariableValue).collect(Collectors.joining(MesPcnExtConstWords.SEMICOLON))))); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderScanStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderScanStepService.java index 3cd491f..4a72e6e 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderScanStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderScanStepService.java @@ -105,10 +105,10 @@ public class MesWorkOrderScanStepService extends BaseStepService { private List doHandleScanWorkOrderNoContext(StationRequestBean reqBean, StepResult stepResult) { //获取手动选择的腔数及工单信息上下文, 扫描的加工单也会存入其中 - List chooseCavityOrder = productionCustomContextStepService.getFunctionChooseCavityOrderContext(reqBean); + List chooseCavityOrder = productionProcessContextStepService.getFunctionChooseCavityOrderContext(reqBean); //删除手动选择的腔数及工单信息上下文 - if (!CollectionUtils.isEmpty(chooseCavityOrder)) productionCustomContextStepService.deleteFunctionChooseCavityOrderContext(reqBean); + if (!CollectionUtils.isEmpty(chooseCavityOrder)) productionProcessContextStepService.deleteFunctionChooseCavityOrderContext(reqBean); if (CollectionUtils.isEmpty(chooseCavityOrder)) return null; diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionCustomContextStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionCustomContextStepService.java index 821c690..7c12f2d 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionCustomContextStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionCustomContextStepService.java @@ -108,36 +108,6 @@ public class MesProductionCustomContextStepService extends BaseStepService imple this.sendMessage(reqBean, resultBean); } - - //手选腔数及工单信息KEY - private String getChooseCavityOrderContextKey(StationRequestBean reqBean) { return getFsmBusikey(reqBean, new StringJoiner(MesPcnExtConstWords.COLON).add(MesPcnExtConstWords.PRODUCTION_PROCESS_CONTEXT).add(MesPcnExtConstWords.FUNCTION_CHOOSE_CAVITY_ORDER).toString()); } - - //获取手动选择的腔数及工单信息上下文 - @Override - public List getFunctionChooseCavityOrderContext(StationRequestBean reqBean) { - String chooseCavityOrderJson = getFsmBusiData(reqBean.getOrganizeCode(), getChooseCavityOrderContextKey(reqBean)); - return !StringUtils.isEmpty(chooseCavityOrderJson) ? JSONObject.parseArray(chooseCavityOrderJson, StationKvBean.class) : null; - } - - //保存选择/扫描/读取的腔数及工单信息上下文 腔数=工单个数 数据格式: [StationKvBean(key=cavity, name=腔数, value=3, seq=0), StationKvBean(key=cellMessageSource, name=工位信息来源, value=10, seq=1), StationKvBean(key=workOrderNo, name=加工单, value=工单1;工单2;工单3, seq=2)] - @Override - public Boolean saveFunctionChooseCavityOrderContext(StationRequestBean reqBean, List resultList) { - if (CollectionUtils.isEmpty(resultList)) return false; - return saveFsmBusiData(reqBean.getOrganizeCode(), getChooseCavityOrderContextKey(reqBean), JSONObject.toJSONString(resultList)); - } - - //删除手动选择的腔数及工单信息上下文 - @Override - public void deleteFunctionChooseCavityOrderContext(StationRequestBean reqBean) { - deleteFsmBusiData(reqBean.getOrganizeCode(), getChooseCavityOrderContextKey(reqBean)); - } - - //开班信息KEY 【PS:生产线级别】 - private String getProdShiftContextKey(String orgainzeCode, String workCenterCode) { return new StringJoiner(MesPcnExtConstWords.COLON).add(orgainzeCode).add(MesPcnExtConstWords.PRODUCTION_PROCESS_CONTEXT).add(MesPcnExtConstWords.PROD_SHIFT_DATA_CONTEXT).add(workCenterCode).toString(); } - - - - //获取生产线的当前班组班次信息 @Override public MesProdShiftContext getMesProdShiftKvBean(String orgainzeCode, String workCenterCode) { @@ -155,21 +125,20 @@ public class MesProductionCustomContextStepService extends BaseStepService imple return mesProdShiftContext; } - //加工次数key - private String getProductionStatisticsContextKey(StationRequestBean reqBean) { return getFsmBusikey(reqBean, new StringJoiner(MesPcnExtConstWords.COLON).add(MesPcnExtConstWords.PRODUCTION_PROCESS_CONTEXT).add(MesPcnExtConstWords.PRODUCTION_COUNT_CONTEXT).toString()); } - + //开班信息KEY 【PS:生产线级别】 + private String getProdShiftContextKey(String orgainzeCode, String workCenterCode) { return new StringJoiner(MesPcnExtConstWords.COLON).add(orgainzeCode).add(MesPcnExtConstWords.PROD_SHIFT_DATA_CONTEXT).add(workCenterCode).toString(); } //获取上下文班次班组信息 @Override public List getProdShiftDataContext(String orgainzeCode, String workCenterCode) { - String prodShiftJson = getFsmBusiData(orgainzeCode, getProdShiftContextKey(orgainzeCode, MesPcnExtConstWords.PROD_SHIFT_DATA_CONTEXT), workCenterCode); + String prodShiftJson = getFsmBusiData(orgainzeCode, getProdShiftContextKey(orgainzeCode, workCenterCode)); return !StringUtils.isEmpty(prodShiftJson) ? JSONObject.parseArray(prodShiftJson, StationKvBean.class) : null; } //验证上下文班次班组信息是否存在 @Override public Boolean checkProdShiftDataIsExistContext(String orgainzeCode, String workCenterCode) { - String prodShiftJson = getFsmBusiData(orgainzeCode, getProdShiftContextKey(orgainzeCode, MesPcnExtConstWords.PROD_SHIFT_DATA_CONTEXT), workCenterCode); + String prodShiftJson = getFsmBusiData(orgainzeCode, getProdShiftContextKey(orgainzeCode, workCenterCode)); return !StringUtils.isEmpty(prodShiftJson) ? true : false; } @@ -177,19 +146,22 @@ public class MesProductionCustomContextStepService extends BaseStepService imple @Override public Boolean saveProdShiftDataContext(String organizeCode, String workCenterCode, List prodShiftDataList) { if (CollectionUtils.isEmpty(prodShiftDataList)) return false; - return saveFsmBusiData(organizeCode, getProdShiftContextKey(organizeCode, MesPcnExtConstWords.PROD_SHIFT_DATA_CONTEXT), workCenterCode, JSONObject.toJSONString(prodShiftDataList)); + return saveFsmBusiData(organizeCode, getProdShiftContextKey(organizeCode, workCenterCode), JSONObject.toJSONString(prodShiftDataList)); } //删除上下文班次班组信息 @Override public void deleteProdShiftDataContext(String orgainzeCode, String workCenterCode) { - deleteFsmBusiData(orgainzeCode, getProdShiftContextKey(orgainzeCode, MesPcnExtConstWords.PROD_SHIFT_DATA_CONTEXT), workCenterCode); + deleteFsmBusiData(orgainzeCode, getProdShiftContextKey(orgainzeCode, workCenterCode)); } + //加工次数key + private String getProductionStatisticsContextKey(StationRequestBean reqBean) { return getFsmBusikey(reqBean, new StringJoiner(MesPcnExtConstWords.COLON).add(MesPcnExtConstWords.PRODUCTION_PROCESS_CONTEXT).add(MesPcnExtConstWords.PRODUCTION_STATISTICS_CONTEXT).toString()); } + //获取上下文工位加工数统计信息 @Override public List getProductionStatisticsContext(StationRequestBean reqBean) { - String productionStatisticsJson = getFsmBusiData(reqBean.getOrganizeCode(), getProductionStatisticsContextKey(reqBean), MesPcnExtConstWords.PRODUCTION_STATISTICS_CONTEXT); + String productionStatisticsJson = getFsmBusiData(reqBean.getOrganizeCode(), getProductionStatisticsContextKey(reqBean)); return !StringUtils.isEmpty(productionStatisticsJson) ? JSONObject.parseArray(productionStatisticsJson, StationKvBean.class) : null; } @@ -197,7 +169,13 @@ public class MesProductionCustomContextStepService extends BaseStepService imple @Override public Boolean saveProductionStatisticsContext(StationRequestBean reqBean, List productionStatisticsList) { if (CollectionUtils.isEmpty(productionStatisticsList)) return false; - return saveFsmBusiData(reqBean.getOrganizeCode(), getProductionStatisticsContextKey(reqBean), MesPcnExtConstWords.PRODUCTION_STATISTICS_CONTEXT, JSONObject.toJSONString(productionStatisticsList)); + return saveFsmBusiData(reqBean.getOrganizeCode(), getProductionStatisticsContextKey(reqBean), JSONObject.toJSONString(productionStatisticsList)); + } + + //删除上下文工位加工数统计信息 + @Override + public void deleteProductionStatisticsContext(StationRequestBean reqBean) { + deleteFsmBusiData(reqBean.getOrganizeCode(), getProductionStatisticsContextKey(reqBean)); } @Override @@ -224,16 +202,9 @@ public class MesProductionCustomContextStepService extends BaseStepService imple return true; } - //删除上下文工位加工数统计信息 - @Override - public void deleteProductionStatisticsContext(StationRequestBean reqBean) { - deleteFsmBusiData(reqBean.getOrganizeCode(), getProductionStatisticsContextKey(reqBean), MesPcnExtConstWords.PRODUCTION_STATISTICS_CONTEXT); - } - - - //工位加工锁KEY + //可复用条码KEY private String getRepeatAssemblySnContextKey(String organizeCode, String workCenterCode, String workCellCode) { - return new StringJoiner(MesPcnExtConstWords.COLON).add(organizeCode).add(MesPcnExtConstWords.PRODUCTION_PROCESS_CONTEXT).add(MesPcnExtConstWords.REPEAT_ASSEMBLY_SN_CONTEXT).add(workCenterCode).add(workCellCode).toString(); + return new StringJoiner(":").add(organizeCode).add(workCenterCode).add(workCellCode).add(MesPcnExtConstWords.PRODUCTION_PROCESS_CONTEXT).add(MesPcnExtConstWords.REPEAT_ASSEMBLY_SN_CONTEXT).toString(); } //根据装配件规则ID获取可复用条码 diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionDispatchContextStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionDispatchContextStepService.java index 747adee..43d08cb 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionDispatchContextStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionDispatchContextStepService.java @@ -30,8 +30,6 @@ public class MesProductionDispatchContextStepService extends BaseStepService imp private String getContextKey(StationRequestBean reqBean) { return getFsmBusikey(reqBean, new StringJoiner(MesPcnExtConstWords.COLON).add(MesPcnExtConstWords.PRODUCTION_PROCESS_CONTEXT).add(MesPcnExtConstWords.BUSI_DATA_CONTEXT).toString()); } - private String getContextKey(String organizeCode, String busiCode) { return new StringJoiner(":").add(organizeCode).add(MesPcnExtConstWords.PRODUCTION_PROCESS_CONTEXT).add(busiCode).toString(); } - //清除上下文中的所有业务数据 @Override public void doFlushProductionDispatchContext(StationRequestBean reqBean) { @@ -397,21 +395,25 @@ public class MesProductionDispatchContextStepService extends BaseStepService imp public void deleteProdRuleDataContext(StationRequestBean reqBean) { deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PROD_RULE_DATA_CONTEXT); } + + //获取料桶原材料数据集合 @Override public List getMesRawPartChargingDataContext(StationRequestBean reqBean) { - String mesRawPartChargingDataJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), "RAW_PART_CHARGING_DATA_CONTEXT"); + String mesRawPartChargingDataJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.RAW_PART_CHARGING_DATA_CONTEXT); return !StringUtils.isEmpty(mesRawPartChargingDataJson) ? JSONObject.parseArray(mesRawPartChargingDataJson, MesRawPartCharging.class) : null; } + //保存料桶原材料数据集合 @Override public Boolean saveMesRawPartChargingDataContext(StationRequestBean reqBean, List mesRawPartChargingList) { if (CollectionUtils.isEmpty(mesRawPartChargingList)) return false; - return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), "RAW_PART_CHARGING_DATA_CONTEXT", JSONObject.toJSONString(mesRawPartChargingList)); + return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.RAW_PART_CHARGING_DATA_CONTEXT, JSONObject.toJSONString(mesRawPartChargingList)); } + //删除料桶原材料数据集合 @Override public void deleteMesRawPartChargingDataContext(StationRequestBean reqBean) { - deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), "RAW_PART_CHARGING_DATA_CONTEXT"); + deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.RAW_PART_CHARGING_DATA_CONTEXT); } } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionProcessContextStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionProcessContextStepService.java index bfd8232..467deea 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionProcessContextStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionProcessContextStepService.java @@ -11,6 +11,7 @@ import cn.estsh.i3plus.mes.pcn.actor.shipping.dispatch.IFsmRouteDataService; import cn.estsh.i3plus.mes.pcn.api.iservice.base.IConfigService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; import cn.estsh.i3plus.pojo.mes.bean.*; +import cn.estsh.i3plus.pojo.mes.model.StationKvBean; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import com.alibaba.fastjson.JSONObject; @@ -342,4 +343,24 @@ public class MesProductionProcessContextStepService extends BaseStepService impl return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.ASSEMBLY_NOSORT_CFG_CONTEXT, JSONObject.toJSONString(assemblyNosortCfgList)); } + //获取手动选择的腔数及工单信息上下文 + @Override + public List getFunctionChooseCavityOrderContext(StationRequestBean reqBean) { + String chooseCavityOrderJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.FUNCTION_CHOOSE_CAVITY_ORDER); + return !StringUtils.isEmpty(chooseCavityOrderJson) ? JSONObject.parseArray(chooseCavityOrderJson, StationKvBean.class) : null; + } + + //保存选择/扫描/读取的腔数及工单信息上下文 腔数=工单个数 数据格式: [StationKvBean(key=cavity, name=腔数, value=3, seq=0), StationKvBean(key=cellMessageSource, name=工位信息来源, value=10, seq=1), StationKvBean(key=workOrderNo, name=加工单, value=工单1;工单2;工单3, seq=2)] + @Override + public Boolean saveFunctionChooseCavityOrderContext(StationRequestBean reqBean, List resultList) { + if (CollectionUtils.isEmpty(resultList)) return false; + return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.FUNCTION_CHOOSE_CAVITY_ORDER, JSONObject.toJSONString(resultList)); + } + + //删除手动选择的腔数及工单信息上下文 + @Override + public void deleteFunctionChooseCavityOrderContext(StationRequestBean reqBean) { + deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.FUNCTION_CHOOSE_CAVITY_ORDER); + } + } 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 ae3ab48..1be6c1a 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 @@ -265,8 +265,6 @@ public class MesPcnExtConstWords { public static final String ASSEMBLY_NOSORT_CFG_CONTEXT = "ASSEMBLY_NOSORT_CFG_CONTEXT"; // 生产过程控制工位加工锁 public static final String PRODUCTION_LOCK_CONTEXT = "PRODUCTION_LOCK_CONTEXT"; - // 生产过程控制工位加工锁 - public static final String PRODUCTION_COUNT_CONTEXT = "PRODUCTION_COUNT_CONTEXT"; // 历史扫描信息 public static final String LAST_SCAN_INFO_CONTEXT = "LAST_SCAN_INFO_CONTEXT"; // 上下文: 班次班组信息 @@ -304,6 +302,8 @@ public class MesPcnExtConstWords { public static final String PRODUCTION_PS_IN_CONTEXT = "PRODUCTION_PS_IN_CONTEXT"; // 上下文: 产出条码数据信息 public static final String PRODUCTION_PS_OUT_CONTEXT = "PRODUCTION_PS_OUT_CONTEXT"; + // 上下文: 料桶原材料数据 + public static final String RAW_PART_CHARGING_DATA_CONTEXT = "RAW_PART_CHARGING_DATA_CONTEXT"; //OPC_API_PARAM From 3e3d3543d338cd8449ac7c7a0285136dee6c76ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=AE=E7=AC=91=E7=9D=80=E9=9D=A2=E5=AF=B9=E6=98=8E?= =?UTF-8?q?=E5=A4=A9?= <752558143@qq.com> Date: Sun, 30 Jun 2024 13:36:35 +0800 Subject: [PATCH 5/7] =?UTF-8?q?=E5=88=86=E5=B1=8F=E5=88=87=E6=8D=A2?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../apiservice/serviceimpl/base/MesWorkCellExtendCfgServiceImpl.java | 4 ++-- .../ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java | 1 + .../pcn/apiservice/serviceimpl/equiplog/MesEquipmentRwExtService.java | 3 ++- .../apiservice/serviceimpl/step/MesManyCellNoticeNextStepService.java | 2 +- .../serviceimpl/step/MesManyCellTriggerTabSwitchStepService.java | 2 +- 5 files changed, 7 insertions(+), 5 deletions(-) diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesWorkCellExtendCfgServiceImpl.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesWorkCellExtendCfgServiceImpl.java index 4b2677c..8a3e6eb 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesWorkCellExtendCfgServiceImpl.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesWorkCellExtendCfgServiceImpl.java @@ -36,7 +36,7 @@ public class MesWorkCellExtendCfgServiceImpl implements IMesWorkCellExtendCfgSer DdlPackBean packBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode()); DdlPreparedPack.getStringEqualPack(bean.getWorkCenterCode(), "workCenterCode", packBean); DdlPreparedPack.getStringEqualPack(bean.getWorkCellCode(), "workCellCode", packBean); - DdlPreparedPack.getStringEqualPack(bean.getExtendType(), "extendType", packBean); + DdlPreparedPack.getNumEqualPack(bean.getExtendType(), "extendType", packBean); if(!StringUtil.isEmpty(bean.orderBy())){ packBean.setOrderByStr(bean.orderBy()); @@ -57,7 +57,7 @@ public class MesWorkCellExtendCfgServiceImpl implements IMesWorkCellExtendCfgSer DdlPreparedPack.getStringEqualPack(bean.getAreaCode(), "areaCode", packBean); DdlPreparedPack.getStringEqualPack(bean.getWorkCenterCode(), "workCenterCode", packBean); DdlPreparedPack.getStringEqualPack(bean.getWorkCellCode(), "workCellCode", packBean); - DdlPreparedPack.getStringEqualPack(StringUtil.isEmpty(bean.getExtendType())?"20":bean.getExtendType(), "extendType", packBean); + DdlPreparedPack.getNumEqualPack(StringUtil.isEmpty(bean.getExtendType())?20:bean.getExtendType(), "extendType", packBean); if(!StringUtil.isEmpty(bean.orderBy())){ packBean.setOrderByStr(bean.orderBy()); }else { diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java index 38faf05..f88317e 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java @@ -475,6 +475,7 @@ public class MesWorkOrderService implements IMesWorkOrderService { List oldMesWorkOrders = getMesWorkOrders(productionRecord, organizeCode, null); if (CollectionUtils.isEmpty(oldMesWorkOrders)) { updateProductionRecord(organizeCode, userName, productionRecord.getProductSn()); + return; } report(productionRecord, organizeCode, userName, oldMesWorkOrders.get(0)); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/equiplog/MesEquipmentRwExtService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/equiplog/MesEquipmentRwExtService.java index f083512..a97d38a 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/equiplog/MesEquipmentRwExtService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/equiplog/MesEquipmentRwExtService.java @@ -82,7 +82,9 @@ public class MesEquipmentRwExtService implements IMesEquipVariableRwExtService { params.put(MesPcnExtConstWords.CLIENT_HANDLE, equipVariableRwModel.getClientHandle().toString()); params.put(MesPcnExtConstWords.CHANNEL, equipVariableRwModel.getChannel()); params.put(MesPcnExtConstWords.EQUIPMENT_ID, equipVariableRwModel.getEquipId().toString()); + LOGGER.info("设备数据变量写值开始-> 地址:{}, params={}", equipVariableRwModel.getWriteRequestUrl(), params); String data = HttpClientTool.doHttpUrl(CommonEnumUtil.HTTP_METHOD_TYPE.POST, false, equipVariableRwModel.getWriteRequestUrl(), params, null, null); + LOGGER.info("设备数据变量写值返回-> data:{} ", data); if (!StringUtils.isEmpty(data)) return JsonUtilTool.decode(data, MesEquipVariableRwResult.class).obj(JSONObject.toJSONString(equipVariableRwModel)); else return result.noSuccessed().message(String.format("设备数据变量写值失败! CLIENT_HANDLE[%s] CHANNEL[%s] EQUIPMENT_ID[%s] VALUE[%s]", equipVariableRwModel.getClientHandle(), equipVariableRwModel.getChannel(), equipVariableRwModel.getEquipId(), equipVariableRwModel.getValue())).obj(JSONObject.toJSONString(equipVariableRwModel)); @@ -122,7 +124,6 @@ public class MesEquipmentRwExtService implements IMesEquipVariableRwExtService { else return result.noSuccessed().message(String.format("设备数据变量读值失败! 数据信息:[%s]!", JSONObject.toJSONString(equipVariableRwModel))); } - @Override public MesEquipVariableRwResult writeVariable(MesEquipmentVariableCfg equipmentVariableCfg, MesEquipmentVariable equipmentVariable, String kepwareFlag) { MesEquipVariableRwModel equipVariableRwModel = new MesEquipVariableRwModel(); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesManyCellNoticeNextStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesManyCellNoticeNextStepService.java index 77e50c8..6d95bec 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesManyCellNoticeNextStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesManyCellNoticeNextStepService.java @@ -51,7 +51,7 @@ public class MesManyCellNoticeNextStepService extends BaseStepService { if (workCellExtendCfg.getWorkCenterCodeBak().equals(reqBean.getWorkCenterCode()) && workCellExtendCfg.getWorkCellCodeBak().equals(reqBean.getWorkCellCode())) continue; //验证下个工位是否在线 - String clientInfo = shippingDispatchService.getActorClientInfo(reqBean.getOrganizeCode(), workCellExtendCfg.getWorkCenterCode(), workCellExtendCfg.getWorkCellCode()); + String clientInfo = shippingDispatchService.getActorClientInfo(reqBean.getOrganizeCode(), workCellExtendCfg.getWorkCenterCode(), workCellExtendCfg.getWorkCellCodeBak()); if (CollectionUtils.isEmpty(StationWebSocket.getStationWebSocketList(clientInfo))) continue; //调用多工位场景触发定位分屏工步, CLIENT_INFO是必要传参 diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesManyCellTriggerTabSwitchStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesManyCellTriggerTabSwitchStepService.java index 65f1785..d7f1b6b 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesManyCellTriggerTabSwitchStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesManyCellTriggerTabSwitchStepService.java @@ -35,7 +35,7 @@ public class MesManyCellTriggerTabSwitchStepService extends BaseStepService { StationRequestBean stationRequestBean = new StationRequestBean(); BeanUtils.copyProperties(reqBean, stationRequestBean); - stationRequestBean.setScanInfo(clientInfo); + stationRequestBean.setClientInfo(clientInfo); return clientInfo.equals(reqBean.getClientInfo()) ? execDynamicsCompleteAndSendMsgReturn(stationRequestBean, resultBean.writeDbLog(), stepResult, true, MesPcnEnumUtil.STATION_BUSI_TYPE.TAB_SWITCH, MesPcnEnumUtil.STATION_DATA_TYPE.CUSTOM, String.format("客户端[%s]监听自动切换页面成功!", reqBean.getClientInfo())) : From 34d54037dd06b253d5401951023640929d84357a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=AE=E7=AC=91=E7=9D=80=E9=9D=A2=E5=AF=B9=E6=98=8E?= =?UTF-8?q?=E5=A4=A9?= <752558143@qq.com> Date: Sun, 30 Jun 2024 13:42:13 +0800 Subject: [PATCH 6/7] =?UTF-8?q?=E5=B1=95=E7=A4=BA=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../apiservice/serviceimpl/step/MesManyCellNoticeNextStepService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesManyCellNoticeNextStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesManyCellNoticeNextStepService.java index 6d95bec..16ac838 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesManyCellNoticeNextStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesManyCellNoticeNextStepService.java @@ -51,7 +51,7 @@ public class MesManyCellNoticeNextStepService extends BaseStepService { if (workCellExtendCfg.getWorkCenterCodeBak().equals(reqBean.getWorkCenterCode()) && workCellExtendCfg.getWorkCellCodeBak().equals(reqBean.getWorkCellCode())) continue; //验证下个工位是否在线 - String clientInfo = shippingDispatchService.getActorClientInfo(reqBean.getOrganizeCode(), workCellExtendCfg.getWorkCenterCode(), workCellExtendCfg.getWorkCellCodeBak()); + String clientInfo = shippingDispatchService.getActorClientInfo(reqBean.getOrganizeCode(), workCellExtendCfg.getWorkCenterCodeBak(), workCellExtendCfg.getWorkCellCodeBak()); if (CollectionUtils.isEmpty(StationWebSocket.getStationWebSocketList(clientInfo))) continue; //调用多工位场景触发定位分屏工步, CLIENT_INFO是必要传参 From 6bfd3075987a68ab5c00008d14160a702da1d42e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=AE=E7=AC=91=E7=9D=80=E9=9D=A2=E5=AF=B9=E6=98=8E?= =?UTF-8?q?=E5=A4=A9?= <752558143@qq.com> Date: Sun, 30 Jun 2024 14:31:33 +0800 Subject: [PATCH 7/7] =?UTF-8?q?=E5=B1=95=E7=A4=BA=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceimpl/step/MesProductResultErrorHandleStepService.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductResultErrorHandleStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductResultErrorHandleStepService.java index 13078f9..61e5cca 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductResultErrorHandleStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductResultErrorHandleStepService.java @@ -73,7 +73,7 @@ public class MesProductResultErrorHandleStepService extends BaseStepService { // 获取加工结果 String result = mesProductionDispatchContextStepService.getProductResultContext(reqBean); // 如果是报废或者可疑,需要编辑条码状态为不合格、并且nc判定需要新增一条记录 - if (StringUtils.isEmpty(result) || Objects.equal(MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_OK.getCode(), result)) { + if (StringUtils.isEmpty(result) || Objects.equal(MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_OK.getCode() + "", result)) { return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "加工结果合格,无需记录异常"); } // 获取条码列表 @@ -132,6 +132,8 @@ public class MesProductResultErrorHandleStepService extends BaseStepService { mesPartInspectionDetail.setDefectTypeCode(mesDefectType.getDefectTypeCode()); mesPartInspectionDetail.setDefectTypeName(mesDefectType.getDefectTypeName()); model.setPartInspection(partInspection); + model.setType(partInspection.getSourceType()); + model.setPartInspectionDetailList(Arrays.asList(mesPartInspectionDetail)); ncProcessingService.saveNc(model, reqBean.getOrganizeCode()); });