1121 lines
44 KiB
PHP
1121 lines
44 KiB
PHP
|
|
<?php
|
||
|
|
declare (strict_types=1);
|
||
|
|
|
||
|
|
namespace app\controller;
|
||
|
|
|
||
|
|
use app\common;
|
||
|
|
use app\model\ChargeStation as ChargeStationModel;
|
||
|
|
|
||
|
|
use think\facade\Db;
|
||
|
|
use think\Request;
|
||
|
|
|
||
|
|
class ChargeStation extends common
|
||
|
|
{
|
||
|
|
/**
|
||
|
|
* 显示资源列表
|
||
|
|
*
|
||
|
|
* @return \think\Response
|
||
|
|
*/
|
||
|
|
public function index()
|
||
|
|
{
|
||
|
|
|
||
|
|
$sql = "SELECT charge_station_id,count(charge_station_id) pile_number FROM charge_pile GROUP BY charge_station_id HAVING count(charge_station_id)>1 ORDER BY charge_station_id";
|
||
|
|
$message = Db::query($sql);
|
||
|
|
foreach ($message as $m) {
|
||
|
|
$charge_station_id = $m['charge_station_id'];
|
||
|
|
$pile_number = $m['pile_number'];
|
||
|
|
ChargeStationModel::where('charge_station_id', $charge_station_id)->update(['charge_pile_num' => $pile_number]);
|
||
|
|
}
|
||
|
|
$list = ChargeStationModel::withSearch(['charge_station_name', 'station_type', 'city', 'area', 'street', 'address', 'price'], [
|
||
|
|
'charge_station_name' => request()->param('charge_station_name'),
|
||
|
|
'station_type' => request()->param('station_type'),
|
||
|
|
'city' => request()->param('city'),
|
||
|
|
'area' => request()->param('area'),
|
||
|
|
'street' => request()->param('street'),
|
||
|
|
'address' => request()->param('address'),
|
||
|
|
'price' => request()->param('price')
|
||
|
|
])->paginate([
|
||
|
|
'list_rows' => 20,
|
||
|
|
'query' => request()->param()
|
||
|
|
]);
|
||
|
|
// return Db::getLastSql();
|
||
|
|
return json($list);
|
||
|
|
}
|
||
|
|
|
||
|
|
public function station_all()
|
||
|
|
{
|
||
|
|
$sql = "SELECT charge_station_id,count(charge_station_id) pile_number FROM charge_pile GROUP BY charge_station_id HAVING count(charge_station_id)>1 ORDER BY charge_station_id";
|
||
|
|
$message = Db::query($sql);
|
||
|
|
foreach ($message as $m) {
|
||
|
|
$charge_station_id = $m['charge_station_id'];
|
||
|
|
$pile_number = $m['pile_number'];
|
||
|
|
ChargeStationModel::where('charge_station_id', $charge_station_id)->update(['charge_pile_num' => $pile_number]);
|
||
|
|
}
|
||
|
|
$list = ChargeStationModel::select();
|
||
|
|
// return Db::getLastSql();
|
||
|
|
return json($list);
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 显示创建资源表单页.
|
||
|
|
*
|
||
|
|
* @return \think\Response
|
||
|
|
*/
|
||
|
|
public function create()
|
||
|
|
{
|
||
|
|
//
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 保存新建的资源
|
||
|
|
*
|
||
|
|
* @param \think\Request $request
|
||
|
|
* @return \think\Response
|
||
|
|
*/
|
||
|
|
public function save(Request $request)
|
||
|
|
{
|
||
|
|
$data = $request->param();
|
||
|
|
$charge_station_name = $data['charge_station_name'];
|
||
|
|
$id = ChargeStationModel::where('charge_station_name', $charge_station_name)->value('charge_station_id');
|
||
|
|
if (empty($id)) {
|
||
|
|
$message = [
|
||
|
|
'charge_station_name' => $data['charge_station_name'],
|
||
|
|
'station_type' => $data['station_type'],
|
||
|
|
'city' => $data['city'],
|
||
|
|
'area' => $data['area'],
|
||
|
|
'street' => $data['street'],
|
||
|
|
'address' => $data['address'],
|
||
|
|
'charge_pile_num' => $data['charge_pile_num'],
|
||
|
|
'charge_station_phone' => $data['charge_station_phone'],
|
||
|
|
'longitude' => $data['longitude'],
|
||
|
|
'latitude' => $data['latitude'],
|
||
|
|
'price' => $data['price']
|
||
|
|
];
|
||
|
|
$result = ChargeStationModel::create($message);
|
||
|
|
if ($result != false) {
|
||
|
|
return json(['code' => 200, 'massage' => '增加成功']);
|
||
|
|
} else {
|
||
|
|
return json(['code' => 1, 'massage' => '增加失败']);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 显示指定的资源
|
||
|
|
*
|
||
|
|
* @param int $id
|
||
|
|
* @return \think\Response
|
||
|
|
*/
|
||
|
|
public function read($id)
|
||
|
|
{
|
||
|
|
//
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 显示编辑资源表单页.
|
||
|
|
*
|
||
|
|
* @param int $id
|
||
|
|
* @return \think\Response
|
||
|
|
*/
|
||
|
|
public function edit($id)
|
||
|
|
{
|
||
|
|
//
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 保存更新的资源
|
||
|
|
*
|
||
|
|
* @param \think\Request $request
|
||
|
|
* @param int $id
|
||
|
|
* @return \think\Response
|
||
|
|
*/
|
||
|
|
public function update(Request $request, $id)
|
||
|
|
{
|
||
|
|
//
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 删除指定资源
|
||
|
|
*
|
||
|
|
* @param int $id
|
||
|
|
* @return \think\Response
|
||
|
|
*/
|
||
|
|
public function delete($id)
|
||
|
|
{
|
||
|
|
//
|
||
|
|
}
|
||
|
|
|
||
|
|
public function price_update(Request $request)
|
||
|
|
{
|
||
|
|
$data = $request->param();
|
||
|
|
$price = $data['price'];
|
||
|
|
$id = $data['charge_station_id'];
|
||
|
|
$id_message = ChargeStationModel::where('charge_station_id', $id)->find();
|
||
|
|
$time = date('Y-m-d H:i:s');
|
||
|
|
if (!empty($id_message)) {
|
||
|
|
$result = ChargeStationModel::update([
|
||
|
|
'ElectricityFee' => $price
|
||
|
|
], ['charge_station_id' => $id]);
|
||
|
|
if ($result != null) {
|
||
|
|
Db::table('charge_station')->where('charge_station_id', $id)->update(
|
||
|
|
['last_update_time' => $time]
|
||
|
|
);
|
||
|
|
return json(['code' => 200, 'massage' => '更新成功', 'update_time' => $time]);
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
return json(['code' => 1, 'massage' => '更新价格失败']);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
public function InnerChargeStation($station_number, $openid, $lat, $lng)
|
||
|
|
{
|
||
|
|
$sql = "SELECT charge_station_id,count(charge_station_id) pile_number FROM charge_pile GROUP BY charge_station_id HAVING count(charge_station_id)>1 ORDER BY charge_station_id";
|
||
|
|
$message = Db::query($sql);
|
||
|
|
foreach ($message as $m) {
|
||
|
|
$charge_station_id = $m['charge_station_id'];
|
||
|
|
$pile_number = $m['pile_number'];
|
||
|
|
ChargeStationModel::where('charge_station_id', $charge_station_id)->update(['charge_pile_num' => $pile_number]);
|
||
|
|
}
|
||
|
|
|
||
|
|
$charge_station_number = $station_number;
|
||
|
|
$station_id = Db::table('charge_station')->where('charge_station_number', $charge_station_number)->value('charge_station_id');
|
||
|
|
$station_name = Db::table('charge_station')->where('charge_station_number', $charge_station_number)->value('charge_station_name');
|
||
|
|
$free = 0;
|
||
|
|
$occupy = 0;
|
||
|
|
$fault = 0;
|
||
|
|
$i = 1;
|
||
|
|
$mess = Db::table('charge_pile')->where('charge_station_id', $station_id)->select();
|
||
|
|
foreach ($mess as $m) {
|
||
|
|
if ($m['status'] == 1) {
|
||
|
|
$free += 1;
|
||
|
|
} elseif ($m['status'] == 2) {
|
||
|
|
$occupy += 1;
|
||
|
|
} elseif ($m['status'] == 3) {
|
||
|
|
$occupy += 1;
|
||
|
|
} elseif ($m['status'] == 255) {
|
||
|
|
$fault += 1;
|
||
|
|
}
|
||
|
|
$no = Db::table('charge_pile')->where('charge_pile_id', $m['charge_pile_id'])->value('no');
|
||
|
|
if ($no == null) {
|
||
|
|
Db::table('charge_pile')->where('charge_pile_id', $m['charge_pile_id'])->update(['no' => $i]);
|
||
|
|
}
|
||
|
|
$i += 1;
|
||
|
|
}
|
||
|
|
$data_station = [
|
||
|
|
'pile_free' => $free,
|
||
|
|
'pile_occupy' => $occupy,
|
||
|
|
'pile_fault' => $fault
|
||
|
|
];
|
||
|
|
Db::table('charge_station')->where('charge_station_id', $station_id)->update($data_station);
|
||
|
|
$lat1 = $lat;
|
||
|
|
$lng1 = $lng;
|
||
|
|
$lat2 = Db::table('charge_station')->where('charge_station_id', $station_id)->value('latitude');
|
||
|
|
$lng2 = Db::table('charge_station')->where('charge_station_id', $station_id)->value('longitude');
|
||
|
|
$distance = $this->getDistance($lat1, $lng1, $lat2, $lng2);
|
||
|
|
$s = 0;
|
||
|
|
$no_mess = Db::table('charge_pile')->where('charge_station_id', $station_id)->field('no,status,ConnectorId,VoltageUpperLimits')->orderRaw('CAST(no AS SIGNED) ASC')->select()->toArray();
|
||
|
|
$xian = 0;
|
||
|
|
foreach ($no_mess as $m) {
|
||
|
|
if ($m['status'] == 1) {
|
||
|
|
$xian++;
|
||
|
|
$no_mess[$s]['code'] = '1';
|
||
|
|
$no_mess[$s]['status'] = '空闲中';
|
||
|
|
} elseif ($m['status'] == 2) {
|
||
|
|
$no_mess[$s]['code'] = '2';
|
||
|
|
$no_mess[$s]['status'] = '占用(未充电)';
|
||
|
|
} elseif ($m['status'] == 3) {
|
||
|
|
$no_mess[$s]['code'] = '3';
|
||
|
|
$no_mess[$s]['status'] = '占用(充电中)';
|
||
|
|
} elseif ($m['status'] == 255) {
|
||
|
|
$no_mess[$s]['code'] = '255';
|
||
|
|
$no_mess[$s]['status'] = '故障中';
|
||
|
|
} elseif ($m['status'] == 0) {
|
||
|
|
$no_mess[$s]['code'] = '0';
|
||
|
|
$no_mess[$s]['status'] = '离网中';
|
||
|
|
}
|
||
|
|
$s += 1;
|
||
|
|
}
|
||
|
|
$Type = Db::table('charge_station')->where('charge_station_id', $station_id)->value('station_type');
|
||
|
|
if ((int)$Type == 0) {
|
||
|
|
$Type = '快充';
|
||
|
|
} elseif ((int)$Type == 1) {
|
||
|
|
$Type = '慢充';
|
||
|
|
}
|
||
|
|
|
||
|
|
$table = 'zxc_user_collect';
|
||
|
|
$collect = Db::table($table)->where('openid', $openid)->where('charge_station_id', $station_id)->find();
|
||
|
|
if (empty($collect)) {
|
||
|
|
$is_collect = 0;
|
||
|
|
$collect_message = '收藏';
|
||
|
|
} else {
|
||
|
|
$is_collect = 1;
|
||
|
|
$collect_message = '取消收藏';
|
||
|
|
}
|
||
|
|
$info = Db::table('charge_station')->where('charge_station_id', $station_id)->field('longitude,latitude,address,ElectricityFee,ServiceFee')->find();
|
||
|
|
$longitude = $info['longitude'];
|
||
|
|
$latitude = $info['latitude'];
|
||
|
|
$address = $info['address'];
|
||
|
|
$electrovalence = $this->returnFree($info['ElectricityFee'], $info['ServiceFee']);
|
||
|
|
|
||
|
|
$info2 = [
|
||
|
|
'electrovalence' => $electrovalence,
|
||
|
|
'station_name' => $station_name,
|
||
|
|
'distance' => $distance,
|
||
|
|
'is_collect' => $is_collect,
|
||
|
|
'collect_message' => $collect_message,
|
||
|
|
'pile' => $no_mess,
|
||
|
|
'type' => $Type,
|
||
|
|
'xian' => $xian,
|
||
|
|
];
|
||
|
|
return json(array_merge($info, $info2));
|
||
|
|
}
|
||
|
|
|
||
|
|
public function charge_station_withpile(Request $request)
|
||
|
|
{
|
||
|
|
$sql = "SELECT charge_station_id,count(charge_station_id) pile_number FROM charge_pile GROUP BY charge_station_id HAVING count(charge_station_id)>1 ORDER BY charge_station_id";
|
||
|
|
$message = Db::query($sql);
|
||
|
|
foreach ($message as $m) {
|
||
|
|
$charge_station_id = $m['charge_station_id'];
|
||
|
|
$pile_number = $m['pile_number'];
|
||
|
|
ChargeStationModel::where('charge_station_id', $charge_station_id)->update(['charge_pile_num' => $pile_number]);
|
||
|
|
}
|
||
|
|
$data = $request->param();
|
||
|
|
$charge_station_number = $data['charge_station_number'];
|
||
|
|
$station_id = Db::table('charge_station')->where('charge_station_number', $charge_station_number)->value('charge_station_id');
|
||
|
|
$station_name = Db::table('charge_station')->where('charge_station_number', $charge_station_number)->value('charge_station_name');
|
||
|
|
$free = 0;
|
||
|
|
$occupy = 0;
|
||
|
|
$fault = 0;
|
||
|
|
$i = 1;
|
||
|
|
$mess = Db::table('charge_pile')->where('charge_station_id', $station_id)->select();
|
||
|
|
foreach ($mess as $m) {
|
||
|
|
if ($m['status'] == 1) {
|
||
|
|
$free += 1;
|
||
|
|
} elseif ($m['status'] == 2) {
|
||
|
|
$occupy += 1;
|
||
|
|
} elseif ($m['status'] == 3) {
|
||
|
|
$occupy += 1;
|
||
|
|
} elseif ($m['status'] == 255) {
|
||
|
|
$fault += 1;
|
||
|
|
}
|
||
|
|
$no = Db::table('charge_pile')->where('charge_pile_id', $m['charge_pile_id'])->value('no');
|
||
|
|
if ($no == null) {
|
||
|
|
Db::table('charge_pile')->where('charge_pile_id', $m['charge_pile_id'])->update(['no' => $i]);
|
||
|
|
}
|
||
|
|
$i += 1;
|
||
|
|
}
|
||
|
|
$data_station = [
|
||
|
|
'pile_free' => $free,
|
||
|
|
'pile_occupy' => $occupy,
|
||
|
|
'pile_fault' => $fault
|
||
|
|
];
|
||
|
|
Db::table('charge_station')->where('charge_station_id', $station_id)->update($data_station);
|
||
|
|
$s = 0;
|
||
|
|
$no_mess = Db::table('charge_pile')->where('charge_station_id', $station_id)->field('no,status')->select()->toArray();
|
||
|
|
foreach ($no_mess as $m) {
|
||
|
|
if ($m['status'] == 1) {
|
||
|
|
$no_mess[$s]['status'] = '空闲中';
|
||
|
|
} elseif ($m['status'] == 2) {
|
||
|
|
$no_mess[$s]['status'] = '联通中';
|
||
|
|
} elseif ($m['status'] == 3) {
|
||
|
|
$no_mess[$s]['status'] = '充电中';
|
||
|
|
} elseif ($m['status'] == 0) {
|
||
|
|
$no_mess[$s]['status'] = '离网中';
|
||
|
|
} elseif ($m['status'] == 255) {
|
||
|
|
$no_mess[$s]['status'] = '故障中';
|
||
|
|
} else {
|
||
|
|
$no_mess[$s]['status'] = '未知状态';
|
||
|
|
}
|
||
|
|
$s += 1;
|
||
|
|
}
|
||
|
|
$info = [
|
||
|
|
'charge_station_number' => $charge_station_number,
|
||
|
|
'station_name' => $station_name,
|
||
|
|
'pile' => $no_mess
|
||
|
|
];
|
||
|
|
return json($info);
|
||
|
|
}
|
||
|
|
|
||
|
|
public function getDateFromRange($startdate, $enddate)
|
||
|
|
{
|
||
|
|
|
||
|
|
$stimestamp = strtotime($startdate);
|
||
|
|
$etimestamp = strtotime($enddate);
|
||
|
|
// 计算日期段内有多少天
|
||
|
|
$days = ($etimestamp - $stimestamp) / 86400;
|
||
|
|
// 保存每天日期
|
||
|
|
$date = array();
|
||
|
|
for ($i = 0; $i < $days; $i++) {
|
||
|
|
|
||
|
|
$date[] = date('Y-m-d', $stimestamp + (86400 * $i));
|
||
|
|
}
|
||
|
|
|
||
|
|
return $date;
|
||
|
|
}
|
||
|
|
|
||
|
|
public function Order_Total(Request $request)
|
||
|
|
{
|
||
|
|
$data = $request->param();
|
||
|
|
|
||
|
|
// 基础UNION查询
|
||
|
|
// $unionSql = "(SELECT charge_station_id, order_number, order_id, TotalPower, TotalMoney,
|
||
|
|
// ElecMoney, SeviceMoney, end_time, EndTime, DetailMessage, status,
|
||
|
|
// start_time, openid, ConnectorID, charge_date
|
||
|
|
// FROM charge_order_qianlongzhiyaozhan)
|
||
|
|
// UNION ALL
|
||
|
|
// (SELECT charge_station_id, order_number, order_id, TotalPower, TotalMoney,
|
||
|
|
// ElecMoney, SeviceMoney, end_time, EndTime, DetailMessage, status,
|
||
|
|
// start_time, openid, ConnectorID, charge_date
|
||
|
|
// FROM charge_order_kechuangzhongxin)
|
||
|
|
// UNION ALL
|
||
|
|
// (SELECT charge_station_id, order_number, order_id, TotalPower, TotalMoney,
|
||
|
|
// ElecMoney, SeviceMoney, end_time, EndTime, DetailMessage, status,
|
||
|
|
// start_time, openid, ConnectorID, charge_date
|
||
|
|
// FROM charge)";
|
||
|
|
|
||
|
|
$where = [];
|
||
|
|
|
||
|
|
switch ($data['mouth']) {
|
||
|
|
case '月':
|
||
|
|
$startDate = date('Y-m-01 00:00:00', strtotime($data['value']));
|
||
|
|
$endDate = date('Y-m-t 23:59:59', strtotime($data['value']));
|
||
|
|
break;
|
||
|
|
|
||
|
|
case '季度':
|
||
|
|
$year = (int)date('Y');
|
||
|
|
$quarter = (int)$data['value'] ?? 1;
|
||
|
|
|
||
|
|
|
||
|
|
$startMonth = ($quarter - 1) * 3 + 1;
|
||
|
|
$endMonth = $quarter * 3;
|
||
|
|
|
||
|
|
$startDate = date("Y-m-01 00:00:00", mktime(0, 0, 0, $startMonth, 1, $year));
|
||
|
|
$endDate = date("Y-m-t 23:59:59", mktime(0, 0, 0, $endMonth, 1, $year));
|
||
|
|
break;
|
||
|
|
|
||
|
|
case '年':
|
||
|
|
$year = isset($data['value']) && !empty($data['value']) ? $data['value'] : date('Y');
|
||
|
|
$startDate = "$year-01-01 00:00:00";
|
||
|
|
$endDate = "$year-12-31 23:59:59";
|
||
|
|
break;
|
||
|
|
|
||
|
|
default:
|
||
|
|
$startDate = $data['start_time'] . ' 00:00:00';
|
||
|
|
$endDate = $data['end_time'] . ' 23:59:59';
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
|
||
|
|
// 获取所有充电站信息(先查询所有充电站,确保没有数据的也返回)
|
||
|
|
$allStations = Db::table('charge_station')
|
||
|
|
->column('charge_station_name', 'charge_station_id');
|
||
|
|
|
||
|
|
// 初始化所有充电站统计数据
|
||
|
|
$stationStats = [];
|
||
|
|
foreach ($allStations as $id => $name) {
|
||
|
|
$stationStats[$id] = [
|
||
|
|
'charge_station_id' => $id,
|
||
|
|
'charge_station_name' => $name,
|
||
|
|
'TotalMoney' => 0,
|
||
|
|
'TotalPower' => 0,
|
||
|
|
'order_num' => 0
|
||
|
|
];
|
||
|
|
}
|
||
|
|
|
||
|
|
// 查询并处理订单数据
|
||
|
|
// $finalSql = "SELECT * FROM ($unionSql) AS temp_table WHERE charge_date BETWEEN ? AND ?";
|
||
|
|
// $allOrders = Db::query($finalSql, [$startDate, $endDate]);
|
||
|
|
$where[] = ['charge_date', '>=', $startDate];
|
||
|
|
$where[] = ['charge_date', '<=', $endDate];
|
||
|
|
$allOrders = Db::table('zxc_charge_order')->where($where)->select();
|
||
|
|
|
||
|
|
// 更新有数据的充电站统计
|
||
|
|
foreach ($allOrders as $order) {
|
||
|
|
$stationId = $order['charge_station_id'];
|
||
|
|
if (isset($stationStats[$stationId])) {
|
||
|
|
$stationStats[$stationId]['TotalMoney'] += $order['TotalMoney'];
|
||
|
|
$stationStats[$stationId]['TotalPower'] += $order['TotalPower'];
|
||
|
|
$stationStats[$stationId]['order_num']++;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// 格式化返回结果
|
||
|
|
$result = array_values(array_map(function ($item) {
|
||
|
|
return [
|
||
|
|
'charge_station_id' => $item['charge_station_id'],
|
||
|
|
'charge_station_name' => $item['charge_station_name'],
|
||
|
|
'TotalMoney' => round($item['TotalMoney'], 2),
|
||
|
|
'TotalPower' => round($item['TotalPower'], 2),
|
||
|
|
'order_num' => $item['order_num']
|
||
|
|
];
|
||
|
|
}, $stationStats));
|
||
|
|
|
||
|
|
return $result;
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
public function FaultInfo()
|
||
|
|
{
|
||
|
|
$hasfault = Db::table('charge_pile')->whereRaw('status = 255 OR status = 0')->order('charge_pile_id desc')->count('charge_pile_id');
|
||
|
|
$faultInfo = Db::table('charge_pile,charge_station')
|
||
|
|
->whereRaw('status = 255 OR status = 0')
|
||
|
|
->where('charge_pile.charge_station_id = charge_station.charge_station_id')
|
||
|
|
->order('charge_station.charge_station_id desc')
|
||
|
|
->field('charge_station.charge_station_id,charge_station_name,address,charge_pile.no,charge_pile.charge_pile_number,charge_station.area,charge_station.street,charge_pile.status')
|
||
|
|
->select();
|
||
|
|
return json(['code' => 200, 'message' => '请求成功', 'count' => $hasfault, 'data' => $faultInfo]);
|
||
|
|
}
|
||
|
|
|
||
|
|
public function Time_Data(Request $request)
|
||
|
|
{
|
||
|
|
|
||
|
|
// 获取请求参数
|
||
|
|
$data = $request->param();
|
||
|
|
$timeType = $data['time_type'] ?: '日';
|
||
|
|
$strDay = $data['str_time'] ?? '';
|
||
|
|
$chargeStationName = $data['area'] ?? '';
|
||
|
|
|
||
|
|
|
||
|
|
// 设置当前日期
|
||
|
|
$currentDate = $strDay ?: date('Y-m-d');
|
||
|
|
|
||
|
|
// 获取充电站ID
|
||
|
|
|
||
|
|
$stationId = Db::table('charge_station')
|
||
|
|
->where('charge_station_name', $chargeStationName)
|
||
|
|
->value('charge_station_id');
|
||
|
|
|
||
|
|
|
||
|
|
// 基础UNION查询
|
||
|
|
// $unionSql = "(SELECT charge_station_id, order_number, order_id, TotalPower, TotalMoney,
|
||
|
|
// ElecMoney, SeviceMoney, end_time, EndTime, DetailMessage, status,
|
||
|
|
// start_time, openid, ConnectorID, charge_date
|
||
|
|
// FROM charge_order_qianlongzhiyaozhan)
|
||
|
|
// UNION ALL
|
||
|
|
// (SELECT charge_station_id, order_number, order_id, TotalPower, TotalMoney,
|
||
|
|
// ElecMoney, SeviceMoney, end_time, EndTime, DetailMessage, status,
|
||
|
|
// start_time, openid, ConnectorID, charge_date
|
||
|
|
// FROM charge_order_kechuangzhongxin)
|
||
|
|
// UNION ALL
|
||
|
|
// (SELECT charge_station_id, order_number, order_id, TotalPower, TotalMoney,
|
||
|
|
// ElecMoney, SeviceMoney, end_time, EndTime, DetailMessage, status,
|
||
|
|
// start_time, openid, ConnectorID, charge_date
|
||
|
|
// FROM charge)";
|
||
|
|
|
||
|
|
// 根据时间类型设置查询范围
|
||
|
|
switch ($timeType) {
|
||
|
|
case '日':
|
||
|
|
$startDate = $currentDate . ' 00:00:00';
|
||
|
|
$endDate = $currentDate . ' 23:59:59';
|
||
|
|
$where = '';
|
||
|
|
if ($stationId) {
|
||
|
|
$where .= "charge_station_id = {$stationId} AND ";
|
||
|
|
}
|
||
|
|
$where .= "start_time BETWEEN '{$startDate}' AND '{$endDate}'";
|
||
|
|
$groupBy = "DATE_FORMAT(start_time, '%H:00')";
|
||
|
|
$timeFormat = "DATE_FORMAT(start_time, '%H:00') AS time";
|
||
|
|
break;
|
||
|
|
|
||
|
|
case '周':
|
||
|
|
$monday = date('Y-m-d', strtotime('monday this week', strtotime($currentDate)));
|
||
|
|
$sunday = date('Y-m-d', strtotime('sunday this week', strtotime($currentDate)));
|
||
|
|
$startDate = $monday . ' 00:00:00';
|
||
|
|
$endDate = $sunday . ' 23:59:59';
|
||
|
|
$where = '';
|
||
|
|
if ($stationId) {
|
||
|
|
$where .= "charge_station_id = {$stationId} AND ";
|
||
|
|
}
|
||
|
|
$where .= "charge_date BETWEEN '{$startDate}' AND '{$endDate}'";
|
||
|
|
$groupBy = "DATE(charge_date)";
|
||
|
|
$timeFormat = "DATE(charge_date) AS time";
|
||
|
|
break;
|
||
|
|
|
||
|
|
case '月':
|
||
|
|
$firstDay = date('Y-m-01', strtotime($currentDate));
|
||
|
|
$lastDay = date('Y-m-t', strtotime($currentDate));
|
||
|
|
$startDate = $firstDay . ' 00:00:00';
|
||
|
|
$endDate = $lastDay . ' 23:59:59';
|
||
|
|
$where = '';
|
||
|
|
if ($stationId) {
|
||
|
|
$where .= "charge_station_id = {$stationId} AND ";
|
||
|
|
}
|
||
|
|
$where .= "charge_date BETWEEN '{$startDate}' AND '{$endDate}'";
|
||
|
|
$groupBy = "WEEK(charge_date, 1)";
|
||
|
|
$timeFormat = "CONCAT('第', WEEK(charge_date, 1) - WEEK('{$firstDay}', 1) + 1, '周') AS time";
|
||
|
|
break;
|
||
|
|
|
||
|
|
case '年':
|
||
|
|
$firstDay = date('Y-01-01', strtotime($currentDate));
|
||
|
|
$lastDay = date('Y-12-31', strtotime($currentDate));
|
||
|
|
$startDate = $firstDay . ' 00:00:00';
|
||
|
|
$endDate = $lastDay . ' 23:59:59';
|
||
|
|
$where = '';
|
||
|
|
if ($stationId) {
|
||
|
|
$where .= "charge_station_id = {$stationId} AND ";
|
||
|
|
}
|
||
|
|
$where .= "charge_date BETWEEN '{$startDate}' AND '{$endDate}'";
|
||
|
|
$groupBy = "MONTH(charge_date)";
|
||
|
|
$timeFormat = "CONCAT(MONTH(charge_date), '月') AS time";
|
||
|
|
break;
|
||
|
|
|
||
|
|
default:
|
||
|
|
return json(['error' => '不支持的查询类型'], 400);
|
||
|
|
}
|
||
|
|
|
||
|
|
// 构建完整SQL查询
|
||
|
|
// $sql = "SELECT
|
||
|
|
// {$timeFormat},
|
||
|
|
// SUM(TotalMoney) AS revenue,
|
||
|
|
// SUM(TotalPower) AS degree,
|
||
|
|
// COUNT(*) AS order_num,
|
||
|
|
// SUM(SeviceMoney) AS service_money
|
||
|
|
// FROM ({$unionSql}) AS combined_tables
|
||
|
|
// WHERE {$where}
|
||
|
|
// GROUP BY {$groupBy}
|
||
|
|
// ORDER BY time";
|
||
|
|
|
||
|
|
// 执行查询
|
||
|
|
// $result = Db::query($sql);
|
||
|
|
|
||
|
|
$result = Db::table('zxc_charge_order')->where($where)
|
||
|
|
->field("{$timeFormat},SUM(TotalMoney) AS revenue,SUM(TotalPower) AS degree,
|
||
|
|
COUNT(*) AS order_num,
|
||
|
|
SUM(SeviceMoney) AS service_money")
|
||
|
|
->order($groupBy)->select();
|
||
|
|
|
||
|
|
// 计算总量
|
||
|
|
$total = [
|
||
|
|
'revenue' => 0,
|
||
|
|
'degree' => 0,
|
||
|
|
'order_num' => 0,
|
||
|
|
'service_money' => 0
|
||
|
|
];
|
||
|
|
|
||
|
|
$perData = [];
|
||
|
|
foreach ($result as $item) {
|
||
|
|
$perData[] = [
|
||
|
|
'time' => $item['time'],
|
||
|
|
'data' => [
|
||
|
|
'revenue' => round($item['revenue'], 2),
|
||
|
|
'degree' => round($item['degree'], 2),
|
||
|
|
'order_num' => $item['order_num'],
|
||
|
|
'service_money' => round($item['service_money'], 2)
|
||
|
|
]
|
||
|
|
];
|
||
|
|
|
||
|
|
$total['revenue'] += $item['revenue'];
|
||
|
|
$total['degree'] += $item['degree'];
|
||
|
|
$total['order_num'] += $item['order_num'];
|
||
|
|
$total['service_money'] += $item['service_money'];
|
||
|
|
}
|
||
|
|
|
||
|
|
// 格式化总量数据
|
||
|
|
$total = [
|
||
|
|
'revenue' => round($total['revenue'], 2),
|
||
|
|
'degree' => round($total['degree'], 2),
|
||
|
|
'order_num' => $total['order_num'],
|
||
|
|
'sevice_money' => round($total['service_money'], 2)
|
||
|
|
];
|
||
|
|
|
||
|
|
return json([
|
||
|
|
'per' => $perData,
|
||
|
|
'total' => $total
|
||
|
|
]);
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
//待整改
|
||
|
|
public function Time_Data_Total(Request $request)
|
||
|
|
{
|
||
|
|
$data = $request->param();
|
||
|
|
$time_type = $data['time_type'] ?? '周';
|
||
|
|
$str_day = $data['str_time'] ?? date('Y-m-d', time());
|
||
|
|
$time = strtotime($str_day);
|
||
|
|
$date_time = date('Y-m-d', $time);
|
||
|
|
|
||
|
|
// 基础UNION查询
|
||
|
|
$unionSql = "(SELECT charge_station_id, order_number, order_id, TotalPower, TotalMoney,
|
||
|
|
ElecMoney, SeviceMoney, end_time, EndTime, DetailMessage, status,
|
||
|
|
start_time, openid, ConnectorID, charge_date
|
||
|
|
FROM charge_order_qianlongzhiyaozhan)
|
||
|
|
UNION ALL
|
||
|
|
(SELECT charge_station_id, order_number, order_id, TotalPower, TotalMoney,
|
||
|
|
ElecMoney, SeviceMoney, end_time, EndTime, DetailMessage, status,
|
||
|
|
start_time, openid, ConnectorID, charge_date
|
||
|
|
FROM charge_order_kechuangzhongxin)
|
||
|
|
UNION ALL
|
||
|
|
(SELECT charge_station_id, order_number, order_id, TotalPower, TotalMoney,
|
||
|
|
ElecMoney, SeviceMoney, end_time, EndTime, DetailMessage, status,
|
||
|
|
start_time, openid, ConnectorID, charge_date
|
||
|
|
FROM charge)";
|
||
|
|
|
||
|
|
// 初始化结果数组
|
||
|
|
$mess = [
|
||
|
|
'per' => [],
|
||
|
|
'total' => [
|
||
|
|
'revenue' => 0,
|
||
|
|
'degree' => 0,
|
||
|
|
'order_num' => 0,
|
||
|
|
'service_money' => 0
|
||
|
|
]
|
||
|
|
];
|
||
|
|
|
||
|
|
// 根据时间类型处理数据
|
||
|
|
switch ($time_type) {
|
||
|
|
case '日':
|
||
|
|
$start_time = date('Y-m-d 00:00:00', $time);
|
||
|
|
$date_ranges = $this->getDayDate($start_time);
|
||
|
|
$date_start = $date_ranges['start_time'];
|
||
|
|
$date_end = $date_ranges['end_time'];
|
||
|
|
|
||
|
|
foreach ($date_start as $i => $d_start) {
|
||
|
|
$interval = substr($date_start[$i], 11) . '~' . substr($date_end[$i], 11);
|
||
|
|
$this->processTimeRange($mess, $unionSql, $date_start[$i], $date_end[$i], $interval);
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
|
||
|
|
case '周':
|
||
|
|
$end_time = date("Y-m-d 23:59:59", strtotime("$date_time Saturday"));
|
||
|
|
$start_time = date("Y-m-d 00:00:00", strtotime("$end_time - 6 days"));
|
||
|
|
$dates = $this->getDateFromRange($start_time, $end_time);
|
||
|
|
|
||
|
|
foreach ($dates as $d) {
|
||
|
|
$this->processTimeRange($mess, $unionSql, "$d 00:00:00", "$d 23:59:59", $d);
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
|
||
|
|
case '月':
|
||
|
|
$start_time = date("Y-m-d", strtotime(date('Y-m-01', $time)));
|
||
|
|
$dates = $this->getMonthDate($start_time);
|
||
|
|
$i = 1;
|
||
|
|
|
||
|
|
foreach ($dates as $d) {
|
||
|
|
$week_label = '第' . $i . '周';
|
||
|
|
$this->processTimeRange($mess, $unionSql, "$d 00:00:00", date('Y-m-d 23:59:59', strtotime("$d +6 days")), $week_label);
|
||
|
|
$i++;
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
|
||
|
|
case '季':
|
||
|
|
$season = ceil(date('m', $time) / 3);
|
||
|
|
$start_month = $season * 3 - 2;
|
||
|
|
$start_time = date("Y-m-d H:i:s", strtotime(date("Y-{$start_month}-01", $time)));
|
||
|
|
$end_time = date("Y-m-d 23:59:59", strtotime("$start_time +3 month -1 day"));
|
||
|
|
$dates = $this->getSeasonDate($start_time);
|
||
|
|
$i = date("m", strtotime($start_time));
|
||
|
|
|
||
|
|
foreach ($dates as $d) {
|
||
|
|
$month_label = $i . '月';
|
||
|
|
$this->processTimeRange($mess, $unionSql, "$d 00:00:00", date('Y-m-d 23:59:59', strtotime("$d +1 month -1 day")), $month_label);
|
||
|
|
$i++;
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
|
||
|
|
case '年':
|
||
|
|
$start_time = date('Y-01-01 00:00:00', $time);
|
||
|
|
$dates = $this->getYearDate($start_time);
|
||
|
|
$i = 1;
|
||
|
|
|
||
|
|
foreach ($dates as $d) {
|
||
|
|
$month_label = $i . '月';
|
||
|
|
$this->processTimeRange($mess, $unionSql, "$d-01 00:00:00", "$d-" . date('t', strtotime($d)) . " 23:59:59", $month_label);
|
||
|
|
$i++;
|
||
|
|
}
|
||
|
|
break;
|
||
|
|
}
|
||
|
|
|
||
|
|
// 格式化金额数据
|
||
|
|
$mess['total']['revenue'] = round($mess['total']['revenue'], 2);
|
||
|
|
$mess['total']['degree'] = round($mess['total']['degree'], 2);
|
||
|
|
$mess['total']['service_money'] = round($mess['total']['service_money'], 2);
|
||
|
|
|
||
|
|
return json($mess);
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 处理时间范围数据
|
||
|
|
*/
|
||
|
|
private function processTimeRange(&$mess, $unionSql, $start_time, $end_time, $label)
|
||
|
|
{
|
||
|
|
|
||
|
|
// 查询该时间范围内的数据
|
||
|
|
$sql = "SELECT * FROM ($unionSql) AS temp_table
|
||
|
|
WHERE charge_date BETWEEN ? AND ?";
|
||
|
|
$orders = Db::query($sql, [$start_time, $end_time]);
|
||
|
|
|
||
|
|
// 计算统计数据
|
||
|
|
$revenue = 0;
|
||
|
|
$degree = 0;
|
||
|
|
$order_num = count($orders);
|
||
|
|
$service = 0;
|
||
|
|
|
||
|
|
foreach ($orders as $order) {
|
||
|
|
$revenue += $order['TotalMoney'];
|
||
|
|
$degree += $order['TotalPower'];
|
||
|
|
|
||
|
|
// 服务费计算逻辑
|
||
|
|
if (strtotime($start_time) < strtotime('2023-02-03 00:00:00')) {
|
||
|
|
$service += round($order['TotalPower'] * 0.2, 2);
|
||
|
|
} else {
|
||
|
|
$service += $order['SeviceMoney'];
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// 更新结果数组
|
||
|
|
$mess['per'][] = [
|
||
|
|
'time' => $label,
|
||
|
|
'data' => [
|
||
|
|
'revenue' => round($revenue, 2),
|
||
|
|
'degree' => round($degree, 2),
|
||
|
|
'order_num' => $order_num,
|
||
|
|
'service_money' => round($service, 2)
|
||
|
|
]
|
||
|
|
];
|
||
|
|
|
||
|
|
$mess['total']['revenue'] += $revenue;
|
||
|
|
$mess['total']['degree'] += $degree;
|
||
|
|
$mess['total']['order_num'] += $order_num;
|
||
|
|
$mess['total']['service_money'] += $service;
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
public function Recharge_Total(Request $request)
|
||
|
|
{
|
||
|
|
$data = $request->param();
|
||
|
|
$time_type = $data['time_type'];
|
||
|
|
$str_day = $data['str_time'];
|
||
|
|
$time = strtotime($str_day);
|
||
|
|
$date_time = date('Y-m-d', $time);
|
||
|
|
$area = Db::table('area')->column('area');
|
||
|
|
|
||
|
|
if ($time_type == '周') {
|
||
|
|
$mess = [];
|
||
|
|
$end_time = date("Y-m-d 23:59:59", strtotime("$date_time Saturday"));//结束时间(2020-04-19 23:59:59)
|
||
|
|
$start_time = date("Y-m-d 00:00:00", strtotime("$end_time - 6 days"));//开始时间(2020-04-13 00:00:00
|
||
|
|
$revenue_total = 0;
|
||
|
|
$order_num_total = 0;
|
||
|
|
$date = $this->getDateFromRange($start_time, $end_time);
|
||
|
|
|
||
|
|
foreach ($date as $d) {
|
||
|
|
|
||
|
|
$table = 'zxc_charge_order';
|
||
|
|
$table_recharge = 'zxc_recharge';
|
||
|
|
$result = Db::table($table)->select();
|
||
|
|
if (empty($result)) {
|
||
|
|
continue;
|
||
|
|
} else {
|
||
|
|
$revenue = Db::table($table_recharge)->whereDay('success_time', $d)->sum('total');
|
||
|
|
$order_num = Db::table($table_recharge)->whereDay('success_time', $d)->count();
|
||
|
|
}
|
||
|
|
|
||
|
|
$mess['per'][] = ['time' => $d, 'data' => ['revenue' => round($revenue / 100, 2), 'order_num' => $order_num]];
|
||
|
|
$revenue_total += $revenue;
|
||
|
|
$order_num_total += $order_num;
|
||
|
|
|
||
|
|
}
|
||
|
|
$mess['total'] = ['revenue' => round($revenue_total / 100, 2), 'order_num' => $order_num_total];
|
||
|
|
return json($mess);
|
||
|
|
} elseif ($time_type == '月') {
|
||
|
|
$mess = [];
|
||
|
|
$start_time = date("Y-m-d", strtotime(date('Y-m-01', $time)));//开始时间(2020-04-01 00:00:00)
|
||
|
|
$date = $this->getMonthDate($start_time);
|
||
|
|
$i = 1;
|
||
|
|
$revenue_total = 0;
|
||
|
|
$order_num_total = 0;
|
||
|
|
foreach ($date as $d) {
|
||
|
|
$z = '第' . $i . '周';
|
||
|
|
$d = date('Y-m-d', strtotime($d));
|
||
|
|
$revenue = 0;
|
||
|
|
$order_num = 0;
|
||
|
|
foreach ($area as $a) {
|
||
|
|
$table = 'zxc_charge_order';
|
||
|
|
$table_recharge = 'zxc_recharge';
|
||
|
|
$result = Db::table($table)->select();
|
||
|
|
if (empty($result)) {
|
||
|
|
continue;
|
||
|
|
} else {
|
||
|
|
$order = Db::table($table);
|
||
|
|
$recharge = Db::table($table_recharge);
|
||
|
|
$revenue = $recharge->whereWeek('success_time', $d)->sum('total');
|
||
|
|
$order_num = $recharge->whereWeek('success_time', $d)->count();
|
||
|
|
|
||
|
|
}
|
||
|
|
}
|
||
|
|
$mess['per'][] = ['time' => $z, 'data' => ['revenue' => round($revenue / 100, 2), 'order_num' => $order_num]];
|
||
|
|
$revenue_total += $revenue;
|
||
|
|
$order_num_total += $order_num;
|
||
|
|
$i += 1;
|
||
|
|
}
|
||
|
|
$mess['total'] = ['revenue' => round($revenue_total / 100, 2), 'order_num' => $order_num_total];
|
||
|
|
return json($mess);
|
||
|
|
} elseif ($time_type == '季') {
|
||
|
|
$season = intval(ceil(date('m', $time) / 3));
|
||
|
|
if ($season == 4) {
|
||
|
|
$start_time = date("Y-m-d H:i:s", strtotime(date('Y-' . ($season * 3 - 2) . '-01', $time)));//开始时间(2020-04-01 00:00:00)
|
||
|
|
$end_time = date("Y-m-d 23:59:59", strtotime(date('Y-m-d', strtotime("$start_time +3 month -1 day"))));//开始时间(2020-04-01 00:00:00)
|
||
|
|
} else {
|
||
|
|
$start_time = date("Y-m-d H:i:s", strtotime(date('Y-0' . ($season * 3 - 2) . '-01', $time)));//开始时间(2020-04-01 00:00:00)
|
||
|
|
$end_time = date("Y-m-d 23:59:59", strtotime(date('Y-m-d', strtotime("$start_time +3 month -1 day"))));//开始时间(2020-04-01 00:00:00)
|
||
|
|
}
|
||
|
|
$i = date("m", strtotime(date('Y-' . ($season * 3 - 2) . '-01', $time)));
|
||
|
|
if ((int)substr($i, 0, 1) == 0) {
|
||
|
|
$i = substr($i, -1);
|
||
|
|
}
|
||
|
|
$date = $this->getSeasonDate($start_time);
|
||
|
|
$mess = [];
|
||
|
|
$revenue_total = 0;
|
||
|
|
$order_num_total = 0;
|
||
|
|
foreach ($date as $d) {
|
||
|
|
$z = $i . '月';
|
||
|
|
$d = date('Y-m-d', strtotime($d));
|
||
|
|
$revenue = 0;
|
||
|
|
$order_num = 0;
|
||
|
|
foreach ($area as $a) {
|
||
|
|
$table = 'zxc_charge_order';
|
||
|
|
$table_recharge = 'zxc_recharge';
|
||
|
|
$result = Db::table($table)->select();
|
||
|
|
if (empty($result)) {
|
||
|
|
continue;
|
||
|
|
} else {
|
||
|
|
$recharge = Db::table($table_recharge);
|
||
|
|
$revenue = $recharge->whereMonth('success_time', $d)->sum('total');
|
||
|
|
$order_num = $recharge->whereMonth('success_time', $d)->count();
|
||
|
|
|
||
|
|
}
|
||
|
|
}
|
||
|
|
$mess['per'][] = ['time' => $z, 'data' => ['revenue' => round($revenue / 100, 2), 'order_num' => $order_num]];
|
||
|
|
$revenue_total += $revenue;
|
||
|
|
$order_num_total += $order_num;
|
||
|
|
$i += 1;
|
||
|
|
}
|
||
|
|
$mess['total'] = ['revenue' => round($revenue_total / 100, 2), 'order_num' => $order_num_total];
|
||
|
|
return json($mess);
|
||
|
|
} elseif ($time_type == '年') {
|
||
|
|
$start_time = date('Y-01-01 00:00:00', $time);//开始时间
|
||
|
|
$date = $this->getYearDate($start_time);
|
||
|
|
|
||
|
|
$mess = [];
|
||
|
|
$revenue_total = 0;
|
||
|
|
$order_num_total = 0;
|
||
|
|
$i = 1;
|
||
|
|
|
||
|
|
foreach ($date as $d) {
|
||
|
|
$z = $i . '月';
|
||
|
|
$d = date('Y-m', strtotime($d));
|
||
|
|
$revenue = 0;
|
||
|
|
$order_num = 0;
|
||
|
|
|
||
|
|
foreach ($area as $a) {
|
||
|
|
$table = 'zxc_charge_order';
|
||
|
|
$table_recharge = 'zxc_recharge';
|
||
|
|
$result = Db::table($table)->select();
|
||
|
|
if (empty($result)) {
|
||
|
|
continue;
|
||
|
|
} else {
|
||
|
|
$recharge = Db::table($table_recharge);
|
||
|
|
$revenue = $recharge->whereMonth('success_time', $d)->sum('total');
|
||
|
|
$order_num = $recharge->whereMonth('success_time', $d)->count();
|
||
|
|
|
||
|
|
}
|
||
|
|
}
|
||
|
|
$mess['per'][] = ['time' => $z, 'data' => ['revenue' => round($revenue / 100, 2), 'order_num' => $order_num]];
|
||
|
|
$revenue_total += $revenue;
|
||
|
|
$order_num_total += $order_num;
|
||
|
|
$i += 1;
|
||
|
|
}
|
||
|
|
$mess['total'] = ['revenue' => round($revenue_total / 100, 2), 'order_num' => $order_num_total];
|
||
|
|
return json($mess);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
public function The_Last_Five($lat, $lng, $openid)
|
||
|
|
{
|
||
|
|
|
||
|
|
|
||
|
|
//更新所有站的充电桩数量统计
|
||
|
|
$sql = "SELECT charge_station_id,count(charge_station_id) pile_number FROM charge_pile GROUP BY charge_station_id HAVING count(charge_station_id)>1 ORDER BY charge_station_id";
|
||
|
|
$message = Db::query($sql);
|
||
|
|
foreach ($message as $m) {
|
||
|
|
$charge_station_id = $m['charge_station_id'];
|
||
|
|
$pile_number = $m['pile_number'];
|
||
|
|
ChargeStationModel::where('charge_station_id', $charge_station_id)->update(['charge_pile_num' => $pile_number]);
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
//获取附近充电站并按距离排序
|
||
|
|
$lat1 = $lat;
|
||
|
|
$lng1 = $lng;
|
||
|
|
$list = Db::table('charge_station')->select();
|
||
|
|
$mess = array();
|
||
|
|
foreach ($list as $l) {
|
||
|
|
$distance = $this->getDistance($lat1, $lng1, $l['latitude'], $l['longitude']);
|
||
|
|
$mess[$l['charge_station_id']] = $distance;
|
||
|
|
}
|
||
|
|
asort($mess);
|
||
|
|
|
||
|
|
//站点信息
|
||
|
|
$ss = array();
|
||
|
|
$a = 0;
|
||
|
|
foreach ($mess as $key => $value) {
|
||
|
|
|
||
|
|
$info = Db::table('charge_station')->where('charge_station_id', $key)->find();
|
||
|
|
|
||
|
|
|
||
|
|
$mess = Db::table('charge_pile')->where('charge_station_id', $key)->select();
|
||
|
|
$free = 0;
|
||
|
|
$occupy = 0;
|
||
|
|
$fault = 0;
|
||
|
|
foreach ($mess as $m) {
|
||
|
|
if ($m['status'] == 1) {
|
||
|
|
$free += 1;
|
||
|
|
} elseif ($m['status'] == 2) {
|
||
|
|
$occupy += 1;
|
||
|
|
} elseif ($m['status'] == 3) {
|
||
|
|
$occupy += 1;
|
||
|
|
} elseif ($m['status'] == 255) {
|
||
|
|
$fault += 1;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
Db::table('charge_station')->where('charge_station_id', $key)->update([
|
||
|
|
'pile_free' => $free,
|
||
|
|
'pile_occupy' => $occupy,
|
||
|
|
'pile_fault' => $fault
|
||
|
|
]);
|
||
|
|
|
||
|
|
|
||
|
|
$kk['electrovalence'] = $this->returnFree($info['ElectricityFee'], $info['ServiceFee']);
|
||
|
|
$kk['ChargeStationNumber'] = $info['charge_station_number'];
|
||
|
|
$kk['ChargeStationName'] = $info['charge_station_name'];
|
||
|
|
$kk['Free'] = $free;
|
||
|
|
$kk['Occupy'] = $occupy;
|
||
|
|
$kk['Fault'] = $fault;
|
||
|
|
$kk['Distance'] = $value;
|
||
|
|
$kk['is_show'] = ($a == 0 && $value * 1000 < 100) ? '当前站点' : '';
|
||
|
|
$kk['type'] = $info['station_type'] == 0 ? '快充' : '慢充';
|
||
|
|
$kk['longitude'] = $info['longitude'];
|
||
|
|
$kk['latitude'] = $info['latitude'];
|
||
|
|
$kk['address'] = $info['address'];
|
||
|
|
|
||
|
|
$ss[] = $kk;
|
||
|
|
$a++;
|
||
|
|
}
|
||
|
|
return json($ss);
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
public function SearchStation($message, $lat, $lng, $openid)
|
||
|
|
{
|
||
|
|
|
||
|
|
$table = 'zxc_user_collect';
|
||
|
|
$lat1 = $lat;
|
||
|
|
$lng1 = $lng;
|
||
|
|
$list = Db::table('charge_station')->where('charge_station_number|charge_station_name', 'like', '%' . $message . '%')->select();
|
||
|
|
$mess = array();
|
||
|
|
foreach ($list as $l) {
|
||
|
|
$charge_station_id = $l['charge_station_id'];
|
||
|
|
$lat2 = $l['latitude'];
|
||
|
|
$lng2 = $l['longitude'];
|
||
|
|
$distance = $this->getDistance($lat1, $lng1, $lat2, $lng2);
|
||
|
|
$mess[$charge_station_id] = $distance;
|
||
|
|
}
|
||
|
|
asort($mess);
|
||
|
|
$l = 1;
|
||
|
|
$ss = array();
|
||
|
|
foreach ($mess as $key => $value) {
|
||
|
|
$distance = $value;
|
||
|
|
$sql = "SELECT charge_station_id,count(charge_station_id) pile_number FROM charge_pile GROUP BY charge_station_id HAVING count(charge_station_id)>1 ORDER BY charge_station_id";
|
||
|
|
$message = Db::query($sql);
|
||
|
|
foreach ($message as $m) {
|
||
|
|
$charge_station_id = $m['charge_station_id'];
|
||
|
|
$pile_number = $m['pile_number'];
|
||
|
|
ChargeStationModel::where('charge_station_id', $charge_station_id)->update(['charge_pile_num' => $pile_number]);
|
||
|
|
}
|
||
|
|
$station_id = $key;
|
||
|
|
$station_name = Db::table('charge_station')->where('charge_station_id', $station_id)->value('charge_station_name');
|
||
|
|
$station_number = Db::table('charge_station')->where('charge_station_id', $station_id)->value('charge_station_number');
|
||
|
|
$Type = Db::table('charge_station')->where('charge_station_id', $station_id)->value('station_type');
|
||
|
|
if ((int)$Type == 0) {
|
||
|
|
$Type = '快充';
|
||
|
|
} elseif ((int)$Type == 1) {
|
||
|
|
$Type = '慢充';
|
||
|
|
}
|
||
|
|
$free = 0;
|
||
|
|
$occupy = 0;
|
||
|
|
$fault = 0;
|
||
|
|
$i = 1;
|
||
|
|
$mess = Db::table('charge_pile')->where('charge_station_id', $station_id)->select();
|
||
|
|
foreach ($mess as $m) {
|
||
|
|
if ($m['status'] == 1) {
|
||
|
|
$free += 1;
|
||
|
|
} elseif ($m['status'] == 2) {
|
||
|
|
$occupy += 1;
|
||
|
|
} elseif ($m['status'] == 3) {
|
||
|
|
$occupy += 1;
|
||
|
|
} elseif ($m['status'] == 255) {
|
||
|
|
$fault += 1;
|
||
|
|
}
|
||
|
|
$no = Db::table('charge_pile')->where('charge_pile_id', $m['charge_pile_id'])->value('no');
|
||
|
|
if ($no == null) {
|
||
|
|
Db::table('charge_pile')->where('charge_pile_id', $m['charge_pile_id'])->update(['no' => $i]);
|
||
|
|
}
|
||
|
|
$i += 1;
|
||
|
|
}
|
||
|
|
$data_station = [
|
||
|
|
'pile_free' => $free,
|
||
|
|
'pile_occupy' => $occupy,
|
||
|
|
'pile_fault' => $fault
|
||
|
|
];
|
||
|
|
Db::table('charge_station')->where('charge_station_id', $station_id)->update($data_station);
|
||
|
|
|
||
|
|
$collect = Db::table($table)->where('openid', $openid)->where('charge_station_id', $station_id)->find();
|
||
|
|
if (empty($collect)) {
|
||
|
|
$is_collect = 0;
|
||
|
|
$collect_message = '收藏';
|
||
|
|
} else {
|
||
|
|
$is_collect = 1;
|
||
|
|
$collect_message = '取消收藏';
|
||
|
|
}
|
||
|
|
$info = Db::table('charge_station')->where('charge_station_id', $station_id)->field('longitude,latitude,address,ElectricityFee,ServiceFee')->find();
|
||
|
|
$longitude = $info['longitude'];
|
||
|
|
$latitude = $info['latitude'];
|
||
|
|
$address = $info['address'];
|
||
|
|
$kk['ChargeStationNumber'] = $station_number;
|
||
|
|
$kk['ChargeStationName'] = $station_name;
|
||
|
|
$kk['Free'] = $free;
|
||
|
|
$kk['Occupy'] = $occupy;
|
||
|
|
$kk['Fault'] = $fault;
|
||
|
|
$kk['Distance'] = $distance;
|
||
|
|
$kk['is_collect'] = $is_collect;
|
||
|
|
$kk['type'] = $Type;
|
||
|
|
$kk['message'] = $collect_message;
|
||
|
|
$kk['longitude'] = $longitude;
|
||
|
|
$kk['latitude'] = $latitude;
|
||
|
|
$kk['address'] = $address;
|
||
|
|
|
||
|
|
$ss[] = $kk;
|
||
|
|
}
|
||
|
|
return json($ss);
|
||
|
|
}
|
||
|
|
|
||
|
|
public function GetDiscounts($openid)
|
||
|
|
{
|
||
|
|
$discounts = Db::table('discount')->where('id', 1)->value('message');
|
||
|
|
return json(['code' => 200, 'message' => $discounts]);
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
public function getConnectorIDCharge(){
|
||
|
|
$params = input();
|
||
|
|
if($params['ConnectorID']){
|
||
|
|
$info = Db::table('charge_pile')->where('ConnectorID',$params['ConnectorID'])->find();
|
||
|
|
$info['parent'] = Db::table('charge_station')->where('charge_station_id',$info['charge_station_id'])->value('charge_station_name');
|
||
|
|
return json($info);
|
||
|
|
}
|
||
|
|
return json([]);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
|