购物车迁入
This commit is contained in:
376
extend/workermans/model/Cashier.php
Normal file
376
extend/workermans/model/Cashier.php
Normal file
@@ -0,0 +1,376 @@
|
||||
<?php
|
||||
|
||||
namespace extend\workermans\model;
|
||||
|
||||
use ba\Exception;
|
||||
use ba\Random;
|
||||
use support\think\Db;
|
||||
use GatewayWorker\Lib\Gateway;
|
||||
Use support\Log;
|
||||
use think\Model;
|
||||
|
||||
/**
|
||||
* 收银机
|
||||
*/
|
||||
class Cashier extends Base
|
||||
{
|
||||
|
||||
/**
|
||||
* @param string $client_id
|
||||
* @param array $message
|
||||
* @return void
|
||||
*/
|
||||
public static function handles(string $client_id, array $message):void
|
||||
{
|
||||
self::$client_id = $client_id;
|
||||
self::$shop_id = $message['shop_id'];
|
||||
|
||||
// 验证 shop_id 和 table_code 是否存在
|
||||
$shop = Db::query("
|
||||
SELECT * FROM `tb_shop_info` WHERE
|
||||
`id`={$message['shop_id']}
|
||||
");
|
||||
if (!$shop) {
|
||||
self::gateway_query('sendToClient', [$client_id, json_encode(['msg' => '商户信息不存在'])]);
|
||||
return;
|
||||
}
|
||||
// 处理购物车数据
|
||||
switch ($message['operate_type']) {
|
||||
// 初始化购物车
|
||||
case 'init':
|
||||
// 绑定商户账号(ID) 和 client_id 已便于收银机打小票
|
||||
$message['account'] = 'cashier_' . $message['shop_id'];
|
||||
Gateway::bindUid($client_id, $message['account']);
|
||||
self::$account = $message['account'];
|
||||
$rand = 'cashier_init' . Random::build();
|
||||
$car = [];
|
||||
if(empty($message['table_code'])) {
|
||||
$message['table_code'] = 'PC' . Random::build('numeric');
|
||||
}else {
|
||||
$car = Db::query("
|
||||
SELECT * FROM `tb_cashier_cart` WHERE
|
||||
`shop_id`={$message['shop_id']} AND
|
||||
`table_code`='{$message['table_code']}'
|
||||
");
|
||||
}
|
||||
|
||||
$snd_data = [
|
||||
'msg' => '收银机初始化',
|
||||
'type' => 'cashier',
|
||||
'operate_type' => 'init',
|
||||
'data_type' => 'cart',
|
||||
'status' => 1,
|
||||
'msg_id' => $rand,
|
||||
'table_code' => $message['table_code'],
|
||||
'data' => $car
|
||||
];
|
||||
self::gateway_query('sendToClient', [$client_id, json_encode($snd_data)]);
|
||||
|
||||
$uid = $message['account'];
|
||||
$redis = self::$redis;
|
||||
$gateway = Gateway::class;
|
||||
// 处理打印消息
|
||||
$redis->get($uid, function ($result, $redis) use($gateway, $uid){
|
||||
if($result) {
|
||||
$msg_info_arr = json_decode($result, true);
|
||||
$arr_n = [];
|
||||
foreach ($msg_info_arr as $k => $arr) {
|
||||
if($arr['send_num'] < self::RETRYCOUNT) {
|
||||
$arr['send_num'] += 1;
|
||||
$arr_json = json_encode($arr);
|
||||
call_user_func_array([$gateway, $arr['method']], [$arr['send_id'], $arr_json]);
|
||||
// 推送以后新增推送次数
|
||||
self::add_log_file('离线后推送收银机订单打印--->' .date('Y-m-d H:i:s'). '--->' . $arr_json, 'cashier');
|
||||
}
|
||||
self::add_log_file('----离线后推送收银机订单打印无回执--' .date('Y-m-d H:i:s'). '--->' . $arr_json, 'cashier');
|
||||
$arr_n[] = $arr;
|
||||
}
|
||||
$redis->set($uid, json_encode($arr_n), self::REDIS_TIME);
|
||||
}
|
||||
});
|
||||
break;
|
||||
// 新增
|
||||
case 'add':
|
||||
if(
|
||||
($message['is_temporary'] == 1 && !empty($message['number'])) ||
|
||||
(!empty($message['product_id']) &&
|
||||
!empty($message['sku_id']) &&
|
||||
!empty($message['number']) )
|
||||
) {
|
||||
// 查询购物车是否有重复的商品,有则新增,无则累加 (有赠送品的除外)
|
||||
try {
|
||||
if(empty($message['goods_type']) || $message['goods_type'] != 'package') {
|
||||
if($message['is_temporary'] == 1) {
|
||||
$car = Db::query("
|
||||
SELECT * FROM `tb_cashier_cart` WHERE
|
||||
`shop_id`={$message['shop_id']} AND
|
||||
`is_gift`={$message['is_gift']} AND
|
||||
`product_name`='{$message['product_name']}' AND
|
||||
`is_temporary`={$message['is_temporary']} AND
|
||||
`table_code`= '{$message['table_code']}'
|
||||
");
|
||||
}else {
|
||||
$car = Db::query("
|
||||
SELECT * FROM `tb_cashier_cart` WHERE
|
||||
`shop_id`={$message['shop_id']} AND
|
||||
`sku_id`={$message['sku_id']} AND
|
||||
`product_id`={$message['product_id']} AND
|
||||
`is_gift`={$message['is_gift']} AND
|
||||
`table_code`= '{$message['table_code']}'
|
||||
");
|
||||
}
|
||||
}else {
|
||||
// 如果是套餐商品,直接新增
|
||||
$car[0] = [];
|
||||
}
|
||||
if(empty($car[0])) {
|
||||
if($message['number'] <= 0) {
|
||||
self::gateway_query('sendToClient', [$client_id, json_encode(['msg' => '数量不合法'])]);
|
||||
return;
|
||||
}
|
||||
$res = $res_id = self::add_data($message);
|
||||
}else {
|
||||
$car = $car[0];
|
||||
$res_id = $car['id'];
|
||||
// 如果是新增套餐商品,硬新增
|
||||
if(!empty($message['pro_group_info'])) {
|
||||
$res = self::add_data($message);
|
||||
}else {
|
||||
// 是赠品,新增
|
||||
if($car['is_gift'] == 1) {
|
||||
// 如果原本的也是赠送的,则修改数量
|
||||
if(!empty($message['is_gift']) && $message['is_gift'] == 1) {
|
||||
$res = self::savenumber($car, $message);
|
||||
}else {
|
||||
$res = self::add_data($message);
|
||||
}
|
||||
}else {
|
||||
// 如新增的也是赠送的
|
||||
if(!empty($message['is_gift']) && $message['is_gift'] == 1) {
|
||||
$res = self::add_data($message);
|
||||
}else {
|
||||
$res = self::savenumber($car, $message);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if($res) {
|
||||
$status = 1;
|
||||
}else {
|
||||
$status = 0;
|
||||
}
|
||||
$rand = 'cashier_add' . Random::build();
|
||||
$data = Db::query("
|
||||
SELECT * FROM `tb_cashier_cart` WHERE
|
||||
`id`={$res_id}");
|
||||
// 向此桌码下面的 client_id 发送消息
|
||||
$snd_data = [
|
||||
'msg' => '购物车新增',
|
||||
'type' => 'cashier',
|
||||
'status' => $status,
|
||||
'operate_type' => 'add',
|
||||
'data_type' => 'cart',
|
||||
'msg_id' => $rand,
|
||||
'data' => $data[0]
|
||||
];
|
||||
self::gateway_query('sendToClient', [$client_id, json_encode($snd_data)]);
|
||||
}catch (Exception $e){
|
||||
Log::write('新增购物车时[error]->>>>>' . $e->getMessage(), 'error');
|
||||
}
|
||||
}
|
||||
break;
|
||||
// 修改
|
||||
case 'edit':
|
||||
if (empty($message['id'])) {
|
||||
self::gateway_query('sendToClient', [$client_id, json_encode(['msg' => '购物车ID不存在'])]);
|
||||
return;
|
||||
}
|
||||
try {
|
||||
$data = Db::query("
|
||||
SELECT * FROM `tb_cashier_cart` WHERE
|
||||
`id`={$message['id']}");
|
||||
if(!$data) {
|
||||
self::gateway_query('sendToClient', [$client_id, json_encode(['msg' => '购物车不存在'])]);
|
||||
return;
|
||||
}
|
||||
// $message['number'] += $data[0]['number'];
|
||||
$res = self::edit_data($message);
|
||||
if($res) {
|
||||
$status = 1;
|
||||
}else {
|
||||
$status = 0;
|
||||
}
|
||||
$rand = 'cashier_edit' . Random::build();
|
||||
if($res) {
|
||||
$data = Db::query("
|
||||
SELECT * FROM `tb_cashier_cart` WHERE
|
||||
`id`={$message['id']}");
|
||||
}else {
|
||||
$data[0] = '';
|
||||
}
|
||||
$snd_data = [
|
||||
'msg' => '购物车修改',
|
||||
'type' => 'cashier',
|
||||
'status' => $status,
|
||||
'operate_type' => 'edit',
|
||||
'data_type' => 'cart',
|
||||
'msg_id' => $rand,
|
||||
'data' => $data[0]
|
||||
];
|
||||
self::gateway_query('sendToClient', [$client_id, json_encode($snd_data)]);
|
||||
}catch (Exception $e) {
|
||||
Log::write('修改购物车时[error]->>>>>' . $e->getMessage(), 'error');
|
||||
}
|
||||
break;
|
||||
// 删除
|
||||
case 'del':
|
||||
if (empty($message['id'])) {
|
||||
self::gateway_query('sendToClient', [$client_id, json_encode(['msg' => '购物车ID不存在'])]);
|
||||
return;
|
||||
}
|
||||
$data = Db::query("
|
||||
SELECT * FROM `tb_cashier_cart` WHERE
|
||||
`id`={$message['id']}");
|
||||
if (empty($data)) {
|
||||
self::gateway_query('sendToClient', [$client_id, json_encode(['msg' => '数据不存在'])]);
|
||||
return;
|
||||
}
|
||||
try {
|
||||
$res = Db::table('tb_cashier_cart')->where('id', $message['id'])->delete();
|
||||
if($res) {
|
||||
$status = 1;
|
||||
}else {
|
||||
$status = 0;
|
||||
}
|
||||
$rand = 'cashier_del' . Random::build();
|
||||
$snd_data = [
|
||||
'msg' => '购物车删除',
|
||||
'type' => 'cashier',
|
||||
'status' => $status,
|
||||
'operate_type' => 'del',
|
||||
'data_type' => 'cart',
|
||||
'msg_id' => $rand,
|
||||
'data' => $data[0]
|
||||
];
|
||||
self::gateway_query('sendToClient', [$client_id, json_encode($snd_data)]);
|
||||
}catch (Exception $e) {
|
||||
Log::write('删除购物车时[error]->>>>>' . $e->getMessage(), 'error');
|
||||
}
|
||||
break;
|
||||
// 清除
|
||||
case 'cleanup':
|
||||
try {
|
||||
$res = Db::table('tb_cashier_cart')
|
||||
->where('table_code', $message['table_code'])
|
||||
->delete();
|
||||
if($res) {
|
||||
$status = 1;
|
||||
}else {
|
||||
$status = 0;
|
||||
}
|
||||
$status = 1;
|
||||
$rand = 'shopping_cleanup' . Random::build();
|
||||
$snd_data = [
|
||||
'msg' => '购物车清除',
|
||||
'operate_type' => 'cleanup',
|
||||
'msg_id' => $rand,
|
||||
'type' => 'cashier',
|
||||
'data_type' => 'cart',
|
||||
'status' => $status,
|
||||
'data' => [
|
||||
'table_code' => $message['table_code'],
|
||||
]
|
||||
];
|
||||
self::gateway_query('sendToClient', [$client_id, json_encode($snd_data)]);
|
||||
}catch (Exception $e) {
|
||||
Log::write('删除购物车时[error]->>>>>' . $e->getMessage(), 'error');
|
||||
}
|
||||
break;
|
||||
// 转桌
|
||||
case 'rottable':
|
||||
if (empty($message['table_code']) || empty($message['new_table_code'])) {
|
||||
self::gateway_query('sendToClient', [$client_id, json_encode(['msg' => '桌码或新桌码必填必填'])]);
|
||||
return;
|
||||
}
|
||||
try {
|
||||
$data = Db::query("
|
||||
SELECT * FROM `tb_cashier_cart` WHERE
|
||||
`table_code`= '{$message['table_code']}'");
|
||||
if(!$data) {
|
||||
self::gateway_query('sendToClient', [$client_id, json_encode(['msg' => '购物车不存在'])]);
|
||||
return;
|
||||
}
|
||||
$res = self::rottable($message);
|
||||
if($res) {
|
||||
$status = 1;
|
||||
}else {
|
||||
$status = 0;
|
||||
}
|
||||
$rand = 'cashier_rottable' . Random::build();
|
||||
$snd_data = [
|
||||
'msg' => '购物车转桌',
|
||||
'operate_type' => 'rottable',
|
||||
'msg_id' => $rand,
|
||||
'status' => $status,
|
||||
'type' => 'cashier',
|
||||
'data_type' => 'cart',
|
||||
'data' => [
|
||||
'table_code' => $message['table_code'],
|
||||
'new_table_code' => $message['new_table_code'],
|
||||
]
|
||||
];
|
||||
self::gateway_query('sendToClient', [$client_id, json_encode($snd_data)]);
|
||||
}catch (Exception $e) {
|
||||
Log::write('修改购物车时[error]->>>>>' . $e->getMessage(), 'error');
|
||||
}
|
||||
break;
|
||||
// 批量操作(打包与不打包)
|
||||
case 'batch':
|
||||
try {
|
||||
if (!isset($message['is_pack'])) {
|
||||
self::gateway_query('sendToClient', [$client_id, json_encode(['msg' => 'is_pack必填'])]);
|
||||
return;
|
||||
}
|
||||
$data = Db::query("
|
||||
SELECT * FROM `tb_cashier_cart` WHERE
|
||||
`table_code`= '{$message['table_code']}'");
|
||||
if(!$data) {
|
||||
self::gateway_query('sendToClient', [$client_id, json_encode(['msg' => '桌码不存在'])]);
|
||||
return;
|
||||
}
|
||||
$res = self::batch($message);
|
||||
if($res) {
|
||||
$status = 1;
|
||||
}else {
|
||||
$status = 0;
|
||||
}
|
||||
$rand = 'cashier_batch' . Random::build();
|
||||
$snd_data = [
|
||||
'msg' => '购物车批量操作',
|
||||
'operate_type' => 'batch',
|
||||
'msg_id' => $rand,
|
||||
'status' => $status,
|
||||
'type' => 'cashier',
|
||||
'data_type' => 'cart',
|
||||
'data' => []
|
||||
];
|
||||
self::gateway_query('sendToClient', [$client_id, json_encode($snd_data)]);
|
||||
}catch (Exception $e) {
|
||||
Log::write('修改购物车时[error]->>>>>' . $e->getMessage(), 'error');
|
||||
}
|
||||
break;
|
||||
// 锁单
|
||||
case 'pay_lock':
|
||||
self::paylock($client_id, $message);
|
||||
break;
|
||||
// 解锁
|
||||
case 'pay_unlock':
|
||||
self::payunlock($client_id, $message);
|
||||
break;
|
||||
// 查询是否锁单
|
||||
case 'search_pay_lock':
|
||||
self::searchpaylock($client_id, $message);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user