BaiduGetDishs.java类
package com.hwm.api.baidu.impl.dish;
import com.hwm.api.baidu.BaiduEnvironment;
import com.hwm.api.baidu.entity.dish.BaiduDish;
import com.hwm.api.baidu.entity.dish.BaiduMenu;
import com.hwm.api.baidu.impl.BaiduDishApi;
import com.hwm.exception.WMApiException;
import com.hwm.organization.entity.ApiResult;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import java.util.*;
import java.util.concurrent.ForkJoinPool;
public class BaiduGetDishs {
private final static ForkJoinPool POOL = new ForkJoinPool();
private BaiduGetDishs() {
}
/**
用过任务分解获取
@param baiduMenuList
@param apiEnvironment
@return
*/
public static List<BaiduDish> getDishsFast(List<BaiduMenu> baiduMenuList, BaiduEnvironment apiEnvironment) { //第一个参数是任务内容id,第二参数是任务环境
if (CollectionUtils.isEmpty(baiduMenuList)) {
return new ArrayList<>();
}
List<HashMap> baiduDishIds=new ArrayList<>();
for (int i=0;i<baiduMenuList.size();i++){
for (BaiduDish baiduDish:baiduMenuList.get(i).getProducts()){
if(StringUtils.isNotBlank(baiduDish.getBaidu_dish_id())){
HashMap map=new HashMap();
map.put("baidu_dish_id",baiduDish.getBaidu_dish_id());
baiduDishIds.add(map);
}
}
}
Map<Integer, List<HashMap>> orderGroups;
//最多只能分解6个任务
//尽量平均分配
if (baiduDishIds.size() <= 7) {
orderGroups = dishIdDecompose(baiduDishIds, 1);
} else if (baiduDishIds.size() <= 28) {
orderGroups = dishIdDecompose(baiduDishIds, 2);
} else if (baiduDishIds.size() <= 60) {
orderGroups = dishIdDecompose(baiduDishIds, 3);
} else if(baiduDishIds.size() <= 80){
orderGroups = dishIdDecompose(baiduDishIds, 4);
} else if(baiduDishIds.size() <= 120){
orderGroups = dishIdDecompose(baiduDishIds, 5);
}else{
orderGroups = dishIdDecompose(baiduDishIds, 6);
}
BaiduDishApi baiduDishApi = new BaiduDishApi(apiEnvironment);
DishRecursiveTask task = new DishRecursiveTask(orderGroups, baiduDishApi);
POOL.submit(task);
try {
return task.get();
}catch (Exception e) {
throw new WMApiException(e);
}
}
/**
菜品分解
@param baiduDishIds
@param group 分解析的组数
@return
*/
private static Map<Integer,List<HashMap>> dishIdDecompose(List<HashMap> baiduDishIds, int group) {
Map<Integer, List<HashMap>> groups = new HashMap<>();
//分组不能小于1 大于 8
if (group <= 0 || group >= 7) {
throw new WMApiException("菜品分组不合理");
}
float flag = 1.0f * baiduDishIds.size() / group; //平均下去
int offset = Math.round(flag);
Iterator<HashMap> iterator = baiduDishIds.iterator();
for (int i = 1; i <= group; i++) {
List<HashMap> item = new ArrayList<>();
groups.put(i, item);
for (int j = 1; j <= offset; j++) {
if (iterator.hasNext()) {
item.add(iterator.next());
} else {
break;
}
}
}
while (iterator.hasNext()) {
groups.get(group).add(iterator.next());
}
return groups;
}
}
package com.hwm.api