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; } }