leomonM
2025-08-22 20a82a1fe750b75e2771898c708983b86610f8c0
消息的set
7 files modified
354 ■■■■■ changed files
oying-system/src/main/java/com/oying/modules/message/common/MesTypeEnum.java 7 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/domain/MesMsgRecord.java 5 ●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/mapper/MesMsgRecordMapper.java 6 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/rest/MesMsgRecordController.java 70 ●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/service/MesMsgRecordService.java 33 ●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/service/impl/MesMsgRecordServiceImpl.java 206 ●●●●● patch | view | raw | blame | history
oying-system/src/main/resources/mapper/message/MesMsgRecordMapper.xml 27 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/common/MesTypeEnum.java
@@ -6,13 +6,14 @@
@Getter
@AllArgsConstructor
public enum MesTypeEnum {
    //1=系统 2=订单 3=评价/留言 4=骑手 5=商户
    //1=系统 2=订单 3=评价/留言 4=骑手 5=商户 6=买家
    //2=订单 订单包含 4 5 6
    SYSTEM(1, "系统"),
    ORDER(2, "订单"),
    COMMENT(3, "评价/留言"),
    RIDER(4, "骑手"),     // 补充骑手类型
    MERCHANT(5, "商户");  // 补充商户类型
    MERCHANT(5, "商户"),  // 补充商户类型
    BUYER(6, "买家");     // 补充买家类型
    private final Integer key;
    private final String value;
oying-system/src/main/java/com/oying/modules/message/domain/MesMsgRecord.java
@@ -99,6 +99,9 @@
    private String buyerId;
    @NotBlank
    @ApiModelProperty(value = "买家用户名字")
    private String buyerName;
    @NotBlank
    @ApiModelProperty(value = "订单编号 冗余字段")
    private String orderNo;
@@ -111,7 +114,7 @@
    private String shopName;
    @ApiModelProperty(value = "骑手ID")
    private Long riderId;
    private String riderId;
    @ApiModelProperty(value = "骑手姓名 冗余字段")
    private String riderName;
oying-system/src/main/java/com/oying/modules/message/mapper/MesMsgRecordMapper.java
@@ -36,6 +36,12 @@
    List<MesMsgRecordQueryPollDto> PollMesAll(@Param("platform") Long platform);
    List<MesMsgRecordQueryOrderDto> queryorderPending(Long shopId, String content);
    List<MesMsgRecordQueryOrderDto> queryBuyerOrderMessages(Long buyerId);
    List<MesMsgRecordQueryOrderDto> queryBuyerOrderMessagesComplete(Long buyerId);
//    IPage<MesMsgRecord> findAll(@Param("criteria") MesMsgRecordQueryCriteria criteria, Page<Object> page);
}
oying-system/src/main/java/com/oying/modules/message/rest/MesMsgRecordController.java
@@ -1,6 +1,7 @@
package com.oying.modules.message.rest;
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.dto.MesMsgRecordQueryCriteria;
import com.oying.modules.message.domain.myDto.MesMsgRecordQueryOrderDto;
@@ -148,19 +149,72 @@
    }
    /* 4. 用店铺id 查询订单消息 */
    @GetMapping("/order")
    @ApiOperation("用店铺id 查询订单消息")
    public R<List<MesMsgRecordQueryOrderDto>> order(@RequestParam 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("获取订单送达消息失败");
        }
    }
}
oying-system/src/main/java/com/oying/modules/message/service/MesMsgRecordService.java
@@ -75,11 +75,36 @@
    PageResult<MesMsgRecordQuerySystemDto> queryAllSysNotice(MesMsgRecordQueryCriteria criteria, Page<Object> page);
    List<MesMsgRecordQueryOrderDto> queryorderPending(Long shopId, String content);
    List<MesMsgRecordQueryOrderDto> queryBuyerOrderMessages(Long buyerId);
    List<MesMsgRecordQueryOrderDto> queryBuyerOrderMessagesComplete(Long buyerId);
    List<MesMsgRecordQueryOrderDto> queryorder(Long shopId);
    //插入订单消息
//    入参     订单编号 订单状态(内容)  店铺id
    void insertOrderMsg(String orderNo, OrderStatusEnum content, Long shopId);
    List<MesMsgRecordQueryPollDto> PollMesAll(Long platform);
    //插入订单消息
