where($where)->select(); $list = Db::name('seller')->where([['member_id', '=', 1]])->find(); echo json_encode($list); } /** * 卡绑定的接口 */ public function bindCard() { $originParam = $this->request->param(); $param = $originParam['card']; // ds_json_encode(10001, lang('ds_common_op_fail')); 10000成功, 10001失败 if (empty($param['card_no'])) { ds_json_encode(10001, '卡号不能为空!'); } if (empty($param['card_pwd'])) { ds_json_encode(10001, '卡号密码不能为空'); } $cardNo = $param['card_no']; $cardPwd = $param['card_pwd']; $checkHost = config('ds_config.do_net_card_url'); $url = $checkHost . '/api/card.number/verify'; $checkCard = common_curl($url, [ 'cardNo' => $cardNo, 'cardPassword' => $cardPwd, "userId" => $this->member_info['member_id'], ] ); if ($checkCard['code']) { ds_json_encode(10001, $checkCard['msg']); } $resData = $checkCard['data']; if (!$resData) { ds_json_encode(10000, '绑定失败!'); } if (empty($resData['balance']) || $resData['balance'] == 0) { ds_json_encode(10001, '这是空的卡券'); } //$checkCard = [ // 'balance' => 121, // 'amount' => 121, // 'goodsClassIds' => '5|10|15' // ]; if (empty($resData['goodsClassIds'])) { $isLimit = 0; //不限制 $bindCate = ''; } else if ($resData['goodsClassIds'] == 9999) { $bindCate = 9999; $isLimit = 1; //有限制 } else { $bindCate = ''; $cateIds = explode('|', $resData['goodsClassIds']); if (empty($cateIds)) { $isLimit = 0; } else { $isLimit = 1; //有限制 $bindCate = $this->getBindCate($cateIds); } } if (empty($resData['storeClassIds'])) { $storeLimit = 0; $bindStore = ''; } else { $storeLimit = 1; $bindStore = $resData['storeClassIds']; } $cardInfo = Db::name('sub_card')->where([ ['card_no', '=', $cardNo], ])->find(); if (!empty($cardInfo)) { ds_json_encode(10001, '卡号已绑定,请勿重复操作!'); } $time = time(); $insertData = [ 'card_no' => $cardNo, 'card_type' => 1, 'member_id' => $this->member_info['member_id'], 'balance' => $resData['balance'], 'worth' => $resData['amount'], 'start_date' => empty($resData['startDateTime']) ? 'NULL' : strtotime($resData['startDateTime']), 'end_date' => empty($resData['endDateTime']) ? 'NULL' : strtotime($resData['endDateTime']), 'goods_cate_ids' => empty($resData['goodsClassIds']) ? '' : $resData['goodsClassIds'], 'is_limit' => $isLimit, //是否有限制分类使用 'bind_cate' => $bindCate, //绑定的分类id列表 'store_limit' => $storeLimit, 'bind_store' => $bindStore, 'create_time' => $time, 'update_time' => $time, ]; $res = Db::name('sub_card')->insertGetId($insertData); if ($res) { if (!$this->member_info['member_cardbind']) { $member_model = model('member'); $condition = []; $condition[] = ['member_id', '=', $this->member_info['member_id']]; $result = $member_model->editMember($condition, ['member_cardbind' => 1], $this->member_info['member_id']); } $count = Db::name('sub_card')->where(['member_id' => $this->member_info['member_id'], 'card_status' => ['neq', 3]])->count(); ds_json_encode(10000, '绑定成功', ['id' => $res, 'count' => $count]); } else { ds_json_encode(10000, '绑定失败!'); } } /** * 获取用户的卡券列表 */ public function cardListByUser() { $param = $this->request->param(); $userId = $this->member_info['member_id']; $page = empty($param['page']) ? 1 : $param['page']; $limit = empty($param['limit']) ? 10 : $param['limit']; // $where = $where_or = []; $where = "member_id = " . $userId; // $where[] = ['member_id', '=', $userId]; $isAll = 0; if (!empty($param['state'])) { if ($param['state'] == 3) { $where .= ' and (card_status in (3,5) or end_date < ' . time() . ')'; // $where[] = ['card_status', 'in', [3, 5]]; // $where_or[] = ['end_date','<',time()]; } else { $where .= ' and card_status = ' . $param['state'] . ' and end_date > ' . time(); // $where[] = ['card_status', '=', $param['state']]; // $where[] = ['end_date','>',time()]; } } else { $isAll = 1; $where .= ' and card_status not in (3,5) and end_date > ' . time(); } $list = Db::name('sub_card') ->where($where) // ->whereOr($where_or) ->page($page) ->limit($limit) ->order('create_time desc') ->select()->toArray(); // if ($this->member_info['member_id'] == 109) { // var_dump(Db::getLastsql());exit(); // } $count = Db::name('sub_card')->where($where)->count(); if (!empty($list)) { $cateIds = []; foreach ($list as $v) { if (!empty($v['goods_cate_ids'])) { $cateData = explode('|', $v['goods_cate_ids']); if (!empty($cateData)) { foreach ($cateData as $c) { $cateIds[] = $c; } } } } $showCateList = []; if (!empty($cateIds)) { $showCateList = Db::name('goodsclass') ->where([['gc_id', 'in', $cateIds]])->column('gc_name', 'gc_id'); } foreach ($list as $k => $v) { $list[$k]['create_time'] = date('Y-m-d H:i:s', $v['create_time']); $list[$k]['update_time'] = date('Y-m-d H:i:s', $v['update_time']); $list[$k]['start_date'] = date('Y-m-d H:i:s', $v['start_date']); $list[$k]['end_date'] = date('Y-m-d H:i:s', $v['end_date']); if ($isAll || $param['state'] == 3) { switch ($v['card_status']) { case 1: $list[$k]['status_name'] = '未使用'; break; case 2: $list[$k]['status_name'] = '使用中'; break; case 3: $list[$k]['status_name'] = '已失效'; break; case 5: $list[$k]['status_name'] = '已冻结'; $list[$k]['reasons'] = '卡被系统冻结,请联系负责人'; break; default: $list[$k]['status_name'] = ''; break; } } //卡片使用范围展示 if (empty($v['goods_cate_ids'])) { $list[$k]['using_range'] = '所有'; $list[$k]['is_check'] = 1; //是否可以被用 } else if ($v['bind_cate'] == '9999') { $list[$k]['using_range'] = '电影票'; $list[$k]['is_check'] = 1; //是否可以被用 } else { $cateIds = explode('|', $v['goods_cate_ids']); $rangeList = []; foreach ($cateIds as $c) { if (!empty($showCateList[$c])) { $rangeList[] = $showCateList[$c]; } } $list[$k]['using_range'] = str_replace(' ', '', implode('、', $rangeList)); } } } // var_dump(1);exit(); if (count($list) < $limit) { $hasMore = false; } else { $hasMore = true; } $data = [ 'count' => $count, 'list' => $list, 'hasmore' => $hasMore, ]; ds_json_encode(10000, '查询成功', $data); } /** * 获取用户的卡券列表(绑卡那个页面用的) */ public function cardListByMember() { $param = $this->request->param(); $is_vir = $param['is_vir']; $gcIds = []; $store_id = 0; if ($is_vir == 3) { //到店 $store_id = $param['store_id']; } else { //商品 if (!empty($param['goods_data'])) { if ($is_vir == 1) { //虚拟商品 $goodsList = [$param['goods_data']]; } else { //实物商品 $goodsData = $param['goods_data']; $goodsList = []; if (!empty($goodsData)) { foreach ($goodsData as $v) { foreach ($v['goods_list'] as $good) { $goodsList[] = $good; } } } } } else { $goodsList = []; } $gcIds = array_column($goodsList, 'gc_id'); if ($is_vir == 2) { //购物车中, 所有尚品的分类id $gcIds = [9999]; } } //搜索条件 $userId = $this->member_info['member_id']; $where = []; $where[] = ['member_id', '=', $userId]; $isAll = 0; $where[] = ['card_status', 'in', [1, 2]]; //过滤已失效的卡 $where[] = ['end_date', '>=', time()]; if ($is_vir == 3) { //到店付款 $class_id = Db::name('store')->where('store_id', $store_id)->value('storeclass_id'); $list = Db::name('sub_card')->where(function ($query) use ($where, $class_id) { $query->where($where)->where(function ($query) use ($class_id) { $query->where([['store_limit', '=', 0]])->whereOr(function ($query) use ($class_id) { if (!empty($class_id)) { $query->where('find_in_set(:id,bind_store)', ['id' => $class_id]); } }); }); })->order('create_time desc')->select()->toArray(); } else { //正常商品 $list = Db::name('sub_card')->where(function ($query) use ($where, $gcIds) { $query->where($where)->where(function ($query) use ($gcIds) { $query->where([['is_limit', '=', 0]])->whereOr(function ($query) use ($gcIds) { if (!empty($gcIds)) { foreach ($gcIds as $v) { $query->where('find_in_set(:id,bind_cate)', ['id' => $v]); } } }); }); })->order('create_time desc')->select()->toArray(); } if (!empty($list)) { if ($is_vir == 3) { //到店 $showStoreIds = []; //变更$list的格式 foreach ($list as $k => $v) { if ($v['bind_store']) { $showStoreIds = array_merge($showStoreIds, explode(',', $v['bind_store'])); //拆分要用的分类id $list[$k]['bind_store'] = explode(',', $v['bind_store']); } } //展示卡券使用范围的数据 if (!empty($showStoreIds)) { $showStoreIds = array_values(array_unique($showStoreIds)); $showClassList = Db::name('storeclass') ->where('storeclass_id', 'in', $showStoreIds)->column('storeclass_name', 'storeclass_id'); } } else { //商品 $goodsShowCateIds = []; //变更$list的格式 foreach ($list as $k => $v) { if ($v['bind_cate']) { $list[$k]['bind_cateIds'] = explode(',', $v['bind_cate']); //拆分要用的分类id } if ($v['goods_cate_ids']) { $goodsCateIds = explode('|', $v['goods_cate_ids']); //拆分初始的几个分类id $list[$k]['goods_cate_ids'] = $goodsCateIds; $goodsShowCateIds = array_merge($goodsShowCateIds, $goodsCateIds); } } //展示卡券使用范围的数据 if (!empty($goodsShowCateIds)) { $showCateIds = array_values(array_unique($goodsShowCateIds)); $showCateList = Db::name('goodsclass') ->where([['gc_id', 'in', $showCateIds]])->column('gc_name', 'gc_id'); } } foreach ($list as $k => $v) { $list[$k]['type'] = $k % 5; $list[$k]['create_time'] = date('Y-m-d H:i:s', $v['create_time']); $list[$k]['balance'] = number_format($v['balance'], 2); $list[$k]['worth'] = number_format($v['worth'], 2); if ($isAll) { switch ($v['card_status']) { case 1: $list[$k]['status_name'] = '未使用'; break; case 2: $list[$k]['status_name'] = '使用中'; break; default: $list[$k]['status_name'] = ''; break; } } if ($is_vir == 3) { //到店 $list[$k]['is_check'] = 1; if (empty($v['bind_store'])) { $list[$k]['store_range'] = '所有'; } else { $bind_store = $v['bind_store']; $rangeList = []; foreach ($bind_store as $id) { if (!empty($showClassList[$id])) { $rangeList[] = $showClassList[$id]; } } $list[$k]['store_range'] = str_replace(' ', '', implode(',', $rangeList)); } } else { //卡片使用范围展示 if (empty($v['goods_cate_ids'])) { $list[$k]['using_range'] = '所有'; $list[$k]['is_check'] = 1; //是否可以被用 } else if ($v['bind_cate'] == '9999') { $list[$k]['using_range'] = '电影票'; $list[$k]['is_check'] = 1; //是否可以被用 } else { $cateIds = $v['goods_cate_ids']; $rangeList = []; foreach ($cateIds as $c) { if (!empty($showCateList[$c])) { $rangeList[] = $showCateList[$c]; } } $list[$k]['using_range'] = str_replace(' ', '', implode(',', $rangeList)); $list[$k]['is_check'] = 1; } } } } $data = [ 'list' => $list, ]; ds_json_encode(10000, '查询成功', $data); } /** * 获取默认卡片 */ public function defaultCard() { //初始化参数 $goods_id = $this->request->param('goods_id', 0); $is_vir = $this->request->param('is_vir', 0); $cate_id = 0; if ($is_vir == 2) { //电影票 $cate_id = 9999; } elseif (!empty($goods_id)) { $gc_id = Db::name('goods')->where('goods_id', $goods_id)->value('gc_id'); $cate_id = $gc_id ?: 0; } //获取卡券数据 $userId = $this->member_info['member_id']; $where = []; $where[] = ['member_id', '=', $userId]; $where[] = ['card_status', 'in', [1, 2]]; //过滤已失效的卡 $where[] = ['end_date', '>=', time()]; if ($is_vir == 3) { $store_id = $this->request->param('store_id', 0); //到店付款 $class_id = Db::name('store')->where('store_id', $store_id)->value('storeclass_id'); $info = Db::name('sub_card')->where(function ($query) use ($where, $class_id) { $query->where($where)->where(function ($query) use ($class_id) { $query->where([['store_limit', '=', 0]])->whereOr(function ($query) use ($class_id) { if (!empty($class_id)) { $query->where('find_in_set(:id,bind_store)', ['id' => $class_id]); } }); }); })->find(); } else { //商品 $info = Db::name('sub_card')->where(function ($query) use ($where, $cate_id) { $query->where($where)->where(function ($query) use ($cate_id) { $query->where([['is_limit', '=', 0]])->whereOr(function ($query) use ($cate_id) { $query->where('find_in_set(:id,bind_cate)', ['id' => $cate_id]); }); }); })->find(); } //处理参数 $res = ''; if (!empty($info)) { $res = [ 'card_id' => (string)$info['id'], 'card_balance' => sprintf("%.2f", $info['balance']), 'card_total_balance' => sprintf("%.2f", $info['worth']), 'card_content' => $info['card_no'], ]; } $data = [ 'cardInfo' => $res, ]; ds_json_encode(10000, '查询成功', $data); } /** * 卡片详情接口 */ public function cardInfoByUser() { $param = $this->request->param(); if (empty($param['id'])) { ds_json_encode(10001, '卡券已被下架,请刷新后重试!'); } $userId = $this->member_info['member_id']; // echo $userId;exit; $id = $param['id']; $where = []; $where[] = ['id', '=', $id]; $where[] = ['member_id', '=', $userId]; $info = Db::name('sub_card')->where($where)->find(); if (!empty($info)) { $info['create_time'] = date('Y-m-d H:i:s', $info['create_time']); $info['end_date'] = date('Y-m-d H:i:s', $info['end_date']); } else { ds_json_encode(10001, '卡券已失效!'); } $info['expense'] = $info['worth'] - $info['balance']; if (empty($info['goods_cate_ids'])) { $info['using_range'] = '所有'; $info['is_check'] = 1; //是否可以被用 } else if ($info['bind_cate'] == '9999') { $info['using_range'] = '电影票'; $info['is_check'] = 1; //是否可以被用 } else { $cateIds = explode('|', $info['goods_cate_ids']); $showCateList = []; if (!empty($cateIds)) { $showCateList = Db::name('goodsclass') ->where([['gc_id', 'in', $cateIds]])->column('gc_name', 'gc_id'); } $rangeList = []; foreach ($cateIds as $c) { if (!empty($showCateList[$c])) { $rangeList[] = $showCateList[$c]; } } $info['using_range'] = str_replace(' ', '', implode('、', $rangeList)); } if (empty($info['bind_store'])) { $info['store_range'] = '所有'; } else { $storeIds = explode(',', $info['bind_store']); $showStoreList = Db::name('storeclass')->where('storeclass_id', 'in', $storeIds)->column('storeclass_name', 'storeclass_id'); $storeRangeList = []; foreach ($storeIds as $id) { if (!empty($showStoreList[$id])) { $storeRangeList[] = $showStoreList[$id]; } } $info['store_range'] = str_replace(' ', '', implode('、', $storeRangeList)); } ds_json_encode(10000, '查询成功', ['info' => $info]); } /** * 卡片消费记录 */ public function expenseList() { $param = $this->request->param(); $page = empty($param['page']) ? 1 : $param['page']; $limit = empty($param['limit']) ? 10 : $param['limit']; $member_id = $this->member_info['member_id']; $card_id = $param['card_id']; if (empty($card_id)) { ds_json_encode(10001, '卡券不存在或已下架!'); } $where['expense_status'] = [1, 3]; $where['card_id'] = $card_id; $where['member_id'] = $member_id; $count = Db::name('sub_card_expense')->where($where)->count(); $list = Db::name('sub_card_expense')->where($where) ->page($page) ->limit($limit)->order('id desc') ->select()->toArray(); if (count($list) < $limit) { $hasMore = false; } else { $hasMore = true; } $order = []; if (!empty($list)) { foreach ($list as $key => $value) { $condition = []; $condition['order_id'] = $value['order_id']; $is_vir = $value['is_vir']; if ($is_vir == 1) { $Vrorder = model('Vrorder'); $order = $Vrorder->getVrorderInfo($condition); if (empty($order)) { continue; } $order['goods_image_url'] = goods_cthumb($order['goods_image'], 240, $order['store_id']); } elseif ($is_vir == 0) { $Order = model('Order'); $order = $Order->getOrderInfo($condition, ['order_goods']); if (empty($order)) { continue; } if (count($order['extend_order_goods']) > 0) { $goods = $order['extend_order_goods'][0]; $order['goods_name'] = $goods['goods_name']; $order['goods_image_url'] = goods_cthumb($goods['goods_image'], 240, $order['store_id']); } $state_text_arr = [0 => '已取消', 10 => '未支付', 14 => '待付定金', 15 => '待付定金', 20 => '已支付', 30 => '已发货', 35 => '待自提', 40 => '已收货,交易成功']; $order['order_state_text'] = isset($state_text_arr[$order['order_state']]) ? $state_text_arr[$order['order_state']] : $order['order_state']; } elseif ($is_vir == 2) { $TicketOrder = model('TicketOrder'); $order = $TicketOrder->detail(['id' => $value['order_id']]); $order['goods_name'] = '电影票'; $order['goods_image_url'] = 'https://www.jucai.gov.cn/storage/ueditor/uploads/image/2022/02/07/d29a7d4b33277f445b2826c434374d06.jpg'; if (empty($order)) { continue; } } $list[$key]['expense_time'] = date('Y-m-d H:i:s', $value['expense_time']); $list[$key]['orderInfo']['order_name'] = $order['goods_name']; $list[$key]['orderInfo']['order_image'] = $order['goods_image_url']; $list[$key]['image'] = $order['goods_image_url']; $list[$key]['real_amount'] = $value['order_amount']; $list[$key]['expense_amount'] = $value['expense_amount']; $list[$key]['order_amount'] = $value['order_amount']; $list[$key]['order_state'] = $order['order_state']; $list[$key]['order_status_name'] = $order['order_state_text']; } } ds_json_encode(10000, '查询成功', ['count' => $count, 'list' => $list, 'hasmore' => $hasMore]); } /** * 获取绑定的分类数据 */ private function getBindCate($cateIds) { //拿到的是一个id的数组列表 $allCate = []; if (!empty($cateIds)) { foreach ($cateIds as $v) { $allCate[] = $v; $cateData = $this->get_child_all($v); if (!empty($cateData)) { $cateList = $cateData['class_list']; } if (!empty($cateList)) { foreach ($cateList as $v1) { $allCate[] = $v1['gc_id']; if (!empty($v1['child'])) { $childIds = array_column($v1['child'], 'gc_id'); if (!empty($childIds)) { foreach ($childIds as $v2) { $allCate[] = $v2; } } } } } } } if (!empty($allCate)) { $bindCate = implode(',', $allCate); } else { $bindCate = ''; } return $bindCate; } /** * 获取全部子集分类 */ public function get_child_all($gcId) { $gc_id = $gcId; $data = []; if ($gc_id > 0) { $prefix = 'api-goodsclass-all-'; $data = rcache($gc_id, $prefix); if (empty($data)) { $data = $this->_get_class_list($gc_id); if (!empty($data['class_list'])) { foreach ($data['class_list'] as $key => $val) { $d = $this->_get_class_list($val['gc_id']); $data['class_list'][$key]['child'] = $d['class_list']; } } wcache($gc_id, $data, $prefix, 3600); } } return $data; } /** * 根据分类编号返回下级分类列表 */ private function _get_class_list($gc_id) { $goods_class_array = model('goodsclass')->getGoodsclassForCacheModel(); $goods_class['child'] = ''; if (!empty($goods_class_array[$gc_id])) { $goods_class = $goods_class_array[$gc_id]; } if (empty($goods_class['child'])) { //无下级分类返回0 return ['class_list' => []]; } else { //返回下级分类列表 $class_list = []; $child_class_string = $goods_class_array[$gc_id]['child']; $child_class_array = explode(',', $child_class_string); foreach ($child_class_array as $child_class) { $class_item = []; $class_item['gc_id'] = ''; $class_item['gc_name'] = ''; $class_item['gc_id'] .= $goods_class_array[$child_class]['gc_id']; $class_item['gc_name'] .= $goods_class_array[$child_class]['gc_name']; $class_item['image'] = ds_get_pic(ATTACH_COMMON, $goods_class_array[$child_class]['gc_image']); $class_list[] = $class_item; } return ['class_list' => $class_list]; } } }