action(); // $param=func_get_args(); // if(strpos($actionName, '_cardbuy') !== false){ // if(!method_exists($this,$actionName)){ //// $param = request()->param(); // $this->cardbuy($param); // } // } // // } public function channel_test() { $input = input(); $method = $input['method']; if(isset($input['cid'])){ $cid = $input['cid']; } $channelService = ChannelService::instance(); switch ($method){ case 'account': $day = input('day'); if (!$day) { $day = date('Y-m-d', strtotime('-1 day')); } $account_data = $channelService->call('account', $cid, $day); var_dump($account_data);die; break; } } # 对回调再次处理,如果渠道回调失败,同时商户回调失败,将使用该方法进行再次发起回调,5分钟执行一次 public function Tcall() { $orderService = OrderService::instance(); $cur = time(); $time = 300; $whereRaw = $cur . '-unix_timestamp(create_at) >=' . $time; $data = $orderService->db()->whereRaw('merchant_callback_error = 2 and merchant_callback_num < 5 and status in(2,3) and ' . $whereRaw )->order('id asc')->select(); // var_dump($data);die; if ($data) { foreach ($data as $k => $v) { $this->callSend($v, 1); } } } private function callSend($v, $type = 1) { OrderService::instance()->callSend($v, $type); } public function dy_msd_message() { $maSuDa = \app\openapi\controller\maSuDaApi\Order::class; $param = input(); $maSuDa->message_config($param['mid'],$param['tops'],$param['status']); } # 对回调再次处理,如果渠道回调失败,同时商户回调失败,将使用该方法进行再次发起回调,5分钟执行一次 public function call() { $orderService = OrderService::instance(); $data = $orderService->db()->whereRaw('merchant_callback_error = 2 and mid = 2 and merchant_callback_num < 5 and status in(2,3)')->order('id asc')->select(); if ($data) { foreach ($data as $k => $v) { OrderService::instance()->callSend($v, 1); } } } public function cardbuy($param) { var_dump($param);die; } public function test_tk() { $orderService = OrderService::instance(); $order = $orderService->db()->where(['status'=>2])->whereNull('merchant_callback_msg')->select()->toArray(); $channelService = ChannelService::instance(); $LockCardService = LockCardService::instance(); foreach ($order as $k => $v) { $where = ['order_id' => $v['order_id']]; $suoka = $channelService->call('lockCard', $v['cid'], $v); // var_dump($suoka);die; if ($suoka == 'ok' || $suoka == 'old_ok') { // $lockcard_id = $LockCardService->lockcard_log(1, $v, $response['kami'], '锁卡'); $orderService->db()->where($where)->update(['status' => 3]); Log::write('suoka_tk', 'suoka_tk', $v['merchant_order_id']);#写入到日志里 // var_dump($v); // if($lockcard_id){ //// $order->db()->where($where)->update(['status'=>3]); // $order->db()->where($where)->update(['lockcard_id'=>$lockcard_id]); // // Log::write('suoka_test', 'suoka_test', $v['merchant_order_id']);#写入到日志里 // } } } } public function jt() { // $url = 'http://jk.ayka.cn/douyin/Index/read.html?order=D202502132129073037173535'; // 欲截图的网页地址 $outputFile = '/www/wwwroot/reapi/public/output.png'; // 截图保存路径 // //// 调用 Python 脚本并传入参数 // exec("python /www/wwwroot/reapi/extend/python/Screenshot.py $url $outputFile", $output, $return_var); // var_dump($return_var);die; // // if ($return_var === 0) { // echo "Screenshot saved to $outputFile"; // } else { // echo "Failed to take screenshot."; // } $url = 'http://jk.ayka.cn/douyin/Index/read.html?order=D202502132129073037173535'; $html = file_get_contents($url); // 创建一个临时文件来保存网页内容 $tempFile = tempnam(sys_get_temp_dir(), 'html'); file_put_contents($tempFile, $html); // 使用浏览器渲染截图 $width = 1024; // 截图宽度 $height = 768; // 截图高度 $outputFile = '/www/wwwroot/reapi/public/output.png'; // 截图保存路径 $url = urlencode('http://jk.ayka.cn/douyin/Index/read.html?order=D202502132129073037173535'); $outputFile = '/www/wwwroot/reapi/public/output.png'; $ex = "wkhtmltoimage \"$url\" $outputFile"; exec($ex, $output, $return_var); // 调用 wkhtmltoimage 并传入参数 // exec("wkhtmltoimage $url $outputFile", $output, $return_var); // $cmd = "wkhtmltoimage --width $width --height $height $tempFile output.png"; // 删除临时文件 // unlink($tempFile); var_dump($ex);die; if ($return_var !== 0) { echo "Error occurred:\n"; print_r($output); } else { echo "Screenshot saved to $outputFile"; } } public function suoka() { $order = OrderLastHistoryService::instance(); $startDate = '2025-01-29 22:10:00'; $endDate = date('Y-m-d H:i:s'); $orders = $order->db()->where(['status' => 2,'mid'=>2,'cid'=>7]) ->whereBetween('create_at', [$startDate, $endDate]) ->limit(1000) ->select()->toArray(); // var_dump($orders);die; $channelService = ChannelService::instance(); $LockCardService = LockCardService::instance(); // $order->db()->where(['status' => 2,'mid'=>2,'cid'=>7])->whereBetween('create_at', [$startDate, $endDate])->chunk(100, function (Collection $data) use (&$count, $channelService,$LockCardService,$order) { //// var_dump($orderlist);die; // foreach ($data->toArray() as $k => $v) { // var_dump($v); foreach ($orders as $k=>$v){ // var_dump($v);die; $response = json_decode($v['response'], true); if (isset($response['kami'])) { $where = ['order_id' => $v['order_id']]; $suoka = $channelService->call('lockCard', $v['cid'], $v); // var_dump($suoka);die; if ($suoka == 'ok' || $suoka == 'old_ok') { $lockcard_id = $LockCardService->lockcard_log(1, $v, $response['kami'], '锁卡'); $order->db()->where($where)->update(['status' => 3]); Log::write('suoka_test', 'suoka_test', $v['merchant_order_id']);#写入到日志里 // var_dump($v); // if($lockcard_id){ //// $order->db()->where($where)->update(['status'=>3]); // $order->db()->where($where)->update(['lockcard_id'=>$lockcard_id]); // // Log::write('suoka_test', 'suoka_test', $v['merchant_order_id']);#写入到日志里 // } } } } // }); } public function suoka_test23() { $data = Db::name('test23')->whereNotNull('merchant_order_id')->select()->toArray(); $channelService = ChannelService::instance(); foreach ($data as $vo) { $order = Db::name('merchant_order')->where(['merchant_order_id'=>$vo['merchant_order_id']])->find(); if(!$order){ continue; } $suoka = $channelService->call('lockCard', $order['cid'], $order); if($suoka !== 'ok' && $suoka !== 'old_ok'){ var_dump($vo); }else{ Db::name('merchant_order')->where(['merchant_order_id'=>$vo['merchant_order_id']])->update(['status' => 3]); Log::write('suoka_test23', 'suoka_test23', $vo['merchant_order_id']);#写入到日志里 Db::name('test23')->where('merchant_order_id', $vo['merchant_order_id'])->delete();//这个用like会不会太范了?不会,因为order是唯一只是怕空格影响 } } } public function suoka_testly() { $data = Db::name('test_wait_suoka')->whereNotNull('merchant_order_id')->select()->toArray(); $channelService = ChannelService::instance(); foreach ($data as $vo) { // $order = Db::name('merchant_order')->where(['merchant_order_id'=>$vo['merchant_order_id']])->find(); // if(!$order){ // $order = Db::name('merchant_order_lastweek_history')->where(['merchant_order_id'=>$vo['merchant_order_id']])->find(); // if(!$order){ // continue; // } // } $num = $this->getNum_suoka(); if ($num >= 20) { # 等会儿再执行 sleep(10); // return true; } $this->popen_suoka($vo['merchant_order_id']); // $suoka = $channelService->call('lockCard', $order['cid'], $order); // if($suoka !== 'ok' && $suoka !== 'old_ok'){ // Db::name('test_wait_suoka')->where('merchant_order_id', $vo['merchant_order_id'])->delete();//这个用like会不会太范了?不会,因为order是唯一只是怕空格影响 // Log::write('test_error_suoka', 'test_error_suoka', $vo['merchant_order_id']);#写入到日志里 // // var_dump($vo); // }else{ // Db::name('merchant_order')->where(['merchant_order_id'=>$vo['merchant_order_id']])->update(['status' => 3]); // Log::write('test_wait_suoka', 'test_wait_suoka', $vo['merchant_order_id']);#写入到日志里 // Db::name('test_wait_suoka')->where('merchant_order_id', $vo['merchant_order_id'])->delete();//这个用like会不会太范了?不会,因为order是唯一只是怕空格影响 // Db::name('test_suoka_yes')->insert(['merchant_order_id'=>$vo['merchant_order_id']]); // } } } public function run_suoka() { $channelService = ChannelService::instance(); if (isset($_SERVER["argv"][2]) && $_SERVER["argv"][2]) { $orders = $_SERVER["argv"][2]; } else { $orders = input('order'); } $data = Db::name('merchant_order')->where(['merchant_order_id'=>$orders])->find(); if(!$data){ $data = Db::name('merchant_order_lastweek_history')->where(['merchant_order_id'=>$orders])->find(); if(!$data){ if(!$data){ Db::name('test_suoka_wait_error')->insert(['merchant_order_id'=>$orders]); Db::name('test_wait_suoka')->where('merchant_order_id', $orders)->delete();//这个用like会不会太范了?不会,因为order是唯一只是怕空格影响 // $data = Db::name('merchant_order_last_history')->where(['merchant_order_id'=>$orders])->find(); if(!$data){ exit('error'); } } } } if (isset($data['order_id']) && $data['order_id']) { // if ($popen) { //// $this->runOne // // // $this->popen_suoka($data['order_id']); // } else { $suoka = $channelService->call('lockCard', $data['cid'], $data); if($suoka !== 'ok' && $suoka !== 'old_ok'){ Db::name('test_wait_suoka')->where('merchant_order_id', $data['merchant_order_id'])->delete();//这个用like会不会太范了?不会,因为order是唯一只是怕空格影响 Log::write('test_error_suoka', 'test_error_suoka', $data['merchant_order_id']);#写入到日志里 }else{ Db::name('merchant_order')->where(['merchant_order_id'=>$data['merchant_order_id']])->update(['status' => 3]); Log::write('test_suoka_yes', 'test_suoka_yes', $data['merchant_order_id']);#写入到日志里 Db::name('test_wait_suoka')->where('merchant_order_id', $data['merchant_order_id'])->delete();//这个用like会不会太范了?不会,因为order是唯一只是怕空格影响 Db::name('test_suoka_yes')->insert(['merchant_order_id'=>$data['merchant_order_id']]); } exit('ok'); // } } } public function getNum_suoka() { $command = 'ps -ef | grep openapi/test/run_suoka | grep -v grep | wc -l'; $num = exec($command); return $num; } # 将数据推到子进程处理 public function popen_suoka($order) { $command = 'php /www/wwwroot/reapi/public/index.php openapi/test/run_suoka ' . $order . ' 1>/dev/null 2>&1 &'; // var_dump($command);die; exec($command); } public function finishOne_lasts() { $orderLastHistoryService = OrderLastHistoryService::instance(); $orderService = OrderService::instance(); $begin = '2025-01-27 00:00:00'; $after = '2025-01-27 17:59:59'; $time = [$begin, $after]; $db = $orderService->db()->whereRaw('status in(2,3) '); $data = $db->whereBetween('create_at', $time)->order('id asc'); list($count, $total) = [0, $data->count()]; if($total==0){ return false; } return $data->chunk(1000, function (Collection $data) use (&$count, $total, $orderLastHistoryService, $orderService) { foreach ($data->toArray() as $vo) { if ($vo) { # 先插入一条历史数据 $id = $vo['id']; unset($vo['id']); $state = $orderLastHistoryService->up($vo); if ($state) { $orderService->del($id); $count++; } }else{ return false; } } return true; }); } public function finishOne_lastm() { $orderService = Kami91OrderService::instance(); $orderHistoryService = KamiOrderHistoryService::instance(); $begin = '2025-01-01 00:00:00'; $after = '2025-01-27 15:59:59'; $time = [$begin, $after]; $db = $orderService->db()->whereRaw('status in(2,3) '); $data = $db->whereBetween('create_at', $time)->order('id asc'); //??// list($count, $total) = [0, $data->count()]; $data->chunk(100, function (Collection $data) use (&$count, $total, $orderService, $orderHistoryService) { // var_dump($orderlist);die; foreach ($data->toArray() as $vo) { if ($vo) { # 先插入一条历史数据 $id = $vo['id']; unset($vo['id']); $state = $orderHistoryService->up($vo); if ($state) { $orderService->del($id); $count++; } } } }); } public function test_suoka_data() { $LockCardService = LockCardService::instance(); $or = $LockCardService->db()->where(['mid'=>2,'cid'=>7])->select()->toArray(); foreach ($or as $k=>$v){ $order = OrderLastHistoryService::instance(); $ss = $order->db()->where(['order_id'=>$v['order_id']])->field('order_id,merchant_order_id')->find(); print_r($ss); } } public function check_merchant_limit() { $mid = input('mid'); $count = OrderBase::instance()->countMerchantCash($mid); var_dump($count); } # 计算利润 public function profit() { $day = input('day'); if (!$day) { $day = date('Y-m-d', strtotime('-1 day')); } // $orderHistoryService = OrderHistoryService::instance(); $orderHistoryService = OrderLastHistoryService::instance(); $data = $orderHistoryService->getTotalData($day); // var_dump($data); if ($data) { StatService::instance()->handle($day, $data); } } public function upblacks() { $infoArray = BlackCardService::instance()->db()->select()->toArray(); foreach ($infoArray as $k=>$v){ if(str_contains($v['desc'], ":")){ $order_id = explode(':', $v['desc']); if(str_contains($order_id[1], "C")){ // var_dump($order[1]);die; $order = OrderLastHistoryService::instance(); $info = $order->db()->field('mid,merchant_order_id,mid,param,order_id')->where(['order_id' => $order_id[1]])->find(); if(!$info){ $order = OrderTwoHistoryService::instance(); $info = $order->db()->field('mid,merchant_order_id,mid,param,order_id')->where(['order_id' => $order_id[1]])->find(); } if(!$info){ $order = OrderHistoryService::instance(); $info = $order->db()->field('mid,merchant_order_id,mid,param,order_id')->where(['order_id' => $order_id[1]])->find(); } if($info){ $param = json_decode($info['param'],true); $merchant = MerchantService::instance()->get($info['mid']); $Seesionkey = $merchant['refresh_token'];#淘宝此token为直充系统授权token $request = []; $request['agentId'] = $merchant['agentId']; $request['agentkey'] = $merchant['agentkey']; if(isset($merchant['other_param']) && $merchant['other_param'] && str_contains($merchant['other_param'], "reapi_appkey")) { $other_param = json_decode($merchant['other_param'], true); $request['agentId'] = $other_param['reapi_appkey']; $request['agentkey'] = $other_param['reapi_appsecret']; $Seesionkey = $merchant['access_token']; } $request['tid'] = $info['merchant_order_id']; $request['access_token'] = $Seesionkey; $response = Coretb::taobaosdk('getByTrade',$request); $json = json_encode($response); $array = json_decode($json,true); if(is_array($array)){ if(isset($array['open_uid']) && $array['open_uid']){ $uid = $array['open_uid']; BlackCardService::instance()->db()->where(array('id' => $v['id']))->update(['value'=>$uid]); // var_dump($uid); } } } } // $infoss = json_decode($v,true); } // var_dump($data);die; } } public function test() { $orde = OrderService::instance()->db()->where(['status'=>4,'cid'=>14])->select()->toArray(); if($orde){ foreach ($orde as $k=>$v){ $channelService = ChannelService::instance(); $result = $channelService->call('query', $v['cid'], $v); Log::write('test', 'runss', $result); // Log::write(''); // var_dump($result);die; if ($result['status'] != 4) { Log::write('test', 'runs', $result); $notifyClass = new Notify($this->app); $notifyClass->queue_query($v['order_id'], $result); var_dump([$v['order_id'],$result['status']]); } } } } public function stat_amount() { $day = input('day'); if (!$day) { $day = date('Y-m-d', strtotime('-1 day')); // var_dump($day);die; } // $orderHistoryService = OrderHistoryService::instance(); $orderHistoryService = OrderLastweekHistoryService::instance(); // if (!$day) { // $day = date('Y-m-d', strtotime('-1 day')); // } $begin = $day . ' 00:00:00'; $after = $day . ' 23:59:59'; // $begin = '2024-08-01' . ' 00:00:00'; // $after = $day . ' 23:59:59'; $time = [$begin, $after]; $db = $orderHistoryService->db()->whereRaw('status in(2,3) '); $where = array(); if ($where) { $db->where($where); } $data = $db->whereBetween('create_at', $time)->field('cash,mid,cid,id,order_id,actual_cash,product_key,account,status,isp')->order('id asc')->select()->toArray(); // var_dump($data);die; if ($data) { $productService = ProductService::instance(); $zhekou = PercentService::instance(); $merchant = MerchantService::instance(); // $rule = $zhekou->get(1, 'jxk_cardbuy'); // var_dump($rule);die; foreach ($data as $k => $v) { $rule = $zhekou->get($v['mid'], $v['product_key']); if ($rule && $rule['percent']) { $percent = $rule['percent']; if (isset($rule['percent_type']) && $rule['percent_type']) { $percent_type = $rule['percent_type']; } $percent = $merchant->getPercent($percent, $v['account'], $v['product_key'], $v['cash'], $rule['rule'], $v['isp']); }else{ $info = $merchant->getInfo($v['mid']); $percent=$info['percent']; $percent_type= 1; } if ($percent > 0) { if ($percent_type == 2) { $new_cash = $percent; } else { $new_cash = $percent*$v['cash']; } } // var_dump($new_cash); $orderHistoryService->db()->where(['order_id'=>$v['order_id']])->update(['actual_cash'=>$new_cash]); // var_dump($expression);die; } die; # 检查是否是固定数值 // var_dump($product);die; } print_r($data); } public function test_daochu(){ $data = Db::name('test_daochu')->whereNull('cardno')->select()->toArray(); foreach ($data as $k => $v) { $order = Db::name('merchant_order_lastweek_history')->where(['merchant_order_id'=>$v['merchant_order_id']])->field('merchant_order_id,order_id,mid,response,channel_callback_msg,status')->find(); if(!$order){ $order = Db::name('merchant_order_last_history')->where(['merchant_order_id'=>$v['merchant_order_id']])->field('merchant_order_id,order_id,mid,response,channel_callback_msg,status')->find(); } if(!$order){ $order = Db::name('merchant_order_two_history')->where(['merchant_order_id'=>$v['merchant_order_id']])->field('merchant_order_id,order_id,mid,response,channel_callback_msg,status')->find(); } if(!$order){ var_dump($v);continue; } if($order){ $response = json_decode($order['response'],true); if(isset($response['kami'])){ $up = [ 'cardno'=>$response['kami']['cardno'], 'cardpwd'=>$response['kami']['cardpwd'] ]; }else{ $json = json_decode($$order['channel_callback_msg'],true); if(isset($json['kami'])){ $up = [ 'cardno'=>$json['kami']['cardno'], 'cardpwd'=>$json['kami']['cardpwd'] ]; } } if(!$up){ var_dump($v);continue; } if($up){ Db::name('test_daochu')->where(['merchant_order_id'=>$v['merchant_order_id']])->update($up); } } } } public function test_wyk(){ $data = Db::name('wyk_kmi')->whereNotNull('orderno')->select()->toArray(); foreach ($data as $vo) { $order = Db::name('merchant_order_history')->where(['order_id'=>$vo['orderno']])->find(); if(!$order){ var_dump($vo);continue; } $response = json_decode($order['response'],true); if(isset($response['kami'])){ $cardno=$response['kami']['cardno']; $cardpwd=$response['kami']['cardpwd']; $cash = $order['cash']; $expire_time = $response['kami']['expired']; $group_id = '70059'; }else{ $json = json_decode($order['channel_callback_msg'],true); if(isset($json['kami'])){ $cardno=$json['kami']['cardno']; $cardpwd=$json['kami']['cardpwd']; $cash = $order['cash']; $expire_time = $json['kami']['expired']; $group_id = '70059'; } } if(isset($cardno)){ $KamiService = KamiService::instance(); // var_dump($cardno); $upkami = $KamiService->upKami($cardno, $cardpwd, $cash,$expire_time,$group_id); if($upkami){ Db::name('wyk_kmi')->whereLike('orderno', $vo['orderno'])->delete();//这个用like会不会太范了?不会,因为order是唯一只是怕空格影响 } } // $suoka = $channelService->call('lockCard', $order['cid'], $order); } } public function taobao_notify(){ $input = input(); $merchant_order_id = $input['merchant_order_id']; $order = Db::name('merchant_order')->where(['merchant_order_id'=>$merchant_order_id])->find(); } public function upkami() { $group_id = input('group_id'); $mid = input('mid'); $data = DB::name('ssss1234')->whereLike('status', '%已锁定%')->select()->toArray(); foreach ($data as $vo) { // $m = DB::name('ssss1234')->whereLike('order', $vo['order'])->select()->toArray();//这个查出来的是很多 // var_dump($vo);die;//还不行? #这个出来的是有空格的,我要去掉空格hao空格可能好长的那种;等会把身份证给我我要去程序员客栈认证//////可以吗? $pattern = '/\s+/'; // $cardno = trim($pattern,'', $vo['卡号']);//正则判断去掉所有空格 $cardno = trim($vo['卡号']);//这是去掉首尾的空格 $cardpwd = trim( $vo['卡密']); $cash = trim($vo['面值']); $experid = rtrim($vo['过期时间']);#这个前面空格保留,我要去掉最后面的空格比如2024-04-09 12:00:00 我要去掉00后面的空格 #宝蓝那边的问题是这个原因吗/1 $KamiService = KamiService::instance(); // var_dump($cardno); $upkami = $KamiService->upKami($cardno, $cardpwd, $cash,$experid,$group_id,$mid); if($upkami){ Db::name('ssss1234')->whereLike('order', $vo['order'])->delete();//这个用like会不会太范了?不会,因为order是唯一只是怕空格影响 }else{ #判断是否为之前的订单二锁定二次销售 $data = array(); $data['cnum'] = $cardno; $data['cpwd'] = $cardpwd; $data['value'] = $cash; // $data['kami_group_id'] = $sid; $info = $KamiService->db()->where($data)->find(); if($info && $info['use'] == 2){ #更新为1 $KamiService->db()->where($data)->update(['use'=>1]); var_dump($cardno); $erorder = $KamiService->db()->where($data)->find(); if($erorder['use'] == 1){ Db::name('ssss1234')->whereLike('order', $vo['order'])->delete();//这个用like会不会太范了?不会,因为order是唯一只是怕空格 } // 影响 } } // var_dump($upkami);die; } } public function refuse() { $merchant_order_id = '2152497721850058778'; $merchant = MerchantService::instance()->get(1); $app_data = json_decode($merchant['other_param'],true); // $request['agentId'] = '34615444'; // $request['agentkey'] = '2e59a0c00b4fafd9ae46bedced6eccc3'; $request['agentId'] = $app_data['reapi_appkey']; $request['agentkey'] = $app_data['reapi_appsecret']; $request['access_token'] = $merchant['access_token']; $request['refund_id'] = "156290305490057887"; $request['RefuseMessage'] = "测试一下"; $request['tid'] = $merchant_order_id; $request['oid'] = $merchant_order_id; $request['proof'] = "/www/sites/reapi/index/extend/refuse/QN_2137603910451763869.jpg"; $request['Phase'] = "aftersale"; $request['RefundVersion'] = "1715680501592"; $request['refuse_reason_id'] = "999"; //附件上传的机制参见PHP CURL文档,在文件路径前加@符号即可 // $request; $requests = \app\openapi\controller\Coretb::taobaosdk("refundRefuse", $request); var_dump($requests); } public function chuli_bug(){ $yema = input('yema'); $order = Db::name('merchant_order')->where(['status'=>'7','cid'=>4])->page($yema,20)->select()->toArray(); $LockCardService = LockCardService::instance(); foreach ($order as $vo => $value) { $response = json_decode($value['response'], true); $cardno = $response['kami']['cardno']; $cardpwd = $response['kami']['cardpwd']; $expire_time = $response['kami']['expired']; $suoka = $LockCardService->call('suoka', $value['cid'], $cardno, $cardpwd, $value['pid'], $value['cash']); var_dump($value['order_id'].'状态:'.$suoka); if ($suoka == 'ok' || $suoka == 'old_ok') { Db::name('merchant_order')->where(['order_id'=>$value['order_id']])->update(['status'=>'3']); } } } public function daoru_card() { $data = Db::name('daoru_card')->whereNotNull('order')->select()->toArray(); foreach ($data as $vo) { $order = Db::name('merchant_order_history')->where(['order_id'=>$vo])->field('order_id,pid,cash,cid,channel_callback_msg,mid')->find(); if($order){ #宝蓝那边的问题是这个原因吗/1 $KamiService = KamiService::instance(); $card =json_decode($order['channel_callback_msg'],true); // var_dump($order);die; if(isset($card['kami'])){ // var_dump($card['kami']); $upkami = $KamiService->upKami($card['kami']['cardno'], $card['kami']['cardpwd'], $order['cash'],$card['kami']['expired'],$order['cid'].'00'.$order['pid'],-1); // var_dump($upkami); if($upkami){ Db::name('daoru_card')->whereLike('order', $vo['order'])->delete();//这个用like会不会太范了?不会,因为order是唯一只是怕空格影响 }else{ $data = array(); $data['cnum'] = $card['kami']['cardno']; $data['cpwd'] = $card['kami']['cardpwd']; $data['value'] = $order['cash']; // $data['kami_group_id'] = $sid; $info = $KamiService->db()->where($data)->find(); if($info){ $infos = $KamiService->db()->where($data)->update(['use'=>1,'status'=>1]); if($infos){ Db::name('daoru_card')->whereLike('order', $vo['order'])->delete();//这个用like会不会太范了?不会,因为order是唯一只是怕空格影响 }else{ var_dump($vo); } }else{ var_dump($vo); } // $KamiService->db()->whereLike('order', $vo['order'])->delete(); } }else{ var_dump($vo); } // var_dump($cardno); }else{ var_dump($vo); } } } public function test_ts() { $data = Db::name('test_ts')->whereNotNull('merchant_order_id')->select()->toArray(); $channelService = ChannelService::instance(); foreach ($data as $vo) { // $order = Db::name('merchant_order_lastweek_history')->where(['merchant_order_id'=>$vo['merchant_order_id']])->find(); //// $order = Db::name('merchant_order')->where(['merchant_order_id'=>$vo['merchant_order_id']])->find(); //// $order = Db::name('merchant_order_last_history')->where(['merchant_order_id'=>$vo['merchant_order_id']])->find(); // // // var_dump($vo);die; // if(!$order){ // continue; // } $table = 'merchant_order_lastweek_history'; $order = Db::name($table)->where(['merchant_order_id'=>$vo['merchant_order_id']])->find(); // var_dump($vo);die; if(!$order){ $table = 'merchant_order'; $order = Db::name($table)->where(['merchant_order_id'=>$vo['merchant_order_id']])->find(); if(!$order){ $table = 'merchant_order_last_history'; $order = Db::name($table)->where(['merchant_order_id'=>$vo['merchant_order_id']])->find(); if(!$order) { continue; } } } $suoka = $channelService->call('lockCard', $order['cid'], $order); // var_dump($suoka);die; if($suoka !== 'ok' && $suoka !== 'old_ok'){ Db::name('test_ts_suoka_error')->insert(['merchant_order_id'=>$vo['merchant_order_id']]); Db::name('test_ts')->whereLike('merchant_order_id', $vo['merchant_order_id'])->delete();//这个用like会不会太范了?不会,因为order是唯一只是怕空格影响 // var_dump($vo); }else{ // Db::name('merchant_order')->where(['merchant_order_id'=>$vo['merchant_order_id']])->update(['status'=>3]); // Db::name('merchant_order_lastweek_history')->where(['merchant_order_id'=>$vo['merchant_order_id']])->update(['status'=>3]); Db::name($table)->where(['merchant_order_id'=>$vo['merchant_order_id']])->update(['status'=>3]);// // Db::name('merchant_order_last_history')->where(['merchant_order_id'=>$vo['merchant_order_id']])->update(['status'=>3]);// Db::name('test_ts_suoka_yes')->insert(['merchant_order_id'=>$vo['merchant_order_id']]); Db::name('test_ts')->whereLike('merchant_order_id', $vo['merchant_order_id'])->delete();//这个用like会不会太范了?不会,因为order是唯一只是怕空格影响 } } } public function stas_order(){ $order_list = Db::name('merchant_order_last_history')->where(['status'=>2,'cid'=>14])->select()->toArray(); foreach ($order_list as $vo) { $response= json_decode($vo['response'],true); // $response= json_decode($vo['channel_callback_msg'],true); $cost = $response['ordercash']; $s = Db::name('merchant_order_last_history')->where(['id'=>$vo['id']])->update(['product_cash'=>$cost]); // var_dump($vo['id']);die; if(!$s) var_dump($vo['id']); } } public function check_log(){ $log = Db::name('merchant_accounct_log')->where(['create_at','>','2025-05-15 00:00:00'])->select(); } public function test_tss() { $data = Db::name('test_ts')->whereNull('order')->select()->toArray(); $kamis = Kami91OrderService::instance(); foreach ($data as $vo) { $order = Db::name('merchant_order_kami91')->where(['cardno'=>$vo['cardno']])->find(); if(!$order){ $order = Db::name('merchant_order_history_kami91')->where(['cardno'=>$vo['cardno']])->find(); if(!$order){ continue; } } Db::name('test_ts')->where('cardno', $vo['cardno'])->update(['order'=>$order['order_id']]);//这个用like会不会太范了?不会,因为order是唯一只是怕空格影响 } } public function checkkami_ts() { $data = Db::name('test_ts')->whereNotNull('order')->select()->toArray(); $channelService = ChannelService::instance(); foreach ($data as $vo) { $order = Db::name('merchant_order_history')->where(['order_id'=>$vo['order']])->find(); if(!$order){ continue; } $order_id = $order['order_id'].'_R'; $check = $channelService->call('replaceCard_query', $order['cid'], $order_id); if($check['array']['ret_code'] == 0){ $KamiService = KamiService::instance(); $requestData = json_decode($order['request'], true); // $request['card_kind'] = ; if($requestData['card_kind'] == '335'){ $upkami = $KamiService->upKami($check['data']['kami']['cardno'], $check['data']['kami']['cardpwd'], $check['data']['kami']['value'], $check['data']['kami']['expired'],1,-1); }elseif ($requestData['card_kind'] == '357'){ $upkami = $KamiService->upKami($check['data']['kami']['cardno'], $check['data']['kami']['cardpwd'], $check['data']['kami']['value'], $check['data']['kami']['expired'],2,-1); }else{ $upkami = false; } if(!$upkami){ var_dump($vo); }else{ Db::name('test_ts')->whereLike('order', $vo['order'])->delete();//这个用like会不会太范了?不会,因为order是唯一只是怕空格影响 } } } } public function cleanDuplicateOrders() { // 批次大小 $idsToKeep = Db::table('merchant_order_history') ->field('id, order_id') ->order('id') ->limit(700) ->select() ->toArray(); // var_dump($idsToKeep); if (empty($idsToKeep)) { return json(['message' => 'No records found.']); } // 将要保留的 id 和 order_id 转换为数组 $keepIds = array_column($idsToKeep, 'id'); $keepOrderIds = array_column($idsToKeep, 'order_id'); // 开始事务 Db::startTrans(); try { // 删除与这些 order_id 相同但 id 不同的数据 $affectedRows = Db::table('merchant_order_history') ->whereIn('order_id', $keepOrderIds) ->whereNotIn('id', $keepIds) ->delete(); // 提交事务 Db::commit(); return json([ 'message' => "Deleted $affectedRows records with matching order_id but different id." ]); } catch (\Exception $e) { // 如果发生错误,回滚事务 Db::rollback(); return json([ 'error' => "Error cleaning orders: " . $e->getMessage() ]); } } #获取买家id public function get_nick($merchant_order_id,$mid) { $merchant = MerchantService::instance()->get($mid); $Seesionkey = $merchant['refresh_token'];#淘宝此token为直充系统授权token $request = []; $request['agentId'] = $merchant['agentId']; $request['agentkey'] = $merchant['agentkey']; $request['tid'] = $merchant_order_id; $request['access_token'] = $Seesionkey; $response = Coretb::taobaosdk('getByTrade',$request); $json = json_encode($response); $array = json_decode($json,true); if(is_array($array)){ if(isset($array['open_uid']) && $array['open_uid']){ return $array['open_uid']; } } Log::write('openapi', 'taobao_getnick', $json);#写入到日志里 return 'error'; } public function finishafter() { $day = input('day'); /* if (!$day) { $day = date('Y-m-d', strtotime('-1 day')); } */ $page = 1; while($this->finishOne_after($day, $page)) { $page++; } } public function finishOne_after($day, $page) { $orderService = AfterSalesOrderService::instance(); $data = $orderService->getFinishData($day, $page); if ($data) { foreach ($data as $k => $v) { # 先插入一条历史数据 $id = $v['id']; unset($v['id']); $state = Db::name('merchant_order_history_aftersales')->insert($v); if ($state) { $orderService->del($id); } } return true; } else { return false; } } public function finishkami() { $day = input('day'); /* if (!$day) { $day = date('Y-m-d', strtotime('-1 day')); } */ $page = 1; while($this->finishOne_kami($day, $page)) { $page++; } } public function finishOne_kami($day, $page) { $orderService = Kami91OrderService::instance(); $data = $orderService->getFinishData($day, $page); if ($data) { foreach ($data as $k => $v) { # 先插入一条历史数据 $id = $v['id']; unset($v['id']); $state = Db::name('merchant_order_history_kami91')->insert($v); if ($state) { $orderService->del($id); } } return true; } else { return false; } } public function checkkami() { $order = $this->getOrderInfo(input('order_id'),'',''); $order_id = $order['order_id'].'_R'; // var_dump($order);die; $channelService = ChannelService::instance(); $check = $channelService->call('replaceCard_query', $order['cid'], $order_id); var_dump($check); } public function cancel(){ $order_id = input('order_id'); $data = OrderService::instance()->get($order_id); if(isset($data['num']) && $data['num']>0) { $data['order_id'] = $data['order_id'].'_'.$data['num']; } $channelService = ChannelService::instance(); if($data['cid']) $channelList = $channelService->db()->where(['id'=>$data['cid'],'status'=>1,'cancel_status'=>1])->find(); if(!$channelList){ var_dump('渠道不支持');die; } $result = $channelService->call('cancel', $data['cid'], $data); var_dump($result);die; } public function cancel_list(){ $mid = input('mid'); $timeout_cancel = input('timeout'); $timeout_cancel = intval($timeout_cancel); $cid = input('cid'); $product_key = input('product_key'); $cash = input('cash'); $num = input('num'); // if($num){ // $num // } $where = [['status','=',4],['mid','=',$mid],['cid','=',$cid],['cash','=',$cash],['product_key','=',$product_key],['expire_time','<=',date('Y-m-d H:i:s',time()+$timeout_cancel)],['num','=',$num]]; // list($count, $total) = [0, OrderService->db()->where($where)->order('id asc')->count()]; // $order_id = input('order_id'); $data = OrderService::instance()->db()->where($where)->order('id asc')->select()->toArray(); $channelService = ChannelService::instance(); foreach ($data as $k => $vo) { if(isset($vo['num']) && $vo['num']>0) { $vo['order_id'] = $vo['order_id'].'_'.$vo['num']; } $result = $channelService->call('cancel', $vo['cid'], $vo); var_dump($result); } } public function arrayToJson() { $input = input(); throw new HttpResponseException(json($input)); } public function arrayToJsons() { $input = input(); $input['callback_diy_rule']['diy_pid']=[ 64=>75 ]; throw new HttpResponseException(json($input)); } public function test_test(){ $where['mid'] = 1; // $where['product_key'] = $product_key; $data = MerchantProductService::instance()->db()->where($where)->order('sort desc')->orderRand()->select()->toArray(); var_dump($data); } public function renwu() { $input=input(); // $this->_queue('[ 淘宝直充 - 自动同步 ] 主动更新售后订单信息', "xQueue:TaobaoAfterSalesOrderInfo", 0, [], 0,60); // $this->_queue('[ 淘宝直充 - 自动同步 ] 自动同步关联售后订单并尝试锁卡', "xQueue:TaobaoAfterSalesOrdeRelated", 0, [], 0,60); // $this->_queue('[ 订单列表 ] 订单主动查单', "xQueue:OrderQuery", 0, [], 0,1800); // $this->_queue('[ 淘宝直充 - 自动同步 ] 主动更新售后订单信息', "xQueue:TaobaoAfterSalesOrderInfo", 0, [], 0,60); // $this->_queue('[ 淘宝直充 - 自动同步 ] 自动同步关联售后订单并尝试锁卡', "xQueue:TaobaoAfterSalesOrdeRelated", 0, [], 0,60); // $this->_queue('[ 快手商家-订单列表 ] 渠道超时订单拦截', "xQueue:KsOrderChanelTimeoutInt", 0, [], 0, 60); // $this->_queue('[ 淘宝直充 - 自动同步 ] 特定渠道库存或余额不足自动下架', "xQueue:TaobaoAutoUpOrDown", 0, [], 0, 180); // $this->_queue('[ 淘宝直充 - 自动同步 ] 主动更新订单状态', "xQueue:TaobaoAfterSalesOrderUpStatus", 0, [], 0, 300); // $this->_queue('[ 淘宝直充 - 自动同步 ] 失败订单二次通知', "xQueue:TaobaoFailOrderSecondNotify", 0, [], 0, 600); // $this->_queue('[ 淘宝直充 - 黑名单 ] 自动拉黑规则', "xQueue:TaobaoBlacklistRules", 0, [], 0, 3600); // $this->_queue('[ 卡密列表 - 自动同步 ] 标准商户默认更新', "xQueue:KamiOrderStatusStandardUp", 0, [], 0, 1); // $this->_queue('[ 淘宝订单 - 自动同步 ] 强行更新', "xQueue:KamiOrderStatusForceUpdate", 0, [], 0, 180); // $this->_queue('[ 订单列表 ] 卡密完成订单迁移', "xQueue:KamiOrderFinish", 0, [], 0, 72400); // $this->_queue('[ 订单列表 ] 完成订单迁移', "xQueue:OrderFinish", 0, [], 0, 28800); $this->_queue($input['title'], $input['command'], 0, [], 0, $input['loops']); } // public function getOrderInfo($order_id,$merchant_order_id,$mid) { $orderService = OrderService::instance(); $order = $orderService->get($order_id, $merchant_order_id, $mid); if (!$order) { $orderHistoryService = OrderHistoryService::instance(); $order = $orderHistoryService->get($order_id, $merchant_order_id, $mid); } return $order; } public function cgetkami(){ // var_dump('123');die; $request['username'] = input('username'); $request['password'] = input('password'); $request['sporder_id'] = input('sporder_id'); $request['version'] = '1.0'; $sign = md5('username='.$request['username'].'&sporder_id='.$request['sporder_id'].'||25f570cb9244088641124df31f12aaa4'); $request['sign'] = $sign; $url = 'http://pfapi.anh618.com/queryorder.aspx'; $response = http_get($url,$request); $array = (array) simplexml_load_string($response); // var_dump($array);die; // $array = (array) $array['info']; // var_dump($array);die; if (isset($array['Order']) && $array['Order']) { $array['Order'] = (array) $array['Order']; } if (isset($array['info']) && $array['info']) { $array['info'] = (array) $array['info']; } if (isset($array['Card']) && $array['Card']) { $array['Card'] = (array) $array['Card']; } if (!$array) { $msg = 'error'; } elseif (isset($array['info']['ret']) && $array['info']['ret'] == '0' && isset($array['Order']['orderid']) && $array['Order']['orderid']) { $array['kami'] = []; if(isset($array['Card'][0])){ foreach ($array['Card'] as $key=>$value){ $value = (array) $value; $up = array ( 'cardno' => $value['cardnum'], 'cardpwd' => $value['cardpass'], 'ex' => $value['expriedate'], // 'value' => $array['Order']['rtlprice'], ); DB::name('test_kami_zm')->insert($up); } var_dump($array['kami']);die; } } } public function refundget($vo,$request) { if(isset($request['sub_code'])){ unset($request['sub_code']); } $request['refundId'] = $vo['refund_id']; // $request['access_token'] = $merchant['access_token']; $response = Coretb::taobaosdk('refundInfo', $request); $json = json_encode($response); $array = json_decode($json, true); if (isset($array['refund'])) { $array = $array['refund']; $RefundVersion = $array['refund_version']; return $RefundVersion; } else { return 'error'; } } public function quchong() { // 'linshi_order' // $page = 1; // while ($this->finishOnes( $page)) { // $page++; // } $start = date('Y-m-d', strtotime('-8 day')); $day = date('Y-m-d', strtotime('-3 day')); $begin = $start . ' 00:00:00'; $after = $day . ' 23:59:59'; $time = [$begin, $after]; $OrderLastweekHistoryService = OrderLastweekHistoryService::instance(); $order_data = $OrderLastweekHistoryService->db()->whereBetween('create_at', $time)->order('id asc')->select()->toArray();; // $order_data = $OrderLastweekHistoryService->db()->limit(78,1000)->select()->toArray(); foreach ($order_data as $vo) { $order_datas = Db::name('linshi_order')->where('order_id', $vo['order_id'])->find(); if(!$order_datas){ $state = Db::name('linshi_order')->insert($vo); }else{ $m = $OrderLastweekHistoryService->db()->where('order_id', $vo['order_id'])->count(); if($m > 1){ $OrderLastweekHistoryService->db()->where('id', $vo['id'])->delete();//这个用like会不会太范了?不会,因为order是唯一只是怕空格影响 } } } } public function finishOnes($page){ $OrderLastweekHistoryService = OrderLastweekHistoryService::instance(); // $order_data = $OrderLastweekHistoryService->db()->limit(5000)->select()->toArray(); if ($page) { $limit = 10000; $page = $page - 1; $page = $page * $limit; $order_data = $OrderLastweekHistoryService->db()->limit(2,1000)->select()->toArray(); // $db->limit($page, $limit); } $order_data = $OrderLastweekHistoryService->db()->limit(2,1000)->select()->toArray(); foreach ($order_data as $vo) { $order_datas = Db::name('linshi_order')->where('order_id', $vo['order_id'])->find(); if(!$order_datas){ $state = Db::name('linshi_order')->insert($vo); }else{ $m = $OrderLastweekHistoryService->db()->where('order_id', $vo['order_id'])->count(); if($m > 1){ $OrderLastweekHistoryService->db()->whereLike('id', $vo['id'])->delete();//这个用like会不会太范了?不会,因为order是唯一只是怕空格影响 } } } } public function order_test() { $order = input('order_id'); $num = 0; $orderService = OrderService::instance(); if(str_contains($order,'_')){ $orders = explode('_',$order); $order = $orders[0]; $num = $orders[1]; } $data = $orderService->get($order, ''); if($num != $data['num']){ $this->no(-101); } if (!$data) { $this->no(-101); } $result['cash'] = $data['cash']; $result['order_id'] = $data['order_id']; $result['merchant_order_id'] = $data['merchant_order_id']; // $result['status'] = $data['status']; if ($data['status'] < 0) { $data['status'] = 1; } $result['status'] = $data['status']; if (!$data['channel_callback_msg']) { $data['channel_callback_msg'] = '{}'; } $request = json_decode($data['channel_callback_msg'], true); $number = ''; if (isset($request['s_number']) && $request['s_number']) { $number = $request['s_number']; } $order_name = sysconf('order_name'); if ($number && $order_name) { $result[$order_name] = $number; } elseif ($number) { $result['s_number'] = $number; } $this->yes($result); } public function execute() { ini_set('memory_limit', '1024M'); $merchants=MerchantService::instance()->db()->where(['other_status'=>1])->whereLike('other_param', '%"maSuDa_afterSales_status":"1"%')->select()->toArray(); // if(!$merchants) $this->setQueueSuccess("未找到需要处理的商家"); $merchant_num = count($merchants); // var_dump($merchant_num);die; $count_sum = 0; $total_sum=0; $afterSalesOrderService = AfterSalesOrderService::instance(); $channelService = ChannelService::instance(); $LockCardService = LockCardService::instance(); foreach($merchants as $merchant) { $request = []; $other_param = json_decode($merchant['other_param'], true); $mid = $merchant['id']; // if(!is_array($other_param)) $this->setQueueProgress(" 该商家配置错误,请检查", 0); continue; // if(!$other_param['autoCardSoftware'] || $other_param['autoCardSoftware'] != 2) $this->setQueueProgress(" 该商家暂不支持码速达,请检查", 0); continue; $where = [ 'status' => 1, 'order_id'=>null, 'mid'=>$mid ]; list($count, $total) = [0, $afterSalesOrderService->db()->where($where)->whereNull('infodata')->count()]; $total_sum+=$total; // var_dump($total);die; #1.同步更新订单,如果没找到关联订单则更新status为6, $afterSalesOrderService->db()->where($where)->whereNull('infodata')->chunk(100, function (Collection $data) use (&$count, &$count_sum,$total,$afterSalesOrderService,$request,$merchant,$channelService,$LockCardService,$other_param) { foreach ($data->toArray() as $vo) { // var_dump($vo);die; $count++; $count_sum++; $order = $this->getOrderInfo('', $vo['merchant_order_id'], $vo['mid']); if(!$order){ $up_data = [ 'status' => '6' ]; $field = ['merchant_order_id' => $vo['merchant_order_id']]; $afterSalesOrderService->db()->where($field)->update($up_data); // if($other_param['']) // $up_notes = $this->tradeUpdate($vo,$request,3); #备注 // $this->setQueueProgress(" {$vo['merchant_order_id']} 不存在我们系统中", $count / $total * 100); }else{ $channelInfo = $channelService->get($order['cid']); $up_data = []; $up_data['order_id'] = $order['order_id']; $up_data['pid'] = $order['pid']; $up_data['cid'] = $order['cid']; $up_data['product_key'] = $order['product_key']; $response = json_decode($order['response'], true); if($channelInfo['suoka_status'] == 1){ if (isset($response['kami'])) { $suoka = $channelService->call('lockCard', $order['cid'], $order); if($suoka !== 'ok' && $suoka !== 'old_ok'){ $suoka = $channelService->call('lockCard', $order['cid'], $order); } if($suoka == 'ok' || $suoka == 'old_ok'){ $spRefund = $this->refundsp($vo,$request); if($spRefund == 'true'){ $request['sub_code'] =$merchant['sub_code']; $caozuo_refunf = $this->refundtk($vo,$request); if($caozuo_refunf != 'error'){ $this->setQueueProgress("售后订单 {$vo['refund_id']} 已经自动退款处理", $count / $total * 100); }else{ // Log::write('queue', 'taobao_sh', $caozuo_refunf);#写入到日志里 $this->setQueueProgress("售后订单 {$vo['refund_id']} 已经完成审批,自动退款失败", $count / $total * 100); } }else{ // Log::write('queue', 'taobao_sh', $spRefund);#写入到日志里 $this->setQueueProgress("售后订单 {$vo['refund_id']} 已经自动锁卡,审批失败", $count / $total * 100); } }else{ $up_data['status'] = '8'; Log::write('queue', 'taobao_sk', $order['order_id'].'锁卡失败');#写入到日志里 $this->setQueueProgress("售后订单 {$vo['refund_id']} 锁卡失败", $count / $total * 100); } } }elseif($channelInfo['suoka_status'] == 2){ if (isset($response['kami'])) { $cardno = $response['kami']['cardno']; $cardpwd = $response['kami']['cardpwd']; $expire_time = $response['kami']['expired']; $suoka = $LockCardService->call('suoka', $order['cid'],$cardno,$cardpwd,$order['pid'],$order['cash']); if($suoka == 'ok' || $suoka == 'old_ok'){ // $KamiService = KamiService::instance(); // $submitKami = $KamiService->upKami($cardno, $cardpwd, $order['cash'],$expire_time); // if(!$submitKami){ // Log::write('queue', 'submitkami', $order['order_id'].'提交数据库失败');#写入到日志里 // } $spRefund = $this->refundsp($vo,$request); if($spRefund == 'error'){ $spRefund = $this->refundsp($vo,$request); if($spRefund == 'error'){ $spRefund = $this->refundsp($vo,$request); } } if($spRefund == 'true'){ $request['sub_code'] =$merchant['sub_code']; $caozuo_refunf = $this->refundtk($vo,$request,0); if($caozuo_refunf != 'error'){ $up_data['status'] = '4'; // $this->setQueueProgress("售后订单 {$vo['refund_id']} 已经自动退款处理", $count / $total * 100); }else{ // Log::write('queue', 'taobao_sh', $caozuo_refunf);#写入到日志里 $up_data['status'] = '4'; // $this->setQueueProgress("售后订单 {$vo['refund_id']} 已经完成审批,自动退款失败", $count / $total * 100); } }else{ $up_data['status'] = '7'; // $this->setQueueProgress("售后订单 {$vo['refund_id']} 已经自动锁卡,审批失败", $count / $total * 100); } }elseif($suoka == 'use_error'){ // // $up_notes = $this->tradeUpdate($vo,$request,1); // if($up_notes == 'ok'){ // $up_data['status'] = '7'; // $this->setQueueProgress("售后订单 {$vo['refund_id']} 已使用,已修改备注", $count / $total * 100); // }else{ $up_data['status'] = '8'; Log::write('queue', 'taobao_bz', $order['order_id'].'已使用');#写入到日志里 // $this->setQueueProgress("售后订单 {$vo['refund_id']} 已使用,修改备注失败", $count / $total * 100); // } }else{ // $up_notes = $this->tradeUpdate($vo,$request,2); // if($up_notes == 'ok'){ // $up_data['status'] = '8'; // $this->setQueueProgress("售后订单 {$vo['refund_id']} 锁卡失败,已修改备注", $count / $total * 100); // }else{ $up_data['status'] = '8'; Log::write('queue', 'taobao_bz', $order['order_id'].'已使用');#写入到日志里 // $this->setQueueProgress("售后订单 {$vo['refund_id']} 锁卡失败,修改备注失败", $count / $total * 100); // } Log::write('queue', 'taobao_sk', $order['order_id'].'锁卡失败');#写入到日志里 // $this->setQueueProgress("售后订单 {$vo['refund_id']} 锁卡失败", $count / $total * 100); } } } else{ $up_data['status'] = '8'; } $field = ['merchant_order_id' => $vo['merchant_order_id']]; $afterSalesOrderService->db()->where($field)->update($up_data); } } }); } // $this->setQueueSuccess("共找到 {$merchant_num} 个商户需要处理,总共找到 {$total_sum} 个,同步关联 {$count_sum} 个订单完成!"); } // public function refundsp($vo,$request) // { // $request['caozuo_name'] = '系统自动处理'; // $request['refundId'] = $vo['refund_id']; // $request['phase'] = $vo['refund_phase']; // $RefundVersion = json_decode($vo['infodata'],true); // $RefundVersion = $RefundVersion['refund_version']; // $request['RefundVersion'] = $RefundVersion; // $request['RefundMsg'] = '未使用,同意退款';#默认同意 // $request['RefundStatus'] = 'true'; //// $request['access_token'] = $merchant['access_token']; // $response = Coretb::taobaosdk('refundSp', $request); // $json = json_encode($response); // $array = json_decode($json, true); // if($array['is_success'] == 'true'){ // return 'true'; // }else{ // Log::write('queue', 'taobao_sp', $array);#写入到日志里 // return 'error'; // } // // #判断响应是否成功 // // } #获取订单失败率 public function orderFailRate($channel, $pid = null, $p_key = null, $cash = null) { $OrderService = OrderService::instance(); $cur = time(); $time = 30000; $where = [ 'cid' => $channel['id'], // 'create_at' => ['>=', date('Y-m-d H:i:s', $cur - $time)], 'status' => 3, ]; if ($pid) { $where['pid'] = ['in', explode(',', $pid)]; } if ($p_key) { $where['product_key'] = ['in',$p_key]; } if ($cash) { $where['cash'] = ['in', explode(',', $cash)]; } $failCount = $OrderService->db()->where('create_at', '>=', date('Y-m-d H:i:s', $cur - $time))->where($where)->count(); $where['status'] = ['in', '2,3']; $totalCount = $OrderService->db()->where('create_at', '>=', date('Y-m-d H:i:s', $cur - $time))->where($where)->count(); if ($totalCount == 0) { return 0; } return $failCount / $totalCount * 100; } protected function isDNDTime($tme = ['23:30','8:00']) { $currentHour = date('G'); $currentMinute = date('i'); $start = explode(':', $tme[0]); $end = explode(':', $tme[1]); if ($start[0] < $end[0]) { if (($currentHour == $start[0] && $currentMinute >= $start[1]) || ($currentHour > $start[0] && $currentHour <= $end[0])) { return true; } if (($currentHour == $end[0] && $currentMinute <= $end[1]) || $currentHour < $end[0]) { return true; } } else { if (($currentHour == $start[0] && $currentMinute >= $start[1]) || $currentHour > $start[0]) { return true; } if (($currentHour == $end[0] && $currentMinute <= $end[1]) || $currentHour < $end[0]) { return true; } } } public function finishOne_lastWeek($day, $page) { $orderLastHistoryService = OrderHistoryService::instance(); $orderLastWeekHistoryService = OrderTwoHistoryService::instance(); $data = $this->getFinishDatas($day, $page, $orderLastWeekHistoryService,4); list($count, $total) = [0, $data->count()]; if($total==0){ return false; } return $data->chunk(1000, function (Collection $data) use (&$count, $total, $orderLastHistoryService, $orderLastWeekHistoryService) { foreach ($data->toArray() as $vo) { if ($vo) { # 先插入一条历史数据 $id = $vo['id']; unset($vo['id']); $state = $orderLastHistoryService->up($vo); if ($state) { $orderLastWeekHistoryService->del($id); $count++; // $this->setQueueProgress("迁移最近一个月订单 {$vo['order_id']} ", $count / $total * 100); } }else{ return false; } } return true; }); } #上个月 // return true; public function getFinishDatas($day, $page, $orderService ,$type = 1) { if (!$day) { $start = date('Y-m-d', strtotime('-360 day')); $day = date('Y-m-d', strtotime('-1 day')); if($type == 5){ $start = date('Y-m-d', strtotime('-7 day')); $day = date('Y-m-d', strtotime('-1 day')); } if($type == 2){ $start = date('Y-m-d', strtotime('-360 day')); $day = date('Y-m-d', strtotime('-8 day')); } if($type == 3){ $start = date('Y-m-d', strtotime('-360 day')); $day = date('Y-m-d', strtotime('-31 day')); } if($type == 4){ $start = date('Y-m-d', strtotime('-365 day')); $day = date('Y-m-d', strtotime('-91 day')); } } else { $start = $day; } $begin = $start . ' 00:00:00'; $after = $day . ' 23:59:59'; $time = [$begin, $after]; $db = $orderService->db()->whereRaw('status in(2,3) '); $db = $db->whereBetween('create_at', $time)->order('id asc'); if ($page) { $limit = 10000; $page = $page - 1; $page = $page * $limit; $db->limit($page, $limit); } // var_dump($db);die; return $db; } public function finishOne($day, $page) { $orderHistoryService = OrderLastweekHistoryService::instance(); // $orderService = OrderHistoryService::instance(); $orderService = OrderLastHistoryService::instance(); $data = $this->getFinishData($day, $page, $orderService); //??// list($count, $total) = [0, $data->count()]; $data->chunk(1000, function (Collection $data) use (&$count, $total, $orderService, $orderHistoryService) { // var_dump($orderlist);die; foreach ($data->toArray() as $vo) { if ($vo) { # 先插入一条历史数据 $id = $vo['id']; unset($vo['id']); $state = $orderHistoryService->up($vo); if ($state) { $orderService->del($id); $count++; var_dump($count); } } } }); } public function getFinishData($day, $page, $orderService) { if (!$day) { $start = date('Y-m-d', strtotime('-7 day')); $day = date('Y-m-d', strtotime('-0 day')); } else { $start = $day; } $begin = $start . ' 00:00:00'; $after = $day . ' 23:59:59'; $time = [$begin, $after]; $db = $orderService->db()->whereRaw('status in(2,3) '); $db = $db->whereBetween('create_at', $time)->order('id asc'); if ($page) { $limit = 10000; $page = $page - 1; $page = $page * $limit; $db->limit($page, $limit); } return $db; } public function upBlack($type, $value, $desc = '') { $BlackCardService = BlackCardService::instance(); $where['type'] = $type; $where['value'] = $value; $info = $BlackCardService->db()->where($where)->find(); if($info){ return 'false'; }else{ $update['type'] = $type; $update['value'] = $value; $update['desc'] = $desc; $update['status'] = 1; $BlackCardService->db()->insert($update); return '1'; } } // #================================================================================== protected function redis() { if (!$this->redis) { $this->redis = RedisService::getInstance(); } } public function test_shuju(){ $orderhistory = OrderHistoryService::instance(); $where = ['cid' =>4]; $where1[] = [ 'response','like','%kami%' ]; $start = '2024-05-22'; $day = '2024-06-01'; $begin = $start . ' 00:00:00'; $after = $day . ' 23:59:59'; $time = [$begin, $after]; $order = $orderhistory->db()->where($where)->where($where1)->whereBetween('create_at', $time)->select()->toArray(); $LockCardService = LockCardService::instance(); foreach ($order as $vo) { $response= json_decode($vo['response'],true); $cardno = $response['kami']['cardno']; $cardpwd = $response['kami']['cardpwd']; $expire_time = $response['kami']['expired']; $suoka = $LockCardService->call('suoka', $vo['cid'],$cardno,$cardpwd,$vo['pid'],$vo['cash']); Log::write('card', "kaidianbao", $suoka.$cardno); // var_dump($suoka,$cardno); } } }