|
@@ -4,247 +4,109 @@ namespace app\index\controller;
|
|
|
|
|
|
use think\Controller;
|
|
|
use think\Db;
|
|
|
-use think\Cache;
|
|
|
-use app\common\model\Wenzhenorder;
|
|
|
|
|
|
class Plantask extends Controller
|
|
|
{
|
|
|
- //未支付订单,下单N分钟后,自动取消
|
|
|
- public function auto_cancel_nopay_order(){
|
|
|
- $nowtime = time();
|
|
|
- $second = config('site.nopay_order_autocancel_minute') * 60;
|
|
|
- $lasttime = $nowtime - $second;
|
|
|
-
|
|
|
- //dump(datetime($lasttime));exit;
|
|
|
- $rs = Db::name('wenzhen_order')->where('status',0)->where('createtime','lt',$lasttime)->update([
|
|
|
- 'status' => 3,
|
|
|
- 'cancel_time' => $nowtime,
|
|
|
- 'cancel_reason' => '超时未支付',
|
|
|
- 'finish_time' => $nowtime,
|
|
|
- ]);
|
|
|
- echo $rs;
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- //待接诊订单,医生不操作,支付N分钟后,自动退诊,即时视频订单除外
|
|
|
- public function auto_tuizhen_noaccept_order(){
|
|
|
- $nowtime = time();
|
|
|
- $second = config('site.payorder_noaccept_autotuizhen_minute') * 60;
|
|
|
- $lasttime = $nowtime - $second;
|
|
|
-
|
|
|
- //dump(datetime($lasttime));exit;
|
|
|
- Db::startTrans();
|
|
|
-
|
|
|
- $wenzhen_order = Db::name('wenzhen_order')->where('status',10)->where('video_model','NEQ',2)->where('pay_time','lt',$lasttime)->order('id asc')->lock(true)->find();
|
|
|
- if(empty($order_list)){
|
|
|
- Db::rollback();
|
|
|
- echo 'empty';
|
|
|
+ //每月初自动结算上个月的业绩
|
|
|
+ public function auto_yeji(){
|
|
|
+ $date = date('Ym').'01';
|
|
|
+
|
|
|
+ //找一个没结算的
|
|
|
+ $wallet = Db::name('user_wallet')->where('last_jiesuan_date','lt',$date)->order('id asc')->find();
|
|
|
+ if(empty($wallet)){
|
|
|
+ echo $date.'没有了';
|
|
|
exit;
|
|
|
}
|
|
|
|
|
|
- $order_id = $wenzhen_order['id'];
|
|
|
+ echo $date.'开始'.$wallet['user_id'];
|
|
|
|
|
|
- //修改订单
|
|
|
- $update = [
|
|
|
- 'status' => 16,
|
|
|
- 'cancel_time' => $nowtime,
|
|
|
- 'cancel_reason' => '超时未接诊',
|
|
|
- 'finish_time' => $nowtime,
|
|
|
- ];
|
|
|
+ //直推
|
|
|
+ $list = $this->get_my_down_list($wallet);
|
|
|
+ $down_uids = array_column($list,'user_id');
|
|
|
|
|
|
- //余额支付的直接退款
|
|
|
- if($wenzhen_order['comefrom'] == 1){
|
|
|
- if($wenzhen_order['pay_type'] == 'wallet'){
|
|
|
+ //间推
|
|
|
+ $list2 = $this->get_my_downdown_list($down_uids,$wallet);
|
|
|
+ $down_down_uids = array_column($list2,'user_id');
|
|
|
|
|
|
- //用户加钱
|
|
|
- $logtype = $wenzhen_order['ordertype'] == 1 ? 13 : 14;
|
|
|
- $rs_wallet = model('wallet')->lockChangeAccountRemain($wenzhen_order['user_id'],'money',$wenzhen_order['total_fee'],$logtype,$remark='超时未接诊','wenzhen_order',$order_id);
|
|
|
- if($rs_wallet['status'] === false){
|
|
|
- Db::rollback();
|
|
|
- echo $rs_wallet['msg'];
|
|
|
- exit;
|
|
|
- }
|
|
|
+ //团队ids
|
|
|
+ $tuandui_ids = array_merge($down_uids,$down_down_uids);
|
|
|
|
|
|
- //订单退款参数
|
|
|
- $update['refund_price'] = $wenzhen_order['total_fee'];
|
|
|
- $update['refund_status'] = 3;
|
|
|
- }elseif($wenzhen_order['pay_type'] == 'wechat' || $wenzhen_order['pay_type'] == 'alipay'){
|
|
|
- $update['refund_status'] = 1; //待退款
|
|
|
-
|
|
|
- //发起退款
|
|
|
- $Wenzhenorder_model = new Wenzhenorder;
|
|
|
- $refund_rs = $Wenzhenorder_model->old_refund($wenzhen_order,$wenzhen_order['total_fee']);
|
|
|
- if($refund_rs === true){
|
|
|
- $update['refund_status'] = 3; //退款完成
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ $tuandui_ids[] = $wallet['user_id'];
|
|
|
|
|
|
- $update_rs = Db::name('wenzhen_order')->where('id',$order_id)->update($update);
|
|
|
- if(!$update_rs){
|
|
|
- Db::rollback();
|
|
|
- echo '退诊失败';
|
|
|
- exit;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- Db::commit();
|
|
|
- echo '退诊成功'.$order_id.'结束';
|
|
|
- exit;
|
|
|
+ //团队总业绩
|
|
|
+ $tuanduizongyeji = Db::name('pay_order')
|
|
|
+ ->where('user_id','IN',$tuandui_ids)
|
|
|
+ ->where('table_name','money_recharge')
|
|
|
+ ->where('order_status',1)
|
|
|
+ ->whereTime('createtime','month')
|
|
|
+ ->sum('order_amount');
|
|
|
|
|
|
+ //我所在等级的比例
|
|
|
+ $bili = Db::name('intro_level_config')->where('id',$wallet['intro_level'])->value('intro_bili');
|
|
|
+ $bili = $bili ?: 0;
|
|
|
|
|
|
- }
|
|
|
-
|
|
|
- //app视频订单,已拨打,通话N分钟后,自动结束
|
|
|
- public function auto_finish_firstvideo_videoorder(){
|
|
|
- $nowtime = time();
|
|
|
- $second = config('site.firstvideo_videoorder_autofinish_minute') * 60;
|
|
|
- $lasttime = $nowtime - $second;
|
|
|
+ $yongjin = bcdiv(bcmul($tuanduizongyeji,$bili,2),100,2);
|
|
|
|
|
|
- $list = Db::name('wenzhen_order')->where('status',25)->where('ordertype',2)->where('comefrom',1)->where('video_time','lt',$lasttime)->limit(10)->select();
|
|
|
-
|
|
|
- if(empty($list)){
|
|
|
- echo 'empty';exit;
|
|
|
- }
|
|
|
-
|
|
|
- foreach($list as $key => $order){
|
|
|
- echo $order['id'].':'.$this->finish($order['id']);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- //TV视频订单,已拨打,通话N分钟后,自动结束
|
|
|
- public function auto_finish_firstvideo_videoorder_tv(){
|
|
|
- $nowtime = time();
|
|
|
- $second = config('site.tv_firstvideo_videoorder_autofinish_minute') * 60;
|
|
|
- $lasttime = $nowtime - $second;
|
|
|
-
|
|
|
- $list = Db::name('wenzhen_order')->where('status',25)->where('ordertype',2)->where('comefrom',2)->where('video_time','lt',$lasttime)->limit(10)->select();
|
|
|
-
|
|
|
- if(empty($list)){
|
|
|
- echo 'empty';exit;
|
|
|
- }
|
|
|
-
|
|
|
- foreach($list as $key => $order){
|
|
|
- echo $order['id'].':'.$this->finish($order['id']);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- //图文订单,已接诊,接诊N分钟后,自动结束
|
|
|
- public function auto_finish_accept_textorder(){
|
|
|
- $nowtime = time();
|
|
|
- $second = config('site.accept_textorder_autofinish_minute') * 60;
|
|
|
- $lasttime = $nowtime - $second;
|
|
|
-
|
|
|
- $list = Db::name('wenzhen_order')->where('status',20)->where('ordertype',1)->where('accept_time','lt',$lasttime)->limit(10)->select();
|
|
|
- if(empty($list)){
|
|
|
- echo 'empty';exit;
|
|
|
- }
|
|
|
-
|
|
|
- foreach($list as $key => $order){
|
|
|
- echo $order['id'].':'.$this->finish($order['id']);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- public function finish($order_id){
|
|
|
-
|
|
|
- //订单详情
|
|
|
Db::startTrans();
|
|
|
- $wenzhen_order = Db::name('wenzhen_order')->where('id',$order_id)->lock(true)->find();
|
|
|
- if(empty($wenzhen_order)){
|
|
|
- Db::rollback();
|
|
|
- //$this->error('不存在的订单');
|
|
|
- return '不存在的订单';
|
|
|
- }
|
|
|
-
|
|
|
- if($wenzhen_order['ordertype'] == 1){
|
|
|
- if($wenzhen_order['status'] != 20){
|
|
|
- Db::rollback();
|
|
|
- //$this->error('已接诊订单才能完成');
|
|
|
- return '已接诊订单才能完成';
|
|
|
- }
|
|
|
-
|
|
|
- $old_status = 20;
|
|
|
- }
|
|
|
- if($wenzhen_order['ordertype'] == 2){
|
|
|
- if($wenzhen_order['status'] != 25){
|
|
|
- Db::rollback();
|
|
|
- //$this->error('尚未发起视频,不能结束');
|
|
|
- return '尚未发起视频,不能结束';
|
|
|
- }
|
|
|
-
|
|
|
- $old_status = 25;
|
|
|
- }
|
|
|
-
|
|
|
- //修改订单
|
|
|
- $nowtime = time();
|
|
|
- $update = [
|
|
|
- 'status' => 30,
|
|
|
- 'finish_time' => $nowtime,
|
|
|
- ];
|
|
|
-
|
|
|
- //给医生结算钱
|
|
|
- $logtype = $wenzhen_order['ordertype'] == 1 ? 111 : 112;
|
|
|
- if($wenzhen_order['comefrom'] == 1 && $wenzhen_order['total_fee'] > 0){
|
|
|
- $rs_wallet = model('walletdoctor')->lockChangeAccountRemain($wenzhen_order['doctor_id'],'money',$wenzhen_order['total_fee'],$logtype,$remark='问诊订单','wenzhen_order',$order_id);
|
|
|
+ if($yongjin > 0){
|
|
|
+ $rs_wallet = model('wallet')->lockChangeAccountRemain($wallet['user_id'],'intromoney',$yongjin,'111',$remark='团队返佣,总业绩'.$tuanduizongyeji);
|
|
|
if($rs_wallet['status'] === false){
|
|
|
Db::rollback();
|
|
|
- //$this->error($rs_wallet['msg']);
|
|
|
- return $rs_wallet['msg'];
|
|
|
+ echo '发放失败'.$wallet['user_id'];
|
|
|
+ exit;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- //订单状态
|
|
|
- $update_rs = Db::name('wenzhen_order')->where('id',$order_id)->where('status',$old_status)->update($update);
|
|
|
- if(!$update_rs){
|
|
|
+ //结算完成
|
|
|
+ $rs1 = Db::name('user_wallet')->where('user_id',$wallet['user_id'])->update(['last_jiesuan_date' => $date]);
|
|
|
+ if($rs1 === false){
|
|
|
Db::rollback();
|
|
|
- //$this->error('操作失败');
|
|
|
- return '操作失败';
|
|
|
+ echo '更新失败'.$wallet['user_id'];
|
|
|
+ exit;
|
|
|
}
|
|
|
|
|
|
- //医生接诊量
|
|
|
- Db::name('doctor')->where('id',$wenzhen_order['doctor_id'])->setInc('ordernum');
|
|
|
-
|
|
|
Db::commit();
|
|
|
-
|
|
|
- //发送im消息给用户,让他不能再输入
|
|
|
- /*if($wenzhen_order['ordertype'] == 1){
|
|
|
- $tenim = new Tenim();
|
|
|
- $message = [
|
|
|
- 'businessID' => 'order_status_doctor_type',
|
|
|
- 'name' => '',
|
|
|
- 'status' => '30',
|
|
|
- 'id' => (string)$order_id,
|
|
|
- 'content' => '',
|
|
|
- ];
|
|
|
- $rs = $tenim->sendCustomMessageToUser('user'.$wenzhen_order['user_id'],'doctor'.$wenzhen_order['doctor_id'],$message);
|
|
|
- }*/
|
|
|
-
|
|
|
-
|
|
|
- //$this->success('操作成功');
|
|
|
- return '操作成功';
|
|
|
+ echo '结束'.$wallet['user_id'];
|
|
|
}
|
|
|
|
|
|
-/////////////////////////////////////////////////////////////////////////
|
|
|
+ //获取我的直推
|
|
|
+ private function get_my_down_list($wallet){
|
|
|
+ $chuju = config('site.intro_chuju_min_money');
|
|
|
|
|
|
- //定时跑用户活跃,改成离线
|
|
|
- public function auto_user_active(){
|
|
|
- $actitime = time() - 7200;
|
|
|
+ //直推,下级,入金,等级比我低,未出局
|
|
|
+ $list = Db::name('user_wallet')->alias('uw')
|
|
|
+ ->field('uw.user_id,uw.money,uw.intro_level,uw.intro_uid')
|
|
|
+ ->where('uw.intro_uid',$wallet['user_id']) //我邀请的
|
|
|
+ ->where('uw.intro_level','neq','-1') //入金了
|
|
|
+ ->where('uw.intro_level','elt',$wallet['intro_level']) //等级比我低
|
|
|
+ ->where('uw.money','egt',$chuju) //金额小于500,出局
|
|
|
+ ->select();
|
|
|
|
|
|
- $sql = 'update `mt_user` set is_active = 0 where is_active = 1 and id in (select user_id from mt_user_active where requesttime < '.$actitime.')';
|
|
|
- db()->query($sql);
|
|
|
+ return !empty($list) ? $list : [];
|
|
|
}
|
|
|
|
|
|
- //vip过期的,三个隐私设置改成0
|
|
|
- //vip过期的,更新用户表is_vip
|
|
|
- public function auto_vipend(){
|
|
|
-// $sql = 'update `mt_user_power` set yinsi = 0,yinshen = 0,wuhen = 0 where user_id in (select user_id from mt_user_wallet where vip_endtime > 0 and vip_endtime < '.time().')';
|
|
|
-// db()->query($sql);
|
|
|
+ //获取我的间推
|
|
|
+ private function get_my_downdown_list($down_uids = false,$wallet){
|
|
|
+ if($down_uids === false){
|
|
|
+ $list = $this->get_my_down_list($wallet);
|
|
|
+ $down_uids = array_column($list,'user_id');
|
|
|
+ }
|
|
|
|
|
|
- /*$sql2 = 'update `mt_user` set is_vip = 0 where is_vip = 1 and user_id in (select user_id from mt_user_wallet where vip_endtime > 0 and vip_endtime < '.time().')';
|
|
|
- db()->query($sql2);*/
|
|
|
- }
|
|
|
+ $chuju = config('site.intro_chuju_min_money');
|
|
|
|
|
|
+ //间推,下下级,入金,未出局,等级比我低,等级比自己的上级低
|
|
|
+ $list2 = Db::name('user_wallet')->alias('uw')
|
|
|
+ ->field('uw.user_id,uw.money,uw.intro_level,uw.intro_uid')
|
|
|
+ ->join('user_wallet intro','uw.intro_uid = intro.user_id','LEFT') //加这里,就是防止:下下级当中,虽然都比我低,但是有可能高于自己的上级(也就是我的直推)
|
|
|
+ ->whereIN('uw.intro_uid',$down_uids) //下下级
|
|
|
+ ->where('uw.intro_level','neq','-1') //入金了
|
|
|
+ ->where('uw.money','egt',$chuju) //金额小于500,出局
|
|
|
+ ->where('uw.intro_level','elt',$wallet['intro_level']) //等级比我低
|
|
|
+ ->where('uw.intro_level <= intro.intro_level') //加这里,就是防止:下下级当中,虽然都比我低,但是有可能高于自己的上级(也就是我的直推)
|
|
|
+ ->select();
|
|
|
|
|
|
+ return !empty($list2) ? $list2 : [];
|
|
|
+ }
|
|
|
|
|
|
|
|
|
}
|