forked from I3-YF/i3plus-mes-pcn-yfai
Merge remote-tracking branch 'origin/dev' into dev
commit
bc901e7130
@ -0,0 +1,21 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.api.busi;
|
||||
|
||||
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesRawPartChargingModel;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
|
||||
/**
|
||||
* @Description : 加料防错
|
||||
* @Reference :
|
||||
* @Author : junsheng.li
|
||||
* @CreateDate 2024/6/30 12:21
|
||||
* @Modify:
|
||||
**/
|
||||
public interface IMesRawPartChargingService {
|
||||
|
||||
@ApiOperation("原材料容器零件关系")
|
||||
MesRawPartChargingModel findMesRawPackagePart(MesRawPartChargingModel mesRawPartChargingModel);
|
||||
|
||||
@ApiOperation("操作")
|
||||
MesRawPartChargingModel doAction(MesRawPartChargingModel mesRawPartChargingModel);
|
||||
|
||||
}
|
@ -0,0 +1,58 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.apiservice.controller.busi;
|
||||
|
||||
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesRawPartChargingService;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesRawPartChargingModel;
|
||||
import cn.estsh.impp.framework.boot.auth.AuthUtil;
|
||||
import cn.estsh.impp.framework.boot.exception.ImppBusiException;
|
||||
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
|
||||
import cn.estsh.impp.framework.boot.util.ResultBean;
|
||||
import cn.estsh.impp.framework.boot.util.ValidatorBean;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
/**
|
||||
* @Description :加料防错
|
||||
* @Reference :
|
||||
* @Author : junsheng.li
|
||||
* @CreateDate 2024/6/30 14:38
|
||||
* @Modify:
|
||||
**/
|
||||
@RestController
|
||||
@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesRawPartCharging")
|
||||
public class MesRawPartChargingController {
|
||||
|
||||
@Autowired
|
||||
private IMesRawPartChargingService mesRawPartChargingService;
|
||||
|
||||
@GetMapping("/findMesRawPackagePart")
|
||||
@ApiOperation(value = "原材料容器零件关系")
|
||||
public ResultBean findMesRawPackagePart(MesRawPartChargingModel mesRawPartChargingModel) {
|
||||
try {
|
||||
ValidatorBean.checkNotNull(mesRawPartChargingModel.getPackageSn(),"料筒条码不能为空");
|
||||
mesRawPartChargingModel.setUserName(AuthUtil.getSessionUser().getUserName());
|
||||
mesRawPartChargingModel.setOrganizeCode(AuthUtil.getOrganizeCode());
|
||||
return ResultBean.success("执行成功").setResultObject(mesRawPartChargingService.findMesRawPackagePart(mesRawPartChargingModel));
|
||||
} catch (ImppBusiException imppException) {
|
||||
return ResultBean.fail(imppException);
|
||||
} catch (Exception e) {
|
||||
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
|
||||
}
|
||||
}
|
||||
|
||||
@PostMapping("/doAction")
|
||||
@ApiOperation(value = "操作")
|
||||
public ResultBean doAction(@RequestBody MesRawPartChargingModel mesRawPartChargingModel) {
|
||||
try {
|
||||
ValidatorBean.checkNotNull(mesRawPartChargingModel.getType(), "操作类型不能为空");
|
||||
mesRawPartChargingModel.setUserName(AuthUtil.getSessionUser().getUserName());
|
||||
mesRawPartChargingModel.setOrganizeCode(AuthUtil.getOrganizeCode());
|
||||
return ResultBean.success("执行成功").setResultObject(mesRawPartChargingService.doAction(mesRawPartChargingModel));
|
||||
} catch (ImppBusiException imppException) {
|
||||
return ResultBean.fail(imppException);
|
||||
} catch (Exception e) {
|
||||
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,83 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.equiplog;
|
||||
|
||||
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesScanMonitorContext;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
|
||||
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.swslog.ISwsWriteDbLogService;
|
||||
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
|
||||
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.MesWorkCellScanMonitorLog;
|
||||
import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
|
||||
import cn.estsh.i3plus.pojo.mes.repository.MesWorkCellScanMonitorLogRepository;
|
||||
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
public class MesWorkCellScanMonitorLogExtService implements ISwsWriteDbLogService {
|
||||
|
||||
@Autowired
|
||||
private IMesProductionProcessContextStepService productionProcessContextStepService;
|
||||
|
||||
@Autowired
|
||||
private MesWorkCellScanMonitorLogRepository workCellScanMonitorLogRepository;
|
||||
|
||||
@Override
|
||||
public void doWriteDbLog(StationResultBean resultBean) {
|
||||
|
||||
MesWorkCellScanMonitorLog workCellScanMonitorLog;
|
||||
|
||||
//获取上下文工位扫描监控信息
|
||||
MesScanMonitorContext scanMonitorContext = productionProcessContextStepService.getScanMonitorContext(resultBean.getOrganizeCode(), resultBean.getWorkCenterCode(), resultBean.getWorkCellCode());
|
||||
|
||||
if (null != scanMonitorContext) {
|
||||
|
||||
if (checkRepeat(resultBean, scanMonitorContext)) return;
|
||||
|
||||
workCellScanMonitorLog = new MesWorkCellScanMonitorLog();
|
||||
|
||||
BeanUtils.copyProperties(scanMonitorContext, workCellScanMonitorLog);
|
||||
|
||||
} else {
|
||||
|
||||
workCellScanMonitorLog = new MesWorkCellScanMonitorLog();
|
||||
|
||||
log.info("工厂{}生产线{}工位{}: MesWorkCellScanMonitorLogExtService --- 上下文当前不存在工位扫描监控信息 --- {}", resultBean.getOrganizeCode(), resultBean.getWorkCenterCode(), resultBean.getWorkCellCode(), resultBean.toWriteDbString());
|
||||
|
||||
}
|
||||
|
||||
BeanUtils.copyProperties(resultBean, workCellScanMonitorLog);
|
||||
|
||||
workCellScanMonitorLog.setMessageType(MesExtEnumUtil.WORK_CELL_SCAN_MONITOR_MESSAGE_TYPE.codeOfValue(resultBean.getDataType()));
|
||||
|
||||
workCellScanMonitorLog.setServiceFlag(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue());
|
||||
|
||||
ConvertBean.serviceModelInitialize(workCellScanMonitorLog, resultBean.getUserInfo());
|
||||
|
||||
workCellScanMonitorLogRepository.insert(workCellScanMonitorLog);
|
||||
|
||||
}
|
||||
|
||||
private Boolean checkRepeat(StationResultBean resultBean, MesScanMonitorContext scanMonitorContext) {
|
||||
|
||||
if (resultBean.getIsCheckRepeat().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0) return false;
|
||||
|
||||
DdlPackBean packBean = DdlPackBean.getDdlPackBean(resultBean.getOrganizeCode());
|
||||
DdlPreparedPack.getNumEqualPack(scanMonitorContext.getMouldRecordId(), MesPcnExtConstWords.MOULD_RECORD_ID, packBean);
|
||||
if (resultBean.getCheckRepeatType().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0) DdlPreparedPack.getStringEqualPack(resultBean.getMessage(), MesPcnExtConstWords.MESSAGE, packBean);
|
||||
DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{MesPcnExtConstWords.CREATE_DATE_TIME}, packBean);
|
||||
MesWorkCellScanMonitorLog workCellScanMonitorLogDb = workCellScanMonitorLogRepository.getByProperty(packBean);
|
||||
if (null == workCellScanMonitorLogDb || StringUtils.isEmpty(workCellScanMonitorLogDb.getMessage())) return false;
|
||||
if (resultBean.getCheckRepeatType().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0 && !workCellScanMonitorLogDb.getMessage().equals(resultBean.getMessage())) return false;
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
2
modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/strategy/numberrule/INumberRulePackAttributeStrategy.java → modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/numberrule/INumberRulePackAttributeStrategy.java
2
modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/strategy/numberrule/INumberRulePackAttributeStrategy.java → modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/numberrule/INumberRulePackAttributeStrategy.java
@ -1,4 +1,4 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.strategy.numberrule;
|
||||
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.numberrule;
|
||||
|
||||
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesNumberRuleStrategyModel;
|
||||
import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel;
|
4
modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/strategy/numberrule/strategy/XiaoPengNumberRuleStrategy.java → modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/numberrule/strategy/XiaoPengNumberRuleStrategy.java
4
modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/strategy/numberrule/strategy/XiaoPengNumberRuleStrategy.java → modules/i3plus-ext-mes-pcn-apiservice/src/main/java/cn/estsh/i3plus/ext/mes/pcn/apiservice/serviceimpl/numberrule/strategy/XiaoPengNumberRuleStrategy.java
@ -1,6 +1,6 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.strategy.numberrule.strategy;
|
||||
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.numberrule.strategy;
|
||||
|
||||
import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.strategy.numberrule.INumberRulePackAttributeStrategy;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.numberrule.INumberRulePackAttributeStrategy;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesNumberRuleStrategyModel;
|
||||
import cn.estsh.i3plus.platform.common.tool.TimeTool;
|
||||
import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel;
|
@ -1,44 +0,0 @@
|
||||
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.mes.pcn.serviceimpl.fsm.BaseSwsService;
|
||||
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 MesFunctionResetCellContextService extends BaseSwsService implements IFsmModuleFunctionService {
|
||||
|
||||
@Autowired
|
||||
private IMesProductionProcessContextStepService productionProcessContextStepService;
|
||||
|
||||
@Autowired
|
||||
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
|
||||
|
||||
@Override
|
||||
public boolean doFunction(StationRequestBean reqBean, StationResultBean resultBean, ButtonDynamicModel buttonDynamicModel) {
|
||||
|
||||
//清除上下文中的所有基础数据
|
||||
productionProcessContextStepService.doFlushProductionProcessContext(reqBean);
|
||||
|
||||
//清除上下文中的所有业务数据
|
||||
productionDispatchContextStepService.doFlushProductionDispatchContext(reqBean);
|
||||
|
||||
//TODO 清除工位队列LOCK, 工位状态对象, 流程数据等信息
|
||||
|
||||
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;
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -1,399 +0,0 @@
|
||||
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.pojo.context.*;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
|
||||
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
|
||||
import cn.estsh.i3plus.mes.pcn.util.PojoAttrUtil;
|
||||
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
|
||||
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesProdRuleNosortCfg;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter;
|
||||
import cn.estsh.i3plus.pojo.mes.model.AttrBean;
|
||||
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
|
||||
import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
|
||||
import cn.estsh.i3plus.pojo.mes.model.StepResult;
|
||||
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
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.concurrent.atomic.AtomicReference;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @Description : 显示装配件扫描项工步【非排序】
|
||||
* @Author : wangjie
|
||||
**/
|
||||
@Slf4j
|
||||
@Service("mesAssemblyShowNosortStepService2")
|
||||
public class MesAssemblyShowNosortStepService2 extends BaseStepService {
|
||||
|
||||
@Autowired
|
||||
private IMesProductionProcessContextStepService productionProcessContextStepService;
|
||||
|
||||
@Autowired
|
||||
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
|
||||
|
||||
@Autowired
|
||||
private IMesProdRuleCfgExtService prodRuleCfgExtService;
|
||||
|
||||
@Autowired
|
||||
private IMesNumberRuleMatchDispatchService numberRuleMatchDispatchService;
|
||||
|
||||
@Autowired
|
||||
private IMesProductionRecordService productionRecordService;
|
||||
|
||||
@Override
|
||||
public StepResult execute(StationRequestBean reqBean) {
|
||||
|
||||
StationResultBean resultBean = new StationResultBean();
|
||||
|
||||
StepResult stepResult = StepResult.getSuccessComplete();
|
||||
|
||||
//获取上下文信息
|
||||
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean);
|
||||
|
||||
//配置错误 抛出异常
|
||||
if (!productionProcessContext.getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
|
||||
|
||||
//存储生产过程上下文对象
|
||||
productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext);
|
||||
|
||||
//从上下文中取出生产线对象
|
||||
MesWorkCenter workCenter = productionProcessContext.getWorkCenter();
|
||||
|
||||
//从上下文中取出生产线对象
|
||||
MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip();
|
||||
|
||||
//获取上下文加工规则数据信息集合
|
||||
List<MesProdRuleContext> prodRuleContextList = productionDispatchContextStepService.getProdRuleDataContext(reqBean);
|
||||
|
||||
//获取上下文产出零件数据信息集合
|
||||
List<MesProductionPartContext> productionPartContextList = productionDispatchContextStepService.getProductionPartContext(reqBean);
|
||||
|
||||
//获取上下文进料零件条码信息集合
|
||||
List<MesProductionPsInContext> productionPsInContextList = productionDispatchContextStepService.getProductionPsInContext(reqBean);
|
||||
|
||||
//根据现有数据【产出零件数据】【进料零件条码信息】比对上下文中已经存在的加工规则数据信息集合, 没有加工规则的数据进行查询
|
||||
if (CollectionUtils.isEmpty(prodRuleContextList)) prodRuleContextList = new ArrayList<>();
|
||||
Integer initSize = prodRuleContextList.size();
|
||||
|
||||
//封装非排序加工规则
|
||||
doHandleProdRuleData(reqBean, resultBean, stepResult, workCenter, productionProcessContext, cellEquipContext, prodRuleContextList, productionPartContextList, productionPsInContextList);
|
||||
|
||||
if (!stepResult.isCompleted() && doBusiCheckToDelete(reqBean, productionPartContextList, productionPsInContextList)) return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, stepResult.getMsg());
|
||||
|
||||
if (prodRuleContextList.size() != initSize) {
|
||||
//保存上下文产品加工规则信息集合
|
||||
productionDispatchContextStepService.saveProdRuleDataContext(reqBean, prodRuleContextList);
|
||||
//保存上下文产出零件信息
|
||||
if (!CollectionUtils.isEmpty(productionPartContextList)) productionDispatchContextStepService.saveProductionPartContext(reqBean, productionPartContextList);
|
||||
//保存进料主条码数据
|
||||
if (!CollectionUtils.isEmpty(productionPsInContextList)) productionDispatchContextStepService.saveProductionPsInContext(reqBean, productionPsInContextList);
|
||||
}
|
||||
|
||||
//显示装配件信息
|
||||
showProductionAssembly(reqBean, resultBean, workCenter, cellEquipContext, prodRuleContextList, productionPartContextList);
|
||||
|
||||
return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "装配件扫描项已查询完毕,请查看!");
|
||||
}
|
||||
|
||||
private StepResult doHandleProdRuleData(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesWorkCenter workCenter, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext,
|
||||
List<MesProdRuleContext> prodRuleContextList, List<MesProductionPartContext> productionPartContextList, List<MesProductionPsInContext> productionPsInContextList) {
|
||||
//没有【产出零件数据】【进料零件条码信息】,则直接跳过 【当前是生成零件号场景】
|
||||
if (CollectionUtils.isEmpty(productionPartContextList) && CollectionUtils.isEmpty(productionPsInContextList)) return stepResult;
|
||||
|
||||
//根据进料条件获取匹配加工规则数据(只能查询到一条,否则报错)
|
||||
if (CollectionUtils.isEmpty(productionPartContextList)) return doHandleProdRuleDataByProductSn(reqBean, resultBean, stepResult, workCenter, productionProcessContext, cellEquipContext, prodRuleContextList, productionPsInContextList);
|
||||
//根据是否存在【产出零件数据】获取剩余待匹配的加工规则数据 (只能查询到一条,否则报错)
|
||||
else return doHandleProdRuleDataByProductionPart(reqBean, resultBean, stepResult, workCenter, productionProcessContext, cellEquipContext, prodRuleContextList, productionPartContextList, productionPsInContextList);
|
||||
|
||||
}
|
||||
|
||||
//根据是否存在【产出零件数据】获取剩余待匹配的加工规则数据 (只能查询到一条,否则报错)
|
||||
private StepResult doHandleProdRuleDataByProductionPart(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesWorkCenter workCenter, MesProductionProcessContext productionProcessContext,
|
||||
MesCellEquipContext cellEquipContext, List<MesProdRuleContext> prodRuleContextList, List<MesProductionPartContext> productionPartContextList, List<MesProductionPsInContext> productionPsInContextList) {
|
||||
|
||||
//加工规则的数据已与产出零件的数量一致
|
||||
if (!CollectionUtils.isEmpty(prodRuleContextList) && prodRuleContextList.size() == productionPartContextList.size()) return stepResult;
|
||||
|
||||
//拿到当前最大的foreignKey
|
||||
Optional<MesProductionPartContext> maxForeignKeyOptional = productionPartContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getForeignKey()))).max(Comparator.comparing(MesProductionPartContext::getForeignKey));
|
||||
Integer foreignKey = (null != maxForeignKeyOptional && maxForeignKeyOptional.isPresent()) ? maxForeignKeyOptional.get().getForeignKey() : MesPcnExtConstWords.ZERO;
|
||||
|
||||
//搜集未匹配规则的产出零件
|
||||
List<String> outPartNoList = productionPartContextList.stream().filter(o -> (null != o && StringUtils.isEmpty(o.getForeignKey()) && !StringUtils.isEmpty(o.getPartNo()))).map(MesProductionPartContext::getPartNo).collect(Collectors.toList());
|
||||
|
||||
//没有【进料零件条码信息】信息, 根据进料[NULL]条件获取匹配当前产出零件的加工规则数据(只能查询到一条,否则报错)
|
||||
if (CollectionUtils.isEmpty(productionPsInContextList)) return doHandleProdRuleDataByProductionPartAndEmptyProductSn(reqBean, resultBean, stepResult, workCenter, productionProcessContext, cellEquipContext, prodRuleContextList, productionPartContextList, outPartNoList, foreignKey);
|
||||
//存在【产出零件数据】信息, 存在【进料零件条码信息】 获取匹配当前产出零件的加工规则数据 (只能查询到一条,否则报错)
|
||||
else return doHandleProdRuleDataByProductionPartAndProductSn(reqBean, resultBean, stepResult, workCenter, productionProcessContext, cellEquipContext, prodRuleContextList, productionPartContextList, productionPsInContextList, outPartNoList, foreignKey);
|
||||
|
||||
}
|
||||
|
||||
//没有【进料零件条码信息】信息, 根据进料[NULL]条件获取匹配当前产出零件的加工规则数据(只能查询到一条,否则报错)
|
||||
private StepResult doHandleProdRuleDataByProductionPartAndEmptyProductSn(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesWorkCenter workCenter, MesProductionProcessContext productionProcessContext,
|
||||
MesCellEquipContext cellEquipContext, List<MesProdRuleContext> prodRuleContextList, List<MesProductionPartContext> productionPartContextList, List<String> outPartNoList, Integer foreignKey) {
|
||||
|
||||
//【非排序线】获取产品加工规则 ; 条件进料[NULL]
|
||||
List<MesProdRuleNosortCfg> prodRuleNosortCfgList = prodRuleCfgExtService.getProdRuleNosortCfgList(new MesProdRuleContext(reqBean.getOrganizeCode()).equipmentCode(cellEquipContext.getEquipmentCode()).outPartNos(outPartNoList).inPartIsEmpty(true).inPartRuleIsEmpty(true));
|
||||
//根据产出零件分组数据
|
||||
Map<String, List<MesProdRuleNosortCfg>> prodRuleNosortCfgMap = groupProdRuleNosortCfgList(prodRuleNosortCfgList);
|
||||
|
||||
for (MesProductionPartContext productionPartContext : productionPartContextList) {
|
||||
|
||||
//foreignKey有值代表已经匹配过产品加工规则
|
||||
if (null == productionPartContext || productionPartContext.getIsFinishCode().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0 || !StringUtils.isEmpty(productionPartContext.getForeignKey())) continue;
|
||||
|
||||
List<MesProdRuleNosortCfg> filterList = !CollectionUtils.isEmpty(prodRuleNosortCfgMap) ? prodRuleNosortCfgMap.get(productionPartContext.getPartNo()) : null;
|
||||
|
||||
if (CollectionUtils.isEmpty(filterList) || filterList.size() > 1) {
|
||||
productionPartContext.busiCheckToDelete();
|
||||
return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format(
|
||||
"请检查非排序产品加工规则信息,根据设备[%s]产出零件[%s]进料零件[空]进料零件规则[空]查询到[%s]条加工规则配置信息,无法显示出装配件清单!", cellEquipContext.getEquipmentCode(), productionPartContext.getPartNo(), CollectionUtils.isEmpty(filterList) ? MesPcnExtConstWords.ZERO : filterList.size()));
|
||||
}
|
||||
|
||||
//【非排序线】获取产品加工规则对应的装配件信息
|
||||
prodRuleContextList.add(prodRuleCfgExtService.getProdRuleNosortContext(new MesProdRuleContext(
|
||||
reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), reqBean.getProcessCode(), productionProcessContext.getCraftCode()).
|
||||
copy(prodRuleNosortCfgList.get(0)).workOrderNo(productionPartContext.getWorkOrderNo()).foreignKey(productionPartContext.foreignKey(foreignKey += 1).getForeignKey())));
|
||||
|
||||
}
|
||||
return stepResult;
|
||||
}
|
||||
|
||||
//没有【产出零件数据】信息 , 根据进料条件获取匹配加工规则数据(只能查询到一条,否则报错)
|
||||
private StepResult doHandleProdRuleDataByProductSn(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesWorkCenter workCenter, MesProductionProcessContext productionProcessContext,
|
||||
MesCellEquipContext cellEquipContext, List<MesProdRuleContext> prodRuleContextList, List<MesProductionPsInContext> productionPsInContextList) {
|
||||
|
||||
//【非排序线】获取产品加工规则 ; 分别根据 进料零件有值 与 进料规则不为空 查询 再合并数据返回
|
||||
List<MesProdRuleNosortCfg> prodRuleNosortCfgList = getProdRuleNosortCfgList(reqBean, cellEquipContext, productionPsInContextList, null);
|
||||
|
||||
//拿到当前最大的foreignKey
|
||||
Optional<MesProductionPsInContext> maxForeignKeyOptional = productionPsInContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getForeignKey()))).max(Comparator.comparing(MesProductionPsInContext::getForeignKey));
|
||||
Integer foreignKey = (null != maxForeignKeyOptional && maxForeignKeyOptional.isPresent()) ? maxForeignKeyOptional.get().getForeignKey() : MesPcnExtConstWords.ZERO;
|
||||
|
||||
for (MesProductionPsInContext productionPsInContext : productionPsInContextList) {
|
||||
|
||||
//foreignKey有值代表已经匹配过产品加工规则
|
||||
if (null == productionPsInContext || productionPsInContext.getIsFinishCode().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0 || !StringUtils.isEmpty(productionPsInContext.getForeignKey())) continue;
|
||||
|
||||
List<MesProdRuleNosortCfg> filterList;
|
||||
//搜集进料零件号匹配的产品加工规则
|
||||
if (!StringUtils.isEmpty(productionPsInContext.getPartNo())) filterList = filterProdRuleNosortCfgList(prodRuleNosortCfgList, productionPsInContext.getPartNo());
|
||||
//进料零件条码匹配进料零件规则
|
||||
else filterList = (List<MesProdRuleNosortCfg>) numberRuleMatchDispatchService.matchNumberRule(reqBean.getOrganizeCode(), productionPsInContext.getProductSn(), filterProdRuleNosortCfgList(prodRuleNosortCfgList));
|
||||
|
||||
if (CollectionUtils.isEmpty(filterList) || filterList.size() > 1) {
|
||||
productionPsInContext.busiCheckToDelete();
|
||||
return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format(
|
||||
"请检查非排序产品加工规则信息,根据设备[%s]进料零件条码[%s]查询到[%s]条加工规则配置信息,无法显示出装配件清单!", cellEquipContext.getEquipmentCode(), productionPsInContext.getProductSn(), CollectionUtils.isEmpty(filterList) ? MesPcnExtConstWords.ZERO : filterList.size()));
|
||||
|
||||
}
|
||||
|
||||
if (!StringUtils.isEmpty(productionPsInContext.getPartNo()) && !(Boolean) productionRecordService.checkSnTimeliness(
|
||||
reqBean.getOrganizeCode(), productionPsInContext.getProductSn(), filterList.get(0).getId(), MesExtEnumUtil.TIME_DATA_SOURCE.DATA_SOURCE20.getValue(), false).get(MesPcnExtConstWords.RESULT)) {
|
||||
productionPsInContext.busiCheckToDelete();
|
||||
return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("请检查进料主条码信息,进料主条码[%s]时效性验证不通过!", productionPsInContext.getProductSn()));
|
||||
}
|
||||
|
||||
//【非排序线】获取产品加工规则对应的装配件信息
|
||||
prodRuleContextList.add(prodRuleCfgExtService.getProdRuleNosortContext(new MesProdRuleContext(
|
||||
reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), reqBean.getProcessCode(), productionProcessContext.getCraftCode())
|
||||
.copy(prodRuleNosortCfgList.get(0)).productSn(productionPsInContext.getProductSn()).foreignKey(productionPsInContext.foreignKey(foreignKey += 1).getForeignKey())));
|
||||
|
||||
}
|
||||
|
||||
return stepResult;
|
||||
|
||||
}
|
||||
|
||||
private List<MesProdRuleNosortCfg> getProdRuleNosortCfgList(StationRequestBean reqBean, MesCellEquipContext cellEquipContext, List<MesProductionPsInContext> productionPsInContextList, List<String> outPartNoList) {
|
||||
//【非排序线】获取产品加工规则 ; 分别根据 进料零件有值 与 进料规则不为空 查询 再合并数据返回, 条件可能携带产出零件
|
||||
List<String> inPartNoList = productionPsInContextList.stream().filter(o -> (null != o && StringUtils.isEmpty(o.getForeignKey()) && !StringUtils.isEmpty(o.getPartNo()))).map(MesProductionPsInContext::getPartNo).collect(Collectors.toList());
|
||||
Optional<MesProductionPsInContext> optional = productionPsInContextList.stream().filter(o -> (null != o && StringUtils.isEmpty(o.getForeignKey()) && o.getIsFinishCode().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0 && StringUtils.isEmpty(o.getPartNo()))).findFirst();
|
||||
List<MesProdRuleNosortCfg> prodRuleNosortCfgList = prodRuleCfgExtService.getProdRuleNosortCfgList(
|
||||
!CollectionUtils.isEmpty(inPartNoList) ? new MesProdRuleContext(reqBean.getOrganizeCode()).equipmentCode(cellEquipContext.getEquipmentCode()).inPartNos(inPartNoList).outPartNos(outPartNoList) : null,
|
||||
(null != optional && optional.isPresent()) ? new MesProdRuleContext(reqBean.getOrganizeCode()).equipmentCode(cellEquipContext.getEquipmentCode()).inPartIsEmpty(true).inPartRuleIsEmpty(false).outPartNos(outPartNoList) : null);
|
||||
return prodRuleNosortCfgList;
|
||||
}
|
||||
|
||||
//存在【产出零件数据】信息, 存在【进料零件条码信息】 获取匹配当前产出零件的加工规则数据 (只能查询到一条,否则报错)
|
||||
private StepResult doHandleProdRuleDataByProductionPartAndProductSn(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesWorkCenter workCenter, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext,
|
||||
List<MesProdRuleContext> prodRuleContextList, List<MesProductionPartContext> productionPartContextList, List<MesProductionPsInContext> productionPsInContextList, List<String> outPartNoList, Integer foreignKey) {
|
||||
|
||||
//【非排序线】获取产品加工规则 ; 分别根据 进料零件有值 与 进料规则不为空 查询 再合并数据返回, 条件携带产出零件
|
||||
List<MesProdRuleNosortCfg> prodRuleNosortCfgList = getProdRuleNosortCfgList(reqBean, cellEquipContext, productionPsInContextList, outPartNoList);
|
||||
//根据产出零件分组数据
|
||||
Map<String, List<MesProdRuleNosortCfg>> prodRuleNosortCfgMap = groupProdRuleNosortCfgList(prodRuleNosortCfgList);
|
||||
|
||||
for (MesProductionPartContext productionPartContext : productionPartContextList) {
|
||||
|
||||
//foreignKey有值代表已经匹配过产品加工规则
|
||||
if (null == productionPartContext || productionPartContext.getIsFinishCode().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0 || !StringUtils.isEmpty(productionPartContext.getForeignKey())) continue;
|
||||
|
||||
//获取匹配产出零件的所有加工规则
|
||||
List<MesProdRuleNosortCfg> outPartNoProdRuleList = !CollectionUtils.isEmpty(prodRuleNosortCfgMap) ? prodRuleNosortCfgMap.get(productionPartContext.getPartNo()) : null;
|
||||
|
||||
String productSn = null;
|
||||
|
||||
//判断是否还存在待匹配的主条码信息, 内部循环匹配成功会标记 foreignKey
|
||||
Optional<MesProductionPsInContext> optional = productionPsInContextList.stream().filter(o -> (null != o && StringUtils.isEmpty(o.getForeignKey()) && o.getIsFinishCode().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0)).findFirst();
|
||||
if (null == optional || !optional.isPresent()) break;
|
||||
|
||||
List<MesProdRuleNosortCfg> innerfilterList = null;
|
||||
for (MesProductionPsInContext productionPsInContext : productionPsInContextList) {
|
||||
|
||||
//foreignKey有值代表已经匹配过产品加工规则
|
||||
if (null == productionPsInContext || productionPartContext.getIsFinishCode().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0 || !StringUtils.isEmpty(productionPsInContext.getForeignKey())) continue;
|
||||
|
||||
//搜集进料零件号匹配的产品加工规则
|
||||
if (!StringUtils.isEmpty(productionPsInContext.getPartNo())) innerfilterList = filterProdRuleNosortCfgList(outPartNoProdRuleList, productionPsInContext.getPartNo());
|
||||
//进料零件条码匹配进料零件规则
|
||||
else innerfilterList = (List<MesProdRuleNosortCfg>) numberRuleMatchDispatchService.matchNumberRule(reqBean.getOrganizeCode(), productionPsInContext.getProductSn(), filterProdRuleNosortCfgList(outPartNoProdRuleList));
|
||||
|
||||
if (CollectionUtils.isEmpty(innerfilterList) || innerfilterList.size() > 1) continue;
|
||||
|
||||
if (!StringUtils.isEmpty(productionPsInContext.getPartNo()) && !(Boolean) productionRecordService.checkSnTimeliness(
|
||||
reqBean.getOrganizeCode(), productionPsInContext.getProductSn(), innerfilterList.get(0).getId(), MesExtEnumUtil.TIME_DATA_SOURCE.DATA_SOURCE20.getValue(), false).get(MesPcnExtConstWords.RESULT)) {
|
||||
productionPsInContext.busiCheckToDelete();
|
||||
return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("请检查进料主条码信息,进料主条码[%s]时效性验证不通过!", productionPsInContext.getProductSn()));
|
||||
}
|
||||
|
||||
productionPartContext.foreignKey(productionPsInContext.foreignKey(foreignKey += 1).getForeignKey());
|
||||
|
||||
productSn = productionPsInContext.getProductSn();
|
||||
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
if (CollectionUtils.isEmpty(innerfilterList) || innerfilterList.size() > 1) {
|
||||
|
||||
productionPsInContextList.forEach(o -> {
|
||||
if (StringUtils.isEmpty(o.getForeignKey()) || o.getIsFinishCode().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0) o.busiCheckToDelete();
|
||||
});
|
||||
|
||||
return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format(
|
||||
"请检查非排序产品加工规则信息,根据设备[%s]产出零件[%s]匹配任意一个主条码%s查询到[%s]条加工规则配置信息,无法显示出装配件清单!", cellEquipContext.getEquipmentCode(), productionPartContext.getPartNo(),
|
||||
productionPsInContextList.stream().filter(o -> (null != o && StringUtils.isEmpty(o.getForeignKey()) && o.getIsFinishCode().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0)).map(MesProductionPsInContext::getProductSn).collect(Collectors.toList()).toString(),
|
||||
CollectionUtils.isEmpty(innerfilterList) ? MesPcnExtConstWords.ZERO : innerfilterList.size()));
|
||||
|
||||
}
|
||||
|
||||
//【非排序线】获取产品加工规则对应的装配件信息
|
||||
prodRuleContextList.add(prodRuleCfgExtService.getProdRuleNosortContext(new MesProdRuleContext(
|
||||
reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), reqBean.getProcessCode(), productionProcessContext.getCraftCode()).
|
||||
copy(innerfilterList.get(0)).workOrderNo(productionPartContext.getWorkOrderNo()).productSn(productSn)).foreignKey(productionPartContext.getForeignKey()));
|
||||
|
||||
}
|
||||
|
||||
return stepResult;
|
||||
|
||||
}
|
||||
|
||||
//搜集进料零件号匹配的产品加工规则
|
||||
private List<MesProdRuleNosortCfg> filterProdRuleNosortCfgList(List<MesProdRuleNosortCfg> prodRuleNosortCfgList, String partNo) {
|
||||
return CollectionUtils.isEmpty(prodRuleNosortCfgList) ? null : prodRuleNosortCfgList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getInPartNo()) && o.getInPartNo().equals(partNo))).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
//搜集进料零件规则有值的产品加工规则
|
||||
private List<MesProdRuleNosortCfg> filterProdRuleNosortCfgList(List<MesProdRuleNosortCfg> prodRuleNosortCfgList) {
|
||||
return CollectionUtils.isEmpty(prodRuleNosortCfgList) ? null : prodRuleNosortCfgList.stream().filter(o -> (null != o && StringUtils.isEmpty(o.getInPartNo()) && !StringUtils.isEmpty(o.getInPartNoRule()))).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
//根据产出零件分组数据
|
||||
private Map<String, List<MesProdRuleNosortCfg>> groupProdRuleNosortCfgList(List<MesProdRuleNosortCfg> prodRuleNosortCfgList) {
|
||||
return CollectionUtils.isEmpty(prodRuleNosortCfgList) ? null : prodRuleNosortCfgList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesProdRuleNosortCfg::getOutPartNo));
|
||||
}
|
||||
|
||||
//显示装配件信息
|
||||
public Boolean showProductionAssembly(StationRequestBean reqBean, StationResultBean resultBean, MesWorkCenter workCenter, MesCellEquipContext cellEquipContext, List<MesProdRuleContext> prodRuleContextList, List<MesProductionPartContext> productionPartContextList) {
|
||||
|
||||
Map<Integer, MesProductionPartContext> productionPartMap = productionPartContextList == null ? null : productionPartContextList.stream().filter(o -> null != o && o.getForeignKey() != null).collect(Collectors.toMap(MesProductionPartContext::getForeignKey, o -> o));
|
||||
|
||||
for (MesProdRuleContext prodRuleContext : prodRuleContextList) {
|
||||
|
||||
if (null == prodRuleContext || StringUtils.isEmpty(prodRuleContext.getAssemblyDataJson())) continue;
|
||||
|
||||
String workOrderNo = getWorkOrderNo(productionPartMap, prodRuleContext.getForeignKey());
|
||||
|
||||
//封装匹配当前设备的装配件信息
|
||||
List<MesAssemblyShowContext> assemblyShowContextList = getAssemblyShowContextList(cellEquipContext, prodRuleContext.getAssemblyDataContext(workCenter), prodRuleContext, workOrderNo);
|
||||
if (CollectionUtils.isEmpty(assemblyShowContextList)) continue;
|
||||
|
||||
//装配件清单列表标题
|
||||
List<AttrBean> attrBeanList = dataAttrList(workOrderNo);
|
||||
|
||||
//封装多表格
|
||||
resultBean.addStationResultBeans(new StationResultBean().dataType(MesPcnEnumUtil.STATION_DATA_TYPE.TABLE.getValue()).dataAttrList(attrBeanList).resultList(assemblyShowContextList));
|
||||
|
||||
}
|
||||
|
||||
if (CollectionUtils.isEmpty(resultBean.getStationResultBeans())) return false;
|
||||
|
||||
resultBean.busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.STEP_CUSTOM_CONTENT.getValue()).dataType(MesPcnEnumUtil.STATION_DATA_TYPE.TABLES.getValue());
|
||||
this.sendMessage(reqBean, resultBean);
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
private String getWorkOrderNo(Map<Integer, MesProductionPartContext> productionPartMap, Integer foreignKey) {
|
||||
return (!CollectionUtils.isEmpty(productionPartMap) && productionPartMap.containsKey(foreignKey)) ? productionPartMap.get(foreignKey).getWorkOrderNo() : null;
|
||||
}
|
||||
|
||||
//封装匹配当前设备的装配件信息
|
||||
private List<MesAssemblyShowContext> getAssemblyShowContextList(MesCellEquipContext cellEquipContext, List<MesProductionAssemblyContext> productionAssemblyContextList, MesProdRuleContext prodRuleContext, String workOrderNo) {
|
||||
if (CollectionUtils.isEmpty(productionAssemblyContextList)) return null;
|
||||
List<MesAssemblyShowContext> assemblyShowContextList = new ArrayList<>();
|
||||
for (MesProductionAssemblyContext item : productionAssemblyContextList) {
|
||||
if (null == item) continue;
|
||||
assemblyShowContextList.add(assemblyShowContext(item, prodRuleContext, workOrderNo));
|
||||
}
|
||||
|
||||
assemblyShowContextList = assemblyShowContextList.stream().filter(o -> null != o).sorted(Comparator.comparing(MesAssemblyShowContext::getRouteSeq)).collect(Collectors.toList());
|
||||
|
||||
AtomicReference<Integer> index = new AtomicReference<>(0);
|
||||
assemblyShowContextList.forEach(o -> o.index(index.updateAndGet(v -> v + 1)));
|
||||
|
||||
return assemblyShowContextList;
|
||||
}
|
||||
|
||||
//封装装配件信息
|
||||
private MesAssemblyShowContext assemblyShowContext(MesProductionAssemblyContext o, MesProdRuleContext prodRuleContext, String workOrderNo) {
|
||||
MesAssemblyShowContext assemblyShowContext = new MesAssemblyShowContext();
|
||||
BeanUtils.copyProperties(o, assemblyShowContext);
|
||||
assemblyShowContext.setAssemblyStatusName(MesExtEnumUtil.ASSEMBLY_STATUS.valueOfDescription(assemblyShowContext.getAssemblyStatus()));
|
||||
if (MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue() != assemblyShowContext.getAssemblyStatus())
|
||||
assemblyShowContext.setColor(StringUtils.isEmpty(assemblyShowContext.getShowColor()) ? MesExtEnumUtil.COLOR.GREEN.getValue() : assemblyShowContext.getShowColor());
|
||||
return assemblyShowContext;
|
||||
}
|
||||
|
||||
//装配件清单列表标题
|
||||
private List<AttrBean> dataAttrList(String workOrderNo) {
|
||||
List<AttrBean> attrBeanList = new ArrayList<>();
|
||||
PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.INDEX, "序号");
|
||||
if (!StringUtils.isEmpty(workOrderNo)) PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.WORK_ORDER_NO, "生产工单编号");
|
||||
PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.PART_NO, "零件编码");
|
||||
PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.ASSEMBLY_PART_NO, "原料编码");
|
||||
PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.ASSEMBLY_PART_NAME, "原料名称");
|
||||
PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.ASSEMBLY_SN, "原料条码");
|
||||
PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.ASSEMBLY_STATUS_NAME, "装配状态");
|
||||
return attrBeanList;
|
||||
}
|
||||
|
||||
private Boolean doBusiCheckToDelete(StationRequestBean reqBean, List<MesProductionPartContext> productionPartContextList, List<MesProductionPsInContext> productionPsInContextList) {
|
||||
if (!CollectionUtils.isEmpty(productionPsInContextList)) productionDispatchContextStepService.saveProductionPsInContext(reqBean,
|
||||
productionPsInContextList.stream().filter(o -> (null != o && o.getBusiCheckToDelete().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0)).collect(Collectors.toList()));
|
||||
else if (!CollectionUtils.isEmpty(productionPartContextList)) productionDispatchContextStepService.saveProductionPartContext(reqBean,
|
||||
productionPartContextList.stream().filter(o -> (null != o && o.getBusiCheckToDelete().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0)).collect(Collectors.toList()));
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
@ -1,58 +0,0 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
|
||||
|
||||
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService;
|
||||
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
|
||||
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
|
||||
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 : zxw
|
||||
**/
|
||||
@Slf4j
|
||||
@Service
|
||||
public class MesEndStepService extends BaseStepService {
|
||||
|
||||
|
||||
@Autowired
|
||||
private IMesProductionDispatchContextStepService mesProductionDispatchContextStepService;
|
||||
|
||||
/*
|
||||
* @param reqBean
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public StepResult execute(StationRequestBean reqBean) {
|
||||
|
||||
StationResultBean resultBean = new StationResultBean();
|
||||
|
||||
StepResult stepResult = StepResult.getSuccessComplete();
|
||||
|
||||
mesProductionDispatchContextStepService.deleteFirstMouldNoContext(reqBean);
|
||||
mesProductionDispatchContextStepService.deleteMouldNoContext(reqBean);
|
||||
mesProductionDispatchContextStepService.deleteProductResultContext(reqBean);
|
||||
mesProductionDispatchContextStepService.deleteReadySignalContext(reqBean);
|
||||
|
||||
mesProductionDispatchContextStepService.deleteMesRawPartChargingDataContext(reqBean);
|
||||
mesProductionDispatchContextStepService.deletePartDataContext(reqBean);
|
||||
mesProductionDispatchContextStepService.deleteProdRuleDataContext(reqBean);
|
||||
mesProductionDispatchContextStepService.deleteProductionPartContext(reqBean);
|
||||
mesProductionDispatchContextStepService.deleteProductionPartNoContext(reqBean);
|
||||
mesProductionDispatchContextStepService.deleteProductionPsInContext(reqBean);
|
||||
mesProductionDispatchContextStepService.deleteProductionPsOutContext(reqBean);
|
||||
mesProductionDispatchContextStepService.deleteScanAssemblySnContext(reqBean);
|
||||
mesProductionDispatchContextStepService.deleteSendProcessCmdContext(reqBean);
|
||||
mesProductionDispatchContextStepService.deleteScanWorkOrderNoContext(reqBean);
|
||||
mesProductionDispatchContextStepService.deleteScanProductSnContext(reqBean);
|
||||
|
||||
this.sendMessage(reqBean, new StationResultBean().busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.STEP_CUSTOM_CONTENT.getValue()).dataType(MesPcnEnumUtil.STATION_DATA_TYPE.TABLES.getValue()));
|
||||
|
||||
return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "完成工步执行成功");
|
||||
|
||||
}
|
||||
}
|
@ -1,89 +0,0 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
|
||||
|
||||
import akka.actor.ActorRef;
|
||||
import akka.actor.ActorSystem;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
|
||||
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
|
||||
import cn.estsh.i3plus.pojo.base.codemaker.SnowflakeIdMaker;
|
||||
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 java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
/**
|
||||
* @Description : 加工异常处理工步
|
||||
* @Author : zxw
|
||||
**/
|
||||
@Slf4j
|
||||
@Service
|
||||
public class MesSaveProcessResultStepService extends BaseStepService {
|
||||
@Autowired
|
||||
private SnowflakeIdMaker snowflakeIdMaker;
|
||||
|
||||
@Autowired
|
||||
private ActorSystem actorSystem;
|
||||
|
||||
@Autowired
|
||||
private IMesProductionProcessContextStepService productionProcessContextStepService;
|
||||
|
||||
@Autowired
|
||||
private MesVariableWhenFinishedReadStepService mesVariableWhenFinishedReadStepService;
|
||||
|
||||
@Autowired
|
||||
private MesMouldRecordGenerateStepService mesMouldRecordGenerateStepService;
|
||||
|
||||
@Autowired
|
||||
private MesProductSnSaveStepService MesProductSnSaveStepService;
|
||||
|
||||
@Autowired
|
||||
private MesProductionRecordGenerateStepService mesProductionRecordGenerateStepService;
|
||||
|
||||
@Autowired
|
||||
private IMesProductionDispatchContextStepService mesProductionDispatchContextStepService;
|
||||
|
||||
@Autowired
|
||||
private MesProductResultErrorHandleStepService mesProductResultErrorHandleStepService;
|
||||
|
||||
@Autowired
|
||||
private MesReportGenerateStepService mesReportGenerateStepService;
|
||||
|
||||
public static final String ORDER_NO_JIS_SORT = "ORDER_NO_JIS_SORT";
|
||||
|
||||
private static final Map<String, ActorRef> refMap = new ConcurrentHashMap<>(200);
|
||||
|
||||
@Override
|
||||
public StepResult execute(StationRequestBean reqBean) {
|
||||
StationResultBean resultBean = new StationResultBean();
|
||||
|
||||
StepResult stepResult = StepResult.getSuccessComplete();
|
||||
/**
|
||||
* 生成开模记录
|
||||
*/
|
||||
mesMouldRecordGenerateStepService.execute(reqBean);
|
||||
/**
|
||||
* 保存零件条码信息工步
|
||||
*/
|
||||
MesProductSnSaveStepService.execute(reqBean);
|
||||
/**
|
||||
* 生成加工记录工步
|
||||
*/
|
||||
mesProductionRecordGenerateStepService.execute(reqBean);
|
||||
/**
|
||||
* 加工异常处理工步
|
||||
*/
|
||||
mesProductResultErrorHandleStepService.execute(reqBean);
|
||||
/**
|
||||
* 报工
|
||||
*/
|
||||
// mesReportGenerateStepService.execute(reqBean);
|
||||
|
||||
|
||||
return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "保存加工结果成功");
|
||||
}
|
||||
}
|
@ -0,0 +1,82 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.pojo.context;
|
||||
|
||||
import io.swagger.annotations.ApiParam;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 生产过程上下文对象-开模记录信息
|
||||
*/
|
||||
@Data
|
||||
public class MesScanMonitorContext implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 8234923032970057500L;
|
||||
|
||||
@ApiParam("组织代码")
|
||||
private String organizeCode;
|
||||
|
||||
@ApiParam("开模记录ID")
|
||||
private Long mouldRecordId;
|
||||
|
||||
@ApiParam(value ="工序开始时间")
|
||||
private String startDateTime;
|
||||
|
||||
@ApiParam("区域代码")
|
||||
private String areaCode;
|
||||
|
||||
@ApiParam("生产线")
|
||||
private String workCenterCode;
|
||||
|
||||
@ApiParam("工位")
|
||||
private String workCellCode;
|
||||
|
||||
@ApiParam("设备ID")
|
||||
private Integer equipId;
|
||||
|
||||
@ApiParam("设备代码")
|
||||
private String equipmentCode;
|
||||
|
||||
@ApiParam("设备名称")
|
||||
private String equipmentName;
|
||||
|
||||
@ApiParam("工序代码")
|
||||
private String processCode;
|
||||
|
||||
@ApiParam("工序名称")
|
||||
private String processName;
|
||||
|
||||
@ApiParam("工艺代码")
|
||||
private String craftCode;
|
||||
|
||||
@ApiParam("工艺名称")
|
||||
private String craftName;
|
||||
|
||||
public MesScanMonitorContext() {}
|
||||
|
||||
public MesScanMonitorContext(String organizeCode, String processCode, String processName, String craftCode, String craftName) {
|
||||
this.organizeCode = organizeCode;
|
||||
this.processCode = processCode;
|
||||
this.processName = processName;
|
||||
this.craftCode = craftCode;
|
||||
this.craftName = craftName;
|
||||
}
|
||||
|
||||
public MesScanMonitorContext mouldRecordId(Long mouldRecordId) {
|
||||
this.mouldRecordId = mouldRecordId;
|
||||
return this;
|
||||
}
|
||||
|
||||
public MesScanMonitorContext startDateTime(String startDateTime) {
|
||||
this.startDateTime = startDateTime;
|
||||
return this;
|
||||
}
|
||||
|
||||
public MesScanMonitorContext equipment(Integer equipId, String equipmentCode, String equipmentName) {
|
||||
this.equipId = equipId;
|
||||
this.equipmentCode = equipmentCode;
|
||||
this.equipmentName = equipmentName;
|
||||
return this;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,49 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.pojo.context;
|
||||
|
||||
import io.swagger.annotations.ApiParam;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 生产过程上下文对象-开模记录明细信息
|
||||
*/
|
||||
@Data
|
||||
public class MesScanMonitorDetailContext implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = -7678933218854960945L;
|
||||
|
||||
@ApiParam("扫描/读取信息")
|
||||
private String scanInfo;
|
||||
|
||||
@ApiParam("日志类型")
|
||||
private Integer logType;
|
||||
|
||||
@ApiParam("日志内容")
|
||||
private String message;
|
||||
|
||||
@ApiParam("信息类型")
|
||||
private Integer messageType;
|
||||
|
||||
public MesScanMonitorDetailContext() {}
|
||||
|
||||
public MesScanMonitorDetailContext(Integer logType) {
|
||||
this.logType = logType;
|
||||
}
|
||||
|
||||
public MesScanMonitorDetailContext scanInfo(String scanInfo) {
|
||||
this.scanInfo = scanInfo;
|
||||
return this;
|
||||
}
|
||||
|
||||
public MesScanMonitorDetailContext message(String message) {
|
||||
this.message = message;
|
||||
return this;
|
||||
}
|
||||
|
||||
public MesScanMonitorDetailContext messageType(Integer messageType) {
|
||||
this.messageType = messageType;
|
||||
return this;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.pojo.model;
|
||||
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesRawPackage;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesRawPackageDetail;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesRawPackagePart;
|
||||
import io.swagger.annotations.ApiParam;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Description : 原材料容器明细Model
|
||||
* @Reference :
|
||||
* @Author : junsheng.li
|
||||
* @CreateDate 2024/6/30 11:40
|
||||
* @Modify:
|
||||
**/
|
||||
@Data
|
||||
public class MesRawPackageModel {
|
||||
|
||||
@ApiParam("原材料容器")
|
||||
private MesRawPackage mesRawPackage;
|
||||
|
||||
@ApiParam("原材料容器明细")
|
||||
private MesRawPackageDetail mesRawPackageDetail;
|
||||
|
||||
@ApiParam("原材料容器零件关系表")
|
||||
private List<MesRawPackagePart> mesRawPackagePartList;
|
||||
}
|
@ -0,0 +1,44 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.pojo.model;
|
||||
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesRawPackagePart;
|
||||
import io.swagger.annotations.ApiParam;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @Description : 加料防错
|
||||
* @Reference :
|
||||
* @Author : junsheng.li
|
||||
* @CreateDate 2024/6/30 11:40
|
||||
* @Modify:
|
||||
**/
|
||||
@Data
|
||||
public class MesRawPartChargingModel {
|
||||
@ApiParam("操作人")
|
||||
private String userName;
|
||||
|
||||
@ApiParam("工厂代码")
|
||||
private String organizeCode;
|
||||
|
||||
@ApiParam("料筒条码")
|
||||
private String packageSn;
|
||||
|
||||
@ApiParam("原料条码")
|
||||
private String sn;
|
||||
|
||||
@ApiParam("批次号")
|
||||
private String lotNo;
|
||||
|
||||
@ApiParam("操作类型")
|
||||
private Integer type;
|
||||
|
||||
@ApiParam("原材料容器")
|
||||
private MesRawPackageModel mesRawPackageModel;
|
||||
|
||||
@ApiParam("原材料容器零件关系")
|
||||
private MesRawPackagePart mesRawPackagePart;
|
||||
|
||||
@ApiParam("产品条码")
|
||||
private MesProduceSn mesProduceSn;
|
||||
|
||||
}
|
Loading…
Reference in New Issue