first commit

This commit is contained in:
Your Name
2026-01-19 14:19:22 +08:00
commit fe2d9c1868
4777 changed files with 665503 additions and 0 deletions

324
app/api/logic/ItemLogic.php Normal file
View File

@@ -0,0 +1,324 @@
<?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;
}
}
}