* Date: 2019-3-20 */ namespace app\user\model; use think\Model; use think\Db; use think\Config; use think\Page; /** * 商城 */ class Shop extends Model { //初始化 protected function initialize() { // 需要调用`Model`的`initialize`方法 parent::initialize(); $this->home_lang = get_home_lang(); } // 处理购买订单,超过指定时间修改为已订单过期,针对未付款订单 public function UpdateShopOrderData($users_id){ $time = getTime() - Config::get('global.get_shop_order_validity'); $where = array( 'users_id' => $users_id, 'order_status' => 0, 'add_time' => array('<',$time), ); $data = [ 'order_status' => 4, // 状态修改为订单过期 'pay_name' => '', // 订单过期则清空支付方式标记 'wechat_pay_type' => '', // 订单过期则清空微信支付类型标记 'update_time' => getTime(), ]; // 查询订单id数组用于添加订单操作记录 $OrderIds = Db::name('shop_order')->field('order_id')->where($where)->select(); // 订单过期,更新规格数量 $productSpecValueModel = new \app\user\model\ProductSpecValue; $productSpecValueModel->SaveProducSpecValueStock($OrderIds, $users_id); //批量修改订单状态 Db::name('shop_order')->where($where)->update($data); // 添加订单操作记录 if (!empty($OrderIds)) { AddOrderAction($OrderIds,$users_id,'0','4','0','0','订单过期!','会员未在订单有效期内支付,订单过期!'); } } // 通过商品名称模糊查询订单信息 public function QueryOrderList($pagesize,$users_id,$keywords,$query_get){ // 商品名称模糊查询订单明细表,获取订单主表ID $DetailsWhere = [ 'users_id' => $users_id, 'lang' => $this->home_lang, ]; $DetailsWhere['product_name'] = ['LIKE', "%{$keywords}%"]; $DetailsData = Db::name('shop_order_details')->field('order_id')->where($DetailsWhere)->select(); // 若查无数据,则返回false if (empty($DetailsData)) { return false; } $order_ids = ''; // 处理订单ID,查询订单主表信息 foreach ($DetailsData as $key => $value) { if ('0' < $key) { $order_ids .= ','; } $order_ids .= $value['order_id']; } // 查询条件 $OrderWhere = [ 'users_id' => $users_id, 'lang' => $this->home_lang, 'order_id' => ['IN', $order_ids], ]; $paginate_type = 'userseyou'; if (isMobile()) { $paginate_type = 'usersmobile'; } $paginate = array( 'type' => $paginate_type, 'var_page' => config('paginate.var_page'), 'query' => $query_get, ); $pages = Db::name('shop_order') ->field("*") ->where($OrderWhere) ->order('add_time desc') ->paginate($pagesize, false, $paginate); $data['list'] = $pages->items(); $data['pages'] = $pages; return $data; } public function GetOrderIsEmpty($users_id,$keywords,$select_status){ // 基础查询条件 $OrderWhere = [ 'users_id' => $users_id, 'lang' => $this->home_lang, ]; // 应用搜索条件 if (!empty($keywords)) { $OrderWhere['order_code'] = ['LIKE', "%{$keywords}%"]; } // 订单状态搜索 if (!empty($select_status)) { if ('dzf' === $select_status) { $select_status = 0; } $OrderWhere['order_status'] = $select_status; if (3 == $select_status){ $OrderWhere['is_comment'] = 0; } } $order = Db::name('shop_order')->where($OrderWhere)->count(); // 查询存在数据,则返回1 if (!empty($order)) { return 1; exit; } // 查询订单明细表 if (empty($order) && !empty($keywords)) { $DetailsWhere = [ 'users_id' => $users_id, 'lang' => $this->home_lang, ]; $DetailsWhere['product_name'] = ['LIKE', "%{$keywords}%"]; $DetailsData = Db::name('shop_order_details')->field('order_id')->where($DetailsWhere)->select(); // 查询无数据,则返回0 if (empty($DetailsData)) { return 0; exit; } $order_ids = ''; // 处理订单ID,查询订单主表信息 foreach ($DetailsData as $key => $value) { if (0 < $key) { $order_ids .= ','; } $order_ids .= $value['order_id']; } // 查询条件 $OrderWhere = [ 'users_id' => $users_id, 'lang' => $this->home_lang, 'order_id' => ['IN', $order_ids], ]; $order2 = Db::name('shop_order')->where($OrderWhere)->count(); if (!empty($order2)) { return 1; exit; }else{ return 0; exit; } } } // 获取微信公众号access_token // 传入微信公众号appid // 传入微信公众号secret // 返回data public function GetWeChatAccessToken($appid,$secret){ // 获取公众号access_token,接口限制10万次/天 $time = getTime(); $get_token_url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$appid.'&secret='.$secret; $TokenData = httpRequest($get_token_url); $TokenData = json_decode($TokenData, true); if (!empty($TokenData['access_token'])) { // 存入缓存配置 $WechatData = [ 'wechat_token_value' => $TokenData['access_token'], 'wechat_token_time' => $time, ]; getUsersConfigData('wechat',$WechatData); $data = [ 'status' => true, 'token' => $WechatData['wechat_token_value'], ]; }else{ $data = [ 'status' => false, 'prompt' => '错误提示:101,后台配置配置AppId或AppSecret不正确,请检查!', ]; } return $data; } // 获取微信公众号jsapi_ticket // 传入微信公众号accesstoken // 返回data public function GetWeChatJsapiTicket($accesstoken){ // 获取公众号jsapi_ticket $time = getTime(); $get_ticket_url = 'https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token='.$accesstoken.'&type=jsapi'; $TicketData = httpRequest($get_ticket_url); $TicketData = json_decode($TicketData, true); if (!empty($TicketData['ticket'])) { // 存入缓存配置 $WechatData = [ 'wechat_ticket_value' => $TicketData['ticket'], 'wechat_ticket_time' => $time, ]; getUsersConfigData('wechat',$WechatData); $data = [ 'status' => true, 'ticket' => $WechatData['wechat_ticket_value'], ]; }else{ $data = [ 'status' => false, 'prompt' => '错误提示:102,后台配置配置AppId或AppSecret不正确,请检查!', ]; } return $data; } // 获取随机字符串 // 长度 length // 结果 str public function GetRandomString($length){ $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; $str = ""; for ($i = 0; $i < $length; $i++) { $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1); } return $str; } // 旧产品属性处理 public function ProductAttrProcessing($value = array()) { $attr_value = ''; $AttrWhere = [ 'a.aid' => $value['aid'], 'b.lang' => $this->home_lang ]; $attrData = Db::name('product_attr') ->alias('a') ->field('a.attr_value as value, b.attr_name as name') ->join('__PRODUCT_ATTRIBUTE__ b', 'a.attr_id = b.attr_id', 'LEFT') ->where($AttrWhere) ->order('b.sort_order asc, a.attr_id asc') ->select(); foreach ($attrData as $val) { $attr_value .= $val['name'].':'.$val['value'].'
'; } return $attr_value; } // 新产品属性处理 public function ProductNewAttrProcessing($value = array()) { $attr_value = ''; if (!empty($value['merchant_id'])) { // 多商家商品则查询自定义参数 $where = [ 'aid' => $value['aid'], ]; $order = 'sort_order asc, param_id asc'; $field = 'param_name as name, param_value as value'; $attrData = Db::name('product_custom_param')->field($field)->where($where)->order($order)->select(); } else { // 新版参数 if (!empty($value['attrlist_id'])) { $where = [ 'b.aid' => $value['aid'], 'a.list_id' => ['IN', [0, $value['attrlist_id']]], 'a.status' => 1, ]; }else{ $where = [ 'b.aid' => $value['aid'], 'a.list_id' => 0, 'a.status' => 1, ]; } $attrData = Db::name('shop_product_attribute') ->alias('a') ->field('a.attr_name as name, b.attr_value as value') ->join('__SHOP_PRODUCT_ATTR__ b', 'a.attr_id = b.attr_id', 'LEFT') ->where($where) ->order('a.sort_order asc, a.attr_id asc') ->select(); } foreach ($attrData as $val) { $attr_value .= $val['name'].':'.$val['value'].'
'; } return $attr_value; } // 产品规格处理 public function ProductSpecProcessing($value = array()) { $spec_value_s = ''; if (!empty($value['spec_value_id'])) { $spec_value_id = explode('_', $value['spec_value_id']); if (!empty($spec_value_id)) { $SpecWhere = [ 'aid' => $value['aid'], 'lang' => $this->home_lang, 'spec_value_id' => ['IN',$spec_value_id], ]; $ProductSpecData = Db::name("product_spec_data")->where($SpecWhere)->field('spec_name,spec_value')->select(); foreach ($ProductSpecData as $spec_value) { $spec_value_s .= $spec_value['spec_name'].':'.$spec_value['spec_value'].'
'; } } } return $spec_value_s; } // 产品库存处理 public function ProductStockProcessing($SpecValue = array()) { $SpecUpData = []; // 有规格 $ArcUpData = []; // 无规格 foreach ($SpecValue as $key => $value) { if (!empty($value['value_id'])) { $SpecUpData[] = [ 'value_id' => $value['value_id'], 'spec_stock' => Db::raw('spec_stock-'.($value['quantity'])), 'spec_sales_num' => Db::raw('spec_sales_num+'.($value['quantity'])), ]; $ArcUpData[] = [ 'aid' => $value['aid'], 'stock_count' => Db::raw('stock_count-' . ($value['quantity'])), 'sales_num' => Db::raw('sales_num+' . ($value['quantity'])), 'sales_all' => Db::raw('sales_all+' . ($value['quantity'])), ]; }else{ $ArcUpData[] = [ 'aid' => $value['aid'], 'stock_count' => Db::raw('stock_count-'.($value['quantity'])), 'sales_num' => Db::raw('sales_num+' . ($value['quantity'])), 'sales_all' => Db::raw('sales_all+' . ($value['quantity'])), ]; } } // 更新规格库存销量 if (!empty($SpecUpData)) model('ProductSpecValue')->saveAll($SpecUpData); // 更新商品库存销量 if (!empty($ArcUpData)) model('Archives')->saveAll($ArcUpData); } /** * 生成订单之前的产品数据整理 - 【第一步】 * @return [type] [description] */ public function handlerOrderData($opt = 'normal', $OrderData = [], $list = [], $users = [], $post = []) { $aid = 0; if ('fast' == $opt) { $aid = !empty($list[0]['aid']) ? $list[0]['aid'] : 0; } // 会员配置 $usersConfig = getUsersConfigData('all'); // 产品数据处理 $PromType = $ContainsVirtual = 1; // 1表示为虚拟订单 $TotalAmount = $TotalNumber = 0; $level_discount = $users['level_discount']; foreach ($list as $key => $value) { // 未开启多规格则执行 if (!isset($usersConfig['shop_open_spec']) || empty($usersConfig['shop_open_spec'])) { $value['spec_value_id'] = $value['spec_price'] = $value['spec_stock'] = $value['value_id'] = 0; } // 购物车商品存在规格并且价格不为空,则覆盖商品原来的价格 if (!empty($value['spec_value_id']) && $value['spec_price'] >= 0) $value['users_price'] = $value['spec_price']; // 计算折扣后的价格 if (!empty($level_discount)) { // 折扣率百分比 $discount_price = $level_discount / 100; // 会员折扣价 $value['users_price'] = 2 === intval($value['users_discount_type']) ? $value['users_price'] : $value['users_price'] * $discount_price; } // 查询会员折扣价 if (empty($value['spec_value_id']) && !empty($users['level_id']) && 1 === intval($value['users_discount_type'])) { $value['users_price'] = model('ShopPublicHandle')->handleUsersDiscountPrice($value['aid'], $users['level_id']); } $value['users_price'] = sprintf("%.2f", $value['users_price']); // 购物车商品存在规格并且库存不为空,则覆盖商品原来的库存 if (!empty($value['spec_stock'])) $value['stock_count'] = $value['spec_stock']; // 若库存为空则返回提示 if (empty($value['stock_count'])) return ['code'=>0, 'msg'=>"产品 《{$value['title']}》 库存不足!"]; // 非法提交,请正规合法提交订单-提交生成订单时检测判断 if (empty($value['product_num'])) return ['code'=>0, 'msg'=>'非法提交,请正规合法提交订单,非法代码:402']; // 金额、数量计算 if ($value['users_price'] >= 0 && !empty($value['product_num'])) { // 合计金额 $TotalAmount += sprintf("%.2f", $value['users_price'] * $value['product_num']); // 合计数量 $TotalNumber += $value['product_num']; // 判断订单类型,目前逻辑:一个订单中,只要存在一个普通产品(实物产品,需要发货物流),则为普通订单 if (empty($value['prom_type'])) $PromType = 0;// 0表示为普通订单 // 判断是否包含虚拟商品,只要存在一个虚拟商品则表示包含虚拟商品 if (!empty($value['prom_type']) && $value['prom_type'] >= 1) $ContainsVirtual = 2; } $list[$key] = $value; } // 添加到订单主表 $time = getTime(); $OrderData['order_code'] = date('Ymd').$time.rand(10,100); //订单生成规则 $OrderData['users_id'] = $users['users_id']; $OrderData['order_status'] = 0; // 订单未付款 $OrderData['add_time'] = $time; $OrderData['payment_method'] = !empty($post['payment_method']) ? intval($post['payment_method']) : 0; // 订单支付方式 $OrderData['order_total_amount']= $TotalAmount; $OrderData['order_amount'] = $TotalAmount; $OrderData['order_total_num'] = $TotalNumber; $OrderData['contains_virtual'] = $ContainsVirtual; $OrderData['prom_type'] = $PromType; $OrderData['user_note'] = !empty($post['message']) ? $post['message'] : ''; // 会员备注 $OrderData['lang'] = $this->home_lang; /*特定场景专用*/ $opencodetype = config('global.opencodetype'); if (1 == $opencodetype) { $aid = !empty($list[0]['aid']) ? $list[0]['aid'] : 0; $OrderData['spec_value_id'] = !empty($OrderData['spec_value_id']) ? "_".trim($OrderData['spec_value_id'], '_')."_" : ''; // 订单分组 $group = 'archives'; if (74 == $aid) { $group = 'cloudminipro'; } else if (75 == $aid) { $group = 'cloudminiproMall'; } $OrderData['group'] = $group; // 规格值 $spec_value_ids = $OrderData['spec_value_id']; // 购买套餐 $buy_type = 1; if (stristr($spec_value_ids, '_1_')) { $buy_type = 2; } else if (stristr($spec_value_ids, '_2_')) { $buy_type = 3; } $OrderData['buy_type'] = $buy_type; // 购买天数 $buy_day = 0; if (stristr($spec_value_ids, '_4_')) { $buy_day = 365; } else if (stristr($spec_value_ids, '_5_')) { $buy_day = 365 * 2; } $OrderData['buy_day'] = $buy_day; } /*end*/ if (isMobile() && isWeixin()) { $OrderData['pay_name'] = 'wechat';// 如果在微信端中则默认为微信支付 $OrderData['wechat_pay_type'] = 'WeChatInternal';// 如果在微信端中则默认为微信端调起支付 } if (1 == $OrderData['payment_method']) { // 追加添加到订单主表的数组 $OrderData['order_status'] = 1; // 标记已付款 $OrderData['pay_time'] = $time; $OrderData['pay_name'] = 'delivery_pay';// 货到付款 $OrderData['wechat_pay_type'] = ''; // 选择货到付款,则去掉微信端调起支付标记 $OrderData['update_time'] = $time; } // 判断订单来源 $isMobile = isMobile(); $isWeixin = isWeixin(); $isWeixinApplets = isWeixinApplets(); if (empty($isMobile) && empty($isWeixin)) { $OrderData['order_terminal'] = 1; } else if (!empty($isMobile) && empty($isWeixinApplets)) { $OrderData['order_terminal'] = 2; } else if (!empty($isMobile) && !empty($isWeixinApplets)) { $OrderData['order_terminal'] = 3; } return ['code'=>1, 'msg'=>'ok', 'data'=>['OrderData'=>$OrderData, 'list'=>$list]]; } /** * 生成订单之后的订单明细整理 - 【第二步】 * @return [type] [description] */ public function handlerDetailsData($opt = 'normal', $OrderData = [], $list = [], $users = []) { $OrderId = $OrderData['order_id']; $cart_ids = $UpSpecValue = []; $attr_value = $spec_value = ''; if (1 == count($list) && !empty($list[0]['under_order_type'])) { /*----------删除用户旧的未付款的同类记录 start ------------*/ $order_md5 = md5($list[0]['aid'].$list[0]['spec_value_id']); $where = [ 'order_md5' => $order_md5, 'users_id' => intval($users['users_id']), 'order_id' => ['NEQ', $OrderId], 'order_status' => 0, ]; $opencodetype = config('global.opencodetype'); if (1 == $opencodetype) { $where['group'] = $OrderData['group']; } $order_id_arr = Db::name('shop_order')->where($where)->column('order_id'); if (!empty($order_id_arr)) { $r = Db::name('shop_order')->where([ 'order_id' => ['IN', $order_id_arr], ])->delete(); if (false !== $r) { Db::name('shop_order_details')->where([ 'order_id' => ['IN', $order_id_arr], ])->delete(); } } /*----------删除用户旧的未付款的同类记录 end ------------*/ } /*----------------订单副表添加数组--------------*/ // 添加到订单明细表 foreach ($list as $key => $value) { // 旧产品属性处理 $attr_value = model('Shop')->ProductAttrProcessing($value); // 新产品属性处理 $attr_value_new = model('Shop')->ProductNewAttrProcessing($value); // 产品规格处理 $spec_value = model('Shop')->ProductSpecProcessing($value); $Data = [ // 产品属性 'attr_value' => htmlspecialchars($attr_value), // 产品属性 'attr_value_new' => htmlspecialchars($attr_value_new), // 产品规格 'spec_value' => htmlspecialchars($spec_value), // 产品规格值ID 'spec_value_id' => $value['spec_value_id'], // 对应规格值ID的唯一标识ID,数据表主键ID 'value_id' => $value['value_id'], // 后续添加 ]; // 订单副表添加数组 $OrderDetailsData[] = [ 'order_id' => $OrderId, 'users_id' => intval($users['users_id']), 'product_id' => $value['aid'], 'product_name' => $value['title'], 'num' => $value['product_num'], 'data' => serialize($Data), 'product_price' => $value['users_price'], 'prom_type' => $value['prom_type'], 'litpic' => $value['litpic'], 'add_time' => getTime(), 'lang' => $this->home_lang, ]; // 处理购物车ID if (empty($value['under_order_type'])) array_push($cart_ids, $value['cart_id']); // 产品库存处理 $UpSpecValue[] = [ 'aid' => $value['aid'], 'value_id' => $value['value_id'], 'quantity' => $value['product_num'], 'spec_value_id' => $value['spec_value_id'], ]; } return [ 'code' => 1, 'msg' => 'ok', 'data' => [ 'cart_ids' => $cart_ids, 'OrderDetailsData' => $OrderDetailsData, 'UpSpecValue' => $UpSpecValue, ] ]; } /*------陈风任---2021-1-12---售后服务(退换货)------开始------*/ // 读取会员自身所有服务单信息 public function GetAllServiceInfo($users_id = null, $order_code = null, $status = null,$keywords = null) { $where = [ 'users_id' => $users_id ]; if ('ing' == $status) { $where['status'] = ['IN', [1, 2, 3, 4, 5]]; } else if ('ed' == $status) { $where['status'] = ['IN', [6, 7, 8]]; } if (!empty($order_code)) $where['order_code'] = ['LIKE', "%{$order_code}%"]; if (!empty($keywords)) $where['order_code|product_name'] = ['LIKE', "%{$keywords}%"]; $count = Db::name('shop_order_service')->where($where)->count('service_id'); $pageObj = new Page($count, config('paginate.list_rows')); // 订单主表数据查询 $Service = Db::name('shop_order_service')->where($where) ->order('status asc, service_id desc') ->limit($pageObj->firstRow.','.$pageObj->listRows) ->select(); $New = get_archives_data($Service, 'product_id'); foreach ($Service as $key => $value) { $Service[$key]['status_old'] = intval($value['status']); $Service[$key]['handle'] = in_array($value['status'], [6, 7, 8]) ? '已完成' : '处理中'; $Service[$key]['status'] = Config::get('global.order_service_status')[$value['status']]; $Service[$key]['service_type'] = Config::get('global.order_service_type')[$value['service_type']]; $Service[$key]['ArchivesUrl'] = urldecode(arcurl('home/Product/view', $New[$value['product_id']])); $Service[$key]['OrDetailsUrl'] = url('user/Shop/shop_order_details', ['order_id'=>$value['order_id']]); $Service[$key]['SeDetailsUrl'] = url('user/Shop/after_service_details', ['service_id'=>$value['service_id']]); $Service[$key]['product_spec'] = str_replace("<br/>", "   ", $value['product_spec']); // 规格 $product_spec = !empty($Service[$key]['product_spec']) ? htmlspecialchars_decode($Service[$key]['product_spec']) : ''; $product_spec_list = []; $product_spec_arr = explode('
', $product_spec); foreach ($product_spec_arr as $sp_key => $sp_val) { $sp_arr = explode(':', $sp_val); if (trim($sp_arr[0]) && !empty($sp_arr[0])) { $product_spec_list[] = [ 'name' => !empty($sp_arr[0]) ? trim($sp_arr[0]) : '', 'value' => !empty($sp_arr[1]) ? trim($sp_arr[1]) : '', ]; } } $Service[$key]['product_spec_list'] = $product_spec_list; } $Return['Service'] = $Service; $Return['pageStr'] = $pageObj->show(); return $Return; } // 服务详情信息 public function GetServiceDetailsInfo($service_id = null, $users_id = null) { $Return = []; if (empty($service_id) || empty($users_id)) return $Return; $where = [ 'users_id' => $users_id, 'service_id' => $service_id ]; $Service = Db::name('shop_order_service')->where($where)->select(); if (empty($Service)) return $Return; $New = get_archives_data($Service, 'product_id'); $Service = $Service[0]; $Service['arcurl'] = urldecode(arcurl('home/Product/view', $New[$Service['product_id']])); $Service['CancelUrl'] = url('user/Shop/after_service_details', ['_ajax' => 1, 'details_id' => $Service['details_id'], 'order_id' => $Service['order_id']]); $Service['StatusName'] = Config::get('global.order_service_status')[$Service['status']]; $Service['upload_img'] = !empty($Service['upload_img']) ? explode(',', $Service['upload_img']) : []; $Service['product_img'] = handle_subdir_pic(get_default_pic($Service['product_img'])); if (isMobile()) { $Service['product_spec'] = htmlspecialchars_decode($Service['product_spec']); } else { $Service['product_spec'] = str_replace("<br/>", "
", $Service['product_spec']); } $Service['service_type_old'] = $Service['service_type']; $Service['service_type'] = Config::get('global.order_service_type')[$Service['service_type']]; $Service['admin_delivery'] = !empty($Service['admin_delivery']) ? unserialize($Service['admin_delivery']) : ['name'=>'', 'code'=>'']; $Service['product_total'] = floatval(sprintf("%.2f", $Service['refund_price'] * (string)$Service['product_num'])); /*计算退还余额*/ $field_new = 'b.details_id, b.product_price, b.data, b.num, a.shipping_fee, a.order_total_num'; $where_new = [ 'b.order_id' => $Service['order_id'], 'b.details_id' => $Service['details_id'], 'b.apply_service' => 1 ]; $Order = Db::name('shop_order')->alias('a') ->field($field_new) ->join('__SHOP_ORDER_DETAILS__ b', 'a.order_id = b.order_id', 'LEFT') ->where($where_new) ->find(); // 运费计算 $ShippingFee = 0; $Service['ShippingFee'] = floatval($ShippingFee); // if (!empty($Order['shipping_fee'])) { // $ShippingFee = sprintf("%.2f", ($Order['shipping_fee'] / (string)$Order['order_total_num']) * (string)$Service['product_num']); // $Service['ShippingFee'] = floatval($ShippingFee); // } $Service['refund_total_price'] = floatval((string)$Service['product_total'] - (string)$ShippingFee); // 规格 $product_spec_list = []; $spec_data = unserialize($Order['data']); if (!empty($spec_data['spec_value'])) { $spec_value_arr = explode('
', htmlspecialchars_decode($spec_data['spec_value'])); foreach ($spec_value_arr as $sp_key => $sp_val) { $sp_arr = explode(':', $sp_val); if (trim($sp_arr[0]) && !empty($sp_arr[0])) { $product_spec_list[] = [ 'name' => !empty($sp_arr[0]) ? trim($sp_arr[0]) : '', 'value' => !empty($sp_arr[1]) ? trim($sp_arr[1]) : '', ]; } } } $Service['product_spec_list'] = $product_spec_list; /* END */ return $Service; } // 服务详情记录 public function GetOrderServiceLog($service_id = null, $Users = [], $users_id = 0) { if (empty($service_id) || empty($Users)) return []; $Log = Db::name('shop_order_service_log')->order('log_id desc')->where('service_id', $service_id)->select(); foreach ($Log as $key => $value) { if (!empty($value['users_id'])) { if (intval($users_id) === intval($value['users_id'])) { $Log[$key]['name'] = '会员'; } else { $Log[$key]['name'] = '商家'; } } else if (!empty($value['admin_id'])) { $Log[$key]['name'] = '商家'; } } return $Log; } // 查询订单数据 public function GetOrderDetailsInfo($details_id = null, $users_id = null) { $Return = []; if (empty($details_id) || empty($users_id)) return $Return; // 查询订单明细数据并处理 $where = [ 'details_id' => $details_id, 'users_id' => $users_id ]; $Details = Db::name('shop_order_details')->where($where)->find(); if (empty($Details)) { $Return = [ 'code' => 0, 'msg' => '售后服务单不存在' ]; return $Return; } if (!empty($Details) && 1 === intval($Details['apply_service'])) { $Return = [ 'code' => 0, 'msg' => '已提交过申请,请查阅退换货信息' ]; return $Return; } $array_new = get_archives_data([$Details], 'product_id'); // 商品封面图处理 $Details['litpic'] = handle_subdir_pic(get_default_pic($Details['litpic'])); // 商品详情页URL $Details['arcurl'] = urldecode(arcurl('home/Product/view', $array_new[$Details['product_id']])); // 获取订单商品规格列表(购买时的商品规格) $Details['product_spec_list'] = model('ShopPublicHandle')->getOrderGoodsSpecList($Details); // 商品其他处理 $Details['data'] = unserialize($Details['data']); $Details['spec_value'] = htmlspecialchars_decode(htmlspecialchars_decode($Details['data']['spec_value'])); $Details['spec_value_id'] = $Details['data']['spec_value_id']; $Details['value_id'] = $Details['data']['value_id']; unset($Details['data']); // 查询订单主表数据并处理 $field = 'order_code, merchant_id, consignee, province, city, district, address, mobile, allow_service'; $Order = Db::name('shop_order')->field($field)->where('order_id', $Details['order_id'])->find(); // 判断订单是否允许申请售后 if (isset($Order['allow_service']) && 1 === intval($Order['allow_service'])) { $Return = [ 'code' => 0, 'msg' => '该订单不允许申请售后维权!' ]; return $Return; } $Order['province'] = get_province_name($Order['province']); $Order['city'] = get_city_name($Order['city']); $Order['district'] = get_area_name($Order['district']); // 合并数据返回 $Return = array_merge($Details, $Order); return $Return; } /*------陈风任---2021-1-12---售后服务(退换货)------结束------*/ }