//    入参     订单编号 订单状态(内容)  店铺id   没有传空值
    //    void insertOrderMsg(String orderNo, OrderStatusEnum content, Long shopId);
    // 设置一个买家状态为下单    买家id name 订单属性 店铺号
    void setBuyerStatusOrderSubmitted(String buyerId, String buyerName, String orderNo, Long shopId, String riderId, String riderName);
    //设置一个买家状态为送达     买家id name 订单属性 店铺号
    void setBuyerStatusOrderDelivered(String buyerId, String buyerName, String orderNo, Long shopId, String riderId, String riderName);
    // 设置一个(订单,买家)的 买家状态
    void setBuyerStatusOrderDelivered(String buyerId, String buyerName, String orderNo, Long shopId, OrderStatusEnum content, String riderId, String riderName);
    //设置商家的状态
    void setSellerStatusOrderDelivered(String buyerId, String buyerName, String orderNo, Long shopId, OrderStatusEnum content, String riderId, String riderName);
    //设置骑手状态
    void setRiderStatusOrderDelivered(String buyerId, String buyerName, String orderNo, Long shopId, OrderStatusEnum content, String riderId, String riderName);
}
oying-system/src/main/java/com/oying/modules/message/service/impl/MesMsgRecordServiceImpl.java
@@ -113,25 +113,201 @@
        return mesMsgRecordMapper.queryorder(shopId);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void insertOrderMsg(String orderNo, OrderStatusEnum content, Long shopId) {
        MesMsgRecord record = new MesMsgRecord();
        record.setOrderNo(orderNo);
        record.setContent(content.getValue()); // 使用枚举的描述作为消息内容
        record.setContentKey(String.valueOf(content.getKey()));// 使用枚举的描述作为消息内容key
        record.setShopId(shopId);
        record.setMsgType(MesTypeEnum.ORDER.getKey()); // 订单消息类型为2
        record.setIsRead(MesReadEnum.UNREAD.getKey()); // 默认未读 0
        record.setCreateTime(new Timestamp(System.currentTimeMillis()));
        record.setUpdateTime(new Timestamp(System.currentTimeMillis()));
        mesMsgRecordMapper.insert(record);   // 让异常直接往外抛
    }
