REAPI/app/queue/command/order/OrderFinish.php
mzeros a6216a09e1 feat(channel): 添加渠道 IP 白名单功能
- 新增 IP白名单设置页面和相关逻辑- 实现 IP 白名单的添加和修改功能
- 与宝塔防火墙进行集成,自动同步 IP 白名单
- 卡卡云渠道支持
- 自动选择最优价格
- 修改完成订单迁移bug
- 提单错误异常捕捉提醒
- 飞之度推单支持
2024-12-13 16:17:54 +08:00

274 lines
7.5 KiB
PHP

<?php
namespace app\queue\command\order;
use app\merchant\service\MerchantService;
use app\merchant\service\OrderHistoryService;
use app\merchant\service\OrderLastHistoryService;
use app\merchant\service\OrderLastweekHistoryService;
use app\merchant\service\OrderService;
//use app\order\service\Kami91OrderService;
use app\merchant\service\OrderTwoHistoryService;
use think\admin\Command;
use think\console\Input;
use think\console\Output;
use think\Collection;
/**
* 完成订单迁移
* Class KamiOrderTimeoutRefund
* @package app\data\command
*/
class OrderFinish extends Command
{
protected function configure()
{
// $this->setName('xQueue:Book');
// $this->setDescription('导入章节内容');
$this->setName('xQueue:OrderFinish')->setDescription('[ 订单列表 ] 完成订单迁移');
}
/**
* @param Input $input
* @param Output $output
* @throws \think\admin\Exception
*/
protected function execute(Input $input, Output $output)
{
ini_set('memory_limit', '1024M');
$page = 1;
while ($this->finishOne_last('', $page)) {
$page++;
}
$page = 1;
while ($this->finishOne_two('', $page)) {
$page++;
}
$page = 1;
while ($this->finishOne_history('', $page)) {
$page++;
}
$this->setQueueSuccess("完成订单迁移!");
}
#上周
public function finishOne_lastWeek($day, $page)
{
$orderService = OrderService::instance();
$orderLastWeekHistoryService = OrderLastweekHistoryService::instance();
$data = $this->getFinishData($day, $page, $orderService,5);
list($count, $total) = [0, $data->count()];
if($total==0){
return false;
}
return $data->chunk(1000, function (Collection $data) use (&$count, $total, $orderService, $orderLastWeekHistoryService) {
foreach ($data->toArray() as $vo) {
if ($vo) {
# 先插入一条历史数据
$id = $vo['id'];
unset($vo['id']);
$state = $orderLastWeekHistoryService->up($vo);
if ($state) {
$orderService->del($id);
$count++;
$this->setQueueProgress("迁移最近一周订单 {$vo['order_id']} ", $count / $total * 100);
}
}else{
return false;
}
}
return true;
});
}
#上个月
public function finishOne_last($day, $page)
{
$orderLastHistoryService = OrderLastHistoryService::instance();
$orderLastWeekHistoryService = OrderLastweekHistoryService::instance();
$data = $this->getFinishData($day, $page, $orderLastWeekHistoryService,2);
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;
});
}
#上2-3个月
public function finishOne_two($day, $page)
{
$orderLastHistoryService = OrderLastHistoryService::instance();
$orderTwoHistoryService = OrderTwoHistoryService::instance();
$data = $this->getFinishData($day, $page, $orderLastHistoryService,3);
list($count, $total) = [0, $data->count()];
if($total==0){
return false;
}
return $data->chunk(1000, function (Collection $data) use (&$count, $total, $orderLastHistoryService, $orderTwoHistoryService) {
foreach ($data->toArray() as $vo) {
if ($vo) {
# 先插入一条历史数据
$id = $vo['id'];
unset($vo['id']);
$state = $orderTwoHistoryService->up($vo);
if ($state) {
$orderLastHistoryService->del($id);
$count++;
$this->setQueueProgress("迁移最近2-3个月订单 {$vo['order_id']} ", $count / $total * 100);
}
}else{
return false;
}
}
return true;
});
}
#历史
public function finishOne_history($day, $page)
{
$orderHistoryService = OrderHistoryService::instance();
$orderTwoHistoryService = OrderTwoHistoryService::instance();
$data = $this->getFinishData($day, $page, $orderHistoryService,4);
list($count, $total) = [0, $data->count()];
if($total==0){
return false;
}
return $data->chunk(1000, function (Collection $data) use (&$count, $total, $orderHistoryService, $orderTwoHistoryService) {
foreach ($data->toArray() as $vo) {
if ($vo) {
# 先插入一条历史数据
$id = $vo['id'];
unset($vo['id']);
$state = $orderHistoryService->up($vo);
if ($state) {
$orderTwoHistoryService->del($id);
$count++;
$this->setQueueProgress("迁移超三月历史订单 {$vo['order_id']} ", $count / $total * 100);
}
}else{
return false;
}
}
return true;
});
}
// return true;
public function getFinishData($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('-30 day'));
$day = date('Y-m-d', strtotime('-8 day'));
}
if($type == 3){
$start = date('Y-m-d', strtotime('-90 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);
}
return $db;
}
}