findByPk($admin_id); if($accessModel) { $exp_time = strtotime($accessModel->init_time) - 100; $time = time(); if($exp_time >= $time) { return $accessModel->access_token; } } if(!$accessModel) { $accessModel = new AccessToken; } $accessModel->admin_id = $admin_id; //先获取access_token $connection = Yii::app()->db; $sql = 'select wx_type, appid, appsecret from wx_admin where id = ' . $admin_id; $command = $connection->createCommand($sql); $data = $command->query(); $wx_type = 0; foreach($data as $key => $val) { $wx_type = $val["wx_type"]; $appid = $val["appid"]; $appsecret = $val["appsecret"]; } if($wx_type == 3) { $access_token_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" . $appid . "&secret=" . $appsecret; $access_token_result = LewaimaiHttp::GET($access_token_url); $access_token_array = json_decode($access_token_result, true); if(isset($access_token_array['access_token'])) { $access_token = $access_token_array["access_token"]; $expires_in = time() + $access_token_array['expires_in']; $accessModel->init_time = date('Y-m-d H:i:s', $expires_in); $accessModel->access_token = $access_token; if (!$accessModel->save()) { LewaimaiDebug::LogModelError($accessModel); return false; } return $accessModel->access_token; } else { Yii::log('GetAccessToken Error! admin_id:' . $admin_id); } } return false; } //获取乐外卖官方微信公众号的accesstoken public static function GetLewaimaiAccessToken() { $accessModel = AccessToken::model()->findByPk(19); if($accessModel) { $exp_time = strtotime($accessModel->init_time) - 100; $time = time(); if($exp_time >= $time) { return $accessModel->access_token; } } if(!$accessModel) { $accessModel = new AccessToken; } $accessModel->admin_id = 19; $appid = LEWAIMAI_APPID; $appsecret = LEWAIMAI_APPSECRET; $access_token_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" . $appid . "&secret=" . $appsecret; $access_token_result = LewaimaiHttp::GET($access_token_url); $access_token_array = json_decode($access_token_result, true); if(isset($access_token_array['access_token'])) { $access_token = $access_token_array["access_token"]; $expires_in = time() + $access_token_array['expires_in']; $accessModel->init_time = date('Y-m-d H:i:s', $expires_in); $accessModel->access_token = $access_token; if (!$accessModel->save()) { LewaimaiDebug::LogModelError($accessModel); return false; } return $accessModel->access_token; } else { Yii::log('GetLewaimaiAccessToken Error!'); } return false; } //获取用户的基本信息 public static function GetUserInfo($adminId, $openid) { $pingtai_access_token = LewaimaiWeixinauth::getAuthorizerAccessToken($adminId); $url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=" . $pingtai_access_token . "&openid=" . $openid . "&lang=zh_CN"; $result = LewaimaiHttp::GET($url); $res_array = json_decode($result, true); if (isset($res_array["errcode"])) { return false; } return $res_array; } public static function GetWorkItime($shop) { $shop_start_time = $shop->shop_start_time; $shop_stop_time = $shop->shop_stop_time; $shop_start_time_2 = $shop->shop_start_time_2; $shop_stop_time_2 = $shop->shop_stop_time_2; $shop_start_time_3 = $shop->shop_start_time_3; $shop_stop_time_3 = $shop->shop_stop_time_3; $shop_time_string = ""; if (!($shop_start_time == "00:00:00" && $shop_stop_time == "00:00:00")) { $shop_time_string .= substr($shop_start_time, 0, 5) . "-" . substr($shop_stop_time, 0, 5); } if (!($shop_start_time_2 == "00:00:00" && $shop_stop_time_2 == "00:00:00")) { $shop_time_string .= " " . substr($shop_start_time_2, 0, 5) . "-" . substr($shop_stop_time_2, 0, 5); } if (!($shop_start_time_3 == "00:00:00" && $shop_stop_time_3 == "00:00:00")) { $shop_time_string .= " " . substr($shop_start_time_3, 0, 5) . "-" . substr($shop_stop_time_3, 0, 5); } return $shop_time_string; } //传入参数是店铺model //判断是否在营业时间 public static function IsInWorkTime($shopModel) { $beginTime1 = $shopModel->shop_start_time; $endTime1 = $shopModel->shop_stop_time; $beginTime2 = $shopModel->shop_start_time_2; $endTime2 = $shopModel->shop_stop_time_2; $beginTime3 = $shopModel->shop_start_time_3; $endTime3 = $shopModel->shop_stop_time_3; if ($beginTime1 === null || $endTime1 === null || $beginTime2 === null || $endTime2 === null || $beginTime3 === null || $endTime3 === null) { return true; } else { $isInTimeRange = false; $snow = strtotime(date("H:i")); $sst1 = strtotime($beginTime1); $set1 = strtotime($endTime1); if ($sst1 <= $set1) { if (($snow >= $sst1 && $snow <= $set1) ) { $isInTimeRange = true; } } else { if (($snow >= $sst1 || $snow <= $set1) ) { $isInTimeRange = true; } } $sst2 = strtotime($beginTime2); $set2 = strtotime($endTime2); if ($sst2 <= $set2) { if (($snow >= $sst2 && $snow <= $set2) ) { $isInTimeRange = true; } } else { if (($snow >= $sst2 || $snow <= $set2) ) { $isInTimeRange = true; } } $sst3 = strtotime($beginTime3); $set3 = strtotime($endTime3); if ($sst3 <= $set3) { if (($snow >= $sst3 && $snow <= $set3) ) { $isInTimeRange = true; } } else { if (($snow >= $sst3 || $snow <= $set3) ) { $isInTimeRange = true; } } return $isInTimeRange; } } //传入参数是带店铺参数的数组 //判断是否在营业时间 public static function IsInWorkTimeArray($shopArray) { $beginTime1 = $shopArray['shop_start_time']; $endTime1 = $shopArray['shop_stop_time']; $beginTime2 = $shopArray['shop_start_time_2']; $endTime2 = $shopArray['shop_stop_time_2']; $beginTime3 = $shopArray['shop_start_time_3']; $endTime3 = $shopArray['shop_stop_time_3']; if ($beginTime1 === null || $endTime1 === null || $beginTime2 === null || $endTime2 === null || $beginTime3 === null || $endTime3 === null) { return true; } else { $isInTimeRange = false; $snow = strtotime(date("H:i")); $sst1 = strtotime($beginTime1); $set1 = strtotime($endTime1); if ($sst1 <= $set1) { if (($snow >= $sst1 && $snow <= $set1) ) { $isInTimeRange = true; } } else { if (($snow >= $sst1 || $snow <= $set1) ) { $isInTimeRange = true; } } $sst2 = strtotime($beginTime2); $set2 = strtotime($endTime2); if ($sst2 <= $set2) { if (($snow >= $sst2 && $snow <= $set2) ) { $isInTimeRange = true; } } else { if (($snow >= $sst2 || $snow <= $set2) ) { $isInTimeRange = true; } } $sst3 = strtotime($beginTime3); $set3 = strtotime($endTime3); if ($sst3 <= $set3) { if (($snow >= $sst3 && $snow <= $set3) ) { $isInTimeRange = true; } } else { if (($snow >= $sst3 || $snow <= $set3) ) { $isInTimeRange = true; } } return $isInTimeRange; } } //根据距离今天的天数,0,1,2,3,返回实际的日期 public static function GetDeliveryDate($daynum) { $daynum = (int)$daynum; if($daynum<1){ return date('Y-m-d'); } return date('Y-m-d',time()+3600*24*($daynum-1)); } //根据经纬度算距离,返回结果单位是公里,先纬度,后经度 public static function GetDistance($lat1, $lng1, $lat2, $lng2) { $EARTH_RADIUS = 6378.137; $radLat1 = self::rad($lat1); $radLat2 = self::rad($lat2); $a = $radLat1 - $radLat2; $b = self::rad($lng1) - self::rad($lng2); $s = 2 * asin(sqrt(pow(sin($a / 2), 2) + cos($radLat1) * cos($radLat2) * pow(sin($b / 2), 2))); $s = $s * $EARTH_RADIUS; $s = round($s * 10000) / 10000; return $s; } private static function rad($d) { return $d * M_PI / 180.0; } //求开启状态的店铺数 public static function GetOwnShopNum($adminId) { $sql = "admin_id = " . $adminId . " AND shopstatus = 'OPEN'"; $shopnum = Config::model()->count($sql); return $shopnum; } //获取一个amidnId下的所有店铺 public static function GetOwnShop($adminId) { $shopArray = array(); $sql = "admin_id = " . $adminId . " AND shopstatus = 'OPEN' ORDER BY tag"; $shopModels = Config::model()->findAll($sql); if (!$shopModels || count($shopModels) == 0) { $shopArray["shopnum"] = 0; $shopArray["shoplist"] = array(); return $shopArray; } $i = 0; $shoplist = array(); foreach ($shopModels as $shop) { $IsInWorkTime = LewaimaiUtility::IsInWorkTime($shop); //计算起送价格描述 if (!$shop->delivery_fee_valid) { $deliveryName = "起送价格:"; $deliverValue = "¥" . $shop->basicprice*1; if ($shop->reach_delivery_fee_type == 0) { $deliverValue .= "(达到起送价免外送费)"; } elseif ($shop->reach_delivery_fee_type == 1) { $deliverValue .= "(外送费" . $shop->delivery_fee*1 . "元)"; } else { $deliverValue .= "(外送费" . $shop->delivery_fee*1 . "元," . $shop->no_delivery_fee_value*1 . "元免外送费)"; } } else { $deliveryName = "外送费:"; $deliverValue = "¥" . $shop->delivery_fee*1; if ($shop->reach_delivery_fee_type == 0) { $deliverValue .= "(" . $shop->basicprice*1 . "元免外送费)"; } elseif ($shop->reach_delivery_fee_type == 2) { $deliverValue .= "(" . $shop->no_delivery_fee_value*1 . "元免外送费)"; } } $priceDes = $deliveryName . $deliverValue; //计算营业时间描述 $shop_start_time = $shop->shop_start_time; $shop_stop_time = $shop->shop_stop_time; $shop_start_time_2 = $shop->shop_start_time_2; $shop_stop_time_2 = $shop->shop_stop_time_2; $shop_start_time_3 = $shop->shop_start_time_3; $shop_stop_time_3 = $shop->shop_stop_time_3; $shop_time_string = ""; if (!($shop_start_time == "00:00:00" && $shop_stop_time == "00:00:00")) { $shop_time_string .= substr($shop_start_time, 0, 5) . " - " . substr($shop_stop_time, 0, 5); } if (!($shop_start_time_2 == "00:00:00" && $shop_stop_time_2 == "00:00:00")) { $shop_time_string .= ", " . substr($shop_start_time_2, 0, 5) . " - " . substr($shop_stop_time_2, 0, 5); } if (!($shop_start_time_3 == "00:00:00" && $shop_stop_time_3 == "00:00:00")) { $shop_time_string .= ", " . substr($shop_start_time_3, 0, 5) . " - " . substr($shop_stop_time_3, 0, 5); } $shoplist[$i] = array( 'id' => $shop->id, 'type_id' => $shop->type_id, 'shopname' => $shop->shopname, 'shopimage' => $shop -> shopimage, 'shopaddress' => $shop->shopaddress, 'area' => $shop->area, 'shopdes' => $shop->shopdes, 'worktime' => $IsInWorkTime, 'priceDes' => $priceDes, 'shop_time_string' => $shop_time_string, 'coordinate_x' => $shop->coordinate_x, 'coordinate_y' => $shop->coordinate_y, ); $i++; } $shopArray["shopnum"] = $i; $shopArray["shoplist"] = $shoplist; return $shopArray; } //判断当前访问的IP是否是微信服务器的IP public static function IsWeixinIP() { $admin_access_token = LewaimaiUtility::GetLewaimaiAccessToken(); $url = "https://api.weixin.qq.com/cgi-bin/getcallbackip?access_token=" . $admin_access_token; $result = LewaimaiHttp::GET($url); $result_array = json_decode($result, true); if (isset($result_array["errcode"])) { Yii::log("get weixinip failed!"); return false; } $ip_array = $result_array["ip_list"]; $server_ip = $_SERVER['REMOTE_ADDR']; if (in_array($server_ip, $ip_array)) { return true; } return false; } //根据adminId和lewaimai_customer_id,获取这个顾客相对于adminId绑定的公众号的openid public static function getWeixinOpenid($adminId, $lewaimai_customer_id) { $adminModel = Admin::model()->findByPk($adminId); if (!$adminModel) { return false; } $wx_tousername = $adminModel->wx_tousername; $weixincustomerModel = WeixinCustomer::model()->find("wx_tousername = '" . $wx_tousername . "' AND lewaimai_customer_id = " . $lewaimai_customer_id); if (!$weixincustomerModel) { return false; } $openid = $weixincustomerModel->openid; return $openid; } //根据距离和按距离收费的json获取最终收费 public static function getRangeDeliveryFee($range, $range_delivery_fee) { $delivery_fee = false; $range_delivery_fee_array = json_decode($range_delivery_fee, true); foreach ($range_delivery_fee_array as $range_delivery_fee_item) { if ($range >= $range_delivery_fee_item["start"] && $range <= $range_delivery_fee_item["stop"]) { $delivery_fee = $range_delivery_fee_item["value"]; break; } } return $delivery_fee; } //根据距离和按距离收费的json获取起送价 public static function getRangeBasicprice($range, $range_delivery_fee) { $basicprice = false; $range_delivery_fee_array = json_decode($range_delivery_fee, true); foreach ($range_delivery_fee_array as $range_delivery_fee_item) { if ($range >= $range_delivery_fee_item["start"] && $range <= $range_delivery_fee_item["stop"]) { $basicprice = $range_delivery_fee_item["minvalue"]; break; } } return $basicprice; } //清空临时文件 public static function clearTempimages(){ $temp_url= 'public/temp/images/admin_'.Yii::app()->user->_id.'/'; if(!is_dir($temp_url)){ return false; }else{ $dir = opendir($temp_url); readdir($dir); readdir($dir); while($file = readdir($dir)){ @unlink($temp_url.$file); } } } /** * li * 验证注册签名 * @param $time * @param $post_sign * @return bool */ public static function checkRegisterSignature($time,$post_sign) { // 判断是否过期,过期时间30分钟 $minute_30 = 180; if((time() - $time) >= $minute_30) { return false; } $signature = LewaimaiUtility::makeRegisterSignature($time); if($signature == $post_sign) { return true; // it is ok! } else { return false; } } /** * li * 生成注册签名 * @param $time * @return string */ public static function makeRegisterSignature($time) { $arr = array(); $arr['partnerKey'] = LEWAIMAI_API_KEY; $arr['timestamp'] = $time; $arr['sessionID'] = Yii::app()->session->sessionID; $signature = strtoupper(md5(http_build_query ( $arr , '' , '&' ))); return $signature; } /** * 检查手机号所属运营商 * @param $phoneArr * @return array */ public static function checkPhoneBelongToWhichService($phoneArr) { $ChinaMobileNum = 0; $ChinaUnionNum = 0; $ChinaTelcomNum = 0; $OtherTelphoneNum = 0; $isChinaMobile = "/^134[0-8]\d{7}$|^(?:13[5-9]|147|15[0-27-9]|178|18[2-478])\d{8}$/"; // 移动 $isChinaUnion = "/^(?:13[0-2]|145|15[56]|176|18[56])\d{8}$/"; //联通 $isChinaTelcom = "/^(?:133|153|177|18[019])\d{8}$/"; //电信 $isOtherTelphone = "/^170([059])\d{7}$/"; //其他运营商 if(empty($phoneArr) || !is_array($phoneArr)) { return array('ChinaMobileNum'=>0, 'ChinaUnionNum'=>0, 'ChinaTelcomNum'=>0, 'OtherTelphoneNum'=>0); } foreach ($phoneArr as $phone) { if(preg_match($isChinaMobile, $phone)) { $ChinaMobileNum++; } else if(preg_match($isChinaUnion, $phone)) { $ChinaUnionNum++; } else if(preg_match($isChinaTelcom, $phone)) { $ChinaTelcomNum++; } else { $OtherTelphoneNum++; } } return array('ChinaMobileNum'=>$ChinaMobileNum, 'ChinaUnionNum'=>$ChinaUnionNum, 'ChinaTelcomNum'=>$ChinaTelcomNum, 'OtherTelphoneNum'=>$OtherTelphoneNum); } /** * 生成api 请求所需的签名 * @param $params */ public static function buildSignForApiRequest($params) { $lwm_appid = LWM_APPID; $timestamp = time(); $nonce = LewaimaiString::create_noncestr(5); $signParamArr = array(); $signParamArr['lwm_appid'] = $lwm_appid; $signParamArr['timestamp'] = $timestamp; $signParamArr['nonce'] = $nonce; foreach ($params as $key=>$value) { $signParamArr[$key] = is_array($value) ? json_encode($value) : $value; } ksort($signParamArr, SORT_STRING); $signParamArr = http_build_query($signParamArr); $signature = strtoupper(md5( md5($signParamArr) . LWM_APP_SECRET)); $result['lwm_appid'] = $lwm_appid; $result['timestamp'] = $timestamp; $result['nonce'] = $nonce; $result['sign'] = $signature; return $result; } /** * 获取包括主账号的员工账号 * @param $admin_id * @return array|CActiveRecord|mixed|null */ public static function getEmployeeListByAdminId($admin_id, $include_me=true) { $sql = "SELECT id,account FROM {{employees_account}} WHERE admin_id=:admin_id"; $list = EmployeesAccount::model()->findAllBySql($sql, array(':admin_id'=>$admin_id)); $list = $list ? $list : array(); if($include_me){ $sql = 'select id,username from {{admin}} where id=:admin_id'; $admin = Admin::model()->findBySql($sql, array(':admin_id'=>$admin_id)); array_unshift($list, array('id'=>'admin_id:'.$admin_id,'account'=>$admin['username'])); } return $list; } public static function checkArea($admin_id) { $areaArr = Area::model()->findAll('admin_id=:admin_id AND status=1',array(':admin_id'=>$admin_id)); return empty($areaArr)?array():$areaArr; } /** * 为智能机统计建立数据 * @param $data * @param $dayDataArr * @param $guazhangArr * @return mixed */ public static function buildDataByZnjStat($data, $dayDataArr, $guazhangArr) { if(!empty($data)){ foreach ($data as $val) { if(isset($dayDataArr[$val['day']]) && !empty($dayDataArr[$val['day']][$val['zhifu_type']])){ $dayDataArr[$val['day']][$val['zhifu_type']] += $val['yingshou_price']; }else{ $dayDataArr[$val['day']][$val['zhifu_type']] = $val['yingshou_price']; } if(isset($guazhangArr[$val['day']]) && !empty($guazhangArr[$val['day']][$val['zhifu_type']])){ //zhifu_type为1,2,3,4的挂账算自定义支付 $dayDataArr[$val['day']][$val['zhifu_type']] -= $guazhangArr[$val['day']][$val['zhifu_type']]; if(isset($dayDataArr[$val['day']][5])){ $dayDataArr[$val['day']][5] += $guazhangArr[$val['day']][$val['zhifu_type']]; }else{ $dayDataArr[$val['day']][5] = $guazhangArr[$val['day']][$val['zhifu_type']]; } } if(isset($dayDataArr[$val['day']]['yingshou_price'])){ $dayDataArr[$val['day']]['yingshou_price'] += $val['yingshou_price']; }else{ $dayDataArr[$val['day']]['yingshou_price'] = $val['yingshou_price']; } if(isset($dayDataArr[$val['day']]['shishou_value'])){ $dayDataArr[$val['day']]['shishou_value'] += $val['shishou_value']; }else{ $dayDataArr[$val['day']]['shishou_value'] = $val['shishou_value']; } if(isset($dayDataArr[$val['day']]['zhaoling_value'])){ $dayDataArr[$val['day']]['zhaoling_value'] += $val['zhaoling_value']; }else{ $dayDataArr[$val['day']]['zhaoling_value'] = $val['zhaoling_value']; } } } return $dayDataArr; } /** * 汇总订单数统计 * @param $data * @param $dateArray * @return array */ public static function buildOrderNumDataBySummary($data, $dateArray, $dataArray=array()) { if(!empty($data)) { foreach ($data as $val) { if(isset($dataArray[$val['day']])){ $dataArray[$val['day']] += $val['num']; }else{ $dataArray[$val['day']] = $val['num']; } } } return $dataArray; } /** * 为汇总营业额统计导出准备数据 * @param $data * @param $data_gz * @param $dayDataArr * @param $gzDataArr */ public static function buildExportDataBySummary($data, $data_gz, &$dayDataArr, &$gzDataArr) { //先计算各个支付方式下的部分挂账 if(!empty($data_gz)){ foreach ($data_gz as $vGz) { //各个支付分类下对应的挂账部分 if(isset($gzDataArr[$vGz['day']][$vGz['zhifu_type']])){ $gzDataArr[$vGz['day']][$vGz['zhifu_type']] += $vGz['yingshou_price']; }else{ $gzDataArr[$vGz['day']][$vGz['zhifu_type']] = $vGz['yingshou_price']; } //各个自定义支付 $zhifuNameArr[] = $vGz['zhifu_name']; if(isset($gzDataArr[$vGz['day']][$vGz['zhifu_name']])){ $gzDataArr[$vGz['day']][$vGz['zhifu_name']] += $vGz['yingshou_price']; }else{ $gzDataArr[$vGz['day']][$vGz['zhifu_name']] = $vGz['yingshou_price']; } } } if(!empty($data)){ foreach ($data as $val) { if(isset($dayDataArr[$val['day']][$val['zhifu_type']])){ $dayDataArr[$val['day']][$val['zhifu_type']] += $val['yingshou_price']; }else{ $dayDataArr[$val['day']][$val['zhifu_type']] = $val['yingshou_price']; } //减去该种方式支付下中挂账的部分(只挂账了一部分) if(isset($gzDataArr[$val['day']][$val['zhifu_type']])){ $dayDataArr[$val['day']][$val['zhifu_type']] -= $gzDataArr[$val['day']][$val['zhifu_type']]; } //处理自定义支付 if($val['zhifu_type'] == 5){ $zhifuNameArr[] = $val['zhifu_name']; $dayDataArr[$val['day']][$val['zhifu_name']] = $val['yingshou_price']; } if(isset($dayDataArr[$val['day']]['yingshou_price'])){ $dayDataArr[$val['day']]['yingshou_price'] += $val['yingshou_price']; }else{ $dayDataArr[$val['day']]['yingshou_price'] = $val['yingshou_price']; } if(isset($dayDataArr[$val['day']]['shishou_value'])){ $dayDataArr[$val['day']]['shishou_value'] += $val['shishou_value']; }else{ $dayDataArr[$val['day']]['shishou_value'] = $val['shishou_value']; } if(isset($dayDataArr[$val['day']]['zhaoling_value'])){ $dayDataArr[$val['day']]['zhaoling_value'] += $val['zhaoling_value']; }else{ $dayDataArr[$val['day']]['zhaoling_value'] = $val['zhaoling_value']; } } } } }