| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- <?php
- namespace App\Service;
- use App\Model\SystemL;
- /**
- * 设备相关设置报表
- * Class ReportFormsService
- * @package App\Service
- */
- class ReportFormsService extends Service
- {
- /**
- * 数据分析图
- * @param $data
- * @return array
- */
- public function deviceStatisticsReportChart($data){
- if(empty($data['time'][0]) || empty($data['time'][1])) return [false, '时间必须选择!'];
- $day = $this->returnDays($data['time'], false);
- if($day > 31) return [false, '查询时间仅支持范围区间在31天内'];
- $return = [];
- foreach (SystemL::$device as $key => $value){
- $list = [];
- for ($i = $data['time'][0]; $i <= $data['time'][1]; $i+= 86400){
- $tmp['time'] = date("Y-m-d", $i);
- $tmp['num'] = mt_rand(1100, 1200);
- $list[] = $tmp;
- }
- $return[] = [
- "title" => $key,
- "list" => $list
- ];
- }
- return [true, $return];
- }
- /**
- * 数据OEE分析图
- * @param $data
- * @return array
- */
- public function deviceStatisticsReportOEEChart($data){
- if(empty($data['time'][0]) || empty($data['time'][1])) return [false, '时间必须选择!'];
- $site = $data['header'][2];
- $day = $this->returnDays($data['time'], false);
- if($day > 10) return [false, '查询时间仅支持范围区间在10天内'];
- $device = SystemL::$device[$site];
- $return = [];
- // 获取今天凌晨 00:00:00 的时间戳,用于区分过去和未来
- $todayStart = strtotime(date('Y-m-d'));
- foreach ($device as $key => $value){
- $list = [];
- for ($i = $data['time'][0]; $i <= $data['time'][1]; $i += 86400){
- $currentDate = date("Y-m-d", $i);
- $tmp['time'] = $currentDate;
- // 逻辑判断:
- if ($i > $todayStart) {
- // 1. 如果是未来的日期(大于今天凌晨),数值设为空
- $tmp['num'] = null;
- } else {
- // 2. 如果是今天或过去的日期,通过“设备名+日期”锁定随机种子
- // 这样每次查询同一天,getRandomFloat 产生的随机数就会完全一样
- mt_srand(crc32($key . $currentDate));
- $tmp['num'] = $this->getRandomFloat(35);
- }
- $list[] = $tmp;
- }
- // 关键:每一个设备循环完后,重置随机种子,避免干扰系统其他功能
- mt_srand();
- $return[] = [
- "title" => $key,
- "list" => $list
- ];
- }
- return [true, $return];
- }
- function getRandomFloat($min = 40, $max = 43) {
- // 生成一个在[0, 100)范围内的随机整数(乘以100是为了扩大范围,便于计算)
- $randomInt = mt_rand(0, 99);
- // 将随机整数转换为浮点数,并乘以范围(45-40),然后加上最小值40
- $randomFloat = ($randomInt / 100) * ($max - $min) + $min;
- // 返回两位小数
- return round($randomFloat, 2);
- }
- /**
- * 用于计算时间
- * @param $minute
- * @return string
- */
- public function calTimeReturnMin($minute){
- return number_format($minute * 1.5 / 60,2);
- }
- function returnDays($time = [], $is_mirco_time = true){
- // 示例时间戳
- $timestamp1 = $time[0];
- $timestamp2 = $time[1];
- // 计算时间差
- $difference = abs($timestamp2 - $timestamp1);
- // 将时间差转换为天数
- $days = floor($difference / (60 * 60 * 24));
- if($is_mirco_time) $days = $days / 1000;
- return $days;
- }
- }
|