package com.mgm.mcrm.player.controllers; import com.mgm.mcrm.authorization.dtos.LoginUserInfo; import com.mgm.mcrm.authorization.models.SysRouterPermission; import com.mgm.mcrm.authorization.services.SysGroupPermissionService; import com.mgm.mcrm.booking.dtos.BookingDto; import com.mgm.mcrm.booking.models.Bookings; import com.mgm.mcrm.common.constants.SysCommon; import com.mgm.mcrm.common.dtos.BaseApiResponse; import com.mgm.mcrm.common.dtos.mgm_api.PlayerProfileEntry; import com.mgm.mcrm.common.dtos.mgm_api.TodoDashboardResult; import com.mgm.mcrm.common.dtos.mgm_api.TodoDateListResult; import com.mgm.mcrm.common.dtos.mgm_api.TodoDetailResult; import com.mgm.mcrm.logging.models.SysLogETA; import com.mgm.mcrm.logging.services.SysLogETAService; import com.mgm.mcrm.player.dtos.request.*; import com.mgm.mcrm.player.dtos.response.GetDashboardResponse; import com.mgm.mcrm.player.dtos.response.GetTodoDetailResponse; import com.mgm.mcrm.player.services.PlayerService; import com.mgm.mcrm.player.services.TodoService; import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.Strings; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import java.sql.Date; import java.util.ArrayList; import java.util.List; @RestController @CrossOrigin(origins = "*") @RequestMapping("/api") public class TodoController { @Resource private TodoService todoService; @Resource private PlayerService playerService; @Resource private SysLogETAService sysLogETAService; @Resource private SysGroupPermissionService sysGroupPermissionService; @RequestMapping(value = "/app/todo/get_dashboard_data", method = RequestMethod.POST, produces = "application/json;charset=UTF-8") public ResponseEntity> getTodoDashboard(HttpServletRequest request, @RequestBody GetDashboardRequest getDashboardRequest) throws Exception { LoginUserInfo loginUser = SysCommon.parseUserFromToken(request); String userId = loginUser.getLoginId(); String groupName = loginUser.getGroupName(); BaseApiResponse result = new BaseApiResponse<>(); boolean viewTodoDashboard = sysGroupPermissionService.checkGroupPermission(groupName, "10001_04"); viewTodoDashboard = true; if(viewTodoDashboard) { GetDashboardResponse getDashboardResponse = todoService.getTodoDashboard(userId); if(getDashboardResponse.isSuccess()) { result.setSuccess(true); result.setData(getDashboardResponse.getReturnData()); }else { result.setSuccess(false); result.setMessage(getDashboardResponse.getErrorMessage()); result.setCode(getDashboardResponse.getErrorCode()); } }else { result.setSuccess(false); result.setCode("NO_PERMISSION"); } return ResponseEntity.status(HttpStatus.OK).body(result); } @RequestMapping(value = "/app/todo/get_todolist_details", method = RequestMethod.POST, produces = "application/json;charset=UTF-8") public ResponseEntity> getTodoDetail(HttpServletRequest request, @RequestBody GetTodoDetailRequest getTodoDetailRequest) throws Exception { String playerId = getTodoDetailRequest.getPlayerId(); String todoSegment = getTodoDetailRequest.getTodosegment(); String todoCategory = getTodoDetailRequest.getTodoCategory(); String date = getTodoDetailRequest.getDate(); date = date.split("T")[0]; BaseApiResponse result = new BaseApiResponse<>(); GetTodoDetailResponse getTodoDetailResponse = todoService.getTodoDetail(playerId,todoCategory,todoSegment,date); if(getTodoDetailResponse.isSuccess()) { result.setSuccess(true); result.setData(getTodoDetailResponse.getReturnData()); }else { result.setSuccess(false); result.setCode(getTodoDetailResponse.getErrorCode()); } return ResponseEntity.status(HttpStatus.OK).body(result); } @RequestMapping(value = "/app/todo/get_todolist", method = RequestMethod.POST, produces = "application/json;charset=UTF-8") public ResponseEntity> getTodoList(HttpServletRequest request, @RequestBody GetTodoListRequest params) throws Exception { LoginUserInfo loginUser = SysCommon.parseUserFromToken(request); String type = params.getTodoSegment(); String category = params.getTodoCategory(); Date startDate = Date.valueOf(params.getStartDate()); Date endDate = Date.valueOf(params.getEndDate()); String userId = loginUser.getLoginId(); String groupName = loginUser.getGroupName(); boolean viewTodoList = sysGroupPermissionService.checkGroupPermission(groupName, "10001_03"); BaseApiResponse result = new BaseApiResponse<>(); viewTodoList = true; if(viewTodoList) { BaseApiResponse serviceResult = todoService.getTodoList(userId,category,type,startDate,endDate); if(serviceResult.isSuccess()) { result.setSuccess(true); result.setData(serviceResult.getData()); }else { result.setSuccess(false); result.setCode(serviceResult.getCode()); } }else { result.setSuccess(false); result.setCode("NO_PERMISSION"); } return ResponseEntity.status(HttpStatus.OK).body(result); } @RequestMapping(value = "/app/todo/change_date", method = RequestMethod.POST, produces = "application/json;charset=UTF-8") public ResponseEntity> changeDate(HttpServletRequest request, @RequestBody TodoChangeDateRequest bookingParams) throws Exception { BaseApiResponse result = new BaseApiResponse<>(); result.setRequestData(bookingParams); LoginUserInfo loginUser = SysCommon.parseUserFromToken(request); String userId = loginUser.getLoginId(); String groupName = loginUser.getGroupName(); //--get group permissions boolean cancelBooking = true; List userPermissions = new ArrayList(); userPermissions = sysGroupPermissionService.getRouterPermissionsByGroupName(groupName); if(userPermissions!=null && !userPermissions.isEmpty()) { for(SysRouterPermission per:userPermissions) { if(Strings.CS.equals(per.getId(), "10001_02") ) cancelBooking = true; } } String playerId = bookingParams.getPlayerId()!=null? bookingParams.getPlayerId():null; BaseApiResponse findPlayerProfileResult = playerService.findPlayerProfileByPlayerIdAndUserId(playerId, userId); if(findPlayerProfileResult.isSuccess()) { PlayerProfileEntry profile = findPlayerProfileResult.getData(); Integer code = profile.getCodedFlag(); if(code==1 && cancelBooking) { BaseApiResponse changeDateResult = todoService.changeBookingDate(bookingParams,request); if(changeDateResult.isSuccess()) { result.setSuccess(true); result.setMessage(!StringUtils.isEmpty(changeDateResult.getMessage())?changeDateResult.getMessage():"Edit Success"); result.setData(changeDateResult.getData()); result.setRequestData(changeDateResult.getData()); }else { result.setSuccess(false); result.setMessage(changeDateResult.getMessage()); result.setCode(changeDateResult.getCode()); } }else { result.setSuccess(false); result.setCode("NO_PERMISSION"); result.setMessage("No permission to cancel"); } }else { result.setSuccess(false); result.setCode("CALL_API_ERROR"); result.setMessage(findPlayerProfileResult.getMessage()); } return ResponseEntity.status(HttpStatus.OK).body(result); } @RequestMapping(value = "/app/todo/submit_ETA", method = RequestMethod.POST, produces = "application/json;charset=UTF-8") public ResponseEntity> submitETA(HttpServletRequest request, @RequestBody TodoSubmitETARequest params) throws Exception { LoginUserInfo loginUser = SysCommon.parseUserFromToken(request); String userId = loginUser.getLoginId(); String playerId = params.getPlayerId(); String etaTime = params.getEtaTime(); Long id = params.getId(); List recordInfos = params.getRecordInfo(); BaseApiResponse result = new BaseApiResponse<>(); if(StringUtils.isNotEmpty(etaTime)) { // 18:34 -> 18:34:00 // 18:34:00 -> 18:34:00 String[] split = etaTime.split(":"); if (split.length < 3) { etaTime = etaTime + ":00"; } else { etaTime = split[0] + ":" + split[1] + ":" + split[2]; } } BaseApiResponse submitResult = todoService.submitETA(etaTime, recordInfos, id); SysLogETA sysLogETA = new SysLogETA(); java.util.Date now = new java.util.Date(); if(submitResult.isSuccess()) { sysLogETA.setStatus(1); result.setSuccess(true); // result.setData(submitResult.getData()); }else { sysLogETA.setStatus(0); result.setSuccess(false); result.setCode(submitResult.getCode()); } sysLogETA.setUserId(userId); sysLogETA.setPlayerId(playerId); sysLogETA.setInputDateTime(etaTime.substring(0, 5)); sysLogETA.setCreatedAt(now); sysLogETA.setUpdatedAt(now); sysLogETAService.save(sysLogETA); return ResponseEntity.status(HttpStatus.OK).body(result); } @RequestMapping(value = "/app/todo/cancel_booking", method = RequestMethod.POST, produces = "application/json;charset=UTF-8") public ResponseEntity> cancelBooking(HttpServletRequest request, @RequestBody TodoCancelBookingRequest cancelRequest) throws Exception { LoginUserInfo loginUser = SysCommon.parseUserFromToken(request); BaseApiResponse result = new BaseApiResponse<>(); //-- result.setRequestData(cancelRequest); String userId = loginUser.getLoginId(); String groupName = loginUser.getGroupName(); //--get group permissions boolean cancelBooking = true; List userPermissions = sysGroupPermissionService.getRouterPermissionsByGroupName(groupName); if(!userPermissions.isEmpty()) { for(SysRouterPermission per:userPermissions) { if(Strings.CS.equals(per.getId(), "10001_02") ) cancelBooking = true; } } String playerId = cancelRequest.getPlayerId(); BaseApiResponse findPlayerProfileResult = playerService.findPlayerProfileByPlayerIdAndUserId(playerId, userId); if(findPlayerProfileResult.isSuccess()) { PlayerProfileEntry profile = findPlayerProfileResult.getData(); Integer code = profile.getCodedFlag(); if(code==1 && cancelBooking) { BaseApiResponse cancelResult = todoService.cancelBooking(cancelRequest,request); if(cancelResult.isSuccess()) { result.setSuccess(true); result.setMessage(!StringUtils.isEmpty(cancelResult.getMessage())?cancelResult.getMessage():"Cancel Success"); result.setData(cancelResult.getData()); result.setRequestData(cancelResult.getData()); }else { result.setSuccess(false); result.setMessage(cancelResult.getMessage()); result.setCode(cancelResult.getCode()); } }else { result.setSuccess(false); result.setCode("NO_PERMISSION"); result.setMessage("No permission to cancel"); } }else { result.setSuccess(false); result.setCode("CALL_API_ERROR"); result.setMessage(findPlayerProfileResult.getMessage()); } return ResponseEntity.status(HttpStatus.OK).body(result); } }