forked from I3-YF/i3plus-mes-pcn-yfai
Merge remote-tracking branch 'origin/dev' into dev
commit
81578b5f10
@ -0,0 +1,18 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.api.busi;
|
||||
|
||||
import cn.estsh.i3plus.pojo.mes.model.MesEquipVariableRwModel;
|
||||
import cn.estsh.i3plus.pojo.mes.model.MesEquipVariableRwResult;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
|
||||
public interface IMesEquipVariableRwExtService {
|
||||
|
||||
@ApiOperation(value = "读写访问地址")
|
||||
MesEquipVariableRwModel getRwRequestUrl(MesEquipVariableRwModel equipVariableRwModel);
|
||||
|
||||
@ApiOperation(value = "写值")
|
||||
MesEquipVariableRwResult writeVariable(MesEquipVariableRwModel equipVariableRwModel);
|
||||
|
||||
@ApiOperation(value = "读取")
|
||||
MesEquipVariableRwResult readVariable(MesEquipVariableRwModel equipVariableRwModel);
|
||||
|
||||
}
|
@ -1,17 +1,21 @@
|
||||
//package cn.estsh.i3plus.ext.mes.pcn.api.busi;
|
||||
//
|
||||
//import cn.estsh.i3plus.pojo.mes.bean.MesProdRuleNosortCfg;
|
||||
//import cn.estsh.i3plus.pojo.mes.bean.MesProdRuleSortCfg;
|
||||
//import io.swagger.annotations.ApiOperation;
|
||||
//
|
||||
//import java.util.List;
|
||||
//
|
||||
//public interface IMesProdRuleCfgExtService {
|
||||
//
|
||||
// @ApiOperation(value = "【非排序线】获取产品加工规则信息")
|
||||
// List<MesProdRuleNosortCfg> getProdRuleNosortCfgList(MesProdRuleNosortCfg prodRuleNosortCfg);
|
||||
//
|
||||
// @ApiOperation(value = "【排序线】获取产品加工规则信息")
|
||||
// List<MesProdRuleSortCfg> getProdRuleSortCfgList(MesProdRuleSortCfg prodRuleSortCfg);
|
||||
//
|
||||
//}
|
||||
package cn.estsh.i3plus.ext.mes.pcn.api.busi;
|
||||
|
||||
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProdRuleContext;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesProdRuleNosortCfg;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface IMesProdRuleCfgExtService {
|
||||
|
||||
@ApiOperation(value = "【排序线】获取产品加工规则(生产工单对应的装配件绑定记录)")
|
||||
List<MesProdRuleContext> getProdRuleSortContextList(MesProdRuleContext prodRuleContext, List<MesProductionPartContext> productionPartContextList);
|
||||
|
||||
@ApiOperation(value = "【非排序线】获取产品加工规则")
|
||||
List<MesProdRuleNosortCfg> getProdRuleNosortCfgList(MesProdRuleContext prodRuleContext);
|
||||
|
||||
@ApiOperation(value = "【非排序线】获取产品加工规则对应的装配件信息")
|
||||
MesProdRuleContext getProdRuleContext(MesProdRuleNosortCfg prodRuleNosortCfg, MesProductionPartContext productionPartContext);
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,17 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.api.busi;
|
||||
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public interface IMesProduceSnExtService {
|
||||
|
||||
@ApiOperation(value = "根据零件条码查询零件条码信息")
|
||||
List<MesProduceSn> getProduceSnList(String organizeCode, List<String> productSnList);
|
||||
|
||||
@ApiOperation(value = "根据零件条码查询零件条码信息")
|
||||
Map<String, MesProduceSn> getProduceSnMap(String organizeCode, List<String> productSnList);
|
||||
|
||||
}
|
@ -1,33 +0,0 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.api.busi;
|
||||
|
||||
import cn.estsh.i3plus.pojo.mes.model.MesOpcLinkModel;
|
||||
import cn.estsh.i3plus.pojo.mes.model.MesOpcLinkReturnModel;
|
||||
import cn.estsh.impp.framework.boot.util.ResultBean;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @Description :
|
||||
* @Reference :
|
||||
* @Author :
|
||||
* @CreateDate : 2024-05-29 10:37
|
||||
* @Modify:
|
||||
**/
|
||||
public interface IWriteOPCEquipmentService {
|
||||
|
||||
@ApiOperation(value = "查询工单")
|
||||
ResultBean doOPCEquipment(List<Map<String, Object>> listData,String xmlString);
|
||||
|
||||
@ApiOperation(value = "writeVariableHttp")
|
||||
String writeVariableHttp(String equipmentId,String channel,String clientHandle,String v, String wsUrl)throws Exception;
|
||||
|
||||
@ApiOperation(value = "写值")
|
||||
MesOpcLinkReturnModel writeVariable(MesOpcLinkModel mesOpcLinkModel);
|
||||
|
||||
@ApiOperation(value = "读取")
|
||||
MesOpcLinkReturnModel readVariable(MesOpcLinkModel mesOpcLinkModel);
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,94 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi;
|
||||
|
||||
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesAssemblyExtService;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProdRuleCfgExtService;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProdRuleContext;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionAssemblySortContext;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext;
|
||||
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.MesProdRuleNosortCfg;
|
||||
import cn.estsh.i3plus.pojo.mes.repository.MesProdRuleNoSortCfgRepository;
|
||||
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;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
public class MesProdRuleCfgExtService implements IMesProdRuleCfgExtService {
|
||||
|
||||
@Autowired
|
||||
private IMesAssemblyExtService assemblyExtService;
|
||||
|
||||
@Autowired
|
||||
private MesProdRuleNoSortCfgRepository prodRuleNoSortCfgRepository;
|
||||
|
||||
//【排序线】获取加工规则(生产工单对应的装配件绑定记录)
|
||||
@Override
|
||||
public List<MesProdRuleContext> getProdRuleSortContextList(MesProdRuleContext prodRuleContext, List<MesProductionPartContext> productionPartContextList) {
|
||||
|
||||
//【排序线】获取生产工单装配件绑定记录
|
||||
List<MesProductionAssemblySortContext> productionAssemblySortContextList = assemblyExtService.getProductionAssemblySortContextList(prodRuleContext, productionPartContextList.stream().filter(o -> null != o).map(MesProductionPartContext::getWorkOrderNo).collect(Collectors.toList()));
|
||||
|
||||
//装配件绑定记录根据生产工单分组
|
||||
Map<String, List<MesProductionAssemblySortContext>> assemblyDataMap = groupProductionAssemblySortContextList(productionAssemblySortContextList);
|
||||
|
||||
//实例化排序线加工规则与装配件数据记录
|
||||
List<MesProdRuleContext> prodRuleContextList = new ArrayList<>();
|
||||
productionPartContextList.forEach(o -> prodRuleContextList.add(createSortProdRuleContext(o, assemblyDataMap)));
|
||||
|
||||
return prodRuleContextList;
|
||||
|
||||
}
|
||||
|
||||
//装配件绑定记录根据生产工单分组
|
||||
private Map<String, List<MesProductionAssemblySortContext>> groupProductionAssemblySortContextList(List<MesProductionAssemblySortContext> productionAssemblySortContextList) {
|
||||
return CollectionUtils.isEmpty(productionAssemblySortContextList) ? null :
|
||||
productionAssemblySortContextList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesProductionAssemblySortContext::getWorkOrderNo));
|
||||
}
|
||||
|
||||
//实例化排序线加工规则与装配件数据记录
|
||||
private MesProdRuleContext createSortProdRuleContext(MesProductionPartContext productionPartContext, Map<String, List<MesProductionAssemblySortContext>> assemblyDataMap) {
|
||||
MesProdRuleContext prodRuleContext = new MesProdRuleContext(productionPartContext.getOrganizeCode()).foreignKey(productionPartContext.getForeignKey());
|
||||
if (!CollectionUtils.isEmpty(assemblyDataMap)) prodRuleContext.assemblyDataJson(assemblyDataMap.get(productionPartContext.getWorkOrderNo()));
|
||||
return prodRuleContext;
|
||||
}
|
||||
|
||||
//【非排序线】获取产品加工规则
|
||||
@Override
|
||||
public List<MesProdRuleNosortCfg> getProdRuleNosortCfgList(MesProdRuleContext prodRuleContext) {
|
||||
if (StringUtils.isEmpty(prodRuleContext.getOrganizeCode()) || StringUtils.isEmpty(prodRuleContext.getEquipmentCode())) return null;
|
||||
DdlPackBean packBean = DdlPackBean.getDdlPackBean(prodRuleContext.getOrganizeCode());
|
||||
DdlPreparedPack.getStringEqualPack(prodRuleContext.getEquipmentCode(), MesPcnExtConstWords.EQUIPMENT_CODE, packBean);
|
||||
DdlPreparedPack.getStringEqualPack(prodRuleContext.getOutPartNo(), MesPcnExtConstWords.OUT_PART_NO, packBean);
|
||||
|
||||
if (prodRuleContext.getInPartNoIsEmpty()) DdlPreparedPack.getIsNull(MesPcnExtConstWords.IN_PART_NO, packBean);
|
||||
else DdlPreparedPack.getStringEqualPack(prodRuleContext.getInPartNo(), MesPcnExtConstWords.IN_PART_NO, packBean);
|
||||
|
||||
if (prodRuleContext.getInPartNoRuleIsEmpty()) DdlPreparedPack.getIsNull(MesPcnExtConstWords.IN_PART_NO_RULE, packBean);
|
||||
else DdlPreparedPack.getIsNotNull(MesPcnExtConstWords.IN_PART_NO_RULE, packBean);
|
||||
|
||||
return prodRuleNoSortCfgRepository.findByHqlWhere(packBean);
|
||||
}
|
||||
|
||||
//【非排序线】获取产品加工规则对应的装配件信息
|
||||
@Override
|
||||
public MesProdRuleContext getProdRuleContext(MesProdRuleNosortCfg prodRuleNosortCfg, MesProductionPartContext productionPartContext) {
|
||||
MesProdRuleContext prodRuleContext = new MesProdRuleContext().foreignKey(productionPartContext.getForeignKey()).pid(prodRuleNosortCfg.getId());
|
||||
BeanUtils.copyProperties(prodRuleNosortCfg, prodRuleContext);
|
||||
//获取非排序装配件配置信息
|
||||
if (CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue() == prodRuleContext.getIsHasBind()) prodRuleContext.assemblyDataJson(assemblyExtService.getProductionAssemblyNosortContextList(prodRuleContext.getOrganizeCode(), prodRuleContext.getPid()));
|
||||
return prodRuleContext;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,56 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi;
|
||||
|
||||
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProduceSnExtService;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
|
||||
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
|
||||
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
|
||||
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn;
|
||||
import cn.estsh.i3plus.pojo.mes.repository.MesProduceSnRepository;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
public class MesProduceSnExtService implements IMesProduceSnExtService {
|
||||
|
||||
@Autowired
|
||||
private MesProduceSnRepository produceSnRepository;
|
||||
|
||||
//根据零件条码查询零件条码信息
|
||||
@Override
|
||||
public List<MesProduceSn> getProduceSnList(String organizeCode, List<String> productSnList) {
|
||||
|
||||
if (StringUtils.isEmpty(organizeCode) || CollectionUtils.isEmpty(productSnList)) return null;
|
||||
|
||||
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
|
||||
if (productSnList.size() == 1) DdlPreparedPack.getStringEqualPack(productSnList.get(0), MesPcnExtConstWords.PRODUCT_SN, packBean);
|
||||
else DdlPreparedPack.getInPackList(productSnList.stream().filter(o -> StringUtils.isEmpty(o)).distinct().collect(Collectors.toList()), MesPcnExtConstWords.PRODUCT_SN, packBean);
|
||||
//根据创建时间倒叙查询零件条码
|
||||
DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.DESC.getValue()}, new String[]{MesPcnExtConstWords.CREATE_DATE_TIME}, packBean);
|
||||
|
||||
return distinctProduceSnList(produceSnRepository.findByHqlWhere(packBean));
|
||||
}
|
||||
|
||||
private List<MesProduceSn> distinctProduceSnList(List<MesProduceSn> produceSnDataList) {
|
||||
return CollectionUtils.isEmpty(produceSnDataList) ? null :
|
||||
produceSnDataList.stream().filter(o -> null != o).distinct().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(MesProduceSn::getProductSn))), ArrayList::new));
|
||||
}
|
||||
|
||||
//根据零件条码查询零件条码信息
|
||||
@Override
|
||||
public Map<String, MesProduceSn> getProduceSnMap(String organizeCode, List<String> productSnList) {
|
||||
return groupProduceSnList(getProduceSnList(organizeCode, productSnList));
|
||||
}
|
||||
|
||||
private Map<String, MesProduceSn> groupProduceSnList(List<MesProduceSn> produceSnDataList) {
|
||||
return CollectionUtils.isEmpty(produceSnDataList) ? null : produceSnDataList.stream().filter(o -> null != o).collect(Collectors.toMap(MesProduceSn::getProductSn, o -> o));
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,118 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.equiplog;
|
||||
|
||||
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipVariableRwExtService;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
|
||||
import cn.estsh.i3plus.mes.pcn.api.iservice.base.IConfigService;
|
||||
import cn.estsh.i3plus.platform.common.tool.HttpClientTool;
|
||||
import cn.estsh.i3plus.platform.common.tool.JsonUtilTool;
|
||||
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesConfig;
|
||||
import cn.estsh.i3plus.pojo.mes.model.MesEquipVariableRwModel;
|
||||
import cn.estsh.i3plus.pojo.mes.model.MesEquipVariableRwResult;
|
||||
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
public class MesEquipmentRwExtServiceImpl implements IMesEquipVariableRwExtService {
|
||||
|
||||
@Autowired
|
||||
private IConfigService configService;
|
||||
|
||||
@Override
|
||||
public MesEquipVariableRwModel getRwRequestUrl(MesEquipVariableRwModel equipVariableRwModel) {
|
||||
|
||||
if (StringUtils.isEmpty(equipVariableRwModel.getOrganizeCode())) return equipVariableRwModel;
|
||||
|
||||
//根据cfgCode查询缓存的配置数据
|
||||
List<MesConfig> configList = configService.doCachedConfigList(MesPcnExtConstWords.EQUIP_VARIABLE_RW_CFG, equipVariableRwModel.getOrganizeCode());
|
||||
|
||||
//根据设备标识分组
|
||||
Map<String, List<MesConfig>> requestUrlMap = getConfigMap(configList, MesPcnExtConstWords.KEPWARE_FLAG_CFG);
|
||||
//根据读写标志分组
|
||||
Map<String, List<MesConfig>> rwApiMap = getConfigMap(configList, MesPcnExtConstWords.RW_API_CFG);
|
||||
|
||||
if (CollectionUtils.isEmpty(requestUrlMap) || CollectionUtils.isEmpty(rwApiMap)) return equipVariableRwModel;
|
||||
if (!rwApiMap.containsKey(MesExtEnumUtil.READ_WRITE_FLAG.READ.getValueStr()) || !rwApiMap.containsKey(MesExtEnumUtil.READ_WRITE_FLAG.WRITE.getValueStr())) return equipVariableRwModel;
|
||||
|
||||
List<MesConfig> requestUrlList = (StringUtils.isEmpty(equipVariableRwModel.getKepwareFlag()) || !requestUrlMap.containsKey(equipVariableRwModel.getKepwareFlag())) ? requestUrlMap.get(MesPcnExtConstWords.DEFAULT_URL) : requestUrlMap.get(equipVariableRwModel.getKepwareFlag());
|
||||
if (CollectionUtils.isEmpty(requestUrlList)) return equipVariableRwModel;
|
||||
|
||||
//赋值读/写访问地址
|
||||
return equipVariableRwModel.readRequestUrl(requestUrlList.get(0).getCfgValue() + rwApiMap.get(MesExtEnumUtil.READ_WRITE_FLAG.READ.getValueStr()).get(0).getCfgValue()).
|
||||
writeRequestUrl(requestUrlList.get(0).getCfgValue() + rwApiMap.get(MesExtEnumUtil.READ_WRITE_FLAG.WRITE.getValueStr()).get(0).getCfgValue());
|
||||
|
||||
}
|
||||
|
||||
private Map<String, List<MesConfig>> getConfigMap(List<MesConfig> configList, String cfgType) {
|
||||
List<MesConfig> filterList = CollectionUtils.isEmpty(configList) ? null :
|
||||
configList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getCfgType()) && !StringUtils.isEmpty(o.getCfgKey()) && o.getCfgType().equals(MesPcnExtConstWords.RW_API_CFG))).collect(Collectors.toList());
|
||||
return CollectionUtils.isEmpty(filterList) ? null : filterList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesConfig::getCfgKey));
|
||||
}
|
||||
|
||||
@Override
|
||||
public MesEquipVariableRwResult writeVariable(MesEquipVariableRwModel equipVariableRwModel) {
|
||||
|
||||
MesEquipVariableRwResult result = checkBefore(equipVariableRwModel);
|
||||
|
||||
if (!result.getIsSuccessed()) return result;
|
||||
|
||||
if (StringUtils.isEmpty(equipVariableRwModel.getValue())) return new MesEquipVariableRwResult(false).message("入参缺失必要参数[value]!");
|
||||
|
||||
Map<String, String> params = new HashMap<>();
|
||||
params.put(MesPcnExtConstWords.VALUE, equipVariableRwModel.getValue());
|
||||
params.put(MesPcnExtConstWords.CLIENT_HANDLE, equipVariableRwModel.getClientHandle());
|
||||
params.put(MesPcnExtConstWords.CHANNEL, equipVariableRwModel.getChannel());
|
||||
params.put(MesPcnExtConstWords.EQUIPMENT_ID, equipVariableRwModel.getEquipId());
|
||||
|
||||
String data = HttpClientTool.doHttpUrl(CommonEnumUtil.HTTP_METHOD_TYPE.POST, false, equipVariableRwModel.getWriteRequestUrl(), params, null, null);
|
||||
if (!StringUtils.isEmpty(data)) return JsonUtilTool.decode(data, MesEquipVariableRwResult.class);
|
||||
else return result.isSuccessed(false).message(String.format("设备数据变量写值失败! 数据信息:[%s]", JSONObject.toJSONString(equipVariableRwModel)));
|
||||
|
||||
}
|
||||
|
||||
private MesEquipVariableRwResult checkBefore(MesEquipVariableRwModel equipVariableRwModel) {
|
||||
|
||||
if (null == equipVariableRwModel) return new MesEquipVariableRwResult(false).message("入参为空!");
|
||||
|
||||
if (StringUtils.isEmpty(equipVariableRwModel.getOrganizeCode()) || StringUtils.isEmpty(equipVariableRwModel.getChannel()) || StringUtils.isEmpty(equipVariableRwModel.getEquipId()) || StringUtils.isEmpty(equipVariableRwModel.getClientHandle()))
|
||||
return new MesEquipVariableRwResult(false).message("入参缺失必要参数,请检查参数[organizeCode][channel][equipId][clientHandle]是否缺失!");
|
||||
|
||||
if (StringUtils.isEmpty(equipVariableRwModel.getWriteRequestUrl()) || StringUtils.isEmpty(equipVariableRwModel.getReadRequestUrl())) getRwRequestUrl(equipVariableRwModel);
|
||||
|
||||
if (StringUtils.isEmpty(equipVariableRwModel.getWriteRequestUrl()) || StringUtils.isEmpty(equipVariableRwModel.getReadRequestUrl()))
|
||||
return new MesEquipVariableRwResult(false).message(String.format("工厂[%s]缺失系统配置信息[%s]!", equipVariableRwModel.getOrganizeCode(), MesPcnExtConstWords.EQUIP_VARIABLE_RW_CFG));
|
||||
|
||||
return new MesEquipVariableRwResult(true);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public MesEquipVariableRwResult readVariable(MesEquipVariableRwModel equipVariableRwModel) {
|
||||
|
||||
MesEquipVariableRwResult result = checkBefore(equipVariableRwModel);
|
||||
|
||||
if (!result.getIsSuccessed()) return result;
|
||||
|
||||
Map<String, String> params = new HashMap<>();
|
||||
params.put(MesPcnExtConstWords.CLIENT_HANDLE, equipVariableRwModel.getClientHandle());
|
||||
params.put(MesPcnExtConstWords.CHANNEL, equipVariableRwModel.getChannel());
|
||||
params.put(MesPcnExtConstWords.EQUIPMENT_ID, equipVariableRwModel.getEquipId());
|
||||
|
||||
String data = HttpClientTool.doHttpUrl(CommonEnumUtil.HTTP_METHOD_TYPE.POST, false, equipVariableRwModel.getReadRequestUrl(), params, null, null);
|
||||
if (!StringUtils.isEmpty(data)) return JsonUtilTool.decode(data, MesEquipVariableRwResult.class);
|
||||
else return result.isSuccessed(false).message(String.format("设备数据变量读值失败! 数据信息:[%s]", JSONObject.toJSONString(equipVariableRwModel)));
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -1,156 +1,202 @@
|
||||
//package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
|
||||
//
|
||||
//import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesAssemblyExtService;
|
||||
//import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService;
|
||||
//import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
|
||||
//import cn.estsh.i3plus.ext.mes.pcn.pojo.context.*;
|
||||
//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.LocaleUtil;
|
||||
//import cn.estsh.i3plus.mes.pcn.util.PojoAttrUtil;
|
||||
//import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
|
||||
//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.ArrayList;
|
||||
//import java.util.Comparator;
|
||||
//import java.util.List;
|
||||
//import java.util.Map;
|
||||
//import java.util.stream.Collectors;
|
||||
//
|
||||
///**
|
||||
// * @Description : 显示装配件扫描项工步【非排序】
|
||||
// * @Author : wangjie
|
||||
// **/
|
||||
//@Slf4j
|
||||
//@Service("mesAssemblyShowNosortStepService")
|
||||
//public class MesAssemblyShowNosortStepService extends BaseStepService {
|
||||
//
|
||||
// @Autowired
|
||||
// private IMesProductionProcessContextStepService productionProcessContextStepService;
|
||||
//
|
||||
// @Autowired
|
||||
// private IMesProductionDispatchContextStepService productionDispatchContextStepService;
|
||||
//
|
||||
// @Autowired
|
||||
// private IMesAssemblyExtService assemblyExtService;
|
||||
//
|
||||
// @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());
|
||||
//
|
||||
// //从上下文中取出生产线对象
|
||||
// MesWorkCenter workCenter = productionProcessContext.getWorkCenter();
|
||||
//
|
||||
// //从上下文中取出生产线对象
|
||||
// MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip();
|
||||
//
|
||||
// //获取上下文装配件数据信息集合
|
||||
// List<MesProdRuleNoSortContext> productionAssemblyContextList = productionDispatchContextStepService.getAssemblyDataContext(reqBean, workCenter);
|
||||
//
|
||||
// //搜集当前设备对应的装配件数据信息
|
||||
// productionAssemblyContextList = filterProductionAssemblyContextList(cellEquipContext, productionAssemblyContextList);
|
||||
//
|
||||
// //不存在装配件数据信息则进行查询
|
||||
// if (CollectionUtils.isEmpty(productionAssemblyContextList)) productionAssemblyContextList = doHandleAssemblyData(reqBean, resultBean, stepResult, cellEquipContext);
|
||||
//
|
||||
// if (!stepResult.isCompleted()) return stepResult;
|
||||
//
|
||||
// if (CollectionUtils.isEmpty(productionAssemblyContextList)) return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前未查询到相关的装配件清单");
|
||||
//
|
||||
// //显示装配件信息
|
||||
// showProductionAssembly(reqBean, resultBean, getAssemblyShowContextList(productionAssemblyContextList));
|
||||
//
|
||||
// return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "显示装配件扫描项成功!");
|
||||
//
|
||||
// }
|
||||
//
|
||||
// private List<MesProductionAssemblyContext> doHandleAssemblyData(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesCellEquipContext cellEquipContext) {
|
||||
//
|
||||
// //从上下文中取出生产工单数据信息集合
|
||||
// List<MesWorkOrderContext> workOrderContextList = productionDispatchContextStepService.getWorkOrderDataContext(reqBean);
|
||||
//
|
||||
// //上下文中不存在生产工单数据信息集合
|
||||
// if (CollectionUtils.isEmpty(workOrderContextList)) execNonCompleteAndSendMsg(reqBean, resultBean.writeDbLog(), stepResult, String.format("生产线[%s]工位[%s]的上下文中已不存在生产工单数据信息,请重新扫描加工单!", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode()));
|
||||
//
|
||||
// //获取排序线的装配件清单
|
||||
// List<MesProductionAssemblyContext> productionAssemblyContextList = assemblyExtService.getProductionAssemblySortContextList(
|
||||
// new MesProductionAssemblySortContext(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), reqBean.getProcessCode()), workOrderContextList.stream().filter(o -> null != o).map(MesWorkOrderContext::getWorkOrderNo).collect(Collectors.toList()));
|
||||
//
|
||||
// //保存设备当前一轮工序的装配件清单信息
|
||||
// if (!CollectionUtils.isEmpty(productionAssemblyContextList)) productionDispatchContextStepService.saveAssemblyDataContext(reqBean, productionAssemblyContextList);
|
||||
//
|
||||
// return filterProductionAssemblyContextList(cellEquipContext, productionAssemblyContextList);
|
||||
//
|
||||
// }
|
||||
//
|
||||
// private List<MesProductionAssemblyContext> filterProductionAssemblyContextList(MesCellEquipContext cellEquipContext, List<MesProductionAssemblyContext> productionAssemblyContextList) {
|
||||
// return CollectionUtils.isEmpty(productionAssemblyContextList) ? null :
|
||||
// productionAssemblyContextList.stream().filter(o -> (null != o && o.getEquipmentCode().equals(cellEquipContext.getEquipmentCode()))).collect(Collectors.toList());
|
||||
// }
|
||||
//
|
||||
// private List<MesAssemblyShowContext> getAssemblyShowContextList(List<MesProductionAssemblyContext> productionAssemblyContextList) {
|
||||
// List<MesAssemblyShowContext> assemblyShowContextList = new ArrayList<>();
|
||||
// Map<String, List<MesProductionAssemblyContext>> assemblyMap = productionAssemblyContextList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesProductionAssemblyContext::getWorkOrderNo));
|
||||
// for (Map.Entry<String, List<MesProductionAssemblyContext>> entry : assemblyMap.entrySet()) {
|
||||
// if (null == entry) continue;
|
||||
// List<MesAssemblyShowContext> itemList = new ArrayList<>();
|
||||
// for (MesProductionAssemblyContext item : entry.getValue()) {
|
||||
// if (null == item) continue;
|
||||
// itemList.add(assemblyShowContext(item));
|
||||
// }
|
||||
// itemList = itemList.stream().filter(o -> null != o).sorted(Comparator.comparing(MesAssemblyShowContext::getRouteSeq)).collect(Collectors.toList());
|
||||
// assemblyShowContextList.addAll(itemList);
|
||||
// }
|
||||
// return assemblyShowContextList;
|
||||
// }
|
||||
//
|
||||
// private void showProductionAssembly(StationRequestBean reqBean, StationResultBean resultBean, List<MesAssemblyShowContext> assemblyShowContextList) {
|
||||
// List<AttrBean> attrBeanList = new ArrayList<>();
|
||||
// PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.INDEX, LocaleUtil.transferLanguage(reqBean.getUserInfo(), "序号"));
|
||||
// PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.PART_NO, LocaleUtil.transferLanguage(reqBean.getUserInfo(), "零件编码"));
|
||||
// PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.ASSEMBLY_PART_NO, LocaleUtil.transferLanguage(reqBean.getUserInfo(), "原料编码"));
|
||||
// PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.ASSEMBLY_PART_NAME, LocaleUtil.transferLanguage(reqBean.getUserInfo(), "原料名称"));
|
||||
// PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.ASSEMBLY_SN, LocaleUtil.transferLanguage(reqBean.getUserInfo(), "原料条码"));
|
||||
// PojoAttrUtil.loadPojoAttrs(attrBeanList, MesPcnExtConstWords.ASSEMBLY_STATUS_NAME, LocaleUtil.transferLanguage(reqBean.getUserInfo(), "是否装配"));
|
||||
//
|
||||
// resultBean.setBusiType(MesPcnEnumUtil.STATION_BUSI_TYPE.STEP_CUSTOM_CONTENT.getValue());
|
||||
// resultBean.setDataType(MesPcnEnumUtil.STATION_DATA_TYPE.TABLE.getValue());
|
||||
// resultBean.setResultList(assemblyShowContextList);
|
||||
// resultBean.setDataAttrList(attrBeanList);
|
||||
// this.sendMessage(reqBean, resultBean);
|
||||
// }
|
||||
//
|
||||
// private MesAssemblyShowContext assemblyShowContext(MesProductionAssemblyContext o) {
|
||||
// MesAssemblyShowContext assemblyShowContext = new MesAssemblyShowContext();
|
||||
// BeanUtils.copyProperties(o, assemblyShowContext);
|
||||
// if (StringUtils.isEmpty(assemblyShowContext.getRouteSeq())) assemblyShowContext.setRouteSeq(MesPcnExtConstWords.ZERO);
|
||||
// if (MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue() == assemblyShowContext.getAssemblyStatus() && (MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_50.getValue() == assemblyShowContext.getMatchType() ||
|
||||
// MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.MATCH_TYPE_60.getValue() == assemblyShowContext.getMatchType())) assemblyShowContext.setAssemblyStatus(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_10.getValue());
|
||||
// assemblyShowContext.setAssemblyStatusName(MesExtEnumUtil.ASSEMBLY_STATUS.valueOfDescription(o.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;
|
||||
// }
|
||||
//
|
||||
//
|
||||
//}
|
||||
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
|
||||
|
||||
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProdRuleCfgExtService;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProduceSnExtService;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.*;
|
||||
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesProdRuleNosortCfg;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter;
|
||||
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 com.alibaba.fastjson.JSONObject;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @Description : 显示装配件扫描项工步【非排序】
|
||||
* @Author : wangjie
|
||||
**/
|
||||
@Slf4j
|
||||
@Service("mesAssemblyShowNosortStepService")
|
||||
public class MesAssemblyShowNosortStepService extends BaseStepService {
|
||||
|
||||
@Autowired
|
||||
private IMesProductionProcessContextStepService productionProcessContextStepService;
|
||||
|
||||
@Autowired
|
||||
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
|
||||
|
||||
@Autowired
|
||||
private IMesProdRuleCfgExtService prodRuleCfgExtService;
|
||||
|
||||
@Autowired
|
||||
private IMesProduceSnExtService produceSnExtService;
|
||||
|
||||
@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());
|
||||
|
||||
//从上下文中取出生产线对象
|
||||
MesWorkCenter workCenter = productionProcessContext.getWorkCenter();
|
||||
|
||||
//从上下文中取出生产线对象
|
||||
MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip();
|
||||
|
||||
//获取上下文加工规则数据信息集合
|
||||
List<MesProdRuleContext> prodRuleContextList = productionDispatchContextStepService.getProdRuleDataContext(reqBean);
|
||||
|
||||
//获取上下文产出零件数据信息集合
|
||||
List<MesProductionPartContext> productionPartContextList = productionDispatchContextStepService.getProductionPartContext(reqBean);
|
||||
|
||||
//获取上下文读/扫主条码信息集合
|
||||
List<MesEquipVariableCollectContext> scanProductSnList = productionDispatchContextStepService.getScanProductSnContext(reqBean);
|
||||
|
||||
//根据现有数据【产出零件数据】【读/扫主条码信息】比对上下文中已经存在的加工规则数据信息集合, 没有加工规则的数据进行查询
|
||||
if (CollectionUtils.isEmpty(prodRuleContextList)) prodRuleContextList = new ArrayList<>();
|
||||
doHandleProdRuleData(reqBean, resultBean, stepResult, workCenter, cellEquipContext, prodRuleContextList, productionPartContextList, scanProductSnList);
|
||||
|
||||
|
||||
|
||||
|
||||
return stepResult;
|
||||
}
|
||||
|
||||
private void doHandleProdRuleData(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesWorkCenter workCenter, MesCellEquipContext cellEquipContext,
|
||||
List<MesProdRuleContext> prodRuleContextList, List<MesProductionPartContext> productionPartContextList, List<MesEquipVariableCollectContext> scanProductSnList) {
|
||||
//没有【产出零件数据】【读/扫主条码信息】,则直接跳过 【当前场景是直接匹配装配件规则来获取产品加工规则】
|
||||
if (CollectionUtils.isEmpty(productionPartContextList) && CollectionUtils.isEmpty(scanProductSnList)) return;
|
||||
|
||||
//如果已经通过主条码条件获取了产品加工规则数据,如果当前上下文没有【读/扫主条码信息】,则直接跳过
|
||||
if (!CollectionUtils.isEmpty(prodRuleContextList) && !StringUtils.isEmpty(prodRuleContextList.get(0).getProductSn()) && CollectionUtils.isEmpty(scanProductSnList)) return;
|
||||
|
||||
//根据进料条件获取匹配加工规则数据(只能查询到一条,存在多条则直接跳过,后续通过装配件规则匹配加工规则)
|
||||
if (CollectionUtils.isEmpty(productionPartContextList)) doHandleProdRuleDataByProductSn(reqBean, resultBean, stepResult, workCenter, cellEquipContext, prodRuleContextList, scanProductSnList);
|
||||
//根据是否存在【产出零件数据】获取剩余待匹配的加工规则数据
|
||||
else doHandleProdRuleDataByProductionPart(reqBean, resultBean, stepResult, workCenter, cellEquipContext, prodRuleContextList, productionPartContextList, scanProductSnList);
|
||||
|
||||
}
|
||||
|
||||
|
||||
//根据是否存在【产出零件数据】获取剩余待匹配的加工规则数据
|
||||
private void doHandleProdRuleDataByProductionPart(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesWorkCenter workCenter, MesCellEquipContext cellEquipContext,
|
||||
List<MesProdRuleContext> prodRuleContextList, List<MesProductionPartContext> productionPartContextList, List<MesEquipVariableCollectContext> scanProductSnList) {
|
||||
|
||||
//加工规则的数据已与产出零件的数量一致
|
||||
if (!CollectionUtils.isEmpty(prodRuleContextList) && prodRuleContextList.size() == productionPartContextList.size()) return;
|
||||
|
||||
//已获取的加工规则数据根据关联键分组
|
||||
Map<String, MesProdRuleContext> prodRuleContextMap = CollectionUtils.isEmpty(prodRuleContextList) ? null : prodRuleContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getForeignKey()))).collect(Collectors.toMap(MesProdRuleContext::getForeignKey, o -> o));
|
||||
|
||||
//上下文当前存在【读/扫主条码信息】, 后面匹配成功的信息会从scanProductSnList中remove掉,所以需要一个标志判断循环是否结束
|
||||
Boolean isExistPs = CollectionUtils.isEmpty(scanProductSnList) ? false : true;
|
||||
|
||||
for (MesProductionPartContext productionPartContext : productionPartContextList) {
|
||||
|
||||
if (null == productionPartContext) continue;
|
||||
|
||||
if (StringUtils.isEmpty(productionPartContext.getForeignKey())) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("上下文中的产出零件信息数据异常,缺失数据关联键! 数据详情:[%s]", JSONObject.toJSONString(productionPartContext)));
|
||||
|
||||
//当前上下文中的【读/扫主条码信息】已经全部匹配完成
|
||||
if (isExistPs && CollectionUtils.isEmpty(scanProductSnList)) break;
|
||||
|
||||
//当前产出零件已获取过加工规则
|
||||
if (!CollectionUtils.isEmpty(prodRuleContextMap) && prodRuleContextMap.containsKey(productionPartContext.getForeignKey())) continue;
|
||||
|
||||
//根据进料[NULL]条件获取匹配当前产出零件的加工规则数据(只能查询到一条,存在多条则直接跳过,后续通过装配件规则匹配加工规则)
|
||||
if (CollectionUtils.isEmpty(scanProductSnList)) doHandleProdRuleDataByProductionPartAndEmptyProductSn(reqBean, resultBean, stepResult, workCenter, cellEquipContext, prodRuleContextList, productionPartContext);
|
||||
//根据【读/扫主条码信息】获取匹配当前产出零件的加工规则数据
|
||||
else doHandleProdRuleDataByProductionPartAndProductSn(reqBean, resultBean, stepResult, workCenter, cellEquipContext, prodRuleContextList, productionPartContext, scanProductSnList);
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
//根据进料[NULL]条件获取匹配当前产出零件的加工规则数据(只能查询到一条,存在多条则直接跳过,后续通过装配件规则匹配加工规则)
|
||||
private void doHandleProdRuleDataByProductionPartAndEmptyProductSn(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesWorkCenter workCenter, MesCellEquipContext cellEquipContext,
|
||||
List<MesProdRuleContext> prodRuleContextList, MesProductionPartContext productionPartContext) {
|
||||
//【非排序线】获取产品加工规则 ; 条件进料[NULL]
|
||||
List<MesProdRuleNosortCfg> prodRuleNosortCfgList = prodRuleCfgExtService.getProdRuleNosortCfgList(new MesProdRuleContext(reqBean.getOrganizeCode()).equipmentCode(cellEquipContext.getEquipmentCode()).outPartNo(productionPartContext.getPartNo()).inPartNoIsEmpty().inPartNoRuleIsEmpty());
|
||||
if (CollectionUtils.isEmpty(prodRuleNosortCfgList)) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("请检查非排序产品加工规则信息,未查询到设备[%s]产出零件[%s]进料零件为空的配置信息", cellEquipContext.getEquipmentCode(), productionPartContext.getPartNo()));
|
||||
if (prodRuleNosortCfgList.size() > 1) return;
|
||||
//【非排序线】获取产品加工规则对应的装配件信息
|
||||
MesProdRuleContext prodRuleContext = prodRuleCfgExtService.getProdRuleContext(prodRuleNosortCfgList.get(0), productionPartContext);
|
||||
prodRuleContextList.add(prodRuleContext);
|
||||
}
|
||||
|
||||
//根据进料条件获取匹配加工规则数据(只能查询到一条,存在多条则直接跳过,后续通过装配件规则匹配加工规则)
|
||||
private void doHandleProdRuleDataByProductSn(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesWorkCenter workCenter, MesCellEquipContext cellEquipContext,
|
||||
List<MesProdRuleContext> prodRuleContextList, List<MesEquipVariableCollectContext> scanProductSnList) {
|
||||
|
||||
//查询【读/扫主条码信息】
|
||||
Map<String, MesProduceSn> produceSnDataMap = produceSnExtService.getProduceSnMap(reqBean.getOrganizeCode(), scanProductSnList.stream().filter(o -> null != o).map(MesEquipVariableCollectContext::getEquipVariableValue).collect(Collectors.toList()));
|
||||
|
||||
|
||||
for (MesEquipVariableCollectContext equipVariableCollectContext : scanProductSnList) {
|
||||
|
||||
if (null == equipVariableCollectContext) continue;
|
||||
|
||||
MesProduceSn produceSnData = CollectionUtils.isEmpty(produceSnDataMap) ? null : produceSnDataMap.get(equipVariableCollectContext.getEquipVariableValue());
|
||||
|
||||
if (null != produceSnData) {}
|
||||
else {
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
//【非排序线】获取产品加工规则
|
||||
List<MesProdRuleNosortCfg> prodRuleNosortCfgList = prodRuleCfgExtService.getProdRuleNosortCfgList(new MesProdRuleContext(reqBean.getOrganizeCode()).equipmentCode(cellEquipContext.getEquipmentCode()));
|
||||
// if (CollectionUtils.isEmpty(prodRuleNosortCfgList)) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("请检查非排序产品加工规则信息,未查询到设备[%s]产出零件[%s]进料零件为空的配置信息", cellEquipContext.getEquipmentCode(), productionPartContext.getPartNo()));
|
||||
if (prodRuleNosortCfgList.size() > 1) return;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
//根据【读/扫主条码信息】获取匹配当前产出零件的加工规则数据
|
||||
private void doHandleProdRuleDataByProductionPartAndProductSn(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesWorkCenter workCenter, MesCellEquipContext cellEquipContext,
|
||||
List<MesProdRuleContext> prodRuleContextList, MesProductionPartContext productionPartContext, List<MesEquipVariableCollectContext> scanProductSnList) {
|
||||
|
||||
for (MesEquipVariableCollectContext equipVariableCollectContext : scanProductSnList) {
|
||||
|
||||
if (null == equipVariableCollectContext) continue;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
@ -1,37 +1,37 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
|
||||
|
||||
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.mes.model.StationRequestBean;
|
||||
import cn.estsh.i3plus.pojo.mes.model.StepResult;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* @Description : 扫描主条码工步
|
||||
* @Author : wangjie
|
||||
**/
|
||||
@Slf4j
|
||||
@Service("mesProductSnScanStepService")
|
||||
public class MesProductSnScanStepService extends BaseStepService {
|
||||
|
||||
@Autowired
|
||||
private IMesProductionProcessContextStepService productionProcessContextStepService;
|
||||
|
||||
@Autowired
|
||||
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public StepResult execute(StationRequestBean reqBean) {
|
||||
|
||||
return null;
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
//package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
|
||||
//
|
||||
//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.mes.model.StationRequestBean;
|
||||
//import cn.estsh.i3plus.pojo.mes.model.StepResult;
|
||||
//import lombok.extern.slf4j.Slf4j;
|
||||
//import org.springframework.beans.factory.annotation.Autowired;
|
||||
//import org.springframework.stereotype.Service;
|
||||
//
|
||||
///**
|
||||
// * @Description : 扫描主条码工步
|
||||
// * @Author : wangjie
|
||||
// **/
|
||||
//@Slf4j
|
||||
//@Service("mesProductSnScanStepService")
|
||||
//public class MesProductSnScanStepService extends BaseStepService {
|
||||
//
|
||||
// @Autowired
|
||||
// private IMesProductionProcessContextStepService productionProcessContextStepService;
|
||||
//
|
||||
// @Autowired
|
||||
// private IMesProductionDispatchContextStepService productionDispatchContextStepService;
|
||||
//
|
||||
//
|
||||
//
|
||||
// @Override
|
||||
// public StepResult execute(StationRequestBean reqBean) {
|
||||
//
|
||||
// return null;
|
||||
//
|
||||
// }
|
||||
//
|
||||
//
|
||||
//
|
||||
//}
|
||||
|
@ -0,0 +1,159 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.pojo.context;
|
||||
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter;
|
||||
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
|
||||
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.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 生产过程上下文对象-产品加工规则(排序)
|
||||
*/
|
||||
@Data
|
||||
public class MesProdRuleContext implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1522652732930288854L;
|
||||
|
||||
@ApiParam("组织代码")
|
||||
public String organizeCode;
|
||||
|
||||
@ApiParam(name = "数据关联键 排序:生产工单号 非排序:snowflakeId")
|
||||
private String foreignKey;
|
||||
|
||||
@ApiParam("装配件绑定清单 [JSON]List<MesProductionAssemblyContext>")
|
||||
public String assemblyDataJson;
|
||||
|
||||
//-------以下排序属性-------------
|
||||
|
||||
@ApiParam("生产线代码")
|
||||
public String workCenterCode;
|
||||
|
||||
@ApiParam("工位代码")
|
||||
public String workCellCode;
|
||||
|
||||
@ApiParam("工序代码")
|
||||
public String processCode;
|
||||
|
||||
//-------以下非排序属性-------------
|
||||
|
||||
@ApiParam(name = "读/扫主条码信息(内制件/外协件),不一定有值")
|
||||
private String productSn;
|
||||
|
||||
@ApiParam(name = "进料零件号是否为空")
|
||||
private Boolean inPartNoIsEmpty = false;
|
||||
|
||||
@ApiParam(name = "进料零件规则是否为空")
|
||||
private Boolean inPartNoRuleIsEmpty = false;
|
||||
|
||||
@ApiParam("非排序产品加工规则ID")
|
||||
public Long pid;
|
||||
|
||||
@ApiParam(name = "进料零件号")
|
||||
private String inPartNo;
|
||||
|
||||
@ApiParam(name = "产成零件号")
|
||||
private String outPartNo;
|
||||
|
||||
@ApiParam(name = "设备代码")
|
||||
private String equipmentCode;
|
||||
|
||||
@ApiParam(name = "进料零件规则")
|
||||
private String inPartNoRule;
|
||||
|
||||
@ApiParam(name = "是否打印条码")
|
||||
private Integer isPrint;
|
||||
|
||||
@ApiParam(name = "是否有装配件")
|
||||
private Integer isHasBind;
|
||||
|
||||
@ApiParam(name = "汇报方式")
|
||||
private Integer reportType;
|
||||
|
||||
@ApiParam(name = "是否验证加工单数量")
|
||||
private Integer isCheckOrderQty;
|
||||
|
||||
@ApiParam(name = "是否包装")
|
||||
private Integer isPackage;
|
||||
|
||||
@ApiParam(name = "是否验证装配件扫描顺序")
|
||||
private Integer isCheckBindSeq;
|
||||
|
||||
@ApiParam(name = "成品站点")
|
||||
private String partLocation;
|
||||
|
||||
@ApiParam(name = "子箱设备信号点")
|
||||
private String packageEquSignal;
|
||||
|
||||
public MesProdRuleContext() {}
|
||||
|
||||
public MesProdRuleContext(String organizeCode) {
|
||||
this.organizeCode = organizeCode;
|
||||
}
|
||||
|
||||
public MesProdRuleContext(String organizeCode, String workCenterCode, String workCellCode, String processCode) {
|
||||
this.organizeCode = organizeCode;
|
||||
this.workCenterCode = workCenterCode;
|
||||
this.workCellCode = workCellCode;
|
||||
this.processCode = processCode;
|
||||
}
|
||||
|
||||
public MesProdRuleContext foreignKey(String foreignKey) {
|
||||
this.foreignKey = foreignKey;
|
||||
return this;
|
||||
}
|
||||
|
||||
public MesProdRuleContext inPartNoIsEmpty() {
|
||||
this.inPartNoIsEmpty = true;
|
||||
return this;
|
||||
}
|
||||
|
||||
public MesProdRuleContext inPartNoRuleIsEmpty() {
|
||||
this.inPartNoRuleIsEmpty = true;
|
||||
return this;
|
||||
}
|
||||
|
||||
public MesProdRuleContext pid(Long pid) {
|
||||
this.pid = pid;
|
||||
return this;
|
||||
}
|
||||
|
||||
public MesProdRuleContext inPartNo(String inPartNo) {
|
||||
this.inPartNo = inPartNo;
|
||||
return this;
|
||||
}
|
||||
|
||||
public MesProdRuleContext outPartNo(String outPartNo) {
|
||||
this.outPartNo = outPartNo;
|
||||
return this;
|
||||
}
|
||||
|
||||
public MesProdRuleContext equipmentCode(String equipmentCode) {
|
||||
this.equipmentCode = equipmentCode;
|
||||
return this;
|
||||
}
|
||||
|
||||
public MesProdRuleContext assemblyDataJson(List<? extends MesProductionAssemblyContext> productionAssemblyContextList) {
|
||||
this.assemblyDataJson = !CollectionUtils.isEmpty(productionAssemblyContextList) ? JSONObject.toJSONString(productionAssemblyContextList) : null;
|
||||
return this;
|
||||
}
|
||||
|
||||
public List<MesProductionAssemblyContext> getAssemblyDataContext(MesWorkCenter workCenter) {
|
||||
if (StringUtils.isEmpty(this.assemblyDataJson)) return null;
|
||||
List<MesProductionAssemblyContext> productionAssemblyContextList = new ArrayList<>();
|
||||
if (MesExtEnumUtil.WORK_CENTER_TYPE.SORT.getValue() == workCenter.getCenterType()) {
|
||||
List<MesProductionAssemblySortContext> productionAssemblySortContextList = JSONObject.parseArray(this.assemblyDataJson, MesProductionAssemblySortContext.class);
|
||||
productionAssemblySortContextList.forEach(o -> productionAssemblyContextList.add(o));
|
||||
} else {
|
||||
List<MesProductionAssemblyNosortContext> productionAssemblyNosortContextList = JSONObject.parseArray(this.assemblyDataJson, MesProductionAssemblyNosortContext.class);
|
||||
productionAssemblyNosortContextList.forEach(o -> productionAssemblyContextList.add(o));
|
||||
}
|
||||
return productionAssemblyContextList;
|
||||
}
|
||||
|
||||
}
|
@ -1,58 +0,0 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.pojo.context;
|
||||
|
||||
import io.swagger.annotations.ApiParam;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 生产过程上下文对象-产品加工规则(非排序)
|
||||
*/
|
||||
@Data
|
||||
public class MesProdRuleNoSortContext implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = -3062405517994447105L;
|
||||
|
||||
@ApiParam(name = "零件条码")
|
||||
private String productSn;
|
||||
|
||||
@ApiParam(name = "生产工单号")
|
||||
private String workOrderNo;
|
||||
|
||||
@ApiParam(name = "进料零件号")
|
||||
private String inPartNo;
|
||||
|
||||
@ApiParam(name = "产成零件号")
|
||||
private String outPartNo;
|
||||
|
||||
@ApiParam(name = "设备代码")
|
||||
private String equipmentCode;
|
||||
|
||||
@ApiParam(name = "进料零件规则")
|
||||
private String inPartNoRule;
|
||||
|
||||
@ApiParam(name = "是否打印条码")
|
||||
private Integer isPrint;
|
||||
|
||||
@ApiParam(name = "是否有装配件")
|
||||
private Integer isHasBind;
|
||||
|
||||
@ApiParam(name = "汇报方式")
|
||||
private Integer reportType;
|
||||
|
||||
@ApiParam(name = "是否验证加工单数量")
|
||||
private Integer isCheckOrderQty;
|
||||
|
||||
@ApiParam(name = "是否包装")
|
||||
private Integer isPackage;
|
||||
|
||||
@ApiParam(name = "是否验证装配件扫描顺序")
|
||||
private Integer isCheckBindSeq;
|
||||
|
||||
@ApiParam(name = "成品站点")
|
||||
private String partLocation;
|
||||
|
||||
@ApiParam(name = "子箱设备信号点")
|
||||
private String packageEquSignal;
|
||||
|
||||
}
|
@ -0,0 +1,59 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.pojo.context;
|
||||
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesMouldMultiCavity;
|
||||
import io.swagger.annotations.ApiParam;
|
||||
import lombok.Data;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 生产过程上下文对象-产出零件信息
|
||||
*/
|
||||
@Data
|
||||
public class MesProductionPartContext implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 5562937531822977296L;
|
||||
|
||||
@ApiParam(name = "数据关联键 排序:生产工单号 非排序:snowflakeId")
|
||||
private String foreignKey;
|
||||
|
||||
@ApiParam("组织代码")
|
||||
private String organizeCode;
|
||||
|
||||
@ApiParam("生产工单号")
|
||||
private String workOrderNo;
|
||||
|
||||
@ApiParam("设备代码")
|
||||
private String equipmentCode;
|
||||
|
||||
@ApiParam("设备名称")
|
||||
private String equipmentName;
|
||||
|
||||
@ApiParam("零件号")
|
||||
private String partNo;
|
||||
|
||||
@ApiParam("零件名称")
|
||||
private String partName;
|
||||
|
||||
@ApiParam("模具代码")
|
||||
private String mouldNo;
|
||||
|
||||
public MesProductionPartContext copyMouldMultiCavity(MesMouldMultiCavity mouldMultiCavity) {
|
||||
BeanUtils.copyProperties(mouldMultiCavity, this);
|
||||
this.foreignKey = mouldMultiCavity.getId().toString();
|
||||
return this;
|
||||
}
|
||||
|
||||
//-------以下场景预留未开发-------
|
||||
public MesProductionPartContext copyWorkOrder(String workOrderNo) {
|
||||
this.foreignKey = workOrderNo + "腔顺序号";
|
||||
return this;
|
||||
}
|
||||
|
||||
public MesProductionPartContext copyPartNo(String partNo) {
|
||||
this.foreignKey = partNo + "腔顺序号";
|
||||
return this;
|
||||
}
|
||||
|
||||
}
|
@ -1,31 +0,0 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.pojo.context;
|
||||
|
||||
import cn.estsh.i3plus.pojo.mes.bean.*;
|
||||
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.ArrayList;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
import java.util.TreeSet;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 生产过程上下文对象
|
||||
*/
|
||||
@Data
|
||||
public class MesSnProductionProcessContext extends MesProductionProcessContext{
|
||||
|
||||
@ApiParam("零件条码信息")
|
||||
private String produceSnJson;
|
||||
|
||||
|
||||
//上下文赋值一模多腔信息
|
||||
public MesSnProductionProcessContext productSns(List<MesProduceSn> mesProduceSns) {
|
||||
this.produceSnJson = !CollectionUtils.isEmpty(mesProduceSns) ? JSONObject.toJSONString(mesProduceSns) : null;
|
||||
return this;
|
||||
}
|
||||
}
|
@ -1,16 +0,0 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.pojo.context;
|
||||
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 生产过程上下文对象-装配件清单信息(非排序)
|
||||
*/
|
||||
@Data
|
||||
public class MesWorkOrderContext extends MesWorkOrder implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 5562937531822977296L;
|
||||
|
||||
}
|
Loading…
Reference in New Issue