//package leetcode.array;
//
///**
// * @description:
// * @author: zhaoxinglin
// * @date: 2020/8/6 下午11:19
// * Copyright (C) 2019~2025 MTDP All rights reserved
// */
//public class Test123123 {
//}
//
//
//同时有N个商品（用long类型的商品id表示），每个商品都可以被任何一个用户（long类型的用户id）订阅，每被订阅一次，该商品的订阅数加1，同一个用户对同一个商品只能订阅一次 编辑写一个类，用3个方法提供以下功能（这3个方法都是在单机多线程环境下调用）：
//        1）为指定的用户id订阅指定的商品id
//        2) 返回所有商品的订阅总数
//        3）根据商品ID返回这个商品的订阅数
//
//class OrderInfo{
//
//    // 商品订阅次数集合
//    final Map<Long,AtomicInteger> orderNumsMap =new ConcurrentHashMap();
//    // 用户订阅商品详情
//    final Map<Long,Set<Long>> userOrderMap=new ConcurrentHashMap();
//    //总次数
//    AtomicInteger size=0;
//
//    // 初始化商品订阅次数 为0
//    public OrderInfo(Set<Integer> skuIdSet){
//// 初始化商品数量
//        if(null!=skuIdSet){
//            for(Long skuId:skuIdSet){
//                orderNumsMap.put(skuId,new AtomicInteger(0));
//            }
//        }
//    }
//
//    // 商品订阅，判断用户id，以及是否已经订阅
//    public void order(Long userId,Long skuId){
//        // check 商品是否已经存在，如果不存在，
//        if(null == orderNumsMap.get(skuId)){
//            throw Exception("未初始化商品，不予处理");
//        }else{
//            AtomicInteger num=orderNumsMap.get(skuId);
//            num.increment(); // todo  并发
//        }
//
//        // 获取用户订阅商品id集合
//        Set<Long> exist=userOrderMap.get(userId);
//
//        if(null !=exist){
//            if(exist.contains(skuId){
//                // 如果已经订阅过，则不处理
//            }else{
//                // 执行订阅，并且次数+1
//                exist.add(skuId);
//                size.increment(); // todo 并发
//            }
//        }else{ // todo  this 此处并发清咖滚下有可能导致数据被覆盖，
//            //eg:比如某个新用户在不同的终端，同时订阅不同的商品.
//            exist=new HashSet();
//            userOrderMap.put(userId,exist);
//            exist.add(skuId);
//            size.increment();
//        }
//
//
//
//    }
//    // 商品订阅总数
//    public int size(){
//        return size;
//    }
//
//    // 根据商品id获取订阅数量
//    public Integer orderNum(Long skuId){
//        return orderNumsMap.get(skuId);
//    }
//}