init
- 框架初始化 - 安装插件 - 修复PHP8.4报错
This commit is contained in:
83
application/admin/model/shopro/commission/Agent.php
Normal file
83
application/admin/model/shopro/commission/Agent.php
Normal file
@@ -0,0 +1,83 @@
|
||||
<?php
|
||||
|
||||
namespace app\admin\model\shopro\commission;
|
||||
|
||||
use app\admin\model\shopro\Common;
|
||||
use app\admin\model\shopro\user\User;
|
||||
|
||||
class Agent extends Common
|
||||
{
|
||||
protected $pk = 'user_id';
|
||||
|
||||
protected $name = 'shopro_commission_agent';
|
||||
|
||||
protected $type = [
|
||||
'become_time' => 'timestamp',
|
||||
'apply_info' => 'json',
|
||||
'child_agent_level_1' => 'json',
|
||||
'child_agent_level_all' => 'json',
|
||||
];
|
||||
protected $append = [
|
||||
'status_text',
|
||||
'pending_reward'
|
||||
];
|
||||
|
||||
// 分销商状态 AGENT_STATUS
|
||||
const AGENT_STATUS_NORMAL = 'normal'; // 正常
|
||||
const AGENT_STATUS_PENDING = 'pending'; // 审核中 不分佣、不打款、没有团队信息
|
||||
const AGENT_STATUS_FREEZE = 'freeze'; // 冻结 正常记录分佣、不打款,记录业绩和团队信息 冻结解除后立即打款
|
||||
const AGENT_STATUS_FORBIDDEN = 'forbidden'; // 禁用 不分佣、不记录业绩和团队信息
|
||||
const AGENT_STATUS_NEEDINFO = 'needinfo'; // 需要完善表单资料 临时状态
|
||||
const AGENT_STATUS_REJECT = 'reject'; // 审核驳回, 重新修改 临时状态
|
||||
const AGENT_STATUS_NULL = NULL; // 未满足成为分销商条件
|
||||
|
||||
|
||||
// 分销商升级锁 UPGRADE_LOCK
|
||||
const UPGRADE_LOCK_OPEN = 1; // 禁止分销商升级
|
||||
const UPGRADE_LOCK_CLOSE = 0; // 允许分销商升级
|
||||
|
||||
public function statusList()
|
||||
{
|
||||
return [
|
||||
'normal' => '正常',
|
||||
'pending' => '审核中',
|
||||
'freeze' => '冻结',
|
||||
'forbidden' => '禁用',
|
||||
'reject' => '拒绝'
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* 可用分销商
|
||||
*/
|
||||
public function scopeAvaliable($query)
|
||||
{
|
||||
return $query->where('status', 'in', [self::AGENT_STATUS_NORMAL, self::AGENT_STATUS_FREEZE]);
|
||||
}
|
||||
|
||||
public function user()
|
||||
{
|
||||
return $this->belongsTo(User::class, 'user_id', 'id')->field('id, nickname, avatar, mobile, total_consume, parent_user_id');
|
||||
}
|
||||
|
||||
public function levelInfo()
|
||||
{
|
||||
return $this->belongsTo(Level::class, 'level', 'level')->field(['level', 'name', 'image', 'commission_rules']);
|
||||
}
|
||||
|
||||
public function getPendingRewardAttr($value, $data)
|
||||
{
|
||||
$amount = Reward::pending()->where('agent_id', $data['user_id'])->sum('commission');
|
||||
return number_format($amount, 2, '.', '');
|
||||
}
|
||||
|
||||
public function levelStatusInfo()
|
||||
{
|
||||
return $this->belongsTo(Level::class, 'level_status', 'level');
|
||||
}
|
||||
|
||||
public function upgradeLevel()
|
||||
{
|
||||
return $this->belongsTo(Level::class, 'level_status', 'level');
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,47 @@
|
||||
<?php
|
||||
|
||||
namespace app\admin\model\shopro\commission;
|
||||
|
||||
use app\admin\model\shopro\Common;
|
||||
use app\admin\model\shopro\goods\Goods as GoodsModel;
|
||||
|
||||
class CommissionGoods extends Common
|
||||
{
|
||||
protected $pk = 'goods_id';
|
||||
|
||||
protected $name = 'shopro_commission_goods';
|
||||
|
||||
protected $autoWriteTimestamp = false;
|
||||
|
||||
// 分销状态
|
||||
const GOODS_COMMISSION_STATUS_OFF = 0; // 商品不参与分佣
|
||||
const GOODS_COMMISSION_STATUS_ON = 1; // 商品参与分佣
|
||||
const GOODS_COMMISSION_RULES_DEFAULT = 0; // 默认分销规则 只看系统分销商等级规则
|
||||
const GOODS_COMMISSION_RULES_SELF = 1; // 独立分销规则 等级规则对应多种规格规则
|
||||
const GOODS_COMMISSION_RULES_BATCH = 2; // 批量分销规则 只看保存的各分销商等级规则
|
||||
|
||||
protected $type = [
|
||||
'commission_rules' => 'json'
|
||||
];
|
||||
protected $append = [
|
||||
'status_text'
|
||||
];
|
||||
|
||||
public function statusList()
|
||||
{
|
||||
return [
|
||||
0 => '不参与',
|
||||
1 => '参与中'
|
||||
];
|
||||
}
|
||||
|
||||
public function getCommissionConfigAttr($value, $data)
|
||||
{
|
||||
return json_decode($value, true);
|
||||
}
|
||||
|
||||
public function goods()
|
||||
{
|
||||
return $this->belongsTo(GoodsModel::class, 'goods_id', 'id');
|
||||
}
|
||||
}
|
||||
20
application/admin/model/shopro/commission/Level.php
Normal file
20
application/admin/model/shopro/commission/Level.php
Normal file
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
|
||||
namespace app\admin\model\shopro\commission;
|
||||
|
||||
use app\admin\model\shopro\Common;
|
||||
|
||||
class Level extends Common
|
||||
{
|
||||
protected $pk = 'level';
|
||||
|
||||
protected $name = 'shopro_commission_level';
|
||||
|
||||
protected $autoWriteTimestamp = false;
|
||||
|
||||
protected $type = [
|
||||
'commission_rules' => 'json',
|
||||
'upgrade_rules' => 'json'
|
||||
];
|
||||
|
||||
}
|
||||
232
application/admin/model/shopro/commission/Log.php
Normal file
232
application/admin/model/shopro/commission/Log.php
Normal file
@@ -0,0 +1,232 @@
|
||||
<?php
|
||||
|
||||
namespace app\admin\model\shopro\commission;
|
||||
|
||||
use app\admin\model\shopro\Common;
|
||||
use addons\shopro\library\Operator;
|
||||
use app\admin\model\shopro\user\User as UserModel;
|
||||
|
||||
class Log extends Common
|
||||
{
|
||||
protected $name = 'shopro_commission_log';
|
||||
|
||||
protected $updateTime = false;
|
||||
|
||||
protected $append = [
|
||||
'event_text',
|
||||
'oper_type_text'
|
||||
];
|
||||
|
||||
/**
|
||||
* 添加分销记录
|
||||
*
|
||||
* @param object $agentId 分销商ID
|
||||
* @param string $event 事件类型
|
||||
* @param array $ext 扩展信息
|
||||
* @param object $oper 操作人
|
||||
* @param string $remark 自定义备注
|
||||
*
|
||||
*/
|
||||
public static function add($agentId, $event, $ext = [], $oper = NULL, $remark = '')
|
||||
{
|
||||
if ($remark === '') {
|
||||
switch ($event) {
|
||||
case 'agent':
|
||||
$remark = self::setAgentEvent($ext);
|
||||
break;
|
||||
case 'share':
|
||||
$remark = self::setShareEvent($ext);
|
||||
break;
|
||||
case 'bind':
|
||||
$remark = self::setBindEvent($ext);
|
||||
break;
|
||||
case 'order':
|
||||
$remark = self::setOrderEvent($ext);
|
||||
break;
|
||||
case 'reward':
|
||||
$remark = self::setRewardEvent($ext);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if ($remark !== '') {
|
||||
$oper = Operator::get($oper);
|
||||
$log = [
|
||||
'agent_id' => $agentId,
|
||||
'event' => $event,
|
||||
'remark' => $remark,
|
||||
'oper_type' => $oper['type'],
|
||||
'oper_id' => $oper['id'],
|
||||
'createtime' => time()
|
||||
];
|
||||
return self::create($log);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
public static function setAgentEvent($ext)
|
||||
{
|
||||
switch ($ext['type']) {
|
||||
case 'status': // 变更状态
|
||||
switch ($ext['value']) {
|
||||
case Agent::AGENT_STATUS_PENDING:
|
||||
$remark = "您的资料已提交,等待管理员审核";
|
||||
break;
|
||||
case Agent::AGENT_STATUS_FORBIDDEN:
|
||||
$remark = "您的账户已被禁用";
|
||||
break;
|
||||
case Agent::AGENT_STATUS_NORMAL:
|
||||
$remark = "恭喜您成为分销商";
|
||||
break;
|
||||
case Agent::AGENT_STATUS_FREEZE:
|
||||
$remark = "您的账户已被冻结";
|
||||
break;
|
||||
case Agent::AGENT_STATUS_REJECT:
|
||||
$remark = "您的申请已被拒绝,请重新申请";
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 'level': // 变更等级
|
||||
$remark = "您的等级已变更为[{$ext['level']['name']}]";
|
||||
break;
|
||||
case 'apply_info':
|
||||
$remark = '您的分销商资料信息已更新';
|
||||
break;
|
||||
}
|
||||
return $remark ?? "";
|
||||
}
|
||||
|
||||
public static function setShareEvent($ext)
|
||||
{
|
||||
$remark = "您已成为用户[{$ext['user']['nickname']}]的推荐人";
|
||||
return $remark;
|
||||
}
|
||||
|
||||
public static function setBindEvent($ext)
|
||||
{
|
||||
$remark = "";
|
||||
if ($ext['user']) {
|
||||
$remark = "用户[{$ext['user']['nickname']}]已绑定为您的推荐人";
|
||||
}
|
||||
return $remark;
|
||||
}
|
||||
|
||||
public static function setOrderEvent($ext)
|
||||
{
|
||||
switch ($ext['type']) {
|
||||
case 'paid':
|
||||
$goodsName = $ext['item']['goods_title'];
|
||||
if (mb_strlen($goodsName) > 9) {
|
||||
$goodsName = mb_substr($goodsName, 0, 5) . '...' . mb_substr($goodsName, -3);
|
||||
}
|
||||
if ($ext['order']['self_buy'] == 1) {
|
||||
$remark = "您购买了{$goodsName},为您新增业绩{$ext['order']['amount']}元, +1分销订单";
|
||||
} else {
|
||||
$remark = "用户{$ext['buyer']['nickname']}购买了{$goodsName},为您新增业绩{$ext['order']['amount']}元, +1分销订单";
|
||||
}
|
||||
break;
|
||||
case 'refund':
|
||||
$remark = "用户{$ext['buyer']['nickname']}已退款,扣除业绩{$ext['order']['amount']}元, -1分销订单";
|
||||
break;
|
||||
case 'admin':
|
||||
$remark = "扣除业绩{$ext['order']['amount']}元, -1分销订单";
|
||||
break;
|
||||
}
|
||||
return $remark;
|
||||
}
|
||||
|
||||
public static function setRewardEvent($ext)
|
||||
{
|
||||
$actionStr = '';
|
||||
$remark = '';
|
||||
switch ($ext['type']) {
|
||||
case 'paid':
|
||||
$actionStr = '支付成功';
|
||||
break;
|
||||
case 'confirm':
|
||||
$actionStr = '已确认收货';
|
||||
break;
|
||||
case 'finish':
|
||||
$actionStr = '已完成订单';
|
||||
break;
|
||||
}
|
||||
if ($actionStr !== '') {
|
||||
$remark = "用户{$actionStr}, ";
|
||||
}
|
||||
switch ($ext['reward']['status']) {
|
||||
case Reward::COMMISSION_REWARD_STATUS_PENDING:
|
||||
$rewardStatus = '待入账';
|
||||
break;
|
||||
case Reward::COMMISSION_REWARD_STATUS_ACCOUNTED:
|
||||
$rewardStatus = '已入账';
|
||||
break;
|
||||
case Reward::COMMISSION_REWARD_STATUS_BACK:
|
||||
$rewardStatus = '已扣除';
|
||||
break;
|
||||
case Reward::COMMISSION_REWARD_STATUS_CANCEL:
|
||||
$rewardStatus = '已取消';
|
||||
break;
|
||||
}
|
||||
$remark .= "您有{$ext['reward']['commission']}元佣金{$rewardStatus}";
|
||||
|
||||
return $remark;
|
||||
}
|
||||
|
||||
|
||||
public function eventList()
|
||||
{
|
||||
return [
|
||||
'agent' => '分销商',
|
||||
'order' => '订单',
|
||||
'reward' => '佣金',
|
||||
'share' => '推荐',
|
||||
'bind' => '绑定',
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
public function operTypeList()
|
||||
{
|
||||
return [
|
||||
'user' => '用户',
|
||||
'admin' => '管理员',
|
||||
'system' => '系统',
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 事件类型
|
||||
*
|
||||
* @param string $value
|
||||
* @param array $data
|
||||
* @return string
|
||||
*/
|
||||
public function getEventTextAttr($value, $data)
|
||||
{
|
||||
$value = $value ?: ($data['event'] ?? null);
|
||||
|
||||
$list = $this->eventList();
|
||||
return isset($list[$value]) ? $list[$value] : '-';
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 操作人类型
|
||||
*
|
||||
* @param string $value
|
||||
* @param array $data
|
||||
* @return string
|
||||
*/
|
||||
public function getOperTypeTextAttr($value, $data)
|
||||
{
|
||||
$value = $value ?: ($data['oper_type'] ?? null);
|
||||
|
||||
$list = $this->operTypeList();
|
||||
return isset($list[$value]) ? $list[$value] : '';
|
||||
}
|
||||
|
||||
public function agent()
|
||||
{
|
||||
return $this->belongsTo(UserModel::class, 'agent_id', 'id')->field('id, username, nickname, avatar, gender');
|
||||
}
|
||||
}
|
||||
116
application/admin/model/shopro/commission/Order.php
Normal file
116
application/admin/model/shopro/commission/Order.php
Normal file
@@ -0,0 +1,116 @@
|
||||
<?php
|
||||
|
||||
namespace app\admin\model\shopro\commission;
|
||||
|
||||
use app\admin\model\shopro\Common;
|
||||
use app\admin\model\shopro\user\User as UserModel;
|
||||
use app\admin\model\shopro\order\Order as OrderModel;
|
||||
use app\admin\model\shopro\order\OrderItem as OrderItemModel;
|
||||
|
||||
class Order extends Common
|
||||
{
|
||||
const COMMISSION_ORDER_STATUS_NO = 0; // 不计入
|
||||
const COMMISSION_ORDER_STATUS_YES = 1; // 已计入
|
||||
const COMMISSION_ORDER_STATUS_CANCEL = -1; // 已取消
|
||||
const COMMISSION_ORDER_STATUS_BACK = -2; // 已扣除
|
||||
|
||||
protected $name = 'shopro_commission_order';
|
||||
|
||||
protected $type = [
|
||||
'commission_rules' => 'json',
|
||||
'commission_time' => 'timestamp'
|
||||
];
|
||||
|
||||
protected $append = [
|
||||
'reward_event_text',
|
||||
'reward_type_text',
|
||||
'commission_order_status_text',
|
||||
'commission_reward_status_text'
|
||||
];
|
||||
|
||||
public function getRewardEventTextAttr($value, $data)
|
||||
{
|
||||
$value = $value ?: ($data['reward_event'] ?? '');
|
||||
$eventMap = [
|
||||
'paid' => '支付后结算',
|
||||
'confirm' => '收货后结算',
|
||||
'finish' => '订单完成结算',
|
||||
'admin' => '手动结算'
|
||||
];
|
||||
return isset($eventMap[$value]) ? $eventMap[$value] : '-';
|
||||
}
|
||||
|
||||
public function getRewardTypeTextAttr($value, $data)
|
||||
{
|
||||
$value = $value ?: ($data['reward_type'] ?? '');
|
||||
$eventMap = [
|
||||
'goods_price' => '商品价',
|
||||
'pay_price' => '实际支付价'
|
||||
];
|
||||
return isset($eventMap[$value]) ? $eventMap[$value] : '-';
|
||||
}
|
||||
|
||||
public function getCommissionOrderStatusTextAttr($value, $data)
|
||||
{
|
||||
$value = $value ?: ($data['commission_order_status'] ?? '');
|
||||
$eventMap = [
|
||||
-2 => '已扣除',
|
||||
-1 => '已取消',
|
||||
0 => '不计入',
|
||||
1 => '已计入'
|
||||
];
|
||||
return isset($eventMap[$value]) ? $eventMap[$value] : '-';
|
||||
}
|
||||
|
||||
public function getCommissionRewardStatusTextAttr($value, $data)
|
||||
{
|
||||
$value = $value ?: ($data['commission_reward_status'] ?? '');
|
||||
$eventMap = [
|
||||
-2 => '已退回',
|
||||
-1 => '已取消',
|
||||
0 => '未结算',
|
||||
1 => '已结算'
|
||||
];
|
||||
return isset($eventMap[$value]) ? $eventMap[$value] : '-';
|
||||
}
|
||||
|
||||
public function scopeBack($query)
|
||||
{
|
||||
return $query->where('commission_order_status', self::COMMISSION_ORDER_STATUS_BACK);
|
||||
}
|
||||
|
||||
public function scopeYes($query)
|
||||
{
|
||||
return $query->where('commission_order_status', self::COMMISSION_ORDER_STATUS_YES);
|
||||
}
|
||||
|
||||
public function scopeCancel($query)
|
||||
{
|
||||
return $query->where('commission_order_status', self::COMMISSION_ORDER_STATUS_CANCEL);
|
||||
}
|
||||
|
||||
public function buyer()
|
||||
{
|
||||
return $this->belongsTo(UserModel::class, 'buyer_id', 'id')->field('id, nickname, avatar, mobile');
|
||||
}
|
||||
|
||||
public function agent()
|
||||
{
|
||||
return $this->belongsTo(UserModel::class, 'agent_id', 'id')->field('id, nickname, avatar, mobile');
|
||||
}
|
||||
|
||||
public function order()
|
||||
{
|
||||
return $this->belongsTo(OrderModel::class, 'order_id', 'id');
|
||||
}
|
||||
|
||||
public function orderItem()
|
||||
{
|
||||
return $this->belongsTo(OrderItemModel::class, 'order_item_id', 'id');
|
||||
}
|
||||
|
||||
public function rewards()
|
||||
{
|
||||
return $this->hasMany(Reward::class, 'commission_order_id', 'id');
|
||||
}
|
||||
}
|
||||
112
application/admin/model/shopro/commission/Reward.php
Normal file
112
application/admin/model/shopro/commission/Reward.php
Normal file
@@ -0,0 +1,112 @@
|
||||
<?php
|
||||
|
||||
namespace app\admin\model\shopro\commission;
|
||||
|
||||
use app\admin\model\shopro\Common;
|
||||
use app\admin\model\shopro\user\User as UserModel;
|
||||
use app\admin\model\shopro\order\Order as OrderModel;
|
||||
use app\admin\model\shopro\order\OrderItem as OrderItemModel;
|
||||
|
||||
class Reward extends Common
|
||||
{
|
||||
|
||||
const COMMISSION_REWARD_STATUS_PENDING = 0; // 未结算、待入账
|
||||
const COMMISSION_REWARD_STATUS_ACCOUNTED = 1; // 已结算、已入账
|
||||
const COMMISSION_REWARD_STATUS_CANCEL = -1; // 已取消
|
||||
const COMMISSION_REWARD_STATUS_BACK = -2; // 已退回
|
||||
|
||||
protected $name = 'shopro_commission_reward';
|
||||
// 定义时间戳字段名
|
||||
protected $createTime = 'createtime';
|
||||
protected $updateTime = 'updatetime';
|
||||
protected $type = [
|
||||
'commission_rules' => 'json',
|
||||
'commission_time' => 'timestamp'
|
||||
];
|
||||
protected $append = [
|
||||
'status_text',
|
||||
'type_text'
|
||||
];
|
||||
|
||||
public function statusList()
|
||||
{
|
||||
return [
|
||||
-2 => '已退回',
|
||||
-1 => '已取消',
|
||||
0 => '未结算',
|
||||
1 => '已结算'
|
||||
];
|
||||
}
|
||||
|
||||
public function typeList()
|
||||
{
|
||||
return [
|
||||
'commission' => '佣金钱包',
|
||||
'money' => '余额钱包',
|
||||
'score' => '积分钱包',
|
||||
'bank' => '企业付款到银行卡',
|
||||
'change' => '企业付款到零钱'
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* 待入账
|
||||
*/
|
||||
public function scopePending($query)
|
||||
{
|
||||
return $query->where('status', self::COMMISSION_REWARD_STATUS_PENDING);
|
||||
}
|
||||
/**
|
||||
* 已退回
|
||||
*/
|
||||
public function scopeBack($query)
|
||||
{
|
||||
return $query->where('status', self::COMMISSION_REWARD_STATUS_BACK);
|
||||
}
|
||||
|
||||
/**
|
||||
* 已入账
|
||||
*/
|
||||
public function scopeAccounted($query)
|
||||
{
|
||||
return $query->where('status', self::COMMISSION_REWARD_STATUS_ACCOUNTED);
|
||||
}
|
||||
|
||||
/**
|
||||
* 已取消
|
||||
*/
|
||||
public function scopeCancel($query)
|
||||
{
|
||||
return $query->where('status', self::COMMISSION_REWARD_STATUS_CANCEL);
|
||||
}
|
||||
|
||||
/**
|
||||
* 待入账和已入账
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function scopeIncome($query)
|
||||
{
|
||||
return $query->where('status', 'in', [self::COMMISSION_REWARD_STATUS_ACCOUNTED, self::COMMISSION_REWARD_STATUS_PENDING]);
|
||||
}
|
||||
|
||||
public function buyer()
|
||||
{
|
||||
return $this->belongsTo(UserModel::class, 'buyer_id', 'id')->field('id, nickname, avatar, mobile');
|
||||
}
|
||||
|
||||
public function agent()
|
||||
{
|
||||
return $this->belongsTo(UserModel::class, 'agent_id', 'id')->field('id, nickname, avatar, mobile');
|
||||
}
|
||||
|
||||
public function order()
|
||||
{
|
||||
return $this->belongsTo(OrderModel::class, 'order_id', 'id');
|
||||
}
|
||||
|
||||
public function orderItem()
|
||||
{
|
||||
return $this->belongsTo(OrderItemModel::class, 'order_item_id', 'id');
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user