Files
tuiguangzhushou/application/common/service/Account.php
2020-08-06 15:26:41 +08:00

191 lines
6.5 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
// +------------------------------------------------+
// |http://www.cjango.com |
// +------------------------------------------------+
// | 修复BUG不是一朝一夕的事情等我喝醉了再说吧 |
// +------------------------------------------------+
// | Author: 小陈叔叔 <Jason.Chen> |
// +------------------------------------------------+
namespace app\common\service;
use app\common\model\Account as AccountModel;
use app\common\model\AccountLogs as AccountLogsModel;
use app\common\model\AccountRules as AccountRulesModel;
use app\common\model\Member as MemberModel;
use app\common\model\VipOrder as VipOrderModel;
use app\common\service\Member as MemberService;
use think\Config;
use think\Db;
use tools\Time;
class Account extends _Init
{
/**
* [add description]
* @param [type] $data [description]
*/
public static function create($uid)
{
$info = AccountModel::find($uid);
if (!$info) {
$data = [
'uid' => $uid,
];
AccountModel::create($data);
}
}
/**
* 对某一个用户执行账户规则
* @param [type] $uid [执行用户]
* @param [type] $rule [规则ID或关键字]
* @param integer $increase [执行数量/如果规则写了固定数量可以为空]
* @param string $remark [规则描述,空为规则默认描述]
* @param integer $fromuser [溯源用户ID,可以为空]
* @param integer $freezing [是否冻结1冻结 0即时到账]
* @param string $ordeid [关联订单ID 可以为空]
* @return [type] [description]
*/
public static function rule($uid, $rule, $increase = 0, $remark = '', $fromuser = 0, $freezing = 0, $orderid = '')
{
if (is_numeric($rule)) {
$ruleMap['id'] = $rule;
} else {
$ruleMap['name'] = $rule;
}
$rule = AccountRulesModel::where($ruleMap)->find();
if (!$rule) {
return '规则不存在';
}
$account = AccountModel::where('uid', $uid)->find();
$balance = $account->getData($rule->type);
if ($rule->times == -1 && AccountLogsModel::where(['rule_id' => $rule->id, 'uid' => $uid])->find()) {
return '用户行为已经执行过';
} elseif ($rule->times > 0) {
// 判断当日最大可执行次数
$todayTime = \tools\Time::day();
$AccountLog = AccountLogsModel::where(['rule_id' => $rule->id, 'uid' => $uid, 'create_time' => ['between', $todayTime]])->count('id');
if ($AccountLog >= $rule->times) {
return '今日行为次数已用尽';
}
}
if ($increase != 0) {
$rule->increase = $increase;
}
if ($rule->increase < 0 && $balance < abs($rule->increase)) {
return '账户余额不足';
}
if (!$remark) {
$remark = $rule->remark;
}
Db::startTrans();
$ruleLog = [
'uid' => $uid,
'rule_id' => $rule->id,
'type' => $rule->type,
'increase' => $rule->increase,
'balance' => $balance + $rule->increase,
'remark' => $remark,
'fromuser' => $fromuser,
'freezing' => $freezing,
'orderid' => $orderid,
];
if (AccountLogsModel::create($ruleLog)) {
if (!$freezing) {
AccountModel::where(['uid' => $uid])->exp($rule->type, $rule->type . '+' . $rule->increase)->update();
}
Db::commit();
return true;
} else {
Db::rollback();
return '行为执行失败';
}
}
//推荐奖
public static function commission($orderid)
{
$order = VipOrderModel::where('orderid', $orderid)->find();
if ($order->commission == 1) {
return "已经执行过了";
}
$user = $order->member ?? '';
if ($order && $user) {
$puser = $user->puser;
if ($puser) {
$share_commission = Config::get('share_commission');
$cash = round($order->money * $share_commission, 2); //计算实际获得金额
$res = self::rule($puser->id, 'open_' . $order->type, $cash, '', $order->uid, '', $order->orderid);
if ($res === true && $puser->openid) {
$account = [
'openid' => $puser->openid,
'create_time' => date('Y-m-d'),
'increase' => (string) $cash,
'balance' => $puser->account->price,
];
if ($order->type == 'vip') {
$type = 1;
} elseif ($order->type == 'agent') {
$type = 2;
} else {
$type = '';
}
//加模板消息
Tmplmsg::account($account);
self::management($puser, $cash, $order->orderid);
}
}
$order->commission = 1;
$order->save();
}
}
//管理奖
protected static function management($user, $money, $orderid)
{
$plist = MemberService::getSub($user->id);
if ($plist) {
$management_ratio = Config::get('management_ratio');
$prev = $user->id;
foreach ($plist as $key => $p) {
$puser = MemberModel::get($p);
//如果不是代理商分润到此
if ($puser->info->is_agent != 1) {
break;
}
$temp = $money * $management_ratio;
if ($temp < 0.01) {
break;
}
$cash = intval($temp * 100) / 100;
$res = self::rule($p, 'management', $cash, '', $prev, '', $orderid);
if ($res && $puser->openid) {
$account = [
'openid' => $puser->openid,
'create_time' => date('Y-m-d'),
'increase' => (string) $cash,
'balance' => $puser->account->price,
];
//加模板消息
Tmplmsg::account($account);
}
$money = $cash;
$prev = $p;
}
}
}
}