389 lines
13 KiB
PHP
389 lines
13 KiB
PHP
<?php
|
||
declare (strict_types=1);
|
||
|
||
namespace app\controller;
|
||
|
||
use Firebase\JWT\JWT;
|
||
use Firebase\JWT\Key;
|
||
|
||
use think\facade\Db;
|
||
use think\Request;
|
||
|
||
class User
|
||
{
|
||
|
||
public function index()
|
||
{
|
||
|
||
$table = 'zxc_user';
|
||
|
||
$count = Db::table($table)->select()->count();
|
||
$list = Db::table($table)->paginate(20, $count)->toArray();
|
||
$i = 0;
|
||
foreach ($list['data'] as $ll) {
|
||
$list['data'][$i]['account'] = round($list['data'][$i]['account'], 2);
|
||
$i += 1;
|
||
}
|
||
return json($list);
|
||
}
|
||
|
||
|
||
public function user_all()
|
||
{
|
||
|
||
|
||
$count = Db::table('zxc_user')->select();
|
||
return json($count);
|
||
}
|
||
|
||
|
||
public function read($message = '')
|
||
{
|
||
$count = Db::table('zxc_user')->select()->count();
|
||
$list = Db::table('zxc_user')->where('phone|openid', 'like', '%' . $message . '%')->paginate(20, $count);
|
||
|
||
return json($list);
|
||
}
|
||
|
||
public function UpdateDiscount($message)
|
||
{
|
||
$time = date("Y-m-d H:i:s");
|
||
Db::table('discount')->where('id', 1)->update(['message' => $message, 'update_time' => $time]);
|
||
return json(['code' => '更新成功']);
|
||
}
|
||
|
||
public function DiscountInfo()
|
||
{
|
||
$message = Db::table('discount')->where('id', 1)->value('message');
|
||
return json(['code' => '200', 'message' => $message]);
|
||
}
|
||
|
||
|
||
public function UserEdit($openid, $username, $phone, $sex, $location_area, $address)
|
||
{
|
||
$table = 'zxc_user';
|
||
$data = ['username' => $username,
|
||
'phone' => $phone,
|
||
'sex' => $sex,
|
||
'address' => $address];
|
||
|
||
$update = Db::table($table)->where('openid', $openid)->update($data);
|
||
if ($update != 0) {
|
||
return json(['code' => 200, 'message' => '更新成功']);
|
||
} else {
|
||
return json(['code' => 1, 'message' => '没有更新']);
|
||
}
|
||
|
||
}
|
||
|
||
public function UserInfo($openid)
|
||
{
|
||
|
||
$table = 'zxc_user';
|
||
$info = Db::table($table)->where('openid', $openid)->field('username,sex,phone,address')->find();
|
||
$location_area = Db::table($table)->where('openid', $openid)->value('location_area');
|
||
if (!empty($location_area)) {
|
||
$location_area = explode('-', $location_area);
|
||
}
|
||
$info['location_area'] = $location_area;
|
||
return json(['code' => 200, 'message' => '请求成功', 'data' => $info]);
|
||
}
|
||
|
||
|
||
public function area()
|
||
{
|
||
$area = Db::table('area')->select();
|
||
return json($area);
|
||
}
|
||
|
||
public function StationPrice(Request $request)
|
||
{
|
||
$data = $request->param();
|
||
$where = [];
|
||
if (isset($data['station_number']) && !empty($data['station_number'])) {
|
||
$where['charge_station_number'] = ['=', $data['station_number']];
|
||
}
|
||
|
||
|
||
$info = Db::table('charge_station')->where($where)->where('charge_station_id', 19)->field('*')->find();
|
||
|
||
// if ($info['station_type'] == 0) {
|
||
$station_type = '快充';
|
||
// } else {
|
||
$station_type = '慢充';
|
||
// }
|
||
$ElectricityFee = str_replace('电费:', '', $info['ElectricityFee']);
|
||
$Elect = explode(',', $ElectricityFee);
|
||
for ($index = 0; $index < count($Elect); $index++) {
|
||
$kk['time_interval'] = substr($Elect[$index], 0, 11);
|
||
$kk['univalence'] = explode(':', $Elect[$index])[3];
|
||
$ss[] = $kk;
|
||
}
|
||
$ServiceFee = str_replace('服务费:', '', $info['ServiceFee']);
|
||
$Server = explode(',', $ServiceFee);
|
||
for ($index = 0; $index < count($Server); $index++) {
|
||
$ll['time_interval'] = substr($Server[$index], 0, -5);
|
||
$ll['univalence'] = substr($Server[$index], Strlen($Server[$index]) - 4);
|
||
$mm[] = $ll;
|
||
|
||
}
|
||
$info2 = Db::table('charge_station')->select();
|
||
return json(['code' => 2000, 'Station_Type' => $station_type, 'ElectricityFee' => $ss, 'ServiceFee' => $mm, 'yuan' => $info2]);
|
||
}
|
||
|
||
public function StationPriceUpdate($station_number, $time_interval, $univalence)
|
||
{
|
||
$time_interval = preg_replace("/\s| /", "", $time_interval);;
|
||
$univalence = preg_replace("/\s| /", "", $univalence);;
|
||
$time_interval = str_replace('[', '', $time_interval);
|
||
$time_interval = str_replace("'", "", $time_interval);
|
||
$time_interval = str_replace('"', '', $time_interval);
|
||
$time_interval = str_replace(']', '', $time_interval);
|
||
$univalence = str_replace('[', '', $univalence);
|
||
$univalence = str_replace(']', '', $univalence);
|
||
$univalence = str_replace("'", "", $univalence);
|
||
$univalence = str_replace('"', '', $univalence);
|
||
$time_interval = explode(",", $time_interval);
|
||
$univalence = explode(",", $univalence);
|
||
$z = array();
|
||
$ss = '';
|
||
$station_type = \app\model\ChargeStation::where('charge_station_number', $station_number)->value('station_type');
|
||
for ($i = 0; $i < count($time_interval); $i++) {
|
||
if ($station_type != 1) {
|
||
$z[$i] = $time_interval[$i] . ':' . number_format((float)($univalence[$i]), 6);
|
||
if ($i != 7) {
|
||
$ss .= $z[$i] . ',';
|
||
} else {
|
||
$ss .= $z[$i];
|
||
}
|
||
} else {
|
||
$z[$i] = $time_interval[$i] . ':' . number_format((float)$univalence[$i], 6);
|
||
$ss .= $z[$i];
|
||
}
|
||
}
|
||
$last = '电费:' . $ss;
|
||
\app\model\ChargeStation::where('charge_station_number', $station_number)->update(['ElectricityFee' => $last]);
|
||
return json(['code' => 200, 'message' => '修改成功']);
|
||
|
||
}
|
||
|
||
protected function getLen($num)
|
||
{
|
||
|
||
$pos = strrpos($num, '.');
|
||
$ext = substr($num, $pos + 1);
|
||
$len = strlen($ext);
|
||
return $len;
|
||
}
|
||
|
||
public function WxLogin()
|
||
{
|
||
$code = input('code');
|
||
$res = getWxMessage($code);
|
||
|
||
$userInfo = Db::table('zxc_user')->where('openid', $res['openid'])->find();
|
||
|
||
$time = date('Y-m-d H:i:s', time());
|
||
if (!$userInfo) {
|
||
|
||
$data = ['openid' => $res['openid'], 'createtime' => $time];
|
||
$id = Db::table('zxc_user')->insertGetId($data);
|
||
|
||
} else {
|
||
$id = $userInfo['user_id'];
|
||
}
|
||
Db::table('zxc_user')->where('user_id', $id)->update(['logintime' => $time]);
|
||
$token = signToken($id);
|
||
return json(['code' => 200, 'message' => '登录成功', 'token' => $token, 'openid' => $res['openid']]);
|
||
}
|
||
|
||
public function WxGetArea($openid)
|
||
{
|
||
$area_three = Db::table('area_three')->column('area');
|
||
$new = array_rand($area_three);
|
||
$area = $area_three[$new];
|
||
$userinfo = \app\model\User::where('openid', $openid)->value('area');
|
||
if (empty($userinfo)) {
|
||
$message = \app\model\User::where('openid', $openid)->value('area');
|
||
if (empty($message)) {
|
||
return json(['code' => 1, 'message' => '地区信息无效']);
|
||
}
|
||
$table_user = 'zxc_user';
|
||
$createtime = date('Y-m-d H:i:s', time());
|
||
$user = Db::table($table_user)->where('openid', $openid)->find();
|
||
if (empty($user)) {
|
||
$data = ['openid' => $openid, 'createtime' => $createtime, 'area' => $area];
|
||
Db::table($table_user)->save($data);
|
||
return json(['code' => 200, 'message' => '用户地区保存成功']);
|
||
}
|
||
return json(['code' => 200, 'message' => '用户地区保存成功']);
|
||
} else {
|
||
return json(['code' => 200, 'message' => '用户地区信息已存过']);
|
||
}
|
||
|
||
}
|
||
|
||
|
||
public function checkToken($token)
|
||
{
|
||
$key = 'zbcazbc';
|
||
$key = new Key($key, 'HS256');
|
||
$status = array("code" => 1);
|
||
// echo $token;
|
||
try {
|
||
JWT::$leeway = 60;//当前时间减去60,把时间留点余地
|
||
$decoded = JWT::decode($token, $key, array('HS256')); //HS256方式,这里要和签发的时候对应
|
||
$arr = (array)$decoded;
|
||
$res['code'] = 200;
|
||
$res['msg'] = 'OK';
|
||
$res['data'] = $arr['data'];
|
||
return json($res);
|
||
} catch (\Firebase\JWT\SignatureInvalidException $e) { //签名不正确
|
||
$status['msg'] = "签名不正确";
|
||
return json($status);
|
||
} catch (\Firebase\JWT\BeforeValidException $e) { // 签名在某个时间点之后才能用
|
||
$status['msg'] = "token失效";
|
||
return json($status);
|
||
} catch (\Firebase\JWT\ExpiredException $e) { // token过期
|
||
$status['msg'] = "token失效";
|
||
return json($status);
|
||
} catch (Exception $e) { //其他错误
|
||
$status['msg'] = "未知错误";
|
||
return json($status);
|
||
}
|
||
}
|
||
|
||
public function UserBalance($openid)
|
||
{
|
||
|
||
$table_user = 'zxc_user';
|
||
|
||
$info = Db::table($table_user)->where('openid', $openid)->field('account,phone')->find();
|
||
$balance = $info['account'];
|
||
$balance = sprintf("%01.2f", $balance);
|
||
$FrozenAccount = Db::table($table_user)->where('openid', $openid)->value('FrozenAccount');
|
||
$FrozenAccount = sprintf("%01.2f", $FrozenAccount);
|
||
$table = 'zxc_charge_order';
|
||
$count = Db::table($table)->where('openid', $openid)->field('order_number,start_time,end_time,revenue,status')->count();
|
||
$enterprise_accout = Db::table('enterprise_user')->where('phone', $info['phone'])->count();
|
||
return json([
|
||
'openid' => $openid,
|
||
'balance' => $balance,
|
||
'count' => $count,
|
||
'FrozenAccount' => $FrozenAccount,
|
||
'phone' => $info['phone'],
|
||
'enterprise' => $enterprise_accout
|
||
]);
|
||
}
|
||
|
||
public function getMoneyLog(){
|
||
$result = Db::table('zxc_user_money_log')->where('openid',input('openid'))->order('id desc')->select();
|
||
return json($result);
|
||
|
||
}
|
||
|
||
// 企业相关
|
||
|
||
/**
|
||
* 获取企业信息
|
||
*
|
||
*/
|
||
public function getEnterpriseInfo($phone)
|
||
{
|
||
|
||
$enterprise_user = Db::table('enterprise_user')->where('phone', $phone)->find();
|
||
if ($enterprise_user) {
|
||
$enterprise = Db::table('enterprise')->where('id', $enterprise_user['enterprise_id'])->find();
|
||
$enterprise['is_account'] = $enterprise_user['group_id'] == 1 ? false : true;
|
||
$enterprise['enterprise_user_id'] = $enterprise_user['id'];
|
||
return json($enterprise);
|
||
}
|
||
return json([]);
|
||
|
||
}
|
||
|
||
// 充值记录
|
||
public function getEnterpriseReangeLog()
|
||
{
|
||
}
|
||
|
||
protected function generate_tuikuan($length)
|
||
{
|
||
$chars = '0123456789';
|
||
$time = time();
|
||
$password = 'DZZS' . $time . 'TK';
|
||
for ($i = 0; $i < $length; $i++) {
|
||
$password .= $chars[mt_rand(0, strlen($chars) - 1)];
|
||
}
|
||
return $password;
|
||
}
|
||
|
||
|
||
}
|
||
|
||
function signToken($uid)
|
||
{
|
||
$key = 'zbcazbc';
|
||
$token = array(
|
||
"iss" => $key, //签发者 可以为空
|
||
"aud" => '', //面象的用户,可以为空
|
||
"iat" => time(), //签发时间
|
||
"nbf" => time() + 3, //在什么时候jwt开始生效 (这里表示生成100秒后才生效)
|
||
"exp" => time() + 1296000, //token 过期时间
|
||
"data" => [ //记录的userid的信息,这里是自已添加上去的,如果有其它信息,可以再添加数组的键值对
|
||
'uid' => $uid,
|
||
]
|
||
);
|
||
// print_r($token);
|
||
// $keyId = "keyId";
|
||
$jwt = JWT::encode($token, $key, "HS256"); //根据参数生成了 token
|
||
return $jwt;
|
||
}
|
||
|
||
function getCurl($url)
|
||
{
|
||
$headerArray = array("Content-type:application/json;", "Accept:application/json");
|
||
$ch = curl_init();//初始化CURL
|
||
curl_setopt($ch, CURLOPT_URL, $url);//设置访问地址
|
||
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);//HTTPS访问设置 关闭监视
|
||
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);//HTTPS访问设置 关闭监视访问地址
|
||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
||
curl_setopt($ch, CURLOPT_HTTPHEADER, $headerArray);//设置访问头部信息
|
||
$output = curl_exec($ch);//获取结果
|
||
curl_close($ch);//关闭连接
|
||
$output = json_decode($output, true);//json数据转换
|
||
return $output;
|
||
}
|
||
|
||
function getWxMessage($code)
|
||
{
|
||
//网址,appid,appsecret都封装至配置文件中,方便后期管理
|
||
|
||
$url = sprintf(config('wx.url'), config('wx.AppID'), config('wx.AppSecret'), $code);
|
||
//使用封装的CURL方法
|
||
$res = getCurl($url);
|
||
//返回结果
|
||
return $res;
|
||
}
|
||
|
||
function getDistance($lat1, $lng1, $lat2, $lng2)
|
||
{
|
||
$earthRadius = 6367000;
|
||
$lat1 = ($lat1 * pi()) / 180;
|
||
$lng1 = ($lng1 * pi()) / 180;
|
||
$lat2 = ($lat2 * pi()) / 180;
|
||
$lng2 = ($lng2 * pi()) / 180;
|
||
$calcLongitude = $lng2 - $lng1;
|
||
$calcLatitude = $lat2 - $lat1;
|
||
$stepOne = pow(sin($calcLatitude / 2), 2) + cos($lat1) * cos($lat2) * pow(sin($calcLongitude / 2), 2);
|
||
$stepTwo = 2 * asin(min(1, sqrt($stepOne)));
|
||
$calculatedDistance = $earthRadius * $stepTwo;
|
||
return round($calculatedDistance / 1000, 2);
|
||
}
|
||
|
||
|
||
|
||
|
||
|
||
|