cxhxy/addons/food/library/Order.php
test_service d3170b4d1c 1
2023-12-01 15:43:29 +08:00

1 line
11 KiB
PHP

<?php
namespace addons\food\library;
use app\common\model\food\Order as OrderModel;
use app\common\model\food\OrderDelivery as OrderDeliveryModel;
use app\common\model\food\Table as TableModel;
use app\common\model\food\Setting;
use app\common\model\Setting as SettingModel;
use hema\wechat\Pay as WxPay;
use think\facade\Cache;
class Order
{
private $model;
private $applet_id;
/**
* 构造函数
*/
public function __construct(int $applet_id)
{
$this->model = new OrderModel;
$this->applet_id = $applet_id;
}
/**
* 监听事件
*/
public function listen()
{
//判断是否获取到”task_space_order“
if (!Cache::get('event_space_order')) {
$config = Setting::getItem('trade',$this->applet_id);
// 未支付订单自动关闭
$this->close($config['order']['close_time']);
// 待配送订单自动配送完成(扫码)
$this->table($config['order']['delivery_time']);
// 待配送订单自动配送完成(排号)
$this->row($config['order']['delivery_time']);
// 待配送订单自动配送完成(外卖)
$this->waimai($config['order']['delivery_time']);
// 待配送订单自动配送完成(外带)
$this->ziqu($config['order']['delivery_time']);
//配送完成订单用户自动确认收货
$this->receive($config['order']['receive_time']);
//收货订单自动评价
$this->cmt($config['order']['cmt_time']);
// 退款订单自动退款
$this->refund($config['order']['refund_time']);
Cache::set('event_space_order', time(), $config['order']['time']*60);//有效期N分钟
}
return true;
}
/**
* 未支付订单自动关闭
*/
private function close($close_time)
{
// 取消n小时以前的的未付款订单
if ($close_time < 1) {
return false;
}
// 截止时间
$deadlineTime = time() - ((int)$close_time * 60); //分钟
// 条件
$filter = [
'pay_status' => 10,
'order_status' => 10,
'applet_id' => $this->applet_id
];
// 查询截止时间未支付的订单
$orderIds = $this->model->where($filter)->where('create_time','<',$deadlineTime)->column('order_id');
// 直接更新
if (!empty($orderIds)) {
for($n=0;$n<sizeof($orderIds);$n++){
$order = OrderModel::detail($orderIds[$n]);
if($order['table_id'] > 0){
$table = TableModel::get($order['table_id']);
$table->status = 10;
$table->save();
}
$order->save(['order_status' => 20]);
}
}
return true;
}
/**
* 已接订单自动完成配送(堂食扫码)
*/
private function table($delivery_time)
{
// 订单配送n小时后自动完成配送
if ($delivery_time < 1) {
return false;
}
// 截止时间
$deadlineTime = time() - ((int)$delivery_time * 60);
//堂食扫码
$filter = [
'order_mode' => 10,
'shop_status' => 20, //商家已接单
'delivery_status' => 10,
'order_status' => 10,
'applet_id' => $this->applet_id
];
// 查询截止时间未完成配送的订单
$orderIds = $this->model->where($filter)->where('table_id','>',0)->where('pay_status','>',10)->where('shop_time','<',$deadlineTime)->column('order_id');
// 直接更新
if (!empty($orderIds)) {
return $this->model->where('order_id','in',$orderIds)->save([
'delivery_status' => 30,
'delivery_time' => time()
]);
}
return true;
}
/**
* 已接订单自动完成配送(堂食排号)
*/
private function row($delivery_time)
{
// 订单配送n小时后自动完成配送
if ($delivery_time < 1) {
return false;
}
// 截止时间
$deadlineTime = time() - ((int)$delivery_time * 60);
//条件
$filter = [
'order_mode' => 10,
'shop_status' => 20,
'delivery_status' => 10,
'order_status' => 10,
'applet_id' => $this->applet_id
];
// 查询截止时间未完成配送的订单
$orderIds = $this->model->where($filter)->where('table_id',0)->where('pay_status','>',10)->where('shop_time','<',$deadlineTime)->column('order_id');
// 直接更新
if (!empty($orderIds)) {
//循环发送取餐提醒订阅消息
for($n=0;$n<sizeof($orderIds);$n++){
$this->model->sendMessage('take',$orderIds[$n]);
}
return $this->model->where('order_id','in',$orderIds)->save([
'delivery_status' => 30,
'delivery_time' => time()
]);
}
return true;
}
/**
* 待配送订单自动配送完成(外卖)
*/
private function waimai($delivery_time)
{
// 订单配送n小时后自动完成配送
if ($delivery_time < 1) {
return false;
}
// 截止时间
$deadlineTime = time() - ((int)$delivery_time * 60);
//条件
$filter = [
'order_mode' => 20,
'shop_status' => 30,
'delivery_status' => 20,
'order_status' => 10,
'applet_id' => $this->applet_id
];
// 查询截止时间未完成配送的订单
$orderIds = $this->model->where($filter)->where('pay_status','>',10)->where('delivery_time','<',$deadlineTime)->column('order_id');
// 直接更新
if (!empty($orderIds)) {
//循环发送配送完成提醒订阅消息
for($n=0;$n<sizeof($orderIds);$n++){
$this->model->sendMessage('delivery',$orderIds[$n]);
}
$deliveryModel = new OrderDeliveryModel;
$deliveryModel->where('order_id','in',$orderIds)->save([
'delivery_status' => 50,
'delivery_time' => time()
]);
return $this->model->where('order_id','in',$orderIds)->save([
'delivery_status' => 30,
'delivery_time' => time()
]);
}
return true;
}
/**
* 已接订单自动完成配送(自取)
*/
private function ziqu($delivery_time)
{
// 订单配送n小时后自动完成配送
if ($delivery_time < 1) {
return false;
}
// 截止时间
$deadlineTime = time() - ((int)$delivery_time * 60);
//条件
$filter = [
'order_mode' => 30,
'shop_status' => 20,
'delivery_status' => 10,
'order_status' => 10,
'applet_id' => $this->applet_id
];
// 查询截止时间未完成配送的订单
$orderIds = $this->model->where($filter)->where('pay_status','>',10)->where('arrive_time','<',$deadlineTime)->column('order_id');
// 直接更新
if (!empty($orderIds)) {
//循环发送取餐提醒订阅消息
for($n=0;$n<sizeof($orderIds);$n++){
$this->model->sendMessage('take',$orderIds[$n]);
}
return $this->model->where('order_id','in',$orderIds)->save([
'delivery_status' => 30,
'delivery_time' => time()
]);
}
return true;
}
/**
* 已配送订单自动确认收货
*/
private function receive($receive_time)
{
if ($receive_time < 1) {
return false;
}
// 截止时间
$deadlineTime = time() - ((int)$receive_time * 60); //分钟
//条件
$filter = [
'pay_status' => 20, //非后付费有效
'delivery_status' => 30,
'receipt_status' => 10,
'order_status' => 10,
'applet_id' => $this->applet_id
];
// 查询截止时间未支付的订单
$orderIds = $this->model->where($filter)->where('delivery_time','<',$deadlineTime)->column('order_id');
// 直接更新
if (!empty($orderIds)) {
//更新餐桌状态
for($n=0;$n<sizeof($orderIds);$n++){
$order = OrderModel::detail($orderIds[$n]);
if($order['table_id']>0){
$table = TableModel::get($order['table_id']);
$table->status = 10;
$table->save();
}
//账单分账
$wxpay = new WxPay(SettingModel::getItem('wxpay',$order['applet_id']));
$wxpay->divide($order,$order['applet_id']);//进行分账
}
$this->model->where('order_id','in',$orderIds)->save([
'receipt_status' => 20,
'receipt_time' => time(),
'order_status' => 30
]);
}
return true;
}
/**
* 已收货订单自动评价
*/
private function cmt($cmt_time)
{
if ($cmt_time < 1) {
return false;
}
// 截止时间
$deadlineTime = time() - ((int)$cmt_time * 60); //分钟
//条件
$filter = [
'is_cmt' => 0,
'receipt_status' => 20,
'order_status' => 30,
'applet_id' => $this->applet_id
];
// 查询截止时间未支付的订单
$orderIds = $this->model->where($filter)->where('receipt_time','<',$deadlineTime)->column('order_id');
// 直接更新
if (!empty($orderIds)) {
//更新餐桌状态
for($n=0;$n<sizeof($orderIds);$n++){
$order = OrderModel::detail($orderIds[$n]);
$order->comment()->save([
'serve' => 5,
'speed' => 5,
'flavor' => 5,
'ambient' => 5,
'user_id' => $order['user_id'],
'shop_id' => $order['shop_id'],
'applet_id' => $order['applet_id']
]);
$order->save(['is_cmt' => 1]);
}
}
return true;
}
/**
* 退款订单自动完成退款
*/
private function refund($refund_time)
{
if ($refund_time < 1) {
return false;
}
// 截止时间
$deadlineTime = time() - ((int)$refund_time * 60); //分钟
//条件
$filter = [
'pay_status' => 20,
'receipt_status' => 10,
'refund_status' => 10,
'order_status' => 40,
'applet_id' => $this->applet_id
];
// 查询截止时间未支付的订单
$orderIds = $this->model->where($filter)->where('refund_time','<',$deadlineTime)->column('order_id');
// 直接更新
if (!empty($orderIds)) {
for($n=0;$n<sizeof($orderIds);$n++){
$order = OrderModel::detail($orderIds[$n]);
$order->refund(1);//同意退款
}
}
return true;
}
}