From 79a5fbbb1ec0c6ddfe297b16a82d47dbfd64afd0 Mon Sep 17 00:00:00 2001 From: jun Date: Mon, 8 Jul 2024 19:01:22 +0800 Subject: [PATCH 1/5] =?UTF-8?q?41794=20MES-PDA=EF=BC=9A=E7=82=B9=E6=A3=80-?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E7=82=B9=E6=A3=80=E5=8D=95=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E6=B1=87=E6=80=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/busi/spot/IMesSpotCheckOrderService.java | 11 ++++++ .../busi/spot/MesSpotCheckOrderController.java | 13 +++++++ .../serviceimpl/busi/MesSpotCheckOrderService.java | 33 +++++++++++++++--- .../pcn/pojo/model/MesEquipmentSpotCheckModel.java | 40 ++++++++++++++++++++++ 4 files changed, 92 insertions(+), 5 deletions(-) create mode 100644 modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesEquipmentSpotCheckModel.java diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/spot/IMesSpotCheckOrderService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/spot/IMesSpotCheckOrderService.java index e2b939d..81efbaf 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/spot/IMesSpotCheckOrderService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/spot/IMesSpotCheckOrderService.java @@ -1,5 +1,6 @@ package cn.estsh.i3plus.ext.mes.pcn.api.busi.spot; +import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesEquipmentSpotCheckModel; import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesSpotCheckOrderModel; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; @@ -34,6 +35,16 @@ public interface IMesSpotCheckOrderService { * 查询点检单 * * @param spotCheckOrder + * @return + */ + @ApiOperation("查询设备点检") + List findEquipmentSpotCheck(MesEquipmentSpotCheck spotCheckOrder); + + /** + * 、 + * 查询点检单 + * + * @param spotCheckOrder * @param pager * @return */ diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/spot/MesSpotCheckOrderController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/spot/MesSpotCheckOrderController.java index bb80ede..e64ea76 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/spot/MesSpotCheckOrderController.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/spot/MesSpotCheckOrderController.java @@ -28,6 +28,19 @@ public class MesSpotCheckOrderController { @Autowired private IMesSpotCheckOrderService spotCheckOrderService; + @GetMapping("/find-equipment-spot") + @ApiOperation(value = "查询设备点检") + public ResultBean queryEquipmentSpotCheckMap(MesEquipmentSpotCheck spotCheckOrder) { + try { + spotCheckOrder.setOrganizeCode(AuthUtil.getOrganizeCode()); + return ResultBean.success("查询成功").setResultList(spotCheckOrderService.findEquipmentSpotCheck(spotCheckOrder)); + } catch (ImppBusiException imppException) { + return ResultBean.fail(imppException); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + @GetMapping("/query-equipment-spot") @ApiOperation(value = "查询设备点检") diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesSpotCheckOrderService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesSpotCheckOrderService.java index 8298823..15fcb1b 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesSpotCheckOrderService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesSpotCheckOrderService.java @@ -2,6 +2,7 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi; import cn.estsh.i3plus.ext.mes.pcn.api.busi.spot.IMesSpotCheckOrderService; import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesEquipmentSpotCheckModel; import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesSpotCheckOrderModel; import cn.estsh.i3plus.icloud.core.sdk.ICoreUtilCloud; import cn.estsh.i3plus.mes.pcn.api.iservice.busi.ISyncFuncService; @@ -32,10 +33,7 @@ import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; /** @@ -89,6 +87,30 @@ public class MesSpotCheckOrderService implements IMesSpotCheckOrderService { } @Override + public List findEquipmentSpotCheck(MesEquipmentSpotCheck spotCheckOrder) { + List mesEquipmentSpotCheckList = queryEquipmentSpotCheck(spotCheckOrder); + if(CollectionUtils.isEmpty(mesEquipmentSpotCheckList)){ + return null; + } + Map> mesEquipmentSpotCheckMap = mesEquipmentSpotCheckList.stream().collect(Collectors.groupingBy(MesEquipmentSpotCheck::getEquipCode)); + List mesEquipmentSpotCheckModelList = new ArrayList<>(); + for (Map.Entry> mesEquipmentSpotCheckEntry : mesEquipmentSpotCheckMap.entrySet()) { + MesEquipmentSpotCheck next = mesEquipmentSpotCheckEntry.getValue().iterator().next(); + MesEquipmentSpotCheckModel mesEquipmentSpotCheckModel = new MesEquipmentSpotCheckModel(); + BeanUtils.copyProperties(next,mesEquipmentSpotCheckModel); + Map> listMap = mesEquipmentSpotCheckEntry.getValue().stream().collect(Collectors.groupingBy(MesEquipmentSpotCheck::getSpotCheckOrderType)); + for (Map.Entry> entry : listMap.entrySet()) { + MesEquipmentSpotCheckModel.MesEquipmentSpotCheckDataModel mesEquipmentSpotCheckDataModel = new MesEquipmentSpotCheckModel.MesEquipmentSpotCheckDataModel(); + mesEquipmentSpotCheckDataModel.setSpotCheckOrderType(entry.getKey()); + mesEquipmentSpotCheckDataModel.setSpotCheckList(entry.getValue()); + mesEquipmentSpotCheckModel.getSpotCheckDataModelList().add(mesEquipmentSpotCheckDataModel); + } + mesEquipmentSpotCheckModelList.add(mesEquipmentSpotCheckModel); + } + return mesEquipmentSpotCheckModelList; + } + + @Override public List queryEquipmentSpotCheck(MesEquipmentSpotCheck bean) { DdlPackBean packBean = DdlPackBean.getDdlPackBean(bean.getOrganizeCode(), bean.getIsValid()); @@ -97,7 +119,8 @@ public class MesSpotCheckOrderService implements IMesSpotCheckOrderService { DdlPreparedPack.getStringLikerPack(bean.getSpotCheckName(), "spotCheckName", packBean); DdlPreparedPack.getStringEqualPack(bean.getWorkCenterCode(), "workCenterCode", packBean); DdlPreparedPack.getStringEqualPack(bean.getWorkCellCode(), "workCellCode", packBean); - + DdlPreparedPack.getStringEqualPack(bean.getEquipCode(), "equipCode", packBean); + DdlPreparedPack.getNumEqualPack(bean.getSpotCheckOrderType(), "spotCheckOrderType", packBean); return equipmentSpotCheckRepository.findByHqlWhere(packBean); } diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesEquipmentSpotCheckModel.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesEquipmentSpotCheckModel.java new file mode 100644 index 0000000..ef32452 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/model/MesEquipmentSpotCheckModel.java @@ -0,0 +1,40 @@ +package cn.estsh.i3plus.ext.mes.pcn.pojo.model; + +import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentSpotCheck; +import io.swagger.annotations.ApiParam; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +/** + * @Description : 设备点检Model + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/7/8 17:37 + * @Modify: + **/ +@Data +public class MesEquipmentSpotCheckModel { + + @ApiParam("设备Code") + private String equipCode; + + @ApiParam("设备名称") + private String equipName; + + @ApiParam("点检单类型") + private List spotCheckDataModelList = new ArrayList<>(); + + @Data + public static class MesEquipmentSpotCheckDataModel { + @ApiParam("点检单类型") + private Integer spotCheckOrderType; + + @ApiParam("设备点检") + List spotCheckList; + + public MesEquipmentSpotCheckDataModel() { + } + } +} \ No newline at end of file From cfea02b3b70430ae37903a734ae601fc7fd36de1 Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Tue, 9 Jul 2024 09:14:37 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E9=A1=BA=E5=BA=8F=E9=98=B2=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/pcn/api/busi/IMesAssemblyExtService.java | 3 + .../mes/pcn/api/busi/IMesProduceSnExtService.java | 3 + .../mes/pcn/api/busi/IMesWorkOrderExtService.java | 3 + .../serviceimpl/busi/MesAssemblyExtService.java | 12 + .../serviceimpl/busi/MesProduceSnExtService.java | 9 + .../serviceimpl/busi/MesWorkOrderExtService.java | 10 + .../step/MesProduceSeqCheckStepService.java | 412 ++++++++++++--------- .../pcn/pojo/context/MesProductionPartContext.java | 3 + .../ext/mes/pcn/pojo/util/MesPcnExtConstWords.java | 4 + 9 files changed, 277 insertions(+), 182 deletions(-) diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesAssemblyExtService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesAssemblyExtService.java index a346317..0dd5ceb 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesAssemblyExtService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesAssemblyExtService.java @@ -36,4 +36,7 @@ public interface IMesAssemblyExtService { @ApiOperation(value = "【排序线】获取生产工单装配件清单") List getWorkOrderAssemblyList(String organizeCode, String workOrderNo, String productSn, String craftCode); + @ApiOperation(value = "【排序线】获取生产工单装配件清单") + List getWorkOrderAssemblyList(String organizeCode, String workCenterCode, String workCellCode, String workOrderNo, List productSnList); + } diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProduceSnExtService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProduceSnExtService.java index 785abcf..c59ed65 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProduceSnExtService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesProduceSnExtService.java @@ -19,6 +19,9 @@ public interface IMesProduceSnExtService { @ApiOperation(value = "根据零件条码查询零件条码信息") Map> getProduceSnMap(String organizeCode, List productSnList); + @ApiOperation(value = "根据生产工单,生产线,工位查询工位队列信息") + List getQueueOrderList(String organizeCode, String workCenterCode, String workCellCode, String workOrderNo); + @ApiOperation(value = "根据零件条码,生产线,工位查询工位队列信息") List getQueueOrderList(String organizeCode, String workCenterCode, String workCellCode, List productSnList); diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesWorkOrderExtService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesWorkOrderExtService.java index 75afd21..f8d2e4e 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesWorkOrderExtService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesWorkOrderExtService.java @@ -14,6 +14,9 @@ public interface IMesWorkOrderExtService { @ApiOperation(value = "根据生产工单ID查询生产工单信息") MesWorkOrder getWorkOrder(String organizeCode, Long id); + @ApiOperation(value = "根据生产工单顺序号,生产线代码查询上一个生产工单信息") + MesWorkOrder getWorkOrder(String organizeCode, String workCenterCode, Long produceSeq); + MesWorkOrder insert(MesWorkOrder item); void update(MesWorkOrder item); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesAssemblyExtService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesAssemblyExtService.java index b28536a..623afd3 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesAssemblyExtService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesAssemblyExtService.java @@ -164,6 +164,18 @@ public class MesAssemblyExtService implements IMesAssemblyExtService { new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), workOrderNo, productSn, craftCode}); } + @Override + public List getWorkOrderAssemblyList(String organizeCode, String workCenterCode, String workCellCode, String workOrderNo, List productSnList) { + if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(workCenterCode) || StringUtils.isEmpty(workCellCode) || StringUtils.isEmpty(workOrderNo) || CollectionUtils.isEmpty(productSnList)) return null; + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(workCenterCode, MesPcnExtConstWords.WORK_CENTER_CODE, packBean); + DdlPreparedPack.getStringEqualPack(workCellCode, MesPcnExtConstWords.WORK_CELL_CODE, packBean); + DdlPreparedPack.getStringEqualPack(workOrderNo, MesPcnExtConstWords.WORK_ORDER_NO, packBean); + if (productSnList.size() == 1) DdlPreparedPack.getStringEqualPack(productSnList.get(0), MesPcnExtConstWords.PRODUCT_SN, packBean); + else DdlPreparedPack.getInPackList(productSnList, MesPcnExtConstWords.PRODUCT_SN, packBean); + return workOrderAssemblyRepository.findByHqlWhere(packBean); + } + //剔除解绑的数据 private List filterProductionAssemblyList(List productionAssemblyList) { return CollectionUtils.isEmpty(productionAssemblyList) ? null : productionAssemblyList.stream().filter(o -> (null != o && MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_20.getValue() != o.getAssemblyStatus())).collect(Collectors.toList()); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProduceSnExtService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProduceSnExtService.java index a6c721d..4b0c3de 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProduceSnExtService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesProduceSnExtService.java @@ -65,6 +65,15 @@ public class MesProduceSnExtService implements IMesProduceSnExtService { } + //根据生产工单,生产线,工位查询工位队列信息 + @Override + public List getQueueOrderList(String organizeCode, String workCenterCode, String workCellCode, String workOrderNo) { + if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(workOrderNo)) return null; + return queueOrderRepository.findByProperty( + new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.WORK_CENTER_CODE, MesPcnExtConstWords.WORK_CELL_CODE, MesPcnExtConstWords.WORK_ORDER_NO}, + new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), workCenterCode, workCellCode, workOrderNo}); + } + //根据零件条码,生产线,工位查询工位队列信息 @Override public List getQueueOrderList(String organizeCode, String workCenterCode, String workCellCode, List productSnList) { diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderExtService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderExtService.java index d814c70..01e6ecd 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderExtService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderExtService.java @@ -50,6 +50,16 @@ public class MesWorkOrderExtService implements IMesWorkOrderExtService { new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), id}); } + //根据生产工单顺序号,生产线代码查询上一个生产工单信息 + @Override + public MesWorkOrder getWorkOrder(String organizeCode, String workCenterCode, Long produceSeq) { + if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(workCenterCode) || (StringUtils.isEmpty(produceSeq) || produceSeq.compareTo(0L) == 0)) return null; + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(workCenterCode, MesPcnExtConstWords.WORK_CENTER_CODE, packBean); + DdlPreparedPack.getNumberSmallerPack(produceSeq, MesPcnExtConstWords.PRODUCE_SEQ, packBean); + DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{MesPcnExtConstWords.PRODUCE_SEQ}, packBean); + return workOrderRepository.getByProperty(packBean); + } @Override @MonitorLog diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProduceSeqCheckStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProduceSeqCheckStepService.java index 749be2e..a7cf0f7 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProduceSeqCheckStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProduceSeqCheckStepService.java @@ -1,182 +1,230 @@ -//package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; -// -//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.pojo.context.MesProductionPartContext; -//import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext; -//import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; -//import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; -//import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; -//import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; -//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; -//import org.springframework.util.CollectionUtils; -//import org.springframework.util.StringUtils; -// -//import java.util.ArrayList; -//import java.util.List; -//import java.util.Optional; -// -///** -// * @Description : 生产工单顺序防错 -// * @Author : wangjie -// **/ -//@Slf4j -//@Service("mesProduceSeqCheckStepService") -//public class MesProduceSeqCheckStepService extends BaseStepService { -// -// @Autowired -// private IMesProductionProcessContextStepService productionProcessContextStepService; -// -// @Autowired -// private IMesProductionDispatchContextStepService productionDispatchContextStepService; -// -// @Override -// public StepResult execute(StationRequestBean reqBean) { -// -// StationResultBean resultBean = new StationResultBean(); -// -// StepResult stepResult = StepResult.getSuccessComplete(); -// -// //获取上下文信息 -// MesProductionProcessContext productionProcessContext = productionProcessContextStepService.doHandleCurCellEquipment(reqBean); -// -// //获取生产过程上下文对象有异常信息 抛出异常 -// if (!productionProcessContext.getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); -// -// //存储生产过程上下文对象 -// productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext); -// -// //获取上下文产出零件信息 -// List productionPartContextList = productionDispatchContextStepService.getProductionPartContext(reqBean); -// -// //验证是否存在加工单 -// if (!checkIsExistWorkOrder(productionPartContextList)) return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前无加工单信息,无需进行顺序防错验证!"); -// -// //验证工位是否设置需要顺序防错 -// if (!isNeedCheckProduceSeq(productionPartContextList)) -// return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("生产线[%s]工位[%s]未设置顺序防错,无需进行顺序防错验证!", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode())); -// -// //验证是否存在工艺强过码, 存在则保存 并返回强过的加工单 -// List workOrderNoList2Jump = doHandleCraftJumpCode(reqBean, productionPartContextList); -// if (!CollectionUtils.isEmpty(workOrderNoList2Jump)) -// return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog().scanInfo(workOrderNoList2Jump.toString()), stepResult, String.format("加工单%s跳过顺序防错验证成功!", workOrderNoList2Jump.toString())); -// -// //验证是否已经全部通过 -// if (!isExistNeedCheckProduceSeq(productionPartContextList)) return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, "加工单均已通过顺序防错验证!"); -// -// //顺序防错验证处理 -// doHandleProduceSeqCheck(reqBean, resultBean, stepResult, productionProcessContext, productionProcessContext.getWorkCenter(), productionPartContextList); -// -// return stepResult; -// -// } -// -// //验证是否存在加工单 -// private Boolean checkIsExistWorkOrder(List productionPartContextList) { -// -// if (CollectionUtils.isEmpty(productionPartContextList)) return false; -// -// Optional optional = productionPartContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getWorkOrderNo()))).findFirst(); -// -// return (null == optional || !optional.isPresent()) ? false : true; -// -// } -// -// //验证工位是否设置需要前道防错 -// private Boolean isNeedCheckProduceSeq(List productionPartContextList) { -// Optional optional = productionPartContextList.stream().filter(o -> (null != o && -// o.getIsFinishCode().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0 && o.getIsCheckSeq().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0)).findFirst(); -// return (null == optional || !optional.isPresent()) ? false : true; -// } -// -// //验证是否已经全部通过 -// private Boolean isExistNeedCheckProduceSeq(List productionPartContextList) { -// Optional optional = productionPartContextList.stream().filter(o -> (null != o && -// o.getIsFinishCode().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0 && o.getCheckSeqResult().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) != 0)).findFirst(); -// return (null == optional || !optional.isPresent()) ? false : true; -// } -// -// //验证是否存在工艺强过码, 存在则保存 并返回强过的加工单 -// private List doHandleCraftJumpCode(StationRequestBean reqBean, List productionPartContextList) { -// -// List workOrderNoList2Jump = null; -// -// for (MesProductionPartContext productionPartContext : productionPartContextList) { -// -// if (null == productionPartContext || productionPartContext.getCheckSeqResult().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) != 0 || StringUtils.isEmpty(productionPartContext.getCraftJumpCode())) continue; -// -// if (CollectionUtils.isEmpty(workOrderNoList2Jump)) workOrderNoList2Jump = new ArrayList<>(); -// -// workOrderNoList2Jump.add(productionPartContext.getWorkOrderNo()); -// -// productionPartContext.checkSeqResult(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); -// -// } -// -// //保存上下文产出零件信息 -// if (!CollectionUtils.isEmpty(workOrderNoList2Jump)) productionDispatchContextStepService.saveProductionPartContext(reqBean, productionPartContextList); -// -// return workOrderNoList2Jump; -// -// } -// -// //顺序防错验证处理 -// private void doHandleProduceSeqCheck(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesWorkCenter workCenter, List productionPartContextList) { -// -// List workOrderNoList = new ArrayList<>(); -// -// for (MesProductionPartContext productionPartContext : productionPartContextList) { -// -// if (null == productionPartContext || StringUtils.isEmpty(productionPartContext.getWorkOrderNo()) || productionPartContext.getCheckSeqResult().compareTo(MesPcnExtConstWords.ZERO) != 0) continue; -// -// //顺序防错验证 -// Boolean result = doProduceSeqCheck(reqBean, stepResult, productionProcessContext, workCenter, productionPartContextList); -// -// if (!result) productionPartContext.setCheckSeqResult(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); -// else productionPartContext.setCheckSeqResult(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); -// -// workOrderNoList.add(productionPartContext.getWorkOrderNo()); -// -// } -// -// //保存上下文产出零件信息 -// productionDispatchContextStepService.saveProductionPartContext(reqBean, productionPartContextList); -// -// if (stepResult.isCompleted()) this.sendMessage(reqBean, resultBean.writeDbLog().scanInfo(workOrderNoList.toString()), String.format("加工单%s顺序防错验证成功!", workOrderNoList.toString()), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); -// else this.sendMessage(reqBean, resultBean.writeDbLog().scanInfo(workOrderNoList.toString()), stepResult.getMsg(), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); -// -// } -// -// //顺序防错验证 -// private Boolean doProduceSeqCheck(StationRequestBean reqBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesWorkCenter workCenter, List productionPartContextList) { -// -// //排序 -// if (workCenter.getCenterType().compareTo(MesExtEnumUtil.WORK_CENTER_TYPE.SORT.getValue()) == 0) return doProduceSeqCheckSort(reqBean, stepResult, productionProcessContext, productionPartContextList); -// -// //非排序 -// return doProduceSeqCheckNosort(reqBean, stepResult, productionProcessContext, productionPartContextList); -// -// } -// -// //前道工艺防错验证 【排序】 -// private Boolean doProduceSeqCheckSort(StationRequestBean reqBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, List productionPartContextList) { -// -// -// -// } -// -// //前道工艺防错验证 【非排序】 -// private Boolean doProduceSeqCheckNosort(StationRequestBean reqBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, List productionPartContextList) { -// -// -// -// } -// -//} +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.*; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; +import cn.estsh.i3plus.pojo.mes.bean.MesQueueOrder; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrderAssembly; +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; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.stream.Collectors; + +/** + * @Description : 生产工单顺序防错 + * @Author : wangjie + **/ +@Slf4j +@Service("mesProduceSeqCheckStepService") +public class MesProduceSeqCheckStepService extends BaseStepService { + + @Autowired + private IMesProductionProcessContextStepService productionProcessContextStepService; + + @Autowired + private IMesProductionDispatchContextStepService productionDispatchContextStepService; + + @Autowired + private IMesWorkOrderExtService workOrderExtService; + + @Autowired + private IMesProduceSnExtService produceSnExtService; + + @Autowired + private IMesAssemblyExtService assemblyExtService; + + @Override + public StepResult execute(StationRequestBean reqBean) { + + StationResultBean resultBean = new StationResultBean(); + + StepResult stepResult = StepResult.getSuccessComplete(); + + //获取上下文信息 + MesProductionProcessContext productionProcessContext = productionProcessContextStepService.doHandleCurCellEquipment(reqBean); + + //获取生产过程上下文对象有异常信息 抛出异常 + if (!productionProcessContext.getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); + + //存储生产过程上下文对象 + productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext); + + //获取上下文产出零件信息 + List productionPartContextList = productionDispatchContextStepService.getProductionPartContext(reqBean); + + //验证是否存在加工单 + if (!checkIsExistWorkOrder(productionPartContextList)) return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前无加工单信息,无需进行顺序防错验证!"); + + //验证工位是否设置需要顺序防错 + if (!isNeedCheckProduceSeq(productionPartContextList)) + return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("生产线[%s]工位[%s]未设置顺序防错,无需进行顺序防错验证!", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode())); + + //验证是否存在工艺强过码, 存在则保存 并返回强过的加工单 + List workOrderNoList2Jump = doHandleCraftJumpCode(reqBean, productionPartContextList); + if (!CollectionUtils.isEmpty(workOrderNoList2Jump)) + return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog().scanInfo(workOrderNoList2Jump.toString()), stepResult, String.format("加工单%s跳过顺序防错验证成功!", workOrderNoList2Jump.toString())); + + //验证是否已经全部通过 + if (!isExistNeedCheckProduceSeq(productionPartContextList)) return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, "加工单均已通过顺序防错验证!"); + + //顺序防错验证处理 + doHandleProduceSeqCheck(reqBean, resultBean, stepResult, productionProcessContext, productionProcessContext.getWorkCenter(), productionPartContextList); + + return stepResult; + + } + + //验证是否存在加工单 + private Boolean checkIsExistWorkOrder(List productionPartContextList) { + + if (CollectionUtils.isEmpty(productionPartContextList)) return false; + + Optional optional = productionPartContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getWorkOrderNo()))).findFirst(); + + return (null == optional || !optional.isPresent()) ? false : true; + + } + + //验证工位是否设置需要前道防错 + private Boolean isNeedCheckProduceSeq(List productionPartContextList) { + Optional optional = productionPartContextList.stream().filter(o -> (null != o && + o.getIsFinishCode().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0 && o.getIsCheckSeq().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0)).findFirst(); + return (null == optional || !optional.isPresent()) ? false : true; + } + + //验证是否已经全部通过 + private Boolean isExistNeedCheckProduceSeq(List productionPartContextList) { + Optional optional = productionPartContextList.stream().filter(o -> (null != o && + o.getIsFinishCode().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0 && o.getCheckSeqResult().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) != 0)).findFirst(); + return (null == optional || !optional.isPresent()) ? false : true; + } + + //验证是否存在工艺强过码, 存在则保存 并返回强过的加工单 + private List doHandleCraftJumpCode(StationRequestBean reqBean, List productionPartContextList) { + + List workOrderNoList2Jump = null; + + for (MesProductionPartContext productionPartContext : productionPartContextList) { + + if (null == productionPartContext || productionPartContext.getCheckSeqResult().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) != 0 || StringUtils.isEmpty(productionPartContext.getCraftJumpCode())) continue; + + if (CollectionUtils.isEmpty(workOrderNoList2Jump)) workOrderNoList2Jump = new ArrayList<>(); + + workOrderNoList2Jump.add(productionPartContext.getWorkOrderNo()); + + productionPartContext.checkSeqResult(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); + + } + + //保存上下文产出零件信息 + if (!CollectionUtils.isEmpty(workOrderNoList2Jump)) productionDispatchContextStepService.saveProductionPartContext(reqBean, productionPartContextList); + + return workOrderNoList2Jump; + + } + + //顺序防错验证处理 + private void doHandleProduceSeqCheck(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesWorkCenter workCenter, List productionPartContextList) { + + List workOrderNoList = new ArrayList<>(); + + for (MesProductionPartContext productionPartContext : productionPartContextList) { + + if (null == productionPartContext || StringUtils.isEmpty(productionPartContext.getWorkOrderNo()) || productionPartContext.getCheckSeqResult().compareTo(MesPcnExtConstWords.ZERO) != 0) continue; + + //顺序防错验证 + Boolean result = doProduceSeqCheck(reqBean, stepResult, productionProcessContext, workCenter, productionPartContext); + + if (!result) productionPartContext.setCheckSeqResult(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + else productionPartContext.setCheckSeqResult(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); + + workOrderNoList.add(productionPartContext.getWorkOrderNo()); + + } + + //保存上下文产出零件信息 + productionDispatchContextStepService.saveProductionPartContext(reqBean, productionPartContextList); + + if (stepResult.isCompleted()) this.sendMessage(reqBean, resultBean.writeDbLog().scanInfo(workOrderNoList.toString()), String.format("加工单%s顺序防错验证成功!", workOrderNoList.toString()), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); + else this.sendMessage(reqBean, resultBean.writeDbLog().scanInfo(workOrderNoList.toString()), stepResult.getMsg(), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + + } + + //顺序防错验证 + private Boolean doProduceSeqCheck(StationRequestBean reqBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesWorkCenter workCenter, MesProductionPartContext productionPartContext) { + + //排序 + if (workCenter.getCenterType().compareTo(MesExtEnumUtil.WORK_CENTER_TYPE.SORT.getValue()) == 0) return doProduceSeqCheckSort(reqBean, stepResult, productionProcessContext, productionPartContext); + + //非排序 + return doProduceSeqCheckNosort(reqBean, stepResult, productionProcessContext, productionPartContext); + + } + + //前道工艺防错验证 【排序】 + private Boolean doProduceSeqCheckSort(StationRequestBean reqBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesProductionPartContext productionPartContext) { + + String message = StringUtils.isEmpty(stepResult.getMsg()) ? MesPcnExtConstWords.EMPTY : stepResult.getMsg() + MesPcnExtConstWords.SEMICOLON; + + //根据生产工单顺序号,生产线代码查询上一个生产工单信息 + MesWorkOrder workOrder = workOrderExtService.getWorkOrder(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), productionPartContext.getProduceSeq()); + + if (null == workOrder) return true; + + if (workOrder.getWorkOrderStatus().compareTo(MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()) < 0) + return stepResult.isCompleted(false).msg(String.format("%s加工单[%s]生产顺序号[%s]顺序防错验证失败,前一个加工单[%s]生产顺序号[%s]工单状态[%s]", + message, productionPartContext.getWorkOrderNo(), productionPartContext.getProduceSeq(), workOrder.getWorkOrderNo(), workOrder.getProduceSeq(), MesExtEnumUtil.ORDER_STATUS.valueOfDescription(workOrder.getWorkOrderStatus()))).isCompleted(); + + if (workOrder.getWorkOrderStatus().compareTo(MesExtEnumUtil.ORDER_STATUS.CLOSE.getValue()) >= 0) return true; + + //根据生产工单,生产线,工位查询工位队列信息 + List queueOrderList = produceSnExtService.getQueueOrderList(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), workOrder.getWorkOrderNo()); + Optional optional = CollectionUtils.isEmpty(queueOrderList) ? null : queueOrderList.stream().filter(o -> (null != o && o.getStatus().compareTo(MesExtEnumUtil.QUEUE_ORDER_STATUS.CREATE.getValue()) == 0)).findFirst(); + if (null == optional || !optional.isPresent()) return true; + + //根据未完成零件条码获取生产工单装配件清单 + List productSnList = queueOrderList.stream().filter(o -> (null != o && o.getStatus().compareTo(MesExtEnumUtil.QUEUE_ORDER_STATUS.CREATE.getValue()) == 0)).map(MesQueueOrder::getProductSn).collect(Collectors.toList()); + List workOrderAssemblyList = assemblyExtService.getWorkOrderAssemblyList(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), workOrder.getWorkOrderNo(), productSnList); + Map> productSnMap = CollectionUtils.isEmpty(workOrderAssemblyList) ? null : workOrderAssemblyList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesWorkOrderAssembly::getProductSn)); + if (CollectionUtils.isEmpty(productSnMap))return true; + + return stepResult.isCompleted(false).msg(String.format("%s加工单[%s]生产顺序号[%s]顺序防错验证失败,前一个加工单[%s]生产顺序号[%s]在当前工位[%s]存在未完成队列条码%s", + message, productionPartContext.getWorkOrderNo(), productionPartContext.getProduceSeq(), workOrder.getWorkOrderNo(), workOrder.getProduceSeq(), reqBean.getWorkCellCode(), productSnMap.keySet().toString())).isCompleted(); + + } + + //前道工艺防错验证 【非排序】 + private Boolean doProduceSeqCheckNosort(StationRequestBean reqBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesProductionPartContext productionPartContext) { + + String message = StringUtils.isEmpty(stepResult.getMsg()) ? MesPcnExtConstWords.EMPTY : stepResult.getMsg() + MesPcnExtConstWords.SEMICOLON; + + //根据生产工单顺序号,生产线代码查询上一个生产工单信息 + MesWorkOrder workOrder = workOrderExtService.getWorkOrder(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), productionPartContext.getProduceSeq()); + + if (null == workOrder) return true; + + if (workOrder.getWorkOrderStatus().compareTo(MesExtEnumUtil.ORDER_STATUS.CLOSE.getValue()) >= 0) return true; + + return stepResult.isCompleted(false).msg(String.format("%s加工单[%s]生产顺序号[%s]顺序防错验证失败,前一个加工单[%s]生产顺序号[%s]工单状态[%s]", + message, productionPartContext.getWorkOrderNo(), productionPartContext.getProduceSeq(), workOrder.getWorkOrderNo(), workOrder.getProduceSeq(), MesExtEnumUtil.ORDER_STATUS.valueOfDescription(workOrder.getWorkOrderStatus()))).isCompleted(); + + } + +} diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPartContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPartContext.java index 1ef8ef7..76313c5 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPartContext.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionPartContext.java @@ -64,6 +64,9 @@ public class MesProductionPartContext implements Serializable { @ApiParam("信息来源") private Integer messageSource; + @ApiParam("生产序号") + private Long produceSeq; + @ApiParam("客户订单号【用于发送设备加工参数】") private String custOrderNo; 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 a979fc8..7caee13 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 @@ -147,6 +147,8 @@ public class MesPcnExtConstWords { public static final String MOULD_RECORD_ID = "mouldRecordId"; // 工步代码 public static final String STEP_CODE = "stepCode"; + // 生产顺序号 + public static final String PRODUCE_SEQ = "produceSeq"; // 时间格式 public static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss"; @@ -231,6 +233,8 @@ public class MesPcnExtConstWords { public static final String NEXT_TRIGGER_EVENT_ASSEMBLY = "ASSEMBLY"; // 自定义触发事件: 主条码 public static final String NEXT_TRIGGER_EVENT_PRODUCT_SN = "PRODUCT_SN"; + // 自定义触发事件: 工单 + public static final String NEXT_TRIGGER_EVENT_ORDER = "ORDER"; // 工序完成 public static final String PROCESS_COMPLETE = "processComplete"; From ebbb00950aba2803fa1ef378815a0014457f35e0 Mon Sep 17 00:00:00 2001 From: jun Date: Tue, 9 Jul 2024 09:44:24 +0800 Subject: [PATCH 3/5] =?UTF-8?q?41819=20=E7=82=B9=E6=A3=80=E4=B8=BB?= =?UTF-8?q?=E6=95=B0=E6=8D=AE-=E6=96=B0=E5=A2=9E&=E7=BC=96=E8=BE=91-?= =?UTF-8?q?=E7=82=B9=E6=A3=80=E8=A7=A6=E5=8F=91=E6=96=B9=E5=BC=8F=EF=BC=9A?= =?UTF-8?q?=E5=88=A0=E9=99=A4=20=E8=AE=BE=E5=A4=87=E8=A7=A6=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../apiservice/controller/busi/spot/MesSpotCheckOrderController.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/controller/busi/spot/MesSpotCheckOrderController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/spot/MesSpotCheckOrderController.java index e64ea76..3a0875d 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/spot/MesSpotCheckOrderController.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/spot/MesSpotCheckOrderController.java @@ -30,7 +30,7 @@ public class MesSpotCheckOrderController { @GetMapping("/find-equipment-spot") @ApiOperation(value = "查询设备点检") - public ResultBean queryEquipmentSpotCheckMap(MesEquipmentSpotCheck spotCheckOrder) { + public ResultBean findEquipmentSpotCheck(MesEquipmentSpotCheck spotCheckOrder) { try { spotCheckOrder.setOrganizeCode(AuthUtil.getOrganizeCode()); return ResultBean.success("查询成功").setResultList(spotCheckOrderService.findEquipmentSpotCheck(spotCheckOrder)); From ed557c79abc113be5aedfdd2d105e3b37973941a Mon Sep 17 00:00:00 2001 From: jun Date: Tue, 9 Jul 2024 11:50:23 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E7=82=B9=E6=A3=80=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/pcn/api/base/IMesEquipmentExtService.java | 8 +-- .../serviceimpl/base/MesEquipmentExtService.java | 8 +++ .../serviceimpl/busi/MesSpotCheckOrderService.java | 65 ++++++++++++---------- 3 files changed, 49 insertions(+), 32 deletions(-) diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesEquipmentExtService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesEquipmentExtService.java index d9f2f08..e3556da 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesEquipmentExtService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/base/IMesEquipmentExtService.java @@ -1,10 +1,7 @@ package cn.estsh.i3plus.ext.mes.pcn.api.base; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext; -import cn.estsh.i3plus.pojo.mes.bean.MesCavityGroupDetailCfg; -import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentChannel; -import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable; -import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg; +import cn.estsh.i3plus.pojo.mes.bean.*; import io.swagger.annotations.ApiOperation; import java.util.List; @@ -24,4 +21,7 @@ public interface IMesEquipmentExtService { List getEquipmentChannelList(String organizeCode, String equipmentCode); List getMesCavityGroupDetailCfgList(String organizeCode, String equipmentCode); + + @ApiOperation(value = "根据设备代码查询生产设备信息") + MesEquipment getMesEquipment(String organizeCode, String equipmentCode); } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesEquipmentExtService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesEquipmentExtService.java index f4deedf..d6e0f42 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesEquipmentExtService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/base/MesEquipmentExtService.java @@ -98,4 +98,12 @@ public class MesEquipmentExtService implements IMesEquipmentExtService { List mesCavityGroupDetailCfgs = mesCavityGroupDetailCfgRepository.findByHqlWhere(packBean); return mesCavityGroupDetailCfgs; } + + @Override + public MesEquipment getMesEquipment(String organizeCode, String equipmentCode) { + if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(equipmentCode)) return null; + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(equipmentCode, MesPcnExtConstWords.EQUIPMENT_CODE, packBean); + return equipmentRepository.getByProperty(packBean); + } } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesSpotCheckOrderService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesSpotCheckOrderService.java index 15fcb1b..aba549a 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesSpotCheckOrderService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesSpotCheckOrderService.java @@ -1,5 +1,7 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi; +import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesEquipmentExtService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipmentLogExtService; import cn.estsh.i3plus.ext.mes.pcn.api.busi.spot.IMesSpotCheckOrderService; import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant; import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesEquipmentSpotCheckModel; @@ -73,6 +75,12 @@ public class MesSpotCheckOrderService implements IMesSpotCheckOrderService { @Autowired private ICoreUtilCloud sysOrderNoRuleCloud; + @Autowired + private IMesEquipmentLogExtService mesEquipmentLogExtService; + + @Autowired + private IMesEquipmentExtService mesEquipmentExtService; + @Override public ListPager querySpotCheckOrder(MesSpotCheckOrder spotCheckOrder, Pager pager) { @@ -171,35 +179,36 @@ public class MesSpotCheckOrderService implements IMesSpotCheckOrderService { throw new ImppBusiException(String.format("剩余物料号【%s】对应的条码未扫描,请扫描完成后再完成质检", partNoList)); } } - - //获取设定值设备变量ID - List setEquipVariableIdList = - model.getOrderResultList().stream().filter(k -> k.getSpotCheckItemType() == MesExtEnumUtil.SPOT_CHECK_ITEM_TYPE.AUTO.getValue()).map(k -> k.getSetEquipVariableId()).collect(Collectors.toList()); - - //获取实际值设备变量ID - List realEquipVariableIdList = - model.getOrderResultList().stream().filter(k -> k.getSpotCheckItemType() == MesExtEnumUtil.SPOT_CHECK_ITEM_TYPE.AUTO.getValue()).map(k -> k.getSetEquipVariableId()).collect(Collectors.toList()); - - //获取设定值设备数据 - List setEquipmentLogList = new ArrayList<>(); - for (List tmp : ListUtils.partition(setEquipVariableIdList, MesCommonConstant.MAX_PAGER_SIZE)) { - DdlPackBean packBean = DdlPackBean.getDdlPackBean(org); - DdlPreparedPack.getInPackList(tmp, "equipVariableId", packBean); - DdlPreparedPack.getNumEqualPack(model.getSpotCheckOrder().getEquipId().intValue(), "equipId", packBean); - setEquipmentLogList.addAll(equipmentLogRepository.findByHqlWhere(packBean)); - } - //设定值地址数据Map - Map> setMap = setEquipmentLogList.stream().collect(Collectors.groupingBy(k -> k.getEquipVariableId())); + //根据设备代码获取EQUIP_ID + MesEquipment mesEquipment = mesEquipmentExtService.getMesEquipment(org, model.getSpotCheckOrder().getEquipCode()); + Map> setMap = null; + //实际值地址数据Map + Map> realMap = null; //获取实际值值设备数据 List realEquipmentLogList = new ArrayList<>(); - for (List tmp : ListUtils.partition(realEquipVariableIdList, MesCommonConstant.MAX_PAGER_SIZE)) { - DdlPackBean packBean = DdlPackBean.getDdlPackBean(org); - DdlPreparedPack.getInPackList(tmp, "equipVariableId", packBean); - DdlPreparedPack.getNumEqualPack(model.getSpotCheckOrder().getEquipId().intValue(), "equipId", packBean); - realEquipmentLogList.addAll(equipmentLogRepository.findByHqlWhere(packBean)); + if(!Objects.isNull(mesEquipment) && StringUtils.isEmpty(mesEquipment.getEquipId())){ + //获取设定值设备变量ID + List setEquipVariableIdList = + model.getOrderResultList().stream().filter(k -> k.getSpotCheckItemType() == MesExtEnumUtil.SPOT_CHECK_ITEM_TYPE.AUTO.getValue()).map(MesSpotCheckOrderResult::getSetEquipVariableId).collect(Collectors.toList()); + + //获取实际值设备变量ID + List realEquipVariableIdList = + model.getOrderResultList().stream().filter(k -> k.getSpotCheckItemType() == MesExtEnumUtil.SPOT_CHECK_ITEM_TYPE.AUTO.getValue()).map(MesSpotCheckOrderResult::getSetEquipVariableId).collect(Collectors.toList()); + + //获取设定值设备数据 + List setEquipmentLogList = new ArrayList<>(); + for (List tmp : ListUtils.partition(setEquipVariableIdList, MesCommonConstant.MAX_PAGER_SIZE)) { + setEquipmentLogList.addAll(mesEquipmentLogExtService.getEquipmentLogList(org,mesEquipment.getEquipId(),MesExtEnumUtil.EQUIP_VARIABLE_NEED_NEW_VALUE.TRUE.getValue(),tmp)); + } + //设定值地址数据Map + setMap = setEquipmentLogList.stream().collect(Collectors.groupingBy(MesEquipmentLog::getEquipVariableId)); + + for (List tmp : ListUtils.partition(realEquipVariableIdList, MesCommonConstant.MAX_PAGER_SIZE)) { + realEquipmentLogList.addAll(mesEquipmentLogExtService.getEquipmentLogList(org,mesEquipment.getEquipId(),MesExtEnumUtil.EQUIP_VARIABLE_NEED_NEW_VALUE.TRUE.getValue(),tmp)); + } + //实际值地址数据Map + realMap = realEquipmentLogList.stream().collect(Collectors.groupingBy(MesEquipmentLog::getEquipVariableId)); } - //实际值地址数据Map - Map> realMap = realEquipmentLogList.stream().collect(Collectors.groupingBy(k -> k.getEquipVariableId())); for (MesSpotCheckOrderResult result : model.getOrderResultList()) { @@ -207,7 +216,7 @@ public class MesSpotCheckOrderService implements IMesSpotCheckOrderService { if (result.getSpotCheckItemType() == MesExtEnumUtil.SPOT_CHECK_ITEM_TYPE.AUTO.getValue()) { //获取设定值地址数据 - if (setMap.containsKey(result.getSetEquipVariableId())) { + if (!Objects.isNull(setMap) && setMap.containsKey(result.getSetEquipVariableId())) { String value = setMap.get(result.getSetEquipVariableId()).get(0).getEquipVariableValue(); result.setSpotCheckSetValue(value); result.setSetValueRecordType(MesExtEnumUtil.SPOT_VALUE_RECORD_TYPE.EQUIPMENT_INPUT.getValue()); @@ -217,7 +226,7 @@ public class MesSpotCheckOrderService implements IMesSpotCheckOrderService { // result.setSetValueRecordType(MesExtEnumUtil.SPOT_VALUE_RECORD_TYPE.ARTIFICIAL_INPUT.getValue()); // } //获取实际值地址数据 - if (realMap.containsKey(result.getRealEquipVariableId())) { + if (!Objects.isNull(realMap) && realMap.containsKey(result.getRealEquipVariableId())) { String value = realMap.get(result.getRealEquipVariableId()).get(0).getEquipVariableValue(); result.setSpotCheckRealValue(value); //根据获取的值判断是否是设备自定义参数 或者认为录入参数 From 0227927903aed58fe02dec9a2b1f93cd5546bd39 Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Tue, 9 Jul 2024 14:57:11 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E5=A4=8D=E7=94=A8=E8=A3=85=E9=85=8D?= =?UTF-8?q?=E4=BB=B6=20bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../step/MesAssemblySaveNosortStepService.java | 2 +- .../step/MesAssemblyShowNosortStepService.java | 42 +++++++++------------- .../step/MesProductResultReadStepService.java | 8 +++-- .../step/MesProductSnSaveStepService.java | 1 - .../MesProductionProcessMonitorService.java | 18 ++++++---- .../MesProductionAssemblyNosortContext.java | 4 +-- 6 files changed, 37 insertions(+), 38 deletions(-) diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblySaveNosortStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblySaveNosortStepService.java index ff2c692..508ddaf 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblySaveNosortStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblySaveNosortStepService.java @@ -142,7 +142,7 @@ public class MesAssemblySaveNosortStepService extends BaseStepService { if (!StringUtils.isEmpty(productionAssemblyNosortContext.getProductSnId())) productSnId.add(productionAssemblyNosortContext.getProductSnId()); - if (productionAssemblyNosortContext.getIsRepeat2Cache().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0) + if (productionAssemblyNosortContext.getIsRepeat().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0 && productionAssemblyNosortContext.getIsRepeat2Cache().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0) productionCustomContextStepService.saveRepeatAssemblySn(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), productionAssemblyNosortContext); } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowNosortStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowNosortStepService.java index e3170af..b1c9797 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowNosortStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowNosortStepService.java @@ -91,7 +91,8 @@ public class MesAssemblyShowNosortStepService extends BaseStepService { doHandleProdRuleData(reqBean, resultBean, stepResult, workCenter, productionProcessContext, cellEquipContext, prodRuleContextList, productionPartContextList, productionPsInContextList); //匹配失败需要清除本次扫描/读取信息 - if (!stepResult.isCompleted() && doBusiCheckToDelete(reqBean, productionPartContextList, productionPsInContextList)) return stepResult; + if (!stepResult.isCompleted() && doBusiCheckToDelete(reqBean, stepResult, productionPartContextList, productionPsInContextList)) + return stepResult.nextTriggerEvent(CollectionUtils.isEmpty(productionPsInContextList) ? MesPcnExtConstWords.NEXT_TRIGGER_EVENT_ORDER : (!StringUtils.isEmpty(stepResult.getObj()) ? MesPcnExtConstWords.NEXT_TRIGGER_EVENT_ORDER : MesPcnExtConstWords.NEXT_TRIGGER_EVENT_PRODUCT_SN)); if (prodRuleContextList.size() != initSize) { //保存上下文产品加工规则信息集合 @@ -168,7 +169,7 @@ public class MesAssemblyShowNosortStepService extends BaseStepService { copy(filterList.get(0)).workOrderNo(productionPartContext.getWorkOrderNo()).foreignKey(productionPartContext.foreignKey(foreignKey += 1).getForeignKey()))); } // 默认头道才有超工单 - validSuperWorkOrder(reqBean, productionPartContextList,null,workCenter, stepResult, resultBean); + validSuperWorkOrder(reqBean, productionPartContextList, null, workCenter, stepResult, resultBean); return stepResult; } @@ -206,31 +207,21 @@ public class MesAssemblyShowNosortStepService extends BaseStepService { double complateQty = mesWorkOrder.getCompleteQty() + productionPartContexts.size(); double qty = mesWorkOrder.getQty(); // 如果预完成数量 小于等于工单数量,则直接过 - if (complateQty <= qty) { - continue; - } + if (complateQty <= qty) continue; + // 以下则是超工单逻辑 // 如果产线中没有配置超工单,则直接阻断 if (!Objects.equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(), workCenter.getIsCheckOrderQty())) { productionPartContextList.forEach(o -> o.busiCheckToDelete()); - if (!CollectionUtils.isEmpty(productionPsInContextList)) { - productionPsInContextList.forEach(o -> o.busiCheckToDelete()); - } - return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format( - "请检查工单数量,工单号[%s],工单数量[%s]预完成数量[%s],且未配置超工单", - workOrder, mesWorkOrder.getQty(), complateQty)); + if (!CollectionUtils.isEmpty(productionPsInContextList)) productionPsInContextList.forEach(o -> o.busiCheckToDelete()); + return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult.obj(false), String.format("请检查工单数量,工单号[%s],工单数量[%s]预完成数量[%s],且未配置超工单!", workOrder, mesWorkOrder.getQty(), complateQty)); } // 如果配置了超工单,且比例已经超过了配置的超工单比例,也需要阻断 double rate = (complateQty - qty)/qty; if (rate > workCenter.getOrderRate()) { - if (CollectionUtils.isEmpty(productionPsInContextList)) { - productionPartContextList.forEach(o -> o.busiCheckToDelete()); - } else { - productionPsInContextList.forEach(o -> o.busiCheckToDelete()); - } - return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format( - "请检查工单数量,工单号[%s],工单数量[%s]预完成数量[%s],配置了超工单,但超过了比例[%s]", - workOrder, mesWorkOrder.getQty(), complateQty, workCenter.getOrderRate())); + productionPartContextList.forEach(o -> o.busiCheckToDelete()); + if (!CollectionUtils.isEmpty(productionPsInContextList)) productionPsInContextList.forEach(o -> o.busiCheckToDelete()); + return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult.obj(false), String.format("请检查工单数量,工单号[%s],工单数量[%s]预完成数量[%s],配置了超工单,但超过了比例[%s]!", workOrder, mesWorkOrder.getQty(), complateQty, workCenter.getOrderRate())); } } return stepResult; @@ -484,12 +475,13 @@ public class MesAssemblyShowNosortStepService extends BaseStepService { } //清除本次扫描/读取信息 有进料【只】需要清除进料,否则存在产出零件需要清除产出零件 【只需要清除被标记的数据】 - private Boolean doBusiCheckToDelete(StationRequestBean reqBean, List productionPartContextList, List productionPsInContextList) { - if (!CollectionUtils.isEmpty(productionPsInContextList)) productionDispatchContextStepService.saveProductionPsInContext(reqBean, - productionPsInContextList.stream().filter(o -> (null != o && o.getBusiCheckToDelete().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0)).collect(Collectors.toList())); - else if (!CollectionUtils.isEmpty(productionPartContextList)) { - productionDispatchContextStepService.saveProductionPartContext(reqBean, - productionPartContextList.stream().filter(o -> (null != o && o.getBusiCheckToDelete().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0)).collect(Collectors.toList())); + private Boolean doBusiCheckToDelete(StationRequestBean reqBean, StepResult stepResult, List productionPartContextList, List productionPsInContextList) { + if (!CollectionUtils.isEmpty(productionPsInContextList) && StringUtils.isEmpty(stepResult.getObj())) { + productionDispatchContextStepService.saveProductionPsInContext(reqBean, productionPsInContextList.stream().filter(o -> (null != o && o.getBusiCheckToDelete().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0)).collect(Collectors.toList())); + } else if (!CollectionUtils.isEmpty(productionPartContextList)) { + if (!StringUtils.isEmpty(stepResult.getObj())) productionDispatchContextStepService.deleteProductionPsInContext(reqBean); + productionDispatchContextStepService.deleteProductionPartContext(reqBean); + productionDispatchContextStepService.deleteProdRuleDataContext(reqBean); productionProcessContextStepService.deleteFunctionChooseCavityOrderContext(reqBean); } return true; diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductResultReadStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductResultReadStepService.java index e8571e5..a610f83 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductResultReadStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductResultReadStepService.java @@ -163,8 +163,12 @@ public class MesProductResultReadStepService extends BaseStepService { productionCustomContextStepService.doSendStepContextMessage(reqBean, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.valueOfDescription(entry.getKey()), MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ); //设备加工失败 - if (MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_NOK.getValue().equals(entry.getKey())) - return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(MesExtEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()), stepResult, String.format("%s!", MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_NOK.getDescription())); + if (MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_NOK.getValue().equals(entry.getKey())) { + this.sendMessage(reqBean, resultBean.writeDbLog(MesExtEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()), String.format("%s!", MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_NOK.getDescription()), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + threadSleep(stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); + return stepResult.isCompleted(false); + } + //设备加工成功/零件报废/设备加工可疑 均返回true; 零件报废/设备加工可疑标记错误信息 return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(MesExtEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.READ.getValue()), stepResult.obj(entry.getKey()), true, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCT_OK.getValue().equals(entry.getKey()) ? MesPcnEnumUtil.STATION_DATA_TYPE.TEXT : MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnSaveStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnSaveStepService.java index 90392a1..dc09e2f 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnSaveStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnSaveStepService.java @@ -114,7 +114,6 @@ public class MesProductSnSaveStepService extends BaseStepService { produceSn.setCraftCode(productionProcessContext.getCraftCode()); //TODO 获取下个工艺代码 //produceSn.setNextCraftCode(); - //TODO 重新覆盖打印模版 produceSn.setSnStatus(MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue()); produceSn.setQcStatus(!StringUtils.isEmpty(productResult) ? Integer.valueOf(productResult) : MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionProcessMonitorService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionProcessMonitorService.java index ccbd519..c6e6f74 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionProcessMonitorService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/context/MesProductionProcessMonitorService.java @@ -29,30 +29,35 @@ public class MesProductionProcessMonitorService extends BaseProcessMonitorServic @Autowired private IFsmCommonService fsmCommonService; + //工序开始 @Override public Boolean doProcessStart(StationRequestBean requestBean) { //保存上下文工位扫描监控信息 - return productionProcessContextStepService.saveScanMonitorContext(requestBean); + productionProcessContextStepService.saveScanMonitorContext(requestBean); + //清除工步客制化区域数据【装配件清单】 + this.sendMessage(requestBean, new StationResultBean().busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.STEP_CUSTOM_CONTENT.getValue()).dataType(MesPcnEnumUtil.STATION_DATA_TYPE.TABLES.getValue())); + return true; } + //工序结束 @Override public Boolean doProcessComplete(StationRequestBean requestBean) { - //执行跳过工序二开实现逻辑 - doJumpProcess(requestBean); + //清除上下文中的所有业务数据 + productionDispatchContextStepService.doFlushProductionDispatchContext(requestBean); //发送工序完成音 this.sendMessage(requestBean, new StationResultBean().resultObj(MesPcnExtConstWords.PROCESS_COMPLETE).busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.CUSTOM_COMPONENT.getValue()).dataType(MesPcnEnumUtil.STATION_DATA_TYPE.SOUND.getValue())); return true; } + //重置工序 @Override public Boolean doJumpProcess(StationRequestBean requestBean) { //清除上下文中的所有业务数据 productionDispatchContextStepService.doFlushProductionDispatchContext(requestBean); - //清除工步客制化区域数据【装配件清单】 - this.sendMessage(requestBean, new StationResultBean().busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.STEP_CUSTOM_CONTENT.getValue()).dataType(MesPcnEnumUtil.STATION_DATA_TYPE.TABLES.getValue())); return true; } + //客户端下线 @Override public Boolean doOffLine(StationRequestBean requestBean) { //删除当前状态点 @@ -64,14 +69,13 @@ public class MesProductionProcessMonitorService extends BaseProcessMonitorServic return true; } + //工位流程重置 【父类已经调用: 删除当前状态点; 清除工位工序流程; TASK_COMPLETE】 @Override public Boolean fsmReset(StationRequestBean requestBean) { //清除上下文中的所有业务数据 productionDispatchContextStepService.doFlushProductionDispatchContext(requestBean); //清除上下文中的所有基础数据 productionProcessContextStepService.doFlushProductionProcessContext(requestBean); - //清除工步客制化区域数据【装配件清单】 - this.sendMessage(requestBean, new StationResultBean().busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.STEP_CUSTOM_CONTENT.getValue()).dataType(MesPcnEnumUtil.STATION_DATA_TYPE.TABLES.getValue())); return true; } diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionAssemblyNosortContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionAssemblyNosortContext.java index 683e7ff..0cd466f 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionAssemblyNosortContext.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProductionAssemblyNosortContext.java @@ -26,7 +26,7 @@ public class MesProductionAssemblyNosortContext extends MesProductionAssemblyCon private Integer isRepeat; @ApiParam(value = "是否可复用条码是否写入上下文进行复用") - private Integer isRepeat2Cache = CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(); + private Integer isRepeat2Cache = CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(); @ApiParam(value = "是否忽略回车") private Integer isIgnoreEntry; @@ -60,7 +60,7 @@ public class MesProductionAssemblyNosortContext extends MesProductionAssemblyCon if (!StringUtils.isEmpty(assemblySn)) { this.assemblySn = assemblySn; - this.isRepeat2Cache = CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(); + this.isRepeat2Cache = CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(); this.assemblyStatus = MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_10.getValue(); }