whereIn('agency', $son_agency); } public function scopeDirectlySon($query, $directlySon) { $query->whereIn('agency', $directlySon); } public function agencyId() { return $this->belongsTo(AgencyUser::class, 'agency', 'username'); } public static function get_count_agency_amount(array $param, string $agency, array $cdk_code) { $agency_result = AgencyUser::where(['username' => $agency])->with([ 'parent' => function ($query) { $query->field('id, username, parent_id, grandpa_id, tax'); }, 'grandpa' => function ($query) { $query->field('id, username, parent_id, grandpa_id, tax'); }, ])->field('id, username, level, parent_id, grandpa_id, tax')->find(); $money = round(($agency_result['tax'] / 100) * $cdk_code['money'], 2); $data = [ 'amount' => $cdk_code['money'], 'money' => $money, 'account' => $param['account'], 'agency' => $agency, 'role_id' => $param['role_id'], 'cdk_code' => $param['cdk_code'], 'create_time' => time(), ]; $sql[] = self::fetchSql(true)->insert($data); $sql[] = AgencyUser::fetchSql(true)->whereIn('username', $agency) ->setInc('money', $money); switch ($agency_result['level']) { case 2 : if (!empty($agency_result['parent'])) { $money = round(($agency_result['parent']['tax'] / 100) * $cdk_code['money'], 2); $data = [ 'amount' => $cdk_code['money'], 'money' => $money, 'account' => $param['account'], 'agency' => $agency_result['parent']['username'], 'role_id' => $param['role_id'], 'cdk_code' => $param['cdk_code'], 'create_time' => time(), ]; $sql[] = self::fetchSql(true)->insert($data); $sql[] = AgencyUser::fetchSql(true) ->whereIn('username', $agency_result['parent']['username']) ->setInc('money', $money); } break; case 3 : if (!empty($agency_result['parent'])) { $money = round(($agency_result['parent']['tax'] / 100) * $cdk_code['money'], 2); $data = [ 'amount' => $cdk_code['money'], 'money' => $money, 'account' => $param['account'], 'agency' => $agency_result['parent']['username'], 'role_id' => $param['role_id'], 'cdk_code' => $param['cdk_code'], 'create_time' => time(), ]; $sql[] = self::fetchSql(true)->insert($data); $sql[] = AgencyUser::fetchSql(true) ->whereIn('username', $agency_result['parent']['username']) ->setInc('money', $money); } if (!empty($agency_result['grandpa'])) { $money = round(($agency_result['grandpa']['tax'] / 100) * $cdk_code['money'], 2); $data = [ 'amount' => $cdk_code['money'], 'money' => $money, 'account' => $param['account'], 'agency' => $agency_result['grandpa']['username'], 'role_id' => $param['role_id'], 'cdk_code' => $param['cdk_code'], 'create_time' => time(), ]; $sql[] = self::fetchSql(true)->insert($data); $sql[] = AgencyUser::fetchSql(true) ->whereIn('username', $agency_result['grandpa']['username']) ->setInc('money', $money); } break; } self::startTrans(); try { foreach ($sql as $key => $value) { self::execute($value); } self::commit(); return true; } catch (\Exception $exception) { self::rollback(); return false; } } }