diff --git a/app/JsonRpc/OrdersService.php b/app/JsonRpc/OrdersService.php index 68cc52e..c0329c0 100644 --- a/app/JsonRpc/OrdersService.php +++ b/app/JsonRpc/OrdersService.php @@ -290,6 +290,7 @@ class OrdersService implements OrdersServiceInterface } // 处理用户和商户流水 + $orderChildren = []; if ($refundType == 'main') { # 整单退的话还得处理所有子订单的商户 $orderChildren = Order::query()->with('store:user_id')->where(['order_main_id' => $orderMain->global_order_id])->get(); @@ -304,12 +305,18 @@ class OrdersService implements OrdersServiceInterface } } elseif ($refundType == 'sub'||$refundType == 'goods') { # 退子订单或者退单品的话,商户只有一个 + $orderChildren = Order::query()->with('store:user_id')->where(['id' => $order_child_id])->get(); $this->financialRecordService->storeRefundDirect($orderChild->store->user_id, $orderChild->id, $refundAmount); } $this->financialRecordService->userRefundDirect($orderMain->user_id, $orderMain->global_order_id, $refundAmount); Db::commit(); + + // 记录badge + $orderChildIds = array_values(array_column($orderChildren, 'store_id')); + $this->badgeService->doByOrder($orderMain->user_id, $orderChildIds, $orderMain->global_order_id, OrderState::REFUNDED); + return [ "status" => 200, "code" => 0, diff --git a/app/Service/v3/Implementations/OrderStatisticsService.php b/app/Service/v3/Implementations/OrderStatisticsService.php index 99b14bb..ae586b2 100644 --- a/app/Service/v3/Implementations/OrderStatisticsService.php +++ b/app/Service/v3/Implementations/OrderStatisticsService.php @@ -4,7 +4,10 @@ namespace App\Service\v3\Implementations; use App\Constants\v3\OrderState; use App\Model\v3\Order; +use App\Model\v3\OrderGoods; +use App\Model\v3\OrderMain; use \App\Service\v3\Interfaces\OrderStatisticsServiceInterface; +use Hyperf\Utils\ApplicationContext; class OrderStatisticsService implements OrderStatisticsServiceInterface { @@ -26,14 +29,35 @@ class OrderStatisticsService implements OrderStatisticsServiceInterface public function countOrder($storeId,$type,$startTime = '',$endTime = '') { - $builder = Order::join('lanzu_order_main','lanzu_order_main.global_order_id','lanzu_order.order_main_id') - ->where('lanzu_order.store_id',$storeId); - if(!empty($startTime) && !empty($endTime)){ - $builder->whereBetween('lanzu_order_main.created_at',[$startTime,$endTime]); + $childTable = ApplicationContext::getContainer()->get(Order::class)->getTable(); + $mainTable = ApplicationContext::getContainer()->get(OrderMain::class)->getTable(); + $goodsTable = ApplicationContext::getContainer()->get(OrderGoods::class)->getTable(); + + $builder = OrderMain::query() + ->join($childTable, ''.$childTable.'.order_main_id', '=', ''.$mainTable.'.global_order_id') + ->join($goodsTable, ''.$goodsTable.'.order_id', '=', ''.$childTable.'.id') + ->where([''.$childTable.'.store_id' => $storeId, ''.$mainTable.'.type' => $type]) + ->whereIn(''.$mainTable.'.state', array_merge(OrderState::FINISH, [OrderState::REFUNDED,OrderState::REFUND_REFUSE])) + ->whereIn(''.$goodsTable.'.status', [1,2]); + + if ($startTime) { + $builder = $builder->where(''.$mainTable.'.created_at', '>=', $startTime); + } + + if ($endTime) { + $builder = $builder->where(''.$mainTable.'.created_at', '<=', $endTime); } - $count = $builder->whereIn('lanzu_order_main.state', OrderState::FINISH) - ->where('type',$type) - ->count(); - return $count; + + return $builder->groupBy(''.$mainTable.'.id')->count(); + + // $builder = Order::join('lanzu_order_main','lanzu_order_main.global_order_id','lanzu_order.order_main_id') + // ->where('lanzu_order.store_id',$storeId); + // if(!empty($startTime) && !empty($endTime)){ + // $builder->whereBetween('lanzu_order_main.created_at',[$startTime,$endTime]); + // } + // $count = $builder->whereIn('lanzu_order_main.state', OrderState::FINISH) + // ->where('type',$type) + // ->count(); + // return $count; } } \ No newline at end of file