Browse Source

Merge branch 'phoenix' of http://120.24.33.109:11081/hyzjshwo/lanzu_api_hyperf into phoenix

master
Lemon 5 years ago
parent
commit
d035ffda78
  1. 5
      app/Constants/v3/LogLabel.php
  2. 4
      app/Controller/v3/NotifyController.php
  3. 2
      app/Crontab/AutoCancelOrder.php
  4. 4
      app/JsonRpc/OrdersService.php
  5. 92
      app/Service/v3/Implementations/OrderOnlineService.php

5
app/Constants/v3/LogLabel.php

@ -102,4 +102,9 @@ class LogLabel extends AbstractConstants
*/
const PAY_TO_WX_FAIL_LOG = 'pay_to_wx_fail_log';
/**
* @Message("自动取消订单失败")
*/
const ORDER_AUTO_CANCEL_FAIL_LOG = 'order_auto_cancel_fail_log';
}

4
app/Controller/v3/NotifyController.php

@ -322,8 +322,8 @@ class NotifyController extends BaseController
// 查询订单
$orderMain = OrderMain::query()
->whereIn('state', [OrderState::PAID, OrderState::DELIVERY, OrderState::COMPLETED, OrderState::EVALUATED, OrderState::REFUNDING])
->where(['global_order_id' => $reqInfo['out_trade_no'], 'pay_type' => Payment::WECHAT, 'refund_time' => 0])
->whereNotIn('state', [OrderState::UNPAID])
->where(['global_order_id' => $reqInfo['out_trade_no'], 'pay_type' => Payment::WECHAT])
->first();
// 订单不存在

2
app/Crontab/AutoCancelOrder.php

@ -7,7 +7,7 @@ use Hyperf\Crontab\Annotation\Crontab;
use Hyperf\Di\Annotation\Inject;
/**
* @Crontab(name="autocancelorder", rule="*\/5 * * * * *", callback="execute", memo="自定取消15分钟过期订单")
* @Crontab(name="autocancelorder", rule="*\/1 * * * *", callback="execute", memo="自定取消15分钟过期订单")
*/
class AutoCancelOrder
{

4
app/JsonRpc/OrdersService.php

@ -154,7 +154,7 @@ class OrdersService implements OrdersServiceInterface
// 主订单
$orderMain = OrderMain::query()
->where(['global_order_id' => $global_order_id, 'user_id' => $user_id])
->whereIn('state', OrderState::CAN_REFUND_DIRECT)
->whereIn('state', array_merge(OrderState::CAN_REFUND_DIRECT, [OrderState::REFUNDED]))
->first();
if (is_null($orderMain)) {
@ -302,7 +302,7 @@ class OrdersService implements OrdersServiceInterface
$this->financialRecordService->storeRefundDirect($order->store->user_id, $order->id, $refundStoreAmount);
}
} elseif ($refundType == 'sub') { # 退子订单或者退单品的话,商户只有一个
} elseif ($refundType == 'sub'||$refundType == 'goods') { # 退子订单或者退单品的话,商户只有一个
$this->financialRecordService->storeRefundDirect($orderChild->store->user_id, $orderChild->id, $refundAmount);
}

92
app/Service/v3/Implementations/OrderOnlineService.php

