初始化项目:添加后端代码、ThinkPHP框架、前端资源
This commit is contained in:
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
namespace app\api\model\app\agent;
|
||||
|
||||
use think\Model;
|
||||
use think\Db;
|
||||
|
||||
/**
|
||||
* 分佣
|
||||
*/
|
||||
class Commission extends Model
|
||||
{
|
||||
|
||||
public function handle($order)
|
||||
{
|
||||
//计算佣金
|
||||
|
||||
|
||||
|
||||
$orderItemList = (new Item())->getItemList($order->order_no);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,111 @@
|
||||
<?php
|
||||
|
||||
namespace app\api\model\app\agent;
|
||||
|
||||
use think\Model;
|
||||
use think\Db;
|
||||
use app\api\model\app\agent\Level;
|
||||
class Condition extends Model
|
||||
{
|
||||
/**
|
||||
* 检查条件是否满足
|
||||
* @return void
|
||||
*/
|
||||
public static function checkCondition($userId,$type,$value){
|
||||
$value = floatval($value);
|
||||
$data = 0;
|
||||
switch ($type){
|
||||
case 'agent':
|
||||
$data = self::getAgent($userId);
|
||||
break;
|
||||
case 'customer':
|
||||
$data = self::getCustomer($userId);
|
||||
break;
|
||||
case 'customer_pay':
|
||||
$data = self::getCustomerPay($userId);
|
||||
break;
|
||||
case 'self_pay':
|
||||
$data = self::getSelfPay($userId);
|
||||
break;
|
||||
}
|
||||
|
||||
return $data >= $value;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取自购金额
|
||||
* @param $userId
|
||||
* @return void
|
||||
*/
|
||||
public static function getSelfPay($userId){
|
||||
$value = \app\common\model\order\Order::where([
|
||||
'status'=>\app\common\constant\order\Status::STATUS_SUCCESS,
|
||||
'user_id'=>$userId
|
||||
])->sum('real_pay_price');
|
||||
|
||||
if(!$value){
|
||||
return 0;
|
||||
}
|
||||
|
||||
return $value;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取推广金额
|
||||
* @param $userId
|
||||
* @return void
|
||||
*/
|
||||
public static function getCustomerPay($userId){
|
||||
$value = \app\common\model\app\agent\Order::where([
|
||||
'status'=>1,
|
||||
'beneficiary_user_id'=>$userId
|
||||
])->sum('brokerage_price');
|
||||
|
||||
if(!$value){
|
||||
return 0;
|
||||
}
|
||||
|
||||
return $value;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取客户数量
|
||||
* @param $userId
|
||||
* @return int
|
||||
*/
|
||||
public static function getAgent($userId){
|
||||
$value = \app\common\model\app\agent\Relation::where([
|
||||
'status'=>1,
|
||||
'parent_id'=>$userId
|
||||
])->count();
|
||||
|
||||
if(!$value){
|
||||
return 0;
|
||||
}
|
||||
|
||||
return $value;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取下级分销员
|
||||
* @param $userId
|
||||
* @return int
|
||||
*/
|
||||
public static function getCustomer($userId){
|
||||
|
||||
$value = \app\common\model\app\agent\Relation::alias('relation')
|
||||
->join(\app\common\model\app\agent\Member::getTable().' member','relation.user_id = member.user_id')
|
||||
->where([
|
||||
'relation.status'=>1,
|
||||
'member.status'=>1,
|
||||
'relation.parent_id'=>$userId
|
||||
])->count();
|
||||
|
||||
if(!$value){
|
||||
return 0;
|
||||
}
|
||||
|
||||
return $value;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
|
||||
namespace app\api\model\app\agent;
|
||||
|
||||
use think\Model;
|
||||
use think\Db;
|
||||
use app\api\model\app\agent\Level;
|
||||
class Goods extends Model
|
||||
{
|
||||
|
||||
|
||||
// 表名
|
||||
protected $name = 'app_agent_goods';
|
||||
|
||||
|
||||
// 自动写入时间戳字段
|
||||
protected $autoWriteTimestamp = 'integer';
|
||||
|
||||
// 定义时间戳字段名
|
||||
protected $createTime = 'createtime';
|
||||
protected $updateTime = false;
|
||||
protected $deleteTime = false;
|
||||
|
||||
//禁止uniacid绑定
|
||||
protected $uniacid = false;
|
||||
|
||||
// 追加属性
|
||||
protected $append = [
|
||||
];
|
||||
|
||||
public function course()
|
||||
{
|
||||
return $this->belongsTo('app\api\model\course\Course', 'goods_id', 'id', [], 'RIGHT')->setEagerlyType(0);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,156 @@
|
||||
<?php
|
||||
|
||||
namespace app\api\model\app\agent;
|
||||
|
||||
use think\Model;
|
||||
use think\Db;
|
||||
|
||||
/**
|
||||
* 分销等级
|
||||
*/
|
||||
class Level extends Model
|
||||
{
|
||||
|
||||
/**
|
||||
* 获取用户当前等级
|
||||
* @param $userId
|
||||
* @return void
|
||||
*/
|
||||
public function getUserLevel($userId){
|
||||
$levelList = \app\common\model\app\agent\Level::getLevelList();
|
||||
|
||||
if(empty($levelList)){
|
||||
return false;
|
||||
}
|
||||
|
||||
$memberModel = new \app\common\model\app\agent\Member();
|
||||
|
||||
$member = $memberModel->getMember($userId);
|
||||
|
||||
if(!$member || $member['status'] != 1){
|
||||
return false;
|
||||
}
|
||||
|
||||
foreach ($levelList as $item){
|
||||
|
||||
if( isset($item['id']) && $member['level'] == $item['id']){
|
||||
return $item;
|
||||
}
|
||||
}
|
||||
|
||||
return $levelList[0];
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取用户的下一等级
|
||||
* @param $userId
|
||||
* @return void
|
||||
*/
|
||||
public function getUserNextLevel($userId){
|
||||
$levelList = \app\common\model\app\agent\Level::getLevelList();
|
||||
|
||||
$memberModel = new \app\common\model\app\agent\Member();
|
||||
$member = $memberModel->getMember($userId);
|
||||
|
||||
if(!$member){
|
||||
return false;
|
||||
}
|
||||
|
||||
$levelIndex = 0;
|
||||
//当前的等级下标
|
||||
$nowLevelIndex = 0;
|
||||
|
||||
foreach ($levelList as $item){
|
||||
$data[] = $item;
|
||||
if( isset($item['id']) && $member['level'] == $item['id']){
|
||||
$nowLevelIndex = $levelIndex;
|
||||
}
|
||||
$levelIndex++;
|
||||
}
|
||||
|
||||
if(isset($data[$nowLevelIndex+1])){
|
||||
return $data[$nowLevelIndex+1];
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 检查升级
|
||||
* @param $userId
|
||||
* @return void
|
||||
*/
|
||||
public function handle($userId){
|
||||
|
||||
$nextLevelId = $this->checkLevelCondtion($userId);
|
||||
|
||||
if($nextLevelId !== false){
|
||||
$this->upLevel($userId,$nextLevelId);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查是否满足升级条件
|
||||
* @param $userId 用户ID
|
||||
* @return false 满足则返回升级等级ID 否则false
|
||||
*/
|
||||
public function checkLevelCondtion($userId)
|
||||
{
|
||||
$config = \app\common\model\app\Config::getConfig('agent');
|
||||
$upLevel = $this->getUserNextLevel($userId);
|
||||
|
||||
if(!$upLevel){
|
||||
return false;
|
||||
}
|
||||
//判断是否满足条件
|
||||
$satisfy = false;
|
||||
foreach ($upLevel['condition'] as $type => $item){
|
||||
if($item['status'] == 1){
|
||||
|
||||
//判断自定条件
|
||||
$temp = \app\api\model\app\agent\Condition::checkCondition($userId,$type,$item['value']);
|
||||
|
||||
if($config['upgrade'] == 2){
|
||||
//满足一个即可
|
||||
if($temp){
|
||||
$satisfy = true;
|
||||
break;
|
||||
}
|
||||
}else{
|
||||
//需要全部满足
|
||||
if(!$temp){
|
||||
$satisfy = false;
|
||||
break;
|
||||
}else{
|
||||
$satisfy = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if($satisfy){
|
||||
return $upLevel['id'];
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 升级
|
||||
* @param $userId 用户ID
|
||||
* @param $toLevelId 要升级的等级ID
|
||||
* @return void
|
||||
*/
|
||||
public function upLevel($userId,$toLevelId){
|
||||
|
||||
$memberModel = new \app\common\model\app\agent\Member();
|
||||
|
||||
return $memberModel->where([
|
||||
'user_id'=>$userId
|
||||
])->update([
|
||||
'level'=>$toLevelId
|
||||
]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,89 @@
|
||||
<?php
|
||||
|
||||
namespace app\api\model\app\agent;
|
||||
|
||||
use think\Model;
|
||||
use think\Db;
|
||||
class Money extends Model
|
||||
{
|
||||
|
||||
|
||||
// 表名
|
||||
protected $name = 'app_agent_member_money_log';
|
||||
|
||||
// 自动写入时间戳字段
|
||||
protected $autoWriteTimestamp = 'integer';
|
||||
|
||||
// 定义时间戳字段名
|
||||
protected $createTime = 'createtime';
|
||||
protected $updateTime = false;
|
||||
protected $deleteTime = false;
|
||||
|
||||
// 追加属性
|
||||
protected $append = [
|
||||
|
||||
];
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 变更资金
|
||||
* @param $type 资金类型
|
||||
* @param $userId 用户ID
|
||||
* @param $money 变更金额
|
||||
* @param $isFreeze 是否冻结 $type=money 有效
|
||||
* @param $memo 备注
|
||||
* @return bool
|
||||
*/
|
||||
public static function changeMoney($userId,$type,$money,$isFreeze = false,$memo = ''){
|
||||
$user = \app\common\model\app\agent\Member::lock(true)->where([
|
||||
'user_id'=>$userId
|
||||
])->find();
|
||||
if (!$user) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$before = $user->money;
|
||||
if($type == 'money'){
|
||||
$after = function_exists('bcadd') ? bcadd($user->money, $money, 2) : $user->money + $money;
|
||||
if($money > 0){
|
||||
$totalMoney = function_exists('bcadd') ? bcadd($user->money_total, $money, 2) : $user->money_total + $money;
|
||||
$changeParams['money_total'] = $totalMoney;
|
||||
}
|
||||
if($isFreeze){
|
||||
$freezeMoney = function_exists('bcadd') ? bcadd($user->money_freeze, ($money * -1), 2) : $user->money_freeze + ($money * -1);
|
||||
$changeParams['money_freeze'] = $freezeMoney;
|
||||
}
|
||||
}else{
|
||||
$after = $before;
|
||||
}
|
||||
|
||||
$totalMoney = function_exists('bcadd') ? bcadd($user->$type, $money, 2) : $user->$type + $money;
|
||||
$changeParams[$type] = $totalMoney;
|
||||
|
||||
$user->save($changeParams);
|
||||
//写入日志
|
||||
if($memo !== false){
|
||||
if($type != 'money'){
|
||||
$money = 0;
|
||||
}
|
||||
self::addLog($userId,$money,$before,$after,$memo);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加日志
|
||||
* @param $userId
|
||||
* @param $money
|
||||
* @param $before
|
||||
* @param $after
|
||||
* @param $memo
|
||||
* @return void
|
||||
*/
|
||||
public static function addLog($userId,$money,$before,$after,$memo = '')
|
||||
{
|
||||
self::create(['user_id' => $userId, 'money' => $money, 'before' => $before, 'after' => $after, 'memo' => $memo,'uniacid'=>UNIACID]);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,112 @@
|
||||
<?php
|
||||
|
||||
namespace app\api\model\app\agent;
|
||||
|
||||
use think\Model;
|
||||
|
||||
/**
|
||||
* 分销订单
|
||||
*/
|
||||
class Order extends Model
|
||||
{
|
||||
|
||||
// 表名,不含前缀
|
||||
protected $name = 'app_agent_order';
|
||||
// 自动写入时间戳字段
|
||||
protected $autoWriteTimestamp = false;
|
||||
// 定义时间戳字段名
|
||||
protected $createTime = false;
|
||||
protected $updateTime = false;
|
||||
// 追加属性
|
||||
protected $append = [
|
||||
];
|
||||
|
||||
/**
|
||||
* 获取统计数据
|
||||
* @param $userId
|
||||
* @return int[]
|
||||
*/
|
||||
public function getTotal($userId,$type='',$time=[]){
|
||||
|
||||
$data = [
|
||||
|
||||
'price_waiting'=>0,//待结算收益(元)
|
||||
'sales_waiting'=>0,//待结算销售额(元)
|
||||
'sales_success'=>0,//已结算销售额(元)
|
||||
|
||||
'price_success'=>0,//已结算收益/累计佣金(元)
|
||||
'price_goods'=>0,//商品佣金(元)
|
||||
'price_invite'=>0,//邀请佣金(元)
|
||||
'order_count'=>0//订单数
|
||||
];
|
||||
|
||||
$where = [
|
||||
'beneficiary_user_id'=>$userId
|
||||
];
|
||||
if($type){
|
||||
$where['type'] = $type;
|
||||
}
|
||||
|
||||
if($time){
|
||||
$where['createtime'] = ['BETWEEN',[$time['start'], $time['end']]];
|
||||
}
|
||||
|
||||
$data['order_count'] = self::where($where)->count();
|
||||
|
||||
$data['price_success'] = self::where($where)->where(['status'=>1])->sum('brokerage_price');
|
||||
$data['price_waiting'] = self::where($where)->where(['status'=>0])->sum('brokerage_price');
|
||||
$data['price_total'] = self::where($where)->sum('brokerage_price');
|
||||
//
|
||||
$data['sales_success'] = self::where($where)->where(['status'=>1])->sum('price');
|
||||
$data['sales_waiting'] = self::where($where)->where(['status'=>0])->sum('price');
|
||||
$data['sales_total'] = self::where($where)->sum('price');
|
||||
|
||||
$priceGoodsWhere = $priceInviteWhere = [
|
||||
'status'=>1
|
||||
];
|
||||
if(!isset($where['type'])){
|
||||
$priceInviteWhere['type'] = $priceGoodsWhere['type'] = 'commission';
|
||||
}
|
||||
|
||||
$data['price_goods'] = self::where($where)->where($priceGoodsWhere)->sum('brokerage_price');
|
||||
$data['price_invite'] = self::where($where)->where($priceInviteWhere)->sum('brokerage_price');
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取下级用户订单统计数据
|
||||
* @param $userId
|
||||
* @return void
|
||||
*/
|
||||
public function getChildUserOrder($userId){
|
||||
$data = [];
|
||||
$where = [
|
||||
'order_user_id'=>$userId
|
||||
];
|
||||
$data['price_success'] = self::where($where)->where(['status'=>1])->sum('brokerage_price');
|
||||
$data['price_waiting'] = self::where($where)->where(['status'=>0])->sum('brokerage_price');
|
||||
$data['order_count'] = self::where($where)->count();
|
||||
$data['order_success_count'] = self::where($where)->where(['status'=>1])->count();
|
||||
$data['order_waiting_count'] = self::where($where)->where(['status'=>0])->count();
|
||||
$lastOrder = self::where($where)->order('createtime','desc')->find();
|
||||
if($lastOrder){
|
||||
$data['order_last_time'] = $lastOrder['createtime'];
|
||||
}else{
|
||||
$data['order_last_time'] = '';
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
|
||||
public function item()
|
||||
{
|
||||
return $this->belongsTo('app\common\model\order\Item', 'order_item_id', 'id', [])->setEagerlyType(0);
|
||||
}
|
||||
|
||||
public function user()
|
||||
{
|
||||
return $this->belongsTo('app\common\model\User', 'order_user_id', 'id',[],'LEFT')->setEagerlyType(0);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
<?php
|
||||
|
||||
namespace app\api\model\app\agent;
|
||||
|
||||
use think\Model;
|
||||
|
||||
/**
|
||||
* 分销关系
|
||||
*/
|
||||
class Relation extends Model
|
||||
{
|
||||
|
||||
// 表名,不含前缀
|
||||
protected $name = 'app_agent_relation';
|
||||
// 自动写入时间戳字段
|
||||
protected $autoWriteTimestamp = false;
|
||||
// 定义时间戳字段名
|
||||
protected $createTime = false;
|
||||
protected $updateTime = false;
|
||||
// 追加属性
|
||||
protected $append = [
|
||||
];
|
||||
|
||||
public function user()
|
||||
{
|
||||
return $this->belongsTo('app\common\model\User', 'user_id', 'id')->setEagerlyType(0);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取统计数据
|
||||
* @param $userId
|
||||
* @return int[]
|
||||
*/
|
||||
public function getUserTotal($userId,$status='',$time=[]){
|
||||
|
||||
$data = [
|
||||
];
|
||||
|
||||
$where = [
|
||||
'parent_id'=>$userId
|
||||
];
|
||||
if($status){
|
||||
$where['status'] = $status;
|
||||
}
|
||||
|
||||
if($time){
|
||||
$where['createtime'] = ['BETWEEN',[$time['start'], $time['end']]];
|
||||
}
|
||||
|
||||
$data['count'] = self::where($where)->count(); //下级数量
|
||||
$data['normal'] = self::where($where)->where(['status'=>1])->count(); //正常数量
|
||||
$data['hidden'] = self::where($where)->where(['status'=>0])->count(); //解绑数量
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
|
||||
namespace app\api\model\app\agent;
|
||||
|
||||
use think\Model;
|
||||
use think\Db;
|
||||
use app\common\model\app\agent\Member;
|
||||
class Withdraw extends Model
|
||||
{
|
||||
|
||||
|
||||
// 表名
|
||||
protected $name = 'app_agent_withdraw';
|
||||
|
||||
// 自动写入时间戳字段
|
||||
protected $autoWriteTimestamp = 'integer';
|
||||
|
||||
// 定义时间戳字段名
|
||||
protected $createTime = 'createtime';
|
||||
protected $updateTime = 'updatetime';
|
||||
protected $deleteTime = false;
|
||||
|
||||
// 追加属性
|
||||
protected $append = [
|
||||
|
||||
];
|
||||
|
||||
|
||||
public function handle($userId,$money,$cardInfo=[]){
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
<?php
|
||||
|
||||
namespace app\api\model\app\agent;
|
||||
|
||||
use think\Model;
|
||||
|
||||
class WithdrawCard extends Model
|
||||
{
|
||||
|
||||
|
||||
// 表名
|
||||
protected $name = 'app_agent_withdraw_card';
|
||||
|
||||
// 自动写入时间戳字段
|
||||
protected $autoWriteTimestamp = 'integer';
|
||||
|
||||
// 定义时间戳字段名
|
||||
protected $createTime = 'updatetime';
|
||||
protected $updateTime = false;
|
||||
protected $deleteTime = false;
|
||||
|
||||
// 追加属性
|
||||
protected $append = [
|
||||
|
||||
];
|
||||
|
||||
public function getCard($userId){
|
||||
$data = self::where([
|
||||
'user_id'=>$userId
|
||||
])->field(['name','card_no','address'])->find();
|
||||
|
||||
if(!$data){
|
||||
return false;
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
<?php
|
||||
|
||||
namespace app\api\model\app\agent;
|
||||
|
||||
use think\Model;
|
||||
use think\Db;
|
||||
use app\common\model\app\agent\Member;
|
||||
|
||||
/**
|
||||
* 提现记录
|
||||
*/
|
||||
class WithdrawLog extends Model
|
||||
{
|
||||
|
||||
|
||||
// 表名
|
||||
protected $name = 'app_agent_withdraw_log';
|
||||
|
||||
// 自动写入时间戳字段
|
||||
protected $autoWriteTimestamp = 'integer';
|
||||
|
||||
// 定义时间戳字段名
|
||||
protected $createTime = 'updatetime';
|
||||
protected $updateTime = false;
|
||||
protected $deleteTime = false;
|
||||
|
||||
// 追加属性
|
||||
protected $append = [
|
||||
|
||||
];
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user