
- 添加 LinSuoKa 类实现临时锁卡功能 - 优化卡密订单关联逻辑,处理状态为 4 的订单- 新增 redis 记录订单详情,用于限单和退款处理 - 修改 Qiling 类中的签名生成逻辑 - 更新 Test 控制器中的 test_ts 方法,增加对不同订单表的处理
1957 lines
67 KiB
PHP
1957 lines
67 KiB
PHP
<?php
|
||
namespace app\openapi\controller;
|
||
set_time_limit(0);
|
||
ini_set('memory_limit','512M');
|
||
ini_set('default_socket_timeout', -1); //不超时
|
||
use app\channel\service\CardService;
|
||
use app\channel\service\ChannelService;
|
||
use app\channel\service\KamiService;
|
||
use app\channel\service\ProductService;
|
||
use app\gateway\controller\v4\Notify;
|
||
use app\gateway\service\RedisService;
|
||
use app\kami\controller\getcookie\KaiDianBao;
|
||
use app\kami\controller\getcookie\ZhongZhao;
|
||
use app\kami\controller\suoka\JunKa;
|
||
//use app\kami\controller\suoka\ZhongZhao as ZhongZhaoSuoKA;
|
||
use app\kami\service\LockCardService;
|
||
use app\merchant\service\MerchantLogService;
|
||
use app\merchant\service\MerchantService;
|
||
|
||
use app\merchant\service\OrderAutoService;
|
||
use app\merchant\service\OrderHistoryService;
|
||
use app\merchant\service\OrderLastHistoryService;
|
||
use app\merchant\service\OrderLastweekHistoryService;
|
||
use app\merchant\service\OrderTwoHistoryService;
|
||
use app\merchant\service\PercentService;
|
||
use app\merchant\service\ProductService as MerchantProductService;
|
||
use app\merchant\service\ProjectProductService as MerchantProjectProductService;
|
||
use app\merchant\service\ProjectService;
|
||
use app\openapi\controller\Coretb;
|
||
use app\merchant\service\OrderService;
|
||
//use app\kami\controller\suoka\ZhongZhao as ZhongZhaoM;
|
||
|
||
|
||
//use app\openapi\controller\Coretb;
|
||
use app\order\controller\Order;
|
||
use app\order\service\AfterSalesOrderService;
|
||
use app\order\service\Kami91OrderService;
|
||
use app\order\service\KamiOrderHistoryService;
|
||
use app\order\service\OrderService as OrderBase;
|
||
use app\robot\controller\api\Qqbot;
|
||
use app\robot\controller\WeChatBot as WeChatBotC;
|
||
use app\robot\controller\WxWorkBot;
|
||
use app\setting\service\BlackCardService;
|
||
use app\setting\service\StatService;
|
||
use dever\Log;
|
||
use think\Collection;
|
||
use think\console\Input;
|
||
use think\console\Output;
|
||
use think\exception\HttpResponseException;
|
||
use think\facade\Db;
|
||
|
||
/**
|
||
* 测试接口 上线取消
|
||
* Class Test
|
||
* @package app\gateway\api
|
||
*/
|
||
class Test extends Core
|
||
{
|
||
# 是否检测数据
|
||
protected $redis = false;
|
||
protected $check = false;
|
||
|
||
// public function __construct($async = false, $data = array(), $channel = array(), $product = array())
|
||
// {
|
||
// parent::__construct($async, $data, $channel, $product);
|
||
// $actionName = request()->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) {
|
||
#{"Cards":"boqavdDEDS0hRpC+9o69Cgt+tjcep22QutcBBEVyPk4mff+KtczalI3DXkorDd54bk\/CNn3eblgAVTfiqgcHGuHpjjtwFfXOhvCbQFnB228=","OrderId":"13738532335529984","Sign":"f2eef4f7ce4d6408464f5c6e65f6546f","Status":"1","TimeStamp":"20240823152933","UserId":"20832","UserOrderId":"X202408239816683082901021","kami":{"cardno":"2404231940911308","cardpwd":"7732100002366491","expired":"2027-08-23 00:00:00"},"s_nubmer":"2404231940911308"}
|
||
$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 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');
|
||
|
||
|
||
|
||
$channelService = ChannelService::instance();
|
||
|
||
|
||
list($count, $total) = [0, Db::name('test_ts')->whereNotNull('merchant_order_id')->count()];
|
||
// $taobao = new \app\openapi\controller\Taobao($this->app);
|
||
// die;
|
||
|
||
|
||
Db::name('test_ts')->whereNotNull('merchant_order_id')->chunk(100, function (Collection $data) use (&$count, $total, $channelService) {
|
||
// var_dump($orderlist);die;
|
||
var_dump($data);die;
|
||
foreach ($data->toArray() as $vo) {
|
||
var_dump($vo);die;
|
||
|
||
$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($table)->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是唯一只是怕空格影响
|
||
$count++;
|
||
|
||
// $this->setQueueProgress(" {$vo['merchant_order_id']} ", $count / $total * 100);
|
||
}
|
||
|
||
}
|
||
|
||
});
|
||
// $this->setQueueSuccess("总计 {$total} 个, 处理成功 {$count} 个错误订单退款!");
|
||
|
||
|
||
}
|
||
|
||
#获取订单失败率
|
||
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);
|
||
}
|
||
|
||
|
||
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
}
|