feat: 관리자 단에서 '위원회 관리' > '위원회 일정 관리'에 '등록' 버튼을 누른 후 '위원회 일정 등록' 페이지에서 항목 입력 후 '저장'을 버튼 누를 때 저장되도록 구현

thkim
thkim 2024-01-09 18:02:31 +09:00
parent 38ad18fc74
commit bb9375513c
14 changed files with 302 additions and 70 deletions

View File

@ -39,3 +39,5 @@ out/
**/.idea
**/.vscode
/kcscDev/kcsc-back-end/src/main/resources/application-local.properties

View File

@ -90,4 +90,5 @@ dependencies {
implementation 'org.apache.commons:commons-lang3'
}

View File

@ -2,68 +2,31 @@ package com.dbnt.kcscbackend.admin.committee.schedules.controller;
import com.dbnt.kcscbackend.admin.committee.schedules.model.CreateScheduleVO;
import com.dbnt.kcscbackend.admin.committee.schedules.service.EgovIndvdlSchdulManageService;
import com.dbnt.kcscbackend.config.common.ResultVO;
import io.swagger.annotations.Api;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.*;
/**
* Controller Class
* @since 2009.04.10
* @see
* <pre>
* << (Modification Information) >>
*
* ------- -------- ---------------------------
* 2009.04.10
* 2011.05.31 JJY
* </pre>
* @author
* @version 1.0
* @created 09-6-2011 10:08:04
*/
@Api("SchedulesApiController")
@RestController
@Tag(name="SchedulesApiController",description = "일정관리")
@Tag(name="SchedulesApiController",description = "일정 관리")
public class SchedulesApiController {
@Resource(name = "egovIndvdlSchdulManageService")
private EgovIndvdlSchdulManageService egovIndvdlSchdulManageService;
/**
* 0
* @return String
* @throws
*/
public String DateTypeIntForString(int iInput) {
String sOutput = "";
if (Integer.toString(iInput).length() == 1) {
sOutput = "0" + Integer.toString(iInput);
} else {
sOutput = Integer.toString(iInput);
}
return sOutput;
}
/**
* ' ' > ' ' '' ' ' , API
* @param commandMap
* @return resultVO
* @throws Exception
*/
@Operation(
summary = "'위원회 일정 등록' 페이지 로딩 시, 필요한 데이터 불러 오는 API",
description = "관리자 단에서 '위원회 관리' > '위원회 일정 관리'에 '등록' 버튼을 누른 후 '위원회 일정 등록' 페이지 로딩 시, 필요한 데이터 불러 오는 API",
@ -74,18 +37,12 @@ public class SchedulesApiController {
@ApiResponse(responseCode = "403", description = "인가된 사용자가 아님")
})
@GetMapping(value = "/schedule/init")
public ResultVO ScheduleInit(@RequestParam Map<String, Object> commandMap) throws Exception {
public ResultVO scheduleInit(@RequestParam Map<String, Object> commandMap) throws Exception {
ResultVO resultVO = new ResultVO();
return egovIndvdlSchdulManageService.ScheduleInit(resultVO);
return egovIndvdlSchdulManageService.scheduleInit(resultVO);
}
/**
* ' ' , API
* @param paramCodeGroup
* @return
* @throws Exception
*/
@Operation(
summary = "'위원회 일정 등록' 페이지에서 심의위원회 첫 번째 거 선택 시, 하위 목록 불러오는 API",
description = "관리자 단에서 '위원회 관리' > '위원회 일정 관리'에 '등록' 버튼을 누른 후 '위원회 일정 등록' 페이지에서 심의위원회 첫 번째 거 선택 시, 하위 목록 불러오는 API",
@ -96,9 +53,43 @@ public class SchedulesApiController {
@ApiResponse(responseCode = "403", description = "인가된 사용자가 아님")
})
@GetMapping(value = "/schedule/api/org-api/depth/list")
public ResultVO ScheduleApiOrgApiDepthList(@RequestParam Integer paramCodeGroup) throws Exception {
public ResultVO scheduleApiOrgApiDepthList(@RequestParam Long paramCodeGroup) throws Exception {
ResultVO resultVO = new ResultVO();
return egovIndvdlSchdulManageService.ScheduleApiOrgApiDepthList(resultVO, paramCodeGroup);
return egovIndvdlSchdulManageService.scheduleApiOrgApiDepthList(resultVO, paramCodeGroup);
}
@Operation(
summary = "'위원회 일정 등록' 페이지에서 일정 등록하는 API",
description = "관리자 단에서 '위원회 관리' > '위원회 일정 관리'에 '등록' 버튼을 누른 후 '위원회 일정 등록' 페이지에서 일정 등록하는 API",
tags = {"SchedulesApiController"}
)
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "등록 성공"),
@ApiResponse(responseCode = "403", description = "인가된 사용자가 아님")
})
@PostMapping(value = "/schedule")
public ResultVO createSchedule(HttpServletRequest request, CreateScheduleVO createScheduleVO) throws Exception {
ResultVO resultVO = new ResultVO();
try {
resultVO = egovIndvdlSchdulManageService.createSchedule(resultVO, request, createScheduleVO);
} catch (Exception e) {
resultVO.setResultCode(-1);
resultVO.setResultMessage(e.getMessage());
}
System.out.println(
"\n--------------------------------------------------------------\n" +
request.getRequestURI() + " OUT:" +
"\n--------------------------------------------------------------\n" +
"resultVO.toString():" + "\n" +
resultVO.toString() + "\n" +
"\n--------------------------------------------------------------\n"
);
return resultVO;
}

