cakephp的 cake24CakeControllerBaseController.php
Posted 小白兔晒黑了
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cakephp的 cake24CakeControllerBaseController.php相关的知识,希望对你有一定的参考价值。
<?php /** * 该方法公共依赖层控制器 * 在此控制器下新增的方法建议统一加上前缀 cake24_ 避免和之前的方法冲突 * @author dutongzhen */ class BaseController extends Controller { /** * 报名入口,检查当前号码是否存在于系统,如存在以下板块,则将被重置到报名管理中 * 2015-12-30 * Sherwin **/ public function cake24_ck_baoming_reset($mobile) { $this->autoRender = false; $quest = false; // $mobile = $_GET[‘mobile‘]; /* $this->loadModel("Baomings"); $this->loadModel("RejectLogs"); $this->loadModel("ResetLogs");*/ $info = $this->Baomings->find("first", array(‘conditions‘ => array(‘Baomings.mobile‘ => $mobile), ‘order‘ => array(‘Baomings.id DESC‘))); $content = ""; if (empty($info)) { return json_encode(array(‘status‘ => $quest, ‘baoming_id‘ => 0)); } /* echo "<pre>"; print_r($info);*/ $update = array(); if ($info[‘Baomings‘][‘is_conect‘] == 1 && $info[‘Baomings‘][‘yixiang‘] != 1 && $info[‘Baomings‘][‘is_fp‘] == 1 && $info[‘Baomings‘][‘mes_bak‘] == 1 && $info[‘Baomings‘][‘delay‘] == 0 && ($info[‘Baomings‘][‘status‘] == 0 || $info[‘Baomings‘][‘status‘] == 1) && ($info[‘Baomings‘][‘status_trace‘] == 0 || $info[‘Baomings‘][‘status_trace‘] == 1) && $info[‘Baomings‘][‘invalid‘] == 0 && $info[‘Baomings‘][‘decoration‘] != 1 && $info[‘Baomings‘][‘is_qy‘] == 0) { # 意向管理 $quest = true; $content = "由业主主动报名,从意向管理重置到报名管理中"; $update[‘is_fp‘] = 1; } else if ($info[‘Baomings‘][‘is_fp‘] == 1 && $info[‘Baomings‘][‘mes_bak‘] == 1 && ($info[‘Baomings‘][‘delay‘] == 1 || $info[‘Baomings‘][‘delay‘] == 2) && ($info[‘Baomings‘][‘status‘] == 0 || $info[‘Baomings‘][‘status‘] == 1) && ($info[‘Baomings‘][‘status_trace‘] == 0 || $info[‘Baomings‘][‘status_trace‘] == 1) && $info[‘Baomings‘][‘invalid‘] == 0 && $info[‘Baomings‘][‘decoration‘] == 0 && $info[‘Baomings‘][‘is_qy‘] == 0) { # 潜在管理 $quest = true; $content = "由业主主动报名,从潜在管理重置到报名管理中"; $update[‘is_fp‘] = 0; $update[‘ownercs‘] = 0; } else if ($info[‘Baomings‘][‘decoration‘] == 1 && $info[‘Baomings‘][‘is_qy‘] == 0) { # 无装修需求 $quest = true; $content = "由业主主动报名,从无装修需求重置到报名管理中"; $update[‘is_fp‘] = 0; $update[‘ownercs‘] = 0; } else if ($info[‘Baomings‘][‘is_fp‘] == 1 && $info[‘Baomings‘][‘yixiang‘] != 1 && ($info[‘Baomings‘][‘status_trace‘] == 2 || $info[‘Baomings‘][‘status_trace‘] == 3) && $info[‘Baomings‘][‘is_qy‘] == 0) { # 结束 $quest = true; $content = "由业主主动报名,从结束管理重置到报名管理中"; $update[‘is_fp‘] = 0; $update[‘ownercs‘] = 0; } else if ($info[‘Baomings‘][‘is_fp‘] == 1 && $info[‘Baomings‘][‘yixiang‘] != 1 && ($info[‘Baomings‘][‘status‘] == 2 || $info[‘Baomings‘][‘invalid‘] == 1) && $info[‘Baomings‘][‘is_qy‘] == 0) { # 无效 $quest = true; $content = "由业主主动报名,从无效管理重置到报名管理中"; $update[‘is_fp‘] = 0; $update[‘ownercs‘] = 0; } else if ($info[‘Baomings‘][‘is_qy‘] == 1) { $quest = false; } else { return json_encode(array(‘status‘ => true, ‘baoming_id‘ => $info[‘Baomings‘][‘id‘])); } if ($quest == true) { $update[‘is_conect‘] = 0; $update[‘mes_bak‘] = 1; $update[‘delay‘] = 0; $update[‘status‘] = 0; $update[‘status_trace‘] = 1; $update[‘invalid‘] = 0; $update[‘yixiang‘] = 0; $update[‘allow‘] = 0; $update[‘is_qy‘] = 0; $update[‘decoration‘] = 0; $update[‘reset_time‘] = "‘" . date("Y-m-d H:i:s") . "‘"; $update[‘reject_allot_status‘] = 0; $update[‘reject_over_status‘] = 0; $update[‘reject_invalid_status‘] = 0; $update[‘can_not_go‘] = 0; $update[‘can_not_cause‘] = null; $this->Baomings->updateAll($update, array(‘Baomings.id‘ => $info[‘Baomings‘][‘id‘])); $this->RejectLogs->updateAll(array(‘reset_tiger‘ => 1, ‘reset_time‘ => "‘" . date("Y-m-d H:i:s") . "‘"), array(‘baoming_id‘ => $info[‘Baomings‘][‘id‘], ‘type‘ => array(1,4,5), ‘ex_status‘ => 1)); $this->ResetLogs->save(array(‘baoming_id‘ => $info[‘Baomings‘][‘id‘], ‘content‘ => $content, ‘create_time‘ => date("Y-m-d H:i:s"), ‘cs_id‘ => 0)); } // echo $content . "<br />"; return json_encode(array(‘status‘ => $quest, ‘baoming_id‘ => !empty($info[‘Baomings‘][‘id‘]) ? $info[‘Baomings‘][‘id‘] : 0)); } /* *@数据返回类型 *@par $arr 需要返回的数据(以数组的形式) *@par $return_type true / false *@更新于 2017-04-24 */ private function bm_returns($arr, $return_type) { $return = json_encode($arr); if($return_type){ return $return; } die($return); } /* * 记录是否是广告推广过来的用户 * $putin 渠道来源 */ protected function cake24_set_unionOrigin($putin,$is_app=false){ if(!$_POST || !empty($is_app)){ if(!strpos($_SERVER[‘QUERY_STRING‘], ‘.png‘)&&!strpos($_SERVER[‘QUERY_STRING‘], ‘.jpg‘)&&!strpos($_SERVER[‘QUERY_STRING‘], ‘.gif‘)&&!strpos($_SERVER[‘QUERY_STRING‘], ‘.css‘)){ $is_origin=1;//广告 if( empty($putin) ){ $is_origin=2;//非广告 if( strpos($_SERVER[‘HTTP_REFERER‘],‘youjuke‘) && (strpos($_SERVER[‘HTTP_REFERER‘],‘putin‘) || strpos($_SERVER[‘HTTP_REFERER‘],‘bdjj‘)) ){ $is_origin=1;//广告 } } //$this->Cookie->write(‘unionOrigin‘, $is_origin, false, 86400); setcookie(‘unionOrigin‘,$is_origin,time()+86400,‘/‘); } } } /* *@更新服务咨询数据信息 *@par $baoming_id 报名id *@author dtz 2017-03-28 *注:如果已报名,未报名服务,这里不作处理;如果已报名和服务,对SERVICE表处理;如果仅新报名,按原有逻辑处理 *处理逻辑为将baoming_service表中out_time改为当前一次的报名时间,out_type改为3,out_csid=0 *@author dtz 2017-03-21 *@更新于 2017-03-28 */ private function _cake24_check_service($baoming_id){ if(!empty($baoming_id)){ $conditions = [‘baoming_id‘ => $baoming_id]; $serviceData = $this->BaomingService->find(‘first‘, [ ‘conditions‘ => $conditions ]); if($serviceData[‘BaomingService‘][‘out_type‘] == 0){ $up_service_data = [ ‘out_csid‘ => 0, ‘out_type‘ => 3, ‘out_time‘ => time() ]; $this->BaomingService->updateAll($up_service_data, $conditions); } } } /** * @服务咨询报名入口 * @par $return true 返回插入数据的id false 不返回插入的id * @return $baoming_id (报名id) * @author dtz 2017-03-21 * @更新于 2017-03-28 * @注:曾经在服务咨询(zx_fuwu = 1)报过名的,并且out_type = 0的,除了zx_tuijian改为1以外,将baoming_service表中out_time改为当前一次的报名时间,out_type改为3,out_csid=0 **/ public function cake24_commit($return = false){ unset($service_data); $baoming_id = $this->cake24_commit2(true, false, false, true);//服务咨询 if(!empty($baoming_id)){ //判断服务咨询报名是否存在 $service_exist = $this->BaomingService->find(‘first‘, [ ‘conditions‘ => [‘baoming_id‘ => $baoming_id] ]); if(!$service_exist){ $service_data = [‘baoming_id‘ => $baoming_id, ‘last_plate‘ => 0, ‘create_time‘ => time()]; //判断当前报名是否分配过客服(如果分配过需要baoming_service.is_fp_genzong 为1) $genzong_con = [‘baoming_id‘ => $baoming_id, ‘type‘ => 1, ‘f_cs !=‘ => NULL]; $genzong_exist = $this->GenzongCsfp->find(‘count‘, [ ‘conditions‘ => $genzong_con ]); if($genzong_exist){ $service_data[‘is_fp_genzong‘] = 1; } if($this->BaomingService->save($service_data)){ //更新服务咨询数据信息 $this->_cake24_check_service($baoming_id); //报名成功 if($return){ return $baoming_id; }else{ $this->bm_returns( array(‘code‘ => 10200, ‘str‘ => ‘报名成功!‘), false ); } }else{ //报名错误 $this->bm_returns( array(‘code‘ => 10400, ‘str‘ => ‘报名失败,请重试!‘), false ); } }else{ $this->bm_returns( array(‘code‘ => 10200, ‘str‘ => ‘您已报名!‘), false ); } }else{ //报名错误 $this->bm_returns( array(‘code‘ => 10400, ‘str‘ => ‘报名失败,请重试!‘), false ); } } /* * 将JSONP形式的报名数据提交统一改为内部调用 * 并在cake24项目下新增报名数据录入接口 * create date 2015-11-16 * 更新于 2017-03-24 * $is_zhuangxiu true 其他装修报名 false 建材馆报名 * $return_type 返回类型 * $service false(不是服务咨询报名), true (是服务咨询报名) * app 过来的报名 统一添加参数 $REQUEST[‘find_cookies‘] = 1 */ public function cake24_commit2($return = false, $is_zhuangxiu = true, $return_type = false, $service = false) { $this->layout = false; $this->autoRender = false; $REQUEST = array_merge($_GET, $_POST); if (!empty($REQUEST[‘callback‘]) && preg_match(‘/^\w+$/‘, $REQUEST[‘callback‘])) { $callback = $REQUEST[‘callback‘]; } $data = array(); $require = array(‘name‘, ‘mobile‘); foreach ($require as $value) { if(empty($REQUEST[$value])){//判断关键数据是否为空,为空则返回错误 $str = $value == ‘name‘ ? ‘姓名‘:‘手机号‘; $this->bm_returns( array(‘code‘ => 10402, ‘str‘ => $str.‘不能为空!‘, ‘data‘ => array()), $return_type ); } $func = ‘cake24_ck‘ . $value; if($value == ‘mobile‘) { //U_ENCRYPT 作用是对手机进行加密处理 $foo = !$data[$value] = $this->U_ENCRYPT($this->$func($REQUEST[$value])); }else{ //对姓名进行过滤,去除掉特殊字符和如果姓名为空则标注为NONAME $foo = !$data[$value] = $this->$func($REQUEST[$value]); } if (empty($REQUEST[$value]) || !method_exists($this, $func) || $foo) { $this->bm_returns( array(‘code‘ => 10403, ‘str‘ => ‘提交错误,请不要填写特殊字符!‘, ‘data‘ => array()),$return_type ); } } //对字段数据进行判断 $fields = array(‘area‘, ‘budget‘, ‘loupan‘, ‘roomtype‘, ‘zxstyle‘, ‘zx_fangshi‘, ‘address‘, ‘bm_bak‘, ‘zxtype‘, ‘utm_page‘, ‘sex‘, ‘decoration_type‘, ‘district_id‘, ‘c_preferences‘,‘zhuangixu_status‘,‘c_experience‘); foreach ($REQUEST as $key => $value) { if (!in_array($key, $fields) || strlen($value) == 0) { continue; } $func = ‘cake24_ck‘ . $key; if (!method_exists($this, $func) || !$data[$key] = $this->$func($value)) { continue; $this->bm_returns( array(‘code‘ => 10403, ‘str‘ => ‘字段数据错误!‘, ‘data‘ => array(‘field‘ => $key)),$return_type ); } } //判断是否有多个ip $ips = $this->cake24_getIP(); if(strpos($ips, ‘,‘)){ $explode = explode(‘,‘, $ips); $ips = trim($explode[0]); } //屏蔽掉局域网、外测和系统配置ip //true 当前ip需要屏蔽 , false 当前ip不需要屏蔽 $ignore = $this->cake24_ignore_ip($ips); if( !$ignore ){//不需要屏蔽的ip,但不能重复报名超过10次 $client_ip_count = $this->Baomings->find(‘count‘,array( ‘conditions‘=>array( ‘client_ip‘=>$ips, ‘DATE_FORMAT(addtime,\‘%Y-%m-%d\‘)‘=>date(‘Y-m-d‘) ) ) ); //同一个ip下报名次数不能超过10次 if( $client_ip_count >= 10 ){ $this->bm_returns( array(‘code‘ => 10400, ‘str‘ => ‘报名次数过多,请稍后再试!‘, ‘data‘ => array(‘id‘ => 0)),$return_type ); } } $city_id = (int)$REQUEST[‘city_id‘] ? (int)$REQUEST[‘city_id‘] : 0; $getcity = $this->cake24_getProvinces($city_id); $getcityid = $getcity[‘Cities‘][‘id‘] ? $getcity[‘Cities‘][‘id‘] : 72; $getprovinceid = $getcity[‘Cities‘][‘provinces_id‘] ? $getcity[‘Cities‘][‘provinces_id‘] : 9; $data[‘bm_laiyuan‘] = ‘baoming‘; $data[‘zx_jiaju‘] = !empty($REQUEST[‘zx_jiaju‘]) ? (int)$REQUEST[‘zx_jiaju‘] : 0; $data[‘addtime‘] = date(‘Y-m-d H:i:s‘); $data[‘mes_bak‘] = 1; $data[‘province_id‘] = $getprovinceid; $data[‘city_id‘] = $getcityid; $data[‘client_ip‘] = $ips; $union = array_key_exists(‘unionKey‘, $REQUEST) ? $REQUEST[‘unionKey‘] : $this->Cookie->read(‘unionKey‘); $name = ‘BM‘; if (!empty($union)) { list($name, $child) = explode(‘_‘, $union, 2); $name = strtoupper($name); //对推广渠道过滤特殊字符 $name = $this->cake24_replace_text( $name ); $child = $this->cake24_replace_text( $child ); $data[‘from_union‘] = $name; $data[‘from_child‘] = $child; $data[‘newest_child‘] = $child; $this->loadModel("SemSources"); $bm_laiyuan = $this->SemSources->field( ‘j_name‘ ,array(‘l_name‘=>$name,‘state‘=>0) ); if( $bm_laiyuan ){ if( $name == ‘LT‘ ){ $data[‘from_child‘] = str_replace(‘+‘, ‘|‘, $child); } $data[‘bm_laiyuan‘] = $bm_laiyuan; }else{ $data[‘bm_laiyuan‘] = ‘sem1‘; } } if( in_array($name, [‘BDXK2‘,‘BDXK‘]) ){ $data[‘is_origin‘] = 0; }else{ //记录是否是广告推广过来的用户 //app 过来的报名 统一添加参数 $REQUEST[‘find_cookies‘] = 1 $data[‘is_origin‘] = $REQUEST[‘find_cookies‘] == 1 ? 0 : ($_COOKIE[‘unionOrigin‘] == 1 ? 0 : 1 ); //自然流量(seo)报名来源记录 if($data[‘is_origin‘]==1){ $data[‘bm_laiyuan‘] = ‘baoming‘; $data[‘from_union‘] = NULL; $data[‘from_child‘] = ‘1‘; } } //按断客户端是否都是手机 $form = $this->cake24_is_mobile(); if ($form) { $data[‘detail_ly‘] = ‘mobile‘; } else { $data[‘detail_ly‘] = ‘pc‘; } $baomingModel = $this->Baomings->find(‘first‘, array( ‘conditions‘ => array(‘Baomings.mobile‘=>$data[‘mobile‘]), ‘fields‘ => array(‘Baomings.id‘, ‘Baomings.zx_tuijian‘,‘Baomings.zx_jiaju‘,‘BaomingsPlus.periods‘, ‘zx_fuwu‘), ‘order‘ => array(‘Baomings.id desc‘) ) ); if(!$is_zhuangxiu && !$service){//建材馆报名非服务咨询 $data[‘zx_tuijian‘] = 0; $data[‘zx_jiaju‘] = 1; }elseif($is_zhuangxiu && !$service){//装修非服务咨询 $data[‘zx_tuijian‘] = 1; $data[‘zx_jiaju‘] = 0; }elseif ($service) {//服务咨询 $data[‘zx_tuijian‘] = 0; $data[‘zx_jiaju‘] = 0; $data[‘zx_fuwu‘] = 1; } //$cake24_sjtest = ‘201603‘;//$this->cake24_sjtest();//期数 $cake24_sjtest = $this->JcSetPeriod->field(‘periods‘,array(‘is_set‘=>1),‘JcSetPeriod.id desc‘); //没有数据添加 否则重置或修改 if( !$baomingModel ){ if (!$this->Baomings->save($data)) { $this->bm_returns( array(‘code‘ => 10500, ‘str‘ => ‘错误提交!‘, ‘data‘ => array()),$return_type ); } $this->U_SAVE_BM($this->Baomings->id, $REQUEST[‘mobile‘]); $this->BaomingsPlus->updateAll(array(‘periods‘=>"‘".$cake24_sjtest."‘",‘material_addtime‘=>time()),array(‘BaomingsPlus.baoming_id‘=>$this->Baomings->id)); }else{ $Baomings_id = $baomingModel[‘Baomings‘][‘id‘]; //是建材特卖馆报名并且非服务咨询报名 if(!$is_zhuangxiu && !$service){ //不是同期的添加数据 否则修改参数 (取消期数报名) if($baomingModel[‘BaomingsPlus‘][‘periods‘] != $cake24_sjtest){ $bm_updata = array( ‘zx_jiaju‘ => 1, ‘utm_page‘=>"‘".$data[‘utm_page‘]."‘", ‘newest_child‘=>"‘".$data[‘newest_child‘]."‘", ‘is_origin‘ => $data[‘is_origin‘] ); $this->Baomings->updateAll( $bm_updata ,array(‘Baomings.id‘=>$Baomings_id)); //20170406 是建材报名 重置无建材活动需求字段BaomingPlus.unjchd 改为 0 连 $this->BaomingsPlus->updateAll(array(‘periods‘=>"‘".$cake24_sjtest."‘",‘material_addtime‘=>time(),‘unjchd‘=>0),array(‘BaomingsPlus.baoming_id‘=>$Baomings_id)); $this->Baomings->id = $Baomings_id; }else{ //报名数据之前 zx_jiaju不等于1的 if($baomingModel[‘Baomings‘][‘zx_jiaju‘] != 1){ $arrs[‘zx_jiaju‘] = 1; //$arrs[‘from_child‘] = "‘".$data[‘from_child‘]."‘"; //$arrs[‘bm_laiyuan‘] = "‘".$data[‘bm_laiyuan‘]."‘"; $arrs[‘utm_page‘] = "‘".$data[‘utm_page‘]."‘"; $arrs[‘newest_child‘] = "‘".$data[‘newest_child‘]."‘"; $arrs[‘is_origin‘] = $data[‘is_origin‘]; $this->Baomings->updateAll($arrs,array(‘Baomings.id‘=>$Baomings_id)); $this->BaomingsPlus->updateAll(array(‘material_addtime‘=>time()),array(‘baoming_id‘=>$Baomings_id)); $this->Baomings->id = $Baomings_id; }else{ //$arrs[‘from_child‘] = "‘".$data[‘from_child‘]."‘"; $arrs[‘utm_page‘] = "‘".$data[‘utm_page‘]."‘"; $arrs[‘newest_child‘] = "‘".$data[‘newest_child‘]."‘"; $arrs[‘is_origin‘] = $data[‘is_origin‘]; $this->Baomings->updateAll($arrs,array(‘Baomings.id‘=>$Baomings_id)); $this->Baomings->id = $Baomings_id; $this->bm_returns( array(‘code‘ => 10400, ‘str‘ => ‘您已报名!‘, ‘data‘ => array()),$return_type ); } } //属于装修业务重置逻辑 }elseif($is_zhuangxiu && !$service){ //更新服务咨询数据信息 $this->_cake24_check_service($Baomings_id); //判断是否是有装修报名数据 调重置方法 否则更新 if($baomingModel[‘Baomings‘][‘zx_tuijian‘] == 1){ $json_decode = json_decode($this->cake24_ck_baoming_reset($data[‘mobile‘]),true); $this->Baomings->id = $json_decode[‘baoming_id‘]; }else{ $arrs[‘zx_tuijian‘] = 1; //$arrs[‘from_child‘] = "‘".$data[‘from_child‘]."‘"; //$arrs[‘bm_laiyuan‘] = "‘".$data[‘bm_laiyuan‘]."‘"; $this->Baomings->id = $Baomings_id; } $arrs[‘utm_page‘] = "‘".$data[‘utm_page‘]."‘"; $arrs[‘newest_child‘] = "‘".$data[‘newest_child‘]."‘"; $arrs[‘is_origin‘] = $data[‘is_origin‘]; $this->Baomings->updateAll($arrs,array(‘Baomings.id‘=>$this->Baomings->id)); }elseif($service) {//服务咨询报名重置 $arrs[‘zx_fuwu‘] = 1; $arrs[‘utm_page‘] = "‘".$data[‘utm_page‘]."‘"; $arrs[‘newest_child‘] = "‘".$data[‘newest_child‘]."‘"; $arrs[‘is_origin‘] = $data[‘is_origin‘]; $this->Baomings->id = $Baomings_id; $this->Baomings->updateAll($arrs,array(‘Baomings.id‘=>$this->Baomings->id)); } } //报名页面来源过滤掉特殊字符 if (preg_match(‘/([\w\x{4e00}-\x{9fa5}]+)-([\w\x{4e00}-\x{9fa5}]+)-([\w\x{4e00}-\x{9fa5}]+)-([\w\x{4e00}-\x{9fa5}]+)/u‘, $data[‘utm_page‘], $matches)) { list($channel, $page, $type, $name) = $this->Sources->setSources($matches[1], $matches[2], $matches[3], $matches[4]); $sources = array(‘channel_id‘ => $channel, ‘page_id‘ => $page, ‘type_id‘ => $type, ‘name_id‘ => $name, ‘baoming_id‘ => $this->Baomings->id, ‘addtime‘ => date(‘Y-m-d H:i:s‘)); $this->BaomingSources->save($sources); } # 全站弹窗 setcookie(‘pop_youjuke‘, 1, time() + 30 * 24 * 60 * 60, ‘/‘, ‘.‘.PRIMARY_DOMAIN); if($return){return $this->Baomings->id;} if (!empty($callback)) { die($callback . ‘(‘ . json_encode(array(‘code‘ => 10200, ‘str‘ => ‘提交成功!‘, ‘data‘ => array(‘id‘ => $this->Baomings->id, ‘cnzz‘ => ‘http://fuwu.‘ . PRIMARY_DOMAIN . ‘/index/bmResult?utm=‘ . $name))) . ‘)‘); } else { $this->bm_returns( array(‘code‘ => 10200, ‘str‘ => ‘提交成功!‘, ‘data‘ => array(‘id‘ => $this->Baomings->id)),$return_type ); } } private function cake24_is_Baomings_chongzhi($data,$repeat) { $json_decode = json_decode($this->cake24_ck_baoming_reset($data[‘mobile‘]),true); //返回false 作为装修报名插入数据库 否则获取返回的报名id if(!$json_decode[‘status‘]) { if (!$this->Baomings->save($data)) { die(json_encode(array(‘code‘ => 10500, ‘str‘ => ‘错误提交!‘, ‘data‘ => array()))); } } else { //建材报名 if(!$repeat) { $arrs = array(‘zx_jiaju‘=>1); } else { $arrs = array(‘zx_tuijian‘=>1); } $arrs[‘from_child‘] = "‘".$data[‘from_child‘]."‘"; $arrs[‘bm_laiyuan‘] = "‘".$data[‘bm_laiyuan‘]."‘"; $arrs[‘utm_page‘] = "‘".$data[‘utm_page‘]."‘"; $this->Baomings->updateAll($arrs,array(‘Baomings.id‘=>$json_decode[‘baoming_id‘])); $this->Baomings->id = $json_decode[‘baoming_id‘]; } return $this->Baomings->id; } //姓名(名称)格式判断 private function cake24_ckname($value) { $value = trim($value); $value = $this->cake24_replace_specialChar($value);//过滤掉特殊字符 if (!empty($value)) { return $value; }else{ return ‘NONAME‘;//过滤掉特殊字符后,如果为空则赋值默认的值 } } //手机号格式判断 private function cake24_ckmobile($value) { if (preg_match(‘/^[1][3,4,5,7,8][0-9]{9}$/‘, $value)) { return $value; } return false; } //报名面积格式判断 private function cake24_ckarea($value) { if (preg_match(‘/^\d{1,4}$/‘, $value)) { return $value; } return false; } //报名预算格式判断 private function cake24_ckbudget($value) { if (preg_match(‘/^\d{1,4}(\.\d{1,4})?$/‘, $value)) { return $value; } return false; } //报名地址格式判断(去除掉特殊字符) private function cake24_ckaddress($value) { return strip_tags($value); } //报名楼盘格式判断(去除掉特殊字符) private function cake24_ckloupan($value) { return strip_tags($value); } //报名户型格式判断 private function cake24_ckroomtype($value) { return is_numeric($value) ? $value : false; } private function cake24_ckzxstyle($value) { return is_numeric($value) ? $value : false; } private function cake24_ckzx_fangshi($value) { return $value; return is_numeric($value) ? $value : false; } private function cake24_ckbm_bak($value) { return strip_tags($value); } private function cake24_ckzxtype($value) { return is_numeric($value) ? $value : false; } //报名页面来源格式判断 private function cake24_ckutm_page($value) { return $this->cake24_replace_text( $value ); } //报名姓名判断 private function cake24_cksex($value) { return in_array($value, array(1, 2)) ? $value : 2; } private function cake24_ckdecoration_type($value) { return is_numeric($value) ? $value : false; } //报名区域判断 private function cake24_ckdistrict_id($value) { return is_numeric($value) ? $value : 717; } //报名偏好判断 private function cake24_ckc_preferences($value) { return is_numeric($value) ? $value : false; } //报名装修状态判断 private function cake24_ckzhuangixu_status($value) { return is_numeric($value) ? $value : false; } private function cake24_ckc_experience($value) { return is_numeric($value) ? $value : false; } //替换敏感字符 protected function cake24_replace_text($text) { $text = str_replace(‘\\‘, ‘‘, $text); $text = preg_replace(‘/\/|\"|\‘|[><()=;#[email protected]#$%^&*?.+|]|(and)|(or)/i‘, ‘‘, $text); return $text; } /* *去除掉特殊字符(新) *date 2017-01-05 */ protected function cake24_replace_specialChar($strParam){ return preg_replace("/[^\x{4e00}-\x{9fa5}a-zA-Z0-9]/iu",‘‘,$strParam); } //判断是否是电脑登录,还是手机登录 public function cake24_is_mobile() { $user_agent = $_SERVER[‘HTTP_USER_AGENT‘]; $mobile_agents = array("240x320", "acer", "acoon", "acs-", "abacho", "ahong", "airness", "alcatel", "amoi", "android", "anywhereyougo.com", "applewebkit/525", "applewebkit/532", "asus", "audio", "au-mic", "avantogo", "becker", "benq", "bilbo", "bird", "blackberry", "blazer", "bleu", "cdm-", "compal", "coolpad", "danger", "dbtel", "dopod", "elaine", "eric", "etouch", "fly ", "fly_", "fly-", "go.web", "goodaccess", "gradiente", "grundig", "haier", "hedy", "hitachi", "htc", "huawei", "hutchison", "inno", "ipad", "ipaq", "iphone", "ipod", "jbrowser", "kddi", "kgt", "kwc", "lenovo", "lg ", "lg2", "lg3", "lg4", "lg5", "lg7", "lg8", "lg9", "lg-", "lge-", "lge9", "longcos", "maemo", "mercator", "meridian", "micromax", "midp", "mini", "mitsu", "mmm", "mmp", "mobi", "mot-", "moto", "nec-", "netfront", "newgen", "nexian", "nf-browser", "nintendo", "nitro", "nokia", "nook", "novarra", "obigo", "palm", "panasonic", "pantech", "philips", "phone", "pg-", "playstation", "pocket", "pt-", "qc-", "qtek", "rover", "sagem", "sama", "samu", "sanyo", "samsung", "sch-", "scooter", "sec-", "sendo", "sgh-", "sharp", "siemens", "sie-", "softbank", "sony", "spice", "sprint", "spv", "symbian", "tablet", "talkabout", "tcl-", "teleca", "telit", "tianyu", "tim-", "toshiba", "tsm", "up.browser", "utec", "utstar", "verykool", "virgin", "vk-", "voda", "voxtel", "vx", "wap", "wellco", "wig browser", "wii", "windows ce", "wireless", "xda", "xde", "zte", "MicroMessenger"); $is_mobile = false; foreach ($mobile_agents as $device) { if (stristr($user_agent, $device)) { $is_mobile = true; break; } } return $is_mobile; } //获取省信息 public function cake24_getProvinces($cityid){ if(!$cityid) { $getCity = $this->cake24_getCity( $this->cake24_getIP() ); $city = in_array($getCity[‘city‘], array(‘上海‘,‘无锡‘)) ? $getCity[‘city‘] : ‘上海‘; $conditions = array(‘Cities.name‘=>$city); } else { $conditions = array(‘Cities.id‘=>$cityid); } $Cities = $this->Cities->find(‘all‘,array(‘conditions‘=>$conditions)); return $Cities[0]; } public function cake24_getCity($ip){ $this->layout = false; $this->autoRender = false; //$url="http://ip.taobao.com/service/getIpInfo.php?ip=".$ip; $url="http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip=".$ip; $ip = $this->cake24_curl_get($url); $ip = json_decode($ip,true); if($ip[‘ret‘] == -1) { return false; } return $ip; } //跨域获取信息 public function cake24_curl_get($url){ $to=2; $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_TIMEOUT, $to); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_HEADER, 0); $data = curl_exec($curl); curl_close($curl); return $data; } //获取用户真实IP public function cake24_getIP() { if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown")) $ip = getenv("HTTP_CLIENT_IP"); else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown")) $ip = getenv("HTTP_X_FORWARDED_FOR"); else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown")) $ip = getenv("REMOTE_ADDR"); else if (isset ($_SERVER[‘REMOTE_ADDR‘]) && $_SERVER[‘REMOTE_ADDR‘] && strcasecmp($_SERVER[‘REMOTE_ADDR‘], "unknown")) $ip = $_SERVER[‘REMOTE_ADDR‘]; else $ip = "unknown"; return ($ip); } #发送账户短信 public function cake24_send_message($data){ $mobile = $data[‘mobile‘]; $content = $data[‘content‘]; $source = $data[‘source‘]; $times = $data[‘times‘] ? $data[‘times‘] : null; if (empty($mobile) || empty($content)) { return false; } if (empty($times)) { $times = 1; } $post[‘mobile‘] = is_array($mobile) ? join(‘,‘, $mobile) : $mobile; $post[‘content‘] = $content; $post[‘source‘] = $source; $sms_api = ‘http://sms.youjuke.com/sms/send_sms_api‘; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $sms_api); curl_setopt ( $ch, CURLOPT_POST, 1 ); curl_setopt ( $ch, CURLOPT_HEADER, 0 ); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt ( $ch, CURLOPT_POSTFIELDS, $post ); $output = curl_exec($ch); curl_close($ch); if (trim($output) == "失败" && $times <= 2) { $data[‘times‘] = !empty($data[‘times‘]) ? $data[‘times‘] + 1 : 1; $this->cake24_send_message($data); } else { //return true; return ‘成功‘; } //return false; return ‘失败‘; } //通过手机号查询手机号码的归属地信息 (已失效) public function cake24_phonesearch2($mobile){ $ch = curl_init(); $url = ‘http://apis.baidu.com/chazhao/mobilesearch/phonesearch?phone=‘.$mobile; $header = array( ‘apikey: c3aadd615ae4b6bfcbf8e4afc503fab7‘, ); // 添加apikey到header curl_setopt($ch, CURLOPT_HTTPHEADER , $header); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 执行HTTP请求 curl_setopt($ch , CURLOPT_URL , $url); $res = curl_exec($ch); return json_decode($res, TRUE); } //通过手机号查询手机号码的归属地信息 public function cake24_phonesearch($mobile){ $url = ‘http://sj.apidata.cn/?mobile=‘.$mobile; $ch = curl_init(); // 执行HTTP请求 curl_setopt($ch, CURLOPT_HTTPHEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 执行HTTP请求 curl_setopt($ch , CURLOPT_URL , $url); $res = curl_exec($ch); curl_close($ch); $res = json_decode($res, TRUE); $data[‘error‘] = $res[‘status‘] == 1 ? 0 : 1; $data[‘message‘] = $res[‘message‘]; $data[‘data‘] = $res[‘data‘]; return $data; } //通过ip查询ip的归属地信息 public function cake24_ipsearch($ip){ //判断是否是合法的ip if(!filter_var($ip, FILTER_VALIDATE_IP)){return NULL;} $ch = curl_init(); $url = ‘http://apis.baidu.com/apistore/iplookupservice/iplookup?ip=‘.$ip; $header = array( ‘apikey: c3aadd615ae4b6bfcbf8e4afc503fab7‘, ); // 添加apikey到header curl_setopt($ch, CURLOPT_HTTPHEADER, $header); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 执行HTTP请求 curl_setopt($ch , CURLOPT_URL , $url); $res = curl_exec($ch); return json_decode($res, TRUE); } /* * 判断业主报名的地址,目前公司自支持上海和江苏地区 * 如果报名的来源地址为非上海和江苏的 则录入报名里 zx_tuijian =0 反之则为 1 */ public function cake24_getbaoming_area($mobile, $ip=‘‘){ //获取报名信息的ip地址 if(empty($ip)){$ip = $this->cake24_getIP();} $ipAddress = $this->cake24_ipsearch($ip); $phoneAddress = $this->cake24_phonesearch($mobile); $ipresult = in_array($ipAddress[‘province‘], array(‘上海‘, ‘江苏‘)); $mobileresult = in_array($phoneAddress[‘data‘][‘province‘], array(‘上海‘, ‘江苏‘)); if($ipresult || $mobileresult){ return 1; }else{ return 0; } } //通过经纬度获取具体的地理位置 public function cake24_getLocation($x, $y){ $ch = curl_init(); $url = ‘http://apis.baidu.com/3023/geo/address?l=‘.$x.‘,‘.$y; $header = array( ‘apikey: c3aadd615ae4b6bfcbf8e4afc503fab7‘, ); // 添加apikey到header curl_setopt($ch, CURLOPT_HTTPHEADER, $header); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 执行HTTP请求 curl_setopt($ch , CURLOPT_URL , $url); $res = curl_exec($ch); $addressData = json_decode($res, true); $admName = $addressData[‘addrList‘][0][‘admName‘]; $locationArr = explode(‘,‘, $admName); return $locationArr; } /* * 通过经纬度获取具体的地理位置(新) * $x,$y 经纬度 * date 2016-10-24 */ public function cake24_getAddress($x, $y){ $ch = curl_init(); $url = ‘http://api.haoservice.com/api/getLocationinfor?latlng=‘.$x.‘,‘.$y.‘&type=2&key=9fba1a9b3c804d8680125836b560ea64‘; // 执行HTTP请求 curl_setopt($ch, CURLOPT_HTTPHEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 执行HTTP请求 curl_setopt($ch , CURLOPT_URL , $url); $res = curl_exec($ch); $res_arr = json_decode($res, true); $addressData = $res_arr[‘result‘]; return $addressData; } /* * 获取广告信息 * $c_id 广告所属分类id * $fields 要获取的字段信息 */ public function cake24_GetAdve($c_id,$fields=array(),$intro=‘‘,$model=‘‘,$limit=‘‘) { if( !$c_id ) { return false; } $this->loadModel("ItvAttribute"); $this->loadModel("FirmItvDetails"); $this->loadModel("Firms"); if( $model ) { $this->ItvAttribute->useDbConfig = $this->FirmItvDetails->useDbConfig = $this->Firms->useDbConfig = ‘youjk‘; } $image_url = ‘http://index.img.youjuke.com‘; $times = date(‘Y-m-d‘); $fields = array_merge($fields,array(‘itv_balance‘,‘total_cost‘,‘firm_id‘,‘is_itv‘,‘end_time‘)); $ItvAttribute = $this->ItvAttribute->findAsFirms(‘all‘,array( ‘conditions‘=>array( ‘status‘=>1, ‘delete‘=>0, ‘c_id‘ => $c_id, ‘OR‘ => array( array(‘is_itv‘=>1,‘start_time <=‘=>$times,‘end_time >=‘=>$times), array(‘is_itv‘=>2) ) ), ‘fields‘ => $fields, ‘order‘ => array(‘is_itv asc‘), ‘limit‘ => $limit ) ); $data = array(); foreach ($ItvAttribute as $key => $val) { $val_key = $val[‘ItvAttribute‘]; //广告扣费 if( $val_key[‘is_itv‘] == 1 ) { $this->FirmItvDetails->clear(); //广告费未支付的扣除费用 $is_exists = $this->FirmItvDetails->find(‘count‘,array( ‘conditions‘=>array(‘firm_id‘=>$val_key[‘firm_id‘],‘itv_id‘=>$val_key[‘id‘],‘renew_time‘=>$val_key[‘end_time‘]) ) ); if( !$is_exists ) { //余额充足扣除广告费并且显示 否则跳出不显示 if( $val_key[‘itv_balance‘] >= $val_key[‘total_cost‘] ) { $dataSource = $this->FirmItvDetails->getDataSource(); $dataSource->begin(); $fee_time = date(‘Y-m-d H:i:s‘); $det_data[‘firm_id‘] = $val_key[‘firm_id‘]; $det_data[‘itv_id‘] = $val_key[‘id‘]; $det_data[‘note‘] = $intro.‘-广告扣费‘; $det_data[‘type‘] = 2; $det_data[‘amount‘] = ‘-‘.$val_key[‘total_cost‘]; $det_data[‘add_time‘] = $fee_time; $det_data[‘renew_time‘] = $val_key[‘end_time‘]; if( !$this->FirmItvDetails->save( $det_data ) ) { $dataSource->rollback(); } else { $this->Firms->updateAll( array(‘itv_balance‘=>‘`itv_balance`-‘.$val_key[‘total_cost‘]) , array(‘Firms.id‘=>$val_key[‘firm_id‘]) ); $dataSource->commit(); } } else { continue; } } } $c_id = $val_key[‘c_id‘]; $img = $image_url.‘/‘.$val_key[‘c_id‘].‘/‘; $val_key[‘image‘] = $img.$val_key[‘image‘]; $val_key[‘firm_logo‘] = $img.$val_key[‘firm_logo‘]; $data[ $c_id ][] = $val_key; } return $data; } /* * 根据面积 计算几室几厅 */ protected function cake24_baojia_budget($total_area,$info=false) { $woshi = array(); $keting = array(); $chufang = array(); $weishengjian = array(); $yangtai = array(); /* 建筑面积*0.8=实际总面积 60平米以下:1室1厅(厨房卫生间阳台固定4平米。卧室/厅=1/1) 61-90:2室1厅(厨房卫生间阳台固定6平米。卧室1/卧室2/厅=3/2/3) 91-110:3室1厅(厨房卫生间阳台固定8平米。卧室1/卧室2/卧室3/厅=3/2/2/3) 111-130:3室2厅(厨房卫生间阳台固定8平米。卧室1/卧室2/卧室3/厅1/厅2=3/2/2/3/2) 131-150:3室2厅2卫(厨房阳台固定面积8平米,卫生间6平米。卧室1/卧室2/卧室3/厅1/厅2=3/2/2/3/2) 151-180:4室2厅1厨2卫1阳(厨房10平米,卫生间6平米,阳台8平米。卧室1/卧室2/卧室3/卧室4/厅1/厅2=3/2/2/2/3/2) */ $real_area = $total_area * 0.8; if ($total_area > 0 && $total_area < 60) { $woshi["woshi_61"] = round(($real_area - 4 * 3) / 2, 1); $keting[‘keting_21‘] = round(($real_area - 4 * 3) / 2, 1); $chufang[‘chufang_11‘] = 4; $weishengjian[‘weishengjian_31‘] = 4; $yangtai[‘yangtai_31‘] = 4; } else if ($total_area >= 60 && $total_area < 90) { $woshi["woshi_61"] = round(($real_area - 6 * 3) * 3 / 8, 1); $woshi["woshi_62"] = round(($real_area - 6 * 3) * 2 / 8, 1); $keting[‘keting_21‘] = round(($real_area - 6 * 3) * 3 / 8, 1); $chufang[‘chufang_11‘] = 6; $weishengjian[‘weishengjian_31‘] = 6; $yangtai[‘yangtai_31‘] = 6; } else if ($total_area >= 90 && $total_area < 110) { $woshi["woshi_61"] = round(($real_area - 6 * 3) * 3 / 10, 1); $woshi["woshi_62"] = round(($real_area - 6 * 3) * 2 / 10, 1); $woshi["woshi_63"] = round(($real_area - 6 * 3) * 2 / 10, 1); $keting[‘keting_21‘] = round(($real_area - 6 * 3) * 3 / 10, 1); $chufang[‘chufang_11‘] = 8; $weishengjian[‘weishengjian_31‘] = 8; $yangtai[‘yangtai_31‘] = 8; } else if ($total_area >= 110 && $total_area < 130) { $woshi["woshi_61"] = round(($real_area - 6 * 3) * 3 / 12, 1); $woshi["woshi_62"] = round(($real_area - 6 * 3) * 2 / 12, 1); $woshi["woshi_63"] = round(($real_area - 6 * 3) * 2 / 12, 1); $keting[‘keting_21‘] = round(($real_area - 6 * 3) * 3 / 12, 1); $keting[‘keting_22‘] = round(($real_area - 6 * 3) * 2 / 12, 1); $chufang[‘chufang_11‘] = 8; $weishengjian[‘weishengjian_31‘] = 8; $yangtai[‘yangtai_31‘] = 8; } else if ($total_area >= 130 && $total_area < 150) { $woshi["woshi_61"] = round(($real_area - 22) * 3 / 12, 1); $woshi["woshi_62"] = round(($real_area - 22) * 2 / 12, 1); $woshi["woshi_63"] = round(($real_area - 22) * 2 / 12, 1); $keting[‘keting_21‘] = round(($real_area - 22) * 3 / 12, 1); $keting[‘keting_22‘] = round(($real_area - 22) * 2 / 12, 1); $chufang[‘chufang_11‘] = 8; $weishengjian[‘weishengjian_31‘] = 6; $yangtai[‘yangtai_31‘] = 8; } else if ($total_area >= 150) { $woshi["woshi_61"] = round(($real_area - 24) * 3 / 14, 1); $woshi["woshi_62"] = round(($real_area - 24) * 2 / 14, 1); $woshi["woshi_63"] = round(($real_area - 24) * 2 / 14, 1); $woshi["woshi_64"] = round(($real_area - 24) * 2 / 14, 1); $keting[‘keting_21‘] = round(($real_area - 24) * 3 / 14, 1); $keting[‘keting_22‘] = round(($real_area - 24) * 2 / 14, 1); $chufang[‘chufang_11‘] = 10; $weishengjian[‘weishengjian_31‘] = 6; $yangtai[‘yangtai_31‘] = 8; } $budget = $woshi; $budget = array_merge($budget,$keting,$chufang,$weishengjian,$yangtai); $jine = $this->cake24_show_zxbj( $budget ); if( $info ) { return $jine; } return round($jine[‘total_price‘], 2); } protected function cake24_show_zxbj( $budget=array() ) { $this->layout = false; //房屋基础信息 $i_p = 1; //总倍数 //客厅 2 $arr_keting = array(); if (!empty($budget[‘keting_21‘])) { $arr_keting[] = $budget[‘keting_21‘]; } if (!empty($budget[‘keting_22‘])) { $arr_keting[] = $budget[‘keting_22‘]; } $c_kt = count($arr_keting); //$keting[‘keting_21‘] = $budget[‘keting_21‘]; //$keting[‘keting_22‘] = $budget[‘keting_22‘]; //卧室 6 $arr_woshi = array(); if (!empty($budget[‘woshi_61‘])) { $arr_woshi[] = $budget[‘woshi_61‘]; } if (!empty($budget[‘woshi_62‘])) { $arr_woshi[] = $budget[‘woshi_62‘]; } if (!empty($budget[‘woshi_63‘])) { $arr_woshi[] = $budget[‘woshi_63‘]; } if (!empty($budget[‘woshi_64‘])) { $arr_woshi[] = $budget[‘woshi_64‘]; } if (!empty($budget[‘woshi_65‘])) { $arr_woshi[] = $budget[‘woshi_65‘]; } if (!empty($budget[‘woshi_66‘])) { $arr_woshi[] = $budget[‘woshi_66‘]; } $c_ws = count($arr_woshi); //公用卫生间 3 $arr_weishengjian = array(); if (!empty($budget[‘weishengjian_31‘])) { $arr_weishengjian[] = $budget[‘weishengjian_31‘]; } if (!empty($budget[‘weishengjian_32‘])) { $arr_weishengjian[] = $budget[‘weishengjian_32‘]; } if (!empty($budget[‘weishengjian_33‘])) { $arr_weishengjian[] = $budget[‘weishengjian_33‘]; } $c_wsj = count($arr_weishengjian); //厨房 1 $arr_chufang = array(); if (!empty($budget[‘chufang_11‘])) { $arr_chufang[] = $budget[‘chufang_11‘]; } $c_cf = count($arr_chufang); //厅阳台 3 $arr_yangtai = array(); if (!empty($budget[‘yangtai_31‘])) { $arr_yangtai[] = $budget[‘yangtai_31‘]; } if (!empty($budget[‘yangtai_32‘])) { $arr_yangtai[] = $budget[‘yangtai_32‘]; } if (!empty($budget[‘yangtai_33‘])) { $arr_yangtai[] = $budget[‘yangtai_33‘]; } $c_yt = count($arr_yangtai); //总面积 $arr_areas = array_merge($arr_keting, $arr_woshi, $arr_weishengjian, $arr_chufang, $arr_yangtai); $areas = array_sum($arr_areas); //总价 $total_price = 0; //家装基础施工报价清单 //客厅工程 $kt_sy = 0; //js索引初始值 //$kt_total = 0;//客厅总价 foreach ($arr_keting as $k => $val) { $arr_kt[$k][‘sy‘] = $kt_sy + $k; //js索引 //墙面铲除墙面腻子层 qm_nzh $arr_kt[$k][‘gcl‘][‘qm_nzh‘] = $val * 2.67; $arr_kt[$k][‘gcj‘][‘qm_nzh‘] = $arr_kt[$k][‘gcl‘][‘qm_nzh‘] * 7 * $i_p; $arr_kt[$k][‘price‘] += $arr_kt[$k][‘gcj‘][‘qm_nzh‘]; //墙面滚胶 qm_gj $arr_kt[$k][‘gcl‘][‘qm_gj‘] = $val * 2.67; $arr_kt[$k][‘gcj‘][‘qm_gj‘] = $arr_kt[$k][‘gcl‘][‘qm_gj‘] * 6 * $i_p; $arr_kt[$k][‘price‘] += $arr_kt[$k][‘gcj‘][‘qm_gj‘]; //墙面批腻子 qm_pnz $arr_kt[$k][‘gcl‘][‘qm_pnz‘] = $val * 2.67; $arr_kt[$k][‘gcj‘][‘qm_pnz‘] = $arr_kt[$k][‘gcl‘][‘qm_pnz‘] * 19 * $i_p; $arr_kt[$k][‘price‘] += $arr_kt[$k][‘gcj‘][‘qm_pnz‘]; //墙面手刷乳胶漆 qm_rjq(多乐士金装五合一,一底两面) $arr_kt[$k][‘gcl‘][‘qm_rjq‘] = $val * 2.67; $arr_kt[$k][‘gcj‘][‘qm_rjq‘] = $arr_kt[$k][‘gcl‘][‘qm_rjq‘] * 17 * $i_p; $arr_kt[$k][‘price‘] += $arr_kt[$k][‘gcj‘][‘qm_rjq‘]; //顶面普通木龙骨石膏板吊顶 dm_sgb $arr_kt[$k][‘gcl‘][‘dm_sgb‘] = $val * 0.4; $arr_kt[$k][‘gcj‘][‘dm_sgb‘] = $arr_kt[$k][‘gcl‘][‘dm_sgb‘] * 130 * $i_p; $arr_kt[$k][‘price‘] += $arr_kt[$k][‘gcj‘][‘dm_sgb‘]; //顶面铲除顶面腻子层 dm_nzh $arr_kt[$k][‘gcl‘][‘dm_nzh‘] = $val * 1.33; $arr_kt[$k][‘gcj‘][‘dm_nzh‘] = $arr_kt[$k][‘gcl‘][‘dm_nzh‘] * 7 * $i_p; $arr_kt[$k][‘price‘] += $arr_kt[$k][‘gcj‘][‘dm_nzh‘]; //顶面滚胶 dm_gj $arr_kt[$k][‘gcl‘][‘dm_gj‘] = $val * 1.33; $arr_kt[$k][‘gcj‘][‘dm_gj‘] = $arr_kt[$k][‘gcl‘][‘dm_gj‘] * 6 * $i_p; $arr_kt[$k][‘price‘] += $arr_kt[$k][‘gcj‘][‘dm_gj‘]; //顶面批腻子 dm_pnz $arr_kt[$k][‘gcl‘][‘dm_pnz‘] = $val * 1.33; $arr_kt[$k][‘gcj‘][‘dm_pnz‘] = $arr_kt[$k][‘gcl‘][‘dm_pnz‘] * 19 * $i_p; $arr_kt[$k][‘price‘] += $arr_kt[$k][‘gcj‘][‘dm_pnz‘]; //顶面手刷乳胶漆 dm_rjq(金装五合一,一底两面) $arr_kt[$k][‘gcl‘][‘dm_rjq‘] = $val * 1.33; $arr_kt[$k][‘gcj‘][‘dm_rjq‘] = $arr_kt[$k][‘gcl‘][‘dm_rjq‘] * 17 * $i_p; $arr_kt[$k][‘price‘] += $arr_kt[$k][‘gcj‘][‘dm_rjq‘]; $total_price += $arr_kt[$k][‘price‘]; } //卧室工程 $ws_sy = $c_kt; //$ws_total = 0;//卧室总价 foreach ($arr_woshi as $k => $val) { $arr_ws[$k][‘sy‘] = $ws_sy + $k; //js索引 //墙面铲除墙面腻子层 qm_nzh $arr_ws[$k][‘gcl‘][‘qm_nzh‘] = $val * 2.5; $arr_ws[$k][‘gcj‘][‘qm_nzh‘] = $arr_ws[$k][‘gcl‘][‘qm_nzh‘] * 7 * $i_p; $arr_ws[$k][‘price‘] += $arr_ws[$k][‘gcj‘][‘qm_nzh‘]; //墙面滚胶 qm_gj $arr_ws[$k][‘gcl‘][‘qm_gj‘] = $val * 2.5; $arr_ws[$k][‘gcj‘][‘qm_gj‘] = $arr_ws[$k][‘gcl‘][‘qm_gj‘] * 6 * $i_p; $arr_ws[$k][‘price‘] += $arr_ws[$k][‘gcj‘][‘qm_gj‘]; //墙面批腻子 qm_pnz $arr_ws[$k][‘gcl‘][‘qm_pnz‘] = $val * 2.5; $arr_ws[$k][‘gcj‘][‘qm_pnz‘] = $arr_ws[$k][‘gcl‘][‘qm_pnz‘] * 19 * $i_p; $arr_ws[$k][‘price‘] += $arr_ws[$k][‘gcj‘][‘qm_pnz‘]; //墙面手刷乳胶漆 qm_nzc $arr_ws[$k][‘gcl‘][‘qm_nzc‘] = $val * 2.5; $arr_ws[$k][‘gcj‘][‘qm_nzc‘] = $arr_ws[$k][‘gcl‘][‘qm_nzc‘] * 17 * $i_p; $arr_ws[$k][‘price‘] += $arr_ws[$k][‘gcj‘][‘qm_nzc‘]; //顶面铲除顶面腻子层 dm_nzc $arr_ws[$k][‘gcl‘][‘dm_nzc‘] = $val * 1; $arr_ws[$k][‘gcj‘][‘dm_nzc‘] = $arr_ws[$k][‘gcl‘][‘dm_nzc‘] * 7 * $i_p; $arr_ws[$k][‘price‘] += $arr_ws[$k][‘gcj‘][‘dm_nzc‘]; //顶面滚胶 dm_gj $arr_ws[$k][‘gcl‘][‘dm_gj‘] = $val * 1; $arr_ws[$k][‘gcj‘][‘dm_gj‘] = $arr_ws[$k][‘gcl‘][‘dm_gj‘] * 6 * $i_p; $arr_ws[$k][‘price‘] += $arr_ws[$k][‘gcj‘][‘dm_gj‘]; //顶面批腻子 dm_pnz $arr_ws[$k][‘gcl‘][‘dm_pnz‘] = $val * 1; $arr_ws[$k][‘gcj‘][‘dm_pnz‘] = $arr_ws[$k][‘gcl‘][‘dm_pnz‘] * 19 * $i_p; $arr_ws[$k][‘price‘] += $arr_ws[$k][‘gcj‘][‘dm_pnz‘]; //顶面手刷乳胶漆 dm_rjq $arr_ws[$k][‘gcl‘][‘dm_rjq‘] = $val * 1; $arr_ws[$k][‘gcj‘][‘dm_rjq‘] = $arr_ws[$k][‘gcl‘][‘dm_rjq‘] * 17 * $i_p; $arr_ws[$k][‘price‘] += $arr_ws[$k][‘gcj‘][‘dm_rjq‘]; //门套打底(宽度≤200mm) mt_dd $arr_ws[$k][‘gcl‘][‘mt_dd‘] = $val * 0.5; $arr_ws[$k][‘gcj‘][‘mt_dd‘] = $arr_ws[$k][‘gcl‘][‘mt_dd‘] * 43 * $i_p; $arr_ws[$k][‘price‘] += $arr_ws[$k][‘gcj‘][‘mt_dd‘]; //大理石窗台板(宽度≤600-900MM) dls_ctb $arr_ws[$k][‘gcl‘][‘dls_ctb‘] = $val * 0.2; $arr_ws[$k][‘gcj‘][‘dls_ctb‘] = $arr_ws[$k][‘gcl‘][‘dls_ctb‘] * 230 * $i_p; $arr_ws[$k][‘price‘] += $arr_ws[$k][‘gcj‘][‘dls_ctb‘]; $total_price += $arr_ws[$k][‘price‘]; } //---卧室1 //公用卫生间工程 $wsj_sy = $c_kt + $c_ws; //$wsj_total = 0;//卫生间总价 foreach ($arr_weishengjian as $k => $val) { $arr_wsj[$k][‘sy‘] = $wsj_sy + $k; //js索引 //地面做二遍防水处理 dm_fscl $arr_wsj[$k][‘gcl‘][‘dm_fscl‘] = $val * 4; $arr_wsj[$k][‘gcj‘][‘dm_fscl‘] = $arr_wsj[$k][‘gcl‘][‘dm_fscl‘] * 55 * $i_p; $arr_wsj[$k][‘price‘] += $arr_wsj[$k][‘gcj‘][‘dm_fscl‘]; //铺贴地砖不拼花(含填缝) pt_dzb $arr_wsj[$k][‘gcl‘][‘pt_dzb‘] = $val * 1; $arr_wsj[$k][‘gcj‘][‘pt_dzb‘] = $arr_wsj[$k][‘gcl‘][‘pt_dzb‘] * 77 * $i_p; $arr_wsj[$k][‘price‘] += $arr_wsj[$k][‘gcj‘][‘pt_dzb‘]; //地面找平(30mm内) dm_zp $arr_wsj[$k][‘gcl‘][‘dm_zp‘] = $val * 1; $arr_wsj[$k][‘gcj‘][‘dm_zp‘] = $arr_wsj[$k][‘gcl‘][‘dm_zp‘] * 60 * $i_p; $arr_wsj[$k][‘price‘] += $arr_wsj[$k][‘gcj‘][‘dm_zp‘]; //淋浴房挡水槛(浅色,含磨边) lyf_dsk $arr_wsj[$k][‘gcl‘][‘lyf_dsk‘] = $val * 0.38; $arr_wsj[$k][‘gcj‘][‘lyf_dsk‘] = $arr_wsj[$k][‘gcl‘][‘lyf_dsk‘] * 150 * $i_p; $arr_wsj[$k][‘price‘] += $arr_wsj[$k][‘gcj‘][‘lyf_dsk‘]; //大理石门槛石宽度≤240MM dls_mks $arr_wsj[$k][‘gcl‘][‘dls_mks‘] = $val * 0.25; $arr_wsj[$k][‘gcj‘][‘dls_mks‘] = $arr_wsj[$k][‘gcl‘][‘dls_mks‘] * 115 * $i_p; $arr_wsj[$k][‘price‘] += $arr_wsj[$k][‘gcj‘][‘dls_mks‘]; //铺贴墙砖不拼花(含填缝) pt_qzb $arr_wsj[$k][‘gcl‘][‘pt_qzb‘] = $val * 3.8; $arr_wsj[$k][‘gcj‘][‘pt_qzb‘] = $arr_wsj[$k][‘gcl‘][‘pt_qzb‘] * 73 * $i_p; $arr_wsj[$k][‘price‘] += $arr_wsj[$k][‘gcj‘][‘pt_qzb‘]; //墙面磁砖倒角加工费 qm_czdj $arr_wsj[$k][‘gcl‘][‘qm_czdj‘] = $val * 3; $arr_wsj[$k][‘gcj‘][‘qm_czdj‘] = $arr_wsj[$k][‘gcl‘][‘qm_czdj‘] * 20 * $i_p; $arr_wsj[$k][‘price‘] += $arr_wsj[$k][‘gcj‘][‘qm_czdj‘]; //门套打底(宽度≤200mm) mt_dd $arr_wsj[$k][‘gcl‘][‘mt_dd‘] = $val * 1.25; $arr_wsj[$k][‘gcj‘][‘mt_dd‘] = $arr_wsj[$k][‘gcl‘][‘mt_dd‘] * 43 * $i_p; $arr_wsj[$k][‘price‘] += $arr_wsj[$k][‘gcj‘][‘mt_dd‘]; //地漏及安装 dl_az $arr_wsj[$k][‘gcl‘][‘dl_az‘] = $val * 0.5; $arr_wsj[$k][‘gcj‘][‘dl_az‘] = $arr_wsj[$k][‘gcl‘][‘dl_az‘] * 88 * $i_p; $arr_wsj[$k][‘price‘] += $arr_wsj[$k][‘gcj‘][‘dl_az‘]; //安装成品台盆柜(含面盆、面盆龙头) az_tpg $arr_wsj[$k][‘gcl‘][‘az_tpg‘] = $val * 0.25; $arr_wsj[$k][‘gcj‘][‘az_tpg‘] = $arr_wsj[$k][‘gcl‘][‘az_tpg‘] * 80 * $i_p; $arr_wsj[$k][‘price‘] += $arr_wsj[$k][‘gcj‘][‘az_tpg‘]; //冷热水龙头安装(面盆/浴缸/淋浴/洗衣机) lr_slt $arr_wsj[$k][‘gcl‘][‘lr_slt‘] = $val * 0.25; $arr_wsj[$k][‘gcj‘][‘lr_slt‘] = $arr_wsj[$k][‘gcl‘][‘lr_slt‘] * 80 * $i_p; $arr_wsj[$k][‘price‘] += $arr_wsj[$k][‘gcj‘][‘lr_slt‘]; //浴室浴配件安装(毛巾杆、浴巾架等) ys_ypj $arr_wsj[$k][‘gcl‘][‘ys_ypj‘] = $val * 0.25; $arr_wsj[$k][‘gcj‘][‘ys_ypj‘] = $arr_wsj[$k][‘gcl‘][‘ys_ypj‘] * 100 * $i_p; $arr_wsj[$k][‘price‘] += $arr_wsj[$k][‘gcj‘][‘ys_ypj‘]; //三角阀+软管(套) sjf_rg $arr_wsj[$k][‘gcl‘][‘sjf_rg‘] = $val * 0.75; $arr_wsj[$k][‘gcj‘][‘sjf_rg‘] = $arr_wsj[$k][‘gcl‘][‘sjf_rg‘] * 60 * $i_p; $arr_wsj[$k][‘price‘] += $arr_wsj[$k][‘gcj‘][‘sjf_rg‘]; //安装马桶 az_mt $arr_wsj[$k][‘gcl‘][‘az_mt‘] = $val * 0.25; $arr_wsj[$k][‘gcj‘][‘az_mt‘] = $arr_wsj[$k][‘gcl‘][‘az_mt‘] * 75 * $i_p; $arr_wsj[$k][‘price‘] += $arr_wsj[$k][‘gcj‘][‘az_mt‘]; $total_price += $arr_wsj[$k][‘price‘]; } //厨房工程 总:1 $cf_sy = $c_kt + $c_ws + $c_wsj; //$cf_total = 0;//卧室总价 foreach ($arr_chufang as $k => $val) { $arr_cf[$k][‘sy‘] = $cf_sy + $k; //js索引 //铺贴地砖不拼花(含填缝) pt_dz $arr_cf[$k][‘gcl‘][‘pt_dz‘] = $val * 1; $arr_cf[$k][‘gcj‘][‘pt_dz‘] = $arr_cf[$k][‘gcl‘][‘pt_dz‘] * 77 * $i_p; $arr_cf[$k][‘price‘] += $arr_cf[$k][‘gcj‘][‘pt_dz‘]; //地面找平(30mm内) dm_zp $arr_cf[$k][‘gcl‘][‘dm_zp‘] = $val * 1; $arr_cf[$k][‘gcj‘][‘dm_zp‘] = $arr_cf[$k][‘gcl‘][‘dm_zp‘] * 60 * $i_p; $arr_cf[$k][‘price‘] += $arr_cf[$k][‘gcj‘][‘dm_zp‘]; //大理石门槛石宽度≤240MM dls_mk $arr_cf[$k][‘gcl‘][‘dls_mk‘] = $val * 0.2; $arr_cf[$k][‘gcj‘][‘dls_mk‘] = $arr_cf[$k][‘gcl‘][‘dls_mk‘] * 115 * $i_p; $arr_cf[$k][‘price‘] += $arr_cf[$k][‘gcj‘][‘dls_mk‘]; //铺贴墙砖不拼花(含填缝) pt_qz $arr_cf[$k][‘gcl‘][‘pt_qz‘] = $val * 3.8; $arr_cf[$k][‘gcj‘][‘pt_qz‘] = $arr_cf[$k][‘gcl‘][‘pt_qz‘] * 73 * $i_p; $arr_cf[$k][‘price‘] += $arr_cf[$k][‘gcj‘][‘pt_qz‘]; //磁砖倒角加工费 cz_djjgf $arr_cf[$k][‘gcl‘][‘cz_djjgf‘] = $val * 2.4; $arr_cf[$k][‘gcj‘][‘cz_djjgf‘] = $arr_cf[$k][‘gcl‘][‘cz_djjgf‘] * 20 * $i_p; $arr_cf[$k][‘price‘] += $arr_cf[$k][‘gcj‘][‘cz_djjgf‘]; //门套打底(宽度≤200mm) mt_dd $arr_cf[$k][‘gcl‘][‘mt_dd‘] = $val * 1; $arr_cf[$k][‘gcj‘][‘mt_dd‘] = $arr_cf[$k][‘gcl‘][‘mt_dd‘] * 43 * $i_p; $arr_cf[$k][‘price‘] += $arr_cf[$k][‘gcj‘][‘mt_dd‘]; //厨房水槽安装(含冷热水龙头安装) cf_scaz $arr_cf[$k][‘gcl‘][‘cf_scaz‘] = $val * 0.2; $arr_cf[$k][‘gcj‘][‘cf_scaz‘] = $arr_cf[$k][‘gcl‘][‘cf_scaz‘] * 45 * $i_p; $arr_cf[$k][‘price‘] += $arr_cf[$k][‘gcj‘][‘cf_scaz‘]; //三角阀+软管(套) sjf_rg $arr_cf[$k][‘gcl‘][‘sjf_rg‘] = $val * 0.8; $arr_cf[$k][‘gcj‘][‘sjf_rg‘] = $arr_cf[$k][‘gcl‘][‘sjf_rg‘] * 60 * $i_p; $arr_cf[$k][‘price‘] += $arr_cf[$k][‘gcj‘][‘sjf_rg‘]; $total_price += $arr_cf[$k][‘price‘]; } //厅阳台工程 $yt_sy = $c_kt + $c_ws + $c_wsj + $c_cf; $yt_total = 0; //厅阳台总价 foreach ($arr_yangtai as $k => $val) { $arr_yt[$k][‘sy‘] = $yt_sy + $k; //js索引 //铺贴地砖不拼花(含填缝,单边≥200mm) pt_dz $arr_yt[$k][‘gcl‘][‘pt_dz‘] = $val * 1; $arr_yt[$k][‘gcj‘][‘pt_dz‘] = $arr_yt[$k][‘gcl‘][‘pt_dz‘] * 77 * $i_p; $arr_yt[$k][‘price‘] += $arr_yt[$k][‘gcj‘][‘pt_dz‘]; //地面找平(30mm内) dm_zp $arr_yt[$k][‘gcl‘][‘dm_zp‘] = $val * 1; $arr_yt[$k][‘gcj‘][‘dm_zp‘] = $arr_yt[$k][‘gcl‘][‘dm_zp‘] * 60 * $i_p; $arr_yt[$k][‘price‘] += $arr_yt[$k][‘gcj‘][‘dm_zp‘]; //大理石门槛石宽度≤240MM dls_mk $arr_yt[$k][‘gcl‘][‘dls_mk‘] = $val * 0.63; $arr_yt[$k][‘gcj‘][‘dls_mk‘] = $arr_yt[$k][‘gcl‘][‘dls_mk‘] * 115 * $i_p; $arr_yt[$k][‘price‘] += $arr_yt[$k][‘gcj‘][‘dls_mk‘]; //铺贴墙砖不拼花(含填缝,单边≥200mm) pt_qz $arr_yt[$k][‘gcl‘][‘pt_qz‘] = $val * 2; $arr_yt[$k][‘gcj‘][‘pt_qz‘] = $arr_yt[$k][‘gcl‘][‘pt_qz‘] * 73 * $i_p; $arr_yt[$k][‘price‘] += $arr_yt[$k][‘gcj‘][‘pt_qz‘]; //顶面批腻子 dm_pnz $arr_yt[$k][‘gcl‘][‘dm_pnz‘] = $val * 1; $arr_yt[$k][‘gcj‘][‘dm_pnz‘] = $arr_yt[$k][‘gcl‘][‘dm_pnz‘] * 19 * $i_p; $arr_yt[$k][‘price‘] += $arr_yt[$k][‘gcj‘][‘dm_pnz‘]; //顶面手刷乳胶漆(金装五合一,一底两面) dm_rjq $arr_yt[$k][‘gcl‘][‘dm_rjq‘] = $val * 1; $arr_yt[$k][‘gcj‘][‘dm_rjq‘] = $arr_yt[$k][‘gcl‘][‘dm_rjq‘] * 17 * $i_p; $arr_yt[$k][‘price‘] += $arr_yt[$k][‘gcj‘][‘dm_rjq‘]; $total_price += $arr_yt[$k][‘price‘]; } //水电及其安装 $sd_sy = $c_kt + $c_ws + $c_wsj + $c_cf + $c_yt; $total_area = $areas; $shuidian_price = 0; $shuidian_gcl = array(); $shuidian_gcj = array(); //电话线 sd_dhx $shuidian_gcl[‘sd_dhx‘] = $total_area * 0.25; $shuidian_gcj[‘sd_dhx‘] = $shuidian_gcl[‘sd_dhx‘] * 4 * $i_p; $shuidian_price += $shuidian_gcj[‘sd_dhx‘]; //网络线 sd_wlx $shuidian_gcl[‘sd_wlx‘] = $total_area * 0.75; $shuidian_gcj[‘sd_wlx‘] = $shuidian_gcl[‘sd_wlx‘] * 5.3 * $i_p; $shuidian_price += $shuidian_gcj[‘sd_wlx‘]; //弱电全套开关/插座(地插价格另计) sd_rdkg $shuidian_gcl[‘sd_rdkg‘] = $total_area * 0.11; $shuidian_gcj[‘sd_rdkg‘] = $shuidian_gcl[‘sd_rdkg‘] * 45 * $i_p; $shuidian_price += $shuidian_gcj[‘sd_rdkg‘]; //视频线 sd_spx $shuidian_gcl[‘sd_spx‘] = $total_area * 0.63; $shuidian_gcj[‘sd_spx‘] = $shuidian_gcl[‘sd_spx‘] * 7.3 * $i_p; $shuidian_price += $shuidian_gcj[‘sd_spx‘]; //安装弱电箱 sd_rdx $shuidian_gcl[‘sd_rdx‘] = $total_area * 0.01; $shuidian_gcj[‘sd_rdx‘] = $shuidian_gcl[‘sd_rdx‘] * 330 * $i_p; $shuidian_price += $shuidian_gcj[‘sd_rdx‘]; //6分PVC线管(含管件) sd_pvc $shuidian_gcl[‘sd_pvc‘] = $total_area * 3.13; $shuidian_gcj[‘sd_pvc‘] = $shuidian_gcl[‘sd_pvc‘] * 5.3 * $i_p; $shuidian_price += $shuidian_gcj[‘sd_pvc‘]; //1.5㎡电线 sd_15dx $shuidian_gcl[‘sd_15dx‘] = $total_area * 5.75; $shuidian_gcj[‘sd_15dx‘] = $shuidian_gcl[‘sd_15dx‘] * 4 * $i_p; $shuidian_price += $shuidian_gcj[‘sd_15dx‘]; //2.5㎡电线 sd_25dx $shuidian_gcl[‘sd_25dx‘] = $total_area * 6.25; $shuidian_gcj[‘sd_25dx‘] = $shuidian_gcl[‘sd_25dx‘] * 4.9 * $i_p; $shuidian_price += $shuidian_gcj[‘sd_25dx‘]; //4㎡电线 sd_4dx $shuidian_gcl[‘sd_4dx‘] = $total_area * 0.5; $shuidian_gcj[‘sd_4dx‘] = $shuidian_gcl[‘sd_4dx‘] * 7.3 * $i_p; $shuidian_price += $shuidian_gcj[‘sd_4dx‘]; //安装强电箱箱体12路 sd_qdx $shuidian_gcl[‘sd_qdx‘] = $total_area * 0.01; $shuidian_gcj[‘sd_qdx‘] = $shuidian_gcl[‘sd_qdx‘] * 400 * $i_p; $shuidian_price += $shuidian_gcj[‘sd_qdx‘]; //强电开关/插座(地插价格另计) sd_qdkg $shuidian_gcl[‘sd_qdkg‘] = $total_area * 0.56; $shuidian_gcj[‘sd_qdkg‘] = $shuidian_gcl[‘sd_qdkg‘] * 25 * $i_p; $shuidian_price += $shuidian_gcj[‘sd_qdkg‘]; //开关插座暗盒 sd_kgah $shuidian_gcl[‘sd_kgah‘] = $total_area * 0.68; $shuidian_gcj[‘sd_kgah‘] = $shuidian_gcl[‘sd_kgah‘] * 8 * $i_p; $shuidian_price += $shuidian_gcj[‘sd_kgah‘]; //安装灯头盒 sd_azdth $shuidian_gcl[‘sd_azdth‘] = $total_area * 0.38; $shuidian_gcj[‘sd_azdth‘] = $shuidian_gcl[‘sd_azdth‘] * 5.5 * $i_p; $shuidian_price += $shuidian_gcj[‘sd_azdth‘]; //冷热水管 sd_lrsg $shuidian_gcl[‘sd_lrsg‘] = $total_area * 0.63; $shuidian_gcj[‘sd_lrsg‘] = $shuidian_gcl[‘sd_lrsg‘] * 45 * $i_p; $shuidian_price += $shuidian_gcj[‘sd_lrsg‘]; //灯具安装 sd_djaz $shuidian_gcl[‘sd_djaz‘] = $total_area * 0.01; $shuidian_gcj[‘sd_djaz‘] = $shuidian_gcl[‘sd_djaz‘] * 400 * $i_p; $shuidian_price += $shuidian_gcj[‘sd_djaz‘]; //砖墙管线开槽(含修粉) sd_qzgx $shuidian_gcl[‘sd_qzgx‘] = $total_area * 1; $shuidian_gcj[‘sd_qzgx‘] = $shuidian_gcl[‘sd_qzgx‘] * 10.5 * $i_p; $shuidian_price += $shuidian_gcj[‘sd_qzgx‘]; //钢筋混凝土墙面凿槽(含修粉) sd_gjhyt $shuidian_gcl[‘sd_gjhyt‘] = $total_area * 0.38; $shuidian_gcj[‘sd_gjhyt‘] = $shuidian_gcl[‘sd_gjhyt‘] * 23 * $i_p; $shuidian_price += $shuidian_gcj[‘sd_gjhyt‘]; //机器开孔(空调/脱排/浴霸) sd_jqkk $shuidian_gcl[‘sd_jqkk‘] = $total_area * 0.06; $shuidian_gcj[‘sd_jqkk‘] = $shuidian_gcl[‘sd_jqkk‘] * 40 * $i_p; $shuidian_price += $shuidian_gcj[‘sd_jqkk‘]; //杂物费(按建筑面积计算) sd_zwf $shuidian_gcl[‘sd_zwf‘] = $total_area * 0.01; $shuidian_gcj[‘sd_zwf‘] = $shuidian_gcl[‘sd_zwf‘] * 250 * $i_p; $shuidian_price += $shuidian_gcj[‘sd_zwf‘]; //垃圾清运费(新房,按建筑面积计算) sd_ljqyf $shuidian_gcl[‘sd_ljqyf‘] = $total_area * 0.73; $shuidian_gcj[‘sd_ljqyf‘] = $shuidian_gcl[‘sd_ljqyf‘] * 6 * $i_p; $shuidian_price += $shuidian_gcj[‘sd_ljqyf‘]; $total_price += $shuidian_price; return array(‘total_price‘=>$total_price,‘arr_kt‘=>$arr_kt,‘arr_ws‘=>$arr_ws,‘arr_wsj‘=>$arr_wsj,‘arr_cf‘=>$arr_cf,‘arr_yt‘=>$arr_yt,‘arr_sd‘=>$shuidian_price); } ############################ U_DECRYPT ############################ # 加密 public function U_ENCRYPT($mobile) { return U_ENCRYPT($mobile); // $wMobile = array( // ‘18601693057‘, # l // ‘13918817036‘, # m // ‘15001793098‘, # z // ‘13611849697‘, # h // ‘18605623290‘, # c // ‘17051210248‘ # f // ); // if (in_array($mobile, $wMobile)) { // return U_ENCRYPT($mobile); // } // return $mobile; } # 解密 public function U_DECRYPT($mobile) { if (strlen($mobile) == 16) return U_DECRYPT($mobile); # 新存入字段 解密后返回 else return $mobile; # 旧存入字段 直接返回 } # 保存明文 public function U_SAVE_BM($bmid, $mobile) { $this->loadModel(‘BmLog‘); $data[‘baoming_id‘] = $bmid; $data[‘mobile‘] = $mobile; return $this->BmLog->save($data); } /** *获取当前页面报名人数(数据会有75秒的延迟) *该方法已被 function cake24_get_baomingNum() 替代 *暂时废止 *2017-03-13 **/ public function cake24_get_baoming_num($utm_page, $overTime = 75){ if(empty($utm_page)){return 0;} $conditions = array(‘GlobalConfig.category_id‘ => 1); //1-报名页面来源 $utmPageArr = $this->GlobalConfig->find(‘list‘, array( ‘conditions‘ => $conditions, ‘fields‘ => array(‘GlobalConfig.short‘, ‘GlobalConfig.name‘)) ); //获取报名户型设计数量 if ($this->Redis->get(‘UTMPAGE_‘.$utm_page)) { $baoming_num = $this->Redis->get(‘UTMPAGE_‘.$utm_page); } else { $conditions = array(‘Baoming.utm_page LIKE‘=>$utmPageArr[$utm_page].‘%‘); $baoming_num = $this->Baoming->find(‘count‘,array(‘conditions‘=>$conditions)); $this->Redis->setex(‘UTMPAGE_‘.$utm_page, $overTime, $baoming_num); } $this->set(‘baoming_num‘, $baoming_num); } /** * @获取报名数量 * @par $type utm_page(获取指定页面报名数量),all(获取当前所有的报名数量),date(获取具体日期的报名数量),month(获取具体月份的报名数量) * @par $param 具体的数据 * @par $fix_num 需要填充的数量 * @par $return 是否返回数据 false (不返回数据,直接定义变量) , true (返回数据) * @par $overTime redis信息更新时间 默认为75 S * 注: 当参数错误、输入的日期格式不正确和找不到$type类型时,统一返回 0 * @return $baoming_num (报名数量) 直接定义变量 * @author dtz 2017-03-13 **/ public function cake24_get_baomingNum($param, $type = ‘utm_page‘, $fix_num = 0, $return = false, $overTime = 75){ unset($baoming_num); if(empty($param)){ return $baoming_num = 0; } $conditions = array(‘GlobalConfig.category_id‘ => 1); //1-报名页面来源 $utmPageArr = $this->GlobalConfig->find(‘list‘, array( ‘conditions‘ => $conditions, ‘fields‘ => array(‘GlobalConfig.short‘, ‘GlobalConfig.name‘)) ); //分析数据类型 switch ($type) { case ‘utm_page‘://获取指定页面来源的报名数量 $key = ‘GET_UTMPAGE_‘.$param; $conditions = array(‘`Baoming`.`utm_page`‘=>$utmPageArr[$param]); break; case ‘all‘://获取所有数据的报名数量 $fix_num = 200000;//所有数据的基数同意是200000 $key = ‘GET_‘.strtoupper($param); $conditions = []; break; case ‘date‘://获取指定日期的报名数量 $is_date = $this->cake24_check_date($param);//判断是否是日期格式 if($is_date){ $key = ‘GET_DATE_‘.$param; $conditions = array(‘DATE_FORMAT(`addtime`,\‘%Y-%m-%d\‘)‘ => $param); }else{//如果日期格式不对则返回0 return 0; } break; case ‘month‘://获取指定月份的报名数量 (暫時不用) $is_month = $this->cake24_check_date($param);//判断是否是日期格式 if($is_month){ $key = ‘GET_MONTH_‘.$param; $conditions = array(‘DATE_FORMAT(`addtime`,\‘%Y-%m\‘)‘ => $param); }else{//如果月份格式不对则返回0 return 0; } break; default: return 0;//默认返回0 break; } //获取各类型的报名数量 if ($this->Redis->get($key)) { $baoming_num = $this->Redis->get($key); } else { $baoming_num = $this->Baoming->find(‘count‘,array(‘conditions‘ => $conditions)); $this->Redis->setex($key, $overTime, $baoming_num); } //如果需要填充的数量部位0 则在原基础的数据上加上需要填充的数据 if($fix_num != 0 && is_int($fix_num)){ $baoming_num += $fix_num; } if($return){ return $baoming_num; }else{ $this->set(‘baoming_num‘, $baoming_num); } } /** * @判断日期格式时候正确 * 功能 判断日期格式是否正确 * 参数 $str 日期字符串, $format 日期格式 * $format 支持 Y-m-d 和 Y/m/d 两种格式 Ymd暂时不兼容 * 注意 : 在判斷月份的時候$format 格式必須也只是 Y-m-d 和 Y/m/d 不能寫成 Y-m 和 Y/m * @return true 格式正确 , false 格式错误 * @author dtz 2017-03-13 **/ protected function cake24_check_date($str, $format=‘Y-m-d‘){ $date_type = preg_replace(‘/[\.a-zA-Z]/s‘, ‘‘, $format);//去除大小寫字母 //$date_type[0] 的值为 - 或者 / //计算 $date_type[0] 在字符串中的次数 (如果是日期格式的话 $date_type[0] 符号不会超过2个,如果超过2个则直接返回 false) $substr_count = substr_count($str, $date_type[0]); if(in_array($substr_count, array(1, 2))){ if($substr_count == 1){ $str .= $date_type[0].‘01‘; } }else{ return false; } $unixTime = strtotime($str); if(!is_numeric($unixTime)) return false; //如果不是数字格式,则直接返回 $checkDate = date($format, $unixTime); $checktime = strtotime($checkDate); if($unixTime == $checktime){ return true; }else{ return false; } } /** * @屏蔽掉局域网、外测和系统配置ip * @par $ip 当前ip地址 * @return true 当前ip需要屏蔽 , false 当前ip不需要屏蔽 * @author dtz 2017-03-06 **/ protected function cake24_ignore_ip($ip){ //判断是否是合法的公共IPv4地址 if(!filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4 | FILTER_FLAG_NO_PRIV_RANGE)){ return true;//局域网的ip需要屏蔽 } if(strpos($ip, ‘,‘)){ $explode = explode(‘,‘, $ip); $ip = trim($explode[0]); } $this->loadModel("ApplicationConfig"); $ipData = $this->ApplicationConfig->find(‘list‘,array( ‘conditions‘=>array( ‘project‘=>array(‘now_ipaddress‘,‘budding_ipaddress‘) ), ‘fields‘ => array(‘text‘,‘text‘) ) ); $check_ip_arr = explode(‘.‘, $ip);//要检测的ip拆分成数组 $ipArr = [‘116.62.40.158‘, ‘180.173.90.62‘];//公司外测的ip也可以添加局域网ip段,但如果要加局域网ip段的话就和代码功能重复,在此加局域网ip段需要注释掉 $ignoreIpArr = array_merge(array_values($ipData), $ipArr); if(!in_array($ip, $ignoreIpArr)){ foreach ($ignoreIpArr as $key => $value) { if(strpos($value, ‘*‘) !== false ){//发现有*号替代符 $arr = explode(‘.‘, $value); $bl = true;//用于记录循环检测中是否有匹配成功的 foreach ($arr as $k => $val) { if($val != ‘*‘){//不等于* 就要进来检测,如果为*符号替代符就不检查 if($val != $check_ip_arr[$k]){ $bl = false; break;//终止检查本个ip 继续检查下一个ip } } } } } }else{ $bl = true; } return $bl; } /** * 格式化网址 * par $url 待格式化的网址 * return 处理后的网址 * Recoded By dtz * date 2017-02-06 **/ protected function cake24_filterUrl($url = ‘‘){ $url = trim(strtolower($url)); $url = trim(preg_replace(‘/^http:\/\//‘, ‘‘, $url)); if ($url == ‘‘){ return false; }else{ return urlencode(‘http://‘ . $url); } } //拼接请求地址,此地址你可以在官方的文档中查看到 protected function cake24_sinaShortenUrl($long_url){ //新浪 /*$url = ‘http://api.t.sina.com.cn/short_url/shorten.json?source=31641035&url_long=‘ . $long_url; //获取请求结果 $result = $this->curlQuery($url);*/ //下面这行注释用于调试,你可以把注释去掉看看从sina返回的信息是什么东西 //print_r($result);exit(); //百度 $ch = curl_init(); $url = ‘http://apis.baidu.com/3023/shorturl/shorten?url_long=‘.$long_url; $header = array( ‘apikey: c3aadd615ae4b6bfcbf8e4afc503fab7‘, ); // 添加apikey到header curl_setopt($ch, CURLOPT_HTTPHEADER , $header); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 执行HTTP请求 curl_setopt($ch , CURLOPT_URL , $url); $result = curl_exec($ch); //解析json $json = json_decode($result,true); $url_short = $json[‘urls‘][0][‘url_short‘]; //异常情况返回false if (isset($json[‘error‘]) || $url_short == ‘‘) { return false; } else { return $url_short; } } /** * @去除XSS(跨站脚本攻击)的函数 * @par $val 字符串参数,可能包含恶意的脚本代码如<script language="javascript">alert("hello world");</script> * @return 处理后的字符串 * @Recoded By Androidyue **/ public function cake24_remove_xss($val) { // remove all non-printable characters. CR(0a) and LF(0b) and TAB(9) are allowed // this prevents some character re-spacing such as <java\0script> // note that you have to handle splits with \n, \r, and \t later since they *are* allowed in some inputs $val = preg_replace(‘/([\x00-\x08,\x0b-\x0c,\x0e-\x19])/‘, ‘‘, $val); // straight replacements, the user should never need these since they‘re normal characters // this prevents like <IMG [email protected]:alert(‘XSS‘)> $search = ‘abcdefghijklmnopqrstuvwxyz‘; $search .= ‘ABCDEFGHIJKLMNOPQRSTUVWXYZ‘; $search .= ‘[email protected]#$%^&*()‘; $search .= ‘~`";:?+/={}[]-_|\‘\\‘; for ($i = 0; $i < strlen($search); $i++) { // ;? matches the ;, which is optional // 0{0,7} matches any padded zeros, which are optional and go up to 8 chars // @ @ search for the hex values $val = preg_replace(‘/(&#[xX]0{0,8}‘.dechex(ord($search[$i])).‘;?)/i‘, $search[$i], $val); // with a ; // @ @ 0{0,7} matches ‘0‘ zero to seven times $val = preg_replace(‘/(�{0,8}‘.ord($search[$i]).‘;?)/‘, $search[$i], $val); // with a ; } // now the only remaining whitespace attacks are \t, \n, and \r $ra1 = Array(‘javascript‘, ‘vbscript‘, ‘expression‘, ‘applet‘, ‘meta‘, ‘xml‘, ‘blink‘, ‘link‘, ‘style‘, ‘script‘, ‘embed‘, ‘object‘, ‘iframe‘, ‘frame‘, ‘frameset‘, ‘ilayer‘, ‘layer‘, ‘bgsound‘, ‘title‘, ‘base‘); $ra2 = Array(‘onabort‘, ‘onactivate‘, ‘onafterprint‘, ‘onafterupdate‘, ‘onbeforeactivate‘, ‘onbeforecopy‘, ‘onbeforecut‘, ‘onbeforedeactivate‘, ‘onbeforeeditfocus‘, ‘onbeforepaste‘, ‘onbeforeprint‘, ‘onbeforeunload‘, ‘onbeforeupdate‘, ‘onblur‘, ‘onbounce‘, ‘oncellchange‘, ‘onchange‘, ‘onclick‘, ‘oncontextmenu‘, ‘oncontrolselect‘, ‘oncopy‘, ‘oncut‘, ‘ondataavailable‘, ‘ondatasetchanged‘, ‘ondatasetcomplete‘, ‘ondblclick‘, ‘ondeactivate‘, ‘ondrag‘, ‘ondragend‘, ‘ondragenter‘, ‘ondragleave‘, ‘ondragover‘, ‘ondragstart‘, ‘ondrop‘, ‘onerror‘, ‘onerrorupdate‘, ‘onfilterchange‘, ‘onfinish‘, ‘onfocus‘, ‘onfocusin‘, ‘onfocusout‘, ‘onhelp‘, ‘onkeydown‘, ‘onkeypress‘, ‘onkeyup‘, ‘onlayoutcomplete‘, ‘onload‘, ‘onlosecapture‘, ‘onmousedown‘, ‘onmouseenter‘, ‘onmouseleave‘, ‘onmousemove‘, ‘onmouseout‘, ‘onmouseover‘, ‘onmouseup‘, ‘onmousewheel‘, ‘onmove‘, ‘onmoveend‘, ‘onmovestart‘, ‘onpaste‘, ‘onpropertychange‘, ‘onreadystatechange‘, ‘onreset‘, ‘onresize‘, ‘onresizeend‘, ‘onresizestart‘, ‘onrowenter‘, ‘onrowexit‘, ‘onrowsdelete‘, ‘onrowsinserted‘, ‘onscroll‘, ‘onselect‘, ‘onselectionchange‘, ‘onselectstart‘, ‘onstart‘, ‘onstop‘, ‘onsubmit‘, ‘onunload‘,‘onxload‘); $ra = array_merge($ra1, $ra2); $found = true; // keep replacing as long as the previous round replaced something while ($found == true) { $val_before = $val; for ($i = 0; $i < sizeof($ra); $i++) { $pattern = ‘/‘; for ($j = 0; $j < strlen($ra[$i]); $j++) { if ($j > 0) { $pattern .= ‘(‘; $pattern .= ‘(&#[xX]0{0,8}([9ab]);)‘; $pattern .= ‘|‘; $pattern .= ‘|(�{0,8}([9|10|13]);)‘; $pattern .= ‘)*‘; } $pattern .= $ra[$i][$j]; } $pattern .= ‘/i‘; $replacement = substr($ra[$i], 0, 2).‘<x>‘.substr($ra[$i], 2); // add in <> to nerf the tag $val = preg_replace($pattern, $replacement, $val); // filter out the hex tags if ($val_before == $val) { // no replacements were made, so exit the loop $found = false; } } } $val = preg_replace(‘/\>|\<|\"|\‘|[()=]|(alert)|(if)/i‘, ‘‘, $val); $val = preg_replace(‘/(xrame)|(onxload)|(body)|(prompt)/i‘,‘‘,$val); return $val; } }