$result->stock) throw new Exception(__('库存不足')); // if(empty($result->is_area)){ // ProductOrder::setPopularNoAreaOrder($num, $result->id, $result->price, $result->product_id, $uid, $typeId); // }else{ // $areaArr = ProductArea::where('product_id', $productId)->where('status', ProductArea::NORMAL)->orderRaw('id desc')->limit($num)->column('id'); // ProductOrder::setPopularAreaOrder($areaArr, $result->id, $result->price, $result->product_id, $uid, $typeId); // } self::setUserProductOrder($num, $result->is_area, $result->id, $result->price, $productId, $uid, $typeId); return ['start_time'=>$tim, 'name'=>$result->name, 'num'=>$num]; } /* 这个条件是 向持有选定产品超过指定数量的用户空投指定数量/或比例/的指定产品, 比如 向持有A茶超过10套的用户,空投2套B茶 或 向持有A茶超过10套的用户,空投持有 数量X20%套B茶,数量取整 */ /** $mod 0指定数量 1比 * 获取用户Rwa数量 */ public static function getUserRwaNum(int $rwa_num, $mod, $num): int { //读取当日新增数据 $list = UserModel::where('rwa_num', '>=',$rwa_num)->column('id,rwa_num'); if(empty($list)) return 0; $total = 0; //总数量 if($mod == 1 && $num > 0){ $num = bcdiv($num, 100, 2); foreach ($list as $item) { $total += bcmul($item, $num); } }else{ $total = count($list) * $num; } return $total; } //空投Rwa发放 public static function setUserExRwaNum(int $rwa_num, $productId, $isArea, $orderId, $price, $mod, $num): int { //读取当日新增数据 //$list = UserModel::where('rwa_num', '>=',$rwa_num)->column('id,rwa_num'); $total = 0; //总数量 $div = bcdiv($num, 100, 2); UserModel::where('rwa_num', '>=',$rwa_num)->chunk(100,function($users) use($mod,$div,$num,$isArea,$orderId,$price,$productId,&$total){ foreach($users as $user){ // 处理user模型对象 $num = ($mod == 1)? bcmul($user->rwa_num, $div) : $num; if(!empty(self::setUserProductOrder($num, $isArea, $orderId, $price, $productId, $user->id, ProductOrder::Airdrop))){ // $user->rwa_num += $num; // $total +=$user->save(); $user::updateForRwaNum($user->id, $user->parent_id, $num, '+'); } } }); return $total; } private static function setUserProductOrder(int $num, $isArea, $orderId, $price, $productId, $uid, $typeId) { if(empty($isArea)){ $result = ProductOrder::setPopularNoAreaOrder($num, $orderId, $price, $productId, $uid, $typeId); }else{ $areaArr = ProductArea::where('product_id', $productId)->where('status', ProductArea::NORMAL)->orderRaw('id desc')->limit($num)->column('id'); $result = ProductOrder::setPopularAreaOrder($areaArr, $orderId, $price, $productId, $uid, $typeId); } return $result; } }