|
@@ -36,14 +36,10 @@ class WelfareLoginc
|
|
|
{
|
|
{
|
|
|
$result = ProductPopular::getPopularByTime($productId, $lan, $tim);
|
|
$result = ProductPopular::getPopularByTime($productId, $lan, $tim);
|
|
|
if(!$result || $num > $result->stock) throw new Exception(__('库存不足'));
|
|
if(!$result || $num > $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);
|
|
self::setUserProductOrder($num, $result->is_area, $result->id, $result->price, $productId, $uid, $typeId);
|
|
|
- return ['start_time'=>$tim, 'name'=>$result->name, 'num'=>$num];
|
|
|
|
|
|
|
+ return ['start_time'=>$tim, 'name'=>$result->name, 'num'=>$num, 'price'=>$result->price];
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@@ -58,16 +54,21 @@ class WelfareLoginc
|
|
|
/** $mod 0指定数量 1比
|
|
/** $mod 0指定数量 1比
|
|
|
* 获取用户Rwa数量
|
|
* 获取用户Rwa数量
|
|
|
*/
|
|
*/
|
|
|
- public static function getUserRwaNum(int $rwa_num, $mod, $num): int
|
|
|
|
|
|
|
+ public static function getUserRwaProductNum(int $productId, int $rwa_num, $mod, $num): int
|
|
|
{
|
|
{
|
|
|
//读取当日新增数据
|
|
//读取当日新增数据
|
|
|
- $list = UserModel::where('rwa_num', '>=',$rwa_num)->column('id,rwa_num');
|
|
|
|
|
|
|
+ $list = ProductOrder::where('product_id', $productId)->where('status', ProductOrder::Paid)->where('popular_price', '>', config('min_rwa_price'))
|
|
|
|
|
+ ->field('user_id,sum(num) as total_num')
|
|
|
|
|
+ ->group('user_id')
|
|
|
|
|
+ ->field('user_id,count(num) as total_num')
|
|
|
|
|
+ ->group('user_id')
|
|
|
|
|
+ ->having('total_num>='.$rwa_num)->select();
|
|
|
if(empty($list)) return 0;
|
|
if(empty($list)) return 0;
|
|
|
$total = 0; //总数量
|
|
$total = 0; //总数量
|
|
|
if($mod == 1 && $num > 0){
|
|
if($mod == 1 && $num > 0){
|
|
|
$num = bcdiv($num, 100, 2);
|
|
$num = bcdiv($num, 100, 2);
|
|
|
foreach ($list as $item) {
|
|
foreach ($list as $item) {
|
|
|
- $total += bcmul($item, $num);
|
|
|
|
|
|
|
+ $total += bcmul($item->total_num, $num);
|
|
|
}
|
|
}
|
|
|
}else{
|
|
}else{
|
|
|
$total = count($list) * $num;
|
|
$total = count($list) * $num;
|
|
@@ -76,33 +77,27 @@ class WelfareLoginc
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//空投Rwa发放
|
|
//空投Rwa发放
|
|
|
- public static function setUserExRwaNum(int $rwa_num, $productId, $isArea, $orderId, $price, $mod, $num): int
|
|
|
|
|
|
|
+ public static function setUserExRwaNum(int $rwa_num, $productId, $rwaProductId, $isArea, $orderId, $price, $mod, $num): int
|
|
|
{
|
|
{
|
|
|
- //读取当日新增数据
|
|
|
|
|
- //$list = UserModel::where('rwa_num', '>=',$rwa_num)->column('id,rwa_num');
|
|
|
|
|
|
|
+
|
|
|
$total = 0; //总数量
|
|
$total = 0; //总数量
|
|
|
// 使用bcdiv函数进行高精度除法运算,$num除以100,保留两位小数
|
|
// 使用bcdiv函数进行高精度除法运算,$num除以100,保留两位小数
|
|
|
$div = bcdiv($num, 100, 2);
|
|
$div = bcdiv($num, 100, 2);
|
|
|
-
|
|
|
|
|
- // 使用chunk方法分批处理满足条件的用户,每次处理100条
|
|
|
|
|
- UserModel::where('rwa_num', '>=',$rwa_num)->chunk(100,function($users) use($mod,$div,$num,$isArea,$orderId,$price,$productId,&$total){
|
|
|
|
|
- foreach($users as $user){
|
|
|
|
|
- // 根据$mod的值决定是否需要对用户的rwa_num进行乘以$div的运算
|
|
|
|
|
- $num = ($mod == 1)? bcmul($user->rwa_num, $div) : $num;
|
|
|
|
|
- //对$num 取整
|
|
|
|
|
- $num = intval($num);
|
|
|
|
|
-
|
|
|
|
|
|
|
+ $list = ProductOrder::where('status', ProductOrder::Paid)->where('product_id', $rwaProductId)->where('popular_price', '>', config('min_rwa_price'))
|
|
|
|
|
+ ->group('user_id')->having('total_num>='.$rwa_num)
|
|
|
|
|
+ ->field('id,user_id,count(num) as total_num')->select();
|
|
|
|
|
+ $user = new UserModel();
|
|
|
|
|
+ foreach($list as $order){
|
|
|
|
|
+ //根据$mod的值决定是否需要对用户的rwa_num进行乘以$div的运算
|
|
|
|
|
+ $num = ($mod == 1)? bcmul($order->total_num, $div) : $num;
|
|
|
// 尝试为用户设置产品订单,如果成功,则更新用户的rwa_num
|
|
// 尝试为用户设置产品订单,如果成功,则更新用户的rwa_num
|
|
|
- if(!empty(self::setUserProductOrder($num, $isArea, $orderId, $price, $productId, $user->id, ProductOrder::Airdrop))){
|
|
|
|
|
- // $user->rwa_num += $num;
|
|
|
|
|
- // $total +=$user->save();
|
|
|
|
|
-
|
|
|
|
|
|
|
+ if(!empty(self::setUserProductOrder($num, $isArea, $orderId, $price, $productId, $order->user_id, ProductOrder::Airdrop))){
|
|
|
|
|
+
|
|
|
// 调用静态方法更新用户的rwa_num,增加$num的值
|
|
// 调用静态方法更新用户的rwa_num,增加$num的值
|
|
|
- $user::updateForRwaNum($user->id, $user->parent_id, $num, '+');
|
|
|
|
|
|
|
+ $user::updateForRwaNum($order->user_id, $user::getByParentId($order->user_id), $num, '+');
|
|
|
}
|
|
}
|
|
|
- }
|
|
|
|
|
- });
|
|
|
|
|
- return $total;
|
|
|
|
|
|
|
+ }
|
|
|
|
|
+ return $total;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|