전자 결재 시스템의 테이블을 설계할 때, 기안(작성), 승인, 대결(대신 결재), 반려(거절), 전결(최종 승인) 등의 상태를 고려해야 합니다. 아래는 주요 테이블의 예시입니다.
1. 결재 문서 테이블 (approval_documents)
전자 결재의 기본 문서 정보를 저장하는 테이블입니다.
컬럼명 |
데이터 타입 |
설명 |
doc_id |
INT (PK) |
문서 고유 ID |
title |
VARCHAR(255) |
문서 제목 |
content |
TEXT |
문서 내용 |
drafter_id |
INT (FK) |
기안자 (작성자) ID (사용자 테이블 참조) |
status |
ENUM |
문서 상태 (기안, 승인, 대결, 반려, 전결) |
created_at |
TIMESTAMP |
문서 생성일 |
updated_at |
TIMESTAMP |
최근 수정일 |
2. 결재 진행 내역 테이블 (approval_process)
문서가 어떤 결재 단계를 거쳤는지 기록하는 테이블입니다.
컬럼명 |
데이터 타입 |
설명 |
process_id |
INT (PK) |
결재 과정 고유 ID |
doc_id |
INT (FK) |
문서 ID (approval_documents 참조) |
approver_id |
INT (FK) |
결재자 ID (사용자 테이블 참조) |
action |
ENUM |
결재 상태 (승인, 대결, 반려, 전결) |
comment |
TEXT |
결재 의견 |
processed_at |
TIMESTAMP |
결재 처리일 |
3. 사용자 테이블 (users)
결재에 참여하는 사용자의 정보를 저장하는 테이블입니다.
컬럼명 |
데이터 타입 |
설명 |
user_id |
INT (PK) |
사용자 고유 ID |
name |
VARCHAR(100) |
사용자 이름 |
role |
ENUM |
역할 (기안자, 결재자, 관리자) |
department |
VARCHAR(100) |
부서 |
이러한 테이블을 사용하면 전자 결재 시스템에서 문서의 생성, 결재 과정, 결재자 정보 등을 효율적으로 관리할 수 있습니다.
**** 자바 프로그램 ****
1. VO (Value Object) 클래스
전자 결재 시스템에서 사용할 VO 클래스를 작성합니다.
1.1 ApprovalDocumentVO.java (결재 문서 VO)
import lombok.Data;
import java.util.Date;
import java.util.List;
@Data
public class ApprovalDocumentVO {
private int docId; // 문서 고유 ID
private String title; // 문서 제목
private String content; // 문서 내용
private int drafterId; // 기안자 ID
private String status; // 문서 상태 (기안, 승인, 대결, 반려, 전결)
private Date createdAt; // 생성일
private Date updatedAt; // 수정일
}
1.2 ApprovalProcessVO.java (결재 진행 내역 VO)
import lombok.Data;
import java.util.Date;
@Data
public class ApprovalProcessVO {
private int processId; // 결재 과정 고유 ID
private int docId; // 문서 ID
private int approverId; // 결재자 ID
private String action; // 결재 상태 (승인, 대결, 반려, 전결)
private String comment; // 결재 의견
private Date processedAt; // 결재 처리일
}
1.3 UserVO.java (사용자 VO)
import lombok.Data;
@Data
public class UserVO {
private int userId; // 사용자 ID
private String name; // 사용자 이름
private String role; // 역할 (기안자, 결재자, 관리자)
private String department;// 부서
}
2. MyBatis Mapper XML
2.1 ApprovalMapper.xml (전자 결재 관련 SQL)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.ApprovalMapper">
<!-- 결재 문서 등록 -->
<insert id="insertApprovalDocument" parameterType="ApprovalDocumentVO">
INSERT INTO approval_documents (title, content, drafter_id, status, created_at, updated_at)
VALUES (#{title}, #{content}, #{drafterId}, '기안', NOW(), NOW());
</insert>
<!-- 결재 문서 조회 -->
<select id="getApprovalDocument" resultType="ApprovalDocumentVO">
SELECT * FROM approval_documents WHERE doc_id = #{docId};
</select>
<!-- 결재 문서 목록 조회 -->
<select id="getApprovalDocuments" resultType="ApprovalDocumentVO">
SELECT * FROM approval_documents ORDER BY created_at DESC;
</select>
<!-- 결재 처리 -->
<insert id="insertApprovalProcess" parameterType="ApprovalProcessVO">
INSERT INTO approval_process (doc_id, approver_id, action, comment, processed_at)
VALUES (#{docId}, #{approverId}, #{action}, #{comment}, NOW());
</insert>
<!-- 문서 상태 변경 -->
<update id="updateDocumentStatus">
UPDATE approval_documents SET status = #{status}, updated_at = NOW() WHERE doc_id = #{docId};
</update>
</mapper>
3. Mapper 인터페이스 (ApprovalMapper.java)
import com.example.vo.ApprovalDocumentVO;
import com.example.vo.ApprovalProcessVO;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface ApprovalMapper {
void insertApprovalDocument(ApprovalDocumentVO document); // 문서 등록
ApprovalDocumentVO getApprovalDocument(int docId); // 문서 조회
List<ApprovalDocumentVO> getApprovalDocuments(); // 문서 목록 조회
void insertApprovalProcess(ApprovalProcessVO process); // 결재 처리 내역 추가
void updateDocumentStatus(int docId, String status); // 문서 상태 업데이트
}
4. 서비스 클래스 (ApprovalService.java)
import com.example.mapper.ApprovalMapper;
import com.example.vo.ApprovalDocumentVO;
import com.example.vo.ApprovalProcessVO;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
@RequiredArgsConstructor
public class ApprovalService {
private final ApprovalMapper approvalMapper;
// 문서 생성
public void createDocument(ApprovalDocumentVO document) {
approvalMapper.insertApprovalDocument(document);
}
// 문서 조회
public ApprovalDocumentVO getDocument(int docId) {
return approvalMapper.getApprovalDocument(docId);
}
// 문서 목록 조회
public List<ApprovalDocumentVO> getDocuments() {
return approvalMapper.getApprovalDocuments();
}
// 결재 처리
public void processApproval(ApprovalProcessVO process) {
approvalMapper.insertApprovalProcess(process);
approvalMapper.updateDocumentStatus(process.getDocId(), process.getAction());
}
}
5. 컨트롤러 (ApprovalController.java)
import com.example.service.ApprovalService;
import com.example.vo.ApprovalDocumentVO;
import com.example.vo.ApprovalProcessVO;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/api/approval")
@RequiredArgsConstructor
public class ApprovalController {
private final ApprovalService approvalService;
// 문서 생성 API
@PostMapping("/create")
public String createDocument(@RequestBody ApprovalDocumentVO document) {
approvalService.createDocument(document);
return "문서가 기안되었습니다.";
}
// 문서 조회 API
@GetMapping("/{docId}")
public ApprovalDocumentVO getDocument(@PathVariable int docId) {
return approvalService.getDocument(docId);
}
// 문서 목록 조회 API
@GetMapping("/list")
public List<ApprovalDocumentVO> getDocuments() {
return approvalService.getDocuments();
}
// 결재 처리 API
@PostMapping("/process")
public String processApproval(@RequestBody ApprovalProcessVO process) {
approvalService.processApproval(process);
return "결재 처리가 완료되었습니다.";
}
}
|