Browse Source

Merge branch '0927-orderstatistics' into master

master
weigang 5 years ago
parent
commit
42a00a3df1
  1. 7
      app/Constants/v3/OrderState.php
  2. 37
      app/Controller/v3/HomeController.php
  3. 8
      app/JsonRpc/OrdersService.php
  4. 30
      app/Service/v3/Implementations/FinancialRecordService.php
  5. 25
      app/Service/v3/Implementations/OrderStatisticsService.php
  6. 17
      app/Service/v3/Interfaces/FinancialRecordServiceInterface.php

7
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("可删除")

37
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'] = [

8
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();

30
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
*/

25
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);

17
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

Loading…
Cancel
Save