From 4da6d7bb35820363abbe8289a193b4c74249aff5 Mon Sep 17 00:00:00 2001 From: devil Date: Fri, 28 Feb 2020 11:27:33 +0800 Subject: [PATCH] =?UTF-8?q?=20=E4=B8=8B=E5=8D=95=E9=99=90=E5=88=B6?= =?UTF-8?q?=EF=BC=8C=E5=8A=A0=E5=85=A5=E8=B4=AD=E7=89=A9=E8=BD=A6=E9=99=90?= =?UTF-8?q?=E5=88=B6=20bug=20=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/service/BuyService.php | 61 +++-- application/service/GoodsService.php | 2 +- application/service/OrderAftersaleService.php | 220 +++++++++++++++++- application/tags.php | 129 ++++++++++ 4 files changed, 388 insertions(+), 24 deletions(-) diff --git a/application/service/BuyService.php b/application/service/BuyService.php index 36bda954b..99b229ccb 100755 --- a/application/service/BuyService.php +++ b/application/service/BuyService.php @@ -103,6 +103,15 @@ class BuyService } } + // 数量 + $stock = ($goods['buy_max_number'] > 0 && $params['stock'] > $goods['buy_max_number']) ? $goods['buy_max_number'] : $params['stock']; + + // 库存 + if($stock > $goods['inventory']) + { + return DataReturn('库存不足', -1); + } + // 添加购物车 $data = [ 'user_id' => $params['user']['id'], @@ -111,7 +120,7 @@ class BuyService 'images' => $goods['images'], 'original_price'=> $goods_base['data']['spec_base']['original_price'], 'price' => $goods_base['data']['spec_base']['price'], - 'stock' => intval($params['stock']), + 'stock' => $stock, 'spec' => empty($spec) ? '' : json_encode($spec), ]; @@ -132,6 +141,10 @@ class BuyService { $data['stock'] = $goods['inventory']; } + if($goods['buy_max_number'] > 0 && $data['stock'] > $goods['buy_max_number']) + { + $data['stock'] = $goods['buy_max_number']; + } if(Db::name('Cart')->where($where)->update($data)) { return DataReturn('加入成功', 0, self::UserCartTotal($params)); @@ -358,14 +371,34 @@ class BuyService return $ret; } - // 更新 + // 条件 $where = [ 'id' => intval($params['id']), 'goods_id' => intval($params['goods_id']), 'user_id' => intval($params['user']['id']), ]; + + // 数量 + $stock = intval($params['stock']); + + // 获取购物车数据 + $cart = Db::name('Cart')->where($where)->select(); + if(empty($cart)) + { + return DataReturn('请先加入购物车', -1); + } + $cart[0]['stock'] = $stock; + + // 商品校验 + $check = self::BuyGoodsCheck(['goods'=>$cart]); + if($check['code'] != 0) + { + return $check; + } + + // 更新数据 $data = [ - 'stock' => intval($params['stock']), + 'stock' => $stock, 'upd_time' => time(), ]; if(Db::name('Cart')->where($where)->update($data)) @@ -766,7 +799,11 @@ class BuyService foreach($params['goods'] as $v) { // 获取商品信息 - $goods = Db::name('Goods')->find($v['goods_id']); + $goods = Db::name('Goods')->field('id,title,price,is_shelves,inventory,buy_min_number,buy_max_number')->find($v['goods_id']); + if(empty($goods)) + { + return DataReturn('['.$v['goods_id'].']商品不存在', -1); + } // 规格 $goods_base = GoodsService::GoodsSpecDetail(['id'=>$v['goods_id'], 'spec'=>isset($v['spec']) ? $v['spec'] : []]); @@ -779,25 +816,21 @@ class BuyService } // 基础判断 - if(empty($goods)) - { - return DataReturn('['.$v['goods_id'].']商品不存在', -1); - } if($goods['is_shelves'] != 1) { - return DataReturn('['.$v['goods_id'].']商品已下架', -1); + return DataReturn('商品已下架['.$goods['title'].']', -1); } if($v['stock'] > $goods['inventory']) { - return DataReturn('['.$v['goods_id'].']购买数量超过商品库存数量['.$v['stock'].'>'.$goods['inventory'].']', -1); + return DataReturn('购买数量超过商品库存数量['.$goods['title'].']['.$v['stock'].'>'.$goods['inventory'].']', -1); } if($goods['buy_min_number'] > 1 && $v['stock'] < $goods['buy_min_number']) { - return DataReturn('['.$v['goods_id'].']低于商品起购数量['.$v['stock'].'<'.$goods['buy_min_number'].']', -1); + return DataReturn('低于商品起购数量['.$goods['title'].']['.$v['stock'].'<'.$goods['buy_min_number'].']', -1); } - if($goods['buy_max_number'] > 1 && $v['stock'] > $goods['buy_max_number']) + if($goods['buy_max_number'] > 0 && $v['stock'] > $goods['buy_max_number']) { - return DataReturn('['.$v['goods_id'].']超过商品限购数量['.$v['stock'].'>'.$goods['buy_max_number'].']', -1); + return DataReturn('超过商品限购数量['.$goods['title'].']['.$v['stock'].'>'.$goods['buy_max_number'].']', -1); } } @@ -874,7 +907,7 @@ class BuyService return $buy; } $check = self::BuyGoodsCheck(['goods'=>$buy['data']['goods']]); - if(!isset($check['code']) || $check['code'] != 0) + if($check['code'] != 0) { return $check; } diff --git a/application/service/GoodsService.php b/application/service/GoodsService.php index a528d3e78..8e49aa8a8 100755 --- a/application/service/GoodsService.php +++ b/application/service/GoodsService.php @@ -220,7 +220,7 @@ class GoodsService $data = array_merge($data, $temp); } } - $data = empty($data) ? $ids : array_merge($ids, $data); + $data = empty($data) ? $ids : array_unique(array_merge($ids, $data)); return $data; } diff --git a/application/service/OrderAftersaleService.php b/application/service/OrderAftersaleService.php index 5777e6448..3fc217041 100644 --- a/application/service/OrderAftersaleService.php +++ b/application/service/OrderAftersaleService.php @@ -219,8 +219,40 @@ class OrderAftersaleService 'add_time' => time(), 'apply_time' => time(), ]; - if(Db::name('OrderAftersale')->insertGetId($data) > 0) + + // 订单售后添加前钩子 + $hook_name = 'plugins_service_order_aftersale_insert_begin'; + $ret = HookReturnHandle(Hook::listen($hook_name, [ + 'hook_name' => $hook_name, + 'is_backend' => true, + 'data' => &$data, + 'params' => $params, + + ])); + if(isset($ret['code']) && $ret['code'] != 0) { + return $ret; + } + + // 数据添加 + $data_id = Db::name('OrderAftersale')->insertGetId($data); + if($data_id > 0) + { + // 订单售后添加成功钩子 + $hook_name = 'plugins_service_order_aftersale_insert_end'; + $ret = HookReturnHandle(Hook::listen($hook_name, [ + 'hook_name' => $hook_name, + 'is_backend' => true, + 'data_id' => $data_id, + 'data' => $data, + 'params' => $params, + ])); + if(isset($ret['code']) && $ret['code'] != 0) + { + return $ret; + } + + // 返回成功 return DataReturn('申请成功', 0); } return DataReturn('申请失败', -100); @@ -298,8 +330,40 @@ class OrderAftersaleService 'delivery_time' => time(), 'upd_time' => time(), ]; + + // 订单售后单退货前钩子 + $hook_name = 'plugins_service_order_aftersale_delivery_begin'; + $ret = HookReturnHandle(Hook::listen($hook_name, [ + 'hook_name' => $hook_name, + 'is_backend' => true, + 'data_id' => $params['id'], + 'data' => &$data, + 'params' => $params, + + ])); + if(isset($ret['code']) && $ret['code'] != 0) + { + return $ret; + } + + // 数据更新 if(Db::name('OrderAftersale')->where($where)->update($data)) { + // 订单售后退货成功钩子 + $hook_name = 'plugins_service_order_aftersale_delivery_end'; + $ret = HookReturnHandle(Hook::listen($hook_name, [ + 'hook_name' => $hook_name, + 'is_backend' => true, + 'data_id' => $params['id'], + 'data' => $data, + 'params' => $params, + ])); + if(isset($ret['code']) && $ret['code'] != 0) + { + return $ret; + } + + // 返回成功 return DataReturn('操作成功', 0); } return DataReturn('操作失败', -100); @@ -552,9 +616,46 @@ class OrderAftersaleService return DataReturn('状态不可操作['.$status_list[$aftersale['status']]['name'].']', -1); } - // 数据更新 - if(Db::name('OrderAftersale')->where($where)->update(['status'=>5, 'cancel_time'=>time(), 'upd_time'=>time()])) + // 数据 + $data = [ + 'status' => 5, + 'cancel_time' => time(), + 'upd_time' => time() + ]; + + // 订单售后单取消前钩子 + $hook_name = 'plugins_service_order_aftersale_cacnel_begin'; + $ret = HookReturnHandle(Hook::listen($hook_name, [ + 'hook_name' => $hook_name, + 'is_backend' => true, + 'data_id' => $params['id'], + 'data' => &$data, + 'params' => $params, + + ])); + if(isset($ret['code']) && $ret['code'] != 0) + { + return $ret; + } + + // 更新数据 + if(Db::name('OrderAftersale')->where($where)->update($data)) { + // 订单售后取消成功钩子 + $hook_name = 'plugins_service_order_aftersale_cacnel_end'; + $ret = HookReturnHandle(Hook::listen($hook_name, [ + 'hook_name' => $hook_name, + 'is_backend' => true, + 'data_id' => $params['id'], + 'data' => $data, + 'params' => $params, + ])); + if(isset($ret['code']) && $ret['code'] != 0) + { + return $ret; + } + + // 返回成功 return DataReturn('取消成功'); } return DataReturn('取消失败', -100); @@ -611,9 +712,46 @@ class OrderAftersaleService return DataReturn('类型不可操作['.$aftersale_type_list[$aftersale['type']]['name'].']', -1); } - // 数据更新 - if(Db::name('OrderAftersale')->where($where)->update(['status'=>1, 'confirm_time'=>time(), 'upd_time'=>time()])) + // 数据 + $data = [ + 'status' => 1, + 'confirm_time' => time(), + 'upd_time' => time() + ]; + + // 订单售后单确认前钩子 + $hook_name = 'plugins_service_order_aftersale_confirm_begin'; + $ret = HookReturnHandle(Hook::listen($hook_name, [ + 'hook_name' => $hook_name, + 'is_backend' => true, + 'data_id' => $params['id'], + 'data' => &$data, + 'params' => $params, + + ])); + if(isset($ret['code']) && $ret['code'] != 0) + { + return $ret; + } + + // 更新数据 + if(Db::name('OrderAftersale')->where($where)->update()) { + // 订单售后单确认成功钩子 + $hook_name = 'plugins_service_order_aftersale_confirm_end'; + $ret = HookReturnHandle(Hook::listen($hook_name, [ + 'hook_name' => $hook_name, + 'is_backend' => true, + 'data_id' => $params['id'], + 'data' => $data, + 'params' => $params, + ])); + if(isset($ret['code']) && $ret['code'] != 0) + { + return $ret; + } + + // 返回成功 return DataReturn('确认成功'); } return DataReturn('确认失败', -100); @@ -845,7 +983,7 @@ class OrderAftersaleService } // 更新退款状态 - $aftersale_upd_data = [ + $data = [ 'status' => 3, 'refundment' => $params['refundment'], 'audit_time' => time(), @@ -855,9 +993,27 @@ class OrderAftersaleService // 仅退款是否退了数量 if($is_refund_only_number == true) { - $aftersale_upd_data['number'] = $aftersale['number']; + $data['number'] = $aftersale['number']; } - if(!Db::name('OrderAftersale')->where(['id'=>$aftersale['id']])->update($aftersale_upd_data)) + + // 订单售后单审核前钩子 + $hook_name = 'plugins_service_order_aftersale_audit_handle_begin'; + $ret = HookReturnHandle(Hook::listen($hook_name, [ + 'hook_name' => $hook_name, + 'is_backend' => true, + 'data_id' => $aftersale['id'], + 'data' => &$data, + 'order_id' => $order['data']['id'], + 'params' => $params, + + ])); + if(isset($ret['code']) && $ret['code'] != 0) + { + return $ret; + } + + // 数据更新 + if(!Db::name('OrderAftersale')->where(['id'=>$aftersale['id']])->update($data)) { Db::rollback(); return DataReturn('售后订单更新失败', -60); @@ -1066,15 +1222,47 @@ class OrderAftersaleService return DataReturn('状态不可操作['.$status_list[$aftersale['status']]['name'].']', -1); } - // 更新操作 + // 数据 $data = [ 'status' => 4, 'refuse_reason' => $params['refuse_reason'], 'audit_time' => time(), 'upd_time' => time(), ]; + + // 订单售后单拒绝前钩子 + $hook_name = 'plugins_service_order_aftersale_refuse_begin'; + $ret = HookReturnHandle(Hook::listen($hook_name, [ + 'hook_name' => $hook_name, + 'is_backend' => true, + 'data_id' => $params['id'], + 'data' => &$data, + 'params' => $params, + + ])); + if(isset($ret['code']) && $ret['code'] != 0) + { + return $ret; + } + + // 更新数据 if(Db::name('OrderAftersale')->where(['id' => intval($params['id'])])->update($data)) { + // 订单售后单拒绝成功钩子 + $hook_name = 'plugins_service_order_aftersale_refuse_end'; + $ret = HookReturnHandle(Hook::listen($hook_name, [ + 'hook_name' => $hook_name, + 'is_backend' => true, + 'data_id' => $params['id'], + 'data' => $data, + 'params' => $params, + ])); + if(isset($ret['code']) && $ret['code'] != 0) + { + return $ret; + } + + // 返回成功 return DataReturn('拒绝成功', 0); } return DataReturn('拒绝失败', -100); @@ -1122,6 +1310,20 @@ class OrderAftersaleService // 删除操作 if(Db::name('OrderAftersale')->where(['id' => intval($params['id'])])->delete()) { + // 订单售后单删除成功钩子 + $hook_name = 'plugins_service_order_aftersale_delete_success'; + $ret = HookReturnHandle(Hook::listen($hook_name, [ + 'hook_name' => $hook_name, + 'is_backend' => true, + 'data_id' => $params['id'], + 'params' => $params, + ])); + if(isset($ret['code']) && $ret['code'] != 0) + { + return $ret; + } + + // 返回成功 return DataReturn('删除成功', 0); } return DataReturn('删除失败', -100); diff --git a/application/tags.php b/application/tags.php index 47869fdf7..ba5123987 100755 --- a/application/tags.php +++ b/application/tags.php @@ -35,18 +35,147 @@ return array ( 'plugins_service_users_center_left_menu_handle' => array ( 0 => 'app\\plugins\\excellentbuyreturntocash\\Hook', + 1 => 'app\\plugins\\coupon\\Hook', + 2 => 'app\\plugins\\distribution\\Hook', + 3 => 'app\\plugins\\membershiplevelvip\\Hook', ), 'plugins_service_header_navigation_top_right_handle' => array ( 0 => 'app\\plugins\\excellentbuyreturntocash\\Hook', + 1 => 'app\\plugins\\coupon\\Hook', + 2 => 'app\\plugins\\distribution\\Hook', + 3 => 'app\\plugins\\membershiplevelvip\\Hook', ), 'plugins_service_buy_order_insert_end' => array ( 0 => 'app\\plugins\\excellentbuyreturntocash\\Hook', + 1 => 'app\\plugins\\distribution\\Hook', ), 'plugins_service_order_status_change_history_success_handle' => array ( 0 => 'app\\plugins\\excellentbuyreturntocash\\Hook', + 1 => 'app\\plugins\\coupon\\Hook', + 2 => 'app\\plugins\\distribution\\Hook', + ), + 'plugins_service_buy_order_insert_begin' => + array ( + 0 => 'app\\plugins\\excellentbuyreturntocash\\Hook', + ), + 'plugins_service_order_aftersale_audit_handle_end' => + array ( + 0 => 'app\\plugins\\excellentbuyreturntocash\\Hook', + 1 => 'app\\plugins\\distribution\\Hook', + ), + 'plugins_css' => + array ( + 0 => 'app\\plugins\\coupon\\Hook', + 1 => 'app\\plugins\\distribution\\Hook', + 2 => 'app\\plugins\\commononlineservice\\Hook', + 3 => 'app\\plugins\\membershiplevelvip\\Hook', + ), + 'plugins_js' => + array ( + 0 => 'app\\plugins\\coupon\\Hook', + 1 => 'app\\plugins\\commononlineservice\\Hook', + ), + 'plugins_service_navigation_header_handle' => + array ( + 0 => 'app\\plugins\\coupon\\Hook', + 1 => 'app\\plugins\\membershiplevelvip\\Hook', + ), + 'plugins_view_goods_detail_panel_bottom' => + array ( + 0 => 'app\\plugins\\coupon\\Hook', + ), + 'plugins_view_buy_goods_bottom' => + array ( + 0 => 'app\\plugins\\coupon\\Hook', + ), + 'plugins_service_buy_handle' => + array ( + 0 => 'app\\plugins\\coupon\\Hook', + 1 => 'app\\plugins\\membershiplevelvip\\Hook', + ), + 'plugins_view_buy_form_inside' => + array ( + 0 => 'app\\plugins\\coupon\\Hook', + ), + 'plugins_service_buy_order_insert_success' => + array ( + 0 => 'app\\plugins\\coupon\\Hook', + ), + 'plugins_service_user_register_end' => + array ( + 0 => 'app\\plugins\\coupon\\Hook', + ), + 'plugins_service_site_extraction_address_list' => + array ( + 0 => 'app\\plugins\\distribution\\Hook', + ), + 'plugins_service_goods_spec_extends_handle' => + array ( + 0 => 'app\\plugins\\distribution\\Hook', + 1 => 'app\\plugins\\membershiplevelvip\\Hook', + ), + 'plugins_view_admin_user_save' => + array ( + 0 => 'app\\plugins\\distribution\\Hook', + 1 => 'app\\plugins\\membershiplevelvip\\Hook', + ), + 'plugins_service_user_save_handle' => + array ( + 0 => 'app\\plugins\\distribution\\Hook', + 1 => 'app\\plugins\\membershiplevelvip\\Hook', + ), + 'plugins_view_goods_detail_base_buy_nav_min_inside' => + array ( + 0 => 'app\\plugins\\distribution\\Hook', + ), + 'plugins_view_goods_detail_photo_within' => + array ( + 0 => 'app\\plugins\\distribution\\Hook', + ), + 'plugins_view_goods_detail_base_bottom' => + array ( + 0 => 'app\\plugins\\distribution\\Hook', + ), + 'plugins_view_common_bottom' => + array ( + 0 => 'app\\plugins\\commononlineservice\\Hook', + ), + 'plugins_service_goods_handle_end' => + array ( + 0 => 'app\\plugins\\usernotloginhidegoodsprice\\Hook', + 1 => 'app\\plugins\\membershiplevelvip\\Hook', + ), + 'plugins_service_goods_spec_base' => + array ( + 0 => 'app\\plugins\\usernotloginhidegoodsprice\\Hook', + 1 => 'app\\plugins\\membershiplevelvip\\Hook', + ), + 'plugins_service_user_login_success_record' => + array ( + 0 => 'app\\plugins\\membershiplevelvip\\Hook', + ), + 'plugins_service_goods_save_handle' => + array ( + 0 => 'app\\plugins\\membershiplevelvip\\Hook', + ), + 'plugins_view_goods_detail_panel_price_top' => + array ( + 0 => 'app\\plugins\\membershiplevelvip\\Hook', + ), + 'plugins_view_home_goods_inside_bottom' => + array ( + 0 => 'app\\plugins\\membershiplevelvip\\Hook', + ), + 'plugins_view_search_goods_inside_bottom' => + array ( + 0 => 'app\\plugins\\membershiplevelvip\\Hook', + ), + 'plugins_service_goods_spec_type' => + array ( + 0 => 'app\\plugins\\membershiplevelvip\\Hook', ), ); ?> \ No newline at end of file -- GitLab