worldEvent 추가

event > rewardEvent로 변경
This commit is contained in:
2025-09-15 16:03:34 +09:00
parent 3b76682616
commit 77c7870201
14 changed files with 813 additions and 171 deletions

View File

@@ -1,57 +0,0 @@
package com.caliverse.admin.domain.api;
import com.caliverse.admin.domain.request.EventRequest;
import com.caliverse.admin.domain.response.EventResponse;
import com.caliverse.admin.domain.service.EventService;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
@Tag(name = "이벤트", description = "이벤트 조회 및 발송 관리 메뉴 api")
@RestController
@RequiredArgsConstructor
@RequestMapping("/api/v1/event")
public class EventController {
private final EventService eventService;
// 리스트 조회
@GetMapping("/list")
public ResponseEntity<EventResponse> getList(
@RequestParam Map<String, String> requestParam){
return ResponseEntity.ok().body(eventService.getList(requestParam));
}
// 상세 조회
@GetMapping("/detail/{id}")
public ResponseEntity<EventResponse> getDetail(
@PathVariable("id") Long id){
return ResponseEntity.ok().body(eventService.getDetail(id));
}
@PostMapping
public ResponseEntity<EventResponse> postEvent(
@RequestBody EventRequest eventRequest){
return ResponseEntity.ok().body(eventService.postEvent(eventRequest));
}
@PutMapping("/{id}")
public ResponseEntity<EventResponse> updateEvent(
@PathVariable("id")Long id, @RequestBody EventRequest eventRequest){
return ResponseEntity.ok().body(eventService.updateEvent(id, eventRequest));
}
@DeleteMapping("/delete")
public ResponseEntity<EventResponse> deleteEvent(
@RequestBody EventRequest eventRequest){
return ResponseEntity.ok().body(eventService.deleteEvent(eventRequest));
}
@PostMapping("/item")
public ResponseEntity<EventResponse> getItem(
@RequestBody Map<String, String> item) {
return ResponseEntity.ok().body(eventService.getMetaItem(item.get("item")));
}
}

View File

@@ -0,0 +1,57 @@
package com.caliverse.admin.domain.api;
import com.caliverse.admin.domain.request.RewardEventRequest;
import com.caliverse.admin.domain.response.RewardEventResponse;
import com.caliverse.admin.domain.service.RewardEventService;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
@Tag(name = "보상 이벤트", description = "보상 이벤트 조회 및 발송 관리 메뉴 api")
@RestController
@RequiredArgsConstructor
@RequestMapping("/api/v1/event")
public class RewardEventController {
private final RewardEventService rewardEventService;
// 리스트 조회
@GetMapping("/list")
public ResponseEntity<RewardEventResponse> getList(
@RequestParam Map<String, String> requestParam){
return ResponseEntity.ok().body(rewardEventService.getList(requestParam));
}
// 상세 조회
@GetMapping("/detail/{id}")
public ResponseEntity<RewardEventResponse> getDetail(
@PathVariable("id") Long id){
return ResponseEntity.ok().body(rewardEventService.getDetail(id));
}
@PostMapping
public ResponseEntity<RewardEventResponse> postEvent(
@RequestBody RewardEventRequest rewardEventRequest){
return ResponseEntity.ok().body(rewardEventService.postEvent(rewardEventRequest));
}
@PutMapping("/{id}")
public ResponseEntity<RewardEventResponse> updateEvent(
@PathVariable("id")Long id, @RequestBody RewardEventRequest rewardEventRequest){
return ResponseEntity.ok().body(rewardEventService.updateEvent(id, rewardEventRequest));
}
@DeleteMapping("/delete")
public ResponseEntity<RewardEventResponse> deleteEvent(
@RequestBody RewardEventRequest rewardEventRequest){
return ResponseEntity.ok().body(rewardEventService.deleteEvent(rewardEventRequest));
}
@PostMapping("/item")
public ResponseEntity<RewardEventResponse> getItem(
@RequestBody Map<String, String> item) {
return ResponseEntity.ok().body(rewardEventService.getMetaItem(item.get("item")));
}
}

View File

@@ -0,0 +1,52 @@
package com.caliverse.admin.domain.api;
import com.caliverse.admin.domain.request.WorldEventRequest;
import com.caliverse.admin.domain.response.WorldEventResponse;
import com.caliverse.admin.domain.service.WorldEventService;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import java.util.Map;
@Tag(name = "월드이벤트", description = "월드이벤트 api")
@RestController
@RequiredArgsConstructor
@RequestMapping("/api/v1/world-event")
public class WorldEventController {
private final WorldEventService worldEventService;
@GetMapping("/list")
public ResponseEntity<WorldEventResponse> getWorldEventList(
@RequestParam Map<String, String> requestParam){
return ResponseEntity.ok().body( worldEventService.getList(requestParam));
}
@GetMapping("/detail/{id}")
public ResponseEntity<WorldEventResponse> getWorldEventDetail(
@PathVariable("id") Long id){
return ResponseEntity.ok().body( worldEventService.getDetail(id));
}
@PostMapping
public ResponseEntity<WorldEventResponse> postWorldEvent(
@RequestBody WorldEventRequest worldEventRequest){
return ResponseEntity.ok().body(worldEventService.postWorldEvent(worldEventRequest));
}
@PutMapping("/{id}")
public ResponseEntity<WorldEventResponse> updateWorldEvent(
@PathVariable("id")Long id, @RequestBody WorldEventRequest worldEventRequest){
return ResponseEntity.ok().body(worldEventService.updateWorldEvent(id, worldEventRequest));
}
@DeleteMapping("/delete")
public ResponseEntity<WorldEventResponse> deleteWorldEvent(
@RequestParam Long id){
return ResponseEntity.ok().body(worldEventService.deleteWorldEvent(id));
}
}

View File

