Browse Source

我的订单/订单自动取消/社区服务点余额问题修复

master
weigang 5 years ago
parent
commit
4d9870e801
  1. 2
      app/Constants/LogLabel.php
  2. 15
      app/Controller/OrderController.php
  3. 30
      app/Model/Market.php
  4. 3
      app/Model/OrderMain.php
  5. 39
      app/Request/UserOrdersRequest.php
  6. 6
      app/Service/FinancialRecordService.php
  7. 80
      app/Service/OrderService.php
  8. 17
      app/Service/OrderServiceInterface.php
  9. 1
      config/routes.php

2
app/Constants/LogLabel.php

@ -59,4 +59,6 @@ class LogLabel extends AbstractConstants
*/ */
const PAY_NOTIFY_REFUND = 'notify_refund'; const PAY_NOTIFY_REFUND = 'notify_refund';
const AUTO_CANCEL_USER_ORDER = 'auto_cancel_user_order_log';
} }

15
app/Controller/OrderController.php

@ -7,6 +7,7 @@ use App\Constants\LogLabel;
use App\Model\OrderMain; use App\Model\OrderMain;
use App\Request\OrderOfflineRequest; use App\Request\OrderOfflineRequest;
use App\Request\OrderOnlineRequest; use App\Request\OrderOnlineRequest;
use App\Request\UserOrdersRequest;
use App\Service\SeparateAccountsServiceInterface; use App\Service\SeparateAccountsServiceInterface;
use Hyperf\DbConnection\Db; use Hyperf\DbConnection\Db;
use Hyperf\Di\Annotation\Inject; use Hyperf\Di\Annotation\Inject;
@ -109,4 +110,18 @@ class OrderController extends BaseController
return $this->success($this->orderService->onlineCancel($orderMain->global_order_id)); return $this->success($this->orderService->onlineCancel($orderMain->global_order_id));
} }
/**
* 用户订单
* @param UserOrdersRequest $request
* @return \Psr\Http\Message\ResponseInterface
*/
public function userOnlineOrders(UserOrdersRequest $request)
{
$params = $request->validated();
$this->orderService->onlineAutoCancelByUserId($params['user_id']);
$result = $this->orderService->userOnlineOrders($params['user_id'], $params['state'], $params['page'], $params['pagesize']);
return $this->success($result);
}
} }

30
app/Model/Market.php

@ -0,0 +1,30 @@
<?php
declare (strict_types=1);
namespace App\Model;
/**
*/
class Market extends Model
{
/**
* The table associated with the model.
*
* @var string
*/
protected $table = 'ims_cjdc_market';
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [];
/**
* The attributes that should be cast to native types.
*
* @var array
*/
protected $casts = [];
public $timestamps = false;
}

3
app/Model/OrderMain.php

@ -11,6 +11,9 @@ class OrderMain extends Model
// 线下订单,当面付 // 线下订单,当面付
const ORDER_TYPE_OFFLINE = 4; const ORDER_TYPE_OFFLINE = 4;
const ORDER_DEL_YES = 1;
const ORDER_DEL_NO = 2;
// 订单状态 // 订单状态
// 待付款 // 待付款
const ORDER_STATE_UNPAY = 1; const ORDER_STATE_UNPAY = 1;

39
app/Request/UserOrdersRequest.php

@ -0,0 +1,39 @@
<?php
declare(strict_types=1);
namespace App\Request;
use Hyperf\Validation\Request\FormRequest;
class UserOrdersRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*/
public function authorize(): bool
{
return true;
}
/**
* Get the validation rules that apply to the request.
*/
public function rules(): array
{
return [
'user_id' => 'required|nonempty|integer',
'market_id' => 'required|nonempty|integer',
'state' => 'required|integer',
'page' => 'required|nonempty|integer',
'pagesize' => 'required|nonempty|integer',
];
}
public function messages(): array
{
return [
'*.*' => ':attribute 参数不正确',
];
}
}

6
app/Service/FinancialRecordService.php

@ -75,7 +75,7 @@ class FinancialRecordService implements FinancialRecordServiceInterface
'user_type' => UserBalance::USER_TYPE_CS, 'user_type' => UserBalance::USER_TYPE_CS,
'source_id' => $user_id 'source_id' => $user_id
]); ]);
$balance->balance = bcadd($balance->balance, $money);
$balance->balance = bcadd($balance->balance, $money, 2);
$balance->save(); $balance->save();
} }
@ -99,7 +99,7 @@ class FinancialRecordService implements FinancialRecordServiceInterface
'user_type' => UserBalance::USER_TYPE_CS, 'user_type' => UserBalance::USER_TYPE_CS,
'source_id' => $user_id 'source_id' => $user_id
]); ]);
$balance->balance = bcadd($balance->balance, $money);
$balance->balance = bcadd($balance->balance, $money, 2);
$balance->save(); $balance->save();
} }
@ -123,7 +123,7 @@ class FinancialRecordService implements FinancialRecordServiceInterface
'user_type' => UserBalance::USER_TYPE_CS, 'user_type' => UserBalance::USER_TYPE_CS,
'source_id' => $user_id 'source_id' => $user_id
]); ]);
$balance->balance = bcadd($balance->balance, $money);
$balance->balance = bcadd($balance->balance, $money,2);
$balance->save(); $balance->save();
} }

