From 9b761d52f7f6c7cf744d648ab998f3923e7ce340 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: Sat, 8 Jun 2024 19:43:01 +0800 Subject: [PATCH 01/14] =?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 --- .../IMesProductionDispatchContextStepService.java | 24 +++- .../busi/MesProdShiftRecordController.java | 29 +++++ .../station/MesProductionNoSortModuleService.java | 96 +++++++-------- .../step/MesMaterialReadStepService.java | 132 +++++++++++++++++++++ .../step/MesProductSnGenerateStepService.java | 6 +- .../MesProductionReocrdGenerateStepService.java | 5 + .../MesProductionDispatchContextStepService.java | 75 ++++++++++-- .../mes/pcn/pojo/context/MesProdShiftContext.java | 33 ++++++ .../ext/mes/pcn/pojo/util/MesPcnExtConstWords.java | 11 +- 9 files changed, 344 insertions(+), 67 deletions(-) create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesMaterialReadStepService.java create mode 100644 modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProdShiftContext.java 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 4fda16f..1c4871d 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 @@ -3,6 +3,7 @@ package cn.estsh.i3plus.ext.mes.pcn.api.busi; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.*; import cn.estsh.i3plus.pojo.mes.bean.MesPart; import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; +import cn.estsh.i3plus.pojo.mes.bean.MesRawPartCharging; import cn.estsh.i3plus.pojo.mes.model.StationKvBean; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; @@ -173,16 +174,16 @@ public interface IMesProductionDispatchContextStepService { void deleteProdRuleDataContext(StationRequestBean reqBean); @ApiOperation(value = "获取上下文班次班组信息") - List getProdShiftDataContext(StationRequestBean reqBean, String workCenterCode); + List getProdShiftDataContext(String orgainzeCode, String workCenterCode); @ApiOperation(value = "验证上下文班次班组信息是否存在") - Boolean checkProdShiftDataIsExistContext(StationRequestBean reqBean, String workCenterCode); + Boolean checkProdShiftDataIsExistContext(String orgainzeCode, String workCenterCode); @ApiOperation(value = "保存上下文班次班组信息", notes = "[JSON]List") - Boolean saveProdShiftDataContext(StationRequestBean reqBean, String workCenterCode, List prodShiftDatList); + Boolean saveProdShiftDataContext(String orgainzeCode, String workCenterCode, List prodShiftDatList); @ApiOperation(value = "删除上下文班次班组信息") - void deleteProdShiftDataContext(StationRequestBean reqBean, String workCenterCode); + void deleteProdShiftDataContext(String orgainzeCode, String workCenterCode); @ApiOperation(value = "获取上下文工位加工数统计信息") List getProductionStatisticsContext(StationRequestBean reqBean); @@ -190,9 +191,14 @@ public interface IMesProductionDispatchContextStepService { @ApiOperation(value = "保存上下文工位加工数统计信息", notes = "[JSON]List") Boolean saveProductionStatisticsContext(StationRequestBean reqBean, List prodShiftDatList); + @ApiOperation(value = "新增上下文工位加工数统计信息") + Boolean addProductionStatisticsContext(StationRequestBean reqBean, int count); + @ApiOperation(value = "删除上下文工位加工数统计信息") void deleteProductionStatisticsContext(StationRequestBean reqBean); + MesProdShiftContext getMesProdShiftKvBean(String orgainzeCode, String workCenterCode); + @@ -220,4 +226,14 @@ public interface IMesProductionDispatchContextStepService { @ApiOperation(value = "删除上下文产出条码数据信息集合") void deleteOutProduceSnDataContext(StationRequestBean reqBean); + + @ApiOperation(value = "获取料桶原材料数据集合") + List getMesRawPartChargingDataContext(StationRequestBean reqBean); + + @ApiOperation(value = "保存料桶原材料数据集合", notes = "[JSON]List") + Boolean saveMesRawPartChargingDataContext(StationRequestBean reqBean, List mesRawPartChargingList); + + @ApiOperation(value = "删除料桶原材料数据集合") + void deleteMesRawPartChargingDataContext(StationRequestBean reqBean); + } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesProdShiftRecordController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesProdShiftRecordController.java index 0abfa76..0551d34 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesProdShiftRecordController.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesProdShiftRecordController.java @@ -1,20 +1,29 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.controller.busi; import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesProdShiftRecordService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService; import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.mes.pcn.util.StationKvBeanUtil; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; import cn.estsh.i3plus.pojo.mes.bean.MesProdShiftRecord; +import cn.estsh.i3plus.pojo.mes.model.StationKvBean; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.exception.ImppBusiException; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import cn.estsh.impp.framework.boot.util.ResultBean; import cn.estsh.impp.framework.boot.util.ValidatorBean; +import com.google.common.base.Objects; import io.swagger.annotations.ApiOperation; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import java.util.ArrayList; +import java.util.List; + /** * @Description: 开关班记录 * @Author: gsz @@ -27,6 +36,8 @@ public class MesProdShiftRecordController { @Autowired private IMesProdShiftRecordService mesProdShiftRecordService; + @Autowired + private IMesProductionDispatchContextStepService mesProductionDispatchContextStepService; @GetMapping("/query-pager") @ApiOperation(value = "查询开关班记录") public ResultBean queryMesProdShiftRecordByPager(MesProdShiftRecord mesProdShiftRecord, Pager pager) { @@ -54,6 +65,11 @@ public class MesProdShiftRecordController { mesProdShiftRecordService.insertMesProdShiftRecord(item, AuthUtil.getOrganizeCode()); + + List getProdShiftData = getProdShiftData(item); + + mesProductionDispatchContextStepService.saveProdShiftDataContext(item.getOrganizeCode(), item.getWorkCenterCode(), getProdShiftData); + return ResultBean.success("保存开关班记录成功"); } catch (ImppBusiException imppException) { return ResultBean.fail(imppException); @@ -73,6 +89,11 @@ public class MesProdShiftRecordController { ValidatorBean.checkNotNull(item.getShiftGroup(), "shiftGroup不能为空"); mesProdShiftRecordService.saveMesProdShiftRecord(item, AuthUtil.getOrganizeCode()); + + if (Objects.equal(MesExtEnumUtil.WORK_STATUS.END.getValue(), item.getWorkStatus())) { + mesProductionDispatchContextStepService.deleteProdShiftDataContext(item.getOrganizeCode(), item.getWorkCenterCode()); + } + return ResultBean.success("保存开关班记录成功"); } catch (ImppBusiException imppException) { return ResultBean.fail(imppException); @@ -95,4 +116,12 @@ public class MesProdShiftRecordController { return ResultBean.fail(e); } } + + //封装展示组件班组班次内容 + private List getProdShiftData(MesProdShiftRecord record) { + + return StationKvBeanUtil.addStationKvBeanList(new ArrayList<>(), + new StationKvBean("shiftGroup", "班组", record.getShiftGroup()), + new StationKvBean("shiftCode", "班次", record.getShiftCode())); + } } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionNoSortModuleService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionNoSortModuleService.java index 4e89ece..36521c5 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionNoSortModuleService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionNoSortModuleService.java @@ -2,22 +2,32 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.station; 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.MesCellEquipContext; +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.BaseModuleService; +import cn.estsh.i3plus.mes.pcn.util.StationKvBeanUtil; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; import cn.estsh.i3plus.pojo.mes.bean.MesStateMachineStatus; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell; import cn.estsh.i3plus.pojo.mes.model.AttrBean; import cn.estsh.i3plus.pojo.mes.model.StationKvBean; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.model.StationResultBean; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import cn.estsh.i3plus.pojo.mes.util.PojoAttrUtil; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import com.google.common.base.Objects; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; /** * @Description : 展示组件:非排序生产 @@ -33,21 +43,47 @@ public class MesProductionNoSortModuleService extends BaseModuleService { @Autowired private IMesProductionDispatchContextStepService mesProductionDispatchContextStepService; + + @Override public void init(StationRequestBean reqBean) { + // 获取工单信息 List> moduleContentContext = mesProductionDispatchContextStepService.getModuleContentContext(reqBean); - StationResultBean resultBean = getStationResultBean(reqBean, moduleContentContext); - StationResultBean resultBean1 = getStationResultBean1(reqBean); + + //获取上下文信息 + MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getEquipmentVariableList(reqBean, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getValue()); + MesWorkCell mesWorkCell = productionProcessContext.getWorkCell(); + + // 获取班次信息 + List prodShiftDataContext = mesProductionDispatchContextStepService.getProdShiftDataContext(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode()); + if (CollectionUtils.isEmpty(prodShiftDataContext)) { + this.sendMessage(reqBean, new StationResultBean().writeDbLog(), "请先开班", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); + throw ImppExceptionBuilder.newInstance().setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode()).setErrorCode("NO_SHOW_MSG").build(); + } + // 发送班次班组和工单 + StationResultBean resultBean = getStationResultBean(reqBean, moduleContentContext, prodShiftDataContext); this.sendMessage(reqBean, resultBean); + + // 整合班次加工数量 + List shiftCountContext = new ArrayList<>(); + if (mesWorkCell.getIsShowMsg() != null && Objects.equal(MesExtEnumUtil.WORK_FILE_TYPE.HISTOGRAM.getValue(),mesWorkCell.getIsShowMsg())) { + List productionStatisticsContext = mesProductionDispatchContextStepService.getProductionStatisticsContext(reqBean); + + StationResultBean shiftCountBean = getStationResultBean(reqBean, productionStatisticsContext); + this.sendMessage(reqBean, shiftCountBean); + } + + + } - private StationResultBean getStationResultBean(StationRequestBean reqBean, List> moduleContentContext) { + private StationResultBean getStationResultBean(StationRequestBean reqBean, List> moduleContentContext, List prodShiftDataContext) { StationResultBean resultBean = new StationResultBean(); resultBean.setBusiType(MesPcnEnumUtil.STATION_BUSI_TYPE.MODULE_CONTENT.getValue()); resultBean.setDataType(MesPcnEnumUtil.STATION_DATA_TYPE.CUSTOM.getValue()); resultBean.setCustomPageName(MesPcnExtConstWords.CUSTOM_PAGE_NAME_DEFAULT); resultBean.setSpecialDisplayData(getStepColIndent(reqBean)); - +/* List stationKvBeans3 = new ArrayList<>(); StationKvBean stationKvBean7 = new StationKvBean(); @@ -60,14 +96,14 @@ public class MesProductionNoSortModuleService extends BaseModuleService { stationKvBean8.setKey("shiftGroup"); stationKvBean8.setName("班组"); stationKvBean8.setValue("注塑2班"); - stationKvBeans3.add(stationKvBean8); + stationKvBeans3.add(stationKvBean8);*/ - resultBean.setResultObj(stationKvBeans3); + resultBean.setResultObj(prodShiftDataContext); resultBean.setResultList(moduleContentContext); return resultBean; } - private StationResultBean getStationResultBean1(StationRequestBean reqBean) { + private StationResultBean getStationResultBean(StationRequestBean reqBean, List productionStatisticsContext) { StationResultBean resultBean = new StationResultBean(); resultBean.setBusiType(MesPcnEnumUtil.STATION_BUSI_TYPE.MODULE_CUSTOM_CONTENT.getValue()); resultBean.setDataType(MesPcnEnumUtil.STATION_DATA_TYPE.ECHART.getValue()); @@ -75,51 +111,7 @@ public class MesProductionNoSortModuleService extends BaseModuleService { resultBean.setDataAttrList(packDataAttrList()); resultBean.setSpecialDisplayData(getStepColIndent(reqBean)); - List> stationKvBeansList = new ArrayList<>(); - List stationKvBeans = new ArrayList<>(); - StationKvBean stationKvBean = new StationKvBean(); - stationKvBean.setKey("orderNo"); - stationKvBean.setName("工单号"); - stationKvBean.setValue("11111"); - stationKvBeans.add(stationKvBean); - - StationKvBean stationKvBean1 = new StationKvBean(); - stationKvBean1.setKey("partNo"); - stationKvBean1.setName("零件号"); - stationKvBean1.setValue("111"); - stationKvBeans.add(stationKvBean1); - - StationKvBean stationKvBean2 = new StationKvBean(); - stationKvBean2.setKey("count"); - stationKvBean2.setName("单数"); - stationKvBean2.setValue("1111"); - stationKvBeans.add(stationKvBean2); - - stationKvBeansList.add(stationKvBeans); - List stationKvBeans1 = new ArrayList<>(); - StationKvBean stationKvBean4 = new StationKvBean(); - stationKvBean4.setKey("orderNo"); - stationKvBean4.setName("工单号"); - stationKvBean4.setValue("11111"); - stationKvBeans1.add(stationKvBean4); - - StationKvBean stationKvBean5 = new StationKvBean(); - stationKvBean5.setKey("partNo"); - stationKvBean5.setName("零件号"); - stationKvBean5.setValue("111"); - stationKvBeans1.add(stationKvBean5); - - StationKvBean stationKvBean6 = new StationKvBean(); - stationKvBean6.setKey("count"); - stationKvBean6.setName("单数"); - stationKvBean6.setValue("1111"); - stationKvBeans1.add(stationKvBean6); - stationKvBeansList.add(stationKvBeans1); - - - - //resultBean.setResultObj(stationKvBeans3); - resultBean.setResultList(stationKvBeansList); + resultBean.setResultList(productionStatisticsContext); return resultBean; } private List packDataAttrList() { diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesMaterialReadStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesMaterialReadStepService.java new file mode 100644 index 0000000..f71167b --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesMaterialReadStepService.java @@ -0,0 +1,132 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipVariableRwExtService; +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.MesCellEquipContext; +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.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.*; +import cn.estsh.i3plus.pojo.mes.model.MesEquipVariableRwResult; +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.repository.MesRawPackageDetailRepository; +import cn.estsh.i3plus.pojo.mes.repository.MesRawPackagePartRepository; +import cn.estsh.i3plus.pojo.mes.repository.MesRawPartChargingRepository; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import com.alibaba.fastjson.JSONObject; +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; + +/** + * @Description : 从料桶中获取原材料 + * @Author : wangjie + **/ +@Slf4j +@Service("mesMaterialReadStepService") +public class MesMaterialReadStepService extends BaseStepService { + + @Autowired + private IMesProductionProcessContextStepService productionProcessContextStepService; + + @Autowired + private IMesProductionDispatchContextStepService productionDispatchContextStepService; + + + @Autowired + private MesRawPackageDetailRepository mesRawPackageDeatilRepository; + + @Autowired + private MesRawPartChargingRepository mesRawPartChargingRepository; + + @Override + public StepResult execute(StationRequestBean reqBean) { + + StationResultBean resultBean = new StationResultBean(); + + StepResult stepResult = StepResult.getSuccessComplete(); + + //获取工步参数 + Optional> stepParamMap = getStepParams(reqBean); + //获取上下文信息 + MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean, stepParamMap); + + String equipmentCode = productionProcessContext.getCurCellEquip().getEquipmentCode(); + + // 根据设备id获取加料日志 + + DdlPackBean packBean = DdlPackBean.getDdlPackBean(); + DdlPreparedPack.getStringEqualPack(equipmentCode, "equipCode", packBean); + MesRawPackageDetail mesRawPackageDetail = mesRawPackageDeatilRepository.getByProperty(packBean); + if (mesRawPackageDetail == null) { + foundExThrow(reqBean, "原材料容器信息未配置"); + } + /** + * 查询原材料信息 + */ + List list = getListByParentDetailId(mesRawPackageDetail.getId()); + /** + * 查询料桶信息 todo + */ + /*MesRawPartCharging mesRawPartCharging = getRawPackByDetailId(mesRawPackageDetail.getId()); + if (mesRawPackageDetail == null) { + foundExThrow(reqBean, "料桶信息不存在"); + } + // + list.add(mesRawPartCharging);*/ + productionDispatchContextStepService.saveMesRawPartChargingDataContext(reqBean, list); + + return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "读取料桶原材料成功"); + + } + + /** + * 递归查询子料桶,直到查到最终的物料 + * @param id + * @return + */ + private List getListByParentDetailId(Long id){ + List list = new ArrayList<>(); + + DdlPackBean packBean = DdlPackBean.getDdlPackBean(); + DdlPreparedPack.getNumEqualPack(id, "parentPackageDetailId", packBean); + + List parentList = mesRawPartChargingRepository.findByHqlWhere(packBean); + if (CollectionUtils.isEmpty(parentList)) { + return null; + } + for (MesRawPartCharging mesRawPartCharging : parentList) { + List chilrenList = getListByParentDetailId(mesRawPartCharging.getPackageDetailId()); + if (CollectionUtils.isEmpty(chilrenList)) { + list.addAll(parentList); + } + } + return list; + } + + /** + * 递归查询子料桶,直到查到最终的物料 + * @param id + * @return + */ + private MesRawPartCharging getRawPackByDetailId(Long id){ + + DdlPackBean packBean = DdlPackBean.getDdlPackBean(); + DdlPreparedPack.getNumEqualPack(id, "packageDetailId", packBean); + + return mesRawPartChargingRepository.getByProperty(packBean); + } +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnGenerateStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnGenerateStepService.java index 7f2e59c..148ffb0 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnGenerateStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnGenerateStepService.java @@ -60,7 +60,11 @@ public class MesProductSnGenerateStepService extends BaseStepService { @Autowired private IMesProductionDispatchContextStepService mesProductionDispatchContextStepService; - + /**todo 有产成无进料场景 + * todo 根据装配件条码没有找到加工规则,如果需要跳过装配件绑定,直接生成条码,就需要不看加工规则,直接根据产成零件生成条码,当前设计方式就需要变更。 + * @param reqBean + * @return + */ @Override public StepResult execute(StationRequestBean reqBean) { diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionReocrdGenerateStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionReocrdGenerateStepService.java index a54df09..996cb9a 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionReocrdGenerateStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionReocrdGenerateStepService.java @@ -3,6 +3,7 @@ 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.MesEquipVariableCollectContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProdShiftContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext; import cn.estsh.i3plus.mes.pcn.api.iservice.busi.ISyncFuncService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; @@ -70,6 +71,10 @@ public class MesProductionReocrdGenerateStepService extends BaseStepService { mesProductionRecordRepository.saveAll(mesProductionRecords); + MesProdShiftContext mesProdShiftKvBean = mesProductionDispatchContextStepService.getMesProdShiftKvBean(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode()); + // 保存班次加工数量上下文 + mesProductionDispatchContextStepService.addProductionStatisticsContext(reqBean,mesProduceSns.size()); + return StepResult.getSuccessComplete(); } 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 3c136d3..684cdd8 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 @@ -9,12 +9,14 @@ import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; import cn.estsh.i3plus.pojo.mes.bean.MesPart; import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; +import cn.estsh.i3plus.pojo.mes.bean.MesRawPartCharging; import cn.estsh.i3plus.pojo.mes.model.StationKvBean; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.model.StationResultBean; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.TypeReference; +import com.google.common.base.Objects; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; @@ -35,7 +37,7 @@ public class MesProductionDispatchContextStepService extends BaseStepService imp private String getContextKey(StationRequestBean reqBean) { return getFsmBusikey(reqBean, MesPcnExtConstWords.PRODUCTION_PROCESS_CONTEXT); } - private String getContextKey(StationRequestBean reqBean, String busiCode) { return new StringJoiner(":").add(reqBean.getOrganizeCode()).add(MesPcnExtConstWords.PRODUCTION_PROCESS_CONTEXT).add(busiCode).toString(); } + private String getContextKey(String organizeCode, String busiCode) { return new StringJoiner(":").add(organizeCode).add(MesPcnExtConstWords.PRODUCTION_PROCESS_CONTEXT).add(busiCode).toString(); } //发送设备质量信息 @Override @@ -394,29 +396,29 @@ public class MesProductionDispatchContextStepService extends BaseStepService imp //获取上下文班次班组信息 @Override - public List getProdShiftDataContext(StationRequestBean reqBean, String workCenterCode) { - String prodShiftJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean, MesPcnExtConstWords.PROD_SHIFT_DATA_CONTEXT), workCenterCode); + public List getProdShiftDataContext(String orgainzeCode, String workCenterCode) { + String prodShiftJson = getFsmBusiData(orgainzeCode, getContextKey(orgainzeCode, MesPcnExtConstWords.PROD_SHIFT_DATA_CONTEXT), workCenterCode); return !StringUtils.isEmpty(prodShiftJson) ? JSONObject.parseArray(prodShiftJson, StationKvBean.class) : null; } //验证上下文班次班组信息是否存在 @Override - public Boolean checkProdShiftDataIsExistContext(StationRequestBean reqBean, String workCenterCode) { - String prodShiftJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean, MesPcnExtConstWords.PROD_SHIFT_DATA_CONTEXT), workCenterCode); + public Boolean checkProdShiftDataIsExistContext(String orgainzeCode, String workCenterCode) { + String prodShiftJson = getFsmBusiData(orgainzeCode, getContextKey(orgainzeCode, MesPcnExtConstWords.PROD_SHIFT_DATA_CONTEXT), workCenterCode); return !StringUtils.isEmpty(prodShiftJson) ? true : false; } //保存上下文班次班组信息 [JSON]List @Override - public Boolean saveProdShiftDataContext(StationRequestBean reqBean, String workCenterCode, List prodShiftDataList) { + public Boolean saveProdShiftDataContext(String organizeCode, String workCenterCode, List prodShiftDataList) { if (CollectionUtils.isEmpty(prodShiftDataList)) return false; - return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean, MesPcnExtConstWords.PROD_SHIFT_DATA_CONTEXT), workCenterCode, JSONObject.toJSONString(prodShiftDataList)); + return saveFsmBusiData(organizeCode, getContextKey(organizeCode, MesPcnExtConstWords.PROD_SHIFT_DATA_CONTEXT), workCenterCode, JSONObject.toJSONString(prodShiftDataList)); } //删除上下文班次班组信息 @Override - public void deleteProdShiftDataContext(StationRequestBean reqBean, String workCenterCode) { - deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean, MesPcnExtConstWords.PROD_SHIFT_DATA_CONTEXT), workCenterCode); + public void deleteProdShiftDataContext(String orgainzeCode, String workCenterCode) { + deleteFsmBusiData(orgainzeCode, getContextKey(orgainzeCode, MesPcnExtConstWords.PROD_SHIFT_DATA_CONTEXT), workCenterCode); } //获取上下文工位加工数统计信息 @@ -433,6 +435,29 @@ public class MesProductionDispatchContextStepService extends BaseStepService imp return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PRODUCTION_STATISTICS_CONTEXT, JSONObject.toJSONString(productionStatisticsList)); } + @Override + public Boolean addProductionStatisticsContext(StationRequestBean reqBean, int count) { + + MesProdShiftContext mesProdShiftKvBean = getMesProdShiftKvBean(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode()); + + List stationKvBeans = getProductionStatisticsContext(reqBean); + if (CollectionUtils.isEmpty(stationKvBeans)) { + String key = mesProdShiftKvBean.getShiftGroup() + "_" + mesProdShiftKvBean.getShiftCode(); + String name = "加工次数"; + String value = count + ""; + List generateStationKvBeans = StationKvBeanUtil.addStationKvBeanList(new ArrayList<>(), new StationKvBean(key, name, value)); + saveProductionStatisticsContext(reqBean, generateStationKvBeans); + } else { + stationKvBeans.stream().forEach(stationKvBean -> { + if (Objects.equal(stationKvBean.getKey(), mesProdShiftKvBean.getShiftGroup() + "_" + mesProdShiftKvBean.getShiftCode())) { + stationKvBean.setValue(stationKvBean == null ? count + "" : (Integer.valueOf(stationKvBean.getValue()) + count) + ""); + } + }); + saveProductionStatisticsContext(reqBean, stationKvBeans); + } + return true; + } + //删除上下文工位加工数统计信息 @Override public void deleteProductionStatisticsContext(StationRequestBean reqBean) { @@ -478,4 +503,36 @@ public class MesProductionDispatchContextStepService extends BaseStepService imp deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), "OUT_PRODUCE_SN_DATA_CONTEXT"); } + @Override + public List getMesRawPartChargingDataContext(StationRequestBean reqBean) { + String mesRawPartChargingDataJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), "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)); + } + + @Override + public void deleteMesRawPartChargingDataContext(StationRequestBean reqBean) { + deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), "RAW_PART_CHARGING_DATA_CONTEXT"); + } + + @Override + public MesProdShiftContext getMesProdShiftKvBean(String orgainzeCode, String workCenterCode) { + List stationKvBeans = getProdShiftDataContext(orgainzeCode, workCenterCode); + + MesProdShiftContext mesProdShiftContext = new MesProdShiftContext(); + if (CollectionUtils.isEmpty(stationKvBeans)) { + return null; + } + StationKvBean shiftGroupKvBean = stationKvBeans.stream().filter(stationKvBean -> Objects.equal(stationKvBean.getKey(), "shiftGroup")).findFirst().orElse(null); + StationKvBean shiftCodeKvBean = stationKvBeans.stream().filter(stationKvBean -> Objects.equal(stationKvBean.getKey(), "shiftCode")).findFirst().orElse(null); + + mesProdShiftContext.setShiftCode(shiftGroupKvBean == null ? null : shiftGroupKvBean.getValue()); + mesProdShiftContext.setShiftGroup(shiftCodeKvBean == null ? null : shiftCodeKvBean.getValue()); + return mesProdShiftContext; + } } diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProdShiftContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProdShiftContext.java new file mode 100644 index 0000000..103c334 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesProdShiftContext.java @@ -0,0 +1,33 @@ +package cn.estsh.i3plus.ext.mes.pcn.pojo.context; + +import cn.estsh.i3plus.pojo.base.annotation.AnnoOutputColumn; +import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import com.alibaba.fastjson.JSONObject; +import io.swagger.annotations.ApiParam; +import lombok.Data; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import javax.persistence.Column; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 生产过程上下文对象-生产开班记录 + */ +@Data +public class MesProdShiftContext implements Serializable { + + private static final long serialVersionUID = 1522652732930288855L; + + @ApiParam("班组代码") + private String shiftGroup; + + @ApiParam("班次代码") + private String shiftCode; + +} 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 aa8bfc4..8da074c 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 @@ -68,6 +68,10 @@ public class MesPcnExtConstWords { public static final String EQUIP_VARIABLE_STATUS = "equipVariableStatus"; // 模具号 public static final String MOULD_NO = "mouldNo"; + // 班次 + public static final String SHIFT_CODE = "shiftCode"; + // 班组 + public static final String SHIFT_GROUP = "shiftGroup"; // 工序代码 public static final String PROCESS_CODE = "processCode"; // 生产工单号 @@ -224,7 +228,12 @@ public class MesPcnExtConstWords { public static final String PRODUCTION_STATISTICS_CONTEXT = "PRODUCTION_STATISTICS_CONTEXT"; - + //OPC_API_PARAM + public static final String OPC_LINK_URL = "OPC_LINK_URL"; + public static final String VALUE = "value"; + public static final String CLIENT_HANDLE= "clientHandle"; + public static final String CHANNEL = "channel"; + public static final String EQUIPMENT_ID = "equipmentId"; @Deprecated From 143361ccd08c8a9eb68908365cd5d1b4ae805dbd 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: Sat, 8 Jun 2024 19:59:44 +0800 Subject: [PATCH 02/14] =?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 --- .../station/MesProductionNoSortModuleService.java | 22 ++++++++-------------- .../MesProductionDispatchContextStepService.java | 4 ++-- 2 files changed, 10 insertions(+), 16 deletions(-) diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionNoSortModuleService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionNoSortModuleService.java index 36521c5..27fe116 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionNoSortModuleService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionNoSortModuleService.java @@ -3,6 +3,7 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.station; 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.MesCellEquipContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProdShiftContext; 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.BaseModuleService; @@ -27,6 +28,7 @@ import org.springframework.util.CollectionUtils; import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.StringJoiner; import java.util.stream.Collectors; /** @@ -56,6 +58,8 @@ public class MesProductionNoSortModuleService extends BaseModuleService { // 获取班次信息 List prodShiftDataContext = mesProductionDispatchContextStepService.getProdShiftDataContext(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode()); + MesProdShiftContext mesProdShiftKvBean = mesProductionDispatchContextStepService.getMesProdShiftKvBean(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode()); + if (CollectionUtils.isEmpty(prodShiftDataContext)) { this.sendMessage(reqBean, new StationResultBean().writeDbLog(), "请先开班", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); throw ImppExceptionBuilder.newInstance().setSystemID(CommonEnumUtil.SOFT_TYPE.MES_PCN.getCode()).setErrorCode("NO_SHOW_MSG").build(); @@ -68,7 +72,9 @@ public class MesProductionNoSortModuleService extends BaseModuleService { List shiftCountContext = new ArrayList<>(); if (mesWorkCell.getIsShowMsg() != null && Objects.equal(MesExtEnumUtil.WORK_FILE_TYPE.HISTOGRAM.getValue(),mesWorkCell.getIsShowMsg())) { List productionStatisticsContext = mesProductionDispatchContextStepService.getProductionStatisticsContext(reqBean); - + if (CollectionUtils.isEmpty(productionStatisticsContext)) { + StationKvBeanUtil.addStationKvBeanList(new ArrayList<>(), new StationKvBean(new StringJoiner(MesPcnExtConstWords.AND).add(mesProdShiftKvBean.getShiftGroup()).add(mesProdShiftKvBean.getShiftCode()).toString(), "加工次数", "0")); + } StationResultBean shiftCountBean = getStationResultBean(reqBean, productionStatisticsContext); this.sendMessage(reqBean, shiftCountBean); } @@ -83,20 +89,7 @@ public class MesProductionNoSortModuleService extends BaseModuleService { resultBean.setDataType(MesPcnEnumUtil.STATION_DATA_TYPE.CUSTOM.getValue()); resultBean.setCustomPageName(MesPcnExtConstWords.CUSTOM_PAGE_NAME_DEFAULT); resultBean.setSpecialDisplayData(getStepColIndent(reqBean)); -/* - List stationKvBeans3 = new ArrayList<>(); - StationKvBean stationKvBean7 = new StationKvBean(); - stationKvBean7.setKey("shiftCode"); - stationKvBean7.setName("班次"); - stationKvBean7.setValue("白班"); - stationKvBeans3.add(stationKvBean7); - - StationKvBean stationKvBean8 = new StationKvBean(); - stationKvBean8.setKey("shiftGroup"); - stationKvBean8.setName("班组"); - stationKvBean8.setValue("注塑2班"); - stationKvBeans3.add(stationKvBean8);*/ resultBean.setResultObj(prodShiftDataContext); resultBean.setResultList(moduleContentContext); @@ -111,6 +104,7 @@ public class MesProductionNoSortModuleService extends BaseModuleService { resultBean.setDataAttrList(packDataAttrList()); resultBean.setSpecialDisplayData(getStepColIndent(reqBean)); + resultBean.setResultList(productionStatisticsContext); return resultBean; } 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 684cdd8..229a71f 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 @@ -439,17 +439,17 @@ public class MesProductionDispatchContextStepService extends BaseStepService imp public Boolean addProductionStatisticsContext(StationRequestBean reqBean, int count) { MesProdShiftContext mesProdShiftKvBean = getMesProdShiftKvBean(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode()); + String key = new StringJoiner(MesPcnExtConstWords.AND).add(mesProdShiftKvBean.getShiftGroup()).add(mesProdShiftKvBean.getShiftCode()).toString(); List stationKvBeans = getProductionStatisticsContext(reqBean); if (CollectionUtils.isEmpty(stationKvBeans)) { - String key = mesProdShiftKvBean.getShiftGroup() + "_" + mesProdShiftKvBean.getShiftCode(); String name = "加工次数"; String value = count + ""; List generateStationKvBeans = StationKvBeanUtil.addStationKvBeanList(new ArrayList<>(), new StationKvBean(key, name, value)); saveProductionStatisticsContext(reqBean, generateStationKvBeans); } else { stationKvBeans.stream().forEach(stationKvBean -> { - if (Objects.equal(stationKvBean.getKey(), mesProdShiftKvBean.getShiftGroup() + "_" + mesProdShiftKvBean.getShiftCode())) { + if (Objects.equal(stationKvBean.getKey(), key)) { stationKvBean.setValue(stationKvBean == null ? count + "" : (Integer.valueOf(stationKvBean.getValue()) + count) + ""); } }); From 0338eb1752bf440b97c2b03bdfca7d66f2e4d38d 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, 9 Jun 2024 13:28:36 +0800 Subject: [PATCH 03/14] =?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 --- .../station/MesProductionNoSortModuleService.java | 46 +++++++++++++++++----- .../ext/mes/pcn/pojo/util/MesPcnExtConstWords.java | 3 ++ 2 files changed, 40 insertions(+), 9 deletions(-) diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionNoSortModuleService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionNoSortModuleService.java index 27fe116..1f66007 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionNoSortModuleService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionNoSortModuleService.java @@ -8,22 +8,28 @@ 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.BaseModuleService; import cn.estsh.i3plus.mes.pcn.util.StationKvBeanUtil; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.MesFile; import cn.estsh.i3plus.pojo.mes.bean.MesStateMachineStatus; import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell; import cn.estsh.i3plus.pojo.mes.model.AttrBean; import cn.estsh.i3plus.pojo.mes.model.StationKvBean; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.model.StationResultBean; +import cn.estsh.i3plus.pojo.mes.repository.MesFileRepository; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import cn.estsh.i3plus.pojo.mes.util.PojoAttrUtil; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import com.alibaba.fastjson.JSONObject; import com.google.common.base.Objects; 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; @@ -45,7 +51,8 @@ public class MesProductionNoSortModuleService extends BaseModuleService { @Autowired private IMesProductionDispatchContextStepService mesProductionDispatchContextStepService; - + @Autowired + private MesFileRepository mesFileRepository; @Override public void init(StationRequestBean reqBean) { @@ -69,13 +76,12 @@ public class MesProductionNoSortModuleService extends BaseModuleService { this.sendMessage(reqBean, resultBean); // 整合班次加工数量 - List shiftCountContext = new ArrayList<>(); if (mesWorkCell.getIsShowMsg() != null && Objects.equal(MesExtEnumUtil.WORK_FILE_TYPE.HISTOGRAM.getValue(),mesWorkCell.getIsShowMsg())) { List productionStatisticsContext = mesProductionDispatchContextStepService.getProductionStatisticsContext(reqBean); if (CollectionUtils.isEmpty(productionStatisticsContext)) { StationKvBeanUtil.addStationKvBeanList(new ArrayList<>(), new StationKvBean(new StringJoiner(MesPcnExtConstWords.AND).add(mesProdShiftKvBean.getShiftGroup()).add(mesProdShiftKvBean.getShiftCode()).toString(), "加工次数", "0")); } - StationResultBean shiftCountBean = getStationResultBean(reqBean, productionStatisticsContext); + StationResultBean shiftCountBean = getStationResultBean(reqBean, productionStatisticsContext,mesWorkCell); this.sendMessage(reqBean, shiftCountBean); } @@ -96,16 +102,38 @@ public class MesProductionNoSortModuleService extends BaseModuleService { return resultBean; } - private StationResultBean getStationResultBean(StationRequestBean reqBean, List productionStatisticsContext) { + private StationResultBean getStationResultBean(StationRequestBean reqBean, List productionStatisticsContext, MesWorkCell mesWorkCell) { StationResultBean resultBean = new StationResultBean(); resultBean.setBusiType(MesPcnEnumUtil.STATION_BUSI_TYPE.MODULE_CUSTOM_CONTENT.getValue()); - resultBean.setDataType(MesPcnEnumUtil.STATION_DATA_TYPE.ECHART.getValue()); - resultBean.setCustomPageName(MesPcnExtConstWords.CUSTOM_PAGE_NAME_DEFAULT); - resultBean.setDataAttrList(packDataAttrList()); - resultBean.setSpecialDisplayData(getStepColIndent(reqBean)); + String dataType = MesPcnEnumUtil.STATION_DATA_TYPE.ECHART.getValue(); + JSONObject reqJson = new JSONObject(); + String url = ""; + if (!StringUtils.isEmpty(mesWorkCell.getFileId())) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(); + DdlPreparedPack.getNumEqualPack(Long.parseLong(mesWorkCell.getFileId()), "id", packBean); + MesFile mesFile = mesFileRepository.getByProperty(packBean); + url = mesFile.getFileUrl(); + } + if (Objects.equal(MesExtEnumUtil.WORK_FILE_TYPE.HISTOGRAM.getValue(), mesWorkCell.getIsShowMsg())) { + dataType = MesPcnEnumUtil.STATION_DATA_TYPE.ECHART.getValue(); + } else if (Objects.equal(MesExtEnumUtil.WORK_FILE_TYPE.PROD_VIDEO.getValue(), mesWorkCell.getIsShowMsg())) { + dataType = MesPcnEnumUtil.STATION_DATA_TYPE.VIDEO.getValue(); + reqJson.put("url", url); + resultBean.setResultObj(reqJson); + } else if (Objects.equal(MesExtEnumUtil.WORK_FILE_TYPE.WORK_CELL_PICTURE.getValue(), mesWorkCell.getIsShowMsg())) { + dataType = MesPcnEnumUtil.STATION_DATA_TYPE.IMAGE.getValue(); + reqJson.put("url", url); + resultBean.setResultObj(reqJson); + } else { + dataType = MesPcnEnumUtil.STATION_DATA_TYPE.TEXT.getValue(); + resultBean.setResultList(productionStatisticsContext); + } + + resultBean.setDataType(dataType); + resultBean.setCustomPageName(MesPcnExtConstWords.CUSTOM_PAGE_NAME_WORK_CELL); + - resultBean.setResultList(productionStatisticsContext); return resultBean; } private List packDataAttrList() { 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 8da074c..ba3e600 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 @@ -181,6 +181,9 @@ public class MesPcnExtConstWords { // 定制页面名称(默认) public static final String CUSTOM_PAGE_NAME_DEFAULT = "CUSTOM_PAGE_NAME_DEFAULT"; + // 定制页面名称(默认) + public static final String CUSTOM_PAGE_NAME_WORK_CELL = "CUSTOM_PAGE_NAME_WORK_CELL"; + // 上个扫描信息 public static final String CLIENT_INFO = "clientInfo"; // 上个扫描信息 From d7fff9d0216f5c46a76e7591697f9cca1a8592c3 Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Sun, 9 Jun 2024 13:38:02 +0800 Subject: [PATCH 04/14] pcn step --- .../mes/pcn/api/busi/IMesProduceSnExtService.java | 4 + .../IMesProductionDispatchContextStepService.java | 30 ++++-- .../IMesProductionProcessContextStepService.java | 3 + .../serviceimpl/busi/MesProduceSnExtService.java | 16 +++ .../MesProductionNoSortFunctionModuleService.java | 110 --------------------- .../MesFunctionChooseWorkOrderService.java | 78 +++++++++++++++ .../function/MesFunctionJumpProcessService.java | 34 +++++++ .../function/MesFunctionJumpStateService.java | 52 ++++++++++ .../MesFunctionResetCellContextService.java | 37 +++++++ .../function/MesFunctionSwitchCellService.java | 32 ++++++ .../step/MesProductSnCheckStepService.java | 28 ++++-- .../step/MesProductSnMarkUnkonwStepService.java | 58 ----------- .../MesProductionDispatchContextStepService.java | 84 ++++++++++------ .../MesProductionProcessContextStepService.java | 3 + .../ext/mes/pcn/pojo/util/MesPcnExtConstWords.java | 21 ++-- 15 files changed, 368 insertions(+), 222 deletions(-) delete mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionNoSortFunctionModuleService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionChooseWorkOrderService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionJumpProcessService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionJumpStateService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionResetCellContextService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionSwitchCellService.java delete mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnMarkUnkonwStepService.java 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 db5b81d..10b9c96 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 @@ -1,6 +1,7 @@ package cn.estsh.i3plus.ext.mes.pcn.api.busi; import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; +import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import io.swagger.annotations.ApiOperation; import java.util.List; @@ -10,4 +11,7 @@ public interface IMesProduceSnExtService { @ApiOperation(value = "根据零件条码查询零件条码信息") List getProduceSnList(String organizeCode, List productSnList); + @ApiOperation(value = "根据零件条码ID修改条码状态,工位") + void saveProduceSnList(StationRequestBean reqBean, Integer snStatus, List idList); + } 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 1c4871d..f872d3c 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 @@ -173,6 +173,9 @@ public interface IMesProductionDispatchContextStepService { @ApiOperation(value = "删除上下文产品加工规则信息集合") void deleteProdRuleDataContext(StationRequestBean reqBean); + @ApiOperation(value = "获取生产线的当前班组班次信息") + MesProdShiftContext getMesProdShiftKvBean(String orgainzeCode, String workCenterCode); + @ApiOperation(value = "获取上下文班次班组信息") List getProdShiftDataContext(String orgainzeCode, String workCenterCode); @@ -197,7 +200,23 @@ public interface IMesProductionDispatchContextStepService { @ApiOperation(value = "删除上下文工位加工数统计信息") void deleteProductionStatisticsContext(StationRequestBean reqBean); - MesProdShiftContext getMesProdShiftKvBean(String orgainzeCode, String workCenterCode); + @ApiOperation(value = "获取手动选择的腔数及工单信息上下文") + String getFunctionChooseCavityOrderContext(StationRequestBean reqBean); + + @ApiOperation(value = "保存手动选择的腔数及工单信息上下文", notes = "腔数=工单个数 数据格式: 腔数;工单1;工单2;工单3") + Boolean saveFunctionChooseCavityOrderContext(StationRequestBean reqBean, String value); + + @ApiOperation(value = "删除手动选择的腔数及工单信息上下文") + void deleteFunctionChooseCavityOrderContext(StationRequestBean reqBean); + + @ApiOperation(value = "获取料桶原材料数据集合") + List getMesRawPartChargingDataContext(StationRequestBean reqBean); + + @ApiOperation(value = "保存料桶原材料数据集合", notes = "[JSON]List") + Boolean saveMesRawPartChargingDataContext(StationRequestBean reqBean, List mesRawPartChargingList); + + @ApiOperation(value = "删除料桶原材料数据集合") + void deleteMesRawPartChargingDataContext(StationRequestBean reqBean); @@ -227,13 +246,4 @@ public interface IMesProductionDispatchContextStepService { void deleteOutProduceSnDataContext(StationRequestBean reqBean); - @ApiOperation(value = "获取料桶原材料数据集合") - List getMesRawPartChargingDataContext(StationRequestBean reqBean); - - @ApiOperation(value = "保存料桶原材料数据集合", notes = "[JSON]List") - Boolean saveMesRawPartChargingDataContext(StationRequestBean reqBean, List mesRawPartChargingList); - - @ApiOperation(value = "删除料桶原材料数据集合") - void deleteMesRawPartChargingDataContext(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 27bc969..783f0b6 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 @@ -21,6 +21,9 @@ public interface IMesProductionProcessContextStepService { @ApiOperation(value = "存储生产过程上下文对象【工步根据业务实际情况执行,配置错误等情况无需执行】") Boolean saveProductionProcessContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext); + @ApiOperation(value = "删除生产过程上下文对象") + void deleteProductionProcessContext(StationRequestBean reqBean); + @ApiOperation(value = "获取生产过程上下文对象") MesProductionProcessContext getProductionProcessContext(StationRequestBean reqBean); 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 a04dc8f..4d3dcbd 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 @@ -2,10 +2,12 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProduceSnExtService; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +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.MesProduceSn; +import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.repository.MesProduceSnRepository; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -49,4 +51,18 @@ public class MesProduceSnExtService implements IMesProduceSnExtService { produceSnDataList.stream().filter(o -> null != o).distinct().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(MesProduceSn::getProductSn))), ArrayList::new)); } + @Override + public void saveProduceSnList(StationRequestBean reqBean, Integer snStatus, List idList) { + + DdlPackBean packBean = new DdlPackBean(); + DdlPreparedPack.getStringEqualPack(reqBean.getOrganizeCode(), MesPcnExtConstWords.ORGANIZE_CODE, packBean); + DdlPreparedPack.getInPackList(idList, MesPcnExtConstWords.ID, packBean); + produceSnRepository.updateByProperties( + new String[]{MesPcnExtConstWords.MODIFY_USER, MesPcnExtConstWords.MODIFY_DATE_TIME, MesPcnExtConstWords.SYSTEM_SYNC_STATUS, MesPcnExtConstWords.WORK_CENTER_CODE, MesPcnExtConstWords.WORK_CELL_CODE, MesPcnExtConstWords.SN_STATUS}, + new Object[]{reqBean.getUserInfo(), TimeTool.getNowTime(true), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), snStatus}, + packBean); + + } + + } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionNoSortFunctionModuleService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionNoSortFunctionModuleService.java deleted file mode 100644 index 3d3fa50..0000000 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionNoSortFunctionModuleService.java +++ /dev/null @@ -1,110 +0,0 @@ -//package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.station; -// -//import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService; -//import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; -//import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseModuleService; -//import cn.estsh.i3plus.platform.common.util.MesPcnConstWords; -//import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; -//import cn.estsh.i3plus.pojo.mes.model.ButtonDynamicModel; -//import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; -//import cn.estsh.i3plus.pojo.mes.model.StationResultBean; -//import com.alibaba.fastjson.JSONObject; -//import lombok.extern.slf4j.Slf4j; -//import org.springframework.beans.factory.annotation.Autowired; -//import org.springframework.stereotype.Service; -//import org.springframework.util.StringUtils; -// -//import java.util.Map; -// -///** -// * @Description : 展示组件:非排序生产(按钮 临时) -// * @Author :wangjie -// **/ -//@Slf4j -//@Service("mesProductionNoSortFunctionModuleService") -//class MesProductionNoSortFunctionModuleService extends BaseModuleService { -// -// @Autowired -// private IMesProductionProcessContextStepService productionProcessContextStepService; -// -// @Override -// public boolean doFunction(StationRequestBean reqBean) { -// -// StationResultBean resultBean = new StationResultBean(); -// -// String functionCmd = (String) reqBean.getDataMap().get(MesPcnExtConstWords.FUNCTION_CMD); -// ButtonDynamicModel buttonDynamicModel = !StringUtils.isEmpty(functionCmd) ? JSONObject.parseObject(functionCmd, ButtonDynamicModel.class) : null; -// -// if (null != buttonDynamicModel) -// -// -// -// this.sendMessage(reqBean, resultBean, "后端未获取到业务功能指令!", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); -// -// -// -// -// -// switch (command) { -// case MesPcnExtConstWords.CMD_WORK_ORDER : -// if (StringUtils.isEmpty(value)) { -// this.sendMessage(reqBean, null, "请选择启动状态的生产工单!", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); -// return result; -// } -// -// String selectWorkOrderNo = (String) doHandleSelectWorkOrderNo(reqBean, 1, null); -// selectWorkOrderNo = (StringUtils.isEmpty(selectWorkOrderNo) || !selectWorkOrderNo.contains(MesPcnExtConstWords.COLON)) ? selectWorkOrderNo : selectWorkOrderNo.split(MesPcnExtConstWords.COLON)[1]; -// if (!StringUtils.isEmpty(selectWorkOrderNo) && selectWorkOrderNo.equals(value)) return result; -// reqBean.setForceJumpProcess(true); -// if ((Boolean) doHandleSelectWorkOrderNo(reqBean, 2, value.toString())) result = true; -// else { -// this.sendMessage(reqBean, null, String.format("切换的生产工单[%s]缓存失败,请重试!", value), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); -// return result; -// } -// break; -// case MesPcnExtConstWords.CMD_BUSI_FLAG : -// if (StringUtils.isEmpty(value)) { -// this.sendMessage(reqBean, null, "请点击业务按钮!", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); -// return result; -// } -// -// String curBusiFlag = (String) doHandleBusiFlag(reqBean, 1, null); -// if (!StringUtils.isEmpty(curBusiFlag) && curBusiFlag.equals(value)) return result; -// reqBean.setTriggerAutoFsm(true); -// if (StringUtils.isEmpty(curBusiFlag)) { -// if ((Boolean) doHandleBusiFlag(reqBean, 2, value.toString())) result = true; -// else { -// this.sendMessage(reqBean, null, String.format("业务按钮[%s]缓存失败,请重试!", value), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); -// return result; -// } -// } -// break; -// case MesPcnExtConstWords.CMD_FORCE_CENTER_PASS : -// if (StringUtils.isEmpty(value)) { -// this.sendMessage(reqBean, null, "入参缺少产线强制放行的工步代码!", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); -// return result; -// } -// String pwd = (String) dataMap.get(MesPcnExtConstWords.PWD); -// if (!jxProduceSnExtService.checkPorceCenterPassPwd(reqBean, pwd)) { -// this.sendMessage(reqBean, null, String.format("产线强制放行验证密码[%s]不正确!", pwd), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); -// return result; -// } -// reqBean.setForceSpecStepCode(value.toString()); -// result = true; -// break; -// default: -// break; -// } -// -// if (!result) this.sendMessage(reqBean, null, "操作太频繁!", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); -// else { -// //跳过工序 -// reqBean.setClientInfo(shippingDispatchService.getActorClientInfo(reqBean)); -// reqBean.setInterfaceType(MesPcnConstWords.SHIPPING); -// reqBean.setBusiType(MesPcnConstWords.WS_CMD_DO_SCAN); -// shippingDispatchService.doSendScanQueueNextExec(reqBean); -// } -// return result; -// } -// -//} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionChooseWorkOrderService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionChooseWorkOrderService.java new file mode 100644 index 0000000..9c75ec7 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionChooseWorkOrderService.java @@ -0,0 +1,78 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.station.function; + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseSwsService; +import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.IShippingDispatchService; +import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.function.IFsmModuleFunctionService; +import cn.estsh.i3plus.platform.common.util.MesPcnConstWords; +import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; +import cn.estsh.i3plus.pojo.mes.model.ButtonDynamicModel; +import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; +import cn.estsh.i3plus.pojo.mes.model.StationResultBean; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +/** + * @Description : 工位参数按钮事件接口实现【选择工单】 + **/ +@Service +public class MesFunctionChooseWorkOrderService extends BaseSwsService implements IFsmModuleFunctionService { + + @Autowired + private IMesProductionDispatchContextStepService productionDispatchContextStepService; + + @Autowired + private IShippingDispatchService shippingDispatchService; + + @Override + public boolean doFunction(StationRequestBean reqBean, StationResultBean resultBean, ButtonDynamicModel buttonDynamicModel) { + + if (!checkCavityOrderIsValid(buttonDynamicModel.getFunctionValue())) { + 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.EXP_TEXT); + return false; + } + + //保存手动选择的腔数及工单信息上下文 + productionDispatchContextStepService.saveFunctionChooseCavityOrderContext(reqBean, buttonDynamicModel.getFunctionValue()); + + reqBean.setClientInfo(shippingDispatchService.getActorClientInfo(reqBean)); + reqBean.setInterfaceType(MesPcnConstWords.SHIPPING); + reqBean.setBusiType(MesPcnConstWords.WS_CMD_DO_SCAN); + reqBean.setTriggerAutoFsm(true); + + shippingDispatchService.doSendScanQueueIfNoQueue(reqBean, false); + + return true; + + } + + //腔数=工单个数 数据格式: 腔数;工单1;工单2;工单3 + private Boolean checkCavityOrderIsValid(String functionValue) { + + if (StringUtils.isEmpty(functionValue)) return false; + + String[] value = functionValue.split(MesPcnExtConstWords.SEMICOLON); + + if (null == value) return false; + + try { + + Integer cavity = Integer.valueOf(value[0]); + + if (cavity != value.length - 1) return false; + + } catch (NumberFormatException e) { + + return false; + + } + + return true; + + + } + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionJumpProcessService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionJumpProcessService.java new file mode 100644 index 0000000..9eefe57 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionJumpProcessService.java @@ -0,0 +1,34 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.station.function; + +import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.IShippingDispatchService; +import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.function.IFsmModuleFunctionService; +import cn.estsh.i3plus.platform.common.util.MesPcnConstWords; +import cn.estsh.i3plus.pojo.mes.model.ButtonDynamicModel; +import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; +import cn.estsh.i3plus.pojo.mes.model.StationResultBean; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * @Description : 工位参数按钮事件接口实现【重置工序】 + **/ +@Service +public class MesFunctionJumpProcessService implements IFsmModuleFunctionService { + + @Autowired + private IShippingDispatchService shippingDispatchService; + + @Override + public boolean doFunction(StationRequestBean reqBean, StationResultBean resultBean, ButtonDynamicModel buttonDynamicModel) { + + reqBean.setClientInfo(shippingDispatchService.getActorClientInfo(reqBean)); + reqBean.setInterfaceType(MesPcnConstWords.SHIPPING); + reqBean.setBusiType(MesPcnConstWords.WS_CMD_DO_SCAN); + reqBean.setForceJumpProcess(true); + shippingDispatchService.doSendScanQueueNextExec(reqBean); + + return true; + + } + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionJumpStateService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionJumpStateService.java new file mode 100644 index 0000000..376a0cf --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionJumpStateService.java @@ -0,0 +1,52 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.station.function; + +import cn.estsh.i3plus.mes.pcn.actor.shipping.dispatch.IFsmCommonService; +import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseSwsService; +import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.IShippingDispatchService; +import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.function.IFsmModuleFunctionService; +import cn.estsh.i3plus.platform.common.util.MesPcnConstWords; +import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; +import cn.estsh.i3plus.pojo.mes.model.ButtonDynamicModel; +import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; +import cn.estsh.i3plus.pojo.mes.model.StationResultBean; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import java.util.Map; + +/** + * @Description : 工位参数按钮事件接口实现【强过工步集】 + **/ +@Service +public class MesFunctionJumpStateService extends BaseSwsService implements IFsmModuleFunctionService { + + @Autowired + private IFsmCommonService fsmCommonService; + + @Autowired + private IShippingDispatchService shippingDispatchService; + + @Override + public boolean doFunction(StationRequestBean reqBean, StationResultBean resultBean, ButtonDynamicModel buttonDynamicModel) { + + Map wcpcMap = fsmCommonService.doHandleFsmWcpcMapDataForDoScan(reqBean); + String jumpState = wcpcMap.get(MesPcnEnumUtil.STATION_REQUEST_BEAN_CMD.JUMP_STATE.getCode()); + + if (StringUtils.isEmpty(jumpState)) { + this.sendMessage(reqBean, resultBean.writeDbLog(), String.format("生产线[%s]工位[%s]%s失败,未配置工位参数[%s]!", + reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), buttonDynamicModel.getButtonName(), MesPcnEnumUtil.STATION_REQUEST_BEAN_CMD.JUMP_STATE.getCode()), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + return false; + } + + reqBean.setClientInfo(shippingDispatchService.getActorClientInfo(reqBean)); + reqBean.setInterfaceType(MesPcnConstWords.SHIPPING); + reqBean.setBusiType(MesPcnConstWords.WS_CMD_DO_SCAN); + reqBean.setScanInfo(jumpState); + shippingDispatchService.doSendScanQueueNextExec(reqBean); + + return true; + + } + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionResetCellContextService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionResetCellContextService.java new file mode 100644 index 0000000..7a0f690 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionResetCellContextService.java @@ -0,0 +1,37 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.station.function; + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService; +import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.IStepService; +import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.function.IFsmModuleFunctionService; +import cn.estsh.i3plus.pojo.mes.model.ButtonDynamicModel; +import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; +import cn.estsh.i3plus.pojo.mes.model.StationResultBean; +import cn.estsh.impp.framework.boot.util.SpringContextsUtil; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * @Description : 工位参数按钮事件接口实现【重置上下文】 + **/ +@Service +public class MesFunctionResetCellContextService implements IFsmModuleFunctionService { + + @Autowired + private IMesProductionProcessContextStepService productionProcessContextStepService; + + @Override + public boolean doFunction(StationRequestBean reqBean) { + + //删除BASE上下文数据 + productionProcessContextStepService.deleteProductionProcessContext(reqBean); + + //删除BUSI上下文数据 + return ((IStepService) SpringContextsUtil.getBean("mesProductionContextFlushStepService")).execute(reqBean).isCompleted(); + + + } + + @Override + public boolean doFunction(StationRequestBean reqBean, StationResultBean resultBean, ButtonDynamicModel buttonDynamicModel) { return doFunction(reqBean); } + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionSwitchCellService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionSwitchCellService.java new file mode 100644 index 0000000..707a5a0 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionSwitchCellService.java @@ -0,0 +1,32 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.station.function; + +import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseSwsService; +import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.IShippingDispatchService; +import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.function.IFsmModuleFunctionService; +import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; +import cn.estsh.i3plus.pojo.mes.model.ButtonDynamicModel; +import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; +import cn.estsh.i3plus.pojo.mes.model.StationResultBean; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * @Description : 工位参数按钮事件接口实现【切换工位】 + **/ +@Service +public class MesFunctionSwitchCellService extends BaseSwsService implements IFsmModuleFunctionService { + + @Autowired + private IShippingDispatchService shippingDispatchService; + + @Override + public boolean doFunction(StationRequestBean reqBean, StationResultBean resultBean, ButtonDynamicModel buttonDynamicModel) { + + this.sendMessage(reqBean, resultBean.writeDbLog(), String.format("生产线[%s]工位[%s]%s,客户端已下线!", + reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), buttonDynamicModel.getButtonName()), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); + + return true; + + } + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnCheckStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnCheckStepService.java index e9cc1b9..a230bd4 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnCheckStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnCheckStepService.java @@ -43,6 +43,8 @@ public class MesProductSnCheckStepService extends BaseStepService { @Autowired private IMesProduceSnExtService produceSnExtService; + //TODO 装配件工步 判断空腔条码 + @Override public StepResult execute(StationRequestBean reqBean) { @@ -71,7 +73,7 @@ public class MesProductSnCheckStepService extends BaseStepService { List finishCodeList = filterEquipVariableCollectContextList(productionProcessContext, equipVariableCollectContextList, false); //验证上下文中主条码的有效性 - Map produceSnMap = checkProduceSnValid(reqBean, resultBean, stepResult, productionProcessContext, productSnList); + List produceSnList = checkProduceSnValid(reqBean, resultBean, stepResult, productionProcessContext, productSnList); //清除本次已完成验证的主条码信息 productionDispatchContextStepService.deleteScanProductSnContext(reqBean); @@ -81,6 +83,8 @@ public class MesProductSnCheckStepService extends BaseStepService { //获取上下文的工位 MesWorkCell workCell = productionProcessContext.getWorkCell(); + Map produceSnMap = CollectionUtils.isEmpty(produceSnList) ? null : produceSnList.stream().filter(o -> null != o).collect(Collectors.toMap(MesProduceSn::getProductSn, o -> o)); + //封装 读/扫主条件信息到进料主条码数据信息中 List productionPsInContextList = new ArrayList<>(); if (!CollectionUtils.isEmpty(productSnList)) productSnList.stream().filter(o -> null != o).forEach(o -> createProductionPsInContext(reqBean, resultBean, stepResult, workCell, produceSnMap, o, productionPsInContextList)); @@ -93,9 +97,10 @@ public class MesProductSnCheckStepService extends BaseStepService { //保存进料主条码数据 productionDispatchContextStepService.saveProductionPsInContext(reqBean, productionPsInContextList); - return CollectionUtils.isEmpty(produceSnMap) ? - execSuccessCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, String.format("上下文中的主条码[%s]验证条码状态成功!", productSnList)) : - execSuccessCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, String.format("上下文中的主条码[%s]验证条码状态成功,进料零件主条码即将标记状态[未知]!", productSnList)); + //变更主条码状态为未知 + saveProduceSnList(reqBean, resultBean, produceSnList); + + return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, String.format("上下文中的主条码[%s]验证条码状态成功!", productSnList)); } @@ -105,7 +110,7 @@ public class MesProductSnCheckStepService extends BaseStepService { } //获取进料主条码数据信息 - private Map checkProduceSnValid(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, List productSnList) { + private List checkProduceSnValid(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, List productSnList) { //根据零件条码查询零件条码信息 List produceSnList = produceSnExtService.getProduceSnList(reqBean.getOrganizeCode(), productSnList); @@ -115,7 +120,7 @@ public class MesProductSnCheckStepService extends BaseStepService { //循环获取进料主条码数据信息 produceSnList.stream().filter(o -> null != o).forEach(o -> checkProduceSnValid(reqBean, stepResult, productionProcessContext, o)); - return !stepResult.isCompleted() ? null : produceSnList.stream().filter(o -> null != o).collect(Collectors.toMap(MesProduceSn::getProductSn, o -> o)); + return !stepResult.isCompleted() ? null : produceSnList; } @@ -127,7 +132,8 @@ public class MesProductSnCheckStepService extends BaseStepService { if (MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue() != produceSn.getQcStatus()) return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]质量状态[%s]", suffixMsg, produceSn.getProductSn(), MesExtEnumUtil.PRODUCE_QC_STATUS.valueOfDescription(produceSn.getQcStatus()))); - if (MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue() != produceSn.getSnStatus() || (MesExtEnumUtil.PRODUCE_SN_STATUS.UNKNOW.getValue() == produceSn.getSnStatus() && !produceSn.getWorkCellCode().equals(reqBean.getWorkCellCode()))) + if (MesExtEnumUtil.PRODUCE_SN_STATUS.OFFLINE.getValue() != produceSn.getSnStatus() || + (MesExtEnumUtil.PRODUCE_SN_STATUS.UNKNOW.getValue() == produceSn.getSnStatus() && !produceSn.getWorkCenterCode().equals(reqBean.getWorkCenterCode()) && !produceSn.getWorkCellCode().equals(reqBean.getWorkCellCode()))) return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]条码状态[%s]", suffixMsg, produceSn.getProductSn(), MesExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(produceSn.getSnStatus()))); return stepResult; @@ -141,4 +147,12 @@ public class MesProductSnCheckStepService extends BaseStepService { productionPsInContextList.add(productionPsInContext); } + //变更主条码状态为未知 + private void saveProduceSnList(StationRequestBean reqBean, StationResultBean resultBean, List produceSnList) { + if (CollectionUtils.isEmpty(produceSnList)) return; + Map psMap = produceSnList.stream().filter(o -> null != o).collect(Collectors.toMap(MesProduceSn::getProductSn, MesProduceSn::getId)); + produceSnExtService.saveProduceSnList(reqBean, MesExtEnumUtil.PRODUCE_SN_STATUS.UNKNOW.getValue(), new ArrayList<>(psMap.values())); + this.sendMessage(reqBean, resultBean, String.format("主条码%s信息已变更[%s]状态", psMap.keySet().toString(), MesExtEnumUtil.PRODUCE_SN_STATUS.UNKNOW.getDescription()), 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/MesProductSnMarkUnkonwStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnMarkUnkonwStepService.java deleted file mode 100644 index 51edb19..0000000 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnMarkUnkonwStepService.java +++ /dev/null @@ -1,58 +0,0 @@ -package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; - -import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProduceSnExtService; -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.MesProductionProcessContext; -import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; -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 lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -/** - * @Description : 主条码标记未知工步 - * @Author : wangjie - **/ -@Slf4j -@Service("mesProductSnMarkUnkonwStepService") -public class MesProductSnMarkUnkonwStepService extends BaseStepService { - - @Autowired - private IMesProductionProcessContextStepService productionProcessContextStepService; - - @Autowired - private IMesProductionDispatchContextStepService productionDispatchContextStepService; - - @Autowired - private IMesProduceSnExtService produceSnExtService; - - //TODO 更新条码 未知 单独工步 - - //TODO 装配件工步 判断空腔条码 - - @Override - public StepResult execute(StationRequestBean reqBean) { - - StationResultBean resultBean = new StationResultBean(); - - StepResult stepResult = StepResult.getSuccessComplete(); - - //获取上下文信息 - MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean); - - //获取生产过程上下文对象有异常信息 抛出异常 - if (!productionProcessContext.getSuccess()) return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, productionProcessContext.getMessage()); - - //存储生产过程上下文对象 - productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext); - - return stepResult; - - } - - - -} 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 229a71f..d33ea9a 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 @@ -394,6 +394,23 @@ public class MesProductionDispatchContextStepService extends BaseStepService imp deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PROD_RULE_DATA_CONTEXT); } + //获取生产线的当前班组班次信息 + @Override + public MesProdShiftContext getMesProdShiftKvBean(String orgainzeCode, String workCenterCode) { + List stationKvBeans = getProdShiftDataContext(orgainzeCode, workCenterCode); + + MesProdShiftContext mesProdShiftContext = new MesProdShiftContext(); + if (CollectionUtils.isEmpty(stationKvBeans)) { + return null; + } + StationKvBean shiftGroupKvBean = stationKvBeans.stream().filter(stationKvBean -> Objects.equal(stationKvBean.getKey(), "shiftGroup")).findFirst().orElse(null); + StationKvBean shiftCodeKvBean = stationKvBeans.stream().filter(stationKvBean -> Objects.equal(stationKvBean.getKey(), "shiftCode")).findFirst().orElse(null); + + mesProdShiftContext.setShiftCode(shiftGroupKvBean == null ? null : shiftGroupKvBean.getValue()); + mesProdShiftContext.setShiftGroup(shiftCodeKvBean == null ? null : shiftCodeKvBean.getValue()); + return mesProdShiftContext; + } + //获取上下文班次班组信息 @Override public List getProdShiftDataContext(String orgainzeCode, String workCenterCode) { @@ -464,6 +481,42 @@ public class MesProductionDispatchContextStepService extends BaseStepService imp deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PRODUCTION_STATISTICS_CONTEXT); } + //获取手动选择的腔数及工单信息上下文 + @Override + public String getFunctionChooseCavityOrderContext(StationRequestBean reqBean) { + return getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.FUNCTION_CHOOSE_CAVITY_ORDER); + } + + //保存手动选择的腔数及工单信息上下文 腔数=工单个数 数据格式: 腔数;工单1;工单2;工单3 + @Override + public Boolean saveFunctionChooseCavityOrderContext(StationRequestBean reqBean, String value) { + if (StringUtils.isEmpty(value)) return false; + return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.FUNCTION_CHOOSE_CAVITY_ORDER, value); + } + + //删除手动选择的腔数及工单信息上下文 + @Override + public void deleteFunctionChooseCavityOrderContext(StationRequestBean reqBean) { + deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.FUNCTION_CHOOSE_CAVITY_ORDER); + } + + @Override + public List getMesRawPartChargingDataContext(StationRequestBean reqBean) { + String mesRawPartChargingDataJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), "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)); + } + + @Override + public void deleteMesRawPartChargingDataContext(StationRequestBean reqBean) { + deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), "RAW_PART_CHARGING_DATA_CONTEXT"); + } + @@ -503,36 +556,5 @@ public class MesProductionDispatchContextStepService extends BaseStepService imp deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), "OUT_PRODUCE_SN_DATA_CONTEXT"); } - @Override - public List getMesRawPartChargingDataContext(StationRequestBean reqBean) { - String mesRawPartChargingDataJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), "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)); - } - - @Override - public void deleteMesRawPartChargingDataContext(StationRequestBean reqBean) { - deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), "RAW_PART_CHARGING_DATA_CONTEXT"); - } - - @Override - public MesProdShiftContext getMesProdShiftKvBean(String orgainzeCode, String workCenterCode) { - List stationKvBeans = getProdShiftDataContext(orgainzeCode, workCenterCode); - - MesProdShiftContext mesProdShiftContext = new MesProdShiftContext(); - if (CollectionUtils.isEmpty(stationKvBeans)) { - return null; - } - StationKvBean shiftGroupKvBean = stationKvBeans.stream().filter(stationKvBean -> Objects.equal(stationKvBean.getKey(), "shiftGroup")).findFirst().orElse(null); - StationKvBean shiftCodeKvBean = stationKvBeans.stream().filter(stationKvBean -> Objects.equal(stationKvBean.getKey(), "shiftCode")).findFirst().orElse(null); - mesProdShiftContext.setShiftCode(shiftGroupKvBean == null ? null : shiftGroupKvBean.getValue()); - mesProdShiftContext.setShiftGroup(shiftCodeKvBean == null ? null : shiftCodeKvBean.getValue()); - return mesProdShiftContext; - } } 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 203e6fa..bbddfab 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 @@ -54,6 +54,9 @@ public class MesProductionProcessContextStepService extends BaseStepService impl return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.BASE_DATA_CONTEXT, JSONObject.toJSONString(productionProcessContext)); } + @Override + public void deleteProductionProcessContext(StationRequestBean reqBean) { deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.BASE_DATA_CONTEXT); } + //获取生产过程上下文对象 @Override public MesProductionProcessContext getProductionProcessContext(StationRequestBean reqBean) { 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 ba3e600..cf3284e 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 @@ -48,6 +48,8 @@ public class MesPcnExtConstWords { public static final String MODIFY_USER = "modifyUser"; // 修改人 public static final String USER_INFO = "userInfo"; + // 同步标志 + public static final String SYSTEM_SYNC_STATUS = "systemSyncStatus"; // 零件编码 public static final String PART_NO = "partNo"; // 零件名称 @@ -112,6 +114,8 @@ public class MesPcnExtConstWords { public static final String PRODUCT_SN = "productSn"; // 客户条码 public static final String CUST_SN = "custSn"; + // 条码状态 + public static final String SN_STATUS = "snStatus"; //设备数据变量读写访问配置 @@ -151,14 +155,18 @@ public class MesPcnExtConstWords { // 工位/工步 参数按钮事件值 public static final String FUNCTION_VALUE = "FUNCTION_VALUE"; - // 工位参数按钮事件: 跳过工序 + // 工位参数按钮事件参数: 是否验证密码 + public static final String IS_CHECK_WCPC_PWD = "IS_CHECK_WCPC_PWD"; + // 工位参数按钮事件参数: 是否二次确认 + public static final String IS_CONFIRM = "IS_CONFIRM"; + // 工位参数按钮事件: 重置工序 public static final String FUNCTION_JUMP_PROCESS = "FUNCTION_JUMP_PROCESS"; - // 工位参数按钮事件: 强过状态点(工步集) + // 工位参数按钮事件: 强过工步集 public static final String FUNCTION_JUMP_STATE = "FUNCTION_JUMP_STATE"; - // 工位参数按钮事件: 重置工位上下文 + // 工位参数按钮事件: 重置上下文 public static final String FUNCTION_RESET_CELL_CONTEXT = "FUNCTION_RESET_CELL_CONTEXT"; - // 工位参数按钮事件: 选择工单 - public static final String FUNCTION_CHOOSE_WORK_ORDER = "FUNCTION_CHOOSE_WORK_ORDER"; + // 工位参数按钮事件: 选择工单(先选腔数, 再选工单) + public static final String FUNCTION_CHOOSE_CAVITY_ORDER = "FUNCTION_CHOOSE_CAVITY_ORDER"; // 工位参数按钮事件: 切换工位 public static final String FUNCTION_SWITCH_CELL = "FUNCTION_SWITCH_CELL"; @@ -177,6 +185,8 @@ public class MesPcnExtConstWords { public static final String EMPTY = ""; // ; public static final String SEMICOLON = ";"; + // , + public static final String comma = ","; // 定制页面名称(默认) public static final String CUSTOM_PAGE_NAME_DEFAULT = "CUSTOM_PAGE_NAME_DEFAULT"; @@ -238,7 +248,6 @@ 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 From b41d8c0c5eb8c4c188847a88f8bf355b5eef4957 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, 9 Jun 2024 13:47:19 +0800 Subject: [PATCH 05/14] =?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 --- .../station/MesProductionNoSortModuleService.java | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionNoSortModuleService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionNoSortModuleService.java index 1f66007..a9fa869 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionNoSortModuleService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionNoSortModuleService.java @@ -75,15 +75,14 @@ public class MesProductionNoSortModuleService extends BaseModuleService { StationResultBean resultBean = getStationResultBean(reqBean, moduleContentContext, prodShiftDataContext); this.sendMessage(reqBean, resultBean); - // 整合班次加工数量 - if (mesWorkCell.getIsShowMsg() != null && Objects.equal(MesExtEnumUtil.WORK_FILE_TYPE.HISTOGRAM.getValue(),mesWorkCell.getIsShowMsg())) { - List productionStatisticsContext = mesProductionDispatchContextStepService.getProductionStatisticsContext(reqBean); - if (CollectionUtils.isEmpty(productionStatisticsContext)) { - StationKvBeanUtil.addStationKvBeanList(new ArrayList<>(), new StationKvBean(new StringJoiner(MesPcnExtConstWords.AND).add(mesProdShiftKvBean.getShiftGroup()).add(mesProdShiftKvBean.getShiftCode()).toString(), "加工次数", "0")); - } - StationResultBean shiftCountBean = getStationResultBean(reqBean, productionStatisticsContext,mesWorkCell); - this.sendMessage(reqBean, shiftCountBean); + // 整合班次加工数量 + List productionStatisticsContext = mesProductionDispatchContextStepService.getProductionStatisticsContext(reqBean); + if (CollectionUtils.isEmpty(productionStatisticsContext)) { + productionStatisticsContext = StationKvBeanUtil.addStationKvBeanList(new ArrayList<>(), new StationKvBean(new StringJoiner(MesPcnExtConstWords.AND).add(mesProdShiftKvBean.getShiftGroup()).add(mesProdShiftKvBean.getShiftCode()).toString(), "加工次数", "0")); } + StationResultBean shiftCountBean = getStationResultBean(reqBean, productionStatisticsContext,mesWorkCell); + this.sendMessage(reqBean, shiftCountBean); + From 120a232840bb05d295d5ee86755ce0d1d58964bc 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, 9 Jun 2024 14:58:46 +0800 Subject: [PATCH 06/14] =?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/controller/busi/MesWorkCenterController.java | 2 +- .../pcn/apiservice/controller/busi/MesWorkOrderController.java | 6 +++++- .../pcn/apiservice/serviceimpl/busi/MesWorkOrderService.java | 10 +++++++--- .../serviceimpl/step/MesMaterialReadStepService.java | 2 +- 4 files changed, 14 insertions(+), 6 deletions(-) diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesWorkCenterController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesWorkCenterController.java index 145af3c..0309adf 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesWorkCenterController.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesWorkCenterController.java @@ -39,7 +39,7 @@ public class MesWorkCenterController { try { - return ResultBean.success("查询成功").setResultList(workCenterService.queryMesWorkCenterList(workCenter)); + return ResultBean.success("查询DefectActionService成功").setResultList(workCenterService.queryMesWorkCenterList(workCenter)); } catch (ImppBusiException imppException) { return ResultBean.fail(imppException); } catch (Exception e) { diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesWorkOrderController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesWorkOrderController.java index e5e5199..7422395 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesWorkOrderController.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesWorkOrderController.java @@ -3,9 +3,11 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.controller.busi; import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesWorkOrderService; import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant; import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.enumutil.MesEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.ResourceEnumUtil; import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import cn.estsh.impp.framework.boot.exception.ImppBusiException; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import cn.estsh.impp.framework.boot.util.ResultBean; @@ -15,7 +17,10 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; /** * @Description : @@ -52,7 +57,6 @@ public class MesWorkOrderController { public ResultBean queryWorkOrderByPager(MesWorkOrder workOrder, Pager pager) { try { - return ResultBean.success("查询成功").setListPager(workOrderService.queryMesWorkOrderListByPager(workOrder, pager)); } catch (ImppBusiException imppException) { return ResultBean.fail(imppException); 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 dcaf9d8..4948bb4 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 @@ -22,6 +22,7 @@ import org.springframework.util.StringUtils; import java.util.*; import java.util.stream.Collectors; +import java.util.stream.Stream; /** * @Description : @@ -85,7 +86,10 @@ public class MesWorkOrderService implements IMesWorkOrderService { } private DdlPackBean getDdlPackBean(MesWorkOrder workOrder) { - + List list = Stream.of(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue(), MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()).collect(Collectors.toList()); + if (CollectionUtils.isEmpty(workOrder.getStatusList())) { + workOrder.setStatusList(list); + } DdlPackBean packBean = DdlPackBean.getDdlPackBean(workOrder.getOrganizeCode()); DdlPreparedPack.getStringLikerPack(workOrder.getWorkCenterCode(), "workCenterCode", packBean); DdlPreparedPack.getStringLikerPack(workOrder.getWorkCellCode(), "workCellCode", packBean); @@ -102,7 +106,7 @@ public class MesWorkOrderService implements IMesWorkOrderService { Map mesPartMap = new HashMap<>(); MesPart mesPart = null; //查询工单状态 - Integer[] orderStatus =new Integer[]{MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue(),MesExtEnumUtil.ORDER_STATUS.process.getValue()}; + Integer[] orderStatus =new Integer[]{MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue(),MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()}; for (Map.Entry> mesProduceSn : mesWorkOrderMap.entrySet()) { List mesWorkOrderList = mesProduceSn.getValue(); //获取物料信息 @@ -165,7 +169,7 @@ public class MesWorkOrderService implements IMesWorkOrderService { } else if (Objects.equals(oldMesWorkOrder.getReportedQty(), oldMesWorkOrder.getQty())) { oldMesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue()); } else { - oldMesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.process.getValue()); + oldMesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()); } ConvertBean.serviceModelUpdate(oldMesWorkOrder,userName); workOrderRepository.update(oldMesWorkOrder); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesMaterialReadStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesMaterialReadStepService.java index f71167b..b9b48ad 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesMaterialReadStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesMaterialReadStepService.java @@ -33,7 +33,7 @@ import java.util.Optional; /** * @Description : 从料桶中获取原材料 - * @Author : wangjie + * @Author : zxw **/ @Slf4j @Service("mesMaterialReadStepService") From c61c9cf2e2f160adce11c537bff784926239b349 Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Sun, 9 Jun 2024 15:21:55 +0800 Subject: [PATCH 07/14] step --- ...esEquipVariableCfgRuleMatchDispatchService.java | 1 + .../step/MesEquipByPassReadStepService.java | 112 +++++++++++++++++++++ .../mes/pcn/pojo/context/MesCellEquipContext.java | 6 -- 3 files changed, 113 insertions(+), 6 deletions(-) create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesEquipByPassReadStepService.java diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/MesEquipVariableCfgRuleMatchDispatchService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/MesEquipVariableCfgRuleMatchDispatchService.java index ef58a84..4f8e777 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/MesEquipVariableCfgRuleMatchDispatchService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/MesEquipVariableCfgRuleMatchDispatchService.java @@ -31,6 +31,7 @@ public class MesEquipVariableCfgRuleMatchDispatchService implements IMesEquipVar case PRODUCT_SCRAP: case PRODUCT_SUSPICIOUS: case READY_SIGNAL: + case BYPASS: return matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, variableCategory, collectContextList, "mesEvcRuleMatchCompareValueService"); case FIRST_MOULD_NO: case MOULD_NO: diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesEquipByPassReadStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesEquipByPassReadStepService.java new file mode 100644 index 0000000..eb909c4 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesEquipByPassReadStepService.java @@ -0,0 +1,112 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipVariableCfgRuleMatchDispatchService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipmentLogExtService; +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.MesCellEquipContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipLogDispatchContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext; +import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; +import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; +import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable; +import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg; +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 com.alibaba.fastjson.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; + +import java.util.List; + +/** + * @Description : 读BYPASS信号工步 + * @Author : wangjie + **/ +@Slf4j +@Service("mesEquipByPassReadStepService") +public class MesEquipByPassReadStepService extends BaseStepService { + + @Autowired + private IMesProductionProcessContextStepService productionProcessContextStepService; + + @Autowired + private IMesProductionDispatchContextStepService productionDispatchContextStepService; + + @Autowired + private IMesEquipmentLogExtService equipmentLogExtService; + + @Autowired + private IMesEquipVariableCfgRuleMatchDispatchService equipVariableCfgRuleMatchService; + + @Override + public StepResult execute(StationRequestBean reqBean) { + + StationResultBean resultBean = new StationResultBean(); + + StepResult stepResult = StepResult.getSuccessComplete(); + + //获取上下文信息 + MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getProductionProcessContext(reqBean); + + if (productionProcessContext.getSuccess()) return stepResult.isCompleted(false); + + //当前工位使用的设备 + MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip(); + + if (null == cellEquipContext || StringUtils.isEmpty(cellEquipContext.getCtrlByPass())) return stepResult.isCompleted(false); + + //获取生产过程上下文对象有异常信息 + if (!productionProcessContextStepService.getEquipmentVariableCfgList(productionProcessContext).getSuccess()) return stepResult.isCompleted(false).msg(productionProcessContext.getMessage()); + + //从上下文的设备数据变量接口逻辑对象集合中取出当前设备信息的逻辑类型对应的接口逻辑对象集合 + List equipmentVariableCfgList = productionProcessContext.getEquipVariableCfgListByVct(); + + //根据变量类别[就绪信号]搜集设备数据变量接口逻辑信息 + equipmentVariableCfgList = productionProcessContextStepService.collectEquipmentVariableCfgList(equipmentVariableCfgList, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.BYPASS.getValue()); + + //配置错误 + if (!productionProcessContextStepService.checkNecessaryEquipmentVariableCfgAndValue(productionProcessContext, cellEquipContext, equipmentVariableCfgList, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.BYPASS.getValue()).getSuccess()) + return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, productionProcessContext.getMessage()); + + //搜集设备数据变量接口逻辑信息中的二级变量 + List categoryLevelTwoList = productionProcessContextStepService.collectCategoryLevelTwoList(equipmentVariableCfgList); + + //根据变量类型与二级变量获取设备数据变量信息 + List equipmentVariableList = productionProcessContextStepService.findEquipmentVariableList(productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getValue(), categoryLevelTwoList); + + //配置错误 + if (!productionProcessContextStepService.checkIsEmptyEquipmentVariableList(productionProcessContext, cellEquipContext, equipmentVariableList, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION, categoryLevelTwoList).getSuccess()) + return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, productionProcessContext.getMessage()); + + //获取设备LOG采集数据 + MesEquipLogDispatchContext equipLogDispatchContext = equipmentLogExtService.doHandleEquipmentLogList(cellEquipContext, equipmentVariableList, equipmentVariableCfgList); + this.sendMessage(reqBean, resultBean, JSONObject.toJSONString(equipLogDispatchContext), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); + + //匹配BYPASS有效性 + return matchByPassValid(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext, equipLogDispatchContext); + + } + + private StepResult matchByPassValid(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, + MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, MesEquipLogDispatchContext equipLogDispatchContext) { + //未采集到数据 + if (!equipLogDispatchContext.getIsCollectValue()) return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, false, + MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, String.format("当前未读取到设备[%s]BYPASS信号,持续监听中...", cellEquipContext.getEquipmentCode())); + + //匹配BYPASS信号有效性 + Boolean result = (Boolean) equipVariableCfgRuleMatchService.matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.BYPASS.getValue(), equipLogDispatchContext.getEquipVariableCfgCollectContextList()); + + //发送BYPASS信号给客户端 + this.sendMessage(reqBean, resultBean.busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.BYPASS_MODULE.getValue()).dataType(MesPcnEnumUtil.STATION_DATA_TYPE.COLOR.getValue()).resultObj(result ? MesExtEnumUtil.COLOR.GREEN.getValue() : MesExtEnumUtil.COLOR.RED.getValue())); + + return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, + true, MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, String.format("当前已读取到设备[%s]BYSS信号[%s]!", cellEquipContext.getEquipmentCode(), resultBean.getResultObj())); + + } + +} diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesCellEquipContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesCellEquipContext.java index 510a089..e5de13e 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesCellEquipContext.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesCellEquipContext.java @@ -47,12 +47,6 @@ public class MesCellEquipContext implements Serializable { @ApiParam("是否控制byPass") private Integer ctrlByPass; - @ApiParam("是否监控停机") - private Integer monitorDown; - - @ApiParam("是否监控停机") - private String monitorDownTime; - @ApiParam("设备质量") private Integer quality = MesExtEnumUtil.EQUIP_LOG_QUALITY.QUALITY.getValue(); From 182ec47820f6f5b49186e96cf6d5a07691c3b358 Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Sun, 9 Jun 2024 16:43:45 +0800 Subject: [PATCH 08/14] pcn --- .../apiservice/serviceimpl/busi/MesWorkOrderService.java | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) 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 4948bb4..684e36a 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 @@ -86,15 +86,20 @@ public class MesWorkOrderService implements IMesWorkOrderService { } private DdlPackBean getDdlPackBean(MesWorkOrder workOrder) { - List list = Stream.of(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue(), MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue()).collect(Collectors.toList()); - if (CollectionUtils.isEmpty(workOrder.getStatusList())) { - workOrder.setStatusList(list); - } + DdlPackBean packBean = DdlPackBean.getDdlPackBean(workOrder.getOrganizeCode()); DdlPreparedPack.getStringLikerPack(workOrder.getWorkCenterCode(), "workCenterCode", packBean); DdlPreparedPack.getStringLikerPack(workOrder.getWorkCellCode(), "workCellCode", packBean); DdlPreparedPack.getStringLikerPack(workOrder.getWorkOrderNo(), "workOrderNo", packBean); - DdlPreparedPack.getInPackList(workOrder.getStatusList(), "status", packBean); + + if (!StringUtils.isEmpty(workOrder.getWorkOrderStatus())) DdlPreparedPack.getNumEqualPack(workOrder.getStatusList(), "workOrderStatus", packBean); + else DdlPreparedPack.getInPackList(Stream.of(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue(), MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()).collect(Collectors.toList()), "workOrderStatus", packBean); + + DdlPreparedPack.getStringBiggerPack(workOrder.getStartTimeStart(), "planStartTime", packBean); + DdlPreparedPack.getStringSmallerPack(workOrder.getStartTimeEnd(), "planStartTime", packBean); + DdlPreparedPack.getStringBiggerPack(workOrder.getEndTimeStart(), "planEndTime", packBean); + DdlPreparedPack.getStringSmallerPack(workOrder.getEndTimeEnd(), "planEndTime", packBean); + return packBean; } From b49d55575b8d6ae7f1948456452b1833c5661800 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, 9 Jun 2024 16:49:01 +0800 Subject: [PATCH 09/14] =?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 --- .../station/MesProductionNoSortModuleService.java | 5 +++-- .../serviceimpl/step/MesMaterialReadStepService.java | 5 ++++- .../step/MesProductionReocrdGenerateStepService.java | 13 +++++++++---- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionNoSortModuleService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionNoSortModuleService.java index a9fa869..58e1568 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionNoSortModuleService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/MesProductionNoSortModuleService.java @@ -123,11 +123,12 @@ public class MesProductionNoSortModuleService extends BaseModuleService { dataType = MesPcnEnumUtil.STATION_DATA_TYPE.IMAGE.getValue(); reqJson.put("url", url); resultBean.setResultObj(reqJson); - } else { + } + + if (Objects.equal(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(),mesWorkCell.getIsCountFinish())) { dataType = MesPcnEnumUtil.STATION_DATA_TYPE.TEXT.getValue(); resultBean.setResultList(productionStatisticsContext); } - resultBean.setDataType(dataType); resultBean.setCustomPageName(MesPcnExtConstWords.CUSTOM_PAGE_NAME_WORK_CELL); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesMaterialReadStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesMaterialReadStepService.java index b9b48ad..b710086 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesMaterialReadStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesMaterialReadStepService.java @@ -99,6 +99,9 @@ public class MesMaterialReadStepService extends BaseStepService { * @return */ private List getListByParentDetailId(Long id){ + if (id == null) { + return null; + } List list = new ArrayList<>(); DdlPackBean packBean = DdlPackBean.getDdlPackBean(); @@ -111,7 +114,7 @@ public class MesMaterialReadStepService extends BaseStepService { for (MesRawPartCharging mesRawPartCharging : parentList) { List chilrenList = getListByParentDetailId(mesRawPartCharging.getPackageDetailId()); if (CollectionUtils.isEmpty(chilrenList)) { - list.addAll(parentList); + list.add(mesRawPartCharging); } } return list; diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionReocrdGenerateStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionReocrdGenerateStepService.java index 996cb9a..e45d428 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionReocrdGenerateStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionReocrdGenerateStepService.java @@ -2,6 +2,7 @@ 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.MesCellEquipContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCollectContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProdShiftContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext; @@ -9,6 +10,7 @@ import cn.estsh.i3plus.mes.pcn.api.iservice.busi.ISyncFuncService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.pojo.base.codemaker.SnowflakeIdMaker; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.MesEnumUtil; import cn.estsh.i3plus.pojo.mes.bean.MesPart; import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn; @@ -22,6 +24,7 @@ import cn.estsh.i3plus.pojo.mes.repository.MesProduceSnRepository; import cn.estsh.i3plus.pojo.mes.repository.MesProductionRecordRepository; import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import cn.hutool.core.date.DateUtil; +import com.google.common.base.Objects; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -59,6 +62,8 @@ public class MesProductionReocrdGenerateStepService extends BaseStepService { public StepResult execute(StationRequestBean reqBean) { MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getEquipmentVariableList(reqBean, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getValue()); + MesWorkCell mesWorkCell = productionProcessContext.getWorkCell(); + List mesProduceSns = mesProductionDispatchContextStepService.getOutProduceSnDataContext(reqBean); List mesProductionRecords = new ArrayList<>(); @@ -70,10 +75,10 @@ public class MesProductionReocrdGenerateStepService extends BaseStepService { }); mesProductionRecordRepository.saveAll(mesProductionRecords); - - MesProdShiftContext mesProdShiftKvBean = mesProductionDispatchContextStepService.getMesProdShiftKvBean(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode()); - // 保存班次加工数量上下文 - mesProductionDispatchContextStepService.addProductionStatisticsContext(reqBean,mesProduceSns.size()); + if (Objects.equal(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(),mesWorkCell.getIsCountFinish())) { + // 保存班次加工数量上下文 + mesProductionDispatchContextStepService.addProductionStatisticsContext(reqBean,mesProduceSns.size()); + } return StepResult.getSuccessComplete(); } From 104bd117bb21495e0c75b28449687e2c9f21a298 Mon Sep 17 00:00:00 2001 From: jun Date: Sun, 9 Jun 2024 18:39:20 +0800 Subject: [PATCH 10/14] =?UTF-8?q?=E8=A3=85=E7=AE=B1=E9=98=B2=E9=94=99?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/busi/IMesBoxingErrorProofingService.java | 38 ++ .../busi/MesBoxingErrorProofingController.java | 145 +++++++ .../busi/MesBoxingErrorProofingService.java | 417 +++++++++++++++++++++ .../mes/pcn/pojo/constant/MesCommonConstant.java | 2 + 4 files changed, 602 insertions(+) create mode 100644 modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesBoxingErrorProofingService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesBoxingErrorProofingController.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesBoxingErrorProofingService.java diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesBoxingErrorProofingService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesBoxingErrorProofingService.java new file mode 100644 index 0000000..1e5da3b --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesBoxingErrorProofingService.java @@ -0,0 +1,38 @@ +package cn.estsh.i3plus.ext.mes.pcn.api.busi; + +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.mes.bean.MesPackage; +import cn.estsh.i3plus.pojo.mes.bean.MesPackageDetail; +import io.swagger.annotations.ApiOperation; + +import java.util.List; + +/** + * @Description : MES装箱防错 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/6/7 14:34 + * @Modify: + **/ +public interface IMesBoxingErrorProofingService { + + + @ApiOperation(value = "查询包装明细") + ListPager queryMesPackageDetailByPager(MesPackage mesPackage, Pager pager); + + @ApiOperation(value = "扫描") + MesPackage doScan(MesPackageDetail mesPackageDetail); + + @ApiOperation(value = "保存包装明细") + void saveMesPackageDetails(List mesPackage, String userName); + + @ApiOperation(value = "更新包装表") + void updateMesPackage(MesPackage mesPackage); + + @ApiOperation(value = "更新包装明细") + void updateMesPackageDetails(MesPackageDetail mesPackage); + + @ApiOperation(value = "解锁") + void unLock(String organizeCode, String userName, String pwd); +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesBoxingErrorProofingController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesBoxingErrorProofingController.java new file mode 100644 index 0000000..53d2e76 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesBoxingErrorProofingController.java @@ -0,0 +1,145 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.controller.busi; + + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesBoxingErrorProofingService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.mes.bean.MesPackage; +import cn.estsh.i3plus.pojo.mes.bean.MesPackageDetail; +import cn.estsh.impp.framework.boot.auth.AuthUtil; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.util.ResultBean; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@Api(tags = "装箱防错") +@RequestMapping(MesCommonConstant.MES_YANFEN + "/boxing-error-proofing") +@Slf4j +public class MesBoxingErrorProofingController { + + @Autowired + private IMesBoxingErrorProofingService mesBoxingErrorProofingService; + + + @GetMapping("/mes-package-details/query") + @ApiOperation(value = "查询包装明细") + public ResultBean queryMesPackageDetailByPager(MesPackage mesPackage, Pager pager) { + + try { + ValidatorBean.checkNotNull(mesPackage.getPackageNo(), "箱条码不能为空"); + + mesPackage.setOrganizeCode(AuthUtil.getOrganizeCode()); + ListPager partInspectionListPager = mesBoxingErrorProofingService.queryMesPackageDetailByPager(mesPackage, pager); + return ResultBean.success("查询成功").setListPager(partInspectionListPager); + } catch (ImppBusiException imppException) { + return ResultBean.fail(imppException); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @GetMapping("/do-scan") + @ApiOperation(value = "扫描") + public ResultBean doScan(MesPackageDetail mesPackageDetail) { + + try { + ValidatorBean.checkNotNull(mesPackageDetail.getPackageNo(), "箱条码不能为空"); + + mesPackageDetail.setOrganizeCode(AuthUtil.getOrganizeCode()); + ConvertBean.serviceModelInitialize(mesPackageDetail, AuthUtil.getSessionUser().getUserName()); + MesPackage mesPackage = mesBoxingErrorProofingService.doScan(mesPackageDetail); + return ResultBean.success("扫描成功").setResultObject(mesPackage); + } catch (ImppBusiException imppException) { + return ResultBean.fail(imppException); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + + @PostMapping("/mes-package-details/saveAll") + @ApiOperation(value = "保存包装明细") + public ResultBean saveMesPackageDetails(@RequestBody List mesPackageDetailList) { + try { + //属性校验 + mesPackageDetailList.forEach(mesPackageDetail -> { + ValidatorBean.checkNotNull(mesPackageDetail.getPackageNo(), "箱条码不能为空"); + }); + String userName = AuthUtil.getSessionUser().getUserName(); + mesBoxingErrorProofingService.saveMesPackageDetails(mesPackageDetailList, userName); + return ResultBean.success("保存成功"); + } catch (ImppBusiException imppException) { + return ResultBean.fail(imppException); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @PutMapping("/mes-package/update") + @ApiOperation(value = "更新包装表") + public ResultBean updateMesPackage(MesPackage mesPackage) { + + try { + //属性校验 + ValidatorBean.checkNotNull(mesPackage.getPackageNo(), "箱条码不能为空"); + ValidatorBean.checkNotNull(mesPackage.getIsSealed(), "是否封箱不能为空"); + + mesPackage.setOrganizeCode(AuthUtil.getOrganizeCode()); + ConvertBean.serviceModelUpdate(mesPackage, AuthUtil.getSessionUser().getUserName()); + mesBoxingErrorProofingService.updateMesPackage(mesPackage); + return ResultBean.success("保存成功"); + } catch (ImppBusiException imppException) { + return ResultBean.fail(imppException); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @PutMapping("/mes-package-details/update") + @ApiOperation(value = "更新包装明细") + public ResultBean updateMesPackageDetails(MesPackageDetail mesPackage) { + + try { + //属性校验 + ValidatorBean.checkNotNull(mesPackage.getPackageNo(), "箱条码不能为空"); + ValidatorBean.checkNotNull(mesPackage.getSerialNumber(), "替换条码不能为空"); + ValidatorBean.checkNotNull(mesPackage.getOldSerialNumber(), "替换源条码不能为空"); + + ConvertBean.serviceModelUpdate(mesPackage, AuthUtil.getSessionUser().getUserName()); + mesBoxingErrorProofingService.updateMesPackageDetails(mesPackage); + return ResultBean.success("保存成功"); + } catch (ImppBusiException imppException) { + return ResultBean.fail(imppException); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @GetMapping("/unLock") + @ApiOperation(value = "解锁") + public ResultBean unLock(String pwd) { + try { + //属性校验 + ValidatorBean.checkNotNull(pwd, "密码不能为空"); + + mesBoxingErrorProofingService.unLock(AuthUtil.getOrganizeCode(), AuthUtil.getSessionUser().getUserName(), pwd); + return ResultBean.success("解锁成功"); + } catch (ImppBusiException imppException) { + return ResultBean.fail(imppException); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesBoxingErrorProofingService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesBoxingErrorProofingService.java new file mode 100644 index 0000000..2e35c9f --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesBoxingErrorProofingService.java @@ -0,0 +1,417 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi; + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesBoxingErrorProofingService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesConfigService; +import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException; +import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.platform.common.convert.ConvertBean; +import cn.estsh.i3plus.platform.common.tool.CheckTool; +import cn.estsh.i3plus.platform.common.tool.MathOperation; +import cn.estsh.i3plus.platform.common.tool.TimeTool; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.bean.ListPager; +import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.base.common.PagerHelper; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.*; +import cn.estsh.i3plus.pojo.mes.repository.*; +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.Objects; +import java.util.stream.Collectors; + +/** + * @Description : MES装箱防错 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/6/7 14:33 + * @Modify: + **/ +@Service +@Slf4j +public class MesBoxingErrorProofingService implements IMesBoxingErrorProofingService { + + @Autowired + private MesPackageRepository mesPackageRDao; + + @Autowired + private MesPartRepository partRDao; + + @Autowired + private MesPackingDefineRepository mesPackingDefineRDao; + + @Autowired + private MesPackingDefineDetailsRepository mesPackingDefineDetailsRDao; + + @Autowired + private MesPackageDetailRepository mesPackageDetailRDao; + + @Autowired + private IMesConfigService configService; + + @Autowired + private MesPackageResultRepository mesPackageResultRDao; + + @Override + public ListPager queryMesPackageDetailByPager(MesPackage mesPackage, Pager pager) { + + DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesPackage.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(mesPackage.getPackageNo(), "packageNo", packBean); + pager = PagerHelper.getPager(pager, mesPackageDetailRDao.findByHqlWhereCount(packBean)); + List resultList = mesPackageDetailRDao.findByHqlWherePage(packBean, pager); + return new ListPager<>(resultList, pager); + } + + @Override + public MesPackage doScan(MesPackageDetail mesPackageDetail) { + //扫描的是包装 + if (mesPackageDetail.getIsScanPackageBoolean()) { + checkNotNull(mesPackageDetail); + MesPackage mesPackage = getMesPackage(mesPackageDetail.getOrganizeCode(), mesPackageDetail.getPackageNo()); + if (Objects.nonNull(mesPackage)) { + return mesPackage; + } + //获取包装定义 + MesPackingDefine packingDefine = getMesPackingDefine(mesPackageDetail); + //解析获取信息保存 + if (StringUtils.isEmpty(packingDefine.getSplitChar())) { + MesPcnException.throwMesBusiException("箱类别代号【%s】分隔符不能为空", packingDefine.getPackCode()); + } + String[] split = mesPackageDetail.getPackageNo().split("\\" + packingDefine.getSplitChar()); + //获取序列号 + checkSerial(packingDefine, split); + //工厂校验 + checkOrganizeCode(mesPackageDetail, packingDefine, split); + //获取物料信息是否存在 + MesPart mesPart = getMesPart(mesPackageDetail, packingDefine, split); + //获取数量信息是否存在 + Double qty = getQty(packingDefine, split); + MesPackage packages = getMesPackage(mesPackageDetail, mesPart, qty, packingDefine); + return mesPackageRDao.insert(packages); + } else { + checkNotNull(mesPackageDetail); + //校验过程条码是否存在 + if (StringUtils.isEmpty(mesPackageDetail.getSerialNumber())) { + MesPcnException.throwMesBusiException("过程条码不允许为空"); + } + //校验包装条码信息 + MesPackage mesPackage = getMesPackageAndCheck(mesPackageDetail.getPackageNo(), mesPackageDetail.getOrganizeCode()); + //校验是否重复扫描 + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(mesPackageDetail.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(mesPackageDetail.getPackageNo(), "packageNo", ddlPackBean); + DdlPreparedPack.getStringEqualPack(mesPackageDetail.getSerialNumber(), "serialNumber", ddlPackBean); + if (mesPackageDetailRDao.isExitByHql(ddlPackBean)) { + MesPcnException.throwMesBusiException("零件条码【%s】已存在该箱,不允许重复扫描", mesPackageDetail.getSerialNumber()); + } + //校验是否已关闭 + if (CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == mesPackage.getIsSealed()) { + MesPcnException.throwMesBusiException("箱条码已封箱,不允许扫描零件条码"); + } + //获取包装定义明细 + ddlPackBean = DdlPackBean.getDdlPackBean(mesPackageDetail.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(mesPackage.getPackageSn(), "packCode", ddlPackBean); + List defineDetails = mesPackingDefineDetailsRDao.findByHqlWhere(ddlPackBean); + if (CollectionUtils.isEmpty(defineDetails)) { + MesPcnException.throwMesBusiException("箱类别代号【%s】包装定义明细未维护", mesPackage.getPackageSn()); + } + //校验是否包含 + String partNo = getPartNo(mesPackageDetail, mesPackage, defineDetails); + //物料信息 + MesPart mesPart = getPart(mesPackageDetail.getOrganizeCode(), partNo); + //包装规格明细 + MesPackageDetail saveMesPackageDetail = getPackageDetail(mesPackageDetail, mesPart); + if (mesPackageDetail.getIsMemoryBoolean()) { + //保存包装明细 + mesPackageDetailRDao.insert(saveMesPackageDetail); + //更新包装表 + updateMesPackage(mesPackage, mesPackageDetail.getModifyUser(), 1d, false); + } + mesPackage.setMesPackageDetail(saveMesPackageDetail); + return mesPackage; + } + } + + + @Override + public void saveMesPackageDetails(List mesPackageDetailList, String userName) { + MesPackageDetail packageDetail = mesPackageDetailList.iterator().next(); + int qty = mesPackageDetailList.size(); + //校验包装条码信息 + MesPackage mesPackage = getMesPackageAndCheck(packageDetail.getPackageNo(), packageDetail.getOrganizeCode()); + //去掉重复零件条码 + checkSerialNumber(mesPackageDetailList, packageDetail, userName); + //保存包装明细 + mesPackageDetailRDao.saveAll(mesPackageDetailList); + //更新包装表 + updateMesPackage(mesPackage, userName, qty, false); + } + + @Override + public void updateMesPackage(MesPackage mesPackage) { + String userName = mesPackage.getModifyUser(); + if (Objects.isNull(CommonEnumUtil.TRUE_OR_FALSE.valueOfDescription(mesPackage.getIsSealed()))) { + MesPcnException.throwMesBusiException("是否封箱不能为空"); + } + //查询包装条码信息 + MesPackage mesPackageDb = getMesPackageAndCheck(mesPackage.getPackageNo(), mesPackage.getOrganizeCode()); + if (CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == mesPackage.getIsSealed()) { + if (CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == mesPackageDb.getIsSealed()) { + MesPcnException.throwMesBusiException("包装条码【%s】状态为已关箱,请勿重复操作", mesPackage.getPackageNo()); + } + //关箱 + updateMesPackage(mesPackageDb, mesPackage.getModifyUser(), 0d, true); + } else if (CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue() == mesPackage.getIsSealed()) { + if (CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue() == mesPackageDb.getIsSealed()) { + MesPcnException.throwMesBusiException("包装条码【%s】状态不为已关箱,不需要拆箱", mesPackage.getPackageNo()); + } + //拆箱 + unboxing(mesPackage, userName, mesPackageDb); + } + } + + @Override + public void updateMesPackageDetails(MesPackageDetail mesPackageDetail) { + //查询包装条码信息 + MesPackage mesPackageDb = getMesPackageAndCheck(mesPackageDetail.getPackageNo(), mesPackageDetail.getOrganizeCode()); + if (CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue() == mesPackageDb.getIsSealed()) { + MesPcnException.throwMesBusiException("包装条码【%s】不为已关箱状态,不允许操作替换条码", mesPackageDetail.getPackageNo()); + } + //校验是否重复扫描 + List mesPackageDetails = getMesPackageDetailList(mesPackageDetail); + + for (MesPackageDetail packageDetail : mesPackageDetails) { + //替换条码是否已经存在 + if (packageDetail.getSerialNumber().equals(mesPackageDetail.getSerialNumber())) { + MesPcnException.throwMesBusiException("零件条码【%s】已存在存在", mesPackageDetail.getSerialNumber()); + } + //替换条码 + if (packageDetail.getSerialNumber().equals(mesPackageDetail.getOldSerialNumber())) { + packageDetail.setSerialNumber(mesPackageDetail.getSerialNumber()); + packageDetail.setOldSerialNumber(mesPackageDetail.getOldSerialNumber()); + ConvertBean.serviceModelUpdate(packageDetail, mesPackageDetail.getModifyUser()); + } + } + mesPackageDetailRDao.saveAll(mesPackageDetails); + } + + private List getMesPackageDetailList(MesPackageDetail mesPackageDetail) { + String[] serialNumberList = new String[]{mesPackageDetail.getSerialNumber(), mesPackageDetail.getOldSerialNumber()}; + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(mesPackageDetail.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(mesPackageDetail.getPackageNo(), "packageNo", ddlPackBean); + DdlPreparedPack.getInPackArray(serialNumberList, "serialNumber", ddlPackBean); + List mesPackageDetails = mesPackageDetailRDao.findByHqlWhere(ddlPackBean); + if (CollectionUtils.isEmpty(mesPackageDetails)) { + MesPcnException.throwMesBusiException("零件条码【%s】不存在", mesPackageDetail.getOldSerialNumber()); + } + return mesPackageDetails; + } + + @Override + public void unLock(String organizeCode, String userName, String pwd) { + String cfgValue = configService.getCfgValue(organizeCode, MesCommonConstant.BOXING_ERROR_PROOFING_PWD); + if (!Objects.equals(cfgValue, pwd)) { + MesPcnException.throwMesBusiException("解锁失败密码错误"); + } + } + + private void unboxing(MesPackage mesPackage, String userName, MesPackage mesPackageDb) { + //更新包装表 + mesPackageDb.setQty(0d); + mesPackageDb.setIsSealed(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + ConvertBean.serviceModelUpdate(mesPackageDb, userName); + mesPackageRDao.update(mesPackageDb); + + //软删包装明细 + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(mesPackage.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(mesPackage.getPackageNo(), "packageNo", ddlPackBean); + mesPackageDetailRDao.updateByProperties(new String[]{"modifyUser", "modifyDatetime", "isDeleted"}, + new Object[]{userName, TimeTool.getNowTime(true), CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()}, + ddlPackBean); + } + + + private MesPackage getMesPackageAndCheck(String packageNo, String organizeCode) { + MesPackage mesPackageDb = getMesPackage(organizeCode, packageNo); + if (Objects.isNull(mesPackageDb)) { + MesPcnException.throwMesBusiException("包装条码【%s】信息不存在", packageNo); + } + return mesPackageDb; + } + + private void checkSerialNumber(List mesPackageDetailList, MesPackageDetail packageDetail, String userName) { + List mesPackageDetails = getMesPackageDetailList(packageDetail.getOrganizeCode(), packageDetail.getPackageNo()); + if (!CollectionUtils.isEmpty(mesPackageDetails)) { + List serialNumberList = mesPackageDetails.stream().map(MesPackageDetail::getSerialNumber).collect(Collectors.toList()); + for (MesPackageDetail mesPackageDetail : mesPackageDetailList) { + if (serialNumberList.contains(mesPackageDetail.getSerialNumber())) { + mesPackageDetailList.remove(mesPackageDetail); + } + ConvertBean.serviceModelInitialize(mesPackageDetail, userName); + } + } + } + + + private void updateMesPackage(MesPackage mesPackage, String userName, double qty, boolean close) { + mesPackage.setQty(MathOperation.add(mesPackage.getQty(), qty)); + if (mesPackage.getPackSpecQty() <= mesPackage.getQty() || close) { + mesPackage.setIsSealed(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); + mesPackage.setLotNo(TimeTool.getToday()); + //数据写入接口表回传wms + saveMesPackageResult(mesPackage, userName); + } + ConvertBean.serviceModelUpdate(mesPackage, userName); + mesPackageRDao.update(mesPackage); + } + + private void saveMesPackageResult(MesPackage mesPackage, String userName) { + MesPackageResult mesPackageResult; + List mesPackageResultList = new ArrayList<>(); + List mesPackageDetailList = getMesPackageDetailList(mesPackage.getOrganizeCode(), mesPackage.getPackageNo()); + for (MesPackageDetail mesPackageDetail : mesPackageDetailList) { + mesPackageResult = new MesPackageResult(mesPackageDetail, mesPackage.getQty()); + ConvertBean.serviceModelInitialize(mesPackageResult, userName); + mesPackageResultList.add(mesPackageResult); + } + mesPackageResultRDao.saveAll(mesPackageResultList); + } + + private List getMesPackageDetailList(String organizeCode, String packageNo) { + DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(packageNo, "packageNo", ddlPackBean); + List mesPackageDetails = mesPackageDetailRDao.findByHqlWhere(ddlPackBean); + return mesPackageDetails; + } + + private MesPackageDetail getPackageDetail(MesPackageDetail mesPackageDetail, MesPart mesPart) { + MesPackageDetail saveMesPackageDetail = new MesPackageDetail(); + saveMesPackageDetail.setPackageNo(mesPackageDetail.getPackageNo()); + saveMesPackageDetail.setSerialNumber(mesPackageDetail.getSerialNumber()); + saveMesPackageDetail.setPartNo(mesPart.getPartNo()); + saveMesPackageDetail.setPartName(mesPart.getPartName()); + saveMesPackageDetail.setQty(1d); + saveMesPackageDetail.setOrganizeCode(mesPackageDetail.getOrganizeCode()); + ConvertBean.serviceModelInitialize(saveMesPackageDetail, mesPackageDetail.getCreateUser()); + return saveMesPackageDetail; + } + + private String getPartNo(MesPackageDetail mesPackageDetail, MesPackage mesPackage, List defineDetails) { + String packageBarcodeRule; + String partNo = null; + for (MesPackingDefineDetails defineDetail : defineDetails) { + //条码规则为空 + if (StringUtils.isEmpty(defineDetail.getPackageBarcodeRule())) { + MesPcnException.throwMesBusiException("箱类别代号【%s】零件号【%s】条码规则未维护", mesPackage.getPackageSn(), defineDetail.getPartNo()); + } + packageBarcodeRule = defineDetail.getPackageBarcodeRule().replace("*", ""); + //包含箱条码 + if (mesPackageDetail.getSerialNumber().contains(packageBarcodeRule)) { + partNo = defineDetail.getPartNo(); + break; + } + } + if (Objects.isNull(partNo)) { + MesPcnException.throwMesBusiException("零件条码【%s】未匹配到符合条码规则的数据", mesPackage.getSerialNumber()); + } + return partNo; + } + + private void checkNotNull(MesPackageDetail mesPackageDetail) { + if (StringUtils.isEmpty(mesPackageDetail.getPackageNo())) { + MesPcnException.throwMesBusiException("包装编码不能为空"); + } + if (StringUtils.isEmpty(mesPackageDetail.getScanType())) { + MesPcnException.throwMesBusiException("客户条码规则不能为空"); + } + } + + private void checkSerial(MesPackingDefine packingDefine, String[] split) { + if (StringUtils.isEmpty(packingDefine.getSerialIdIndex()) || packingDefine.getSerialIdIndex() > split.length + || StringUtils.isEmpty(split[packingDefine.getSerialIdIndex() - 1])) { + MesPcnException.throwMesBusiException("序列号所在位置不存在"); + } + String serialNo = split[packingDefine.getSerialIdIndex() - 1]; + } + + private void checkOrganizeCode(MesPackageDetail mesPackageDetail, MesPackingDefine packingDefine, String[] split) { + if (StringUtils.isEmpty(packingDefine.getOrganizeIndex()) || packingDefine.getOrganizeIndex() > split.length + || StringUtils.isEmpty(split[packingDefine.getOrganizeIndex() - 1])) { + MesPcnException.throwMesBusiException("工厂所在位置不存在"); + } + String organizeCode = split[packingDefine.getOrganizeIndex() - 1]; + if (!Objects.equals(organizeCode, mesPackageDetail.getOrganizeCode())) { + MesPcnException.throwMesBusiException("箱条码工厂【%s】和当前工厂【%s】不匹配", organizeCode, mesPackageDetail.getOrganizeCode()); + } + } + + private MesPart getMesPart(MesPackageDetail mesPackageDetail, MesPackingDefine packingDefine, String[] split) { + if (StringUtils.isEmpty(packingDefine.getPartNoIndex()) || packingDefine.getPartNoIndex() > split.length + || StringUtils.isEmpty(split[packingDefine.getPartNoIndex() - 1])) { + MesPcnException.throwMesBusiException("物料号所在位置不存在"); + } + MesPart mesPart = getPart(mesPackageDetail.getOrganizeCode(), split[packingDefine.getPartNoIndex() - 1]); + return mesPart; + } + + private MesPart getPart(String organizeCode, String partNo) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(partNo, "partNo", packBean); + MesPart mesPart = partRDao.getByProperty(packBean); + if (Objects.isNull(mesPart)) { + MesPcnException.throwMesBusiException("物料【%s】信息不存在", partNo); + } + return mesPart; + } + + private Double getQty(MesPackingDefine packingDefine, String[] split) { + if (StringUtils.isEmpty(packingDefine.getQtyIndex()) || packingDefine.getQtyIndex() > split.length + || StringUtils.isEmpty(split[packingDefine.getQtyIndex() - 1])) { + MesPcnException.throwMesBusiException("数量所在位置不存在"); + } + //校验是否数字 + if (!CheckTool.isNumber(split[packingDefine.getQtyIndex() - 1])) { + MesPcnException.throwMesBusiException("数量所在位置不为数字类型"); + } + return Double.parseDouble(split[packingDefine.getQtyIndex() - 1]); + } + + private MesPackage getMesPackage(MesPackageDetail mesPackageDetail, MesPart mesPart, Double qty, MesPackingDefine packingDefine) { + //保存包装信息 + MesPackage packages = new MesPackage(); + packages.setPackageNo(mesPackageDetail.getPackageNo()); + packages.setPartNo(mesPart.getPartNo()); + packages.setPartName(mesPart.getPartName()); + packages.setPackSpecQty(qty); + packages.setQty(0d); + packages.setIsSealed(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + packages.setPrintStatus(MesPcnEnumUtil.PACKAGE_PRINT_STATUS.UNPRINTED.getValue()); + packages.setPackageSn(packingDefine.getPackCode()); + packages.setOrganizeCode(mesPackageDetail.getOrganizeCode()); + ConvertBean.serviceModelInitialize(packages, mesPackageDetail.getCreateUser()); + return packages; + } + + private MesPackage getMesPackage(String organizeCode, String packageNo) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getStringEqualPack(packageNo, "packageNo", packBean); + return mesPackageRDao.getByProperty(packBean); + } + + private MesPackingDefine getMesPackingDefine(MesPackageDetail mesPackageDetail) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesPackageDetail.getOrganizeCode()); + DdlPreparedPack.getNumEqualPack(mesPackageDetail.getScanType(), "scanType", packBean); + MesPackingDefine packingDefine = mesPackingDefineRDao.getByProperty(packBean); + if (Objects.isNull(packingDefine)) { + MesPcnException.throwFlowException("客户条码规则在包装定义界面未维护"); + } + return packingDefine; + } +} diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/constant/MesCommonConstant.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/constant/MesCommonConstant.java index 16748bd..be6b998 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/constant/MesCommonConstant.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/constant/MesCommonConstant.java @@ -26,6 +26,8 @@ public class MesCommonConstant { public static final String SPOT_CHECK_ORDER_NO_RULE = "SPOT_CHECK_ORDER_NO_RULE"; //生成重新点检单据号 public static final String SPOT_CHECK_ORDER_NO_COPY_RULE = "SPOT_CHECK_ORDER_NO_COPY_RULE"; + //装箱防错密码 + public static final String BOXING_ERROR_PROOFING_PWD = "BOXING_ERROR_PROOFING_PWD"; } From 1e375521128278a32956df6ec50b0586b92b9822 Mon Sep 17 00:00:00 2001 From: jun Date: Sun, 9 Jun 2024 20:16:19 +0800 Subject: [PATCH 11/14] =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E6=9E=9A=E4=B8=BE?= =?UTF-8?q?=E6=98=8E=E7=BB=86=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mes/pcn/api/busi/IMesEnumDetailService.java | 18 +++++++++ .../controller/busi/MesEnumDetailController.java | 47 ++++++++++++++++++++++ .../serviceimpl/busi/MesEnumDetailServiceImpl.java | 38 +++++++++++++++++ 3 files changed, 103 insertions(+) create mode 100644 modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesEnumDetailService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesEnumDetailController.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesEnumDetailServiceImpl.java diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesEnumDetailService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesEnumDetailService.java new file mode 100644 index 0000000..d8a428a --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesEnumDetailService.java @@ -0,0 +1,18 @@ +package cn.estsh.i3plus.ext.mes.pcn.api.busi; + + +import cn.estsh.i3plus.pojo.mes.bean.MesEnumDetail; + +import java.util.List; + +/** + * @Description : 枚举明细配置 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/6/9 19:18 + * @Modify: + **/ +public interface IMesEnumDetailService{ + + List findMesEnumDetail(MesEnumDetail mesEnumDetail); +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesEnumDetailController.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesEnumDetailController.java new file mode 100644 index 0000000..d2b5d55 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/controller/busi/MesEnumDetailController.java @@ -0,0 +1,47 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.controller.busi; + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEnumDetailService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant; +import cn.estsh.i3plus.pojo.mes.bean.MesEnumDetail; +import cn.estsh.impp.framework.boot.auth.AuthUtil; +import cn.estsh.impp.framework.boot.exception.ImppBusiException; +import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; +import cn.estsh.impp.framework.boot.util.ResultBean; +import cn.estsh.impp.framework.boot.util.ValidatorBean; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * @Description : 枚举明细配置 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/6/9 19:27 + * @Modify: + **/ +@RestController +@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesEnumDetail") +public class MesEnumDetailController { + + @Autowired + private IMesEnumDetailService mesEnumDetailService; + + @GetMapping("/find") + @ApiOperation(value = "查询包装明细") + public ResultBean findMesEnumDetail(MesEnumDetail mesEnumDetail) { + try { + ValidatorBean.checkNotNull(mesEnumDetail.getEnumCode(), "枚举代码不能为空"); + mesEnumDetail.setOrganizeCode(AuthUtil.getOrganizeCode()); + List mesEnumDetailList = mesEnumDetailService.findMesEnumDetail(mesEnumDetail); + return ResultBean.success("查询成功").setResultList(mesEnumDetailList); + } catch (ImppBusiException imppException) { + return ResultBean.fail(imppException); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesEnumDetailServiceImpl.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesEnumDetailServiceImpl.java new file mode 100644 index 0000000..d643f6a --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesEnumDetailServiceImpl.java @@ -0,0 +1,38 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi; + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEnumDetailService; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.MesEnumDetail; +import cn.estsh.i3plus.pojo.mes.repository.MesEnumDetailRepository; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + + +/** + * @Description : 枚举明细配置 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/6/9 19:20 + * @Modify: + **/ +@Service +@Slf4j +public class MesEnumDetailServiceImpl implements IMesEnumDetailService { + + @Autowired + private MesEnumDetailRepository mesEnumDetailRDao; + + @Override + public List findMesEnumDetail(MesEnumDetail mesEnumDetail) { + DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesEnumDetail.getOrganizeCode()); + DdlPreparedPack.getStringEqualPack(mesEnumDetail.getEnumCode(), "enumCode", packBean); + DdlPreparedPack.getStringEqualPack(mesEnumDetail.getDetailCode(), "detailCode", packBean); + DdlPreparedPack.getStringEqualPack(mesEnumDetail.getDetailName(), "detailName", packBean); + DdlPreparedPack.getStringEqualPack(mesEnumDetail.getDetailValue(), "detailValue", packBean); + return mesEnumDetailRDao.findByHqlWhere(packBean); + } +} From 137438361431cf71999cbf9763213109340ba8be Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Sun, 9 Jun 2024 22:32:36 +0800 Subject: [PATCH 12/14] step --- ...va => MesFunctionChooseCavityOrderService.java} | 25 +++++- .../step/MesCountDownShowStepService.java | 95 ++++++++++++++++++++++ .../ext/mes/pcn/pojo/util/MesPcnExtConstWords.java | 9 +- 3 files changed, 126 insertions(+), 3 deletions(-) rename modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/{MesFunctionChooseWorkOrderService.java => MesFunctionChooseCavityOrderService.java} (63%) create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesCountDownShowStepService.java diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionChooseWorkOrderService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionChooseCavityOrderService.java similarity index 63% rename from modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionChooseWorkOrderService.java rename to modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionChooseCavityOrderService.java index 9c75ec7..bcbf1c3 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionChooseWorkOrderService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/station/function/MesFunctionChooseCavityOrderService.java @@ -1,12 +1,16 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.station.function; 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.MesProductionProcessContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseSwsService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.IShippingDispatchService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.function.IFsmModuleFunctionService; import cn.estsh.i3plus.platform.common.util.MesPcnConstWords; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell; import cn.estsh.i3plus.pojo.mes.model.ButtonDynamicModel; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.model.StationResultBean; @@ -18,7 +22,10 @@ import org.springframework.util.StringUtils; * @Description : 工位参数按钮事件接口实现【选择工单】 **/ @Service -public class MesFunctionChooseWorkOrderService extends BaseSwsService implements IFsmModuleFunctionService { +public class MesFunctionChooseCavityOrderService extends BaseSwsService implements IFsmModuleFunctionService { + + @Autowired + private IMesProductionProcessContextStepService productionProcessContextStepService; @Autowired private IMesProductionDispatchContextStepService productionDispatchContextStepService; @@ -29,6 +36,19 @@ public class MesFunctionChooseWorkOrderService extends BaseSwsService implements @Override public boolean doFunction(StationRequestBean reqBean, StationResultBean resultBean, ButtonDynamicModel buttonDynamicModel) { + //获取生产过程上下文对象 + MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getProductionProcessContext(reqBean); + + if (!productionProcessContext.getSuccess()) return false; + + MesWorkCell workCell = productionProcessContext.getWorkCell(); + + if (StringUtils.isEmpty(workCell.getIsAllowOrder()) || CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue() == workCell.getIsAllowOrder()) { + this.sendMessage(reqBean, resultBean.writeDbLog(), String.format("生产线[%s]工位[%s]%s失败,工位未设置允许界面选工单!", + reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), buttonDynamicModel.getButtonName()), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT); + return false; + } + if (!checkCavityOrderIsValid(buttonDynamicModel.getFunctionValue())) { 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.EXP_TEXT); @@ -38,6 +58,9 @@ public class MesFunctionChooseWorkOrderService extends BaseSwsService implements //保存手动选择的腔数及工单信息上下文 productionDispatchContextStepService.saveFunctionChooseCavityOrderContext(reqBean, buttonDynamicModel.getFunctionValue()); + 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); + reqBean.setClientInfo(shippingDispatchService.getActorClientInfo(reqBean)); reqBean.setInterfaceType(MesPcnConstWords.SHIPPING); reqBean.setBusiType(MesPcnConstWords.WS_CMD_DO_SCAN); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesCountDownShowStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesCountDownShowStepService.java new file mode 100644 index 0000000..b7d022a --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesCountDownShowStepService.java @@ -0,0 +1,95 @@ +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.MesProductionProcessContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +import cn.estsh.i3plus.mes.pcn.actor.shipping.dispatch.IFsmCommonService; +import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; +import cn.estsh.i3plus.mes.pcn.util.StationKvBeanUtil; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; +import cn.estsh.i3plus.pojo.mes.bean.MesProdRouteOptParam; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell; +import cn.estsh.i3plus.pojo.mes.model.StationKvBean; +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.StringUtils; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Optional; + +/** + * @Description : 倒计时显示工步 + * @Author : wangjie + **/ +@Slf4j +@Service("mesCountDownShowStepService") +public class MesCountDownShowStepService extends BaseStepService { + + @Autowired + private IMesProductionProcessContextStepService productionProcessContextStepService; + + @Autowired + private IMesProductionDispatchContextStepService productionDispatchContextStepService; + + @Autowired + private IFsmCommonService fsmCommonService; + + @Override + public StepResult execute(StationRequestBean reqBean) { + + StationResultBean resultBean = new StationResultBean(); + + StepResult stepResult = StepResult.getSuccessComplete(); + + //获取工步参数 + Optional> stepParamMap = getStepParams(reqBean); + + //获取上下文信息 + MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getProductionProcessContext(reqBean); + + //获取生产过程上下文对象有异常信息 抛出异常 + if (!productionProcessContext.getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); + + //获取工位信息 + MesWorkCell workCell = productionProcessContext.getWorkCell(); + + //不用显示倒计时, 客户端默认显示绿色无数字 + if (StringUtils.isEmpty(workCell.getIsShowTime()) || CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue() == workCell.getIsShowTime()) return stepResult; + + //解析工位参数 + String countDownTime = doCalcCountDownCfg(reqBean); + + return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("[%sS]倒计时启动!", countDownTime)); + + } + + private String doCalcCountDownCfg(StationRequestBean reqBean) { + + //获取工位参数 + Map wcpcMap = fsmCommonService.doHandleFsmWcpcMapDataForDoScan(reqBean); + + //配置值: 60,5 60代表总倒计时,显示绿色; 5代表接近超时,显示黄色; 超时后显示红色 + String countDownCfg = wcpcMap.containsKey(MesPcnExtConstWords.COUNT_DOWN_CFG) ? wcpcMap.get(MesPcnExtConstWords.COUNT_DOWN_CFG) : null; + String[] countDownCfgArr = !StringUtils.isEmpty(countDownCfg) ? countDownCfg.split(MesPcnExtConstWords.COMMA) : null; + countDownCfgArr = (null != countDownCfgArr && countDownCfgArr.length == 2) ? countDownCfgArr : MesPcnExtConstWords.COUNT_DOWN_CFG_DEFAULT.split(MesPcnExtConstWords.COMMA); + + List resultList = StationKvBeanUtil.addStationKvBeanList(new ArrayList<>(), new StationKvBean(MesExtEnumUtil.COLOR.GREEN.getValue(), "倒计时时长", countDownCfgArr[0]), + new StationKvBean(MesExtEnumUtil.COLOR.YELLOW.getValue(), "即将超时", countDownCfgArr[1]), new StationKvBean(MesExtEnumUtil.COLOR.RED.getValue(), "已经超时", MesPcnExtConstWords.ZERO_STR)); + + //发送倒计时信号给客户端 + this.sendMessage(reqBean, new StationResultBean().busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.TIME_MODULE_CONTENT.getValue()).dataType(MesPcnEnumUtil.STATION_DATA_TYPE.CUSTOM.getValue()).resultList(resultList)); + + return countDownCfgArr[0]; + + } + +} 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 cf3284e..b9a5252 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 @@ -148,6 +148,10 @@ public class MesPcnExtConstWords { public static final String CAVITY_UNKNOWN_CFG = "CAVITY_UNKNOWN_CFG"; // 支持混腔扫描[工位参数] public static final String CAVITY_NOSORT_CFG = "CAVITY_NOSORT_CFG"; + // 工位倒计时配置[工位参数] + public static final String COUNT_DOWN_CFG = "COUNT_DOWN_CFG"; + // 工位倒计时配置默认值 + public static final String COUNT_DOWN_CFG_DEFAULT = "60,5"; // 工位/工步 参数按钮事件 @@ -172,7 +176,8 @@ public class MesPcnExtConstWords { - + // 0 + public static final String ZERO_STR = "0"; // 0 public static final Integer ZERO = 0; // 1 @@ -186,7 +191,7 @@ public class MesPcnExtConstWords { // ; public static final String SEMICOLON = ";"; // , - public static final String comma = ","; + public static final String COMMA = ","; // 定制页面名称(默认) public static final String CUSTOM_PAGE_NAME_DEFAULT = "CUSTOM_PAGE_NAME_DEFAULT"; From d2a1b018d403c00c1045e917e4ace25e3443459d Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Mon, 10 Jun 2024 23:24:25 +0800 Subject: [PATCH 13/14] step --- .../IMesProductionDispatchContextStepService.java | 30 ++- .../mes/pcn/api/busi/IMesWorkOrderExtService.java | 17 ++ .../serviceimpl/busi/MesWorkOrderExtService.java | 51 +++++ ...esEquipVariableCfgRuleMatchDispatchService.java | 3 + .../MesFunctionChooseCavityOrderService.java | 33 ++-- .../step/MesAssemblyReadStepService.java | 6 +- .../step/MesAssemblyScanStepService.java | 8 +- .../step/MesAssemblyShowNosortStepService.java | 4 + .../step/MesAssemblyShowSortStepService.java | 4 + .../step/MesAssemblyShowStepService.java | 10 +- .../step/MesCountDownShowStepService.java | 3 + .../step/MesFirstMouldNoReadStepService.java | 6 +- .../step/MesMouldNoReadStepService.java | 6 +- .../step/MesProductResultReadStepService.java | 6 +- .../step/MesProductSnCheckStepService.java | 8 +- .../step/MesProductSnReadStepService.java | 6 +- .../step/MesProductSnScanStepService.java | 14 +- .../step/MesProductionPartNoReadStepService.java | 207 +++++++++++++++++++++ .../step/MesReadySignalReadStepService.java | 6 +- .../step/MesWorkOrderCheckNosortStepService.java | 129 +++++++++++++ .../step/MesWorkOrderCheckStepService.java | 59 ++++++ .../step/MesWorkOrderReadStepService.java | 149 +++++++++++++++ .../step/MesWorkOrderScanStepService.java | 127 +++++++++++++ .../MesProductionDispatchContextStepService.java | 67 ++++++- .../context/MesEquipVariableCollectContext.java | 11 +- .../pcn/pojo/context/MesProductionPartContext.java | 22 ++- .../ext/mes/pcn/pojo/util/MesPcnExtConstWords.java | 2 + 27 files changed, 933 insertions(+), 61 deletions(-) create mode 100644 modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesWorkOrderExtService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderExtService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionPartNoReadStepService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCheckNosortStepService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCheckStepService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderReadStepService.java create mode 100644 modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderScanStepService.java 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 f872d3c..7bbbd70 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 @@ -68,6 +68,18 @@ public interface IMesProductionDispatchContextStepService { @ApiOperation(value = "删除上下文发送允许加工指令执行结果") void deleteSendProcessCmdContext(StationRequestBean reqBean); + @ApiOperation(value = "获取上下文产出零件号") + List getProductionPartNoContext(StationRequestBean reqBean); + + @ApiOperation(value = "验证上下文产出零件号是否存在") + Boolean checkProductionPartNoIsExistContext(StationRequestBean reqBean); + + @ApiOperation(value = "保存上下文产出零件号", notes = "[JSON]List") + Boolean saveProductionPartNoContext(StationRequestBean reqBean, List productionPartNoList); + + @ApiOperation(value = "删除上下文产出零件号") + void deleteProductionPartNoContext(StationRequestBean reqBean); + @ApiOperation(value = "获取上下文头道模具号") MesEquipVariableCollectContext getFirstMouldNoContext(StationRequestBean reqBean); @@ -113,6 +125,18 @@ public interface IMesProductionDispatchContextStepService { @ApiOperation(value = "删除上下文模具号") void deleteMouldNoContext(StationRequestBean reqBean); + @ApiOperation(value = "获取上下文生产扫/读信息:加工单") + List getScanWorkOrderNoContext(StationRequestBean reqBean); + + @ApiOperation(value = "验证上下文扫/读信息:加工单是否存在") + Boolean checkScanWorkOrderNoIsExistContext(StationRequestBean reqBean); + + @ApiOperation(value = "保存上下文扫/读信息:加工单", notes = "[JSON]List") + Boolean saveScanWorkOrderNoContext(StationRequestBean reqBean, List productSnList); + + @ApiOperation(value = "删除上下文扫/读信息:加工单") + void deleteScanWorkOrderNoContext(StationRequestBean reqBean); + @ApiOperation(value = "获取上下文生产扫/读信息:主条码") List getScanProductSnContext(StationRequestBean reqBean); @@ -201,10 +225,10 @@ public interface IMesProductionDispatchContextStepService { void deleteProductionStatisticsContext(StationRequestBean reqBean); @ApiOperation(value = "获取手动选择的腔数及工单信息上下文") - String getFunctionChooseCavityOrderContext(StationRequestBean reqBean); + List getFunctionChooseCavityOrderContext(StationRequestBean reqBean); - @ApiOperation(value = "保存手动选择的腔数及工单信息上下文", notes = "腔数=工单个数 数据格式: 腔数;工单1;工单2;工单3") - Boolean saveFunctionChooseCavityOrderContext(StationRequestBean reqBean, String value); + @ApiOperation(value = "保存手动选择的腔数及工单信息上下文", notes = "[StationKvBean(key=cavity, name=腔数, value=3, seq=0), StationKvBean(key=workOrderNo, name=加工单, value=工单1;工单2;工单3, seq=1)]") + Boolean saveFunctionChooseCavityOrderContext(StationRequestBean reqBean, List resultList); @ApiOperation(value = "删除手动选择的腔数及工单信息上下文") void deleteFunctionChooseCavityOrderContext(StationRequestBean reqBean); 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 new file mode 100644 index 0000000..3040c08 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesWorkOrderExtService.java @@ -0,0 +1,17 @@ +package cn.estsh.i3plus.ext.mes.pcn.api.busi; + +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder; +import io.swagger.annotations.ApiOperation; + +import java.util.List; +import java.util.Map; + +public interface IMesWorkOrderExtService { + + @ApiOperation(value = "根据生产工单号集合 查询生产工单数据") + List getWorkOrderList(String organizeCode, List workOrderNoList); + + @ApiOperation(value = "根据生产工单号集合 查询生产工单数据") + Map getWorkOrderMap(String organizeCode, List workOrderNoList); + +} 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 new file mode 100644 index 0000000..db278f3 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesWorkOrderExtService.java @@ -0,0 +1,51 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi; + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesWorkOrderExtService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; +import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder; +import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderRepository; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@Slf4j +@Service +public class MesWorkOrderExtService implements IMesWorkOrderExtService { + + @Autowired + private MesWorkOrderRepository workOrderRepository; + + //根据生产工单号集合 查询生产工单数据 + @Override + public List getWorkOrderList(String organizeCode, List workOrderNoList) { + + if (StringUtils.isEmpty(organizeCode) || CollectionUtils.isEmpty(workOrderNoList)) return null; + + workOrderNoList = workOrderNoList.size() == 1 ? workOrderNoList : workOrderNoList.stream().filter(o -> StringUtils.isEmpty(o)).distinct().collect(Collectors.toList()); + + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + if (workOrderNoList.size() == 1) DdlPreparedPack.getStringEqualPack(workOrderNoList.get(0), MesPcnExtConstWords.WORK_ORDER_NO, packBean); + else DdlPreparedPack.getInPackList(workOrderNoList, MesPcnExtConstWords.WORK_ORDER_NO, packBean); + + return workOrderRepository.findByHqlWhere(packBean); + + } + + //根据生产工单号集合 查询生产工单数据 + @Override + public Map getWorkOrderMap(String organizeCode, List workOrderNoList) { + + List workOrderList = getWorkOrderList(organizeCode, workOrderNoList); + + return CollectionUtils.isEmpty(workOrderList) ? null : workOrderList.stream().filter(o -> null != o).collect(Collectors.toMap(MesWorkOrder::getWorkOrderNo, o -> o)); + + } +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/MesEquipVariableCfgRuleMatchDispatchService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/MesEquipVariableCfgRuleMatchDispatchService.java index 4f8e777..196adfb 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/MesEquipVariableCfgRuleMatchDispatchService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/rulematch/MesEquipVariableCfgRuleMatchDispatchService.java @@ -36,6 +36,9 @@ public class MesEquipVariableCfgRuleMatchDispatchService implements IMesEquipVar case FIRST_MOULD_NO: case MOULD_NO: case ASSEMBLY: + case PRODUCT_SN: + case WORK_ORDER: + case PRODUCTION_PART_NO: return matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, variableCategory, collectContextList, "mesEvcRuleMatchBackValueService"); //TODO CASE 数据变量接口逻辑根据变量类别实现策略 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 bcbf1c3..7e44d5a 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 @@ -7,17 +7,25 @@ import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseSwsService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.IShippingDispatchService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.function.IFsmModuleFunctionService; +import cn.estsh.i3plus.mes.pcn.util.StationKvBeanUtil; import cn.estsh.i3plus.platform.common.util.MesPcnConstWords; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell; import cn.estsh.i3plus.pojo.mes.model.ButtonDynamicModel; +import cn.estsh.i3plus.pojo.mes.model.StationKvBean; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.model.StationResultBean; 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.Arrays; +import java.util.List; +import java.util.stream.Collectors; + /** * @Description : 工位参数按钮事件接口实现【选择工单】 **/ @@ -49,14 +57,15 @@ public class MesFunctionChooseCavityOrderService extends BaseSwsService implemen return false; } - if (!checkCavityOrderIsValid(buttonDynamicModel.getFunctionValue())) { + List resultList = checkCavityOrderIsValid(buttonDynamicModel.getFunctionValue()); + if (CollectionUtils.isEmpty(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.EXP_TEXT); return false; } //保存手动选择的腔数及工单信息上下文 - productionDispatchContextStepService.saveFunctionChooseCavityOrderContext(reqBean, buttonDynamicModel.getFunctionValue()); + productionDispatchContextStepService.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); @@ -73,29 +82,29 @@ public class MesFunctionChooseCavityOrderService extends BaseSwsService implemen } //腔数=工单个数 数据格式: 腔数;工单1;工单2;工单3 - private Boolean checkCavityOrderIsValid(String functionValue) { + private List checkCavityOrderIsValid(String functionValue) { - if (StringUtils.isEmpty(functionValue)) return false; + List list = !StringUtils.isEmpty(functionValue) ? new ArrayList<>(Arrays.asList(functionValue.split(MesPcnExtConstWords.SEMICOLON))) : null; - String[] value = functionValue.split(MesPcnExtConstWords.SEMICOLON); + if (CollectionUtils.isEmpty(list)) return null; - if (null == value) return false; + List resultList = null; try { - Integer cavity = Integer.valueOf(value[0]); + Integer cavity = Integer.valueOf(list.get(0)); + + if (cavity != list.size() - 1) return null; - if (cavity != value.length - 1) return false; + return StationKvBeanUtil.addStationKvBeanList(new ArrayList<>(), new StationKvBean(MesPcnExtConstWords.CAVITY, "腔数", list.remove(0)), + new StationKvBean(MesPcnExtConstWords.WORK_ORDER_NO, "加工单", list.stream().filter(o -> null != o).collect(Collectors.joining(MesPcnExtConstWords.SEMICOLON)))); } catch (NumberFormatException e) { - return false; + return null; } - return true; - - } } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyReadStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyReadStepService.java index 35ab51b..f862e29 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyReadStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyReadStepService.java @@ -105,6 +105,9 @@ public class MesAssemblyReadStepService extends BaseStepService { if (!productionProcessContextStepService.checkIsEmptyEquipmentVariableList(productionProcessContext, cellEquipContext, equipmentVariableList, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION, categoryLevelTwoList).getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); + //存储生产过程上下文对象 + productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext); + //获取设备LOG采集数据 MesEquipLogDispatchContext equipLogDispatchContext = equipmentLogExtService.doHandleEquipmentLogList(cellEquipContext, equipmentVariableList, equipmentVariableCfgList); this.sendMessage(reqBean, resultBean, JSONObject.toJSONString(equipLogDispatchContext), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); @@ -115,9 +118,6 @@ public class MesAssemblyReadStepService extends BaseStepService { execDynamicsCompleteAndSendMsg(reqBean, resultBean.writeDbLog(), stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("请检查设备的质量状态,读取到设备[%s]的数据变量质量值为[%s]!", cellEquipContext.getEquipmentCode(), cellEquipContext.getQuality())); - //存储生产过程上下文对象 - productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext); - //匹配读取的装配件的有效性 return matchAssemblySnValid(reqBean, resultBean, stepParamMap, stepResult, productionProcessContext, cellEquipContext, equipLogDispatchContext); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyScanStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyScanStepService.java index 4210178..12a79ba 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyScanStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyScanStepService.java @@ -59,15 +59,15 @@ public class MesAssemblyScanStepService extends BaseStepService { //获取生产过程上下文对象有异常信息 抛出异常 if (!productionProcessContext.getSuccess()) return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, productionProcessContext.getMessage()); + //存储生产过程上下文对象 + productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext); + //保存设备当前一轮工序待验证的装配件条码信息 productionDispatchContextStepService.saveScanAssemblySnContext(reqBean, getAssemblySnJson(reqBean, scanInfo)); //发送工步内容 productionDispatchContextStepService.doSendStepContextMessage(reqBean, scanInfo, MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN); - //存储生产过程上下文对象 - productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext); - return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("当前扫描信息装配件条码[%s]!", scanInfo)); } @@ -76,7 +76,7 @@ public class MesAssemblyScanStepService extends BaseStepService { List equipVariableCollectContextList = new ArrayList<>(); - equipVariableCollectContextList.add(new MesEquipVariableCollectContext(reqBean.getOrganizeCode(), scanInfo, TimeTool.getNowTime(true))); + equipVariableCollectContextList.add(new MesEquipVariableCollectContext(reqBean.getOrganizeCode(), scanInfo, TimeTool.getNowTime(true), MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getValue())); return equipVariableCollectContextList; 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 7822b38..efd441d 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 @@ -60,6 +60,9 @@ public class MesAssemblyShowNosortStepService extends BaseStepService { //配置错误 抛出异常 if (!productionProcessContext.getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); + //存储生产过程上下文对象 + productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext); + //从上下文中取出生产线对象 MesWorkCenter workCenter = productionProcessContext.getWorkCenter(); @@ -81,6 +84,7 @@ public class MesAssemblyShowNosortStepService extends BaseStepService { doHandleProdRuleData(reqBean, resultBean, stepResult, workCenter, cellEquipContext, prodRuleContextList, productionPartContextList, productionPsInContextList); + //保存上下文产品加工规则信息集合 if (prodRuleContextList.size() != initSize) productionDispatchContextStepService.saveProdRuleDataContext(reqBean, prodRuleContextList); //显示装配件信息 diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowSortStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowSortStepService.java index 6a802f8..1051634 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowSortStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowSortStepService.java @@ -56,6 +56,9 @@ public class MesAssemblyShowSortStepService extends BaseStepService { //配置错误 抛出异常 if (!productionProcessContext.getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); + //存储生产过程上下文对象 + productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext); + //从上下文中取出生产线对象 MesWorkCenter workCenter = productionProcessContext.getWorkCenter(); @@ -74,6 +77,7 @@ public class MesAssemblyShowSortStepService extends BaseStepService { if (!showProductionAssembly(reqBean, resultBean, workCenter, cellEquipContext, prodRuleContextList)) return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前未查询到相关的装配件清单"); + //保存上下文产品加工规则信息集合 productionDispatchContextStepService.saveProdRuleDataContext(reqBean, prodRuleContextList); return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "显示装配件扫描项成功!"); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowStepService.java index a709aeb..af2c81d 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesAssemblyShowStepService.java @@ -38,16 +38,16 @@ public class MesAssemblyShowStepService extends BaseStepService { //配置错误 抛出异常 if (!productionProcessContext.getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); - //从上下文中取出生产线对象 - MesWorkCenter workCenter = productionProcessContext.getWorkCenter(); - //存储生产过程上下文对象 productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext); - //获取排序线的装配件清单 + //从上下文中取出生产线对象 + MesWorkCenter workCenter = productionProcessContext.getWorkCenter(); + + //排序线 显示装配件扫描项工步 if (MesExtEnumUtil.WORK_CENTER_TYPE.SORT.getValue() == workCenter.getCenterType()) return ((IStepService) SpringContextsUtil.getBean("mesAssemblyShowSortStepService")).execute(reqBean); - //获取非排序线的装配件清单 + //非排序线 显示装配件扫描项工步 return ((IStepService) SpringContextsUtil.getBean("mesAssemblyShowNosortStepService")).execute(reqBean); } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesCountDownShowStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesCountDownShowStepService.java index b7d022a..c19e155 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesCountDownShowStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesCountDownShowStepService.java @@ -59,6 +59,9 @@ public class MesCountDownShowStepService extends BaseStepService { //获取生产过程上下文对象有异常信息 抛出异常 if (!productionProcessContext.getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); + //存储生产过程上下文对象 + productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext); + //获取工位信息 MesWorkCell workCell = productionProcessContext.getWorkCell(); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesFirstMouldNoReadStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesFirstMouldNoReadStepService.java index dc38a5e..69d7505 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesFirstMouldNoReadStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesFirstMouldNoReadStepService.java @@ -112,6 +112,9 @@ public class MesFirstMouldNoReadStepService extends BaseStepService { if (!productionProcessContextStepService.checkIsEmptyEquipmentVariableList(productionProcessContext, cellEquipContext, equipmentVariableList, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION, categoryLevelTwoList).getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); + //存储生产过程上下文对象 + productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext); + //获取设备LOG采集数据 MesEquipLogDispatchContext equipLogDispatchContext = equipmentLogExtService.doHandleEquipmentLogList(cellEquipContext, equipmentVariableList, equipmentVariableCfgList); this.sendMessage(reqBean, resultBean, JSONObject.toJSONString(equipLogDispatchContext), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); @@ -122,9 +125,6 @@ public class MesFirstMouldNoReadStepService extends BaseStepService { execDynamicsCompleteAndSendMsg(reqBean, resultBean.writeDbLog(), stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("请检查设备的质量状态,读取到设备[%s]的数据变量质量值为[%s]!", cellEquipContext.getEquipmentCode(), cellEquipContext.getQuality())); - //存储生产过程上下文对象 - productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext); - //验证头道模具号的有效性 return checkFirstMouldNoValid(reqBean, resultBean, stepParamMap, stepResult, productionProcessContext, cellEquipContext, equipLogDispatchContext); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesMouldNoReadStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesMouldNoReadStepService.java index 21275e1..37421aa 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesMouldNoReadStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesMouldNoReadStepService.java @@ -106,6 +106,9 @@ public class MesMouldNoReadStepService extends BaseStepService { if (!productionProcessContextStepService.checkIsEmptyEquipmentVariableList(productionProcessContext, cellEquipContext, equipmentVariableList, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION, categoryLevelTwoList).getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); + //存储生产过程上下文对象 + productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext); + //获取设备LOG采集数据 MesEquipLogDispatchContext equipLogDispatchContext = equipmentLogExtService.doHandleEquipmentLogList(cellEquipContext, equipmentVariableList, equipmentVariableCfgList); this.sendMessage(reqBean, resultBean, JSONObject.toJSONString(equipLogDispatchContext), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); @@ -116,9 +119,6 @@ public class MesMouldNoReadStepService extends BaseStepService { execDynamicsCompleteAndSendMsg(reqBean, resultBean.writeDbLog(), stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("请检查设备的质量状态,读取到设备[%s]的数据变量质量值为[%s]!", cellEquipContext.getEquipmentCode(), cellEquipContext.getQuality())); - //存储生产过程上下文对象 - productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext); - //验证模具号的有效性 checkMouldNoValid(reqBean, resultBean, stepParamMap, stepResult, productionProcessContext, cellEquipContext, equipLogDispatchContext); 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 e512453..00d8147 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 @@ -103,6 +103,9 @@ public class MesProductResultReadStepService extends BaseStepService { if (!productionProcessContextStepService.checkIsEmptyEquipmentVariableList(productionProcessContext, cellEquipContext, equipmentVariableList, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION, categoryLevelTwoList).getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); + //存储生产过程上下文对象 + productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext); + //获取设备LOG采集数据 MesEquipLogDispatchContext equipLogDispatchContext = equipmentLogExtService.doHandleEquipmentLogList(cellEquipContext, equipmentVariableList, equipmentVariableCfgList); this.sendMessage(reqBean, resultBean, JSONObject.toJSONString(equipLogDispatchContext), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); @@ -113,9 +116,6 @@ public class MesProductResultReadStepService extends BaseStepService { execDynamicsCompleteAndSendMsg(reqBean, resultBean.writeDbLog(), stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("请检查设备的质量状态,读取到设备[%s]的数据变量质量值为[%s]!", cellEquipContext.getEquipmentCode(), cellEquipContext.getQuality())); - //存储生产过程上下文对象 - productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext); - //匹配加工结果 return matchProductResult(reqBean, resultBean, stepParamMap, stepResult, productionProcessContext, cellEquipContext, equipLogDispatchContext); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnCheckStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnCheckStepService.java index a230bd4..3f3c66e 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnCheckStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnCheckStepService.java @@ -64,6 +64,9 @@ public class MesProductSnCheckStepService extends BaseStepService { //获取上下文扫/读信息:主条码 List equipVariableCollectContextList = productionDispatchContextStepService.getScanProductSnContext(reqBean); + //清除本次已获取得到的主条码信息 + productionDispatchContextStepService.deleteScanProductSnContext(reqBean); + if (CollectionUtils.isEmpty(equipVariableCollectContextList)) return execDynamicsCompleteAndSendMsgReturn( reqBean, resultBean, stepResult, true, MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, "当前上下文中没有需要验证的主条码!"); @@ -75,9 +78,6 @@ public class MesProductSnCheckStepService extends BaseStepService { //验证上下文中主条码的有效性 List produceSnList = checkProduceSnValid(reqBean, resultBean, stepResult, productionProcessContext, productSnList); - //清除本次已完成验证的主条码信息 - productionDispatchContextStepService.deleteScanProductSnContext(reqBean); - if (!stepResult.isCompleted()) return execNonCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, String.format("验证失败!原因:%s!", stepResult.getMsg())); //获取上下文的工位 @@ -100,7 +100,7 @@ public class MesProductSnCheckStepService extends BaseStepService { //变更主条码状态为未知 saveProduceSnList(reqBean, resultBean, produceSnList); - return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, String.format("上下文中的主条码[%s]验证条码状态成功!", productSnList)); + return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, String.format("上下文中的主条码%s验证条码状态成功!", equipVariableCollectContextList.stream().filter(o -> null != o).map(MesEquipVariableCollectContext::getEquipVariableValue).collect(Collectors.toList()).toString())); } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnReadStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnReadStepService.java index e399f39..38fc77f 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnReadStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnReadStepService.java @@ -102,6 +102,9 @@ public class MesProductSnReadStepService extends BaseStepService { if (!productionProcessContextStepService.checkIsEmptyEquipmentVariableList(productionProcessContext, cellEquipContext, equipmentVariableList, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION, categoryLevelTwoList).getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); + //存储生产过程上下文对象 + productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext); + //获取设备LOG采集数据 MesEquipLogDispatchContext equipLogDispatchContext = equipmentLogExtService.doHandleEquipmentLogList(cellEquipContext, equipmentVariableList, equipmentVariableCfgList); this.sendMessage(reqBean, resultBean, JSONObject.toJSONString(equipLogDispatchContext), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); @@ -112,9 +115,6 @@ public class MesProductSnReadStepService extends BaseStepService { execDynamicsCompleteAndSendMsg(reqBean, resultBean.writeDbLog(), stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("请检查设备的质量状态,读取到设备[%s]的数据变量质量值为[%s]!", cellEquipContext.getEquipmentCode(), cellEquipContext.getQuality())); - //存储生产过程上下文对象 - productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext); - //匹配读取的主条码的有效性 return matchProductSnValid(reqBean, resultBean, stepParamMap, stepResult, productionProcessContext, cellEquipContext, equipLogDispatchContext); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnScanStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnScanStepService.java index eef9969..e8046fd 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnScanStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductSnScanStepService.java @@ -58,18 +58,18 @@ public class MesProductSnScanStepService extends BaseStepService { StepResult stepResult = StepResult.getSuccessComplete(); + //扫描信息置空 + String scanInfo = reqBean.resetScanInfo(reqBean.getScanInfo()); + //获取上下文信息 MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean); //获取生产过程上下文对象有异常信息 抛出异常 - if (!productionProcessContext.getSuccess()) return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, productionProcessContext.getMessage()); + if (!productionProcessContext.getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); //存储生产过程上下文对象 productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext); - //扫描信息置空 - String scanInfo = reqBean.resetScanInfo(reqBean.getScanInfo()); - //当前工位使用的设备 MesCellEquipContext cellEquipmentContext = productionProcessContext.getCurCellEquip(); @@ -92,7 +92,7 @@ public class MesProductSnScanStepService extends BaseStepService { Boolean isAllowJump = checkIsAllowJump(reqBean, productionPsInContextList, isCraftJumpCode, scanInfo); //封装待验证的主条码信息 - if (!isCraftJumpCode && !StringUtils.isEmpty(scanInfo)) equipVariableCollectContextList = doHandleScanProductSnContext(reqBean, stepResult, equipVariableCollectContextList, scanInfo); + if (!isCraftJumpCode && !StringUtils.isEmpty(scanInfo)) equipVariableCollectContextList = doHandleScanProductSnContext(reqBean.getOrganizeCode(), scanInfo, equipVariableCollectContextList); //先判断前期扫描数量 Integer scanedQty = (CollectionUtils.isEmpty(equipVariableCollectContextList) ? MesPcnExtConstWords.ZERO : equipVariableCollectContextList.size()) + (CollectionUtils.isEmpty(productionPsInContextList) ? MesPcnExtConstWords.ZERO : productionPsInContextList.size()); @@ -186,11 +186,11 @@ public class MesProductSnScanStepService extends BaseStepService { } //封装扫/读信息:主条码信息 - private List doHandleScanProductSnContext(StationRequestBean reqBean, StepResult stepResult, List equipVariableCollectContextList, String scanInfo) { + private List doHandleScanProductSnContext(String organizeCode, String scanInfo, List equipVariableCollectContextList) { if (CollectionUtils.isEmpty(equipVariableCollectContextList)) equipVariableCollectContextList = new ArrayList<>(); - equipVariableCollectContextList.add(new MesEquipVariableCollectContext(reqBean.getOrganizeCode(), scanInfo, TimeTool.getNowTime(true))); + equipVariableCollectContextList.add(new MesEquipVariableCollectContext(organizeCode, scanInfo, TimeTool.getNowTime(true), MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getValue())); return equipVariableCollectContextList; diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionPartNoReadStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionPartNoReadStepService.java new file mode 100644 index 0000000..1e43c1f --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionPartNoReadStepService.java @@ -0,0 +1,207 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipVariableCfgRuleMatchDispatchService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipmentLogExtService; +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.*; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +import cn.estsh.i3plus.mes.pcn.api.iservice.base.IPartService; +import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; +import cn.estsh.i3plus.mes.pcn.util.StationKvBeanUtil; +import cn.estsh.i3plus.platform.common.util.MesPcnConstWords; +import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; +import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable; +import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg; +import cn.estsh.i3plus.pojo.mes.bean.MesPart; +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.model.StationResultBean; +import cn.estsh.i3plus.pojo.mes.model.StepResult; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; +import com.alibaba.fastjson.JSONObject; +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("mesProductionPartNoReadStepService") +public class MesProductionPartNoReadStepService extends BaseStepService { + + @Autowired + private IMesProductionProcessContextStepService productionProcessContextStepService; + + @Autowired + private IMesProductionDispatchContextStepService productionDispatchContextStepService; + + @Autowired + private IMesEquipmentLogExtService equipmentLogExtService; + + @Autowired + private IMesEquipVariableCfgRuleMatchDispatchService equipVariableCfgRuleMatchService; + + @Autowired + private IPartService partService; + + @Override + public StepResult init(StationRequestBean reqBean) { + + //发送工步内容 + productionDispatchContextStepService.doSendStepContextMessage(reqBean); + + return super.init(reqBean); + + } + + @Override + public StepResult execute(StationRequestBean reqBean) { + + StationResultBean resultBean = new StationResultBean(); + + StepResult stepResult = StepResult.getSuccessComplete(); + + //获取工步参数 + Optional> stepParamMap = getStepParams(reqBean); + + //获取上下文信息 + MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean, stepParamMap); + + //当前工序已存在产出零件号跟产出零件信息 + if (productionDispatchContextStepService.checkProductionPartNoIsExistContext(reqBean) && productionDispatchContextStepService.checkProductionPartIsExistContext(reqBean)) return stepResult; + + //获取生产过程上下文对象有异常信息 抛出异常 + if (!productionProcessContextStepService.getEquipmentVariableCfgList(productionProcessContext).getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); + + //从上下文的设备数据变量接口逻辑对象集合中取出当前设备信息的逻辑类型对应的接口逻辑对象集合 + List equipmentVariableCfgList = productionProcessContext.getEquipVariableCfgListByVct(); + + //根据变量类别[产出零件号]搜集设备数据变量接口逻辑信息 + equipmentVariableCfgList = productionProcessContextStepService.collectEquipmentVariableCfgList(equipmentVariableCfgList, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCTION_PART_NO.getValue()); + + //当前工位使用的设备 + MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip(); + + //配置错误 抛出异常 + if (!productionProcessContextStepService.checkNecessaryEquipmentVariableCfg(productionProcessContext, cellEquipContext, equipmentVariableCfgList, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCTION_PART_NO.getValue()).getSuccess()) + execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); + + //搜集设备数据变量接口逻辑信息中的二级变量 + List categoryLevelTwoList = productionProcessContextStepService.collectCategoryLevelTwoList(equipmentVariableCfgList); + + //根据变量类型与二级变量获取设备数据变量信息 + List equipmentVariableList = productionProcessContextStepService.findEquipmentVariableList(productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getValue(), categoryLevelTwoList); + + //配置错误 抛出异常 + if (!productionProcessContextStepService.checkIsEmptyEquipmentVariableList(productionProcessContext, cellEquipContext, equipmentVariableList, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION, categoryLevelTwoList).getSuccess()) + execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); + + //存储生产过程上下文对象 + productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext); + + //获取设备LOG采集数据 + MesEquipLogDispatchContext equipLogDispatchContext = equipmentLogExtService.doHandleEquipmentLogList(cellEquipContext, equipmentVariableList, equipmentVariableCfgList); + this.sendMessage(reqBean, resultBean, JSONObject.toJSONString(equipLogDispatchContext), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); + + //验证设备通信质量 + productionDispatchContextStepService.sendEquipQualityMessage(reqBean, cellEquipContext); + if (!equipmentLogExtService.checkEquipQuality(cellEquipContext.getQuality())) + execDynamicsCompleteAndSendMsg(reqBean, resultBean.writeDbLog(), stepResult, false, + MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("请检查设备的质量状态,读取到设备[%s]的数据变量质量值为[%s]!", cellEquipContext.getEquipmentCode(), cellEquipContext.getQuality())); + + //验证产出零件号的有效性 + return checkProductionPartNoValid(reqBean, resultBean, stepParamMap, stepResult, productionProcessContext, cellEquipContext, equipLogDispatchContext); + + } + + //验证产出零件号的有效性 + private StepResult checkProductionPartNoValid(StationRequestBean reqBean, StationResultBean resultBean, Optional> stepParamMap, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, MesEquipLogDispatchContext equipLogDispatchContext) { + + //未采集到数据 + if (!equipLogDispatchContext.getIsCollectValue()) + execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean, stepResult.isCompleted(false).msg(String.format("当前未读取到设备[%s]产出零件号,持续监听中...", cellEquipContext.getEquipmentCode())), + MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); + + //读取的产出零件号进行规则匹配 + List equipVariableCollectContextList = (List) equipVariableCfgRuleMatchService.matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCTION_PART_NO.getValue(), equipLogDispatchContext.getEquipVariableCfgCollectContextList()); + + //没有有效的数据 + if (CollectionUtils.isEmpty(equipVariableCollectContextList)) + execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean.writeDbLog(), stepResult.isCompleted(false).msg(String.format("当前未读取到设备[%s]有效的头道模具号,持续监听中...", cellEquipContext.getEquipmentCode())), + MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); + + //发送工步内容 + String scanInfo = equipVariableCollectContextList.stream().filter(o -> null != o).map(MesEquipVariableCollectContext::getEquipVariableValue).collect(Collectors.joining(MesPcnExtConstWords.SEMICOLON)); + productionDispatchContextStepService.doSendStepContextMessage(reqBean, scanInfo, MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ); + + //获取产出零件信息 获取零件信息 + List productionPartContextList = getProductionPartContext(reqBean, resultBean, productionProcessContext, equipVariableCollectContextList); + + //更新展示组件MODULE_CONTENT内容 + doCacheMoudleContext(reqBean, productionPartContextList); + + return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("当前已读取到设备[%s]产出零件号[%s]!", cellEquipContext.getEquipmentCode(), scanInfo)); + + } + + private List getProductionPartContext(StationRequestBean reqBean, StationResultBean resultBean, MesProductionProcessContext productionProcessContext, List equipVariableCollectContextList) { + + //从上下文中取出零件信息集合 + Map partDataMap = productionDispatchContextStepService.getPartDataContext(reqBean); + + //从读取信息中搜集零件编码并去重 + List partNoList = (equipVariableCollectContextList.stream().filter(o -> (null != o)).map(MesEquipVariableCollectContext::getEquipVariableValue).collect(Collectors.toList())).stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList()); + + //验证上下文中取出零件信息集合是否匹配一模多腔信息中搜集零件编码 + if (CollectionUtils.isEmpty(partDataMap) || (!partDataMap.keySet().containsAll(partNoList) || !partNoList.containsAll(partDataMap.keySet()))) partDataMap = partService.getPartMap(reqBean.getOrganizeCode(), partNoList); + + //零件信息缺失 抛出异常 + List productionPartContextList = getProductionPartContext(reqBean, resultBean, partNoList, partDataMap, equipVariableCollectContextList); + + //保存设备当前一轮工序的产出零件号,产出零件信息,零件信息 + productionDispatchContextStepService.saveProductionPartNoContext(reqBean, equipVariableCollectContextList); + productionDispatchContextStepService.saveProductionPartContext(reqBean, productionPartContextList); + productionDispatchContextStepService.savePartDataContext(reqBean, partDataMap); + + return productionPartContextList; + + } + + private List getProductionPartContext(StationRequestBean reqBean, StationResultBean resultBean, List partNoList, Map partDataMap, List equipVariableCollectContextList) { + List filterList = CollectionUtils.isEmpty(partDataMap) ? null : partNoList.stream().filter(o -> (null != o && !partDataMap.containsKey(o))).collect(Collectors.toList()); + + //验证错误 抛出异常 + if (CollectionUtils.isEmpty(partDataMap) || !CollectionUtils.isEmpty(filterList)) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("请检查零件信息,零件编码%s信息不存在!", CollectionUtils.isEmpty(partDataMap) ? partNoList.toString() : filterList.toString())); + + List productionPartContextList = new ArrayList<>(); + equipVariableCollectContextList.stream().filter(o -> null != o).forEach(o -> productionPartContextList.add(new MesProductionPartContext().copyPartNo(reqBean.getOrganizeCode(), o.getEquipVariableValue(), partDataMap.get(o.getEquipVariableValue()).getPartName()))); + + return productionPartContextList; + + } + + private void doCacheMoudleContext(StationRequestBean reqBean, List productionPartContextList) { + //存储展示组件MODULE_CONTENT内容 + productionDispatchContextStepService.saveModuleContentContext(reqBean, getModuleContextData(reqBean, productionPartContextList)); + } + + //封装展示组件MODULE_CONTENT内容 + private List> getModuleContextData(StationRequestBean reqBean, List productionPartContextList) { + List> dataList = new ArrayList<>(); + productionPartContextList.forEach(o -> StationKvBeanUtil.addStationKvBeanList(dataList, new ArrayList<>(), new StationKvBean(MesPcnConstWords.PART_NO, "零件编码", o.getPartNo()), new StationKvBean(MesPcnConstWords.PART_NAME, "零件名称", o.getPartName()))); + return dataList; + } + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesReadySignalReadStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesReadySignalReadStepService.java index 691cfaf..acde20c 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesReadySignalReadStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesReadySignalReadStepService.java @@ -99,6 +99,9 @@ public class MesReadySignalReadStepService extends BaseStepService { if (!productionProcessContextStepService.checkIsEmptyEquipmentVariableList(productionProcessContext, cellEquipContext, equipmentVariableList, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION, categoryLevelTwoList).getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); + //存储生产过程上下文对象 + productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext); + //获取设备LOG采集数据 MesEquipLogDispatchContext equipLogDispatchContext = equipmentLogExtService.doHandleEquipmentLogList(cellEquipContext, equipmentVariableList, equipmentVariableCfgList); this.sendMessage(reqBean, resultBean, JSONObject.toJSONString(equipLogDispatchContext), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); @@ -109,9 +112,6 @@ public class MesReadySignalReadStepService extends BaseStepService { execDynamicsCompleteAndSendMsg(reqBean, resultBean.writeDbLog(), stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("请检查设备的质量状态,读取到设备[%s]的数据变量质量值为[%s]!", cellEquipContext.getEquipmentCode(), cellEquipContext.getQuality())); - //存储生产过程上下文对象 - productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext); - //匹配就绪信号有效性 return matchReadySignal(reqBean, resultBean, stepParamMap, stepResult, productionProcessContext, cellEquipContext, equipLogDispatchContext); 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 new file mode 100644 index 0000000..b479b62 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCheckNosortStepService.java @@ -0,0 +1,129 @@ +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.api.busi.IMesWorkOrderExtService; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCollectContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext; +import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; +import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder; +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.stream.Collectors; + +/** + * @Description : 加工单验证工步【非排序】 + * @Author : wangjie + **/ +@Slf4j +@Service("mesWorkOrderCheckNosortStepService") +public class MesWorkOrderCheckNosortStepService extends BaseStepService { + + @Autowired + private IMesProductionProcessContextStepService productionProcessContextStepService; + + @Autowired + private IMesProductionDispatchContextStepService productionDispatchContextStepService; + + @Autowired + private IMesWorkOrderExtService workOrderExtService; + + @Override + public StepResult execute(StationRequestBean reqBean) { + + StationResultBean resultBean = new StationResultBean(); + + StepResult stepResult = StepResult.getSuccessComplete(); + + //获取上下文信息 + MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean); + + //配置错误 抛出异常 + if (!productionProcessContext.getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); + + //存储生产过程上下文对象 + productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext); + + //获取上下文生产扫/读信息:加工单 + List equipVariableCollectContextList = productionDispatchContextStepService.getScanWorkOrderNoContext(reqBean); + + if (CollectionUtils.isEmpty(equipVariableCollectContextList)) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), "上下文中缺失待验证的加工单信息!"); + + //获取上下文产出零件信息 + List cachedProductionPartContextList = productionDispatchContextStepService.getProductionPartContext(reqBean); + + //清除本次已获取得到的加工单信息 + productionDispatchContextStepService.deleteScanWorkOrderNoContext(reqBean); + + //非扫描场景 清除历史产出零件信息 + if (MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getValue() != equipVariableCollectContextList.get(0).getMessageSource() && !CollectionUtils.isEmpty(cachedProductionPartContextList)) productionDispatchContextStepService.deleteProductionPartContext(reqBean); + + //验证工单的有效性 + List productionPartContextList = new ArrayList<>(); + if (!checkWorkOrderValid(reqBean, resultBean, stepResult, productionProcessContext, equipVariableCollectContextList, productionPartContextList).isCompleted()) return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, stepResult.getMsg()); + + //扫描场景下合并历史产出零件信息 + if (MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getValue() == equipVariableCollectContextList.get(0).getMessageSource() && !CollectionUtils.isEmpty(cachedProductionPartContextList)) productionPartContextList.addAll(cachedProductionPartContextList); + + //保存上下文产出零件信息 + productionDispatchContextStepService.saveProductionPartContext(reqBean, productionPartContextList); + + if (MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getValue() != equipVariableCollectContextList.get(0).getMessageSource()) return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, String.format("上下文中的加工单%s验证工单状态成功!", stepResult.getObj().toString())); + + //当前工位使用的设备 + MesCellEquipContext cellEquipmentContext = productionProcessContext.getCurCellEquip(); + + if (cellEquipmentContext.getCavity().compareTo(productionPartContextList.size()) > 0) + return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, false, + MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, String.format("当前扫描信息加工单[%s]验证工单状态成功,已知腔数[%s],还需要再连续扫描[%s]次加工单!", + equipVariableCollectContextList.get(0).getEquipVariableValue(), cellEquipmentContext.getCavity(), cellEquipmentContext.getCavity() - productionPartContextList.size())); + + return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("当前扫描信息加工单[%s]验证工单状态成功,上下文中的加工单个数[%s]已满足腔数!", equipVariableCollectContextList.get(0).getEquipVariableValue(), productionPartContextList.size())); + + } + + //验证工单的有效性 + private StepResult checkWorkOrderValid(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, + MesProductionProcessContext productionProcessContext, List equipVariableCollectContextList, List productionPartContextList) { + + //搜集生产工单号 + List filterList = equipVariableCollectContextList.stream().filter(o -> (null != o)).map(MesEquipVariableCollectContext::getEquipVariableValue).collect(Collectors.toList()); + List workOrderNoList = filterList.stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList()); + + //获取生产工单信息 + Map workOrderMap = workOrderExtService.getWorkOrderMap(reqBean.getOrganizeCode(), workOrderNoList); + + for (String workOrderNo : workOrderNoList) { + + if (StringUtils.isEmpty(workOrderNo)) continue; + + MesWorkOrder workOrderDb = (CollectionUtils.isEmpty(workOrderMap) || !workOrderMap.containsKey(workOrderNo)) ? null : workOrderMap.get(workOrderNo); + if (null == workOrderDb) return stepResult.isCompleted(false).msg(String.format("加工单号[%s]无效!", workOrderNo)); + + if (!MesExtEnumUtil.ORDER_STATUS.checkAllowStatus(workOrderDb.getWorkOrderStatus())) return stepResult.isCompleted(false).msg(String.format("加工单[%s]信息工单状态[%s]!", workOrderNo, MesExtEnumUtil.ORDER_STATUS.valueOfDescription(workOrderDb.getWorkOrderStatus()))); + + if (!workOrderDb.getWorkCenterCode().equals(reqBean.getWorkCenterCode())) return stepResult.isCompleted(false).msg(String.format("加工单[%s]信息所属生产线[%s]与当前生产线[%s]不一致!", workOrderNo, workOrderDb.getWorkCenterCode(), reqBean.getWorkCenterCode())); + + } + + equipVariableCollectContextList.stream().filter(o -> null != o).forEach(o -> productionPartContextList.add(new MesProductionPartContext().copyPartNo(workOrderMap.get(o.getEquipVariableValue())))); + + return stepResult.obj(filterList); + + } + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCheckStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCheckStepService.java new file mode 100644 index 0000000..2efbbcc --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderCheckStepService.java @@ -0,0 +1,59 @@ +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.MesProductionProcessContext; +import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; +import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.IStepService; +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 cn.estsh.impp.framework.boot.util.SpringContextsUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * @Description : 加工单验证工步 + * @Author : wangjie + **/ +@Slf4j +@Service("mesWorkOrderCheckStepService") +public class MesWorkOrderCheckStepService 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.getCurCellEquipment(reqBean); + + //配置错误 抛出异常 + if (!productionProcessContext.getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); + + //存储生产过程上下文对象 + productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext); + + //从上下文中取出生产线对象 + MesWorkCenter workCenter = productionProcessContext.getWorkCenter(); + + //排序线 加工单验证工步 + if (MesExtEnumUtil.WORK_CENTER_TYPE.SORT.getValue() == workCenter.getCenterType()) return ((IStepService) SpringContextsUtil.getBean("mesWorkOrderCheckSortStepService")).execute(reqBean); + + //非排序线 加工单验证工步 + return ((IStepService) SpringContextsUtil.getBean("mesWorkOrderCheckNosortStepService")).execute(reqBean); + + } + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderReadStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderReadStepService.java new file mode 100644 index 0000000..3e88058 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderReadStepService.java @@ -0,0 +1,149 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipVariableCfgRuleMatchDispatchService; +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipmentLogExtService; +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.MesCellEquipContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipLogDispatchContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCollectContext; +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.MesPcnEnumUtil; +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.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 com.alibaba.fastjson.JSONObject; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.stream.Collectors; + +/** + * @Description : 读取加工单工步 + * @Author : wangjie + **/ +@Slf4j +@Service("mesWorkOrderReadStepService") +public class MesWorkOrderReadStepService extends BaseStepService { + + @Autowired + private IMesProductionProcessContextStepService productionProcessContextStepService; + + @Autowired + private IMesProductionDispatchContextStepService productionDispatchContextStepService; + + @Autowired + private IMesEquipmentLogExtService equipmentLogExtService; + + @Autowired + private IMesEquipVariableCfgRuleMatchDispatchService equipVariableCfgRuleMatchService; + + @Override + public StepResult init(StationRequestBean reqBean) { + + //发送工步内容 + productionDispatchContextStepService.doSendStepContextMessage(reqBean); + + return super.init(reqBean); + + } + + @Override + public StepResult execute(StationRequestBean reqBean) { + + StationResultBean resultBean = new StationResultBean(); + + StepResult stepResult = StepResult.getSuccessComplete(); + + //获取工步参数 + Optional> stepParamMap = getStepParams(reqBean); + + //获取上下文信息 + MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean, stepParamMap); + + //当前工序已存在读取待验证的加工单信息 + if (productionDispatchContextStepService.checkScanWorkOrderNoIsExistContext(reqBean)) return stepResult; + + //获取生产过程上下文对象有异常信息 抛出异常 + if (!productionProcessContextStepService.getEquipmentVariableCfgList(productionProcessContext).getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); + + //从上下文的设备数据变量接口逻辑对象集合中取出当前设备信息的逻辑类型对应的接口逻辑对象集合 + List equipmentVariableCfgList = productionProcessContext.getEquipVariableCfgListByVct(); + + //根据变量类别[加工单]搜集设备数据变量接口逻辑信息 + equipmentVariableCfgList = productionProcessContextStepService.collectEquipmentVariableCfgList(equipmentVariableCfgList, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.WORK_ORDER.getValue()); + + //当前工位使用的设备 + MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip(); + + //配置错误 抛出异常 + if (!productionProcessContextStepService.checkNecessaryEquipmentVariableCfg(productionProcessContext, cellEquipContext, equipmentVariableCfgList, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.WORK_ORDER.getValue()).getSuccess()) + execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); + + //搜集设备数据变量接口逻辑信息中的二级变量 + List categoryLevelTwoList = productionProcessContextStepService.collectCategoryLevelTwoList(equipmentVariableCfgList); + + //根据变量类型与二级变量获取设备数据变量信息 + List equipmentVariableList = productionProcessContextStepService.findEquipmentVariableList(productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getValue(), categoryLevelTwoList); + + //配置错误 抛出异常 + if (!productionProcessContextStepService.checkIsEmptyEquipmentVariableList(productionProcessContext, cellEquipContext, equipmentVariableList, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION, categoryLevelTwoList).getSuccess()) + execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); + + //存储生产过程上下文对象 + productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext); + + //获取设备LOG采集数据 + MesEquipLogDispatchContext equipLogDispatchContext = equipmentLogExtService.doHandleEquipmentLogList(cellEquipContext, equipmentVariableList, equipmentVariableCfgList); + this.sendMessage(reqBean, resultBean, JSONObject.toJSONString(equipLogDispatchContext), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT); + + //验证设备通信质量 + productionDispatchContextStepService.sendEquipQualityMessage(reqBean, cellEquipContext); + if (!equipmentLogExtService.checkEquipQuality(cellEquipContext.getQuality())) + execDynamicsCompleteAndSendMsg(reqBean, resultBean.writeDbLog(), stepResult, false, + MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("请检查设备的质量状态,读取到设备[%s]的数据变量质量值为[%s]!", cellEquipContext.getEquipmentCode(), cellEquipContext.getQuality())); + + //匹配读取的加工单的有效性 + return matchWorkOrderValid(reqBean, resultBean, stepParamMap, stepResult, productionProcessContext, cellEquipContext, equipLogDispatchContext); + + } + + //匹配读取的加工单的有效性 + private StepResult matchWorkOrderValid(StationRequestBean reqBean, StationResultBean resultBean, Optional> stepParamMap, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, MesEquipLogDispatchContext equipLogDispatchContext) { + + //未采集到数据 + if (!equipLogDispatchContext.getIsCollectValue()) + execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean, stepResult.isCompleted(false).msg(String.format("当前未读取到设备[%s]加工单,持续监听中...", cellEquipContext.getEquipmentCode())), + MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); + + //读取的加工单进行规则匹配 + List equipVariableCollectContextList = (List) equipVariableCfgRuleMatchService.matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.WORK_ORDER.getValue(), equipLogDispatchContext.getEquipVariableCfgCollectContextList()); + + //没有有效的数据 + if (CollectionUtils.isEmpty(equipVariableCollectContextList)) + execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean.writeDbLog(), stepResult.isCompleted(false).msg(String.format("当前未读取到设备[%s]有效的加工单,持续监听中...", cellEquipContext.getEquipmentCode())), + MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME); + + //保存设备当前一轮工序的待验证的加工单信息 + productionDispatchContextStepService.saveScanWorkOrderNoContext(reqBean, equipVariableCollectContextList); + + //发送工步内容 + String scanInfo = equipVariableCollectContextList.stream().filter(o -> null != o).map(MesEquipVariableCollectContext::getEquipVariableValue).collect(Collectors.joining(MesPcnExtConstWords.SEMICOLON)); + productionDispatchContextStepService.doSendStepContextMessage(reqBean, scanInfo, MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ); + + return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("当前已读取到设备[%s]加工单信息[%s]!", cellEquipContext.getEquipmentCode(), scanInfo)); + + } + +} 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 new file mode 100644 index 0000000..5be74f7 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesWorkOrderScanStepService.java @@ -0,0 +1,127 @@ +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.MesCellEquipContext; +import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCollectContext; +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.platform.common.tool.TimeTool; +import cn.estsh.i3plus.pojo.mes.model.StationKvBean; +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.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +/** + * @Description : 扫描加工单工步 + * @Author : wangjie + **/ +@Slf4j +@Service("mesWorkOrderScanStepService") +public class MesWorkOrderScanStepService extends BaseStepService { + + @Autowired + private IMesProductionProcessContextStepService productionProcessContextStepService; + + @Autowired + private IMesProductionDispatchContextStepService productionDispatchContextStepService; + + @Override + public StepResult guide(StationRequestBean reqBean) { + + productionDispatchContextStepService.doSendStepContextMessage(reqBean); + + return execSuccessCompleteAndSendGuideReturn(reqBean, new StationResultBean().writeDbLog(), "请扫描加工单!"); + + } + + @Override + public StepResult execute(StationRequestBean reqBean) { + + StationResultBean resultBean = new StationResultBean(); + + StepResult stepResult = StepResult.getSuccessComplete(); + + //扫描信息置空 + String scanInfo = reqBean.resetScanInfo(reqBean.getScanInfo()); + + //获取上下文信息 + MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean); + + //获取生产过程上下文对象有异常信息 抛出异常 + if (!productionProcessContext.getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); + + //存储生产过程上下文对象 + productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext); + + //当前工位使用的设备 + MesCellEquipContext cellEquipmentContext = productionProcessContext.getCurCellEquip(); + + //如果没有扫描信息, 取手选工单信息, 封装扫/读信息:加工单信息 + List equipVariableCollectContextList; + if (!StringUtils.isEmpty(scanInfo)) equipVariableCollectContextList = doHandleScanProductSnContext(reqBean, stepResult, scanInfo); + else equipVariableCollectContextList = doHandleScanProductSnContext(reqBean, stepResult); + + //扫描信息为空 + if (CollectionUtils.isEmpty(equipVariableCollectContextList)) execSendGuideAndThrowEx(reqBean, resultBean.writeDbLog(), "请扫描加工单!"); + + //保存上下文扫/读信息:加工单 + productionDispatchContextStepService.saveScanWorkOrderNoContext(reqBean, equipVariableCollectContextList); + + return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, stepResult.getMsg()); + + } + + + //封装扫/读信息:加工单信息 (扫描) + private List doHandleScanProductSnContext(StationRequestBean reqBean, StepResult stepResult, String scanInfo) { + + List equipVariableCollectContextList = new ArrayList<>(); + + equipVariableCollectContextList.add(new MesEquipVariableCollectContext(reqBean.getOrganizeCode(), scanInfo, TimeTool.getNowTime(true), MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getValue())); + + //发送工步内容 + productionDispatchContextStepService.doSendStepContextMessage(reqBean, scanInfo, MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN); + + stepResult.msg(String.format("当前扫描信息加工单[%s]!", scanInfo)); + + return equipVariableCollectContextList; + + } + + //封装扫/读信息:加工单信息 (选择) + private List doHandleScanProductSnContext(StationRequestBean reqBean, StepResult stepResult) { + + List chooseCavityOrder = productionDispatchContextStepService.getFunctionChooseCavityOrderContext(reqBean); + + if (CollectionUtils.isEmpty(chooseCavityOrder)) return null; + + List pickList = new ArrayList<>(Arrays.asList(chooseCavityOrder.stream().filter(o -> (null != o && o.getKey().equals(MesPcnExtConstWords.WORK_ORDER_NO))).findFirst().get().getValue().split(MesPcnExtConstWords.SEMICOLON))); + + List equipVariableCollectContextList = new ArrayList<>(); + + pickList.stream().filter(o -> !StringUtils.isEmpty(o)).forEach(o -> equipVariableCollectContextList.add(new MesEquipVariableCollectContext(reqBean.getOrganizeCode(), o, TimeTool.getNowTime(true), MesExtEnumUtil.CELL_MESSAGE_SOURCE.PICK.getValue()))); + + //发送工步内容 + String scanInfo = chooseCavityOrder.stream().filter(o -> null != o).map(o -> o.getName() + "[" + o.getValue() + "]").collect(Collectors.joining(MesPcnExtConstWords.SEMICOLON)); + productionDispatchContextStepService.doSendStepContextMessage(reqBean, scanInfo, MesExtEnumUtil.CELL_MESSAGE_SOURCE.PICK); + + stepResult.msg(String.format("当前选择信息%s!", scanInfo)); + + return equipVariableCollectContextList; + + } + +} 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 d33ea9a..99f419b 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 @@ -158,6 +158,33 @@ public class MesProductionDispatchContextStepService extends BaseStepService imp deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.SEND_PROCESS_CMD_CONTEXT); } + //获取上下文产出零件号 + @Override + public List getProductionPartNoContext(StationRequestBean reqBean) { + String productionPartNoJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.FIRST_MOULD_NO_CONTEXT); + return !StringUtils.isEmpty(productionPartNoJson) ? JSONObject.parseArray(productionPartNoJson, MesEquipVariableCollectContext.class) : null; + } + + //验证上下文产出零件号是否存在 + @Override + public Boolean checkProductionPartNoIsExistContext(StationRequestBean reqBean) { + String firstMouldNo = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.FIRST_MOULD_NO_CONTEXT); + return !StringUtils.isEmpty(firstMouldNo) ? true : false; + } + + //保存上下文产出零件号 [JSON]List + @Override + public Boolean saveProductionPartNoContext(StationRequestBean reqBean, List productionPartNoList) { + if (CollectionUtils.isEmpty(productionPartNoList)) return false; + return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.FIRST_MOULD_NO_CONTEXT, JSONObject.toJSONString(productionPartNoList)); + } + + //删除上下文产出零件号 + @Override + public void deleteProductionPartNoContext(StationRequestBean reqBean) { + deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.FIRST_MOULD_NO_CONTEXT); + } + //获取上下文头道模具号 @Override public MesEquipVariableCollectContext getFirstMouldNoContext(StationRequestBean reqBean) { @@ -259,6 +286,33 @@ public class MesProductionDispatchContextStepService extends BaseStepService imp deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.MOULD_NO_CONTEXT); } + //获取上下文扫/读信息:加工单 + @Override + public List getScanWorkOrderNoContext(StationRequestBean reqBean) { + String productSnJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.SCAN_WORK_ORDER_NO_CONTEXT); + return !StringUtils.isEmpty(productSnJson) ? JSONObject.parseArray(productSnJson, MesEquipVariableCollectContext.class) : null; + } + + //验证上下文扫/读信息:加工单是否存在 + @Override + public Boolean checkScanWorkOrderNoIsExistContext(StationRequestBean reqBean) { + String productSnJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.SCAN_WORK_ORDER_NO_CONTEXT); + return !StringUtils.isEmpty(productSnJson) ? true : false; + } + + //保存上下文扫/读信息:加工单 [JSON]List + @Override + public Boolean saveScanWorkOrderNoContext(StationRequestBean reqBean, List productSnList) { + if (CollectionUtils.isEmpty(productSnList)) return false; + return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.SCAN_WORK_ORDER_NO_CONTEXT, JSONObject.toJSONString(productSnList)); + } + + //删除上下文扫/读信息:加工单 + @Override + public void deleteScanWorkOrderNoContext(StationRequestBean reqBean) { + deleteFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.SCAN_WORK_ORDER_NO_CONTEXT); + } + //获取上下文扫/读信息:主条码 @Override public List getScanProductSnContext(StationRequestBean reqBean) { @@ -483,15 +537,16 @@ public class MesProductionDispatchContextStepService extends BaseStepService imp //获取手动选择的腔数及工单信息上下文 @Override - public String getFunctionChooseCavityOrderContext(StationRequestBean reqBean) { - return getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.FUNCTION_CHOOSE_CAVITY_ORDER); + 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; } - //保存手动选择的腔数及工单信息上下文 腔数=工单个数 数据格式: 腔数;工单1;工单2;工单3 + //保存手动选择的腔数及工单信息上下文 腔数=工单个数 数据格式: [StationKvBean(key=cavity, name=腔数, value=3, seq=0), StationKvBean(key=workOrderNo, name=加工单, value=工单1;工单2;工单3, seq=1)] @Override - public Boolean saveFunctionChooseCavityOrderContext(StationRequestBean reqBean, String value) { - if (StringUtils.isEmpty(value)) return false; - return saveFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.FUNCTION_CHOOSE_CAVITY_ORDER, value); + 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)); } //删除手动选择的腔数及工单信息上下文 diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesEquipVariableCollectContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesEquipVariableCollectContext.java index 3f153af..0a1a8bc 100644 --- a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesEquipVariableCollectContext.java +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesEquipVariableCollectContext.java @@ -1,6 +1,7 @@ package cn.estsh.i3plus.ext.mes.pcn.pojo.context; import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentLog; +import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil; import io.swagger.annotations.ApiParam; import lombok.Data; import org.springframework.beans.BeanUtils; @@ -87,21 +88,29 @@ public class MesEquipVariableCollectContext implements Serializable { @ApiParam("读取时间") private String equipVariableReadtime; + @ApiParam("信息来源") + private Integer messageSource; + public MesEquipVariableCollectContext() {} public MesEquipVariableCollectContext(Long equipVariableId) { this.equipVariableId = equipVariableId; } - public MesEquipVariableCollectContext(String organizeCode, String equipVariableValue, String equipVariableReadtime) { + //扫描/选择信息赋值 + public MesEquipVariableCollectContext(String organizeCode, String equipVariableValue, String equipVariableReadtime, Integer messageSource) { this.organizeCode = organizeCode; this.equipVariableValue = equipVariableValue; this.equipVariableReadtime = equipVariableReadtime; + this.messageSource = messageSource; } + //读取信息赋值 public void copyValue(MesEquipmentLog equipmentLog, String equipVariableReadtime) { if (null == equipmentLog) return; BeanUtils.copyProperties(equipmentLog, this); this.equipVariableReadtime = equipVariableReadtime; + this.messageSource = MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ.getValue(); } + } 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 15af52b..014de02 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 @@ -1,6 +1,8 @@ package cn.estsh.i3plus.ext.mes.pcn.pojo.context; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.pojo.mes.bean.MesMouldMultiCavity; +import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder; import io.swagger.annotations.ApiParam; import lombok.Data; import org.springframework.beans.BeanUtils; @@ -21,6 +23,9 @@ public class MesProductionPartContext implements Serializable { @ApiParam("组织代码") private String organizeCode; + @ApiParam("生产工单ID") + private Long id; + @ApiParam("生产工单号") private String workOrderNo; @@ -39,8 +44,23 @@ public class MesProductionPartContext implements Serializable { @ApiParam("模具代码") private String mouldNo; + //根据一模多腔赋值 public MesProductionPartContext copyMouldMultiCavity(MesMouldMultiCavity mouldMultiCavity) { - BeanUtils.copyProperties(mouldMultiCavity, this); + BeanUtils.copyProperties(mouldMultiCavity, this, MesPcnExtConstWords.ID); + return this; + } + + //根据零件信息赋值 + public MesProductionPartContext copyPartNo(String organizeCode, String partNo, String partName) { + this.organizeCode = organizeCode; + this.partNo = partNo; + this.partName = partName; + return this; + } + + //根据工单信息赋值 + public MesProductionPartContext copyPartNo(MesWorkOrder workOrder) { + BeanUtils.copyProperties(workOrder, this); return this; } 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 b9a5252..f4d538a 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 @@ -116,6 +116,8 @@ public class MesPcnExtConstWords { public static final String CUST_SN = "custSn"; // 条码状态 public static final String SN_STATUS = "snStatus"; + // 腔数 + public static final String CAVITY = "cavity"; //设备数据变量读写访问配置 From 56fb8a3e3ef7c8f0b1389a2206d1298f9e6c85aa Mon Sep 17 00:00:00 2001 From: "jhforever.wang@estsh.com" Date: Mon, 10 Jun 2024 23:36:52 +0800 Subject: [PATCH 14/14] step --- .../step/MesFirstMouldNoReadStepService.java | 3 +-- .../step/MesProductionPartNoReadStepService.java | 3 +-- .../step/MesWorkOrderCheckNosortStepService.java | 19 +++++++++++++++++++ .../pcn/pojo/context/MesProductionPartContext.java | 3 +++ .../ext/mes/pcn/pojo/util/MesPcnExtConstWords.java | 2 ++ 5 files changed, 26 insertions(+), 4 deletions(-) diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesFirstMouldNoReadStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesFirstMouldNoReadStepService.java index 69d7505..11df913 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesFirstMouldNoReadStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesFirstMouldNoReadStepService.java @@ -10,7 +10,6 @@ import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.mes.pcn.api.iservice.base.IPartService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; import cn.estsh.i3plus.mes.pcn.util.StationKvBeanUtil; -import cn.estsh.i3plus.platform.common.util.MesPcnConstWords; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable; import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg; @@ -222,7 +221,7 @@ public class MesFirstMouldNoReadStepService extends BaseStepService { private List> getModuleContextData(StationRequestBean reqBean, List productionPartContextList, Boolean isFirstMouldNo) { List> dataList = new ArrayList<>(); productionPartContextList.forEach(o -> StationKvBeanUtil.addStationKvBeanList(dataList, - new ArrayList<>(), new StationKvBean(MesPcnExtConstWords.MOULD_NO, isFirstMouldNo ? "头道模具号" : "模具号", o.getMouldNo()), new StationKvBean(MesPcnConstWords.PART_NO, "零件编码", o.getPartNo()), new StationKvBean(MesPcnConstWords.PART_NAME, "零件名称", o.getPartName()))); + new ArrayList<>(), new StationKvBean(MesPcnExtConstWords.MOULD_NO, isFirstMouldNo ? "头道模具号" : "模具号", o.getMouldNo()), new StationKvBean(MesPcnExtConstWords.PART_NO, "零件编码", o.getPartNo()), new StationKvBean(MesPcnExtConstWords.PART_NAME, "零件名称", o.getPartName()))); return dataList; } diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionPartNoReadStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionPartNoReadStepService.java index 1e43c1f..3615eb1 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionPartNoReadStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProductionPartNoReadStepService.java @@ -9,7 +9,6 @@ import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; import cn.estsh.i3plus.mes.pcn.api.iservice.base.IPartService; import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService; import cn.estsh.i3plus.mes.pcn.util.StationKvBeanUtil; -import cn.estsh.i3plus.platform.common.util.MesPcnConstWords; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable; import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg; @@ -200,7 +199,7 @@ public class MesProductionPartNoReadStepService extends BaseStepService { //封装展示组件MODULE_CONTENT内容 private List> getModuleContextData(StationRequestBean reqBean, List productionPartContextList) { List> dataList = new ArrayList<>(); - productionPartContextList.forEach(o -> StationKvBeanUtil.addStationKvBeanList(dataList, new ArrayList<>(), new StationKvBean(MesPcnConstWords.PART_NO, "零件编码", o.getPartNo()), new StationKvBean(MesPcnConstWords.PART_NAME, "零件名称", o.getPartName()))); + productionPartContextList.forEach(o -> StationKvBeanUtil.addStationKvBeanList(dataList, new ArrayList<>(), new StationKvBean(MesPcnExtConstWords.PART_NO, "零件编码", o.getPartNo()), new StationKvBean(MesPcnExtConstWords.PART_NAME, "零件名称", o.getPartName()))); return dataList; } 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 b479b62..7559221 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 @@ -7,9 +7,12 @@ import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext; import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCollectContext; 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.mes.pcn.util.StationKvBeanUtil; import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil; import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder; +import cn.estsh.i3plus.pojo.mes.model.StationKvBean; import cn.estsh.i3plus.pojo.mes.model.StationRequestBean; import cn.estsh.i3plus.pojo.mes.model.StationResultBean; import cn.estsh.i3plus.pojo.mes.model.StepResult; @@ -82,6 +85,9 @@ public class MesWorkOrderCheckNosortStepService extends BaseStepService { //保存上下文产出零件信息 productionDispatchContextStepService.saveProductionPartContext(reqBean, productionPartContextList); + //更新展示组件MODULE_CONTENT内容 + doCacheMoudleContext(reqBean, productionPartContextList); + if (MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getValue() != equipVariableCollectContextList.get(0).getMessageSource()) return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, String.format("上下文中的加工单%s验证工单状态成功!", stepResult.getObj().toString())); //当前工位使用的设备 @@ -126,4 +132,17 @@ public class MesWorkOrderCheckNosortStepService extends BaseStepService { } + private void doCacheMoudleContext(StationRequestBean reqBean, List productionPartContextList) { + //存储展示组件MODULE_CONTENT内容 + productionDispatchContextStepService.saveModuleContentContext(reqBean, getModuleContextData(reqBean, productionPartContextList)); + } + + //封装展示组件MODULE_CONTENT内容 + private List> getModuleContextData(StationRequestBean reqBean, List productionPartContextList) { + List> dataList = new ArrayList<>(); + productionPartContextList.forEach(o -> StationKvBeanUtil.addStationKvBeanList(dataList, new ArrayList<>(), + new StationKvBean(MesPcnExtConstWords.WORK_ORDER_NO, "工单号", o.getWorkOrderNo()), new StationKvBean(MesPcnExtConstWords.PART_NO, "零件编码", o.getPartNo()), new StationKvBean(MesPcnExtConstWords.QTY, "工单数", String.valueOf(o.getQty().intValue())))); + return dataList; + } + } 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 014de02..2788384 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 @@ -29,6 +29,9 @@ public class MesProductionPartContext implements Serializable { @ApiParam("生产工单号") private String workOrderNo; + @ApiParam("工单数量") + private Double qty; + @ApiParam("设备代码") private String equipmentCode; 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 f4d538a..69d9e8f 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 @@ -118,6 +118,8 @@ public class MesPcnExtConstWords { public static final String SN_STATUS = "snStatus"; // 腔数 public static final String CAVITY = "cavity"; + // 数量 + public static final String QTY = "qty"; //设备数据变量读写访问配置