error(__('User center already closed')); } } /** * 会员中心 */ public function index() { $this->success('', ['welcome' => $this->auth->nickname]); } /** * 会员登录 * * @ApiMethod (POST) * @param string $account 账号 * @param string $password 密码 */ public function login() { $account = $this->request->post('account'); $password = $this->request->post('password'); if (!$account || !$password) { $this->error(__('Invalid parameters')); } $ret = $this->auth->login($account, $password); if ($ret) { $data = ['userinfo' => $this->auth->getUserinfo()]; $this->success(__('Logged in successful'), $data); } else { $this->error($this->auth->getError()); } } /** * 手机验证码登录 * * @ApiMethod (POST) * @param string $mobile 手机号 * @param string $captcha 验证码 */ public function mobilelogin() { $mobile = $this->request->post('mobile'); $captcha = $this->request->post('captcha'); if (!$mobile || !$captcha) { $this->error(__('Invalid parameters')); } if (!Validate::regex($mobile, "^1\d{10}$")) { $this->error(__('Mobile is incorrect')); } if (!Sms::check($mobile, $captcha, 'mobilelogin')) { $this->error(__('Captcha is incorrect')); } $user = \app\common\model\User::getByMobile($mobile); if (!$user) { $this->error('用户尚未注册'); } if ($user['status'] != 1) { $this->error(__('Account is locked')); } // if ($user) { // if ($user->status != 'normal') { // $this->error(__('Account is locked')); // } // //如果已经有账号则直接登录 // $ret = $this->auth->direct($user->id); // } else { // $ret = $this->auth->register($mobile, Random::alnum(), '', $mobile, []); // } $ret = $this->auth->direct($user->id); if ($ret) { Sms::flush($mobile, 'mobilelogin'); $data = ['userinfo' => $this->auth->getUserinfo()]; $this->success(__('Logged in successful'), $data); } else { $this->error($this->auth->getError()); } } /** * 注册会员 * * @ApiMethod (POST) * @param string $username 用户名 * @param string $password 密码 * @param string $email 邮箱 * @param string $mobile 手机号 * @param string $code 验证码 */ /*public function register() { $mobile = $this->request->post('mobile', '', 'trim'); //手机号 $code = $this->request->post('code', '', 'trim'); //验证码 $password = $this->request->post('password', '' , 'trim'); //密码 $repassword = $this->request->post('repassword', '' , 'trim'); //确认密码 $nickname = $this->request->post('nickname', '', 'trim'); //姓名 $idcard = $this->request->post('idcard', '', 'trim,strip_tags,htmlspecialchars'); //身份证号 $province = $this->request->post('province', '', 'trim'); //省 $city = $this->request->post('city', '', 'trim'); //市 $area = $this->request->post('area', '', 'trim'); //区 $address = $this->request->post('address', '', 'trim'); //详细地址 $recommender = $this->request->post('recommender', '', 'trim'); //推荐人姓名 $recommender_mobile = $this->request->post('recommender_mobile', '', 'trim'); //推荐人手机号 $zimage = $this->request->post('zimage', '', 'trim,strip_tags,htmlspecialchars'); //身份证正面照 $fimage = $this->request->post('fimage', '', 'trim,strip_tags,htmlspecialchars'); //身份证反面照 if (!Validate::regex($mobile, "^1\d{10}$")) { $this->error(__('Mobile is incorrect')); } $count = Db::name('user')->where(['mobile' => $mobile])->count('id'); if ($count) { $this->error('手机号已被注册'); } if (iconv_strlen($code, 'utf-8') != config('alisms.length')) { $this->error(__('Captcha is incorrect')); } $ret = Sms::check($mobile, $code, 'register'); if (!$ret) { $this->error(__('Captcha is incorrect')); } if (!$password) { $this->error('请输入新密码'); } //验证新密码 if (!Validate::make()->check(['newpassword' => $password], ['newpassword' => 'require|regex:\S{6,30}'])) { $this->error(__('Password must be 6 to 30 characters')); } if (!$repassword) { $this->error('请再次输入密码'); } if ($repassword != $password) { $this->error('两次密码不一致'); } if (!$nickname) { $this->error('请输入姓名'); } if (iconv_strlen($nickname, 'utf-8') > 30) { $this->error('姓名最多30位'); } if (!$idcard) { $this->error('请输入身份证号'); } if (iconv_strlen($idcard, 'utf-8') != 18) { $this->error('身份证号错误'); } if (!$province || !$city || !$area) { $this->error('请选择养殖场地址'); } if (!$address) { $this->error('请输入详细地址'); } if (iconv_strlen($address, 'utf-8') > 255) { $this->error('详细地址最多255位'); } if (!$recommender) { $this->error('请输入推荐人姓名'); } if (iconv_strlen($recommender, 'utf-8') > 30) { $this->error('推荐人姓名最多30位'); } if (!$recommender_mobile || !is_mobile($recommender_mobile)) { $this->error('请输入正确推荐人手机号'); } if (!$zimage || !$fimage) { $this->error('请上传身份证相关照片'); } $ip = request()->ip(); $time = time(); $data = [ 'nickname' => $nickname, 'province' => $province, 'city' => $city, 'area' => $area, 'address' => $address, 'createtime' => $time ]; $params = array_merge($data, [ 'mobile' => $mobile, 'password' => $password, 'avatar' => '/assets/img/avatar.png', 'salt' => Random::alnum(), 'jointime' => $time, 'joinip' => $ip, 'logintime' => $time, 'loginip' => $ip, 'prevtime' => $time, 'is_auth' => 1 ]); $params['password'] = md5(md5($password) . $params['salt']); //开启事务 Db::startTrans(); $rs = Db::name('user')->insertGetId($params); if (!$rs) { Db::rollback(); $this->error('注册失败'); } $data['user_id'] = $rs; $data['idcard'] = $idcard; $data['zimage'] = $zimage; $data['fimage'] = $fimage; $data['recommender'] = $recommender; $data['recommender_mobile'] = $recommender_mobile; $rt = Db::name('user_auth')->insertGetId($data); if (!$rt) { Db::rollback(); $this->error('注册失败'); } Db::commit(); $ret = $this->auth->login($mobile, $password); if ($ret) { $data = ['userinfo' => $this->auth->getUserinfo()]; $this->success(__('Sign up successful'), $data); } else { $this->error($this->auth->getError()); } }*/ //注册第一步验证 public function registercheck() { $mobile = $this->request->post('mobile'); //手机号 $code = $this->request->post('code'); //验证码 $password = $this->request->post('password'); //密码 $repassword = $this->request->post('repassword', '' , 'trim'); //确认密码 if (!Validate::regex($mobile, "^1\d{10}$")) { $this->error(__('Mobile is incorrect')); } $count = Db::name('user')->where(['mobile' => $mobile])->count('id'); if (!$count) { $this->error('手机号已被注册'); } if (iconv_strlen($code, 'utf-8') != config('alisms.length')) { $this->error(__('Captcha is incorrect')); } $ret = Sms::check($mobile, $code, 'register'); if (!$ret) { $this->error(__('Captcha is incorrect')); } if (!$password) { $this->error('请输入新密码'); } //验证新密码 if (!Validate::make()->check(['newpassword' => $password], ['newpassword' => 'require|regex:\S{6,30}'])) { $this->error(__('Password must be 6 to 30 characters')); } if (!$repassword) { $this->error('请再次输入密码'); } if ($repassword != $password) { $this->error('两次密码不一致'); } $this->success('验证通过'); } /** * 退出登录 * @ApiMethod (POST) */ public function logout() { if (!$this->request->isPost()) { $this->error(__('Invalid parameters')); } $this->auth->logout(); $this->success(__('Logout successful')); } //查询会员信息 public function getinfo() { //检查今日是否登录赠送过成长值 $this->checklogingrowth($this->auth->id); //检查会员等级 $this->checkviplevel($this->auth->id); $user = Db::name('user')->find($this->auth->id); $data['nickname'] = $user['nickname']; //姓名 $data['username'] = $user['username']; //UID $data['avatar'] = cdnurl($user['avatar']); //头像 $data['mobile'] = $user['mobile']; //手机号 $data['money'] = $user['money']; //余额 $data['realname'] = $user['realname']; //真实姓名 $data['gender'] = $user['gender']; //性别:1=男,2=女 $data['birthday'] = date('Y-m-d', $user['birthday']); //生日 $data['idcard'] = $user['idcard']; //身份证号 $data['passport'] = $user['passport']; //护照号 $data['emergencycontact'] = $user['emergencycontact']; //紧急联系人 $data['contactmobile'] = $user['contactmobile']; //紧急联系方式 $data['outdoorduration'] = $user['outdoorduration']; //户外时长 $data['maxlevel'] = $user['maxlevel']; //实际有效会员ID $data['viplevel'] = Db::name('vip')->where(['id' => $user['maxlevel']])->value('level'); //会员等级 $data['active_count'] = Db::name('active_order')->where(['user_id' => $this->auth->id, 'status' => 2])->count('id'); //完成活动数量 $data['freenumber'] = $user['freenumber']; //会员免费参加活动次数 $this->success('会员信息', $data); } /** * 修改会员个人信息 * * @ApiMethod (POST) * @param string $avatar 头像地址 * @param string $username 用户名 * @param string $nickname 昵称 * @param string $bio 个人简介 */ public function profile() { $avatar = $this->request->post('avatar', '', 'trim,strip_tags,htmlspecialchars'); //头像 $nickname = $this->request->post('nickname', '', 'trim'); //昵称 $realname = $this->request->post('realname', '', 'trim'); //真实姓名 $idcard = $this->request->post('idcard', '', 'trim,strip_tags,htmlspecialchars'); //身份证号 $passport = $this->request->post('passport', '', 'trim,strip_tags,htmlspecialchars'); //护照号 $emergencycontact = $this->request->post('emergencycontact', '', 'trim'); //紧急联系人 $contactmobile = $this->request->post('contactmobile', '', 'trim'); //紧急联系方式 $outdoorduration = $this->request->post('outdoorduration', '', 'trim'); //户外时长 $birthday = $this->request->post('birthday', '', 'strtotime'); //生日 $gender = $this->request->post('gender', 0, 'intval'); //性别 $data = []; if ($avatar) { if (iconv_strlen($avatar, 'utf-8') > 255) { $this->error('图片超出范围'); } $data['avatar'] = $avatar; } if ($nickname) { if (iconv_strlen($nickname, 'utf-8') > 30) { $this->error('昵称最多30字'); } $data['nickname'] = $nickname; } if ($realname) { if(iconv_strlen($realname, 'utf-8') > 30) { $this->error('真实姓名最多30字'); } $data['realname'] = $realname; } if ($idcard) { if (iconv_strlen($idcard, 'utf-8') != 18) { $this->error('身份证号错误'); } $data['idcard'] = $idcard; } if ($passport) { if (iconv_strlen($passport, 'utf-8') > 30) { $this->error('护照号错误'); } $data['passport'] = $passport; } if ($emergencycontact) { if(iconv_strlen($emergencycontact, 'utf-8') > 30) { $this->error('紧急联系人最多30字'); } $data['emergencycontact'] = $emergencycontact; } if ($contactmobile) { if(!is_mobile($contactmobile)) { $this->error('请输入正确紧急联系方式'); } $data['contactmobile'] = $contactmobile; } if ($outdoorduration) { if(iconv_strlen($outdoorduration, 'utf-8') > 50) { $this->error('户外时长最多50字'); } $data['outdoorduration'] = $outdoorduration; } if ($birthday) { $data['birthday'] = $birthday; } if (in_array($gender, [1, 2])) { $data['gender'] = $gender; } // $avatar = $this->request->post('avatar', '', 'trim,strip_tags,htmlspecialchars'); // if ($username) { // $exists = \app\common\model\User::where('username', $username)->where('id', '<>', $this->auth->id)->find(); // if ($exists) { // $this->error(__('Username already exists')); // } // $user->username = $username; // } // if ($nickname) { // $exists = \app\common\model\User::where('nickname', $nickname)->where('id', '<>', $this->auth->id)->find(); // if ($exists) { // $this->error(__('Nickname already exists')); // } // $user->nickname = $nickname; // } // $user->avatar = $avatar; if (!$data) { $this->error('暂无修改内容'); } //修改用户表 $rt = Db::name('user')->where(['id' => $this->auth->id])->setField($data); if ($rt === false) { $this->error('修改失败'); } $this->success('修改成功'); } //修改头像 public function changeavatar() { $avatar = input('avatar', '', 'trim'); //头像 if (!$avatar) { $this->error('请上传头像'); } if (iconv_strlen($avatar, 'utf-8') > 255) { $this->error('头像长度超出限制'); } $rs = Db::name('user')->where(['id' => $this->auth->id])->setField('avatar', $avatar); if (!$rs) { $this->error('修改失败'); } $this->success('修改成功'); } /** * 修改邮箱 * * @ApiMethod (POST) * @param string $email 邮箱 * @param string $captcha 验证码 */ public function changeemail() { $user = $this->auth->getUser(); $email = $this->request->post('email'); $captcha = $this->request->post('captcha'); if (!$email || !$captcha) { $this->error(__('Invalid parameters')); } if (!Validate::is($email, "email")) { $this->error(__('Email is incorrect')); } if (\app\common\model\User::where('email', $email)->where('id', '<>', $user->id)->find()) { $this->error(__('Email already exists')); } $result = Ems::check($email, $captcha, 'changeemail'); if (!$result) { $this->error(__('Captcha is incorrect')); } $verification = $user->verification; $verification->email = 1; $user->verification = $verification; $user->email = $email; $user->save(); Ems::flush($email, 'changeemail'); $this->success(); } /** * 修改手机号 * * @ApiMethod (POST) * @param string $mobile 手机号 * @param string $captcha 验证码 */ public function changemobile() { $user = $this->auth->getUser(); $code = $this->request->post('code'); $mobile = $this->request->post('mobile'); $captcha = $this->request->post('captcha'); if (!$code || !$mobile || !$captcha) { $this->error(__('Invalid parameters')); } if ($mobile == $user->mobile) { $this->error('手机号没有改变'); } $result = Sms::check($user->mobile, $code, 'changeyuanmobile'); if (!$result) { $this->error(__('Captcha is incorrect')); } if (!Validate::regex($mobile, "^1\d{10}$")) { $this->error(__('Mobile is incorrect')); } if (\app\common\model\User::where('mobile', $mobile)->where('id', '<>', $user->id)->find()) { $this->error(__('手机号已存在')); } $result = Sms::check($mobile, $captcha, 'changemobile'); if (!$result) { $this->error(__('Captcha is incorrect')); } $verification = $user->verification; $verification->mobile = 1; $user->verification = $verification; $user->mobile = $mobile; $user->save(); Sms::flush($user->mobile, 'changemobile'); Sms::flush($mobile, 'changemobile'); $this->success('修改成功'); } /** * 第三方登录 * * @ApiMethod (POST) * @param string $platform 平台名称 * @param string $code Code码 */ public function third() { $url = url('user/index'); $platform = $this->request->post("platform"); $code = $this->request->post("code"); $config = get_addon_config('third'); if (!$config || !isset($config[$platform])) { $this->error(__('Invalid parameters')); } $app = new \addons\third\library\Application($config); //通过code换access_token和绑定会员 $result = $app->{$platform}->getUserInfo(['code' => $code]); if ($result) { $loginret = \addons\third\library\Service::connect($platform, $result); if ($loginret) { $data = [ 'userinfo' => $this->auth->getUserinfo(), 'thirdinfo' => $result ]; $this->success(__('Logged in successful'), $data); } } $this->error(__('Operation failed'), $url); } /** * 重置密码 * * @ApiMethod (POST) * @param string $mobile 手机号 * @param string $newpassword 新密码 * @param string $captcha 验证码 */ public function resetpwd() { $type = 'mobile';//$this->request->post("type"); $mobile = $this->request->post("mobile"); $email = $this->request->post("email"); $newpassword = $this->request->post("newpassword"); $repassword = $this->request->post('repassword', '' , 'trim'); //确认密码 $captcha = $this->request->post("captcha"); if (!$newpassword || !$captcha || !$repassword) { $this->error(__('Invalid parameters')); } //验证Token if (!Validate::make()->check(['newpassword' => $newpassword], ['newpassword' => 'require|regex:\S{6,30}'])) { $this->error(__('Password must be 6 to 30 characters')); } if ($repassword != $newpassword) { $this->error('两次密码不一致'); } if ($type == 'mobile') { if (!Validate::regex($mobile, "^1\d{10}$")) { $this->error(__('Mobile is incorrect')); } $user = \app\common\model\User::getByMobile($mobile); if (!$user) { $this->error(__('User not found')); } $ret = Sms::check($mobile, $captcha, 'resetpwd'); if (!$ret) { $this->error(__('Captcha is incorrect')); } Sms::flush($mobile, 'resetpwd'); } else { if (!Validate::is($email, "email")) { $this->error(__('Email is incorrect')); } $user = \app\common\model\User::getByEmail($email); if (!$user) { $this->error(__('User not found')); } $ret = Ems::check($email, $captcha, 'resetpwd'); if (!$ret) { $this->error(__('Captcha is incorrect')); } Ems::flush($email, 'resetpwd'); } //模拟一次登录 $this->auth->direct($user->id); $ret = $this->auth->changepwd($newpassword, '', true); if ($ret) { $this->success(__('Reset password successful')); } else { $this->error($this->auth->getError()); } } /** * 修改密码 * * @ApiMethod (POST) * @param string $captcha 验证码 * @param string $newpassword 新密码 * @param string $repassword 确认密码 */ public function editpwd() { $captcha = $this->request->post("captcha", '', 'trim'); //验证码 $newpassword = $this->request->post("newpassword", '' , 'trim'); //新密码 $repassword = $this->request->post('repassword', '' , 'trim'); //确认密码 if (iconv_strlen($captcha, 'utf-8') != config('alisms.length')) { $this->error(__('Captcha is incorrect')); } if (!$newpassword) { $this->error('请输入新密码'); } //验证新密码 if (!Validate::make()->check(['newpassword' => $newpassword], ['newpassword' => 'require|regex:\S{6,30}'])) { $this->error(__('Password must be 6 to 30 characters')); } if (!$repassword) { $this->error('请再次输入密码'); } if ($repassword != $newpassword) { $this->error('两次密码不一致'); } // $user = \app\common\model\User::getById($this->auth->id); // if (!$user) { // $this->error(__('User not found')); // } $ret = Sms::check($this->auth->mobile, $captcha, 'changepwd'); if (!$ret) { $this->error(__('Captcha is incorrect')); } //模拟一次登录 $this->auth->direct($this->auth->id); $ret = $this->auth->changepwd($newpassword, '', true); if ($ret) { Sms::flush($this->auth->mobile, 'changepwd'); $this->success(__('Reset password successful')); } else { $this->error($this->auth->getError()); } } //查询经营信息 public function get_businessinfo() { $data = Db::name('user_business_info')->field('manage, mobile, province, city, area, distribution_channel') ->where(['user_id' => $this->auth->id])->find(); $this->success('经营信息', $data); } //修改经营信息 public function editbusinessinfo() { $manage = $this->request->post('manage', '', 'trim'); //采购负责人 $mobile = $this->request->post('mobile', '', 'trim'); //联系方式 $province = $this->request->post('province', '', 'trim'); //省 $city = $this->request->post('city', '', 'trim'); //市 $area = $this->request->post('area', '', 'trim'); //区 $distribution_channel = $this->request->post('distribution_channel', '', 'trim'); //销售渠道 $data = []; if ($manage) { if (iconv_strlen($manage, 'utf-8') > 50) { $this->error('采购负责人最多50字'); } $data['manage'] = $manage; } if ($mobile) { if (!Validate::regex($mobile, "^1\d{10}$")) { $this->error(__('Mobile is incorrect')); } $data['mobile'] = $mobile; } if ($province && $city && $area) { $data['province'] = $province; $data['city'] = $city; $data['area'] = $area; } if ($distribution_channel) { if (iconv_strlen($distribution_channel, 'utf-8') > 255) { $this->error('销售渠道说明最多50字'); } $data['distribution_channel'] = $distribution_channel; } if (!$data) { $this->error('暂无修改内容'); } $count = Db::name('user_business_info')->where(['user_id' => $this->auth->id])->count(); if ($count) { $data['updatetime'] = time(); $rs = Db::name('user_business_info')->where(['user_id' => $this->auth->id])->setField($data); } else { $data['user_id'] = $this->auth->id; $data['createtime'] = time(); $rs = Db::name('user_business_info')->insertGetId($data); } if (!$rs) { $this->error('修改失败'); } $this->success('修改成功'); } //查询猪车信息 public function getpigcar() { $data = Db::name('user_pig_car')->where(['user_id' => $this->auth->id])->select(); $data = list_domain_image($data, ['images']); $this->success('查询猪车信息', $data); } /** * 添加猪车信息 * *$data = [ [ 'carnumber' => '123', 'carframenumber' => '344', 'images' => '123.jpg,234.jpg,345.jpg' ], [ 'carnumber' => '123', 'carframenumber' => '344', 'images' => '123.jpg,234.jpg,345.jpg' ], [ 'carnumber' => '123', 'carframenumber' => '344', 'images' => '123.jpg,234.jpg,345.jpg' ] ]; * */ public function addpigcar() { $pig_car = input('pig_car', '', 'trim'); //猪车信息json串: carnumber车牌号 carframenumber车架号 images车辆照片 if (!$pig_car) { $this->error('请添加猪车信息'); } $pig_car = json_decode($pig_car, true); if (!$pig_car) { $this->error('请添加猪车信息'); } if (count($pig_car) > 9) { $this->error('一次最多添加9条记录'); } $_data = []; foreach ($pig_car as &$v) { $data = []; if (!$v['carnumber']) { $this->error('请输入车牌号'); break; } if (iconv_strlen($v['carnumber'], 'utf-8') > 50) { $this->error('车牌号最多50字'); break; } if (!$v['carframenumber']) { $this->error('请输入车架号'); break; } if (iconv_strlen($v['carframenumber'], 'utf-8') > 50) { $this->error('车架号最多50字'); break; } if ($v['images']) { $image_arr = explode(',', $v['images']); if (count($image_arr) > 9) { $this->error('每辆车照片最多9张'); break; } $data['images'] = $v['images']; } $data['user_id'] = $this->auth->id; $data['carnumber'] = $v['carnumber']; $data['carframenumber'] = $v['carframenumber']; $data['createtime'] = time(); array_push($_data, $data); } $rs = Db::name('user_pig_car')->insertAll($_data); if (!$rs) { $this->error('添加失败'); } $this->success('添加成功'); } //删除猪车信息 public function delpigcar() { $id = input('id', 0, 'intval'); //猪车id if (!$id) { $this->error('请选择要删除的猪车'); } $info = Db::name('user_pig_car')->where(['id' => $id, 'user_id' => $this->auth->id])->find(); if (!$info) { $this->error('这不是您的车'); } $rs = Db::name('user_pig_car')->where(['id' => $id, 'user_id' => $this->auth->id])->delete(); if (!$rs) { $this->error('删除失败'); } $this->success('删除成功'); } //平台介绍 public function getabout() { $info = Db::name('platform_info')->field('title, content')->where(['type' => 1])->find(); $this->success('平台介绍', $info); } //常见问题 public function problem() { $list = Db::name('problem')->field('id, title, content') ->page($this->page, config('paginate.list_rows'))->order('weigh', 'desc')->select(); $this->success('常见问题', $list); } //投诉举报类型 public function complainttype() { $list = Db::name('complaint_type')->field('id, name')->where(['pid' => 0])->order('weigh', 'desc')->select(); $list = $this->getchildtype($list); $this->success('常见问题', $list); } //无限级投诉举报类型 public function getchildtype($list = []) { $complaint_type = Db::name('complaint_type'); foreach ($list as &$v) { $child = $complaint_type->field('id, name')->where(['pid' => $v['id']])->order('weigh', 'desc')->select(); if ($child) { $child = $this->getchildtype($child); } $v['child'] = $child; } return $list; } //投诉举报 public function complaint() { $complaint_type = input('complaint_type', '', 'trim'); //投诉类型 $order_sn = input('order_sn', '', 'trim'); //订单号 $be_complaint_user = input('be_complaint_user', '', 'trim'); //被投诉人/单位 $complaint_user = input('complaint_user', '', 'trim'); //投诉人 $mobile = input('mobile', '', 'trim'); //联系电话 $code = input('code', '', 'trim'); //验证码 $content = input('content', '', 'trim'); //情况说明 $images = input('images', '', 'trim'); //附件材料 $data = []; if (!$complaint_type) { $this->error('请选择投诉类型'); } if ($order_sn) { if (iconv_strlen($order_sn, 'utf-8') > 255) { $this->error('订单号最多255位'); } //查询订单 $count = Db::name('mark_bid')->where(['user_id' => $this->auth->id, 'order_sn' => $order_sn, 'status' => 1])->count(); if (!$count) { $this->error('请输入正确中标订单号'); } } if (!$be_complaint_user) { $this->error('请输入被投诉人/单位'); } if (iconv_strlen($be_complaint_user, 'utf-8') > 50) { $this->error('被投诉人/单位最多50字'); } if (!$complaint_user) { $this->error('请输入投诉人'); } if (iconv_strlen($complaint_user, 'utf-8') > 50) { $this->error('投诉人最多50字'); } if (!is_mobile($mobile)) { $this->error('请输入正确联系电话'); } if (iconv_strlen($code, 'utf-8') != config('alisms.length')) { $this->error(__('Captcha is incorrect')); } $ret = Sms::check($mobile, $code, 'complaint'); if (!$ret) { $this->error(__('Captcha is incorrect')); } if (!$content) { $this->error('请输入情况说明'); } if (iconv_strlen($content, 'utf-8') > 3000) { $this->error('情况说明最多3000字'); } if ($images) { $image_arr = explode(',', $images); if (count($image_arr) > 9) { $this->error('附件照片最多9张'); } $data['images'] = $images; } $data['user_id'] = $this->auth->id; $data['complaint_type'] = $complaint_type; $data['order_sn'] = $order_sn; $data['be_complaint_user'] = $be_complaint_user; $data['complaint_user'] = $complaint_user; $data['mobile'] = $mobile; $data['content'] = $content; $data['images'] = $images; $data['createtime'] = time(); $rs = Db::name('complaint')->insertGetId($data); if (!$rs) { $this->error('投诉失败'); } Sms::flush($this->auth->mobile, 'complaint'); $this->success('投诉成功'); } //评价列表 public function getmarkcomment() { $list = Db::name('mark_bid_comment')->where(['user_id' => $this->auth->id]) ->page($this->page, config('paginate.list_rows'))->order('createtime', 'desc')->select(); $list = list_domain_image($list, ['images']); $mark = Db::name('mark'); $mark_bid = Db::name('mark_bid'); foreach ($list as &$v) { $v['mark'] = $mark->find($v['mark_id']); $v['mark'] = info_domain_image($v['mark'], ['image', 'video', 'defective_images', 'road_images', 'pig_out_images']); $v['order_sn'] = $mark_bid->where(['id' => $v['mark_bid_id']])->value('order_sn'); } $this->success('评论列表', $list); } //评价 public function markcomment() { $mark_id = input('mark_id', 0, 'intval'); //招标id $content = input('content', '', 'trim'); //情况说明 $images = input('images', '', 'trim'); //附件材料 $data = []; if (!$mark_id) { $this->error('请选择要评价的数据'); } $info = Db::name('mark')->find($mark_id); if (!$info) { $this->error('招标信息不存在'); } $bid_id = Db::name('mark_bid')->where(['user_id' => $this->auth->id, 'mark_id' => $mark_id, 'status' => 1])->value('id'); if (!$bid_id) { $this->error('您未中标,暂不能评价'); } if (!$content) { $this->error('请输入评价内容'); } if (iconv_strlen($content, 'utf-8') > 3000) { $this->error('评价内容最多3000字'); } if ($images) { $image_arr = explode(',', $images); if (count($image_arr) > 9) { $this->error('照片最多9张'); } $data['images'] = $images; } $data['user_id'] = $this->auth->id; $data['mark_id'] = $mark_id; $data['mark_bid_id'] = $bid_id; $data['content'] = $content; $data['images'] = $images; $data['createtime'] = time(); $rs = Db::name('mark_bid_comment')->insertGetId($data); if (!$rs) { $this->error('评价失败'); } $this->success('评价成功'); } //个人账单列表 public function getcompanymoney() { $list = Db::name('company')->field('id, name')->page($this->page, config('paginate.list_rows'))->select(); $company_money_log = Db::name('company_money_log'); foreach ($list as &$v) { $log = $company_money_log->where(['company_id' => $v['id'], 'user_id' => $this->auth->id])->order('id', 'desc')->find(); if ($log) { $v['money'] = $log['after']; $v['can_money'] = $log['after']; } else { $v['money'] = '0'; $v['can_money'] = '0'; } } $this->success('个人账单列表', $list); } //个人账单明细 public function getcompanymoneydetail() { $company_id = input('company_id', 0, 'intval'); //公司id $start_time = input('start_time', 0, 'strtotime'); //开始时间 $end_time = input('end_time', 0, 'strtotime'); //结束时间 if (!$company_id) { $this->error('参数缺失'); } $where['company_id'] = $company_id; $where['user_id'] = $this->auth->id; if ($start_time && $end_time) { $where['createtime'] = ['between', [$start_time, $end_time]]; } $list = Db::name('company_money_log')->field('id, money, memo, createtime') ->where($where)->page($this->page, config('paginate.list_rows'))->order('id', 'desc')->select(); foreach ($list as &$v) { $v['createtime'] = date('Y-m-d H:i:s', $v['createtime']); } $data['income'] = Db::name('company_money_log')->where($where)->where(['money' => ['gt', 0]])->sum('money'); $data['expend'] = Db::name('company_money_log')->where($where)->where(['money' => ['lt', 0]])->sum('money'); $data['list'] = $list; $this->success('个人账单明细', $data); } //关于我们/免责协议/用户协议/隐私政策 public function getagreement() { $type = input('type', 0, 'intval'); if (!in_array($type, [1, 2, 3, 4])) { $this->error('参数错误'); } $info = Db::name('platform_info')->field('title, content')->where(['type' => $type])->find(); $this->success('协议', $info); } //获取openid public function getopenid() { //code $code = $this->request->param('code', '', 'trim');// code值 if (!$code) { $this->error(__('Invalid parameters')); } $config = config('wxchatpay'); $getopenid_url = 'https://api.weixin.qq.com/sns/jscode2session?appid='.$config['app_id'].'&secret='.$config['app_secret'].'&js_code='.$code.'&grant_type=authorization_code'; $openidInfo = httpRequest($getopenid_url, 'GET');//$this->getJson($getopenid_url); $openidInfo = json_decode($openidInfo,true); if(!isset($openidInfo['openid'])) { $this->error('用户openid获取失败', $openidInfo); } $this->success('success', $openidInfo); } //微信登录 public function wxlogin() { $openid = input('openid', '', 'trim'); if (!$openid) { $this->error('参数缺失'); } $user = \app\common\model\User::getByOpenid($openid); if (!$user) { $this->success('用户尚未注册', ['code' => 5]); } if ($user['status'] != 1) { $this->error(__('Account is locked')); } $ret = $this->auth->direct($user->id); if ($ret) { $data = ['userinfo' => $this->auth->getUserinfo()]; $this->success(__('Logged in successful'), $data); } else { $this->error($this->auth->getError()); } } //注册 public function register() { $mobile = $this->request->post('mobile', '', 'trim'); //手机号 $code = $this->request->post('code', '', 'trim'); //验证码 $birthday = $this->request->post('birthday', '', 'strtotime'); //生日 $gender = $this->request->post('gender', 0, 'intval'); //性别:1=男,2=女 $invite_no = $this->request->post('invite_no', '', 'trim'); //邀请码 $openid = $this->request->post('openid', '', 'trim'); //微信openid $nickname = $this->request->post('nickname', '', 'trim'); //微信昵称 $avatar = $this->request->post('avatar', '', 'trim,strip_tags,htmlspecialchars'); //微信头像 $openidcount = Db::name('user')->where(['openid' => $openid])->count('id'); if ($openidcount) { $this->error('微信已经注册,请直接登录'); } if (!Validate::regex($mobile, "^1\d{10}$")) { $this->error(__('Mobile is incorrect')); } $count = Db::name('user')->where(['mobile' => $mobile])->count('id'); if ($count) { $this->error('手机号已被注册'); } if (iconv_strlen($code, 'utf-8') != config('alisms.length')) { $this->error(__('Captcha is incorrect')); } $ret = Sms::check($mobile, $code, 'register'); if (!$ret) { $this->error(__('Captcha is incorrect')); } if (!$birthday || $birthday >= time()) { $this->error('请选择正确生日'); } if (!in_array($gender, [1, 2])) { $this->error('请选择性别'); } if ($invite_no) { $invite_info = Db::name('user')->where(['invite_no' => $invite_no])->find(); if (!$invite_info) { $this->error('邀请码不存在'); } } if (!$nickname || !$avatar) { $this->error('参数缺失'); } if (iconv_strlen($nickname, 'utf-8') > 30 || iconv_strlen($avatar, 'utf-8') > 255) { $this->error('参数错误'); } $ip = request()->ip(); $time = time(); $data = [ 'nickname' => $nickname, 'salt' => Random::alnum(), 'mobile' => $mobile, 'avatar' => $avatar, 'joinip' => $ip, 'jointime' => $time, 'logintime' => $time, 'loginip' => $ip, 'prevtime' => $time, 'createtime' => $time, 'gender' => $gender, 'birthday' => $birthday, 'openid' => $openid, 'invite_no' => $this->myinvite(), 'pre_user_id' => isset($invite_info) ? $invite_info['id'] : 0, 'invite_time' => $time, ]; //开启事务 Db::startTrans(); $rs = Db::name('user')->insertGetId($data); if (!$rs) { Db::rollback(); $this->error('注册失败'); } //生成uid $username = $this->myuid($rs); $rt = Db::name('user')->where(['id' => $rs])->setField('username', $username); if (!$rt) { Db::rollback(); $this->error('注册失败'); } //给用户发放注册优惠券 $register_coupon = Db::name('coupon')->where(['purpose' => 1, 'status' => 1])->order('weigh desc, id desc')->find(); if ($register_coupon) { $register_coupon_data = [ 'user_id' => $rs, 'coupon_id' => $register_coupon['id'], 'title' => $register_coupon['title'], 'desc' => $register_coupon['desc'], 'type' => $register_coupon['type'], 'money' => $register_coupon['money'], 'minmoney' => $register_coupon['minmoney'], 'purpose' => $register_coupon['purpose'], 'starttime' => time(), 'endtime' => time() + $register_coupon['effectiveday'] * 86400, 'createtime' => time() ]; $register_coupon_rs = Db::name('user_coupon')->insertGetId($register_coupon_data); if (!$register_coupon_rs) { Db::rollback(); $this->error('注册失败'); } } //查询是否需要给上级发放优惠券 if (isset($invite_info)) { //查询上一次获得推广优惠券时间 $last_coupon = Db::name('user_coupon')->where(['user_id' => $invite_info['id'], 'purpose' => 2])->order('id', 'desc')->find(); $last_coupon_time = $last_coupon ? $last_coupon['createtime'] : 0; //获取后台配置推广获得优惠券指定人数 $invitepersonnum = (int)config('site.invitepersonnum'); //查询最新推广任务 $invite_count = Db::name('user')->where(['pre_user_id' => $invite_info['id'], 'createtime' => ['gt', $last_coupon_time]])->count(); if ($invite_count >= $invitepersonnum && $invitepersonnum > 0) { //每邀请10人发放一次优惠券 //查询推广优惠券 $invite_coupon = Db::name('coupon')->where(['purpose' => 2, 'status' => 1])->order('weigh desc, id desc')->find(); if ($invite_coupon) { $invite_coupon_data = [ 'user_id' => $invite_info['id'], 'coupon_id' => $invite_coupon['id'], 'title' => $invite_coupon['title'], 'desc' => $invite_coupon['desc'], 'type' => $invite_coupon['type'], 'money' => $invite_coupon['money'], 'minmoney' => $invite_coupon['minmoney'], 'purpose' => $invite_coupon['purpose'], 'starttime' => time(), 'endtime' => time() + $invite_coupon['effectiveday'] * 86400, 'createtime' => time() ]; $invite_coupon_rs = Db::name('user_coupon')->insertGetId($invite_coupon_data); if (!$invite_coupon_rs) { Db::rollback(); $this->error('注册失败'); } } } } Db::commit(); $ret = $this->auth->direct($rs); if ($ret) { $data = ['userinfo' => $this->auth->getUserinfo()]; $this->success(__('Sign up successful'), $data); } else { $this->error($this->auth->getError()); } } //生成邀请码 public function myinvite() { $invite = Random::alnum(7); $count = Db::name('user')->where(['invite_no' => $invite])->count('id'); if ($count) { $this->myinvite(); } return $invite; } //生成uid public function myuid($id = 0) { if (strlen($id) < 8) { $username_len = 8 - strlen($id); $username = $id . Random::numeric($username_len); } else { $username = $id; } $count = Db::name('user')->where(['username' => $username])->count('id'); if ($count) { $this->myuid($id); } return $username; } //消息列表 public function sysmsg() { $list = Db::name('sys_msg')->field('id, title, content, createtime')->where(['user_id' => $this->auth->id]) ->page($this->page, $this->pagenum)->order('id desc')->select(); foreach ($list as &$v) { $v['createtime'] = date('Y-m-d H:i', $v['createtime']); } $this->success('消息列表', $list); } //查询当前会员等级信息 public function uservip() { //更新会员等级 $this->checkviplevel($this->auth->id); //用户信息 $user = Db::name('user')->find($this->auth->id); //会员信息 $vip_info = Db::name('vip')->find($user['maxlevel']); //下一级所需成长值 $next_vip = Db::name('vip')->where(['id' => ['gt', $user['maxlevel']]])->find(); if (!$next_vip) { //顶部信息 $vip_info['vip_desc'] = '已是最高会员'; //成长值百分比0-100 $vip_info['growthvalue_percentage'] = 100; } else { //顶部信息 $need_growthvalue = $next_vip['growthvalue'] - $user['growthvalue']; $vip_info['vip_desc'] = $vip_info['title'] . '还需' . $need_growthvalue . '成长值成为' . $next_vip['title']; //成长值百分比0-100 $vip_info['growthvalue_percentage'] = ceil($user['growthvalue'] / $next_vip['growthvalue'] * 100); } //体验会员到期时间 $vip_info['experiencetime'] = $user['experiencetime'] > time() ? date('Y-m-d', $user['experiencetime']) : ''; //判断是不是生日 1是 0否 $vip_info['is_birth'] = date('md', time()) == date('md', strtotime($this->auth->birthday)) ? 1: 0; $this->success('查询当前会员等级信息', $vip_info); } //查询所有会员 public function vip() { //更新会员等级 $this->checkviplevel($this->auth->id); //用户信息 $user = Db::name('user')->find($this->auth->id); //会员信息 $vip_info = Db::name('vip')->find($user['growthlevel']); //下一级所需成长值 $next_vip = Db::name('vip')->where(['id' => ['gt', $user['growthlevel']]])->find(); if (!$next_vip) { //顶部信息 $vip_info['vip_desc'] = '已是最高会员'; //成长值百分比0-100 $vip_info['growthvalue_percentage'] = 100; } else { //顶部信息 $need_growthvalue = $next_vip['growthvalue'] - $user['growthvalue']; $vip_info['vip_desc'] = $vip_info['title'] . '还需' . $need_growthvalue . '成长值成为' . $next_vip['title']; //成长值百分比0-100 $vip_info['growthvalue_percentage'] = ceil($user['growthvalue'] / $next_vip['growthvalue'] * 100); } //所有会员列表 $list = Db::name('vip')->select(); $vip_privilege = Db::name('vip_privilege'); foreach ($list as $k => &$v) { $v['vip_desc'] = ''; //顶部信息 $v['growthvalue_percentage'] = 0; //成长值百分比0-100 $v['experiencetime'] = ''; //体验会员到期时间 if ($v['id'] == $user['maxlevel']) { $v['now_level'] = 1; //是否是当前等级 1是 0否 if ($user['maxlevel'] == $user['experiencelevel'] && $user['experiencetime'] > time()) { //实际有效会员ID是体验会员id时, 展示体验会员到期时间 $v['experiencetime'] = '有效期至' . date('Y-m-d', $user['experiencetime']); } } else { $v['now_level'] = 0; } if ($v['id'] == $user['growthlevel']) { $v = array_merge($v, $vip_info); } $v['vip_privilege'] = $vip_privilege->field('id, title, desc') ->where(['vip_id' => $v['id']])->order('weigh desc')->select(); } $this->success('查询所有会员', $list); } //意见反馈 public function feedback() { $content = input('content', '', 'trim'); //问题描述 $images = input('images', '', 'trim'); //反馈图片,最多9张用,拼接 $mobile = input('mobile', '', 'trim'); //联系电话 $data = []; if (!$content) { $this->error('请输入情况说明'); } if (iconv_strlen($content, 'utf-8') > 3000) { $this->error('情况说明最多3000字'); } if ($images) { $image_arr = explode(',', $images); if (count($image_arr) > 9) { $this->error('附件照片最多9张'); } $data['images'] = $images; } if (!is_mobile($mobile)) { $this->error('请输入正确联系电话'); } $data['user_id'] = $this->auth->id; $data['content'] = $content; $data['images'] = $images; $data['mobile'] = $mobile; $data['createtime'] = time(); $rs = Db::name('feedback')->insertGetId($data); if (!$rs) { $this->error('反馈失败'); } $this->success('反馈成功'); } //我的优惠券 public function mycoupon() { $type = input('type', 0, 'intval'); //类型:1未使用 2已使用 3已过期 if (!in_array($type, [1, 2, 3])) { $this->error('参数错误'); } $where['user_id'] = $this->auth->id; if ($type == 1) { $where['endtime'] = ['egt', time()]; $where['status'] = 0; } elseif ($type == 2) { $where['status'] = 1; } elseif ($type == 3) { $where['endtime'] = ['lt', time()]; $where['status'] = 0; } $list = Db::name('user_coupon')->field('id, title, desc, type, money, minmoney, endtime')->where($where)->page($this->page, $this->pagenum)->select(); foreach ($list as &$v) { $v['endtime'] = date('Y-m-d', $v['endtime']); } $this->success('我的优惠券', $list); } //充值列表 public function rechargelist() { $list = Db::name('recharge')->field('id, title, price, coupon_id, couponnum')->order('weigh desc')->select(); $coupon = Db::name('coupon'); foreach ($list as &$v) { $coupon_info = $coupon->find($v['coupon_id']); if ($coupon_info) { if ($coupon_info['type'] == 1) { $v['coupon_title'] = $coupon_info['money'] . '折'; } else { $v['coupon_title'] = $coupon_info['money'] . '元'; } } else { $v['coupon_title'] = ''; } } $this->success('充值列表', $list); } //资金明细 public function usermoneylog() { $list = Db::name('user_money_log')->field('id, money, memo, createtime') ->where(['user_id' => $this->auth->id]) ->page($this->page, $this->pagenum) ->order('id desc')->select(); foreach ($list as &$v) { $v['createtime'] = date('Y-m-d H:i:s', $v['createtime']); } $this->success('资金明细', $list); } //充值 public function recharge() { $id = input('id', 0, 'intval'); if (!$id) { $this->error('参数缺失'); } $info = Db::name('recharge')->where(['id' => $id])->find(); if (!$info) { $this->error('充值金额不存在'); } if ($info['price'] <= 0) { $this->error('充值价格异常'); } //生成支付订单记录 $rechar_order['user_id'] = $this->auth->id; $rechar_order['order_no'] = date('YmdHis', time()) . rand(10000000, 99999999); //微信订单编号 $rechar_order['money'] = $info['price']; $rechar_order['purpose'] = 2; //充值用途:1=支付订单,2=充值,3=开通会员 $rechar_order['pay_type'] = 'wechat'; $rechar_order['relation_id'] = $id; $rechar_order['createtime'] = time(); //开始事务 $result = Db::name('rechar_order')->insertGetId($rechar_order); if (!$result) { $this->error('网络延迟,请稍后再试'); } //构建支付链接数据 $wxData['body'] = '充值'; $wxData['out_trade_no'] = $rechar_order['order_no']; // $wxData['total_fee'] = $info['price']; $wxData['total_fee'] = 0.01; $wxData['openid'] = $this->auth->openid; // require_once($_SERVER['DOCUMENT_ROOT'] . '/Plugins/Weixin/WxPay/WxPay.php'); $wxPay = new wxpay\WxPay(config('wxchatpay')); $doResult = $wxPay->WxPayJs($wxData); $this->success('微信支付参数返回成功', $doResult); } //邀请好友顶部信息 public function invitetop() { $data['invite_no'] = $this->auth->invite_no; //邀请码 $data['invite_count'] = Db::name('user')->where(['pre_user_id' => $this->auth->id])->count('id'); //邀请人数 $data['coupon_count'] = Db::name('user_coupon')->where(['user_id' => $this->auth->id, 'purpose' => 2])->count('id'); $this->success('邀请好友顶部信息', $data); } //邀请好友底部列表 public function invitebottom() { $type = input('type', 0, 'intval'); //1邀请的好友 2报名的好友 if (!in_array($type, [1, 2])) { $this->error('参数错误'); } if ($type == 1) { $list = Db::name('user')->field('id, avatar, nickname, invite_time') ->where(['pre_user_id' => $this->auth->id])->page($this->page, $this->pagenum)->order('id desc')->select(); } else { $invite_ids = Db::name('user')->where(['pre_user_id' => $this->auth->id])->column('id'); if (!$invite_ids) { $this->success('报名好友列表', []); } $list = Db::name('active_order')->alias('a') ->join('hu_user b', 'a.user_id = b.id', 'left') ->field('b.id, b.avatar, b.nickname, b.invite_time') ->where(['a.user_id' => ['in', $invite_ids]]) ->page($this->page, $this->pagenum) ->order('a.id desc')->select(); } $list = list_domain_image($list, ['avatar']); foreach ($list as &$v) { $v['invite_time'] = date('Y-m-d', $v['invite_time']); } $this->success('邀请好友底部列表', $list); } //我的订单 public function myorder() { $type = input('type', 0, 'intval'); //状态:0=待付款,1=待出行,2=已完成,3=已取消 if (!in_array($type, [0, 1, 2, 3])) { $this->error('参数错误'); } $list = Db::name('active_order')->where(['user_id' => $this->auth->id, 'status' => $type])->page($this->page, $this->pagenum)->order('id desc')->select(); $active = Db::name('active'); foreach ($list as &$v) { $v['button_status'] = 0;//待出行按钮: 0不展示 1退款 2修改联系人 $v['active'] = $active->find($v['active_id']); $v['active'] = info_domain_image($v['active'], ['image']); if ($v['status'] == 1) { if ($v['active']['refundendtime'] >= time()) { $v['button_status'] = 1; } elseif ($v['active']['refundendtime'] < time() && $v['active']['starttime'] >= time()) { $v['button_status'] = 2; } } if ($v['active']['maxperson'] <= $v['active']['currentperson']) { $v['is_full'] = 1; //已报满 } else { $v['is_full'] = 0; //未报满 } } $this->success('我的订单', $list); } //我的订单详情 public function myorderinfo() { $id = input('id', 0, 'intval'); //订单id if (!$id) { $this->error('参数缺失'); } $info = Db::name('active_order')->where(['id' => $id, 'user_id' => $this->auth->id])->find(); if (!$info) { $this->error('数据不存在'); } $info['createtime'] = date('Y-m-d H:i:s', $info['createtime']); //查询活动信息 $active = Db::name('active')->find($info['active_id']); //待出行按钮: 0不展示 1退款 2修改联系人 $info['button_status'] = 0; if ($info['status'] == 1) { if ($active['refundendtime'] >= time()) { $info['button_status'] = 1; } elseif ($active['refundendtime'] < time() && $active['starttime'] >= time()) { $info['button_status'] = 2; } } $active = info_domain_image($active, ['image']); $active['starttime'] = date('Y-m-d H:i', $active['starttime']); $active['endtime'] = date('Y-m-d H:i', $active['endtime']); $active['collectiontime'] = date('Y-m-d H:i', $active['collectiontime']); $active['signupendtime'] = date('Y-m-d H:i', $active['signupendtime']); $active['refundendtime'] = date('Y-m-d H:i', $active['refundendtime']); //查询报名人员 $active_people = Db::name('active_people')->where(['order_id' => $id])->field('id, name, mobile')->select(); $info['active'] = $active; $info['active_people'] = $active_people; $this->success('我的订单详情', $info); } //查看报名人信息 public function activepeople() { $id = input('id', 0, 'intval'); //报名人员id if (!$id) { $this->error('参数缺失'); } $info = Db::name('active_people')->where(['id' => $id, 'user_id' => $this->auth->id])->find(); if (!$info) { $this->error('数据不存在'); } $this->success('查看报名人信息', $info); } //修改报名人信息 public function modifyactivepeople() { $id = input('id', 0, 'intval'); //报名人员id $name = input('name', '', 'trim'); //姓名 $idcard = input('idcard', '', 'trim'); //身份证号 $mobile = input('mobile', '', 'trim'); //手机号 $emergencycontact = input('emergencycontact', '', 'trim'); //紧急联系人 $contactmobile = input('contactmobile', '', 'trim'); //紧急联系方式 if (!$id) { $this->error('参数缺失'); } $info = Db::name('active_people')->where(['id' => $id, 'user_id' => $this->auth->id])->find(); if (!$info) { $this->error('数据不存在'); } if ($info['status'] == 2) { $this->success('订单已经结束'); } if ($info['status'] == 3) { $this->success('订单已经取消'); } if ($info['modifystatus'] == 1) { $this->error('报名信息正在修改中,请等待后台审核'); } //查询活动状态 $active = Db::name('active')->find($info['active_id']); if (!$active) { $this->success('活动不存在或已取消'); } if ($active['status'] == 1) { $this->error('活动已成行,不能修改信息'); } if (time() <= $active['refundendtime'] || time() > $active['starttime']) { $this->error('当前时间段暂不可修改信息'); } //查询是否申请过退款 $active_refund = Db::name('active_refund')->where(['order_id' => $info['active_id'], 'status' => 0])->count('id'); if ($active_refund) { $this->error('您正在申请退款,暂不可修改信息'); } //检查信息 if (!$name || iconv_strlen($name, 'utf-8') > 50) { $this->error('请输入正确姓名'); } if (iconv_strlen($idcard, 'utf-8') != 18) { $this->error('请输入正确身份证号'); } if (!is_mobile($mobile)) { $this->error('请输入正确手机号'); } if (!$emergencycontact || iconv_strlen($emergencycontact, 'utf-8') > 50) { $this->error('请输入紧急联系人'); } if (!is_mobile($contactmobile)) { $this->error('请输入正确紧急联系人方式'); } //判断是否报名过 $count = Db::name('active_people')->where(['active_id' => $info['active_id'], 'idcard' => $idcard, 'status' => ['neq', 3]])->count('id'); if ($count) { $this->error('该信息已报名过活动'); } $count2 = Db::name('active_people_modify')->where(['active_id' => $info['active_id'], 'idcard' => $idcard, 'status' => 0])->count('id'); if ($count2) { $this->error('该信息已提交过修改,请等待审核'); } //构建修改数据 $data = [ 'active_id' => $info['active_id'], 'order_id' => $info['order_id'], 'people_id' => $id, 'user_id' => $info['user_id'], 'name' => $name, 'credtype' => $info['credtype'], 'idcard' => $idcard, 'mobile' => $mobile, 'emergencycontact' => $emergencycontact, 'contactmobile' => $contactmobile, 'insurance' => $info['insurance'], 'originalprice' => $info['originalprice'], 'vipprice' => $info['vipprice'], 'coupon_id' => $info['coupon_id'], 'coupontype' => $info['coupontype'], 'couponprice' => $info['couponprice'], 'is_free' => $info['is_free'], 'price' => $info['price'], 'is_self' => $info['is_self'], 'createtime' => time() ]; //开启事务 Db::startTrans(); //添加记录 $rs = Db::name('active_people_modify')->insertGetId($data); if (!$rs) { Db::rollback(); $this->error('修改失败'); } //修改原记录状态 $rt = Db::name('active_people')->where(['id' => $id, 'modifystatus' => 0])->setField('modifystatus', 1); if (!$rt) { Db::rollback(); $this->error('修改失败'); } Db::commit(); $this->success('修改成功,请等待审核'); } //取消订单 public function cancelorder() { $id = input('id', 0, 'intval'); //订单id if (!$id) { $this->error('参数缺失'); } $info = Db::name('active_order')->where(['id' => $id, 'user_id' => $this->auth->id])->find(); if (!$info) { $this->error('数据不存在'); } if ($info['status'] != 0) { $this->error('网络延迟,请刷新重试'); } if ($info['createtime'] + 1800 < time()) { $this->error('订单超时,系统将自动取消'); } //查询活动是否存在 $active_info = Db::name('active')->find($info['active_id']); if (!$active_info) { $this->error('活动不存在'); } //开启事务 Db::startTrans(); //修改订单信息 $rs = Db::name('active_order')->where(['id' => $id, 'status' => 0])->setField('status', 3); if (!$rs) { Db::rollback(); $this->error('网络延迟,请稍后再试'); } //修改活动人员 $rt = Db::name('active_people')->where(['order_id' => $id, 'status' => 0])->setField(['status' => 3, 'modifystatus' => 0]); if (!$rt) { Db::rollback(); $this->error('网络延迟,请稍后再试'); } //修改活动人员修改记录 $res = Db::name('active_people_modify')->where(['order_id' => $id, 'status' => 0])->setField('status', 2); if ($res === false) { Db::rollback(); $this->error('网络延迟,请稍后再试'); } //减少活动已报名人数 $currentperson = $active_info['currentperson'] - $info['number']; $active_rs = Db::name('active')->where(['id' => $info['active_id'], 'currentperson' => $active_info['currentperson']])->setField('currentperson', $currentperson); if (!$active_rs) { Db::rollback(); $this->error('网络延迟,请稍后再试'); } Db::commit(); $this->success('修改成功'); } //支付订单 public function payorder() { $id = input('id', 0, 'intval'); //订单id if (!$id) { $this->error('参数缺失'); } $info = Db::name('active_order')->where(['id' => $id, 'user_id' => $this->auth->id])->find(); if (!$info) { $this->error('数据不存在'); } if ($info['status'] != 0) { $this->error('当前订单状态不能支付'); } if ($info['createtime'] + 1800 < time()) { $this->error('订单支付超时,请重新报名'); } //查询活动是否存在 $active_info = Db::name('active')->find($info['active_id']); if (!$active_info) { $this->error('活动不存在'); } if ($active_info['status'] == 2) { $this->error('活动已经结束'); } if ($active_info['status'] == 3) { $this->error('活动已取消'); } $pay_count = Db::name('rechar_order')->where(['user_id' => $this->auth->id, 'purpose' => 1, 'pay_type' => 'wechat', 'relation_id' => $id, 'status' => 1])->count('id'); if ($pay_count) { $this->error('您已成功支付过,请勿重复支付'); } //生成支付订单记录 $rechar_order['user_id'] = $this->auth->id; $rechar_order['order_no'] = date('YmdHis', time()) . rand(10000000, 99999999); //微信订单编号 $rechar_order['money'] = $info['price']; $rechar_order['purpose'] = 1; //充值用途:1=支付订单,2=充值,3=开通会员 $rechar_order['pay_type'] = 'wechat'; $rechar_order['relation_id'] = $id; $rechar_order['createtime'] = time(); $result = Db::name('rechar_order')->insertGetId($rechar_order); if (!$result) { $this->error('网络延迟,请稍后再试'); } //构建支付链接数据 $wxData['body'] = '报名活动支付'; $wxData['out_trade_no'] = $rechar_order['order_no']; // $wxData['total_fee'] = $total_amount; $wxData['total_fee'] = 0.01; $wxData['openid'] = $this->auth->openid; // require_once($_SERVER['DOCUMENT_ROOT'] . '/Plugins/Weixin/WxPay/WxPay.php'); $wxPay = new wxpay\WxPay(config('wxchatpay')); $doResult = $wxPay->WxPayJs($wxData); $this->success('微信支付参数返回成功', $doResult); } //申请退款 public function applyrefund() { $id = input('id', 0, 'intval'); //订单id if (!$id) { $this->error('参数缺失'); } $info = Db::name('active_order')->where(['id' => $id, 'user_id' => $this->auth->id])->find(); if (!$info) { $this->error('数据不存在'); } if ($info['status'] != 1) { $this->error('当前订单状态不能退款'); } //查询是否已经申请过 $count = Db::name('active_refund')->where(['order_id' => $id, 'status' => 0])->count('id'); if ($count) { $this->error('您已申请过退款,请等待后台审核'); } //查询活动是否存在 $active_info = Db::name('active')->find($info['active_id']); if (!$active_info) { $this->error('活动不存在'); } if (time() > $active_info['refundendtime']) { $this->error('已超过退款截止时间,暂不能退款'); } //用户取消订单每人扣费金额(元) $cancelorder_price = config('site.cancelorder'); if ($cancelorder_price < 0) { $this->error('退款手续费异常,请联系管理员'); } //退款金额 $refundprice = number_format($info['price'] - $cancelorder_price * $info['number'], 2, '.', ''); $refundprice = $refundprice > 0 ? $refundprice : 0; //构建申请数据 $data = [ 'active_id' => $info['active_id'], 'order_id' => $id, 'user_id' => $this->auth->id, 'paytype' => $info['paytype'], 'price' => $info['price'], 'number' => $info['number'], 'transaction_id' => $info['transaction_id'], 'refund_no' => $info['paytype'] ? date('YmdHis', time()) . rand(10000000, 99999999) : '', //退款单号 'refundprice' => $refundprice, 'createtime' => time() ]; $rs = Db::name('active_refund')->insertGetId($data); if (!$rs) { $this->error('申请退款失败'); } $this->success('申请退款成功,请等待审核'); } }