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