//    @Override
//    @Transactional(rollbackFor = Exception.class)
//    public void insertOrderMsg(String orderNo, OrderStatusEnum content, Long shopId) {
//        MesMsgRecord record = new MesMsgRecord();
//        record.setOrderNo(orderNo);
//        record.setContent(content.getValue()); // 使用枚举的描述作为消息内容
//        record.setContentKey(String.valueOf(content.getKey()));// 使用枚举的描述作为消息内容key
//        record.setShopId(shopId);
//        record.setMsgType(MesTypeEnum.ORDER.getKey()); // 订单消息类型为2
//        record.setIsRead(MesReadEnum.UNREAD.getKey()); // 默认未读 0
//        record.setCreateTime(new Timestamp(System.currentTimeMillis()));
//        record.setUpdateTime(new Timestamp(System.currentTimeMillis()));
//        mesMsgRecordMapper.insert(record);   // 让异常直接往外抛
//
//    }
    @Override
    public List<MesMsgRecordQueryPollDto> PollMesAll(Long platform) {
        return mesMsgRecordMapper.PollMesAll(platform);
    }
    // 设置一个买家状态为下单 不存在则插入   买家id name 订单属性 店铺号
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void setBuyerStatusOrderSubmitted(String buyerId, String buyerName, String orderNo, Long shopId, String riderId, String riderName) {
        MesMsgRecord record = new MesMsgRecord();
        record.setOrderNo(orderNo);
        record.setContent(OrderStatusEnum.MERCHANT_ORDER_SUBMITTED.getValue()); // 使用枚举的描述作为消息内容
        record.setContentKey(String.valueOf(OrderStatusEnum.MERCHANT_ORDER_SUBMITTED.getKey()));// 使用枚举的描述作为消息内容key
        record.setBuyerId(buyerId != null ? buyerId : ""); // 处理空值情况
        record.setMsgType(MesTypeEnum.ORDER.getKey()); // 订单消息类型为2
        record.setIsRead(MesReadEnum.UNREAD.getKey()); // 默认未读 0
        if (riderId != null) {
            record.setRiderId(riderId);
        }
        if (riderName != null) {
            record.setRiderName(riderName);
        }
        if (shopId != null) {
            record.setShopId(shopId);
        }
        if (buyerName != null) {
            record.setBuyerName(buyerName);
        }
        record.setCreateTime(new Timestamp(System.currentTimeMillis()));
        record.setUpdateTime(new Timestamp(System.currentTimeMillis()));
        mesMsgRecordMapper.insert(record);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void setBuyerStatusOrderDelivered(String buyerId, String buyerName, String orderNo, Long shopId, String riderId, String riderName) {
        MesMsgRecord record = new MesMsgRecord();
        record.setOrderNo(orderNo);
        record.setContent(OrderStatusEnum.BUYER_ORDER_STATUS_CHANGED.getValue()); // 使用枚举的描述作为消息内容
        record.setContentKey(String.valueOf(OrderStatusEnum.BUYER_ORDER_STATUS_CHANGED.getKey()));// 使用枚举的描述作为消息内容key
        record.setBuyerId(buyerId != null ? buyerId : ""); // 处理空值情况
        record.setMsgType(MesTypeEnum.ORDER.getKey()); // 订单消息类型为2
        record.setIsRead(MesReadEnum.UNREAD.getKey()); // 默认未读 0
        if (riderId != null) {
            record.setRiderId(riderId);
        }
        if (riderName != null) {
            record.setRiderName(riderName);
        }
        if (shopId != null) {
            record.setShopId(shopId);
        }
        if (buyerName != null) {
            record.setBuyerName(buyerName);
        }
        record.setCreateTime(new Timestamp(System.currentTimeMillis()));
        record.setUpdateTime(new Timestamp(System.currentTimeMillis()));
        mesMsgRecordMapper.insert(record);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void setBuyerStatusOrderDelivered(String buyerId, String buyerName, String orderNo, Long shopId, OrderStatusEnum content, String riderId, String riderName) {
        //content只能设置为如下 "商品已送达" "订单已完成" "订单送达"
        if (content == null ||
                (!content.equals(OrderStatusEnum.BUYER_ORDER_STATUS_CHANGED) &&
                        !content.equals(OrderStatusEnum.BUYER_ORDER_COMPLETED) &&
                        !content.equals(OrderStatusEnum.BUYER_ORDER_DELIVERED))) {
            throw new IllegalArgumentException("content只能设置为如下 \"商品已送达\" \"订单已完成\" \"订单送达\"");
        }
        MesMsgRecord record = new MesMsgRecord();
        record.setOrderNo(orderNo);
        record.setContent(content.getValue()); // 使用枚举的描述作为消息内容
        record.setContentKey(String.valueOf(content.getKey()));// 使用枚举的描述作为消息内容key
        record.setBuyerId(buyerId != null ? buyerId : ""); // 处理空值情况
        record.setMsgType(MesTypeEnum.BUYER.getKey()); //
        record.setIsRead(MesReadEnum.UNREAD.getKey()); // 默认未读 0
        if (riderId != null) {
            record.setRiderId(riderId);
        }
        if (riderName != null) {
            record.setRiderName(riderName);
        }
        if (shopId != null) {
            record.setShopId(shopId);
        }
        if (buyerName != null) {
            record.setBuyerName(buyerName);
        }
        record.setCreateTime(new Timestamp(System.currentTimeMillis()));
        record.setUpdateTime(new Timestamp(System.currentTimeMillis()));
        mesMsgRecordMapper.insert(record);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void setSellerStatusOrderDelivered(String buyerId, String buyerName, String orderNo, Long shopId, OrderStatusEnum content, String riderId, String riderName) {
        //content只能为  "订单已提交" "商家已接单" 商家已备货"
        if (content == null ||
                (content != OrderStatusEnum.MERCHANT_ORDER_SUBMITTED &&
                        content != OrderStatusEnum.MERCHANT_ACCEPTED &&
                        content != OrderStatusEnum.MERCHANT_PREPARED)) {
            throw new IllegalArgumentException("content只能为  \"订单已提交\" \"商家已接单\" 商家已备货\"");
        }
        MesMsgRecord record = new MesMsgRecord();
        record.setOrderNo(orderNo);
        record.setContent(content.getValue()); // 使用枚举的描述作为消息内容
        record.setContentKey(String.valueOf(content.getKey()));// 使用枚举的描述作为消息内容key
        record.setBuyerId(buyerId != null ? buyerId : ""); // 处理空值情况
        record.setMsgType(MesTypeEnum.MERCHANT.getKey()); //
        record.setIsRead(MesReadEnum.UNREAD.getKey()); // 默认未读 0
        if (riderId != null) {
            record.setRiderId(riderId);
        }
        if (riderName != null) {
            record.setRiderName(riderName);
        }
        if (shopId != null) {
            record.setShopId(shopId);
        }
        if (buyerName != null) {
            record.setBuyerName(buyerName);
        }
        record.setCreateTime(new Timestamp(System.currentTimeMillis()));
        record.setUpdateTime(new Timestamp(System.currentTimeMillis()));
        mesMsgRecordMapper.insert(record);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void setRiderStatusOrderDelivered(String buyerId, String buyerName, String orderNo, Long shopId, OrderStatusEnum content, String riderId, String riderName) {
        //content只能为  "骑手已接单" "骑手已取货" "骑手已到店" "订单已取消" "距离最晚送达时间不足1小时" "距离最晚送达时间不足30分钟"
        if (content == null ||
                (content != OrderStatusEnum.RIDER_PENDING_ACCEPTANCE &&
                        content != OrderStatusEnum.RIDER_PICKED_UP &&
                        content != OrderStatusEnum.RIDER_ARRIVED &&
                        content != OrderStatusEnum.RIDER_ORDER_CANCELLED &&
                        content != OrderStatusEnum.RIDER_DELIVERY_WARNING_1H &&
                        content != OrderStatusEnum.RIDER_DELIVERY_WARNING_30MIN)) {
            throw new IllegalArgumentException("content只能为  \"骑手已接单\" \"骑手已取货\" \"骑手已到店\" \"订单已取消\" \"距离最晚送达时间不足1小时\" \"距离最晚送达时间不足30分钟\"");
        }
        MesMsgRecord record = new MesMsgRecord();
        record.setOrderNo(orderNo);
        record.setContent(content.getValue()); // 使用枚举的描述作为消息内容
        record.setContentKey(String.valueOf(content.getKey()));// 使用枚举的描述作为消息内容key
        record.setBuyerId(buyerId != null ? buyerId : ""); // 处理空值情况
        record.setMsgType(MesTypeEnum.RIDER.getKey()); //
        record.setIsRead(MesReadEnum.UNREAD.getKey()); // 默认未读 0
        if (riderId != null) {
            record.setRiderId(riderId);
        }
        if (riderName != null) {
            record.setRiderName(riderName);
        }
        if (shopId != null) {
            record.setShopId(shopId);
        }
        if (buyerName != null) {
            record.setBuyerName(buyerName);
        }
        record.setCreateTime(new Timestamp(System.currentTimeMillis()));
        record.setUpdateTime(new Timestamp(System.currentTimeMillis()));
        mesMsgRecordMapper.insert(record);
    }
    @Override
    public List<MesMsgRecordQueryOrderDto> queryorderPending(Long shopId, String content) {
        return mesMsgRecordMapper.queryorderPending(shopId, content);
    }
    @Override
    public List<MesMsgRecordQueryOrderDto> queryBuyerOrderMessages(Long buyerId) {
        return mesMsgRecordMapper.queryBuyerOrderMessages(buyerId);
    }
    @Override
    public List<MesMsgRecordQueryOrderDto> queryBuyerOrderMessagesComplete(Long buyerId) {
        return mesMsgRecordMapper.queryBuyerOrderMessagesComplete(buyerId);
    }
}
oying-system/src/main/resources/mapper/message/MesMsgRecordMapper.xml
@@ -128,4 +128,31 @@
        </where>
        order by id desc
    </select>
    <select id="queryorderPending"
            resultType="com.oying.modules.message.domain.myDto.MesMsgRecordQueryOrderDto"
            parameterType="map">
        SELECT id, content, order_no
        FROM mes_msg_record
        WHERE content = #{content}
          AND shop_id = #{shopId}
        ORDER BY id DESC
    </select>
    <select id="queryBuyerOrderMessages"
            resultType="com.oying.modules.message.domain.myDto.MesMsgRecordQueryOrderDto"
            parameterType="java.lang.Long">
        select id, content, order_no
        from mes_msg_record
        where buyer_id = #{buyerId}
        order by id desc
    </select>
    <select id="queryBuyerOrderMessagesComplete"
            resultType="com.oying.modules.message.domain.myDto.MesMsgRecordQueryOrderDto"
            parameterType="java.lang.Long">
        select id, content, order_no
        from mes_msg_record
        where buyer_id = #{buyerId}
          and content = '订单完成'
        order by id desc
    </select>
</mapper>