123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322 |
- <?php
- namespace app\index\controller;
- use app\model\Building as BuildingModel;
- use app\model\BuildingHousetype;
- use app\model\BuildingProgress;
- use app\model\Construction;
- use app\model\ConstructionRecord;
- use app\model\ConstructionStep;
- use app\model\Miniprogram;
- use app\model\ShortUrl;
- use app\model\User;
- use app\model\Company;
- use think\facade\Cache;
- use think\facade\View;
- use wx\miniprogram\Qrcode;
- use wx\miniprogram\UrlScheme;
- use app\model\BuildingConstruction;
- use app\model\BuildingMaterialCase;
- use app\model\Community;
- use wx\offiaccount\JsSdk;
- use app\model\AgentArticle;
- class Web
- {
- /**
- * 短链接页面
- */
- public function index($tag)
- {
- // if(!request()->isMobile()) return redirect('index/index');
- // 查询参数获取
- $shortUrl = ShortUrl::where(['uri' => $tag, 'type' => 'share'])->find();
- if (empty($shortUrl)) {
- abort(404, '内容不存在');
- }
- $param = json_decode($shortUrl->content, true);
- $scheme = new UrlScheme();
- // class
- $type = $param['type'];
- $strpos = strpos($type, '_vr');
- if ($strpos){
- $type = str_replace('_vr', '', $type);
- }
- $className = 'app\\model\\' . ucfirst($type);
- if (!class_exists($className)) {
- abort(404, '内容不存在');
- }
- $mini = Miniprogram::where(['notify' => $param['client_type']])->find();
- view::assign('mini_account', $mini->account);
- $accessToken = $mini->accesstoken;
- $company = Company::with(['brand'])->where('root_id', $mini->root_id)->field(['company_name', 'logo', 'company_brand'])->find();
- if (!empty($param['id'])) {
- if ($strpos) {
- $data['title'] = 'VR预览';
- $data['vr_link'] = $param['other_data'];
- } elseif (strtolower($param['type']) == 'construction') {
- // 在施工地信息处理
- $data = Construction::with(['style', 'designer', 'housetype', 'community'])->find($param['id']);
- $root_id = $data['root_id'];
- $step_list = ConstructionStep::where('root_id', '=', $root_id)->order('order asc')->select()->toArray();
- if (!empty($step_list)) {
- $record_list = ConstructionRecord::where([['construction_id', '=', $param['id']]])->order('update_time desc')->select();
- $step_now = 0; //进行到哪一步了
- foreach ($step_list as $k => $v) {
- foreach ($record_list as $kk => $vv) {
- if ($v['id'] == $vv['step_id'] && $v['order'] > $step_now) {
- $step_now = $v['order'];
- }
- }
- }
- foreach ($step_list as $k => $v) {
- $step_list[$k]['upload'] = 0; // 判断是否上传
- $step_list[$k]['need_upload'] = 0; // 判断节点是否变色(已过此节点,但是没上传)
- $have = false; //是否有上传 true有
- $need_have = false; //没上传,但是后面的节点上传了 true是
- $step_list[$k]['data'] = [];
- foreach ($record_list as $kk => $vv) {
- if ($v['id'] == $vv['step_id']) {
- $have = true;
- $step_list[$k]['data'] = $vv;
- }
- }
- if ($have == false && $v['order'] < $step_now) {
- $need_have = true;
- }
- if ($have) {
- $step_list[$k]['upload'] = 1;
- } elseif ($need_have) {
- $step_list[$k]['need_upload'] = 1;
- }
- }
- $data['step_list'] = $step_list;
- } else {
- $data['step_list'] = [];
- }
- } elseif (strtolower($param['type']) == 'building') {
- $data = BuildingModel::find($param['id']);
- //关联在施工地数量
- $data['start_num']=BuildingConstruction::where('building_id', '=', $param['id'])->count();
- $data['end_num'] = BuildingMaterialCase::where([['building_id', '=', $param['id']]])->count();
- $area_list = BuildingHousetype::where('building_id', '=', $param['id'])->order('area asc')->limit(3)->column('area');
- $data['area_list'] = implode('/', array_values(array_unique(array_filter($area_list))));
- //小区户型
- $housetype = BuildingHousetype::where('building_id', '=', $param['id'])->withCount(['materialCase'])->select();
- $data['housetype'] = $housetype->toArray();
- $data['housetype_count'] = $housetype->count();
- $progress_list = BuildingProgress::where('building_id', '=', $param['id'])->order('addtime desc')->select()->each(function ($item) {
- $item->vr = explode(',', $item['vr']);
- });
- $data['progress'] = $progress_list;
- } elseif (strtolower($param['type']) == 'housetype') {
- //
- $data = BuildingHousetype::find($param['id']);
- $build = BuildingModel::where('id',$data->building_id)->field('id,name,address,community_id')->findOrEmpty();
- if (!$build->isEmpty()){
- $build->community = $build->community_id ? Community::where('id',$build->community_id)->value('name') : '';
- }
- View::assign('build', $build);
- } elseif(strtolower($param['type']) == 'agentarticle'){
- $data = AgentArticle::find($param['id']);
- $data->files = !empty($data['file'][0]) ? str_replace('https://'.config('app.ali_oss_bindurl').'/','',$data['file'][0]) : '';
- } else {
- $className = 'app\\model\\' . ucfirst($param['type']);
- if (!class_exists($className)) {
- abort(404, '内容不存在');
- }
- $obj = new $className();
- $data = $obj->find($param['id']);
- }
- //短链中间页展示内容
- $data['cover_file'] = $this->param_content($param['path'], $data);
- View::assign('data', $data);
- } else {
- // 获取小程序二维码
- $qrObj = new Qrcode;
- $qrdata = [
- 'scene' => $param['query'],
- 'page' => $param['path'],
- 'width' => '280px',
- ];
- $qr = $qrObj->getUnlimited($accessToken, $qrdata);
- $rs = json_decode($qr, true);
- if (!is_null($rs)) {
- trace('名片二维码生成失败' . ';error:' . $qr, 'error');
- }
- $path = 'share_qr_unlimit' . DIRECTORY_SEPARATOR . uniqid() . '.jpeg';
- ossContentUpload($path, $qr);
- View::assign('qrcode', request()->domain() . '/' . $path);
- }
- // 设置分享人昵称
- $nickname = User::where('id', $param['user_id'])->value('nickname');
- View::assign('nickname', $nickname);
- $data = [
- 'jump_wxa' => [
- 'path' => $param['path'],
- 'query' => $param['query'],
- 'env_version' => isset($param['env_version']) ? $param['env_version'] : 'release',
- ],
- 'expire_type' => 1,
- 'expire_interval' => 30 // 链接有效时间30天
- ];
- $rs = $scheme->generate($accessToken, $data);
- if (isset($rs['errcode']) && $rs['errcode'] != 0) {
- trace($rs['errmsg'], 'error');
- }
- // 设置分享链接
- $jssdk = new JsSdk();
- $appid = config('app.official_appid');
- if (cache('?jsapi_ticket')) {
- $ticket = cache('jsapi_ticket');
- } else {
- // 获取普通access_token
- if (!$token = Cache::get('zqxg_offi_access_token')) {
- $token = getAccessToken($appid, config('app.official_secret'));
- Cache::set('zqxg_offi_access_token', $token, 7100);
- }
- $ticket = $jssdk->getJsApiTicket($token);
- cache('jsapi_ticket', $ticket, 7200);
- }
- $signPackage = $jssdk->getSignPackage($ticket);
- $signPackage['appid'] = $appid;
- View::assign('wxconfig', $signPackage);
- View::assign('company', $company);
- View::assign('query', $param['query']);
- View::assign('path', $param['path']);
- View::assign('urlsheme', $rs['openlink']);
- return View::fetch();
- }
- /*
- * 短链接中间页面需要展示的不同内容定义
- * path:分享的路径
- */
- private function param_content($path, $data)
- {
- $dufault_img = 'https://o.nczyzs.com/xcx/nonedata.jpg';
- $cover_file = '';
- switch ($path) {
- //口碑详情
- case '/share/pages/publicpraisemsg/publicpraisemsg':
- if ($data['difference'] == 1) {
- $cover_file = $data['cover'] ?: (!empty($data['pics']) ? $data['pics'][0].'?x-oss-process=video/snapshot,t_100,f_jpg,w_375,m_fast' : $dufault_img);
- }else{
- $cover_file = !empty($data['pics']) ? $data['pics'][0] : $dufault_img;
- }
- break;
- //视频详情
- case '/share/pages/videoshare/videoshare':
- //$cover_file = !empty($data['video_url']) ? $data['video_url'].'?x-oss-process=video/snapshot,t_100,f_jpg,w_500,m_fast' : $dufault_img;
- $cover_file = !empty($data['cover']) ? $data['cover'] : $data['video_url'] . '?x-oss-process=video/snapshot,t_100,f_jpg,w_500,m_fast';
- break;
- //图文详情
- case '/share/pages/articleshare/articleshare':
- //案例详情
- case '/share/pages/materialcase/materialcase':
- $cover_file = !empty($data['cover_img']) ? $data['cover_img'] : $dufault_img;
- break;
- // 活动详情
- case '/share/pages/activitymsg/activitymsg':
- // 在施工地
- case '/share/pages/constructsite/constructsite':
- $cover_file = !empty($data['cover']) ? $data['cover'] : $dufault_img;
- break;
- // vr楼书
- case '/share/pages/buildprogress/buildprogress':
- $cover_file = !empty($data['cover'][0]) ? $data['cover'][0] : $dufault_img;
- break;
- // 活码
- case '/share/pages/channelsignup/channelsignup':
- $cover_file = !empty($data['poster_img']) ? $data['poster_img'] : $dufault_img;
- break;
- case '/share/pages/other/other':
- // vr
- //$cover_file = !empty($data['vr_link']) ? $data['vr_link'] : $dufault_img;
- $cover_file = $dufault_img;
- break;
- }
- return $cover_file;
- }
- /**
- * 访问链接打开小程序
- */
- public function open($uri)
- {
- // 查询参数获取
- $shortUrl = ShortUrl::where(['uri' => $uri, 'type' => 'join_company'])->find();
- if (empty($shortUrl)) {
- abort(404, '内容不存在');
- }
- $param = json_decode($shortUrl->content, true);
- $scheme = new UrlScheme();
- $mini = Miniprogram::where(['notify' => $param['client_type']])->find();
- view::assign('mini_account', $mini->account);
- $accessToken = $mini->accesstoken;
- $company = Company::with(['brand'])->where('root_id', $mini->root_id)->field(['company_name', 'logo', 'company_brand'])->find();
- $data = [
- 'jump_wxa' => [
- 'path' => $param['path'],
- 'query' => $param['query'],
- 'env_version' => isset($param['env_version']) ? $param['env_version'] : 'release',
- ],
- 'expire_type' => 1,
- 'expire_interval' => 30 // 链接有效时间30天
- ];
- $rs = $scheme->generate($accessToken, $data);
- if (isset($rs['errcode']) && $rs['errcode'] != 0) {
- trace($rs['errmsg'], 'error');
- }
- // 设置分享链接
- $jssdk = new JsSdk();
- $appid = config('app.official_appid');
- if (cache('?jsapi_ticket')) {
- $ticket = cache('jsapi_ticket');
- } else {
- // 获取普通access_token
- if (!$token = Cache::get('zqxg_offi_access_token')) {
- $token = getAccessToken($appid, config('app.official_secret'));
- Cache::set('zqxg_offi_access_token', $token, 7100);
- }
- $ticket = $jssdk->getJsApiTicket($token);
- cache('jsapi_ticket', $ticket, 7200);
- }
- $signPackage = $jssdk->getSignPackage($ticket);
- $signPackage['appid'] = $appid;
- View::assign('wxconfig', $signPackage);
- View::assign('company', $company);
- View::assign('query', $param['query']);
- View::assign('path', $param['path']);
- View::assign('urlsheme', $rs['openlink']);
- return View::fetch();
- }
- /**
- * vr作品预览页面
- */
- public function vr()
- {
- return View::fetch();
- }
- }
|