Files
zzp-server/app/api/logic/ItemLogic.php
2026-01-19 14:19:22 +08:00

324 lines
12 KiB
PHP
Raw Permalink 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
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;
}
}
}