Merge branch 'dev-wuhan' of http://git.estsh.com/I3-YF/i3plus-mes-pcn-yfai into dev-wuhan

tags/yfai-pcn-ext-v2.3
gsz 8 months ago
commit 03bf31ef50

@ -90,8 +90,11 @@ public interface IMesProductionDispatchContextStepService {
@ApiOperation(value = "获取上下文零件数据信息")
Map<String, MesPart> getPartDataContext(StationRequestBean reqBean);
@ApiOperation(value = "获取上下文零件数据信息")
Map<String, MesPartContext> getPartDataExtContext(StationRequestBean reqBean);
@ApiOperation(value = "保存上下文零件数据信息", notes = "[JSON]Map<String, MesPart>")
Boolean dispatchPartDataContext(StationRequestBean reqBean, Map<String, MesPart> partDataMap);
Boolean dispatchPartDataContext(StationRequestBean reqBean, Map<String, ? extends MesPart> partDataMap);
@ApiOperation(value = "删除上下文零件数据信息")
void removePartDataContext(StationRequestBean reqBean);

@ -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);
}

@ -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<MesRecyclablePackageBindingDetail> findMesRecyclablePackageBindingDetailByPid(String organizeCode, long pid);
@ApiOperation("查询回收包装绑定明细Map")
Map<Long,List<MesRecyclablePackageBindingDetail>> findMesRecyclablePackageBindingDetailByPidMap(String organizeCode, List<Long> 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<String,List<MesRecyclablePackageBinding>> findMesRecyclablePackageBindingByPackageSnMap(String organizeCode, List<String> packageSnList);
@ApiOperation("查询回收包装绑定明细")
List<MesRecyclablePackageBindingDetail> findMesRecyclablePackageBindingDetail(MesRecyclablePackageBindingModel mesRecyclablePackageBindingModel);

@ -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;
}
}

@ -68,6 +68,18 @@ public class MesRecyclablePackageBindingServiceImpl implements IMesRecyclablePac
}
@Override
public Map<Long, List<MesRecyclablePackageBindingDetail>> findMesRecyclablePackageBindingDetailByPidMap(String organizeCode, List<Long> pidList) {
if (StringUtil.isEmptyAndNull(organizeCode) || CollectionUtils.isEmpty(pidList)) {
return null;
}
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getInPackList(pidList, MesPcnExtConstWords.PID, packBean);
List<MesRecyclablePackageBindingDetail> 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<String, List<MesRecyclablePackageBinding>> findMesRecyclablePackageBindingByPackageSnMap(String organizeCode, List<String> packageSnList) {
if (StringUtil.isEmptyAndNull(organizeCode) || CollectionUtils.isEmpty(packageSnList)) {
return null;
}
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getInPackList(packageSnList, MesPcnExtConstWords.PACKAGE_SN, packBean);
List<MesRecyclablePackageBinding> packageBindingList = mesRecyclablePackageBindingRepository.findByHqlWhere(packBean);
return CollectionUtils.isEmpty(packageBindingList) ? null : packageBindingList.stream().filter(Objects::nonNull).collect(Collectors.groupingBy(MesRecyclablePackageBinding::getPackageSn));
}
@Override
public List<MesRecyclablePackageBindingDetail> findMesRecyclablePackageBindingDetail(MesRecyclablePackageBindingModel mesRecyclablePackageBindingModel) {
//回收包装绑定
MesRecyclablePackageBinding mesRecyclablePackageBinding = getMesRecyclablePackageBindingByPackageSn(mesRecyclablePackageBindingModel.getOrganizeCode(), mesRecyclablePackageBindingModel.getPackageSn());
@ -202,7 +225,7 @@ public class MesRecyclablePackageBindingServiceImpl implements IMesRecyclablePac
List<MesProduceSn> 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<MesRecyclablePackagePart> 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;

@ -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<Map<String, MesProdRouteOptParam>> 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;
}
}

@ -23,7 +23,7 @@ import java.util.*;
import java.util.stream.Collectors;
/**
* @Description :
* @Description :
* @Author : wangjie
**/
@Slf4j

@ -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<MesEquipVariableCollectContext> 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<MesRecyclablePackageBindingDetail> 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<String, List<MesProduceSn>> produceSnMap = produceSnExtService.getProduceSnMap(reqBean.getOrganizeCode(), bindingDetailList.stream().map(MesRecyclablePackageBindingDetail::getProductSn).collect(Collectors.toList()));
// List<MesProductionPsInContext> 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<MesProductionPartContext> 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<MesProduceSn> produceSnList, List<MesProductionPsInContext> productionPsInContextList) {
//
// String suffixMsg = !StringUtils.isEmpty(stepResult.getMsg()) ? stepResult.getMsg() + MesPcnExtConstWords.SEMICOLON : MesPcnExtConstWords.EMPTY;
//
// List<MesProduceSn> 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<MesConfig> configList = configService.doCachedConfigList(MesPcnExtConstWords.ALLOW_UNKNOW_CENTER_CFG, reqBean.getOrganizeCode());
// if (CollectionUtils.isEmpty(configList)) return true;
// List<String> 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());
// }
//
//}

@ -194,9 +194,16 @@ public class MesProductionDispatchContextStepService extends BaseStepService imp
return !StringUtils.isEmpty(partDataJson) ? JSONObject.parseObject(partDataJson, new TypeReference<Map<String, MesPart>>() {}) : null;
}
//获取上下文零件数据信息
@Override
public Map<String, MesPartContext> getPartDataExtContext(StationRequestBean reqBean) {
String partDataJson = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PART_DATA_CONTEXT);
return !StringUtils.isEmpty(partDataJson) ? JSONObject.parseObject(partDataJson, new TypeReference<Map<String, MesPartContext>>() {}) : null;
}
//保存上下文零件数据信息 [JSON]Map<String, MesPart>
@Override
public Boolean dispatchPartDataContext(StationRequestBean reqBean, Map<String, MesPart> partDataMap) {
public Boolean dispatchPartDataContext(StationRequestBean reqBean, Map<String, ? extends MesPart> partDataMap) {
if (CollectionUtils.isEmpty(partDataMap)) return false;
return dispatchFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PART_DATA_CONTEXT, JSONObject.toJSONString(partDataMap));
}

@ -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);
}
}

@ -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";

Loading…
Cancel
Save