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 4749ace..4132298 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 @@ -90,8 +90,11 @@ public interface IMesProductionDispatchContextStepService { @ApiOperation(value = "获取上下文零件数据信息") Map getPartDataContext(StationRequestBean reqBean); + @ApiOperation(value = "获取上下文零件数据信息") + Map getPartDataExtContext(StationRequestBean reqBean); + @ApiOperation(value = "保存上下文零件数据信息", notes = "[JSON]Map") - Boolean dispatchPartDataContext(StationRequestBean reqBean, Map partDataMap); + Boolean dispatchPartDataContext(StationRequestBean reqBean, Map partDataMap); @ApiOperation(value = "删除上下文零件数据信息") void removePartDataContext(StationRequestBean reqBean); diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesStationService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesStationService.java new file mode 100644 index 0000000..6788591 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/IMesStationService.java @@ -0,0 +1,22 @@ +package cn.estsh.i3plus.ext.mes.pcn.api.busi; + +import cn.estsh.i3plus.pojo.mes.bean.MesStation; +import io.swagger.annotations.ApiOperation; + +/** + * @Description : 站点信息 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/9/12 13:55 + * @Modify: + **/ +public interface IMesStationService { + + @ApiOperation("查询站点信息根据设备代码") + MesStation getMesStationByEquipmentCode(String organizeCode,String equipmentCode); + + @ApiOperation("校验站点信息根据设备代码") + MesStation checkMesStationByEquipmentCode(String organizeCode,String equipmentCode); + + +} diff --git a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/recyclablepackage/IMesRecyclablePackageBindingService.java b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/recyclablepackage/IMesRecyclablePackageBindingService.java index 80a1931..709b5d8 100644 --- a/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/recyclablepackage/IMesRecyclablePackageBindingService.java +++ b/modules/i3plus-ext-mes-pcn-api/src/main/java/cn/estsh/i3plus/ext/mes/pcn/api/busi/recyclablepackage/IMesRecyclablePackageBindingService.java @@ -6,6 +6,7 @@ import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackageBindi import io.swagger.annotations.ApiOperation; import java.util.List; +import java.util.Map; /** * @Description : 料箱绑定 @@ -19,6 +20,9 @@ public interface IMesRecyclablePackageBindingService { @ApiOperation("查询回收包装绑定明细") List findMesRecyclablePackageBindingDetailByPid(String organizeCode, long pid); + @ApiOperation("查询回收包装绑定明细Map") + Map> findMesRecyclablePackageBindingDetailByPidMap(String organizeCode, List pidList); + @ApiOperation("查询回收包装绑定明细数量") int findMesRecyclablePackageBindingDetailByPidCount(String organizeCode, long pid); @@ -28,6 +32,9 @@ public interface IMesRecyclablePackageBindingService { @ApiOperation("查询回收包装绑定") MesRecyclablePackageBinding getMesRecyclablePackageBindingByPackageSn(String organizeCode, String packageSn); + @ApiOperation("查询回收包装绑定Map") + Map> findMesRecyclablePackageBindingByPackageSnMap(String organizeCode, List packageSnList); + @ApiOperation("查询回收包装绑定明细") List findMesRecyclablePackageBindingDetail(MesRecyclablePackageBindingModel mesRecyclablePackageBindingModel); diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesStationServiceImpl.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesStationServiceImpl.java new file mode 100644 index 0000000..27100d7 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/MesStationServiceImpl.java @@ -0,0 +1,47 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi; + +import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesStationService; +import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException; +import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords; +import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.base.util.StringUtil; +import cn.estsh.i3plus.pojo.mes.bean.MesStation; +import cn.estsh.i3plus.pojo.mes.repository.MesStationRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Objects; + +/** + * @Description : 站点信息 + * @Reference : + * @Author : junsheng.li + * @CreateDate 2024/9/12 13:56 + * @Modify: + **/ +@Service +public class MesStationServiceImpl implements IMesStationService { + + @Autowired + private MesStationRepository mesStationRepository; + + + @Override + public MesStation getMesStationByEquipmentCode(String organizeCode, String equipmentCode) { + if (StringUtil.isEmptyAndNull(organizeCode) || StringUtil.isEmptyAndNull(organizeCode)) { + return null; + } + return mesStationRepository.getByProperty( + new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.EQUIPMENT_CODE}, + new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), equipmentCode}); + } + + @Override + public MesStation checkMesStationByEquipmentCode(String organizeCode, String equipmentCode) { + MesStation mesStation = this.getMesStationByEquipmentCode(organizeCode, equipmentCode); + if (Objects.isNull(mesStation)) { + MesPcnException.throwMesBusiException("设备【%s】站点信息未维护", equipmentCode); + } + return mesStation; + } +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/recyclablepackage/MesRecyclablePackageBindingServiceImpl.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/recyclablepackage/MesRecyclablePackageBindingServiceImpl.java index c4e969b..32bfa83 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/recyclablepackage/MesRecyclablePackageBindingServiceImpl.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/busi/recyclablepackage/MesRecyclablePackageBindingServiceImpl.java @@ -68,6 +68,18 @@ public class MesRecyclablePackageBindingServiceImpl implements IMesRecyclablePac } @Override + public Map> findMesRecyclablePackageBindingDetailByPidMap(String organizeCode, List pidList) { + if (StringUtil.isEmptyAndNull(organizeCode) || CollectionUtils.isEmpty(pidList)) { + return null; + } + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(pidList, MesPcnExtConstWords.PID, packBean); + List packageBindingDetailList = mesRecyclablePackageBindingDetailRepository.findByHqlWhere(packBean); + return CollectionUtils.isEmpty(packageBindingDetailList) ? null : packageBindingDetailList.stream().filter(Objects::nonNull).collect(Collectors.groupingBy(MesRecyclablePackageBindingDetail::getPid)); + + } + + @Override public int findMesRecyclablePackageBindingDetailByPidCount(String organizeCode, long pid) { if (StringUtil.isEmptyAndNull(organizeCode) || StringUtil.isEmptyAndNull(pid)) { return MesPcnExtConstWords.ZERO; @@ -99,6 +111,17 @@ public class MesRecyclablePackageBindingServiceImpl implements IMesRecyclablePac } @Override + public Map> findMesRecyclablePackageBindingByPackageSnMap(String organizeCode, List packageSnList) { + if (StringUtil.isEmptyAndNull(organizeCode) || CollectionUtils.isEmpty(packageSnList)) { + return null; + } + DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode); + DdlPreparedPack.getInPackList(packageSnList, MesPcnExtConstWords.PACKAGE_SN, packBean); + List packageBindingList = mesRecyclablePackageBindingRepository.findByHqlWhere(packBean); + return CollectionUtils.isEmpty(packageBindingList) ? null : packageBindingList.stream().filter(Objects::nonNull).collect(Collectors.groupingBy(MesRecyclablePackageBinding::getPackageSn)); + } + + @Override public List findMesRecyclablePackageBindingDetail(MesRecyclablePackageBindingModel mesRecyclablePackageBindingModel) { //回收包装绑定 MesRecyclablePackageBinding mesRecyclablePackageBinding = getMesRecyclablePackageBindingByPackageSn(mesRecyclablePackageBindingModel.getOrganizeCode(), mesRecyclablePackageBindingModel.getPackageSn()); @@ -202,7 +225,7 @@ public class MesRecyclablePackageBindingServiceImpl implements IMesRecyclablePac List produceSnList = mesProduceSnExtService.getProduceSnList(mesRecyclablePackageBindingModel.getOrganizeCode(), mesRecyclablePackageBindingModel.getProductSn()); if (CollectionUtils.isEmpty(produceSnList)) { //外协件校验 - MesRecyclablePackagePart mesRecyclablePackagePart = getMesRecyclablePackagePart(mesRecyclablePackageBindingModel, mesRecyclablePackagePartList); + MesRecyclablePackagePart mesRecyclablePackagePart = getMesRecyclablePackagePart(mesRecyclablePackageBindingModel, mesRecyclablePackagePartList.stream().filter(t -> !Objects.isNull(t.getProductSnCheckType()) && MesExtEnumUtil.PRODUCT_SN_CHECK_TYPE.PRODUCT_SN_CHECK_TYPE_20.getValue() == t.getProductSnCheckType()).collect(Collectors.toList())); if(Objects.isNull(mesRecyclablePackagePart)){ MesPcnException.throwMesBusiException("条码【%s】不存在", mesRecyclablePackageBindingModel.getProductSn()); } @@ -220,11 +243,13 @@ public class MesRecyclablePackageBindingServiceImpl implements IMesRecyclablePac private MesRecyclablePackagePart getMesRecyclablePackagePart(MesRecyclablePackageBindingModel mesRecyclablePackageBindingModel, List mesRecyclablePackagePartList) { //外协件 MesRecyclablePackagePart checkPassRecyclablePackagePart = null; - for (MesRecyclablePackagePart mesRecyclablePackagePart : mesRecyclablePackagePartList) { - // 校验正则表达式 - if (checkRule(mesRecyclablePackageBindingModel, mesRecyclablePackagePart.getProductSnRule())) { - checkPassRecyclablePackagePart = mesRecyclablePackagePart; - break; + if(!CollectionUtils.isEmpty(mesRecyclablePackagePartList)){ + for (MesRecyclablePackagePart mesRecyclablePackagePart : mesRecyclablePackagePartList) { + // 校验正则表达式 + if (checkRule(mesRecyclablePackageBindingModel, mesRecyclablePackagePart.getProductSnRule())) { + checkPassRecyclablePackagePart = mesRecyclablePackagePart; + break; + } } } return checkPassRecyclablePackagePart; diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesCustomDialogStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesCustomDialogStepService.java new file mode 100644 index 0000000..b38e41a --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesCustomDialogStepService.java @@ -0,0 +1,78 @@ +package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; + +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.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.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 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; +import java.util.Optional; + +/** + * @Description : 客制化弹框会话工步 + * @Author : wangjie + **/ +@Slf4j +@Service("mesCustomDialogStepService") +public class MesCustomDialogStepService extends BaseStepService { + + @Autowired + private IFsmModuleFunctionService fsmModuleFunctionService; + + @Autowired + private IShippingDispatchService shippingDispatchService; + + @Override + public void title(StationRequestBean reqBean) { + this.sendMessage(reqBean, new StationResultBean().resultObj(MesPcnExtConstWords.STEP_DISABLE_SCAN), String.format("工步: %s", reqBean.getStepName()), MesPcnEnumUtil.STATION_BUSI_TYPE.STEP_TITLE, MesPcnEnumUtil.STATION_DATA_TYPE.TITLE); + } + + @Override + public StepResult execute(StationRequestBean reqBean) { + + StationResultBean resultBean = new StationResultBean(); + + StepResult stepResult = StepResult.getSuccessComplete(); + + //弹框已经关闭 + if (reqBean.getStepDialogStatus()) { + reqBean.setStepDialogStatus(false); + return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, "弹框会话关闭!"); + } + + //获取工步参数 + Optional> stepParamMap = getStepParams(reqBean); + + String customPageName = (null != stepParamMap && stepParamMap.isPresent() && stepParamMap.get().containsKey(MesPcnExtConstWords.CUSTOM_PAGE_NAME)) ? stepParamMap.get().get(MesPcnExtConstWords.CUSTOM_PAGE_NAME).getParamValue() : null; + + if (StringUtils.isEmpty(customPageName)) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("弹框会话工步未配置工步参数[%s]!", MesPcnExtConstWords.CUSTOM_PAGE_NAME)); + + //获取工步弹框需要渲染的数据 + Object stepDialogContext = fsmModuleFunctionService.stepDialogDispatch(reqBean, customPageName); + + //没有数据返回NULL则默认不需要弹框, 无须渲染动态数据时无须重写stepDialogDispatch方法且接口方法已默认返回true可以直接弹框 + if (null == stepDialogContext) return stepResult; + + //发送弹框数据 + this.sendMessage(reqBean, resultBean.busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.CUSTOM_COMPONENT.getValue()).dataType(MesPcnEnumUtil.STATION_DATA_TYPE.CUSTOM_DIALOG.getValue()).customPageName(customPageName).resultObj(stepDialogContext)); + + //清除剩余扫描队列 + shippingDispatchService.clearScanQueue(reqBean); + + //结束线程 + stepSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), "弹框会话开启!"); + + return stepResult; + + } + +} diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProduceSeqCheckCustOrderNoStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProduceSeqCheckCustOrderNoStepService.java index e10c1a7..86364b1 100644 --- a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProduceSeqCheckCustOrderNoStepService.java +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesProduceSeqCheckCustOrderNoStepService.java @@ -23,7 +23,7 @@ import java.util.*; import java.util.stream.Collectors; /** - * @Description : 生产工单顺序防错工步 【排序客户订单号】 + * @Description : 生产工单顺序防错工步 【排序通用汽车客户订单号】 * @Author : wangjie **/ @Slf4j diff --git a/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesRecyclablePackageMatchStepService.java b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesRecyclablePackageMatchStepService.java new file mode 100644 index 0000000..a5f0f59 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/step/MesRecyclablePackageMatchStepService.java @@ -0,0 +1,226 @@ +//package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step; +// +//import cn.estsh.i3plus.ext.mes.pcn.api.busi.*; +//import cn.estsh.i3plus.ext.mes.pcn.api.busi.recyclablepackage.IMesRecyclablePackageBindingService; +//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.actor.shipping.dispatch.IFsmCommonService; +//import cn.estsh.i3plus.mes.pcn.api.iservice.base.IConfigService; +//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.*; +//import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackageBinding; +//import cn.estsh.i3plus.pojo.mes.bean.recyclablepackage.MesRecyclablePackageBindingDetail; +//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.repository.MesStationRepository; +//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.*; +//import java.util.stream.Collectors; +//import java.util.stream.Stream; +// +///** +// * @Description : 可回用包装条码匹配工步 +// * @Reference : +// * @Author : junsheng.li +// * @CreateDate 2024/9/12 11:20 +// * @Modify: +// **/ +//@Slf4j +//@Service("mesRecyclablePackageMatchStepService") +//public class MesRecyclablePackageMatchStepService extends BaseStepService { +// +// @Autowired +// private IMesProductionProcessContextStepService productionProcessContextStepService; +// +// @Autowired +// private IMesProductionDispatchContextStepService productionDispatchContextStepService; +// +// @Autowired +// private IMesStationService mesStationService; +// +// @Autowired +// private IMesRecyclablePackageBindingService mesRecyclablePackageBindingService; +// +// @Autowired +// private IMesProduceSnExtService produceSnExtService; +// +// @Autowired +// private IConfigService configService; +// +// @Override +// public StepResult execute(StationRequestBean reqBean) { +// +// StationResultBean resultBean = new StationResultBean(); +// +// StepResult stepResult = StepResult.getSuccessComplete(); +// +// //获取上下文信息 +// MesProductionProcessContext productionProcessContext = productionProcessContextStepService.dispatchCurCellEquipment(reqBean); +// +// //配置错误 抛出异常 +// if (!productionProcessContext.getSuccess()) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage()); +// +// //存储生产过程上下文对象 +// productionProcessContextStepService.dispatchProductionProcessContext(reqBean, productionProcessContext); +// +// //获取上下文生产扫/读信息:可回用包装条码 +// List equipVariableCollectContextList = productionDispatchContextStepService.getScanRecyclablePackageContext(reqBean); +// if (CollectionUtils.isEmpty(equipVariableCollectContextList)) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前缺失可回用包装条码信息!"); +// +// //清除本次已获取得到的可回用包装条码信息 +// productionDispatchContextStepService.removeScanRecyclablePackageContext(reqBean); +// +// //从上下文中取出设备信息 +// MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip(); +// +// //根据设备代码获取点位信息 +// MesStation station = mesStationService.getMesStationByEquipmentCode(reqBean.getOrganizeCode(),cellEquipContext.getEquipmentCode()); +// if (Objects.isNull(station) || Objects.isNull(station.getProcessMethod())) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("设备[%s]站点信息未维护", cellEquipContext.getEquipmentCode())); +// +// //加工模式 +// switch (MesExtEnumUtil.STATION_PROCESS_METHOD.valueOfType(station.getProcessMethod())){ +// case STATION_TYPE_10: +// case STATION_TYPE_20: +// case STATION_TYPE_30: +// case STATION_TYPE_40:{ +// //获取包装绑定主表 +// MesRecyclablePackageBinding recyclablePackageBinding = mesRecyclablePackageBindingService.getMesRecyclablePackageBindingByPackageSn(reqBean.getOrganizeCode(), equipVariableCollectContextList.iterator().next().getEquipVariableValue()); +// if(Objects.isNull(recyclablePackageBinding)) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("回收包装绑定[%s]信息不存在",equipVariableCollectContextList.iterator().next().getEquipVariableValue())); +// //获取绑定明细信息 +// List bindingDetailList = mesRecyclablePackageBindingService.findMesRecyclablePackageBindingDetailByPid(reqBean.getOrganizeCode(), recyclablePackageBinding.getId()); +// if(CollectionUtils.isEmpty(bindingDetailList)) return stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("回收包装绑定[%s]明细信息不存在",equipVariableCollectContextList.iterator().next().getEquipVariableValue())); +// //查询条码信息 +// Map> produceSnMap = produceSnExtService.getProduceSnMap(reqBean.getOrganizeCode(), bindingDetailList.stream().map(MesRecyclablePackageBindingDetail::getProductSn).collect(Collectors.toList())); +// List productionPsInContextList = new ArrayList<>(); +// for (MesRecyclablePackageBindingDetail bindingDetail : bindingDetailList) { +// //外协件 +// if (CollectionUtils.isEmpty(produceSnMap) || !produceSnMap.containsKey(bindingDetail.getProductSn())){ +// for (int i = 0; i < bindingDetail.getQty(); i++) { +// //查询物料信息 +// productionPsInContextList.add(new MesProductionPsInContext(reqBean.getOrganizeCode(), bindingDetail.getProductSn()).messageSource(equipVariableCollectContextList.iterator().next().getMessageSource())); +// } +// //自制件 +// }else{ +// createProductionPsInContext(reqBean, resultBean, stepResult, workCell, equipVariableCollectContext, produceSnMap.get(equipVariableCollectContext.getEquipVariableValue()), productionPsInContextList); +// } +// +// +// } +// +// +// };break; +// default:stepNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "站点加工模式未实现!");break; +// } +// +// +// for (MesEquipVariableCollectContext equipVariableCollectContext : equipVariableCollectContextList) { +// if (null == equipVariableCollectContext || StringUtils.isEmpty(equipVariableCollectContext.getEquipVariableValue())) continue; +// if (CollectionUtils.isEmpty(produceSnMap) || !produceSnMap.containsKey(equipVariableCollectContext.getEquipVariableValue())) +// productionPsInContextList.add(new MesProductionPsInContext(reqBean.getOrganizeCode(), equipVariableCollectContext.getEquipVariableValue()).messageSource(equipVariableCollectContext.getMessageSource())); +// else createProductionPsInContext(reqBean, resultBean, stepResult, workCell, equipVariableCollectContext, produceSnMap.get(equipVariableCollectContext.getEquipVariableValue()), productionPsInContextList); +// } +// +// //获取上下文产出零件信息 +// List cachedProductionPartContextList = productionDispatchContextStepService.getProductionPartContext(reqBean); +// +// //非扫描场景 清除历史产出零件信息 +// if (MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getValue() != equipVariableCollectContextList.get(0).getMessageSource() && !CollectionUtils.isEmpty(cachedProductionPartContextList)) removeBusiData(reqBean); +// //保存上下文产出零件信息 +// productionDispatchContextStepService.dispatchProductionPartContext(reqBean, productionPartContextList); +// +// //存储展示组件MODULE_CONTENT内容 +// productionDispatchContextStepService.dispatchModuleContentContext(reqBean, getModuleContextData(reqBean, productionPartContextList)); +// +// //当前工位使用的设备 +// MesCellEquipContext cellEquipmentContext = productionProcessContext.getCurCellEquip(); +// if (MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getValue() == equipVariableCollectContextList.get(0).getMessageSource() && cellEquipmentContext.getCavity().compareTo(productionPartContextList.size()) > 0) +// return stepDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog().scanInfo(equipVariableCollectContextList.get(0).getEquipVariableValue()), +// 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())); +// +// +// String workOrderStr = equipVariableCollectContextList.stream().filter(o -> null != o).map(MesEquipVariableCollectContext::getEquipVariableValue).collect(Collectors.toList()).toString(); +// return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog().scanInfo(workOrderStr), stepResult, String.format("当前%s加工单%s验证工单状态成功%s!", +// MesExtEnumUtil.CELL_MESSAGE_SOURCE.valueOfDescription(equipVariableCollectContextList.get(0).getMessageSource()), workOrderStr, +// MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getValue() == equipVariableCollectContextList.get(0).getMessageSource() ? String.format(",当前加工单个数[%s]已满足腔数", productionPartContextList.size()) : MesPcnExtConstWords.EMPTY)); +// +// } +// +// +// private StepResult createProductionPsInContext(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, +// MesWorkCell workCell, MesEquipVariableCollectContext equipVariableCollectContext, List produceSnList, List productionPsInContextList) { +// +// String suffixMsg = !StringUtils.isEmpty(stepResult.getMsg()) ? stepResult.getMsg() + MesPcnExtConstWords.SEMICOLON : MesPcnExtConstWords.EMPTY; +// +// List unknowList = produceSnList.stream().filter(o -> (null != o && o.getSnStatus().compareTo(MesExtEnumUtil.PRODUCE_SN_STATUS.UNKNOW.getValue()) == 0)).collect(Collectors.toList()); +// +// if (!CollectionUtils.isEmpty(unknowList) && unknowList.size() > 1) { +// return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]信息异常,存在[%s]条[未知]状态的记录", suffixMsg, equipVariableCollectContext.getEquipVariableValue(), unknowList.size())); +// } +// +// if (!CollectionUtils.isEmpty(unknowList) && checkAllowUnknowCenterCfg(reqBean) && (unknowList.size() > 1 || (!unknowList.get(0).getWorkCenterCode().equals(reqBean.getWorkCenterCode()) || !unknowList.get(0).getWorkCellCode().equals(reqBean.getWorkCellCode())))) { +// return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]信息条码状态已被%s标记[未知]", suffixMsg, equipVariableCollectContext.getEquipVariableValue(), +// unknowList.stream().filter(Objects::nonNull).map(o -> new StringJoiner(MesPcnExtConstWords.AND).add(o.getWorkCenterCode()).add(o.getWorkCellCode()).toString()).collect(Collectors.joining(MesPcnExtConstWords.SEMICOLON)))); +// } +// +// produceSnList = produceSnList.stream().filter(Objects::nonNull).sorted(Comparator.comparing(MesProduceSn::getCreateDatetime).reversed()).collect(Collectors.toList()); +// +// MesProduceSn produceSn = produceSnList.get(0); +// +// if (produceSn.getQcStatus().compareTo(MesExtEnumUtil.PRODUCE_QC_STATUS.QUALIFIED.getValue()) != 0 && produceSn.getQcStatus().compareTo(MesExtEnumUtil.PRODUCE_QC_STATUS.SUSPICIOUS_TO_QUALIFIED.getValue()) != 0) +// return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]质量状态[%s]", suffixMsg, equipVariableCollectContext.getEquipVariableValue(), MesExtEnumUtil.PRODUCE_QC_STATUS.valueOfDescription(produceSn.getQcStatus()))); +// +// if (produceSn.getSnStatus().compareTo(MesExtEnumUtil.PRODUCE_SN_STATUS.ASSEMBLY_BACK.getValue()) > 0) +// return stepResult.isCompleted(false).msg(String.format("%s主条码[%s]条码状态[%s]", suffixMsg, equipVariableCollectContext.getEquipVariableValue(), MesExtEnumUtil.PRODUCE_SN_STATUS.valueOfDescription(produceSn.getSnStatus()))); +// +// //正常条码 +// if (produceSn.getSnStatus().compareTo(MesExtEnumUtil.PRODUCE_SN_STATUS.UNKNOW.getValue()) != 0) { +// +// productionPsInContextList.add(new MesProductionPsInContext(workCell, produceSn).messageSource(equipVariableCollectContext.getMessageSource())); +// +// return stepResult; +// } +// +// //未知条码【工序为空 代表新做的工序没有加工完成】 +// if (StringUtils.isEmpty(produceSn.getProcessCode()) && produceSnList.size() > 1) { +// +// productionPsInContextList.add(new MesProductionPsInContext(workCell, produceSnList.get(1)).messageSource(equipVariableCollectContext.getMessageSource()).relateId(produceSn.getId())); +// +// return stepResult; +// } +// +// //未知条码【工序为空 代表新做的工序没有加工完成】【只有一条条码记录 代表是打印的条码自进自出直接被标记为未知】 +// if (StringUtils.isEmpty(produceSn.getProcessCode())) { +// +// productionPsInContextList.add(new MesProductionPsInContext(reqBean.getOrganizeCode(), equipVariableCollectContext.getEquipVariableValue()).messageSource(equipVariableCollectContext.getMessageSource()).relateId(produceSn.getId())); +// +// return stepResult; +// } +// +// //未知条码【工序不为空 代表已完成的工序被重做后没有加工完成】 +// productionPsInContextList.add(new MesProductionPsInContext(workCell, produceSn).messageSource(equipVariableCollectContext.getMessageSource()).relateId(produceSn.getId())); +// +// return stepResult; +// +// } +// +// private Boolean checkAllowUnknowCenterCfg(StationRequestBean reqBean) { +// List configList = configService.doCachedConfigList(MesPcnExtConstWords.ALLOW_UNKNOW_CENTER_CFG, reqBean.getOrganizeCode()); +// if (CollectionUtils.isEmpty(configList)) return true; +// List allowUnknowCenterList = Arrays.asList(configList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getCfgValue()))).map(MesConfig::getCfgValue).collect(Collectors.joining(MesPcnExtConstWords.COMMA)).split(MesPcnExtConstWords.COMMA)); +// return CollectionUtils.isEmpty(allowUnknowCenterList) || !allowUnknowCenterList.contains(reqBean.getWorkCenterCode()); +// } +// +//} 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 0570a1c..1ac25e4 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 @@ -194,9 +194,16 @@ public class MesProductionDispatchContextStepService extends BaseStepService imp return !StringUtils.isEmpty(partDataJson) ? JSONObject.parseObject(partDataJson, new TypeReference>() {}) : null; } + //获取上下文零件数据信息 + @Override + public Map getPartDataExtContext(StationRequestBean reqBean) { + String partDataJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PART_DATA_CONTEXT); + return !StringUtils.isEmpty(partDataJson) ? JSONObject.parseObject(partDataJson, new TypeReference>() {}) : null; + } + //保存上下文零件数据信息 [JSON]Map @Override - public Boolean dispatchPartDataContext(StationRequestBean reqBean, Map partDataMap) { + public Boolean dispatchPartDataContext(StationRequestBean reqBean, Map partDataMap) { if (CollectionUtils.isEmpty(partDataMap)) return false; return dispatchFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PART_DATA_CONTEXT, JSONObject.toJSONString(partDataMap)); } diff --git a/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesPartContext.java b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesPartContext.java new file mode 100644 index 0000000..b2ebed9 --- /dev/null +++ b/modules/i3plus-ext-mes-pcn-pojo/src/main/java/cn/estsh/i3plus/ext/mes/pcn/pojo/context/MesPartContext.java @@ -0,0 +1,23 @@ +package cn.estsh.i3plus.ext.mes.pcn.pojo.context; + +import cn.estsh.i3plus.pojo.mes.bean.MesPart; +import lombok.Data; +import org.springframework.beans.BeanUtils; + +import java.io.Serializable; + +/** + * 生产过程上下文对象-零件条码(非排序产出零件条码) + */ +@Data +public class MesPartContext extends MesPart implements Serializable { + + private static final long serialVersionUID = -1221271846639577097L; + + + public MesPartContext(MesPart part) { + BeanUtils.copyProperties(part, 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 e52503c..1969f95 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 @@ -333,6 +333,9 @@ public class MesPcnExtConstWords { //过程条码默认生成规则 public static final String DEFAULT_SERIAL_NUMBER_RULE = "DEFAULT_SERIAL_NUMBER_RULE"; + // 定制页面名称 + public static final String CUSTOM_PAGE_NAME = "CUSTOM_PAGE_NAME"; + // 定制页面名称(默认 产出零件) public static final String CUSTOM_PAGE_NAME_DEFAULT = "CUSTOM_PAGE_NAME_DEFAULT";