初始上传

This commit is contained in:
2026-04-04 17:27:12 +08:00
parent 4d80d28eb4
commit b7e11774ee
11191 changed files with 1588469 additions and 0 deletions

View File

@@ -0,0 +1,198 @@
<?php
/**
* Niushop商城系统 - 团队十年电商经验汇集巨献!
* =========================================================
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
* ----------------------------------------------
* 官方网址: https://www.niushop.com
* =========================================================
*/
namespace addon\fenxiao\shop\controller;
use addon\fenxiao\model\Config as ConfigModel;
use addon\fenxiao\model\FenxiaoLevel as FenxiaoLevelModel;
use addon\fenxiao\model\FenxiaoWithdraw;
use app\model\goods\Goods as GoodsModel;
use app\model\system\Document;
use app\shop\controller\BaseShop;
/**
* 分销设置
*/
class Config extends BaseShop
{
/**
* 分销基础设置
*/
public function basics()
{
$model = new ConfigModel();
if (request()->isJson()) {
$data = [
'level' => input('level', ''),//分销层级
'internal_buy' => input('internal_buy', ''),//分销内购
'is_examine' => input('is_examine', ''),//是否需要审核0关闭 1开启
'self_purchase_rebate' => input('self_purchase_rebate', ''),//是否开启分销商自购返佣0关闭 1开启
'fenxiao_condition' => input('fenxiao_condition', ''),//成为分销商条件(0无条件 1申请 2消费次数 3消费金额 4购买指定商品)
'consume_count' => input('consume_count', ''),//消费次数
'consume_money' => input('consume_money', ''), //消费金额
'goods_ids' => input('goods_ids', ''), //指定商品id
'consume_condition' => input('consume_condition', ''),//消费条件(1付款后 2订单完成)
'perfect_info' => input('perfect_info', ''),//完善资料
'child_condition' => input('child_condition', ''),//成为下线条件
'is_apply' => input('is_apply', ''),//是否开启分销申请0关闭 1开启
'is_commission_money' => input('is_commission_money', ''),//是否开启商品详情一级佣金0关闭 1开启
'one_rate' => input('one_rate', 0.00),
'two_rate' => input('two_rate', 0.00),
'three_rate' => input('three_rate', 0.00),
];
$res = $model->setFenxiaoBasicsConfig($data, 1, $this->site_id);
return $res;
} else {
$basics = $model->getFenxiaoBasicsConfig($this->site_id);
$this->assign('basics_info', $basics[ 'data' ][ 'value' ]);
$fenxiao = $model->getFenxiaoConfig($this->site_id)[ 'data' ][ 'value' ];
$fenxiao[ 'goods_list' ] = '';
if ($fenxiao[ 'fenxiao_condition' ] == 4) { // 购买指定商品
$goods_model = new GoodsModel();
$condition[] = [ 'goods_id', 'in', $fenxiao[ 'goods_ids' ] ];
$condition[] = [ 'site_id', '=', $this->site_id ];
$fenxiao[ 'goods_list' ] = $goods_model->getGoodsList($condition, 'goods_id,goods_name,goods_image,price,goods_stock')[ 'data' ];
}
$this->assign('fenxiao_info', $fenxiao);
$relation = $model->getFenxiaoRelationConfig($this->site_id);
$this->assign('relation_info', $relation[ 'data' ][ 'value' ]);
$level_model = new FenxiaoLevelModel();
$level_info = $level_model->getLevelInfo([ [ 'site_id', '=', $this->site_id ], [ 'is_default', '=', 1 ] ], 'one_rate,two_rate,three_rate')[ 'data' ];
$this->assign('level', $level_info);
return $this->fetch('config/basics');
}
}
/**
* 分销协议设置
*/
public function agreement()
{
$model = new ConfigModel();
if (request()->isJson()) {
$data = [
'is_agreement' => input('is_agreement', ''),//是否显示申请协议
'agreement_title' => input('agreement_title', ''),//协议标题
'agreement_content' => input('agreement_content', ''),//协议内容
'img' => input('img', ''),//申请页面顶部图片
];
$res = $model->setFenxiaoAgreementConfig($data, 1, $this->site_id);
return $res;
} else {
$agreement = $model->getFenxiaoAgreementConfig($this->site_id);
$this->assign('agreement_info', $agreement[ 'data' ][ 'value' ]);
$document_model = new Document();
$document = $document_model->getDocument([ [ 'site_id', '=', $this->site_id ], [ 'app_module', '=', 'shop' ], [ 'document_key', '=', 'FENXIAO_AGREEMENT'] ]);
$this->assign('document', $document[ 'data' ]);
return $this->fetch('config/agreement');
}
}
/**
* 分销结算设置
*/
public function settlement()
{
$model = new ConfigModel();
if (request()->isJson()) {
$transfer_type = '';
if (!empty(input('transfer_type'))) {
$transfer_type = implode(',', input('transfer_type'));
}
$data = [
'account_type' => input('account_type', ''),//佣金计算方式
'settlement_day' => input('settlement_day', ''),//天数
'withdraw' => input('withdraw', ''),//最低提现额度
'withdraw_rate' => input('withdraw_rate', ''),//佣金提现手续费
// 'min_no_fee' => input('min_no_fee', ''),//最低免手续费区间
// 'max_no_fee' => input('max_no_fee', ''),//最高免手续费区间
'withdraw_status' => input('withdraw_status', ''),//提现审核
'withdraw_type' => input('withdraw_type', ''),//提现方式,
'transfer_type' => $transfer_type,//转账方式,
'is_auto_transfer' => input('is_auto_transfer', 0),//是否自动转账 1 手动转账 2 自动转账
// 'min' => input('min', 0),//提现最低额度
'max' => input('max', 0),//提现最高额度
];
$res = $model->setFenxiaoSettlementConfig($data, 1, $this->site_id);
return $res;
} else {
// $settlement = $model->getFenxiaoSettlementConfig($this->site_id);
// $this->assign('settlement_info', $settlement[ 'data' ][ 'value' ]);
$withdraw_config = $model->getFenxiaoWithdrawConfig($this->site_id)[ 'data' ][ 'value' ] ?? [];
$this->assign('withdraw_info', $withdraw_config);
$fenxiao_withdraw_model = new FenxiaoWithdraw();
$transfer_type_list = $fenxiao_withdraw_model->getTransferType($this->site_id);
$transfer_type_list[ 'balance' ] = '余额';
$this->assign('transfer_type_list', $transfer_type_list);
return $this->fetch('config/settlement');
}
}
/**
* 分销文字设置
*/
public function words()
{
$model = new ConfigModel();
if (request()->isJson()) {
$data = [
'concept' => input('concept', ''),//分销概念
'fenxiao_name' => input('fenxiao_name', ''),//分销商名称
'withdraw' => input('withdraw', ''),//提现名称
'account' => input('account', ''),//佣金
'my_team' => input('my_team', ''),//我的团队
'child' => input('child', ''),//下线
];
$res = $model->setFenxiaoWordsConfig($data, 1, $this->site_id);
return $res;
} else {
$config_info = $model->getFenxiaoWordsConfig($this->site_id)[ 'data' ][ 'value' ];
$this->assign('config_info', $config_info);
return $this->fetch('config/words');
}
}
/**
* 活动规则
*/
public function promoteRule()
{
$document_model = new Document();
if (request()->isJson()) {
$content = input('content', '');
$res = $document_model->setDocument('分销推广规则', $content, [ [ 'site_id', '=', $this->site_id ], [ 'app_module', '=', 'shop' ], [ 'document_key', '=', 'FENXIAO_PROMOTE_RULE'] ]);
return $res;
} else {
$document = $document_model->getDocument([ [ 'site_id', '=', $this->site_id ], [ 'app_module', '=', 'shop' ], [ 'document_key', '=', 'FENXIAO_PROMOTE_RULE'] ]);
$this->assign('document', $document[ 'data' ]);
return $this->fetch('config/promote_rule');
}
}
}

View File

