Files
cunkebao_v3/Server/application/cunkebao/controller/wechat/GetWechatOnDeviceSummarizeV1Controller.php

181 lines
5.0 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
namespace app\cunkebao\controller\wechat;
use AccountWeight\WechatAccountWeightAssessment;
use app\common\model\WechatFriendShip as WechatFriendShipModel;
use app\common\model\WechatRestricts as WechatRestrictsModel;
use app\cunkebao\controller\BaseController;
use library\ResponseHelper;
/**
* 设备微信控制器
*/
class GetWechatOnDeviceSummarizeV1Controller extends BaseController
{
/**
* TODO 计算账号年龄(从创建时间到现在)
*
* @param string $wechatId
* @return string
*/
protected function getRegisterDate(string $wechatId): string
{
return date('Y-m-d H:i:s', strtotime('-15 months'));
}
/**
* TODO 获取每天聊天次数。
*
* @param string $wechatId
* @return int
*/
protected function getChatTimesPerDay(string $wechatId): int
{
return mt_rand(0, 100);
}
/**
* TODO 总聊天数量
*
* @param string $wechatId
* @return int
*/
protected function getChatTimesTotal(string $wechatId): int
{
return mt_rand(100, 1000000);
}
/**
* 计算活跃程度(根据消息数)
*
* @param string $wechatId
* @return string
*/
protected function getActivityLevel(string $wechatId): array
{
return [
'allTimes' => $this->getChatTimesTotal($wechatId),
'dayTimes' => $this->getChatTimesPerDay($wechatId),
];
}
/**
* 获取限制记录
*
* @param string $wechatId
* @return array
*/
protected function getRestrict(string $wechatId): array
{
return WechatRestrictsModel::alias('r')
->field(
[
'r.id', 'r.restrictTime date', 'r.level', 'r.reason'
]
)
->where('r.wechatId', $wechatId)->select()
->toArray();
}
/**
* 计算好友数量每5权重=1好友最多20个
*
* @param int $weight
* @return int
*/
protected function _calAllowedFriends(int $weight): int
{
$adjustedWeight = $weight;
$lastDigit = $weight % 10;
if ($weight < 10) {
if ($lastDigit < 5) {
$adjustedWeight = 5;
} else {
$adjustedWeight = 10;
}
}
return min(20, floor($adjustedWeight / 5));
}
/**
* 获取账号权重
*
* @param string $wechatId
* @return array
*/
protected function getAccountWeight(string $wechatId): array
{
// 微信账号加友权重评估
$assessment = $this->classTable->getInstance(WechatAccountWeightAssessment::class);
$assessment->settingFactor($wechatId);
return [
'ageWeight' => $assessment->calculAgeWeight()->getResult(), // 账号年龄权重
'activityWeigth' => $assessment->calculActivityWeigth()->getResult(), // 计算活跃度权重
'restrictWeight' => $assessment->calculRestrictWeigth()->getResult(), // 计算限制影响权重
'realNameWeight' => $assessment->calculRealNameWeigth()->getResult(), // 计算实名认证权重
'scope' => $assessment->getWeightScope(), // 计算总分
];
}
/**
* 计算今日新增好友数量
*
* @param string $ownerWechatId
* @return int
*/
protected function getTodayNewFriendCount(string $ownerWechatId): int
{
return WechatFriendShipModel::where(compact('ownerWechatId'))
->whereBetween('createTime',
[
strtotime(date('Y-m-d 00:00:00')),
strtotime(date('Y-m-d 23:59:59'))
]
)
->count('*');
}
/**
* 获取账号加友统计数据.
*
* @param string $wechatId
* @return array
*/
protected function getStatistics(string $wechatId): array
{
$scope = $this->classTable->getInstance(WechatAccountWeightAssessment::class)->getWeightScope();
return [
'todayAdded' => $this->getTodayNewFriendCount($wechatId),
'addLimit' => $this->_calAllowedFriends($scope)
];
}
/**
* 获取微信号详情
*
* @return \think\response\Json
*/
public function index()
{
try {
$wechatId = $this->request->param('id/s');
return ResponseHelper::success(
[
'accountAge' => $this->getRegisterDate($wechatId),
'activityLevel' => $this->getActivityLevel($wechatId),
'accountWeight' => $this->getAccountWeight($wechatId),
'statistics' => $this->getStatistics($wechatId),
'restrictions' => $this->getRestrict($wechatId),
]
);
} catch (\Exception $e) {
return ResponseHelper::error($e->getMessage(), $e->getCode());
}
}
}