不可用规则, 排序线 工位设备一对多关系, 代码对应调整

uat-temp-wj-shenshanorder
王杰 3 months ago
parent 95af0ecaca
commit 96e5b5ca58

@ -48,9 +48,18 @@ public interface IMesEquipmentExtService {
@ApiOperation(value = "根据设备代码查询加工不可用规则信息")
List<MesProdRuleIgnoreCfg> getProdRuleIgnoreCfgListByEquip(String organizeCode, String equipmentCode);
@ApiOperation(value = "根据设备代码集合查询加工不可用规则信息")
List<MesProdRuleIgnoreCfg> getProdRuleIgnoreCfgListByWcEquips(String organizeCode, List<MesWcEquipment> wcEquipmentList);
@ApiOperation(value = "根据设备代码集合查询加工不可用规则信息")
List<MesProdRuleIgnoreCfg> getProdRuleIgnoreCfgListByEquips(String organizeCode, List<String> equipmentCodeList);
@ApiOperation(value = "根据生产线代码查询加工不可用规则信息")
List<MesProdRuleIgnoreCfg> getProdRuleIgnoreCfgListByCenter(String organizeCode, String workCenterCode);
@ApiOperation(value = "根据工位代码查询加工不可用规则信息")
List<MesProdRuleIgnoreCfg> getProdRuleIgnoreCfgListByCell(String organizeCode, String workCenterCode, String workCellCode);
@ApiOperation(value = "根据设备代码, 来源信息查询加工不可用规则信息")
List<MesProdRuleIgnoreCfg> getProdRuleIgnoreCfgList(String organizeCode, String equipmentCode, Integer dataSource, Long sourceId);

@ -46,7 +46,7 @@ public interface IMesAssemblyExtService {
List<MesProductionAssemblyNosortContext> getProductionAssemblyNosortContextList(String organizeCode, String equipmentCode, Map<String, List<MesProdRuleIgnoreCfg>> prodRuleIgnoreCfgMap);
@ApiOperation(value = "获取不可用规则")
String getProdRuleIgnoreCfg(Map<String, List<MesProdRuleIgnoreCfg>> prodRuleIgnoreCfgMap, Long id, String dataSorce);
String getProdRuleIgnoreCfg(Map<String, List<MesProdRuleIgnoreCfg>> prodRuleIgnoreCfgMap, Long id, String equipmentCode, String dataSorce);
@ApiOperation(value = "【排序线】获取生产工单装配件清单")
List<MesWorkOrderAssembly> getWorkOrderAssemblyList(String organizeCode, String workOrderNo, String productSn, String craftCode);

@ -215,6 +215,26 @@ public class MesEquipmentExtService implements IMesEquipmentExtService {
new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), equipmentCode});
}
//根据设备代码集合查询加工不可用规则信息
@Override
public List<MesProdRuleIgnoreCfg> getProdRuleIgnoreCfgListByWcEquips(String organizeCode, List<MesWcEquipment> wcEquipmentList) {
if (StringUtils.isEmpty(organizeCode) || CollectionUtils.isEmpty(wcEquipmentList)) return null;
List<String> equipmentCodeList = CollectionUtils.isEmpty(wcEquipmentList) ? null :
wcEquipmentList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getEquipmentCode()))).map(MesWcEquipment::getEquipmentCode).collect(Collectors.toList());
return getProdRuleIgnoreCfgListByEquips(organizeCode, equipmentCodeList);
}
//根据设备代码集合查询加工不可用规则信息
@Override
public List<MesProdRuleIgnoreCfg> getProdRuleIgnoreCfgListByEquips(String organizeCode, List<String> equipmentCodeList) {
if (StringUtils.isEmpty(organizeCode) || CollectionUtils.isEmpty(equipmentCodeList)) return null;
equipmentCodeList = equipmentCodeList.stream().filter(o -> StringUtils.isEmpty(o)).distinct().collect(Collectors.toList());
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
if (equipmentCodeList.size() == 1) DdlPreparedPack.getStringEqualPack(equipmentCodeList.get(0), MesPcnExtConstWords.EQUIPMENT_CODE, packBean);
else DdlPreparedPack.getInPackList(equipmentCodeList, MesPcnExtConstWords.EQUIPMENT_CODE, packBean);
return prodRuleIgnoreCfgRepository.findByHqlWhere(packBean);
}
//根据生产线代码查询加工不可用规则信息
@Override
public List<MesProdRuleIgnoreCfg> getProdRuleIgnoreCfgListByCenter(String organizeCode, String workCenterCode) {
@ -222,13 +242,17 @@ public class MesEquipmentExtService implements IMesEquipmentExtService {
List<MesWcEquipment> wcEquipmentList = wcEquipmentRepository.findByProperty(
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});
List<String> equipmentCodeList = CollectionUtils.isEmpty(wcEquipmentList) ? null :
(wcEquipmentList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getEquipmentCode()))).map(MesWcEquipment::getEquipmentCode).collect(Collectors.toList())).stream().filter(o -> null != o).distinct().collect(Collectors.toList());
if (CollectionUtils.isEmpty(equipmentCodeList)) return null;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
if (equipmentCodeList.size() == 1) DdlPreparedPack.getStringEqualPack(equipmentCodeList.get(0), MesPcnExtConstWords.EQUIPMENT_CODE, packBean);
else DdlPreparedPack.getInPackList(equipmentCodeList, MesPcnExtConstWords.EQUIPMENT_CODE, packBean);
return prodRuleIgnoreCfgRepository.findByHqlWhere(packBean);
return getProdRuleIgnoreCfgListByWcEquips(organizeCode, wcEquipmentList);
}
//根据工位代码查询加工不可用规则信息
@Override
public List<MesProdRuleIgnoreCfg> getProdRuleIgnoreCfgListByCell(String organizeCode, String workCenterCode, String workCellCode) {
if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(workCenterCode) || StringUtils.isEmpty(workCellCode)) return null;
List<MesWcEquipment> wcEquipmentList = wcEquipmentRepository.findByProperty(
new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.WORK_CENTER_CODE, MesPcnExtConstWords.WORK_CELL_CODE},
new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), workCenterCode, workCellCode});
return getProdRuleIgnoreCfgListByWcEquips(organizeCode, wcEquipmentList);
}
//根据设备代码, 来源信息查询加工不可用规则信息

