dggzichahu/application/common/command/OrderClose.php

132 lines
5.2 KiB
PHP
Executable File

<?php
// +----------------------------------------------------------------------
// | 宏驰云科技开发团队 版权所有 拥有最终解释权
// +----------------------------------------------------------------------
// | Author: HcyShop-kiki
// +----------------------------------------------------------------------
namespace app\common\command;
use app\api\model\{
Order,Goods,GoodsItem
};
use app\common\logic\AccountLogLogic;
use app\common\model\AccountLog;
use app\common\model\Pay;
use app\common\server\ConfigServer;
use think\console\Command;
use think\console\Input;
use think\console\Output;
use think\Db;
class OrderClose extends Command{
protected function configure()
{
$this->setName('order_close')
->setDescription('关闭订单');
}
protected function execute(Input $input, Output $output)
{
//是否下单扣库存 todo 默认是下单扣库存
$deduct_type = ConfigServer::get('trading', 'deduct_type', 1);
//取消订单时长 todo 默认是30分钟
$order_cancel_time = ConfigServer::get('trading','order_cancel', 30) * 60;
$now = time();
if ($order_cancel_time == 0) {
return false;
}
$order = new Order();
$where[] = ['order_status','=',\app\common\model\Order::STATUS_WAIT_PAY];
$where[] = ['pay_status','=',Pay::UNPAID];
$order_list = $order
->where($where)
->where(Db::raw("create_time+$order_cancel_time < $now"))
->with(['orderGoods'])
->select()->toArray();
$order_ids = []; //更新的订单
$update_total_stock = []; //更新总库存
$update_stock = []; //更新规格库存
$total_stock_num = []; //总库存
$stock_num = []; //规格库存
$update_coupon_ids = []; //更新优惠券状态
foreach ($order_list as $order){
$order_ids[] = $order['id'];
//返回优惠券
if($order['coupon_list_id']){
$update_coupon_ids[] = $order['coupon_list_id'];
}
//更新积分
if($order['use_integral'] > 0){
Db::name('user')->where(['id'=>$order['user_id']])->setInc('user_integral',$order['use_integral']);
AccountLogLogic::AccountRecord(
$order['user_id'],
$order['use_integral'],
1,
AccountLog::cancel_order_refund_integral
);
}
//更新库存
if($deduct_type){
foreach ($order['order_goods'] as $order_goods){
//更新商品总库存数据
if(isset($update_total_stock[$order_goods['goods_id']])){
$total_stock_num[$order_goods['goods_id']] = $total_stock_num[$order_goods['goods_id']] + $order_goods['goods_num'];
$update_total_stock[$order_goods['goods_id']]['stock'] = Db::raw('stock+'.$total_stock_num[$order_goods['goods_id']]);
}else{
$total_stock_num[$order_goods['goods_id']] = $order_goods['goods_num'];
$update_total_stock[$order_goods['goods_id']] = [
'id' => $order_goods['goods_id'],
'stock' => Db::raw('stock+'.$total_stock_num[$order_goods['goods_id']])
];
}
//更新商品规格库存数据
if(isset($update_stock[$order_goods['item_id']])){
$stock_num[$order_goods['item_id']] = $stock_num[$order_goods['item_id']] + $order_goods['goods_num'];
$update_stock[$order_goods['item_id']]['stock'] = Db::raw('stock+'.$stock_num[$order_goods['item_id']]);
}else{
$stock_num[$order_goods['item_id']] = $order_goods['goods_num'];
$update_stock[$order_goods['item_id']] = [
'id' => $order_goods['item_id'],
'stock' => Db::raw('stock+'.$stock_num[$order_goods['item_id']])
];
}
}
}
}
if($order_ids){
$update_data = [
'order_status' => \app\common\model\Order::STATUS_CLOSE,
'update_time' => $now,
];
Db::name('order')->where(['id'=>$order_ids])->update($update_data);
}
//批量更新库存
if($update_total_stock){
$goods = new Goods();
$goods_item = new GoodsItem();
$goods->saveAll(array_values($update_total_stock));
$goods_item->saveAll(array_values($update_stock));
}
//更新优惠券
if($update_coupon_ids){
$update_coupon = [
'status' => 0,
'use_time' => '',
'order_id' => '',
'update_time' => $now,
];
Db::name('coupon_list')->where(['id'=>$update_coupon_ids])->update($update_coupon);
}
}
}