528 lines
22 KiB
PHP
528 lines
22 KiB
PHP
|
|
<?php
|
||
|
|
|
||
|
|
namespace app\controller;
|
||
|
|
|
||
|
|
use app\model\EnterpriseGroup;
|
||
|
|
use app\model\EnterpriseUser;
|
||
|
|
use app\model\ServiceFee;
|
||
|
|
use think\facade\Db;
|
||
|
|
|
||
|
|
class UserGroup
|
||
|
|
{
|
||
|
|
public function UserList($type, $group_id = '')
|
||
|
|
{
|
||
|
|
|
||
|
|
$data = input();
|
||
|
|
|
||
|
|
$page = $data['page'] ?? 1;
|
||
|
|
$pageSize = $data['pageSize'] ?? 10;
|
||
|
|
$list = Db::table('zxc_user')->paginate([
|
||
|
|
'list_rows' => 20,
|
||
|
|
'query' => request()->param()
|
||
|
|
]); // 获取全部数据
|
||
|
|
|
||
|
|
return json($list);
|
||
|
|
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
public function EnterpriseGroupAdd($group_name, $group_msg)
|
||
|
|
{
|
||
|
|
$add = (new \app\model\EnterpriseGroup)->save(['group_name' => $group_name, 'group_msg' => $group_msg]);
|
||
|
|
if ($add == 1) {
|
||
|
|
$m = (new \app\model\EnterpriseGroup)->where('group_name', $group_name)->find();
|
||
|
|
Db::table('service_fee')->save(
|
||
|
|
['type' => 3, 'group_id' => $m['id'], 'service_fee' => '服务费:00:00~24:00:0.40', 'station_type' => 0]
|
||
|
|
);
|
||
|
|
Db::table('service_fee')->save(
|
||
|
|
['type' => 3, 'group_id' => $m['id'], 'service_fee' => '服务费:00:00~24:00:0.40', 'station_type' => 1]
|
||
|
|
);
|
||
|
|
return json(['code' => 200, 'msg' => '新增成功', 'data' => $m]);
|
||
|
|
} else {
|
||
|
|
return json(['code' => 404, 'msg' => '新增失败']);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
public function EnterpriseAdd($phone, $group_id)
|
||
|
|
{
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
public function NormalSearch($phone)
|
||
|
|
{
|
||
|
|
if (!empty($phone)) {
|
||
|
|
|
||
|
|
$list = Db::table('zxc_user')->where('phone', $phone)->where('type', 1)->find();
|
||
|
|
|
||
|
|
$array[] = $list;
|
||
|
|
return json(['code' => 200, 'msg' => '请求成功', 'data' => $array]);
|
||
|
|
} else {
|
||
|
|
return json(['code' => 404, 'msg' => '没有数据']);
|
||
|
|
}
|
||
|
|
return json(['code' => 404, 'msg' => '没有数据']);
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
public function NormalToEnterprise($phone, $group_id)
|
||
|
|
{
|
||
|
|
|
||
|
|
$ll = Db::table('zxc_user')->where('phone', $phone)->find();
|
||
|
|
|
||
|
|
$list = Db::table('zxc_user')->where('phone', $phone)->save(['type' => 3, 'group_id' => $group_id]);
|
||
|
|
if ($list == 1) {
|
||
|
|
$data = Db::table('zxc_user')->where('phone', $phone)->find();
|
||
|
|
$check = EnterpriseUser::where('phone', $phone)->find();
|
||
|
|
if (empty($check)) {
|
||
|
|
(new \app\model\EnterpriseUser)->save(['phone' => $phone, 'group_id' => $group_id, 'openid' => $ll['openid']]);
|
||
|
|
} else {
|
||
|
|
(new \app\model\EnterpriseUser)->where('phone', $phone)->save(['phone' => $phone, 'group_id' => $group_id, 'openid' => $ll['openid']]);
|
||
|
|
}
|
||
|
|
return json(['code' => 200, 'msg' => '添加成功', 'data' => $data]);
|
||
|
|
}
|
||
|
|
return json(['code' => 404, 'msg' => '添加失败']);
|
||
|
|
}
|
||
|
|
|
||
|
|
public function GetGroup()
|
||
|
|
{
|
||
|
|
$group = EnterpriseGroup::select();
|
||
|
|
return json($group);
|
||
|
|
}
|
||
|
|
|
||
|
|
public function DeleteEnterpriseUser($openid)
|
||
|
|
{
|
||
|
|
$table = 'zxc_user';
|
||
|
|
$msg = Db::table($table)->where('openid', $openid)->find();
|
||
|
|
if (!empty($msg)) {
|
||
|
|
$phone = Db::table($table)->where('openid', $openid)->value('phone');
|
||
|
|
$destroy = Db::table($table)->where('openid', $openid)->save(['type' => 1, 'group_id' => '']);
|
||
|
|
$EnterptiseUserDelete = EnterpriseUser::where('phone', $phone)->delete();
|
||
|
|
if ($destroy == 1 && $EnterptiseUserDelete == 1) {
|
||
|
|
return json(['code' => 200, 'msg' => '移除成功']);
|
||
|
|
} else {
|
||
|
|
return json(['code' => 404, 'msg' => '移除失败']);
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
return json(['code' => 404, 'msg' => '不存在该用户']);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
public function DeleteEnterpriseGroup($group_id)
|
||
|
|
{
|
||
|
|
$user = EnterpriseUser::where('group_id', $group_id)->select();
|
||
|
|
foreach ($user as $u) {
|
||
|
|
$this->DeleteEnterpriseUser($u['openid']);
|
||
|
|
}
|
||
|
|
$EnterptiseGroupDelete = EnterpriseGroup::where('id', $group_id)->delete();
|
||
|
|
$ServerFeeDelete = ServiceFee::where('group_id', $group_id)->delete();
|
||
|
|
if ($EnterptiseGroupDelete > 0 && $ServerFeeDelete > 0) {
|
||
|
|
return json(['code' => 200, 'msg' => '删除成功']);
|
||
|
|
} else {
|
||
|
|
return json(['code' => 404, 'msg' => '删除失败']);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
public function PhoneSearch($phone)
|
||
|
|
{
|
||
|
|
$message = EnterpriseUser::where('phone', 'like', '%' . $phone . '%')->select();
|
||
|
|
$i = 0;
|
||
|
|
foreach ($message as $m) {
|
||
|
|
$message[$i]['group_name'] = EnterpriseGroup::where('id', $m['group_id'])->value('group_name');
|
||
|
|
$table = 'zxc_user';
|
||
|
|
$account = Db::table($table)->where('openid', $m['openid'])->value('account');
|
||
|
|
$message[$i]['account'] = $account;
|
||
|
|
$i += 1;
|
||
|
|
}
|
||
|
|
return json(['data' => $message]);
|
||
|
|
}
|
||
|
|
|
||
|
|
public function EnterpriserUserEdit($phone, $group_id)
|
||
|
|
{
|
||
|
|
$o_data = EnterpriseUser::where('phone', $phone)->find();
|
||
|
|
$o_data['group_name'] = EnterpriseGroup::where('id', $o_data['group_id'])->value('group_name');
|
||
|
|
$edit = EnterpriseUser::where('phone', $phone)->save(['group_id' => $group_id]);
|
||
|
|
if ($edit != 0) {
|
||
|
|
$n_data = EnterpriseUser::where('phone', $phone)->find();
|
||
|
|
$n_data['group_name'] = EnterpriseGroup::where('id', $n_data['group_id'])->value('group_name');
|
||
|
|
return json(['code' => 200, 'mag' => '修改成功', 'before_data' => $o_data, 'now_data' => $n_data]);
|
||
|
|
} else {
|
||
|
|
return json(['code' => 404, 'msg' => '修改失败']);
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
public function Electricity($time_type = "", $str_day = "", $charge_station_name = '')
|
||
|
|
{
|
||
|
|
|
||
|
|
$where = [];
|
||
|
|
|
||
|
|
if (!empty($charge_station_name)) {
|
||
|
|
$charge_station_ids = Db::table('charge_station')->where('charge_station_name', 'in', $charge_station_name)->column('charge_station_id');
|
||
|
|
|
||
|
|
$ids = array_map('intval', $charge_station_ids); // 强制转为整数
|
||
|
|
|
||
|
|
$where[] = ['charge_station_id', 'in', $ids];
|
||
|
|
}
|
||
|
|
// 设置日期范围
|
||
|
|
$currentDate = $str_day ?: date('Y-m-d');
|
||
|
|
$time_type = $time_type ?: '天';
|
||
|
|
switch ($time_type) {
|
||
|
|
case '天':
|
||
|
|
|
||
|
|
$startDate = $currentDate . ' 00:00:00';
|
||
|
|
$endDate = $currentDate . ' 23:59:59';
|
||
|
|
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';
|
||
|
|
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';
|
||
|
|
break;
|
||
|
|
default:
|
||
|
|
throw new Exception('不支持的统计类型');
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
$where[] = ['start_time', '>=', $startDate];
|
||
|
|
$where[] = ['start_time', '<=', $endDate];
|
||
|
|
$allData = Db::table('zxc_charge_order')
|
||
|
|
->where($where)
|
||
|
|
->field('charge_station_id, start_time, TotalPower')
|
||
|
|
->select();
|
||
|
|
|
||
|
|
// 2. 初始化12个时段统计数据
|
||
|
|
$hourlyStats = [];
|
||
|
|
for ($hour = 0; $hour < 24; $hour += 2) {
|
||
|
|
$startHour = str_pad($hour, 2, '0', STR_PAD_LEFT);
|
||
|
|
$endHour = str_pad($hour + 2, 2, '0', STR_PAD_LEFT);
|
||
|
|
$timeKey = $startHour . ':00~' . ($hour == 22 ? '23:59' : $endHour . ':00');
|
||
|
|
|
||
|
|
$hourlyStats[$timeKey] = [
|
||
|
|
'time_range' => $timeKey,
|
||
|
|
'power' => '0',
|
||
|
|
'order_count' => 0
|
||
|
|
];
|
||
|
|
}
|
||
|
|
|
||
|
|
// 3. 遍历数据按时段统计
|
||
|
|
$totalPower = 0;
|
||
|
|
foreach ($allData as $row) {
|
||
|
|
$hour = date('H', strtotime($row['start_time']));
|
||
|
|
$timeKey = $this->getTimeKeyForHour($hour);
|
||
|
|
|
||
|
|
if (isset($hourlyStats[$timeKey])) {
|
||
|
|
$hourlyStats[$timeKey]['power'] = bcadd($hourlyStats[$timeKey]['power'], $row['TotalPower'], 4);
|
||
|
|
$hourlyStats[$timeKey]['order_count']++;
|
||
|
|
$totalPower = bcadd($totalPower, $row['TotalPower'], 4);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
return [
|
||
|
|
'date_range' => ['start' => $startDate, 'end' => $endDate],
|
||
|
|
'total_power' => number_format((double)$totalPower, 4),
|
||
|
|
'total_orders' => count($allData),
|
||
|
|
'hourly_stats' => array_values($hourlyStats),
|
||
|
|
'time_interval' => '2小时',
|
||
|
|
'station' => $charge_station_name ?: '全部充电站'
|
||
|
|
];
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 根据小时数获取对应的时间段key
|
||
|
|
*/
|
||
|
|
public function getTimeKeyForHour($hour)
|
||
|
|
{
|
||
|
|
$hour = (int)$hour;
|
||
|
|
$start = str_pad(floor($hour / 2) * 2, 2, '0', STR_PAD_LEFT);
|
||
|
|
$end = ($start == 22) ? '23:59' : str_pad($start + 2, 2, '0', STR_PAD_LEFT) . ':00';
|
||
|
|
return $start . ':00~' . $end;
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
protected function WeedDay($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 00:00:00', $stimestamp + (86400 * $i));
|
||
|
|
}
|
||
|
|
|
||
|
|
return $date;
|
||
|
|
}
|
||
|
|
|
||
|
|
public function PeriodElectricityConsumption($str_day, $charge_station_name = '')
|
||
|
|
{
|
||
|
|
$time = strtotime($str_day);
|
||
|
|
$start_time = date('Y-m-d 00:00:00', $time);
|
||
|
|
$date_start = $this->getDayDate($start_time)['start_time'];
|
||
|
|
$date_end = $this->getDayDate($start_time)['end_time'];
|
||
|
|
$i = 0;
|
||
|
|
$ss = 0;
|
||
|
|
$data = array();
|
||
|
|
foreach ($date_start as $d) {
|
||
|
|
$interval = substr($date_start[$ss], 11) . '~' . substr($date_end[$ss], 11);
|
||
|
|
$data[$ss]['interval'] = $interval;
|
||
|
|
$data[$ss]['Total'] = 0;
|
||
|
|
$ss += 1;
|
||
|
|
}
|
||
|
|
foreach ($date_start as $d) {
|
||
|
|
$table = 'zxc_charge_order';
|
||
|
|
$d_start = date('Y-m-d H:i:s', strtotime($date_start[$i]));
|
||
|
|
$d_end = date('Y-m-d H:i:s', strtotime($date_end[$i]));
|
||
|
|
if (!empty($charge_station_name)) {
|
||
|
|
$station_id = Db::table('charge_station')->where('charge_station_name', $charge_station_name)->value('charge_station_id');
|
||
|
|
$order = Db::table($table)->where('charge_station_id', $station_id)->whereBetweenTime('start_time', $d_start, $d_end)->select();
|
||
|
|
} else {
|
||
|
|
$order = Db::table($table)->whereBetweenTime('start_time', $d_start, $d_end)->select();
|
||
|
|
}
|
||
|
|
foreach ($order as $o) {
|
||
|
|
if (!empty($o['DetailMessage'])) {
|
||
|
|
if ($o['SumPeriod'] == 1) {
|
||
|
|
$data[$i]['Total'] += $o['TotalPower'];
|
||
|
|
} elseif ($o['SumPeriod'] == 2) {
|
||
|
|
$data[$i]['Total'] += $this->GetDetailMessage($o['DetailMessage'], $o['SumPeriod'])[0];
|
||
|
|
if ($i == 7) {
|
||
|
|
$data[$i - 7]['Total'] += $this->GetDetailMessage($o['DetailMessage'], $o['SumPeriod'])[1]; //再思考一下
|
||
|
|
} else {
|
||
|
|
$data[$i + 1]['Total'] += $this->GetDetailMessage($o['DetailMessage'], $o['SumPeriod'])[1];
|
||
|
|
}
|
||
|
|
} elseif ($o['SumPeriod'] == 3) {
|
||
|
|
$data[$i]['Total'] += $this->GetDetailMessage($o['DetailMessage'], $o['SumPeriod'])[0];
|
||
|
|
if ($i == 6) {
|
||
|
|
$data[$i + 1]['Total'] += $this->GetDetailMessage($o['DetailMessage'], $o['SumPeriod'])[1];
|
||
|
|
$data[$i + 1 - 7]['Total'] += $this->GetDetailMessage($o['DetailMessage'], $o['SumPeriod'])[2];
|
||
|
|
} elseif ($i == 7) {
|
||
|
|
$data[$i - 7]['Total'] += $this->GetDetailMessage($o['DetailMessage'], $o['SumPeriod'])[1];
|
||
|
|
$data[$i - 7 + 1]['Total'] += $this->GetDetailMessage($o['DetailMessage'], $o['SumPeriod'])[2];
|
||
|
|
}
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
for ($a = 0; $a < count($this->GetTimeInterVal($o['start_time'], $o['end_time'])); $a++) {
|
||
|
|
if ($i + $a >= 7) {
|
||
|
|
$data[$i + $a - 7]['Total'] += round($o['TotalPower'] * $this->GetTimeInterVal($o['start_time'], $o['end_time'])[$a], 3);
|
||
|
|
} else {
|
||
|
|
$data[$i + $a]['Total'] += round($o['TotalPower'] * $this->GetTimeInterVal($o['start_time'], $o['end_time'])[$a], 3);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
$i += 1;
|
||
|
|
}
|
||
|
|
for ($k = 0; $k < count($data); $k++) {
|
||
|
|
$data[$k]['Total'] = round($data[$k]['Total'], 2);
|
||
|
|
}
|
||
|
|
return $data;
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
public function GetTimeInterVal($start_time, $end_time)
|
||
|
|
{
|
||
|
|
$date = floor((strtotime($end_time) - strtotime($start_time)) / 86400);
|
||
|
|
$minute1 = floor((strtotime($end_time) - strtotime($start_time)) % 86400 / 60) + $date * 24 * 60;
|
||
|
|
$timeArray = $this->TimeProportion($start_time, $end_time);
|
||
|
|
$data = array();
|
||
|
|
for ($i = 0; $i < count($timeArray['start_time']); $i++) {
|
||
|
|
if ($i >= 8) {
|
||
|
|
$data['period'][$i - 8] += floor((strtotime($timeArray['end_time'][$i]) - strtotime($timeArray['start_time'][$i])) % 86400 / 60);
|
||
|
|
} else {
|
||
|
|
$data['period'][$i] = floor((strtotime($timeArray['end_time'][$i]) - strtotime($timeArray['start_time'][$i])) % 86400 / 60);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
foreach ($data['period'] as $p) {
|
||
|
|
if ($minute1 != 0) {
|
||
|
|
$Proportion[] = round($p / $minute1, 3);
|
||
|
|
} else {
|
||
|
|
$Proportion[] = 0;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return $Proportion;
|
||
|
|
}
|
||
|
|
|
||
|
|
public function TimeProportion($order_start_time, $order_end_time)
|
||
|
|
{
|
||
|
|
$time = strtotime($order_start_time);
|
||
|
|
$start_time = date('Y-m-d 00:00:00', $time);
|
||
|
|
$end_time = date('Y-m-d 00:00:00', strtotime($order_end_time));
|
||
|
|
$start_d = date('d', $time);
|
||
|
|
$end_d = date('d', strtotime($order_end_time));
|
||
|
|
$timeArray = $this->getDayDate($start_time);
|
||
|
|
$arry2 = $this->getDayDate($end_time);
|
||
|
|
if ($start_d != $end_d) {
|
||
|
|
$timeArray = array_merge_recursive($timeArray, $arry2);
|
||
|
|
}
|
||
|
|
$data = array();
|
||
|
|
for ($i = 0; $i < count($timeArray['start_time']); $i++) {
|
||
|
|
if (date('Y-m-d H:i:s', strtotime($order_start_time)) >= date('Y-m-d H:i:s', strtotime($timeArray['start_time'][$i])) && date('Y-m-d H:i:s', strtotime($order_end_time)) <= date('Y-m-d H:i:s', strtotime($timeArray['end_time'][$i]))) {
|
||
|
|
$data['start_time'][] = $order_start_time;
|
||
|
|
$data['end_time'][] = $order_end_time;
|
||
|
|
} elseif (date('Y-m-d H:i:s', strtotime($order_start_time)) >= date('Y-m-d H:i:s', strtotime($timeArray['start_time'][$i])) && date('Y-m-d H:i:s', strtotime($order_end_time)) >= date('Y-m-d H:i:s', strtotime($timeArray['end_time'][$i]))) {
|
||
|
|
if (date('Y-m-d H:i:s', strtotime($order_start_time)) < date('Y-m-d H:i:s', strtotime($timeArray['end_time'][$i]))) {
|
||
|
|
$data['start_time'][] = $order_start_time;
|
||
|
|
$data['end_time'][] = date('Y-m-d H:i:s', strtotime($timeArray['end_time'][$i]));
|
||
|
|
}
|
||
|
|
|
||
|
|
} elseif (date('Y-m-d H:i:s', strtotime($order_start_time)) <= date('Y-m-d H:i:s', strtotime($timeArray['start_time'][$i])) && date('Y-m-d H:i:s', strtotime($order_end_time)) <= date('Y-m-d H:i:s', strtotime($timeArray['end_time'][$i]))) {
|
||
|
|
if (date('Y-m-d H:i:s', strtotime($order_end_time)) >= date('Y-m-d H:i:s', strtotime($timeArray['start_time'][$i])) && date('Y-m-d H:i:s', strtotime($order_end_time)) <= date('Y-m-d H:i:s', strtotime($timeArray['end_time'][$i]))) {
|
||
|
|
$data['start_time'][] = $timeArray['start_time'][$i];
|
||
|
|
$data['end_time'][] = $order_end_time;
|
||
|
|
}
|
||
|
|
} elseif (date('Y-m-d H:i:s', strtotime($order_start_time)) <= date('Y-m-d H:i:s', strtotime($timeArray['start_time'][$i])) && date('Y-m-d H:i:s', strtotime($order_end_time)) >= date('Y-m-d H:i:s', strtotime($timeArray['end_time'][$i]))) {
|
||
|
|
if (date('Y-m-d H:i:s', strtotime($order_end_time)) >= date('Y-m-d H:i:s', strtotime($timeArray['end_time'][$i]))) {
|
||
|
|
$data['start_time'][] = $timeArray['start_time'][$i];
|
||
|
|
$data['end_time'][] = $timeArray['end_time'][$i];
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return $data;
|
||
|
|
}
|
||
|
|
|
||
|
|
protected function getDayDate($date)
|
||
|
|
{
|
||
|
|
$date_t = array();
|
||
|
|
$date_t[] = $date;
|
||
|
|
$this_date = strtotime($date);
|
||
|
|
$end_date = date("Y-m-d H:i:s", strtotime('+8 hour -1 second', $this_date));
|
||
|
|
$date_end[] = $end_date;
|
||
|
|
$t = $this->GetPeriod($date, $end_date, $date_t, $date_end);
|
||
|
|
$kk['start_time'] = $t[1];
|
||
|
|
$kk['end_time'] = $t[0];
|
||
|
|
return $kk;
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
protected function GetDetailMessage($message, $period)
|
||
|
|
{
|
||
|
|
$array = explode(';', $message, $period);
|
||
|
|
foreach ($array as $a) {
|
||
|
|
$arr1 = explode(',', $a);
|
||
|
|
$degree = explode(':', $arr1[2])[1];
|
||
|
|
$data[] = $degree;
|
||
|
|
}
|
||
|
|
return $data;
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
protected function GetPeriod($date, $end_date, $date_t, $date_end, $array1 = [8, 3, 1, 2, 3, 3, 2, 2])
|
||
|
|
{
|
||
|
|
for ($i = 0; $i < count($array1) - 1; $i++) {
|
||
|
|
$this_date = strtotime($date);
|
||
|
|
$next_date = date("Y-m-d H:i:s", strtotime('+' . $array1[$i] . ' hour', $this_date));
|
||
|
|
$this_date_end = strtotime($end_date);
|
||
|
|
$next_date_end = date("Y-m-d H:i:s", strtotime('+' . $array1[$i + 1] . ' hour', $this_date_end));
|
||
|
|
$date_end[] = $next_date_end;
|
||
|
|
$date_t[] = $next_date;
|
||
|
|
$date = $next_date;
|
||
|
|
$next_date_end = date("Y-m-d H:59:59", strtotime($next_date_end));
|
||
|
|
$end_date = $next_date_end;
|
||
|
|
}
|
||
|
|
return [$date_end, $date_t];
|
||
|
|
}
|
||
|
|
|
||
|
|
public function ShowServiceFee($type, $station_type, $group_id = '')
|
||
|
|
{
|
||
|
|
if ($type != 3) {
|
||
|
|
$ServiceFee = (new \app\model\ServiceFee)->where('type', $type)->where('station_type', $station_type)->value('service_fee');
|
||
|
|
} else {
|
||
|
|
$ServiceFee = (new \app\model\ServiceFee)->where('type', $type)->where('group_id', $group_id)->where('station_type', $station_type)->value('service_fee');
|
||
|
|
}
|
||
|
|
if ($station_type == 0) {
|
||
|
|
$station_type = '快充';
|
||
|
|
} else {
|
||
|
|
$station_type = '慢充';
|
||
|
|
}
|
||
|
|
$ServiceFee = str_replace('服务费:', '', $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;
|
||
|
|
}
|
||
|
|
return json(['code' => 200, 'Station_Type' => $station_type, 'ServiceFee' => $mm]);
|
||
|
|
}
|
||
|
|
|
||
|
|
public function UpdateServiceFee($type, $station_type, $fee, $group_id = '')
|
||
|
|
{
|
||
|
|
$service = '服务费:00:00~24:00:' . number_format((float)$fee, 2);
|
||
|
|
if ($type == 1) {
|
||
|
|
$update = (new \app\model\ChargeStation)->where('station_type', $station_type)->save(['ServiceFee' => $service]);
|
||
|
|
$feeUpdate = (new \app\model\ServiceFee)->where('type', $type)->where('station_type', $station_type)->save(['service_fee' => $service]);
|
||
|
|
if ($update >= 1 && $feeUpdate == 1) {
|
||
|
|
return json(['code' => 200, 'message' => '修改成功', 'NowFee' => $service]);
|
||
|
|
} else {
|
||
|
|
return json(['code' => 1, 'message' => '金额未发生变化,修改失败']);
|
||
|
|
}
|
||
|
|
} elseif ($type == 2) {
|
||
|
|
$feeUpdate = (new \app\model\ServiceFee)->where('type', $type)->where('station_type', $station_type)->save(['service_fee' => $service]);
|
||
|
|
if ($feeUpdate == 1) {
|
||
|
|
return json(['code' => 200, 'message' => '修改成功', 'NowFee' => $service]);
|
||
|
|
} else {
|
||
|
|
return json(['code' => 1, 'message' => '金额未发生变化,修改失败']);
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
$feeUpdate = (new \app\model\ServiceFee)->where('type', $type)->where('station_type', $station_type)->where('group_id', $group_id)->save(['service_fee' => $service]);
|
||
|
|
if ($feeUpdate == 1) {
|
||
|
|
return json(['code' => 200, 'message' => '修改成功', 'NowFee' => $service]);
|
||
|
|
} else {
|
||
|
|
return json(['code' => 1, 'message' => '金额未发生变化,修改失败']);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
}
|
||
|
|
|
||
|
|
public function UserVip($openid)
|
||
|
|
{
|
||
|
|
|
||
|
|
$type = Db::table('zxc_user')->where('openid', $openid)->value('type');
|
||
|
|
if ($type == 1) {
|
||
|
|
$vip = 'normal';
|
||
|
|
return json(['code' => 200, 'vip' => $vip]);
|
||
|
|
} elseif ($type == 2) {
|
||
|
|
$vip = 'vip';
|
||
|
|
return json(['code' => 200, 'vip' => $vip]);
|
||
|
|
} elseif ($type == 3) {
|
||
|
|
$vip = 'company';
|
||
|
|
$group_id = EnterpriseUser::where('openid', $openid)->value('group_id');
|
||
|
|
$group_name = EnterpriseGroup::where('id', $group_id)->value('group_name');
|
||
|
|
return json(['code' => 200, 'vip' => $vip, 'group_name' => $group_name]);
|
||
|
|
} else {
|
||
|
|
return json(['code' => 1]);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @param $start_time
|
||
|
|
* @param $end_time
|
||
|
|
* @param string $charge_station_name
|
||
|
|
* @param array $DataAll
|
||
|
|
* @return \think\response\Json
|
||
|
|
*/
|
||
|
|
protected function GetData($start_time, $end_time, string $charge_station_name, array $DataAll): \think\response\Json
|
||
|
|
{
|
||
|
|
$date = $this->WeedDay($start_time, $end_time);
|
||
|
|
foreach ($date as $d) {
|
||
|
|
$data = $this->PeriodElectricityConsumption($d, $charge_station_name);
|
||
|
|
for ($i = 0; $i < count($data); $i++) {
|
||
|
|
$DataAll[$i]['Total'] += $data[$i]['Total'];
|
||
|
|
}
|
||
|
|
}
|
||
|
|
$all = 0;
|
||
|
|
for ($k = 0; $k < count($DataAll); $k++) {
|
||
|
|
$DataAll[$k]['Total'] = round($DataAll[$k]['Total'], 2);
|
||
|
|
$all += $DataAll[$k]['Total'];
|
||
|
|
}
|
||
|
|
return json(['data' => $DataAll, 'all' => round($all, 2)]);
|
||
|
|
}
|
||
|
|
}
|