REAPI/app/queue/command/taobao/TaobaoAfterSalesOrdeRelated.php.bak
2024-09-29 15:43:18 +08:00

515 lines
24 KiB
PHP
Raw Permalink 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\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机器人自动化处理。
}