leomonM
2025-08-22 20a82a1fe750b75e2771898c708983b86610f8c0
oying-system/src/main/java/com/oying/modules/message/rest/MesMsgRecordController.java
@@ -1,92 +1,87 @@
package com.oying.modules.message.rest;
import com.oying.annotation.Log;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.oying.modules.message.common.OrderStatusEnum;
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.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.modules.message.domain.dto.MesMsgRecordQueryCriteria;
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;
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
**/
 * @author 李萌
 * @date 2025-07-25
 **/
@Slf4j
@RestController
@RequiredArgsConstructor
@Api(tags = "消息")
@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<PageResult<MesMsgRecord>> queryMesMsgRecord(MesMsgRecordQueryCriteria criteria) {
//        Page<Object> 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<Object> createMesMsgRecord(@Validated @RequestBody MesMsgRecord resources) {
//        mesMsgRecordService.create(resources);
//        return new ResponseEntity<>(HttpStatus.CREATED);
//    }
//
//    @PutMapping
//    @Log("修改消息")
//    @ApiOperation("修改消息")
//    @PreAuthorize("@el.check('mesMsgRecord:edit')")
//    public ResponseEntity<Object> updateMesMsgRecord(@Validated @RequestBody MesMsgRecord resources) {
//        mesMsgRecordService.update(resources);
//        return new ResponseEntity<>(HttpStatus.NO_CONTENT);
//    }
//
//    @DeleteMapping
//    @Log("删除消息")
//    @ApiOperation("删除消息")
//    @PreAuthorize("@el.check('mesMsgRecord:del')")
//    public ResponseEntity<Object> deleteMesMsgRecord(@ApiParam(value = "传ID数组[]") @RequestBody List<Long> ids) {
//        mesMsgRecordService.deleteAll(ids);
//        return new ResponseEntity<>(HttpStatus.OK);
//    }
    @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<PageResult<MesMsgRecord>> queryMesMsgRecord(MesMsgRecordQueryCriteria criteria){
        Page<Object> 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<Object> createMesMsgRecord(@Validated @RequestBody MesMsgRecord resources){
        mesMsgRecordService.create(resources);
        return new ResponseEntity<>(HttpStatus.CREATED);
    }
    @PutMapping
    @Log("修改消息")
    @ApiOperation("修改消息")
    @PreAuthorize("@el.check('mesMsgRecord:edit')")
    public ResponseEntity<Object> updateMesMsgRecord(@Validated @RequestBody MesMsgRecord resources){
        mesMsgRecordService.update(resources);
        return new ResponseEntity<>(HttpStatus.NO_CONTENT);
    }
    @DeleteMapping
    @Log("删除消息")
    @ApiOperation("删除消息")
    @PreAuthorize("@el.check('mesMsgRecord:del')")
    public ResponseEntity<Object> deleteMesMsgRecord(@ApiParam(value = "传ID数组[]") @RequestBody List<Long> ids) {
        mesMsgRecordService.deleteAll(ids);
        return new ResponseEntity<>(HttpStatus.OK);
    }
    /* 1. 轮询最新消息(通知栏) */  //todo 轮询啥?
    //只查“未读”消息,不分种类,返回最新 N 条     1=买家 2=商户 3=骑手"
    //只查“未读”消息,不分种类,返回最新 N 条     1=买家 2=商户 3=骑手"  消息类型为系统消息1?
    @GetMapping("/poll")
    @ApiOperation("查询轮询消息 1(买家)、2(商户)、3(骑手)")
    @PreAuthorize("@el.check('mesMsgRecord:list')")
    public R<List<MesMsgRecordQueryPollDto>> queryMesMsgRecord(@RequestParam Long platform){
    public R<List<MesMsgRecordQueryPollDto>> queryMesMsgRecord(@RequestParam Long platform) {
        //platform 只能为 1 2 3
        if (platform == null) {
            return R.fail("平台类型不能为空");
@@ -98,13 +93,16 @@
        // 实现业务逻辑,调用服务层获取未读消息
        try {
            List<MesMsgRecordQueryPollDto> mes=mesMsgRecordService.PollMes(platform);
//            Long system = Long.valueOf(MesTypeEnum.SYSTEM.getKey());
//            List<MesMsgRecordQueryPollDto> mes = mesMsgRecordService.PollMes(platform, system);
            List<MesMsgRecordQueryPollDto> mes = mesMsgRecordService.PollMesAll(platform);
            return R.success(mes);
        } catch (Exception e) {
            log.error("查询轮询消息失败:",e);
            log.error("查询轮询消息失败:", e);
            return R.fail("查询轮询消息失败");
        }
    }
@@ -113,19 +111,20 @@
//    @PutMapping("/ack/{msgId}")
//    @ApiOperation("确认收到消息")
//    public R<Void> ack(@PathVariable Long msgId) {
////        mesMsgRecordService.markRead(msgId, null);
    /// /        mesMsgRecordService.markRead(msgId, null);
//        return R.success();
//    }
    /* 2. 批量确认收到消息   主键*/
    @PutMapping("/ack")
    @ApiOperation("批量确认收到消息")
    public R<Void> batchAck(@ApiParam(value = "消息ID数组") @RequestBody List<Long> msgIds,@RequestParam Long platform) {
    @ApiOperation("批量确认收到消息 主键ids 1(买家)、2(商户)、3(骑手)")
    public R<Void> batchAck(@ApiParam(value = "消息ID数组") @RequestBody List<Long> msgIds, @RequestParam Long platform) {
        if (msgIds == null || msgIds.isEmpty()) {
            return R.fail("消息ID列表不能为空");
        }
        try {
            mesMsgRecordService.batchMarkRead(platform,msgIds);
            mesMsgRecordService.batchMarkRead(platform, msgIds);
            return R.success();
        } catch (Exception e) {
            log.error("批量确认消息失败,msgIds: {}", msgIds, e);
@@ -140,7 +139,7 @@
            MesMsgRecordQueryCriteria criteria) {
        Page<Object> page = new Page<>(criteria.getPage(), criteria.getSize());
        try {
            PageResult<MesMsgRecordQuerySystemDto> pageResult = mesMsgRecordService.queryAllSysNotice(criteria,page);
            PageResult<MesMsgRecordQuerySystemDto> pageResult = mesMsgRecordService.queryAllSysNotice(criteria, page);
            return R.success(pageResult);
        } catch (Exception e) {
            log.error("分页查询系统通知失败,criteria: {}", criteria, e);
@@ -150,23 +149,72 @@
    }
    /* 4. 用店铺id 查询订单消息 */
    @GetMapping("/order")
    @ApiOperation("用店铺id 查询订单消息")
    public R<List<MesMsgRecordQueryOrderDto>> order(@PathVariable Long shopId ) {
//    @GetMapping("/order")
//    @ApiOperation("用店铺id 查询订单消息")
//    public R<List<MesMsgRecordQueryOrderDto>> order(@RequestParam Long shopId) {
//        try {
//            List<MesMsgRecordQueryOrderDto> 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<List<MesMsgRecordQueryOrderDto>> getPendingOrders(@RequestParam Long shopId) {
        try {
            List<MesMsgRecordQueryOrderDto> res=mesMsgRecordService.queryorder(shopId);
            String content = OrderStatusEnum.MERCHANT_ORDER_SUBMITTED.getValue();
            List<MesMsgRecordQueryOrderDto> res = mesMsgRecordService.queryorderPending(shopId, content);
            return R.success(res);
        } catch (Exception e) {
            log.error("用店铺id 获取订单消息失败,shopId: {}", shopId, e);
            return R.fail("用店铺id 获取订单消息失败");
            log.error("用店铺id 获取待处理订单消息失败,shopId: {}", shopId, e);
            return R.fail("用店铺id 获取待处理订单消息失败");
        }
    }
    //商户端:订单送达通知 。 根据商户id 获取买家下订单送达
    @GetMapping("/order/delivered")
    @ApiOperation("商户端:用店铺id 获取订单送达消息")
    public R<List<MesMsgRecordQueryOrderDto>> getDeliveredOrders(@RequestParam Long shopId) {
        try {
            String content = OrderStatusEnum.BUYER_ORDER_STATUS_CHANGED.getValue();
            List<MesMsgRecordQueryOrderDto> 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<List<MesMsgRecordQueryOrderDto>> getBuyerOrderStatus(@RequestParam Long buyerId) {
        try {
            List<MesMsgRecordQueryOrderDto> 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<List<MesMsgRecordQueryOrderDto>> getBuyerDeliveredOrders(@RequestParam Long buyerId) {
        try {
            List<MesMsgRecordQueryOrderDto> res = mesMsgRecordService.queryBuyerOrderMessagesComplete(buyerId);
            return R.success(res);
        } catch (Exception e) {
            log.error("买家端获取订单送达消息失败,buyerId: {}", buyerId, e);
            return R.fail("获取订单送达消息失败");
        }
    }
}