88 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			PHP
		
	
	
		
		
			
		
	
	
			88 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			PHP
		
	
	
|  | <?php | ||
|  | 
 | ||
|  | namespace app\model; | ||
|  | 
 | ||
|  | use Exception; | ||
|  | use think\db\exception\DataNotFoundException; | ||
|  | use think\db\exception\DbException; | ||
|  | use think\db\exception\ModelNotFoundException; | ||
|  | use think\model\relation\HasOne; | ||
|  | 
 | ||
|  | class Overview extends Base | ||
|  | { | ||
|  |     /** | ||
|  |      * 用户 | ||
|  |      * | ||
|  |      * @return HasOne | ||
|  |      */ | ||
|  |     public function account(): HasOne | ||
|  |     { | ||
|  |         return $this->hasOne(Account::class, 'id', 'account_id'); | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * 员工 | ||
|  |      * | ||
|  |      * @return HasOne | ||
|  |      */ | ||
|  |     public function staff(): HasOne | ||
|  |     { | ||
|  |         return $this->hasOne(Staff::class, 'account_id', 'account_id'); | ||
|  |     } | ||
|  | 
 | ||
|  |     /** | ||
|  |      * 统计数据更新 | ||
|  |      * | ||
|  |      * @param  int  $accountId | ||
|  |      * @param  string  $action  操作 AccountRecord表的操作 | ||
|  |      * @return bool | ||
|  |      * @throws DataNotFoundException | ||
|  |      * @throws DbException | ||
|  |      * @throws ModelNotFoundException | ||
|  |      */ | ||
|  |     public static function renew(int $accountId, string $action): bool | ||
|  |     { | ||
|  |         if (!$account = Account::findById($accountId)) { | ||
|  |             \think\facade\Log::error('数据统计 overview 当前用户不存在'); | ||
|  |             return true; | ||
|  |         } | ||
|  | 
 | ||
|  |         // 不允许 上级的操作 即 分享、收藏和查看 不增加上级的相关记录
 | ||
|  |         $notParentAction = [AccountRecord::ACTION_SHARE, AccountRecord::ACTION_VIEW, AccountRecord::ACTION_COLLECT]; | ||
|  |         // 只更新自己数据的操作  分享和分享内容被查看
 | ||
|  |         if (in_array($action, [AccountRecord::ACTION_SHARE, AccountRecord::ACTION_SHARE_VIEW])) { | ||
|  |             $field = AccountRecord::actionField()[$action] ?? null; | ||
|  |             if (!$field) { | ||
|  |                 throw new Exception('操作错误'); | ||
|  |             } | ||
|  |             if ($info = Overview::findOne(['account_id' => $accountId])) { | ||
|  |                 $info->inc($field)->update(); | ||
|  |             } else { | ||
|  |                 Overview::create([ | ||
|  |                     'account_id' => $accountId, | ||
|  |                     $field       => 1 | ||
|  |                 ]); | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         // 更新上级
 | ||
|  |         if ($account['inviter_account_id'] > 0 && !in_array($action, $notParentAction)) { | ||
|  |             if ($parent = Overview::findOne(['account_id' => $account['inviter_account_id']])) { | ||
|  |                 $field = AccountRecord::overviewField()[$action] ?? null; | ||
|  |                 if ($field) { | ||
|  |                     $parent->inc($field)->update(); | ||
|  |                 } | ||
|  |             } else { | ||
|  |                 Overview::create([ | ||
|  |                     'account_id' => $account['inviter_account_id'], | ||
|  |                     'shares'     => 0, | ||
|  |                     'views'      => $action == AccountRecord::ACTION_VIEW ? 1 : 0, | ||
|  |                     'customer'   => $action == AccountRecord::ACTION_REGISTER ? 1 : 0, | ||
|  |                     'asks'       => $action == AccountRecord::ACTION_SHARE ? 1 : 0, | ||
|  |                 ]); | ||
|  |             } | ||
|  |         } | ||
|  |         return true; | ||
|  |     } | ||
|  | } |