diff --git a/app/api/controller/IndexController.php b/app/api/controller/IndexController.php index d74c7721..1205aadb 100644 --- a/app/api/controller/IndexController.php +++ b/app/api/controller/IndexController.php @@ -15,6 +15,8 @@ use hg\apidoc\annotation as ApiDoc; use support\Log; use Yansongda\Pay\Exception\InvalidSignException; use Monolog\Handler\RotatingFileHandler; +use Webman\RedisQueue\Redis; + #[ApiDoc\NotParse()] class IndexController extends BaseApiController @@ -23,8 +25,8 @@ class IndexController extends BaseApiController public function index() { - Log::error(222); -d(2); + Redis::send('push-platform-print', ['order_id' => 119]); + d(2); try { $wechat = new PayService(1); diff --git a/app/api/controller/order/OrderController.php b/app/api/controller/order/OrderController.php index 66e1f40d..ab338a72 100644 --- a/app/api/controller/order/OrderController.php +++ b/app/api/controller/order/OrderController.php @@ -316,7 +316,7 @@ class OrderController extends BaseApiController StoreOrder::where(['id' => $order_id, 'uid' => Request()->userId])->update($_order); } } - $result = PaymentLogic::pay($pay_type, 'wechat_common', $order, $this->userInfo['terminal'], $redirectUrl); + $result = PaymentLogic::pay($pay_type, 'wechat_common', $order, $this->userInfo['terminal']??1, $redirectUrl); if (PaymentLogic::hasError()) { return $this->fail(PaymentLogic::getError()); } @@ -405,7 +405,7 @@ class OrderController extends BaseApiController ]; $order = StoreOrder::where($where)->find(); if ($order) { - $data = ['data' => $value, 'delete_time' => time()]; + $data = ['cancle_reason' => $value, 'delete_time' => time()]; StoreOrder::where($where)->update($data); return $this->success('取消成功'); } diff --git a/app/common/logic/PayNotifyLogic.php b/app/common/logic/PayNotifyLogic.php index 55d16916..42c54e19 100644 --- a/app/common/logic/PayNotifyLogic.php +++ b/app/common/logic/PayNotifyLogic.php @@ -114,11 +114,11 @@ class PayNotifyLogic extends BaseLogic if ($order->pay_type == 9) { $extra['create_time'] = $order['create_time']; - PushService::push('store_merchant_' . $order['id'], $order['id'], ['type' => 'cash_register', 'msg' => '您有一笔订单已支付', 'data' => $extra]); + PushService::push('store_merchant_' . $order['store_id'], $order['store_id'], ['type' => 'cash_register', 'msg' => '您有一笔订单已支付', 'data' => $extra]); } else { - PushService::push('store_merchant_' . $order['id'], $order['id'], ['type' => 'store_merchant', 'msg' => '您有一笔新的订单']); + PushService::push('store_merchant_' . $order['store_id'], $order['store_id'], ['type' => 'store_merchant', 'msg' => '您有一笔新的订单']); Redis::send('push-platform-print', ['order_id' => $order['id']], 60); -// Db::name('order_middle')->insert(['c_order_id' => $order['id']]); + // Db::name('order_middle')->insert(['c_order_id' => $order['id']]); } if (!empty($extra['payer']['openid']) && $order->pay_type != 9) { Redis::send('push-delivery', ['order_sn' => $order['order_id'], 'openid' => $extra['payer']['openid']], 5); diff --git a/app/common/logic/PaymentLogic.php b/app/common/logic/PaymentLogic.php index 7f8ac059..2f282aa0 100644 --- a/app/common/logic/PaymentLogic.php +++ b/app/common/logic/PaymentLogic.php @@ -84,16 +84,16 @@ class PaymentLogic extends BaseLogic } $order = [ 'description' => '条码商品', - 'out_trade_no' => $order['number'], + 'out_trade_no' => (string)$order['order_id'], 'payer' => [ 'auth_code' => (string)$auth_code ], 'amount' => [ - 'total' => intval($order['actual'] * 100), + 'total' => intval($order['pay_price'] * 100), ], 'scene_info' => [ "store_info" => [ - 'id' => (string)$order['merchant'] + 'id' => (string)$order['store_id']??1 ] ], ]; @@ -124,9 +124,9 @@ class PaymentLogic extends BaseLogic } $order = [ 'subject' => '条码商品', - 'out_trade_no' => $order['number'], + 'out_trade_no' => (string)$order['order_id'], 'auth_code' => (string)$auth_code, - 'total_amount' => $order['actual'], + 'total_amount' => $order['pay_price'], 'extend_params'=>['attach'=>'alipay_cashier'] ]; $wechat = new PayService(); diff --git a/app/queue/redis/CodePaySend.php b/app/queue/redis/CodePaySend.php new file mode 100644 index 00000000..c3b33c55 --- /dev/null +++ b/app/queue/redis/CodePaySend.php @@ -0,0 +1,57 @@ + $data['order_id'], + ]; + $res = $pay->wechat->query($order); + if ($res['trade_state'] == 'SUCCESS' && $res['trade_state_desc'] == '支付成功') { + PayNotifyLogic::handle('wechat_common', $res['out_trade_no'], $res); + }else{ + throw new BusinessException('订单支付中', 200); + } + } + // 消费失败时 + public function onConsumeFailure(\Throwable $exception, $package) + { + // 直接更改消息队列数据结构,将最大重试次数max_attempts字段设置为0,即不再重试。 + if($package['attempts'] ==$exception['max_attempts']){ + $data = [ + 'order_id' => $package['data']['order_id'], + 'paid' => 0, + ]; + $find=StoreOrder::where($data)->find(); + if($find){ + $order = StoreOrder::update($data); + if($order){ + PushService::push('store_merchant_' . $order['store_id'], $order['store_id'], ['type'=>'cash_register','msg'=>'支付超时,订单已被取消,请重新提交订单']); + } + } + } + return $package; + } +} diff --git a/app/queue/redis/PushPlatformPrintSend.php b/app/queue/redis/PushPlatformPrintSend.php new file mode 100644 index 00000000..2ed2175b --- /dev/null +++ b/app/queue/redis/PushPlatformPrintSend.php @@ -0,0 +1,70 @@ +find(); + if ($find) { + $merchant = SystemStore::where('id', $find['store_id'])->field('name,phone')->find(); + $mer_user_info = SystemStoreStaff::where('store_id', $find['store_id'])->where('is_admin',1)->field('staff_name,phone')->find(); + $user = User::where('id', $find['uid'])->field('nickname,mobile')->find(); + $find['system_store_name'] = $merchant['name']; + $find['system_store_phone'] = $merchant['phone']; + $find['staff_name'] = $mer_user_info['staff_name']; + $find['staff_phone'] = $mer_user_info['phone']; + $find['nickname'] = $user['nickname']??''; + $find['user_mobile'] = $user['mobile']??''; + $find['info'] = StoreOrderCartInfo::where('oid', $find['id'])->field('store_id,product_id,cart_num,price,total_price')->select()->each(function ($item) { + $goods = StoreBranchProduct::where(['store_id'=>$item['store_id'],'product_id'=>$item['product_id']])->field('store_name,unit')->find(); + $item['unit_name'] = StoreProductUnit::where('id', $goods['unit'])->value('name'); + $item['store_name'] = $goods['store_name']; + return $item; + }); + PushService::push('store_merchant_'.$find['store_id'], 1, ['type'=>'platform_print','msg'=>'打印队列','data'=>$find]); + Log::info('打印推送结束'.$id); + + } + } + public function onConsumeFailure(\Throwable $exception, $package) + { + Log::error('打印队列推送失败。order_id:'. $package['data']['order_id'].',msg:'.$exception->getMessage()); + return $package; + } +} \ No newline at end of file diff --git a/app/store/controller/store_order/StoreOrderController.php b/app/store/controller/store_order/StoreOrderController.php index a9cdc2be..852eea64 100644 --- a/app/store/controller/store_order/StoreOrderController.php +++ b/app/store/controller/store_order/StoreOrderController.php @@ -96,7 +96,8 @@ class StoreOrderController extends BaseAdminController ApiDoc\NotHeaders(), ApiDoc\Author('中国队长'), ApiDoc\Header(ref: [Definitions::class, "token"]), - ApiDoc\Query(name: 'id', type: 'int', require: true, desc: '订单id'), + ApiDoc\Query(name: 'id', type: 'int', require: false, desc: '订单id'), + ApiDoc\Query(name: 'verify_code', type: 'string', require: false, desc: '核销码'), ApiDoc\ResponseSuccess("data", type: "array"), ] public function detail(StoreOrderLogic $orderLogic) @@ -151,7 +152,7 @@ class StoreOrderController extends BaseAdminController return $this->fail(PaymentLogic::getError(), $params); } if (isset($result['trade_state_desc']) && $result['trade_state_desc'] == '支付成功') { - PayNotifyLogic::handle('StoreOrder', $result['out_trade_no'], $result); + PayNotifyLogic::handle('wechat_common', $result['out_trade_no'], $result); } else { Redis::send('send-code-pay', ['number' => $order['number']]); return $this->success('用户支付中'); diff --git a/app/store/validate/store_order/StoreOrderValidate.php b/app/store/validate/store_order/StoreOrderValidate.php index 3e7eeec4..f7b4eeb8 100644 --- a/app/store/validate/store_order/StoreOrderValidate.php +++ b/app/store/validate/store_order/StoreOrderValidate.php @@ -19,7 +19,8 @@ class StoreOrderValidate extends BaseValidate * @var string[] */ protected $rule = [ - 'id' => 'require', + 'id' => 'requireWithout:verify_code', + 'verify_code' => 'requireWithout:id', ]; @@ -29,6 +30,7 @@ class StoreOrderValidate extends BaseValidate */ protected $field = [ 'id' => 'id', + 'verify_code' => '核销码', ]; @@ -76,7 +78,7 @@ class StoreOrderValidate extends BaseValidate */ public function sceneDetail() { - return $this->only(['id']); + return $this->only(['id','verify_code']); } } diff --git a/config/plugin/webman/redis-queue/log.php b/config/plugin/webman/redis-queue/log.php index 4a60c18f..6be46eb2 100644 --- a/config/plugin/webman/redis-queue/log.php +++ b/config/plugin/webman/redis-queue/log.php @@ -18,7 +18,7 @@ return [ [ 'class' => \support\log\MonologExtendHandler::class, 'constructor' => [ - '/logs/redis-queue/queue.log', + 'redis-queue', 7, //$maxFiles Monolog\Logger::DEBUG, ],