80
app/Service/OrderService.php

@ -8,6 +8,7 @@ use App\Model\Coupon;
use App\Model\CouponRec; use App\Model\CouponRec;
use App\Model\CouponUserUse; use App\Model\CouponUserUse;
use App\Model\Goods; use App\Model\Goods;
use App\Model\Market;
use App\Model\Order; use App\Model\Order;
use App\Model\OrderGoods; use App\Model\OrderGoods;
use App\Model\OrderMain; use App\Model\OrderMain;
@ -857,4 +858,83 @@ class OrderService implements OrderServiceInterface
$ssdb = ApplicationContext::getContainer()->get(SSDBTask::class); $ssdb = ApplicationContext::getContainer()->get(SSDBTask::class);
return $ssdb->exec('del', SsdbKeysPrefix::PURCHASE_RECORD. date('Ymd') .'_'.$userId, $goodId); return $ssdb->exec('del', SsdbKeysPrefix::PURCHASE_RECORD. date('Ymd') .'_'.$userId, $goodId);
} }
/**
* @inheritDoc
*/
public function onlineAutoCancelByUserId($user_id)
{
Db::beginTransaction();
try {
$orders = OrderMain::query()
->select(['id', 'global_order_id'])
->where([
'user_id' => $user_id,
'state' => OrderMain::ORDER_STATE_UNPAY
])
->where('time_add', '<', (time()-900))
->get()->toArray();
foreach ($orders as $key => &$item) {
$order = OrderMain::query()->find($item['id']);
$order->state = OrderMain::ORDER_STATE_CANCEL;
$order->save();
$this->couponService->orderRefundCoupons($item['global_order_id']);
}
Db::commit();
return true;
} catch (Exception $e) {
$this->log->event(LogLabel::AUTO_CANCEL_USER_ORDER, ['exception' => $e->getMessage()]);
Db::rollBack();
return false;
}
}
/**
* @inheritDoc
*/
public function userOnlineOrders($user_id, $state, $page=1, $pagesize=10)
{
$builder = OrderMain::query()
->where(['user_id' => $user_id, 'del' => OrderMain::ORDER_DEL_NO, 'type' => OrderMain::ORDER_TYPE_ONLINE]);
if ($state != 0) {
$state = explode(',', $state);
$builder = $builder->whereIn('state', $state);
}
$orders = $builder->get()->forPage($page, $pagesize)->toArray();
foreach ($orders as $key => &$order) {
// 市场名称
$order['market_name'] = Market::query()->where(['id' => $order['market_id']])->value('name');
// 商品数量和第一个商品名、图
$orderChildIds = Order::query()->select(['id'])->where(['order_main_id' => $order['id']])->get()->toArray();
$orderChildIds = array_values(array_column($orderChildIds, 'id'));
$order['g_num'] = OrderGoods::query()->whereIn('order_id', $orderChildIds)->count();
$goods = OrderGoods::query()->whereIn('order_id', $orderChildIds)->select(['name', 'img'])->first();
$order['good_name'] = $goods->name;
// TODO 临时写死oss压缩类型
$order['img'] = $this->switchImgToAliOss($goods->img);
}
return $orders;
}
public function switchImgToAliOss($path, $bucket = 'thumbnail_q50')
{
if (strpos($path, 'http') === false || strpos($path, 'https') === false) {
$path = 'https://img.lanzulive.com/' . $path;
} else {
$temp = explode('//', $path);
$temp = explode('/', $temp[1]);
unset($temp[0]);
$path = 'https://img.lanzulive.com/' . implode('/', $temp);
}
return $path . '!' . $bucket;
}
} }

17
app/Service/OrderServiceInterface.php

@ -72,4 +72,21 @@ interface OrderServiceInterface
* 删除特价商品缓存 * 删除特价商品缓存
*/ */
public function clearTodayGoodPurchase($userId, $goodId); public function clearTodayGoodPurchase($userId, $goodId);
/**
* 自动取消订单
* 用户待付款订单超时15分钟未付款
* @param $user_id
*/
public function onlineAutoCancelByUserId($user_id);
/**
* 用户订单
* @param $user_id
* @param $state
* @param int $page
* @param int $pagesize
* @return mixed
*/
public function userOnlineOrders($user_id, $state, $page=1, $pagesize=10);
} }

1
config/routes.php

@ -52,6 +52,7 @@ Router::addGroup('/v1/',function (){
Router::post('Order/addOffline', 'App\Controller\OrderController@addOfflineOrder'); Router::post('Order/addOffline', 'App\Controller\OrderController@addOfflineOrder');
Router::post('Order/onlineCancel', 'App\Controller\OrderController@onlineCancel'); Router::post('Order/onlineCancel', 'App\Controller\OrderController@onlineCancel');
Router::post('Order/userComp', 'App\Controller\OrderController@userComp'); Router::post('Order/userComp', 'App\Controller\OrderController@userComp');
Router::post('Order/userOnlineOrders', 'App\Controller\OrderController@userOnlineOrders');
//小程序支付相关 //小程序支付相关
Router::post('wxminipay/online', 'App\Controller\PaymentController@wxminiPayOnline'); Router::post('wxminipay/online', 'App\Controller\PaymentController@wxminiPayOnline');

Loading…
Cancel
Save