Team.php 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  1. <?php
  2. namespace app\common\logic;
  3. use app\common\model\Config;
  4. use app\common\model\EtcWithdrawRecordModel;
  5. use app\common\model\LedgerQubicChangeModel;
  6. use app\common\model\LedgerSmhChangeModel;
  7. use app\common\model\LedgerTokenChangeModel;
  8. use app\common\model\LedgerUsdtChangeModel;
  9. use app\common\model\LedgerWalletModel;
  10. use app\common\model\OfflineRechargeRecordModel;
  11. use app\common\model\ParametersModel;
  12. use app\common\model\SmhWithdrawRecordModel;
  13. use app\common\model\TimedTaskLogModel;
  14. use app\common\model\UserModel;
  15. use app\common\model\UserPathModel;
  16. use fast\Action;
  17. use fast\Asset;
  18. use fast\MembershipLevel;
  19. use think\Cache;
  20. use think\Db;
  21. use think\Log;
  22. use think\Model;
  23. use think\console\Output;
  24. use fast\Http;
  25. /**
  26. * 团队奖励发放逻辑
  27. * 定时任务,定时发放,每天一次,一般在凌晨12一过开始
  28. */
  29. class Team
  30. {
  31. /**
  32. * 奖励名称及类型ID
  33. * @var array
  34. */
  35. private array $rewards_type = [
  36. 1 => 'SMH拨币',
  37. 2 => 'Qubic拨币',
  38. 3 => '团队算力分红',
  39. 4 => '团队算力平级奖',
  40. 5 => '市场分红',
  41. 6 => '加权分红',
  42. 7 => '公司推荐奖',
  43. 8 => '保持等级',
  44. 9 => 'ETC拨币',
  45. 10 => 'SMH拨币',
  46. 11 => 'Aleo拨币',
  47. ];
  48. /**
  49. * 拨币
  50. * 向会员发放SMH
  51. * 每一万算力每天收益9-10个币
  52. */
  53. public function AllocateSmh()
  54. {
  55. $type_id = 1;
  56. $date = $this->getExeDate($type_id);
  57. if(empty($date)){
  58. (new Output())->writeln("本次没有可用时间:" . $date);
  59. return ;
  60. }
  61. //创建定时任务执行日志
  62. $log_id = (new TimedTaskLogModel())->insertGetId([
  63. 'type_id' => $type_id,
  64. 'type_name' => $this->rewards_type[$type_id],
  65. 'date_time' => $date,
  66. 'create_time' => date('Y-m-d H:i:s'),
  67. ]);
  68. //查找会员资产列表
  69. $info_list = DB::table('ledger_wallet')
  70. ->alias('w')
  71. ->join('user u','u.id = w.user_id')
  72. ->field('user_id,power')
  73. ->where('power', '>', 0)
  74. ->where('effective_time', '>', 0) //报单有收益
  75. ->select();
  76. if(empty($info_list)){
  77. (new Output())->writeln("本次没有可用会员数据:" . $date);
  78. return $log_id;
  79. }
  80. $num =rand(3000,4000);
  81. $power_smh_price = $num/10000/1000;//每算力每日获得SMH的数量,算法为每一万算力每日产10个SMH
  82. foreach ($info_list as $info) {
  83. $amount = ($info['power']) * $power_smh_price;
  84. $check = (new LedgerSmhChangeModel())
  85. ->where('user_id', $info['user_id'])
  86. ->where('action', LedgerSmhChangeModel::SysSend)
  87. ->where('from_id', strtotime($date))
  88. ->count();
  89. if($check){
  90. dump('用户ID:' . $info['user_id'] . '已拨过,拨币量为:' . $amount);
  91. }else{
  92. dump(['用户ID:' . $info['user_id'],'拨币量为:' . $amount]);
  93. //发放
  94. (new LedgerWalletModel)->changeWalletAccount($info['user_id'], Asset::SMH, $amount, LedgerSmhChangeModel::SysSend);
  95. }
  96. }
  97. return $log_id;
  98. }
  99. /**
  100. * 拨币
  101. * 向会员发放qubic
  102. * 每一万算力每天收益14-15万个币
  103. */
  104. public function AllocateQubic()
  105. {
  106. $type_id = 2;
  107. $date = $this->getExeDate($type_id);
  108. if(empty($date)){
  109. (new Output())->writeln("本次没有可用时间:" . $date);
  110. return ;
  111. }
  112. //创建定时任务执行日志
  113. $log_id = (new TimedTaskLogModel())->insertGetId([
  114. 'type_id' => $type_id,
  115. 'type_name' => $this->rewards_type[$type_id],
  116. 'date_time' => $date,
  117. 'create_time' => date('Y-m-d H:i:s'),
  118. ]);
  119. //查找会员资产列表
  120. $info_list = DB::table('ledger_wallet')
  121. ->alias('w')
  122. ->join('user u','u.id = w.user_id')
  123. ->field('user_id,power')
  124. ->where('power', '>', 0)
  125. ->where('effective_time', '>', 0) //报单有收益
  126. ->select();
  127. if(empty($info_list)){
  128. (new Output())->writeln("本次没有可用会员数据:" . $date);
  129. return $log_id;
  130. }
  131. $num =rand(120000,130000);
  132. $power_price = $num/10000;//每算力每日获得SMH的数量,算法为每一万算力每日产15万个Qubic
  133. foreach ($info_list as $info) {
  134. $amount = ($info['power']) * $power_price;
  135. $check = (new LedgerQubicChangeModel())
  136. ->where('user_id', $info['user_id'])
  137. ->where('action', LedgerQubicChangeModel::SysSend)
  138. ->where('from_id', strtotime($date))
  139. ->count();
  140. if($check){
  141. dump('用户ID:' . $info['user_id'] . '已拨过,拨币量为:' . $amount);
  142. }else{
  143. dump(['用户ID:' . $info['user_id'],'拨币量为:' . $amount]);
  144. //发放
  145. (new LedgerWalletModel)->changeWalletAccount($info['user_id'], Asset::QUBIC, $amount, LedgerQubicChangeModel::SysSend);
  146. }
  147. }
  148. return $log_id;
  149. }
  150. /**
  151. * 拨币
  152. * 向会员发放qubic
  153. * 每一万算力每天收益14-15万个币
  154. */
  155. public function AllocateAleo()
  156. {
  157. $type_id = 11;
  158. $date = $this->getExeDate($type_id);
  159. if(empty($date)){
  160. (new Output())->writeln("本次没有可用时间:" . $date);
  161. return ;
  162. }
  163. //创建定时任务执行日志
  164. $log_id = (new TimedTaskLogModel())->insertGetId([
  165. 'type_id' => $type_id,
  166. 'type_name' => $this->rewards_type[$type_id],
  167. 'date_time' => $date,
  168. 'create_time' => date('Y-m-d H:i:s'),
  169. ]);
  170. //查找会员资产列表
  171. $info_list = DB::table('ledger_wallet')
  172. ->alias('w')
  173. ->join('user u','u.id = w.user_id')
  174. ->field('user_id,power')
  175. ->where('power', '>', 0)
  176. ->where('effective_time', '>', 0) //报单有收益
  177. ->select();
  178. if(empty($info_list)){
  179. (new Output())->writeln("本次没有可用会员数据:" . $date);
  180. return $log_id;
  181. }
  182. $num = mt_rand(4030,4080) / 1000;//每一万算力每日获得Aleo的数量,算法为每一万算力每日产6.5个币,并从2024-9-20开始,每天递减5%
  183. // $date1 = '2024-9-26';
  184. // $date2 = date('Y-m-d');
  185. // $diff = strtotime($date2) - strtotime($date1);
  186. // // 将时间戳差转换为天数
  187. // $days = floor($diff / (60 * 60 * 24));
  188. // if($days > 0){
  189. // //每日递减3%
  190. // $num = $num * pow((1-0.03), $days);
  191. // }
  192. // if($num < 4){
  193. // $num = $num = mt_rand(3500,4500) / 1000;//每一万算力保底3个币
  194. // }
  195. $power_price = $num/10000;//每算力每日获得Aleo的数量,算法为每一万算力每日产6.5个币,并从2024-9-20开始,每天递减5%
  196. foreach ($info_list as $info) {
  197. $amount = ($info['power']) * $power_price;
  198. $check = (new LedgerQubicChangeModel())
  199. ->where('user_id', $info['user_id'])
  200. ->where('action', LedgerTokenChangeModel::SysSend)
  201. ->where('from_id', strtotime($date))
  202. ->count();
  203. if($check){
  204. dump('用户ID:' . $info['user_id'] . '已拨过,拨币量为:' . $amount);
  205. }else{
  206. dump(['用户ID:' . $info['user_id'],'拨币量为:' . $amount]);
  207. //发放
  208. (new LedgerWalletModel)->changeWalletAccount($info['user_id'], Asset::TOKEN, $amount, LedgerTokenChangeModel::SysSend);
  209. }
  210. }
  211. return $log_id;
  212. }
  213. /**
  214. * 获取可用日期
  215. * @var array
  216. */
  217. protected function getExeDate($type_id = 1)
  218. {
  219. $today = date('Y-m-d',strtotime("-1day"));//当前时间减一天为最后一次可用时间
  220. $dateInfo = DB::table('timed_task_log')
  221. ->where('type_id' ,$type_id)
  222. ->where('status', 1)
  223. ->order('date_time', 'desc')
  224. ->find();
  225. if(empty($dateInfo)){//首次
  226. return $today;
  227. }
  228. $new_date = date('Y-m-d',strtotime("+1day",strtotime($dateInfo['date_time'])));//最后一次发放日期+1天为本次执行时间
  229. if($new_date > $today){//超过今天
  230. return "";
  231. }
  232. return $new_date;
  233. }
  234. }