Merge remote-tracking branch 'origin/dev-wuhan' into dev-wuhan

tags/yfai-pcn-ext-v2.3
jun 8 months ago
commit 63493c7fd9

@ -117,7 +117,7 @@ public class MesProduceSnPrintController {
}
@PostMapping("/mes-work-order-cut/find")
@ApiOperation(value = "裁片工单查询")
@ApiOperation(value = "裁片工单打印查询")
public ResultBean findMesWorkOrderCut(MesWorkOrderCut workOrderCut) {
try {
ValidatorBean.checkNotNull(workOrderCut.getWorkCenterCodeQuery(), "产线代码不能为空");

@ -311,6 +311,8 @@ public class MesProduceSnPrintService implements IMesProduceSnPrintService {
// 根据pid对 设备参数 分组
Map<Long, List<MesCutSchemeEquipmentDetail>> cutSchemeEquipmentDetailMapByPid = getCutSchemeEquipmentDetailMapByPid(workOrderCut.getOrganizeCode(), cutSchemeEquipmentList);
List<MesWorkOrderCut> workOrderCutShowList = new ArrayList<>();
for (MesWorkOrderCut workOrderCutDb : workOrderCutList) {
MesCutScheme cutScheme = cutSchemeMapByCutCode.get(workOrderCutDb.getCutCode());
@ -352,11 +354,13 @@ public class MesProduceSnPrintService implements IMesProduceSnPrintService {
continue;
}
workOrderCutDb.setPrintContent(snPrintModel.getPrintContextList());
workOrderCutDb.setPrintStatus(MesExtEnumUtil.PRINT_STATUS.PRINTED.getValue());
workOrderCutDb.setPrintTime(TimeTool.getNowTime(true));
workOrderCutDb.setWorkOrderStatusName(MesExtEnumUtil.CUT_ORDER_STATUS.valueOfDescription(workOrderCutDb.getWorkOrderStatus()));
ConvertBean.serviceModelUpdate(workOrderCutDb, workOrderCut.getModifyUser());
workOrderCutRepository.save(workOrderCutDb);
workOrderCutDb.setPrintContent(snPrintModel.getPrintContextList());
workOrderCutShowList.add(workOrderCutDb);
MesPrintedSnLog printedSnLog = new MesPrintedSnLog();
printedSnLog.setOrganizeCode(workOrderCut.getOrganizeCode());
@ -367,10 +371,10 @@ public class MesProduceSnPrintService implements IMesProduceSnPrintService {
}
return workOrderCutList;
return workOrderCutShowList;
}
return workOrderCutList;
return new ArrayList<>();
}
private List<MesCutSchemeEquipment> getMesCutSchemeEquipments(MesWorkOrderCut workOrderCut, List<String> cutCodeList) {

@ -1,26 +1,20 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.station.function;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesWorkOrderCutService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCollectContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesPartContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesWorkOrderCutDetailModel;
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.bean.MesCavityGroupDetailCfg;
import cn.estsh.i3plus.pojo.mes.bean.MesCutSchemeFg;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell;
import cn.estsh.i3plus.pojo.mes.model.ButtonDynamicModel;
import cn.estsh.i3plus.pojo.mes.model.StationCustomDialogBean;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
import cn.estsh.i3plus.pojo.mes.repository.MesCutSchemeFgRepository;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.log4j.Log4j;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
@ -30,17 +24,13 @@ import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* @Description :
* @Description :
**/
@Service
@Slf4j
public class MesFunctionCutOrderDialogPrintService extends BaseSwsService implements IFsmModuleFunctionService {
@Autowired
private IMesProductionProcessContextStepService productionProcessContextStepService;
public class MesFunctionDialogCutOrderPrintService extends BaseSwsService implements IFsmModuleFunctionService {
@Autowired
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
@ -80,7 +70,7 @@ public class MesFunctionCutOrderDialogPrintService extends BaseSwsService implem
}
@Override
public Object stepDialogDispatch(StationRequestBean reqBean) {
public StationCustomDialogBean stepDialogDispatch(StationRequestBean reqBean, StationCustomDialogBean dialogBean) {
List<MesWorkOrderCutDetailModel> mesWorkOrderCutFgDataContextList = productionDispatchContextStepService.getMesWorkOrderCutFgDataContext(reqBean);
@ -107,7 +97,6 @@ public class MesFunctionCutOrderDialogPrintService extends BaseSwsService implem
}
// 成品列表为空则表示不需要弹框
return CollectionUtils.isEmpty(mesWorkOrderCutFgDataContextList) ? null :mesWorkOrderCutFgDataContextList;
return CollectionUtils.isEmpty(mesWorkOrderCutFgDataContextList) ? dialogBean.unDialog() : dialogBean.obj(mesWorkOrderCutFgDataContextList);
}
}

@ -0,0 +1,43 @@
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.context.MesProductionPsInContext;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseSwsService;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.function.IFsmModuleFunctionService;
import cn.estsh.i3plus.pojo.mes.model.StationCustomDialogBean;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.List;
import java.util.stream.Collectors;
/**
* @Description :
**/
@Service
@Slf4j
public class MesFunctionDialogElectronicInspectionService extends BaseSwsService implements IFsmModuleFunctionService {
@Autowired
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
@Override
public StationCustomDialogBean stepDialogDispatch(StationRequestBean reqBean, StationCustomDialogBean dialogBean) {
List<MesProductionPsInContext> productionPsInContext = productionDispatchContextStepService.getProductionPsInContext(reqBean);
// 如果当前存在进料条码列表则返回条码集合
if (!CollectionUtils.isEmpty(productionPsInContext)) {
List<String> snList = productionPsInContext.stream().filter(o -> !StringUtils.isEmpty(o.getProductSn())).map(MesProductionPsInContext::getProductSn).distinct().collect(Collectors.toList());
// 条码列表为空则表示不需要弹框
if (CollectionUtils.isEmpty(snList)) return dialogBean.unDialog();
else return dialogBean.asyn().obj(snList);
} else return dialogBean.unDialog();
}
}

@ -96,14 +96,14 @@ public class MesAssemblyMatchSortStepService extends BaseStepService {
//验证当前是否属于装配件跳过码
Boolean isSkip = checkIsSkip(productionProcessContext, equipVariableCollectContextList);
//验证当前是否属于装配件整跳过码
Boolean isAllSkip = checkIsAllSkip(productionProcessContext, equipVariableCollectContextList, prodRuleContextList, stepResult);
//验证当前是否属于装配件整跳过码
Boolean isCavitySkip = checkIsCavitySkip(productionProcessContext, equipVariableCollectContextList, prodRuleContextList, stepResult);
//处理待验证的装配件条码 [扫描模式匹配成功返回true, 否则返回flase, 非扫描模式需要验证是否全部匹配完成]
Boolean result = isAllSkip ? true : doHandleMatchAssembly(reqBean, stepResult, prodRuleContextList, equipVariableCollectContextList, isSkip);
Boolean result = isCavitySkip ? true : doHandleMatchAssembly(reqBean, stepResult, prodRuleContextList, equipVariableCollectContextList, isSkip);
//验证是否存在待绑定数据
hasUnBindAssembly = isAllSkip ? true : hasUnBindAssembly(prodRuleContextList);
hasUnBindAssembly = isCavitySkip ? true : hasUnBindAssembly(prodRuleContextList);
//搜集装配件条码
String suffix = MesPcnExtConstWords.EMPTY;
@ -112,7 +112,7 @@ public class MesAssemblyMatchSortStepService extends BaseStepService {
if (result || !hasUnBindAssembly) {
productionDispatchContextStepService.dispatchProdRuleDataContext(reqBean, prodRuleContextList);
assemblyShowNosortStepService.showProductionAssembly(reqBean, resultBean, productionProcessContext.getWorkCenter(), cellEquipContext, prodRuleContextList);
suffix = (isSkip || isAllSkip) ? stepResult.getMsg() : String.format("装配件条码%s匹配成功!", assemblySn);
suffix = (isSkip || isCavitySkip) ? stepResult.getMsg() : String.format("装配件条码%s匹配成功!", assemblySn);
}
//验证是否存在待绑定数据
@ -171,11 +171,11 @@ public class MesAssemblyMatchSortStepService extends BaseStepService {
return true;
}
//验证当前是否属于装配件整跳过码
private Boolean checkIsAllSkip(MesProductionProcessContext productionProcessContext, List<MesEquipVariableCollectContext> equipVariableCollectContextList, List<MesProdRuleContext> prodRuleContextList, StepResult stepResult) {
//验证当前是否属于装配件整跳过码
private Boolean checkIsCavitySkip(MesProductionProcessContext productionProcessContext, List<MesEquipVariableCollectContext> equipVariableCollectContextList, List<MesProdRuleContext> prodRuleContextList, StepResult stepResult) {
if (equipVariableCollectContextList.size() > 1) return false;
if (equipVariableCollectContextList.get(0).getMessageSource().compareTo(MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getValue()) != 0) return false;
if (!equipVariableCollectContextList.get(0).getEquipVariableValue().equals(productionProcessContext.getAssemblyAllSkipCode())) return false;
if (!equipVariableCollectContextList.get(0).getEquipVariableValue().equals(productionProcessContext.getAssemblyCavitySkipCode())) return false;
//TODO
return true;

@ -7,6 +7,7 @@ import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.function.IFsmModuleFunctionServic
import cn.estsh.i3plus.mes.pcn.util.StringUtil;
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesProdRouteOptParam;
import cn.estsh.i3plus.pojo.mes.model.StationCustomDialogBean;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
import cn.estsh.i3plus.pojo.mes.model.StepResult;
@ -59,26 +60,27 @@ public class MesCustomDialogStepService extends BaseStepService {
if (StringUtils.isEmpty(customPageName)) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("弹框会话工步未配置工步参数[%s]!", MesPcnExtConstWords.CUSTOM_PAGE_NAME));
//获取工步弹框需要渲染的数据
Object stepDialogContext = fsmModuleFunctionService.stepDialogDispatch(reqBean, customPageName);
//获取工步弹框需要渲染的数据; 无须渲染动态数据时无须重写stepDialogDispatch方法且接口方法已默认返回true可以直接弹框
StationCustomDialogBean scdBean = fsmModuleFunctionService.stepDialogDispatch(reqBean, new StationCustomDialogBean(customPageName));
//没有数据返回NULL则默认不需要弹框, 无须渲染动态数据时无须重写stepDialogDispatch方法且接口方法已默认返回true可以直接弹框
if (null == stepDialogContext) return stepResult;
//当前不需要弹框
if (null == scdBean || !scdBean.getIsDialog()) return stepResult;
if (!(stepDialogContext instanceof Boolean))
log.info("工厂{}生产线{}工位{}:FSM STATE DISPATCHER --- DO STEP --- {} EXEC --- stepDialogContext:{}",
reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), StringUtil.toLowerCaseFirst(this.getClass().getSimpleName()), JSONObject.toJSONString(stepDialogContext));
//发送弹框数据
this.sendMessage(reqBean, resultBean.busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.CUSTOM_COMPONENT.getValue()).dataType(MesPcnEnumUtil.STATION_DATA_TYPE.CUSTOM_DIALOG.getValue()).customPageName(customPageName).resultObj(stepDialogContext));
if (null != scdBean.getObj())
log.info("工厂{}生产线{}工位{}:FSM STATE DISPATCHER --- DO STEP --- {} EXEC --- StationCustomDialogBean={}",
reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), StringUtil.toLowerCaseFirst(this.getClass().getSimpleName()), JSONObject.toJSONString(scdBean));
//清除剩余扫描队列
shippingDispatchService.clearScanQueue(reqBean);
//结束线程
stepSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), "弹框会话开启!");
//发送弹框数据
this.sendMessage(reqBean, resultBean.busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.CUSTOM_COMPONENT.getValue()).dataType(MesPcnEnumUtil.STATION_DATA_TYPE.CUSTOM_DIALOG.getValue()).customPageName(customPageName).resultObj(scdBean.getObj()));
//弹框业务同步处理
if (!scdBean.getIsAsyn()) stepSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), "弹框会话开启!");
return stepResult;
//弹框业务异步处理
return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, "弹框会话开启!");
}

