324 lines
12 KiB
PHP
324 lines
12 KiB
PHP
<?php
|
||
namespace app\api\logic;
|
||
|
||
use app\common\logic\BaseLogic;
|
||
use app\common\service\{UtilsService,ConfigService,FileService};
|
||
use app\common\model\item\{Item,ItemRecord};
|
||
use app\common\model\finance\{UserFinance};
|
||
use app\common\model\user\{User};
|
||
use app\common\model\member\UserMember;
|
||
use app\common\model\decorate\{DecorateHint};
|
||
use app\common\model\setting\Language;
|
||
use think\facade\Config;
|
||
use think\facade\{Db};
|
||
|
||
|
||
/**
|
||
* 项目逻辑
|
||
* Class ItemLogic
|
||
* @package app\api\logic
|
||
*/
|
||
class ItemLogic extends BaseLogic
|
||
{
|
||
|
||
/**
|
||
* @notes 首页数据
|
||
* @param $params
|
||
* @return array
|
||
* @throws \think\db\exception\DataNotFoundException
|
||
* @throws \think\db\exception\DbException
|
||
* @throws \think\db\exception\ModelNotFoundException
|
||
* @author BD
|
||
* @date 2024/02/22 10:54
|
||
*/
|
||
public static function getIndexData(array $params)
|
||
{
|
||
// 获取今天0点的时间戳
|
||
$todayStart = strtotime(date('Y-m-d 00:00:00'));
|
||
|
||
$field_item = ['id','title','image','rate','cycle','progress','type','member_id','langs'];
|
||
$items = Item::field($field_item)
|
||
->append(['vip_name'])
|
||
->where(['is_show' => 1])
|
||
->order(['sort' => 'desc', 'id' => 'desc'])
|
||
->select()
|
||
->toArray();
|
||
foreach ($items as &$item) {
|
||
$item['progress'] = round($item['progress'],2);
|
||
//多语言替换
|
||
$data = UtilsService::get_langs_data($item['langs'],$params['lang']);
|
||
$data_title = '';
|
||
$data_image = '';
|
||
|
||
if(count($data) > 0){
|
||
$data_title = $data['title'];
|
||
$data_image = $data['image'];
|
||
}
|
||
|
||
$item['title'] = $data_title;
|
||
$item['image'] = FileService::getFileUrl($data_image);
|
||
unset($item['langs']);
|
||
}
|
||
|
||
$user = User::where(['id' => $params['user_id']])->findOrEmpty();
|
||
//查询会员等级
|
||
$member_id = UtilsService::get_user_member_id($params['user_id']);
|
||
$userMember = UserMember::where(['id' => $member_id])
|
||
->field('id, name, logo, bg_img, text_color, money, level1_num, lh_min, lh_max, lh_num')
|
||
->findOrEmpty();
|
||
|
||
$user_res['member'] = $userMember;
|
||
$user_res['balance'] = $user['user_money'];
|
||
$user_res['totalMoney'] = ItemRecord::where(['user_id' => $params['user_id'],'status' => 1])->sum('money');
|
||
$user_res['todayIncome'] = UserFinance::where(['user_id' => $params['user_id'],'change_type' => 17])->where("create_time > $todayStart")->sum('change_amount');
|
||
$user_res['totalIncome'] = $user['total_income_invest'];
|
||
|
||
return [
|
||
'items' => $items,
|
||
'user' => $user_res,
|
||
// 服务器时间
|
||
'server_date' => date('Y/m/d H:i:s'),
|
||
];
|
||
}
|
||
|
||
/**
|
||
* @notes 项目详情
|
||
* @param $params
|
||
* @return array
|
||
* @author BD
|
||
* @date 2024/02/22 10:54
|
||
*/
|
||
public static function detail($params)
|
||
{
|
||
try {
|
||
// 获取今天0点的时间戳
|
||
$todayStart = strtotime(date('Y-m-d 00:00:00'));
|
||
|
||
$item = Item::field("id,type,title,image,content,min_money,max_money,point,rate,cycle,progress,langs,member_id")->append(['vip_name'])->where(['is_show' => 1])->findOrEmpty($params['id']);
|
||
if($item->isEmpty()){
|
||
throw new \Exception('network.parameterAbnormality');
|
||
}
|
||
$item['progress'] = round($item['progress'],2);
|
||
|
||
//多语言替换
|
||
$data = UtilsService::get_langs_data($item['langs'],$params['lang']);
|
||
$data_title = '';
|
||
$data_image = '';
|
||
$data_content = '';
|
||
|
||
if(count($data) > 0){
|
||
$data_title = $data['title'];
|
||
$data_image = $data['image'];
|
||
$data_content = $data['content'];
|
||
}
|
||
|
||
$item['title'] = $data_title;
|
||
$item['image'] = FileService::getFileUrl($data_image);
|
||
$item['content'] = get_file_domain($data_content);
|
||
unset($item['langs']);
|
||
|
||
$user = User::where(['id' => $params['user_id']])->findOrEmpty();
|
||
//查询初始交易密码
|
||
$need_set_pwd = 0;
|
||
$pwd_pay = ConfigService::get('login', 'password_pay');
|
||
$passwordSalt = Config::get('project.unique_identification');
|
||
if ($user['password_pay'] == create_password($pwd_pay, $passwordSalt)) {
|
||
$need_set_pwd = 1;
|
||
}
|
||
|
||
//查询会员等级
|
||
$member_id = UtilsService::get_user_member_id($params['user_id']);
|
||
$userMember = UserMember::where(['id' => $member_id])
|
||
->field('id,item_num,item_add_rate')
|
||
->findOrEmpty();
|
||
|
||
$user_res['member'] = $userMember;
|
||
$user_res['balance'] = $user['user_money'];
|
||
|
||
//今日投资次数
|
||
$user_res['today_order'] = ItemRecord::where("create_time > $todayStart")
|
||
->where(['user_id' => $params['user_id']])
|
||
->count();
|
||
|
||
return [
|
||
'item' => $item,
|
||
'user' => $user_res,
|
||
'need_set_pwd' => $need_set_pwd,
|
||
];
|
||
} catch (\Exception $e) {
|
||
self::setError($e->getMessage());
|
||
return false;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* @notes 合同详情
|
||
* @param $params
|
||
* @return array
|
||
* @author BD
|
||
* @date 2024/02/22 10:54
|
||
*/
|
||
public static function contract($params)
|
||
{
|
||
try {
|
||
$itemRecord = ItemRecord::where(['id' => $params['id']])->findOrEmpty();
|
||
if($itemRecord->isEmpty()){
|
||
throw new \Exception('network.parameterAbnormality');
|
||
}
|
||
|
||
$user = User::where(['id' => $params['user_id']])->findOrEmpty();
|
||
|
||
//合同内容
|
||
$contract = DecorateHint::findOrEmpty(23)->toArray();
|
||
|
||
$end_time = date('Y-m-d', $itemRecord['end_time']);
|
||
$date = date('Y-m-d', strtotime($itemRecord['create_time']));
|
||
|
||
//多语言替换
|
||
$data = UtilsService::get_langs_data($contract['langs'],$params['lang']);
|
||
$content = get_file_domain($data['content']);
|
||
|
||
$content = str_replace('{sn}', $itemRecord['contract_no'], $content);
|
||
$content = str_replace('{username}', $user['country_code'].' '.$user['account'], $content);
|
||
$content = str_replace('{money}', $itemRecord['money'], $content);
|
||
$content = str_replace('{rate}', $itemRecord['rate'], $content);
|
||
$content = str_replace('{total_income}', $itemRecord['total_income'], $content);
|
||
$content = str_replace('{date_e}', $end_time, $content);
|
||
$content = str_replace('{date}', $date, $content);
|
||
|
||
return [
|
||
'content' => $content,
|
||
'type' => $itemRecord['type'],
|
||
'cycle' => $itemRecord['cycle'],
|
||
'contract_y_logo' => FileService::getFileUrl($contract['contract_y_logo']),
|
||
'contract_b_logo' => FileService::getFileUrl($contract['contract_b_logo']),
|
||
|
||
];
|
||
} catch (\Exception $e) {
|
||
self::setError($e->getMessage());
|
||
return false;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* @notes 投资
|
||
* @param array $params
|
||
* @return array|false
|
||
* @author BD
|
||
* @date 2024/02/22 10:54
|
||
*/
|
||
public static function invest(array $params)
|
||
{
|
||
Db::startTrans();
|
||
try {
|
||
// 获取今天0点的时间戳
|
||
// $todayStart = strtotime(date('Y-m-d 00:00:00'));
|
||
|
||
$user = User::where(['id' => $params['user_id']]) -> findOrEmpty();
|
||
|
||
$item = Item::where(['is_show' => 1])->findOrEmpty($params['id']);
|
||
//多语言替换
|
||
$data = UtilsService::get_langs_data($item['langs'],$params['lang']);
|
||
$data_title = '';
|
||
$data_image = '';
|
||
$data_content = '';
|
||
|
||
if(count($data) > 0){
|
||
$data_title = $data['title'];
|
||
$data_image = $data['image'];
|
||
$data_content = $data['content'];
|
||
}
|
||
|
||
$item['title'] = $data_title;
|
||
$item['image'] = $data_image;
|
||
$item['content'] = $data_content;
|
||
|
||
//查询会员等级
|
||
$member_id = UtilsService::get_user_member_id($params['user_id']);
|
||
$userMember = UserMember::where(['id' => $member_id])->findOrEmpty();
|
||
|
||
//判断加息率
|
||
if($userMember['item_add_rate'] > 0) $item['rate'] = round($item['rate'] + $userMember['item_add_rate'],2);
|
||
|
||
//投资类型
|
||
// 1每日付息到期还本
|
||
// 2到期还本付息(日)
|
||
// 3到期还本付息(时)
|
||
// 4每时付息到期还本
|
||
$end_time = time() + ($item['cycle'] * 24 * 60 * 60);//到期时间(天)
|
||
$total_num = $item['cycle'];
|
||
$wait_num = $item['cycle'];
|
||
$total_income = round($params['money'] * $item['rate'] * $item['cycle'] / 100,2);//总收益(每日/时)
|
||
|
||
switch($item['type']){
|
||
case 1:
|
||
|
||
break;
|
||
case 2:
|
||
$wait_num = 1;
|
||
$total_income = round($params['money'] * $item['rate'] / 100,2);
|
||
break;
|
||
case 3:
|
||
$wait_num = 1;
|
||
$total_income = round($params['money'] * $item['rate'] / 100,2);
|
||
$end_time = time() + ($item['cycle'] * 60 * 60);//到期时间(时)
|
||
break;
|
||
case 4:
|
||
$end_time = time() + ($item['cycle'] * 60 * 60);//到期时间(时)
|
||
break;
|
||
}
|
||
|
||
|
||
$data = [
|
||
'sn' => generate_sn(ItemRecord::class, 'sn'),
|
||
'contract_no' => generate_sn(ItemRecord::class, 'contract_no'),
|
||
'user_id' => $params['user_id'],
|
||
'item_id' => $item['id'],
|
||
'item_title' => $item['title'],
|
||
'item_image' => FileService::setFileUrl($item['image']),
|
||
'item_langs' => $item['langs'],
|
||
'money' => $params['money'],
|
||
'point' => $item['point'],
|
||
'rate' => $item['rate'],
|
||
'cycle' => $item['cycle'],
|
||
'total_num' => $total_num,
|
||
'wait_num' => $wait_num,
|
||
'total_income' => $total_income,
|
||
'type' => $item['type'],
|
||
'status' => 1,//状态1进行中2已结束
|
||
'end_time' => $end_time,//到期时间
|
||
];
|
||
$order = ItemRecord::create($data);
|
||
|
||
//记录日志
|
||
UtilsService::user_finance_add(
|
||
$data['user_id'],
|
||
16,
|
||
2,
|
||
$data['money'],
|
||
$data['sn']
|
||
);
|
||
|
||
//用户资金修改
|
||
UtilsService::user_money_change($data['user_id'], 2, $data['money'],'user_money');
|
||
//累积投资金额
|
||
UtilsService::user_money_change($data['user_id'], 1, $data['money'],'total_invest');
|
||
|
||
//赠送积分
|
||
if($item['point'] > 0){
|
||
UtilsService::user_money_change($data['user_id'], 1, $item['point'],'user_point');
|
||
}
|
||
|
||
//更新会员等级
|
||
UtilsService::set_user_member($params['user_id']);
|
||
|
||
Db::commit();
|
||
return [];
|
||
} catch (\Exception $e) {
|
||
Db::rollback();
|
||
self::setError($e->getMessage());
|
||
return false;
|
||
}
|
||
}
|
||
|
||
} |