forked from I3-YF/i3plus-mes-pcn-yfai
pcn 工步 获取加工结果工步
parent
15774bac0a
commit
991ab57dfd
@ -0,0 +1,21 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.api.base;
|
||||
|
||||
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface IEquipmentExtService {
|
||||
|
||||
@ApiOperation(value = "根据生产线代码,工位代码查询工位设备集合")
|
||||
List<MesCellEquipContext> getCellEquipmentList(String organizeCode, String workCenterCode, String workCellCode);
|
||||
|
||||
@ApiOperation(value = "根据设备代码,变量类型,二级变量查询设备数据变量集合")
|
||||
List<MesEquipmentVariable> getEquipmentVariableList(MesCellEquipContext cellEquipmentContext, Integer variableType, List<String> categoryLevelTwoList);
|
||||
|
||||
@ApiOperation(value = "根据设备变量配置类型,二级变量查询设备数据变量集合")
|
||||
List<MesEquipmentVariableCfg> getEquipmentVariableCfgList(MesCellEquipContext cellEquipmentContext, List<String> categoryLevelTwoList);
|
||||
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.api.base;
|
||||
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentLog;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public interface IEquipmentLogExtService {
|
||||
|
||||
@ApiOperation(value = "根据设备ID 查询设备ID分表所有采集数据")
|
||||
List<MesEquipmentLog> getEquipmentLogList(String organizeCode, Integer equipId);
|
||||
|
||||
@ApiOperation(value = "根据设备ID,是否常变值状态,OPC注册ID集合 查询设备ID分表采集数据")
|
||||
List<MesEquipmentLog> getEquipmentLogList(String organizeCode, Integer equipId, Integer needNewValue, List<Integer> clientHandleList);
|
||||
|
||||
@ApiOperation(value = "根据设备ID,OPC注册ID集合 修改设备ID分表采集数据的状态")
|
||||
void updateEquipmentLogList(String organizeCode, Integer equipId, List<Integer> clientHandleList);
|
||||
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.api.base;
|
||||
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface IProdOrgExtService {
|
||||
|
||||
@ApiOperation(value = "根据生产线代码查询工位集合")
|
||||
List<MesWorkCell> findWorkCell(String organizeCode, String workCenterCode);
|
||||
|
||||
@ApiOperation(value = "根据生产线代码查询生产线信息")
|
||||
MesWorkCenter getWorkCenterDb(String organizeCode, String workCenterCode);
|
||||
|
||||
@ApiOperation(value = "根据生产线代码,工位代码查询工位信息")
|
||||
MesWorkCell getWorkCellDb(String organizeCode, String workCenterCode, String workCellCode);
|
||||
|
||||
}
|
@ -1,24 +0,0 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.api.base;
|
||||
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author yumingxing
|
||||
* @version 1.0
|
||||
* @date 2021/1/29 13:24
|
||||
**/
|
||||
public interface ISxOrganizeExtService {
|
||||
|
||||
/**
|
||||
* 根据生产线代码查询工位集合
|
||||
* @param organizeCode 组织代码
|
||||
* @param workCenterCode 生产线代码
|
||||
* @return 工位集合
|
||||
*/
|
||||
@ApiOperation(value = "根据生产线代码查询工位集合", notes = "根据生产线代码查询工位集合")
|
||||
List<MesWorkCell> findWorkCell(String organizeCode, String workCenterCode);
|
||||
|
||||
}
|
@ -0,0 +1,62 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.api.busi;
|
||||
|
||||
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCollectContext;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg;
|
||||
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public interface IMesProductionProcessContextStepService {
|
||||
|
||||
@ApiOperation(value = "获取生产过程上下文对象")
|
||||
MesProductionProcessContext getProductionProcessContext(StationRequestBean reqBean);
|
||||
|
||||
@ApiOperation(value = "获取工序工艺信息")
|
||||
MesProductionProcessContext processContext(StationRequestBean reqBean);
|
||||
|
||||
@ApiOperation(value = "获取工序工艺信息")
|
||||
MesProductionProcessContext processContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext);
|
||||
|
||||
@ApiOperation(value = "验证组织模型有效性")
|
||||
MesProductionProcessContext checkBaseData(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext);
|
||||
|
||||
@ApiOperation(value = "获取工位设备集合信息")
|
||||
MesProductionProcessContext getCellEquipmentList(StationRequestBean reqBean);
|
||||
|
||||
@ApiOperation(value = "获取工位设备集合信息")
|
||||
MesProductionProcessContext getCellEquipmentList(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext);
|
||||
|
||||
@ApiOperation(value = "获取工位当前设备信息")
|
||||
MesProductionProcessContext getCurCellEquipment(StationRequestBean reqBean);
|
||||
|
||||
@ApiOperation(value = "获取工位当前设备信息")
|
||||
MesProductionProcessContext getCurCellEquipment(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext);
|
||||
|
||||
@ApiOperation(value = "获取设备数据变量信息")
|
||||
MesProductionProcessContext getEquipmentVariable(StationRequestBean reqBean, Integer variableType, String... categoryLevelTwo);
|
||||
|
||||
@ApiOperation(value = "获取设备数据变量信息")
|
||||
MesProductionProcessContext getEquipmentVariable(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, Integer variableType, String... categoryLevelTwo);
|
||||
|
||||
@ApiOperation(value = "获取设备数据变量接口逻辑信息")
|
||||
MesProductionProcessContext getEquipmentVariableCfg(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext);
|
||||
|
||||
@ApiOperation(value = "对设备数据变量信息进行必要性验证")
|
||||
MesProductionProcessContext checkNecessaryEquipmentVariable(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, Integer variableType, String... categoryLevelTwo);
|
||||
|
||||
@ApiOperation(value = "对设备数据变量接口逻辑信息进行必要性验证")
|
||||
MesProductionProcessContext checkNecessaryEquipmentVariableCfg(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext);
|
||||
|
||||
@ApiOperation(value = "获取设备分表采集数据")
|
||||
MesProductionProcessContext doHandleEquipmentLogListByIds(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext);
|
||||
|
||||
@ApiOperation(value = "设备数据变量接口逻辑信息数据分组")
|
||||
Map<String, List<MesEquipmentVariableCfg>> getEquipmentVariableCfgMap(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext);
|
||||
|
||||
@ApiOperation(value = "根据设备数据变量接口逻辑信息匹配结果")
|
||||
MesEquipmentVariableCfg execMatchEquipmentVariableCfgValue(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext,
|
||||
MesEquipVariableCollectContext collectContext, Map<String, List<MesEquipmentVariableCfg>> equipmentVariableCfgMap, Boolean isNeedVariableCfgValue);
|
||||
}
|
@ -1,4 +0,0 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.apiservice.controller.base;
|
||||
|
||||
public class TestBaseController {
|
||||
}
|
@ -0,0 +1,87 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.base;
|
||||
|
||||
import cn.estsh.i3plus.ext.mes.pcn.api.base.IEquipmentExtService;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
|
||||
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.MesEquipment;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesWcEquipment;
|
||||
import cn.estsh.i3plus.pojo.mes.repository.MesEquipmentRepository;
|
||||
import cn.estsh.i3plus.pojo.mes.repository.MesEquipmentVariableCfgRepository;
|
||||
import cn.estsh.i3plus.pojo.mes.repository.MesEquipmentVariableRepository;
|
||||
import cn.estsh.i3plus.pojo.mes.repository.MesWcEquipmentRepository;
|
||||
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.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
public class EquipmentExtService implements IEquipmentExtService {
|
||||
|
||||
@Autowired
|
||||
private MesWcEquipmentRepository wcEquipmentRepository;
|
||||
|
||||
@Autowired
|
||||
private MesEquipmentRepository equipmentRepository;
|
||||
|
||||
@Autowired
|
||||
private MesEquipmentVariableRepository equipmentVariableRepository;
|
||||
|
||||
@Autowired
|
||||
private MesEquipmentVariableCfgRepository equipmentVariableCfgRepository;
|
||||
|
||||
@Override
|
||||
public List<MesCellEquipContext> getCellEquipmentList(String organizeCode, String workCenterCode, String workCellCode) {
|
||||
if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(workCenterCode) || StringUtils.isEmpty(workCellCode)) return null;
|
||||
List<MesWcEquipment> wcEquipmentDbList = wcEquipmentRepository.findByProperty(
|
||||
new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.WORK_CENTER_CODE, MesPcnExtConstWords.WORK_CENTER_CODE},
|
||||
new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), workCenterCode, workCellCode});
|
||||
if (CollectionUtils.isEmpty(wcEquipmentDbList)) return null;
|
||||
List<MesCellEquipContext> cellEquipmentContextList = null;
|
||||
for (MesWcEquipment wcEquipmentDb : wcEquipmentDbList) {
|
||||
if (null == wcEquipmentDb) continue;
|
||||
MesEquipment equipmentDb = equipmentRepository.getByProperty(
|
||||
new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.EQUIPMENT_CODE},
|
||||
new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), wcEquipmentDb.getEquipmentCode()});
|
||||
if (null == equipmentDb) continue;
|
||||
if (CollectionUtils.isEmpty(cellEquipmentContextList)) cellEquipmentContextList = new ArrayList<>();
|
||||
MesCellEquipContext cellEquipmentContext = new MesCellEquipContext();
|
||||
BeanUtils.copyProperties(wcEquipmentDb, cellEquipmentContext);
|
||||
BeanUtils.copyProperties(equipmentDb, cellEquipmentContext);
|
||||
cellEquipmentContextList.add(cellEquipmentContext);
|
||||
}
|
||||
return cellEquipmentContextList;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<MesEquipmentVariable> getEquipmentVariableList(MesCellEquipContext cellEquipmentContext, Integer variableType, List<String> categoryLevelTwoList) {
|
||||
if (StringUtils.isEmpty(variableType) || null == cellEquipmentContext) return null;
|
||||
DdlPackBean packBean = DdlPackBean.getDdlPackBean(cellEquipmentContext.getOrganizeCode());
|
||||
DdlPreparedPack.getStringEqualPack(cellEquipmentContext.getEquipmentCode(), MesPcnExtConstWords.EQUIPMENT_CODE, packBean);
|
||||
DdlPreparedPack.getNumEqualPack(variableType, MesPcnExtConstWords.VARIABLE_TYPE, packBean);
|
||||
if (!CollectionUtils.isEmpty(categoryLevelTwoList) && categoryLevelTwoList.size() == 1) DdlPreparedPack.getStringEqualPack(categoryLevelTwoList.get(0), MesPcnExtConstWords.VARIABLE_TYPE, packBean);
|
||||
else DdlPreparedPack.getInPackList(categoryLevelTwoList, MesPcnExtConstWords.VARIABLE_TYPE, packBean);
|
||||
return equipmentVariableRepository.findByHqlWhere(packBean);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<MesEquipmentVariableCfg> getEquipmentVariableCfgList(MesCellEquipContext cellEquipmentContext, List<String> categoryLevelTwoList) {
|
||||
if (null == cellEquipmentContext || StringUtils.isEmpty(cellEquipmentContext.getVariableCfgType()) || CollectionUtils.isEmpty(categoryLevelTwoList)) return null;
|
||||
DdlPackBean packBean = DdlPackBean.getDdlPackBean(cellEquipmentContext.getOrganizeCode());
|
||||
DdlPreparedPack.getStringEqualPack(cellEquipmentContext.getVariableCfgType(), MesPcnExtConstWords.VARIABLE_CFG_TYPE, packBean);
|
||||
if (!CollectionUtils.isEmpty(categoryLevelTwoList) && categoryLevelTwoList.size() == 1) DdlPreparedPack.getStringEqualPack(categoryLevelTwoList.get(0), MesPcnExtConstWords.VARIABLE_TYPE, packBean);
|
||||
else DdlPreparedPack.getInPackList(categoryLevelTwoList, MesPcnExtConstWords.VARIABLE_TYPE, packBean);
|
||||
return equipmentVariableCfgRepository.findByHqlWhere(packBean);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,49 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.base;
|
||||
|
||||
import cn.estsh.i3plus.ext.mes.pcn.api.base.IEquipmentLogExtService;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
|
||||
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
|
||||
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentLog;
|
||||
import cn.estsh.i3plus.pojo.mes.repository.MesEquipmentLogRepository;
|
||||
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
public class EquipmentLogExtService implements IEquipmentLogExtService {
|
||||
|
||||
@Autowired
|
||||
private MesEquipmentLogRepository equipmentLogRepository;
|
||||
|
||||
@Override
|
||||
public List<MesEquipmentLog> getEquipmentLogList(String organizeCode, Integer equipId) {
|
||||
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
|
||||
DdlPreparedPack.getNumEqualPack(equipId, MesPcnExtConstWords.EQUIP_ID, packBean);
|
||||
return equipmentLogRepository.findByHqlWhere(packBean);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<MesEquipmentLog> getEquipmentLogList(String organizeCode, Integer equipId, Integer needNewValue, List<Integer> clientHandleList) {
|
||||
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
|
||||
DdlPreparedPack.getNumEqualPack(equipId, MesPcnExtConstWords.EQUIP_ID, packBean);
|
||||
if (!CollectionUtils.isEmpty(clientHandleList) && clientHandleList.size() == 1) DdlPreparedPack.getNumEqualPack(clientHandleList.get(0), MesPcnExtConstWords.ID, packBean);
|
||||
else DdlPreparedPack.getInPackList(clientHandleList, MesPcnExtConstWords.ID, packBean);
|
||||
if (MesExtEnumUtil.EQUIP_VARIABLE_NEED_NEW_VALUE.TRUE.getValue() == needNewValue) DdlPreparedPack.getNumEqualPack(MesPcnExtConstWords.ZERO, MesPcnExtConstWords.EQUIP_VARIABLE_STATUS, packBean);
|
||||
return equipmentLogRepository.findByHqlWhere(packBean);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updateEquipmentLogList(String organizeCode, Integer equipId, List<Integer> clientHandleList) {
|
||||
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
|
||||
DdlPreparedPack.getNumEqualPack(equipId, MesPcnExtConstWords.EQUIP_ID, packBean);
|
||||
if (!CollectionUtils.isEmpty(clientHandleList) && clientHandleList.size() == 1) DdlPreparedPack.getNumEqualPack(clientHandleList.get(0), MesPcnExtConstWords.ID, packBean);
|
||||
else DdlPreparedPack.getInPackList(clientHandleList, MesPcnExtConstWords.ID, packBean);
|
||||
equipmentLogRepository.updateByProperties(new String[]{MesPcnExtConstWords.EQUIP_VARIABLE_STATUS}, new Object[]{MesExtEnumUtil.EQUIP_VARIABLE_NEED_NEW_VALUE.TRUE.getValue()}, packBean);
|
||||
}
|
||||
}
|
@ -0,0 +1,55 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.base;
|
||||
|
||||
import cn.estsh.i3plus.ext.mes.pcn.api.base.IProdOrgExtService;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
|
||||
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
|
||||
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
|
||||
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
|
||||
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter;
|
||||
import cn.estsh.i3plus.pojo.mes.repository.MesWorkCellRepository;
|
||||
import cn.estsh.i3plus.pojo.mes.repository.MesWorkCenterRepository;
|
||||
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.List;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
public class ProdOrgExtService implements IProdOrgExtService {
|
||||
|
||||
@Autowired
|
||||
private MesWorkCenterRepository workCenterRepository;
|
||||
|
||||
@Autowired
|
||||
private MesWorkCellRepository workCellRepository;
|
||||
|
||||
@Override
|
||||
public List<MesWorkCell> findWorkCell(String organizeCode, String workCenterCode) {
|
||||
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
|
||||
DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", packBean);
|
||||
DdlPreparedPack.getNumNOEqualPack(MesPcnEnumUtil.MES_WORK_CELL_TYPE.REWORK.getValue(), "workCellType", packBean);
|
||||
DdlPreparedPack.getOrderByPack(new Object[]{1}, new String[]{"seq"}, packBean);
|
||||
return this.workCellRepository.findByHqlWhere(packBean);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MesWorkCenter getWorkCenterDb(String organizeCode, String workCenterCode) {
|
||||
if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(workCenterCode)) return null;
|
||||
return workCenterRepository.getByProperty(
|
||||
new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.WORK_CENTER_CODE},
|
||||
new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), workCenterCode});
|
||||
}
|
||||
|
||||
@Override
|
||||
public MesWorkCell getWorkCellDb(String organizeCode, String workCenterCode, String workCellCode) {
|
||||
if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(workCenterCode) || StringUtils.isEmpty(workCellCode)) return null;
|
||||
return workCellRepository.getByProperty(
|
||||
new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.WORK_CENTER_CODE, MesPcnExtConstWords.WORK_CENTER_CODE},
|
||||
new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), workCenterCode, workCellCode});
|
||||
}
|
||||
|
||||
}
|
@ -1,36 +0,0 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.base;
|
||||
|
||||
import cn.estsh.i3plus.ext.mes.pcn.api.base.ISxOrganizeExtService;
|
||||
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
|
||||
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
|
||||
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell;
|
||||
import cn.estsh.i3plus.pojo.mes.repository.MesWorkCellRepository;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author wangjie
|
||||
* @version 1.0
|
||||
* @date 2021/1/13 9:28
|
||||
**/
|
||||
@Slf4j
|
||||
@Service
|
||||
public class SxOrganizeExtService implements ISxOrganizeExtService {
|
||||
|
||||
@Autowired
|
||||
private MesWorkCellRepository workCellRepository;
|
||||
|
||||
@Override
|
||||
public List<MesWorkCell> findWorkCell(String organizeCode, String workCenterCode) {
|
||||
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
|
||||
DdlPreparedPack.getStringEqualPack(workCenterCode, "workCenterCode", packBean);
|
||||
DdlPreparedPack.getNumNOEqualPack(MesPcnEnumUtil.MES_WORK_CELL_TYPE.REWORK.getValue(), "workCellType", packBean);
|
||||
DdlPreparedPack.getOrderByPack(new Object[]{1}, new String[]{"seq"}, packBean);
|
||||
return this.workCellRepository.findByHqlWhere(packBean);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,340 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
|
||||
|
||||
import cn.estsh.i3plus.ext.mes.pcn.api.base.IEquipmentExtService;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.api.base.IEquipmentLogExtService;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.api.base.IProdOrgExtService;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCollectContext;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
|
||||
import cn.estsh.i3plus.mes.pcn.actor.shipping.dispatch.IFsmRouteDataService;
|
||||
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.*;
|
||||
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
|
||||
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.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @Description : 获取生产过程上下文对象接口实现
|
||||
* @Author : wangjie
|
||||
**/
|
||||
@Slf4j
|
||||
@Service("mesProductionProcessContextStepService")
|
||||
public class MesProductionProcessContextStepService extends BaseStepService implements IMesProductionProcessContextStepService {
|
||||
|
||||
@Autowired
|
||||
private IProdOrgExtService prodOrgExtService;
|
||||
|
||||
@Autowired
|
||||
private IEquipmentExtService equipmentExtService;
|
||||
|
||||
@Autowired
|
||||
private IFsmRouteDataService fsmRouteDataService;
|
||||
|
||||
@Autowired
|
||||
private IEquipmentLogExtService equipmentLogExtService;
|
||||
|
||||
@Override
|
||||
public MesProductionProcessContext getProductionProcessContext(StationRequestBean reqBean) {
|
||||
|
||||
//获取缓存的生产过程上下文对象
|
||||
MesProductionProcessContext productionProcessContext = (MesProductionProcessContext) getFsmBusiData(reqBean.getOrganizeCode(), getFsmBusikey(reqBean, MesProductionProcessContext.class.getSimpleName()), MesProductionProcessContext.class);
|
||||
|
||||
if (null == productionProcessContext) productionProcessContext = new MesProductionProcessContext(reqBean.getOrganizeCode());
|
||||
|
||||
//生产过程上下文对象结果初始化
|
||||
productionProcessContext.success();
|
||||
|
||||
//生产过程上下文对象赋值生产线信息
|
||||
if (StringUtils.isEmpty(productionProcessContext.getWorkCenterJson())) productionProcessContext.workCenterJson(prodOrgExtService.getWorkCenterDb(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode()));
|
||||
|
||||
//生产过程上下文对象赋值工位信息
|
||||
if (StringUtils.isEmpty(productionProcessContext.getWorkCenterJson())) productionProcessContext.workCellJson(prodOrgExtService.getWorkCellDb(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode()));
|
||||
|
||||
//生产过程上下文对象赋值工序工艺信息
|
||||
if (StringUtils.isEmpty(productionProcessContext.getProcessCode()) || !productionProcessContext.getProcessCode().equals(reqBean.getProcessCode())) processContext(reqBean, productionProcessContext);
|
||||
|
||||
//验证组织模型有效性
|
||||
return checkBaseData(reqBean, productionProcessContext);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public MesProductionProcessContext processContext(StationRequestBean reqBean) {
|
||||
return processContext(reqBean, getProductionProcessContext(reqBean));
|
||||
}
|
||||
|
||||
@Override
|
||||
public MesProductionProcessContext processContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext) {
|
||||
|
||||
if (!productionProcessContext.getSuccess()) return productionProcessContext;
|
||||
|
||||
if (!StringUtils.isEmpty(productionProcessContext.getProcessCode()) && productionProcessContext.getProcessCode().equals(reqBean.getProcessCode())) return productionProcessContext;
|
||||
|
||||
MesProcess process = fsmRouteDataService.doCachedFsmProcessData(reqBean, reqBean.getProcessCode());
|
||||
|
||||
MesProcessCraftCfg processCraftCfg = fsmRouteDataService.getProcessCraftCfg(reqBean.getOrganizeCode(), reqBean.getProcessCode());
|
||||
|
||||
//生产过程上下文对象赋值当前工艺工序,未配置默认赋值工序代码,不强验证
|
||||
productionProcessContext.processCode(reqBean.getProcessCode(), null != process ? process.getProcessName() : reqBean.getProcessCode());
|
||||
|
||||
return productionProcessContext.craftCode(null != processCraftCfg ? processCraftCfg.getCraftCode() : reqBean.getProcessCode(), (null != processCraftCfg) ? productionProcessContext.getProcessCode() : productionProcessContext.getProcessName());
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public MesProductionProcessContext checkBaseData(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext) {
|
||||
|
||||
if (StringUtils.isEmpty(productionProcessContext.getWorkCenterJson())) return productionProcessContext.message(String.format("请检查组织模型生产线[%s]信息的有效性!", reqBean.getWorkCenterCode()));
|
||||
|
||||
if (StringUtils.isEmpty(productionProcessContext.getWorkCellJson())) return productionProcessContext.message(String.format("请检查组织模型生产线[%s]工位[%s]信息的有效性!", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode()));
|
||||
|
||||
if (StringUtils.isEmpty(productionProcessContext.getProcessCode())) return productionProcessContext.message(String.format("请检查工序信息,生产线[%s]工位[%s]对应工序代码[%s]的有效性!", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), reqBean.getProcessCode()));
|
||||
|
||||
return productionProcessContext;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public MesProductionProcessContext getCellEquipmentList(StationRequestBean reqBean) {
|
||||
return getCellEquipmentList(reqBean, getProductionProcessContext(reqBean));
|
||||
}
|
||||
|
||||
@Override
|
||||
public MesProductionProcessContext getCellEquipmentList(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext) {
|
||||
|
||||
if (!productionProcessContext.getSuccess()) return productionProcessContext;
|
||||
|
||||
//生产过程上下文对象赋值设备信息
|
||||
if (StringUtils.isEmpty(productionProcessContext.getCellEquipListJson())) productionProcessContext.cellEquipListJson(equipmentExtService.getCellEquipmentList(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode()));
|
||||
|
||||
return productionProcessContext;
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public MesProductionProcessContext getCurCellEquipment(StationRequestBean reqBean) {
|
||||
return getCurCellEquipment(reqBean, getCellEquipmentList(reqBean));
|
||||
}
|
||||
|
||||
@Override
|
||||
public MesProductionProcessContext getCurCellEquipment(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext) {
|
||||
|
||||
if (!productionProcessContext.getSuccess()) return productionProcessContext;
|
||||
|
||||
//获取当前工步的参数集合
|
||||
Optional<Map<String, MesProdRouteOptParam>> stepParamMap = getStepParams(reqBean);
|
||||
|
||||
//获取当前工步的设备参数
|
||||
String equipmentCode = (null != stepParamMap && stepParamMap.isPresent() && stepParamMap.get().containsKey(MesPcnExtConstWords.EQUIPMENT_CODE_UC)) ? stepParamMap.get().get(MesPcnExtConstWords.EQUIPMENT_CODE_UC).getParamValue() : null;
|
||||
|
||||
//判断生产过程上下文对象是否存在当前设备信息
|
||||
if (!StringUtils.isEmpty(productionProcessContext.getCurCellEquipJson()) && (StringUtils.isEmpty(equipmentCode) || equipmentCode.equals(productionProcessContext.getCurCellEquip().getEquipmentCode()))) return productionProcessContext;
|
||||
|
||||
//从工位设备集合信息中获取当前设备信息
|
||||
MesCellEquipContext cellEquipmentContext = productionProcessContext.filterCurCellEquip(equipmentCode);
|
||||
|
||||
//生产过程上下文对象赋值当前设备代码
|
||||
if (null != cellEquipmentContext) return productionProcessContext.curCellEquipJson(cellEquipmentContext);
|
||||
|
||||
return StringUtils.isEmpty(equipmentCode) ? productionProcessContext.message(String.format("请检查组织模型,生产线[%s]工位[%s]未维护设备信息!", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode())) :
|
||||
productionProcessContext.message(String.format("请检查组织模型,生产线[%s]工位[%s]未维护工步参数[%s]配置的设备[%s]!", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), MesPcnExtConstWords.EQUIPMENT_CODE_UC, equipmentCode));
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public MesProductionProcessContext getEquipmentVariable(StationRequestBean reqBean, Integer variableType, String... categoryLevelTwo) {
|
||||
return getEquipmentVariable(reqBean, getCurCellEquipment(reqBean), variableType, categoryLevelTwo);
|
||||
}
|
||||
|
||||
@Override
|
||||
public MesProductionProcessContext getEquipmentVariable(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, Integer variableType, String... categoryLevelTwo) {
|
||||
|
||||
if (!productionProcessContext.getSuccess()) return productionProcessContext;
|
||||
|
||||
MesCellEquipContext cellEquipmentContext = productionProcessContext.getCurCellEquip();
|
||||
|
||||
//判断生产过程上下文对象是否存在数据变量信息
|
||||
List<MesEquipmentVariable> equipmentVariableList = productionProcessContext.getEquipVariableList();
|
||||
List<String> categoryLevelTwoList = null != categoryLevelTwo ? Arrays.asList(categoryLevelTwo) : null;
|
||||
if (!CollectionUtils.isEmpty(equipmentVariableList) && !CollectionUtils.isEmpty(equipmentVariableList.stream().filter(o ->
|
||||
(null != o && o.getEquipmentCode().equals(cellEquipmentContext.getEquipmentCode()) && o.getVariableType().compareTo(variableType) == 0 &&
|
||||
((CollectionUtils.isEmpty(categoryLevelTwoList) && StringUtils.isEmpty(o.getCategoryLevelTwo())) ||
|
||||
(!CollectionUtils.isEmpty(categoryLevelTwoList) && !StringUtils.isEmpty(o.getCategoryLevelTwo()) && categoryLevelTwoList.contains(o.getCategoryLevelTwo()))))).collect(Collectors.toList())
|
||||
)) return productionProcessContext;
|
||||
|
||||
List<MesEquipmentVariable> equipmentVariableDbList = equipmentExtService.getEquipmentVariableList(cellEquipmentContext, variableType, categoryLevelTwoList);
|
||||
|
||||
//生产过程上下文对象赋值设备数据变量信息
|
||||
if (null != equipmentVariableDbList) return productionProcessContext.equipVariableJson(equipmentVariableDbList);
|
||||
|
||||
return productionProcessContext.message(String.format("请检查设备[%s]的数据变量信息,变量类型[%s:%s],二级变量%s!",
|
||||
cellEquipmentContext.getEquipmentCode(), variableType, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.valueOfDescription(variableType), !CollectionUtils.isEmpty(equipmentVariableList) ? equipmentVariableList.toString() : MesPcnExtConstWords.SQUARE_BRACKETS));
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public MesProductionProcessContext getEquipmentVariableCfg(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext) {
|
||||
|
||||
if (!productionProcessContext.getSuccess()) return productionProcessContext;
|
||||
|
||||
//判断生产过程上下文对象是否存在数据变量接口逻辑信息
|
||||
List<MesEquipmentVariable> equipmentVariableList = productionProcessContext.getEquipVariableList();
|
||||
MesCellEquipContext cellEquipmentContext = productionProcessContext.getCurCellEquip();
|
||||
List<MesEquipmentVariableCfg> equipmentVariableCfgList = productionProcessContext.getEquipVariableCfgList();
|
||||
List<String> categoryLevelTwoList = (equipmentVariableList.stream().filter(o -> null != o).map(MesEquipmentVariable::getCategoryLevelTwo).collect(Collectors.toList())).stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList());
|
||||
if (!CollectionUtils.isEmpty(equipmentVariableCfgList) && !CollectionUtils.isEmpty(equipmentVariableCfgList.stream().filter(o ->
|
||||
(null != o && o.getVariableCfgType().equals(cellEquipmentContext.getVariableCfgType()) && CollectionUtils.isEmpty(categoryLevelTwoList) && !StringUtils.isEmpty(o.getCategoryLevelTwo()) && categoryLevelTwoList.contains(o.getCategoryLevelTwo()))).collect(Collectors.toList())
|
||||
)) return productionProcessContext;
|
||||
|
||||
List<MesEquipmentVariableCfg> equipmentVariableCfgDbList = equipmentExtService.getEquipmentVariableCfgList(cellEquipmentContext, categoryLevelTwoList);
|
||||
|
||||
//生产过程上下文对象赋值设备数据变量接口逻辑信息
|
||||
if (null != equipmentVariableCfgDbList) return productionProcessContext.equipVariableCfgJson(equipmentVariableCfgDbList);
|
||||
return productionProcessContext.message(String.format("请检查设备[%s]的数据变量接口逻辑信息,设备变量配置类型[%s],二级变量%s!",
|
||||
cellEquipmentContext.getEquipmentCode(), cellEquipmentContext.getVariableCfgType(), !CollectionUtils.isEmpty(equipmentVariableList) ? equipmentVariableList.toString() : MesPcnExtConstWords.SQUARE_BRACKETS));
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public MesProductionProcessContext checkNecessaryEquipmentVariable(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, Integer variableType, String... categoryLevelTwo) {
|
||||
List<MesEquipmentVariable> equipmentVariableList = productionProcessContext.getEquipVariableList();
|
||||
if (null == categoryLevelTwo) return productionProcessContext;
|
||||
|
||||
for (String item : categoryLevelTwo) {
|
||||
|
||||
if (StringUtils.isEmpty(item)) continue;
|
||||
|
||||
Optional<MesEquipmentVariable> optional = CollectionUtils.isEmpty(equipmentVariableList) ? null : equipmentVariableList.stream().filter(o -> (null != o && o.getVariableType().compareTo(variableType) == 0 && o.getCategoryLevelTwo().equals(item))).findFirst();
|
||||
|
||||
if (null != optional && optional.isPresent()) continue;
|
||||
|
||||
return productionProcessContext.message(String.format("请检查设备[%s]必要的数据变量信息,变量类型[%s:%s],二级变量[%s]!", productionProcessContext.getCurCellEquip().getEquipmentCode(), variableType, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.valueOfDescription(variableType), item));
|
||||
|
||||
}
|
||||
|
||||
return productionProcessContext;
|
||||
}
|
||||
|
||||
@Override
|
||||
public MesProductionProcessContext checkNecessaryEquipmentVariableCfg(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext) {
|
||||
|
||||
List<MesEquipmentVariable> equipmentVariableList = productionProcessContext.getEquipVariableList();
|
||||
|
||||
Map<String, List<MesEquipmentVariableCfg>> cfgMap = getEquipmentVariableCfgMap(reqBean, productionProcessContext);
|
||||
|
||||
List<MesEquipmentVariable> filterList = (CollectionUtils.isEmpty(equipmentVariableList) || CollectionUtils.isEmpty(cfgMap)) ? equipmentVariableList :
|
||||
equipmentVariableList.stream().filter(o -> (null != o && !cfgMap.containsKey(new StringJoiner(MesPcnExtConstWords.AND).add(o.getCategoryLevelTwo()).add(o.getVariableCfgType()).toString()))).collect(Collectors.toList());
|
||||
|
||||
if (CollectionUtils.isEmpty(filterList)) return productionProcessContext;
|
||||
|
||||
MesCellEquipContext cellEquipmentContext = productionProcessContext.getCurCellEquip();
|
||||
|
||||
return productionProcessContext.message(String.format("请检查设备[%s]必要的数据变量接口逻辑信息,设备变量配置类型[%s],二级变量%s!",
|
||||
cellEquipmentContext.getEquipmentCode(), cellEquipmentContext.getVariableCfgType(),
|
||||
(filterList.stream().filter(o -> null != o).map(MesEquipmentVariable::getCategoryLevelTwo).collect(Collectors.toList())).stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList()).toString()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public MesProductionProcessContext doHandleEquipmentLogListByIds(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext) {
|
||||
|
||||
if (!productionProcessContext.getSuccess()) return productionProcessContext;
|
||||
|
||||
//获取缓存的生产过程上下文对象中的历史变量接口逻辑采集信息并重置采集数据
|
||||
List<MesEquipVariableCollectContext> equipVariableCollectContextList = productionProcessContext.getEquipVariableCfgCollectList();
|
||||
if (!CollectionUtils.isEmpty(equipVariableCollectContextList)) equipVariableCollectContextList.forEach(o -> o.clear());
|
||||
else equipVariableCollectContextList = getEquipVariableCollectContext(reqBean, productionProcessContext);//封装设备数据变量平铺接口逻辑与采集信息
|
||||
|
||||
if (!productionProcessContext.getSuccess() || CollectionUtils.isEmpty(equipVariableCollectContextList)) return productionProcessContext;
|
||||
|
||||
//根据常变值分别获取设备ID分表的采集数据
|
||||
Map<Integer, MesEquipmentLog> needNewValue2Collect = getEquipmentLog(reqBean, equipVariableCollectContextList, MesExtEnumUtil.EQUIP_VARIABLE_NEED_NEW_VALUE.TRUE.getValue());
|
||||
Map<Integer, MesEquipmentLog> unNeedNewValue2Collect = getEquipmentLog(reqBean, equipVariableCollectContextList, MesExtEnumUtil.EQUIP_VARIABLE_NEED_NEW_VALUE.FALSE.getValue());
|
||||
|
||||
//修改常变值配置对应的设备ID分表的采集数据的状态为1
|
||||
if (!CollectionUtils.isEmpty(needNewValue2Collect)) equipmentLogExtService.updateEquipmentLogList(reqBean.getOrganizeCode(), productionProcessContext.getCurCellEquip().getEquipId(), new ArrayList<>(needNewValue2Collect.keySet()));
|
||||
|
||||
//采集数据的值赋予生产过程上下文对象中的变量接口逻辑采集信息
|
||||
equipVariableCollectContextList.forEach(o -> copyValue(o, needNewValue2Collect, unNeedNewValue2Collect));
|
||||
|
||||
//生产过程上下文对象赋值设备分表采集信息
|
||||
return productionProcessContext.equipVariableCfgCollectJson(equipVariableCollectContextList);
|
||||
|
||||
}
|
||||
|
||||
private void copyValue(MesEquipVariableCollectContext collectContext, Map<Integer, MesEquipmentLog> needNewValue2Collect, Map<Integer, MesEquipmentLog> unNeedNewValue2Collect) {
|
||||
if (!CollectionUtils.isEmpty(needNewValue2Collect) && needNewValue2Collect.containsKey(collectContext.getClientHandle())) BeanUtils.copyProperties(collectContext, needNewValue2Collect.get(collectContext.getClientHandle()));
|
||||
if (!CollectionUtils.isEmpty(unNeedNewValue2Collect) && unNeedNewValue2Collect.containsKey(collectContext.getClientHandle())) BeanUtils.copyProperties(collectContext, unNeedNewValue2Collect.get(collectContext.getClientHandle()));
|
||||
}
|
||||
|
||||
private Map<Integer, MesEquipmentLog> getEquipmentLog(StationRequestBean reqBean, List<MesEquipVariableCollectContext> equipVariableCollectContextList, Integer needNewValue) {
|
||||
List<MesEquipVariableCollectContext> filterList = equipVariableCollectContextList.stream().filter(o -> (null != o && o.getNeedNewValue().compareTo(needNewValue) == 0)).collect(Collectors.toList());
|
||||
if (CollectionUtils.isEmpty(filterList)) return null;
|
||||
List<MesEquipmentLog> equipmentLogList = equipmentLogExtService.getEquipmentLogList(reqBean.getOrganizeCode(),
|
||||
filterList.get(0).getEquipId(), needNewValue, filterList.stream().filter(o -> (null != o)).map(MesEquipVariableCollectContext::getClientHandle).collect(Collectors.toList()));
|
||||
return CollectionUtils.isEmpty(equipmentLogList) ? null : equipmentLogList.stream().filter(o -> null != o).collect(Collectors.toMap(o -> Integer.valueOf(o.getId().toString()), o -> o));
|
||||
}
|
||||
|
||||
private List<MesEquipVariableCollectContext> getEquipVariableCollectContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext) {
|
||||
|
||||
List<MesEquipmentVariable> equipmentVariableList = productionProcessContext.getEquipVariableList();
|
||||
|
||||
Map<String, List<MesEquipmentVariableCfg>> cfgMap = getEquipmentVariableCfgMap(reqBean, productionProcessContext);
|
||||
|
||||
List<MesEquipVariableCollectContext> equipVariableCollectContextList = null;
|
||||
for (MesEquipmentVariable equipmentVariable : equipmentVariableList) {
|
||||
if (null == equipmentVariable) continue;
|
||||
|
||||
//一个数据变量如果匹配多个接口逻辑信息,验证接口逻辑信息配置的常变值是否统一
|
||||
List<MesEquipmentVariableCfg> filterList = getEquipmentVariableCfgListByMap(cfgMap, equipmentVariable.getCategoryLevelTwo(), equipmentVariable.getVariableCfgType());
|
||||
if (!CollectionUtils.isEmpty(filterList) && filterList.size() > 1 && (filterList.stream().filter(o -> null != o).map(MesEquipmentVariableCfg::getNeedNewValue).collect(Collectors.toList())).stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList()).size() > 1)
|
||||
return productionProcessContext.message(String.format("请检查设备[%s]的数据变量接口逻辑信息,设备变量配置类型[%s],二级变量[%s]关联的多个变量类别对应的常变值未配置统一!",
|
||||
equipmentVariable.getEquipmentCode(), equipmentVariable.getVariableCfgType(), equipmentVariable.getCategoryLevelTwo())).getEquipVariableCfgCollectList();
|
||||
|
||||
MesEquipVariableCollectContext collectContext = new MesEquipVariableCollectContext(equipmentVariable.getId());
|
||||
BeanUtils.copyProperties(equipmentVariable, collectContext);
|
||||
collectContext.needNewValue(!CollectionUtils.isEmpty(filterList) ? filterList.get(0).getNeedNewValue() : MesExtEnumUtil.EQUIP_VARIABLE_NEED_NEW_VALUE.FALSE.getValue());
|
||||
|
||||
if (CollectionUtils.isEmpty(equipVariableCollectContextList)) equipVariableCollectContextList = new ArrayList<>();
|
||||
equipVariableCollectContextList.add(collectContext);
|
||||
}
|
||||
|
||||
//生产过程上下文对象赋值 设备数据变量平铺接口逻辑与采集信息
|
||||
productionProcessContext.equipVariableCfgCollectJson(equipVariableCollectContextList);
|
||||
|
||||
return equipVariableCollectContextList;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, List<MesEquipmentVariableCfg>> getEquipmentVariableCfgMap(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext) {
|
||||
List<MesEquipmentVariableCfg> equipmentVariableCfgList = productionProcessContext.getEquipVariableCfgList();
|
||||
return CollectionUtils.isEmpty(equipmentVariableCfgList) ? null :
|
||||
equipmentVariableCfgList.stream().filter(o -> null != o).collect(Collectors.groupingBy(o -> new StringJoiner(MesPcnExtConstWords.AND).add(o.getCategoryLevelTwo()).add(o.getVariableCfgType()).toString()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public MesEquipmentVariableCfg execMatchEquipmentVariableCfgValue(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext,
|
||||
MesEquipVariableCollectContext collectContext, Map<String, List<MesEquipmentVariableCfg>> equipmentVariableCfgMap, Boolean isNeedVariableCfgValue) {
|
||||
List<MesEquipmentVariableCfg> equipmentVariableCfgList = getEquipmentVariableCfgListByMap(equipmentVariableCfgMap, collectContext.getCategoryLevelTwo(), collectContext.getVariableCfgType());
|
||||
if (isNeedVariableCfgValue && CollectionUtils.isEmpty(CollectionUtils.isEmpty(equipmentVariableCfgList) ? null : equipmentVariableCfgList.stream().filter(o -> (null != o && StringUtils.isEmpty(o.getValue()))).collect(Collectors.toList()))) {
|
||||
productionProcessContext.message(String.format("请检查设备数据变量接口逻辑信息,设备变量配置类型[%s],二级变量[%s]对应的信息未配置参考值", collectContext.getVariableCfgType(), collectContext.getCategoryLevelTwo()));
|
||||
return null;
|
||||
}
|
||||
Optional<MesEquipmentVariableCfg> optional = equipmentVariableCfgList.stream().filter(o -> (null != o && o.getValue().equals(collectContext.getEquipVariableValue()))).findFirst();
|
||||
return null != optional && optional.isPresent() ? optional.get() : null;
|
||||
}
|
||||
|
||||
private List<MesEquipmentVariableCfg> getEquipmentVariableCfgListByMap(Map<String, List<MesEquipmentVariableCfg>> equipmentVariableCfgMap, String categoryLevelTwo, String variableCfgType) {
|
||||
return CollectionUtils.isEmpty(equipmentVariableCfgMap) ? null : equipmentVariableCfgMap.get(new StringJoiner(MesPcnExtConstWords.AND).add(categoryLevelTwo).add(variableCfgType).toString());
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,45 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.pojo.context;
|
||||
|
||||
import io.swagger.annotations.ApiParam;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 生产过程上下文对象-工位设备信息
|
||||
*/
|
||||
@Data
|
||||
public class MesCellEquipContext {
|
||||
|
||||
@ApiParam("组织代码")
|
||||
private String organizeCode;
|
||||
|
||||
@ApiParam("腔数")
|
||||
private Integer cavity;
|
||||
|
||||
@ApiParam("每腔装配件个数")
|
||||
private Integer bindQty;
|
||||
|
||||
@ApiParam("顺序")
|
||||
private Integer seq;
|
||||
|
||||
@ApiParam("设备ID")
|
||||
private Integer equipId;
|
||||
|
||||
@ApiParam("设备代码")
|
||||
private String equipmentCode;
|
||||
|
||||
@ApiParam("设备名称")
|
||||
private String equipmentName;
|
||||
|
||||
@ApiParam("变量配置类型")
|
||||
private String variableCfgType;
|
||||
|
||||
@ApiParam("是否控制byPass")
|
||||
private Integer ctrlByPass;
|
||||
|
||||
@ApiParam("是否监控停机")
|
||||
private Integer monitorDown;
|
||||
|
||||
@ApiParam("是否监控停机")
|
||||
private String monitorDownTime;
|
||||
|
||||
}
|
@ -0,0 +1,83 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.pojo.context;
|
||||
|
||||
import io.swagger.annotations.ApiParam;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 生产过程上下文对象-设备数据变量平铺接口逻辑与采集信息
|
||||
*/
|
||||
@Data
|
||||
public class MesEquipVariableCollectContext {
|
||||
|
||||
@ApiParam("组织代码")
|
||||
private String organizeCode;
|
||||
|
||||
@ApiParam("设备变量ID")
|
||||
private Long equipVariableId;
|
||||
|
||||
@ApiParam("设备ID")
|
||||
private Integer equipId;
|
||||
|
||||
@ApiParam("OPC注册ID")
|
||||
private Integer clientHandle;
|
||||
|
||||
@ApiParam("设备代码")
|
||||
private String equipmentCode;
|
||||
|
||||
@ApiParam("通道")
|
||||
private String channel;
|
||||
|
||||
@ApiParam("通道")
|
||||
private String device;
|
||||
|
||||
@ApiParam("tag名称")
|
||||
private String tagName;
|
||||
|
||||
@ApiParam("变量配置类型")
|
||||
private String variableCfgType;
|
||||
|
||||
@ApiParam("变量类型")
|
||||
private Integer variableType;
|
||||
|
||||
@ApiParam("二级变量")
|
||||
private String categoryLevelTwo;
|
||||
|
||||
@ApiParam("是否常变值")
|
||||
private Integer needNewValue;
|
||||
|
||||
@ApiParam("设备变量名称")
|
||||
private String equipVariableName;
|
||||
|
||||
@ApiParam("设备变量描述")
|
||||
private String equipVariableDesc;
|
||||
|
||||
@ApiParam("读写标记")
|
||||
private Integer readWriteFlag;
|
||||
|
||||
@ApiParam("数据类型")
|
||||
private String dataType;
|
||||
|
||||
@ApiParam("变量当前值")
|
||||
private String equipVariableValue;
|
||||
|
||||
@ApiParam("设备质量")
|
||||
private Integer quality;
|
||||
|
||||
public MesEquipVariableCollectContext(Long equipVariableId) {
|
||||
this.equipVariableId = equipVariableId;
|
||||
}
|
||||
|
||||
public MesEquipVariableCollectContext needNewValue(Integer needNewValue) {
|
||||
this.needNewValue = needNewValue;
|
||||
return this;
|
||||
}
|
||||
|
||||
public void clear() {
|
||||
this.equipVariableName = null;
|
||||
this.equipVariableDesc = null;
|
||||
this.readWriteFlag = null;
|
||||
this.dataType = null;
|
||||
this.equipVariableValue = null;
|
||||
this.quality = null;
|
||||
}
|
||||
}
|
@ -0,0 +1,210 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.pojo.context;
|
||||
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import io.swagger.annotations.ApiParam;
|
||||
import lombok.Data;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 生产过程上下文对象
|
||||
*/
|
||||
@Data
|
||||
public class MesProductionProcessContext {
|
||||
|
||||
@ApiParam("结果")
|
||||
private Boolean success;
|
||||
|
||||
@ApiParam("信息")
|
||||
private String message;
|
||||
|
||||
@ApiParam("组织代码")
|
||||
private String organizeCode;
|
||||
|
||||
@ApiParam("生产线信息")
|
||||
private String workCenterJson;
|
||||
|
||||
@ApiParam("工位信息")
|
||||
private String workCellJson;
|
||||
|
||||
@ApiParam("工位设备集合信息")
|
||||
private String cellEquipListJson;
|
||||
|
||||
@ApiParam("工序代码")
|
||||
private String processCode;
|
||||
|
||||
@ApiParam("工序名称")
|
||||
private String processName;
|
||||
|
||||
@ApiParam("工艺代码")
|
||||
private String craftCode;
|
||||
|
||||
@ApiParam("工艺代码")
|
||||
private String craftName;
|
||||
|
||||
@ApiParam("当前工位设备信息")
|
||||
private String curCellEquipJson;
|
||||
|
||||
@ApiParam("设备变量信息")
|
||||
private String equipVariableJson;
|
||||
|
||||
@ApiParam("变量接口逻辑信息")
|
||||
private String equipVariableCfgJson;
|
||||
|
||||
@ApiParam("变量接口逻辑采集信息")
|
||||
private String equipVariableCfgCollectJson;
|
||||
|
||||
@ApiParam("头道模具号")
|
||||
private String firstMouldNo;
|
||||
|
||||
@ApiParam("模具号")
|
||||
private String mouldNo;
|
||||
|
||||
@ApiParam("一模多腔信息")
|
||||
private String mouldCavityJson;
|
||||
|
||||
@ApiParam("腔组明细信息")
|
||||
private String cavityGroupDetailJson;
|
||||
|
||||
@ApiParam("设备加工参数信息")
|
||||
private String equipProdParamJson;
|
||||
|
||||
@ApiParam("非排序加工规则信息")
|
||||
private String unSortRuleJson;
|
||||
|
||||
@ApiParam("装配件信息(非排序/排序线排产装配目视项)")
|
||||
private String assemblyJson;
|
||||
|
||||
@ApiParam("时效性信息")
|
||||
private String timeEfficientJson;
|
||||
|
||||
@ApiParam("零件条码信息")
|
||||
private String produceSnJson;
|
||||
|
||||
|
||||
|
||||
public MesProductionProcessContext() {}
|
||||
|
||||
public MesProductionProcessContext(String organizeCode) {
|
||||
this.organizeCode = organizeCode;
|
||||
}
|
||||
|
||||
public MesProductionProcessContext success() {
|
||||
this.success = true;
|
||||
this.message = null;
|
||||
return this;
|
||||
}
|
||||
|
||||
public MesProductionProcessContext message(String message) {
|
||||
this.success = false;
|
||||
this.message = message;
|
||||
return this;
|
||||
}
|
||||
|
||||
public MesWorkCenter getWorkCenter() {
|
||||
return StringUtils.isEmpty(this.workCenterJson) ? null : JSONObject.parseObject(this.workCenterJson, MesWorkCenter.class);
|
||||
}
|
||||
|
||||
public MesProductionProcessContext workCenterJson(MesWorkCenter workCenter) {
|
||||
this.workCenterJson = null != workCenter ? JSONObject.toJSONString(workCenter) : null;
|
||||
return this;
|
||||
}
|
||||
|
||||
public MesWorkCell getWorkCell() {
|
||||
return StringUtils.isEmpty(this.workCellJson) ? null : JSONObject.parseObject(this.workCellJson, MesWorkCell.class);
|
||||
}
|
||||
|
||||
public MesProductionProcessContext workCellJson(MesWorkCell workCell) {
|
||||
this.workCellJson = null != workCell ? JSONObject.toJSONString(workCell) : null;
|
||||
return this;
|
||||
}
|
||||
|
||||
private List<MesCellEquipContext> getCellEquipList() {
|
||||
return StringUtils.isEmpty(this.cellEquipListJson) ? null : JSONObject.parseArray(this.cellEquipListJson, MesCellEquipContext.class);
|
||||
}
|
||||
|
||||
public MesProductionProcessContext cellEquipListJson(List<MesCellEquipContext> cellEquipList) {
|
||||
this.cellEquipListJson = !CollectionUtils.isEmpty(cellEquipList) ? JSONObject.toJSONString(cellEquipList) : null;
|
||||
return this;
|
||||
}
|
||||
|
||||
public MesCellEquipContext filterCurCellEquip() {
|
||||
List<MesCellEquipContext> cellEquipList = getCellEquipList();
|
||||
if (CollectionUtils.isEmpty(cellEquipList) || cellEquipList.size() == 1) return filterCurCellEquip(cellEquipList);
|
||||
return filterCurCellEquip(cellEquipList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getSeq()))).sorted(Comparator.comparing(MesCellEquipContext::getSeq)).collect(Collectors.toList()));
|
||||
}
|
||||
|
||||
public MesCellEquipContext filterCurCellEquip(String equipmentCode) {
|
||||
if (StringUtils.isEmpty(equipmentCode)) return filterCurCellEquip();
|
||||
List<MesCellEquipContext> cellEquipList = getCellEquipList();
|
||||
return filterCurCellEquip(CollectionUtils.isEmpty(cellEquipList) ? null : cellEquipList.stream().filter(o -> (null != o && o.getEquipmentCode().equals(equipmentCode))).collect(Collectors.toList()));
|
||||
}
|
||||
|
||||
private MesCellEquipContext filterCurCellEquip(List<MesCellEquipContext> cellEquipContextList) {
|
||||
return CollectionUtils.isEmpty(cellEquipContextList) ? null : cellEquipContextList.get(0);
|
||||
}
|
||||
|
||||
public MesCellEquipContext getCurCellEquip() {
|
||||
return StringUtils.isEmpty(this.curCellEquipJson) ? null : JSONObject.parseObject(this.curCellEquipJson, MesCellEquipContext.class);
|
||||
}
|
||||
|
||||
public MesProductionProcessContext curCellEquipJson(MesCellEquipContext curEquip) {
|
||||
this.curCellEquipJson = null != curEquip ? JSONObject.toJSONString(curEquip) : null;
|
||||
return this;
|
||||
}
|
||||
|
||||
public MesProductionProcessContext processCode(String processCode, String processName) {
|
||||
this.processCode = processCode;
|
||||
this.processName = processName;
|
||||
return this;
|
||||
}
|
||||
|
||||
public MesProductionProcessContext craftCode(String craftCode, String craftName) {
|
||||
this.craftCode = craftCode;
|
||||
this.craftName = craftName;
|
||||
return this;
|
||||
}
|
||||
|
||||
public List<MesEquipmentVariable> getEquipVariableList() {
|
||||
return StringUtils.isEmpty(this.equipVariableJson) ? null : JSONObject.parseArray(this.equipVariableJson, MesEquipmentVariable.class);
|
||||
}
|
||||
|
||||
public MesProductionProcessContext equipVariableJson(List<MesEquipmentVariable> equipmentVariableList) {
|
||||
if (CollectionUtils.isEmpty(equipmentVariableList)) return this;
|
||||
if (!StringUtils.isEmpty(this.equipVariableJson)) equipmentVariableList.addAll(getEquipVariableList());
|
||||
this.equipVariableJson = JSONObject.toJSONString(equipmentVariableList);
|
||||
return this;
|
||||
}
|
||||
|
||||
public List<MesEquipmentVariableCfg> getEquipVariableCfgList() {
|
||||
return StringUtils.isEmpty(this.equipVariableCfgJson) ? null : JSONObject.parseArray(this.equipVariableCfgJson, MesEquipmentVariableCfg.class);
|
||||
}
|
||||
|
||||
public MesProductionProcessContext equipVariableCfgJson(List<MesEquipmentVariableCfg> equipmentVariableCfgList) {
|
||||
if (CollectionUtils.isEmpty(equipmentVariableCfgList)) return this;
|
||||
if (!StringUtils.isEmpty(this.equipVariableCfgJson)) equipmentVariableCfgList.addAll(getEquipVariableCfgList());
|
||||
this.equipVariableCfgJson = JSONObject.toJSONString(equipmentVariableCfgList);
|
||||
return this;
|
||||
}
|
||||
|
||||
public List<MesEquipVariableCollectContext> getEquipVariableCfgCollectList() {
|
||||
if (StringUtils.isEmpty(this.equipVariableCfgCollectJson)) return null;
|
||||
List<MesEquipVariableCollectContext> equipVariableCollectContextList = JSONObject.parseArray(this.equipVariableCfgCollectJson, MesEquipVariableCollectContext.class);
|
||||
return equipVariableCollectContextList;
|
||||
}
|
||||
|
||||
public MesProductionProcessContext equipVariableCfgCollectJson(List<MesEquipVariableCollectContext> equipVariableCollectContextList) {
|
||||
this.equipVariableCfgCollectJson = !CollectionUtils.isEmpty(equipVariableCollectContextList) ? JSONObject.toJSONString(equipVariableCollectContextList) : null;
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -1,4 +0,0 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.pojo.model;
|
||||
|
||||
public class TestModel {
|
||||
}
|
Loading…
Reference in New Issue