@ -82,7 +82,7 @@ public class MesAssemblyExtService implements IMesAssemblyExtService {
workOrderAssemblyList.forEach(o -> productionAssemblySortContextList.add(
new MesProductionAssemblySortContext().copy(o).fileUrl(fileMap).foreignKey(prodRuleContext.getForeignKey())
.prodRuleIgnoreCfg(getProdRuleIgnoreCfg(prodRuleIgnoreCfgMap, o.getPid(), MesExtEnumUtil.PROD_RULE_IGNORE_DATA_SOURCE.DATA_SOURCE10.getValueStr()))
.prodRuleIgnoreCfg(getProdRuleIgnoreCfg(prodRuleIgnoreCfgMap, o.getPid(), o.getEquipmentCode(), MesExtEnumUtil.PROD_RULE_IGNORE_DATA_SOURCE.DATA_SOURCE10.getValueStr()))
)
);
@ -116,7 +116,7 @@ public class MesAssemblyExtService implements IMesAssemblyExtService {
new MesProductionAssemblySortContext()
.copy(o, getProductionAssembly(productionAssemblyMap, o.getId()), getIsCheckBindSeq(getWorkCell(workCellMap, o.getWorkCellCode())))
.foreignKey(prodRuleContext.getForeignKey())
.prodRuleIgnoreCfg(getProdRuleIgnoreCfg(prodRuleIgnoreCfgMap, o.getPid(), MesExtEnumUtil.PROD_RULE_IGNORE_DATA_SOURCE.DATA_SOURCE10.getValueStr()))
.prodRuleIgnoreCfg(getProdRuleIgnoreCfg(prodRuleIgnoreCfgMap, o.getPid(), o.getEquipmentCode(), MesExtEnumUtil.PROD_RULE_IGNORE_DATA_SOURCE.DATA_SOURCE10.getValueStr()))
)
);
@ -204,7 +204,7 @@ public class MesAssemblyExtService implements IMesAssemblyExtService {
assemblyNosortCfgList.forEach(o -> {
MesProductionAssemblyNosortContext productionAssemblyNosortContext = new MesProductionAssemblyNosortContext().copy(prodRuleContext, o).fileUrl(fileMap).foreignKey(prodRuleContext.getForeignKey());
productionAssemblyNosortContext.overrideAssemblyStatus(productionCustomContextStepService.getRepeatAssemblySn(prodRuleContext.getOrganizeCode(), prodRuleContext.getWorkCenterCode(), prodRuleContext.getWorkCellCode(), productionAssemblyNosortContext))
.prodRuleIgnoreCfg(getProdRuleIgnoreCfg(prodRuleIgnoreCfgMap, o.getId(), MesExtEnumUtil.PROD_RULE_IGNORE_DATA_SOURCE.DATA_SOURCE30.getValueStr()));
.prodRuleIgnoreCfg(getProdRuleIgnoreCfg(prodRuleIgnoreCfgMap, o.getId(), o.getEquipmentCode(), MesExtEnumUtil.PROD_RULE_IGNORE_DATA_SOURCE.DATA_SOURCE30.getValueStr()));
productionAssemblyNosortContextList.add(productionAssemblyNosortContext);
});
@ -213,9 +213,9 @@ public class MesAssemblyExtService implements IMesAssemblyExtService {
//获取不可用规则
@Override
public String getProdRuleIgnoreCfg(Map<String, List<MesProdRuleIgnoreCfg>> prodRuleIgnoreCfgMap, Long id, String dataSorce) {
public String getProdRuleIgnoreCfg(Map<String, List<MesProdRuleIgnoreCfg>> prodRuleIgnoreCfgMap, Long id, String equipmentCode, String dataSorce) {
if (CollectionUtils.isEmpty(prodRuleIgnoreCfgMap) || StringUtils.isEmpty(id) || StringUtils.isEmpty(dataSorce)) return null;
String key = new StringJoiner(MesPcnExtConstWords.AND).add(dataSorce).add(id.toString()).toString();
String key = new StringJoiner(MesPcnExtConstWords.AND).add(dataSorce).add(equipmentCode).add(id.toString()).toString();
return prodRuleIgnoreCfgMap.containsKey(key) ? JSONObject.toJSONString(prodRuleIgnoreCfgMap.get(key)) : null;
}
@ -250,7 +250,7 @@ public class MesAssemblyExtService implements IMesAssemblyExtService {
assemblyNosortCfgList.forEach(o -> productionAssemblyNosortContextList.add(
new MesProductionAssemblyNosortContext().copy(o)
.prodRuleIgnoreCfg(getProdRuleIgnoreCfg(prodRuleIgnoreCfgMap, o.getId(), MesExtEnumUtil.PROD_RULE_IGNORE_DATA_SOURCE.DATA_SOURCE30.getValueStr()))
.prodRuleIgnoreCfg(getProdRuleIgnoreCfg(prodRuleIgnoreCfgMap, o.getId(), o.getEquipmentCode(), MesExtEnumUtil.PROD_RULE_IGNORE_DATA_SOURCE.DATA_SOURCE30.getValueStr()))
)
);

@ -85,7 +85,7 @@ public class MesProdRuleCfgExtService implements IMesProdRuleCfgExtService {
@Override
public List<MesProdRuleNosortCfg> getProdRuleNosortCfgList(List<MesProdRuleNosortCfg> prodRuleNosortCfgList, Map<String, List<MesProdRuleIgnoreCfg>> prodRuleIgnoreCfgMap) {
if (CollectionUtils.isEmpty(prodRuleNosortCfgList) || CollectionUtils.isEmpty(prodRuleIgnoreCfgMap)) return prodRuleNosortCfgList;
prodRuleNosortCfgList.stream().forEach(o -> o.setProdRuleIgnoreCfg(assemblyExtService.getProdRuleIgnoreCfg(prodRuleIgnoreCfgMap, o.getId(), MesExtEnumUtil.PROD_RULE_IGNORE_DATA_SOURCE.DATA_SOURCE20.getValueStr())));
prodRuleNosortCfgList.stream().forEach(o -> o.setProdRuleIgnoreCfg(assemblyExtService.getProdRuleIgnoreCfg(prodRuleIgnoreCfgMap, o.getId(), o.getEquipmentCode(), MesExtEnumUtil.PROD_RULE_IGNORE_DATA_SOURCE.DATA_SOURCE20.getValueStr())));
return null;
}
@ -127,7 +127,7 @@ public class MesProdRuleCfgExtService implements IMesProdRuleCfgExtService {
@Override
public MesProdRuleContext getProdRuleNosortContextByPid(MesProdRuleContext prodRuleContext, Map<String, List<MesProdRuleIgnoreCfg>> prodRuleIgnoreCfgMap) {
if (null == prodRuleContext || CollectionUtils.isEmpty(prodRuleIgnoreCfgMap)) return prodRuleContext;
prodRuleContext.setProdRuleIgnoreCfg(assemblyExtService.getProdRuleIgnoreCfg(prodRuleIgnoreCfgMap, prodRuleContext.getPid(), MesExtEnumUtil.PROD_RULE_IGNORE_DATA_SOURCE.DATA_SOURCE20.getValueStr()));
prodRuleContext.setProdRuleIgnoreCfg(assemblyExtService.getProdRuleIgnoreCfg(prodRuleIgnoreCfgMap, prodRuleContext.getPid(), prodRuleContext.getEquipmentCode(), MesExtEnumUtil.PROD_RULE_IGNORE_DATA_SOURCE.DATA_SOURCE20.getValueStr()));
return prodRuleContext;
}

@ -614,14 +614,24 @@ public class MesProductionProcessContextStepService extends BaseStepService impl
MesCellEquipContext cellEquipmentContext = productionProcessContext.getCurCellEquip();
if (null == cellEquipmentContext) cellEquipmentContext = dispatchCurCellEquipment(reqBean, productionProcessContext).getCurCellEquip();
if (!productionProcessContext.getSuccess() || !StringUtils.isEmpty(productionProcessContext.getProdRuleIgnoreCfg())) return productionProcessContext;
//根据设备代码查询加工不可用规则信息, 如果是排序线末道工位,需要查询生产线所有设备的不可用规则, 因为末道工位可能会补装配前道
List<MesProdRuleIgnoreCfg> prodRuleIgnoreCfgList = (getCenterType(reqBean).compareTo(MesExtEnumUtil.WORK_CENTER_TYPE.SORT.getValue()) == 0 &&
(!StringUtils.isEmpty(productionProcessContext.getWorkCell().getIsEndWorkCell()) && productionProcessContext.getWorkCell().getIsEndWorkCell().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0))
? equipmentExtService.getProdRuleIgnoreCfgListByCenter(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode())
: equipmentExtService.getProdRuleIgnoreCfgListByEquip(reqBean.getOrganizeCode(), cellEquipmentContext.getEquipmentCode());
List<MesProdRuleIgnoreCfg> prodRuleIgnoreCfgList;
if (getCenterType(reqBean).compareTo(MesExtEnumUtil.WORK_CENTER_TYPE.NOSORT.getValue()) == 0) {
//如果是非排序线, 则根据工位当前设备代码查询加工不可用规则信息
prodRuleIgnoreCfgList = equipmentExtService.getProdRuleIgnoreCfgListByEquip(reqBean.getOrganizeCode(), cellEquipmentContext.getEquipmentCode());
} else if (!StringUtils.isEmpty(productionProcessContext.getWorkCell().getIsEndWorkCell()) && productionProcessContext.getWorkCell().getIsEndWorkCell().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0) {
//如果是排序线末道工位,需要查询生产线所有设备的不可用规则, 因为末道工位可能会补装配前道
prodRuleIgnoreCfgList = equipmentExtService.getProdRuleIgnoreCfgListByCenter(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode());
} else {
//如果是排序线,需要查询当前工位下所有设备的不可用规则, 排序线一个工位对应多个设备, 例如不同扭距枪的装配件对应不同的设备
prodRuleIgnoreCfgList = equipmentExtService.getProdRuleIgnoreCfgListByCell(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode());
}
//存储不可用规则到上下文
if (!CollectionUtils.isEmpty(prodRuleIgnoreCfgList)) {
dispatchFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.PROD_RULE_IGNORE_CFG_CONTEXT, JSONObject.toJSONString(prodRuleIgnoreCfgList));
}
productionProcessContext.prodRuleIgnoreCfg(!CollectionUtils.isEmpty(prodRuleIgnoreCfgList) ? CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValueStr() : CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValueStr()).isNeedCache();
return productionProcessContext;
}
@ -642,7 +652,7 @@ public class MesProductionProcessContextStepService extends BaseStepService impl
List<MesProdRuleIgnoreCfg> prodRuleIgnoreCfgList = getProdRuleIgnoreCfgContext(reqBean, productionProcessContext);
return CollectionUtils.isEmpty(prodRuleIgnoreCfgList) ? null :
prodRuleIgnoreCfgList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getDataSource()) && !StringUtils.isEmpty(o.getSourceId())))
.collect(Collectors.groupingBy(o -> new StringJoiner(MesPcnExtConstWords.AND).add(o.getDataSource().toString()).add(o.getSourceId().toString()).toString()));
.collect(Collectors.groupingBy(o -> new StringJoiner(MesPcnExtConstWords.AND).add(o.getDataSource().toString()).add(o.getEquipmentCode()).add(o.getSourceId().toString()).toString()));
}
}

Loading…
Cancel
Save