253 lines
10 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2020 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
namespace app\controller\cashier;
use app\Request;
use app\services\activity\table\TableSeatsServices;
use app\services\activity\table\TableQrcodeServices;
use app\services\message\NoticeService;
use app\services\order\StoreOrderCartInfoServices;
use app\services\order\StoreOrderServices;
use app\services\other\CategoryServices;
use app\services\store\SystemStoreStaffServices;
use app\services\user\UserServices;
use app\services\other\queue\QueueServices;
use app\services\other\QrcodeServices;
use app\services\activity\collage\UserCollageCodeServices;
use app\services\activity\collage\UserCollagePartakeServices;
/**
* 收银台桌码
* Class Table
* @package app\controller\cashier
*/
class Table extends AuthController
{
/**桌码管理
* @param CategoryServices $services
* @return \think\Response
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function getTableCode(CategoryServices $services)
{
$where = ['type' => 1, 'relation_id' => $this->storeId, 'group' => 6, 'is_show' => 1];
$list = $services->getTableCodeCateList($where, ['id', 'relation_id', 'name', 'group'], ['tableQrcode']);
return $this->success($list);
}
/**桌码订单列表
* @param Request $request
* @param UserCollageCodeServices $services
* @return \think\Response
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function getTableCodeList(Request $request, UserCollageCodeServices $services)
{
$where = $request->getMore([
['type', 10],
['status', ''],
['time', ''],
['staff_id', 0],
['keyword', '', '', 'serial_number']
]);
if ($where['time'] && is_array($where['time']) && count($where['time']) == 2) {
[$start, $end] = $where['time'];
if (strtotime($start) > strtotime($end)) {
return $this->fail('开始时间不能大于结束时间,请重新选择时间');
}
}
if (isset($where['status']) && $where['status'] == '') {
$where['status'] = [0, 1, 2, 3];
} else if (isset($where['status']) && $where['status'] == 1) {
$where['status'] = [0, 1];
}
$where['store_id'] = $this->storeId;
$data = $services->getStoreTableCodeList($where);
return $this->success($data);
}
/**订单购物车信息
* @param $oid
* @return mixed
*/
public function getOrderInfo($oid)
{
/** @var StoreOrderServices $orderService */
$orderService = app()->make(StoreOrderServices::class);
$orderInfo = $orderService->get($oid, ['id', 'uid', 'order_id', 'status as order_status', 'pay_type', 'paid', 'deduction_price', 'coupon_price', 'total_price', 'pay_price', 'change_price', 'paid', 'refund_status', 'staff_id', 'remark', 'is_del', 'is_system_del']);
if ($orderInfo) {
$orderInfo = $orderInfo->toArray();
} else {
return $this->success([]);
}
if ($orderInfo['paid'] == 1 && $orderInfo['refund_status'] == 4) {
$orderInfo['status_name'] = '退款中';
} else if ($orderInfo['paid'] == 1 && $orderInfo['refund_status'] == 3) {
$orderInfo['status_name'] = '部分退款';
} else if ($orderInfo['paid'] == 1 && $orderInfo['refund_status'] == 2) {
$orderInfo['status_name'] = '已退款';
} else {
$orderInfo['status_name'] = '';
}
/** @var UserServices $userService */
$userService = app()->make(UserServices::class);
$orderInfo['userInfo'] = $userService->getUserInfo($orderInfo['uid']);
$orderInfo['staff'] = [];
if (isset($orderInfo['staff_id']) && $orderInfo['staff_id']) {
/** @var SystemStoreStaffServices $staffService */
$staffService = app()->make(SystemStoreStaffServices::class);
$staff = $staffService->get((int)$orderInfo['staff_id'], ['uid', 'staff_name']);
$orderInfo['staff'] = $staff ?? [];
}
/** @var StoreOrderCartInfoServices $services */
$services = app()->make(StoreOrderCartInfoServices::class);
$_info = $services->getOrderCartInfo((int)$oid);
foreach ($_info as $key => &$item) {
$item['cart_info']['vip_sum_truePrice'] = bcmul($item['cart_info']['vip_truePrice'], $item['cart_info']['cart_num'] ? $item['cart_info']['cart_num'] : 1, 2);
}
$orderInfo['_info'] = $_info;
//核算优惠金额
$vipTruePrice = 0;
foreach ($orderInfo['_info'] ?? [] as $key => $cart) {
$vipTruePrice = bcadd((string)$vipTruePrice, (string)$cart['cart_info']['vip_sum_truePrice'], 2);
}
$orderInfo['vip_true_price'] = $vipTruePrice;
$orderInfo['is_cashier_yue_pay_verify'] = (int)sys_config('is_cashier_yue_pay_verify'); // 收银台余额支付是否需要验证【是/否】
return $this->success($orderInfo);
}
/**获取全部点餐用户信息
* @param Request $request
* @param UserCollagePartakeServices $services
* @return \think\Response
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function getTableCodeUserAll(Request $request, UserCollagePartakeServices $services)
{
$where = $request->getMore([
['table_id', 0],
]);
if (!$where['table_id']) return $this->fail('参数有误!');
$store_id = (int)$this->storeId;
$uids = $services->tableCodeUserAll($where, $store_id);
return $this->success($uids);
}
/**
* 购物车处理
* @param Request $request
* @return mixed
*/
public function getCartList(Request $request)
{
[$table_id, $uid] = $request->getMore([
['table_id', 0],
['uid', 0],
], true);
if (!$table_id) return app('json')->fail('参数有误!');
/** @var UserCollagePartakeServices $partakeService */
$partakeService = app()->make(UserCollagePartakeServices::class);
$cartIds = $partakeService->allUserSettleAccountsTableCode($table_id, $uid, 10);
return $this->success($cartIds);
}
/**收银台购物车数量操作
* @param Request $request
* @return mixed
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function editCart(Request $request)
{
$where = $request->postMore([
['productId', 0],//普通商品编号
[['cartNum', 'd'], 1], //购物车数量
['uniqueId', ''],//属性唯一值
['tableId', 0],//桌码ID
['isAdd', 1],//购物车数量加减 1 加 0 减
]);
$store_id = (int)$this->storeId;
/** @var UserCollagePartakeServices $partakeService */
$partakeService = app()->make(UserCollagePartakeServices::class);
$res = $partakeService->editTableCartProduct($where, $store_id);
if ($res) {
return $this->success('ok');
} else {
return $this->fail('操作失败');
}
}
/**取消桌码
* @param Request $request
* @param UserCollageCodeServices $services
* @return \think\Response
*/
public function cancelInitiateTable(Request $request, UserCollageCodeServices $services)
{
[$tableId, $qrcodeId, $oid] = $request->getMore([
['tableId', 0],
['qrcode_id', 0],
['oid', 0],
], true);
$where = ['status' => -1];
if (!$tableId) return app('json')->fail('参数有误!');
$res = $services->userUpdate((int)$tableId, $where);
if ($res) {
/** @var UserCollagePartakeServices $partakeService */
$partakeService = app()->make(UserCollagePartakeServices::class);
$partakeService->del(['collate_code_id' => $tableId]);
/** @var TableQrcodeServices $qrcodeService */
$qrcodeService = app()->make(TableQrcodeServices::class);
$qrcodeService->update($qrcodeId, ['is_use' => 0, 'eat_number' => 0, 'order_time' => 0]);
if ($oid) {
/** @var StoreOrderServices $orderService */
$orderService = app()->make(StoreOrderServices::class);
$orderService->update($oid, ['is_del' => 1, 'is_system_del' => 1]);
}
return app('json')->successful('ok');
} else {
return app('json')->fail('取消失败');
}
}
/**
* 手动打单
* @param Request $request
* @param UserCollageCodeServices $services
* @return \think\Response
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
*/
public function staffPlaceOrder(Request $request, UserCollageCodeServices $services)
{
[$tableId] = $request->getMore([
['tableId', 0],
], true);
$store_id = (int)$this->storeId;
$res = $services->tablePrint((int)$tableId, $store_id, -1, 1);
if ($res) {
return app('json')->successful('打单成功');
} else {
return app('json')->fail('打单失败');
}
}
}