要求实现这样一个功能(亲S爱B的客户)
想同时设置多个时间段的,怎么实现呢,例如,10001.10020.10080.在8.30自动转,10086..10000.7852.在8.30.01自动转,1896.8569.0852.在8.30.02自动转
我大概理解了,意思就是 用户ID与ID之间转账 不过是设定好的时间转出去,而且时间是不确定的,可能是20:30:08秒 可能是20:30:22秒,那么用服务器的定时任务是肯定行不通了
emmm。。。绞尽脑汁
看下php定时任务吧、网上说的天花乱坠,蛋疼中。
具体转账的业务代码块就如下了 查询到现在前3秒 后3秒没有处理的单就处理掉 不过怎么让他自动跑起来呢
//任务块 public functionruntaskblock(){
try {
db()->startTrans();
//获取当前时间 $now = time();
$start = $now - 3;
$end = $start + 3;
$where = [];
$where['sendtime'] = array('between',$start.",".$end);
$where['status'] = array('eq',0);
$list = db("com_plat")->where($where)->select();
if ($list) {
foreach ($list as $k => $v) {
$users = json_decode($v['senduid']);
$recvuid = $v['recvuid'];
foreach ($users as $i => $u) {
if ($u == $recvuid) {
continue;
}
$usercoin = db("capital_user_coin")->where(['uid'=>$u])->find();
$user_coin_in = db('capital_user_coin')->where(['uid'=> $recvuid])->find();
//转账金额 $amount = $v['amount'];
if (!$usercoin || $usercoin['ebao'] - $amount <0) {
continue;
}
db('capital_user_coin')->where(['uid'=> $u])->update([
'ebao' => ['exp', "ebao-{$amount}"],
]);
db('capital_user_coin')->where(['uid'=> $recvuid])->update([
'ebao'=> ['exp', "ebao+{$amount}"],
]);
//转账人支出 db('capital_user_coin_log')->insert([
'uid'=> $u,
'amount'=> $amount,
'now'=> $usercoin['ebao'] - $amount,
'type'=> 1, // [0: '增加', 1: '减少'] 'kind'=> 8, // [8: '转账'] 'coin_code'=> 'ebao',
'remark'=> "转账金额-".$amount.'-收款人-'.$recvuid,
'addtime'=>date('Y-m-d H:i:s'),
]);
//接收人增加 db('capital_user_coin_log')->insert([
'uid'=> $recvuid,
'amount'=> $amount,
'now'=> $user_coin_in['ebao'] + $amount,
'type'=> 0, // [0: '增加', 1: '减少'] 'kind'=> 8, // [8: '转账'] 'coin_code'=> 'ebao',
'remark'=> "收款金额".$amount.'-付款人-'.$u,
'addtime'=>date('Y-m-d H:i:s'),
]);
db("com_plat")->where(['id'=>$v['id']])->update(['status'=>1]);
}
}
db()->commit();
}
}
catch(Exception $e)
{
file_put_contents("platlog.txt",$e->getMessage()."\n",FILE_APPEND);
db()->rollback();
}
}
瞬间想到 swoole(不熟)、js轮询、还有试了php自己带的关掉浏览器照样执行 各种行不通
哎 聪明的我想到了python 虽然不会 但还是喀喀喀搞定了
新建一个plat.py (皮肉交易) 脚本 代码如下
#!/usr/bin/python# -*- coding: UTF-8 -*-import requests #导入requests包import time
url = 'http://www.fuck86.com'while (True):
print(url)
r = requests.get(url)
print(r.status_code)
time.sleep(2)
又百度了下py的后台任务
服务器又装了py2 又有py3 可能是同事搞的,途中又是各种报错,各种不兼容
最终解决方案 是下面一条命令 具体什么意思 搞不懂 凑合用吧
nohup python3 -u plat.py > platout.log2>&1&
总而言之,言而总之,算是跑起来了
2秒请求一次,一次把当前3秒前3秒后没处理的单子处理掉,就这么地吧,急着要也没办法
最后告诉客户 有问题不要找我了 水平太菜 没办法
文章出处《记一次蛋疼的PHP后台任务》