diff --git a/app/Constants/v3/OrderState.php b/app/Constants/v3/OrderState.php index af1ff7c..fb7cfb5 100644 --- a/app/Constants/v3/OrderState.php +++ b/app/Constants/v3/OrderState.php @@ -60,6 +60,11 @@ class OrderState extends AbstractConstants */ const REFUND_REFUSE = 10; + /** + * @Message("部分直接退款") + */ + const REFUNDED_DIRECT= 11; + /** * @Message("待送达") */ @@ -73,7 +78,7 @@ class OrderState extends AbstractConstants /** * @Message("售后/退款") */ - const REFUND = [self::REFUNDING, self::REFUNDED, self::REFUND_REFUSE]; + const REFUND = [self::REFUNDING, self::REFUNDED, self::REFUND_REFUSE, self::REFUNDED_DIRECT]; /** * @Message("可删除") diff --git a/app/Controller/v3/HomeController.php b/app/Controller/v3/HomeController.php index 1b39366..f329596 100644 --- a/app/Controller/v3/HomeController.php +++ b/app/Controller/v3/HomeController.php @@ -8,6 +8,7 @@ use App\Constants\v3\OrderState; use App\Constants\v3\OrderType; use App\Constants\v3\SsdbKeys; use App\Constants\v3\Tabs; +use App\Constants\v3\UserType; use App\Controller\BaseController; use App\Model\v3\FinancialRecord; use App\Model\v3\Market; @@ -20,6 +21,7 @@ use App\Service\v3\Interfaces\BannerServiceInterface; use App\Service\v3\Interfaces\CategoryServiceInterface; use App\Service\v3\Interfaces\CollectStoreServiceInterface; use App\Service\v3\Interfaces\CouponRecServiceInterface; +use App\Service\v3\Interfaces\FinancialRecordServiceInterface; use App\Service\v3\Interfaces\OrderOnlineServiceInterface; use App\Service\v3\Interfaces\OrderStatisticsServiceInterface; use App\Service\v3\Interfaces\RevenueListServiceInterface; @@ -113,6 +115,12 @@ class HomeController extends BaseController */ protected $badgeService; + /** + * @Inject + * @var FinancialRecordServiceInterface + */ + protected $financialRecordService; + /** * 小程序首页,根据market_id * 1.banner数据 @@ -211,20 +219,23 @@ class HomeController extends BaseController //统计订单金额 $type = [ FinancialRecord::MONEY_TYPE_STORE_OL_ORDER_COMP, - FinancialRecord::MONEY_TYPE_STORE_OFL_ORDER_COMP + FinancialRecord::MONEY_TYPE_STORE_OFL_ORDER_COMP, + FinancialRecord::MONEY_TYPE_STORE_OL_ORDER_DIRECT_REFUND, ]; - $data['order_online']['total'] = 0; - $data['order_offline']['total'] = 0; - $revenueByOrder = $this->revenueListService->getRevenueByUser($userId,$type,$dayStartTime,$dayEndTime); - foreach ($revenueByOrder as $order){ - if($order['money_type'] == FinancialRecord::MONEY_TYPE_STORE_OL_ORDER_COMP){ - //线上订单 - $data['order_online']['total'] = bcadd($data['order_online']['total'],$order['money'],2); - }else if($order['money_type'] == FinancialRecord::MONEY_TYPE_STORE_OFL_ORDER_COMP){ - //线下订单 - $data['order_offline']['total'] = bcadd($data['order_offline']['total'],$order['money'],2); - } - } + + $sumAmounts = $this->financialRecordService->sumAmountGroup($userId, UserType::STORE, $type, $dayStartTime, $dayEndTime); + $data['order_online']['total'] = bcsub($sumAmounts[FinancialRecord::MONEY_TYPE_STORE_OL_ORDER_COMP],$sumAmounts[FinancialRecord::MONEY_TYPE_STORE_OL_ORDER_DIRECT_REFUND], 2); + $data['order_offline']['total'] = bcadd($sumAmounts[FinancialRecord::MONEY_TYPE_STORE_OFL_ORDER_COMP],'0',2); + // $revenueByOrder = $this->revenueListService->getRevenueByUser($userId,$type,$dayStartTime,$dayEndTime); + // foreach ($revenueByOrder as $order){ + // if($order['money_type'] == FinancialRecord::MONEY_TYPE_STORE_OL_ORDER_COMP){ + // //线上订单 + // $data['order_online']['total'] = bcadd($data['order_online']['total'],$order['money'],2); + // }else if($order['money_type'] == FinancialRecord::MONEY_TYPE_STORE_OFL_ORDER_COMP){ + // //线下订单 + // $data['order_offline']['total'] = bcadd($data['order_offline']['total'],$order['money'],2); + // } + // } //统计新增用户 无法筛选时间 所以和订单分开查询 $revenueByNewUsers = $this->revenueListService->getRevenueByUser($userId,[FinancialRecord::MONEY_TYPE_STORE_PLAT_NEW_USER]); $data['new_user'] = [ diff --git a/app/Controller/v3/OrderOnlineController.php b/app/Controller/v3/OrderOnlineController.php index 77d13ce..ec25f14 100644 --- a/app/Controller/v3/OrderOnlineController.php +++ b/app/Controller/v3/OrderOnlineController.php @@ -136,7 +136,7 @@ class OrderOnlineController extends BaseController $res['store_list'] = $this->shopCartService->getGoodsByShopcartId($shopcartIds); //获取用户优惠券 - $coupons = $this->couponRecService->allForOnlineOrderAvailable($userId, $marketId, explode(',', $shopcartIds)); + $coupons = $this->couponRecService->allForOnlineOrderAvailable( $userId, $marketId, explode(',', $shopcartIds) ); $res['coupon'] = [ 'available' => [], 'not_available' => [], diff --git a/app/JsonRpc/OrdersService.php b/app/JsonRpc/OrdersService.php index 359a007..47945e3 100644 --- a/app/JsonRpc/OrdersService.php +++ b/app/JsonRpc/OrdersService.php @@ -159,7 +159,7 @@ class OrdersService implements OrdersServiceInterface // 主订单 $orderMain = OrderMain::query() ->where(['global_order_id' => $global_order_id, 'user_id' => $user_id]) - ->whereIn('state', array_merge(OrderState::CAN_REFUND_DIRECT, [OrderState::REFUNDED])) + ->whereIn('state', array_merge(OrderState::CAN_REFUND_DIRECT, [OrderState::REFUNDED_DIRECT])) ->first(); if (is_null($orderMain)) { @@ -187,7 +187,9 @@ class OrdersService implements OrdersServiceInterface throw new ErrorCodeException(ErrorCode::ORDER_REFUND_FAIL); } - $orderGoods = OrderGoods::query()->where(['order_id' => $orderChild->id, 'id' => $order_goods_id])->first(); + $orderGoods = OrderGoods::query() + ->where(['order_id' => $orderChild->id, 'id' => $order_goods_id, 'status' => 1]) + ->first(); if (is_null($orderGoods)) { $this->log->event(LogLabel::ORDER_REFUND_LOG, [ @@ -277,7 +279,7 @@ class OrdersService implements OrdersServiceInterface $currentTime = time(); // 处理订单状态 - $orderMain->state = OrderState::REFUNDED; + $orderMain->state = OrderState::REFUNDED_DIRECT; $orderMain->total_refund_note = $note; $orderMain->refund_time = $currentTime; $orderMain->save(); diff --git a/app/Service/v3/Implementations/FinancialRecordService.php b/app/Service/v3/Implementations/FinancialRecordService.php index 74c23f0..c055aaf 100644 --- a/app/Service/v3/Implementations/FinancialRecordService.php +++ b/app/Service/v3/Implementations/FinancialRecordService.php @@ -317,6 +317,36 @@ class FinancialRecordService implements FinancialRecordServiceInterface return bcadd($sumAmount, '0', 2); } + /** + * @inheritDoc + */ + public function sumAmountGroup($user_id, $user_type, $money_type = [], $startTime = 0, $endTime = 0) + { + $financialRecord = new FinancialRecord(); + + if ($user_id != FinancialRecord::ACCOUNT_LEDGER) { + $mod = bcmod((string)$user_id, '5', 0); + $financialRecord->suffix($mod); + } + + $builder = $financialRecord->selectRaw('SUM(money) AS total, money_type') + ->where([ + 'user_id' => $user_id, + 'user_type' => $user_type + ]) + ->whereIn('money_type', $money_type); + + if ($startTime) { + $builder = $builder->where('created_at', '>=', $startTime); + } + + if ($endTime) { + $builder = $builder->where('created_at', '<', $endTime); + } + + return $builder->groupBy('money_type')->pluck('total', 'money_type'); + } + /** * @inheritDoc */ diff --git a/app/Service/v3/Implementations/OrderStatisticsService.php b/app/Service/v3/Implementations/OrderStatisticsService.php index ae586b2..567c86c 100644 --- a/app/Service/v3/Implementations/OrderStatisticsService.php +++ b/app/Service/v3/Implementations/OrderStatisticsService.php @@ -3,6 +3,7 @@ namespace App\Service\v3\Implementations; use App\Constants\v3\OrderState; +use App\Constants\v3\OrderType; use App\Model\v3\Order; use App\Model\v3\OrderGoods; use App\Model\v3\OrderMain; @@ -34,11 +35,23 @@ class OrderStatisticsService implements OrderStatisticsServiceInterface $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]); + ->selectRaw('COUNT(DISTINCT '.$mainTable.'.id) AS count') + ->join($childTable, ''.$childTable.'.order_main_id', '=', ''.$mainTable.'.global_order_id'); + + if ($type == OrderType::ONLINE) { + $builder = $builder->join($goodsTable, ''.$goodsTable.'.order_id', '=', ''.$childTable.'.id'); + } + + $builder = $builder->where([''.$childTable.'.store_id' => $storeId, ''.$mainTable.'.type' => $type]) + ->where(function ($query) use ($mainTable, $goodsTable, $type) { + $query->where(function ($q) use ($mainTable, $goodsTable, $type) { + $q->whereIn(''.$mainTable.'.state', array_merge(OrderState::FINISH, [OrderState::REFUNDED_DIRECT,OrderState::REFUND_REFUSE])); + if ($type == OrderType::ONLINE) { + $q->whereIn(''.$goodsTable.'.status', [1,2]); + } + + })->orWhere(''.$mainTable.'.coupon_money', '>', 0); + }); if ($startTime) { $builder = $builder->where(''.$mainTable.'.created_at', '>=', $startTime); @@ -48,7 +61,7 @@ class OrderStatisticsService implements OrderStatisticsServiceInterface $builder = $builder->where(''.$mainTable.'.created_at', '<=', $endTime); } - return $builder->groupBy(''.$mainTable.'.id')->count(); + return $builder->first()->count; // $builder = Order::join('lanzu_order_main','lanzu_order_main.global_order_id','lanzu_order.order_main_id') // ->where('lanzu_order.store_id',$storeId); diff --git a/app/Service/v3/Interfaces/FinancialRecordServiceInterface.php b/app/Service/v3/Interfaces/FinancialRecordServiceInterface.php index 1d48085..fdfe0cb 100644 --- a/app/Service/v3/Interfaces/FinancialRecordServiceInterface.php +++ b/app/Service/v3/Interfaces/FinancialRecordServiceInterface.php @@ -266,6 +266,23 @@ interface FinancialRecordServiceInterface $money_type = [] ); + /** + * 统计用户金额,按money_type分组 + * @param $user_id + * @param $user_type + * @param array $money_type + * @param int $startTime + * @param int $endTime + * @return mixed + */ + public function sumAmountGroup( + $user_id, + $user_type, + $money_type = [], + $startTime = 0, + $endTime = 0 + ); + /** * 商户微信提现流水 * @param $user_id