EqptGroupBuildTask.java
package com.mycim.webapp.actions.operation.query.threadtask;
import com.fa.sesa.i18n.I18nUtils;
import com.mycim.framework.utils.lang.StringUtils;
import com.mycim.framework.utils.lang.collections.MapUtils;
import com.mycim.valueobject.ObjectList;
import com.mycim.valueobject.ems.Entity;
import com.mycim.valueobject.ems.EntityGroup;
import com.mycim.valueobject.security.Station;
import com.mycim.valueobject.wip.LotStatus;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.BiConsumer;
import java.util.stream.Collectors;
public class EqptGroupBuildTask implements Runnable{
private final EntityGroup entityGroup;
private final Station station;
private final String filter;
private final ConcurrentHashMap<String,Map<String,Object>> eqptGroupResultMap;
public EqptGroupBuildTask(EntityGroup entityGroup, Station station, String filter,
ConcurrentHashMap<String, Map<String, Object>> eqptGroupResultMap) {
this.entityGroup = entityGroup;
this.station = station;
this.filter = filter;
this.eqptGroupResultMap = eqptGroupResultMap;
}
@Override
public void run() {
Map jsonEntityGroup = new HashMap<>();
jsonEntityGroup.put("id", entityGroup.getInstanceId() + "_" +station.getInstanceRrn());
jsonEntityGroup.put("text", entityGroup.getInstanceId());
jsonEntityGroup.put("leaf", Boolean.valueOf(false));
jsonEntityGroup.put("objectType", ObjectList.ENTITYGROUP_KEY);
jsonEntityGroup.put("iconCls", "iconCls-entityGroup");
String entityGroupDesc =StringUtils.trim(entityGroup.getInstanceDesc()) == null ? StringUtils.EMPTY : StringUtils
.trim(entityGroup.getInstanceDesc());
if (StringUtils.equalsIgnoreCase("CN", I18nUtils.getCurrentLanguage().toString())) {
jsonEntityGroup.put("qtip", "设备分组号: " + entityGroup.getInstanceId() + "<br>" + "设备组描述: " +
entityGroupDesc);
} else {
jsonEntityGroup.put("qtip",
"Sub Station ID: " + entityGroup.getInstanceId() + "<br>" + "Sub Station" +
" Desc.: " + entityGroupDesc);
}
jsonEntityGroup.put("callback",callback);
jsonEntityGroup.put("cacheKey",String.format("%s_%s",station.getInstanceId(),entityGroup.getInstanceId()));
jsonEntityGroup.put("entities",entityGroup.getEntities());
jsonEntityGroup.put("filter",filter);
eqptGroupResultMap.put(String.format("%s_%s",station.getInstanceId(),entityGroup.getInstanceId()),jsonEntityGroup);
}
private BiConsumer<Map<Long,Object>,Map<String,Object>> callback = (source,self)->{
if(MapUtils.isEmpty(self)||MapUtils.isEmpty(source)){
return;
}
Object entitiesObj = self.get("entities");
String filter =String.valueOf(self.get("filter"));
if(entitiesObj instanceof Collection){
Set<String> entityIds= (Set<String>)
((Collection)entitiesObj).stream().filter(e-> e instanceof Entity)
.map(e->((Entity)e).getInstanceId()).collect(
Collectors.toSet());
if(entityIds!=null){
List<Map<String,Object>> jsonEntityArray=new ArrayList<>();
for(String entityId : entityIds){
String cacheKey = self.get("cacheKey")+String.format("_%s",entityId);
Object entityObj = source.get(cacheKey);
if(!(entityObj instanceof Map)){
continue;
}
Map<String,Object>entityMap = (Map)entityObj;
if(MapUtils.isEmpty(entityMap)){
continue;
}
TreeSet clsSet= (TreeSet) entityMap.get("clsSet");
if ("ALL".equalsIgnoreCase(filter)) {
jsonEntityArray.add(entityMap);
} else if (LotStatus.STATUSLIGTH_HAV.equals(filter) && clsSet.contains("icon2_wait")) {
jsonEntityArray.add(entityMap);
} else if (LotStatus.STATUSLIGTH_HOLD_NO_RUN.equals(filter) && clsSet.contains("icon3_hold")) {
jsonEntityArray.add(entityMap);
} else if (LotStatus.STATUSLIGTH_RUN.equals(filter) && clsSet.contains("icon1_run")) {
jsonEntityArray.add(entityMap);
}
}
if (jsonEntityArray.size() > 0) {
self.put("children", jsonEntityArray);
}
}
}
self.remove("callback");
self.remove("entities");
self.remove("filter");
self.remove("cacheKey");
};
}