429 lines
19 KiB
PHP
429 lines
19 KiB
PHP
<?php
|
|
/**
|
|
* SaaSMall商城系统 - 团队十年电商经验汇集巨献!
|
|
* =========================================================
|
|
* Copy right 2019-2029 成都SAAS云科技有限公司, 保留所有权利。
|
|
* ----------------------------------------------
|
|
* 官方网址: https://www.gobuysaas.com
|
|
* =========================================================
|
|
*/
|
|
|
|
namespace addon\supermember\shop\controller;
|
|
|
|
use addon\supermember\model\MemberCard as MemberCardModel;
|
|
use addon\aliapp\model\CloudPay;
|
|
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', ''),
|
|
'level_logo' => input('level_logo', ''),
|
|
];
|
|
if(in_array($data['charge_type'],[2,3])){
|
|
$res =event('addMemberTemplate',$data,true);
|
|
if ($res&&$res[ 'code' ] < 0) {
|
|
return $res;
|
|
}else{
|
|
$data['template_id']=$res['data']['template_id'];
|
|
}
|
|
}
|
|
$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_logo' => input('level_logo', ''),
|
|
];
|
|
|
|
$level_id = input('level_id', 0);
|
|
if(in_array($data['charge_type'],[2,3])){
|
|
$level_info = $member_level_model->getMemberLevelInfo([ [ 'level_id', '=', $level_id ], [ 'site_id', '=', $this->site_id ] ]);
|
|
$data['site_id']=$this->site_id;
|
|
$data['level_id']=$level_id;
|
|
$res =event('addMemberTemplate',$data,true);
|
|
if ($res&&$res[ 'code' ] < 0) {
|
|
return $res;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// $rgb = $this->hex2rgb($data['bg_color']);
|
|
// $ali = new CloudPay();
|
|
//
|
|
// $aliData = [
|
|
// 'card_show_name' => $data['level_name'],
|
|
// 'bg_color' => 'rgb('.$rgb['r'].','.$rgb['g'].','.$rgb['b'].')',
|
|
// 'logo_id' => $ali->imageUpload($this->site_id, $data['level_logo'],'level_logo')['data']['image_id'],
|
|
// 'background_id' => $ali->imageUpload($this->site_id, $data['level_picture'],'level_picture')['data']['image_id'],
|
|
// ];
|
|
// $memberCardModel = new MemberCardModel();
|
|
// $template = $memberCardModel->alipayMarketingCardTemplateModify($this->site_id, $level_info['data']['alipay_marketing_card_template_id'], $aliData);
|
|
// if($template['code'] < 0) return $template;
|
|
// $data['alipay_marketing_card_template_id'] = $template['data']['template_id'];
|
|
// $formtemplateSet = $memberCardModel->alipayMarketingCardFormtemplateSet($this->site_id, $template['data']['template_id']);
|
|
// if($formtemplateSet['code'] < 0) return $formtemplateSet;
|
|
// $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');
|
|
}
|
|
}
|
|
|
|
public function memberCardAutoCreate(){
|
|
|
|
$site_list = model('site')->getList();
|
|
$resList = [];
|
|
foreach($site_list as $site){
|
|
$MemberCard = model('member_level')->getInfo([['site_id', '=', $site['site_id']],['alipay_marketing_card_template_id', '<>', '']]);
|
|
|
|
if($MemberCard == NULL){
|
|
|
|
$res = event('MemberCardAutoCreate',['site_id' => $site['site_id']]);
|
|
$resList[] = $res;
|
|
}
|
|
}
|
|
dd($resList);
|
|
return success(0,'success',[
|
|
'res_list' => $resList,
|
|
]);
|
|
}
|
|
|
|
} |