diff --git a/app/service/OrderService.php b/app/service/OrderService.php index 4d7644451eff6667b5d3e6185e2137740c0bba61..c16d1f15a4b4b38390450bc9f15b2430588c4fd7 100755 --- a/app/service/OrderService.php +++ b/app/service/OrderService.php @@ -937,12 +937,19 @@ class OrderService // 虚拟商品自动触发发货操作 if($order['order_model'] == 3) { - self::OrderDelivery([ + $ret = self::OrderDeliveryHandle([ 'id' => $order['id'], 'creator' => 0, 'creator_name' => '系统', 'user_id' => $order['user_id'], + 'user_type' => 'admin', ]); + if($ret['code'] != 0) + { + // 事务回滚 + Db::rollback(); + return $ret; + } } } @@ -1269,7 +1276,7 @@ class OrderService // 自提模式 添加订单取货码 if($v['order_model'] == 2) { - $v['extraction_data'] = (!empty($extraction_data) && array_key_exists($v['id'], $extraction_data)) ? $extraction_data[$v['id']] : []; + $v['extraction_data'] = (isset($v['status']) && !in_array($v['status'], [0,1,5,6]) && !empty($extraction_data) && array_key_exists($v['id'], $extraction_data)) ? $extraction_data[$v['id']] : null; } } @@ -1426,7 +1433,7 @@ class OrderService { $result['is_confirm'] = ($data['status'] == 0) ? 1 : 0; $result['is_pay'] = ($data['pay_status'] == 0 && !in_array($data['status'], [5,6])) ? 1 : 0; - $result['is_delivery'] = ($data['status'] == 2) ? 1 : 0; + $result['is_delivery'] = ($data['status'] == 2 || (isset($data['order_model']) && $data['order_model'] == 3)) ? 1 : 0; $result['is_collect'] = ($data['status'] == 3) ? 1 : 0; $result['is_cancel'] = (in_array($data['status'], [0,1]) || (in_array($data['status'], [2,3,4]) && $data['pay_status'] == 0)) ? 1 : 0; $result['is_delete'] = (in_array($data['status'], [5,6]) && isset($data['is_delete_time']) && $data['is_delete_time'] == 0) ? 1 : 0; @@ -1639,7 +1646,7 @@ class OrderService */ private static function OrderAftersaleStatusBtnText($order_status, $orderaftersale) { - $text = ''; + $text = null; if(in_array($order_status, [2,3,4,6])) { if(empty($orderaftersale)) @@ -1746,7 +1753,7 @@ class OrderService // 获取订单信息 $where = ['id'=>intval($params['id']), 'user_id'=>$params['user_id'], 'is_delete_time'=>0, 'user_is_delete_time'=>0]; - $order = Db::name('Order')->where($where)->field('id,status,pay_status,user_id')->find(); + $order = Db::name('Order')->where($where)->field('id,status,pay_status,user_id,order_model')->find(); if(empty($order)) { return DataReturn('资源不存在或已被删除', -1); @@ -1806,112 +1813,136 @@ class OrderService */ public static function OrderDelivery($params = []) { - // 请求参数 - $p = [ - [ - 'checked_type' => 'empty', - 'key_name' => 'id', - 'error_msg' => '订单id有误', - ], - [ - 'checked_type' => 'empty', - 'key_name' => 'user_id', - 'error_msg' => '用户id有误', - ], - ]; - $ret = ParamsChecked($params, $p); - if($ret !== true) + // 订单发货处理 + Db::startTrans(); + $ret = self::OrderDeliveryHandle($params); + if($ret['code'] == 0) { - return DataReturn($ret, -1); + Db::commit(); + } else { + Db::rollback(); } + return $ret; + } - // 用户类型 - $user_type = empty($params['user_type']) ? 'user' : $params['user_type']; + /** + * 订单发货处理 + * @author Devil + * @blog http://gong.gg/ + * @version 1.0.0 + * @date 2018-09-30 + * @desc description + * @param [array] $params [输入参数] + */ + public static function OrderDeliveryHandle($params = []) + { + // 捕获异常 + try { + // 请求参数 + $p = [ + [ + 'checked_type' => 'empty', + 'key_name' => 'id', + 'error_msg' => '订单id有误', + ], + [ + 'checked_type' => 'empty', + 'key_name' => 'user_id', + 'error_msg' => '用户id有误', + ], + ]; + $ret = ParamsChecked($params, $p); + if($ret !== true) + { + throw new \Exception($ret['msg']); + } - // 获取订单信息 - $where = ['id'=>intval($params['id']), 'user_id'=>$params['user_id'], 'is_delete_time'=>0, 'user_is_delete_time'=>0]; - $order = Db::name('Order')->where($where)->field('id,status,pay_status,user_id,order_model')->find(); - if(empty($order)) - { - return DataReturn('资源不存在或已被删除', -1); - } - $operate = self::OrderOperateData($order, $user_type); - if($operate['is_delivery'] != 1) - { - $status_text = MyConst('common_order_status')[$order['status']]['name']; - return DataReturn('状态不可操作['.$status_text.']', -1); - } + // 用户类型 + $user_type = empty($params['user_type']) ? 'user' : $params['user_type']; - // 订单模式 - switch($order['order_model']) - { - // 销售模式- 订单快递信息校验 - case 0 : - $p = [ - [ - 'checked_type' => 'empty', - 'key_name' => 'express_id', - 'error_msg' => '快递id有误', - ], - [ - 'checked_type' => 'empty', - 'key_name' => 'express_number', - 'error_msg' => '快递单号有误', - ], - ]; - $ret = ParamsChecked($params, $p); - if($ret !== true) - { - return DataReturn($ret, -1); - } - break; + // 获取订单信息 + $where = ['id'=>intval($params['id']), 'user_id'=>$params['user_id'], 'is_delete_time'=>0, 'user_is_delete_time'=>0]; + $order = Db::name('Order')->where($where)->field('id,status,pay_status,user_id,order_model')->find(); + if(empty($order)) + { + throw new \Exception('资源不存在或已被删除'); + } + $operate = self::OrderOperateData($order, $user_type); + if($operate['is_delivery'] != 1) + { + $status_text = MyConst('common_order_status')[$order['status']]['name']; + throw new \Exception('状态不可操作['.$status_text.']'); + } + + // 订单模式 + switch($order['order_model']) + { + // 销售模式- 订单快递信息校验 + case 0 : + $p = [ + [ + 'checked_type' => 'empty', + 'key_name' => 'express_id', + 'error_msg' => '快递id有误', + ], + [ + 'checked_type' => 'empty', + 'key_name' => 'express_number', + 'error_msg' => '快递单号有误', + ], + ]; + $ret = ParamsChecked($params, $p); + if($ret !== true) + { + throw new \Exception($ret['msg']); + } + break; - // 自提模式 - 验证取货码 - case 2 : - $p = [ - [ - 'checked_type' => 'empty', - 'key_name' => 'extraction_code', - 'error_msg' => '取货码有误', - ], - ]; - $ret = ParamsChecked($params, $p); - if($ret !== true) - { - return DataReturn($ret, -1); - } + // 自提模式 - 验证取货码 + case 2 : + $p = [ + [ + 'checked_type' => 'empty', + 'key_name' => 'extraction_code', + 'error_msg' => '取货码有误', + ], + ]; + $ret = ParamsChecked($params, $p); + if($ret !== true) + { + throw new \Exception($ret['msg']); + } - // 校验 - $extraction_code = Db::name('OrderExtractionCode')->where(['order_id'=>$order['id']])->value('code'); - if(empty($extraction_code)) - { - return DataReturn('订单取货码不存在、请联系管理员', -10); - } - if($extraction_code != $params['extraction_code']) - { - return DataReturn('取货码不正确', -11); - } - break; - } + // 校验 + $extraction_code = Db::name('OrderExtractionCode')->where(['order_id'=>$order['id']])->value('code'); + if(empty($extraction_code)) + { + throw new \Exception('订单取货码不存在、请联系管理员'); + } + if($extraction_code != $params['extraction_code']) + { + throw new \Exception('取货码不正确'); + } + break; + } + // 订单更新 + $upd_data = [ + 'status' => 3, + 'express_id' => isset($params['express_id']) ? intval($params['express_id']) : 0, + 'express_number' => isset($params['express_number']) ? $params['express_number'] : '', + 'delivery_time' => time(), + 'upd_time' => time(), + ]; + if(!Db::name('Order')->where($where)->update($upd_data)) + { + throw new \Exception('发货失败'); + } - // 开启事务 - Db::startTrans(); - $upd_data = [ - 'status' => 3, - 'express_id' => isset($params['express_id']) ? intval($params['express_id']) : 0, - 'express_number' => isset($params['express_number']) ? $params['express_number'] : '', - 'delivery_time' => time(), - 'upd_time' => time(), - ]; - if(Db::name('Order')->where($where)->update($upd_data)) - { // 库存扣除 $ret = BuyService::OrderInventoryDeduct(['order_id'=>$order['id'], 'opt_type'=>'delivery']); if($ret['code'] != 0) { - // 事务回滚 - Db::rollback(); - return DataReturn($ret['msg'], -10); + throw new \Exception($ret['msg']); } // 用户消息 @@ -1922,14 +1953,11 @@ class OrderService $creator_name = isset($params['creator_name']) ? htmlentities($params['creator_name']) : ''; self::OrderHistoryAdd($order['id'], $upd_data['status'], $order['status'], '收货', $creator, $creator_name); - // 提交事务 - Db::commit(); + // 完成 return DataReturn('发货成功', 0); + } catch(\Exception $e) { + return DataReturn($e->getMessage(), -1); } - - // 事务回滚 - Db::rollback(); - return DataReturn('发货失败', -1); } /** @@ -1967,7 +1995,7 @@ class OrderService // 获取订单信息 $where = ['id'=>intval($params['id']), 'user_id'=>$params['user_id'], 'is_delete_time'=>0, 'user_is_delete_time'=>0]; - $order = Db::name('Order')->where($where)->field('id,status,pay_status,user_id')->find(); + $order = Db::name('Order')->where($where)->field('id,status,pay_status,user_id,order_model')->find(); if(empty($order)) { return DataReturn('资源不存在或已被删除', -1); @@ -2075,7 +2103,7 @@ class OrderService // 获取订单信息 $where = ['id'=>intval($params['id']), 'user_id'=>$params['user_id'], 'is_delete_time'=>0, 'user_is_delete_time'=>0]; - $order = Db::name('Order')->where($where)->field('id,status,pay_status,user_id')->find(); + $order = Db::name('Order')->where($where)->field('id,status,pay_status,user_id,order_model')->find(); if(empty($order)) { return DataReturn('资源不存在或已被删除', -1); @@ -2179,7 +2207,7 @@ class OrderService // 获取订单信息 $where = ['id'=>intval($params['id']), 'user_id'=>$params['user_id'], $delete_field=>0]; - $order = Db::name('Order')->where($where)->field('id,status,pay_status,user_id,is_delete_time,user_is_delete_time')->find(); + $order = Db::name('Order')->where($where)->field('id,status,pay_status,user_id,order_model,is_delete_time,user_is_delete_time')->find(); if(empty($order)) { return DataReturn('资源不存在或已被删除', -1);