autoCancelNoPay(); $this->autoReceive(); $this->autoAppraise(); $this->autoSendMsg(); } /** * 取消未支付订单 */ public function autoCancelNoPay(){ $autoCancelNoPayDays = (int)WSTConf('CONF.autoCancelNoPayDays'); $autoCancelNoPayDays = ($autoCancelNoPayDays>0)?$autoCancelNoPayDays:6; $lastDay = date("Y-m-d H:i:s",strtotime("-".$autoCancelNoPayDays." hours")); $orders = Db::name('orders')->alias('o')->join('__SHOPS__ s','o.shopId=s.shopId','left')->where("o.createTime<'".$lastDay."' and o.orderStatus=-2 and o.dataFlag=1 and o.payType=1 and o.isPay=0")->field("o.orderId,o.orderNo,o.userId,o.shopId,o.useScore,s.userId shopUserId,orderCode")->select(); if(!empty($orders)){ $prefix = config('database.prefix'); $orderIds = []; foreach ($orders as $okey => $order){ $orderIds[] = $order['orderId']; } Db::startTrans(); try{ //提前锁定订单 Db::name('orders')->where(['orderId'=>['in',$orderIds]])->update(['orderStatus'=>-1]); foreach ($orders as $okey => $order){ $shopId = $order['shopId']; //未付款状态则直接退回积分 if($order['useScore']>0){ $score = []; $score['userId'] = $order['userId']; $score['score'] = $order['useScore']; $score['dataSrc'] = 1; $score['dataId'] = $order['orderId']; $score['dataRemarks'] = "取消交易订单【".$order['orderNo']."】,退回积分".$order['useScore']."个"; $score['scoreType'] = 1; model('common/UserScores')->add($score); } $goods = Db::name('order_goods')->alias('og')->join('__GOODS__ g','og.goodsId=g.goodsId','inner') ->where('orderId',$order['orderId'])->field('og.*,g.isSpec')->select(); foreach ($goods as $k => $v){ //处理虚拟产品 if($v['goodsType']==1){ $extraJson = json_decode($v['extraJson'],true); foreach ($extraJson as $ecard) { Db::name('goods_virtuals')->where('id',$ecard['cardId'])->update(['orderId'=>0,'orderNo'=>'','isUse'=>0]); } $counts = Db::name('goods_virtuals')->where(['dataFlag'=>1,'goodsId'=>$v['goodsId'],'isUse'=>0])->count(); Db::name('goods')->where('goodsId',$v['goodsId'])->update(['goodsStock'=>$counts]); }else{ //只有正常下单的才会修改库存的,其他的任何插件都不会修改库存 if($order['orderCode'] == 'order'){ //修改库存 if($v['isSpec']>0){ Db::name('goods_specs')->where('id',$v['goodsSpecId'])->setInc('specStock',$v['goodsNum']); } Db::name('goods')->where('goodsId',$v['goodsId'])->setInc('goodsStock',$v['goodsNum']); //Db::name('goods')->where('goodsId',$v['goodsId'])->setDec('saleNum',$v['goodsNum']);//减少销量 mark 20180412 } } } //新增订单日志 $logOrder = []; $logOrder['orderId'] = $order['orderId']; $logOrder['orderStatus'] = -1; $logOrder['logContent'] = "订单长时间未支付,系统自动取消订单"; $logOrder['logUserId'] = $order['userId']; $logOrder['logType'] = 0; $logOrder['logTime'] = date('Y-m-d H:i:s'); Db::name('log_orders')->insert($logOrder); //发送消息 $tpl = WSTMsgTemplates('ORDER_USER_PAY_TIMEOUT'); if( $tpl['tplContent']!='' && $tpl['status']=='1'){ $find = ['${ORDER_NO}']; $replace = [$order['orderNo']]; //发送一条用户信息 WSTSendMsg($order['userId'],str_replace($find,$replace,$tpl['tplContent']),['from'=>1,'dataId'=>$order['orderId']]); } $tpl = WSTMsgTemplates('ORDER_SHOP_PAY_TIMEOUT'); if( $tpl['tplContent']!='' && $tpl['status']=='1'){ $find = ['${ORDER_NO}']; $replace = [$order['orderNo']]; //发送一条商家信息 $msg = array(); $msg["shopId"] = $shopId; $msg["tplCode"] = $tpl["tplCode"]; $msg["msgType"] = 1; $msg["content"] = str_replace($find,$replace,$tpl['tplContent']) ; $msg["msgJson"] = ['from'=>1,'dataId'=>$order['orderId']]; model("common/MessageQueues")->add($msg); } //微信消息 if((int)WSTConf('CONF.wxenabled')==1){ $params = []; $params['ORDER_NO'] = $order['orderNo']; WSTWxMessage(['CODE'=>'WX_ORDER_USER_PAY_TIMEOUT','userId'=>$order['userId'],'URL'=>Url('wechat/orders/sellerorder','',true,true),'params'=>$params]); $msg = array(); $tplCode = "WX_ORDER_SHOP_PAY_TIMEOUT"; $msg["shopId"] = $shopId; $msg["tplCode"] = $tplCode; $msg["msgType"] = 4; $msg["paramJson"] = ['CODE'=>$tplCode,'URL'=>Url('wechat/orders/index',['type'=>'abnormal'],true,true),'params'=>$params] ; $msg["msgJson"] = ""; model("common/MessageQueues")->add($msg); } } Db::commit(); return WSTReturn('操作成功',1); }catch (\Exception $e) { Db::rollback();errLog($e); return WSTReturn('操作失败',-1); } } return WSTReturn('操作成功',1); } /** * 自动好评 */ public function autoAppraise(){ $autoAppraiseDays = (int)WSTConf('CONF.autoAppraiseDays'); $autoAppraiseDays = ($autoAppraiseDays>0)?$autoAppraiseDays:7;//避免有些客户没有设置值 $lastDay = date("Y-m-d 00:00:00",strtotime("-".$autoAppraiseDays." days")); $rs = model('orders')->where("receiveTime<'".$lastDay."' and orderStatus=2 and dataFlag=1 and isAppraise=0")->field("orderId,userId,orderScore,shopId,orderNo")->select(); if(!empty($rs)){ $prefix = config('database.prefix'); $orderIds = []; foreach ($rs as $okey => $order){ $orderIds[] = $order->orderId; } Db::startTrans(); try{ //提前锁定订单 Db::name('orders')->where(['orderId'=>['in',$orderIds]])->update(['isAppraise'=>1,'isClosed'=>1]); foreach ($rs as $okey => $order){; //获取订单相关的商品 $ordergoods = Db::name('order_goods')->where('orderId',$order->orderId)->field('goodsId,orderId,goodsSpecId')->select(); foreach($ordergoods as $goods){ //增加订单评价 $data = []; $data['userId'] = $order->userId; $data['goodsSpecId'] = (int)$goods['goodsSpecId']; $data['goodsId'] = $goods['goodsId']; $data['shopId'] = $order->shopId; $data['orderId'] = $goods['orderId']; $data['goodsScore'] = 5; $data['serviceScore'] = 5; $data['timeScore']= 5; $data['content'] = '自动好评'; $data['createTime'] = date('Y-m-d H:i:s'); Db::name('goods_appraises')->insert($data); } //增加商品评分 $updateSql = "update ".$prefix."goods_scores set totalScore=totalScore+15, goodsScore=goodsScore+5, serviceScore=serviceScore+5, timeScore=timeScore+5, totalUsers=totalUsers+1,goodsUsers=goodsUsers+1,serviceUsers=serviceUsers+1,timeUsers=timeUsers+1 where goodsId=".$goods['goodsId']; Db::execute($updateSql); //增加商品评价数 Db::name('goods')->where('goodsId',$goods['goodsId'])->setInc('appraiseNum'); //增加店铺评分 $updateSql = "update ".$prefix."shop_scores set totalScore=totalScore+15, goodsScore=goodsScore+5, serviceScore=serviceScore+5, timeScore=timeScore+5, totalUsers=totalUsers+1,goodsUsers=goodsUsers+1,serviceUsers=serviceUsers+1,timeUsers=timeUsers+1 where shopId=".$order->shopId; Db::execute($updateSql); // 查询该订单是否已经完成评价,修改orders表中的isAppraise $ogRs = Db::name('order_goods')->alias('og') ->join('__GOODS_APPRAISES__ ga','og.orderId=ga.orderId and og.goodsId=ga.goodsId and og.goodsSpecId=ga.goodsSpecId','left') ->where('og.orderId',$order->orderId)->field('og.id,ga.id gid')->select(); $isFinish = true; foreach ($ogRs as $vkey => $v){ if($v['id']>0 && $v['gid']==''){ $isFinish = false; break; } } //订单商品全部评价完则修改订单状态 if($isFinish){ if(WSTConf("CONF.isAppraisesScore")==1){ $appraisesScore = (int)WSTConf('CONF.appraisesScore'); if($appraisesScore>0){ //给用户增加积分 $score = []; $score['userId'] = $order->userId; $score['score'] = $appraisesScore; $score['dataSrc'] = 1; $score['dataId'] = $order->orderId; $score['dataRemarks'] = "评价订单【".$order->orderNo."】获得积分".$appraisesScore."个"; $score['scoreType'] = 1; $score['createTime'] = date('Y-m-d H:i:s'); Db::name('user_scores')->insert($score); // 增加用户积分 model('Users')->where("userId=".$order->userId)->update([ 'userScore'=>['exp','userScore+'.$appraisesScore], 'userTotalScore'=>['exp','userTotalScore+'.$appraisesScore] ]); } } } } Db::commit(); return WSTReturn('操作成功',1); }catch (\Exception $e) { Db::rollback();errLog($e); return WSTReturn('操作失败',-1); } } return WSTReturn('操作成功',1); } /** * 自动确认收货 */ public function autoReceive(){ $autoReceiveDays = (int)WSTConf('CONF.autoReceiveDays'); $autoReceiveDays = ($autoReceiveDays>0)?$autoReceiveDays:10;//避免有些客户没有设置值 $lastDay = date("Y-m-d 00:00:00",strtotime("-".$autoReceiveDays." days")); $rs= model('orders')->where("deliveryTime<'".$lastDay."' and orderStatus=1 and dataFlag=1")->field("orderId,orderNo,shopId,userId,shopId,orderScore,commissionFee")->select(); //dump($rs); //循环是否有延时收获的 $now_time = time(); foreach($rs as $key=>$v){ $delay_time = Db::name('order_delay')->where(['orderId'=>$v['orderId']])->value('delayTime'); if($now_time < $delay_time){ unset($rs[$key]); } } if(!empty($rs)){ $prefix = config('database.prefix'); Db::startTrans(); try{ foreach ($rs as $key => $order){ //结束订单状态 $order->receiveTime = date('Y-m-d 00:00:00'); $order->orderStatus = 2; $rsStatus = $order->save(); if(false !== $rsStatus){ hook('afterUserReceive',['orderId'=>$order->orderId]); if(WSTConf('CONF.statementType')==1){ //修改商家未计算订单数 $upSql = 'update '.$prefix.'shops set noSettledOrderNum=noSettledOrderNum+1,noSettledOrderFee=noSettledOrderFee-'.$order->commissionFee.' where shopId='.$order->shopId; Db::execute($upSql); }else{ //即时结算 model('common/Settlements')->speedySettlement($order->orderId); } //新增订单日志 $logOrder = []; $logOrder['orderId'] = $order->orderId; $logOrder['orderStatus'] = 2; $logOrder['logContent'] = "系统自动确认收货"; $logOrder['logUserId'] = $order->userId; $logOrder['logType'] = 0; $logOrder['logTime'] = date('Y-m-d H:i:s'); Db::name('log_orders')->insert($logOrder); //发送一条商家信息 $tpl = WSTMsgTemplates('ORDER_ATUO_RECEIVE'); if( $tpl['tplContent']!='' && $tpl['status']=='1'){ $find = ['${ORDER_NO}']; $replace = [$order['orderNo']]; $msg = array(); $msg["shopId"] = $order->shopId; $msg["tplCode"] = $tpl["tplCode"]; $msg["msgType"] = 1; $msg["content"] = str_replace($find,$replace,$tpl['tplContent']) ; $msg["msgJson"] = ['from'=>1,'dataId'=>$order->orderId]; model("common/MessageQueues")->add($msg); } //给用户增加积分 if(WSTConf("CONF.isOrderScore")==1){ $score = []; $score['userId'] = $order->userId; $score['score'] = $order->orderScore; $score['dataSrc'] = 1; $score['dataId'] = $order->orderId; $score['dataRemarks'] = "交易订单【".$order->orderNo."】获得积分".$order->orderScore."个"; $score['scoreType'] = 1; $score['createTime'] = date('Y-m-d H:i:s'); model('UserScores')->save($score); // 增加用户积分 model('Users')->where("userId=".$order->userId)->setInc('userScore',$order->orderScore); // 用户总积分 model('Users')->where("userId=".$order->userId)->setInc('userTotalScore',$order->orderScore); } } } Db::commit(); return WSTReturn('操作成功',1); }catch (\Exception $e) { Db::rollback();errLog($e); return WSTReturn('操作失败',-1); } } //echo 1; return WSTReturn('操作成功',1); } public function autoSendMsg(){ $now = date("Y-m-d H:i:s"); $list = Db::name("message_queues")->where(["sendStatus"=>0])->limit(500)->select(); foreach ($list as $key => $msg) { Db::startTrans(); try{ $msgParams = json_decode($msg["paramJson"],true); if($msg["msgType"]==2){//短信消息 //门店暂无 }else if($msg["msgType"]==3){//邮件消息 //门店暂无 }else if($msg["msgType"]==4){//微信消息 WSTWxMessage($msgParams); } Db::name("message_queues")->where(["id"=>$msg["id"]])->update(["sendStatus"=>1,"sendTime"=>$now]); Db::commit(); }catch (\Exception $e) { Db::rollback();errLog($e); return WSTReturn('操作失败',-1); } } return WSTReturn('操作成功',1); } }