@@ -0,0 +1,695 @@
<?php
/**
* Niushop商城系统 - 团队十年电商经验汇集巨献!
* =========================================================
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
* ----------------------------------------------
* 官方网址: https://www.niushop.com
* =========================================================
*/
namespace addon\fenxiao\shop\controller;
use addon\fenxiao\model\Config as ConfigModel;
use addon\fenxiao\model\Fenxiao as FenxiaoModel;
use addon\fenxiao\model\FenxiaoAccount;
use addon\fenxiao\model\FenxiaoApply;
use addon\fenxiao\model\FenxiaoData;
use addon\fenxiao\model\FenxiaoLevel as FenxiaoLevelModel;
use addon\fenxiao\model\FenxiaoOrder as FenxiaoOrderModel;
use app\model\goods\Goods as GoodsModel;
use app\model\member\Member as MemberModel;
use app\shop\controller\BaseShop;
use think\App;
/**
* 分销设置
*/
class Fenxiao extends BaseShop
{
public function __construct(App $app = null)
{
$this->replace = [
'FENXIAO_JS' => __ROOT__ . '/addon/fenxiao/shop/view/public/js',
'FENXIAO_CSS' => __ROOT__ . '/addon/fenxiao/shop/view/public/css'
];
parent::__construct($app);
}
/**
* 分销概况
*/
public function index()
{
return $this->fetch('fenxiao/index');
}
public function stat()
{
$data = [
'account_data' => [],
'fenxiao_account' => 0.00,
'shop_commission' => [],
'shop_commission_end' => [],
'commission_money' => 0.00,
'fenxiao_apply_num' => 0,
'fenxiao_num' => 0,
'fenxiao_goods_num' => 0
];
$fenxiao_data_model = new FenxiaoData();
$account_data = $fenxiao_data_model->getFenxiaoAccountData($this->site_id);
$data['account_data'] = $account_data;
//累计佣金
$fenxiao_account = number_format($account_data[ 'account' ], 2, '.', '');
$data['fenxiao_account'] = $fenxiao_account;
//获取分销的总金额
$order_model = new FenxiaoOrderModel();
$commission = $order_model->getFenxiaoOrderInfo([ [ 'site_id', '=', $this->site_id ] ], 'sum(real_goods_money) as real_goods_money,sum(commission) as commission')[ 'data' ];
if ($commission[ 'real_goods_money' ] == null) {
$commission[ 'real_goods_money' ] = '0.00';
}
if ($commission[ 'commission' ] == null) {
$commission[ 'commission' ] = '0.00';
}
$data['shop_commission'] = $commission;
//获取已结算分销的总金额
$commission_end = $order_model->getFenxiaoOrderInfo([ [ 'site_id', '=', $this->site_id ], [ 'is_settlement', '=', 1 ], [ 'is_refund', '=', 0 ] ], 'sum(real_goods_money) as real_goods_money,sum(commission) as commission')[ 'data' ];
if ($commission_end[ 'real_goods_money' ] == null) {
$commission_end[ 'real_goods_money' ] = '0.00';
}
if ($commission_end[ 'commission' ] == null) {
$commission_end[ 'commission' ] = '0.00';
}
$data['shop_commission_end'] = $commission_end;
//获取已退款的佣金
$commission_refund = $order_model->getFenxiaoOrderInfo([ [ 'site_id', '=', $this->site_id ], [ 'is_refund', '=', 1 ] ], 'sum(real_goods_money) as real_goods_money,sum(commission) as commission')[ 'data' ];
if ($commission_refund[ 'real_goods_money' ] == null) {
$commission_refund[ 'real_goods_money' ] = '0.00';
}
if ($commission_refund[ 'commission' ] == null) {
$commission_refund[ 'commission' ] = '0.00';
}
$commission_money = round($commission[ 'commission' ], 2) - round($commission_end[ 'commission' ], 2) - round($commission_refund[ 'commission' ], 2);
$commission_money = number_format($commission_money, 2);
$data['commission_money'] = $commission_money;
$fenxiao_apply_num = $fenxiao_data_model->getFenxiaoApplyCount($this->site_id);
$data['fenxiao_apply_num'] = $fenxiao_apply_num;
//分销商人数
$fenxiao_num = $fenxiao_data_model->getFenxiaoCount($this->site_id);
$data['fenxiao_num'] = $fenxiao_num;
$goods_model = new GoodsModel();
$fenxiao_goods_num = $goods_model->getGoodsInfo([ [ 'site_id', '=', $this->site_id ], [ 'is_fenxiao', '=', 1 ], [ 'is_delete', '=', 0 ] ], 'count(goods_id) as fenxiao_goods_num')[ 'data' ];
$data['fenxiao_goods_num'] = $fenxiao_goods_num[ 'fenxiao_goods_num' ];
return $data;
}
/**
* 分销商列表
*/
public function lists()
{
$model = new FenxiaoModel();
if (request()->isJson()) {
$condition[] = [ 'f.site_id', '=', $this->site_id ];
$fenxiao_name = input('fenxiao_name', '');
$nickname = input('nickname', '');
$mobile = input('mobile', '');
$parent_name = input('parent_name', '');
$level_id = input('level_id', '');
$start_time = input('start_time', '');
$end_time = input('end_time', '');
$status = input('status', '');
if ($fenxiao_name) {
$condition[] = [ 'f.fenxiao_name', 'like', '%' . $fenxiao_name . '%' ];
}
if ($nickname) {
$condition[] = [ 'm.nickname', 'like', '%' . $nickname . '%' ];
}
if ($mobile) {
$condition[] = [ 'm.mobile', 'like', '%' . $mobile . '%' ];
}
if ($parent_name) {
$condition[] = [ 'pf.fenxiao_name', 'like', '%' . $parent_name . '%' ];
}
if ($level_id) {
$condition[] = [ 'f.level_id', '=', $level_id ];
}
if ($start_time && $end_time) {
$condition[] = [ 'f.create_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
} elseif (!$start_time && $end_time) {
$condition[] = [ 'f.create_time', '<=', date_to_time($end_time) ];
} elseif ($start_time && !$end_time) {
$condition[] = [ 'f.create_time', '>=', date_to_time($start_time) ];
}
if (!empty($status)) {
$condition[] = [ 'f.status', '=', $status ];
}
$page = input('page', 1);
$page_size = input('page_size', PAGE_LIST_ROWS);
$list = $model->getFenxiaoPageList($condition, $page, $page_size, 'f.create_time desc', $this->site_id);
return $list;
} else {
$level_model = new FenxiaoLevelModel();
$level_list = $level_model->getLevelList([ [ 'status', '=', 1 ], [ 'site_id', '=', $this->site_id ] ], 'level_id,level_name')[ 'data' ];
$this->assign('level_list', $level_list);
$config_model = new ConfigModel();
$basics = $config_model->getFenxiaoBasicsConfig($this->site_id)[ 'data' ][ 'value' ];
$this->assign('basics_info', $basics);
return $this->fetch('fenxiao/lists');
}
}
/**
* 添加分销商
*/
public function add()
{
if (request()->isJson()) {
$fenxiao_data = [
'site_id' => $this->site_id,
'fenxiao_name' => input('fenxiao_name', ''),//分销商名称
'level_id' => input('level_id', 0),//分销商等级
'parent' => input('fenxiao_id', 0),//上级分销商ID
'member_id' => input('member_id', 0),//关联会员ID
];
$apply_model = new FenxiaoApply();
return $apply_model->addFenxiao($fenxiao_data);
} else {
//获取分销商等级
$level_model = new FenxiaoLevelModel();
$level_list = $level_model->getLevelList([ [ 'status', '=', 1 ], [ 'site_id', '=', $this->site_id ] ], 'level_id,level_name')[ 'data' ];
$this->assign('level_list', $level_list);
//获取分销商列表
$fenxiao_model = new FenxiaoModel();
$condition[] = [ 'status', '=', '1' ];
$fenxiao_list = $fenxiao_model->getFenxiaoList($condition, 'fenxiao_id,fenxiao_name')[ 'data' ];
$this->assign('fenxiao_list', $fenxiao_list);
//获取会员列表
$member_model = new MemberModel();
$where[] = [ 'is_fenxiao', '=', '0' ];
$member_list = $member_model->getMemberList($where, 'member_id,nickname')[ 'data' ];
$this->assign('member_list', $member_list);
return $this->fetch('fenxiao/add');
}
}
/**
* 获取分销商列表
*/
public function getFenxiaoList()
{
$page_index = input('page', 1);
$page_size = input('page_size', PAGE_LIST_ROWS);
$fenxiao_search = input('fenxiao_search', '');
$condition = [];
$condition[] = [ 'mobile|fenxiao_name', 'like', '%' . $fenxiao_search . '%' ];
$condition[] = [ 'status', '=', 1 ];
$fenxiao_model = new FenxiaoModel();
$list = $fenxiao_model->getFenxiaoPageLists($condition, $page_index, $page_size, '', 'fenxiao_id,fenxiao_name,account');
return $list;
}
/**
* 获取会员列表
*/
public function getMemberList()
{
$page_index = input('page', 1);
$page_size = input('page_size', PAGE_LIST_ROWS);
$member_search = input('member_search', '');
$condition = [];
$condition[] = [ 'mobile|email|username|nickname', 'like', '%' . $member_search . '%' ];
$condition[] = [ 'site_id', '=', $this->site_id ];
$condition[] = [ 'is_fenxiao', '=', '0' ];
$member_model = new MemberModel();
$list = $member_model->getMemberPageList($condition, $page_index, $page_size, '', 'member_id,headimg,nickname,point,balance');
return $list;
}
/**
* 详情
*/
public function detail()
{
$fenxiao_id = input('fenxiao_id', '');
$model = new FenxiaoModel();
$fenxiao_leve_model = new FenxiaoLevelModel();
$condition[] = [ 'f.fenxiao_id', '=', $fenxiao_id ];
$info = $model->getFenxiaoDetailInfo($condition);
if (empty($info[ 'data' ])) $this->error('未获取到分销商数据', href_url('fenxiao://shop/fenxiao/lists'));
//团队人员数据
$info['data']['team_num'] = $model->getFenxiaoTeamNum($fenxiao_id, $this->site_id)['data'];
$fenxiao_level = $fenxiao_leve_model->getLevelInfo([ [ 'level_id', '=', $info[ 'data' ][ 'level_id' ] ] ]);
$this->assign('status', $model->fenxiao_status_zh);
$this->assign('level', $fenxiao_level[ 'data' ]);
$this->assign('info', $info[ 'data' ]);
$this->assign('fenxiao_id', $fenxiao_id);
$config_model = new ConfigModel();
$basics_config = $config_model->getFenxiaoBasicsConfig($this->site_id);
$this->assign('fenxiao_level_num', $basics_config[ 'data' ][ 'value' ][ 'level' ]);
return $this->fetch('fenxiao/fenxiao_detail');
}
/**
* 分销账户信息
*/
public function account()
{
$model = new FenxiaoModel();
$fenxiao_id = input('fenxiao_id', '');
$condition[] = [ 'f.fenxiao_id', '=', $fenxiao_id ];
$info = $model->getFenxiaoDetailInfo($condition);
if (empty($info[ 'data' ])) $this->error('未获取到分销商数据', href_url('fenxiao://shop/fenxiao/lists'));
$account = $info[ 'data' ][ 'account' ] - $info[ 'data' ][ 'account_withdraw_apply' ];
$info[ 'data' ][ 'account' ] = number_format($account, 2, '.', '');
$this->assign('fenxiao_info', $info[ 'data' ]);
if (request()->isJson()) {
$account_model = new FenxiaoAccount();
$page = input('page', 1);
$status = input('status', '');
$fenxiao_id = input('fenxiao_id', '');
$list_condition[] = [ 'fenxiao_id', '=', $fenxiao_id ];
if ($status) {
if ($status == 1) {
$list_condition[] = [ 'money', '>', 0 ];
} else {
$list_condition[] = [ 'money', '<', 0 ];
}
}
$start_time = input('start_time', '');
$end_time = input('end_time', '');
if ($start_time && $end_time) {
$list_condition[] = [ 'create_time', 'between', [ $start_time, $end_time ] ];
} elseif (!$start_time && $end_time) {
$list_condition[] = [ 'create_time', '<=', $end_time ];
} elseif ($start_time && !$end_time) {
$list_condition[] = [ 'create_time', '>=', $start_time ];
}
$page_size = input('page_size', PAGE_LIST_ROWS);
$list = $account_model->getFenxiaoAccountPageList($list_condition, $page, $page_size);
return $list;
}
}
/**
* 分销商团队
*/
public function team()
{
$fenxiao_id = input('fenxiao_id', 0);
$fenxiao_model = new FenxiaoModel();
if (request()->isJson()) {
$level = input('level', 1);
$page = input('page', 1);
$page_size = input('page_size', PAGE_LIST_ROWS);
$list = $fenxiao_model->getFenxiaoTeam($level, $fenxiao_id, $page, $page_size);
return $list;
}
}
/**
* 订单管理
*/
public function order()
{
$model = new FenxiaoOrderModel();
if (request()->isJson()) {
$page_index = input('page', 1);
$page_size = input('page_size', PAGE_LIST_ROWS);
$fenxiao_id = input('fenxiao_id', '');
$status = input('status', 0);
$condition[] = [ 'one_fenxiao_id|two_fenxiao_id|three_fenxiao_id', '=', $fenxiao_id ];
$search_text_type = input('search_text_type', 'goods_name');//订单编号/商品名称
$search_text = input('search_text', '');
if (!empty($search_text)) {
$condition[] = [ 'fo.' . $search_text_type, 'like', '%' . $search_text . '%' ];
}
if (in_array($status, [ 1, 2 ])) {
$condition[] = [ 'fo.is_settlement', '=', $status - 1 ];
}
//下单时间
$start_time = input('start_time', '');
$end_time = input('end_time', '');
if (!empty($start_time) && empty($end_time)) {
$condition[] = [ 'fo.create_time', '>=', date_to_time($start_time) ];
} elseif (empty($start_time) && !empty($end_time)) {
$condition[] = [ 'fo.create_time', '<=', date_to_time($end_time) ];
} elseif (!empty($start_time) && !empty(date_to_time($end_time))) {
$condition[] = [ 'fo.create_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
}
$list = $model->getFenxiaoOrderPage($condition, $page_index, $page_size);
return $list;
}
}
/**
* 订单详情
*/
public function orderDetail()
{
$fenxiao_order_model = new FenxiaoOrderModel();
$fenxiao_order_id = input('fenxiao_order_id', '');
$order_info = $fenxiao_order_model->getFenxiaoOrderDetail([ [ 'fenxiao_order_id', '=', $fenxiao_order_id ] ]);
$this->assign('order_info', $order_info[ 'data' ]);
return $this->fetch('fenxiao/order_detail');
}
/**
* 冻结
*/
public function frozen()
{
$fenxiao_id = input('fenxiao_id', '');
$model = new FenxiaoModel();
return $model->frozen($fenxiao_id);
}
/**
* 恢复正常
*/
public function unfrozen()
{
$fenxiao_id = input('fenxiao_id', '');
$model = new FenxiaoModel();
return $model->unfrozen($fenxiao_id);
}
/**
* 分销商申请列表
*/
public function apply()
{
$model = new FenxiaoApply();
if (request()->isJson()) {
$condition[] = [ 'fa.site_id', '=', $this->site_id ];
$condition[] = [ 'fa.status', '=', 1 ];
$condition[] = [ 'm.is_delete', '=', 0 ];
$fenxiao_name = input('fenxiao_name', '');
if ($fenxiao_name) {
$condition[] = [ 'fenxiao_name', 'like', '%' . $fenxiao_name . '%' ];
}
$nickname = input('nickname', '');
if ($nickname) {
$condition[] = [ 'm.nickname', 'like', '%' . $nickname . '%' ];
}
$mobile = input('mobile', '');
if ($mobile) {
$condition[] = [ 'm.mobile', 'like', '%' . $mobile . '%' ];
}
$level_id = input('level_id', '');
if ($level_id) {
$condition[] = [ 'fa.level_id', '=', $level_id ];
}
$create_start_time = input('create_start_time', '');
$create_end_time = input('create_end_time', '');
if ($create_start_time && $create_end_time) {
$condition[] = [ 'fa.create_time', 'between', [ strtotime($create_start_time), strtotime($create_end_time) ] ];
} elseif (!$create_start_time && $create_end_time) {
$condition[] = [ 'fa.create_time', '<=', strtotime($create_end_time) ];
} elseif ($create_start_time && !$create_end_time) {
$condition[] = [ 'fa.create_time', '>=', strtotime($create_start_time) ];
}
$rg_start_time = input('rg_start_time', '');
$rg_end_time = input('rg_end_time', '');
if ($rg_start_time && $rg_end_time) {
$condition[] = [ 'fa.reg_time', 'between', [ strtotime($rg_start_time), strtotime($rg_end_time) ] ];
} elseif (!$rg_start_time && $rg_end_time) {
$condition[] = [ 'fa.reg_time', '<=', strtotime($rg_end_time) ];
} elseif ($rg_start_time && !$rg_end_time) {
$condition[] = [ 'fa.reg_time', '>=', strtotime($rg_start_time) ];
}
$join = [
[ 'member m', 'fa.member_id = m.member_id', 'inner' ]
];
$field = 'fa.apply_id,fa.fenxiao_name,fa.parent,fa.member_id,fa.level_id,fa.level_name,fa.order_complete_money,fa.order_complete_num,fa.reg_time,fa.create_time,fa.status,m.mobile,m.nickname,m.headimg';
$page = input('page', 1);
$page_size = input('page_size', PAGE_LIST_ROWS);
$list = $model->getFenxiaoApplyPageList($condition, $page, $page_size, 'fa.create_time desc', $field, 'fa', $join);
return $list;
} else {
$level_model = new FenxiaoLevelModel();
$level_list = $level_model->getLevelList([ [ 'status', '=', 1 ] ], 'level_id,level_name');
$this->assign('level_list', $level_list[ 'data' ]);
return $this->fetch('fenxiao/apply');
}
}
/**
* 分销商申请通过
*/
public function applyPass()
{
$apply_id = input('apply_id');
$model = new FenxiaoApply();
$res = $model->pass($apply_id, $this->site_id);
return $res;
}
/**
* 分销商申请通过
*/
public function applyRefuse()
{
$apply_id = input('apply_id');
$model = new FenxiaoApply();
$res = $model->refuse($apply_id);
return $res;
}
/**
* 变更上下级
*/
public function change()
{
$member_id = input('member_id');
$model = new FenxiaoModel();
$member_model = new MemberModel();
//用户信息
$member_info = $member_model->getMemberInfo([ [ 'member_id', '=', $member_id ] ], 'fenxiao_id,is_fenxiao')[ 'data' ];
//获取分销信息
$fenxiao_info = $model->getFenxiaoInfo([ [ 'fenxiao_id', '=', $member_info[ 'fenxiao_id' ] ] ], 'parent');
//获取上级分销商信息
$parent_info = [];
if (!empty($fenxiao_info[ 'data' ])) {
$parent_info = $model->getFenxiaoInfo([ [ 'fenxiao_id', '=', $fenxiao_info[ 'data' ][ 'parent' ] ] ], 'fenxiao_id,fenxiao_name')['data'];
}
if (request()->isJson()) {
if ($member_info[ 'is_fenxiao' ] == 1) {
$condition[] = [ 'f.fenxiao_id', '<>', $member_info[ 'fenxiao_id' ] ];
$condition[] = [ 'f.parent', '<>', $member_info[ 'fenxiao_id' ] ];
}
$condition[] = [ 'f.site_id', '=', $this->site_id ];
$status = input('status', 1);
if ($status) {
$condition[] = [ 'f.status', '=', $status ];
}
$fenxiao_name = input('fenxiao_name', '');
if ($fenxiao_name) {
$condition[] = [ 'f.fenxiao_name', 'like', '%' . $fenxiao_name . '%' ];
}
$parent_name = input('parent_name', '');
if ($parent_name) {
$condition[] = [ 'pf.fenxiao_name', 'like', '%' . $parent_name . '%' ];
}
$level_id = input('level_id', '');
if ($level_id) {
$condition[] = [ 'f.level_id', '=', $level_id ];
}
$start_time = input('start_time', '');
$end_time = input('end_time', '');
if ($start_time && $end_time) {
$condition[] = [ 'f.create_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
} elseif (!$start_time && $end_time) {
$condition[] = [ 'f.create_time', '<=', date_to_time($end_time) ];
} elseif ($start_time && !$end_time) {
$condition[] = [ 'f.create_time', '>=', date_to_time($start_time) ];
}
if(!empty($parent_info)){
$order = \think\facade\Db::raw("IF(f.fenxiao_id = {$parent_info['fenxiao_id']}, 1, 2) asc,f.create_time desc");
}else{
$order = 'f.create_time desc';
}
$page = input('page', 1);
$page_size = input('page_size', PAGE_LIST_ROWS);
$list = $model->getFenxiaoPageList($condition, $page, $page_size, $order);
return $list;
} else {
$level_model = new FenxiaoLevelModel();
$level_list = $level_model->getLevelList([ [ 'status', '=', 1 ], [ 'site_id', '=', $this->site_id ] ], 'level_id,level_name');
$this->assign('level_list', $level_list[ 'data' ]);
$config_model = new ConfigModel();
$basics = $config_model->getFenxiaoBasicsConfig($this->site_id);
$this->assign('basics_info', $basics[ 'data' ][ 'value' ]);
$this->assign('member_id', $member_id);
$this->assign('parent_info', $parent_info);
$change_end_func = input('change_end_func', 'changeEnd');
$this->assign('change_end_func', $change_end_func);
return $this->fetch('fenxiao/change');
}
}
/**
* 确认变更
*/
public function confirmChange()
{
if (request()->isJson()) {
$member_id = input('member_id', '');
$parent = input('parent', '');
$type = input('type', '');
$model = new FenxiaoModel();
if ($type == 1) {
$res = $model->changeParentFenxiao($member_id, $parent);
} else {
$res = $model->cancelParentFenxiao($member_id);
}
return $res;
}
}
/**
* 会员详情
*/
public function memberInfo()
{
if (request()->isJson()) {
$member_id = input('member_id', '');
$condition[] = [ 'site_id', '=', $this->site_id ];
$condition[] = [ 'member_id', '=', $member_id ];
$member_model = new MemberModel();
$member_info_result = $member_model->getMemberInfo($condition);
$member_info = $member_info_result['data'];
if (empty($member_info)) return $member_model->error([], '账号不存在!');
return $member_info_result;
}
}
/**
* 修改分销商等级
*/
public function changeLevel()
{
$member_id = input('member_id', '');
$fenxiao_id = input('fenxiao_id', '');
if (request()->isJson()) {
$level_model = new FenxiaoLevelModel();
$fenxiao_model = new FenxiaoModel();
$fenxiao_info = $fenxiao_model->getFenxiaoInfo([ [ 'fenxiao_id', '=', $fenxiao_id ] ], 'member_id,level_id,level_name')[ 'data' ];
$condition[] = [ 'site_id', '=', $this->site_id ];
if (!empty($fenxiao_info)) {
$condition[] = [ 'level_id', '<>', $fenxiao_info[ 'level_id' ] ];
}
$lists = $level_model->getLevelPageList($condition, '1', PAGE_LIST_ROWS, 'level_num asc');
return $lists;
} else {
$config_model = new ConfigModel();
$basics = $config_model->getFenxiaoBasicsConfig($this->site_id);
$this->assign('basics_info', $basics[ 'data' ][ 'value' ]);
$this->assign('member_id', $member_id);
$this->assign('fenxiao_id', $fenxiao_id);
$change_end_func = input('change_end_func', 'changeEnd');
$this->assign('change_end_func', $change_end_func);
return $this->fetch('fenxiao/change_level');
}
}
/**
* 确认变更
*/
public function confirmChangeLevel()
{
if (request()->isJson()) {
$member_id = input('member_id', '');
$level_id = input('level_id', '');
$level_model = new FenxiaoLevelModel();
$level_data = $level_model->getLevelInfo([ [ 'level_id', '=', $level_id ] ], 'level_id,level_name')[ 'data' ];
$fenxiao_model = new FenxiaoModel();
$data = [
'level_id' => $level_data[ 'level_id' ],
'level_name' => $level_data[ 'level_name' ]
];
$res = $fenxiao_model->changeFenxiaoLevel($data, [ [ 'member_id', '=', $member_id ] ]);
return $res;
}
}
}

View File

@@ -0,0 +1,271 @@
<?php
/**
* Niushop商城系统 - 团队十年电商经验汇集巨献!
* =========================================================
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
* ----------------------------------------------
* 官方网址: https://www.niushop.com
* =========================================================
*/
namespace addon\fenxiao\shop\controller;
use addon\fenxiao\model\FenxiaoGoodsSku as FenxiaoGoodsSkuModel;
use addon\fenxiao\model\FenxiaoLevel as FenxiaoLevelModel;
use app\model\goods\Goods as GoodsModel;
use app\shop\controller\BaseShop;
use addon\fenxiao\model\FenxiaoGoods as FenxiaoGoodsModel;
use think\facade\Db;
use addon\fenxiao\model\Config as FenxiaoConfigModel;
/**
* 分销商品
*/
class Goods extends BaseShop
{
/**
* 分销等级列表
*/
public function lists()
{
$model = new GoodsModel();
if (request()->isJson()) {
$page_index = input('page', 1);
$page_size = input('page_size', PAGE_LIST_ROWS);
$condition = [
[ 'is_delete', '=', 0 ],
[ 'site_id', '=', $this->site_id ]
];
$search_text_type = input('search_text_type', 'goods_name');//店铺名称或者商品名称
$search_text = input('search_text', '');
$goods_class = input('goods_class', '');//商品种类
$goods_state = input('goods_state', '');//商品状态
$category_id = input('category_id', '');//分类ID
$is_fenxiao = input('is_fenxiao', '');
$start_sale = input('start_sale', 0);
$end_sale = input('end_sale', 0);
if (!empty($search_text)) {
$condition[] = [ $search_text_type, 'like', '%' . $search_text . '%' ];
}
if ($is_fenxiao !== '') {
$condition[] = [ 'is_fenxiao', '=', $is_fenxiao ];
}
if (!empty($start_sale)) $condition[] = [ 'sale_num', '>=', $start_sale ];
if (!empty($end_sale)) $condition[] = [ 'sale_num', '<=', $end_sale ];
if ($goods_class !== '') {
$condition[] = [ 'goods_class', '=', $goods_class ];
}
if ($goods_state !== '') {
$condition[] = [ 'goods_state', '=', $goods_state ];
}
if (!empty($category_id)) {
$condition[] = [ 'category_id', 'like', '%,' . $category_id . ',%' ];
}
$list = $model->getGoodsPageList($condition, $page_index, $page_size);
return $list;
} else {
return $this->fetch('goods/lists');
}
}
public function detail()
{
$goods_id = input('goods_id');
$goods_model = new GoodsModel();
$fenxiao_sku_model = new FenxiaoGoodsSkuModel();
$fenxiao_leve_model = new FenxiaoLevelModel();
$goods_info = $goods_model->getGoodsDetail($goods_id);
if (empty($goods_info[ 'data' ]) || $goods_info[ 'data' ][ 'site_id' ] != $this->site_id) $this->error('商品信息不存在');
$fenxiao_skus = $fenxiao_sku_model->getSkuList([ 'goods_id' => $goods_id ]);
$skus = [];
foreach ($fenxiao_skus[ 'data' ] as $fenxiao_sku) {
$skus[ $fenxiao_sku[ 'level_id' ] . '_' . $fenxiao_sku[ 'sku_id' ] ] = $fenxiao_sku;
}
$goods_info[ 'data' ][ 'fenxiao_skus' ] = $skus;
$goods_info[ 'data' ][ 'goods_image' ] = explode(',', $goods_info[ 'data' ][ 'goods_image' ]);
$fenxiao_level = $fenxiao_leve_model->getLevelList([ [ 'site_id', '=', $this->site_id ] ]);
$this->assign('fenxiao_level', $fenxiao_level[ 'data' ]);
$this->assign('goods_info', $goods_info[ 'data' ]);
$fenxiao_config_model = new FenxiaoConfigModel();
$fenxiao_config = $fenxiao_config_model->getFenxiaoBasicsConfig($this->site_id)[ 'data' ] ?? [];
$this->assign('fenxiao_config', $fenxiao_config[ 'value' ] ?? []);
return $this->fetch('goods/detail');
}
/**
* 添加活动
*/
public function config()
{
$goods_id = input('goods_id');
$goods_model = new GoodsModel();
$fenxiao_sku_model = new FenxiaoGoodsSkuModel();
$fenxiao_leve_model = new FenxiaoLevelModel();
$fenxiao_level = $fenxiao_leve_model->getLevelList([ [ 'site_id', '=', $this->site_id ], [ 'status', '=', 1 ] ], '*', 'level_num asc,one_rate asc');
$goods_info = $goods_model->getGoodsDetail($goods_id);
if (empty($goods_info[ 'data' ]) || $goods_info[ 'data' ][ 'site_id' ] != $this->site_id) $this->error('商品信息不存在');
$fenxiao_config_model = new FenxiaoConfigModel();
$fenxiao_config = $fenxiao_config_model->getFenxiaoBasicsConfig($this->site_id)[ 'data' ] ?? [];
$fenxiao_config = $fenxiao_config[ 'value' ] ?? [];
if (request()->isJson()) {
Db::startTrans();
try {
$fenxiao_type = input('fenxiao_type', 1);
$fenxiao_skus = input('fenxiao', []);
$is_fenxiao = input('is_fenxiao', 0);
$fenxiao_price = input('fenxiao_price', []);
$goods_data = [ 'is_fenxiao' => $is_fenxiao, 'fenxiao_type' => $fenxiao_type ];
if ($fenxiao_type == 2) {
$fenxiao_goods_sku_data = [];
foreach ($fenxiao_skus as $level_id => $level_data) {
foreach ($level_data[ 'sku_id' ] as $key => $sku_id) {
$fenxiao_total = 0;
$fenxiao_level = [ 'one', 'two', 'three' ];
foreach ($fenxiao_level as $level) {
$item_rate_array = $level_data[ $level . '_rate' ] ?? [];
$item_rate = $item_rate_array[ $key ] ?? 0;
$item_money_array = $level_data[ $level . '_money' ] ?? [];
$item_money = $item_money_array[ $key ] ?? 0;
$var_rate_name = $level . '_rate';
$$var_rate_name = $item_rate;
$var_money_name = $level . '_money';
$$var_money_name = $item_money;
if ($item_rate > 0) {
$fenxiao_total += $level_data[ 'sku_price' ][ $key ] * $item_rate / 100;
} elseif ($item_money > 0) {
$fenxiao_total += $item_money;
}
}
if (empty($fenxiao_total)) {
return error(-1, '分销金额不可以为零');
}
if ($level_data[ 'sku_price' ][ $key ] < $fenxiao_total) {
return error(-1, '分销总金额不能大于商品sku价格的100%');
}
if ($fenxiao_config[ 'level' ] < 3) {
$three_rate = 0;
$three_money = 0;
//通过分销设置的等级配置
if ($fenxiao_config[ 'level' ] < 2) {
$two_rate = 0;
$two_money = 0;
}
}
$fenxiao_sku = [
'goods_id' => $goods_id,
'level_id' => $level_id,
'sku_id' => $sku_id,
'one_rate' => $one_rate ?? 0,
'one_money' => $one_money ?? 0,
'two_rate' => $two_rate ?? 0,
'two_money' => $two_money ?? 0,
'three_rate' => $three_rate ?? 0,
'three_money' => $three_money ?? 0,
];
$fenxiao_goods_sku_data[] = $fenxiao_sku;
}
}
$fenxiao_sku_model->deleteSku([ 'goods_id' => $goods_id ]);
$fenxiao_sku_model->addSkuList($fenxiao_goods_sku_data);
}
if ($fenxiao_type == 1) {
$fenxiao_goods_sku_data = [];
foreach ($fenxiao_level[ 'data' ] as $level) {
foreach ($goods_info[ 'data' ][ 'sku_data' ] as $sku) {
$item_one_rate = $level[ 'one_rate' ] ?? 0;
$item_two_rate = $level[ 'two_rate' ] ?? 0;
$item_three_rate = $level[ 'three_rate' ] ?? 0;
//通过分销设置的等级配置
if ($fenxiao_config[ 'level' ] < 3) {
$item_three_rate = 0;
if ($fenxiao_config[ 'level' ] < 2) {
$item_two_rate = 0;
}
}
$fenxiao_sku = [
'goods_id' => $goods_id,
'level_id' => $level[ 'level_id' ],
'sku_id' => $sku[ 'sku_id' ],
'one_rate' => $item_one_rate,
'one_money' => 0,
'two_rate' => $item_two_rate,
'two_money' => 0,
'three_rate' => $item_three_rate,
'three_money' => 0,
];
$fenxiao_goods_sku_data[] = $fenxiao_sku;
}
}
$fenxiao_sku_model->deleteSku([ 'goods_id' => $goods_id ]);
$fenxiao_sku_model->addSkuList($fenxiao_goods_sku_data);
}
$fenxiao_goods_model = new FenxiaoGoodsModel();
$re = $fenxiao_goods_model->editGoodsFenxiao($goods_data, [ [ 'goods_id', '=', $goods_id ], [ 'site_id', '=', $this->site_id ] ]);
if ($is_fenxiao) {
foreach ($fenxiao_price as $sku_id => $item) {
if (empty($item) || $item < 0) $item = 0;
$res = model('goods_sku')->update([ 'fenxiao_price' => $item ], [ [ 'sku_id', '=', $sku_id ], [ 'site_id', '=', $this->site_id ] ]);
}
}
Db::commit();
return $re;
} catch (\Exception $e) {
Db::rollback();
return error(-1, $e->getMessage());
}
}
$fenxiao_skus = $fenxiao_sku_model->getSkuList([ 'goods_id' => $goods_id ]);
$skus = [];
foreach ($fenxiao_skus[ 'data' ] as $fenxiao_sku) {
$skus[ $fenxiao_sku[ 'level_id' ] . '_' . $fenxiao_sku[ 'sku_id' ] ] = $fenxiao_sku;
}
$goods_info[ 'data' ][ 'fenxiao_skus' ] = $skus;
$goods_info[ 'data' ][ 'goods_image' ] = explode(',', $goods_info[ 'data' ][ 'goods_image' ]);
$this->assign('fenxiao_level', $fenxiao_level[ 'data' ]);
$this->assign('goods_info', $goods_info[ 'data' ]);
$this->assign('fenxiao_config', $fenxiao_config);
return $this->fetch('goods/config');
}
/**
* 修改分销状态
*/
public function modify()
{
if (request()->isJson()) {
$fenxiao_goods_model = new FenxiaoGoodsModel();
$goods_id = input('goods_id');
$is_fenxiao = input('is_fenxiao', 0);
return $fenxiao_goods_model->modifyGoodsFenxiaoStatus($goods_id, $is_fenxiao ? 0 : 1, $this->site_id);
}
}
/**
* 批量设置是否参与分销
* @return array
*/
public function setGoodsIsFenxiao()
{
if (request()->isJson()) {
$fenxiao_goods_model = new FenxiaoGoodsModel();
$goods_ids = input('goods_ids', '');
$is_fenxiao = input('is_fenxiao', 0);
return $fenxiao_goods_model->modifyGoodsIsFenxiao($goods_ids, $is_fenxiao, $this->site_id);
}
}
}

View File

@@ -0,0 +1,160 @@
<?php
/**
* Niushop商城系统 - 团队十年电商经验汇集巨献!
* =========================================================
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
* ----------------------------------------------
* 官方网址: https://www.niushop.com
* =========================================================
*/
namespace addon\fenxiao\shop\controller;
use addon\fenxiao\model\Config as ConfigModel;
use addon\fenxiao\model\FenxiaoLevel as FenxiaoLevelModel;
use app\shop\controller\BaseShop;
use addon\fenxiao\model\Fenxiao;
/**
* 分销等级管理
*/
class Level extends BaseShop
{
/**
* 分销等级列表
*/
public function lists()
{
$model = new FenxiaoLevelModel();
$field = 'level_id,level_num,level_name,one_rate,two_rate,three_rate,status,create_time,is_default,one_fenxiao_order_num,one_fenxiao_order_money,one_fenxiao_total_order,order_num,order_money,one_child_num,one_child_fenxiao_num,upgrade_type';
if (request()->isJson()) {
$page = input('page', 1);
$page_size = input('page_size', PAGE_LIST_ROWS);
$list = $model->getLevelPageListInAdmin([ [ 'site_id', '=', $this->site_id ], ['is_default', '=', 0] ], $page, $page_size, 'level_num asc,one_rate asc', $field);
return $list;
} else {
//获取系统配置
$config_model = new ConfigModel();
$basics = $config_model->getFenxiaoBasicsConfig($this->site_id);
$this->assign("basics_info", $basics[ 'data' ][ 'value' ]);
return $this->fetch('level/lists');
}
}
/**
* 添加分销等级
*/
public function add()
{
$model = new FenxiaoLevelModel();
if (request()->isJson()) {
$data = [
'site_id' => $this->site_id,
'level_name' => input('level_name', ''),
'one_rate' => input('one_rate', ''),
'two_rate' => input('two_rate', ''),
'three_rate' => input('three_rate', ''),
'upgrade_type' => input('upgrade_type', ''),
'level_num' => input('level_num', 1),
'fenxiao_order_num' => input('fenxiao_order_num', ''),
'fenxiao_order_meney' => input('fenxiao_order_meney', ''),
'one_fenxiao_order_num' => input('one_fenxiao_order_num', ''),
'one_fenxiao_order_money' => input('one_fenxiao_order_money', ''),
'one_fenxiao_total_order' => input('one_fenxiao_total_order', ''),
'order_num' => input('order_num', ''),
'order_money' => input('order_money', ''),
'child_num' => input('child_num', ''),
'child_fenxiao_num' => input('child_fenxiao_num', ''),
'one_child_num' => input('one_child_num', ''),
'one_child_fenxiao_num' => input('one_child_fenxiao_num', ''),
];
$res = $model->addLevel($data);
return $res;
} else {
//获取系统配置
$config_model = new ConfigModel();
$basics = $config_model->getFenxiaoBasicsConfig($this->site_id);
$this->assign("basics_info", $basics[ 'data' ][ 'value' ]);
$level_weight = $model->getLevelList([ [ 'level_num', '<>', '' ], [ 'site_id', '=', $this->site_id ] ], 'level_num');
$level_weight = $level_weight[ 'data' ];
if (!empty($level_weight)) $level_weight = array_column($level_weight, 'level_num');
$this->assign('level_weight', $level_weight);
return $this->fetch('level/add');
}
}
/**
* 编辑分销等级
*/
public function edit()
{
$model = new FenxiaoLevelModel();
if (request()->isJson()) {
$data = [
'level_name' => input('level_name', ''),
'one_rate' => input('one_rate', ''),
'two_rate' => input('two_rate', ''),
'three_rate' => input('three_rate', ''),
'upgrade_type' => input('upgrade_type', ''),
'level_num' => input('level_num', 0),
'fenxiao_order_num' => input('fenxiao_order_num', ''),
'fenxiao_order_meney' => input('fenxiao_order_meney', ''),
'one_fenxiao_order_num' => input('one_fenxiao_order_num', ''),
'one_fenxiao_order_money' => input('one_fenxiao_order_money', ''),
'one_fenxiao_total_order' => input('one_fenxiao_total_order', ''),
'order_num' => input('order_num', ''),
'order_money' => input('order_money', ''),
'child_num' => input('child_num', ''),
'child_fenxiao_num' => input('child_fenxiao_num', ''),
'one_child_num' => input('one_child_num', ''),
'one_child_fenxiao_num' => input('one_child_fenxiao_num', ''),
];
$level_id = input('level_id', '');
$res = $model->editLevel($data, [ [ 'level_id', '=', $level_id ], [ 'site_id', '=', $this->site_id ] ]);
return $res;
} else {
$level_id = input('level_id', '');
$info = $model->getLevelInfo([ [ 'level_id', '=', $level_id ], [ 'site_id', '=', $this->site_id ] ]);
if (empty($info[ 'data' ])) $this->error('未获取到等级数据', href_url('fenxiao://shop/level/lists'));
$this->assign('info', $info[ 'data' ]);
//获取系统配置
$config_model = new ConfigModel();
$basics = $config_model->getFenxiaoBasicsConfig($this->site_id);
$this->assign("basics_info", $basics[ 'data' ][ 'value' ]);
$level_weight = $model->getLevelList([ [ 'level_num', '<>', '' ], [ 'level_id', '<>', $level_id ], [ 'site_id', '=', $this->site_id ] ], 'level_num');
$level_weight = $level_weight[ 'data' ];
if (!empty($level_weight)) $level_weight = array_column($level_weight, 'level_num');
$this->assign('level_weight', $level_weight);
}
return $this->fetch('level/edit');
}
/**
* 删除分销等级
*/
public function delete()
{
$model = new FenxiaoLevelModel();
$level_id = input('level_id', '');
$res = $model->deleteLevel($level_id, $this->site_id);
return $res;
}
}

View File

@@ -0,0 +1,36 @@
<?php
/**
* Niushop商城系统 - 团队十年电商经验汇集巨献!
* =========================================================
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
* ----------------------------------------------
* 官方网址: https://www.niushop.com
* =========================================================
*/
namespace addon\fenxiao\shop\controller;
use app\shop\controller\BaseShop;
/**
* 分销市场
*/
class Market extends BaseShop
{
/**
* 分销市场
*/
public function index()
{
$data = [
'site_id' => $this->site_id,
'name' => 'DIY_FENXIAO_MARKET',
'support_diy_view' => [ '', 'DIY_FENXIAO_MARKET' ],
];
$edit_view = event('DiyViewEdit', $data, true);
return $edit_view;
}
}

View File

@@ -0,0 +1,122 @@
<?php
/**
* Niushop商城系统 - 团队十年电商经验汇集巨献!
* =========================================================
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
* ----------------------------------------------
* 官方网址: https://www.niushop.com
* =========================================================
*/
namespace addon\fenxiao\shop\controller;
use addon\fenxiao\model\FenxiaoOrder;
use app\shop\controller\BaseShop;
use think\App;
/**
* 分销订单
*/
class Order extends BaseShop
{
public function __construct(App $app = null)
{
$this->replace = [
'FENXIAO_JS' => __ROOT__ . '/addon/fenxiao/shop/view/public/js',
'FENXIAO_CSS' => __ROOT__ . '/addon/fenxiao/shop/view/public/css'
];
parent::__construct($app);
}
/**
* 分销订单列表
*/
public function lists()
{
if (request()->isJson()) {
$model = new FenxiaoOrder();
$page_index = input('page', 1);
$page_size = input('page_size', PAGE_LIST_ROWS);
$status = input('status', 0);
$condition = [ [ 'fo.site_id', '=', $this->site_id ] ];
if ($status == 3) {
$condition[] = [ 'fo.is_refund', '=', 1 ];
}
if (in_array($status, [ 1, 2 ])) {
$condition[] = [ 'fo.is_settlement', '=', $status - 1 ];
}
$search_text_type = input('search_text_type', "sku_name");//商品名称/订单编号
$search_text = input('search_text', "");
if (!empty($search_text)) {
$condition[] = [ 'fo.' . $search_text_type, 'like', '%' . $search_text . '%' ];
}
//下单时间
$start_time = input('start_time', '');
$end_time = input('end_time', '');
if (!empty($start_time) && empty($end_time)) {
$condition[] = [ 'fo.create_time', '>=', date_to_time($start_time) ];
} elseif (empty($start_time) && !empty($end_time)) {
$condition[] = [ 'fo.create_time', '<=', date_to_time($end_time) ];
} elseif (!empty($start_time) && !empty(date_to_time($end_time))) {
$condition[] = [ 'fo.create_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
}
$list = $model->getFenxiaoOrderPage($condition, $page_index, $page_size);
return $list;
} else {
//订单状态
return $this->fetch('order/lists');
}
}
public function detail()
{
$fenxiao_order_model = new FenxiaoOrder();
$order_id = input('order_id', '');
$order_info = $fenxiao_order_model->getFenxiaoOrderDetail([ [ 'order_id', '=', $order_id ] ]);
if (empty($order_info[ 'data' ])) $this->error('未获取到订单数据', href_url('fenxiao://shop/order/lists'));
$this->assign('order_detail', $order_info[ 'data' ]);
return $this->fetch('order/detail');
}
/**
* 订单导出
*/
public function exportorder()
{
$model = new FenxiaoOrder();
$status = input('status', 0);
$fenxiao_order_id = input('order_ids', "");
$condition = [ [ 'fo.site_id', '=', $this->site_id ] ];
if ($status == 3) {
$condition[] = [ 'fo.is_refund', '=', 1 ];
}
if (in_array($status, [ 1, 2 ])) {
$condition[] = [ 'fo.is_settlement', '=', $status - 1 ];
}
$search_text_type = input('search_text_type', "goods_name");//商品名称/订单编号
$search_text = input('search_text', "");
if (!empty($search_text)) {
$condition[] = [ 'fo.' . $search_text_type, 'like', '%' . $search_text . '%' ];
}
//下单时间
$start_time = input('start_time', '');
$end_time = input('end_time', '');
if (!empty($start_time) && empty($end_time)) {
$condition[] = [ 'fo.create_time', '>=', date_to_time($start_time) ];
} elseif (empty($start_time) && !empty($end_time)) {
$condition[] = [ 'fo.create_time', '<=', date_to_time($end_time) ];
} elseif (!empty($start_time) && !empty(date_to_time($end_time))) {
$condition[] = [ 'fo.create_time', 'between', [ date_to_time($start_time), date_to_time($end_time) ] ];
}
if ($fenxiao_order_id) {
$condition = [];
$condition[] = [ "fo.fenxiao_order_id", "in", $fenxiao_order_id ];
}
$model->orderExport($condition);
return;
}
}

View File

@@ -0,0 +1,309 @@
<?php
/**
* Niushop商城系统 - 团队十年电商经验汇集巨献!
* =========================================================
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
* ----------------------------------------------
* 官方网址: https://www.niushop.com
* =========================================================
*/
namespace addon\fenxiao\shop\controller;
use addon\fenxiao\model\PosterTemplate as PosterTemplateModel;
use app\model\system\Site;
use app\model\upload\Upload;
use app\shop\controller\BaseShop;
use extend\Poster as PosterExtend;
/**
* 海报模板 控制器
*/
class Postertemplate extends BaseShop
{
/**
* 海报模板列表
* @return mixed
*/
public function lists()
{
if (request()->isJson()) {
$page_index = input('page', 1);
$page_size = input('page_size', PAGE_LIST_ROWS);
$search_text = input('search_text', '');
$condition = [ [ 'site_id', '=', $this->site_id ] ];
$condition[] = [ 'template_type', '=', 'fenxiao' ];
if (!empty($search_text)) {
$condition[] = [ 'poster_name', 'like', '%' . $search_text . '%' ];
}
$poster_template_model = new PosterTemplateModel();
$res = $poster_template_model->getPosterTemplatePageList($condition, $page_index, $page_size);
return $res;
} else {
return $this->fetch('poster_template/lists');
}
}
/**
* 添加海报模板
* @return mixed
*/
public function addPosterTemplate()
{
$poster_template_model = new PosterTemplateModel();
if (request()->isJson()) {
$default_template = PosterTemplateModel::DEFAULT_TEMPLATE;
$add_data = [];
$template_json = [];
foreach ($default_template as $field => $field_value) {
if ($field == 'template_json') {
foreach ($default_template[ 'template_json' ] as $json_field => $json_field_value) {
$template_json[ $json_field ] = input($json_field, $json_field_value);
}
} else {
$add_data[ $field ] = input($field, $field_value);
}
}
unset($add_data[ 'template_id' ]);
$add_data[ 'site_id' ] = $this->site_id;
$add_data[ 'template_json' ] = json_encode($template_json, true);
return $poster_template_model->addPosterTemplate($add_data);
} else {
//模板信息
$muban_id = input('muban_id', 0);
$muban_info = $poster_template_model->getMubanInfo([ [ 'muban_id', '=', $muban_id ] ])[ 'data' ];
if (!empty($muban_info)) {
$template_info = $muban_info;
$template_info[ 'template_json' ] = json_decode($template_info[ 'template_json' ], true);
$template_info[ 'template_id' ] = 0;
} else {
$template_info = PosterTemplateModel::DEFAULT_TEMPLATE;
}
$template_info[ 'template_json' ] = $poster_template_model->correctTemplateJsonData($template_info[ 'template_json' ])[ 'data' ];
$template_info = array_merge($template_info, $template_info[ 'template_json' ]);
unset($template_info[ 'template_json' ]);
$this->assign('template_info', $template_info);
//站点信息
$site_model = new Site();
$site_info = $site_model->getSiteInfo([ [ "site_id", "=", $this->site_id ] ], 'site_name,logo,logo_square')[ 'data' ];
$this->assign('site_data', $site_info);
return $this->fetch('poster_template/add');
}
}
/**
* 添加海报模板
* @return mixed
*/
public function editPosterTemplate()
{
$template_id = input('template_id', '');
$poster_template_model = new PosterTemplateModel();
if (request()->isJson()) {
$default_template = PosterTemplateModel::DEFAULT_TEMPLATE;
$edit_data = [];
$template_json = [];
foreach ($default_template as $field => $field_value) {
if ($field == 'template_json') {
foreach ($default_template[ 'template_json' ] as $json_field => $json_field_value) {
$template_json[ $json_field ] = input($json_field, $json_field_value);
}
} else {
$edit_data[ $field ] = input($field, $field_value);
}
}
unset($edit_data[ 'template_id' ]);
$edit_data[ 'site_id' ] = $this->site_id;
$edit_data[ 'template_json' ] = json_encode($template_json, true);
return $poster_data = $poster_template_model->editPosterTemplate($edit_data, [
[ 'template_id', '=', $template_id ],
[ 'site_id', '=', $this->site_id ]
]);
} else {
//模板信息
$template_info = $poster_template_model->getPosterTemplateInfo([
[ 'site_id', '=', $this->site_id ],
[ 'template_id', '=', $template_id ],
], '*')[ 'data' ];
if (empty($template_info)) $this->error('模板信息有误');
$template_info[ 'template_json' ] = json_decode($template_info[ 'template_json' ], true);
$template_info[ 'template_json' ] = $poster_template_model->correctTemplateJsonData($template_info[ 'template_json' ])[ 'data' ];
$template_info = array_merge($template_info, $template_info[ 'template_json' ]);
unset($template_info[ 'template_json' ]);
$this->assign('template_info', $template_info);
//站点信息
$site_model = new Site();
$site_info = $site_model->getSiteInfo([ [ "site_id", "=", $this->site_id ] ], 'site_name,logo,logo_square');
$this->assign('site_data', $site_info[ 'data' ]);
return $this->fetch('poster_template/add');
}
}
/**
* 获取海报模板预览
* @return mixed
*/
public function posterTemplateDetail()
{
$template_id = input('template_id', '');
$condition = [
[ 'template_id', '=', $template_id ],
[ 'site_id', '=', $this->site_id ]
];
$poster_template_model = new PosterTemplateModel();
$poster_data = $poster_template_model->getPosterTemplateInfo($condition);
if (empty($poster_data[ 'data' ])) {
return $poster_template_model->error(null, '海报数据有误');
}
$poster_data[ 'data' ][ 'template_json' ] = json_decode($poster_data[ 'data' ][ 'template_json' ], true);
$poster_data[ 'data' ][ 'template_json' ] = $poster_template_model->correctTemplateJsonData($poster_data[ 'data' ][ 'template_json' ])[ 'data' ];
$site_model = new Site();
$where = array (
[ "site_id", "=", $this->site_id ]
);
$site_info = $site_model->getSiteInfo($where);
$poster_width = 720;
$poster_height = 1280;
$poster = new PosterExtend($poster_width, $poster_height);
$ground = [
[
'action' => 'setBackground', // 设背景色
'data' => [ 255, 255, 255 ]
],
];
$fontRate = 0.725; // 20px 等于 14.5磅,换算比率 1px = 0.725磅
$option = [
[
'action' => 'imageCopy', // 写入二维码
'data' => [
getUrl() . '/public/static/img/caner_erweima.png',
$poster_data[ 'data' ][ 'qrcode_left' ] * 2,
$poster_data[ 'data' ][ 'qrcode_top' ] * 2,
$poster_data[ 'data' ][ 'qrcode_width' ] * 2,
$poster_data[ 'data' ][ 'qrcode_height' ] * 2,
'square',
0,
1
]
],
[
'action' => 'imageText', // 写入分享语
'data' => [
$poster_data[ 'data' ][ 'template_json' ][ 'share_content' ],
$poster_data[ 'data' ][ 'template_json' ][ 'share_content_font_size' ] * $fontRate * 2,
is_array($poster_data[ 'data' ][ 'template_json' ][ 'share_content_color' ]) ? $poster_data[ 'data' ][ 'template_json' ][ 'share_content_color' ] : hex2rgb($poster_data[ 'data' ][ 'template_json' ][ 'share_content_color' ]),
$poster_data[ 'data' ][ 'template_json' ][ 'share_content_left' ] * 2,
( $poster_data[ 'data' ][ 'template_json' ][ 'share_content_top' ] ) * 2,
$poster_data[ 'data' ][ 'template_json' ][ 'share_content_width' ] * 2,
1
]
]
];
$nickname_color = is_array($poster_data[ 'data' ][ 'template_json' ][ 'nickname_color' ]) ? $poster_data[ 'data' ][ 'template_json' ][ 'nickname_color' ] : hex2rgb($poster_data[ 'data' ][ 'template_json' ][ 'nickname_color' ]);
$member_option = [
[
'action' => 'imageCopy', // 写入用户头像
'data' => [
getUrl() . '/public/static/img/default_img/head.png',
$poster_data[ 'data' ][ 'template_json' ][ 'headimg_left' ] * 2,
$poster_data[ 'data' ][ 'template_json' ][ 'headimg_top' ] * 2,
$poster_data[ 'data' ][ 'template_json' ][ 'headimg_width' ] * 2,
$poster_data[ 'data' ][ 'template_json' ][ 'headimg_height' ] * 2,
!empty($poster_data[ 'data' ][ 'template_json' ][ 'headimg_shape' ]) ? $poster_data[ 'data' ][ 'template_json' ][ 'headimg_shape' ] : 'square',
0,
$poster_data[ 'data' ][ 'template_json' ][ 'headimg_is_show' ]
]
],
[
'action' => 'imageText', // 写入分享人昵称
'data' => [
'用户昵称',
$poster_data[ 'data' ][ 'template_json' ][ 'nickname_font_size' ] * $fontRate * 2,
$nickname_color,
$poster_data[ 'data' ][ 'template_json' ][ 'nickname_left' ] * 2,
( $poster_data[ 'data' ][ 'template_json' ][ 'nickname_top' ] ) * 2,
$poster_data[ 'data' ][ 'template_json' ][ 'nickname_width' ] * 2,
$poster_data[ 'data' ][ 'template_json' ][ 'nickname_height' ] * 2,
0,
$poster_data[ 'data' ][ 'template_json' ][ 'nickname_is_show' ]
]
],
];
$back_ground = [
[
'action' => 'imageCopy', // 写入背景图
'data' => [
img($poster_data[ 'data' ][ 'background' ]),
0,
0,
720,
1280,
'square',
0,
1
]
],
];
$option = array_merge($ground, $back_ground, $option, $member_option);
$option_res = $poster->create($option);
if (is_array($option_res)) return $option_res;
$pic_name = rand(10000, 99999);
$res = $option_res->jpeg('upload/poster/goods', 'fenxiao' . $pic_name);
if ($res[ 'code' ] < 0) {
return $res;
}
$upload = new Upload($this->site_id);
$cloud_res = $upload->fileCloud($res[ 'data' ][ 'path' ]);
return $cloud_res;
}
/**
* 删除海报模板
* @return mixed
*/
public function delPosterTemplate()
{
if (request()->isJson()) {
$template_ids = input('template_ids', '');
$condition = [
[ 'template_id', 'in', $template_ids ],
[ 'site_id', '=', $this->site_id ],
];
$poster_template_model = new PosterTemplateModel();
$res = $poster_template_model->deletePosterTemplate($condition);
return $res;
}
}
/**
* 编辑模板状态啊
* @return array
*/
public function editstatus()
{
if (request()->isJson()) {
$template_id = input('template_id', 0);
$template_status = input('template_status', 0);
$condition = [
[ 'template_id', 'in', $template_id ],
[ 'site_id', '=', $this->site_id ]
];
$data = [ 'template_status' => $template_status ];
$poster_template_model = new PosterTemplateModel();
$res = $poster_template_model->editPosterTemplate($data, $condition);
return $res;
}
}
}

View File

@@ -0,0 +1,242 @@
<?php
/**
* Niushop商城系统 - 团队十年电商经验汇集巨献!
* =========================================================
* Copy right 2019-2029 杭州牛之云科技有限公司, 保留所有权利。
* ----------------------------------------------
* 官方网址: https://www.niushop.com
* =========================================================
*/
namespace addon\fenxiao\shop\controller;
use addon\fenxiao\model\FenxiaoStat;
use addon\fenxiao\model\FenxiaoWithdraw as FenxiaoWithdrawModel;
use addon\wechatpay\model\Config as WechatPayConfig;
use app\shop\controller\BaseShop;
/**
* 分销等级管理
*/
class Withdraw extends BaseShop
{
/**
* 会员提现列表
* @return mixed
*/
public function lists()
{
$model = new FenxiaoWithdrawModel();
$transfer_type_list = $model->getTransferType($this->site_id);
if (request()->isJson()) {
$page = input('page', 1);
$page_size = input('page_size', PAGE_LIST_ROWS);
$withdraw_no = input('withdraw_no', '');
$start_date = input('start_date', '');
$end_date = input('end_date', '');
$status = input('status', 'all');//提现状态
$transfer_type = input('transfer_type', '');//提现转账方式
$fenxiao_name = input('fenxiao_name', '');//提现转账方式
$payment_start_date = input('payment_start_date', '');
$payment_end_date = input('payment_end_date', '');
$condition = [ [ 'fw.site_id', '=', $this->site_id ] ];
if (!empty($withdraw_no)) {
$condition[] = [ 'fw.withdraw_no', 'like', '%' . $withdraw_no . '%' ];
}
if (!empty($transfer_type)) {
$condition[] = [ 'fw.transfer_type', '=', $transfer_type ];
}
if ($status != "all") {
$condition[] = [ 'fw.status', '=', $status ];
}
if (!empty($fenxiao_name)) {
$condition[] = [ 'm.nickname|fw.fenxiao_name', '=', $fenxiao_name ];
}
if ($start_date != '' && $end_date != '') {
$condition[] = [ 'fw.create_time', 'between', [ strtotime($start_date), strtotime($end_date) ] ];
} else if ($start_date != '' && $end_date == '') {
$condition[] = [ 'fw.create_time', '>=', strtotime($start_date) ];
} else if ($start_date == '' && $end_date != '') {
$condition[] = [ 'fw.create_time', '<=', strtotime($end_date) ];
}
if ($payment_start_date != '' && $payment_end_date != '') {
$condition[] = [ 'fw.payment_time', 'between', [ strtotime($payment_start_date), strtotime($payment_end_date) ] ];
} else if ($payment_start_date != '' && $payment_end_date == '') {
$condition[] = [ 'fw.payment_time', '>=', strtotime($payment_start_date) ];
} else if ($payment_start_date == '' && $payment_end_date != '') {
$condition[] = [ 'fw.payment_time', '<=', strtotime($payment_end_date) ];
}
$order = 'fw.create_time desc';
$field = 'fw.id,fw.site_id,fw.withdraw_no,fw.member_id,fw.fenxiao_id,fw.fenxiao_name,fw.withdraw_type,fw.bank_name,fw.account_number,fw.realname,fw.mobile,fw.money,fw.withdraw_rate,
fw.withdraw_rate_money,fw.real_money,fw.`status`,fw.remark,fw.create_time,fw.payment_time,fw.modify_time,fw.transfer_type,fw.transfer_name,fw.transfer_remark,fw.transfer_no,
fw.transfer_account_no,fw.document,fw.audit_time,fw.refuse_reason,fw.applet_type,fw.fail_reason, m.headimg,m.nickname,m.mobile as member_mobile,m.headimg';
$join = [
[ 'member m', 'fw.member_id = m.member_id', 'left' ]
];
$list = $model->getFenxiaoWithdrawPageList($condition, $page, $page_size, $order, $field, 'fw', $join);
foreach ($list[ 'data' ][ 'list' ] as $k => $v) {
$list[ 'data' ][ 'list' ][ $k ][ 'transfer_type_name' ] = $transfer_type_list[ $v[ 'transfer_type' ] ];
}
return $list;
} else {
$this->assign('transfer_type_list', $transfer_type_list);
$fenxiao_stat_model = new FenxiaoStat();
$fenxiao_balance_sum = $fenxiao_stat_model->getFenxiaoAccountSum($this->site_id)[ 'data' ] ?? [];
$this->assign('fenxiao_balance_sum', $fenxiao_balance_sum);
//提现状态
$this->assign('status_list', $model->status);
$config_model = new WechatPayConfig();
$config = $config_model->getPayConfig($this->site_id)[ 'data' ][ 'value' ];;
$transfer_v3_type = $config['transfer_type'] == 'v3' && $config['transfer_v3_type'] == $config_model::TRANSFER_V3_TYPE_USER ;
$this->assign("transfer_v3_type",$transfer_v3_type);
return $this->fetch("withdraw/lists");
}
}
/**
* 提现记录详情
* @return mixed
*/
public function detail()
{
$fenxiao_withdraw_model = new FenxiaoWithdrawModel();
$params = array (
'id' => input('id', 0),
'site_id' => $this->site_id
);
$detail = $fenxiao_withdraw_model->getFenxiaoWithdrawDetail($params)[ 'data' ] ?? [];
if (empty($detail))
$this->error('找不到提现账户记录');
$this->assign('info', $detail);
return $this->fetch('withdraw/detail');
}
/**
* 同意
* @return array
*/
public function agree()
{
if (request()->isJson()) {
$id = input('id', 0);
$fenxiao_withdraw_model = new FenxiaoWithdrawModel();
$params = array (
'site_id' => $this->site_id,
"id" => $id,
);
$result = $fenxiao_withdraw_model->agree($params);
return $result;
}
}
/**
* 拒绝
* @return array
*/
public function refuse()
{
if (request()->isJson()) {
$id = input('id', 0);
$refuse_reason = input('refuse_reason', '');
$fenxiao_withdraw_model = new FenxiaoWithdrawModel();
$data = array (
"refuse_reason" => $refuse_reason,
'site_id' => $this->site_id,
'id' => $id
);
$result = $fenxiao_withdraw_model->refuse($data);
return $result;
}
}
/**
* 转账
*/
public function transferFinish()
{
if (request()->isJson()) {
$id = input('id', 0);
$certificate = input('certificate', '');
$certificate_remark = input('certificate_remark', '');
$fenxiao_withdraw_model = new FenxiaoWithdrawModel();
$data = array (
"id" => $id,
"site_id" => $this->site_id,
"certificate" => $certificate,
"certificate_remark" => $certificate_remark,
);
$result = $fenxiao_withdraw_model->transferFinish($data);
return $result;
}
}
/**
* 转账
*/
public function transfer()
{
if (request()->isJson()) {
$id = input('id', 0);
$fenxiao_withdraw_model = new FenxiaoWithdrawModel();
$result = $fenxiao_withdraw_model->transfer([ 'id' => $id, 'site_id' => $this->site_id ]);
return $result;
}
}
public function export()
{
$fenxiao_withdraw_model = new FenxiaoWithdrawModel();
$withdraw_no = input('withdraw_no', '');
$start_date = input('start_date', '');
$end_date = input('end_date', '');
$status = input('status', 'all');//提现状态
$transfer_type = input('transfer_type', '');//提现转账方式
$fenxiao_name = input('fenxiao_name', '');//提现转账方式
$payment_start_date = input('payment_start_date', '');
$payment_end_date = input('payment_end_date', '');
$condition = [ [ 'site_id', '=', $this->site_id ] ];
if (!empty($withdraw_no)) {
$condition[] = [ 'withdraw_no', 'like', '%' . $withdraw_no . '%' ];
}
if (!empty($transfer_type)) {
$condition[] = [ 'transfer_type', '=', $transfer_type ];
}
if ($status != "all") {
$condition[] = [ 'status', '=', $status ];
}
if (!empty($fenxiao_name)) {
$condition[] = [ 'fenxiao_name', '=', $fenxiao_name ];
}
if ($start_date != '' && $end_date != '') {
$condition[] = [ 'create_time', 'between', [ strtotime($start_date), strtotime($end_date) ] ];
} else if ($start_date != '' && $end_date == '') {
$condition[] = [ 'create_time', '>=', strtotime($start_date) ];
} else if ($start_date == '' && $end_date != '') {
$condition[] = [ 'create_time', '<=', strtotime($end_date) ];
}
if ($payment_start_date != '' && $payment_end_date != '') {
$condition[] = [ 'payment_time', 'between', [ strtotime($payment_start_date), strtotime($payment_end_date) ] ];
} else if ($payment_start_date != '' && $payment_end_date == '') {
$condition[] = [ 'payment_time', '>=', strtotime($payment_start_date) ];
} else if ($payment_start_date == '' && $payment_end_date != '') {
$condition[] = [ 'payment_time', '<=', strtotime($payment_end_date) ];
}
$order = 'create_time desc';
$fenxiao_withdraw_model->exportFenxiaoWithdraw($condition, $order, $this->site_id);
}
}