@@ -1,30 +1,29 @@
package com.caliverse.admin.domain.dao.admin;
import com.caliverse.admin.domain.entity.Item;
import com.caliverse.admin.domain.entity.Event;
import com.caliverse.admin.domain.entity.Mail;
import com.caliverse.admin.domain.entity.RewardEvent;
import com.caliverse.admin.domain.entity.Message;
import com.caliverse.admin.domain.request.EventRequest;
import com.caliverse.admin.domain.request.RewardEventRequest;
import java.util.List;
import java.util.Map;
public interface EventMapper {
public interface RewardEventMapper {
List<Event> getEventList(Map map);
List<RewardEvent> getEventList(Map map);
int getAllCnt(Map map);
int getTotal();
Event getEventDetail(Long id);
RewardEvent getEventDetail(Long id);
List<Message> getMessage(Long id);
List<Item> getItem(Long id);
int postEvent(EventRequest mailRequest);
int postEvent(RewardEventRequest mailRequest);
void insertMessage(Map map);
void insertItem(Map map);
int updateEvent(EventRequest mailRequest);
int updateEvent(RewardEventRequest mailRequest);
int deleteMessage(Map map);
@@ -35,5 +34,5 @@ public interface EventMapper {
int updateStatusEvent(Map map);
int updateAddFlag(Long id);
List<Event> getScheduleEventList();
List<RewardEvent> getScheduleEventList();
}

View File

@@ -0,0 +1,21 @@
package com.caliverse.admin.domain.dao.admin;
import com.caliverse.admin.domain.entity.WorldEvent;
import com.caliverse.admin.domain.request.WorldEventRequest;
import java.util.List;
import java.util.Map;
public interface WorldEventMapper {
List<WorldEvent> getWorldEventList(Map map);
int getTotal();
WorldEvent getWorldEventDetail(Long id);
int postWorldEvent(WorldEventRequest worldEventRequest);
int updateWorldEvent(WorldEventRequest worldEventRequest);
int deleteWorldEvent(Map map);
int checkOverlap(WorldEventRequest worldEventRequest);
}

View File

@@ -1,7 +1,7 @@
package com.caliverse.admin.domain.request;
import com.caliverse.admin.domain.entity.Item;
import com.caliverse.admin.domain.entity.Event;
import com.caliverse.admin.domain.entity.RewardEvent;
import com.caliverse.admin.domain.entity.Message;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.*;
@@ -13,7 +13,7 @@ import java.util.List;
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class EventRequest {
public class RewardEventRequest {
private Long id;
@JsonProperty("mail_list")
@@ -21,7 +21,7 @@ public class EventRequest {
@JsonProperty("item_list")
private List<Item> itemList; // 아이템
@JsonProperty("event_type")
private Event.EVENTTYPE eventType;
private RewardEvent.EVENTTYPE eventType;
@JsonProperty("start_dt")
private LocalDateTime startDt; // 시작 시간
@JsonProperty("end_dt")
@@ -37,6 +37,6 @@ public class EventRequest {
private LocalDateTime updateDt;
//삭제용 id
private List<Event> list;
private List<RewardEvent> list;
}

View File

@@ -0,0 +1,36 @@
package com.caliverse.admin.domain.request;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.*;
import java.time.LocalDateTime;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class WorldEventRequest {
private Long id;
private String title;
@JsonProperty("start_dt")
private LocalDateTime startDt;
@JsonProperty("end_dt")
private LocalDateTime endDt;
@JsonProperty("global_event_action_id")
private Integer globalEventActionId;
@JsonProperty("personal_event_action_id")
private Integer personalEventActionId;
@JsonProperty("max_point")
private Integer maxPoint;
@JsonProperty("create_by")
private Long createBy;
@JsonProperty("create_dt")
private LocalDateTime createDt;
@JsonProperty("update_by")
private Long updateBy;
@JsonProperty("update_dt")
private LocalDateTime updateDt;
}

View File

@@ -1,6 +1,6 @@
package com.caliverse.admin.domain.response;
import com.caliverse.admin.domain.entity.Event;
import com.caliverse.admin.domain.entity.RewardEvent;
import com.caliverse.admin.domain.entity.Item;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
@@ -15,7 +15,7 @@ import java.util.List;
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class EventResponse {
public class RewardEventResponse {
private int status;
private String result;
@@ -31,10 +31,10 @@ public class EventResponse {
private String message;
@JsonProperty("detail")
private Event event;
private RewardEvent rewardEvent;
@JsonProperty("list")
private List<Event> eventList;
private List<RewardEvent> rewardEventList;
private int total;
@JsonProperty("total_all")
private int totalAll;

View File

@@ -0,0 +1,45 @@
package com.caliverse.admin.domain.response;
import com.caliverse.admin.domain.entity.MenuBanner;
import com.caliverse.admin.domain.entity.WorldEvent;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class WorldEventResponse {
private int status;
private String result;
@JsonProperty("data")
private ResultData resultData;
@Data
@Builder
@JsonInclude(JsonInclude.Include.NON_NULL)
public static class ResultData{
private String message;
@JsonProperty("detail")
private WorldEvent worldEvent;
@JsonProperty("list")
private List<WorldEvent> worldEventList;
private int total;
@JsonProperty("total_all")
private int totalAll;
@JsonProperty("page_no")
private int pageNo;
}
}

View File

@@ -1,12 +1,12 @@
package com.caliverse.admin.domain.service;
import com.caliverse.admin.domain.dao.admin.EventMapper;
import com.caliverse.admin.domain.dao.admin.RewardEventMapper;
import com.caliverse.admin.domain.datacomponent.MetaDataHandler;
import com.caliverse.admin.domain.entity.*;
import com.caliverse.admin.domain.entity.log.LogAction;
import com.caliverse.admin.domain.entity.log.LogStatus;
import com.caliverse.admin.domain.request.EventRequest;
import com.caliverse.admin.domain.response.EventResponse;
import com.caliverse.admin.domain.request.RewardEventRequest;
import com.caliverse.admin.domain.response.RewardEventResponse;
import com.caliverse.admin.dynamodb.service.DynamodbMailService;
import com.caliverse.admin.dynamodb.service.DynamodbService;
import com.caliverse.admin.global.common.annotation.BusinessProcess;
@@ -20,7 +20,6 @@ import com.caliverse.admin.global.component.manager.BusinessProcessIdManager;
import com.caliverse.admin.mongodb.service.MysqlHistoryLogService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.json.JSONObject;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.support.TransactionSynchronization;
@@ -34,30 +33,30 @@ import java.util.Map;
@Service
@Slf4j
@RequiredArgsConstructor
public class EventService {
public class RewardEventService {
private final DynamodbService dynamodbService;
private final DynamodbMailService dynamodbMailService;
private final EventMapper eventMapper;
private final RewardEventMapper rewardEventMapper;
private final MetaDataHandler metaDataHandler;
private final MysqlHistoryLogService mysqlHistoryLogService;
private final BusinessProcessIdManager processIdManager;
@RequestLog
public EventResponse getList(Map requestParam){
public RewardEventResponse getList(Map requestParam){
//페이징 처리
requestParam = CommonUtils.pageSetting(requestParam);
List<Event> list = eventMapper.getEventList(requestParam);
List<RewardEvent> list = rewardEventMapper.getEventList(requestParam);
int allCnt = eventMapper.getAllCnt(requestParam);
int allCnt = rewardEventMapper.getAllCnt(requestParam);
return EventResponse.builder()
return RewardEventResponse.builder()
.status(CommonCode.SUCCESS.getHttpStatus())
.result(CommonCode.SUCCESS.getResult())
.resultData(EventResponse.ResultData.builder()
.eventList(list)
.total(eventMapper.getTotal())
.resultData(RewardEventResponse.ResultData.builder()
.rewardEventList(list)
.total(rewardEventMapper.getTotal())
.totalAll(allCnt)
.pageNo(requestParam.get("page_no")!=null?
Integer.valueOf(requestParam.get("page_no").toString()):1)
@@ -67,24 +66,24 @@ public class EventService {
}
@RequestLog
public EventResponse getDetail(Long id){
Event event = eventMapper.getEventDetail(id);
public RewardEventResponse getDetail(Long id){
RewardEvent rewardEvent = rewardEventMapper.getEventDetail(id);
event.setMailList(eventMapper.getMessage(id));
List<Item> itemList = eventMapper.getItem(id);
rewardEvent.setMailList(rewardEventMapper.getMessage(id));
List<Item> itemList = rewardEventMapper.getItem(id);
for(Item item : itemList){
String itemName = metaDataHandler.getMetaItemNameData(Integer.parseInt(item.getItem()));
item.setItemName(metaDataHandler.getTextStringData(itemName));
}
event.setItemList(itemList);
rewardEvent.setItemList(itemList);
log.info("getDetail call User Email: {}, event_id: {}", CommonUtils.getAdmin().getEmail(), id);
return EventResponse.builder()
return RewardEventResponse.builder()
.status(CommonCode.SUCCESS.getHttpStatus())
.result(CommonCode.SUCCESS.getResult())
.resultData(EventResponse.ResultData.builder()
.event(event)
.resultData(RewardEventResponse.ResultData.builder()
.rewardEvent(rewardEvent)
.build())
.build();
}
@@ -92,37 +91,37 @@ public class EventService {
@BusinessProcess(action = LogAction.EVENT)
@Transactional(transactionManager = "transactionManager")
@RequestLog
public EventResponse postEvent(EventRequest eventRequest){
eventRequest.setCreateBy(CommonUtils.getAdmin().getId());
public RewardEventResponse postEvent(RewardEventRequest rewardEventRequest){
rewardEventRequest.setCreateBy(CommonUtils.getAdmin().getId());
int result = eventMapper.postEvent(eventRequest);
log.info("postEvent AdminToolDB Event Save id: {}", eventRequest.getId());
int result = rewardEventMapper.postEvent(rewardEventRequest);
log.info("postEvent AdminToolDB Event Save id: {}", rewardEventRequest.getId());
long event_id = eventRequest.getId();
long event_id = rewardEventRequest.getId();
HashMap<String,String> map = new HashMap<>();
map.put("mailId",String.valueOf(event_id));
//아이템 저장
if(eventRequest.getItemList()!= null && !eventRequest.getItemList().isEmpty()){
eventRequest.getItemList().forEach(
if(rewardEventRequest.getItemList()!= null && !rewardEventRequest.getItemList().isEmpty()){
rewardEventRequest.getItemList().forEach(
item -> {
map.put("goodsId",item.getItem());
map.put("itemCnt",String.valueOf(item.getItemCnt()));
eventMapper.insertItem(map);
rewardEventMapper.insertItem(map);
}
);
}
log.info("postEvent AdminToolDB Item Save Complete");
//메시지 저장
if(eventRequest.getMailList()!= null && !eventRequest.getMailList().isEmpty()){
eventRequest.getMailList().forEach(
if(rewardEventRequest.getMailList()!= null && !rewardEventRequest.getMailList().isEmpty()){
rewardEventRequest.getMailList().forEach(
item -> {
map.put("title",item.getTitle());
map.put("content",item.getContent());
map.put("language",item.getLanguage());
eventMapper.insertMessage(map);
rewardEventMapper.insertMessage(map);
}
);
}
@@ -130,9 +129,9 @@ public class EventService {
String prodId = processIdManager.getCurrentProcessId();
Event event = eventMapper.getEventDetail(event_id);
event.setMailList(eventMapper.getMessage(event_id));
event.setItemList(eventMapper.getItem(event_id));
RewardEvent rewardEvent = rewardEventMapper.getEventDetail(event_id);
rewardEvent.setMailList(rewardEventMapper.getMessage(event_id));
rewardEvent.setItemList(rewardEventMapper.getItem(event_id));
TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
@Override
@@ -144,7 +143,7 @@ public class EventService {
LogStatus.SUCCESS,
MysqlConstants.TABLE_NAME_EVENT,
"",
event
rewardEvent
);
} catch (Exception e) {
log.warn("Failed to log event creation: {}", e.getMessage());
@@ -152,10 +151,10 @@ public class EventService {
}
});
return EventResponse.builder()
return RewardEventResponse.builder()
.status(CommonCode.SUCCESS.getHttpStatus())
.result(CommonCode.SUCCESS.getResult())
.resultData(EventResponse.ResultData.builder()
.resultData(RewardEventResponse.ResultData.builder()
.message(SuccessCode.SAVE.getMessage())
.build())
.build();
@@ -164,52 +163,52 @@ public class EventService {
@BusinessProcess(action = LogAction.EVENT)
@Transactional(transactionManager = "transactionManager")
@RequestLog
public EventResponse updateEvent(Long id, EventRequest eventRequest) {
eventRequest.setId(id);
eventRequest.setUpdateBy(CommonUtils.getAdmin().getId());
eventRequest.setUpdateDt(LocalDateTime.now());
public RewardEventResponse updateEvent(Long id, RewardEventRequest rewardEventRequest) {
rewardEventRequest.setId(id);
rewardEventRequest.setUpdateBy(CommonUtils.getAdmin().getId());
rewardEventRequest.setUpdateDt(LocalDateTime.now());
Long event_id = eventRequest.getId();
Event before_info = eventMapper.getEventDetail(event_id);
before_info.setMailList(eventMapper.getMessage(event_id));
before_info.setItemList(eventMapper.getItem(event_id));
Long event_id = rewardEventRequest.getId();
RewardEvent before_info = rewardEventMapper.getEventDetail(event_id);
before_info.setMailList(rewardEventMapper.getMessage(event_id));
before_info.setItemList(rewardEventMapper.getItem(event_id));
int result = eventMapper.updateEvent(eventRequest);
int result = rewardEventMapper.updateEvent(rewardEventRequest);
Map<String, String> map = new HashMap<>();
map.put("mailId", String.valueOf(event_id));
// item 테이블 데이터 삭제 처리 by event_id
eventMapper.deleteItem(map);
rewardEventMapper.deleteItem(map);
// 아이템 업데이트
if (eventRequest.getItemList() != null && !eventRequest.getItemList().isEmpty()) {
eventRequest.getItemList().forEach(item -> {
if (rewardEventRequest.getItemList() != null && !rewardEventRequest.getItemList().isEmpty()) {
rewardEventRequest.getItemList().forEach(item -> {
map.put("goodsId", item.getItem());
map.put("itemCnt", String.valueOf(item.getItemCnt()));
eventMapper.insertItem(map);
rewardEventMapper.insertItem(map);
});
}
// message 테이블 데이터 삭제 처리 by mail_id
eventMapper.deleteMessage(map);
rewardEventMapper.deleteMessage(map);
// 메시지 업데이트
if (eventRequest.getMailList() != null && !eventRequest.getMailList().isEmpty()) {
eventRequest.getMailList().forEach(item -> {
if (rewardEventRequest.getMailList() != null && !rewardEventRequest.getMailList().isEmpty()) {
rewardEventRequest.getMailList().forEach(item -> {
map.put("title", item.getTitle());
map.put("content", item.getContent());
map.put("language", item.getLanguage());
eventMapper.insertMessage(map);
rewardEventMapper.insertMessage(map);
});
}
log.info("updateEvent AdminToolDB Event Update Complete id: {}", eventRequest.getId());
log.info("updateEvent AdminToolDB Event Update Complete id: {}", rewardEventRequest.getId());
Event after_event = eventMapper.getEventDetail(event_id);
after_event.setMailList(eventMapper.getMessage(event_id));
after_event.setItemList(eventMapper.getItem(event_id));
RewardEvent after_Reward_event = rewardEventMapper.getEventDetail(event_id);
after_Reward_event.setMailList(rewardEventMapper.getMessage(event_id));
after_Reward_event.setItemList(rewardEventMapper.getItem(event_id));
String prodId = processIdManager.getCurrentProcessId();
TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
@@ -223,7 +222,7 @@ public class EventService {
MysqlConstants.TABLE_NAME_EVENT,
"",
before_info,
after_event
after_Reward_event
);
} catch (Exception e) {
log.warn("Failed to log event creation: {}", e.getMessage());
@@ -231,10 +230,10 @@ public class EventService {
}
});
return EventResponse.builder()
return RewardEventResponse.builder()
.status(CommonCode.SUCCESS.getHttpStatus())
.result(CommonCode.SUCCESS.getResult())
.resultData(EventResponse.ResultData.builder()
.resultData(RewardEventResponse.ResultData.builder()
.message(SuccessCode.UPDATE.getMessage())
.build())
.build();
@@ -243,54 +242,54 @@ public class EventService {
@BusinessProcess(action = LogAction.EVENT)
@Transactional(transactionManager = "transactionManager")
@RequestLog
public EventResponse deleteEvent(EventRequest eventRequest){
public RewardEventResponse deleteEvent(RewardEventRequest rewardEventRequest){
Map<String,Object> map = new HashMap<>();
eventRequest.getList().forEach(
rewardEventRequest.getList().forEach(
item->{
Long event_id = item.getId();
Event event = eventMapper.getEventDetail(event_id);
event.setMailList(eventMapper.getMessage(event_id));
event.setItemList(eventMapper.getItem(event_id));
RewardEvent rewardEvent = rewardEventMapper.getEventDetail(event_id);
rewardEvent.setMailList(rewardEventMapper.getMessage(event_id));
rewardEvent.setItemList(rewardEventMapper.getItem(event_id));
map.put("id",event_id);
map.put("desc", item.getDeleteDesc());
int result = eventMapper.deleteEvent(map);
int result = rewardEventMapper.deleteEvent(map);
log.info("updateEvent AdminTool Delete Complete id: {}", event_id);
}
);
return EventResponse.builder()
return RewardEventResponse.builder()
.status(CommonCode.SUCCESS.getHttpStatus())
.result(CommonCode.SUCCESS.getResult())
.resultData(EventResponse.ResultData.builder()
.resultData(RewardEventResponse.ResultData.builder()
.message(SuccessCode.DELETE.getMessage())
.build())
.build();
}
public List<Event> getScheduleMailList(){
return eventMapper.getScheduleEventList();
public List<RewardEvent> getScheduleMailList(){
return rewardEventMapper.getScheduleEventList();
}
public List<Message> getMessageList(Long id){
return eventMapper.getMessage(id);
return rewardEventMapper.getMessage(id);
}
public List<Item> getItemList(Long id){
return eventMapper.getItem(id);
return rewardEventMapper.getItem(id);
}
@Transactional(transactionManager = "transactionManager")
public void updateEventStatus(Long id, Event.EVENTSTATUS status){
public void updateEventStatus(Long id, RewardEvent.EVENTSTATUS status){
Map<String,Object> map = new HashMap<>();
map.put("id", id);
map.put("status", status.toString());
eventMapper.updateStatusEvent(map);
rewardEventMapper.updateStatusEvent(map);
log.info("updateEventStatus event status changed: {}", status);
}
//메타 아이템
public EventResponse getMetaItem(String metaId){
public RewardEventResponse getMetaItem(String metaId){
long id = Long.parseLong(metaId);
String item = metaDataHandler.getMetaItemNameData((int) id);
boolean isItem = (item != null && !item.isEmpty());
@@ -298,40 +297,40 @@ public class EventService {
Item item_info = new Item();
item_info.setItem(metaId);
item_info.setItemName(metaDataHandler.getTextStringData(item));
return EventResponse.builder()
return RewardEventResponse.builder()
.status(CommonCode.SUCCESS.getHttpStatus())
.result(CommonCode.SUCCESS.getResult())
.resultData(EventResponse.ResultData.builder()
.resultData(RewardEventResponse.ResultData.builder()
.message(SuccessCode.ITEM_EXIST.getMessage())
.itemInfo(item_info)
.build())
.build();
}else
return EventResponse.builder()
return RewardEventResponse.builder()
.status(CommonCode.ERROR.getHttpStatus())
.result(CommonCode.ERROR.getResult())
.resultData(EventResponse.ResultData.builder()
.resultData(RewardEventResponse.ResultData.builder()
.message(ErrorCode.NOT_ITEM.getMessage())
.build())
.build();
}
@Transactional(transactionManager = "transactionManager")
public void insertSystemMail(Event event){
public void insertSystemMail(RewardEvent rewardEvent){
try {
long event_id = event.getId();
event.setMailList(eventMapper.getMessage(event_id));
event.setItemList(eventMapper.getItem(event_id));
long event_id = rewardEvent.getId();
rewardEvent.setMailList(rewardEventMapper.getMessage(event_id));
rewardEvent.setItemList(rewardEventMapper.getItem(event_id));
dynamodbMailService.insertSystemMail(event);
dynamodbMailService.insertSystemMail(rewardEvent);
eventMapper.updateAddFlag(event_id);
updateEventStatus(event_id, Event.EVENTSTATUS.RUNNING);
rewardEventMapper.updateAddFlag(event_id);
updateEventStatus(event_id, RewardEvent.EVENTSTATUS.RUNNING);
log.info("insertSystemMail Save Complete: {}", event.getId());
log.info("insertSystemMail Save Complete: {}", rewardEvent.getId());
}catch (Exception e){
log.error("insertSystemMail Exception: {}", e.getMessage());
updateEventStatus(event.getId(), Event.EVENTSTATUS.FAIL);
updateEventStatus(rewardEvent.getId(), RewardEvent.EVENTSTATUS.FAIL);
}
}
}

View File

@@ -0,0 +1,158 @@
package com.caliverse.admin.domain.service;
import com.caliverse.admin.domain.dao.admin.WorldEventMapper;
import com.caliverse.admin.domain.entity.WorldEvent;
import com.caliverse.admin.domain.entity.log.LogAction;
import com.caliverse.admin.domain.request.WorldEventRequest;
import com.caliverse.admin.domain.response.WorldEventResponse;
import com.caliverse.admin.dynamodb.service.DynamodbRankService;
import com.caliverse.admin.dynamodb.service.DynamodbService;
import com.caliverse.admin.global.common.annotation.BusinessProcess;
import com.caliverse.admin.global.common.annotation.RequestLog;
import com.caliverse.admin.global.common.code.CommonCode;
import com.caliverse.admin.global.common.code.ErrorCode;
import com.caliverse.admin.global.common.code.SuccessCode;
import com.caliverse.admin.global.common.utils.CommonUtils;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Slf4j
@Service
@RequiredArgsConstructor
public class WorldEventService {
private final WorldEventMapper worldEventMapper;
private final DynamodbService dynamodbService;
@RequestLog
public WorldEventResponse getList(Map requestParam){
//페이징 처리
requestParam = CommonUtils.pageSetting(requestParam);
List<WorldEvent> list = worldEventMapper.getWorldEventList(requestParam);
return WorldEventResponse.builder()
.status(CommonCode.SUCCESS.getHttpStatus())
.result(CommonCode.SUCCESS.getResult())
.resultData(WorldEventResponse.ResultData.builder()
.worldEventList(list)
.total(worldEventMapper.getTotal())
.totalAll(list.size())
.pageNo(requestParam.get("page_no")!=null?
Integer.parseInt(requestParam.get("page_no").toString()):1)
.build()
)
.build();
}
@RequestLog
public WorldEventResponse getDetail(Long id){
WorldEvent worldEvent = worldEventMapper.getWorldEventDetail(id);
return WorldEventResponse.builder()
.status(CommonCode.SUCCESS.getHttpStatus())
.result(CommonCode.SUCCESS.getResult())
.resultData(WorldEventResponse.ResultData.builder()
.worldEvent(worldEvent)
.build())
.build();
}
@BusinessProcess(action = LogAction.WORLD_EVENT)
@Transactional(transactionManager = "transactionManager")
@RequestLog
public WorldEventResponse postWorldEvent(WorldEventRequest worldEventRequest){
worldEventRequest.setCreateBy(CommonUtils.getAdmin().getId());
worldEventMapper.postWorldEvent(worldEventRequest);
long event_id = worldEventRequest.getId();
HashMap<String,String> map = new HashMap<>();
map.put("id",String.valueOf(event_id));
log.info("postWorldEvent Insert World Event id: {}", worldEventRequest.getId());
WorldEvent worldEvent = worldEventMapper.getWorldEventDetail(worldEventRequest.getId());
dynamodbService.insertWorldEventSchedule(worldEventRequest);
return WorldEventResponse.builder()
.status(CommonCode.SUCCESS.getHttpStatus())
.result(CommonCode.SUCCESS.getResult())
.resultData(WorldEventResponse.ResultData.builder()
.message(SuccessCode.SAVE.getMessage())
.build())
.build();
}
@BusinessProcess(action = LogAction.WORLD_EVENT)
@Transactional(transactionManager = "transactionManager")
@RequestLog
public WorldEventResponse updateWorldEvent(Long id, WorldEventRequest worldEventRequest) {
worldEventRequest.setId(id);
worldEventRequest.setUpdateBy(CommonUtils.getAdmin().getId());
worldEventRequest.setUpdateDt(LocalDateTime.now());
Long event_id = worldEventRequest.getId();
WorldEvent before_info = worldEventMapper.getWorldEventDetail(event_id);
worldEventMapper.updateWorldEvent(worldEventRequest);
log.info("updateWorldEvent Update World Event Complete: {}", worldEventRequest.getId());
WorldEvent after_info = worldEventMapper.getWorldEventDetail(event_id);
dynamodbService.updateWorldEventSchedule(worldEventRequest);
return WorldEventResponse.builder()
.status(CommonCode.SUCCESS.getHttpStatus())
.result(CommonCode.SUCCESS.getResult())
.resultData(WorldEventResponse.ResultData.builder()
.message(SuccessCode.UPDATE.getMessage())
.build())
.build();
}
@BusinessProcess(action = LogAction.WORLD_EVENT)
@Transactional(transactionManager = "transactionManager")
@RequestLog
public WorldEventResponse deleteWorldEvent(Long id){
Map<String,Object> map = new HashMap<>();
map.put("id",id);
WorldEvent worldEvent = worldEventMapper.getWorldEventDetail(id);
if(worldEvent.getStartDt().isBefore(LocalDateTime.now())){
return WorldEventResponse.builder()
.status(CommonCode.ERROR.getHttpStatus())
.result(CommonCode.ERROR.getResult())
.resultData(WorldEventResponse.ResultData.builder()
.message(ErrorCode.START_DATE_OVER.getMessage())
.build())
.build();
}
worldEventMapper.deleteWorldEvent(map);
log.info("deleteWorldEvent Delete World Event Complete id: {}", id);
dynamodbService.deleteWorldEventSchedule(worldEvent);
return WorldEventResponse.builder()
.status(CommonCode.SUCCESS.getHttpStatus())
.result(CommonCode.SUCCESS.getResult())
.resultData(WorldEventResponse.ResultData.builder()
.message(SuccessCode.DELETE.getMessage())
.build())
.build();
}
}

View File

@@ -0,0 +1,174 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.caliverse.admin.domain.dao.admin.RankMapper">
<resultMap id="RankScheduleResultMap" type="com.caliverse.admin.domain.entity.RankingSchedule">
<id property="id" column="id"/>
<result property="rowNum" column="row_num"/>
<result property="guid" column="guid"/>
<result property="title" column="title"/>
<result property="metaId" column="meta_id"/>
<result property="eventActionId" column="event_action_id"/>
<result property="status" column="status"/>
<result property="startDt" column="start_dt"/>
<result property="endDt" column="end_dt"/>
<result property="baseDt" column="base_dt"/>
<result property="refreshInterval" column="refresh_interval"/>
<result property="initializationInterval" column="initialization_interval"/>
<result property="snapshotInterval" column="snapshot_interval"/>
<result property="deleted" column="deleted"/>
<result property="createBy" column="create_by"/>
<result property="createDt" column="create_dt"/>
<result property="updateBy" column="update_by"/>
<result property="updateDt" column="update_dt"/>
</resultMap>
<!--리스트 조회-->
<select id="getRankingScheduleList" resultMap="RankScheduleResultMap" parameterType="map">
SELECT * FROM (
SELECT (@row_number:=@row_number + 1) AS row_num, c.*
FROM (
SELECT
a.id,
a.guid,
a.title,
a.meta_id,
a.event_action_id,
CASE
WHEN NOW() &lt; a.start_dt THEN 'WAIT'
WHEN NOW() &gt;= a.start_dt AND NOW() &lt;= a.end_dt THEN 'RUNNING'
WHEN NOW() &gt; a.end_dt THEN 'FINISH'
END AS status,
a.start_dt,
a.end_dt,
a.base_dt,
a.refresh_interval,
a.initialization_interval,
a.snapshot_interval,
(SELECT email FROM admin WHERE id = a.create_by) AS create_by,
a.create_dt,
(SELECT email FROM admin WHERE id = a.update_by) AS update_by,
a.update_dt
FROM ranking_schedule a
WHERE 1 = 1
AND a.deleted = 0
<if test="searchData != null and searchData != ''">
AND a.title LIKE CONCAT('%',#{searchData},'%')
</if>
<if test="status != null and status != ''">
<choose>
<when test="status != 'ALL'">
AND CASE
WHEN NOW() &lt; a.start_dt THEN 'WAIT'
WHEN NOW() &gt;= a.start_dt AND NOW() &lt;= a.end_dt THEN 'RUNNING'
WHEN NOW() &gt; a.end_dt THEN 'FINISH'
END = #{status}
</when>
</choose>
</if>
<if test="startDate != null and startDate != '' and endDate !=null and endDate!= ''">
AND a.start_dt &gt;= #{startDate, jdbcType=TIMESTAMP}
AND a.end_dt &lt;= #{endDate, jdbcType=TIMESTAMP}
</if>
) c,
(SELECT @row_number:=0) AS t
ORDER BY
CASE
WHEN c.status = 'RUNNING' THEN 0
WHEN c.status = 'WAIT' THEN 1
WHEN c.status = 'FINISH' THEN 2
ELSE 3
END,
c.create_dt
) result
<if test="orderby != null and orderby != ''">
ORDER BY row_num ${orderby}
</if>
<if test="pageSize != null and pageSize != ''">
LIMIT ${pageSize} OFFSET ${offset}
</if>
</select>
<select id="getTotal" resultType="java.lang.Integer" parameterType="map">
SELECT count(*) FROM ranking_schedule WHERE deleted = 0
</select>
<!--이벤트 상세 조회-->
<select id="getRankingScheduleDetail" parameterType="java.lang.Long" resultMap="RankScheduleResultMap" >
SELECT
a.id
, a.guid
, a.title
, a.meta_id
, a.event_action_id
, a.start_dt
, a.end_dt
, a.base_dt
, a.refresh_interval
, a.initialization_interval
, a.snapshot_interval
, CASE
WHEN NOW() &lt; a.start_dt THEN 'WAIT'
WHEN NOW() &gt;= a.start_dt AND NOW() &lt;= a.end_dt THEN 'RUNNING'
WHEN NOW() &gt; a.end_dt THEN 'FINISH'
END AS status
, (SELECT email FROM admin WHERE id = a.create_by ) AS create_by
, a.create_dt
, (SELECT email FROM admin WHERE id = a.update_by ) AS update_by
, a.update_dt
FROM ranking_schedule a
WHERE a.id = #{id}
AND deleted = 0
</select>
<select id="checkOverlap" parameterType="com.caliverse.admin.domain.request.RankRequest" resultType="java.lang.Integer">
SELECT COUNT(*)
FROM ranking_schedule a
WHERE a.meta_id = #{metaId}
AND a.deleted = 0
AND a.meta_id != #{metaId}
AND (
(#{startDt} BETWEEN a.start_dt AND a.end_dt)
OR (#{endDt} BETWEEN a.start_dt AND a.end_dt)
OR (a.start_dt BETWEEN #{startDt} AND #{endDt})
OR (a.end_dt BETWEEN #{startDt} AND #{endDt})
)
</select>
<!--저장-->
<insert id="postRankingSchedule" parameterType="com.caliverse.admin.domain.request.RankRequest" useGeneratedKeys="true" keyProperty="id">
INSERT INTO ranking_schedule (guid, title, meta_id, event_action_id, start_dt, end_dt, base_dt, refresh_interval, initialization_interval, snapshot_interval, create_by, update_by)
VALUES (#{guid}, #{title}, #{metaId}, #{eventActionId}, #{startDt}, #{endDt}, #{baseDt}, #{refreshInterval}, #{initializationInterval}, #{snapshotInterval}, #{createBy}, #{updateBy})
</insert>
<!--수정-->
<update id="updateRankingSchedule" parameterType="com.caliverse.admin.domain.request.RankRequest">
UPDATE ranking_schedule
SET title = #{title}
, meta_id = #{metaId}
, event_action_id = #{eventActionId}
, start_dt = #{startDt}
, end_dt = #{endDt}
, base_dt = #{baseDt}
, refresh_interval = #{refreshInterval}
, initialization_interval = #{initializationInterval}
, snapshot_interval = #{snapshotInterval}
, update_by = #{updateBy}
, update_dt = NOW()
WHERE id = #{id}
</update>
<!--삭제-->
<update id="deleteRankingSchedule" parameterType="map">
UPDATE ranking_schedule
SET deleted = 1
, update_by = #{updateBy}
, update_dt = NOW()
WHERE id = #{id}
</update>
</mapper>

View File

@@ -1,7 +1,7 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.caliverse.admin.domain.dao.admin.EventMapper">
<resultMap id="EventResultMap" type="com.caliverse.admin.domain.entity.Event">
<mapper namespace="com.caliverse.admin.domain.dao.admin.RewardEventMapper">
<resultMap id="RewardEventResultMap" type="com.caliverse.admin.domain.entity.RewardEvent">
<id property="id" column="id"/>
<result property="rowNum" column="row_num"/>
<result property="eventType" column="event_type"/>
@@ -22,7 +22,7 @@
</resultMap>
<!--이벤트 리스트 조회-->
<select id="getEventList" resultMap="EventResultMap" parameterType="map">
<select id="getEventList" resultMap="RewardEventResultMap" parameterType="map">
SELECT *
FROM(
SELECT (@row_number:=@row_number + 1) AS row_num , c.* FROM
@@ -146,7 +146,7 @@
</select>
<!--이벤트 상세 조회-->
<select id="getEventDetail" parameterType="java.lang.Long" resultMap="EventResultMap" >
<select id="getEventDetail" parameterType="java.lang.Long" resultMap="RewardEventResultMap" >
SELECT
a.id
, a.event_type
@@ -181,7 +181,7 @@
</select>
<!--이벤트 저장-->
<insert id="postEvent" parameterType="com.caliverse.admin.domain.request.EventRequest" useGeneratedKeys="true" keyProperty="id">
<insert id="postEvent" parameterType="com.caliverse.admin.domain.request.RewardEventRequest" useGeneratedKeys="true" keyProperty="id">
INSERT INTO event (event_type, start_dt, end_dt, create_by)
VALUES (#{eventType}, #{startDt}, #{endDt}, #{createBy})
</insert>
@@ -201,7 +201,7 @@
</insert>
<!--이벤트 수정-->
<update id="updateEvent" parameterType="com.caliverse.admin.domain.request.EventRequest">
<update id="updateEvent" parameterType="com.caliverse.admin.domain.request.RewardEventRequest">
UPDATE event SET event_type = #{eventType}
, start_dt = #{startDt}
, end_dt = #{endDt}
@@ -240,7 +240,7 @@
where id = #{id}
</update>
<select id="getScheduleEventList" resultMap="EventResultMap">
<select id="getScheduleEventList" resultMap="RewardEventResultMap">
SELECT id,
event_type,
status,

View File

@@ -0,0 +1,158 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.caliverse.admin.domain.dao.admin.WorldEventMapper">
<resultMap id="WorldEventResultMap" type="com.caliverse.admin.domain.entity.WorldEvent">
<id property="id" column="id"/>
<result property="rowNum" column="row_num"/>
<result property="title" column="title"/>
<result property="globalEventActionId" column="global_event_action_id"/>
<result property="personalEventActionId" column="personal_event_action_id"/>
<result property="status" column="status"/>
<result property="startDt" column="start_dt"/>
<result property="endDt" column="end_dt"/>
<result property="maxPoint" column="max_point"/>
<result property="deleted" column="deleted"/>
<result property="createBy" column="create_by"/>
<result property="createDt" column="create_dt"/>
<result property="updateBy" column="update_by"/>
<result property="updateDt" column="update_dt"/>
</resultMap>
<!--리스트 조회-->
<select id="getWorldEventList" resultMap="WorldEventResultMap" parameterType="map">
SELECT * FROM (
SELECT (@row_number:=@row_number + 1) AS row_num, c.*
FROM (
SELECT
a.id,
a.title,
a.global_event_action_id,
a.personal_event_action_id,
CASE
WHEN NOW() &lt; a.start_dt THEN 'WAIT'
WHEN NOW() &gt;= a.start_dt AND NOW() &lt;= a.end_dt THEN 'RUNNING'
WHEN NOW() &gt; a.end_dt THEN 'FINISH'
END AS status,
a.start_dt,
a.end_dt,
max_point,
(SELECT email FROM admin WHERE id = a.create_by) AS create_by,
a.create_dt,
(SELECT email FROM admin WHERE id = a.update_by) AS update_by,
a.update_dt
FROM world_event a
WHERE 1 = 1
AND a.deleted = 0
<if test="searchData != null and searchData != ''">
AND a.title LIKE CONCAT('%',#{searchData},'%')
</if>
<if test="status != null and status != ''">
<choose>
<when test="status != 'ALL'">
AND CASE
WHEN NOW() &lt; a.start_dt THEN 'WAIT'
WHEN NOW() &gt;= a.start_dt AND NOW() &lt;= a.end_dt THEN 'RUNNING'
WHEN NOW() &gt; a.end_dt THEN 'FINISH'
END = #{status}
</when>
</choose>
</if>
<if test="startDate != null and startDate != '' and endDate !=null and endDate!= ''">
AND a.start_dt &gt;= #{startDate, jdbcType=TIMESTAMP}
AND a.end_dt &lt;= #{endDate, jdbcType=TIMESTAMP}
</if>
) c,
(SELECT @row_number:=0) AS t
ORDER BY
CASE
WHEN c.status = 'RUNNING' THEN 0
WHEN c.status = 'WAIT' THEN 1
WHEN c.status = 'FINISH' THEN 2
ELSE 3
END,
c.create_dt
) result
<if test="orderby != null and orderby != ''">
ORDER BY row_num ${orderby}
</if>
<if test="pageSize != null and pageSize != ''">
LIMIT ${pageSize} OFFSET ${offset}
</if>
</select>
<select id="getTotal" resultType="java.lang.Integer" parameterType="map">
SELECT count(*) FROM world_event WHERE deleted = 0
</select>
<!--이벤트 상세 조회-->
<select id="getWorldEventDetail" parameterType="java.lang.Long" resultMap="WorldEventResultMap" >
SELECT
a.id
, a.title
, a.global_event_action_id
, a.personal_event_action_id
, a.start_dt
, a.end_dt
, a.max_point
, CASE
WHEN NOW() &lt; a.start_dt THEN 'WAIT'
WHEN NOW() &gt;= a.start_dt AND NOW() &lt;= a.end_dt THEN 'RUNNING'
WHEN NOW() &gt; a.end_dt THEN 'FINISH'
END AS status
, (SELECT email FROM admin WHERE id = a.create_by ) AS create_by
, a.create_dt
, (SELECT email FROM admin WHERE id = a.update_by ) AS update_by
, a.update_dt
FROM world_event a
WHERE a.id = #{id}
AND deleted = 0
</select>
<select id="checkOverlap" parameterType="com.caliverse.admin.domain.request.WorldEventRequest" resultType="java.lang.Integer">
SELECT COUNT(*)
FROM world_event a
WHERE a.global_event_action_id = #{globalEventActionId}
AND a.deleted = 0
AND a.global_event_action_id != #{globalEventActionId}
AND (
(#{startDt} BETWEEN a.start_dt AND a.end_dt)
OR (#{endDt} BETWEEN a.start_dt AND a.end_dt)
OR (a.start_dt BETWEEN #{startDt} AND #{endDt})
OR (a.end_dt BETWEEN #{startDt} AND #{endDt})
)
</select>
<!--저장-->
<insert id="postWorldEvent" parameterType="com.caliverse.admin.domain.request.WorldEventRequest" useGeneratedKeys="true" keyProperty="id">
INSERT INTO world_event (title, global_event_action_id, personal_event_action_id, start_dt, end_dt, max_point, create_by, update_by)
VALUES (#{title}, #{globalEventActionId}, #{personalEventActionId}, #{startDt}, #{endDt}, #{maxPoint}, #{createBy}, #{updateBy})
</insert>
<!--수정-->
<update id="updateWorldEvent" parameterType="com.caliverse.admin.domain.request.WorldEventRequest">
UPDATE world_event SET title = #{title}
, global_event_action_id = #{globalEventActionId}
, personal_event_action_id = #{personalEventActionId}
, start_dt = #{startDt}
, end_dt = #{endDt}
, max_point = #{maxPoint}
, update_by = #{updateBy}
, update_dt = NOW()
WHERE id = #{id}
</update>
<!--삭제-->
<update id="deleteWorldEvent" parameterType="map">
UPDATE world_event
SET deleted = 1
, update_by = #{updateBy}
, update_dt = NOW()
WHERE id = #{id}
</update>
</mapper>