| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369 |
- <?php
- /**
- * Niushop商城系统 - 团队十年电商经验汇集巨献!
- * =========================================================
- * Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
- * ----------------------------------------------
- * 官方网址: https://www.niushop.com
- * =========================================================
- */
- namespace addon\supermember\shop\controller;
- use addon\coupon\model\CouponType;
- use addon\supermember\model\Config;
- use addon\supermember\model\MemberLevelOrder;
- use app\model\member\Member;
- use app\model\member\MemberLevel;
- use app\shop\controller\BaseShop;
- use Carbon\Carbon;
- /**
- * 会员卡
- */
- class Membercard extends BaseShop
- {
- protected $replace = []; //视图输出字符串内容替换 相当于配置文件中的'view_replace_str'
- public function __construct()
- {
- parent::__construct();
- $this->replace = [
- 'SUPERMEMBER_IMG' => __ROOT__ . '/addon/supermember/shop/view/public/img',
- 'SUPERMEMBER_CSS' => __ROOT__ . '/addon/supermember/shop/view/public/css',
- 'SUPERMEMBER_JS' => __ROOT__ . '/addon/supermember/shop/view/public/js',
- ];
- }
- /**
- * 概况
- * @return mixed
- */
- public function index()
- {
- $order = new MemberLevelOrder();
- $yesterday = Carbon::yesterday();
- $data = [
- 'yesterday_num' => $order->getOrderCount([ [ 'site_id', '=', $this->site_id ], [ 'order_status', '=', MemberLevelOrder::ORDER_PAY ], [ 'pay_time', 'between', [ date_to_time("{$yesterday->year}-{$yesterday->month}-{$yesterday->day} 00:00:00"), date_to_time("{$yesterday->year}-{$yesterday->month}-{$yesterday->day} 23:59:59") ] ] ])[ 'data' ],
- 'today_num' => $order->getOrderCount([ [ 'site_id', '=', $this->site_id ], [ 'order_status', '=', MemberLevelOrder::ORDER_PAY ], [ 'pay_time', 'between', [ date_to_time(date('Y-m-d 00:00:00')), time() ] ] ])[ 'data' ],
- 'total_num' => $order->getOrderCount([ [ 'site_id', '=', $this->site_id ], [ 'order_status', '=', MemberLevelOrder::ORDER_PAY ] ])[ 'data' ],
- 'yesterday_money' => $order->getOrderSum([ [ 'site_id', '=', $this->site_id ], [ 'pay_type', '<>', 'BALANCE' ], [ 'order_status', '=', MemberLevelOrder::ORDER_PAY ], [ 'pay_time', 'between', [ date_to_time("{$yesterday->year}-{$yesterday->month}-{$yesterday->day} 00:00:00"), date_to_time("{$yesterday->year}-{$yesterday->month}-{$yesterday->day} 23:59:59") ] ] ], 'order_money')[ 'data' ],
- 'today_money' => $order->getOrderSum([ [ 'site_id', '=', $this->site_id ], [ 'pay_type', '<>', 'BALANCE' ], [ 'order_status', '=', MemberLevelOrder::ORDER_PAY ], [ 'pay_time', 'between', [ date_to_time(date('Y-m-d 00:00:00')), time() ] ] ], 'order_money')[ 'data' ],
- 'total_money' => $order->getOrderSum([ [ 'site_id', '=', $this->site_id ], [ 'pay_type', '<>', 'BALANCE' ], [ 'order_status', '=', MemberLevelOrder::ORDER_PAY ] ], 'order_money')[ 'data' ],
- 'has_card_member' => ( new Member() )->getMemberCount([ [ 'site_id', '=', $this->site_id ], [ 'member_level_type', '=', 1 ], [ 'is_delete', '=', 0 ] ])[ 'data' ], // 持有超级会员卡的人数
- 'no_has_card_member' => ( new Member() )->getMemberCount([ [ 'site_id', '=', $this->site_id ], [ 'member_level_type', '=', 0 ], [ 'is_delete', '=', 0 ] ])[ 'data' ], // 未持有超级会员卡的人数
- 'card_list' => []
- ];
- $member_level_model = new MemberLevel();
- $card_list = $member_level_model->getMemberLevelList([ [ 'site_id', '=', $this->site_id ], [ 'level_type', '=', 1 ] ], 'level_name,level_id');
- if (!empty($card_list[ 'data' ])) {
- foreach ($card_list[ 'data' ] as $k => $item) {
- $count = ( new Member() )->getMemberCount([ [ 'member_level', '=', $item[ 'level_id' ] ], [ 'is_delete', '=', 0 ] ]);
- $card_list[ 'data' ][ $k ][ 'member_num' ] = $count[ 'data' ];
- }
- array_multisort(array_column($card_list[ 'data' ], 'member_num'), SORT_DESC, $card_list[ 'data' ]);
- $data[ 'card_list' ] = $card_list[ 'data' ];
- }
- $this->assign('data', $data);
- return $this->fetch('membercard/index', [], $this->replace);
- }
- /**
- * 销售数据统计
- */
- public function salesStatistics()
- {
- if (request()->isAjax()) {
- $start_time = input('start_time', '');
- $end_time = input('end_time', '');
- $order = new MemberLevelOrder();
- $data = [
- 'sale_num' => $order->getOrderCount([ [ 'site_id', '=', $this->site_id ], [ 'order_status', '=', MemberLevelOrder::ORDER_PAY ], [ 'pay_time', 'between', [ strtotime($start_time), strtotime($end_time) ] ] ])[ 'data' ],
- 'sale_money' => $order->getOrderSum([ [ 'site_id', '=', $this->site_id ], [ 'pay_type', '<>', 'BALANCE' ], [ 'order_status', '=', MemberLevelOrder::ORDER_PAY ], [ 'pay_time', 'between', [ strtotime($start_time), strtotime($end_time) ] ] ], 'order_money')[ 'data' ],
- ];
- return success(0, '', $data);
- }
- }
- /**
- * 会员卡列表
- * @return mixed
- */
- public function lists()
- {
- if (request()->isAjax()) {
- $page = input('page', 1);
- $page_size = input('page_size', PAGE_LIST_ROWS);
- $search_text = input('search_text', '');
- $charge_type = input('charge_type', '');
- $status = input('status', '');
- $condition = [
- [ 'site_id', '=', $this->site_id ],
- [ 'level_type', '=', 1 ]
- ];
- if (!empty($search_text)) $condition[] = [ 'level_name', 'like', "%" . $search_text . "%" ];
- if ($charge_type != '') $condition[] = [ 'charge_type', '=', $charge_type ];
- if ($status != '') $condition[] = [ 'status', '=', $status ];
- $order = 'growth asc,level_id desc';
- $field = '*';
- $member_level_model = new MemberLevel();
- $list = $member_level_model->getMemberLevelPageList($condition, $page, $page_size, $order, $field);
- if (!empty($list[ 'data' ][ 'list' ])) {
- $member_model = new Member();
- foreach ($list[ 'data' ][ 'list' ] as $k => $item) {
- $count = $member_model->getMemberCount([ [ 'member_level', '=', $item[ 'level_id' ] ], [ 'is_delete', '=', 0 ] ]);
- $list[ 'data' ][ 'list' ][ $k ][ 'member_num' ] = $count[ 'data' ];
- }
- }
- return $list;
- } else {
- return $this->fetch('membercard/lists', [], $this->replace);
- }
- }
- /**
- * 添加会员卡
- * @return mixed
- */
- public function add()
- {
- $member_level_model = new MemberLevel();
- if (request()->isAjax()) {
- $data = [
- 'site_id' => $this->site_id,
- 'level_name' => input('level_name', ''),
- 'growth' => input('growth', 0),
- 'remark' => input('remark', ''),
- 'is_free_shipping' => input('is_free_shipping', 0),
- 'consume_discount' => input('consume_discount', 100),
- 'point_feedback' => input('point_feedback', 0),
- 'send_point' => input('send_point', 0),
- 'send_balance' => input('send_balance', 0),
- 'send_coupon' => input('send_coupon', ''),
- 'charge_rule' => input('charge_rule', ''),
- 'charge_type' => input('charge_type', 0),
- 'level_type' => 1,
- 'bg_color' => input('bg_color', '#333333'),
- 'level_text_color' => input('level_text_color', '#ffffff'),
- 'level_picture' => input('level_picture', ''),
- ];
- $this->addLog("添加会员卡:" . $data[ 'level_name' ]);
- $res = $member_level_model->addMemberLevel($data);
- return $res;
- } else {
- //获取优惠券列表
- $coupon_model = new CouponType();
- $condition = [
- [ 'status', '=', 1 ],
- [ 'site_id', '=', $this->site_id ],
- ];
- //优惠券字段
- $coupon_field = 'coupon_type_id,type,coupon_name,image,money,discount,validity_type,fixed_term,status,is_limit,at_least,count,lead_count,end_time';
- $coupon_list = $coupon_model->getCouponTypeList($condition, $coupon_field);
- $this->assign('coupon_list', $coupon_list);
- $this->assign('level_time', $member_level_model->level_time);
- return $this->fetch('membercard/add');
- }
- }
- /**
- * 编辑会员卡
- * @return mixed
- */
- public function edit()
- {
- $member_level_model = new MemberLevel();
- if (request()->isAjax()) {
- $data = [
- 'level_name' => input('level_name', ''),
- 'remark' => input('remark', ''),
- 'is_free_shipping' => input('is_free_shipping', 0),
- 'consume_discount' => input('consume_discount', 100),
- 'point_feedback' => input('point_feedback', 0),
- 'send_point' => input('send_point', 0),
- 'send_balance' => input('send_balance', 0),
- 'send_coupon' => input('send_coupon', ''),
- 'charge_rule' => input('charge_rule', ''),
- 'charge_type' => input('charge_type', 0),
- 'bg_color' => input('bg_color', '#333333'),
- 'level_text_color' => input('level_text_color', '#ffffff'),
- 'level_picture' => input('level_picture', ''),
- ];
- $level_id = input('level_id', 0);
- $this->addLog("编辑会员卡:" . $data[ 'level_name' ]);
- if ($data[ 'charge_type' ]) $data[ 'is_recommend' ] = 0;
- return $member_level_model->editMemberLevel($data, [ [ 'level_id', '=', $level_id ], [ 'site_id', '=', $this->site_id ] ]);
- } else {
- $level_id = input('id', 0);
- $level_info = $member_level_model->getMemberLevelInfo([ [ 'level_id', '=', $level_id ], [ 'site_id', '=', $this->site_id ] ]);
- $this->assign('level_info', $level_info[ 'data' ]);
- if (empty($level_info[ 'data' ]))
- $this->error('未获取到会员卡数据', addon_url('supermember://shop/membercard/lists'));
- $this->assign('level_time', $member_level_model->level_time);
- //获取优惠券列表
- $coupon_model = new CouponType();
- $condition = [
- [ 'status', '=', 1 ],
- [ 'site_id', '=', $this->site_id ],
- ];
- //优惠券字段
- $coupon_field = 'coupon_type_id,type,coupon_name,image,money,discount,validity_type,fixed_term,status,is_limit,at_least,count,lead_count,end_time';
- $coupon_list = $coupon_model->getCouponTypeList($condition, $coupon_field);
- $this->assign('coupon_list', $coupon_list);
- return $this->fetch('membercard/edit');
- }
- }
- /**
- * 会员等级删除
- */
- public function delete()
- {
- if (request()->isAjax()) {
- $level_id = input('level_id', '');
- $member_level_model = new MemberLevel();
- $this->addLog("会员卡删除id:" . $level_id);
- return $member_level_model->deleteMemberLevel($level_id, $this->site_id);
- }
- }
- /**
- * 会员卡状态变更
- */
- public function status()
- {
- if (request()->isAjax()) {
- $member_level_model = new MemberLevel();
- $level_id = input('level_id', '');
- $status = input('status', 0);
- $res = $member_level_model->editMemberLevel([ 'status' => $status ], [ [ 'level_id', '=', $level_id ], [ 'site_id', '=', $this->site_id ] ]);
- return $res;
- }
- }
- /**
- * 推荐
- * @return array
- */
- public function recommend()
- {
- if (request()->isAjax()) {
- $member_level_model = new MemberLevel();
- $level_id = input('level_id', '');
- $recommend = input('recommend', 1);
- $member_level_model->editMemberLevel([ 'is_recommend' => 0 ], [ [ 'level_id', '<>', $level_id ], [ 'is_recommend', '=', 1 ], [ 'site_id', '=', $this->site_id ] ]);
- $member_level_model->editMemberLevel([ 'is_recommend' => $recommend ], [ [ 'level_id', '=', $level_id ], [ 'site_id', '=', $this->site_id ] ]);
- return success();
- }
- }
- /**
- * 会员卡订单
- * @return mixed
- */
- public function order()
- {
- if (request()->isAjax()) {
- $page = input('page', 1);
- $page_size = input('page_size', PAGE_LIST_ROWS);
- $order_no = input('order_no', '');
- $start_time = input('start_time', '');
- $end_time = input('end_time', '');
- $nickname = input('nickname', '');
- $condition = [
- [ 'site_id', '=', $this->site_id ],
- [ 'order_status', '=', 1 ]
- ];
- if ($order_no) {
- $condition[] = [ 'order_no', '=', $order_no ];
- }
- if ($nickname) {
- $condition[] = [ 'nickname', '=', $nickname ];
- }
- if ($start_time && !$end_time) {
- $condition[] = [ 'pay_time', '>=', date_to_time($start_time) ];
- } elseif (!$start_time && $end_time) {
- $condition[] = [ 'pay_time', '<=', date_to_time($end_time) ];
- } elseif ($start_time && $end_time) {
- $condition[] = [ 'pay_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
- }
- $level_order = new MemberLevelOrder();
- $data = $level_order->getLevelOrderPageList($condition, $page, $page_size);
- return $data;
- } else {
- $level_order = new MemberLevelOrder();
- $buyer_num = $level_order->getOrderCount([ [ 'site_id', '=', $this->site_id ], [ 'order_status', '=', 1 ] ], 'order_id', 'a', null, 'buyer_id')[ 'data' ];
- $this->assign('buyer_num', $buyer_num);
- $order_money = $level_order->getOrderSum([ [ 'site_id', '=', $this->site_id ], [ 'order_status', '=', 1 ] ], 'order_money')[ 'data' ];
- $this->assign('order_money', sprintf("%.2f", $order_money));
- return $this->fetch('membercard/order', [], $this->replace);
- }
- }
- /**
- * 会员卡订单详情
- * @return mixed
- */
- public function orderDetail()
- {
- $order_id = input('order_id', '');
- $level_order = new MemberLevelOrder();
- $condition = [
- [ 'order_id', '=', $order_id ],
- [ 'site_id', '=', $this->site_id ]
- ];
- $order = $level_order->getLevelOrderInfo($condition);
- if (empty($order[ 'data' ]))
- $this->error('未获取到订单数据', addon_url('supermember://shop/membercard/order'));
- $this->assign('order', $order);
- return $this->fetch('membercard/order_detail');
- }
- /**
- * 线下支付
- * @return array
- */
- public function offlinepay()
- {
- if (request()->isAjax()) {
- $out_trade_no = input('out_trade_no', 0);
- $level_order = new MemberLevelOrder();
- $res = $level_order->offlinePay($out_trade_no);
- return $res;
- }
- }
- /**
- * 开卡协议
- * @return mixed
- */
- public function agreement()
- {
- if (request()->isAjax()) {
- //设置注销协议
- $title = input('title', '');
- $content = input('content', '');
- $config_model = new Config();
- return $config_model->setMemberCardDocument($title, $content, $this->site_id, 'shop');
- } else {
- //获取注销协议
- $config_model = new Config();
- $document_info = $config_model->getMemberCardDocument($this->site_id, 'shop');
- $this->assign('document_info', $document_info);
- return $this->fetch('membercard/agreement');
- }
- }
- }
|