REAPI/app/queue/command/taobao/TaobaoAfterSalesOrdeRelated.php.bak

515 lines
24 KiB
PHP
Raw Permalink Normal View History

2024-09-29 15:43:18 +08:00
<?php
namespace app\queue\command\taobao;
use app\channel\service\ChannelService;
use app\channel\service\KamiService;
use app\kami\controller\suoka\KaiDianBao;
use app\kami\controller\suoka\ZhongZhao;
use app\kami\service\LockCardService;
use app\merchant\service\MerchantService;
use app\merchant\service\OrderHistoryService;
use app\merchant\service\OrderService;
use app\openapi\controller\Coretb;
use app\order\service\AfterSalesOrderService;
use app\order\service\Kami91OrderService;
use dever\Log;
use think\admin\Command;
use think\console\Input;
use think\console\Output;
use think\Collection;
/**
* 关联订单
* Class KamiOrderStatusSync
* @package app\data\command
*/
class TaobaoAfterSalesOrdeRelated extends Command
{
protected function configure()
{
// $this->setName('xQueue:Book');
// $this->setDescription('导入章节内容');
$this->setName('xQueue:TaobaoAfterSalesOrdeRelated')->setDescription('[ 淘宝直充 - 自动同步 ] 自动同步关联售后订单并尝试锁卡');
}
/**
* @param Input $input
* @param Output $output
* @throws \think\admin\Exception
*/
protected function execute(Input $input, Output $output)
{
ini_set('memory_limit', '1024M');
$merchants=MerchantService::instance()->db()->where(['merchant_type'=>8,['access_token_time','>=',time()]])->whereNotNull('access_token')->select()->toArray();
$ChannelService = ChannelService::instance();
if(!$merchants) $this->setQueueSuccess("未找到需要处理的天猫商家");
$merchant_num = count($merchants);
$count_sum = 0;
$total_sum=0;
$afterSalesOrderService = AfterSalesOrderService::instance();
$channelService = ChannelService::instance();
$LockCardService = LockCardService::instance();
foreach($merchants as $merchant) {
$request = [];
$other_param = json_decode($merchant['other_param'], true);
$request['agentId'] = $other_param['reapi_appkey'];
$request['agentkey'] = $other_param['reapi_appsecret'];
$mid = $merchant['id'];
$request['access_token'] = $merchant['access_token'];
$where = [
'status' => 1,
'order_id'=>null,
'mid'=>$mid
];
#channel_list,$afterSalesOrderServicecid = idchannel_list【suoka_status>=1
list($count, $total) = [0, $afterSalesOrderService->db()->where($where)->whereNotNull('infodata')->count()];
$total_sum+=$total;
#1.同步更新订单如果没找到关联订单则更新status为6,
$afterSalesOrderService->db()->where($where)->whereNotNull('infodata')->chunk(100, function (Collection $data) use (&$count, &$count_sum,$total,$afterSalesOrderService,$request,$merchant,$channelService,$LockCardService) {
foreach ($data->toArray() as $vo) {
$count++;
$count_sum++;
$order = $this->getOrderInfo('', $vo['merchant_order_id'], $vo['mid']);
if(!$order){
$up_data = [
'status' => '6'
];
$field = ['merchant_order_id' => $vo['merchant_order_id']];
$afterSalesOrderService->db()->where($field)->update($up_data);
$up_notes = $this->tradeUpdate($vo,$request,3);
$this->setQueueProgress(" {$vo['merchant_order_id']} 不存在我们系统中", $count / $total * 100);
}else{
$channelInfo = $channelService->get($order['cid']);
$up_data = [];
$up_data['order_id'] = $order['order_id'];
$up_data['pid'] = $order['pid'];
$up_data['cid'] = $order['cid'];
$up_data['product_key'] = $order['product_key'];
$response = json_decode($order['response'], true);
if($channelInfo['suoka_status'] == 1){
if (isset($response['kami'])) {
$suoka = $channelService->call('lockCard', $order['cid'], $order);
if($suoka == 'ok'){
$spRefund = $this->refundsp($vo,$request);
if($spRefund == 'true'){
$request['sub_code'] =$merchant['sub_code'];
$caozuo_refunf = $this->refundtk($vo,$request);
if($caozuo_refunf != 'error'){
$this->setQueueProgress("售后订单 {$vo['refund_id']} 已经自动退款处理", $count / $total * 100);
}else{
// Log::write('queue', 'taobao_sh', $caozuo_refunf);#写入到日志里
$this->setQueueProgress("售后订单 {$vo['refund_id']} 已经完成审批,自动退款失败", $count / $total * 100);
}
}else{
// Log::write('queue', 'taobao_sh', $spRefund);#写入到日志里
$this->setQueueProgress("售后订单 {$vo['refund_id']} 已经自动锁卡,审批失败", $count / $total * 100);
}
}else{
$up_data['status'] = '8';
Log::write('queue', 'taobao_sk', $order['order_id'].'锁卡失败');#写入到日志里
$this->setQueueProgress("售后订单 {$vo['refund_id']} 锁卡失败", $count / $total * 100);
}
}
}elseif($channelInfo['suoka_status'] == 2){
if (isset($response['kami'])) {
$cardno = $response['kami']['cardno'];
$cardpwd = $response['kami']['cardpwd'];
$expire_time = $response['kami']['expired'];
$suoka = $LockCardService->call('suoka', $order['cid'],$cardno,$cardpwd,$order['pid'],$order['cash']);
if($suoka == 'ok' || $suoka == 'old_ok'){
// $KamiService = KamiService::instance();
// $submitKami = $KamiService->upKami($cardno, $cardpwd, $order['cash'],$expire_time);
// if(!$submitKami){
// Log::write('queue', 'submitkami', $order['order_id'].'提交数据库失败');#写入到日志里
// }
$spRefund = $this->refundsp($vo,$request);
if($spRefund == 'true'){
$request['sub_code'] =$merchant['sub_code'];
$caozuo_refunf = $this->refundtk($vo,$request,0);
if($caozuo_refunf != 'error'){
$up_data['status'] = '4';
$this->setQueueProgress("售后订单 {$vo['refund_id']} 已经自动退款处理", $count / $total * 100);
}else{
// Log::write('queue', 'taobao_sh', $caozuo_refunf);#写入到日志里
$up_data['status'] = '4';
$this->setQueueProgress("售后订单 {$vo['refund_id']} 已经完成审批,自动退款失败", $count / $total * 100);
}
}else{
$up_data['status'] = '7';
$this->setQueueProgress("售后订单 {$vo['refund_id']} 已经自动锁卡,审批失败", $count / $total * 100);
}
}elseif($suoka == 'use_error'){
//
$up_notes = $this->tradeUpdate($vo,$request,1);
if($up_notes == 'ok'){
$up_data['status'] = '7';
$this->setQueueProgress("售后订单 {$vo['refund_id']} 已使用,已修改备注", $count / $total * 100);
}else{
$up_data['status'] = '7';
Log::write('queue', 'taobao_bz', $order['order_id'].'已使用');#写入到日志里
$this->setQueueProgress("售后订单 {$vo['refund_id']} 已使用,修改备注失败", $count / $total * 100);
}
}else{
$up_notes = $this->tradeUpdate($vo,$request,2);
if($up_notes == 'ok'){
$up_data['status'] = '7';
$this->setQueueProgress("售后订单 {$vo['refund_id']} 锁卡失败,已修改备注", $count / $total * 100);
}else{
$up_data['status'] = '7';
Log::write('queue', 'taobao_bz', $order['order_id'].'已使用');#写入到日志里
$this->setQueueProgress("售后订单 {$vo['refund_id']} 锁卡失败,修改备注失败", $count / $total * 100);
}
Log::write('queue', 'taobao_sk', $order['order_id'].'锁卡失败');#写入到日志里
// $this->setQueueProgress("售后订单 {$vo['refund_id']} 锁卡失败", $count / $total * 100);
}
}
}
}
//=====================================================================================================================================================================================================================================
#尝试发起锁卡
#Todo 暂时未写入数据库,直接写入代码,以后待写入数据库做匹配
if($up_data['cid'] == 5){
$response = json_decode($order['response'], true);
if (isset($response['kami'])) {
$cardno = $response['kami']['cardno'];
$cardpwd = $response['kami']['cardpwd'];
$kaidianbaoSuoKa = new KaiDianBao($this->app);
$suoka = $kaidianbaoSuoKa->suoka($order['cid'], $cardno, $cardpwd, $order['pid'], $order['cash']);
if($suoka == 'ok'){
$spRefund = $this->refundsp($vo,$request);
if($spRefund == 'true'){
$request['sub_code'] =$merchant['sub_code'];
$caozuo_refunf = $this->refundtk($vo,0,$request);
if($caozuo_refunf != 'error'){
$this->setQueueProgress("售后订单 {$vo['refund_id']} 已经自动退款处理", $count / $total * 100);
}else{
// Log::write('queue', 'taobao_sh', $caozuo_refunf);#写入到日志里
$this->setQueueProgress("售后订单 {$vo['refund_id']} 已经完成审批,自动退款失败", $count / $total * 100);
}
}else{
// Log::write('queue', 'taobao_sh', $spRefund);#写入到日志里
$this->setQueueProgress("售后订单 {$vo['refund_id']} 已经自动锁卡,审批失败", $count / $total * 100);
}
}else{
$up_data['status'] = '8';
Log::write('queue', 'taobao_sk', $order['order_id'].'锁卡失败');#写入到日志里
$this->setQueueProgress("售后订单 {$vo['refund_id']} 锁卡失败", $count / $total * 100);
}
}
}elseif($up_data['cid'] == 3){
$this->setQueueProgress("售后订单 {$order['order_id']} 检测", $count / $total * 100);
$response = json_decode($order['response'], true);
if (isset($response['kami'])) {
$cardno = trim($response['kami']['cardno']);
$cardpwd = trim($response['kami']['cardpwd']);
$expire_time=$response['kami']['expired'];
$ZhongZhaoSuoKa = new ZhongZhao($this->app);
$suoka = $ZhongZhaoSuoKa->suoka($order['cid'], $cardno, $cardpwd, $order['pid'], $order['cash']);
if($suoka == 'ok' || $suoka == 'old_ok'){
$KamiService = KamiService::instance();
$submitKami = $KamiService->upKami($cardno, $cardpwd, $order['cash'],$expire_time);
if(!$submitKami){
Log::write('queue', 'submitkami', $order['order_id'].'提交数据库失败');#写入到日志里
}
$spRefund = $this->refundsp($vo,$request);
if($spRefund == 'true'){
$request['sub_code'] =$merchant['sub_code'];
$caozuo_refunf = $this->refundtk($vo,$request,0);
if($caozuo_refunf != 'error'){
$up_data['status'] = '4';
$this->setQueueProgress("售后订单 {$vo['refund_id']} 已经自动退款处理", $count / $total * 100);
}else{
// Log::write('queue', 'taobao_sh', $caozuo_refunf);#写入到日志里
$up_data['status'] = '4';
$this->setQueueProgress("售后订单 {$vo['refund_id']} 已经完成审批,自动退款失败", $count / $total * 100);
}
}else{
$up_data['status'] = '7';
$this->setQueueProgress("售后订单 {$vo['refund_id']} 已经自动锁卡,审批失败", $count / $total * 100);
}
}elseif($suoka == 'use_error'){
//
$up_notes = $this->tradeUpdate($vo,$request,1);
if($up_notes == 'ok'){
$up_data['status'] = '7';
$this->setQueueProgress("售后订单 {$vo['refund_id']} 已使用,已修改备注", $count / $total * 100);
}else{
$up_data['status'] = '7';
Log::write('queue', 'taobao_bz', $order['order_id'].'已使用');#写入到日志里
$this->setQueueProgress("售后订单 {$vo['refund_id']} 已使用,修改备注失败", $count / $total * 100);
}
}else{
$up_notes = $this->tradeUpdate($vo,$request,2);
if($up_notes == 'ok'){
$up_data['status'] = '7';
$this->setQueueProgress("售后订单 {$vo['refund_id']} 锁卡失败,已修改备注", $count / $total * 100);
}else{
$up_data['status'] = '7';
Log::write('queue', 'taobao_bz', $order['order_id'].'已使用');#写入到日志里
$this->setQueueProgress("售后订单 {$vo['refund_id']} 锁卡失败,修改备注失败", $count / $total * 100);
}
Log::write('queue', 'taobao_sk', $order['order_id'].'锁卡失败');#写入到日志里
// $this->setQueueProgress("售后订单 {$vo['refund_id']} 锁卡失败", $count / $total * 100);
}
}
}else{
$up_data['status'] = '8';
}
$field = ['merchant_order_id' => $vo['merchant_order_id']];
$afterSalesOrderService->db()->where($field)->update($up_data);
}
}
});
}
$this->setQueueSuccess("总共找到 {$total_sum} 个,同步关联 {$count_sum} 个订单完成!");
}
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 refundsp($vo,$request)
{
// $request['agentId'] = '34615444';
// $request['agentkey'] = '2e59a0c00b4fafd9ae46bedced6eccc3';
// $mid = '1';
// $merchant = MerchantService::instance()->get($mid);
$request['caozuo_name'] = '系统自动处理';
$request['refundId'] = $vo['refund_id'];
$request['phase'] = $vo['refund_phase'];
$RefundVersion = json_decode($vo['infodata'],true);
$RefundVersion = $RefundVersion['refund_version'];
$request['RefundVersion'] = $RefundVersion;
$request['RefundMsg'] = '未使用,同意退款';#默认同意
$request['RefundStatus'] = 'true';
// $request['access_token'] = $merchant['access_token'];
$response = Coretb::taobaosdk('refundSp', $request);
$json = json_encode($response);
$array = json_decode($json, true);
if($array['is_success'] == 'true'){
return 'true';
}else{
Log::write('queue', 'taobao_sp', $array);#写入到日志里
return 'error';
}
#判断响应是否成功
}
public function refundget($vo,$request)
{
if(isset($request['sub_code'])){
unset($request['sub_code']);
}
// $request['agentId'] = '34615444';
// $request['agentkey'] = '2e59a0c00b4fafd9ae46bedced6eccc3';
// $mid = '1';
// $merchant = MerchantService::instance()->get($mid);
$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 tradeUpdate($vo,$request,$beizhu = 1)
{
// $request['agentId'] = '34615444';
// $request['agentkey'] = '2e59a0c00b4fafd9ae46bedced6eccc3';
// $mid = '1';
// $merchant = MerchantService::instance()->get($mid);
$request['merchant_order_id'] = $vo['merchant_order_id'];
if($beizhu == 1){
$request['beizhu'] = "卡密已使用,请操作拒绝退款,并上传退款凭证--Reapi系统自动化";
}elseif($beizhu == 2){
$request['beizhu'] = "卡密锁卡失败,请操作拒绝退款,并上传退款凭证--Reapi系统自动化";
}elseif ($beizhu == 3){
$request['beizhu'] = "此订单不存在中控系统中,可能属于早期订单,请人工核实处理--Reapi系统自动化";
}
$request['flag'] = "1";
$request['reset'] = "false";
// $request['access_token'] = $merchant['access_token'];
$response = Coretb::taobaosdk('tradeUpdate', $request);
$json = json_encode($response);
$array = json_decode($json, true);
if (isset($array['Trade']['tid']) && $array['Trade']['tid'] == $vo['merchant_order_id']) {
return 'ok';
} else {
return 'error';
}
}
public function refundtk($vo,$request,$num = 0)
{
// $request['agentId'] = '34615444';
// $request['agentkey'] = '2e59a0c00b4fafd9ae46bedced6eccc3';
// $mid = '1';
// $merchant = MerchantService::instance()->get($mid);
// $request['sub_code'] = $merchant['sub_code'];
$RefundVersion = $this->refundget($vo,$request);
if($RefundVersion != 'error'){
$cash = $vo['refund_fee'] * 100;
$request['refund_infos'] = $vo['refund_id'].'|'.$cash.'|'.$RefundVersion .'|'.$vo['refund_phase'];
$response = Coretb::taobaosdk('refundAgree', $request);
$json = json_encode($response);
$array = json_decode($json, true);
if(isset($array['sub_msg']) ){
if(str_contains($array['sub_msg'], "未审核状态")){
while ($num<1) {
$num++;
sleep(3);
return $this->refundtk($vo,$request,$num,);
}
}
}
if (isset($array['succ'])) {
if(isset($array['message']) && $array['message']=='操作成功'){
return 'ok';
}else{
Log::write('queue', 'taobao_tk', $array);#写入到日志里
return 'error';
}
} else {
Log::write('queue', 'taobao_tk', $array);#写入到日志里
return 'error';
}
}else {
Log::write('queue', 'taobao_tk', $RefundVersion);#写入到日志里
return 'error';
}
}
#判断响应是否成功
// #以下为成功,自动切换子账号审批退款
// $request1['agentId'] = '34615444';
// $request1['agentkey'] = '2e59a0c00b4fafd9ae46bedced6eccc3';
// $request1['sub_code'] = $merchant['sub_code'];
// $request['refund_infos'] = $vo['refund_id'].'|'.$cash,
//
//// $req->setCode($request['sub_code']);
//// $req->setRefundInfos("退款订单号|按分金额|退款时间戳|退款状态");
// $req->setRefundInfos($request['refund_infos']);
// $req->setIgnoreCode("true");
// return $c->execute($req, $request['sub_code']);
// $response1 = Coretb::taobaosdk('refundAgree', $request);
#尝试发起锁卡,如果锁卡成功自动退款
#锁卡失败不处理等待rpa机器人自动化处理。
}