|
|
|
|
<?php
|
|
|
|
|
/* 公共工具类 */
|
|
|
|
|
// +----------------------------------------------------------------------+
|
|
|
|
|
// | PHP version 5.3+
|
|
|
|
|
// +----------------------------------------------------------------------+
|
|
|
|
|
// | Copyright (c) 2013-2015 铭扬致远
|
|
|
|
|
// +----------------------------------------------------------------------+
|
|
|
|
|
// | Authors: Author <262877348@qq.com>
|
|
|
|
|
// | 金奎 <QQ:262877348> QQ群:【332560336】
|
|
|
|
|
// | 本群只为喜爱ThinkPHP的用户,一直研究、探讨THINKPHP5/3.23 RBAC AUTH UCenter整合而提供服务
|
|
|
|
|
// +----------------------------------------------------------------------+
|
|
|
|
|
|
|
|
|
|
namespace Ucenter\Api;
|
|
|
|
|
|
|
|
|
|
class PublicTool {
|
|
|
|
|
|
|
|
|
|
public static $mail_suffix = array('@hotmail.com',
|
|
|
|
|
'@msn.com',
|
|
|
|
|
'@yahoo.com',
|
|
|
|
|
'@gmail.com',
|
|
|
|
|
'@aim.com',
|
|
|
|
|
'@aol.com',
|
|
|
|
|
'@mail.com',
|
|
|
|
|
'@walla.com',
|
|
|
|
|
'@inbox.com',
|
|
|
|
|
'@126.com',
|
|
|
|
|
'@163.com',
|
|
|
|
|
'@sina.com',
|
|
|
|
|
'@21cn.com',
|
|
|
|
|
'@sohu.com',
|
|
|
|
|
'@yahoo.com.cn',
|
|
|
|
|
'@tom.com',
|
|
|
|
|
'@qq.com',
|
|
|
|
|
'@etang.com',
|
|
|
|
|
'@eyou.com',
|
|
|
|
|
'@56.com',
|
|
|
|
|
'@x.cn',
|
|
|
|
|
'@chinaren.com',
|
|
|
|
|
'@sogou.com',
|
|
|
|
|
'@citiz.com',
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 获取邮箱登陆URL
|
|
|
|
|
* @param type $email
|
|
|
|
|
* @return type
|
|
|
|
|
*/
|
|
|
|
|
public static function getMailLoginUrl($email) {
|
|
|
|
|
$domain = strstr($email, '@');
|
|
|
|
|
$url = "http://www.baidu.com/s?wd={$domain}+邮箱登陆&ie=utf-8";
|
|
|
|
|
if (in_array($domain, self::$mail_suffix)) {
|
|
|
|
|
$domain = 'http://' . $domain;
|
|
|
|
|
$url = str_replace("@", 'mail.', $domain);
|
|
|
|
|
}
|
|
|
|
|
return $url;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 获取随机字符串
|
|
|
|
|
* @param type $count
|
|
|
|
|
* @param type $str
|
|
|
|
|
* @return type
|
|
|
|
|
*/
|
|
|
|
|
public static function getRandomChar($count, $str = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ") {
|
|
|
|
|
$key = "";
|
|
|
|
|
$len = strlen($str) - 1;
|
|
|
|
|
for ($i = 0; $i < $count; $i++) {
|
|
|
|
|
$key .= $str{mt_rand(0, $len)}; //生成php随机数
|
|
|
|
|
}
|
|
|
|
|
return $key;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 获取16位唯一随机数字串
|
|
|
|
|
* @return type
|
|
|
|
|
*/
|
|
|
|
|
public static function getUniqueId() {
|
|
|
|
|
$mtime = microtime();
|
|
|
|
|
$key = __FUNCTION__ . time();
|
|
|
|
|
$aExistData = S($key);
|
|
|
|
|
if (empty($aExistData)) {
|
|
|
|
|
$aExistData = array();
|
|
|
|
|
}
|
|
|
|
|
preg_match('/0\.(\d{4})\d{4}\s(\d{10})/', $mtime, $match);
|
|
|
|
|
$sUniqueId = $match[2] . $match[1] . mt_rand(10, 99);
|
|
|
|
|
if (in_array($sUniqueId, $aExistData)) {
|
|
|
|
|
$sUniqueId = self::getUniqueId();
|
|
|
|
|
} else {
|
|
|
|
|
$aExistData[] = $sUniqueId;
|
|
|
|
|
S($key, $aExistData, 1);
|
|
|
|
|
}
|
|
|
|
|
return $sUniqueId;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 根据IP地址获取当前城市详情
|
|
|
|
|
* @param type $ip
|
|
|
|
|
* @return type
|
|
|
|
|
*/
|
|
|
|
|
public static function getIpCity($ip = '') {
|
|
|
|
|
if ($ip == '')
|
|
|
|
|
$ip = Net_Net_GetIp();
|
|
|
|
|
$ip_url = "http://ip.taobao.com/service/getIpInfo.php?ip=" . $ip;
|
|
|
|
|
$message = file_get_contents($ip_url);
|
|
|
|
|
$data = json_decode($message, true);
|
|
|
|
|
return $data;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 获取当前IP地址
|
|
|
|
|
* @return string
|
|
|
|
|
*/
|
|
|
|
|
public static function getIp() {
|
|
|
|
|
if (!empty($_SERVER["HTTP_CLIENT_IP"])) {
|
|
|
|
|
$cip = $_SERVER["HTTP_CLIENT_IP"];
|
|
|
|
|
} elseif (!empty($_SERVER["HTTP_X_FORWARDED_FOR"])) {
|
|
|
|
|
$cip = $_SERVER["HTTP_X_FORWARDED_FOR"];
|
|
|
|
|
} elseif (!empty($_SERVER["REMOTE_ADDR"])) {
|
|
|
|
|
$cip = $_SERVER["REMOTE_ADDR"];
|
|
|
|
|
} else {
|
|
|
|
|
$cip = "";
|
|
|
|
|
}
|
|
|
|
|
return $cip;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 根据IP地址获取当前城市
|
|
|
|
|
* @return boolean
|
|
|
|
|
*/
|
|
|
|
|
public static function getCityByIp() {
|
|
|
|
|
$ip = get_client_ip();
|
|
|
|
|
$ip = $ip == "127.0.0.1" ? "122.226.178.42" : $ip;
|
|
|
|
|
//122.226.178.42 60.194.13.0
|
|
|
|
|
$city_info = PublicTool::getIpCity($ip);
|
|
|
|
|
//未匹配ip
|
|
|
|
|
$data = array();
|
|
|
|
|
if ($city_info['data']['country'] == "未分配或者内网IP") {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
//北京市 省级市
|
|
|
|
|
$data['region'] = $city_info['data']['region'];
|
|
|
|
|
$data['city'] = $city_info['data']['city'];
|
|
|
|
|
return $data;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 删除文件
|
|
|
|
|
* @param type $filePath
|
|
|
|
|
*/
|
|
|
|
|
public static function delFile($filePath) {
|
|
|
|
|
if (trim($filePath) != "") {
|
|
|
|
|
unlink($filePath);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 删除文件夹
|
|
|
|
|
* @param type $dir
|
|
|
|
|
* @return boolean
|
|
|
|
|
*/
|
|
|
|
|
public static function deldir($dir) {
|
|
|
|
|
//先删除目录下的文件:
|
|
|
|
|
$dh = opendir($dir);
|
|
|
|
|
while ($file = readdir($dh)) {
|
|
|
|
|
if ($file != "." && $file != "..") {
|
|
|
|
|
$fullpath = $dir . "/" . $file;
|
|
|
|
|
if (!is_dir($fullpath)) {
|
|
|
|
|
unlink($fullpath);
|
|
|
|
|
} else {
|
|
|
|
|
self::deldir($fullpath);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
closedir($dh);
|
|
|
|
|
//删除当前文件夹:
|
|
|
|
|
if (rmdir($dir)) {
|
|
|
|
|
return true;
|
|
|
|
|
} else {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 创建文件夹
|
|
|
|
|
* @param type $dir
|
|
|
|
|
* @return boolean
|
|
|
|
|
*/
|
|
|
|
|
public static function mkdirs($dir) {
|
|
|
|
|
if (!is_dir($dir)) {
|
|
|
|
|
if (!self::mkdirs(dirname($dir))) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
if (!mkdir($dir, 0777)) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Vendor("PHPExcel", APP_PATH . 'Extend/Lib/PHPExcel/');
|
|
|
|
|
// Vendor("IOFactory", APP_PATH . 'Extend/Lib/PHPExcel/PHPExcel/');
|
|
|
|
|
// $objExcel = new \PHPExcel();
|
|
|
|
|
// $objWriter = \PHPExcel_IOFactory::createWriter($objExcel, 'Excel5');
|
|
|
|
|
// $objWriter->_phpExcel->setActiveSheetIndex(0);
|
|
|
|
|
// $map = $arr['map']; //array('A'=>array('key'=>'title','title'=>'标题'),...)
|
|
|
|
|
// $list = $arr['list']; //array(array(),...);
|
|
|
|
|
// foreach ($list as $k => $v) {
|
|
|
|
|
// $k++;
|
|
|
|
|
// if ($k == 1) {
|
|
|
|
|
// //init header
|
|
|
|
|
// foreach ($map as $kk => $vv) {
|
|
|
|
|
// $objWriter->_phpExcel->getActiveSheet()->setCellValue($kk . $k, $vv['title']);
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// $k++;
|
|
|
|
|
// foreach ($map as $kk => $vv) {
|
|
|
|
|
// $objWriter->_phpExcel->getActiveSheet()->setCellValue($kk . $k, $v[$vv['key']]);
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// $objWriter->save($outFileName);
|
|
|
|
|
// return $outFileName;
|
|
|
|
|
|
|
|
|
|
// Vendor("PHPExcel", APP_PATH . 'Extend/Lib/PHPExcel/');
|
|
|
|
|
// Vendor("IOFactory", APP_PATH . 'Extend/Lib/PHPExcel/PHPExcel/');
|
|
|
|
|
// $objExcel = new \PHPExcel();
|
|
|
|
|
// $objReader = \PHPExcel_IOFactory::createReader('Excel5');
|
|
|
|
|
// $objPHPExcel = $objReader->load($inputFilename);
|
|
|
|
|
// $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
|
|
|
|
|
// $objWriter->_phpExcel->setActiveSheetIndex(0);
|
|
|
|
|
// $arr = $objWriter->_phpExcel->getActiveSheet()->toArray(null, true, true, true);
|
|
|
|
|
|
|
|
|
|
// $fixTime = array(
|
|
|
|
|
// 12 * 3600, //中午时刻0
|
|
|
|
|
// 8 * 3600, //上班时刻1
|
|
|
|
|
// 17 * 3600 + 1800, //下班时刻2
|
|
|
|
|
// 60 * 15, //15分钟3
|
|
|
|
|
// 60 * 60, //迟到1小时4
|
|
|
|
|
// 21 * 3600, //加班基准时间9
|
|
|
|
|
// 1 * 60, //
|
|
|
|
|
// );
|
|
|
|
|
|
|
|
|
|
// $day_daka = array();
|
|
|
|
|
// foreach ($arr as $k => $v) {
|
|
|
|
|
// $objWriter->_phpExcel->getActiveSheet()->setCellValue('A' . $k, $v['A']);
|
|
|
|
|
// $objWriter->_phpExcel->getActiveSheet()->setCellValue('B' . $k, $v['B']);
|
|
|
|
|
// $objWriter->_phpExcel->getActiveSheet()->setCellValue('C' . $k, $v['C']);
|
|
|
|
|
// $objWriter->_phpExcel->getActiveSheet()->setCellValue('D' . $k, $v['D']);
|
|
|
|
|
// $objWriter->_phpExcel->getActiveSheet()->setCellValue('E' . $k, $v['E']);
|
|
|
|
|
// $objWriter->_phpExcel->getActiveSheet()->setCellValue('F' . $k, $v['F']);
|
|
|
|
|
// $objWriter->_phpExcel->getActiveSheet()->setCellValue('G' . $k, $v['G']);
|
|
|
|
|
// $objWriter->_phpExcel->getActiveSheet()->setCellValue('H' . $k, $v['H']);
|
|
|
|
|
// $time = $v['C'];
|
|
|
|
|
// $time = strtotime($time);
|
|
|
|
|
// if ($time <= 0) {
|
|
|
|
|
// continue;
|
|
|
|
|
// }
|
|
|
|
|
// if ($k == 1) {
|
|
|
|
|
// $objWriter->_phpExcel->getActiveSheet()->setCellValue('I' . $k, '未打卡情况');
|
|
|
|
|
// $objWriter->_phpExcel->getActiveSheet()->setCellValue('J' . $k, '上班基准时间');
|
|
|
|
|
// $objWriter->_phpExcel->getActiveSheet()->setCellValue('K' . $k, '上班迟到15分钟基准时间');
|
|
|
|
|
// $objWriter->_phpExcel->getActiveSheet()->setCellValue('L' . $k, '上班迟到60分钟基准时间');
|
|
|
|
|
// $objWriter->_phpExcel->getActiveSheet()->setCellValue('M' . $k, '下班基准时间');
|
|
|
|
|
// $objWriter->_phpExcel->getActiveSheet()->setCellValue('N' . $k, '加班基准时间');
|
|
|
|
|
// $objWriter->_phpExcel->getActiveSheet()->setCellValue('O' . $k, '基准日期');
|
|
|
|
|
// $objWriter->_phpExcel->getActiveSheet()->setCellValue('P' . $k, '迟到早退详情');
|
|
|
|
|
// } else {
|
|
|
|
|
// $day = date("Y-m-d", $time);
|
|
|
|
|
// $daytime = strtotime($day);
|
|
|
|
|
// $zfTime = $daytime + $fixTime[0]; //正午时间
|
|
|
|
|
// $sbTime = $daytime + $fixTime[1]; //上班时间
|
|
|
|
|
// $sbryTime = $daytime + $fixTime[1] + $fixTime[6]; //上班时间
|
|
|
|
|
// $xbTime = $daytime + $fixTime[2]; //下班时间
|
|
|
|
|
// $cd15Time = $daytime + $fixTime[1] + $fixTime[3]; //15
|
|
|
|
|
// $cd60Time = $daytime + $fixTime[1] + $fixTime[4]; //60
|
|
|
|
|
// $jbTime = $daytime + $fixTime[5]; //9:00
|
|
|
|
|
// $jcString = "";
|
|
|
|
|
// $overtime = 0;
|
|
|
|
|
// if ($time < $zfTime) {//上午打卡
|
|
|
|
|
// $overtime = $time - $sbTime;
|
|
|
|
|
// $day_daka[$daytime] = 1;
|
|
|
|
|
// if ($time <= $cd15Time && $time > $sbryTime) {
|
|
|
|
|
// $objWriter->_phpExcel->getActiveSheet()->setCellValue('D' . $k, 1);
|
|
|
|
|
// }
|
|
|
|
|
// if ($time <= $cd60Time && $time > $cd15Time) {
|
|
|
|
|
// $objWriter->_phpExcel->getActiveSheet()->setCellValue('E' . $k, 1);
|
|
|
|
|
// }
|
|
|
|
|
// if ($time > $cd60Time) {
|
|
|
|
|
// $objWriter->_phpExcel->getActiveSheet()->setCellValue('F' . $k, 1);
|
|
|
|
|
// }
|
|
|
|
|
// if ($overtime > 0) {
|
|
|
|
|
// $jcString = "上班迟到 %s 小时 %d 分钟 %d 秒";
|
|
|
|
|
// $jcString = sprintf($jcString, intval($overtime / 3600), intval($overtime % 3600 / 60), $overtime % 60);
|
|
|
|
|
// $objWriter->_phpExcel->getActiveSheet()->setCellValue('P' . $k, $jcString);
|
|
|
|
|
// }
|
|
|
|
|
// } else {//下午打卡
|
|
|
|
|
// $overtime = $xbTime - $time;
|
|
|
|
|
// if (empty($day_daka[$daytime])) {//上午未打卡
|
|
|
|
|
// $objWriter->_phpExcel->getActiveSheet()->setCellValue('I' . $k, '上午未打卡');
|
|
|
|
|
// }
|
|
|
|
|
// if ($time < $xbTime) {
|
|
|
|
|
// $objWriter->_phpExcel->getActiveSheet()->setCellValue('G' . $k, 1);
|
|
|
|
|
// }
|
|
|
|
|
// if ($time >= $jbTime) {
|
|
|
|
|
// $objWriter->_phpExcel->getActiveSheet()->setCellValue('H' . $k, 1);
|
|
|
|
|
// }
|
|
|
|
|
// if ($overtime > 0) {
|
|
|
|
|
// $jcString = "下班早退 %s 小时 %d 分钟 %d 秒";
|
|
|
|
|
// $jcString = sprintf($jcString, intval($overtime / 3600), intval($overtime % 3600 / 60), $overtime % 60);
|
|
|
|
|
// $objWriter->_phpExcel->getActiveSheet()->setCellValue('P' . $k, $jcString);
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// $objWriter->_phpExcel->getActiveSheet()->setCellValue('J' . $k, date("Y/m/d H:i:s", $sbryTime)); //上班基准时间
|
|
|
|
|
// $objWriter->_phpExcel->getActiveSheet()->setCellValue('K' . $k, date("Y/m/d H:i:s", $cd15Time)); //上班迟到15分钟基准时间
|
|
|
|
|
// $objWriter->_phpExcel->getActiveSheet()->setCellValue('L' . $k, date("Y/m/d H:i:s", $cd60Time)); //上班迟到60分钟基准时间
|
|
|
|
|
// $objWriter->_phpExcel->getActiveSheet()->setCellValue('M' . $k, date("Y/m/d H:i:s", $xbTime)); //下班基准时间
|
|
|
|
|
// $objWriter->_phpExcel->getActiveSheet()->setCellValue('N' . $k, date("Y/m/d H:i:s", $jbTime)); //加班基准时间
|
|
|
|
|
// $objWriter->_phpExcel->getActiveSheet()->setCellValue('O' . $k, date("Y/m/d", $daytime)); //基准日期
|
|
|
|
|
// $objWriter->_phpExcel->getActiveSheet()->setCellValue('P' . $k, $jcString); //异常打卡记录
|
|
|
|
|
// }
|
|
|
|
|
// if ($k > 2000) {
|
|
|
|
|
// break;
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// $objWriter->save($outFileName);
|
|
|
|
|
// return $outFileName;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Unix时间戳转日期
|
|
|
|
|
* echo date_to_unixtime("1900-1-31 00:00:00"); //输出-2206425952
|
|
|
|
|
echo unixtime_to_date(date_to_unixtime("1900-1-31 00:00:00")); //输出1900-01-31 00:00:00
|
|
|
|
|
* @param type $unixtime
|
|
|
|
|
* @param type $timezone
|
|
|
|
|
* @return type
|
|
|
|
|
*/
|
|
|
|
|
public static function unixtimeToDate($unixtime, $timezone = 'PRC') {
|
|
|
|
|
$datetime = new \DateTime("@$unixtime"); //DateTime类的bug,加入@可以将Unix时间戳作为参数传入
|
|
|
|
|
$datetime->setTimezone(new \DateTimeZone($timezone));
|
|
|
|
|
return $datetime->format("Y-m-d H:i:s");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 日期转Unix时间戳
|
|
|
|
|
* @param type $date
|
|
|
|
|
* @param type $timezone
|
|
|
|
|
* @return type
|
|
|
|
|
*/
|
|
|
|
|
public static function dateToUnixtime($date, $timezone = 'PRC') {
|
|
|
|
|
$datetime = new \DateTime($date, new \DateTimeZone($timezone));
|
|
|
|
|
return $datetime->format('U');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|