@ -639,6 +639,22 @@ class OrderOnlineService implements OrderOnlineServiceInterface
$orderMain = $this->check($globalOrderId, $userId, OrderState::REFUNDING);
$orderIds = Order::query()->where(['order_main_id' => $orderMain->global_order_id])->pluck('id');
$orderGoods = OrderGoods::query()->whereIn('order_id', $orderIds)->get()->toArray();
// 释redis库存
$redis = ApplicationContext::getContainer()->get(Redis::class);
foreach ($orderGoods as $k => &$goodsItem) {
// 拼接activity_type和goods_id
$inventoryKey = 'goods_inventory_sold_'.$goodsItem['activity_type'].'_'.$goodsItem['goods_id'];
// redis记录当前商品的购买数量,压库存,下单失败、下单成功扣库存成功、订单取消的时候释放
if (!$redis->exists($inventoryKey)) {
$redis->set($inventoryKey, 0);
} else {
$redis->decrBy($inventoryKey, intval($goodsItem['number']));
}
}
// 微信退款
if ($orderMain->pay_type == Payment::WECHAT) {
return $this->paymentService->undo($orderMain->global_order_id, $userId);
@ -647,51 +663,55 @@ class OrderOnlineService implements OrderOnlineServiceInterface
public function autoCancel()
{
$orderMains = OrderMain::query()
->select(['global_order_id', 'user_id'])
->where(['state' => OrderState::UNPAID])
->where('created_at', '<', time()-900)
->get();
foreach ($orderMains as $key => &$orderMain) {
try {
// 订单待支付
$orderMain->state = OrderState::CANCELED;
if (!$orderMain->save()) {
throw new ErrorCodeException(ErrorCode::ORDER_NOT_AVAILABLE);
}
$orderMains = OrderMain::query()
->where(['state' => OrderState::UNPAID])
->where('created_at', '<', time()-900)
->get();
// 退还优惠券
$this->couponService->orderRefundCoupons($orderMain->global_order_id);
foreach ($orderMains as $key => &$orderMain) {
// 撤销活动商品购买记录
$orders = Order::query()->where(['order_main_id' => $orderMain->global_order_id])->get()->toArray();
$orderGoods = OrderGoods::query()
->whereIn('order_id', array_values(array_column($orders, 'id')))
->get()
->toArray();
foreach ($orderGoods as $key => &$goods) {
if ($goods['activity_type'] == 2) {
$this->goodsActivityService->clearCacheRecord($goods['goods_id'], $goods['number'], $orderMain->user_id);
// 订单取消
OrderMain::query()->where(['id' => $orderMain->id])->update(['state' => OrderState::CANCELED]);
// 退还优惠券
$this->couponService->orderRefundCoupons($orderMain->global_order_id);
// 撤销活动商品购买记录
$orders = Order::query()->where(['order_main_id' => $orderMain->global_order_id])->get()->toArray();
$orderGoods = OrderGoods::query()
->whereIn('order_id', array_values(array_column($orders, 'id')))
->get()
->toArray();
foreach ($orderGoods as $key => &$goods) {
if ($goods['activity_type'] == 2) {
$this->goodsActivityService->clearCacheRecord($goods['goods_id'], $goods['number'], $orderMain->user_id);
}
}
}
// 释redis库存
$redis = ApplicationContext::getContainer()->get(Redis::class);
foreach ($orderGoods as $k => &$goodsItem) {
// 拼接activity_type和goods_id
$inventoryKey = 'goods_inventory_sold_'.$goodsItem['activity_type'].'_'.$goodsItem['goods_id'];
// redis记录当前商品的购买数量,压库存,下单失败、下单成功扣库存成功、订单取消的时候释放
if (!$redis->exists($inventoryKey)) {
$redis->set($inventoryKey, 0);
} else {
$redis->decrBy($inventoryKey, intval($goodsItem['number']));
// 释redis库存
$redis = ApplicationContext::getContainer()->get(Redis::class);
foreach ($orderGoods as $k => &$goodsItem) {
// 拼接activity_type和goods_id
$inventoryKey = 'goods_inventory_sold_'.$goodsItem['activity_type'].'_'.$goodsItem['goods_id'];
// redis记录当前商品的购买数量,压库存,下单失败、下单成功扣库存成功、订单取消的时候释放
if (!$redis->exists($inventoryKey)) {
$redis->set($inventoryKey, 0);
} else {
$redis->decrBy($inventoryKey, intval($goodsItem['number']));
}
}
// 记录badge
$orderChildIds = array_values(array_column($orders, 'store_id'));
$this->badgeService->doByOrder($orderMain->user_id, $orderChildIds, $orderMain->global_order_id, OrderState::CANCELED);
}
// 记录badge
$orderChildIds = array_values(array_column($orders, 'store_id'));
$this->badgeService->doByOrder($orderMain->user_id, $orderChildIds, $orderMain->global_order_id, OrderState::CANCELED);
} catch (Exception $e) {
$this->log->event(LogLabel::ORDER_AUTO_CANCEL_FAIL_LOG, ['message' => $e->getMessage()]);
}
}
}
Loading…
Cancel
Save