周总批发商场
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.
 
 
 
 
 
 
dianshang/crmeb/app/services/order/StoreOrderWriteOffServices.php

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