View File

@ -0,0 +1,39 @@
package com.dbnt.kcscbackend.admin.committee.schedules.model;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.*;
import java.io.Serializable;
import java.time.LocalDateTime;
@ApiModel(value = "createScheduleVO", description =
"관리자 단에서 '위원회 관리' > '위원회 일정 관리'에 '등록' 버튼을 누른 후 '위원회 일정 등록' 페이지에서 일정 등록하는 API에 사용된다." + ""
)
@RequiredArgsConstructor
@Getter
@Setter
@ToString
public class CreateScheduleVO implements Serializable {
private static final long serialVersionUID = 6544623713351174876L;
@ApiModelProperty(value = "eventId")
private Integer eventId;
@ApiModelProperty(value = "startDate")
private String startDate;
@ApiModelProperty(value = "endDate")
private String endDate;
@ApiModelProperty(value = "title")
private String title;
@ApiModelProperty(value = "contents")
private String contents;
@ApiModelProperty(value = "location")
private String location;
@ApiModelProperty(value = "divMeet")
private String divMeet;
@ApiModelProperty(value = "upCommittee")
private Integer upCommittee;
@ApiModelProperty(value = "committee")
private Integer committee;
}

View File

@ -1,7 +1,12 @@
package com.dbnt.kcscbackend.admin.committee.schedules.service;
import com.dbnt.kcscbackend.admin.committee.schedules.model.CreateScheduleVO;
import com.dbnt.kcscbackend.config.common.ResultVO;
import org.springframework.web.bind.annotation.RequestBody;
import springfox.documentation.annotations.ApiIgnore;
import javax.servlet.http.HttpServletRequest;
/**
*
@ -22,8 +27,10 @@ public interface EgovIndvdlSchdulManageService {
public ResultVO ScheduleInit(ResultVO resultVO) throws Exception;
public ResultVO scheduleInit(ResultVO resultVO) throws Exception;
public ResultVO ScheduleApiOrgApiDepthList(ResultVO resultVO, Integer paramCodeGroup) throws Exception;
public ResultVO scheduleApiOrgApiDepthList(ResultVO resultVO, Long paramCodeGroup) throws Exception;
public ResultVO createSchedule(ResultVO resultVO, HttpServletRequest request, CreateScheduleVO createScheduleVO) throws Exception;
}

View File

@ -1,18 +1,28 @@
package com.dbnt.kcscbackend.admin.committee.schedules.service.impl;
import com.dbnt.kcscbackend.admin.committee.schedules.model.CreateScheduleVO;
import com.dbnt.kcscbackend.admin.committee.schedules.service.EgovIndvdlSchdulManageService;
import com.dbnt.kcscbackend.admin.config.repository.TcCodeItemRepository;
import com.dbnt.kcscbackend.admin.config.repository.TnCmtEventRepository;
import com.dbnt.kcscbackend.admin.config.repository.TnCmtOrgRepository;
import com.dbnt.kcscbackend.config.common.ResultVO;
import lombok.RequiredArgsConstructor;
import org.apache.tomcat.util.json.JSONParser;
import org.egovframe.rte.fdl.cmmn.EgovAbstractServiceImpl;
import org.springframework.boot.configurationprocessor.json.JSONObject;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.*;
import java.util.stream.Collectors;
/**
@ -36,9 +46,12 @@ public class EgovIndvdlSchdulManageServiceImpl extends EgovAbstractServiceImpl i
private final TcCodeItemRepository tcCodeItemRepository;
private final TnCmtOrgRepository tnCmtOrgRepository;
private final TnCmtEventRepository tnCmtEventRepository;
@Override
public ResultVO ScheduleInit(ResultVO resultVO) throws Exception {
public ResultVO scheduleInit(ResultVO resultVO) throws Exception {
Map<String, Object> resultMap = new HashMap<String, Object>();
@ -52,7 +65,7 @@ public class EgovIndvdlSchdulManageServiceImpl extends EgovAbstractServiceImpl i
})
.collect(Collectors.toList());
List<Map<String, Object>> listSubOrg = tnCmtOrgRepository.findByUseYnAndUpCmtSeqOrderByCmtOrder("Y", 3).stream()
List<Map<String, Object>> listSubOrg = tnCmtOrgRepository.findByUseYnAndUpCmtSeqOrderByCmtOrder("Y", 3L).stream()
.map(item -> {
Map<String, Object> codeMap = new HashMap<>();
codeMap.put("id", item.getCmtSeq());
@ -60,7 +73,7 @@ public class EgovIndvdlSchdulManageServiceImpl extends EgovAbstractServiceImpl i
return codeMap;
})
.collect(Collectors.toList());
List<Map<String, Object>> listTopOrg = tnCmtOrgRepository.findByUseYnAndUpCmtSeqOrderByCmtOrder("Y", 2).stream()
List<Map<String, Object>> listTopOrg = tnCmtOrgRepository.findByUseYnAndUpCmtSeqOrderByCmtOrder("Y", 2L).stream()
.map(item -> {
Map<String, Object> codeMap = new HashMap<>();
codeMap.put("id", item.getCmtSeq());
@ -78,7 +91,7 @@ public class EgovIndvdlSchdulManageServiceImpl extends EgovAbstractServiceImpl i
}
@Override
public ResultVO ScheduleApiOrgApiDepthList(ResultVO resultVO, Integer paramCodeGroup) throws Exception {
public ResultVO scheduleApiOrgApiDepthList(ResultVO resultVO, Long paramCodeGroup) throws Exception {
Map<String, Object> resultMap = new HashMap<String, Object>();
@ -98,5 +111,55 @@ public class EgovIndvdlSchdulManageServiceImpl extends EgovAbstractServiceImpl i
return resultVO;
}
@Override
@Transactional(rollbackFor = {Exception.class})
public ResultVO createSchedule(ResultVO resultVO, HttpServletRequest request, CreateScheduleVO createScheduleVO) throws Exception {
System.out.println(
"\n--------------------------------------------------------------\n" +
request.getRequestURI() + " IN:" +
"\n--------------------------------------------------------------\n" +
"createScheduleVO:" + "\n" +
createScheduleVO.toString() + "\n" +
"\n--------------------------------------------------------------\n"
);
Locale currentLocale = new Locale("KOREAN", "KOREA");
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", currentLocale);
Date date = formatter.parse(createScheduleVO.getStartDate());
LocalDate startDate = date.toInstant()
.atZone(ZoneId.systemDefault())
.toLocalDate();
LocalDateTime endDate = Instant.ofEpochMilli(date.getTime())
.atZone(ZoneId.systemDefault())
.toLocalDateTime();
Timestamp ts=new Timestamp(date.getTime());
tnCmtEventRepository.sp_add_tn_cmt_event(
createScheduleVO.getDivMeet(),
createScheduleVO.getUpCommittee(),
createScheduleVO.getCommittee(),
createScheduleVO.getTitle(),
createScheduleVO.getLocation(),
createScheduleVO.getContents(),
date,
date,
"admin",
null,
null,
null,
null
);
//resultVO.setResult();
resultVO.setResultMessage("OK");
resultVO.setResultCode(0);
return resultVO;
}
}

View File

@ -0,0 +1,77 @@
package com.dbnt.kcscbackend.admin.config.entity;
import lombok.*;
import org.hibernate.annotations.DynamicInsert;
import org.hibernate.annotations.DynamicUpdate;
import org.springframework.format.annotation.DateTimeFormat;
import javax.persistence.*;
import java.io.Serializable;
import java.time.LocalDateTime;
@Getter
@Setter
@Entity
@NoArgsConstructor
@DynamicInsert
@DynamicUpdate
@Table(name = "tn_cmt_event")
public class TnCmtEvent {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "evt_seq")
private Long evt_seq;
@Column(name = "evt_type")
private String evt_type;
@Column(name = "up_cmt_seq")
private Long up_cmt_seq;
@Column(name = "cmt_seq")
private Long cmt_seq;
@Column(name = "evt_title")
private String evt_title;
@Column(name = "evt_location")
private String evt_location;
@Column(name = "evt_contents")
private String evt_contents;
@Column(name = "evt_start_dt")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime evt_start_dt;
@Column(name = "evt_end_dt")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime evt_end_dt;
@Column(name = "frst_crt_id")
private String frst_crt_id;
@Column(name = "frst_crt_dt")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime frst_crt_dt;
@Column(name = "last_chg_id")
private String last_chg_id;
@Column(name = "last_chg_dt")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime last_chg_dt;
@Column(name = "use_yn")
private String use_yn;
@Embeddable
@Data
@NoArgsConstructor
@AllArgsConstructor
public static class TnCmtEventId implements Serializable {
private Long evt_seq;
}
}

View File

@ -20,7 +20,7 @@ public class TnCmtOrg {
@Id
@Column(name = "cmt_seq")
private Integer cmtSeq;
private Long cmtSeq;
@Column(name = "cmt_nm")
private String cmtNm;
@ -32,7 +32,7 @@ public class TnCmtOrg {
private String cmtDesc;
@Column(name = "up_cmt_seq")
private Integer upCmtSeq;
private Long upCmtSeq;
@Column(name = "cmt_order")
private Integer cmtOrder;
@ -55,7 +55,7 @@ public class TnCmtOrg {
private String useYn;
@Column(name = "old_seq")
private Integer oldSeq;
private Long oldSeq;
@Embeddable
@Data

View File

@ -0,0 +1,47 @@
package com.dbnt.kcscbackend.admin.config.repository;
import com.dbnt.kcscbackend.admin.config.entity.TnCmtEvent;
import com.dbnt.kcscbackend.admin.config.entity.TnCmtOrg;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.query.Procedure;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
public interface TnCmtEventRepository extends JpaRepository<TnCmtEvent, TnCmtEvent.TnCmtEventId> {
@Procedure
int sp_add_tn_cmt_event(
String evtType,
Integer upCmtSeq,
Integer cmtSeq,
String evtTitle,
String evtLocation,
String evtContents,
Date evtStartDt,
Date evtEndDt,
String modiId,
Integer _evt_seq,
Integer _result_count,
String _result_code,
String _error_message
);
/*
@Procedure
int sp_add_tn_cmt_event(
String _evt_type,
Integer _up_cmt_seq,
Integer _cmt_seq,
String _evt_title,
String _evt_location,
String _evt_contents,
String _evt_start_dt,
String _evt_end_dt,
String _modi_id
);
*/
}

