[ 'status' => self::ORDER_CREATE, 'name' => '待支付', 'is_allow_refund' => 0, 'icon' => 'public/resource/order/order-icon.png', 'action' => [ [ 'action' => 'orderClose', 'title' => '关闭订单', 'color' => '' ], [ 'action' => 'orderAdjustMoney', 'title' => '调整价格', 'color' => '' ], ], 'member_action' => [ [ 'action' => 'orderClose', 'title' => '关闭订单', 'color' => '' ], [ 'action' => 'orderPay', 'title' => '支付', 'color' => '' ], ], 'color' => '' ], self::ORDER_PAY => [ 'status' => self::ORDER_PAY, 'name' => '待发货', 'is_allow_refund' => 0, 'icon' => 'public/resource/order/order-icon-send.png', 'action' => [ [ 'action' => 'orderVirtualDelivery', 'title' => '发货', 'color' => '' ], ], 'member_action' => [], 'color' => '' ], self::ORDER_DELIVERY => [ 'status' => self::ORDER_DELIVERY, 'name' => '待收货', 'is_allow_refund' => 1, 'icon' => 'public/resource/order/order-icon-received.png', 'action' => [ ], 'member_action' => [ [ 'action' => 'memberVirtualTakeDelivery', 'title' => '确认使用', 'color' => '' ], ], 'color' => '' ], self::ORDER_TAKE_DELIVERY => [ 'status' => self::ORDER_TAKE_DELIVERY, 'name' => '已收货', 'is_allow_refund' => 1, 'icon' => 'public/resource/order/order-icon-received.png', 'action' => [ ], 'member_action' => [ ], 'color' => '' ], self::ORDER_WAIT_VERIFY => [ 'status' => self::ORDER_WAIT_VERIFY, 'name' => '待使用', 'is_allow_refund' => 1, 'icon' => 'public/resource/order/order-icon-close.png', 'action' => [ ], 'member_action' => [ ], 'color' => '' ], self::ORDER_VERIFYED => [ 'status' => self::ORDER_VERIFYED, 'name' => '已使用', 'is_allow_refund' => 1, 'icon' => 'public/resource/order/order-icon-close.png', 'action' => [ ], 'member_action' => [ ], 'color' => '' ], self::ORDER_COMPLETE => [ 'status' => self::ORDER_COMPLETE, 'name' => '已完成', 'is_allow_refund' => 1, 'icon' => 'public/resource/order/order-icon-received.png', 'action' => [ ], 'member_action' => [ ], 'color' => '' ], self::ORDER_CLOSE => [ 'status' => self::ORDER_CLOSE, 'name' => '已关闭', 'is_allow_refund' => 0, 'icon' => 'public/resource/order/order-icon-close.png', 'action' => [ ], 'member_action' => [ ], 'color' => '' ], ]; /** * 订单支付 * @param unknown $order_info */ public function orderPay($order_info, $pay_type, $log_data = [], $pay_info = []) { $pay_type_list = $this->getPayType(); $data = array( 'order_status' => self::ORDER_PAY, 'order_status_name' => $this->order_status[self::ORDER_PAY]["name"], 'order_status_action' => json_encode($this->order_status[self::ORDER_PAY], JSON_UNESCAPED_UNICODE), "pay_status" => 1, "pay_time" => time(), "is_enable_refund" => 1, "pay_type" => $pay_type, "pay_type_name" => $pay_type_list[$pay_type] ); //记录订单日志 start $action = '商家对订单进行了线下支付'; //获取用户信息 if (empty($log_data)) { $member_info = model('member')->getInfo(['member_id' => $order_info['member_id']], 'nickname'); $log_data = [ 'uid' => $order_info['member_id'], 'nick_name' => $member_info['nickname'], 'action_way' => 1 ]; $buyer_name = empty($member_info['nickname']) ? '' : '【' . $member_info['nickname'] . '】'; $action = '买家' . $buyer_name . '支付了订单'; } $log_data = array_merge($log_data, [ 'order_id' => $order_info['order_id'], 'action' => $action, 'order_status' => self::ORDER_PAY, 'order_status_name' => $this->order_status[self::ORDER_PAY]["name"], ]); $this->addOrderLog($log_data); //记录订单日志 end $res = model('order')->update($data, [['order_id', "=", $order_info['order_id']]]); $goods_id = model('order_goods')->getValue([['order_id', '=', $order_info['order_id']]], 'goods_id'); //判断商品是否需要核销 $goods_info = model('goods')->getInfo([['goods_id', '=', $goods_id]], 'goods_class,is_need_verify,virtual_deliver_type'); if ($order_info['is_lock'] == 0) { if (in_array($order_info['promotion_type'], ['pintuan', 'pinfan'])) { } else { if ($goods_info['goods_class'] == 2) { switch ($goods_info['virtual_deliver_type']) { case 'auto_deliver'://自动发货 $result = $this->virtualDelivery($order_info);// break; case 'artificial_deliver'://手动发货 break; case 'verify'://到店核销 //核销次数 is_need_verify $order_status_item = $this->order_status[self::ORDER_WAIT_VERIFY]; // $order_status_item['name'] = '待使用'; // $order_status_item['action'] = []; // $order_status_item['member_action'] = []; $data = array( 'order_status' => self::ORDER_WAIT_VERIFY, 'order_status_name' => $order_status_item['name'], 'order_status_action' => json_encode($order_status_item, JSON_UNESCAPED_UNICODE), ); $res = model('order')->update($data, [['order_id', "=", $order_info['order_id']]]); if ($goods_info['is_need_verify']) { //虚拟产品发货 $this->virtualOrderTakeDelivery($order_info['order_id']); } else { //虚拟产品收货 $this->orderCommonTakeDelivery($order_info['order_id']); } break; } } elseif ($goods_info['goods_class'] == 3) { $order_status_item = $this->order_status[self::ORDER_DELIVERY]; $order_status_item['action'] = []; $order_status_item['member_action'] = []; $data = array( 'order_status' => self::ORDER_DELIVERY, 'order_status_name' => $this->order_status[self::ORDER_DELIVERY]["name"], 'order_status_action' => json_encode($order_status_item, JSON_UNESCAPED_UNICODE), ); $res = model('order')->update($data, [['order_id', "=", $order_info['order_id']]]); // 卡密商品发货 $result = $this->virtualcardTakeDelivery($order_info['order_id']); if ($result['code'] < 0) { return $result; } } elseif ($goods_info['goods_class'] == 4) { $order_status_item = $this->order_status[self::ORDER_DELIVERY]; $order_status_item['action'] = []; $order_status_item['member_action'] = []; $data = array( 'order_status' => self::ORDER_DELIVERY, 'order_status_name' => $this->order_status[self::ORDER_DELIVERY]["name"], 'order_status_action' => json_encode($order_status_item, JSON_UNESCAPED_UNICODE), ); $res = model('order')->update($data, [['order_id', "=", $order_info['order_id']]]); $this->serviceGoodsTakeDelivery($order_info['order_id'], $pay_info); } elseif ($goods_info['goods_class'] == 5) { //卡项套餐 $order_status_item = $this->order_status[self::ORDER_DELIVERY]; $order_status_item['action'] = []; $order_status_item['member_action'] = []; $data = array( 'order_status' => self::ORDER_DELIVERY, 'order_status_name' => $this->order_status[self::ORDER_DELIVERY]["name"], 'order_status_action' => json_encode($order_status_item, JSON_UNESCAPED_UNICODE), ); $res = model('order')->update($data, [['order_id', "=", $order_info['order_id']]]); $this->cardServiceTakeDelivery($order_info['order_id'], $pay_info); } } } return $this->success($res); } /** * 订单自动发货 * @param unknown $order_id */ public function virtualOrderTakeDelivery($order_id) { $order_info = model('order')->getInfo([['order_id', '=', $order_id]], 'order_no,site_id,site_name,member_id,order_type, sign_time,order_status,delivery_code,create_time,name,pay_time,pay_money,mobile,is_lock,order_money'); if (empty($order_info)) return $this->error([], "ORDER_EMPTY"); model('order')->startTrans(); try { //订单项变为已发货 model('order_goods')->update(['delivery_status' => 1, 'delivery_status_name' => '待使用'], [['order_id', '=', $order_id]]); $order_goods_info = model('order_goods')->getInfo([['order_id', '=', $order_id]], 'sku_id,sku_name,sku_image,price,num,goods_id,order_goods_id');//订单项详情 if (!empty($order_goods_info)) { $order_goods_info['num'] = numberFormat($order_goods_info['num']); } //判断商品是否需要核销 $goods_info = model('goods_sku')->getInfo([['gs.sku_id', '=', $order_goods_info['sku_id']]], 'g.is_need_verify,g.verify_validity_type,g.virtual_indate,gs.verify_num', 'gs', [['goods g', 'g.goods_id = gs.goods_id', 'left']]); if ($goods_info['is_need_verify']) { switch ($goods_info['verify_validity_type']) { case 0: $expire_time = 0; break; case 1: $expire_time = strtotime('+' . $goods_info['virtual_indate'] . 'days'); break; case 2: $expire_time = $goods_info['virtual_indate']; break; } // dump($expire_time); //添加自动收货事件 if ($expire_time > 0) { $cron = new Cron(); $cron->addCron(1, 0, "订单自动收货", "CronOrderTakeDelivery", $expire_time, $order_id); // 核销码临近到期时间(小时) $config_model = new Config(); $verify_config = $config_model->getOrderVerifyConfig($order_info['site_id'], 'shop')['data']['value']; $order_verify_out_time = $verify_config['order_verify_time_out'] ?? 24; $time_strtime = $order_verify_out_time * 3600; //核销商品临期提醒 $cron->addCron(1, 0, "核销商品临期提醒", "VerifyOrderOutTime", $expire_time - $time_strtime, $order_id); //核销码过期提醒 $cron->addCron(1, 0, "核销码过期提醒", "CronVerifyCodeExpire", $expire_time, $order_id); } $count = $goods_info['verify_num'] * $order_goods_info['num']; // for ($i = 1; $i <= $count; $i++) { //创建待核销记录 $verify_model = new VerifyModel(); $item_array = array( [ "img" => $order_goods_info["sku_image"], "name" => $order_goods_info["sku_name"], "price" => $order_goods_info["price"], "num" => 1, "order_goods_id" => $order_goods_info["order_goods_id"], "remark_array" => [ ["title" => "联系人", "value" => $order_info['name'] . $order_info['mobile']] ] ], ); $remark_array = array( ["title" => '订单金额', "value" => $order_info["order_money"]], ["title" => '订单编号', "value" => $order_info["order_no"]], ["title" => '创建时间', "value" => time_to_date($order_info["create_time"])], ["title" => '付款时间', "value" => time_to_date($order_info["pay_time"])], ); $verify_content_json = $verify_model->getVerifyJson($item_array, $remark_array); $code_result = $verify_model->addVerify("virtualgoods", $order_info['site_id'], $order_info['site_name'], $verify_content_json, $expire_time, $count, 0, $order_info['member_id']); $code = $code_result["data"]["verify_code"]; $result = $verify_model->qrcode($code, "all", "virtualgoods", $order_info['site_id'], "create");//生成二维码 //自动收发货 $order_data = array( 'virtual_code' => $code, ); $res = model('order')->update($order_data, [['order_id', '=', $order_id]]); //生成所购买的产品 $virtual_goods_model = new VirtualGoods(); $goods_virtual_data = [ 'site_id' => $order_info['site_id'], 'order_id' => $order_id, 'order_no' => $order_info['order_no'], 'sku_id' => $order_goods_info['sku_id'], 'sku_name' => $order_goods_info['sku_name'], 'code' => $code, 'member_id' => $order_info['member_id'], 'sku_image' => $order_goods_info['sku_image'], 'expire_time' => $expire_time, 'sold_time' => time(), 'goods_id' => $order_goods_info['goods_id'], 'verify_total_count' => $count ]; $virtual_goods_model->addGoodsVirtual($goods_virtual_data); // } } model('order')->commit(); return $this->success($res); } catch (\Exception $e) { model('order')->rollback(); return $this->error('', $e->getMessage()); } } /** * 订单自动发货 * @param unknown $order_id */ public function serviceGoodsTakeDelivery($order_id) { $order_info = model('order')->getInfo([['order_id', '=', $order_id]], 'order_no,site_id,site_name,member_id,order_type, sign_time,order_status,delivery_code,create_time,name,pay_time,pay_money,mobile,is_lock,order_money'); if (empty($order_info)) return $this->error([], "ORDER_EMPTY"); model('order')->startTrans(); try { //订单项变为已发货 model('order_goods')->update(['delivery_status' => 1, "delivery_status_name" => "已发货"], [['order_id', "=", $order_id]]); $order_goods_info = model('order_goods')->getInfo([['order_id', '=', $order_id]], 'sku_id,sku_name,sku_image,price,num,goods_id,order_goods_id');//订单项详情 if (!empty($order_goods_info)) { $order_goods_info['num'] = numberFormat($order_goods_info['num']); } //判断商品是否需要核销 $goods_info = model('goods_sku')->getInfo([['gs.sku_id', '=', $order_goods_info['sku_id']]], 'g.is_need_verify,g.verify_validity_type,g.virtual_indate,gs.verify_num', 'gs', [['goods g', 'g.goods_id = gs.goods_id', 'left']]); switch ($goods_info['verify_validity_type']) { case 0: $expire_time = 0; break; case 1: $expire_time = strtotime('+' . $goods_info['virtual_indate'] . 'days'); break; case 2: $expire_time = $goods_info['virtual_indate']; break; } // dump($expire_time); //添加自动收货事件 if ($expire_time > 0) { $cron = new Cron(); $cron->addCron(1, 0, "订单自动收货", "CronOrderTakeDelivery", $expire_time, $order_id); // 核销码临近到期时间(小时) $config_model = new Config(); $verify_config = $config_model->getOrderVerifyConfig($order_info['site_id'], 'shop')['data']['value']; $order_verify_out_time = $verify_config['order_verify_time_out'] ?? 24; $time_strtime = $order_verify_out_time * 3600; //核销商品临期提醒 $cron->addCron(1, 0, "核销商品临期提醒", "VerifyOrderOutTime", $expire_time - $time_strtime, $order_id); //核销码过期提醒 $cron->addCron(1, 0, "核销码过期提醒", "CronVerifyCodeExpire", $expire_time, $order_id); } $count = $order_goods_info['num']; //创建待核销记录 $verify_model = new VerifyModel(); $item_array = array( [ "img" => $order_goods_info["sku_image"], "name" => $order_goods_info["sku_name"], "price" => $order_goods_info["price"], "num" => 1, "order_goods_id" => $order_goods_info["order_goods_id"], "remark_array" => [ ["title" => "联系人", "value" => $order_info['name'] . $order_info['mobile']] ] ], ); $remark_array = array( ["title" => '订单金额', "value" => $order_info["order_money"]], ["title" => '订单编号', "value" => $order_info["order_no"]], ["title" => '创建时间', "value" => time_to_date($order_info["create_time"])], ["title" => '付款时间', "value" => time_to_date($order_info["pay_time"])], ); $verify_content_json = $verify_model->getVerifyJson($item_array, $remark_array); $code_result = $verify_model->addVerify("virtualgoods", $order_info['site_id'], $order_info['site_name'], $verify_content_json, $expire_time, $count, 0, $order_info['member_id']); $code = $code_result["data"]["verify_code"]; $result = $verify_model->qrcode($code, "all", "virtualgoods", $order_info['site_id'], "create");//生成二维码 //自动收发货 $order_data = array( 'virtual_code' => $code, ); $res = model('order')->update($order_data, [['order_id', '=', $order_id]]); //生成所购买的产品 $virtual_goods_model = new VirtualGoods(); $goods_virtual_data = [ 'site_id' => $order_info['site_id'], 'order_id' => $order_id, 'order_no' => $order_info['order_no'], 'sku_id' => $order_goods_info['sku_id'], 'sku_name' => $order_goods_info['sku_name'], 'code' => $code, 'member_id' => $order_info['member_id'], 'sku_image' => $order_goods_info['sku_image'], 'expire_time' => $expire_time, 'sold_time' => time(), 'goods_id' => $order_goods_info['goods_id'], 'verify_total_count' => $count ]; $virtual_goods_model->addGoodsVirtual($goods_virtual_data); model('order')->commit(); return $this->success($res); } catch (\Exception $e) { model('order')->rollback(); return $this->error('', $e->getMessage()); } } /** * 卡密商品自动发货 收货(可以分为两个函数 一个发货一个收货) * @param $order_id */ public function virtualcardTakeDelivery($order_id) { $order_info = model('order')->getInfo([['order_id', '=', $order_id]], 'order_no,site_id,site_name,member_id,order_type, sign_time,order_status,delivery_code,create_time,name,pay_time,pay_money,mobile,is_lock,order_money'); if (empty($order_info)) return $this->error([], "ORDER_EMPTY"); model('order')->startTrans(); try { //订单项变为已发货 model('order_goods')->update(['delivery_status' => 1, "delivery_status_name" => "已发货"], [['order_id', "=", $order_id]]); $order_goods_info = model('order_goods')->getInfo([['order_id', '=', $order_id]], '*');//订单项详情 if (!empty($order_goods_info)) { $order_goods_info['num'] = numberFormat($order_goods_info['num']); } //库存处理(卡密商品支付后在扣出库存)//todo 可以再商品中设置扣除库存步骤 $order_stock_model = new OrderStock(); $item_goods_class = $order_goods_info['goods_class']; if ($item_goods_class == 3) { //库存变化 $stock_result = $order_stock_model->decOrderStock($order_goods_info); if ($stock_result['code'] < 0) { //主动退款 $order_refund_model = new OrderRefund(); $refund_result = $order_refund_model->activeRefund($order_id, $stock_result['message'], '订单退款'); if ($refund_result['code'] < 0) { model('order')->rollback(); return $refund_result; } model('order')->commit(); return $stock_result; } } $goods_virtual_list = model('goods_virtual')->pageList([['order_id', '=', 0], ['sku_id', '=', $order_goods_info['sku_id']]], 'id', 'id asc', 1, $order_goods_info['num']); if (count($goods_virtual_list['list']) != $order_goods_info['num']) { model('order')->rollback(); return $this->error('', '卡密库存不足'); } $ids = array_column($goods_virtual_list['list'], 'id'); model('goods_virtual')->update([ 'order_id' => $order_id, 'order_no' => $order_info['order_no'], 'member_id' => $order_info['member_id'], 'sold_time' => time() ], [['id', 'in', $ids]]); // 订单自动收货 $this->orderCommonTakeDelivery($order_id); model('order')->commit(); return $this->success(); } catch (\Exception $e) { model('order')->rollback(); return $this->error('', $e->getMessage()); } } /** * 卡项发货设置(需要增加卡项核销) * @param $order_id */ public function cardServiceTakeDelivery($order_id, $pay_info = []) { $order_info = model('order')->getInfo([['order_id', '=', $order_id]], 'order_no,site_id,store_id,site_name,member_id,order_type, sign_time,order_status,delivery_code,create_time,name,pay_time,pay_money,mobile,is_lock,order_money'); if (empty($order_info)) return $this->error([], "ORDER_EMPTY"); model('order')->startTrans(); try { //订单项变为已发货 model('order_goods')->update(['delivery_status' => 1, "delivery_status_name" => "已发货"], [['order_id', "=", $order_id]]); $order_goods_info = model('order_goods')->getInfo([['order_id', '=', $order_id]], 'sku_id,sku_name,sku_no,sku_image,price,num,goods_id,order_goods_id');//订单项详情 if (!empty($order_goods_info)) { $order_goods_info['num'] = numberFormat($order_goods_info['num']); } //创建卡项 $member_card = new MemberCard(); $card_data = [ 'trade_no' => $pay_info['trade_no'] ?? '', 'sku_no' => $order_goods_info['sku_no'], 'store_id' => $order_info['store_id'], 'goods_id' => $order_goods_info['goods_id'], 'num' => $order_goods_info['num'], 'member_id' => $order_info['member_id'], 'site_id' => $order_info['site_id'], 'order_id' => $order_id ]; $res_card = $member_card->create($card_data); if ($res_card['code'] < 0) { model('order')->rollback(); return $this->error('', $res_card['message']); } // 订单自动收货 $this->orderCommonTakeDelivery($order_id); model('order')->commit(); return $this->success(1); } catch (\Exception $e) { model('order')->rollback(); return $this->error('', $e->getMessage()); } } /** * 自动发货 * @param $order_id */ public function orderTakeDelivery($order_id) { $order_info = model('order')->getInfo([['order_id', '=', $order_id]], 'order_no,site_id,site_name,member_id,order_type, sign_time,order_status,delivery_code,create_time,name,pay_time,pay_money,mobile,is_lock,order_money'); if (empty($order_info)) return $this->error([], "ORDER_EMPTY"); $res = model('order_goods')->update(['delivery_status' => 1, "delivery_status_name" => "已发货"], [['order_id', "=", $order_id]]); return $this->success($res); } /** * 退款完成操作 * @param $order_info */ public function refund($order_goods_info) { $virtual_card = (new \addon\virtualcard\model\VirtualGoods())->getGoodsClass(); if ($order_goods_info['goods_class'] != $virtual_card['id']) { //删除已退款订单项会员虚拟商品, 并退回商品库存 //无需判断订单项是否需要入库 $item_param = array( "sku_id" => $order_goods_info["sku_id"], "num" => $order_goods_info["num"], ); //返还库存 $order_stock_model = new OrderStock(); $order_stock_model->incOrderStock($order_goods_info); //$goods_stock_model->incStock($item_param); //删除用户的这条虚拟商品 $goods_virtual_model = new VirtualGoods(); $goods_virtual_model->deleteGoodsVirtual([["order_id", "=", $order_goods_info["order_id"]], ["member_id", "=", $order_goods_info["member_id"]]]); } } /** * 订单详情 * @param $order_info */ public function orderDetail($order_info) { $verify_record_model = new VerifyRecord(); $data = [ 'goods_class' => $order_info['order_goods'][0]['goods_class'] ]; if ($data['goods_class'] == 2) { $virtual_goods = model('goods_virtual')->getFirstData([["order_id", "=", $order_info["order_id"]]], '*', 'is_veirfy asc'); if (!empty($virtual_goods)) { $virtual_goods['total_verify_num'] = model('goods_virtual')->getCount([["order_id", "=", $order_info["order_id"]]]); $virtual_goods['verify_num'] = model('goods_virtual')->getCount([["order_id", "=", $order_info["order_id"]], ['is_veirfy', '=', 1]]); $verify_code = model('goods_virtual')->getColumn([["order_id", "=", $order_info["order_id"]]], 'code'); $virtual_goods['verify_record'] = []; if (!empty($verify_code)) { $virtual_goods['verify_record'] = $verify_record_model->getVerifyRecordsViewList([['verify_code', 'in', $verify_code]], '*', 'verify_time desc')['data'] ?? []; } $data["virtual_goods"] = $virtual_goods; $data["virtual_code"] = $virtual_goods['code']; } } else if ($data['goods_class'] == 3) { $virtual_goods = model('goods_virtual')->getList([["order_id", "=", $order_info["order_id"]]], '*', 'id asc'); if (!empty($virtual_goods)) { foreach ($virtual_goods as $key => $item) { $virtual_goods[$key]['card_info'] = json_decode($item['card_info'], true); } $data["virtual_goods"] = $virtual_goods; } } if ($data['goods_class'] == 4) { $virtual_goods = model('goods_virtual')->getFirstData([["order_id", "=", $order_info["order_id"]]], '*', 'is_veirfy asc'); if (!empty($virtual_goods)) { $virtual_goods['total_verify_num'] = model('goods_virtual')->getCount([["order_id", "=", $order_info["order_id"]]]); $virtual_goods['verify_num'] = model('goods_virtual')->getCount([["order_id", "=", $order_info["order_id"]], ['is_veirfy', '=', 1]]); $verify_code = model('goods_virtual')->getColumn([["order_id", "=", $order_info["order_id"]]], 'code'); $virtual_goods['verify_record'] = []; if (!empty($verify_code)) { $virtual_goods['verify_record'] = $verify_record_model->getVerifyRecordsViewList([['verify_code', 'in', $verify_code]], '*', 'verify_time desc')['data'] ?? []; } $data["virtual_goods"] = $virtual_goods; $data["virtual_code"] = $virtual_goods['code']; } } return $data; } /** * 虚拟发货 * @param $params * @return array */ public function virtualDelivery($params) { $order_id = $params['order_id'] ?? 0; //todo 核验订单是否处于锁定 $local_result = $this->verifyOrderLock($order_id); if ($local_result['code'] < 0) return $local_result; $site_id = $params['site_id'] ?? 0; $condition = [['order_id', "=", $params['order_id']]]; if ($site_id > 0) { $condition[] = ['site_id', '=', $site_id]; } $order_info = $this->getOrderInfo($condition)['data'] ?? []; if (empty($order_info)) return $this->error([], '找不到订单'); $data = array( 'order_status' => self::ORDER_DELIVERY, 'order_status_name' => $this->order_status[self::ORDER_DELIVERY]["name"], 'order_status_action' => json_encode($this->order_status[self::ORDER_DELIVERY], JSON_UNESCAPED_UNICODE), ); $res = model('order')->update($data, $condition); $goods_id = model('order_goods')->getValue([['order_id', '=', $order_id]], 'goods_id'); //判断商品是否需要核销 $goods_info = model('goods')->getInfo([['goods_id', '=', $goods_id]], 'virtual_receive_type'); //增加卡项商品的自动发货 if (!empty($goods_info)) { $virtual_receive_type = $goods_info['virtual_receive_type']; if ($virtual_receive_type == 'auto_receive') { $result = $this->virtualTakeDelivery($params); if ($result['code'] < 0) { return $result; } } } return $this->success(); } public function virtualTakeDelivery($params) { $order_id = $params['order_id'] ?? 0; $site_id = $params['site_id'] ?? 0; $member_id = $params['member_id'] ?? 0; $condition = [['order_id', "=", $order_id]]; if ($site_id > 0) { $condition[] = ['site_id', '=', $site_id]; } if ($member_id > 0) { $condition[] = ['member_id', '=', $member_id]; } $order_info = $this->getOrderInfo($condition)['data'] ?? []; if (empty($order_info)) return $this->error([], '找不到订单'); //虚拟产品收货 $result = $this->orderCommonTakeDelivery($order_id); if ($result['code'] < 0) { return $result; } return $this->success(); } /** * to发送 * @param $params */ public function toSend($params) { $order_id = $params['order_id']; $goods_id = model('order_goods')->getValue([['order_id', '=', $order_id]], 'goods_id'); //判断商品是否需要核销 $goods_info = model('goods')->getInfo([['goods_id', '=', $goods_id]], 'goods_class,is_need_verify,virtual_deliver_type'); $order_info = model('order')->getInfo([['order_id', '=', $order_id]]); if ($goods_info['goods_class'] == 2) { switch ($goods_info['virtual_deliver_type']) { case 'auto_deliver'://自动发货 $result = $this->virtualDelivery($order_info);// break; case 'artificial_deliver'://手动发货 break; case 'verify'://到店核销 $order_status_item = $this->order_status[self::ORDER_WAIT_VERIFY]; $data = array( 'order_status' => self::ORDER_WAIT_VERIFY, 'order_status_name' => $order_status_item["name"], 'order_status_action' => json_encode($order_status_item, JSON_UNESCAPED_UNICODE), ); $res = model('order')->update($data, [['order_id', "=", $order_info['order_id']]]); if ($goods_info['is_need_verify']) { //虚拟产品发货 $this->virtualOrderTakeDelivery($order_info['order_id']); } else { //虚拟产品收货 $this->orderCommonTakeDelivery($order_info['order_id']); } break; } } elseif ($goods_info['goods_class'] == 3) { $order_status_item = $this->order_status[self::ORDER_DELIVERY]; $order_status_item['action'] = []; $order_status_item['member_action'] = []; $data = array( 'order_status' => self::ORDER_DELIVERY, 'order_status_name' => $this->order_status[self::ORDER_DELIVERY]["name"], 'order_status_action' => json_encode($order_status_item, JSON_UNESCAPED_UNICODE), ); $res = model('order')->update($data, [['order_id', "=", $order_info['order_id']]]); // 卡密商品发货 $result = $this->virtualcardTakeDelivery($order_info['order_id']); if ($result['code'] < 0) { return $result; } } elseif ($goods_info['goods_class'] == 4) { $order_status_item = $this->order_status[self::ORDER_DELIVERY]; $order_status_item['action'] = []; $order_status_item['member_action'] = []; $data = array( 'order_status' => self::ORDER_DELIVERY, 'order_status_name' => $this->order_status[self::ORDER_DELIVERY]["name"], 'order_status_action' => json_encode($order_status_item, JSON_UNESCAPED_UNICODE), ); $res = model('order')->update($data, [['order_id', "=", $order_info['order_id']]]); $result = $this->serviceGoodsTakeDelivery($order_info['order_id']); if ($result['code'] < 0) { return $result; } } elseif ($goods_info['goods_class'] == 5) { $result = $this->cardServiceTakeDelivery($order_info['order_id']); if ($result['code'] < 0) { return $result; } } return $this->success(); } }