make(LegumesRepository::class)->getLegumes($data['legumes_id']); if(!$cycleLegumes) throw new \Exception('信息不存在'); if((int)$cycleLegumes['status'] != 0) throw new \Exception('当前豆豆已分配!'); // 获取时间段所有消费用户 $orderList = StoreOrder::whereNotIn('status',[-1,11]) ->field('order_id,uid,status,(sum(pay_price) + sum(use_legumes_integral)) as sum_money') ->whereBetweenTime('pay_time',$cycleLegumes['start_time'],$cycleLegumes['end_time']) ->group('order_id') ->select() ->toArray(); $totalMoney = array_sum(array_column($orderList,'sum_money')); // 获取平台抽成信息 $orderIds = array_column($orderList,'order_id'); $platformCommissionRecord = Record::whereIn('order_id',$orderIds) ->field('order_id,uid,platform_commission_money') ->select() ->toArray(); $totalPlatformCommission = array_sum(array_column($platformCommissionRecord,'platform_commission_money')); $platformCommissionRecord = array_column($platformCommissionRecord,null,'order_id'); $insertData = []; foreach($orderList as $orderInfo){ // 获取平台抽成信息 $platformCommissionInfo = $platformCommissionRecord[$orderInfo['order_id']] ?? []; // 计算订单金额占比 必须进行100的偏移计算 // $rate = (float)sprintf("%.3f",$orderInfo['sum_money'] / $totalMoney * 100); $rate = (float)sprintf("%.3f",$platformCommissionInfo['platform_commission_money'] / $totalPlatformCommission * 100); $getLegumes = sprintf("%.3f",$cycleLegumes['legumes_num'] * $rate / 100); // 信息记录 $insertData[] = [ 'uid' => $orderInfo['uid'], 'legumes_id' => $data['legumes_id'], 'order_id' => $orderInfo['order_id'], 'cycle_total_legumes' => $cycleLegumes['legumes_num'], 'total_sales_money' => $totalMoney, 'order_money' => $orderInfo['sum_money'], 'order_money_rate' => $rate, 'get_legumes' => $getLegumes, 'status' => in_array((int)$orderInfo['status'],[2,3]) ? 1 : 0, ]; } // 添加数据 if(count($insertData) > 0) app()->make(LegumesLogRepository::class)->insertAll($insertData); // 修改豆豆周期分配状态 app()->make(LegumesRepository::class)->update($data['legumes_id'],[ 'status' => 1 ]); // 触发全平台豆豆转积分操作 Queue::push(ComputeIntegralJob::class); } catch(\Exception $e){ $data['error_msg'] = $e->getMessage(); Log::info('给昨日消费者分豆豆 - 失败: '.var_export($data,1)); } $job->delete(); } public function failed($data){ Log::info('给本周期内消费者分豆豆 - 失败(failed): '.var_export($data,1)); } }