247 lines
11 KiB
Java
247 lines
11 KiB
Java
package com.caliverse.admin.domain.service;
|
|
|
|
import com.caliverse.admin.domain.dao.admin.CaliumMapper;
|
|
import com.caliverse.admin.domain.entity.*;
|
|
import com.caliverse.admin.domain.entity.log.GenericLog;
|
|
import com.caliverse.admin.domain.entity.web3.ResponseConfirmData;
|
|
import com.caliverse.admin.domain.entity.web3.ResponseErrorCode;
|
|
import com.caliverse.admin.domain.entity.web3.ResponseRequestData;
|
|
import com.caliverse.admin.domain.entity.web3.ResponseWithdrawableData;
|
|
import com.caliverse.admin.domain.request.CaliumRequest;
|
|
import com.caliverse.admin.domain.request.LogGenericRequest;
|
|
import com.caliverse.admin.domain.request.Web3Request;
|
|
import com.caliverse.admin.domain.response.CaliumResponse;
|
|
import com.caliverse.admin.domain.response.Web3Response;
|
|
import com.caliverse.admin.dynamodb.service.DynamodbCaliumService;
|
|
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.constants.Web3Constants;
|
|
import com.caliverse.admin.global.common.utils.CommonUtils;
|
|
import com.caliverse.admin.logs.entity.LogAction;
|
|
import com.caliverse.admin.logs.logservice.businesslogservice.BusinessLogGenericService;
|
|
import lombok.RequiredArgsConstructor;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import org.springframework.http.HttpMethod;
|
|
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;
|
|
import java.util.Optional;
|
|
|
|
@Service
|
|
@Slf4j
|
|
@RequiredArgsConstructor
|
|
public class CaliumService {
|
|
|
|
private final CaliumMapper caliumMapper;
|
|
private final Web3Service web3Service;
|
|
private final DynamodbCaliumService dynamodbCaliumService;
|
|
private final BusinessLogGenericService businessLogGenericService;
|
|
|
|
public CaliumResponse getCaliumLimit(){
|
|
Web3Response<ResponseWithdrawableData> web3Response = web3Service.get(
|
|
Web3Constants.URL_SERVER_TYPE,
|
|
null,
|
|
ResponseWithdrawableData.class
|
|
);
|
|
log.info("getCaliumLimit calium WithdrawableInfo: {}", web3Response);
|
|
|
|
if(web3Response.isSuccess())
|
|
return CaliumResponse.builder()
|
|
.status(CommonCode.SUCCESS.getHttpStatus())
|
|
.result(CommonCode.SUCCESS.getResult())
|
|
.resultData(CaliumResponse.ResultData.builder()
|
|
.withdrawableInfo(web3Response.getData())
|
|
.build()
|
|
)
|
|
.build();
|
|
else{
|
|
String code = web3Response.getCode();
|
|
Optional<ResponseErrorCode> error = ResponseErrorCode.fromCode(code);
|
|
return CaliumResponse.builder()
|
|
.status(CommonCode.ERROR.getHttpStatus())
|
|
.result(code)
|
|
.resultData(CaliumResponse.ResultData.builder()
|
|
.message(error.get().getMessage())
|
|
.build()
|
|
)
|
|
.build();
|
|
}
|
|
}
|
|
|
|
@RequestLog
|
|
public CaliumResponse getList(Map requestParam){
|
|
//페이징 처리
|
|
requestParam = CommonUtils.pageSetting(requestParam);
|
|
|
|
List<Calium> list = caliumMapper.getCaliumRequestList(requestParam);
|
|
|
|
double allCnt = caliumMapper.getCaliumTotal();
|
|
double stock_qty = dynamodbCaliumService.getCaliumTotal();
|
|
|
|
LogGenericRequest logGenericRequest = new LogGenericRequest();
|
|
logGenericRequest.setLogAction(LogAction.FailCaliumEchoSystem);
|
|
logGenericRequest.setStartDt(LocalDateTime.now().minusDays(1));
|
|
logGenericRequest.setEndDt(LocalDateTime.now());
|
|
logGenericRequest.setOrderBy("ASC");
|
|
List<GenericLog> failList = businessLogGenericService.loadBusinessLogData(logGenericRequest, GenericLog.class);
|
|
|
|
return CaliumResponse.builder()
|
|
.status(CommonCode.SUCCESS.getHttpStatus())
|
|
.result(CommonCode.SUCCESS.getResult())
|
|
.resultData(CaliumResponse.ResultData.builder()
|
|
.caliumList(list)
|
|
.total(stock_qty)
|
|
.totalAll(allCnt)
|
|
.failCount(failList.size())
|
|
.pageNo(requestParam.get("page_no")!=null?
|
|
Integer.parseInt(requestParam.get("page_no").toString()):1)
|
|
.build()
|
|
)
|
|
.build();
|
|
}
|
|
|
|
public CaliumResponse getDetail(Long id){
|
|
Calium calium = caliumMapper.getCaliumRequestDetail(id);
|
|
|
|
log.info("getDetail call Detail Info: {}", calium);
|
|
|
|
return CaliumResponse.builder()
|
|
.status(CommonCode.SUCCESS.getHttpStatus())
|
|
.result(CommonCode.SUCCESS.getResult())
|
|
.resultData(CaliumResponse.ResultData.builder()
|
|
.calium(calium)
|
|
.build())
|
|
.build();
|
|
}
|
|
|
|
@BusinessProcess(action = com.caliverse.admin.domain.entity.log.LogAction.CALIUM_REQUEST)
|
|
@Transactional(transactionManager = "transactionManager")
|
|
@RequestLog
|
|
public CaliumResponse postCaliumRequest(CaliumRequest caliumRequest){
|
|
caliumRequest.setCreateBy(CommonUtils.getAdmin().getId());
|
|
|
|
Web3Request apiRequest = Web3Request.builder()
|
|
.serverType(Web3Constants.SERVER_NAME)
|
|
.historyMessage(caliumRequest.getContent())
|
|
.requestor(CommonUtils.getAdmin().getName())
|
|
.amount(-Math.abs(caliumRequest.getCount())).build(); // 음수로 변환
|
|
|
|
Web3Response<ResponseRequestData> web3Response = web3Service.callWeb3Api(Web3Constants.URL_REQUEST, HttpMethod.POST, apiRequest, ResponseRequestData.class);
|
|
|
|
if(!web3Response.isSuccess()){
|
|
log.error("postEvent Web3 api error: {}", web3Response);
|
|
String code = web3Response.getCode();
|
|
ResponseErrorCode error = ResponseErrorCode.fromCode(code).get();
|
|
return CaliumResponse.builder()
|
|
.status(CommonCode.ERROR.getHttpStatus())
|
|
.result(code)
|
|
.resultData(CaliumResponse.ResultData.builder()
|
|
.message(error.getMessage())
|
|
.build()
|
|
)
|
|
.build();
|
|
}
|
|
|
|
log.info("postEvent Request Api Response: {}", web3Response);
|
|
ResponseRequestData responseData = web3Response.getData();
|
|
caliumRequest.setRequestId(responseData.get_id());
|
|
caliumRequest.setCreateTime(responseData.getCreateTime());
|
|
|
|
int result = caliumMapper.postCaliumRequest(caliumRequest);
|
|
log.info("postEvent AdminToolDB Event Save: {}", caliumRequest);
|
|
|
|
return CaliumResponse.builder()
|
|
.status(CommonCode.SUCCESS.getHttpStatus())
|
|
.result(CommonCode.SUCCESS.getResult())
|
|
.resultData(CaliumResponse.ResultData.builder()
|
|
.message(SuccessCode.SAVE.getMessage())
|
|
.build())
|
|
.build();
|
|
}
|
|
|
|
@BusinessProcess(action = com.caliverse.admin.domain.entity.log.LogAction.CALIUM_REQUEST)
|
|
@Transactional(transactionManager = "transactionManager")
|
|
@RequestLog
|
|
public CaliumResponse updateCaliumCharged(CaliumRequest caliumRequest){
|
|
log.info("updateCaliumCharged calium Request: {}", caliumRequest);
|
|
Calium calium = caliumMapper.getCaliumRequestDetail(caliumRequest.getId());
|
|
Long userId = CommonUtils.getAdmin().getId();
|
|
// 상태가 승인완료거나 요청한 본인이 아니면 에러처리
|
|
if(!calium.getStatus().equals(Calium.CALIUMREQUESTSTATUS.COMPLETE) || !calium.getCreateBy().equals(userId.toString())){
|
|
log.error("updateCaliumCharged Calium Request Status or User Not Match status: {}, id: {}", calium.getStatus(), userId);
|
|
return CaliumResponse.builder()
|
|
.status(CommonCode.ERROR.getHttpStatus())
|
|
.result(ErrorCode.ERROR_CALIUM_FINISH.toString())
|
|
.resultData(CaliumResponse.ResultData.builder()
|
|
.build()
|
|
)
|
|
.build();
|
|
}
|
|
|
|
Calium info = caliumMapper.getCaliumRequestDetail(caliumRequest.getId());
|
|
|
|
dynamodbCaliumService.updateCaliumTotal(caliumRequest.getCount());
|
|
|
|
updateCaliumRequest(caliumRequest.getId(), Calium.CALIUMREQUESTSTATUS.FINISH);
|
|
|
|
return CaliumResponse.builder()
|
|
.status(CommonCode.SUCCESS.getHttpStatus())
|
|
.result(CommonCode.SUCCESS.getResult())
|
|
.build();
|
|
}
|
|
|
|
@BusinessProcess(action = com.caliverse.admin.domain.entity.log.LogAction.CALIUM_REQUEST)
|
|
@Transactional(transactionManager = "transactionManager")
|
|
public void getScheduleCaliumRequestList(){
|
|
List<Calium> scheduleList = caliumMapper.getScheduleCaliumRequest();
|
|
for(Calium calium : scheduleList){
|
|
String url = Web3Constants.URL_REQUEST_CONFIRM + calium.getRequestId();
|
|
Web3Response<ResponseConfirmData> web3Response = web3Service.get(
|
|
url,
|
|
null,
|
|
ResponseConfirmData.class
|
|
);
|
|
|
|
if(web3Response.isSuccess()){
|
|
ResponseConfirmData data = web3Response.getData();
|
|
String state = data.getState();
|
|
if(state.equals("confirm")){
|
|
updateCaliumRequest(calium.getId(), Calium.CALIUMREQUESTSTATUS.COMPLETE, data);
|
|
log.info("getScheduleCaliumRequestList Calium Request Confirm: {}", data);
|
|
}else if(state.equals("cancel")){
|
|
updateCaliumRequest(calium.getId(), Calium.CALIUMREQUESTSTATUS.REJECT, data);
|
|
log.info("getScheduleCaliumRequestList Calium Request Cancel: {}", data);
|
|
}
|
|
}else{
|
|
String code = web3Response.getCode();
|
|
Optional<ResponseErrorCode> error = ResponseErrorCode.fromCode(code);
|
|
log.error("getScheduleCaliumRequestList calium confirm request request_id: {}, Error: {}", calium.getRequestId(), error.get().getMessage());
|
|
}
|
|
}
|
|
}
|
|
|
|
private void updateCaliumRequest(Long id, Calium.CALIUMREQUESTSTATUS status){
|
|
Map<String,Object> map = new HashMap<>();
|
|
map.put("id", id);
|
|
map.put("status", status.toString());
|
|
map.put("updateBy", CommonUtils.getAdmin().getId());
|
|
caliumMapper.updateStatusCaliumRequest(map);
|
|
}
|
|
|
|
private void updateCaliumRequest(Long id, Calium.CALIUMREQUESTSTATUS status, ResponseConfirmData data){
|
|
Map<String,Object> map = new HashMap<>();
|
|
map.put("id", id);
|
|
map.put("status", status.toString());
|
|
map.put("stateTime", data.getStateTime());
|
|
map.put("stateMessage", data.getState().equals("confirm") ? data.getStateMessage(): "");
|
|
caliumMapper.updateStatusCaliumRequest(map);
|
|
}
|
|
}
|