package com.oying.modules.message.rest; import com.oying.annotation.Log; import com.oying.modules.message.common.PlatFormEnum; import com.oying.modules.message.domain.MesMsgRecord; import com.oying.modules.message.domain.dto.MesShopMsgRespDTO; 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.modules.message.domain.dto.MesMsgRecordQueryCriteria; import com.oying.utils.R; import lombok.RequiredArgsConstructor; import java.util.List; import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import io.swagger.annotations.*; import java.io.IOException; import javax.servlet.http.HttpServletResponse; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.oying.utils.PageResult; /** * @author 李萌 * @date 2025-07-25 **/ @Slf4j @RestController @RequiredArgsConstructor @Api(tags = "消息") @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=骑手" @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 { List mes=mesMsgRecordService.PollMes(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("批量确认收到消息") 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(@PathVariable 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 获取订单消息失败"); } } }