- 框架初始化
 - 安装插件
 - 修复PHP8.4报错
This commit is contained in:
2025-04-19 17:21:20 +08:00
commit c6a4e1f5f6
5306 changed files with 967782 additions and 0 deletions

View 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']];
}
}

View 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);
}
}

View 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');
}
}

View 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');
}
}

View 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' => '企/事业单位',
];
}
}

View 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 --
}

View 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']] ?? '';
}
}