You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
142 lines
5.5 KiB
142 lines
5.5 KiB
<?php
|
|
// +----------------------------------------------------------------------
|
|
// | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
|
|
// +----------------------------------------------------------------------
|
|
// | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
|
|
// +----------------------------------------------------------------------
|
|
// | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
|
|
// +----------------------------------------------------------------------
|
|
// | Author: CRMEB Team <admin@crmeb.com>
|
|
// +----------------------------------------------------------------------
|
|
|
|
namespace app\services\order;
|
|
|
|
|
|
use app\dao\order\StoreOrderDao;
|
|
use app\services\activity\combination\StorePinkServices;
|
|
use app\services\BaseServices;
|
|
use app\services\system\store\SystemStoreStaffServices;
|
|
use app\services\user\UserServices;
|
|
use crmeb\exceptions\ApiException;
|
|
|
|
/**
|
|
* 核销订单
|
|
* Class StoreOrderWriteOffServices
|
|
* @package app\sservices\order
|
|
*/
|
|
class StoreOrderWriteOffServices extends BaseServices
|
|
{
|
|
|
|
/**
|
|
* 构造方法
|
|
* StoreOrderWriteOffServices constructor.
|
|
* @param StoreOrderDao $dao
|
|
*/
|
|
public function __construct(StoreOrderDao $dao)
|
|
{
|
|
$this->dao = $dao;
|
|
}
|
|
|
|
/**
|
|
* 订单核销
|
|
* @param string $code
|
|
* @param int $confirm
|
|
* @param int $uid
|
|
* @return mixed
|
|
* @throws \think\db\exception\DataNotFoundException
|
|
* @throws \think\db\exception\DbException
|
|
* @throws \think\db\exception\ModelNotFoundException
|
|
*/
|
|
public function writeOffOrder(string $code, int $confirm, int $uid = 0)
|
|
{
|
|
$orderInfo = $this->dao->getOne([
|
|
['verify_code', '=', $code],
|
|
['paid', '=', 1],
|
|
['refund_status', '=', 0],
|
|
['is_del', '=', 0],
|
|
['pid', '>=', 0]
|
|
]);
|
|
if (!$orderInfo) {
|
|
throw new ApiException(410173);
|
|
}
|
|
if (!$orderInfo['verify_code'] || ($orderInfo->shipping_type != 2 && $orderInfo->delivery_type != 'send')) {
|
|
throw new ApiException(410267);
|
|
}
|
|
/** @var StoreOrderRefundServices $storeOrderRefundServices */
|
|
$storeOrderRefundServices = app()->make(StoreOrderRefundServices::class);
|
|
if ($storeOrderRefundServices->count(['store_order_id' => $orderInfo['id'], 'refund_type' => [1, 2, 4, 5], 'is_cancel' => 0, 'is_del' => 0])) {
|
|
throw new ApiException(410268);
|
|
}
|
|
if ($uid) {
|
|
$isAuth = true;
|
|
switch ($orderInfo['shipping_type']) {
|
|
case 1://配送订单
|
|
/** @var DeliveryServiceServices $deliverServiceServices */
|
|
$deliverServiceServices = app()->make(DeliveryServiceServices::class);
|
|
$isAuth = $deliverServiceServices->getCount(['uid' => $uid, 'status' => 1]) > 0;
|
|
break;
|
|
case 2://自提订单
|
|
/** @var SystemStoreStaffServices $storeStaffServices */
|
|
$storeStaffServices = app()->make(SystemStoreStaffServices::class);
|
|
$staffInfo = $storeStaffServices->get(['uid' => $uid, 'verify_status' => 1, 'status' => 1]);
|
|
if ($staffInfo) {
|
|
$isAuth = true;
|
|
$orderInfo->store_id = $staffInfo->store_id;
|
|
} else {
|
|
$isAuth = false;
|
|
}
|
|
break;
|
|
}
|
|
if (!$isAuth) {
|
|
throw new ApiException(410269);
|
|
}
|
|
}
|
|
if ($orderInfo->status == 2) {
|
|
throw new ApiException(410270);
|
|
}
|
|
/** @var StoreOrderCartInfoServices $orderCartInfo */
|
|
$orderCartInfo = app()->make(StoreOrderCartInfoServices::class);
|
|
$cartInfo = $orderCartInfo->getOne([
|
|
['cart_id', '=', $orderInfo['cart_id'][0]]
|
|
], 'cart_info');
|
|
if ($cartInfo) $orderInfo['image'] = $cartInfo['cart_info']['productInfo']['image'];
|
|
if ($orderInfo->shipping_type == 2) {
|
|
if ($orderInfo->status > 0) {
|
|
throw new ApiException(410270);
|
|
}
|
|
}
|
|
if ($orderInfo->combination_id && $orderInfo->pink_id) {
|
|
/** @var StorePinkServices $services */
|
|
$services = app()->make(StorePinkServices::class);
|
|
$res = $services->getCount([['id', '=', $orderInfo->pink_id], ['status', '<>', 2]]);
|
|
if ($res) throw new ApiException(410271);
|
|
}
|
|
if ($confirm == 0) {
|
|
/** @var UserServices $services */
|
|
$services = app()->make(UserServices::class);
|
|
$orderInfo['nickname'] = $services->value(['uid' => $orderInfo['uid']], 'nickname');
|
|
return $orderInfo->toArray();
|
|
}
|
|
$orderInfo->status = 2;
|
|
if ($uid) {
|
|
if ($orderInfo->shipping_type == 2) {
|
|
$orderInfo->clerk_id = $uid;
|
|
}
|
|
}
|
|
if ($orderInfo->save()) {
|
|
/** @var StoreOrderTakeServices $storeOrdeTask */
|
|
$storeOrdeTask = app()->make(StoreOrderTakeServices::class);
|
|
$re = $storeOrdeTask->storeProductOrderUserTakeDelivery($orderInfo);
|
|
if (!$re) {
|
|
throw new ApiException(410272);
|
|
}
|
|
// 小程序订单管理
|
|
if ($orderInfo['shipping_type'] == 2) {
|
|
event('OrderShipping', ['product', $orderInfo, 1, '123456', '中通快递']);
|
|
}
|
|
return $orderInfo->toArray();
|
|
} else {
|
|
throw new ApiException(410272);
|
|
}
|
|
}
|
|
}
|
|
|