@ -110,7 +110,7 @@ public class MesProductionProcessContextStepService extends BaseStepService impl
if (isCheckProcess && (StringUtils.isEmpty(productionProcessContext.getProcessCode()) || !productionProcessContext.getProcessCode().equals(reqBean.getProcessCode()))) processContext(reqBean, productionProcessContext);
//生产过程上下文对象赋值生产过程控制全局密码
if (StringUtils.isEmpty(productionProcessContext.getFinishCode()) || StringUtils.isEmpty(productionProcessContext.getCraftJumpCode()) || StringUtils.isEmpty(productionProcessContext.getAssemblySkipCode()) || StringUtils.isEmpty(productionProcessContext.getAssemblyAllSkipCode())) productionPwdContext(reqBean, productionProcessContext);
if (StringUtils.isEmpty(productionProcessContext.getFinishCode()) || StringUtils.isEmpty(productionProcessContext.getCraftJumpCode()) || StringUtils.isEmpty(productionProcessContext.getAssemblySkipCode()) || StringUtils.isEmpty(productionProcessContext.getAssemblyCavitySkipCode())) productionPwdContext(reqBean, productionProcessContext);
return productionProcessContext;
@ -148,7 +148,7 @@ public class MesProductionProcessContextStepService extends BaseStepService impl
return productionProcessContext.finishCode((!CollectionUtils.isEmpty(cfgKeyMap) && cfgKeyMap.containsKey(MesPcnExtConstWords.CAVITY_FINISH_CODE)) ? cfgKeyMap.get(MesPcnExtConstWords.CAVITY_FINISH_CODE).get(0).getCfgValue() : MesPcnExtConstWords.CAVITY_FINISH_CODE)
.craftJumpCode((!CollectionUtils.isEmpty(cfgKeyMap) && cfgKeyMap.containsKey(MesPcnExtConstWords.CRAFT_JUMP_CODE)) ? cfgKeyMap.get(MesPcnExtConstWords.CRAFT_JUMP_CODE).get(0).getCfgValue() : MesPcnExtConstWords.CRAFT_JUMP_CODE)
.assemblySkipCode((!CollectionUtils.isEmpty(cfgKeyMap) && cfgKeyMap.containsKey(MesPcnExtConstWords.ASSEMBLY_SKIP_CODE)) ? cfgKeyMap.get(MesPcnExtConstWords.ASSEMBLY_SKIP_CODE).get(0).getCfgValue() : MesPcnExtConstWords.ASSEMBLY_SKIP_CODE)
.assemblyAllSkipCode((!CollectionUtils.isEmpty(cfgKeyMap) && cfgKeyMap.containsKey(MesPcnExtConstWords.ASSEMBLY_ALL_SKIP_CODE)) ? cfgKeyMap.get(MesPcnExtConstWords.ASSEMBLY_ALL_SKIP_CODE).get(0).getCfgValue() : MesPcnExtConstWords.ASSEMBLY_ALL_SKIP_CODE);
.assemblyCavitySkipCode((!CollectionUtils.isEmpty(cfgKeyMap) && cfgKeyMap.containsKey(MesPcnExtConstWords.ASSEMBLY_CAVITY_SKIP_CODE)) ? cfgKeyMap.get(MesPcnExtConstWords.ASSEMBLY_CAVITY_SKIP_CODE).get(0).getCfgValue() : MesPcnExtConstWords.ASSEMBLY_CAVITY_SKIP_CODE);
}
//验证组织模型有效性

