小结--多线程执行总结

 重点部分都做了注释,其他都是业务代码了

@SneakyThrows
@Override
public Map<String,Object>  getTypeDetailByProdMainId(Long id) {
    Map<String,Object> mapData = new ConcurrentHashMap();//要保证线程安全
    CountDownLatch countDownLatch = new CountDownLatch(2);//计数
    DecimalFormat df=new DecimalFormat("0.00");//设置保留位数

    //市场占有率
    List<Map<String, Object>> typeDetailByProdMainId = expertRatingMapper.getTypeDetailByProdMainId(id);
    String ids = "";
    for (Map map : typeDetailByProdMainId){
        String idss = String.valueOf(map.get("id"));
        ids = ids+","+idss;
    }
    ids = ids.replaceFirst(",","");
    
    List<Map<String, Object>> sale = expertRatingMapper.getSale(ids);
    Long pid = null;//id
    int rank = 0;//排名
    double sales = 0;//销售额
    boolean bool = false;//是否有多条重复
    for (int i = 0;i<sale.size(); i++){
        String prod_main_id = String.valueOf(sale.get(i).get("prod_main_id"));
        if(id.longValue() == Long.valueOf(prod_main_id).longValue()) {
            //销售额
            sales = Double.valueOf(String.valueOf(sale.get(i).get("sale")));
            //过滤出相同销售额的数据,获得第一条的id
            double finalSales = sales;
            List<Map<String, Object>> sale1 = sale.stream().filter(s -> Double.valueOf(String.valueOf(s.get("sale"))) == finalSales).collect(Collectors.toList());
            if(0<sale1.size()){
                pid = Long.valueOf(String.valueOf(sale1.get(0).get("prod_main_id")));
                bool = true;
            }else{
                rank = i -1;
            }
            break;//跳出循环,减少遍历次数
        }
    }
    //存在相同销售额
    if(bool){
        int j = 0;
        for (Map map : sale){
            j++;
            Long prodid = Long.valueOf(String.valueOf(map.get("prod_main_id")));
            if(pid.longValue()==prodid.longValue()){
                rank = j-1;
                break;
            }
        }
    }
    //【1-(行业排名-1)/行业品牌数】*50
    String format = df.format((1-(float)rank/sale.size())*50);
    mapData.put("formatSale",format);

    String finalIds = ids;
    //---------------------------销售范围---------------
    executorService.execute(()->{
        List<Map<String,Object>> cityMap = expertRatingMapper.getCity(finalIds);
        double cityVal;//城市比例
        Long cityIds = null;//相同
        boolean boolCity = false;
        int rankCity = 0;
        for (int c = 0;c<cityMap.size();c++){
            Long cityId = Long.valueOf(String.valueOf(cityMap.get(c).get("prod_main_id")));
            if(id.longValue()== cityId.longValue()){
                cityVal = Double.valueOf(String.valueOf(cityMap.get(c).get("city")));
                //过滤出相同城市占比的数据,获得第一条
                double finalCityVal = cityVal;
                List<Map<String,Object>> cityMap1 = cityMap.stream().filter(s->
                        Double.valueOf(String.valueOf(s.get("city")))== finalCityVal).collect(Collectors.toList());
                if(0<cityMap1.size()){
                    cityIds = Long.valueOf(String.valueOf(cityMap1.get(0).get("prod_main_id")));
                    boolCity = true;
                }else {
                    rankCity = c - 1;
                }
                break;
            }
        }
        if(boolCity){
            int ci = 0;
            for (Map map : cityMap){
                ci++;
                Long citId = Long.valueOf(String.valueOf(map.get("prod_main_id")));
                if(citId.longValue()==cityIds.longValue()){
                    rankCity = ci - 1;
                    break;
                }
            }
        }
        String forMatCity = df.format((1-(float)rankCity/cityMap.size())*40);
        mapData.put("forMatCity",forMatCity);
        countDownLatch.countDown();//-1
    });
    //---------------------------出口能力--------------------
    executorService.execute(()->{
        List<Map<String, Object>> export = expertRatingMapper.getExport(finalIds);
        double proportion;//出口额
        boolean bools = false;//出口额是否相同
        Long proId = null;//相同
        int rankExport = 0;
        for(int f=0;f<export.size();f++){
            Long prodId = Long.valueOf(String.valueOf(export.get(f).get("prod_main_id")));
            if(id.longValue()==prodId.longValue()){
                //获取近三年出口额
                proportion = Double.valueOf(String.valueOf(export.get(f).get("proportion")));
                //过滤出相同出口额的数据,获得第一条
                double finalProportion = proportion;
                List<Map<String, Object>> proportion1 = export.stream().filter(s -> Double.valueOf(String.valueOf(s.get("proportion"))) == finalProportion).collect(Collectors.toList());
                if(0<proportion1.size()){
                    proId = Long.valueOf(String.valueOf(proportion1.get(0).get("prod_main_id")));
                    bools = true;
                }else {
                    rankExport = f -1;
                }
                break;
            }
        }
        if(bools){
            int g = 0;
            for (Map map : export){
                g++;
                Long proporId = Long.valueOf(String.valueOf(map.get("prod_main_id")));
                if(proId.longValue()==proporId.longValue()){
                    rankExport = g - 1;
                    break;
                }
            }
        }
        String forMatExport = df.format((1-(float)rankExport/export.size())*40);
        mapData.put("forMatExport",forMatExport);
        countDownLatch.countDown();//-1
    });
    countDownLatch.await();
    return mapData;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小板凳-BGM

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值