From 988c2f03dc92fd86c4d39c78b139f739d0477043 Mon Sep 17 00:00:00 2001 From: xucong <850806214@qq.com> Date: Fri, 16 May 2025 17:26:15 +0800 Subject: [PATCH] =?UTF-8?q?1.=E6=8F=90=E4=BA=A4=E7=BC=BA=E5=A4=B1=E7=9A=84?= =?UTF-8?q?=E4=B8=9C=E8=A5=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/api/logic/OrderLogic.php | 4 +- app/common/logic/OrderGoodsLogic.php | 191 +++++++++++++++++++++++++++ app/common/logic/OrderLogLogic.php | 50 +++++++ app/common/model/OrderLog.php | 91 +++++++++++++ 4 files changed, 334 insertions(+), 2 deletions(-) create mode 100644 app/common/logic/OrderGoodsLogic.php create mode 100644 app/common/logic/OrderLogLogic.php create mode 100644 app/common/model/OrderLog.php diff --git a/app/api/logic/OrderLogic.php b/app/api/logic/OrderLogic.php index 0024834..5f5aa65 100644 --- a/app/api/logic/OrderLogic.php +++ b/app/api/logic/OrderLogic.php @@ -29,8 +29,8 @@ use app\common\logic\{ PayNotifyLogic }; use app\common\model\user\UserLevel; -use app\common\model\{AccountLog, - AfterSale, +use app\common\model\account\AccountLog; +use app\common\model\{AfterSale, AfterSale as CommonAfterSale, BargainLaunch, Client_, diff --git a/app/common/logic/OrderGoodsLogic.php b/app/common/logic/OrderGoodsLogic.php new file mode 100644 index 0000000..4661593 --- /dev/null +++ b/app/common/logic/OrderGoodsLogic.php @@ -0,0 +1,191 @@ +where('id', $good['goods_id']) + ->update([ +// 'sales_sum' => Db::raw("sales_sum-" . $good['goods_num']), + 'stock' => Db::raw('stock+' . $good['goods_num']) + ]); + + //补充规格表库存 + Db::name('goods_item') + ->where('id', $good['item_id']) + ->setInc('stock', $good['goods_num']); + } + } + + + //下单扣除订单库存 + public static function decStock($goods) + { + $seckill_data = SeckillLogic::getSeckillGoods(); + $seckill = $seckill_data['seckill']; + $seckill_goods = $seckill_data['seckill_goods']; + + $goods_ids = []; + + foreach ($goods as $k1 => $good) { + $item_id = $good['item_id']; + //扣除库存,扣除规格库存,增加商品销量 + Db::name('goods') + ->where('id', $good['goods_id']) + ->update([ + 'sales_sum' => Db::raw("sales_sum+" . $good['goods_num']), + 'stock' => Db::raw('stock-' . $good['goods_num']) + ]); + + //扣除规格表库存 + Db::name('goods_item') + ->where('id', $item_id) + ->setDec('stock', $good['goods_num']); + + //秒杀商品增加销量 + if (isset($seckill_goods[$item_id])){ + $seckill_goods_id = $seckill_goods[$item_id]['seckill_goods_id']; + Db::name('seckill_goods') + ->where('id', $seckill_goods_id) + ->update([ + 'sales_sum' => Db::raw("sales_sum+" . $good['goods_num']), + 'update_time' => time() + ]); + } + + $goods_ids[] = $good['goods_id']; + } + + //下架商品总库存为0的商品 + if (!empty($goods_ids)){ + self::outGoods($goods_ids); + } + } + + + /** + * Notes: 下单后下架商品总库存为0的商品 + * @param $goods_id + * @author 段誉(2021/3/19 16:19) + * @return bool + */ + public static function outGoods($goods_ids) + { + try{ + $goods = Db::name('goods') + ->field('id, stock') + ->where('id', 'in', $goods_ids) + ->select(); + + if (empty($goods)){ + return true; + } + + $need_handle_ids = []; + foreach ($goods as $good) { + if ($good['stock'] <= 0) { + $need_handle_ids[] = $good['id']; + } + } + + if (empty($need_handle_ids)){ + return true; + } + //下架订单商品中 商品总库存已为0的商品 + Db::name('goods')->where('id', 'in', $need_handle_ids)->update(['status' => 0]); + + // 下架或删除商品,更新商品收藏 + Hook::listen('update_collect', ['goods_id' => $need_handle_ids]); + + } catch (\Exception $e) {} + + } + + /** + * @notes 获取订单商品 退款运费 + * @return integer|float + * @author lbzy + * @datetime 2023-06-26 09:20:21 + */ + static function getRefundExpressMoney($id) + { + $orderGoods = OrderGoods::find($id); + $order = Order::find($orderGoods['order_id'] ?? 0); + + // 不是待发货 不退运费 + if (empty($order['id']) || $order['order_status'] != Order::STATUS_WAIT_DELIVERY) { + return 0; + } + + $after_sales = AfterSale::where('order_id', $order['id'])->select()->toArray(); + + $aids = []; + + foreach ($after_sales as $after_sale) { + if (! in_array($after_sale['order_goods_id'], $aids)) { + $aids[] = $after_sale['order_goods_id']; + } + } + + $orderGoodsList = OrderGoods::where('order_id', $order['id'])->select()->toArray(); + + if (count($aids) != count($orderGoodsList)) { + if (in_array($id, $aids)) { + return 0; + } else { + // 没有记录,是否是最后一个订单商品 + return count($aids) == (count($orderGoodsList) - 1) ? $order['shipping_price'] : 0; + } + } + + // 有记录,是否是在最后申请的 + return $aids[count($aids) - 1] == $id ? $order['shipping_price'] : 0; + + + } + +} \ No newline at end of file diff --git a/app/common/logic/OrderLogLogic.php b/app/common/logic/OrderLogLogic.php new file mode 100644 index 0000000..5cb6df2 --- /dev/null +++ b/app/common/logic/OrderLogLogic.php @@ -0,0 +1,50 @@ +type = $type; + $log->order_id = $order_id; + $log->channel = $channel; + $log->handle_id = $handle_id; + $log->content = OrderLog::getLogDesc($content); + $log->create_time = time(); + + if ($desc != '') { + $log->content = OrderLog::getLogDesc($content) . '(' . $desc . ')'; + } + + $log->save(); + } +} \ No newline at end of file diff --git a/app/common/model/OrderLog.php b/app/common/model/OrderLog.php new file mode 100644 index 0000000..969ad2a --- /dev/null +++ b/app/common/model/OrderLog.php @@ -0,0 +1,91 @@ + '会员提交订单', + self::USER_CANCEL_ORDER => '会员取消订单', + self::USER_DEL_ORDER => '会员删除订单', + self::USER_CONFIRM_ORDER => '会员确认收货', + self::USER_PAID_ORDER => '会员支付订单', + self::USER_VERIFICATION => '会员提货核销', + + self::SHOP_CANCEL_ORDER => '商家取消订单', + self::SHOP_DEL_ORDER => '商家删除订单', + self::SHOP_DELIVERY_ORDER => '商家发货', + self::SHOP_CONFIRM_ORDER => '商家确认收货', + self::SHOP_VERIFICATION => '商家提货核销', + + self::SYSTEM_CANCEL_ORDER => '系统取消订单', + self::SYSTEM_CONFIRM_ORDER => '系统确认收货', + ]; + + if ($log === true) { + return $desc; + } + + return isset($desc[$log]) ? $desc[$log] : $log; + } + + //订单日志 + public static function getOrderLog($order_id) + { + $logs = Db::name('order_log') + ->where('order_id', $order_id) + ->select(); + + foreach ($logs as &$log){ + $log['create_time'] = date('Y-m-d H:i:s', $log['create_time']); + $log['channel'] = self::getLogDesc($log['channel']); + } + + return $logs; + } +} \ No newline at end of file