78 Commits

Author SHA1 Message Date
revlis44
d0b75f6d83 날짜표기수정
All checks were successful
PR-CI / build-test (pull_request) Successful in 16s
2026-01-08 09:37:48 +09:00
revlis44
d797aae068 css
All checks were successful
PR-CI / build-test (pull_request) Successful in 16s
2026-01-08 08:45:13 +09:00
revlis44
e546b17ff5 css cash refresh
All checks were successful
PR-CI / build-test (pull_request) Successful in 17s
2026-01-06 11:40:06 +09:00
revlis44
baf73eb534 처리 현황 집계 기준을 지난 한달간으로 변경하고 막대그래프 제목 아래에 연간요청현황 추가
All checks were successful
PR-CI / build-test (pull_request) Successful in 19s
처리 현황이 업데이트 되면 즉시 집계에 반영되도록 변경
2026-01-06 11:28:51 +09:00
b652e9f9cc 작성일 시:분:초 표시 하도록 추가
All checks were successful
Main-Build / build-and-push (push) Successful in 32s
2025-12-11 16:01:12 +09:00
778747ba7e maven-cache 스토리지 방식 변경 (RWO > RWX)
All checks were successful
Main-Build / build-and-push (push) Successful in 44s
2025-12-11 15:57:04 +09:00
baccdcdf5f 날짜 형식 변환
All checks were successful
Main-Build / build-and-push (push) Successful in 1m2s
2025-12-11 15:41:03 +09:00
a396981ebb 날짜처리 에러 부분 수정
All checks were successful
Main-Build / build-and-push (push) Successful in 40s
2025-12-11 15:17:40 +09:00
179fd7d95c JSTL fmt:formatDate 이 LocalDateTime 처리 불가하기 때문에 재처리 기능 추가
All checks were successful
Main-Build / build-and-push (push) Successful in 42s
2025-12-11 13:40:17 +09:00
78b5561e7a mysql 8.4.7 로 원복
All checks were successful
Main-Build / build-and-push (push) Successful in 32s
소스 수정으로 localdatetime 문제 해결 진행
2025-12-11 12:03:29 +09:00
031a7fad81 mysql 8.4.7 테스트 - 1
All checks were successful
Main-Build / build-and-push (push) Successful in 29s
2025-12-11 11:12:08 +09:00
49b7f0b984 구 개발디비로 테스트 변경
All checks were successful
Main-Build / build-and-push (push) Successful in 26s
2025-12-11 10:58:08 +09:00
680bbce797 mysql connector 버전에 따른 localdatetime 포맷 문제 발생으로 구버전 라이브러리로 복원 - 2
All checks were successful
Main-Build / build-and-push (push) Successful in 26s
2025-12-11 10:42:30 +09:00
8a54aee412 mysql connector 버전에 따른 localdatetime 포맷 문제 발생으로 구버전 라이브러리로 복원
All checks were successful
Main-Build / build-and-push (push) Successful in 31s
2025-12-11 10:40:18 +09:00
049fe4ee29 mysql 8.4.7 로 변경 테스트 - 4
All checks were successful
Main-Build / build-and-push (push) Successful in 35s
2025-12-11 10:23:03 +09:00
000e3145bd mysql 8.4.7 로 변경 테스트 - 3
All checks were successful
Main-Build / build-and-push (push) Successful in 27s
2025-12-11 09:44:58 +09:00
862c73bd38 mysql 8.4.7 로 변경 테스트 - 2
All checks were successful
Main-Build / build-and-push (push) Successful in 26s
2025-12-11 09:37:28 +09:00
2f7fcc5081 mysql 8.4.7 로 변경 테스트
All checks were successful
Main-Build / build-and-push (push) Successful in 27s
2025-12-11 09:32:54 +09:00
a7cfad592b Merge pull request 'stage 추가' (#22) from feature/add-stage into master
All checks were successful
Main-Build / build-and-push (push) Successful in 28s
Reviewed-on: #22
Reviewed-by: saydev <gomdobi@sayinfo.co.kr>
2025-12-10 07:49:37 +00:00
revlis44
ff5959076f stage 추가
All checks were successful
PR-CI / build-test (pull_request) Successful in 17s
2025-12-10 16:48:51 +09:00
51847f834f Merge pull request 'stage 추가' (#21) from feature/add-stage into master
All checks were successful
Main-Build / build-and-push (push) Successful in 36s
Reviewed-on: #21
Reviewed-by: saydev <gomdobi@sayinfo.co.kr>
2025-12-10 07:02:52 +00:00
revlis44
433d47b80b stage 추가
All checks were successful
PR-CI / build-test (pull_request) Successful in 21s
2025-12-10 16:02:13 +09:00
85b7ba26d5 Merge pull request 'stage 버전 추가' (#20) from feature/add-stage into master
All checks were successful
Main-Build / build-and-push (push) Successful in 37s
Reviewed-on: #20
Reviewed-by: saydev <gomdobi@sayinfo.co.kr>
2025-12-10 06:54:07 +00:00
revlis44
dffebf63ae stage 버전 추가
All checks were successful
PR-CI / build-test (pull_request) Successful in 17s
2025-12-10 15:53:19 +09:00
495a4df169 필요 없는 확인 작업 제거
All checks were successful
Main-Build / build-and-push (push) Successful in 27s
2025-12-10 13:46:57 +09:00
bdfe760a88 크롤링 차단
All checks were successful
Main-Build / build-and-push (push) Successful in 27s
2025-12-10 13:40:36 +09:00
858a9e18cb Helpdesk dev, prod 배포환경 분리
All checks were successful
Main-Build / build-and-push (push) Successful in 1m17s
2025-12-10 13:27:49 +09:00
bc58f8629e Merge pull request 'feature/git-action5' (#19) from feature/git-action5 into master
All checks were successful
Main-Build / build-and-push (push) Successful in 59s
Reviewed-on: #19
Reviewed-by: saydev <gomdobi@sayinfo.co.kr>
2025-12-09 04:31:29 +00:00
revlis44
745c5a7461 harbor로그인 시 비밀번호 특수문자가 있으면 printf %s 사용해야함
All checks were successful
PR-CI / build-test (pull_request) Successful in 17s
2025-12-09 13:30:51 +09:00
revlis44
a586ba28bd harbor 2025-12-09 12:11:34 +09:00
ef4d58dfad Merge pull request 'feature/git-action5' (#18) from feature/git-action5 into master
Some checks failed
Main-Build / build-and-push (push) Failing after 19s
Reviewed-on: #18
Reviewed-by: saydev <gomdobi@sayinfo.co.kr>
2025-12-09 03:09:55 +00:00
revlis44
7b47a02d9a ddd
All checks were successful
PR-CI / build-test (pull_request) Successful in 33s
2025-12-09 12:09:19 +09:00
revlis44
7fb2bfdfa4 dd 2025-12-09 12:06:34 +09:00
revlis44
98a8159d9f d 2025-12-09 12:05:22 +09:00
632eaa721e favicon 강제 캐쉬
Some checks failed
Main-Build / build-and-push (push) Failing after 17s
2025-12-09 11:58:08 +09:00
b6ab357703 favicon 강제 캐쉬
Some checks failed
Main-Build / build-and-push (push) Failing after 16s
2025-12-09 11:49:01 +09:00
8fca06fcbc favicon 강제 캐쉬
Some checks failed
Main-Build / build-and-push (push) Failing after 15s
2025-12-09 11:43:21 +09:00
53887b77ed Merge pull request '파비콘 추가' (#14) from feature/favicon into master
Some checks failed
Main-Build / build-and-push (push) Failing after 16s
Reviewed-on: #14
Reviewed-by: saydev <gomdobi@sayinfo.co.kr>
2025-12-09 02:07:25 +00:00
revlis44
2808bbc29d 파비콘 추가
Some checks failed
PR-CI / build-test (pull_request) Failing after 4m55s
2025-12-09 11:06:54 +09:00
fc1420a0ea Merge pull request 'favicon 변경' (#13) from feature/favicon into master
Some checks failed
Main-Build / build-and-push (push) Failing after 28s
Reviewed-on: #13
Reviewed-by: saydev <gomdobi@sayinfo.co.kr>
2025-12-09 01:55:45 +00:00
80b13f2893 JVM 옵션 정리
Some checks failed
Main-Build / build-and-push (push) Has been cancelled
2025-12-09 10:43:50 +09:00
revlis44
ea2ecf2539 favicon 변경
Some checks failed
PR-CI / build-test (pull_request) Failing after 6m30s
2025-12-09 10:29:00 +09:00
75b5328f27 무중단 배포용 Jenkinsfile 생성
Some checks failed
Main-Build / build-and-push (push) Has been cancelled
2025-12-09 09:39:26 +09:00
320e64f929 무중단 배포용 /health 200 응답 기능 Spring Security 예외 처리 추가 (login session 제외)
Some checks failed
Main-Build / build-and-push (push) Failing after 17s
2025-12-08 17:05:20 +09:00
58d246a993 무중단 배포용 /health 200 응답 기능 Spring Security 예외 처리 추가
Some checks failed
Main-Build / build-and-push (push) Failing after 22s
2025-12-08 16:24:34 +09:00
9eade14238 무중단 배포용 /health 200 응답 기능 Spring Security 예외 처리 추가
Some checks failed
Main-Build / build-and-push (push) Failing after 4s
2025-12-08 16:17:39 +09:00
c289eb242d Merge remote-tracking branch 'origin/master'
Some checks failed
Main-Build / build-and-push (push) Failing after 4s
2025-12-08 16:07:30 +09:00
cf5503f56f 무중단 배포용 /health 200 응답 기능 추가 2025-12-08 16:06:50 +09:00
158dc8f7a0 Merge pull request 'feature/add-favicon' (#10) from feature/add-favicon into master
Some checks failed
Main-Build / build-and-push (push) Failing after 17s
Reviewed-on: #10
Reviewed-by: saydev <gomdobi@sayinfo.co.kr>
2025-12-08 05:34:41 +00:00
revlis44
311aa989d3 favicon 추가
Some checks failed
PR-CI / build-test (pull_request) Failing after 6m30s
2025-12-08 14:21:29 +09:00
revlis44
a2866366ce gitea-action test
Some checks failed
PR-CI / build-test (pull_request) Has been cancelled
2025-12-08 13:37:57 +09:00
4b0471639c Merge pull request 'gitea-action-runner test' (#8) from feature/git-action3 into master
Some checks failed
Main-Build / build-and-push (push) Failing after 21s
Reviewed-on: #8
Reviewed-by: saydev <gomdobi@sayinfo.co.kr>
2025-12-08 01:41:14 +00:00
revlis44
f7b750881c 운영DB서버로 접속정보 변경
Some checks failed
PR-CI / build-test (pull_request) Failing after 6m39s
2025-12-08 10:34:52 +09:00
18b3dc3f8c 구동 권한 정리 2025-12-08 09:05:39 +09:00
7351a95f80 구동 권한 정리 2025-12-05 13:44:28 +09:00
4b865b2f1c 구동 권한 정리 2025-12-05 13:36:15 +09:00
d1c22a3b3f 구동 권한 정리 2025-12-05 13:29:12 +09:00
a7a7def41b K8S 롤아웃 컨트롤 활성화 2025-12-05 11:08:09 +09:00
cfaded0543 컨테이너 서비스 구동 계정 조정 2025-12-05 11:06:41 +09:00
f70e9552c5 컨테이너 서비스 구동 계정 조정 2025-12-05 11:03:40 +09:00
e33bf89f0f 컨테이너 서비스 구동 계정 조정 2025-12-05 11:00:37 +09:00
6d9763335c 컨테이너 서비스 구동 계정 조정 2025-12-05 10:57:51 +09:00
revlis44
a1ae0d3cfa 하버 업로드 임시 제거
Some checks failed
PR-CI / build-test (pull_request) Failing after 4m57s
2025-12-05 10:54:45 +09:00
1ebb7522dc Harbor Secret 수정 2025-12-04 15:46:51 +09:00
676b9f76f3 젠킨스 연결 작업 2025-12-04 15:37:03 +09:00
revlis44
d796042bed gitea-action-runner test
Some checks failed
PR-CI / build-test (pull_request) Failing after 4m54s
2025-12-04 14:49:58 +09:00
f5d5e0d5db Merge pull request 'runner config' (#7) from feature/git-action3 into master
Reviewed-on: #7
Reviewed-by: saydev <gomdobi@sayinfo.co.kr>
2025-12-04 02:27:55 +00:00
revlis44
6513465dcc runner config
Some checks failed
PR-CI / build-test (pull_request) Failing after 1m40s
2025-12-04 11:27:05 +09:00
02b798b01b Merge pull request 'push image to harbor' (#6) from feature/git-action3 into master
Reviewed-on: #6
Reviewed-by: saydev <gomdobi@sayinfo.co.kr>
2025-12-04 01:18:44 +00:00
revlis44
2aa0e3eb3e push image to harbor
Some checks failed
PR-CI / build-test (pull_request) Failing after 6m17s
2025-12-04 10:17:26 +09:00
2526cb0c53 Merge pull request 'feature/git-action3' (#5) from feature/git-action3 into master
Some checks failed
Master-Build / build-war (push) Has been cancelled
Reviewed-on: #5
Reviewed-by: saydev <gomdobi@sayinfo.co.kr>
2025-12-04 00:56:47 +00:00
revlis44
39e2b4e64f test
Some checks failed
PR-CI / build-test (pull_request) Has been cancelled
2025-12-03 17:42:16 +09:00
revlis44
c82938fda6 test
Some checks failed
PR-CI / build-test (pull_request) Failing after 6m17s
2025-12-03 17:18:14 +09:00
revlis44
0360dc4893 test 2025-12-03 17:09:40 +09:00
2023107327 Merge pull request 'gitea-action-runner test' (#3) from feature/git-action into master
Some checks failed
Master-Build / build-war (push) Failing after 12m50s
Reviewed-on: #3
Reviewed-by: saydev <gomdobi@sayinfo.co.kr>
2025-12-03 07:58:55 +00:00
a2bf6949a2 Merge pull request 'git action' (#2) from feature/git-action into master
Some checks failed
Master-Build / build-war (push) Has been cancelled
Reviewed-on: #2
Reviewed-by: saydev <gomdobi@sayinfo.co.kr>
2025-12-03 07:12:09 +00:00
60eb072d7c Merge pull request 'chart.js 제거 (경량화버전으로 교체)' (#1) from feature/test into master
Reviewed-on: #1
Reviewed-by: saydev <gomdobi@sayinfo.co.kr>
2025-12-03 05:15:21 +00:00
revlis44
f1e1670db7 chart.js 제거 (경량화버전으로 교체) 2025-12-03 14:11:41 +09:00
37 changed files with 1132 additions and 192 deletions

View File

@@ -1,51 +1,31 @@
name: Master-Build name: Main-Build
on: on:
push: push:
branches: ["master"] branches: ["master"]
jobs: jobs:
build-war: build-and-push:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Checkout source - uses: actions/checkout@v4
uses: actions/checkout@v4
- name: Set up JDK 8 - name: Maven Build WAR
uses: actions/setup-java@v4 run: mvn -B clean package -DskipTests
with:
distribution: temurin
java-version: "8"
- name: Cache Maven repo - name: Login Harbor
uses: actions/cache@v4
with:
path: ~/.m2
key: m2-${{ runner.os }}-${{ hashFiles('**/pom.xml') }}
restore-keys: |
m2-${{ runner.os }}-
- name: Configure Maven Settings for Nexus
run: | run: |
mkdir -p ~/.m2 printf "%s" "$HARBOR_PASSWORD" | docker login harbor.sayinfo.co.kr -u "$HARBOR_USERNAME" --password-stdin
cat > ~/.m2/settings.xml <<EOF env:
<settings> HARBOR_USERNAME: ${{ secrets.HARBOR_USERNAME }}
<servers> HARBOR_PASSWORD: ${{ secrets.HARBOR_PASSWORD }}
<server>
<id>nexus</id>
<username>${{ secrets.NEXUS_USERNAME }}</username>
<password>${{ secrets.NEXUS_PASSWORD }}</password>
</server>
</servers>
</settings>
EOF
- name: Maven deploy (WAR to Nexus) - name: Build Docker image
run: mvn -B clean deploy -DskipTests run: |
docker build -t sayit-helpdesk:latest .
- name: Upload WAR artifact (optional) - name: Push to Harbor
uses: actions/upload-artifact@v4 run: |
with: docker tag sayit-helpdesk:latest harbor.sayinfo.co.kr/sayit-helpdesk-gitea_action_runner_test/helpdesk-service:latest
name: sayit-helpdesk-war docker push harbor.sayinfo.co.kr/sayit-helpdesk-gitea_action_runner_test/helpdesk-service:latest
path: target/sayit.helpdesk.war

View File

@@ -2,6 +2,7 @@ name: PR-CI
on: on:
pull_request: pull_request:
types: [opened, synchronize]
branches: ["master"] branches: ["master"]
jobs: jobs:
@@ -9,24 +10,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- name: Checkout source - uses: actions/checkout@v4
uses: actions/checkout@v4
- name: Set up JDK 8 - name: Maven Build (skip tests)
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: "8"
- name: Cache Maven repo
uses: actions/cache@v4
with:
path: ~/.m2
key: m2-${{ runner.os }}-${{ hashFiles('**/pom.xml') }}
restore-keys: |
m2-${{ runner.os }}-
- name: Maven Build (compile + dependency check)
run: mvn -B clean package -DskipTests run: mvn -B clean package -DskipTests
#test

10
.mvn/settings.xml Normal file
View File

@@ -0,0 +1,10 @@
<settings>
<mirrors>
<mirror>
<id>sayinfo-nexus</id>
<name>Sayinfo Nexus</name>
<url>https://nexus.sayinfo.co.kr/repository/maven-public/</url>
<mirrorOf>*</mirrorOf>
</mirror>
</mirrors>
</settings>

49
Dockerfile Normal file
View File

@@ -0,0 +1,49 @@
# 1단계: OTEL Java 에이전트 다운로드
FROM alpine:3.20 AS otel
ARG OTEL_VERSION=2.21.0
RUN apk add --no-cache curl && \
curl -fL \
https://github.com/open-telemetry/opentelemetry-java-instrumentation/releases/download/v${OTEL_VERSION}/opentelemetry-javaagent.jar \
-o /opentelemetry-javaagent.jar
# 2단계: Tomcat 이미지 (Java 8 기준)
FROM tomcat:9.0-jdk8-temurin
# 빌드 시 주입할 OTEL 관련 인자
ARG OTEL_ENV=prod
ARG OTEL_SERVICE_NAME=sayit-helpdesk
ENV TZ=Asia/Seoul \
OTEL_SERVICE_NAME=${OTEL_SERVICE_NAME} \
OTEL_EXPORTER_OTLP_ENDPOINT=http://192.168.100.203:4317 \
OTEL_EXPORTER_OTLP_PROTOCOL=grpc \
OTEL_RESOURCE_ATTRIBUTES="deployment.environment=${OTEL_ENV}" \
JAVA_TOOL_OPTIONS="\
-Xms1g \
-Xmx1g \
-XX:+UseG1GC \
-XX:MaxGCPauseMillis=200 \
-XX:+UnlockExperimentalVMOptions \
-XX:+UseStringDeduplication \
-XX:+HeapDumpOnOutOfMemoryError \
-XX:HeapDumpPath=/tmp \
-XX:+DisableExplicitGC \
-javaagent:/opt/opentelemetry-javaagent.jar"
# 타임존 설정
RUN ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime
# OTEL 에이전트 복사
COPY --from=otel /opentelemetry-javaagent.jar /opt/opentelemetry-javaagent.jar
RUN chown 1000:1000 /opt/opentelemetry-javaagent.jar
# 기본 웹앱 정리
RUN rm -rf /usr/local/tomcat/webapps/*
# Maven 빌드된 WAR 복사
COPY target/sayit-helpdesk.war /usr/local/tomcat/webapps/ROOT.war
RUN chown -R 1000:1000 /usr/local/tomcat/
EXPOSE 8080
CMD ["catalina.sh","run"]

160
Jenkinsfile vendored Normal file
View File

@@ -0,0 +1,160 @@
// Jenkinsfile — Kaniko build + K8s deploy
// - dev/stage/prod 잡 분리 전제
// - TARGET_ENV 는 Jenkins Job 설정에서 환경변수로 고정 (dev / prod / stage)
def L = 'kaniko-and-deploy'
def REG = 'harbor.sayinfo.co.kr'
def IMAGE = 'sayit-helpdesk/helpdesk-service'
def DEPLOY = 'sayit-helpdesk-service'
podTemplate(
label: L,
yaml: """
apiVersion: v1
kind: Pod
spec:
serviceAccountName: default
securityContext:
fsGroup: 1001
fsGroupChangePolicy: OnRootMismatch
hostAliases:
- ip: "192.168.0.210"
hostnames:
- "harbor.sayinfo.co.kr"
- "nexus.sayinfo.co.kr"
containers:
- name: maven
image: maven:3.9.9-eclipse-temurin-8
command: ["/bin/sh","-lc"]
args: ["sleep 99d"]
tty: true
volumeMounts:
- name: workspace-volume
mountPath: /home/jenkins/agent
- name: maven-cache
mountPath: /root/.m2
- name: kaniko
image: gcr.io/kaniko-project/executor:debug
command: ["/busybox/sh","-c"]
args: ["sleep 99d"]
tty: true
volumeMounts:
- name: kaniko-auth
mountPath: /kaniko/.docker
- name: workspace-volume
mountPath: /home/jenkins/agent
- name: kubectl
image: bitnamilegacy/kubectl:latest
command: ["/bin/sh","-lc"]
args: ["sleep 99d"]
securityContext:
runAsUser: 0
runAsGroup: 0
tty: true
volumeMounts:
- name: workspace-volume
mountPath: /home/jenkins/agent
volumes:
- name: kaniko-auth
projected:
sources:
- secret:
name: regcred-sayit-helpdesk
items:
- key: .dockerconfigjson
path: config.json
- name: workspace-volume
emptyDir: {}
- name: maven-cache
persistentVolumeClaim:
claimName: maven-repo-pvc-rwx
"""
) {
node(L) {
// Jenkins Job 설정에서 TARGET_ENV 를 dev / prod / stage로 고정해서 넘김
// (없으면 기본 dev로 간주)
def TARGET_ENV = env.TARGET_ENV ?: 'dev'
def MVN_PROFILE = (TARGET_ENV == 'dev') ? 'dev' : (TARGET_ENV == 'stage') ? 'stage' : 'prod'
def APP_NS = (TARGET_ENV == 'dev') ? 'sayit-helpdesk-dev' : (TARGET_ENV == 'stage') ? 'sayit-helpdesk-stage' : 'sayit-helpdesk'
def OTEL_ENV = (TARGET_ENV == 'dev') ? 'dev' : (TARGET_ENV == 'stage') ? 'stage' : 'prod'
def OTEL_SERVICE_NAME = (TARGET_ENV == 'dev') ? 'sayit-helpdesk-dev' : (TARGET_ENV == 'stage') ? 'sayit-helpdesk-stage' : 'sayit-helpdesk'
def IMAGE_TAG = "${TARGET_ENV}-${env.BUILD_NUMBER}" // dev-123 / stage-123 / prod-123
def LATEST_TAG = "latest-${TARGET_ENV}" // latest-dev / latest-stage / latest-prod
timestamps {
stage("Info") {
echo "TARGET_ENV = ${TARGET_ENV}"
echo "MVN_PROFILE = ${MVN_PROFILE}"
echo "APP_NS = ${APP_NS}"
echo "OTEL_ENV = ${OTEL_ENV}"
echo "OTEL_SERVICE_NAME = ${OTEL_SERVICE_NAME}"
echo "IMAGE_TAG = ${IMAGE_TAG}"
echo "LATEST_TAG = ${LATEST_TAG}"
}
stage('Checkout') {
checkout scm
}
stage("Maven Build (${MVN_PROFILE})") {
container('maven') {
sh """
set -eux
cd "\${WORKSPACE}"
mvn -B -q -e -T 1C -s .mvn/settings.xml clean package -DskipTests -P${MVN_PROFILE}
"""
}
}
stage('Preflight (Kaniko)') {
container('kaniko') {
sh """
set -eux
cd "\${WORKSPACE}"
test -f /kaniko/.docker/config.json
nslookup harbor.sayinfo.co.kr || true
grep harbor /etc/hosts || true
"""
}
}
stage("Build & Push (Kaniko, tag=${IMAGE_TAG}, latest=${LATEST_TAG})") {
container('kaniko') {
sh """
set -eux
cd "\${WORKSPACE}"
/kaniko/executor \\
--context=. \\
--dockerfile=Dockerfile \\
--destination=${REG}/${IMAGE}:${IMAGE_TAG} \\
--destination=${REG}/${IMAGE}:${LATEST_TAG} \\
--build-arg OTEL_ENV=${OTEL_ENV} \\
--build-arg OTEL_SERVICE_NAME=${OTEL_SERVICE_NAME} \\
--snapshot-mode=redo \\
--skip-tls-verify \\
--cache=true \\
--cache-repo=${REG}/sayit-helpdesk/build-cache
"""
}
}
stage("Deploy to Kubernetes (${APP_NS})") {
container('kubectl') {
sh """
set -eux
kubectl -n ${APP_NS} set image deploy/${DEPLOY} ${DEPLOY}=${REG}/${IMAGE}:${IMAGE_TAG}
kubectl -n ${APP_NS} rollout status deploy/${DEPLOY} --timeout=300s
kubectl -n ${APP_NS} get deploy ${DEPLOY} -o wide
kubectl -n ${APP_NS} get pods -l app=${DEPLOY} -o wide
kubectl -n ${APP_NS} get pod -l app=${DEPLOY} -o jsonpath='{.items[*].spec.containers[*].image}'; echo
"""
}
}
}
}
}

131
pom.xml
View File

@@ -229,16 +229,28 @@
<!-- </dependency>--> <!-- </dependency>-->
<!-- Database --> <!-- Database -->
<dependency> <!-- mysql 5.X -->
<groupId>mysql</groupId> <!-- <dependency>-->
<artifactId>mysql-connector-java</artifactId> <!-- <groupId>mysql</groupId>-->
<version>5.1.31</version> <!-- <artifactId>mysql-connector-java</artifactId>-->
</dependency> <!-- <version>5.1.31</version>-->
<!-- </dependency>-->
<dependency> <dependency>
<groupId>commons-dbcp</groupId> <groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId> <artifactId>commons-dbcp</artifactId>
<version>1.4</version> <version>1.4</version>
</dependency> </dependency>
<!-- mysql 8.4.7 -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<version>9.5.0</version>
</dependency>
<dependency>
<groupId>commons-pool</groupId>
<artifactId>commons-pool</artifactId>
<version>1.6</version>
</dependency>
<!-- Logging (Log4j 2 + SLF4J) --> <!-- Logging (Log4j 2 + SLF4J) -->
<!-- <dependency> <!-- <dependency>
@@ -532,17 +544,17 @@
<!-- </dependency>--> <!-- </dependency>-->
<!-- &lt;!&ndash; Add other system jars similarly if compilation fails &ndash;&gt;--> <!-- &lt;!&ndash; Add other system jars similarly if compilation fails &ndash;&gt;-->
<dependency> <!-- <dependency>-->
<groupId>com.tmax.tibero</groupId> <!-- <groupId>com.tmax.tibero</groupId>-->
<artifactId>tibero-jdbc</artifactId> <!-- <artifactId>tibero-jdbc</artifactId>-->
<version>5.0</version> <!-- <version>5.0</version>-->
</dependency> <!-- </dependency>-->
<dependency> <!-- <dependency>-->
<groupId>oracle</groupId> <!-- <groupId>oracle</groupId>-->
<artifactId>ojdbc14</artifactId> <!-- <artifactId>ojdbc14</artifactId>-->
<version>10.2.0.4.0</version> <!-- <version>10.2.0.4.0</version>-->
</dependency> <!-- </dependency>-->
<dependency> <dependency>
<groupId>com.acube</groupId> <groupId>com.acube</groupId>
@@ -700,4 +712,93 @@
</plugin> </plugin>
</plugins> </plugins>
</build> </build>
<profiles>
<profile>
<id>dev</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<phase>process-resources</phase>
<configuration>
<target>
<copy
file="${basedir}/src/main/resources/egovframework/egovProps/globals-dev.properties"
tofile="${project.build.outputDirectory}/egovframework/egovProps/globals.properties"
overwrite="true"/>
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>stage</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<phase>process-resources</phase>
<configuration>
<target>
<copy
file="${basedir}/src/main/resources/egovframework/egovProps/globals-stage.properties"
tofile="${project.build.outputDirectory}/egovframework/egovProps/globals.properties"
overwrite="true"/>
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>prod</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<phase>process-resources</phase>
<configuration>
<target>
<copy
file="${basedir}/src/main/resources/egovframework/egovProps/globals-prod.properties"
tofile="${project.build.outputDirectory}/egovframework/egovProps/globals.properties"
overwrite="true"/>
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project> </project>

View File

@@ -45,7 +45,9 @@ public class AuthenticInterceptor extends HandlerInterceptorAdapter {
uri.equals("/") || uri.equals("/") ||
uri.equals("/actionLoginSys.do") || uri.equals("/actionLoginSys.do") ||
uri.equals("/js/") || uri.equals("/js/") ||
uri.equals("/images/") uri.equals("/images/") ||
uri.equals("/health.do")
) { ) {
return true; return true;
} }

View File

@@ -46,6 +46,10 @@ extends EgovComAbstractDAO {
return (Integer)this.select("dmsHdbDAO.selectDmsHdbListTotCnt_S", (Object)searchVO); return (Integer)this.select("dmsHdbDAO.selectDmsHdbListTotCnt_S", (Object)searchVO);
} }
public List selectDmsHdbStat(DmsHdbDefaultVO searchVO) throws Exception {
return this.list("dmsHdbDAO.selectDmsHdbStat_D", (Object)searchVO);
}
public List selectDmsHdbReplyList(DmsHdbDefaultVO searchVO) { public List selectDmsHdbReplyList(DmsHdbDefaultVO searchVO) {
return this.list("dmsHdbDAO.selectDmsHdbReplyList_D", (Object)searchVO); return this.list("dmsHdbDAO.selectDmsHdbReplyList_D", (Object)searchVO);
} }
@@ -70,8 +74,10 @@ extends EgovComAbstractDAO {
return (List<DmsHdbGraphVO>) this.list("dmsHdbDAO.selectDmsHdbPerYearChart", (Object)searchVO); return (List<DmsHdbGraphVO>) this.list("dmsHdbDAO.selectDmsHdbPerYearChart", (Object)searchVO);
} }
public DmsHdbGraphVO selectDmsHdbForMonthChart(DmsHdbDefaultVO searchVO) { /*
return (DmsHdbGraphVO)this.select("dmsHdbDAO.selectDmsHdbForMonthChart", (Object)searchVO); * public DmsHdbGraphVO selectDmsHdbForMonthChart(DmsHdbDefaultVO searchVO) {
} * return (DmsHdbGraphVO)this.select("dmsHdbDAO.selectDmsHdbForMonthChart",
* (Object)searchVO); }
*/
} }

View File

@@ -32,6 +32,8 @@ public interface DmsHdbService {
public int selectDmsHdbListTotCnt(DmsHdbDefaultVO var1); public int selectDmsHdbListTotCnt(DmsHdbDefaultVO var1);
public List selectDmsHdbStat(DmsHdbDefaultVO var1) throws Exception;
public String checkFileWhiteList(MultipartHttpServletRequest var1, String var2, String var3) throws Exception; public String checkFileWhiteList(MultipartHttpServletRequest var1, String var2, String var3) throws Exception;
public List selectDmsHdbReplyList(DmsHdbDefaultVO var1); public List selectDmsHdbReplyList(DmsHdbDefaultVO var1);
@@ -46,6 +48,6 @@ public interface DmsHdbService {
public List<DmsHdbGraphVO> selectDmsHdbPerYearChart(DmsHdbDefaultVO var1); public List<DmsHdbGraphVO> selectDmsHdbPerYearChart(DmsHdbDefaultVO var1);
public DmsHdbGraphVO selectDmsHdbForMonthChart(DmsHdbDefaultVO var1); /* public DmsHdbGraphVO selectDmsHdbForMonthChart(DmsHdbDefaultVO var1); */
} }

View File

@@ -20,7 +20,10 @@ import egovframework.dms.prj.vo.DmsPrjDefaultVO;
import egovframework.edosi.egov.helper.UserDetailsHelper; import egovframework.edosi.egov.helper.UserDetailsHelper;
import egovframework.rte.fdl.idgnr.EgovIdGnrService; import egovframework.rte.fdl.idgnr.EgovIdGnrService;
import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper; import egovframework.rte.fdl.security.userdetails.util.EgovUserDetailsHelper;
import egovframework.rte.psl.dataaccess.util.EgovMap;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.time.format.DateTimeFormatter;
import java.util.Date; import java.util.Date;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
@@ -128,14 +131,34 @@ public class DmsHdbServiceImpl implements DmsHdbService {
return resultVO; return resultVO;
} }
public List selectDmsHdbList(DmsHdbDefaultVO searchVO) throws Exception { @SuppressWarnings("unchecked")
return this.dmsHdbDAO.selectDmsHdbList(searchVO); public List<EgovMap> selectDmsHdbList(DmsHdbDefaultVO searchVO) throws Exception {
List<EgovMap> list = this.dmsHdbDAO.selectDmsHdbList(searchVO);
for (EgovMap map : list) {
Object createDateObj = map.get("createDate");
if (createDateObj != null) {
// ISO 문자열: 2025-11-11T11:44:43
String createDateStr = createDateObj.toString();
// T → 공백 치환
map.put("createDate", createDateStr.replace('T', ' '));
}
}
return list;
} }
public int selectDmsHdbListTotCnt(DmsHdbDefaultVO searchVO) { public int selectDmsHdbListTotCnt(DmsHdbDefaultVO searchVO) {
return this.dmsHdbDAO.selectDmsHdbListTotCnt(searchVO); return this.dmsHdbDAO.selectDmsHdbListTotCnt(searchVO);
} }
public List selectDmsHdbStat(DmsHdbDefaultVO searchVO) throws Exception {
return this.dmsHdbDAO.selectDmsHdbStat(searchVO);
}
public String addMultiFiles(MultipartHttpServletRequest multiRequest, String targetNm) throws Exception { public String addMultiFiles(MultipartHttpServletRequest multiRequest, String targetNm) throws Exception {
multiRequest.setCharacterEncoding("utf-8"); multiRequest.setCharacterEncoding("utf-8");
Map<String, MultipartFile> files = multiRequest.getFileMap(); Map<String, MultipartFile> files = multiRequest.getFileMap();
@@ -301,7 +324,8 @@ public class DmsHdbServiceImpl implements DmsHdbService {
return this.dmsHdbDAO.selectDmsHdbPerYearChart(searchVO); return this.dmsHdbDAO.selectDmsHdbPerYearChart(searchVO);
} }
public DmsHdbGraphVO selectDmsHdbForMonthChart(DmsHdbDefaultVO searchVO) { /*
return this.dmsHdbDAO.selectDmsHdbForMonthChart(searchVO); * public DmsHdbGraphVO selectDmsHdbForMonthChart(DmsHdbDefaultVO searchVO) {
} * return this.dmsHdbDAO.selectDmsHdbForMonthChart(searchVO); }
*/
} }

View File

@@ -46,6 +46,7 @@ import egovframework.edosi.egov.helper.UserDetailsHelper;
import egovframework.edosi.filter.XssFilter; import egovframework.edosi.filter.XssFilter;
import egovframework.edosi.resource.EdosiResource; import egovframework.edosi.resource.EdosiResource;
import egovframework.rte.fdl.property.EgovPropertyService; import egovframework.rte.fdl.property.EgovPropertyService;
import egovframework.rte.psl.dataaccess.util.EgovMap;
import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo; import egovframework.rte.ptl.mvc.tags.ui.pagination.PaginationInfo;
import java.util.HashMap; import java.util.HashMap;
import java.util.Iterator; import java.util.Iterator;
@@ -86,9 +87,6 @@ public class DmsHdbController {
String prjSeq = request.getParameter("prjSeq"); String prjSeq = request.getParameter("prjSeq");
Map<String, Object> prjInfo = (Map<String, Object>) request.getSession().getAttribute("prjInfo"); Map<String, Object> prjInfo = (Map<String, Object>) request.getSession().getAttribute("prjInfo");
String prjNm = prjInfo == null ? null : (String) prjInfo.get("prjNm"); String prjNm = prjInfo == null ? null : (String) prjInfo.get("prjNm");
String hdbStsA = prjInfo == null ? null : (String) prjInfo.get("hdbStsA");
String hdbStsB = prjInfo == null ? null : (String) prjInfo.get("hdbStsB");
String hdbStsC = prjInfo == null ? null : (String) prjInfo.get("hdbStsC");
if (moveDetail != null || prjSeq != null) { if (moveDetail != null || prjSeq != null) {
request.getSession().setAttribute("prjSeq", (Object)prjSeq); request.getSession().setAttribute("prjSeq", (Object)prjSeq);
@@ -114,9 +112,6 @@ public class DmsHdbController {
model.addAttribute("ROLE_CUS", (Object)UserDetailsHelper.isRole((String)"ROLE_CUS")); model.addAttribute("ROLE_CUS", (Object)UserDetailsHelper.isRole((String)"ROLE_CUS"));
model.addAttribute("ROLE_EMP", (Object)UserDetailsHelper.isRole((String)"ROLE_EMP")); model.addAttribute("ROLE_EMP", (Object)UserDetailsHelper.isRole((String)"ROLE_EMP"));
model.addAttribute("prjNm", prjNm); model.addAttribute("prjNm", prjNm);
model.addAttribute("hdbStsA", hdbStsA);
model.addAttribute("hdbStsB", hdbStsB);
model.addAttribute("hdbStsC", hdbStsC);
this.initModelData(model, bmode); this.initModelData(model, bmode);
return viewName; return viewName;
} }
@@ -159,6 +154,12 @@ public class DmsHdbController {
if (totCnt > 0) { if (totCnt > 0) {
List dmsHdbList = this.dmsHdbService.selectDmsHdbList(searchVO); List dmsHdbList = this.dmsHdbService.selectDmsHdbList(searchVO);
model.addAttribute("resultList", (Object)dmsHdbList); model.addAttribute("resultList", (Object)dmsHdbList);
List dmsHdbStatList = this.dmsHdbService.selectDmsHdbStat(searchVO);
EgovMap dmsHdbStat = null;
if (dmsHdbStatList != null && !dmsHdbStatList.isEmpty()) {
dmsHdbStat = (EgovMap) dmsHdbStatList.get(0);
}
model.addAttribute("dmsHdbStat", (Object)dmsHdbStat);
} }
} }
catch (Exception e) { catch (Exception e) {
@@ -170,8 +171,11 @@ public class DmsHdbController {
List<DmsHdbGraphVO> annualList = dmsHdbService.selectDmsHdbPerYearChart(searchVO); List<DmsHdbGraphVO> annualList = dmsHdbService.selectDmsHdbPerYearChart(searchVO);
model.addAttribute("annualList", annualList); model.addAttribute("annualList", annualList);
DmsHdbGraphVO monthlyList = dmsHdbService.selectDmsHdbForMonthChart(searchVO); /*
model.addAttribute("monthlyList", monthlyList); * DmsHdbGraphVO monthlyList =
* dmsHdbService.selectDmsHdbForMonthChart(searchVO);
* model.addAttribute("monthlyList", monthlyList);
*/
// model.addAttribute("year", year); // model.addAttribute("year", year);
return "dms/dmsHdb/DmsHdbList"; return "dms/dmsHdb/DmsHdbList";

View File

@@ -51,9 +51,6 @@ public class TemplateController {
HashMap<String, String> prjInfo = new HashMap<String, String>(); HashMap<String, String> prjInfo = new HashMap<String, String>();
prjInfo.put("prjSeq", prjSeq); prjInfo.put("prjSeq", prjSeq);
prjInfo.put("prjNm", dmsPrjVO.getPrjNm()); prjInfo.put("prjNm", dmsPrjVO.getPrjNm());
prjInfo.put("hdbStsA", request.getParameter("hdbStsA"));
prjInfo.put("hdbStsB", request.getParameter("hdbStsB"));
prjInfo.put("hdbStsC", request.getParameter("hdbStsC"));
request.getSession().setAttribute("prjInfo", prjInfo); request.getSession().setAttribute("prjInfo", prjInfo);
} }
} }

View File

@@ -32,6 +32,8 @@ import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap; import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import java.io.IOException;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller @Controller
public class MainController { public class MainController {
@@ -88,5 +90,12 @@ public class MainController {
} }
return startPage; return startPage;
} }
@RequestMapping(value = "/health.do", method = RequestMethod.GET)
public void health(HttpServletResponse response) throws IOException {
response.setStatus(HttpServletResponse.SC_OK);
response.setContentType("text/plain;charset=UTF-8");
response.getWriter().write("OK");
}
} }

View File

@@ -0,0 +1,154 @@
#-----------------------------------------------------------------------
#
# globals.properties : \uC2DC\uC2A4\uD15C
#
#-----------------------------------------------------------------------
# 1. key = value \uAD6C\uC870\uC785\uB2C8\uB2E4.
# 2. key\uAC12\uC740 \uACF5\uBC31\uBB38\uC790\uB97C \uD3EC\uD568\uBD88\uAC00, value\uAC12\uC740 \uACF5\uBC31\uBB38\uC790\uB97C \uAC00\uB2A5
# 3. key\uAC12\uC73C\uB85C \uD55C\uAE00\uC744 \uC0AC\uC6A9\uBD88\uAC00, value\uAC12\uC740 \uD55C\uAE00\uC0AC\uC6A9\uC774 \uAC00\uB2A5
# 4. \uC904\uC744 \uBC14\uAFC0 \uD544\uC694\uAC00 \uC788\uC73C\uBA74 '\'\uB97C \uB77C\uC778\uC758 \uB05D\uC5D0 \uCD94\uAC00(\uB9CC\uC57D '\'\uBB38\uC790\uB97C \uC0AC\uC6A9\uD574\uC57C \uD558\uB294 \uACBD\uC6B0\uB294 '\\'\uB97C \uC0AC\uC6A9)
# 5. Windows\uC5D0\uC11C\uC758 \uB514\uB809\uD1A0\uB9AC \uD45C\uC2DC : '\\' or '/' ('\' \uC0AC\uC6A9\uD558\uBA74 \uC548\uB428)
# 6. Unix\uC5D0\uC11C\uC758 \uB514\uB809\uD1A0\uB9AC \uD45C\uC2DC : '/'
# 7. \uC8FC\uC11D\uBB38 \uCC98\uB9AC\uB294 #\uC0AC\uC6A9
# 8. value\uAC12 \uB4A4\uC5D0 \uC2A4\uD398\uC774\uC2A4\uAC00 \uC874\uC7AC\uD558\uB294 \uACBD\uC6B0 \uC11C\uBE14\uB9BF\uC5D0\uC11C \uCC38\uC870\uD560\uB54C\uB294 \uC5D0\uB7EC\uBC1C\uC0DD\uD560 \uC218 \uC788\uC73C\uBBC0\uB85C trim()\uD558\uAC70\uB098 \uB9C8\uC9C0\uB9C9 \uACF5\uBC31\uC5C6\uC774 properties \uAC12\uC744 \uC124\uC815\uD560\uAC83
#-----------------------------------------------------------------------
# \uC6B4\uC601\uC11C\uBC84 \uD0C0\uC785(WINDOWS, UNIX)
Globals.OsType =UNIX
# DB\uC11C\uBC84 \uD0C0\uC785(ORACLE, MYSQL) - datasource \uBC0F sqlMap \uD30C\uC77C \uC9C0\uC815\uC5D0 \uC0AC\uC6A9\uB428
#Globals.DbType =oracle
Globals.DbType =mysql
# \uC704\uC800\uB4DC \uC0AC\uC6A9\uC2DC \uB370\uC774\uD130\uBCA0\uC774\uC2A4 \uAD00\uB828 \uC124\uC815\uC744 \uBD88\uB7EC\uC634
#Globals.DriverClassName=oracle.jdbc.OracleDriver
#Globals.Url=jdbc:oracle:thin:@122.199.152.76:1521:oradev
#Globals.UserName =say_cms
#Globals.Password =sksrhdqnffkr
## \uC138\uC774\uD5EC\uD504\uB370\uC2A4\uD06C
# mysql 5.X
#Globals.DriverClassName=com.mysql.jdbc.Driver
# mysql 8.4.7
Globals.DriverClassName=com.mysql.cj.jdbc.Driver
#\uC6B4\uC601
#Globals.Url=jdbc:mysql://192.168.0.217:3306/helpdesk_db?characterEncoding=utf8
#\uAC1C\uBC1C
## mysql 5.X
#Globals.Url=jdbc:mysql://192.168.0.114:13316/helpdesk_db?characterEncoding=utf8
## mysql 8.4.7
Globals.Url=jdbc:mysql://192.168.0.114:13316/helpdesk_db?characterEncoding=utf8
Globals.UserName =helpdesk
Globals.Password =helpdesk
# MainPage Setting
Globals.MainPage =/EgovContent.do
#\uD1B5\uD569\uBA54\uC778\uBA54\uB274
#Globals.MainPage = /sym/mnu/mpm/EgovMainMenuHome.do
SMS.DriverClassName=com.mysql.jdbc.Driver
SMS.Url=jdbc:mysql://122.199.152.77:3306/edosi?characterEncoding=utf8
SMS.UserName=edosi
SMS.Password=!dlehtl#
SMS.callback=07041152667
SMS.ddd=
SMS.guk=
Globals.Version=1.0
Globals.OrgKey=
Globals.OrgNm=\uC138\uC774\uC815\uBCF4\uAE30\uC220
Globals.OrgCode=8188
#Globals.AccessIp=10
Globals.SiteTitle=\uC138\uC774\uC815\uBCF4\uAE30\uC220 Help-desk (\uAC1C\uBC1C)
#Globals.MobileStartPage=/mobile/intro.do
Globals.MobileStartPage=/login.do
PushUrl=http://www.sejong.go.kr/sotong
#PushUrl=http://122.199.152.176:8080/sotong
fileLogUseYn=N
fileLogPath=/webapps/
MENU.PRJ = \uD504\uB85C\uC81D\uD2B8\uAD00\uB9AC
MENU.USER = \uD68C\uC6D0\uAD00\uB9AC
MENU.HDB = \uC694\uCCAD\uC791\uC5C5\uAD00\uB9AC
MENU.DTB = \uC790\uB8CC\uC2E4
MENU.MYPAGE = \uB9C8\uC774\uD398\uC774\uC9C0
MENU.BOARD.STT = \uAC8C\uC2DC\uD310\uC774\uC6A9\uD604\uD669
# \uD658\uACBD\uD30C\uC77C \uC704\uCE58
Globals.ShellFilePath =globals.properties
Globals.ServerConfPath =conf/server.properties
Globals.ClientConfPath =conf/client.properties
Globals.FileFormatPath =conf/format.properties
Globals.GPKIConfPath =conf/gpki.properties
Globals.ConfPath =conf
Globals.MailRequestPath =mail/request/
Globals.MailRResponsePath =mail/response/
Globals.SMEConfigPath =conf/SMEConfig.properties
# WINDOWS\uC6A9 \uC258\uD30C\uC77C \uC815\uBCF4
SHELL.WINDOWS.getHostName =prg/sh_001.bat
SHELL.WINDOWS.getDrctryByOwner =prg/getDrctryByOwner.bat
SHELL.WINDOWS.getDrctryOwner =prg/getDrctryOwner.bat
SHELL.WINDOWS.moveDrctry =prg/moveDrctry.bat
SHELL.WINDOWS.compileSchema =prg/compileSchema.bat
SHELL.WINDOWS.getDiskAttrb =prg/getDiskAttrb.bat
SHELL.WINDOWS.getDiskCpcty =prg/getDiskCpcty.bat
SHELL.WINDOWS.getDiskExst =prg/getDiskExst.bat
# UNIX\uC6A9 \uC258\uD30C\uC77C \uC815\uBCF4 - \uAC1C\uBC1Cwas jeus\uC5D0\uC11C \uC0AC\uC6A9\uD560\uB54C \uAE30\uC900
SHELL.UNIX.getHostName =prg/sh_001.sh
SHELL.UNIX.getDrctryByOwner =prg/getDrctryByOwner.sh
SHELL.UNIX.getDrctryOwner =prg/getDrctryOwner.sh
SHELL.UNIX.getDrctryAccess =prg/getDrctryAccess.sh
SHELL.UNIX.getMountLc =prg/getMountLc.sh
SHELL.UNIX.getDiskName =prg/getNetWorkInfo.sh
SHELL.UNIX.moveDrctry =prg/moveDrctry.sh
SHELL.UNIX.compileSchema =prg/compileSchema.sh
SHELL.UNIX.getDiskAttrb =prg/getDiskAttrb.sh
SHELL.UNIX.getDiskCpcty =prg/getDiskCpcty.sh
SHELL.UNIX.getDiskExst =prg/getDiskExst.sh
SHELL.UNIX.getProcInfo =prg/getProcInfo.sh
# LINUX\uC6A9 \uC258\uD30C\uC77C \uC815\uBCF4
# \uC5F0\uACC4
# \uAE30\uAD00\uCF54\uB4DC\uC218\uC2E0\uC6A9(\uACBD\uB85C \uC124\uC815\uC740 \uBC18\uB4DC\uC2DC \uC808\uB300\uACBD\uB85C\uB97C \uC0AC\uC6A9\uD574\uC57C\uD568.)
CNTC.INSTTCODE.DIR.rcv =D:/tmp/test/rcv/
CNTC.INSTTCODE.DIR.rcvold =D:/tmp/test/rcvold/
CNTC.INSTTCODE.DIR.bin =D:/tmp/test/bin/
CNTC.INSTTCODE.CMD.edircv =gcc_edircv.bat
CNTC.INSTTCODE.CMD.edircvmsg =gcc_edircvmsg.bat
CNTC.INSTTCODE.INFO.userid =USERID
CNTC.INSTTCODE.INFO.userpw =******
# \uD30C\uC77C \uC5C5\uB85C\uB4DC \uACBD\uB85C(\uACBD\uB85C \uC124\uC815\uC740 \uBC18\uB4DC\uC2DC \uC808\uB300\uACBD\uB85C\uB97C \uC0AC\uC6A9\uD574\uC57C\uD568, \uACBD\uB85C \uB4A4\uC5D0 /\uB97C \uBD99\uC5EC \uC8FC\uC5B4\uC57C\uD568.)
#Globals.fileStorePath =/webapps/upload/
Globals.fileStorePath =/webapps/proj/help_desk/upload/
# \uD30C\uC77C \uB3D9\uAE30\uD654 \uCEF4\uD3EC\uB10C\uD2B8\uC5D0\uC11C \uC0AC\uC6A9\uD560 \uD30C\uC77C \uC5C5\uB85C\uB4DC \uACBD\uB85C(\uACBD\uB85C \uC124\uC815\uC740 \uBC18\uB4DC\uC2DC \uC808\uB300\uACBD\uB85C\uB97C \uC0AC\uC6A9\uD574\uC57C\uD568, \uACBD\uB85C \uB4A4\uC5D0 /\uB97C \uBD99\uC5EC \uC8FC\uC5B4\uC57C\uD568.)
Globals.SynchrnServerPath =C:/egovframework/upload/Synch/
# for JFile properties
system.uploadpath =C:/egovframework/upload/
no.image.url =/resources/jfile/swfupload/images/no_img.gif
ftp.server.ip =127.0.0.1
ftp.user.id =test
ftp.user.password =test
# Social(Facebook, Oauth \uCEF4\uD3EC\uB10C\uD2B8 \uC0AC\uC6A9\uC2DC \uD65C\uC6A9)
facebook.appId =
facebook.appSecret =
twitter.consumerKey =
twitter.consumerSecret =
#LDAP\uC870\uC9C1\uB3C4\uAD00\uB9AC \uCEF4\uD3EC\uB10C\uD2B8 \uC0AC\uC6A9\uC2DC LDAP\uC11C\uBC84\uC124\uC815\uC815\uBCF4 \uD544\uC694
ldap.url =ldap://localhost:10389
ldap.rootDn =c=kr
ldap.username =uid=admin,ou=system
ldap.password =secret

View File

@@ -0,0 +1,152 @@
#-----------------------------------------------------------------------
#
# globals.properties : \uC2DC\uC2A4\uD15C
#
#-----------------------------------------------------------------------
# 1. key = value \uAD6C\uC870\uC785\uB2C8\uB2E4.
# 2. key\uAC12\uC740 \uACF5\uBC31\uBB38\uC790\uB97C \uD3EC\uD568\uBD88\uAC00, value\uAC12\uC740 \uACF5\uBC31\uBB38\uC790\uB97C \uAC00\uB2A5
# 3. key\uAC12\uC73C\uB85C \uD55C\uAE00\uC744 \uC0AC\uC6A9\uBD88\uAC00, value\uAC12\uC740 \uD55C\uAE00\uC0AC\uC6A9\uC774 \uAC00\uB2A5
# 4. \uC904\uC744 \uBC14\uAFC0 \uD544\uC694\uAC00 \uC788\uC73C\uBA74 '\'\uB97C \uB77C\uC778\uC758 \uB05D\uC5D0 \uCD94\uAC00(\uB9CC\uC57D '\'\uBB38\uC790\uB97C \uC0AC\uC6A9\uD574\uC57C \uD558\uB294 \uACBD\uC6B0\uB294 '\\'\uB97C \uC0AC\uC6A9)
# 5. Windows\uC5D0\uC11C\uC758 \uB514\uB809\uD1A0\uB9AC \uD45C\uC2DC : '\\' or '/' ('\' \uC0AC\uC6A9\uD558\uBA74 \uC548\uB428)
# 6. Unix\uC5D0\uC11C\uC758 \uB514\uB809\uD1A0\uB9AC \uD45C\uC2DC : '/'
# 7. \uC8FC\uC11D\uBB38 \uCC98\uB9AC\uB294 #\uC0AC\uC6A9
# 8. value\uAC12 \uB4A4\uC5D0 \uC2A4\uD398\uC774\uC2A4\uAC00 \uC874\uC7AC\uD558\uB294 \uACBD\uC6B0 \uC11C\uBE14\uB9BF\uC5D0\uC11C \uCC38\uC870\uD560\uB54C\uB294 \uC5D0\uB7EC\uBC1C\uC0DD\uD560 \uC218 \uC788\uC73C\uBBC0\uB85C trim()\uD558\uAC70\uB098 \uB9C8\uC9C0\uB9C9 \uACF5\uBC31\uC5C6\uC774 properties \uAC12\uC744 \uC124\uC815\uD560\uAC83
#-----------------------------------------------------------------------
# \uC6B4\uC601\uC11C\uBC84 \uD0C0\uC785(WINDOWS, UNIX)
Globals.OsType =UNIX
# DB\uC11C\uBC84 \uD0C0\uC785(ORACLE, MYSQL) - datasource \uBC0F sqlMap \uD30C\uC77C \uC9C0\uC815\uC5D0 \uC0AC\uC6A9\uB428
#Globals.DbType =oracle
Globals.DbType =mysql
# \uC704\uC800\uB4DC \uC0AC\uC6A9\uC2DC \uB370\uC774\uD130\uBCA0\uC774\uC2A4 \uAD00\uB828 \uC124\uC815\uC744 \uBD88\uB7EC\uC634
#Globals.DriverClassName=oracle.jdbc.OracleDriver
#Globals.Url=jdbc:oracle:thin:@122.199.152.76:1521:oradev
#Globals.UserName =say_cms
#Globals.Password =sksrhdqnffkr
## \uC138\uC774\uD5EC\uD504\uB370\uC2A4\uD06C
Globals.DriverClassName=com.mysql.jdbc.Driver
#\uC6B4\uC601
Globals.Url=jdbc:mysql://192.168.0.217:3306/helpdesk_db?characterEncoding=utf8
#\uAC1C\uBC1C
#Globals.Url=jdbc:mysql://192.168.0.114:13314/helpdesk_db?characterEncoding=utf8
Globals.UserName =helpdesk
Globals.Password =helpdesk
# MainPage Setting
Globals.MainPage =/EgovContent.do
#\uD1B5\uD569\uBA54\uC778\uBA54\uB274
#Globals.MainPage = /sym/mnu/mpm/EgovMainMenuHome.do
#SMS.DriverClassName=com.mysql.jdbc.Driver
#SMS.Url=jdbc:mysql://122.199.152.77:3306/edosi?characterEncoding=utf8
#SMS.UserName=edosi
#SMS.Password=!dlehtl#
SMS.DriverClassName=
SMS.Url=
SMS.UserName=
SMS.Password=
SMS.callback=
SMS.ddd=
SMS.guk=
Globals.Version=1.0
Globals.OrgKey=
Globals.OrgNm=\uC138\uC774\uC815\uBCF4\uAE30\uC220
Globals.OrgCode=8188
#Globals.AccessIp=10
Globals.SiteTitle=\uC138\uC774\uC815\uBCF4\uAE30\uC220 Help-desk
#Globals.MobileStartPage=/mobile/intro.do
Globals.MobileStartPage=/login.do
#PushUrl=http://www.sejong.go.kr/sotong
#PushUrl=http://122.199.152.176:8080/sotong
PushUrl=
fileLogUseYn=N
fileLogPath=/webapps/
MENU.PRJ = \uD504\uB85C\uC81D\uD2B8\uAD00\uB9AC
MENU.USER = \uD68C\uC6D0\uAD00\uB9AC
MENU.HDB = \uC694\uCCAD\uC791\uC5C5\uAD00\uB9AC
MENU.DTB = \uC790\uB8CC\uC2E4
MENU.MYPAGE = \uB9C8\uC774\uD398\uC774\uC9C0
MENU.BOARD.STT = \uAC8C\uC2DC\uD310\uC774\uC6A9\uD604\uD669
# \uD658\uACBD\uD30C\uC77C \uC704\uCE58
Globals.ShellFilePath =globals.properties
Globals.ServerConfPath =conf/server.properties
Globals.ClientConfPath =conf/client.properties
Globals.FileFormatPath =conf/format.properties
Globals.GPKIConfPath =conf/gpki.properties
Globals.ConfPath =conf
Globals.MailRequestPath =mail/request/
Globals.MailRResponsePath =mail/response/
Globals.SMEConfigPath =conf/SMEConfig.properties
# WINDOWS\uC6A9 \uC258\uD30C\uC77C \uC815\uBCF4
SHELL.WINDOWS.getHostName =prg/sh_001.bat
SHELL.WINDOWS.getDrctryByOwner =prg/getDrctryByOwner.bat
SHELL.WINDOWS.getDrctryOwner =prg/getDrctryOwner.bat
SHELL.WINDOWS.moveDrctry =prg/moveDrctry.bat
SHELL.WINDOWS.compileSchema =prg/compileSchema.bat
SHELL.WINDOWS.getDiskAttrb =prg/getDiskAttrb.bat
SHELL.WINDOWS.getDiskCpcty =prg/getDiskCpcty.bat
SHELL.WINDOWS.getDiskExst =prg/getDiskExst.bat
# UNIX\uC6A9 \uC258\uD30C\uC77C \uC815\uBCF4 - \uAC1C\uBC1Cwas jeus\uC5D0\uC11C \uC0AC\uC6A9\uD560\uB54C \uAE30\uC900
SHELL.UNIX.getHostName =prg/sh_001.sh
SHELL.UNIX.getDrctryByOwner =prg/getDrctryByOwner.sh
SHELL.UNIX.getDrctryOwner =prg/getDrctryOwner.sh
SHELL.UNIX.getDrctryAccess =prg/getDrctryAccess.sh
SHELL.UNIX.getMountLc =prg/getMountLc.sh
SHELL.UNIX.getDiskName =prg/getNetWorkInfo.sh
SHELL.UNIX.moveDrctry =prg/moveDrctry.sh
SHELL.UNIX.compileSchema =prg/compileSchema.sh
SHELL.UNIX.getDiskAttrb =prg/getDiskAttrb.sh
SHELL.UNIX.getDiskCpcty =prg/getDiskCpcty.sh
SHELL.UNIX.getDiskExst =prg/getDiskExst.sh
SHELL.UNIX.getProcInfo =prg/getProcInfo.sh
# LINUX\uC6A9 \uC258\uD30C\uC77C \uC815\uBCF4
# \uC5F0\uACC4
# \uAE30\uAD00\uCF54\uB4DC\uC218\uC2E0\uC6A9(\uACBD\uB85C \uC124\uC815\uC740 \uBC18\uB4DC\uC2DC \uC808\uB300\uACBD\uB85C\uB97C \uC0AC\uC6A9\uD574\uC57C\uD568.)
CNTC.INSTTCODE.DIR.rcv =D:/tmp/test/rcv/
CNTC.INSTTCODE.DIR.rcvold =D:/tmp/test/rcvold/
CNTC.INSTTCODE.DIR.bin =D:/tmp/test/bin/
CNTC.INSTTCODE.CMD.edircv =gcc_edircv.bat
CNTC.INSTTCODE.CMD.edircvmsg =gcc_edircvmsg.bat
CNTC.INSTTCODE.INFO.userid =USERID
CNTC.INSTTCODE.INFO.userpw =******
# \uD30C\uC77C \uC5C5\uB85C\uB4DC \uACBD\uB85C(\uACBD\uB85C \uC124\uC815\uC740 \uBC18\uB4DC\uC2DC \uC808\uB300\uACBD\uB85C\uB97C \uC0AC\uC6A9\uD574\uC57C\uD568, \uACBD\uB85C \uB4A4\uC5D0 /\uB97C \uBD99\uC5EC \uC8FC\uC5B4\uC57C\uD568.)
#Globals.fileStorePath =/webapps/upload/
Globals.fileStorePath =/webapps/proj/help_desk/upload/
# \uD30C\uC77C \uB3D9\uAE30\uD654 \uCEF4\uD3EC\uB10C\uD2B8\uC5D0\uC11C \uC0AC\uC6A9\uD560 \uD30C\uC77C \uC5C5\uB85C\uB4DC \uACBD\uB85C(\uACBD\uB85C \uC124\uC815\uC740 \uBC18\uB4DC\uC2DC \uC808\uB300\uACBD\uB85C\uB97C \uC0AC\uC6A9\uD574\uC57C\uD568, \uACBD\uB85C \uB4A4\uC5D0 /\uB97C \uBD99\uC5EC \uC8FC\uC5B4\uC57C\uD568.)
Globals.SynchrnServerPath =C:/egovframework/upload/Synch/
# for JFile properties
system.uploadpath =C:/egovframework/upload/
no.image.url =/resources/jfile/swfupload/images/no_img.gif
ftp.server.ip =127.0.0.1
ftp.user.id =test
ftp.user.password =test
# Social(Facebook, Oauth \uCEF4\uD3EC\uB10C\uD2B8 \uC0AC\uC6A9\uC2DC \uD65C\uC6A9)
facebook.appId =
facebook.appSecret =
twitter.consumerKey =
twitter.consumerSecret =
#LDAP\uC870\uC9C1\uB3C4\uAD00\uB9AC \uCEF4\uD3EC\uB10C\uD2B8 \uC0AC\uC6A9\uC2DC LDAP\uC11C\uBC84\uC124\uC815\uC815\uBCF4 \uD544\uC694
ldap.url =ldap://localhost:10389
ldap.rootDn =c=kr
ldap.username =uid=admin,ou=system
ldap.password =secret

View File

@@ -0,0 +1,147 @@
#-----------------------------------------------------------------------
#
# globals.properties : \uc2dc\uc2a4\ud15c
#
#-----------------------------------------------------------------------
# 1. key = value \uad6c\uc870\uc785\ub2c8\ub2e4.
# 2. key\uac12\uc740 \uacf5\ubc31\ubb38\uc790\ub97c \ud3ec\ud568\ubd88\uac00, value\uac12\uc740 \uacf5\ubc31\ubb38\uc790\ub97c \uac00\ub2a5
# 3. key\uac12\uc73c\ub85c \ud55c\uae00\uc744 \uc0ac\uc6a9\ubd88\uac00, value\uac12\uc740 \ud55c\uae00\uc0ac\uc6a9\uc774 \uac00\ub2a5
# 4. \uc904\uc744 \ubc14\uafc0 \ud544\uc694\uac00 \uc788\uc73c\uba74 '\'\ub97c \ub77c\uc778\uc758 \ub05d\uc5d0 \ucd94\uac00(\ub9cc\uc57d '\'\ubb38\uc790\ub97c \uc0ac\uc6a9\ud574\uc57c \ud558\ub294 \uacbd\uc6b0\ub294 '\\'\ub97c \uc0ac\uc6a9)
# 5. Windows\uc5d0\uc11c\uc758 \ub514\ub809\ud1a0\ub9ac \ud45c\uc2dc : '\\' or '/' ('\' \uc0ac\uc6a9\ud558\uba74 \uc548\ub428)
# 6. Unix\uc5d0\uc11c\uc758 \ub514\ub809\ud1a0\ub9ac \ud45c\uc2dc : '/'
# 7. \uc8fc\uc11d\ubb38 \ucc98\ub9ac\ub294 #\uc0ac\uc6a9
# 8. value\uac12 \ub4a4\uc5d0 \uc2a4\ud398\uc774\uc2a4\uac00 \uc874\uc7ac\ud558\ub294 \uacbd\uc6b0 \uc11c\ube14\ub9bf\uc5d0\uc11c \ucc38\uc870\ud560\ub54c\ub294 \uc5d0\ub7ec\ubc1c\uc0dd\ud560 \uc218 \uc788\uc73c\ubbc0\ub85c trim()\ud558\uac70\ub098 \ub9c8\uc9c0\ub9c9 \uacf5\ubc31\uc5c6\uc774 properties \uac12\uc744 \uc124\uc815\ud560\uac83
#-----------------------------------------------------------------------
# \uc6b4\uc601\uc11c\ubc84 \ud0c0\uc785(WINDOWS, UNIX)
Globals.OsType =UNIX
# DB\uc11c\ubc84 \ud0c0\uc785(ORACLE, MYSQL) - datasource \ubc0f sqlMap \ud30c\uc77c \uc9c0\uc815\uc5d0 \uc0ac\uc6a9\ub428
#Globals.DbType =oracle
Globals.DbType =mysql
# \uc704\uc800\ub4dc \uc0ac\uc6a9\uc2dc \ub370\uc774\ud130\ubca0\uc774\uc2a4 \uad00\ub828 \uc124\uc815\uc744 \ubd88\ub7ec\uc634
#Globals.DriverClassName=oracle.jdbc.OracleDriver
#Globals.Url=jdbc:oracle:thin:@122.199.152.76:1521:oradev
#Globals.UserName =say_cms
#Globals.Password =sksrhdqnffkr
## \uc138\uc774\ud5ec\ud504\ub370\uc2a4\ud06c
Globals.DriverClassName=com.mysql.jdbc.Driver
#\uc6b4\uc601
#Globals.Url=jdbc:mysql://192.168.0.217:3306/helpdesk_db?characterEncoding=utf8
#\uac1c\ubc1c
Globals.Url=jdbc:mysql://192.168.0.114:13314/helpdesk_db?characterEncoding=utf8
Globals.UserName =helpdesk
Globals.Password =helpdesk
# MainPage Setting
Globals.MainPage =/EgovContent.do
#\ud1b5\ud569\uba54\uc778\uba54\ub274
#Globals.MainPage = /sym/mnu/mpm/EgovMainMenuHome.do
SMS.DriverClassName=com.mysql.jdbc.Driver
SMS.Url=jdbc:mysql://122.199.152.77:3306/edosi?characterEncoding=utf8
SMS.UserName=edosi
SMS.Password=!dlehtl#
SMS.callback=07041152667
SMS.ddd=
SMS.guk=
Globals.Version=1.0
Globals.OrgKey=
Globals.OrgNm=\uc138\uc774\uc815\ubcf4\uae30\uc220
Globals.OrgCode=8188
#Globals.AccessIp=10
Globals.SiteTitle=\uc138\uc774\uc815\ubcf4\uae30\uc220 Help-desk (\uc2a4\ud14c\uc774\uc9d5)
#Globals.MobileStartPage=/mobile/intro.do
Globals.MobileStartPage=/login.do
PushUrl=http://www.sejong.go.kr/sotong
#PushUrl=http://122.199.152.176:8080/sotong
fileLogUseYn=N
fileLogPath=/webapps/
MENU.PRJ = \ud504\ub85c\uc81d\ud2b8\uad00\ub9ac
MENU.USER = \ud68c\uc6d0\uad00\ub9ac
MENU.HDB = \uc694\uccad\uc791\uc5c5\uad00\ub9ac
MENU.DTB = \uc790\ub8cc\uc2e4
MENU.MYPAGE = \ub9c8\uc774\ud398\uc774\uc9c0
MENU.BOARD.STT = \uac8c\uc2dc\ud310\uc774\uc6a9\ud604\ud669
# \ud658\uacbd\ud30c\uc77c \uc704\uce58
Globals.ShellFilePath =globals.properties
Globals.ServerConfPath =conf/server.properties
Globals.ClientConfPath =conf/client.properties
Globals.FileFormatPath =conf/format.properties
Globals.GPKIConfPath =conf/gpki.properties
Globals.ConfPath =conf
Globals.MailRequestPath =mail/request/
Globals.MailRResponsePath =mail/response/
Globals.SMEConfigPath =conf/SMEConfig.properties
# WINDOWS\uc6a9 \uc258\ud30c\uc77c \uc815\ubcf4
SHELL.WINDOWS.getHostName =prg/sh_001.bat
SHELL.WINDOWS.getDrctryByOwner =prg/getDrctryByOwner.bat
SHELL.WINDOWS.getDrctryOwner =prg/getDrctryOwner.bat
SHELL.WINDOWS.moveDrctry =prg/moveDrctry.bat
SHELL.WINDOWS.compileSchema =prg/compileSchema.bat
SHELL.WINDOWS.getDiskAttrb =prg/getDiskAttrb.bat
SHELL.WINDOWS.getDiskCpcty =prg/getDiskCpcty.bat
SHELL.WINDOWS.getDiskExst =prg/getDiskExst.bat
# UNIX\uc6a9 \uc258\ud30c\uc77c \uc815\ubcf4 - \uac1c\ubc1cwas jeus\uc5d0\uc11c \uc0ac\uc6a9\ud560\ub54c \uae30\uc900
SHELL.UNIX.getHostName =prg/sh_001.sh
SHELL.UNIX.getDrctryByOwner =prg/getDrctryByOwner.sh
SHELL.UNIX.getDrctryOwner =prg/getDrctryOwner.sh
SHELL.UNIX.getDrctryAccess =prg/getDrctryAccess.sh
SHELL.UNIX.getMountLc =prg/getMountLc.sh
SHELL.UNIX.getDiskName =prg/getNetWorkInfo.sh
SHELL.UNIX.moveDrctry =prg/moveDrctry.sh
SHELL.UNIX.compileSchema =prg/compileSchema.sh
SHELL.UNIX.getDiskAttrb =prg/getDiskAttrb.sh
SHELL.UNIX.getDiskCpcty =prg/getDiskCpcty.sh
SHELL.UNIX.getDiskExst =prg/getDiskExst.sh
SHELL.UNIX.getProcInfo =prg/getProcInfo.sh
# LINUX\uc6a9 \uc258\ud30c\uc77c \uc815\ubcf4
# \uc5f0\uacc4
# \uae30\uad00\ucf54\ub4dc\uc218\uc2e0\uc6a9(\uacbd\ub85c \uc124\uc815\uc740 \ubc18\ub4dc\uc2dc \uc808\ub300\uacbd\ub85c\ub97c \uc0ac\uc6a9\ud574\uc57c\ud568.)
CNTC.INSTTCODE.DIR.rcv =D:/tmp/test/rcv/
CNTC.INSTTCODE.DIR.rcvold =D:/tmp/test/rcvold/
CNTC.INSTTCODE.DIR.bin =D:/tmp/test/bin/
CNTC.INSTTCODE.CMD.edircv =gcc_edircv.bat
CNTC.INSTTCODE.CMD.edircvmsg =gcc_edircvmsg.bat
CNTC.INSTTCODE.INFO.userid =USERID
CNTC.INSTTCODE.INFO.userpw =******
# \ud30c\uc77c \uc5c5\ub85c\ub4dc \uacbd\ub85c(\uacbd\ub85c \uc124\uc815\uc740 \ubc18\ub4dc\uc2dc \uc808\ub300\uacbd\ub85c\ub97c \uc0ac\uc6a9\ud574\uc57c\ud568, \uacbd\ub85c \ub4a4\uc5d0 /\ub97c \ubd99\uc5ec \uc8fc\uc5b4\uc57c\ud568.)
#Globals.fileStorePath =/webapps/upload/
Globals.fileStorePath =/webapps/proj/help_desk/upload/
# \ud30c\uc77c \ub3d9\uae30\ud654 \ucef4\ud3ec\ub10c\ud2b8\uc5d0\uc11c \uc0ac\uc6a9\ud560 \ud30c\uc77c \uc5c5\ub85c\ub4dc \uacbd\ub85c(\uacbd\ub85c \uc124\uc815\uc740 \ubc18\ub4dc\uc2dc \uc808\ub300\uacbd\ub85c\ub97c \uc0ac\uc6a9\ud574\uc57c\ud568, \uacbd\ub85c \ub4a4\uc5d0 /\ub97c \ubd99\uc5ec \uc8fc\uc5b4\uc57c\ud568.)
Globals.SynchrnServerPath =C:/egovframework/upload/Synch/
# for JFile properties
system.uploadpath =C:/egovframework/upload/
no.image.url =/resources/jfile/swfupload/images/no_img.gif
ftp.server.ip =127.0.0.1
ftp.user.id =test
ftp.user.password =test
# Social(Facebook, Oauth \ucef4\ud3ec\ub10c\ud2b8 \uc0ac\uc6a9\uc2dc \ud65c\uc6a9)
facebook.appId =
facebook.appSecret =
twitter.consumerKey =
twitter.consumerSecret =
#LDAP\uc870\uc9c1\ub3c4\uad00\ub9ac \ucef4\ud3ec\ub10c\ud2b8 \uc0ac\uc6a9\uc2dc LDAP\uc11c\ubc84\uc124\uc815\uc815\ubcf4 \ud544\uc694
ldap.url =ldap://localhost:10389
ldap.rootDn =c=kr
ldap.username =uid=admin,ou=system
ldap.password =secret

View File

@@ -1,43 +1,50 @@
#----------------------------------------------------------------------- #-----------------------------------------------------------------------
# #
# globals.properties : 시스템 # globals.properties : \uC2DC\uC2A4\uD15C
# #
#----------------------------------------------------------------------- #-----------------------------------------------------------------------
# 1. key = value 구조입니다. # 1. key = value \uAD6C\uC870\uC785\uB2C8\uB2E4.
# 2. key값은 공백문자를 포함불가, value값은 공백문자를 가능 # 2. key\uAC12\uC740 \uACF5\uBC31\uBB38\uC790\uB97C \uD3EC\uD568\uBD88\uAC00, value\uAC12\uC740 \uACF5\uBC31\uBB38\uC790\uB97C \uAC00\uB2A5
# 3. key값으로 한글을 사용불가, value값은 한글사용이 가능 # 3. key\uAC12\uC73C\uB85C \uD55C\uAE00\uC744 \uC0AC\uC6A9\uBD88\uAC00, value\uAC12\uC740 \uD55C\uAE00\uC0AC\uC6A9\uC774 \uAC00\uB2A5
# 4. 줄을 바꿀 필요가 있으면 '\'를 라인의 끝에 추가(만약 '\'문자를 사용해야 하는 경우는 '\\'를 사용) # 4. \uC904\uC744 \uBC14\uAFC0 \uD544\uC694\uAC00 \uC788\uC73C\uBA74 '\'\uB97C \uB77C\uC778\uC758 \uB05D\uC5D0 \uCD94\uAC00(\uB9CC\uC57D '\'\uBB38\uC790\uB97C \uC0AC\uC6A9\uD574\uC57C \uD558\uB294 \uACBD\uC6B0\uB294 '\\'\uB97C \uC0AC\uC6A9)
# 5. Windows에서의 디렉토리 표시 : '\\' or '/' ('\' 사용하면 안됨) # 5. Windows\uC5D0\uC11C\uC758 \uB514\uB809\uD1A0\uB9AC \uD45C\uC2DC : '\\' or '/' ('\' \uC0AC\uC6A9\uD558\uBA74 \uC548\uB428)
# 6. Unix에서의 디렉토리 표시 : '/' # 6. Unix\uC5D0\uC11C\uC758 \uB514\uB809\uD1A0\uB9AC \uD45C\uC2DC : '/'
# 7. 주석문 처리는 #사용 # 7. \uC8FC\uC11D\uBB38 \uCC98\uB9AC\uB294 #\uC0AC\uC6A9
# 8. value값 뒤에 스페이스가 존재하는 경우 서블릿에서 참조할때는 에러발생할 수 있으므로 trim()하거나 마지막 공백없이 properties 값을 설정할것 # 8. value\uAC12 \uB4A4\uC5D0 \uC2A4\uD398\uC774\uC2A4\uAC00 \uC874\uC7AC\uD558\uB294 \uACBD\uC6B0 \uC11C\uBE14\uB9BF\uC5D0\uC11C \uCC38\uC870\uD560\uB54C\uB294 \uC5D0\uB7EC\uBC1C\uC0DD\uD560 \uC218 \uC788\uC73C\uBBC0\uB85C trim()\uD558\uAC70\uB098 \uB9C8\uC9C0\uB9C9 \uACF5\uBC31\uC5C6\uC774 properties \uAC12\uC744 \uC124\uC815\uD560\uAC83
#----------------------------------------------------------------------- #-----------------------------------------------------------------------
# 운영서버 타입(WINDOWS, UNIX) # \uC6B4\uC601\uC11C\uBC84 \uD0C0\uC785(WINDOWS, UNIX)
Globals.OsType =UNIX Globals.OsType =UNIX
# DB서버 타입(ORACLE, MYSQL) - datasource sqlMap 파일 지정에 사용됨 # DB\uC11C\uBC84 \uD0C0\uC785(ORACLE, MYSQL) - datasource \uBC0F sqlMap \uD30C\uC77C \uC9C0\uC815\uC5D0 \uC0AC\uC6A9\uB428
#Globals.DbType =oracle #Globals.DbType =oracle
Globals.DbType =mysql Globals.DbType =mysql
# 위저드 사용시 데이터베이스 관련 설정을 불러옴 # \uC704\uC800\uB4DC \uC0AC\uC6A9\uC2DC \uB370\uC774\uD130\uBCA0\uC774\uC2A4 \uAD00\uB828 \uC124\uC815\uC744 \uBD88\uB7EC\uC634
#Globals.DriverClassName=oracle.jdbc.OracleDriver #Globals.DriverClassName=oracle.jdbc.OracleDriver
#Globals.Url=jdbc:oracle:thin:@122.199.152.76:1521:oradev #Globals.Url=jdbc:oracle:thin:@122.199.152.76:1521:oradev
#Globals.UserName =say_cms #Globals.UserName =say_cms
#Globals.Password =sksrhdqnffkr #Globals.Password =sksrhdqnffkr
## 세이헬프데스크 ## \uC138\uC774\uD5EC\uD504\uB370\uC2A4\uD06C
Globals.DriverClassName=com.mysql.jdbc.Driver # mysql 5.X
#운영 #Globals.DriverClassName=com.mysql.jdbc.Driver
# mysql 8.4.7
Globals.DriverClassName=com.mysql.cj.jdbc.Driver
#\uC6B4\uC601
#Globals.Url=jdbc:mysql://192.168.0.217:3306/helpdesk_db?characterEncoding=utf8 #Globals.Url=jdbc:mysql://192.168.0.217:3306/helpdesk_db?characterEncoding=utf8
#개발 #\uAC1C\uBC1C
Globals.Url=jdbc:mysql://192.168.0.114:13314/helpdesk_db?characterEncoding=utf8 ## mysql 5.X
#Globals.Url=jdbc:mysql://192.168.0.114:13316/helpdesk_db?characterEncoding=utf8
## mysql 8.4.7
Globals.Url=jdbc:mysql://192.168.0.114:13316/helpdesk_db?characterEncoding=utf8
Globals.UserName =helpdesk Globals.UserName =helpdesk
Globals.Password =helpdesk Globals.Password =helpdesk
# MainPage Setting # MainPage Setting
Globals.MainPage =/EgovContent.do Globals.MainPage =/EgovContent.do
#통합메인메뉴 #\uD1B5\uD569\uBA54\uC778\uBA54\uB274
#Globals.MainPage = /sym/mnu/mpm/EgovMainMenuHome.do #Globals.MainPage = /sym/mnu/mpm/EgovMainMenuHome.do
SMS.DriverClassName=com.mysql.jdbc.Driver SMS.DriverClassName=com.mysql.jdbc.Driver
@@ -51,11 +58,11 @@ SMS.guk=
Globals.Version=1.0 Globals.Version=1.0
Globals.OrgKey= Globals.OrgKey=
Globals.OrgNm=세이정보기술 Globals.OrgNm=\uC138\uC774\uC815\uBCF4\uAE30\uC220
Globals.OrgCode=8188 Globals.OrgCode=8188
#Globals.AccessIp=10 #Globals.AccessIp=10
Globals.SiteTitle=세이정보기술 Help-desk Globals.SiteTitle=\uC138\uC774\uC815\uBCF4\uAE30\uC220 Help-desk (\uAC1C\uBC1C)
#Globals.MobileStartPage=/mobile/intro.do #Globals.MobileStartPage=/mobile/intro.do
Globals.MobileStartPage=/login.do Globals.MobileStartPage=/login.do
PushUrl=http://www.sejong.go.kr/sotong PushUrl=http://www.sejong.go.kr/sotong
@@ -64,14 +71,14 @@ PushUrl=http://www.sejong.go.kr/sotong
fileLogUseYn=N fileLogUseYn=N
fileLogPath=/webapps/ fileLogPath=/webapps/
MENU.PRJ = 프로젝트관리 MENU.PRJ = \uD504\uB85C\uC81D\uD2B8\uAD00\uB9AC
MENU.USER = 회원관리 MENU.USER = \uD68C\uC6D0\uAD00\uB9AC
MENU.HDB = 요청작업관리 MENU.HDB = \uC694\uCCAD\uC791\uC5C5\uAD00\uB9AC
MENU.DTB = 자료실 MENU.DTB = \uC790\uB8CC\uC2E4
MENU.MYPAGE = 마이페이지 MENU.MYPAGE = \uB9C8\uC774\uD398\uC774\uC9C0
MENU.BOARD.STT = 게시판이용현황 MENU.BOARD.STT = \uAC8C\uC2DC\uD310\uC774\uC6A9\uD604\uD669
# 환경파일 위치 # \uD658\uACBD\uD30C\uC77C \uC704\uCE58
Globals.ShellFilePath =globals.properties Globals.ShellFilePath =globals.properties
Globals.ServerConfPath =conf/server.properties Globals.ServerConfPath =conf/server.properties
Globals.ClientConfPath =conf/client.properties Globals.ClientConfPath =conf/client.properties
@@ -82,7 +89,7 @@ Globals.MailRequestPath =mail/request/
Globals.MailRResponsePath =mail/response/ Globals.MailRResponsePath =mail/response/
Globals.SMEConfigPath =conf/SMEConfig.properties Globals.SMEConfigPath =conf/SMEConfig.properties
# WINDOWS용 쉘파일 정보 # WINDOWS\uC6A9 \uC258\uD30C\uC77C \uC815\uBCF4
SHELL.WINDOWS.getHostName =prg/sh_001.bat SHELL.WINDOWS.getHostName =prg/sh_001.bat
SHELL.WINDOWS.getDrctryByOwner =prg/getDrctryByOwner.bat SHELL.WINDOWS.getDrctryByOwner =prg/getDrctryByOwner.bat
SHELL.WINDOWS.getDrctryOwner =prg/getDrctryOwner.bat SHELL.WINDOWS.getDrctryOwner =prg/getDrctryOwner.bat
@@ -92,7 +99,7 @@ SHELL.WINDOWS.getDiskAttrb =prg/getDiskAttrb.bat
SHELL.WINDOWS.getDiskCpcty =prg/getDiskCpcty.bat SHELL.WINDOWS.getDiskCpcty =prg/getDiskCpcty.bat
SHELL.WINDOWS.getDiskExst =prg/getDiskExst.bat SHELL.WINDOWS.getDiskExst =prg/getDiskExst.bat
# UNIX용 쉘파일 정보 - 개발was jeus에서 사용할때 기준 # UNIX\uC6A9 \uC258\uD30C\uC77C \uC815\uBCF4 - \uAC1C\uBC1Cwas jeus\uC5D0\uC11C \uC0AC\uC6A9\uD560\uB54C \uAE30\uC900
SHELL.UNIX.getHostName =prg/sh_001.sh SHELL.UNIX.getHostName =prg/sh_001.sh
SHELL.UNIX.getDrctryByOwner =prg/getDrctryByOwner.sh SHELL.UNIX.getDrctryByOwner =prg/getDrctryByOwner.sh
SHELL.UNIX.getDrctryOwner =prg/getDrctryOwner.sh SHELL.UNIX.getDrctryOwner =prg/getDrctryOwner.sh
@@ -106,10 +113,10 @@ SHELL.UNIX.getDiskCpcty =prg/getDiskCpcty.sh
SHELL.UNIX.getDiskExst =prg/getDiskExst.sh SHELL.UNIX.getDiskExst =prg/getDiskExst.sh
SHELL.UNIX.getProcInfo =prg/getProcInfo.sh SHELL.UNIX.getProcInfo =prg/getProcInfo.sh
# LINUX용 쉘파일 정보 # LINUX\uC6A9 \uC258\uD30C\uC77C \uC815\uBCF4
# 연계 # \uC5F0\uACC4
# 기관코드수신용(경로 설정은 반드시 절대경로를 사용해야함.) # \uAE30\uAD00\uCF54\uB4DC\uC218\uC2E0\uC6A9(\uACBD\uB85C \uC124\uC815\uC740 \uBC18\uB4DC\uC2DC \uC808\uB300\uACBD\uB85C\uB97C \uC0AC\uC6A9\uD574\uC57C\uD568.)
CNTC.INSTTCODE.DIR.rcv =D:/tmp/test/rcv/ CNTC.INSTTCODE.DIR.rcv =D:/tmp/test/rcv/
CNTC.INSTTCODE.DIR.rcvold =D:/tmp/test/rcvold/ CNTC.INSTTCODE.DIR.rcvold =D:/tmp/test/rcvold/
CNTC.INSTTCODE.DIR.bin =D:/tmp/test/bin/ CNTC.INSTTCODE.DIR.bin =D:/tmp/test/bin/
@@ -120,11 +127,11 @@ CNTC.INSTTCODE.CMD.edircvmsg =gcc_edircvmsg.bat
CNTC.INSTTCODE.INFO.userid =USERID CNTC.INSTTCODE.INFO.userid =USERID
CNTC.INSTTCODE.INFO.userpw =****** CNTC.INSTTCODE.INFO.userpw =******
# 파일 업로드 경로(경로 설정은 반드시 절대경로를 사용해야함, 경로 뒤에 /를 붙여 주어야함.) # \uD30C\uC77C \uC5C5\uB85C\uB4DC \uACBD\uB85C(\uACBD\uB85C \uC124\uC815\uC740 \uBC18\uB4DC\uC2DC \uC808\uB300\uACBD\uB85C\uB97C \uC0AC\uC6A9\uD574\uC57C\uD568, \uACBD\uB85C \uB4A4\uC5D0 /\uB97C \uBD99\uC5EC \uC8FC\uC5B4\uC57C\uD568.)
#Globals.fileStorePath =/webapps/upload/ #Globals.fileStorePath =/webapps/upload/
Globals.fileStorePath =/webapps/proj/help_desk/upload/ Globals.fileStorePath =/webapps/proj/help_desk/upload/
# 파일 동기화 컴포넌트에서 사용할 파일 업로드 경로(경로 설정은 반드시 절대경로를 사용해야함, 경로 뒤에 /를 붙여 주어야함.) # \uD30C\uC77C \uB3D9\uAE30\uD654 \uCEF4\uD3EC\uB10C\uD2B8\uC5D0\uC11C \uC0AC\uC6A9\uD560 \uD30C\uC77C \uC5C5\uB85C\uB4DC \uACBD\uB85C(\uACBD\uB85C \uC124\uC815\uC740 \uBC18\uB4DC\uC2DC \uC808\uB300\uACBD\uB85C\uB97C \uC0AC\uC6A9\uD574\uC57C\uD568, \uACBD\uB85C \uB4A4\uC5D0 /\uB97C \uBD99\uC5EC \uC8FC\uC5B4\uC57C\uD568.)
Globals.SynchrnServerPath =C:/egovframework/upload/Synch/ Globals.SynchrnServerPath =C:/egovframework/upload/Synch/
# for JFile properties # for JFile properties
@@ -134,13 +141,13 @@ ftp.server.ip =127.0.0.1
ftp.user.id =test ftp.user.id =test
ftp.user.password =test ftp.user.password =test
# Social(Facebook, Oauth 컴포넌트 사용시 활용) # Social(Facebook, Oauth \uCEF4\uD3EC\uB10C\uD2B8 \uC0AC\uC6A9\uC2DC \uD65C\uC6A9)
facebook.appId = facebook.appId =
facebook.appSecret = facebook.appSecret =
twitter.consumerKey = twitter.consumerKey =
twitter.consumerSecret = twitter.consumerSecret =
#LDAP조직도관리 컴포넌트 사용시 LDAP서버설정정보 필요 #LDAP\uC870\uC9C1\uB3C4\uAD00\uB9AC \uCEF4\uD3EC\uB10C\uD2B8 \uC0AC\uC6A9\uC2DC LDAP\uC11C\uBC84\uC124\uC815\uC815\uBCF4 \uD544\uC694
ldap.url =ldap://localhost:10389 ldap.url =ldap://localhost:10389
ldap.rootDn =c=kr ldap.rootDn =c=kr
ldap.username =uid=admin,ou=system ldap.username =uid=admin,ou=system

View File

@@ -20,6 +20,7 @@
<security:http pattern="/js/**" security="none"/> <security:http pattern="/js/**" security="none"/>
<security:http pattern="/resource/**" security="none"/> <security:http pattern="/resource/**" security="none"/>
<security:http pattern="\A/WEB-INF/jsp/.*\Z" request-matcher="regex" security="none"/> <security:http pattern="\A/WEB-INF/jsp/.*\Z" request-matcher="regex" security="none"/>
<security:http pattern="/health.do" security="none"/>
<egov-security:config id="securityConfig" <egov-security:config id="securityConfig"
loginUrl="/login.do" loginUrl="/login.do"

View File

@@ -171,6 +171,77 @@
</select> </select>
<select id="dmsHdbDAO.selectDmsHdbStat_D" parameterClass="dmsHdbSerarchVO" resultClass="egovMap">
SELECT
COUNT(CASE
WHEN B.HDB_STS = 'A'
AND B.CREATE_DATE >= DATE_SUB(NOW(), INTERVAL 30 DAY)
AND B.REC_STS = 'A'
AND (B.TITLE != '' OR B.CONTENTS != '')
THEN 1
END) AS hdbStsA
, COUNT(CASE
WHEN B.HDB_STS = 'B'
AND B.CREATE_DATE >= DATE_SUB(NOW(), INTERVAL 30 DAY)
AND B.REC_STS = 'A'
AND (B.TITLE != '' OR B.CONTENTS != '')
THEN 1
END) AS hdbStsB
, COUNT(CASE
WHEN B.HDB_STS = 'C'
AND B.CREATE_DATE >= DATE_SUB(NOW(), INTERVAL 30 DAY)
AND B.REC_STS = 'A'
AND (B.TITLE != '' OR B.CONTENTS != '')
THEN 1
END) AS hdbStsC
, COUNT(CASE
WHEN B.HDB_STS = 'A'
AND YEAR(B.CREATE_DATE) = YEAR(NOW())
AND B.REC_STS = 'A'
AND (B.TITLE != '' OR B.CONTENTS != '')
THEN 1
END) AS hdbStsYrA
, COUNT(CASE
WHEN B.HDB_STS = 'B'
AND YEAR(B.CREATE_DATE) = YEAR(NOW())
AND B.REC_STS = 'A'
AND (B.TITLE != '' OR B.CONTENTS != '')
THEN 1
END) AS hdbStsYrB
, COUNT(CASE
WHEN B.HDB_STS = 'C'
AND YEAR(B.CREATE_DATE) = YEAR(NOW())
AND B.REC_STS = 'A'
AND (B.TITLE != '' OR B.CONTENTS != '')
THEN 1
END) AS hdbStsYrC
FROM
DMS_HDB B
WHERE 1=1
AND B.REC_STS = 'A'
AND (B.TITLE != '' OR B.CONTENTS != '')
<isNotEmpty property="prjSeq" prepend="AND">
B.PRJ_SEQ = #prjSeq#
</isNotEmpty>
<isNotEmpty property="searchKeyword">
<isEqual property="searchCondition" compareValue="1" prepend="AND">
B.TITLE LIKE CONCAT('%', #searchKeyword#, '%')
</isEqual>
<isEqual property="searchCondition" compareValue="2" prepend="AND">
B.WRITER_NM LIKE CONCAT('%', #searchKeyword#, '%')
</isEqual>
</isNotEmpty>
</select>
<select id="dmsHdbDAO.selectDmsHdbListTotCnt_S" parameterClass="dmsHdbSerarchVO" resultClass="int"> <select id="dmsHdbDAO.selectDmsHdbListTotCnt_S" parameterClass="dmsHdbSerarchVO" resultClass="int">
SELECT SELECT
COUNT(*) totcnt COUNT(*) totcnt
@@ -306,7 +377,7 @@
</select> </select>
<!-- 현재 기준 한달간 현황 donut chart --> <!-- 현재 기준 한달간 현황 donut chart -->
<select id="dmsHdbDAO.selectDmsHdbForMonthChart" parameterClass="dmsHdbSerarchVO" resultClass="egovframework.dms.hdb.vo.DmsHdbGraphVO"> <!-- <select id="dmsHdbDAO.selectDmsHdbForMonthChart" parameterClass="dmsHdbSerarchVO" resultClass="egovframework.dms.hdb.vo.DmsHdbGraphVO">
SELECT SELECT
COUNT(CASE WHEN HDB_STS = 'A' THEN 1 END) AS hdbStsA, COUNT(CASE WHEN HDB_STS = 'A' THEN 1 END) AS hdbStsA,
COUNT(CASE WHEN HDB_STS = 'B' THEN 1 END) AS hdbStsB, COUNT(CASE WHEN HDB_STS = 'B' THEN 1 END) AS hdbStsB,
@@ -316,5 +387,5 @@
AND D.PRJ_SEQ = #prjSeq# AND D.PRJ_SEQ = #prjSeq#
AND (D.TITLE != '' OR D.CONTENTS != '') AND (D.TITLE != '' OR D.CONTENTS != '')
<![CDATA[ AND D.CREATE_DATE >= DATE_SUB(NOW(), INTERVAL 30 DAY) ]]> <![CDATA[ AND D.CREATE_DATE >= DATE_SUB(NOW(), INTERVAL 30 DAY) ]]>
</select> </select> -->
</sqlMap> </sqlMap>

View File

@@ -128,9 +128,9 @@
B.DEPT_CD, B.DEPT_CD,
B.POSITION_NM, B.POSITION_NM,
C.PRJ_NM, C.PRJ_NM,
COUNT(CASE WHEN D.HDB_STS = 'A' AND YEAR(D.CREATE_DATE) = YEAR(NOW()) AND D.REC_STS = 'A' AND (D.TITLE != '' OR D.CONTENTS != '') THEN 1 END) AS hdbStsA, COUNT(CASE WHEN D.HDB_STS = 'A' AND D.CREATE_DATE >= DATE_SUB(NOW(), INTERVAL 30 DAY) AND D.REC_STS = 'A' AND (D.TITLE != '' OR D.CONTENTS != '') THEN 1 END) AS hdbStsA,
COUNT(CASE WHEN D.HDB_STS = 'B' AND YEAR(D.CREATE_DATE) = YEAR(NOW()) AND D.REC_STS = 'A' AND (D.TITLE != '' OR D.CONTENTS != '') THEN 1 END) AS hdbStsB, COUNT(CASE WHEN D.HDB_STS = 'B' AND D.CREATE_DATE >= DATE_SUB(NOW(), INTERVAL 30 DAY) AND D.REC_STS = 'A' AND (D.TITLE != '' OR D.CONTENTS != '') THEN 1 END) AS hdbStsB,
COUNT(CASE WHEN D.HDB_STS = 'C' AND YEAR(D.CREATE_DATE) = YEAR(NOW()) AND D.REC_STS = 'A' AND (D.TITLE != '' OR D.CONTENTS != '') THEN 1 END) AS hdbStsC COUNT(CASE WHEN D.HDB_STS = 'C' AND D.CREATE_DATE >= DATE_SUB(NOW(), INTERVAL 30 DAY) AND D.REC_STS = 'A' AND (D.TITLE != '' OR D.CONTENTS != '') THEN 1 END) AS hdbStsC
FROM DMS_PRJ_AUTH_USER A FROM DMS_PRJ_AUTH_USER A
JOIN HMS_USER B JOIN HMS_USER B
ON A.USER_ID = B.USER_ID ON A.USER_ID = B.USER_ID

BIN
src/main/webapp/Favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

@@ -129,9 +129,11 @@
<tbody> <tbody>
<c:forEach var="list" items="${commentList }"> <c:forEach var="list" items="${commentList }">
<tr> <tr>
<th class="left" colspan="3"> <th class="left" colspan="3">
등록자 : ${list.userNm } | 등록일시 : <fmt:formatDate value="${list.createDate }" pattern="yyyy.MM.dd hh:mm"/> 등록자 : ${list.userNm } | 등록일시 :
<c:if test="${loginVO.name eq list.userNm }">&nbsp;<a href="#" onclick="fn_egov_comment_delete('${list.brdReplySeq }', '${commentVO.parentUrl}');">[삭제]</a> </c:if> <fmt:parseDate value="${list.createDate}" pattern="yyyy-MM-dd'T'HH:mm:ss" var="parsedCreateDate"/>
<fmt:formatDate value="${parsedCreateDate}" pattern="yyyy.MM.dd HH:mm"/>
<c:if test="${loginVO.name eq list.userNm }">&nbsp;<a href="#" onclick="fn_egov_comment_delete('${list.brdReplySeq }', '${commentVO.parentUrl}');">[삭제]</a></c:if>
</th> </th>
</tr> </tr>
<tr> <tr>

View File

@@ -72,7 +72,11 @@
<td><a href="#view" onclick="return fn_egov_select('${list.userSeq}')">${list.userNm} (${list.userId})</a></td> <td><a href="#view" onclick="return fn_egov_select('${list.userSeq}')">${list.userNm} (${list.userId})</a></td>
<td>${list.tel}</td> <td>${list.tel}</td>
<td>${list.deptNm}</td> <td>${list.deptNm}</td>
<td><fmt:formatDate value="${list.createDate }" pattern="yyyy-MM-dd" /></td> <td>
<fmt:parseDate value="${list.createDate}" pattern="yyyy-MM-dd'T'HH:mm:ss" var="createdDate"/>
<fmt:formatDate value="${createdDate}" pattern="yyyy-MM-dd"/>
</td>
<td>${list.userType}</td> <td>${list.userType}</td>
</tr> </tr>
</c:forEach> </c:forEach>

View File

@@ -24,11 +24,17 @@
<script src="/js/common/charts-plugin-datalabels.js"></script> <script src="/js/common/charts-plugin-datalabels.js"></script>
<c:set var="now" value="<%= new java.util.Date() %>" /> <c:set var="now" value="<%= new java.util.Date() %>" />
<fmt:formatDate value="${now}" pattern="yyyy" var="curYear" />
<div class="location_box"> <div class="location_box">
<div class="loc_h3"><h3>${prjNm} <%=MainGlobals.MENU_HDB%> <div class="loc_h3"><h3>${prjNm} <%=MainGlobals.MENU_HDB%>
(<span class="year-text"><fmt:formatDate value="${now}" pattern="yyyy" /> 년 - </span><span class="sts-a">접수: ${hdbStsA}</span>, (
<span class="sts-b">처리중: ${hdbStsB}</span>, <span class="year-text">
<span class="sts-c">완료: ${hdbStsC}</span> ) <%-- ${curYear} 년 --%>
한달간 처리 현황
</span>
<span class="sts-a">접수: ${dmsHdbStat.hdbStsA}</span>,
<span class="sts-b">처리중: ${dmsHdbStat.hdbStsB}</span>,
<span class="sts-c">완료: ${dmsHdbStat.hdbStsC}</span> )
</h3><span></span></div> </h3><span></span></div>
<span class="loccation"><img src="/images/admin/loccation_home.png" alt="홈" /> > <strong><%=MainGlobals.MENU_HDB%></strong></span> <span class="loccation"><img src="/images/admin/loccation_home.png" alt="홈" /> > <strong><%=MainGlobals.MENU_HDB%></strong></span>
</div> </div>
@@ -111,7 +117,9 @@
<img src="/images/admin/cf_tit_ic.png"> <img src="/images/admin/cf_tit_ic.png">
</c:if> </c:if>
</td> </td>
<td>${list.createDate}</td> <td>
${list.createDate}
</td>
<td>${list.rdCnt }</td> <td>${list.rdCnt }</td>
<%-- <td>${list.compScdDate}</td> --%> <%-- <td>${list.compScdDate}</td> --%>
</tr> </tr>
@@ -154,19 +162,33 @@
sbData.append("]"); sbData.append("]");
// 한달 현황 (도넛) // 한달 현황 (도넛)
DmsHdbGraphVO monthlyList = (DmsHdbGraphVO) request.getAttribute("monthlyList"); /* DmsHdbGraphVO monthlyList = (DmsHdbGraphVO) request.getAttribute("monthlyList");
int cntA = monthlyList.getHdbStsA(); // 접수 int cntA = monthlyList.getHdbStsA(); // 접수
int cntB = monthlyList.getHdbStsB(); // 처리중 int cntB = monthlyList.getHdbStsB(); // 처리중
int cntC = monthlyList.getHdbStsC(); // 완료 int cntC = monthlyList.getHdbStsC(); // 완료 */
%> %>
<div class="chart-container"> <div class="chart-container">
<!-- 막대 그래프 --> <div class="chart-wrapper">
<div class="chart-box" style="flex:2;"> <div class="chart-title">
<canvas id="yearChart"></canvas> <div class="chart-main-title">
</div> ${curYear}년 요청 통계
</div>
<div class="chart-sub-title"><strong>Total [ </strong>
<span class="sts-a">접수 ${dmsHdbStat.hdbStsYrA}건</span>
<span class="sep">/</span>
<span class="sts-b">처리중 ${dmsHdbStat.hdbStsYrB}건</span>
<span class="sep">/</span>
<span class="sts-c">완료 ${dmsHdbStat.hdbStsYrC}건</span>
<strong> ]</strong>
</div>
</div>
<!-- 막대 그래프 -->
<div class="chart-box" style="flex:2;">
<canvas id="yearChart"></canvas>
</div>
</div>
<!-- 도넛 그래프 --> <!-- 도넛 그래프 -->
<div class="chart-box" style="flex:1; position:relative;"> <div class="chart-box" style="flex:1; position:relative;">
<canvas id="monthChart"></canvas> <canvas id="monthChart"></canvas>
@@ -190,6 +212,11 @@ Chart.register(ChartDataLabels);
const annualLabels = <%= sbLabels.toString() %>; const annualLabels = <%= sbLabels.toString() %>;
const annualData = <%= sbData.toString() %>; const annualData = <%= sbData.toString() %>;
const YEAR = '${curYear}';
const hdbStsA = Number('${dmsHdbStat.hdbStsA != null ? hdbStsA : 0}');
const hdbStsB = Number('${dmsHdbStat.hdbStsB != null ? hdbStsB : 0}');
const hdbStsC = Number('${dmsHdbStat.hdbStsC != null ? hdbStsC : 0}');
new Chart( new Chart(
document.getElementById('yearChart'), document.getElementById('yearChart'),
{ {
@@ -210,8 +237,8 @@ new Chart(
plugins: { plugins: {
title: { title: {
display: true, display: false,
text: '2025년 월별 요청 통계', //text: YEAR + `년 요청 통계 (접수 ${hdbStsA}건 / 처리중 ${hdbStsB}건 / 완료 ${hdbStsC}건)`,
font: { size: 20, weight: 'bold' }, font: { size: 20, weight: 'bold' },
padding: { top: 10, bottom: 20 } padding: { top: 10, bottom: 20 }
}, },
@@ -262,9 +289,9 @@ new Chart(
/**************************************** /****************************************
* 2) 한달 현황 도넛 차트 * 2) 한달 현황 도넛 차트
****************************************/ ****************************************/
const cntA = <%= cntA %>; // 접수 const cntA = ${dmsHdbStat.hdbStsA}; // 접수
const cntB = <%= cntB %>; // 처리중 const cntB = ${dmsHdbStat.hdbStsB}; // 처리중
const cntC = <%= cntC %>; // 완료 const cntC = ${dmsHdbStat.hdbStsC}; // 완료
const monthChartCanvas = document.getElementById('monthChart'); const monthChartCanvas = document.getElementById('monthChart');
const noDataMsg = document.getElementById('noDataMsg'); const noDataMsg = document.getElementById('noDataMsg');

View File

@@ -16,7 +16,21 @@
<script src="js/common/common.js"></script> <script src="js/common/common.js"></script>
<script src="js/common/login.js"></script> <script src="js/common/login.js"></script>
<base target="_self" /> <base target="_self" />
<title><%=MainGlobals.SITE_TITLE%></title> <title><%= MainGlobals.SITE_TITLE %></title>
<%
String siteTitle = MainGlobals.SITE_TITLE;
if ("세이정보기술 Help-desk (스테이징)".equals(siteTitle)
|| "세이정보기술 Help-desk (개발)".equals(siteTitle)
|| "세이정보기술 Help-desk (로컬)".equals(siteTitle)) {
%>
<h1><%= siteTitle %></h1>
<%
}
%>
<link rel="icon" type="image/x-icon" href="${pageContext.request.contextPath}/Favicon.ico?v=20251209" />
<style> <style>
.login_wrap_body{ background:url(${pageContext.request.contextPath}/images/admin/login_bg.gif) repeat left top; font-family:"맑은 고딕",Malgun Gothic,AppleGothic,sans-serif,"돋움", Dotum; } .login_wrap_body{ background:url(${pageContext.request.contextPath}/images/admin/login_bg.gif) repeat left top; font-family:"맑은 고딕",Malgun Gothic,AppleGothic,sans-serif,"돋움", Dotum; }
.login_wrap{display:block; height:100%; left:0; position:fixed; top:0; width:100%; z-index:10000;} .login_wrap{display:block; height:100%; left:0; position:fixed; top:0; width:100%; z-index:10000;}

View File

@@ -12,13 +12,14 @@
<meta name="keywords" content="" /> <meta name="keywords" content="" />
<base target="_self" /> <base target="_self" />
<title><%=MainGlobals.SITE_TITLE%></title> <title><%=MainGlobals.SITE_TITLE%></title>
<link rel="icon" type="image/x-icon" href="${pageContext.request.contextPath}/Favicon.ico?v=20251209" />
<script type="text/javascript">var G_CONTEXT_PATH = '${pageContext.request.contextPath}';</script> <script type="text/javascript">var G_CONTEXT_PATH = '${pageContext.request.contextPath}';</script>
<script type="text/javascript" src="${pageContext.request.contextPath}/dwr/engine.js"></script> <script type="text/javascript" src="${pageContext.request.contextPath}/dwr/engine.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/dwr/util.js"></script> <script type="text/javascript" src="${pageContext.request.contextPath}/dwr/util.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/dwr/interface/DwrCommonService.js"></script> <script type="text/javascript" src="${pageContext.request.contextPath}/dwr/interface/DwrCommonService.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/js/common/jquery/jquery.js"></script> <script type="text/javascript" src="${pageContext.request.contextPath}/js/common/jquery/jquery.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/js/common/common.js"></script> <script type="text/javascript" src="${pageContext.request.contextPath}/js/common/common.js"></script>
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/cms/all.css?ver=20251125_1"> <link rel="stylesheet" href="${pageContext.request.contextPath}/css/cms/all.css?ver=20260108_1">
<style> <style>
.main_wrap_body{ background:url(${pageContext.request.contextPath}/images/admin/login_bg.gif) repeat left top; font-family:"맑은 고딕",Malgun Gothic,AppleGothic,sans-serif,"돋움", Dotum; } .main_wrap_body{ background:url(${pageContext.request.contextPath}/images/admin/login_bg.gif) repeat left top; font-family:"맑은 고딕",Malgun Gothic,AppleGothic,sans-serif,"돋움", Dotum; }
.main_wrap{display:block; height:100%; left:0; position:fixed; top:0; width:100%; z-index:10000;} .main_wrap{display:block; height:100%; left:0; position:fixed; top:0; width:100%; z-index:10000;}
@@ -45,9 +46,9 @@
.main_box .bottom_box .bottom_logo{width:20%; float: left; margin-left: 10px;} .main_box .bottom_box .bottom_logo{width:20%; float: left; margin-left: 10px;}
/* .main_box .bottom_box .bottom_txt{width:70%; float: left;} */ /* .main_box .bottom_box .bottom_txt{width:70%; float: left;} */
.sts-a { color: red; font-size: 12px;} .sts-a { color: rgb(75,192,192); font-size: 12px;}
.sts-b { color: green; font-size: 12px; } .sts-b { color: rgb(255,99,132); font-size: 12px; }
.sts-c { color: blue; font-size: 12px; } .sts-c { color: rgb(54,162,235); font-size: 12px; }
</style> </style>
</head> </head>
<body class="main_wrap_body"> <body class="main_wrap_body">
@@ -66,7 +67,8 @@
<div class="cent_menu"> <div class="cent_menu">
<p class="prj_txt">● 프로젝트 현황</p> <p class="prj_txt">● 프로젝트 현황</p>
<c:set var="now" value="<%= new java.util.Date() %>" /> <c:set var="now" value="<%= new java.util.Date() %>" />
<span class="year-info">※괄호 안 현황 정보는 <fmt:formatDate value="${now}" pattern="yyyy" />년도 기준입니다.</span> <%-- <span class="year-info">※괄호 안 현황 정보는 <fmt:formatDate value="${now}" pattern="yyyy" />년도 기준입니다.</span> --%>
<span class="year-info">※괄호 안 현황 정보는 지난 한달 간 데이터 집계입니다.</span>
<div class="txt_field"> <div class="txt_field">
<c:if test="${empty sessionPrjList }"> <c:if test="${empty sessionPrjList }">
<p class="txt_list">담당하신 프로젝트가 없습니다. 관리자에게 문의해주세요.<p> <p class="txt_list">담당하신 프로젝트가 없습니다. 관리자에게 문의해주세요.<p>
@@ -74,7 +76,7 @@
<c:if test="${!empty sessionPrjList }"> <c:if test="${!empty sessionPrjList }">
<c:forEach items="${sessionPrjList }" var="list"> <c:forEach items="${sessionPrjList }" var="list">
<p class="txt_list"> <p class="txt_list">
<a href='/dms/contents/dms/hdb/01/hdb.01.001.motion?prjSeq=${list.prjSeq }&moveDetail=Y&hdbStsA=${list.hdbStsA}&hdbStsB=${list.hdbStsB}&hdbStsC=${list.hdbStsC}'> <a href='/dms/contents/dms/hdb/01/hdb.01.001.motion?prjSeq=${list.prjSeq }&moveDetail=Y'>
- ${list.prjNm } - ${list.prjNm }
(<span class="sts-a">접수: ${list.hdbStsA}</span>, (<span class="sts-a">접수: ${list.hdbStsA}</span>,
<span class="sts-b">처리중: ${list.hdbStsB}</span>, <span class="sts-b">처리중: ${list.hdbStsB}</span>,

View File

@@ -43,8 +43,8 @@
<tr> <tr>
<th>등록일</th> <th>등록일</th>
<td class="left"> <td class="left">
<%-- <fmt:formatDate value="${dmsHdbVO.createDate}" pattern="yyyy-MM-dd" /> --%> <fmt:parseDate value="${dmsHdbVO.createDate}" pattern="yyyy-MM-dd'T'HH:mm:ss" var="parsedCreateDate"/>
${dmsDtbVO.createDate} <fmt:formatDate value="${parsedCreateDate}" pattern="yyyy-MM-dd" />
</td> </td>
</tr> </tr>
<tr> <tr>

View File

@@ -45,8 +45,8 @@
<tr> <tr>
<th>등록일</th> <th>등록일</th>
<td class="left"> <td class="left">
<%-- <fmt:formatDate value="${dmsHdbVO.createDate}" pattern="yyyy-MM-dd" /> --%> <fmt:parseDate value="${dmsHdbVO.createDate}" pattern="yyyy-MM-dd'T'HH:mm:ss" var="createdDate"/>
${dmsHdbVO.createDate} <fmt:formatDate value="${createdDate}" pattern="yyyy-MM-dd HH:mm:ss"/>
</td> </td>
</tr> </tr>
<tr> <tr>

View File

@@ -22,6 +22,7 @@ if(UserHelper.isAuthenticated()) {
<meta name="keywords" content="" /> <meta name="keywords" content="" />
<base target="_self" /> <base target="_self" />
<title><%=MainGlobals.SITE_TITLE%></title> <title><%=MainGlobals.SITE_TITLE%></title>
<link rel="icon" type="image/x-icon" href="${pageContext.request.contextPath}/Favicon.ico?v=20251209" />
<script type="text/javascript">var G_CONTEXT_PATH = '${pageContext.request.contextPath}';</script> <script type="text/javascript">var G_CONTEXT_PATH = '${pageContext.request.contextPath}';</script>
<script type="text/javascript" src="${pageContext.request.contextPath}/dwr/engine.js"></script> <script type="text/javascript" src="${pageContext.request.contextPath}/dwr/engine.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/dwr/util.js"></script> <script type="text/javascript" src="${pageContext.request.contextPath}/dwr/util.js"></script>

View File

@@ -23,6 +23,7 @@ if(UserHelper.isAuthenticated()) {
<meta name="keywords" content="" /> <meta name="keywords" content="" />
<base target="_self" /> <base target="_self" />
<title><%=MainGlobals.SITE_TITLE%></title> <title><%=MainGlobals.SITE_TITLE%></title>
<link rel="icon" type="image/x-icon" href="${pageContext.request.contextPath}/Favicon.ico?v=20251209" />
<script type="text/javascript">var G_CONTEXT_PATH = '${pageContext.request.contextPath}';</script> <script type="text/javascript">var G_CONTEXT_PATH = '${pageContext.request.contextPath}';</script>
<script type="text/javascript" src="${pageContext.request.contextPath}/dwr/engine.js"></script> <script type="text/javascript" src="${pageContext.request.contextPath}/dwr/engine.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/dwr/util.js"></script> <script type="text/javascript" src="${pageContext.request.contextPath}/dwr/util.js"></script>

View File

@@ -22,13 +22,14 @@ if(UserHelper.isAuthenticated()) {
<meta name="keywords" content="" /> <meta name="keywords" content="" />
<base target="_self" /> <base target="_self" />
<title><%=MainGlobals.SITE_TITLE%></title> <title><%=MainGlobals.SITE_TITLE%></title>
<link rel="icon" type="image/x-icon" href="${pageContext.request.contextPath}/Favicon.ico?v=20251209" />
<script type="text/javascript">var G_CONTEXT_PATH = '${pageContext.request.contextPath}';</script> <script type="text/javascript">var G_CONTEXT_PATH = '${pageContext.request.contextPath}';</script>
<script type="text/javascript" src="${pageContext.request.contextPath}/dwr/engine.js"></script> <script type="text/javascript" src="${pageContext.request.contextPath}/dwr/engine.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/dwr/util.js"></script> <script type="text/javascript" src="${pageContext.request.contextPath}/dwr/util.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/dwr/interface/DwrCommonService.js"></script> <script type="text/javascript" src="${pageContext.request.contextPath}/dwr/interface/DwrCommonService.js"></script>
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/mobile/common.css"> <link rel="stylesheet" href="${pageContext.request.contextPath}/css/mobile/common.css">
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/mobile/layout.css"> <link rel="stylesheet" href="${pageContext.request.contextPath}/css/mobile/layout.css">
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/mobile/contents.css"> <link rel="stylesheet" href="${pageContext.request.contextPath}/css/mobile/contents.css?ver=20260106">
<script type="text/javascript" src="${pageContext.request.contextPath}/js/mobile/jquery-1.7.1.min.js"></script><!--전체메뉴--> <script type="text/javascript" src="${pageContext.request.contextPath}/js/mobile/jquery-1.7.1.min.js"></script><!--전체메뉴-->
<script type="text/javascript" src="${pageContext.request.contextPath}/js/mobile/jquery.easing.1.3.js" ></script><!--전체메뉴--> <script type="text/javascript" src="${pageContext.request.contextPath}/js/mobile/jquery.easing.1.3.js" ></script><!--전체메뉴-->
<script type="text/javascript" src="${pageContext.request.contextPath}/js/mobile/mobTnav.js" ></script><!--전체메뉴--> <script type="text/javascript" src="${pageContext.request.contextPath}/js/mobile/mobTnav.js" ></script><!--전체메뉴-->

View File

@@ -13,6 +13,7 @@
<meta name="keywords" content="noframe" /> <meta name="keywords" content="noframe" />
<base target="_self" /> <base target="_self" />
<title><%=MainGlobals.SITE_TITLE%></title> <title><%=MainGlobals.SITE_TITLE%></title>
<link rel="icon" type="image/x-icon" href="${pageContext.request.contextPath}/Favicon.ico?v=20251209" />
<script type="text/javascript">var G_CONTEXT_PATH = "${pageContext.request.contextPath}";</script> <script type="text/javascript">var G_CONTEXT_PATH = "${pageContext.request.contextPath}";</script>
<script type="text/javascript" src="${pageContext.request.contextPath}/dwr/engine.js"></script> <script type="text/javascript" src="${pageContext.request.contextPath}/dwr/engine.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/dwr/util.js"></script> <script type="text/javascript" src="${pageContext.request.contextPath}/dwr/util.js"></script>

View File

@@ -22,6 +22,7 @@ if(UserHelper.isAuthenticated()) {
<meta name="keywords" content="" /> <meta name="keywords" content="" />
<base target="_self" /> <base target="_self" />
<title><%=MainGlobals.SITE_TITLE%></title> <title><%=MainGlobals.SITE_TITLE%></title>
<link rel="icon" type="image/x-icon" href="${pageContext.request.contextPath}/Favicon.ico?v=20251209" />
<script type="text/javascript">var G_CONTEXT_PATH = '${pageContext.request.contextPath}';</script> <script type="text/javascript">var G_CONTEXT_PATH = '${pageContext.request.contextPath}';</script>
<script type="text/javascript" src="${pageContext.request.contextPath}/dwr/engine.js"></script> <script type="text/javascript" src="${pageContext.request.contextPath}/dwr/engine.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/dwr/util.js"></script> <script type="text/javascript" src="${pageContext.request.contextPath}/dwr/util.js"></script>

View File

@@ -5,6 +5,6 @@
@import url(font.css); @import url(font.css);
@import url(main.css); @import url(main.css);
@import url(layout.css); @import url(layout.css);
@import url(contents.css?ver=20251125); @import url(contents.css);
@import url(login.css); @import url(login.css);
@import url(form.css); @import url(form.css);

View File

@@ -414,23 +414,23 @@ a.btn_search_gray:HOVER {background-color:#4c4c4c; border:1px solid #2f2f2f;}
} }
/*요청처리현황*/ /*요청처리현황*/
.sts-a { color: green !important; font-size: 12px; } .sts-a { color: rgb(75,192,192) !important; font-size: 12px; }
.sts-b { color: red !important; font-size: 12px; } .sts-b { color: rgb(255,99,132) !important; font-size: 12px; }
.sts-c { color: blue !important; font-size: 12px; } .sts-c { color: rgb(54,162,235) !important; font-size: 12px; }
.year-text { .year-text {
font-size: 12px; font-size: 12px;
} }
.year-info-wrap { .year-info-wrap {
text-align: right; /* 오른쪽 정렬 */ text-align: right;
} }
.year-info { .year-info {
font-size: 12px; font-size: 12px;
color: red; /* 빨간 글씨 */ color: red;
position: relative; position: relative;
left: 370px; left: 300px;
} }
/*차트*/ /*차트*/
@@ -444,9 +444,47 @@ a.btn_search_gray:HOVER {background-color:#4c4c4c; border:1px solid #2f2f2f;}
flex: 1; flex: 1;
} }
.chart-wrapper {
width: 100%;
max-width: 900px; /* 차트 너비와 동일하게 */
margin: 0 auto; /* 중앙 정렬 */
}
.chart-title {
text-align: center;
margin-bottom: 16px;
}
.chart-main-title {
font-size: 20px;
font-weight: bold;
color: #666;
margin-bottom: 6px; /* 줄바꿈 간격 */
}
.chart-sub-title {
font-size: 14px;
}
/* 상태별 색상 */
.chart-sub-title .sts-a {
color: rgb(75,192,192); /* 접수 - 초록 */
font-weight: 600;
}
.chart-sub-title .sts-b {
color: rgb(255,99,132); /* 처리중 - 빨강 */
font-weight: 600;
}
.chart-sub-title .sts-c {
color: rgb(54,162,235); /* 완료 - 파랑 */
font-weight: 600;
}
.chart-sub-title .sep {
margin: 0 6px;
color: #666;
}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,2 @@
User-agent: *
Disallow: /