init
- 框架初始化 - 安装插件 - 修复PHP8.4报错
This commit is contained in:
26
application/admin/model/shopro/user/Account.php
Normal file
26
application/admin/model/shopro/user/Account.php
Normal file
@@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
namespace app\admin\model\shopro\user;
|
||||
|
||||
use app\admin\model\shopro\Common;
|
||||
|
||||
class Account extends Common
|
||||
{
|
||||
protected $name = 'shopro_user_account';
|
||||
protected $type = [];
|
||||
// 追加属性
|
||||
protected $append = [
|
||||
'type_text'
|
||||
];
|
||||
|
||||
protected $typeMap = [
|
||||
'wechat' => '微信零钱',
|
||||
'alipay' => '支付宝账户',
|
||||
'bank' => '银行卡转账'
|
||||
];
|
||||
|
||||
public function getTypeTextAttr($value, $data)
|
||||
{
|
||||
return $this->typeMap[$data['type']];
|
||||
}
|
||||
}
|
||||
24
application/admin/model/shopro/user/Address.php
Normal file
24
application/admin/model/shopro/user/Address.php
Normal file
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
namespace app\admin\model\shopro\user;
|
||||
|
||||
use app\admin\model\shopro\Common;
|
||||
|
||||
class Address extends Common
|
||||
{
|
||||
protected $name = 'shopro_user_address';
|
||||
|
||||
protected $type = [
|
||||
'is_default' => 'boolean'
|
||||
];
|
||||
|
||||
// 追加属性
|
||||
protected $append = [];
|
||||
|
||||
|
||||
public function scopeDefault($query)
|
||||
{
|
||||
return $query->where('is_default', 1);
|
||||
}
|
||||
|
||||
}
|
||||
308
application/admin/model/shopro/user/Coupon.php
Normal file
308
application/admin/model/shopro/user/Coupon.php
Normal file
@@ -0,0 +1,308 @@
|
||||
<?php
|
||||
|
||||
namespace app\admin\model\shopro\user;
|
||||
|
||||
use app\admin\model\shopro\Common;
|
||||
use app\admin\model\shopro\Coupon as CouponModel;
|
||||
use app\admin\model\shopro\user\User as UserModel;
|
||||
use app\admin\model\shopro\order\Order as OrderModel;
|
||||
|
||||
class Coupon extends Common
|
||||
{
|
||||
protected $name = 'shopro_user_coupon';
|
||||
|
||||
protected $type = [
|
||||
'use_time' => 'timestamp'
|
||||
];
|
||||
|
||||
// 追加属性
|
||||
protected $append = [
|
||||
'name',
|
||||
'type',
|
||||
'type_text',
|
||||
'use_scope',
|
||||
'use_scope_text',
|
||||
'items',
|
||||
'amount',
|
||||
'amount_text',
|
||||
'enough',
|
||||
'limit_num',
|
||||
'use_start_time',
|
||||
'use_end_time',
|
||||
'max_amount',
|
||||
'is_double_discount',
|
||||
'description',
|
||||
'status',
|
||||
'status_text',
|
||||
];
|
||||
|
||||
|
||||
public function statusList()
|
||||
{
|
||||
return [
|
||||
'used' => '已使用',
|
||||
'can_use' => '立即使用',
|
||||
'expired' => '已过期',
|
||||
'cannot_use' => '暂不可用',
|
||||
|
||||
'geted' => '未使用' // 包括 can_use 和 cannot_use
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
public function scopeGeted($query)
|
||||
{
|
||||
return $query->whereNull('use_time')->whereExists(function ($query) {
|
||||
$table_name = (new CouponModel)->getQuery()->getTable();
|
||||
$user_coupon_name = (new self)->getQuery()->getTable();
|
||||
|
||||
$query->table($table_name)->whereNull('deletetime')->whereIn('status', ['normal', 'hidden'])
|
||||
->where($user_coupon_name . '.coupon_id=' . $table_name . '.id')
|
||||
->where(function ($query) use ($user_coupon_name) {
|
||||
$query->where(function ($query) {
|
||||
$query->where('use_time_type', 'range')->where('use_end_time', '>=', time()); // 可用结束时间,大于当前时间,已经可用,或者暂不可用都算
|
||||
})->whereOr(function ($query) use ($user_coupon_name) {
|
||||
$query->where('use_time_type', 'days')
|
||||
->whereRaw($user_coupon_name . '.createtime + ((start_days + days) * 86400) >= ' . time()); // 可用结束结束时间大于当前时间
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
// 可以使用
|
||||
public function scopeCanUse($query)
|
||||
{
|
||||
return $query->whereNull('use_time')->whereExists(function ($query) {
|
||||
$table_name = (new CouponModel)->getQuery()->getTable();
|
||||
$user_coupon_name = (new self)->getQuery()->getTable();
|
||||
|
||||
$query->table($table_name)->whereNull('deletetime')->whereIn('status', ['normal', 'hidden'])
|
||||
->where($user_coupon_name . '.coupon_id=' . $table_name . '.id')
|
||||
->where(function ($query) use ($user_coupon_name) {
|
||||
$query->where(function ($query) {
|
||||
$query->where('use_time_type', 'range')->where('use_start_time', '<=', time())->where('use_end_time', '>=', time());
|
||||
})->whereOr(function ($query) use ($user_coupon_name) {
|
||||
$query->where('use_time_type', 'days')
|
||||
->whereRaw($user_coupon_name . '.createtime + (start_days * 86400) <= ' . time())
|
||||
->whereRaw($user_coupon_name . '.createtime + ((start_days + days) * 86400) >= ' . time());
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
// 暂不可用,还没到可使用日期
|
||||
public function scopeCannotUse($query)
|
||||
{
|
||||
return $query->whereNull('use_time')->whereExists(function ($query) {
|
||||
$table_name = (new CouponModel)->getQuery()->getTable();
|
||||
$user_coupon_name = (new self)->getQuery()->getTable();
|
||||
|
||||
$query->table($table_name)->whereNull('deletetime')->whereIn('status', ['normal', 'hidden'])
|
||||
->where($user_coupon_name . '.coupon_id=' . $table_name . '.id')
|
||||
->where(function ($query) use ($user_coupon_name) {
|
||||
$query->where(function ($query) {
|
||||
$query->where('use_time_type', 'range')->where('use_start_time', '>', time());
|
||||
})->whereOr(function ($query) use ($user_coupon_name) {
|
||||
$query->where('use_time_type', 'days')
|
||||
->whereRaw($user_coupon_name . '.createtime + (start_days * 86400) > ' . time());
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
// 已使用
|
||||
public function scopeUsed($query)
|
||||
{
|
||||
return $query->whereNotNull('use_time');
|
||||
}
|
||||
|
||||
// 未使用,但已过期
|
||||
public function scopeExpired($query)
|
||||
{
|
||||
return $query->whereNull('use_time')->whereExists(function ($query) {
|
||||
$table_name = (new CouponModel)->getQuery()->getTable();
|
||||
$user_coupon_name = (new self)->getQuery()->getTable();
|
||||
|
||||
$query->table($table_name)->whereNull('deletetime')->whereIn('status', ['normal', 'hidden'])
|
||||
->where($user_coupon_name . '.coupon_id=' . $table_name . '.id')
|
||||
->where(function ($query) use ($user_coupon_name) {
|
||||
$query->where(function ($query) {
|
||||
$query->where('use_time_type', 'range')->where('use_end_time', '<', time());
|
||||
})->whereOr(function ($query) use ($user_coupon_name) {
|
||||
$query->where('use_time_type', 'days')
|
||||
->whereRaw($user_coupon_name . '.createtime + ((start_days + days) * 86400) < ' . time());
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
// 未使用,但已过期,或者已使用
|
||||
public function scopeInvalid($query)
|
||||
{
|
||||
return $query->where(function ($query) {
|
||||
$query->whereNotNull('use_time')->whereOr(function ($query) {
|
||||
$query->whereNull('use_time')->whereExists(function ($query) {
|
||||
$table_name = (new CouponModel)->getQuery()->getTable();
|
||||
$user_coupon_name = (new self)->getQuery()->getTable();
|
||||
|
||||
$query->table($table_name)->whereNull('deletetime')->whereIn('status', ['normal', 'hidden'])
|
||||
->where($user_coupon_name . '.coupon_id=' . $table_name . '.id')
|
||||
->where(function ($query) use ($user_coupon_name) {
|
||||
$query->where(function ($query) {
|
||||
$query->where('use_time_type', 'range')->where('use_end_time', '<', time());
|
||||
})->whereOr(function ($query) use ($user_coupon_name) {
|
||||
$query->where('use_time_type', 'days')
|
||||
->whereRaw($user_coupon_name . '.createtime + ((start_days + days) * 86400) < ' . time());
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
public function getNameAttr($value, $data)
|
||||
{
|
||||
return $this->coupon ? $this->coupon->name : '';
|
||||
}
|
||||
|
||||
public function getTypeAttr($value, $data)
|
||||
{
|
||||
return $this->coupon ? $this->coupon->type : '';
|
||||
}
|
||||
|
||||
public function getUseScopeAttr($value, $data)
|
||||
{
|
||||
return $this->coupon ? $this->coupon->use_scope : '';
|
||||
}
|
||||
|
||||
public function getItemsAttr($value, $data)
|
||||
{
|
||||
return $this->coupon ? $this->coupon->items : '';
|
||||
}
|
||||
|
||||
public function getAmountAttr($value, $data)
|
||||
{
|
||||
return $this->coupon ? $this->coupon->amount : '';
|
||||
}
|
||||
|
||||
|
||||
public function getEnoughAttr($value, $data)
|
||||
{
|
||||
return $this->coupon ? $this->coupon->enough : '';
|
||||
}
|
||||
|
||||
public function getLimitNumAttr($value, $data)
|
||||
{
|
||||
return $this->coupon ? $this->coupon->limit_num : '';
|
||||
}
|
||||
|
||||
public function getUseStartTimeAttr($value, $data)
|
||||
{
|
||||
if ($this->coupon) {
|
||||
if ($this->coupon->use_time_type == 'days') {
|
||||
return date('Y-m-d H:i:s', $data['createtime'] + ($this->coupon->start_days * 86400));
|
||||
}
|
||||
|
||||
return $this->coupon->use_start_time;
|
||||
}
|
||||
}
|
||||
|
||||
public function getUseEndTimeAttr($value, $data)
|
||||
{
|
||||
if ($this->coupon) {
|
||||
if ($this->coupon->use_time_type == 'days') {
|
||||
return date('Y-m-d H:i:s', $data['createtime'] + (($this->coupon->start_days + $this->coupon->days) * 86400));
|
||||
}
|
||||
|
||||
return $this->coupon->use_end_time;
|
||||
}
|
||||
}
|
||||
|
||||
public function getMaxAmountAttr($value, $data)
|
||||
{
|
||||
return $this->coupon ? $this->coupon->max_amount : 0;
|
||||
}
|
||||
|
||||
public function getIsDoubleDiscountAttr($value, $data)
|
||||
{
|
||||
return $this->coupon ? $this->coupon->is_double_discount : 0;
|
||||
}
|
||||
|
||||
public function getDescriptionAttr($value, $data)
|
||||
{
|
||||
return $this->coupon ? $this->coupon->description : '';
|
||||
}
|
||||
|
||||
public function getUseScopeTextAttr($value, $data)
|
||||
{
|
||||
return $this->coupon ? $this->coupon->use_scope : 0;
|
||||
}
|
||||
|
||||
public function getAmountTextAttr($value, $data)
|
||||
{
|
||||
return $this->coupon ? $this->coupon->amount_text : 0;
|
||||
}
|
||||
|
||||
public function getItemsValueAttr($value, $data)
|
||||
{
|
||||
return $this->coupon ? $this->coupon->items_value : 0;
|
||||
}
|
||||
|
||||
public function getTypeTextAttr($value, $data)
|
||||
{
|
||||
return $this->coupon ? $this->coupon->type_text : 0;
|
||||
}
|
||||
|
||||
|
||||
// 我的优惠券使用状态
|
||||
public function getStatusAttr($value, $data)
|
||||
{
|
||||
if ($data['use_time']) {
|
||||
$status = 'used';
|
||||
} else {
|
||||
if ($this->use_start_time <= date('Y-m-d H:i:s') && $this->use_end_time >= date('Y-m-d H:i:s')) {
|
||||
$status = 'can_use';
|
||||
} else if ($this->use_end_time <= date('Y-m-d H:i:s')) {
|
||||
$status = 'expired';
|
||||
} else {
|
||||
// 未到使用日期
|
||||
$status = 'cannot_use';
|
||||
}
|
||||
}
|
||||
|
||||
return $status;
|
||||
}
|
||||
|
||||
public function getStatusTextAttr($value, $data)
|
||||
{
|
||||
$value = $value ?: ($this->status ?? '');
|
||||
|
||||
if (strpos(request()->url(), 'addons/shopro') === false) {
|
||||
$value = in_array($value, ['can_use', 'cannot_use']) ? 'geted' : $value; // 后台,可以使用和咱不可用 合并
|
||||
}
|
||||
|
||||
$list = $this->statusList();
|
||||
return isset($list[$value]) ? $list[$value] : '';
|
||||
}
|
||||
|
||||
|
||||
public function coupon()
|
||||
{
|
||||
return $this->belongsTo(CouponModel::class, 'coupon_id');
|
||||
}
|
||||
|
||||
public function user()
|
||||
{
|
||||
return $this->belongsTo(User::class, 'user_id');
|
||||
}
|
||||
|
||||
public function order()
|
||||
{
|
||||
return $this->belongsTo(OrderModel::class, 'use_order_id');
|
||||
}
|
||||
}
|
||||
62
application/admin/model/shopro/user/GoodsLog.php
Normal file
62
application/admin/model/shopro/user/GoodsLog.php
Normal file
@@ -0,0 +1,62 @@
|
||||
<?php
|
||||
|
||||
namespace app\admin\model\shopro\user;
|
||||
|
||||
use app\admin\model\shopro\Common;
|
||||
use app\admin\model\shopro\goods\Goods;
|
||||
|
||||
class GoodsLog extends Common
|
||||
{
|
||||
protected $name = 'shopro_user_goods_log';
|
||||
|
||||
// 追加属性
|
||||
protected $append = [
|
||||
|
||||
];
|
||||
|
||||
|
||||
/**
|
||||
* 添加浏览记录
|
||||
*
|
||||
* @param object $user
|
||||
* @param object $goods
|
||||
* @return void
|
||||
*/
|
||||
public static function addView($user, $goods)
|
||||
{
|
||||
if ($user) {
|
||||
$view = self::views()->where('user_id', $user->id)->where('goods_id', $goods->id)->find();
|
||||
if ($view) {
|
||||
$view->updatetime = time();
|
||||
$view->save();
|
||||
} else {
|
||||
$view = new self();
|
||||
$data = [
|
||||
'goods_id' => $goods->id,
|
||||
'user_id' => $user->id,
|
||||
'type' => 'views'
|
||||
];
|
||||
$view->save($data);
|
||||
}
|
||||
}
|
||||
// 增加商品浏览量
|
||||
Goods::where('id', $goods['id'])->update(['views' => \think\Db::raw('views+1')]);
|
||||
}
|
||||
|
||||
public function scopeFavorite($query)
|
||||
{
|
||||
return $query->where('type', 'favorite');
|
||||
}
|
||||
|
||||
|
||||
public function scopeViews($query) // view 和底层方法冲突了
|
||||
{
|
||||
return $query->where('type', 'views');
|
||||
}
|
||||
|
||||
|
||||
public function goods()
|
||||
{
|
||||
return $this->belongsTo(Goods::class, 'goods_id');
|
||||
}
|
||||
}
|
||||
25
application/admin/model/shopro/user/Invoice.php
Normal file
25
application/admin/model/shopro/user/Invoice.php
Normal file
@@ -0,0 +1,25 @@
|
||||
<?php
|
||||
|
||||
namespace app\admin\model\shopro\user;
|
||||
|
||||
use app\admin\model\shopro\Common;
|
||||
|
||||
class Invoice extends Common
|
||||
{
|
||||
protected $name = 'shopro_user_invoice';
|
||||
|
||||
// 追加属性
|
||||
protected $append = [
|
||||
'type_text',
|
||||
];
|
||||
|
||||
|
||||
public function typeList()
|
||||
{
|
||||
return [
|
||||
'person' => '个人',
|
||||
'company' => '企/事业单位',
|
||||
];
|
||||
}
|
||||
|
||||
}
|
||||
136
application/admin/model/shopro/user/User.php
Normal file
136
application/admin/model/shopro/user/User.php
Normal file
@@ -0,0 +1,136 @@
|
||||
<?php
|
||||
|
||||
namespace app\admin\model\shopro\user;
|
||||
|
||||
use app\admin\model\shopro\Common;
|
||||
use app\admin\model\shopro\Coupon as CouponModel;
|
||||
use app\admin\model\shopro\ThirdOauth;
|
||||
use addons\shopro\library\notify\traits\Notifiable;
|
||||
use fast\Random;
|
||||
|
||||
class User extends Common
|
||||
{
|
||||
use Notifiable;
|
||||
|
||||
protected $name = 'user';
|
||||
|
||||
protected $type = [
|
||||
'logintime' => 'timestamp',
|
||||
'jointime' => 'timestamp',
|
||||
'prevtime' => 'timestamp',
|
||||
];
|
||||
|
||||
protected $hidden = ['password', 'salt'];
|
||||
|
||||
protected $append = [
|
||||
'status_text',
|
||||
'gender_text'
|
||||
];
|
||||
|
||||
|
||||
public function getGenderList()
|
||||
{
|
||||
return ['1' => __('Male'), '0' => __('Female')];
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取性别文字
|
||||
* @param string $value
|
||||
* @param array $data
|
||||
* @return object
|
||||
*/
|
||||
public function getGenderTextAttr($value, $data)
|
||||
{
|
||||
$value = $value ?: ($data['gender'] ?? 0);
|
||||
|
||||
$list = $this->getGenderList();
|
||||
return isset($list[$value]) ? $list[$value] : '';
|
||||
}
|
||||
|
||||
public function setMobileAttr($value, $data)
|
||||
{
|
||||
if ($value !== "") {
|
||||
return $value;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public function setUsernameAttr($value, $data)
|
||||
{
|
||||
if ($value !== "") {
|
||||
return $value;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public function getAvatarAttr($value, $data)
|
||||
{
|
||||
if (empty($value)) {
|
||||
$config = sheep_config('shop.user');
|
||||
$value = $config['avatar'];
|
||||
}
|
||||
return $value;
|
||||
}
|
||||
|
||||
public function setEmailAttr($value, $data)
|
||||
{
|
||||
if ($value !== "") {
|
||||
return $value;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public function setPasswordAttr($value, $data)
|
||||
{
|
||||
$salt = Random::alnum();
|
||||
$this->salt = $salt;
|
||||
return \app\common\library\Auth::instance()->getEncryptPassword($value, $salt);
|
||||
}
|
||||
|
||||
public function getNicknameHideAttr($value, $data)
|
||||
{
|
||||
$value = $value ?: ($data['nickname'] ?? '');
|
||||
|
||||
return $value ? string_hide($value, 2) : $value;
|
||||
}
|
||||
|
||||
|
||||
public function getMobileAttr($value, $data)
|
||||
{
|
||||
$value = $value ?: ($data['mobile'] ?? '');
|
||||
|
||||
return $value ? (operate_filter(false) ? $value : account_hide($value, 3, 3)) : $value;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取验证字段数组值
|
||||
* @param string $value
|
||||
* @param array $data
|
||||
* @return object
|
||||
*/
|
||||
public function getVerificationAttr($value, $data)
|
||||
{
|
||||
$value = array_filter((array)json_decode($value, true));
|
||||
$value = array_merge(['username' => 0, 'password' => 0, 'mobile' => 0], $value);
|
||||
return (object)$value;
|
||||
}
|
||||
|
||||
public function parentUser()
|
||||
{
|
||||
return $this->hasOne(User::class, 'id', 'parent_user_id')->field(['id', 'avatar', 'nickname', 'gender']);
|
||||
}
|
||||
|
||||
public function thirdOauth()
|
||||
{
|
||||
return $this->hasMany(ThirdOauth::class, 'user_id', 'id');
|
||||
}
|
||||
|
||||
|
||||
// -- commission code start --
|
||||
public function agent()
|
||||
{
|
||||
return $this->hasOne(\app\admin\model\shopro\commission\Agent::class, 'user_id', 'id');
|
||||
}
|
||||
// -- commission code end --
|
||||
}
|
||||
79
application/admin/model/shopro/user/WalletLog.php
Normal file
79
application/admin/model/shopro/user/WalletLog.php
Normal file
@@ -0,0 +1,79 @@
|
||||
<?php
|
||||
|
||||
namespace app\admin\model\shopro\user;
|
||||
|
||||
use app\admin\model\shopro\Common;
|
||||
|
||||
class WalletLog extends Common
|
||||
{
|
||||
protected $name = 'shopro_user_wallet_log';
|
||||
|
||||
protected $updateTime = false;
|
||||
|
||||
protected $type = [
|
||||
'ext' => 'json'
|
||||
];
|
||||
// 追加属性
|
||||
protected $append = [
|
||||
'event_text'
|
||||
];
|
||||
|
||||
const TYPE_MAP = [
|
||||
'money' => '余额',
|
||||
'score' => '积分',
|
||||
'commission' => '佣金'
|
||||
];
|
||||
|
||||
protected $eventMap = [
|
||||
'score' => [
|
||||
'signin' => '签到-赠送积分',
|
||||
'replenish_signin' => '签到-补签',
|
||||
'activity_gift' => '活动-赠送积分',
|
||||
'score_shop_pay' => '积分商城-积分支付',
|
||||
'order_pay' => '商城订单-积分抵扣',
|
||||
'order_refund' => '订单退款-退还积分',
|
||||
'admin_recharge' => '后台-积分充值',
|
||||
'recharge_gift' => '线上充值-赠送积分'
|
||||
],
|
||||
'money' => [
|
||||
'order_pay' => '商城订单-余额支付',
|
||||
'order_recharge' => '线上充值',
|
||||
'admin_recharge' => '后台-余额充值',
|
||||
'recharge_gift' => '线上充值-赠送余额',
|
||||
'activity_gift' => '活动-赠送余额',
|
||||
'order_refund' => '订单退款-退还余额',
|
||||
'transfer_by_commission' => '佣金-转入到余额'
|
||||
],
|
||||
'commission' => [
|
||||
'withdraw' => '提现',
|
||||
'withdraw_error' => '提现失败-返还佣金',
|
||||
'reward_income' => '佣金-收益',
|
||||
'reward_back' => '佣金-退还',
|
||||
'transfer_to_money' => '佣金-转出到余额'
|
||||
]
|
||||
];
|
||||
|
||||
public function getEventMap() {
|
||||
return $this->eventMap;
|
||||
}
|
||||
|
||||
public function scopeMoney($query)
|
||||
{
|
||||
return $query->where('type', 'money');
|
||||
}
|
||||
|
||||
public function scopeCommission($query)
|
||||
{
|
||||
return $query->where('type', 'commission');
|
||||
}
|
||||
|
||||
public function scopeScore($query)
|
||||
{
|
||||
return $query->where('type', 'score');
|
||||
}
|
||||
|
||||
public function getEventTextAttr($value, $data)
|
||||
{
|
||||
return $this->eventMap[$data['type']][$data['event']] ?? '';
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user