|
|
@@ -10,6 +10,7 @@ use app\Request;
|
|
|
use crmeb\services\{UtilService, JsonService};
|
|
|
use think\facade\Config;
|
|
|
use think\facade\Cache;
|
|
|
+use think\facade\Log;
|
|
|
|
|
|
class UserCoinController {
|
|
|
public function status(Request $request) {
|
|
|
@@ -60,19 +61,39 @@ class UserCoinController {
|
|
|
]);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 根据 $step 返回一个新 $step
|
|
|
+ * 新的 $step 值为围绕 旧 $step 周围的随机值,上下波动幅度为 10%
|
|
|
+ */
|
|
|
+ protected function floatStep($step)
|
|
|
+ {
|
|
|
+ $amp = bcdiv($step, 10, 8);
|
|
|
+ $min = bcsub($step, $amp, 8);
|
|
|
+ $max = bcadd($step, $amp, 8);
|
|
|
+ $distance = bcsub($max, $min, 8);
|
|
|
+ $section = bcdiv($distance, 10, 8);
|
|
|
+ return bcmul($section, mt_rand(0, 10), 8) + $min;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 根据上次挖矿状态, 和过去的时长, 计算当前的状态
|
|
|
* @param $p
|
|
|
* @return mixed
|
|
|
*/
|
|
|
protected function calcMining($uid, $p) {
|
|
|
- if ($p['progress'] <= 0) {
|
|
|
+ if (!isset($p['ts']) ||
|
|
|
+ !isset($p['boot']) ||
|
|
|
+ !isset($p['stop']) ||
|
|
|
+ !isset($p['step']) ||
|
|
|
+ !isset($p['progress'])) {
|
|
|
+ Log::warning('error format.');
|
|
|
return $p;
|
|
|
}
|
|
|
- if (!isset($p['ts']) || !isset($p['boot']) || !isset($p['stop']) || !isset($p['step'])) {
|
|
|
- Log::warning('error format.');
|
|
|
+
|
|
|
+ if ($p['progress'] <= 0) {
|
|
|
return $p;
|
|
|
}
|
|
|
+ $step = $this->floatStep($p['step']);
|
|
|
$now = time();
|
|
|
$secs_passed = $now - $p['ts']; // 从上次到现在
|
|
|
//
|
|
|
@@ -82,7 +103,7 @@ class UserCoinController {
|
|
|
$secs_remain = 0;
|
|
|
}
|
|
|
// 本次个数
|
|
|
- $count = floatval(bcmul($p['step'], $secs_remain, 8));
|
|
|
+ $count = floatval(bcmul($step, $secs_remain, 8));
|
|
|
$p['progress'] += floatval(bcadd($p['progress'], $count, 8));
|
|
|
// save to db
|
|
|
UserCoinTransfer::beginTrans();
|
|
|
@@ -101,7 +122,7 @@ class UserCoinController {
|
|
|
return $p;
|
|
|
}
|
|
|
// 进行中
|
|
|
- $count = floatval(bcmul($p['step'], $secs_passed, 8));
|
|
|
+ $count = floatval(bcmul($step, $secs_passed, 8));
|
|
|
$p['progress'] = floatval(bcadd($p['progress'], $count, 8));
|
|
|
$p['ts'] = $now;
|
|
|
|