getInfo(['id' => $legumesId]); if(!$cycleLegumes) throw new Exception('信息不存在'); if((int)$cycleLegumes['status'] != 0) throw new Exception('当前豆豆已分配!'); // 获取时间段所有消费用户 $where = [ [ 'a.pay_time', 'between', [ $cycleLegumes['start_time'], $cycleLegumes['end_time'] ] ],// 指定时间段内 [ 'og.refund_status', 'in', [0, 3] ],// 订单商品未退款 [ 'a.order_status', 'in', [1, 3, 4, 10, 11, 12] ],//待发货、已发货、已收货、已完成、待使用、已使用 ]; $join = [ [ 'order_goods og', 'og.order_id = a.order_id', 'right' ], ]; $field = 'og.order_id,og.order_goods_id,og.member_id,a.order_status,(sum(og.real_goods_money) + sum(og.legumes_integral_money)) as sum_money'; $orderList = model('order')->getList($where,$field,'','a',$join,'og.order_goods_id'); $totalMoney = array_sum(array_column($orderList,'sum_money')); // 获取平台抽成信息 $orderGoodsIds = array_column($orderList,'order_goods_id'); $commissionRecord = model('commission_record')->getList([ ['order_goods_id','in',$orderGoodsIds], ],'order_goods_id,order_id,member_id,integral_money as platform_commission_money'); $totalPlatformCommission = array_sum(array_column($commissionRecord,'platform_commission_money')); $commissionRecord = array_column($commissionRecord,null,'order_goods_id'); // 循环处理 $insertData = []; foreach($orderList as $orderInfo){ // 获取平台抽成信息 $platformCommissionInfo = $commissionRecord[$orderInfo['order_goods_id']] ?? []; if($platformCommissionInfo){ // 计算订单金额占比 必须进行100的偏移计算 $rate = (float)sprintf("%.3f",$platformCommissionInfo['platform_commission_money'] / $totalPlatformCommission * 100); $getLegumes = sprintf("%.4f",$cycleLegumes['legumes_num'] * $rate / 100); // 信息记录 $insertData[] = [ 'member_id' => $orderInfo['member_id'], 'legumes_id' => $legumesId, 'order_id' => $orderInfo['order_id'], 'order_goods_id' => $orderInfo['order_goods_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['order_status'],[10,12]) ? 1 : 0, ]; } } // 添加数据 if(count($insertData) > 0) model('commission_legumes_log')->addList($insertData); // 修改豆豆周期分配状态 model('commission_legumes')->update(['status' => 1],[ ['id', '=', $legumesId] ]); // 触发全平台豆豆转积分操作 Queue::push(ComputeIntegralJob::class); Db::commit(); } catch(\Exception $e){ Db::rollback(); $data['error_msg'] = $e->getMessage(); trace($data, '平台抽成 - 豆豆分配 - 失败'); } $job->delete(); } public function failed($data){ trace($data, '平台抽成 - 豆豆分配 - 失败(failed)'); } }