View File

@ -7,6 +7,6 @@ import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
public interface TnCmtOrgRepository extends JpaRepository<TnCmtOrg, TnCmtOrg.TnCmtOrgId> {
List<TnCmtOrg> findByUseYnAndUpCmtSeqOrderByCmtOrder(String useYn, Integer upCmtSeq);
List<TnCmtOrg> findByUseYnAndUpCmtSeqOrderByCmtOrder(String useYn, Long upCmtSeq);
}

View File

@ -21,6 +21,7 @@ spring.datasource.password=dbnt0928!
spring.jpa.show-sql=true
spring.jpa.generate-ddl=false
spring.jpa.hibernate.naming.physical-strategy = org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
spring.jpa.properties.hibernate.proc.param_null_passing=true
# MyBatis
mybatis.mapper-locations: mybatisMapper/*.xml

View File

@ -13,8 +13,8 @@ spring.datasource.hikari.maximum-pool-size=4
#spring.datasource.username=kcsc
#spring.datasource.password=dbnt0928!
spring.datasource.driverClassName=net.sf.log4jdbc.sql.jdbcapi.DriverSpy
#spring.datasource.url=jdbc:log4jdbc:postgresql://127.0.0.1:5432/kcsc
spring.datasource.url=jdbc:log4jdbc:postgresql://118.219.150.34:50503/kcsc
spring.datasource.url=jdbc:log4jdbc:postgresql://127.0.0.1:5432/kcsc
#spring.datasource.url=jdbc:log4jdbc:postgresql://118.219.150.34:50503/kcsc
spring.datasource.username=dbnt0031
spring.datasource.password=dbnt0928!
@ -22,6 +22,8 @@ spring.datasource.password=dbnt0928!
spring.jpa.show-sql=true
spring.jpa.generate-ddl=false
spring.jpa.hibernate.naming.physical-strategy = org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
spring.jpa.properties.hibernate.proc.param_null_passing=true
# MyBatis
mybatis.mapper-locations: mybatisMapper/*.xml

View File

@ -24,6 +24,7 @@ spring.datasource.password=dbnt0928!
spring.jpa.show-sql=false
spring.jpa.generate-ddl=false
spring.jpa.hibernate.naming.physical-strategy = org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
spring.jpa.properties.hibernate.proc.param_null_passing=true
# MyBatis
mybatis.mapper-locations: mybatisMapper/*.xml

View File

@ -24,6 +24,7 @@ spring.datasource.password=dbnt0928!
spring.jpa.show-sql=false
spring.jpa.generate-ddl=false
spring.jpa.hibernate.naming.physical-strategy = org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
spring.jpa.properties.hibernate.proc.param_null_passing=true
# MyBatis
mybatis.mapper-locations: mybatisMapper/*.xml