mzeros b45d188232 feat(queue): 添加商户余额监控预警功能
- 新增 MerchantBalanceMonitor 类实现商户余额监控
- 添加 Redis 连接方法以支持缓存预警状态
- 实现余额预警逻辑,包括正常预警和严重预警
- 新增预警解除逻辑,当余额恢复正常时发送通知- 在测试控制器中添加余额检查方法,用于手动触发预警
2025-01-06 00:17:09 +08:00

1372 lines
46 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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\api\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\OrderService as OrderBase;
use app\robot\controller\api\Qqbot;
use app\robot\controller\WeChatBot as WeChatBotC;
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 cardbuy($param)
{
var_dump($param);die;
}
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()
{
$LockCardService = LockCardService::instance();
// $cardno = $response['kami']['cardno'];
// $cardpwd = $response['kami']['cardpwd'];
// $expire_time = $response['kami']['expired'];
$suoka = $LockCardService->call('',12, 2409301790976058, 123456, 123, 100,'Whymcl');
return $suoka;
}
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();
// if($order['status'] == 2){
// #成功1
//
// $apiParams['coop_order_status'] = 'SUCCESS';
//
//// $rsp_info = '';
// } elseif ($order['status'] == 3) {
// # 失败...
//
// $apiParams['coop_order_status'] = 'FAILED';
// $apiParams['failed_code'] = '0503';
// $apiParams['failed_reason'] = '充值失败';
// }
//
////
//
// }
//
// $taobao=new \app\openapi\controller\Taobao($this->app);
// $msg = $taobao ->notify($url,$param['merchant_order_id'] ,$merchant,$apiParams);
}
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('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;
}
$suoka = $channelService->call('lockCard', $order['cid'], $order);
if($suoka !== 'ok' && $suoka !== 'old_ok'){
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 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()
{
$this->redis();
$merchantService = MerchantService::instance();
$RobotService = new WeChatBotC($this->app);
$merchantsList = $merchantService->db()->where(['merchant_type'=>1,'status'=>1])->whereLike('other_param','%Monitor_Balance_status%')->select()->toArray();
$merchantsList_num = count($merchantsList);
$count_sum = 0;
foreach($merchantsList as $merchants) {
$other_param = json_decode($merchants['other_param'],true);
if(!$other_param){
continue;
}
$Monitor_Balance = $other_param['Monitor_Balance'] ?? null;
if(!$Monitor_Balance){
continue;
}
$roomid = $other_param['QYWX_roomid'];
$sender = $other_param['QYWX_sender'];
$count_sum ++;
if($merchants['account_surplus'] <= $Monitor_Balance){
#进入预警流程
#设置redis,根据mid设置redis,
if(!$this->redis->get('Check_merchant_account-'.$merchants['id'])){
$AllContacts = $RobotService->get_all_contacts();
$Contacts_array = json_decode($AllContacts,true);
$acc = $Contacts_array['data']['contacts'];
$ac = '';
foreach ($acc as $k=>$v){
if($v['wxid'] == $sender){
$ac = $v['name'];
}
}
$this->redis->set('Check_merchant_account-'.$merchants['id'],1);
$RobotService->send_text('余额预警: 您的账户现在只剩下'.$Monitor_Balance.'元,请及时充值, @'.$ac,$roomid,$sender);
}
if($merchants['account_surplus'] <= 500){
if(!$this->redis->get('Check_merchant_account-TOP-'.$merchants['id'])){
if(isset($ac)){
$AllContacts = $RobotService->get_all_contacts();
$Contacts_array = json_decode($AllContacts,true);
$acc = $Contacts_array['data']['contacts'];
$ac = '';
foreach ($acc as $k=>$v){
if($v['wxid'] == $sender){
$ac = $v['name'];
}
}
}
$this->redis->set('Check_merchant_account-TOP-'.$merchants['id'],1);
$RobotService->send_text('余额预警: 您的账户现在只剩下'.$Monitor_Balance.'元,已经严重不足,请关注账户, @'.$ac,$roomid,$sender);
}
}
}else{
if($this->redis->get('Check_merchant_account-'.$merchants['id'])){
$AllContacts = $RobotService->get_all_contacts();
$Contacts_array = json_decode($AllContacts,true);
$acc = $Contacts_array['data']['contacts'];
$ac = '';
foreach ($acc as $k=>$v){
if($v['wxid'] == $sender){
$ac = $v['name'];
}
}
$this->redis->del('Check_merchant_account-'.$merchants['id']);
$RobotService->send_text('余额预警: 您的账户已经恢复正常,现在余额为'.$merchants['account_surplus'].'元,请关注账户, @'.$ac,$roomid,$sender);
}
if($this->redis->get('Check_merchant_account-TOP-'.$merchants['id'])){
$this->redis->del('Check_merchant_account-TOP-'.$merchants['id']);
}
}
}
}
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('-1 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);
}
}
}