@ -44,8 +44,8 @@ public class MesProductionProcessContext implements Serializable {
@ApiParam("装配件跳过码")
private String assemblySkipCode;
@ApiParam("装配件整跳过码")
private String assemblyAllSkipCode;
@ApiParam("装配件整跳过码")
private String assemblyCavitySkipCode;
@ApiParam("生产线信息([Json]MesWorkCenter)")
private String workCenterJson;
@ -136,9 +136,9 @@ public class MesProductionProcessContext implements Serializable {
return this.isNeedCache();
}
//上下文赋值装配件整跳过码
public MesProductionProcessContext assemblyAllSkipCode(String assemblyAllSkipCode) {
this.assemblyAllSkipCode = assemblyAllSkipCode;
//上下文赋值装配件整跳过码
public MesProductionProcessContext assemblyCavitySkipCode(String assemblyCavitySkipCode) {
this.assemblyCavitySkipCode = assemblyCavitySkipCode;
return this.isNeedCache();
}

@ -233,8 +233,8 @@ public class MesPcnExtConstWords {
public static final String CRAFT_JUMP_CODE = "CRAFT_JUMP_CODE";
// 装配件跳过码
public static final String ASSEMBLY_SKIP_CODE = "ASSEMBLY_SKIP_CODE";
// 装配件整跳过码
public static final String ASSEMBLY_ALL_SKIP_CODE = "ASSEMBLY_ALL_SKIP_CODE";
// 装配件整跳过码
public static final String ASSEMBLY_CAVITY_SKIP_CODE = "ASSEMBLY_CAVITY_SKIP_CODE";
// 设备代码[工步参数]
public static final String EQUIPMENT_CODE_UC = "EQUIPMENT_CODE";
// 模具号读一模多腔配置[工步参数]

Loading…
Cancel
Save