* Date: 2019-03-26 */ namespace app\admin\controller; use think\Page; use think\Db; use think\Config; use app\admin\logic\ShopLogic; use app\admin\logic\ProductSpecLogic; // 用于产品规格逻辑功能处理 use app\user\model\Pay as PayModel; //用于虚拟网盘商品付款后自动走流程处理 class Shop extends Base { public $UsersConfigData = []; /** * 构造方法 */ public function __construct(){ parent::__construct(); $this->language_access(); // 多语言功能操作权限 $this->users_db = Db::name('users'); // 会员信息表 $this->shop_order_db = Db::name('shop_order'); // 订单主表 $this->shop_order_details_db = Db::name('shop_order_details'); // 订单明细表 $this->shop_address_db = Db::name('shop_address'); // 收货地址表 $this->shop_express_db = Db::name('shop_express'); // 物流名字表 $this->shop_order_log_db = Db::name('shop_order_log'); // 订单操作表 $this->shipping_template_db = Db::name('shop_shipping_template'); // 运费模板表 $this->product_spec_preset_db = Db::name('product_spec_preset'); // 产品规格预设表 // 会员中心配置信息 $this->UsersConfigData = getUsersConfigData('all'); $this->assign('userConfig', $this->UsersConfigData); // 用于产品规格逻辑功能处理 $this->ProductSpecLogic = new ProductSpecLogic; // 模型是否开启 $channeltype_row = \think\Cache::get('extra_global_channeltype'); $this->assign('channeltype_row', $channeltype_row); // 过期订单预处理 $this->ShopLogic = new ShopLogic; $this->ShopLogic->OverdueOrderHandle(); // 列出营销功能里已使用的模块 $marketFunc = $this->ShopLogic->marketLogic(); $this->assign('marketFunc', $marketFunc); // 获取核销插件数据 $this->weappInfo = model('ShopPublicHandle')->getWeappVerifyInfo(); $this->assign('weappInfo', $this->weappInfo); } public function home() { $url = url('Statistics/index', [], true, true); $url = preg_replace('/^http(s?)/i', $this->request->scheme(), $url); $this->redirect($url); exit; } /** * 商城设置 */ public function conf() { if (IS_POST) { $post = input('post.'); if (!empty($post)) { $TestPass = $post['TestPass']; unset($post['TestPass']); if (0 == $TestPass) unset($post['shop']['shop_open_spec']); foreach ($post as $key => $val) { is_array($val) && getUsersConfigData($key, $val); } if (!empty($post['shop_open_comment']) && 1 === intval($post['shop_open_comment'])) { tpCache('web', ['web_shopcomment_switch' => 1]); } else if (isset($post['shop_open_comment']) && 0 === intval($post['shop_open_comment'])) { tpCache('web', ['web_shopcomment_switch' => 0]); } $this->success('设置成功!', url('Shop/conf')); } } $Result = VerifyLatestTemplate(); if (!empty($Result)) getUsersConfigData('shop', ['shop_open_spec' => 0]); $TestPass = empty($Result) ? 1 : 0; $this->assign('TestPass', $TestPass); // 商城配置信息 $smtp = tpCache('smtp'); $this->assign('smtp', $smtp); return $this->fetch('conf'); } /** * 订单列表 */ public function index() { // 是否安装 秒杀抢购插件 $where = [ 'status' => 1, 'code' => 'Seckill' ]; $seckill = Db::name('weapp')->where($where)->count(); $this->assign('seckill', $seckill); // 积分商城插件 $pointsShop = model('ShopPublicHandle')->getWeappPointsShop(); $this->assign('pointsShop', $pointsShop); // 手机端后台管理插件特定使用参数 $isMobile = input('param.isMobile/d', 0); // 初始化数组和条件 $where = [ 'merchant_id' => 0, 'a.lang' => $this->admin_lang, ]; // 订单号查询 $order_code = input('order_code/s'); if (!empty($order_code)) $where['a.order_code'] = ['LIKE', "%{$order_code}%"]; // 支付方式查询 $pay_name = input('pay_name/s'); if (!empty($pay_name)) $where['a.pay_name'] = $pay_name; $this->assign('pay_name', $pay_name); // 订单下单终端查询 $order_terminal = input('order_terminal/d'); if (!empty($order_terminal)) $where['a.order_terminal'] = $order_terminal; $this->assign('order_terminal', $order_terminal); // 商品类型查询 $contains_virtual = input('contains_virtual/d'); if (!empty($contains_virtual)) $where['a.contains_virtual'] = $contains_virtual; $this->assign('contains_virtual', $contains_virtual); //活动订单查询 $act_type = input('act_type/d', 0); // 普通订单 if (1 === intval($act_type)) { if (!empty($seckill)) $where['a.is_seckill_order'] = 0; if (!empty($pointsShop)) $where['a.points_shop_order'] = 0; } // 秒杀插件订单 else if (2 === intval($act_type) && !empty($seckill)) { $where['a.is_seckill_order'] = ['gt', 0]; } // 积分商城插件订单 else if (3 === intval($act_type) && !empty($pointsShop)) { $where['a.points_shop_order'] = 1; } //时间检索条件 $begin = strtotime(input('param.add_time_begin/s')); $end = input('param.add_time_end/s'); !empty($end) && $end .= ' 23:59:59'; $end = strtotime($end); // 时间检索 if ($begin > 0 && $end > 0) { $where['a.add_time'] = array('between', "$begin, $end"); } else if ($begin > 0) { $where['a.add_time'] = array('egt', $begin); } else if ($end > 0) { $where['a.add_time'] = array('elt', $end); } // 订单状态查询 $order_status = input('order_status/s'); if (!empty($order_status)) $where['a.order_status'] = (10 == $order_status) ? 0 : $order_status; // 分页查询 $count = $this->shop_order_db->alias('a')->where($where)->count('order_id'); $pageObj = new Page($count, config('paginate.list_rows')); // 订单主表数据查询 $list = $this->shop_order_db->alias('a') ->field('a.*, b.username as u_username, b.nickname as u_nickname, b.mobile as u_mobile') ->where($where) ->join('__USERS__ b', 'a.users_id = b.users_id', 'LEFT') ->order('a.order_id desc') ->limit($pageObj->firstRow.','.$pageObj->listRows) ->select(); if (empty($list) && !empty($order_code)) { // 通过商品名称查询订单号 $where_1['product_name'] = ['LIKE', "%{$order_code}%"]; $order_ids = $this->shop_order_details_db->where($where_1)->group('order_id')->column('order_id'); // 重新查询订单主表 unset($where['a.order_code']); $where['a.order_id'] = ['IN', $order_ids]; // 分页查询 $count = $this->shop_order_db->alias('a')->where($where)->count('order_id'); $pageObj = new Page($count, config('paginate.list_rows')); // 订单主表数据查询 $list = $this->shop_order_db->alias('a') ->field('a.*, b.username as u_username, b.nickname as u_nickname, b.mobile as u_mobile') ->where($where) ->join('__USERS__ b', 'a.users_id = b.users_id', 'LEFT') ->order('a.order_id desc') ->limit($pageObj->firstRow.','.$pageObj->listRows) ->select(); } $order_ids = []; $OrderReminderID = []; foreach ($list as $key => $value) { array_push($order_ids, $value['order_id']); if (1 == $value['order_status']) array_push($OrderReminderID, $value['order_id']); } // 处理订单详情数据 $where = [ 'a.order_id' => ['IN', $order_ids] ]; $DetailsData = $this->shop_order_details_db->alias('a') ->field('a.*, b.service_id, b.status') ->where($where) ->join('__SHOP_ORDER_SERVICE__ b', 'a.details_id = b.details_id && b.status NOT IN (3, 8, 9)', 'LEFT') ->order('details_id asc') ->select(); $ArchivesData = get_archives_data($DetailsData, 'product_id'); $OrderServiceStatus = Config::get('global.order_service_status'); foreach ($DetailsData as $key => $value) { // 售后信息处理 $value['service_id'] = !empty($value['service_id']) ? $value['service_id'] : 0; $value['status'] = !empty($value['status']) ? $value['status'] : 0; $value['status_name'] = !empty($value['status']) ? $OrderServiceStatus[$value['status']] : ''; // 产品属性处理 $value['data'] = !empty($value['data']) ? unserialize($value['data']) : []; $value['pointsGoodsBuyField'] = !empty($value['data']['pointsGoodsBuyField']) ? json_decode($value['data']['pointsGoodsBuyField'], true) : []; $value['data'] = htmlspecialchars_decode(htmlspecialchars_decode($value['data']['spec_value'])); // 组合数据 $value['data'] = explode('
', $value['data']); $valueData = ''; foreach ($value['data'] as $key_1 => $value_1) { $delimiter = '';//!empty($isMobile) ? ';' : ''; if (!empty($value_1)) $valueData .= '' . trim(strrchr($value_1, ':'),':') . '' . $delimiter; } $value['data'] = $valueData; $value['arcurl'] = get_arcurl($ArchivesData[$value['product_id']]); $value['litpic'] = handle_subdir_pic(get_default_pic($value['litpic'])); $DetailsData[$key] = $value; } // 把订单详情数据植入订单数据 $defaultDetails = [ 'details_id' => 0, 'order_id' => 0, 'users_id' => 0, 'product_id' => 0, 'product_name' => '', 'num' => 0, 'data' => '', 'product_price' => 0, 'prom_type' => 0, 'litpic' => get_default_pic(), 'apply_service' => 0, 'is_comment' => 0, 'lang' => 'cn', 'add_time' => 0, 'update_time' => 0, 'service_id' => 0, 'status' => 0, 'status_name' => '', 'arcurl' => '', ]; // 把订单详情数据植入订单数据 $DetailsDataGroup = group_same_key($DetailsData, 'order_id'); foreach ($list as $key => $value) { // 处理会员昵称 $value['u_nickname'] = !empty($value['u_nickname']) ? $value['u_nickname'] : $value['u_username']; // 处理订单详情数据 $value['Details'] = $DetailsDataGroup[$value['order_id']]; if (empty($value['Details'])) $value['Details'] = [$defaultDetails]; // 商品条数 $value['rowspan'] = count($value['Details']); // 添加时间 $value['add_time'] = date('Y-m-d H:i:s', $value['add_time']); // 更新时间 $value['update_time'] = date('Y-m-d H:i:s', $value['update_time']); // 重新赋值数据 $list[$key] = $value; } // 存在积分商城订单则执行 $pointsShopOrder = !empty($list) ? get_arr_column($list, 'points_shop_order') : []; if (!empty($pointsShopOrder) && in_array(1, $pointsShopOrder)) { $weappInfo = model('ShopPublicHandle')->getWeappPointsShop(); if (!empty($weappInfo)) { $pointsShopLogic = new \weapp\PointsShop\logic\PointsShopLogic(); $list = $pointsShopLogic->pointsShopOrderDataHandle($list); } } // 查询订单被提醒发货次数 if (!empty($OrderReminderID)) { $field = 'order_id, count(action_id) as action_count'; $group = 'order_id'; $LogWhere = [ 'action_desc' => '提醒成功!', 'order_id' => ['IN', $OrderReminderID] ]; $LogData = $this->shop_order_log_db->field($field)->group($group)->where($LogWhere)->getAllWithIndex('order_id'); } // // 计算单页总额 // $total_money = $this->shop_order_db->alias('a')->where($where)->where('order_id','IN',$order_ids)->value("SUM(`order_amount`) as `total_money`"); // /*查询已退还的总额*/ // $list_order_id = get_arr_column($list, 'order_id'); // $where_new = [ // 'service_type' => 2, // 'status' => ['IN', [2, 4, 5, 7]], // 'order_id' => ['IN', $list_order_id] // ]; // $refund_balance = Db::name('shop_order_service')->where($where_new)->value("SUM(`refund_balance`) as `refund_balance`"); // /* END */ // // 计算单页总额 - 已退还的总额 // if (!empty($refund_balance)) $total_money = $total_money - $refund_balance; // $this->assign('total_money', $total_money); // 分页显示输出 $pageStr = $pageObj->show(); // 获取订单方式名称 $pay_method_arr = Config::get('global.pay_method_arr'); // 获取订单状态 $admin_order_status_arr = Config::get('global.admin_order_status_arr'); // 数据加载 $this->assign('list', $list); $this->assign('page', $pageStr); $this->assign('pager', $pageObj); $this->assign('LogData', $LogData); $this->assign('pay_method_arr', $pay_method_arr); $this->assign('admin_order_status_arr', $admin_order_status_arr); // 是否开启文章付费 $channelRow = Db::name('channeltype')->where('nid', 'in',['article','download'])->getAllWithIndex('nid'); foreach ($channelRow as &$val){ if (!empty($val['data'])) $val['data'] = json_decode($val['data'], true); } $this->assign('channelRow', $channelRow); // 是否开启货到付款 $shopOpenOffline = 1; if (0 === intval($this->UsersConfigData['shop_open_offline']) || !isset($this->UsersConfigData['shop_open_offline'])) { $shopOpenOffline = 0; } $this->assign('shopOpenOffline', $shopOpenOffline); // 开启的商城商品类型 $shopType = $this->UsersConfigData['shop_type']; $this->assign('shopType', $shopType); // 是否开启微信、支付宝支付 $where = [ 'status' => 1, 'pay_mark' => ['IN', ['wechat', 'alipay']] ]; $payApiConfig = Db::name('pay_api_config')->where($where)->select(); $openWeChat = $openAliPay = 1; foreach ($payApiConfig as $key => $value) { $payInfo = unserialize($value['pay_info']); if (!empty($payInfo) && isset($payInfo['is_open_wechat']) && 0 === intval($payInfo['is_open_wechat'])) { $openWeChat = 0; } if (!empty($payInfo) && isset($payInfo['is_open_alipay']) && 0 === intval($payInfo['is_open_alipay'])) { $openAliPay = 0; } } $this->assign('openWeChat', $openWeChat); $this->assign('openAliPay', $openAliPay); // 是否安装 可视化微信小程序(商城版),未安装开启则不显示小程序支付 $where = [ 'status' => 1, 'code' => 'DiyminiproMall' ]; $openMall = Db::name('weapp')->where($where)->count(); $this->assign('openMall', $openMall); // 如果安装手机端后台管理插件并且在手机端访问时执行 if (is_dir('./weapp/Mbackend/') && !empty($isMobile)) { $mbPage = input('param.p/d', 1); $nullShow = intval($pageObj->totalPages) === intval($mbPage) ? 1 : 0; $this->assign('nullShow', $nullShow); if ($mbPage >= 2) { return $this->display('shop/order_list'); } else { return $this->display('shop/index'); } } else { return $this->fetch(); } } /** * 订单详情 */ public function order_details() { $order_id = input('param.order_id/d'); if (!empty($order_id)) { // 查询订单信息 $this->GetOrderData($order_id); // 查询订单操作记录 $Action = $this->shop_order_log_db->where('order_id',$order_id)->order('action_id desc')->select(); // 操作记录数据处理 foreach ($Action as $key => $value) { $value['action_note'] = str_replace('!', '', $value['action_note']); $value['action_note'] = str_replace('!', '', $value['action_note']); // 会员操作 if (!empty($value['users_id'])) { $Action[$key]['action_note'] = '[买家] ' . $value['action_note']; $user = $this->users_db->field('username, nickname')->where('users_id', $value['users_id'])->find(); $Action[$key]['action_users'] = !empty($user['nickname']) ? $user['nickname'] : $user['username']; } // 管理员操作 else if (!empty($value['action_user'])) { $Action[$key]['action_note'] = '[商家] ' . $value['action_note']; $user_name = Db::name('admin')->where('admin_id', $value['action_user'])->getField('user_name'); $Action[$key]['action_users'] = !empty($user_name) ? $user_name : ''; } // 系统操作 else { $Action[$key]['action_note'] = '[系统] ' . $value['action_note']; $Action[$key]['action_users'] = '自动操作'; } $Action[$key]['action_desc'] = str_replace("!", "", $value['action_desc']); // 操作时,订单发货状态 $Action[$key]['express_status'] = 1 == $value['express_status'] ? '已发货' : '未发货'; // 操作时,订单付款状态 $Action[$key]['pay_status'] = 1 == $value['pay_status'] ? '已支付' : '未支付'; } $this->assign('Action', $Action); // 如果安装手机端后台管理插件并且在手机端访问时执行 $isMobile = input('param.isMobile/d', 0); if (is_dir('./weapp/Mbackend/') && !empty($isMobile)) { return $this->display('shop/order_details'); } else { return $this->fetch('order_details'); } }else{ $this->error('非法访问!'); } } // 订单备注 public function order_remarks() { if (IS_AJAX_POST) { $post = input('post.'); if (!empty($post['order_id']) && !empty($post['order_remarks'])) { $admin_id = session('admin_info.admin_id'); $admin_info = Db::name('admin')->where(['admin_id'=>$admin_id])->find(); // 执行条件 $where = [ 'order_id' => intval($post['order_id']) ]; // 查询订单备注信息 $adminNote = Db::name('shop_order')->where($where)->getField('admin_note'); if (empty($adminNote)) { $adminNote = [ 'times' => date('Y-m-d H:i:s'), 'admin_id' => $admin_info['admin_id'], 'admin_name' => $admin_info['user_name'], 'remarks' => strval($post['order_remarks']) ]; $update = [ 'admin_note' => serialize([$adminNote]), 'update_time' => getTime() ]; } else { // 解析原先的备注信息 $adminNote = unserialize($adminNote); // 新的备注信息 $adminNoteNew = [ 'times' => date('Y-m-d H:i:s'), 'admin_id' => $admin_info['admin_id'], 'admin_name' => $admin_info['user_name'], 'remarks' => strval($post['order_remarks']) ]; // 合并两个备注信息 $adminNote = array_merge($adminNote, [$adminNoteNew]); $update = [ 'admin_note' => serialize($adminNote), 'update_time' => getTime() ]; } if (!empty($update)) $updateID = Db::name('shop_order')->where($where)->update($update); if (!empty($updateID)) $this->success('备注成功'); } $this->error('操作失败,刷新重试!'); } $order_id = input('param.order_id/d', 0); $this->assign('order_id', $order_id); $where = [ 'order_id' => intval($order_id) ]; $remarksList = Db::name('shop_order')->where($where)->getField('admin_note'); $remarksList = !empty($remarksList) ? unserialize($remarksList) : []; krsort($remarksList); $this->assign('remarksList', $remarksList); return $this->fetch(); } /** * 订单发货 */ public function order_send() { $order_id = input('param.order_id'); if ($order_id) { // 查询订单信息 $this->GetOrderData($order_id); $where = [ 'is_choose' => 1, ]; $express = $this->shop_express_db->where($where)->order('sort_order asc, express_id asc')->select(); $this->assign('express', $express); // 如果安装手机端后台管理插件并且在手机端访问时执行 $isMobile = input('param.isMobile/d', 0); if (is_dir('./weapp/Mbackend/') && !empty($isMobile)) { return $this->display('shop/order_send'); } else { return $this->fetch('order_send'); } } } /** * 订单发货操作 */ public function order_send_operating() { if (IS_POST) { $post = input('post.'); // 参数强制转类型 $post['order_id'] = intval($post['order_id']); $post['users_id'] = intval($post['users_id']); $post['prom_type'] = intval($post['prom_type']); $post['express_id'] = intval($post['express_id']); // 需要物流时必须选择快递 if (isset($post['prom_type']) && 0 === $post['prom_type']) { if (empty($post['express_id']) || empty($post['express_name']) || empty($post['express_code'])) { $this->error('请选择快递公司'); } } // 条件数组 $Where = [ 'order_id' => $post['order_id'], 'users_id' => $post['users_id'], 'lang' => $this->admin_lang, ]; // 更新数组 $UpdateData = [ 'order_status' => 2, 'express_order' => $post['express_order'], 'express_name' => $post['express_name'], 'express_code' => $post['express_code'], 'express_time' => getTime(), 'consignee' => $post['consignee'], 'update_time' => getTime(), 'virtual_delivery' => $post['virtual_delivery'], ]; // 订单操作记录逻辑 $LogWhere = [ 'order_id' => $post['order_id'], 'express_status' => 1, ]; $LogData = $this->shop_order_log_db->where($LogWhere)->count(); if (!empty($LogData)) { // 数据存在则表示为修改发货内容 $OrderData = $this->shop_order_db->where($Where)->field('prom_type')->find(); $Desc = '修改发货内容!'; if (1 == $post['prom_type']) { // 提交的数据为虚拟订单 if ($OrderData['prom_type'] != $post['prom_type']) { // 此处判断后,提交的订单类型和数据库中的订单类型不相同,表示普通订单修改为虚拟订单 $Note = '管理员将普通订单修改为虚拟订单!'; if (!empty($post['virtual_delivery'])) { // 若存在数据则拼装 $Note .= '给买家回复:'.$post['virtual_delivery']; } } else { // 继续保持为虚拟订单修改 $Note = '虚拟订单,无需物流。'; if (!empty($post['virtual_delivery'])) { // 若存在数据则拼装 $Note .= '给买家回复:'.$post['virtual_delivery']; } } } else { // 提交的数据为普通订单 if ($OrderData['prom_type'] != $post['prom_type']) { // 这一段暂时无用,因为发货时,暂时无法选择将虚拟订单修改为普通订单 $Note = '管理员将虚拟订单修改为普通订单!'; if (!empty($post['virtual_delivery'])) { // 若存在数据则拼装 $Note .= '给买家回复:'.$post['virtual_delivery']; } } else { // 继续保持为普通订单修改 $Note = '使用'.$post['express_name'].'发货成功!'; } } $UpdateData['prom_type'] = $post['prom_type']; } else { // 数据不存在则表示为初次发货,拼装发货内容 $Desc = '发货成功!'; $Note = '使用'.$post['express_name'].'发货成功!'; if ('1' == $post['prom_type']) { // 若为虚拟订单,无需发货物流。 $UpdateData['prom_type'] = $post['prom_type']; $Note = '虚拟订单,无需物流。'; if (!empty($post['virtual_delivery'])) { // 若存在数据则拼装 $Note .= '给买家回复:'.$post['virtual_delivery']; } } } // 配送单号 if (empty($post['prom_type']) && empty($post['express_order'])) $this->error('配送单号不能为空'); // 更新订单主表信息 $IsOrder = $this->shop_order_db->where($Where)->update($UpdateData); if (!empty($IsOrder)) { // 更新订单明细表信息 $Data['update_time'] = getTime(); $this->shop_order_details_db->where('order_id', $post['order_id'])->update($Data); // 添加订单操作记录 AddOrderAction($post['order_id'], 0, session('admin_id'), 2, 1, 1, $Desc, $Note); // 查询会员信息 $Field = 'username, nickname, email, mobile'; $Users = $this->users_db->field($Field)->where('users_id', $post['users_id'])->find(); // 邮箱发送 $SmtpConfig = tpCache('smtp'); $Result['email'] = GetEamilSendData($SmtpConfig, $Users, $post, 2); // 手机发送 $SmsConfig = tpCache('sms'); $Result['mobile'] = GetMobileSendData($SmsConfig, $Users, $post, 2); // 发送站内信给会员 $NickName = !empty($Users['nickname']) ? $Users['nickname'] : $Users['username']; SendNotifyMessage($UpdateData, 6, 0, $post['users_id'], $NickName); $this->success('发货成功', null, $Result); } else { $this->error('发货失败'); } } } // 订单更新收货地址 public function order_address() { if (IS_AJAX_POST) { $post = input('post.'); // 判断数据 if (empty($post['consignee'])) $this->error('请填写收货人姓名!'); if (empty($post['mobile'])) $this->error('请填写收货人手机!'); if (empty($post['province'])) $this->error('请选择省份!'); if (empty($post['city'])) $this->error('请选择城市!'); if (empty($post['district'])) $this->error('请选择县区!'); if (empty($post['address'])) $this->error('请填写详细地址!'); // 更新地址 $where = [ 'order_id' => intval($post['order_id']), ]; $update = [ 'consignee' => strval($post['consignee']), 'mobile' => strval($post['mobile']), 'province' => intval($post['province']), 'city' => intval($post['city']), 'district' => intval($post['district']), 'address' => strval($post['address']), 'update_time' => getTime() ]; $updateID = Db::name('shop_order')->where($where)->update($update); if (!empty($updateID)) { // 添加订单操作记录 AddOrderAction($post['order_id'], 0, session('admin_id'), 1, 0, 1, '修改地址!', '修改买家订单收货信息!'); $this->success('更新成功'); } else { $this->error('操作失败,刷新重试!'); } } $order_id = input('param.order_id/d', 0); $this->assign('order_id', $order_id); $address = Db::name('shop_order')->field('consignee, mobile, province, city, district, address')->where($where)->find($order_id); $this->assign('address', $address); $provinceList = get_province_list(); $this->assign('provinceList', $provinceList); $cityList = Db::name('region')->where('parent_id', $address['province'])->select(); $this->assign('cityList', $cityList); $areaList = Db::name('region')->where('parent_id', $address['city'])->select(); $this->assign('areaList', $areaList); return $this->fetch(); } // 联动地址获取 public function ajaxGetSpecifyRegion() { $parent_id = input('param.parent_id/d'); $region = Db::name('region')->where("parent_id", $parent_id)->select(); $html = ''; if (!empty($region)) { // 拼装下拉选项 foreach ($region as $value) { $html .= ""; } } $this->success('查询成功!', null, $html); } /** * 查询快递名字及Code */ public function order_express() { // 查询条件 $where = []; $keywords = input('keywords/s'); if (!empty($keywords)) $where['express_name'] = ['LIKE', "%{$keywords}%"]; // 分页查询 $count = $this->shop_express_db->where($where)->count('express_id'); $pageObj = new Page($count, 10); // 查询数据 $ExpressData = $this->shop_express_db->where($where) ->order('sort_order asc,express_id asc') ->limit($pageObj->firstRow.','.$pageObj->listRows) ->select(); // 计算选中个数 $where['is_choose'] = 1; $selectNum = $this->shop_express_db->where($where)->count(); $this->assign('selectNum', $selectNum); // 加载模板 $pageStr = $pageObj->show(); $select = input('param.select/d', 0); $this->assign('select', $select); $this->assign('pageStr', $pageStr); $this->assign('pageObj', $pageObj); $this->assign('ExpressData', $ExpressData); return $this->fetch('order_express'); } // 全部选中/全部取消 public function express_is_choose() { if (IS_AJAX_POST) { $is_choose = input('post.is_choose/d', 0); if (isset($is_choose) && $is_choose >= 0) { $where = [ 'is_choose' => !empty($is_choose) ? 0 : 1 ]; $update = [ 'is_choose' => $is_choose, 'update_time' => getTime(), ]; $ResultID = $this->shop_express_db->where($where)->update($update); if (!empty($ResultID)) $this->success('操作成功'); } } $this->error('操作失败'); } /** * 管理员后台标记订单状态 */ public function order_mark_status() { if (IS_POST) { $post = input('post.'); // 条件数组 $Where = [ 'order_id' => $post['order_id'], 'users_id' => $post['users_id'], 'lang' => $this->admin_lang, ]; if ('ddsc' == $post['status_name']) { // 订单删除 $IsDelete = $this->shop_order_db->where($Where)->delete(); if (!empty($IsDelete)) { $Where = [ 'order_id' => $post['order_id'], ]; // 同步删除订单下的操作记录 $this->shop_order_log_db->where($Where)->delete(); // 同步删除订单下的产品 $this->shop_order_details_db->where($Where)->delete(); $this->success('删除成功!', url('Shop/index')); }else{ $this->error('数据错误!'); } }else{ $OrderData = $this->shop_order_db->where($Where)->find(); // 更新数组 $UpdateData = [ 'update_time' => getTime(), ]; // 根据不同操作标记不同操作内容 if ('yfk' == $post['status_name']) { // 订单标记为付款,追加更新数组 $UpdateData['order_status'] = '1'; $UpdateData['pay_time'] = getTime(); // 管理员付款 $UpdateData['pay_name'] = 'admin_pay'; $UpdateData['wechat_pay_type'] = ''; /*用于添加订单操作记录*/ $order_status = '1'; // 订单状态 $express_status = '0'; // 发货状态 $pay_status = '1'; // 支付状态 $action_desc = '付款成功!'; // 操作明细 $action_note = '管理员确认订单付款!'; // 操作备注 /*结束*/ }else if ('ysh' == $post['status_name']) { // 如果后台【商城中心】-【商城配置】-【订单设置】-收货后可维权时间设置为0,则表示订单不允许申请维权 $OrderData['allow_service'] = !empty($this->UsersConfigData['order_right_protect_time']) ? 0 : 1; // 订单确认收货,追加更新数组 $UpdateData['order_status'] = '3'; $UpdateData['confirm_time'] = getTime(); /*用于添加订单操作记录*/ $order_status = '3'; // 订单状态 $express_status = '1'; // 发货状态 $pay_status = '1'; // 支付状态 $action_desc = '确认收货!'; // 操作明细 $action_note = '管理员确认订单已收货!'; // 操作备注 /*结束*/ }else if ('gbdd' == $post['status_name']) { // 订单关闭,追加更新数组 $UpdateData['order_status'] = '-1'; /*用于添加订单操作记录*/ $order_status = '-1'; // 订单状态 if ('0' == $OrderData['order_status'] || '1' == $OrderData['order_status']) { $express_status = '0'; // 发货状态 $pay_status = '0'; // 支付状态 }else{ $express_status = '1'; // 发货状态 $pay_status = '1'; // 支付状态 } $action_desc = '订单关闭!'; // 操作明细 $action_note = '管理员关闭订单!'; // 操作备注 /*结束*/ } // 更新订单主表 $IsOrder = $this->shop_order_db->where($Where)->update($UpdateData); if (!empty($IsOrder)) { // 更新订单明细表 $Data['update_time'] = getTime(); $this->shop_order_details_db->where('order_id',$post['order_id'])->update($Data); // 如果是关闭订单操作则执行还原产品库存 if ('gbdd' == $post['status_name']) { $UpWhere = $this->shop_order_details_db->where('order_id',$post['order_id'])->field('product_id as aid,num,data')->find(); // 读取规格值ID,拼装作为更新条件 $UpWhere['spec_value_id'] = unserialize($UpWhere['data'])['spec_value_id']; // 更新数据 $UpData['spec_stock'] = Db::raw('spec_stock+'.($UpWhere['num'])); $UpData['spec_sales_num'] = Db::raw('spec_sales_num-'.($UpWhere['num'])); // 清除多余num数据 unset($UpWhere['num']); // 清除多余data数据 unset($UpWhere['data']); // 更新库存及销量 Db::name('product_spec_value')->where($UpWhere)->update($UpData); } // 添加订单操作记录 AddOrderAction($post['order_id'], 0, session('admin_id'), $order_status, $express_status, $pay_status, $action_desc, $action_note); // 判断是否为虚拟商品 if ('yfk' == $post['status_name'] && $OrderData['prom_type'] == 1) { PayModel::afterVirtualProductPay($Where); } // 确认收货则执行 if ('ysh' == $post['status_name']) { // 如果安装了分销插件则执行 if (is_dir('./weapp/DealerPlugin/')) { // 开启分销插件则执行 $weappInfo = model('Weapp')->getWeappList('DealerPlugin'); if (!empty($weappInfo['status']) && 1 == $weappInfo['status']) { // 调用分销逻辑层方法 $dealerCommonLogic = new \weapp\DealerPlugin\logic\DealerCommonLogic; $dealerCommonLogic->dealerOrderSettlementExecute($post['order_id'], $post['users_id']); } } // 如果安装了秒杀插件则执行 if (is_dir('./weapp/Seckill/')) { $SeckillRow = model('Weapp')->getWeappList('Seckill'); //is_seckill_order 只有安装了秒杀插件 shop_order表才会有这个字段 if (!empty($SeckillRow) && 1 == intval($SeckillRow['status']) && !empty($order['is_seckill_order'])) { // 调用秒杀逻辑层方法 $weappSeckillLogic = new \weapp\Seckill\logic\SeckillLogic; $weappSeckillLogic->confirmOrderHandle($post['order_id'], $post['users_id']); } } } $this->success('操作成功!'); } } }else{ $this->error('非法访问!'); } } // 手动关闭订单并退款 public function order_manual_refund() { if (IS_AJAX_POST) { $post = input('post.'); $OrderID = intval($post['order_id']); $RefundNote = trim($post['refund_note']); if (!empty($OrderID)) { $update = [ 'order_id' => $OrderID, 'order_status' => '-1', 'manual_refund' => 1, 'refund_note' => $RefundNote, 'update_time' => getTime(), ]; $ResultID = $this->shop_order_db->update($update); if (!empty($ResultID)) { // 如果安装了秒杀插件则执行 if (is_dir('./weapp/Seckill/')) { $SeckillRow = model('Weapp')->getWeappList('Seckill'); //is_seckill_order 只有安装了秒杀插件 shop_order表才会有这个字段 if (!empty($SeckillRow) && 1 == intval($SeckillRow['status']) && !empty($order['is_seckill_order'])) { // 调用秒杀逻辑层方法 $users_id = $this->shop_order_db->where('order_id',$OrderID)->value('users_id'); $weappSeckillLogic = new \weapp\Seckill\logic\SeckillLogic; $weappSeckillLogic->cancelOrderHandle($OrderID, $users_id); } } // 添加订单操作记录 AddOrderAction($OrderID, 0, session('admin_id'), '-1', 0, 1, '关闭并退款', '管理员手动关闭订单并自行退款'); // 商品库存恢复 $where = [ 'order_id' => $OrderID, ]; $shopOrder = $this->shop_order_db->where($where)->select(); model('OrderPreHandle')->restoreGoodsStock($shopOrder); // 加添订单售后信息 $this->adminAddOrderService($OrderID, $RefundNote); // 返回结束 $this->success('操作完成'); } } } $this->error('非法访问!'); } // 加添订单售后信息 public function adminAddOrderService($orderID = 0, $refundNote = '') { $where = [ 'order_id' => $orderID, ]; // 查询订单信息 $order = Db::name('shop_order')->where($where)->find(); $city = get_city_name($order['city']); $district = get_area_name($order['district']); $province = get_province_name($order['province']); $order['address'] = $province . ' ' . $city . ' ' . $district . ' ' . $order['address']; // 查询订单商品信息 $details = $this->shop_order_details_db->where($where)->select(); if (!empty($details)) { $times = getTime(); foreach ($details as $key => $value) { // 商品规格信息 $value['data'] = !empty($value['data']) ? unserialize($value['data']) : []; $product_spec = !empty($value['data']['spec_value']) ? htmlspecialchars_decode(htmlspecialchars_decode($value['data']['spec_value'])) : ''; // 订单售后信息 $insert = [ 'service_type' => 2, 'users_id' => intval($order['users_id']), 'merchant_id' => intval($order['merchant_id']), 'order_id' => intval($order['order_id']), 'order_code' => strval($order['order_code']), 'details_id' => intval($value['details_id']), 'product_id' => intval($value['product_id']), 'product_name' => strval($value['product_name']), 'product_spec' => strval($product_spec), 'product_num' => intval($value['num']), 'product_img' => strval($value['litpic']), 'content' => '商家主动退款', 'address' => strval($order['address']), 'consignee' => $order['consignee'], 'mobile' => $order['mobile'], 'manual_refund'=> 1, 'manual_time' => $times, 'refund_note' => !empty($refundNote) ? $refundNote : '商家主动退款', 'refund_price' => unifyPriceHandle($value['product_price']), 'refund_code' => 'TK' . $times . rand(10, 99), 'status' => 7, 'add_time' => $times, 'update_time' => $times, ]; $resultID = Db::name('shop_order_service')->insertGetId($insert); if (!empty($resultID)) { // 更新订单明细表中对应商品为申请服务 $update = [ 'apply_service' => 1, 'update_time' => getTime() ]; $this->shop_order_details_db->where('details_id', $value['details_id'])->update($update); // 添加订单服务记录 OrderServiceLog($resultID, $order['order_id'], 0, session('admin_id'), '商家主动退款'); } } } } /* * 更新管理员备注 */ public function update_note() { if (IS_AJAX_POST) { $post = input('post.'); if (!empty($post['order_id'])) { $UpdateData = [ 'admin_note' => $post['admin_note'], 'update_time' => getTime(), ]; $return = $this->shop_order_db->where('order_id',$post['order_id'])->update($UpdateData); if (!empty($return)) { $this->success('保存成功!'); } }else{ $this->error('非法访问!'); } }else{ $this->error('非法访问!'); } } /* * 运费模板列表 */ public function shipping_template() { $Where = [ 'a.level' => 1, ]; $region_name = input('param.region_name'); if (!empty($region_name)) { $Where['a.name'] = array('LIKE', "%{$region_name}%"); } // 省份 $Template = Db::name('region')->field('a.id, a.name, b.template_money, b.template_id') ->alias('a') ->join('__SHOP_SHIPPING_TEMPLATE__ b', 'a.id = b.province_id', 'LEFT') ->where($Where) ->getAllWithIndex('id'); $this->assign('Template', $Template); // 统一配送 $info = $this->shipping_template_db->where('province_id','100000')->find(); $this->assign('info', $info); return $this->fetch('shipping_template'); } // 订单批量删除 public function order_del() { $order_id = input('del_id/a'); $order_id = eyIntval($order_id); if (IS_AJAX_POST && !empty($order_id)) { // 条件数组 $Where = [ 'order_id' => ['IN', $order_id], 'lang' => $this->admin_lang, ]; // 查询数据,存在adminlog日志 $result = $this->shop_order_db->field('order_code')->where($Where)->select(); $order_code_list = get_arr_column($result, 'order_code'); // 删除订单列表数据 $return = $this->shop_order_db->where($Where)->delete(); if ($return) { // 同步删除订单下的产品 $this->shop_order_details_db->where($Where)->delete(); // 同步删除订单下的操作记录 $this->shop_order_log_db->where($Where)->delete(); adminLog('删除订单:'.implode(',', $order_code_list)); $this->success('删除成功'); }else{ $this->error('删除失败'); } } $this->error('参数有误'); } /* * 查询会员订单数据并加载,无返回 */ function GetOrderData($order_id) { // 手机端后台管理插件特定使用参数 $isMobile = input('param.isMobile/d', 0); // 获取订单数据 $OrderData = $this->shop_order_db->find($order_id); $OrderData['add_time'] = date('Y-m-d H:i:s', $OrderData['add_time']); $OrderData['pay_time'] = !empty($OrderData['pay_time']) ? date('Y-m-d H:i:s', $OrderData['pay_time']) : 0; $OrderData['update_time'] = !empty($OrderData['update_time']) ? date('Y-m-d H:i:s', $OrderData['update_time']) : 0; $OrderData['express_time'] = !empty($OrderData['express_time']) ? date('Y-m-d H:i:s', $OrderData['express_time']) : 0; $OrderData['confirm_time'] = !empty($OrderData['confirm_time']) ? date('Y-m-d H:i:s', $OrderData['confirm_time']) : 0; $OrderData['order_terminal_name'] = '电脑端'; if (!empty($OrderData['order_terminal']) && 2 === intval($OrderData['order_terminal'])) { $OrderData['order_terminal_name'] = '手机端'; } else if (!empty($OrderData['order_terminal']) && 3 === intval($OrderData['order_terminal'])) { $OrderData['order_terminal_name'] = '微信小程序'; } // 获取会员数据 $UsersData = $this->users_db->find($OrderData['users_id']); !empty($UsersData) && $UsersData['head_pic'] = get_head_pic($UsersData['head_pic']); // 当前单条订单信息的会员ID,存入session,用于添加订单操作表 session('OrderUsersId', $OrderData['users_id']); // 获取订单详细表数据 $DetailsData = $this->shop_order_details_db->where('order_id',$OrderData['order_id'])->select(); // 获取订单状态,后台专用 $admin_order_status_arr = Config::get('global.admin_order_status_arr'); // 获取订单方式名称 $pay_method_arr = Config::get('global.pay_method_arr'); // 处理订单主表的地址数据处理,显示中文名字 $OrderData['country'] = '中国'; $OrderData['province'] = get_province_name($OrderData['province']); $OrderData['city'] = get_city_name($OrderData['city']); $OrderData['district'] = get_area_name($OrderData['district']); $array_new = get_archives_data($DetailsData,'product_id'); $OrderData['prom_type_virtual'] = false; // 处理订单详细表数据处理 $total_num = 0; $OrderData['totalAmount'] = 0; foreach ($DetailsData as $key => $value) { $total_num += intval($value['num']); if ($value['prom_type'] == 1) { $OrderData['prom_type_virtual'] = true; } // 产品属性处理 $value['data'] = !empty($value['data']) ? unserialize($value['data']) : []; $DetailsData[$key]['pointsGoodsBuyField'] = !empty($value['data']['pointsGoodsBuyField']) ? json_decode($value['data']['pointsGoodsBuyField'], true) : []; $value['data'] = htmlspecialchars_decode(htmlspecialchars_decode($value['data']['spec_value'])); // 组合数据 $value['data'] = explode('
', $value['data']); $valueData = ''; foreach ($value['data'] as $key_1 => $value_1) { $delimiter = '';//!empty($isMobile) ? ';' : ''; if (!empty($value_1)) $valueData .= '' . trim(strrchr($value_1, ':'),':') . '' . $delimiter; } $DetailsData[$key]['product_spec'] = $value['data'] = $valueData; // // 规制值 // $spec_value = !empty($ValueData['spec_value']) ? htmlspecialchars_decode($ValueData['spec_value']) : ''; // $spec_value = htmlspecialchars_decode($spec_value); // // 旧参数 // $attr_value = !empty($ValueData['attr_value']) ? htmlspecialchars_decode($ValueData['attr_value']) : ''; // $attr_value = htmlspecialchars_decode($attr_value); // // 新参数 // $attr_value_new = !empty($ValueData['attr_value_new']) ? htmlspecialchars_decode($ValueData['attr_value_new']) : ''; // $attr_value_new = htmlspecialchars_decode($attr_value_new); // // 优先显示新参数 // $attr_value = !empty($attr_value_new) ? $attr_value_new : $attr_value; // $DetailsData[$key]['data'] = $spec_value . $attr_value; // 产品内页地址 $DetailsData[$key]['arcurl'] = get_arcurl($array_new[$value['product_id']]); // 小计 $DetailsData[$key]['subtotal'] = unifyPriceHandle($value['product_price'] * $value['num']); // 合计金额 $OrderData['totalAmount'] += $DetailsData[$key]['subtotal']; $OrderData['totalAmount'] = unifyPriceHandle($OrderData['totalAmount']); // 支持子目录 $DetailsData[$key]['litpic'] = handle_subdir_pic($DetailsData[$key]['litpic']); } // 订单类型 if (empty($OrderData['prom_type'])) { $OrderData['prom_type_name'] = '普通订单'; }else{ $OrderData['prom_type_name'] = '虚拟订单'; } if (!empty($OrderData['is_seckill_order'])) $OrderData['prom_type_name'] = '秒杀订单'; if (!empty($OrderData['points_shop_order'])) $OrderData['prom_type_name'] = '积分订单'; // 移动端查询物流链接 $MobileExpressUrl = "//m.kuaidi100.com/index_all.html?type=".$OrderData['express_code']."&postid=".$OrderData['express_order']; $this->assign('MobileExpressUrl', $MobileExpressUrl); // PC端查询物流链接 $pcExpressUrl = "https://www.kuaidi100.com/chaxun?com=".$OrderData['express_code']."&nu=".$OrderData['express_order']; $this->assign('pcExpressUrl', $pcExpressUrl); // 管理员备注 $adminNoteCount = !empty($OrderData['admin_note']) ? count(unserialize($OrderData['admin_note'])) : 0; $this->assign('adminNoteCount', $adminNoteCount); // 存在积分商城订单则执行 if (!empty($OrderData['points_shop_order'])) { $weappInfo = model('ShopPublicHandle')->getWeappPointsShop(); if (!empty($weappInfo)) { $list = !empty($OrderData) ? $OrderData : []; $list['Details'] = !empty($DetailsData) ? $DetailsData : []; $pointsShopLogic = new \weapp\PointsShop\logic\PointsShopLogic(); $pointsShopLogic->pointsShopOrderDataHandle([$list], $OrderData, $DetailsData); } } // 加载数据 $this->assign('OrderData', $OrderData); $this->assign('DetailsData', $DetailsData); $this->assign('UsersData', $UsersData); $this->assign('admin_order_status_arr', $admin_order_status_arr); $this->assign('pay_method_arr', $pay_method_arr); $this->assign('total_num', $total_num); // 核销订单记录信息 $weappVerifyLog = []; if (!empty($this->weappInfo)) { $where = [ 'users_id' => intval($OrderData['users_id']), 'order_id' => intval($OrderData['order_id']), ]; $weappVerifyLog = Db::name('weapp_verify')->where($where)->find(); $weappVerifyLog['verify_time'] = !empty($weappVerifyLog['verify_time']) ? date('Y-m-d H:i:s', $weappVerifyLog['verify_time']) : 0; } $this->assign('weappVerifyLog', $weappVerifyLog); } // ------------------------------------------------------------------------------------------------------ // 以下所有代码都是产品规格处理逻辑 2019-07-08 陈风任 // ------------------------------------------------------------------------------------------------------ // 规格列表管理,包含新增、更新 public function spec_index() { if (IS_AJAX_POST) { // 新增、更新 $post = input('post.'); // 当前时间戳 $time = getTime(); /*新增数据处理*/ $post_new = []; foreach ($post['preset_new'] as $key => $value) { // 规格名称不允许为空 $preset_name = $post['preset_name_'.$value][0]; if (empty($preset_name)) continue; // 是否同步到已发布的商品规格 $spec_sync = !empty($post['spec_sync_'.$value]) ? 1 : 0; // 排序号 $sort_order = $post['sort_order_'.$value]; // 拼装三维数组 foreach ($post['preset_value_'.$value] as $kk => $vv) { if (empty($vv)) continue; $post_new[$key][$kk]['preset_mark_id'] = $value; // 标记ID,一整条规格信息中的唯一标识 $post_new[$key][$kk]['preset_name'] = $preset_name; $post_new[$key][$kk]['preset_value'] = $vv; $post_new[$key][$kk]['spec_sync'] = $spec_sync; $post_new[$key][$kk]['sort_order'] = $sort_order; $post_new[$key][$kk]['lang'] = $this->admin_lang; $post_new[$key][$kk]['add_time'] = $time; $post_new[$key][$kk]['update_time'] = $time; } } // 三维数组降为二维数组 $data_new = $this->ProductSpecLogic->ArrayDowngrade($post_new); /* END */ /*原有数据处理*/ $post_old = []; $spec_sync_where = $spec_sync_mark_data = $spec_sync_value_data = []; foreach ($post['preset_old'] as $key => $value) { // 规格名称不允许为空 $preset_name = $post['preset_name_old_'.$value][0]; if (empty($preset_name)) continue; // 是否同步到已发布的商品规格 $spec_sync = !empty($post['spec_sync_'.$value]) ? 1 : 0; // 排序号 $sort_order = $post['sort_order_'.$value]; // 需要同步的规格名称 if (!empty($spec_sync)) { array_push($spec_sync_where, $value); $spec_sync_mark_data[$value]['spec_name'] = $preset_name; } // 拼装三维数组 foreach ($post['preset_value_old_'.$value] as $kk => $vv) { if (empty($vv)) continue; $preset_id = $post['preset_id_old_'.$value][$kk]; // 如果ID是否为空 if (!empty($preset_id)) { // 有ID则为更新 $post_old[$key][$kk]['preset_id'] = $preset_id; // 需要同步的规格值 if (!empty($spec_sync)) $spec_sync_value_data[$preset_id]['spec_value'] = $vv; } else { // 无ID则为新增 $post_old[$key][$kk]['lang'] = $this->admin_lang; $post_old[$key][$kk]['add_time'] = $time; $post_old[$key][$kk]['preset_mark_id'] = $value; // 标记ID,一整条规格信息中的唯一标识 } $post_old[$key][$kk]['preset_name'] = $preset_name; $post_old[$key][$kk]['preset_value'] = $vv; $post_old[$key][$kk]['spec_sync'] = $spec_sync; $post_old[$key][$kk]['sort_order'] = $sort_order; $post_old[$key][$kk]['update_time'] = $time; } } // 三维数组降为二维数组 $data_old = $this->ProductSpecLogic->ArrayDowngrade($post_old); /* END */ // 合并数组并且更新数据 $UpData = array_merge($data_old, $data_new); model('ProductSpecPreset')->saveAll($UpData); /*执行同步数据*/ if (!empty($spec_sync_where)) { $w_1['spec_mark_id'] = ['IN', $spec_sync_where]; $f_1 = 'spec_id, spec_mark_id, spec_name, spec_value_id, spec_value'; $SpecMarkData = Db::name('product_spec_data')->where($w_1)->field($f_1)->order('spec_mark_id asc')->select(); foreach ($SpecMarkData as $key => $value) { $SpecMarkData[$key]['spec_name'] = $spec_sync_mark_data[$value['spec_mark_id']]['spec_name']; $SpecMarkData[$key]['spec_value'] = $spec_sync_value_data[$value['spec_value_id']]['spec_value']; } model('ProductSpecData')->saveAll($SpecMarkData); } /* END */ $this->success('更新成功!'); } // 查询规格数据 $PresetData = $this->product_spec_preset_db->where('lang',$this->admin_lang)->order('sort_order asc, preset_id asc')->select(); // 数组转化 $ResultData = $this->ProductSpecLogic->GetPresetData($PresetData); // 获取预设规格中最大的标记MarkId $PresetMarkId = model('ProductSpecPreset')->GetMaxPresetMarkId(); // 加载参数 $this->assign('info', $ResultData); $this->assign('PresetMarkId', $PresetMarkId); return $this->fetch('spec_index'); } // 规格列表管理,包含新增、更新 public function spec_template() { if (IS_AJAX_POST) { // 新增、更新 $post = input('post.'); // 当前时间戳 $time = getTime(); /*新增数据处理*/ $post_new = []; foreach ($post['preset_new'] as $key => $value) { // 规格名称不允许为空 $preset_name = $post['preset_name_'.$value][0]; if (empty($preset_name)) continue; // 是否同步到已发布的商品规格 $spec_sync = !empty($post['spec_sync_'.$value]) ? 1 : 0; // 排序号 $sort_order = $post['sort_order_'.$value]; // 拼装三维数组 foreach ($post['preset_value_'.$value] as $kk => $vv) { if (empty($vv)) continue; $post_new[$key][$kk]['preset_mark_id'] = $value; // 标记ID,一整条规格信息中的唯一标识 $post_new[$key][$kk]['preset_name'] = $preset_name; $post_new[$key][$kk]['preset_value'] = $vv; $post_new[$key][$kk]['spec_sync'] = $spec_sync; $post_new[$key][$kk]['sort_order'] = $sort_order; $post_new[$key][$kk]['lang'] = $this->admin_lang; $post_new[$key][$kk]['add_time'] = $time; $post_new[$key][$kk]['update_time'] = $time; } } // 三维数组降为二维数组 $data_new = $this->ProductSpecLogic->ArrayDowngrade($post_new); /* END */ /*原有数据处理*/ $post_old = []; $spec_sync_where = $spec_sync_mark_data = $spec_sync_value_data = []; foreach ($post['preset_old'] as $key => $value) { // 规格名称不允许为空 $preset_name = $post['preset_name_old_'.$value][0]; if (empty($preset_name)) continue; // 是否同步到已发布的商品规格 $spec_sync = !empty($post['spec_sync_'.$value]) ? 1 : 0; // 排序号 $sort_order = $post['sort_order_'.$value]; // 需要同步的规格名称 if (!empty($spec_sync)) { array_push($spec_sync_where, $value); $spec_sync_mark_data[$value]['spec_name'] = $preset_name; } // 拼装三维数组 foreach ($post['preset_value_old_'.$value] as $kk => $vv) { if (empty($vv)) continue; $preset_id = $post['preset_id_old_'.$value][$kk]; // 如果ID是否为空 if (!empty($preset_id)) { // 有ID则为更新 $post_old[$key][$kk]['preset_id'] = $preset_id; // 需要同步的规格值 if (!empty($spec_sync)) $spec_sync_value_data[$preset_id]['spec_value'] = $vv; } else { // 无ID则为新增 $post_old[$key][$kk]['lang'] = $this->admin_lang; $post_old[$key][$kk]['add_time'] = $time; $post_old[$key][$kk]['preset_mark_id'] = $value; // 标记ID,一整条规格信息中的唯一标识 } $post_old[$key][$kk]['preset_name'] = $preset_name; $post_old[$key][$kk]['preset_value'] = $vv; $post_old[$key][$kk]['spec_sync'] = $spec_sync; $post_old[$key][$kk]['sort_order'] = $sort_order; $post_old[$key][$kk]['update_time'] = $time; } } // 三维数组降为二维数组 $data_old = $this->ProductSpecLogic->ArrayDowngrade($post_old); /* END */ // 合并数组并且更新数据 $UpData = array_merge($data_old, $data_new); model('ProductSpecPreset')->saveAll($UpData); /*执行同步数据*/ if (!empty($spec_sync_where)) { $w_1['spec_mark_id'] = ['IN', $spec_sync_where]; $f_1 = 'spec_id, spec_mark_id, spec_name, spec_value_id, spec_value'; $SpecMarkData = Db::name('product_spec_data')->where($w_1)->field($f_1)->order('spec_mark_id asc')->select(); foreach ($SpecMarkData as $key => $value) { $SpecMarkData[$key]['spec_name'] = $spec_sync_mark_data[$value['spec_mark_id']]['spec_name']; $SpecMarkData[$key]['spec_value'] = $spec_sync_value_data[$value['spec_value_id']]['spec_value']; } model('ProductSpecData')->saveAll($SpecMarkData); } /* END */ $this->success('更新成功!'); } // 查询规格数据 $PresetData = $this->product_spec_preset_db->where('lang',$this->admin_lang)->order('sort_order asc, preset_id asc')->select(); // 数组转化 $ResultData = $this->ProductSpecLogic->GetPresetData($PresetData); // 获取预设规格中最大的标记MarkId $PresetMarkId = model('ProductSpecPreset')->GetMaxPresetMarkId(); // 加载参数 $this->assign('info', $ResultData); $this->assign('PresetMarkId', $PresetMarkId); return $this->fetch('spec_template'); } // 删除规格名称\规格值 public function spec_delete() { if (IS_AJAX_POST) { $post = input('post.'); $where = $this->ProductSpecLogic->GetDeleteSpecWhere($post); if (!empty($where)) { $result = $this->product_spec_preset_db->where($where)->delete(); if (!empty($result)) { $this->success('删除成功!'); } } $this->error('删除失败!'); } } // 选中规格名称,追加html到页面展示 public function spec_select() { if (IS_AJAX_POST) { $post = input('post.'); // 当选中的规格大类大于等于三个则不允许再添加 if (3 == count(session('spec_arr'))) $this->error('最多只能添加三种规格大类'); // 获取预设规格标记ID数组 $PresetMarkIdArray = $this->ProductSpecLogic->GetPresetMarkIdArray($post); // 拼装预设名称下拉选项 if (!empty($PresetMarkIdArray)) { // 添加选中的规格数据 model('ProductSpecData')->PresetSpecAddData($post); // 拼装更新预设名称下拉选项 $Result = $this->ProductSpecLogic->GetPresetNameOption($PresetMarkIdArray, $post); } else { $this->error('最多只能添加三种规格大类!'); } if (isset($post['aid']) && !empty($post['aid'])) { $ResultData = $this->ProductSpecLogic->GetPresetValueOption('', $post['spec_mark_id'], $post['aid'], 2); $PresetName = $ResultData['PresetName']; $PresetValueOption = $ResultData['PresetValueOption']; } else { // 拼装预设值下拉选项 $PresetValue = $this->product_spec_preset_db->where('preset_mark_id','IN',$post['preset_mark_id'])->field('preset_id,preset_name,preset_value')->select(); $PresetName = $PresetValue[0]['preset_name']; $PresetValueOption = $this->ProductSpecLogic->GetPresetValueOption($PresetValue); } if (isset($post['aid']) && !empty($post['aid'])) { // 结果返回 $ReturnHtml = [ 'preset_name' => $PresetName, 'preset_name_option' => $Result['Option'], 'spec_mark_id_arr' => $Result['MarkId'], 'preset_value_option' => $PresetValueOption, ]; } else { // 结果返回 $ReturnHtml = [ 'preset_name' => $PresetName, 'preset_name_option' => $Result['Option'], 'preset_mark_id_arr' => $Result['MarkId'], 'preset_value_option' => $PresetValueOption, ]; } $this->success('加载成功!', null, $ReturnHtml); } } // 当规格库更新后,调用此方式及时更新选择预设规格的下拉框信息及规格框信息 public function update_spec_info() { if (IS_AJAX_POST) { $post = input('post.'); // 拼装更新预设名称下拉选项 $ResultData = $this->ProductSpecLogic->GetPresetNameOption($post['preset_mark_id_arr']); // 获取规格拼装后的html表格 $ResultArray = $this->ProductSpecLogic->GetPresetSpecAssembly($post); // 结果返回 if (isset($post['aid']) && !empty($post['aid'])) { $ReturnHtml = [ 'HtmlTable' => $ResultArray['HtmlTable'], 'spec_name_option' => $ResultData['Option'], 'spec_mark_id_arr' => $ResultArray['PresetMarkIdArray'], ]; }else{ // 拼装更新预设名称下拉选项 $where = [ 'preset_mark_id' => ['IN', $post['preset_mark_id_arr']], ]; $PresetData = $this->product_spec_preset_db->where($where)->order('preset_id asc')->select(); $sessionData = session('spec_arr'); foreach ($PresetData as $key => $value) { if (!empty($sessionData[$value['preset_mark_id']])) { if (in_array($value['preset_id'], $sessionData[$value['preset_mark_id']])) { unset($PresetData[$key]); } } } $PresetData = group_same_key($PresetData, 'preset_mark_id'); $result = []; foreach ($PresetData as $key => $value) { $result[$key] .= ""; if(!empty($value)){ foreach($value as $sub_value){ $result[$key] .= ""; } } } $ReturnHtml = [ 'HtmlTable' => $ResultArray['HtmlTable'], 'preset_name_option' => $ResultData['Option'], 'preset_mark_id_arr' => $ResultArray['PresetMarkIdArray'], 'preset_value_id' => explode(',', $post['preset_mark_id_arr']), 'preset_value_option' => $result, ]; } $this->success('更新成功!', null, $ReturnHtml); } } // 获取或更新规格组合的数据 // preset_id:预设值ID // preset_mark_id:预设参数标记ID,同一预设规格名称下的所有规格值统一使用,可理解为规格名称唯一ID。 public function assemble_spec_data() { if (IS_AJAX_POST) { $post = input('post.'); // 刷新或重新进入产品添加页则清除关于产品session if (isset($post['initialization']) && !empty($post['initialization'])) { session('spec_arr', null); $this->success('初始化完成'); } // 若清除一整条规格信息则清除session中相应的数据并且重置规格名称下拉框选项 $ResultArray = $this->ProductSpecLogic->GetResetPresetNameOption($post); // 删除单个规格值则清除session对应的值 $ValueArray = $this->ProductSpecLogic->ClearSpecValueID($post); // 把session中的数据和提交的数据组合 $SpecArray = $this->ProductSpecLogic->GetSessionPostArrayMerge($post); if (isset($SpecArray['error']) && !empty($SpecArray['error'])) $this->error($SpecArray['error']); // 获取规格拼装后的html表格 if (isset($post['aid']) && !empty($post['aid'])) { // 编辑 $HtmlTable = $this->ProductSpecLogic->SpecAssemblyEdit($SpecArray, $post['aid']); } else { // 新增 $HtmlTable = $this->ProductSpecLogic->SpecAssembly($SpecArray); } if (!empty($ValueArray['Option'])) { // 删除规格值后的规格值下拉框 $PresetValueOption = $ValueArray['Option']; $ResultValue['Value'] = null; } else { $ResultValue = model('ProductSpecPreset')->GetPresetNewData(session('spec_arr'), $post); // 获取新增规格值后的下拉框 if (empty($post['aid'])) { $PresetValueOption = $this->ProductSpecLogic->GetPresetValueOption($ResultValue['Option']); } else { $PresetValueOption = $ResultValue['Option']; } } // 返回数据 $ReturnData = [ 'HtmlTable' => $HtmlTable, 'PresetNameOption' => $ResultArray['Option'], 'PresetMarkIdArray' => $ResultArray['MarkId'], 'SelectPresetValue' => $ResultValue['Value'], 'PresetValueOption' => $PresetValueOption, ]; $this->success('加载成功!', null, $ReturnData); } } // 同步规格值到产品规格中,刷新规格值下拉框 public function refresh_spec_value() { if (IS_AJAX_POST) { $post = input('post.'); // 是否提交完整数据 if (empty($post['spec_mark_id']) || empty($post['aid'])) $this->error('数据有误,同步失败,请刷新重试!'); /*查询产品已选规格数据*/ $where = [ 'aid' => $post['aid'], 'spec_mark_id' => $post['spec_mark_id'], ]; $SpecData = Db::name('product_spec_data')->where($where)->order('spec_value_id asc')->select(); // 以规格值ID为键名 $SpecData = group_same_key($SpecData, 'spec_value_id'); /* END */ /*查询规格库数据*/ $where = [ 'preset_mark_id' => $post['spec_mark_id'], ]; $PresetData = $this->product_spec_preset_db->where($where)->order('preset_id asc')->select(); /* END */ // 初始化数组 $AddData = $UpData = $SpecIds = $UpSpecWhere = $UpSpecName = []; // 数据处理 foreach ($PresetData as $pd_k => $pd_v) { if (!empty($SpecData[$pd_v['preset_id']]) && $pd_v['preset_name'] != $SpecData[$pd_v['preset_id']][0]['spec_name']) { // 更新规格名称数组 if (empty($UpSpecWhere) && empty($UpSpecName)) { $UpSpecWhere = [ 'aid' => $post['aid'], 'spec_mark_id' => $pd_v['preset_mark_id'], ]; $UpSpecName = [ 'spec_name' => $pd_v['preset_name'], ]; } } if (empty($SpecData[$pd_v['preset_id']])) { // 添加规格值数据 $AddData[] = [ 'aid' => $post['aid'], 'spec_mark_id' => $pd_v['preset_mark_id'], 'spec_name' => $pd_v['preset_name'], 'spec_value_id' => $pd_v['preset_id'], 'spec_value' => $pd_v['preset_value'], 'spec_is_select' => 0, 'lang' => $this->admin_lang, 'add_time' => getTime(), 'update_time' => getTime(), ]; } else if (!empty($SpecData[$pd_v['preset_id']]) && $pd_v['preset_value'] != $SpecData[$pd_v['preset_id']][0]['spec_value']) { // 更新规格值数据 $UpData[] = [ 'spec_id' => $SpecData[$pd_v['preset_id']][0]['spec_id'], 'spec_mark_id' => $pd_v['preset_mark_id'], 'spec_name' => $pd_v['preset_name'], 'spec_value_id' => $pd_v['preset_id'], 'spec_value' => $pd_v['preset_value'], 'update_time' => getTime(), ]; // 删除产品已选规格表中对应需要更新的规格值数据 unset($SpecData[$pd_v['preset_id']]); } else { // 删除规格库中不存在的规格值数据 unset($SpecData[$pd_v['preset_id']]); } } // 合并添加、编辑数据,统一处理 $SaveData = array_merge($AddData, $UpData); /*处理需要删除的规格值数据*/ if (!empty($SpecData)) { $DelIsSelect = 0; foreach ($SpecData as $key => $value) { $SpecIds[] = $value[0]['spec_id']; if (1 == $value[0]['spec_is_select']) { $DelIsSelect = 1; } $spec_mark_id = $value[0]['spec_mark_id']; } } /* END */ $HtmlTable = $SpecMarks = ''; if (!empty($SpecIds)) { // 删除废弃的规格值数据 Db::name('product_spec_data')->where('spec_id', 'IN', $SpecIds)->delete(); if (1 == $DelIsSelect) { session('spec_arr', null); $SpecWhere = [ 'aid' => $post['aid'], 'lang' => $this->admin_lang, 'spec_is_select' => 1,// 已选中的 ]; $order = 'spec_value_id asc, spec_id asc'; $product_spec_data = Db::name('product_spec_data')->where($SpecWhere)->order($order)->select(); if (!empty($product_spec_data)) { $spec_arr_new = group_same_key($product_spec_data, 'spec_mark_id'); $DelAllSpec = $spec_mark_id; foreach ($spec_arr_new as $key => $value) { $spec_mark_id_arr[] = $key; for ($i=0; $iProductSpecLogic->SpecAssemblyEdit($spec_arr_new, $post['aid']); $SpecMarks = implode(',', $spec_mark_id_arr); } } } if (!empty($SaveData)) { // 批量保存更新新规格 model('ProductSpecData')->saveAll($SaveData); } if (!empty($UpSpecWhere) && !empty($UpSpecName)) { // 更新当前产品下对应的规格名称 Db::name('product_spec_data')->where($UpSpecWhere)->update($UpSpecName); if (empty($UpData)) { $UpData[0] = [ 'spec_name' => $UpSpecName['spec_name'], 'spec_mark_id' => $UpSpecWhere['spec_mark_id'] ]; } } $ValueOption = $this->ProductSpecLogic->GetPresetValueOption('', $post['spec_mark_id'], $post['aid']); $ResultData = [ 'UpData' => $UpData, 'SpecIds' => $SpecIds, 'HtmlTable' => $HtmlTable, 'SpecMarks' => $SpecMarks, 'DelAllSpec' => $DelAllSpec, 'ValueOption' => $ValueOption, ]; $this->success('同步成功,规格值已刷新!', null, $ResultData); } } // 新增产品时更新同步规格数据 public function refresh_preset_value() { if (IS_AJAX_POST) { $post = input('post.'); if (!empty($post)) { $HtmlTable = $DelAllPreset = $PresetData = $MarkData = ''; if ((isset($post['mark_mark_ids']) && !empty($post['mark_mark_ids'])) || (isset($post['mark_preset_ids']) && !empty($post['mark_preset_ids']))) { if (!empty($post['mark_mark_ids'])) { $MarkData = $this->product_spec_preset_db->where('preset_mark_id', 'IN', $post['mark_mark_ids'])->field('preset_mark_id, preset_name')->select(); } if (!empty($post['mark_preset_ids'])) { $PresetData = $this->product_spec_preset_db->where('preset_id', 'IN', $post['mark_preset_ids'])->field('preset_id, preset_value')->select(); } } else { $DelAllPreset = 0; $spec_arr_ses = session('spec_arr'); foreach ($spec_arr_ses[$post['preset_mark_id']] as $key => $value) { if ($value == $post['preset_id']) { unset($spec_arr_ses[$post['preset_mark_id']][$key]); } } if (empty($spec_arr_ses[$post['preset_mark_id']])) { unset($spec_arr_ses[$post['preset_mark_id']]); $count = $this->product_spec_preset_db->where('preset_mark_id', $post['preset_mark_id'])->count(); if (empty($count)) { $DelAllPreset = 1; } } session('spec_arr',$spec_arr_ses); $HtmlTable = $this->ProductSpecLogic->SpecAssembly($spec_arr_ses); } $ResultData = [ 'MarkData' => $MarkData, 'HtmlTable' => $HtmlTable, 'PresetData' => $PresetData, 'DelAllPreset' => $DelAllPreset, ]; $this->success('同步成功!', null, $ResultData); } } } // 检查是否最新的购物车标签 public function VerifyLatestTemplate() { // 验证最新模板 $ResultData = VerifyLatestTemplate(); if (empty($ResultData)) { // 更新开启多规格 getUsersConfigData('shop', ['shop_open_spec' => 1]); // 返回提示 $this->success('模板检测通过,规格已开启!'); }else{ if (5 == count($ResultData)) { $msg = '未检测到规格标签,请根据提示手工调用后再重新验证!'; }else{ $msg = '规格标签缺少变量:
'.implode(', ', $ResultData).'
请检查模板核实后再次验证!'; } // 更新关闭多规格 getUsersConfigData('shop', ['shop_open_spec' => 0]); // 返回提示 $this->error($msg); } } // 暂时已废弃,暂时不清理删除代码 public function FindSmptConfig() { $Smtp = tpCache('smtp'); if (empty($Smtp['smtp_server']) || empty($Smtp['smtp_port']) || empty($Smtp['smtp_user']) || empty($Smtp['smtp_pwd']) || empty($Smtp['smtp_from_eamil'])) { $this->error('邮箱配置尚未配置完成,前往配置?', url('System/api_conf')); } else { // tpCache('smtp', [input('post.field') => 1]); $this->success('配置完成'); } } // 未付款订单改价 public function order_change_price() { if (IS_AJAX_POST) { $post = input('post.'); if (empty($post['order_id']) || empty($post['order_amount'])) $this->error('操作错误,刷新重试'); // 更新条件 $where = [ 'order_id' => $post['order_id'], 'order_status' => 0 ]; // 更新数据 $Code = date('Ymd') . getTime() . rand(10, 100); $update = [ 'order_code' => $Code, 'update_time' => getTime(), 'order_amount' => $post['order_amount'] ]; // 更新操作 $ResultID = $this->shop_order_db->where($where)->update($update); // 更新后续操作 if (!empty($ResultID)) { // 添加订单的操作记录 $action_note = '应付金额改为:' . $post['order_amount'] . ',原价:' . $post['order_amount_old']; AddOrderAction($post['order_id'], 0, session('admin_id'), 0, 0, 0, '商家改价!', $action_note); $this->success('改价完成'); } else { $this->error('改价失败,刷新重试'); } } } /** * 营销功能 * @return [type] [description] */ public function market_index() { return $this->fetch(); } //会员编辑 订单数列表 public function users_edit_order_index() { // 初始化数组和条件 $where = [ 'a.lang' => $this->admin_lang, ]; // 会员编辑专用 - 筛选 $users_id = input('users_id/d'); if (!empty($users_id)) { $where['a.users_id'] = $users_id; $where['a.order_status'] = 3; } // 订单号查询 $order_code = input('order_code/s'); if (!empty($order_code)) $where['a.order_code'] = ['LIKE', "%{$order_code}%"]; // 分页查询 $count = $this->shop_order_db->alias('a')->where($where)->count('order_id'); $pageObj = new Page($count, config('paginate.list_rows')); // 订单主表数据查询 $list = $this->shop_order_db->alias('a') ->field('a.*, b.username as u_username, b.nickname as u_nickname, b.mobile as u_mobile') ->where($where) ->join('__USERS__ b', 'a.users_id = b.users_id', 'LEFT') ->order('a.order_id desc') ->limit($pageObj->firstRow.','.$pageObj->listRows) ->select(); if (empty($list) && !empty($order_code)) { // 通过商品名称查询订单号 $where_1['product_name'] = ['LIKE', "%{$order_code}%"]; $order_ids = $this->shop_order_details_db->where($where_1)->group('order_id')->column('order_id'); // 重新查询订单主表 unset($where['a.order_code']); $where['a.order_id'] = ['IN', $order_ids]; // 分页查询 $count = $this->shop_order_db->alias('a')->where($where)->count('order_id'); $pageObj = new Page($count, config('paginate.list_rows')); // 订单主表数据查询 $list = $this->shop_order_db->alias('a') ->field('a.*, b.username as u_username, b.nickname as u_nickname, b.mobile as u_mobile') ->where($where) ->join('__USERS__ b', 'a.users_id = b.users_id', 'LEFT') ->order('a.order_id desc') ->limit($pageObj->firstRow.','.$pageObj->listRows) ->select(); } $order_ids = []; $OrderReminderID = []; foreach ($list as $key => $value) { array_push($order_ids, $value['order_id']); if (1 == $value['order_status']) array_push($OrderReminderID, $value['order_id']); } // 处理订单详情数据 $where = [ 'a.order_id' => ['IN', $order_ids] ]; $DetailsData = $this->shop_order_details_db->alias('a') ->field('a.*, b.service_id, b.status') ->where($where) ->join('__SHOP_ORDER_SERVICE__ b', 'a.details_id = b.details_id', 'LEFT') ->order('details_id asc') ->select(); $ArchivesData = get_archives_data($DetailsData, 'product_id'); $OrderServiceStatus = Config::get('global.order_service_status'); foreach ($DetailsData as $key => $value) { // 售后信息处理 $value['service_id'] = !empty($value['service_id']) ? $value['service_id'] : 0; $value['status'] = !empty($value['status']) ? $value['status'] : 0; $value['status_name'] = !empty($value['status']) ? $OrderServiceStatus[$value['status']] : ''; // 产品属性处理 $value['data'] = unserialize($value['data']); $value['data'] = htmlspecialchars_decode(htmlspecialchars_decode($value['data']['spec_value'])); // 组合数据 $value['data'] = explode('
', $value['data']); $valueData = ''; foreach ($value['data'] as $key_1 => $value_1) { if (!empty($value_1)) $valueData .= '' . trim(strrchr($value_1, ':'),':') . ''; } $value['data'] = $valueData; $value['arcurl'] = get_arcurl($ArchivesData[$value['product_id']]); $value['litpic'] = handle_subdir_pic(get_default_pic($value['litpic'])); $DetailsData[$key] = $value; } // 把订单详情数据植入订单数据 $DetailsDataGroup = group_same_key($DetailsData, 'order_id'); foreach ($list as $key => $value) { // 处理会员昵称 $value['u_nickname'] = !empty($value['u_nickname']) ? $value['u_nickname'] : $value['u_username']; // 处理订单详情数据 $value['Details'] = $DetailsDataGroup[$value['order_id']]; // 商品条数 $value['rowspan'] = count($value['Details']); // 添加时间 $value['add_time'] = date('Y-m-d H:i:s', $value['add_time']); // 更新时间 $value['update_time'] = date('Y-m-d H:i:s', $value['update_time']); // 重新赋值数据 $list[$key] = $value; } // 分页显示输出 $pageStr = $pageObj->show(); // 数据加载 $this->assign('list', $list); $this->assign('page', $pageStr); $this->assign('pager', $pageObj); return $this->fetch('member/edit/order_index'); } //前台改变产品类型,被取消的类型的商品将会统一下架处理,这里返回受影响的商品数量 public function get_shop_type_arc() { $cancel_type = input('param.cancel_type/s'); $cancel_type = explode(',',$cancel_type); $where_prom_type = []; if (in_array(0,$cancel_type)) $where_prom_type[] = 0; if (in_array(1,$cancel_type)) { $where_prom_type[] = 1; $where_prom_type[] = 2; $where_prom_type[] = 3; } if (in_array(2,$cancel_type)) $where_prom_type[] = 4; $where['channel'] = 2; $where['is_del'] = 0; $where['arcrank'] = ['>',-1]; $where['prom_type'] = ['in',$where_prom_type]; $count = Db::name('archives')->where($where)->count(); $this->success('success','',$count); } // 订单确认核销 public function verify() { if (IS_AJAX_POST && !empty($this->weappInfo)) { // 开启核销插件则执行 if (!empty($this->weappInfo['status']) && 1 === intval($this->weappInfo['status'])) { // 调用核销逻辑层方法 $post = input('post.'); $verifyLogic = new \weapp\Verify\logic\VerifyLogic; $verifyLogic->verifyOrderConfirmHandle($post, $this->weappInfo); } $this->error('请先开启核销插件'); } $this->error('请先安装核销插件'); } public function shopOrderPreHandle() { if (IS_AJAX_POST) { model('OrderPreHandle')->eyou_shopOrderPreHandle(0, getUsersConfigData('all'), 'admin'); $this->success('订单处理完成'); } } }