package com.oying.modules.message.rest; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.oying.modules.message.common.MsgStatusEnum; import com.oying.modules.message.common.PlatFormEnum; import com.oying.modules.message.domain.dto.MesMsgRecordQueryCriteria; import com.oying.modules.message.domain.myDto.MesMsgRecordQueryOrderDto; import com.oying.modules.message.domain.myDto.MesMsgRecordQueryPollDto; import com.oying.modules.message.domain.myDto.MesMsgRecordQuerySystemDto; import com.oying.modules.message.service.MesMsgRecordService; import com.oying.utils.PageResult; import com.oying.utils.R; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import java.util.List; /** * @author 李萌 * @date 2025-07-25 **/ @Slf4j @RestController @RequiredArgsConstructor @Api(tags = "消息中心2.0") @RequestMapping("/api/mesMsgRecord") public class MesMsgRecordController { private final MesMsgRecordService mesMsgRecordService; // // @ApiOperation("导出数据") // @GetMapping(value = "/download") // @PreAuthorize("@el.check('mesMsgRecord:list')") // public void exportMesMsgRecord(HttpServletResponse response, MesMsgRecordQueryCriteria criteria) throws IOException { // mesMsgRecordService.download(mesMsgRecordService.queryAll(criteria), response); // } // // @GetMapping // @ApiOperation("查询消息") // @PreAuthorize("@el.check('mesMsgRecord:list')") // public ResponseEntity> queryMesMsgRecord(MesMsgRecordQueryCriteria criteria) { // Page page = new Page<>(criteria.getPage(), criteria.getSize()); // return new ResponseEntity<>(mesMsgRecordService.queryAll(criteria, page), HttpStatus.OK); // } // // @PostMapping // @Log("新增消息") // @ApiOperation("新增消息") // @PreAuthorize("@el.check('mesMsgRecord:add')") // public ResponseEntity createMesMsgRecord(@Validated @RequestBody MesMsgRecord resources) { // mesMsgRecordService.create(resources); // return new ResponseEntity<>(HttpStatus.CREATED); // } // // @PutMapping // @Log("修改消息") // @ApiOperation("修改消息") // @PreAuthorize("@el.check('mesMsgRecord:edit')") // public ResponseEntity updateMesMsgRecord(@Validated @RequestBody MesMsgRecord resources) { // mesMsgRecordService.update(resources); // return new ResponseEntity<>(HttpStatus.NO_CONTENT); // } // // @DeleteMapping // @Log("删除消息") // @ApiOperation("删除消息") // @PreAuthorize("@el.check('mesMsgRecord:del')") // public ResponseEntity deleteMesMsgRecord(@ApiParam(value = "传ID数组[]") @RequestBody List ids) { // mesMsgRecordService.deleteAll(ids); // return new ResponseEntity<>(HttpStatus.OK); // } /* 1. 轮询最新消息(通知栏) */ //todo 轮询啥? //只查“未读”消息,不分种类,返回最新 N 条 1=买家 2=商户 3=骑手" 消息类型为系统消息1? @GetMapping("/poll") @ApiOperation("查询轮询消息 1(买家)、2(商户)、3(骑手)") @PreAuthorize("@el.check('mesMsgRecord:list')") public R> queryMesMsgRecord(@RequestParam Long platform) { //platform 只能为 1 2 3 if (platform == null) { return R.fail("平台类型不能为空"); } if (PlatFormEnum.getByKey(platform.intValue()) == null) { return R.fail("平台类型错误,只能为1(买家)、2(商户)、3(骑手)"); } // 实现业务逻辑,调用服务层获取未读消息 try { // Long system = Long.valueOf(MesTypeEnum.SYSTEM.getKey()); // List mes = mesMsgRecordService.PollMes(platform, system); List mes = mesMsgRecordService.PollMesAll(platform); return R.success(mes); } catch (Exception e) { log.error("查询轮询消息失败:", e); return R.fail("查询轮询消息失败"); } } // /* 2. 批量确认收到消息 */ // @PutMapping("/ack/{msgId}") // @ApiOperation("确认收到消息") // public R ack(@PathVariable Long msgId) { /// / mesMsgRecordService.markRead(msgId, null); // return R.success(); // } /* 2. 批量确认收到消息 主键*/ @PutMapping("/ack") @ApiOperation("批量确认收到消息 主键ids 1(买家)、2(商户)、3(骑手)") public R batchAck(@ApiParam(value = "消息ID数组") @RequestBody List msgIds, @RequestParam Long platform) { if (msgIds == null || msgIds.isEmpty()) { return R.fail("消息ID列表不能为空"); } try { mesMsgRecordService.batchMarkRead(platform, msgIds); return R.success(); } catch (Exception e) { log.error("批量确认消息失败,msgIds: {}", msgIds, e); return R.fail("批量确认消息失败"); } } /* 3. 分页系统通知 */ @GetMapping("/sysNotice") @ApiOperation("分页查询系统通知") public R> sysNotice( MesMsgRecordQueryCriteria criteria) { Page page = new Page<>(criteria.getPage(), criteria.getSize()); try { PageResult pageResult = mesMsgRecordService.queryAllSysNotice(criteria, page); return R.success(pageResult); } catch (Exception e) { log.error("分页查询系统通知失败,criteria: {}", criteria, e); return R.fail("分页查询系统通知失败"); } } /* 4. 用店铺id 查询订单消息 */ // @GetMapping("/order") // @ApiOperation("用店铺id 查询订单消息") // public R> order(@RequestParam Long shopId) { // try { // List res = mesMsgRecordService.queryorder(shopId); // return R.success(res); // } catch (Exception e) { // log.error("用店铺id 获取订单消息失败,shopId: {}", shopId, e); // return R.fail("用店铺id 获取订单消息失败"); // // } // // } //商户端:买家下单提醒 根据商户id 获取买家下单提醒 @GetMapping("/order/pending") @ApiOperation("商户端:用店铺id 获取下单订单消息") public R> getPendingOrders(@RequestParam Long shopId) { try { String content = MsgStatusEnum.MERCHANT_ORDER_SUBMITTED.getValue(); List res = mesMsgRecordService.queryorderPending(shopId, content); return R.success(res); } catch (Exception e) { log.error("用店铺id 获取待处理订单消息失败,shopId: {}", shopId, e); return R.fail("用店铺id 获取待处理订单消息失败"); } } //商户端:订单送达通知 。 根据商户id 获取买家下订单送达 @GetMapping("/order/delivered") @ApiOperation("商户端:用店铺id 获取订单送达消息") public R> getDeliveredOrders(@RequestParam Long shopId) { try { String content = MsgStatusEnum.BUYER_ORDER_STATUS_CHANGED.getValue(); List res = mesMsgRecordService.queryorderPending(shopId, content); return R.success(res); } catch (Exception e) { log.error("用店铺id 获取已送达订单消息失败,shopId: {}", shopId, e); return R.fail("用店铺id 获取已送达订单消息失败"); } } //买家端:订单状态变化通知 @GetMapping("/buyer/order/status") @ApiOperation("买家端:获取订单状态变化消息") public R> getBuyerOrderStatus(@RequestParam Long buyerId) { try { List res = mesMsgRecordService.queryBuyerOrderMessages(buyerId); return R.success(res); } catch (Exception e) { log.error("买家端获取订单状态变化消息失败,buyerId: {}", buyerId, e); return R.fail("获取订单状态变化消息失败"); } } //买家端:订单送达通知 @GetMapping("/buyer/order/delivered") @ApiOperation("买家端:获取订单送达消息") public R> getBuyerDeliveredOrders(@RequestParam Long buyerId) { try { List res = mesMsgRecordService.queryBuyerOrderMessagesComplete(buyerId); return R.success(res); } catch (Exception e) { log.error("买家端获取订单送达消息失败,buyerId: {}", buyerId, e); return R.fail("获取订单送达消息失败"); } } }