package com.mgm.mcrm.approval.controller; import com.auth0.jwt.JWT; import com.mgm.mcrm.approval.dtos.GetApproverRequest; import com.mgm.mcrm.approval.dtos.RejectApprovalResponse; import com.mgm.mcrm.approval.dtos.SubmitApprovalResponse; import com.mgm.mcrm.approval.models.ApprovalDetail; import com.mgm.mcrm.approval.models.CfgRequestReason; import com.mgm.mcrm.approval.service.ApprovalService; import com.mgm.mcrm.authorization.services.SysGroupPermissionService; import com.mgm.mcrm.booking.models.Bookings; import com.mgm.mcrm.booking.models.BookingsView; import com.mgm.mcrm.common.annotation.logging.OperationLog; import com.mgm.mcrm.common.dtos.BaseApiResponse; import com.mgm.mcrm.common.dtos.mgm_api.ApproverResult; import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; import org.apache.commons.lang3.StringUtils; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @RestController @RequestMapping("/api") public class ApprovalController { @Resource private ApprovalService approvalService; @Resource private SysGroupPermissionService sysGroupPermissionService; @OperationLog(actionName = "Cancel Approval Booking", eventCode = "approval_booking_cancel") @RequestMapping(value = "/app/approval/cancel_approval", method = RequestMethod.POST, produces = "application/json;charset=UTF-8",consumes = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity> cancelApprovalBooking(HttpServletRequest request, @RequestBody Map booking) { String token = request.getHeader("Authorization"); String userId = JWT.decode(token).getClaim("login_id").asString(); BaseApiResponse result = approvalService.cancelApprovalBooking(booking, userId, request); return ResponseEntity.status(HttpStatus.OK).body(result); } @OperationLog(actionName = "Cancel Approval Booking", eventCode = "approval_booking_cancel") @RequestMapping(value = "/app/approval/batch_cancel_approval", method = RequestMethod.POST, produces = "application/json;charset=UTF-8",consumes = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity> batchCancelApproval(HttpServletRequest request, @RequestBody Map booking) { String token = request.getHeader("Authorization"); if (StringUtils.isNotBlank(token)) { token = token.replace("Bearer ", "").replace("bearer ", ""); } String userId = JWT.decode(token).getClaim("login_id").asString(); BaseApiResponse result = approvalService.batchCancelApprovalBooking(booking, userId, request); return ResponseEntity.status(HttpStatus.OK).body(result); } @OperationLog(actionName = "Get Approval Reason", eventCode = "get_approval_reason") @RequestMapping(value = "/app/approval/get_reason", method = RequestMethod.POST, produces = "application/json;charset=UTF-8",consumes = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity>> getApprovalReason(HttpServletRequest request, @RequestBody Map booking) throws Exception { BaseApiResponse> result = approvalService.getRequestReason(); return ResponseEntity.status(HttpStatus.OK).body(result); } @OperationLog(actionName = "Get Approver", eventCode = "get_approver") @RequestMapping(value = "/app/approval/get_approver", method = RequestMethod.POST, produces = "application/json;charset=UTF-8",consumes = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity> getESBApprover(HttpServletRequest request, @RequestBody GetApproverRequest params) throws Exception { BaseApiResponse result = approvalService.getApprover(request, params); return ResponseEntity.status(HttpStatus.OK).body(result); } @PostMapping(value="/app/approval/approval_list",consumes = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity>> getPendingApprovalBookingList(HttpServletRequest request, @RequestBody Map params) throws Exception { BaseApiResponse> pendingApprovalList = approvalService.getPendingApprovalList(request,params); return ResponseEntity.status(HttpStatus.OK).body(pendingApprovalList); } @PostMapping("/app/approval/get_approval_count") public ResponseEntity> getPendingApprovalCount(HttpServletRequest request) { BaseApiResponse result = approvalService.getCountPendingApproval(request); return ResponseEntity.status(HttpStatus.OK).body(result); } @PostMapping(value="/app/approval/reject_approval",consumes = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity> rejectApprovalRecord(HttpServletRequest request, @RequestBody Map params) throws Exception { String token = request.getHeader("Authorization"); String userId = JWT.decode(token).getClaim("login_id").asString(); Long bookingId = params.get("bookingId") == null ? null : Long.valueOf(params.get("bookingId").toString()); BaseApiResponse result = approvalService.rejectApprovalBooking(bookingId, userId); return ResponseEntity.status(HttpStatus.OK).body(result); } @PostMapping(value="/app/approval/get_approval_data",consumes = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity> getApprovalData(HttpServletRequest request, @RequestBody Map params) throws Exception { BaseApiResponse result = approvalService.getApprovalDetail(request, params); return ResponseEntity.status(HttpStatus.OK).body(result); } @PostMapping(value="/app/approval/submit_approval",consumes = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity> submitApproval(HttpServletRequest request, @RequestBody Map params) throws Exception { String token = request.getHeader("Authorization"); String userId = JWT.decode(token).getClaim("login_id").asString(); String checkinDate = params.get("checkinDate") == null ? null : params.get("checkinDate").toString(); String checkoutDate = params.get("checkoutDate") == null ? null : params.get("checkoutDate").toString(); String bookingId = params.get("bookingId") == null ? null : params.get("bookingId").toString(); BaseApiResponse serviceResult = new BaseApiResponse<>(); try{ serviceResult = approvalService.submitApproval(bookingId, checkinDate, checkoutDate, userId,request); } catch (Exception e) { approvalService.setFailApprovalRouting(bookingId); throw new RuntimeException(e); } return ResponseEntity.status(HttpStatus.OK).body(serviceResult); } @PostMapping(value="/app/approval/batch_submit_approval",consumes = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity>>> batchApproveBooking(HttpServletRequest request, @RequestBody Map params) throws Exception { BaseApiResponse>> result = approvalService.batchApproval(request, params); return ResponseEntity.status(HttpStatus.OK).body(result); } @PostMapping(value="/app/approval/batch_submit_reject",consumes = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity>> batchRejectApproval(HttpServletRequest request, @RequestBody Map params) throws Exception { String token = request.getHeader("Authorization"); String userId = JWT.decode(token).getClaim("login_id").asString(); // 修改这里:从 submitInfoList 获取数据 @SuppressWarnings("unchecked") List> submitInfoList = params.get("submitInfoList") != null ? (List>) params.get("submitInfoList") : null; BaseApiResponse> serviceResult = new BaseApiResponse<>(); if (submitInfoList != null && !submitInfoList.isEmpty()) { // 提取 bookingId 列表 List bookingIdList = submitInfoList.stream() .map(item -> String.valueOf(item.get("bookingId"))) .collect(Collectors.toList()); serviceResult = approvalService.batchReject(bookingIdList, userId); } return ResponseEntity.status(HttpStatus.OK).body(serviceResult); } }