tags/yfai-pcn-ext-v1.0
王杰 11 months ago
parent 0338eb1752
commit d7fff9d021

@ -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<MesProduceSn> getProduceSnList(String organizeCode, List<String> productSnList);
@ApiOperation(value = "根据零件条码ID修改条码状态,工位")
void saveProduceSnList(StationRequestBean reqBean, Integer snStatus, List<Long> idList);
}

@ -173,6 +173,9 @@ public interface IMesProductionDispatchContextStepService {
@ApiOperation(value = "删除上下文产品加工规则信息集合")
void deleteProdRuleDataContext(StationRequestBean reqBean);
@ApiOperation(value = "获取生产线的当前班组班次信息")
MesProdShiftContext getMesProdShiftKvBean(String orgainzeCode, String workCenterCode);
@ApiOperation(value = "获取上下文班次班组信息")
List<StationKvBean> 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<MesRawPartCharging> getMesRawPartChargingDataContext(StationRequestBean reqBean);
@ApiOperation(value = "保存料桶原材料数据集合", notes = "[JSON]List<MesRawPartCharging>")
Boolean saveMesRawPartChargingDataContext(StationRequestBean reqBean, List<MesRawPartCharging> mesRawPartChargingList);
@ApiOperation(value = "删除料桶原材料数据集合")
void deleteMesRawPartChargingDataContext(StationRequestBean reqBean);
@ -227,13 +246,4 @@ public interface IMesProductionDispatchContextStepService {
void deleteOutProduceSnDataContext(StationRequestBean reqBean);
@ApiOperation(value = "获取料桶原材料数据集合")
List<MesRawPartCharging> getMesRawPartChargingDataContext(StationRequestBean reqBean);
@ApiOperation(value = "保存料桶原材料数据集合", notes = "[JSON]List<MesRawPartCharging>")
Boolean saveMesRawPartChargingDataContext(StationRequestBean reqBean, List<MesRawPartCharging> mesRawPartChargingList);
@ApiOperation(value = "删除料桶原材料数据集合")
void deleteMesRawPartChargingDataContext(StationRequestBean reqBean);
}

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

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

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

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

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

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

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

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

@ -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<String> finishCodeList = filterEquipVariableCollectContextList(productionProcessContext, equipVariableCollectContextList, false);
//验证上下文中主条码的有效性
Map<String, MesProduceSn> produceSnMap = checkProduceSnValid(reqBean, resultBean, stepResult, productionProcessContext, productSnList);
List<MesProduceSn> produceSnList = checkProduceSnValid(reqBean, resultBean, stepResult, productionProcessContext, productSnList);
//清除本次已完成验证的主条码信息
productionDispatchContextStepService.deleteScanProductSnContext(reqBean);
@ -81,6 +83,8 @@ public class MesProductSnCheckStepService extends BaseStepService {
//获取上下文的工位
MesWorkCell workCell = productionProcessContext.getWorkCell();
Map<String, MesProduceSn> produceSnMap = CollectionUtils.isEmpty(produceSnList) ? null : produceSnList.stream().filter(o -> null != o).collect(Collectors.toMap(MesProduceSn::getProductSn, o -> o));
//封装 读/扫主条件信息到进料主条码数据信息中
List<MesProductionPsInContext> 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<String, MesProduceSn> checkProduceSnValid(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, List<String> productSnList) {
private List<MesProduceSn> checkProduceSnValid(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, List<String> productSnList) {
//根据零件条码查询零件条码信息
List<MesProduceSn> 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<MesProduceSn> produceSnList) {
if (CollectionUtils.isEmpty(produceSnList)) return;
Map<String, Long> 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);
}
}

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

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

@ -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) {

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

Loading…
Cancel
Save