field($fields)->where($map)->select(); return index_by_column('id', $rules); } public function getEffectiveTimeDisplay($rule) { $startTime = $rule['start_time'] == 0 ? null : date('Y-m-d', $rule['start_time']); $endTime = $rule['end_time'] == self::FOREVER_TIME ? null : date('Y-m-d', $rule['end_time']); if ($startTime == null && $endTime == null) { return '永久'; } if ($startTime != null && $endTime != null) { return $startTime . ' 至 ' . $endTime; } if ($startTime == null && $endTime != null) { return '从前 至 ' . $endTime; } if ($startTime != null && $endTime == null) { return $startTime . ' 至 永久'; } } public function getTimeRepeatCondition($startTime, $endTime) { return ' ((start_time >= ' . $startTime . ' AND start_time <= ' . $endTime . ') OR (start_time <= ' . $startTime . ' AND end_time >= ' . $endTime . ') OR (end_time >= ' . $startTime . ' AND end_time <= ' . $endTime . '))'; } public function getTimeRepeatRules($record) { $conditions = [ 'company_belong' => $record['company_belong'], 'company_id' => $record['company_id'] ?? 0, 'game_time_id' => $record['game_time_id'], 'game_id' => $record['game_id'] ?? 0, ]; $startTime = $record['start_time'] == '' ? 0 : strtotime($record['start_time'] . ' 00:00:00'); $endTime = $record['end_time'] == '' ? PaymentRuleService::FOREVER_TIME : strtotime($record['end_time'] . ' 23:59:59'); $conditions['_string'] = $this->getTimeRepeatCondition($startTime, $endTime); return M('payment_rule', 'tab_')->where($conditions)->order('start_time asc')->select(); } public function resetTimeRules($repeatRules, $startTime, $endTime) { $length = count($repeatRules); if ($length == 0) { return; } if ($length == 1) { $first = $repeatRules[0]; if ($startTime <= $first['start_time'] && $endTime >= $last['end_time']) { M('payment_rule', 'tab_')->where(['id' => $first['id']])->delete(); } elseif ($endTime < $first['end_time'] && $startTime <= $first['start_time']) { M('payment_rule', 'tab_')->where(['id' => $first['id']])->save(['start_time' => $endTime + 1, 'update_time' => time()]); } elseif ($endTime >= $first['end_time'] && $startTime > $first['start_time']) { M('payment_rule', 'tab_')->where(['id' => $first['id']])->save(['end_time' => $startTime - 1, 'update_time' => time()]); } else { $newRule = $first; M('payment_rule', 'tab_')->where(['id' => $first['id']])->save(['end_time' => $startTime - 1, 'update_time' => time()]); unset($newRule['id']); unset($newRule['create_time']); $newRule['start_time'] = $endTime + 1; $newRule['update_time'] = time(); M('payment_rule', 'tab_')->add($newRule); } } else { $first = $repeatRules[0]; $last = $repeatRules[$length - 1]; $exceptIds = []; if ($startTime <= $first['start_time'] && $endTime >= $last['end_time']) { } elseif ($startTime <= $first['start_time'] && $endTime < $last['end_time']) { M('payment_rule', 'tab_')->where(['id' => $last['id']])->save(['start_time' => $endTime + 1, 'update_time' => time()]); $exceptIds = [$last['id']]; } elseif ($startTime > $first['start_time'] && $endTime >= $last['end_time']) { M('payment_rule', 'tab_')->where(['id' => $first['id']])->save(['end_time' => $startTime - 1, 'update_time' => time()]); $exceptIds = [$first['id']]; } else { M('payment_rule', 'tab_')->where(['id' => $first['id']])->save(['end_time' => $startTime - 1, 'update_time' => time()]); M('payment_rule', 'tab_')->where(['id' => $last['id']])->save(['start_time' => $endTime + 1, 'update_time' => time()]); $exceptIds = [$first['id'], $last['id']]; } foreach ($repeatRules as $rule) { if (!in_array($rule['id'], $exceptIds)) { M('payment_rule', 'tab_')->where(['id' => $rule['id']])->delete(); } } } } }