xin
4 days ago 982313135d1c239fe3b20e4c5664781f92d40aca
Merge branch 'master' into xin
68 files added
15 files modified
4482 ■■■■■ changed files
oying-system/src/main/java/com/oying/modules/message/common/BizTypeEnum.java 58 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/common/MesReadEnum.java 58 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/common/MesTypeEnum.java 59 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/common/OrderStatusEnum.java 1 ●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/common/PlatFormEnum.java 59 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/domain/MesAdvertisement.java 109 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/domain/MesCustomerCommentMsg.java 95 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/domain/MesMsgRecord.java 118 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/domain/MesMsgTemplate.java 72 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/domain/MesOrderEvaluation.java 102 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/domain/MesOrderItemEvaluation.java 78 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/domain/MesRiderEvaluation.java 80 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/domain/MesShopReply.java 60 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/domain/dto/MesAdvertisementQueryCriteria.java 18 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/domain/dto/MesCustomerCommentMsgQueryCriteria.java 18 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/domain/dto/MesMsgRecordQueryCriteria.java 18 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/domain/dto/MesMsgTemplateQueryCriteria.java 18 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/domain/dto/MesOrderEvaluationQueryCriteria.java 18 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/domain/dto/MesOrderItemEvaluationQueryCriteria.java 18 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/domain/dto/MesRiderEvaluationQueryCriteria.java 18 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/domain/dto/MesShopMsgRespDTO.java 15 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/domain/dto/MesShopReplyQueryCriteria.java 18 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/domain/myDto/MesCustomerCommentMsgDTO.java 81 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/domain/myDto/MesMsgRecordQueryOrderDto.java 101 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/domain/myDto/MesMsgRecordQueryPollDto.java 76 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/domain/myDto/MesMsgRecordQuerySystemDto.java 76 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/domain/myDto/MesOrderEvaluationDto.java 54 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/domain/myDto/MesOrderItemEvaluationDto.java 78 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/domain/myDto/MesRiderEvaluationDto.java 50 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/mapper/MesAdvertisementMapper.java 22 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/mapper/MesCustomerCommentMsgMapper.java 26 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/mapper/MesMsgRecordMapper.java 39 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/mapper/MesMsgTemplateMapper.java 22 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/mapper/MesOrderEvaluationMapper.java 26 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/mapper/MesOrderItemEvaluationMapper.java 25 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/mapper/MesRiderEvaluationMapper.java 26 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/mapper/MesShopReplyMapper.java 22 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/rest/MesAdvertisementController.java 73 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/rest/MesCustomerCommentMsgController.java 90 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/rest/MesMsgRecordController.java 172 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/rest/MesMsgTemplateController.java 73 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/rest/MesOrderEvaluationController.java 90 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/rest/MesOrderItemEvaluationController.java 90 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/rest/MesRiderEvaluationController.java 90 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/rest/MesShopReplyController.java 73 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/service/MesAdvertisementService.java 60 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/service/MesCustomerCommentMsgService.java 63 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/service/MesMsgRecordService.java 78 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/service/MesMsgTemplateService.java 60 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/service/MesOrderEvaluationService.java 63 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/service/MesOrderItemEvaluationService.java 63 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/service/MesRiderEvaluationService.java 63 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/service/MesShopReplyService.java 60 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/service/impl/MesAdvertisementServiceImpl.java 93 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/service/impl/MesCustomerCommentMsgServiceImpl.java 89 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/service/impl/MesMsgRecordServiceImpl.java 132 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/service/impl/MesMsgTemplateServiceImpl.java 83 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/service/impl/MesOrderEvaluationServiceImpl.java 97 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/service/impl/MesOrderItemEvaluationServiceImpl.java 90 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/service/impl/MesRiderEvaluationServiceImpl.java 89 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/service/impl/MesShopReplyServiceImpl.java 79 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/pc/product/domain/dto/ProductQueryCriteria.java 4 ●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/pc/product/view/ProductCustomerView.java 6 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/pc/store/domain/Store.java 18 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/pc/store/domain/dto/StoreCreateRequest.java 4 ●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/pc/store/domain/dto/StoreCustomerDetailDto.java 3 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/pc/store/domain/dto/StoreFieldUpdateRequest.java 3 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/pc/store/domain/dto/StoreUpdateRequest.java 6 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/pc/store/rest/StoreCustomerController.java 12 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/pc/store/rest/StoreMerchantController.java 6 ●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/pc/store/view/CustomerStoreView.java 30 ●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/pc/store/view/StoreMerchantView.java 12 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/pc/store/view/StoreSimpleView.java 3 ●●●●● patch | view | raw | blame | history
oying-system/src/main/resources/mapper/message/MesAdvertisementMapper.xml 41 ●●●●● patch | view | raw | blame | history
oying-system/src/main/resources/mapper/message/MesCustomerCommentMsgMapper.xml 50 ●●●●● patch | view | raw | blame | history
oying-system/src/main/resources/mapper/message/MesMsgRecordMapper.xml 113 ●●●●● patch | view | raw | blame | history
oying-system/src/main/resources/mapper/message/MesMsgTemplateMapper.xml 30 ●●●●● patch | view | raw | blame | history
oying-system/src/main/resources/mapper/message/MesOrderEvaluationMapper.xml 71 ●●●●● patch | view | raw | blame | history
oying-system/src/main/resources/mapper/message/MesOrderItemEvaluationMapper.xml 88 ●●●●● patch | view | raw | blame | history
oying-system/src/main/resources/mapper/message/MesRiderEvaluationMapper.xml 86 ●●●●● patch | view | raw | blame | history
oying-system/src/main/resources/mapper/message/MesShopReplyMapper.xml 27 ●●●●● patch | view | raw | blame | history
oying-system/src/main/resources/mapper/pc/product/ProductMapper.xml 19 ●●●● patch | view | raw | blame | history
oying-system/src/main/resources/mapper/pc/store/StoreMapper.xml 5 ●●●●● patch | view | raw | blame | history
oying-system/src/main/java/com/oying/modules/message/common/BizTypeEnum.java
New file
@@ -0,0 +1,58 @@
package com.oying.modules.message.common;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor
public enum BizTypeEnum {
    //业务类型 ORDER EVALUATION
    ORDER("ORDER", "订单业务"),
    EVALUATION("EVALUATION", "评价业务");
    private final String key;
    private final String value;
    /**
     * 根据key获取枚举实例
     * @param key key值
     * @return 对应的枚举实例,未找到返回null
     */
    public static BizTypeEnum getByKey(String key) {
        if (key == null) {
            return null;
        }
        for (BizTypeEnum typeEnum : BizTypeEnum.values()) {
            if (typeEnum.key.equals(key)) {
                return typeEnum;
            }
        }
        return null;
    }
    /**
     * 根据value获取枚举实例
     * @param value value值
     * @return 对应的枚举实例,未找到返回null
     */
    public static BizTypeEnum getByValue(String value) {
        if (value == null) {
            return null;
        }
        for (BizTypeEnum typeEnum : BizTypeEnum.values()) {
            if (typeEnum.value.equals(value)) {
                return typeEnum;
            }
        }
        return null;
    }
    @Override
    public String toString() {
        return "BizTypeEnum{" +
                "key='" + key + '\'' +
                ", value='" + value + '\'' +
                ", name='" + this.name() + '\'' +
                '}';
    }
}
oying-system/src/main/java/com/oying/modules/message/common/MesReadEnum.java
New file
@@ -0,0 +1,58 @@
package com.oying.modules.message.common;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor
public enum MesReadEnum {
    // 0=未读 1=已读
    UNREAD(0, "未读"),
    READ(1, "已读");
    private final Integer key;
    private final String value;
    /**
     * 根据key获取枚举实例
     * @param key key值
     * @return 对应的枚举实例,未找到返回null
     */
    public static MesReadEnum getByKey(Integer key) {
        if (key == null) {
            return null;
        }
        for (MesReadEnum readEnum : MesReadEnum.values()) {
            if (readEnum.key.equals(key)) {
                return readEnum;
            }
        }
        return null;
    }
    /**
     * 根据value获取枚举实例
     * @param value value值
     * @return 对应的枚举实例,未找到返回null
     */
    public static MesReadEnum getByValue(String value) {
        if (value == null) {
            return null;
        }
        for (MesReadEnum readEnum : MesReadEnum.values()) {
            if (readEnum.value.equals(value)) {
                return readEnum;
            }
        }
        return null;
    }
    @Override
    public String toString() {
        return "MesReadEnum{" +
                "key=" + key +
                ", value='" + value + '\'' +
                ", name='" + this.name() + '\'' +
                '}';
    }
}
oying-system/src/main/java/com/oying/modules/message/common/MesTypeEnum.java
New file
@@ -0,0 +1,59 @@
package com.oying.modules.message.common;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor
public enum MesTypeEnum {
    //1=系统 2=订单 3=评价/留言
    SYSTEM(1, "系统"),
    ORDER(2, "订单"),
    COMMENT(3, "评价/留言");
    private final Integer key;
    private final String value;
    /**
     * 根据key获取枚举实例
     * @param key key值
     * @return 对应的枚举实例,未找到返回null
     */
    public static MesTypeEnum getByKey(Integer key) {
        if (key == null) {
            return null;
        }
        for (MesTypeEnum typeEnum : MesTypeEnum.values()) {
            if (typeEnum.key.equals(key)) {
                return typeEnum;
            }
        }
        return null;
    }
    /**
     * 根据value获取枚举实例
     * @param value value值
     * @return 对应的枚举实例,未找到返回null
     */
    public static MesTypeEnum getByValue(String value) {
        if (value == null) {
            return null;
        }
        for (MesTypeEnum typeEnum : MesTypeEnum.values()) {
            if (typeEnum.value.equals(value)) {
                return typeEnum;
            }
        }
        return null;
    }
    @Override
    public String toString() {
        return "MesTypeEnum{" +
                "key=" + key +
                ", value='" + value + '\'' +
                ", name='" + this.name() + '\'' +
                '}';
    }
}
oying-system/src/main/java/com/oying/modules/message/common/OrderStatusEnum.java
@@ -17,6 +17,7 @@
@Getter
@AllArgsConstructor
public enum OrderStatusEnum {
    //订单消息  通知状态   用于插入
    ZERO(0, "订单已提交"),
    ONE(1, "支付成功"),
oying-system/src/main/java/com/oying/modules/message/common/PlatFormEnum.java
New file
@@ -0,0 +1,59 @@
package com.oying.modules.message.common;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor
public enum PlatFormEnum {
    //1=买家 2=商户 3=骑手"
    BUYER(1, "买家"),
    MERCHANT(2, "商户"),
    RIDE(3, "骑手");
    private final Integer key;
    private final String value;
    /**
     * 根据key获取枚举实例
     * @param key key值
     * @return 对应的枚举实例,未找到返回null
     */
    public static PlatFormEnum getByKey(Integer key) {
        if (key == null) {
            return null;
        }
        for (PlatFormEnum platFormEnum : PlatFormEnum.values()) {
            if (platFormEnum.key.equals(key)) {
                return platFormEnum;
            }
        }
        return null;
    }
    /**
     * 根据value获取枚举实例
     * @param value value值
     * @return 对应的枚举实例,未找到返回null
     */
    public static PlatFormEnum getByValue(String value) {
        if (value == null) {
            return null;
        }
        for (PlatFormEnum platFormEnum : PlatFormEnum.values()) {
            if (platFormEnum.value.equals(value)) {
                return platFormEnum;
            }
        }
        return null;
    }
    @Override
    public String toString() {
        return "PlatFormEnum{" +
                "key=" + key +
                ", value='" + value + '\'' +
                ", name='" + this.name() + '\'' +
                '}';
    }
}
oying-system/src/main/java/com/oying/modules/message/domain/MesAdvertisement.java
New file
@@ -0,0 +1,109 @@
package com.oying.modules.message.domain;
import com.oying.base.BaseEntity;
import lombok.Data;
import cn.hutool.core.bean.BeanUtil;
import io.swagger.annotations.ApiModelProperty;
import cn.hutool.core.bean.copier.CopyOptions;
import java.sql.Timestamp;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
/**
* @description /
* @author 李萌
* @date 2025-07-25
**/
@Data
@TableName("mes_advertisement")
public class MesAdvertisement extends BaseEntity implements Serializable {
    @TableId(value = "id", type = IdType.AUTO)
    @ApiModelProperty(value = "广告ID")
    private Long id;
    @NotBlank
    @ApiModelProperty(value = "广告标题")
    private String title;
    @ApiModelProperty(value = "副标题/简介")
    private String subTitle;
    @ApiModelProperty(value = "广告正文(支持富文本)")
    private String content;
    @ApiModelProperty(value = "封面图URL")
    private String coverImg;
    @ApiModelProperty(value = "Banner图URL(冗余)")
    private String bannerImg;
    @NotNull
    @ApiModelProperty(value = "投放渠道 1小程序 2APP 3全平台")
    private Integer platform;
    @NotNull
    @ApiModelProperty(value = "跳转类型 1内部 2外部")
    private Integer jumpType;
    @ApiModelProperty(value = "跳转地址(内部路径或外部链接)")
    private String jumpUrl;
    @ApiModelProperty(value = "跳转携带参数(JSON)")
    private String jumpParams;
    @NotNull
    @ApiModelProperty(value = "排序值 越大越前")
    private Integer sortOrder;
    @NotNull
    @ApiModelProperty(value = "是否置顶 0否 1是")
    private Integer isTop;
    @NotNull
    @ApiModelProperty(value = "状态 1启用 2禁用")
    private Integer status;
    @NotNull
    @ApiModelProperty(value = "公告开始时间")
    private Timestamp effectiveTime;
    @NotNull
    @ApiModelProperty(value = "公告结束时间")
    private Timestamp expireTime;
    @NotNull
    @ApiModelProperty(value = "点击次数(冗余)")
    private Long clickCount;
    @NotNull
    @ApiModelProperty(value = "展示次数(冗余)")
    private Long showCount;
    @ApiModelProperty(value = "备注")
    private String remark;
    @NotBlank
    @ApiModelProperty(value = "createBy")
    private String createBy;
    @NotNull
    @ApiModelProperty(value = "createTime")
    private Timestamp createTime;
    @NotBlank
    @ApiModelProperty(value = "updateBy")
    private String updateBy;
    @NotNull
    @ApiModelProperty(value = "updateTime")
    private Timestamp updateTime;
    public void copy(MesAdvertisement source){
        BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
    }
}
oying-system/src/main/java/com/oying/modules/message/domain/MesCustomerCommentMsg.java
New file
@@ -0,0 +1,95 @@
package com.oying.modules.message.domain;
import com.oying.base.BaseEntity;
import lombok.Data;
import cn.hutool.core.bean.BeanUtil;
import io.swagger.annotations.ApiModelProperty;
import cn.hutool.core.bean.copier.CopyOptions;
import java.sql.Timestamp;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
/**
* @description /
* @author 李萌
* @date 2025-07-25
**/
@Data
@TableName("mes_customer_comment_msg")
public class MesCustomerCommentMsg extends BaseEntity implements Serializable {
    @TableId(value = "id", type = IdType.AUTO)
    @ApiModelProperty(value = "主键")
    private Long id;
    @NotNull
    @ApiModelProperty(value = "对应 mes_msg_record.id")
    private Long msgRecordId;
    @NotNull
    @ApiModelProperty(value = "店铺ID")
    private Long shopId;
    @NotNull
    @ApiModelProperty(value = "订单ID")
    private Long orderId;
    @NotBlank
    @ApiModelProperty(value = "订单编号 冗余")
    private String orderNo;
    @NotBlank
    @ApiModelProperty(value = "买家用户ID")
    private String buyerId;
    @ApiModelProperty(value = "买家昵称 冗余")
    private String buyerName;
    @NotNull
    @ApiModelProperty(value = "评价ID 冗余")
    private Long evaluationId;
    @NotNull
    @ApiModelProperty(value = "商户是否已回复 0=未回复 1=已回复")
    private Integer replied;
    @NotBlank
    @ApiModelProperty(value = "创建人")
    private String createBy;
    @NotNull
    @ApiModelProperty(value = "创建时间")
    private Timestamp createTime;
    @NotBlank
    @ApiModelProperty(value = "更新人")
    private String updateBy;
    @NotNull
    @ApiModelProperty(value = "更新时间")
    private Timestamp updateTime;
    @NotNull
    @ApiModelProperty(value = "顾客留言时间(即评价产生时间)")
    private Timestamp commentTime;
    @ApiModelProperty(value = "顾客留言内容(评价原文)")
    private String commentContent;
    @ApiModelProperty(value = "商家回复内容")
    private String replyContent;
    @ApiModelProperty(value = "外部跳转链接(完整 http/https)")
    private String extJumpUrl;
    @ApiModelProperty(value = "内部小程序/APP 路由路径")
    private String intJumpPath;
    public void copy(MesCustomerCommentMsg source){
        BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
    }
}
oying-system/src/main/java/com/oying/modules/message/domain/MesMsgRecord.java
New file
@@ -0,0 +1,118 @@
package com.oying.modules.message.domain;
import com.oying.base.BaseEntity;
import com.oying.modules.message.common.MesTypeEnum;
import lombok.Data;
import cn.hutool.core.bean.BeanUtil;
import io.swagger.annotations.ApiModelProperty;
import cn.hutool.core.bean.copier.CopyOptions;
import java.sql.Timestamp;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
/**
* @description /
* @author 李萌
* @date 2025-07-25
**/
@Data
@TableName("mes_msg_record")
public class MesMsgRecord extends BaseEntity implements Serializable {
    @TableId(value = "id", type = IdType.AUTO)
    @ApiModelProperty(value = "主键")
    private Long id;
    @ApiModelProperty(value = "模板ID 可无")
    private Integer templateId;
    @NotBlank
    @ApiModelProperty(value = "接收人ID")
    private String receiverId;
    @NotNull
    @ApiModelProperty(value = "1=买家 2=商户 3=骑手")
    private Integer platform;
    @NotNull
    @ApiModelProperty(value = "同模板type")
    private Integer msgType;
//    @NotNull
//    @ApiModelProperty(value = "同模板type")
//    private MesTypeEnum msgType;
    @NotBlank
    @ApiModelProperty(value = "最终标题")
    private String title;
    @NotBlank
    @ApiModelProperty(value = "最终内容")
    private String content;
    @ApiModelProperty(value = "业务ID 例如订单ID")
    private Long bizId;
    @ApiModelProperty(value = "业务类型 ORDER/EVALUATION 等")
    private String bizType;
    @NotNull
    @ApiModelProperty(value = "已读 0=未读 1=已读")
    private Integer isRead;
    @ApiModelProperty(value = "阅读时间")
    private Timestamp readTime;
    @ApiModelProperty(value = "扩展字段 存跳转链接等")
    private String extra;
    @NotBlank
    @ApiModelProperty(value = "创建人")
    private String createBy;
    @NotNull
    @ApiModelProperty(value = "创建时间")
    private Timestamp createTime;
    @NotBlank
    @ApiModelProperty(value = "更新人")
    private String updateBy;
    @NotNull
    @ApiModelProperty(value = "更新时间")
    private Timestamp updateTime;
    // 新增字段
    @NotNull
    @ApiModelProperty(value = "订单ID")
    private Long orderId;
    @NotBlank
    @ApiModelProperty(value = "买家用户ID")
    private String buyerId;
    @NotBlank
    @ApiModelProperty(value = "订单编号 冗余字段")
    private String orderNo;
    @NotNull
    @ApiModelProperty(value = "店铺ID 冗余字段")
    private Long shopId;
    @NotBlank
    @ApiModelProperty(value = "店铺名称 冗余字段")
    private String shopName;
    @ApiModelProperty(value = "骑手ID")
    private Long riderId;
    @ApiModelProperty(value = "骑手姓名 冗余字段")
    private String riderName;
    public void copy(MesMsgRecord source){
        BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
    }
}
oying-system/src/main/java/com/oying/modules/message/domain/MesMsgTemplate.java
New file
@@ -0,0 +1,72 @@
package com.oying.modules.message.domain;
import com.oying.base.BaseEntity;
import lombok.Data;
import cn.hutool.core.bean.BeanUtil;
import io.swagger.annotations.ApiModelProperty;
import cn.hutool.core.bean.copier.CopyOptions;
import java.sql.Timestamp;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
/**
* @description /
* @author 李萌
* @date 2025-07-25
**/
@Data
@TableName("mes_msg_template")
public class MesMsgTemplate extends BaseEntity implements Serializable {
    @TableId(value = "id", type = IdType.AUTO)
    @ApiModelProperty(value = "主键")
    private Integer id;
    @NotBlank
    @ApiModelProperty(value = "模板编码")
    private String code;
    @NotBlank
    @ApiModelProperty(value = "模板名称")
    private String name;
    @NotBlank
    @ApiModelProperty(value = "标题模板 支持占位符")
    private String titleTpl;
    @NotBlank
    @ApiModelProperty(value = "内容模板 支持占位符")
    private String contentTpl;
    @NotNull
    @ApiModelProperty(value = "1=系统 2=订单 3=评价/留言")
    private Integer type;
    @NotNull
    @ApiModelProperty(value = "1=买家 2=商户 3=骑手")
    private Integer platform;
    @NotBlank
    @ApiModelProperty(value = "创建人")
    private String createBy;
    @NotNull
    @ApiModelProperty(value = "创建时间")
    private Timestamp createTime;
    @NotBlank
    @ApiModelProperty(value = "更新人")
    private String updateBy;
    @NotNull
    @ApiModelProperty(value = "更新时间")
    private Timestamp updateTime;
    public void copy(MesMsgTemplate source){
        BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
    }
}
oying-system/src/main/java/com/oying/modules/message/domain/MesOrderEvaluation.java
New file
@@ -0,0 +1,102 @@
package com.oying.modules.message.domain;
import com.oying.base.BaseEntity;
import lombok.Data;
import cn.hutool.core.bean.BeanUtil;
import io.swagger.annotations.ApiModelProperty;
import cn.hutool.core.bean.copier.CopyOptions;
import java.sql.Timestamp;
import java.math.BigDecimal;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
/**
* @description /
* @author 李萌
* @date 2025-07-25
**/
@Data
@TableName("mes_order_evaluation")
public class MesOrderEvaluation extends BaseEntity implements Serializable {
    @TableId(value = "id", type = IdType.AUTO)
    @ApiModelProperty(value = "主键")
    private Long id;
    @NotNull
    @ApiModelProperty(value = "订单ID")
    private Long orderId;
    @NotBlank
    @ApiModelProperty(value = "买家用户ID")
    private String buyerId;
    @NotBlank
    @ApiModelProperty(value = "订单编号 冗余字段")
    private String orderNo;
    @NotNull
    @ApiModelProperty(value = "店铺ID 冗余字段")
    private Long shopId;
    @NotBlank
    @ApiModelProperty(value = "店铺名称 冗余字段")
    private String shopName;
    @ApiModelProperty(value = "骑手ID")
    private Long riderId;
    @ApiModelProperty(value = "骑手姓名 冗余字段")
    private String riderName;
    @NotNull
    @ApiModelProperty(value = "商品评分 0-5,支持半星")
    private BigDecimal goodsScore;
    @ApiModelProperty(value = "商品评价内容")
    private String goodsContent;
    @ApiModelProperty(value = "商品评价图片 最多5张 存JSON数组")
    private String goodsImgs;
    @NotNull
    @ApiModelProperty(value = "店铺服务评分")
    private BigDecimal shopScore;
    @ApiModelProperty(value = "店铺服务评价内容")
    private String shopContent;
    @ApiModelProperty(value = "骑手服务评分")
    private BigDecimal riderScore;
    @ApiModelProperty(value = "骑手服务评价内容")
    private String riderContent;
    @NotNull
    @ApiModelProperty(value = "买家删除评价 0=正常 1=已删除")
    private Integer isDeleted;
    @NotBlank
    @ApiModelProperty(value = "创建人")
    private String createBy;
    @NotNull
    @ApiModelProperty(value = "创建时间")
    private Timestamp createTime;
    @NotBlank
    @ApiModelProperty(value = "更新人")
    private String updateBy;
    @NotNull
    @ApiModelProperty(value = "更新时间")
    private Timestamp updateTime;
    public void copy(MesOrderEvaluation source){
        BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
    }
}
oying-system/src/main/java/com/oying/modules/message/domain/MesOrderItemEvaluation.java
New file
@@ -0,0 +1,78 @@
package com.oying.modules.message.domain;
import com.oying.base.BaseEntity;
import lombok.Data;
import cn.hutool.core.bean.BeanUtil;
import io.swagger.annotations.ApiModelProperty;
import cn.hutool.core.bean.copier.CopyOptions;
import java.sql.Timestamp;
import java.math.BigDecimal;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
/**
* @description /
* @author 李萌
* @date 2025-07-25
**/
@Data
@TableName("mes_order_item_evaluation")
public class MesOrderItemEvaluation  extends BaseEntity implements Serializable {
    @TableId(value = "id", type = IdType.AUTO)
    @ApiModelProperty(value = "主键")
    private Long id;
    @NotNull
    @ApiModelProperty(value = "对应 mes_order_evaluation.id")
    private Long orderEvalId;
    @NotNull
    @ApiModelProperty(value = "订单明细ID")
    private Long orderItemId;
    @NotNull
    @ApiModelProperty(value = "商品ID")
    private Long goodsId;
    @NotBlank
    @ApiModelProperty(value = "商品名称 冗余")
    private String goodsName;
    @ApiModelProperty(value = "商品主图 冗余")
    private String goodsPic;
    @NotNull
    @ApiModelProperty(value = "商品单项评分")
    private BigDecimal score;
    @ApiModelProperty(value = "评价内容")
    private String content;
    @ApiModelProperty(value = "评价图片JSON 最多5张")
    private String imgs;
    @NotBlank
    @ApiModelProperty(value = "创建人")
    private String createBy;
    @NotNull
    @ApiModelProperty(value = "创建时间")
    private Timestamp createTime;
    @NotBlank
    @ApiModelProperty(value = "更新人")
    private String updateBy;
    @NotNull
    @ApiModelProperty(value = "更新时间")
    private Timestamp updateTime;
    public void copy(MesOrderItemEvaluation source){
        BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
    }
}
oying-system/src/main/java/com/oying/modules/message/domain/MesRiderEvaluation.java
New file
@@ -0,0 +1,80 @@
package com.oying.modules.message.domain;
import com.oying.base.BaseEntity;
import lombok.Data;
import cn.hutool.core.bean.BeanUtil;
import io.swagger.annotations.ApiModelProperty;
import cn.hutool.core.bean.copier.CopyOptions;
import java.sql.Timestamp;
import java.math.BigDecimal;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
/**
* @description /
* @author 李萌
* @date 2025-07-25
**/
@Data
@TableName("mes_rider_evaluation")
public class MesRiderEvaluation extends BaseEntity implements Serializable {
    @TableId(value = "id", type = IdType.AUTO)
    @ApiModelProperty(value = "主键")
    private Long id;
    @NotNull
    @ApiModelProperty(value = "订单ID")
    private Long orderId;
    @NotBlank
    @ApiModelProperty(value = "订单编号 冗余")
    private String orderNo;
    @NotNull
    @ApiModelProperty(value = "骑手ID")
    private Long riderId;
    @NotBlank
    @ApiModelProperty(value = "骑手姓名 冗余")
    private String riderName;
    @NotBlank
    @ApiModelProperty(value = "买家用户ID")
    private String buyerId;
    @NotNull
    @ApiModelProperty(value = "骑手服务评分")
    private BigDecimal score;
    @ApiModelProperty(value = "评价内容")
    private String content;
    @NotBlank
    @ApiModelProperty(value = "创建人")
    private String createBy;
    @NotNull
    @ApiModelProperty(value = "创建时间")
    private Timestamp createTime;
    @NotBlank
    @ApiModelProperty(value = "更新人")
    private String updateBy;
    @NotNull
    @ApiModelProperty(value = "更新时间")
    private Timestamp updateTime;
    @ApiModelProperty(value = "评价图片JSON 最多5张")
    private String imgs;
    public void copy(MesRiderEvaluation source){
        BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
    }
}
oying-system/src/main/java/com/oying/modules/message/domain/MesShopReply.java
New file
@@ -0,0 +1,60 @@
package com.oying.modules.message.domain;
import com.oying.base.BaseEntity;
import lombok.Data;
import cn.hutool.core.bean.BeanUtil;
import io.swagger.annotations.ApiModelProperty;
import cn.hutool.core.bean.copier.CopyOptions;
import java.sql.Timestamp;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
/**
* @description /
* @author 李萌
* @date 2025-07-25
**/
@Data
@TableName("mes_shop_reply")
public class MesShopReply extends BaseEntity implements Serializable {
    @TableId(value = "id", type = IdType.AUTO)
    @ApiModelProperty(value = "主键")
    private Long id;
    @NotNull
    @ApiModelProperty(value = "mes_order_evaluation.id")
    private Long evaluationId;
    @NotNull
    @ApiModelProperty(value = "1=商品评价回复 2=店铺服务评价回复")
    private Integer replyType;
    @NotBlank
    @ApiModelProperty(value = "回复内容")
    private String content;
    @NotBlank
    @ApiModelProperty(value = "商户ID")
    private String createBy;
    @NotNull
    @ApiModelProperty(value = "创建时间")
    private Timestamp createTime;
    @NotBlank
    @ApiModelProperty(value = "更新人")
    private String updateBy;
    @NotNull
    @ApiModelProperty(value = "更新时间")
    private Timestamp updateTime;
    public void copy(MesShopReply source){
        BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
    }
}
oying-system/src/main/java/com/oying/modules/message/domain/dto/MesAdvertisementQueryCriteria.java
New file
@@ -0,0 +1,18 @@
package com.oying.modules.message.domain.dto;
import lombok.Data;
import io.swagger.annotations.ApiModelProperty;
/**
* @author 李萌
* @date 2025-07-25
**/
@Data
public class MesAdvertisementQueryCriteria{
    @ApiModelProperty(value = "页码", example = "1")
    private Integer page = 1;
    @ApiModelProperty(value = "每页数据量", example = "10")
    private Integer size = 10;
}
oying-system/src/main/java/com/oying/modules/message/domain/dto/MesCustomerCommentMsgQueryCriteria.java
New file
@@ -0,0 +1,18 @@
package com.oying.modules.message.domain.dto;
import lombok.Data;
import io.swagger.annotations.ApiModelProperty;
/**
* @author 李萌
* @date 2025-07-25
**/
@Data
public class MesCustomerCommentMsgQueryCriteria{
    @ApiModelProperty(value = "页码", example = "1")
    private Integer page = 1;
    @ApiModelProperty(value = "每页数据量", example = "10")
    private Integer size = 10;
}
oying-system/src/main/java/com/oying/modules/message/domain/dto/MesMsgRecordQueryCriteria.java
New file
@@ -0,0 +1,18 @@
package com.oying.modules.message.domain.dto;
import lombok.Data;
import io.swagger.annotations.ApiModelProperty;
/**
* @author 李萌
* @date 2025-07-25
**/
@Data
public class MesMsgRecordQueryCriteria{
    @ApiModelProperty(value = "页码", example = "1")
    private Integer page = 1;
    @ApiModelProperty(value = "每页数据量", example = "10")
    private Integer size = 10;
}
oying-system/src/main/java/com/oying/modules/message/domain/dto/MesMsgTemplateQueryCriteria.java
New file
@@ -0,0 +1,18 @@
package com.oying.modules.message.domain.dto;
import lombok.Data;
import io.swagger.annotations.ApiModelProperty;
/**
* @author 李萌
* @date 2025-07-25
**/
@Data
public class MesMsgTemplateQueryCriteria{
    @ApiModelProperty(value = "页码", example = "1")
    private Integer page = 1;
    @ApiModelProperty(value = "每页数据量", example = "10")
    private Integer size = 10;
}
oying-system/src/main/java/com/oying/modules/message/domain/dto/MesOrderEvaluationQueryCriteria.java
New file
@@ -0,0 +1,18 @@
package com.oying.modules.message.domain.dto;
import lombok.Data;
import io.swagger.annotations.ApiModelProperty;
/**
* @author 李萌
* @date 2025-07-25
**/
@Data
public class MesOrderEvaluationQueryCriteria{
    @ApiModelProperty(value = "页码", example = "1")
    private Integer page = 1;
    @ApiModelProperty(value = "每页数据量", example = "10")
    private Integer size = 10;
}
oying-system/src/main/java/com/oying/modules/message/domain/dto/MesOrderItemEvaluationQueryCriteria.java
New file
@@ -0,0 +1,18 @@
package com.oying.modules.message.domain.dto;
import lombok.Data;
import io.swagger.annotations.ApiModelProperty;
/**
* @author 李萌
* @date 2025-07-25
**/
@Data
public class MesOrderItemEvaluationQueryCriteria{
    @ApiModelProperty(value = "页码", example = "1")
    private Integer page = 1;
    @ApiModelProperty(value = "每页数据量", example = "10")
    private Integer size = 10;
}
oying-system/src/main/java/com/oying/modules/message/domain/dto/MesRiderEvaluationQueryCriteria.java
New file
@@ -0,0 +1,18 @@
package com.oying.modules.message.domain.dto;
import lombok.Data;
import io.swagger.annotations.ApiModelProperty;
/**
* @author 李萌
* @date 2025-07-25
**/
@Data
public class MesRiderEvaluationQueryCriteria{
    @ApiModelProperty(value = "页码", example = "1")
    private Integer page = 1;
    @ApiModelProperty(value = "每页数据量", example = "10")
    private Integer size = 10;
}
oying-system/src/main/java/com/oying/modules/message/domain/dto/MesShopMsgRespDTO.java
New file
@@ -0,0 +1,15 @@
package com.oying.modules.message.domain.dto;
import lombok.Data;
import java.time.LocalDateTime;
@Data
public class MesShopMsgRespDTO {
    private Long msgId;
    private String title;
    private String content;
    private LocalDateTime createTime;
    private Long bizId;
    private String bizType;
    private Boolean read;
}
oying-system/src/main/java/com/oying/modules/message/domain/dto/MesShopReplyQueryCriteria.java
New file
@@ -0,0 +1,18 @@
package com.oying.modules.message.domain.dto;
import lombok.Data;
import io.swagger.annotations.ApiModelProperty;
/**
* @author 李萌
* @date 2025-07-25
**/
@Data
public class MesShopReplyQueryCriteria{
    @ApiModelProperty(value = "页码", example = "1")
    private Integer page = 1;
    @ApiModelProperty(value = "每页数据量", example = "10")
    private Integer size = 10;
}
oying-system/src/main/java/com/oying/modules/message/domain/myDto/MesCustomerCommentMsgDTO.java
New file
@@ -0,0 +1,81 @@
package com.oying.modules.message.domain.myDto;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.sql.Timestamp;
@Data
@TableName("mes_customer_comment_msg")
public class MesCustomerCommentMsgDTO {
    @TableId(value = "id", type = IdType.AUTO)
    @ApiModelProperty(value = "主键")
    private Long id;
//    @NotNull
//    @ApiModelProperty(value = "对应 mes_msg_record.id")
//    private Long msgRecordId;
    @NotNull
    @ApiModelProperty(value = "店铺ID")
    private Long shopId;
//一个订单多个评价,一个评价多个留言,一个留言一个回复
//    @NotNull
//    @ApiModelProperty(value = "订单ID")
//    private Long orderId;
    @NotBlank
    @ApiModelProperty(value = "订单编号 冗余")
    private String orderNo;
    @NotBlank
    @ApiModelProperty(value = "买家用户ID")
    private String buyerId;
    @ApiModelProperty(value = "买家昵称 冗余")
    private String buyerName;
//
//    @NotNull
//    @ApiModelProperty(value = "评价ID 冗余")
//    private Long evaluationId;
    @NotNull
    @ApiModelProperty(value = "商户是否已回复 0=未回复 1=已回复")
    private Integer replied;
//    @NotBlank
//    @ApiModelProperty(value = "创建人")
//    private String createBy;
//
//    @NotNull
//    @ApiModelProperty(value = "创建时间")
//    private Timestamp createTime;
//
//    @NotBlank
//    @ApiModelProperty(value = "更新人")
//    private String updateBy;
//
//    @NotNull
//    @ApiModelProperty(value = "更新时间")
//    private Timestamp updateTime;
    @NotNull
    @ApiModelProperty(value = "顾客留言时间(即评价产生时间)")
    private Timestamp commentTime;
    @ApiModelProperty(value = "顾客留言内容(评价原文)")
    private String commentContent;
    @ApiModelProperty(value = "商家回复内容")
    private String replyContent;
//    @ApiModelProperty(value = "外部跳转链接(完整 http/https)")
//    private String extJumpUrl;
//
//    @ApiModelProperty(value = "内部小程序/APP 路由路径")
//    private String intJumpPath;
}
oying-system/src/main/java/com/oying/modules/message/domain/myDto/MesMsgRecordQueryOrderDto.java
New file
@@ -0,0 +1,101 @@
package com.oying.modules.message.domain.myDto;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
@Data
@TableName("mes_msg_record") // 指定对应的表名
public class MesMsgRecordQueryOrderDto {
    @TableId(value = "id", type = IdType.AUTO)
    @ApiModelProperty(value = "主键")
    private Long id;
//    @ApiModelProperty(value = "模板ID 可无")
//    private Integer templateId;
//
//    @NotBlank
//    @ApiModelProperty(value = "接收人ID")
//    private String receiverId;
//
//    @NotNull
//    @ApiModelProperty(value = "1=买家 2=商户 3=骑手")
//    private Integer platform;
//
//    @NotNull
//    @ApiModelProperty(value = "同模板type")
//    private Integer msgType;
//    @NotBlank
//    @ApiModelProperty(value = "最终标题")
//    private String title;
    @NotBlank
    @ApiModelProperty(value = "最终内容")
    private String content;
    //    @ApiModelProperty(value = "业务ID 例如订单ID")
//    private Long bizId;
//
//    @ApiModelProperty(value = "业务类型 ORDER/EVALUATION 等")
//    private String bizType;
    //
//    @NotNull
//    @ApiModelProperty(value = "已读 0=未读 1=已读")
//    private Integer isRead;
//
//    @ApiModelProperty(value = "阅读时间")
//    private Timestamp readTime;
//
//    @ApiModelProperty(value = "扩展字段 存跳转链接等")
//    private String extra;
//
//    @NotBlank
//    @ApiModelProperty(value = "创建人")
//    private String createBy;
//
//    @NotNull
//    @ApiModelProperty(value = "创建时间")
//    private Timestamp createTime;
//
//    @NotBlank
//    @ApiModelProperty(value = "更新人")
//    private String updateBy;
//
//    @NotNull
//    @ApiModelProperty(value = "更新时间")
//    private Timestamp updateTime;
// 新增字段
//    @NotNull
//    @ApiModelProperty(value = "订单ID")
//    private Long orderId;
//    @NotBlank
//    @ApiModelProperty(value = "买家用户ID")
//    private String buyerId;
//
    @NotBlank
    @ApiModelProperty(value = "订单编号 冗余字段")
    private String orderNo;
//
//    @NotNull
//    @ApiModelProperty(value = "店铺ID 冗余字段")
//    private Long shopId;
//
//    @NotBlank
//    @ApiModelProperty(value = "店铺名称 冗余字段")
//    private String shopName;
//
//    @ApiModelProperty(value = "骑手ID")
//    private Long riderId;
//
//    @ApiModelProperty(value = "骑手姓名 冗余字段")
//    private String riderName;
}
oying-system/src/main/java/com/oying/modules/message/domain/myDto/MesMsgRecordQueryPollDto.java
New file
@@ -0,0 +1,76 @@
package com.oying.modules.message.domain.myDto;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.sql.Timestamp;
@Data
@TableName("mes_msg_record") // 指定对应的表名
public class MesMsgRecordQueryPollDto{
    @TableId(value = "id", type = IdType.AUTO)
    @ApiModelProperty(value = "主键")
    private Long id;
//    @ApiModelProperty(value = "模板ID 可无")
//    private Integer templateId;
//
//    @NotBlank
//    @ApiModelProperty(value = "接收人ID")
//    private String receiverId;
//
//    @NotNull
//    @ApiModelProperty(value = "1=买家 2=商户 3=骑手")
//    private Integer platform;
//
//    @NotNull
//    @ApiModelProperty(value = "同模板type")
//    private Integer msgType;
    @NotBlank
    @ApiModelProperty(value = "最终标题")
    private String title;
    @NotBlank
    @ApiModelProperty(value = "最终内容")
    private String content;
//    @ApiModelProperty(value = "业务ID 例如订单ID")
//    private Long bizId;
//
//    @ApiModelProperty(value = "业务类型 ORDER/EVALUATION 等")
//    private String bizType;
//
//    @NotNull
//    @ApiModelProperty(value = "已读 0=未读 1=已读")
//    private Integer isRead;
//
//    @ApiModelProperty(value = "阅读时间")
//    private Timestamp readTime;
//
//    @ApiModelProperty(value = "扩展字段 存跳转链接等")
//    private String extra;
//
//    @NotBlank
//    @ApiModelProperty(value = "创建人")
//    private String createBy;
//
//    @NotNull
//    @ApiModelProperty(value = "创建时间")
//    private Timestamp createTime;
//
//    @NotBlank
//    @ApiModelProperty(value = "更新人")
//    private String updateBy;
//
//    @NotNull
//    @ApiModelProperty(value = "更新时间")
//    private Timestamp updateTime;
}
oying-system/src/main/java/com/oying/modules/message/domain/myDto/MesMsgRecordQuerySystemDto.java
New file
@@ -0,0 +1,76 @@
package com.oying.modules.message.domain.myDto;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.sql.Timestamp;
@Data
@TableName("mes_msg_record") // 指定对应的表名
public class MesMsgRecordQuerySystemDto{
    @TableId(value = "id", type = IdType.AUTO)
    @ApiModelProperty(value = "主键")
    private Long id;
//    @ApiModelProperty(value = "模板ID 可无")
//    private Integer templateId;
//
//    @NotBlank
//    @ApiModelProperty(value = "接收人ID")
//    private String receiverId;
//
//    @NotNull
//    @ApiModelProperty(value = "1=买家 2=商户 3=骑手")
//    private Integer platform;
//
//    @NotNull
//    @ApiModelProperty(value = "同模板type")
//    private Integer msgType;
    @NotBlank
    @ApiModelProperty(value = "最终标题")
    private String title;
    @NotBlank
    @ApiModelProperty(value = "最终内容")
    private String content;
//    @ApiModelProperty(value = "业务ID 例如订单ID")
//    private Long bizId;
//
//    @ApiModelProperty(value = "业务类型 ORDER/EVALUATION 等")
//    private String bizType;
//
//    @NotNull
//    @ApiModelProperty(value = "已读 0=未读 1=已读")
//    private Integer isRead;
//
//    @ApiModelProperty(value = "阅读时间")
//    private Timestamp readTime;
//
//    @ApiModelProperty(value = "扩展字段 存跳转链接等")
//    private String extra;
//
//    @NotBlank
//    @ApiModelProperty(value = "创建人")
//    private String createBy;
//
//    @NotNull
//    @ApiModelProperty(value = "创建时间")
//    private Timestamp createTime;
//
//    @NotBlank
//    @ApiModelProperty(value = "更新人")
//    private String updateBy;
//
//    @NotNull
//    @ApiModelProperty(value = "更新时间")
//    private Timestamp updateTime;
}
oying-system/src/main/java/com/oying/modules/message/domain/myDto/MesOrderEvaluationDto.java
New file
@@ -0,0 +1,54 @@
package com.oying.modules.message.domain.myDto;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.sql.Timestamp;
@Data
public class MesOrderEvaluationDto {
//    @TableId(value = "id", type = IdType.AUTO)
//    @ApiModelProperty(value = "主键")
//    private Long id;
    @NotNull
    @ApiModelProperty(value = "店铺ID 冗余字段")
    private Long shopId;
    @NotBlank
    @ApiModelProperty(value = "店铺名称 冗余字段")
    private String shopName;
    @NotNull
    @ApiModelProperty(value = "店铺服务评分")
    private BigDecimal shopScore;
    @ApiModelProperty(value = "店铺服务评价内容")
    private String shopContent;
//
//    @NotBlank
//    @ApiModelProperty(value = "创建人")
//    private String createBy;
//
//    @NotNull
//    @ApiModelProperty(value = "创建时间")
//    private Timestamp createTime;
//
//    @NotBlank
//    @ApiModelProperty(value = "更新人")
//    private String updateBy;
//
//    @NotNull
//    @ApiModelProperty(value = "更新时间")
//    private Timestamp updateTime;
}
oying-system/src/main/java/com/oying/modules/message/domain/myDto/MesOrderItemEvaluationDto.java
New file
@@ -0,0 +1,78 @@
package com.oying.modules.message.domain;
import com.oying.base.BaseEntity;
import lombok.Data;
import cn.hutool.core.bean.BeanUtil;
import io.swagger.annotations.ApiModelProperty;
import cn.hutool.core.bean.copier.CopyOptions;
import java.sql.Timestamp;
import java.math.BigDecimal;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
/**
 * @description /
 * @author 李萌
 * @date 2025-07-25
 **/
@Data
@TableName("mes_order_item_evaluation")
public class MesOrderItemEvaluationDto  {
    @TableId(value = "id", type = IdType.AUTO)
    @ApiModelProperty(value = "主键")
    private Long id;
    @NotNull
    @ApiModelProperty(value = "对应 mes_order_evaluation.id")
    private Long orderEvalId;
    @NotNull
    @ApiModelProperty(value = "订单明细ID")
    private Long orderItemId;
    @NotNull
    @ApiModelProperty(value = "商品ID")
    private Long goodsId;
    @NotBlank
    @ApiModelProperty(value = "商品名称 冗余")
    private String goodsName;
    @ApiModelProperty(value = "商品主图 冗余")
    private String goodsPic;
    @NotNull
    @ApiModelProperty(value = "商品单项评分")
    private BigDecimal score;
    @ApiModelProperty(value = "评价内容")
    private String content;
    @ApiModelProperty(value = "评价图片JSON 最多5张")
    private String imgs;
//    @NotBlank
//    @ApiModelProperty(value = "创建人")
//    private String createBy;
//
//    @NotNull
//    @ApiModelProperty(value = "创建时间")
//    private Timestamp createTime;
//
//    @NotBlank
//    @ApiModelProperty(value = "更新人")
//    private String updateBy;
//
//    @NotNull
//    @ApiModelProperty(value = "更新时间")
//    private Timestamp updateTime;
    public void copy(MesOrderItemEvaluation source){
        BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
    }
}
oying-system/src/main/java/com/oying/modules/message/domain/myDto/MesRiderEvaluationDto.java
New file
@@ -0,0 +1,50 @@
package com.oying.modules.message.domain.myDto;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.sql.Timestamp;
@Data
public class MesRiderEvaluationDto {
//    @TableId(value = "id", type = IdType.AUTO)
//    @ApiModelProperty(value = "主键")
//    private Long id;
//    @NotNull
//    @ApiModelProperty(value = "订单ID")
//    private Long orderId;
//
//    @NotBlank
//    @ApiModelProperty(value = "订单编号 冗余")
//    private String orderNo;
    @NotNull
    @ApiModelProperty(value = "骑手ID")
    private Long riderId;
    @NotBlank
    @ApiModelProperty(value = "骑手姓名 冗余")
    private String riderName;
    @NotBlank
    @ApiModelProperty(value = "买家用户ID")
    private String buyerId;
    @NotNull
    @ApiModelProperty(value = "骑手服务评分")
    private BigDecimal score;
    @ApiModelProperty(value = "评价内容")
    private String content;
    @ApiModelProperty(value = "评价图片JSON 最多5张")
    private String imgs;
}
oying-system/src/main/java/com/oying/modules/message/mapper/MesAdvertisementMapper.java
New file
@@ -0,0 +1,22 @@
package com.oying.modules.message.mapper;
import com.oying.modules.message.domain.MesAdvertisement;
import com.oying.modules.message.domain.dto.MesAdvertisementQueryCriteria;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
/**
* @author 李萌
* @date 2025-07-25
**/
@Mapper
public interface MesAdvertisementMapper extends BaseMapper<MesAdvertisement> {
    IPage<MesAdvertisement> findAll(@Param("criteria") MesAdvertisementQueryCriteria criteria, Page<Object> page);
    List<MesAdvertisement> findAll(@Param("criteria") MesAdvertisementQueryCriteria criteria);
}
oying-system/src/main/java/com/oying/modules/message/mapper/MesCustomerCommentMsgMapper.java
New file
@@ -0,0 +1,26 @@
package com.oying.modules.message.mapper;
import com.oying.modules.message.domain.MesCustomerCommentMsg;
import com.oying.modules.message.domain.dto.MesCustomerCommentMsgQueryCriteria;
import java.util.List;
import com.oying.modules.message.domain.myDto.MesCustomerCommentMsgDTO;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
/**
* @author 李萌
* @date 2025-07-25
**/
@Mapper
public interface MesCustomerCommentMsgMapper extends BaseMapper<MesCustomerCommentMsg> {
    IPage<MesCustomerCommentMsg> findAll(@Param("criteria") MesCustomerCommentMsgQueryCriteria criteria, Page<Object> page);
    List<MesCustomerCommentMsg> findAll(@Param("criteria") MesCustomerCommentMsgQueryCriteria criteria);
    List<MesCustomerCommentMsgDTO> listCustomerComment(Long shopId);
}
oying-system/src/main/java/com/oying/modules/message/mapper/MesMsgRecordMapper.java
New file
@@ -0,0 +1,39 @@
package com.oying.modules.message.mapper;
import com.oying.modules.message.common.OrderStatusEnum;
import com.oying.modules.message.domain.MesMsgRecord;
import com.oying.modules.message.domain.dto.MesMsgRecordQueryCriteria;
import java.util.List;
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 org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
/**
* @author 李萌
* @date 2025-07-25
**/
@Mapper
public interface MesMsgRecordMapper extends BaseMapper<MesMsgRecord> {
    IPage<MesMsgRecord> findAll(@Param("criteria") MesMsgRecordQueryCriteria criteria, Page<Object> page);
    List<MesMsgRecord> findAll(@Param("criteria") MesMsgRecordQueryCriteria criteria);
    List<MesMsgRecordQueryPollDto> PollMes(Long platform);
    void batchMarkRead(Long platform,List<Long> msgIds);
    IPage<MesMsgRecordQuerySystemDto> queryAllSysNotice(@Param("criteria")MesMsgRecordQueryCriteria criteria, Page<Object> page);
    List<MesMsgRecordQueryOrderDto> queryorder(Long shopId);
//    IPage<MesMsgRecord> findAll(@Param("criteria") MesMsgRecordQueryCriteria criteria, Page<Object> page);
}
oying-system/src/main/java/com/oying/modules/message/mapper/MesMsgTemplateMapper.java
New file
@@ -0,0 +1,22 @@
package com.oying.modules.message.mapper;
import com.oying.modules.message.domain.MesMsgTemplate;
import com.oying.modules.message.domain.dto.MesMsgTemplateQueryCriteria;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
/**
* @author 李萌
* @date 2025-07-25
**/
@Mapper
public interface MesMsgTemplateMapper extends BaseMapper<MesMsgTemplate> {
    IPage<MesMsgTemplate> findAll(@Param("criteria") MesMsgTemplateQueryCriteria criteria, Page<Object> page);
    List<MesMsgTemplate> findAll(@Param("criteria") MesMsgTemplateQueryCriteria criteria);
}
oying-system/src/main/java/com/oying/modules/message/mapper/MesOrderEvaluationMapper.java
New file
@@ -0,0 +1,26 @@
package com.oying.modules.message.mapper;
import com.oying.modules.message.domain.MesOrderEvaluation;
import com.oying.modules.message.domain.dto.MesOrderEvaluationQueryCriteria;
import java.util.List;
import com.oying.modules.message.domain.myDto.MesOrderEvaluationDto;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
/**
* @author 李萌
* @date 2025-07-25
**/
@Mapper
public interface MesOrderEvaluationMapper extends BaseMapper<MesOrderEvaluation> {
    IPage<MesOrderEvaluation> findAll(@Param("criteria") MesOrderEvaluationQueryCriteria criteria, Page<Object> page);
    List<MesOrderEvaluation> findAll(@Param("criteria") MesOrderEvaluationQueryCriteria criteria);
    void addShopEvaluation(MesOrderEvaluationDto resources);
}
oying-system/src/main/java/com/oying/modules/message/mapper/MesOrderItemEvaluationMapper.java
New file
@@ -0,0 +1,25 @@
package com.oying.modules.message.mapper;
import com.oying.modules.message.domain.MesOrderItemEvaluation;
import com.oying.modules.message.domain.MesOrderItemEvaluationDto;
import com.oying.modules.message.domain.dto.MesOrderItemEvaluationQueryCriteria;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
/**
* @author 李萌
* @date 2025-07-25
**/
@Mapper
public interface MesOrderItemEvaluationMapper extends BaseMapper<MesOrderItemEvaluation> {
    IPage<MesOrderItemEvaluation> findAll(@Param("criteria") MesOrderItemEvaluationQueryCriteria criteria, Page<Object> page);
    List<MesOrderItemEvaluation> findAll(@Param("criteria") MesOrderItemEvaluationQueryCriteria criteria);
    void addGoodsEvaluation(MesOrderItemEvaluationDto resources);
}
oying-system/src/main/java/com/oying/modules/message/mapper/MesRiderEvaluationMapper.java
New file
@@ -0,0 +1,26 @@
package com.oying.modules.message.mapper;
import com.oying.modules.message.domain.MesRiderEvaluation;
import com.oying.modules.message.domain.dto.MesRiderEvaluationQueryCriteria;
import java.util.List;
import com.oying.modules.message.domain.myDto.MesRiderEvaluationDto;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
/**
* @author 李萌
* @date 2025-07-25
**/
@Mapper
public interface MesRiderEvaluationMapper extends BaseMapper<MesRiderEvaluation> {
    IPage<MesRiderEvaluation> findAll(@Param("criteria") MesRiderEvaluationQueryCriteria criteria, Page<Object> page);
    List<MesRiderEvaluation> findAll(@Param("criteria") MesRiderEvaluationQueryCriteria criteria);
    void addRiderEvaluation(MesRiderEvaluationDto resources);
}
oying-system/src/main/java/com/oying/modules/message/mapper/MesShopReplyMapper.java
New file
@@ -0,0 +1,22 @@
package com.oying.modules.message.mapper;
import com.oying.modules.message.domain.MesShopReply;
import com.oying.modules.message.domain.dto.MesShopReplyQueryCriteria;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
/**
* @author 李萌
* @date 2025-07-25
**/
@Mapper
public interface MesShopReplyMapper extends BaseMapper<MesShopReply> {
    IPage<MesShopReply> findAll(@Param("criteria") MesShopReplyQueryCriteria criteria, Page<Object> page);
    List<MesShopReply> findAll(@Param("criteria") MesShopReplyQueryCriteria criteria);
}
oying-system/src/main/java/com/oying/modules/message/rest/MesAdvertisementController.java
New file
@@ -0,0 +1,73 @@
package com.oying.modules.message.rest;
import com.oying.annotation.Log;
import com.oying.modules.message.domain.MesAdvertisement;
import com.oying.modules.message.service.MesAdvertisementService;
import com.oying.modules.message.domain.dto.MesAdvertisementQueryCriteria;
import lombok.RequiredArgsConstructor;
import java.util.List;
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
**/
@RestController
@RequiredArgsConstructor
@Api(tags = "消息")
@RequestMapping("/api/mesAdvertisement")
public class MesAdvertisementController {
    private final MesAdvertisementService mesAdvertisementService;
    @ApiOperation("导出数据")
    @GetMapping(value = "/download")
    @PreAuthorize("@el.check('mesAdvertisement:list')")
    public void exportMesAdvertisement(HttpServletResponse response, MesAdvertisementQueryCriteria criteria) throws IOException {
        mesAdvertisementService.download(mesAdvertisementService.queryAll(criteria), response);
    }
    @GetMapping
    @ApiOperation("查询消息")
    @PreAuthorize("@el.check('mesAdvertisement:list')")
    public ResponseEntity<PageResult<MesAdvertisement>> queryMesAdvertisement(MesAdvertisementQueryCriteria criteria){
        Page<Object> page = new Page<>(criteria.getPage(), criteria.getSize());
        return new ResponseEntity<>(mesAdvertisementService.queryAll(criteria,page),HttpStatus.OK);
    }
    @PostMapping
    @Log("新增消息")
    @ApiOperation("新增消息")
    @PreAuthorize("@el.check('mesAdvertisement:add')")
    public ResponseEntity<Object> createMesAdvertisement(@Validated @RequestBody MesAdvertisement resources){
        mesAdvertisementService.create(resources);
        return new ResponseEntity<>(HttpStatus.CREATED);
    }
    @PutMapping
    @Log("修改消息")
    @ApiOperation("修改消息")
    @PreAuthorize("@el.check('mesAdvertisement:edit')")
    public ResponseEntity<Object> updateMesAdvertisement(@Validated @RequestBody MesAdvertisement resources){
        mesAdvertisementService.update(resources);
        return new ResponseEntity<>(HttpStatus.NO_CONTENT);
    }
    @DeleteMapping
    @Log("删除消息")
    @ApiOperation("删除消息")
    @PreAuthorize("@el.check('mesAdvertisement:del')")
    public ResponseEntity<Object> deleteMesAdvertisement(@ApiParam(value = "传ID数组[]") @RequestBody List<Long> ids) {
        mesAdvertisementService.deleteAll(ids);
        return new ResponseEntity<>(HttpStatus.OK);
    }
}
oying-system/src/main/java/com/oying/modules/message/rest/MesCustomerCommentMsgController.java
New file
@@ -0,0 +1,90 @@
package com.oying.modules.message.rest;
import com.oying.annotation.Log;
import com.oying.modules.message.domain.MesCustomerCommentMsg;
import com.oying.modules.message.domain.dto.MesShopMsgRespDTO;
import com.oying.modules.message.domain.myDto.MesCustomerCommentMsgDTO;
import com.oying.modules.message.service.MesCustomerCommentMsgService;
import com.oying.modules.message.domain.dto.MesCustomerCommentMsgQueryCriteria;
import com.oying.utils.R;
import lombok.RequiredArgsConstructor;
import java.util.List;
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
**/
@RestController
@RequiredArgsConstructor
@Api(tags = "消息")
@RequestMapping("/api/mesCustomerCommentMsg")
public class MesCustomerCommentMsgController {
    private final MesCustomerCommentMsgService mesCustomerCommentMsgService;
    @ApiOperation("导出数据")
    @GetMapping(value = "/download")
    @PreAuthorize("@el.check('mesCustomerCommentMsg:list')")
    public void exportMesCustomerCommentMsg(HttpServletResponse response, MesCustomerCommentMsgQueryCriteria criteria) throws IOException {
        mesCustomerCommentMsgService.download(mesCustomerCommentMsgService.queryAll(criteria), response);
    }
    @GetMapping
    @ApiOperation("查询消息")
    @PreAuthorize("@el.check('mesCustomerCommentMsg:list')")
    public ResponseEntity<PageResult<MesCustomerCommentMsg>> queryMesCustomerCommentMsg(MesCustomerCommentMsgQueryCriteria criteria){
        Page<Object> page = new Page<>(criteria.getPage(), criteria.getSize());
        return new ResponseEntity<>(mesCustomerCommentMsgService.queryAll(criteria,page),HttpStatus.OK);
    }
    @PostMapping
    @Log("新增消息")
    @ApiOperation("新增消息")
    @PreAuthorize("@el.check('mesCustomerCommentMsg:add')")
    public ResponseEntity<Object> createMesCustomerCommentMsg(@Validated @RequestBody MesCustomerCommentMsg resources){
        mesCustomerCommentMsgService.create(resources);
        return new ResponseEntity<>(HttpStatus.CREATED);
    }
    @PutMapping
    @Log("修改消息")
    @ApiOperation("修改消息")
    @PreAuthorize("@el.check('mesCustomerCommentMsg:edit')")
    public ResponseEntity<Object> updateMesCustomerCommentMsg(@Validated @RequestBody MesCustomerCommentMsg resources){
        mesCustomerCommentMsgService.update(resources);
        return new ResponseEntity<>(HttpStatus.NO_CONTENT);
    }
    @DeleteMapping
    @Log("删除消息")
    @ApiOperation("删除消息")
    @PreAuthorize("@el.check('mesCustomerCommentMsg:del')")
    public ResponseEntity<Object> deleteMesCustomerCommentMsg(@ApiParam(value = "传ID数组[]") @RequestBody List<Long> ids) {
        mesCustomerCommentMsgService.deleteAll(ids);
        return new ResponseEntity<>(HttpStatus.OK);
    }
    /* 5. 用店铺id 查询分页顾客留言 */
    @GetMapping("/customerComment")
    @ApiOperation("list查询顾客留言")
    public R<List<MesCustomerCommentMsgDTO>> customerComment(
            @RequestParam Long shopId) {
        try {
            List<MesCustomerCommentMsgDTO> res=mesCustomerCommentMsgService.listCustomerComment(shopId);
            return R.success(res);
        } catch (Exception e) {
            return R.fail(e.getMessage());
        }
    }
}
oying-system/src/main/java/com/oying/modules/message/rest/MesMsgRecordController.java
New file
@@ -0,0 +1,172 @@
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<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=骑手"
    @GetMapping("/poll")
    @ApiOperation("查询轮询消息 1(买家)、2(商户)、3(骑手)")
    @PreAuthorize("@el.check('mesMsgRecord:list')")
    public R<List<MesMsgRecordQueryPollDto>> 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<MesMsgRecordQueryPollDto> mes=mesMsgRecordService.PollMes(platform);
            return R.success(mes);
        } catch (Exception e) {
            log.error("查询轮询消息失败:",e);
            return R.fail("查询轮询消息失败");
        }
    }
//    /* 2. 批量确认收到消息 */
//    @PutMapping("/ack/{msgId}")
//    @ApiOperation("确认收到消息")
//    public R<Void> ack(@PathVariable Long msgId) {
////        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) {
        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<PageResult<MesMsgRecordQuerySystemDto>> sysNotice(
            MesMsgRecordQueryCriteria criteria) {
        Page<Object> page = new Page<>(criteria.getPage(), criteria.getSize());
        try {
            PageResult<MesMsgRecordQuerySystemDto> 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<List<MesMsgRecordQueryOrderDto>> order(@PathVariable 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 获取订单消息失败");
        }
    }
}
oying-system/src/main/java/com/oying/modules/message/rest/MesMsgTemplateController.java
New file
@@ -0,0 +1,73 @@
package com.oying.modules.message.rest;
import com.oying.annotation.Log;
import com.oying.modules.message.domain.MesMsgTemplate;
import com.oying.modules.message.service.MesMsgTemplateService;
import com.oying.modules.message.domain.dto.MesMsgTemplateQueryCriteria;
import lombok.RequiredArgsConstructor;
import java.util.List;
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
**/
@RestController
@RequiredArgsConstructor
@Api(tags = "消息")
@RequestMapping("/api/mesMsgTemplate")
public class MesMsgTemplateController {
    private final MesMsgTemplateService mesMsgTemplateService;
    @ApiOperation("导出数据")
    @GetMapping(value = "/download")
    @PreAuthorize("@el.check('mesMsgTemplate:list')")
    public void exportMesMsgTemplate(HttpServletResponse response, MesMsgTemplateQueryCriteria criteria) throws IOException {
        mesMsgTemplateService.download(mesMsgTemplateService.queryAll(criteria), response);
    }
    @GetMapping
    @ApiOperation("查询消息")
    @PreAuthorize("@el.check('mesMsgTemplate:list')")
    public ResponseEntity<PageResult<MesMsgTemplate>> queryMesMsgTemplate(MesMsgTemplateQueryCriteria criteria){
        Page<Object> page = new Page<>(criteria.getPage(), criteria.getSize());
        return new ResponseEntity<>(mesMsgTemplateService.queryAll(criteria,page),HttpStatus.OK);
    }
    @PostMapping
    @Log("新增消息")
    @ApiOperation("新增消息")
    @PreAuthorize("@el.check('mesMsgTemplate:add')")
    public ResponseEntity<Object> createMesMsgTemplate(@Validated @RequestBody MesMsgTemplate resources){
        mesMsgTemplateService.create(resources);
        return new ResponseEntity<>(HttpStatus.CREATED);
    }
    @PutMapping
    @Log("修改消息")
    @ApiOperation("修改消息")
    @PreAuthorize("@el.check('mesMsgTemplate:edit')")
    public ResponseEntity<Object> updateMesMsgTemplate(@Validated @RequestBody MesMsgTemplate resources){
        mesMsgTemplateService.update(resources);
        return new ResponseEntity<>(HttpStatus.NO_CONTENT);
    }
    @DeleteMapping
    @Log("删除消息")
    @ApiOperation("删除消息")
    @PreAuthorize("@el.check('mesMsgTemplate:del')")
    public ResponseEntity<Object> deleteMesMsgTemplate(@ApiParam(value = "传ID数组[]") @RequestBody List<Integer> ids) {
        mesMsgTemplateService.deleteAll(ids);
        return new ResponseEntity<>(HttpStatus.OK);
    }
}
oying-system/src/main/java/com/oying/modules/message/rest/MesOrderEvaluationController.java
New file
@@ -0,0 +1,90 @@
package com.oying.modules.message.rest;
import com.oying.annotation.Log;
import com.oying.modules.message.domain.MesOrderEvaluation;
import com.oying.modules.message.domain.MesOrderItemEvaluationDto;
import com.oying.modules.message.domain.myDto.MesOrderEvaluationDto;
import com.oying.modules.message.service.MesOrderEvaluationService;
import com.oying.modules.message.domain.dto.MesOrderEvaluationQueryCriteria;
import com.oying.utils.R;
import lombok.RequiredArgsConstructor;
import java.util.List;
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
**/
@RestController
@RequiredArgsConstructor
@Api(tags = "消息")
@RequestMapping("/api/mesOrderEvaluation")
public class MesOrderEvaluationController {
    private final MesOrderEvaluationService mesOrderEvaluationService;
    @ApiOperation("导出数据")
    @GetMapping(value = "/download")
    @PreAuthorize("@el.check('mesOrderEvaluation:list')")
    public void exportMesOrderEvaluation(HttpServletResponse response, MesOrderEvaluationQueryCriteria criteria) throws IOException {
        mesOrderEvaluationService.download(mesOrderEvaluationService.queryAll(criteria), response);
    }
    @GetMapping
    @ApiOperation("查询消息")
    @PreAuthorize("@el.check('mesOrderEvaluation:list')")
    public ResponseEntity<PageResult<MesOrderEvaluation>> queryMesOrderEvaluation(MesOrderEvaluationQueryCriteria criteria){
        Page<Object> page = new Page<>(criteria.getPage(), criteria.getSize());
        return new ResponseEntity<>(mesOrderEvaluationService.queryAll(criteria,page),HttpStatus.OK);
    }
    @PostMapping
    @Log("新增消息")
    @ApiOperation("新增消息")
    @PreAuthorize("@el.check('mesOrderEvaluation:add')")
    public ResponseEntity<Object> createMesOrderEvaluation(@Validated @RequestBody MesOrderEvaluation resources){
        mesOrderEvaluationService.create(resources);
        return new ResponseEntity<>(HttpStatus.CREATED);
    }
    @PutMapping
    @Log("修改消息")
    @ApiOperation("修改消息")
    @PreAuthorize("@el.check('mesOrderEvaluation:edit')")
    public ResponseEntity<Object> updateMesOrderEvaluation(@Validated @RequestBody MesOrderEvaluation resources){
        mesOrderEvaluationService.update(resources);
        return new ResponseEntity<>(HttpStatus.NO_CONTENT);
    }
    @DeleteMapping
    @Log("删除消息")
    @ApiOperation("删除消息")
    @PreAuthorize("@el.check('mesOrderEvaluation:del')")
    public ResponseEntity<Object> deleteMesOrderEvaluation(@ApiParam(value = "传ID数组[]") @RequestBody List<Long> ids) {
        mesOrderEvaluationService.deleteAll(ids);
        return new ResponseEntity<>(HttpStatus.OK);
    }
    //对一个店铺评价 + 打分
    //order_eval_id, order_item_id, goods_id, goods_name, goods_pic, score, content, imgs, buyer_id
    @PostMapping("/addShopEvaluation")
    @ApiOperation("对一个商品评价 + 打分")
    public R<Object> addGoodsEvaluation(@RequestBody MesOrderEvaluationDto resources){
        try {
            mesOrderEvaluationService.addShopEvaluation(resources);
            return R.success();
        } catch (Exception e) {
            return R.fail(e.getMessage());
        }
    }
}
oying-system/src/main/java/com/oying/modules/message/rest/MesOrderItemEvaluationController.java
New file
@@ -0,0 +1,90 @@
package com.oying.modules.message.rest;
import com.oying.annotation.Log;
import com.oying.modules.message.domain.MesOrderItemEvaluation;
import com.oying.modules.message.domain.MesOrderItemEvaluationDto;
import com.oying.modules.message.service.MesOrderItemEvaluationService;
import com.oying.modules.message.domain.dto.MesOrderItemEvaluationQueryCriteria;
import com.oying.utils.R;
import lombok.RequiredArgsConstructor;
import java.util.List;
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
**/
@RestController
@RequiredArgsConstructor
@Api(tags = "消息")
@RequestMapping("/api/mesOrderItemEvaluation")
public class MesOrderItemEvaluationController {
    private final MesOrderItemEvaluationService mesOrderItemEvaluationService;
    @ApiOperation("导出数据")
    @GetMapping(value = "/download")
    @PreAuthorize("@el.check('mesOrderItemEvaluation:list')")
    public void exportMesOrderItemEvaluation(HttpServletResponse response, MesOrderItemEvaluationQueryCriteria criteria) throws IOException {
        mesOrderItemEvaluationService.download(mesOrderItemEvaluationService.queryAll(criteria), response);
    }
    @GetMapping
    @ApiOperation("查询消息")
    @PreAuthorize("@el.check('mesOrderItemEvaluation:list')")
    public ResponseEntity<PageResult<MesOrderItemEvaluation>> queryMesOrderItemEvaluation(MesOrderItemEvaluationQueryCriteria criteria){
        Page<Object> page = new Page<>(criteria.getPage(), criteria.getSize());
        return new ResponseEntity<>(mesOrderItemEvaluationService.queryAll(criteria,page),HttpStatus.OK);
    }
    @PostMapping
    @Log("新增消息")
    @ApiOperation("新增消息")
    @PreAuthorize("@el.check('mesOrderItemEvaluation:add')")
    public ResponseEntity<Object> createMesOrderItemEvaluation(@Validated @RequestBody MesOrderItemEvaluation resources){
        mesOrderItemEvaluationService.create(resources);
        return new ResponseEntity<>(HttpStatus.CREATED);
    }
    @PutMapping
    @Log("修改消息")
    @ApiOperation("修改消息")
    @PreAuthorize("@el.check('mesOrderItemEvaluation:edit')")
    public ResponseEntity<Object> updateMesOrderItemEvaluation(@Validated @RequestBody MesOrderItemEvaluation resources){
        mesOrderItemEvaluationService.update(resources);
        return new ResponseEntity<>(HttpStatus.NO_CONTENT);
    }
    @DeleteMapping
    @Log("删除消息")
    @ApiOperation("删除消息")
    @PreAuthorize("@el.check('mesOrderItemEvaluation:del')")
    public ResponseEntity<Object> deleteMesOrderItemEvaluation(@ApiParam(value = "传ID数组[]") @RequestBody List<Long> ids) {
        mesOrderItemEvaluationService.deleteAll(ids);
        return new ResponseEntity<>(HttpStatus.OK);
    }
    //对一个商品评价 + 打分
    //order_eval_id, order_item_id, goods_id, goods_name, goods_pic, score, content, imgs, buyer_id
    @PostMapping("/addGoodsEvaluation")
    @ApiOperation("对一个商品评价 + 打分")
    public R<Object> addGoodsEvaluation(@RequestBody MesOrderItemEvaluationDto resources){
        try {
            mesOrderItemEvaluationService.addGoodsEvaluation(resources);
            return R.success();
        } catch (Exception e) {
            return R.fail(e.getMessage());
        }
    }
}
oying-system/src/main/java/com/oying/modules/message/rest/MesRiderEvaluationController.java
New file
@@ -0,0 +1,90 @@
package com.oying.modules.message.rest;
import com.oying.annotation.Log;
import com.oying.modules.message.domain.MesOrderItemEvaluationDto;
import com.oying.modules.message.domain.MesRiderEvaluation;
import com.oying.modules.message.domain.myDto.MesRiderEvaluationDto;
import com.oying.modules.message.service.MesRiderEvaluationService;
import com.oying.modules.message.domain.dto.MesRiderEvaluationQueryCriteria;
import com.oying.utils.R;
import lombok.RequiredArgsConstructor;
import java.util.List;
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
**/
@RestController
@RequiredArgsConstructor
@Api(tags = "消息")
@RequestMapping("/api/mesRiderEvaluation")
public class MesRiderEvaluationController {
    private final MesRiderEvaluationService mesRiderEvaluationService;
    @ApiOperation("导出数据")
    @GetMapping(value = "/download")
    @PreAuthorize("@el.check('mesRiderEvaluation:list')")
    public void exportMesRiderEvaluation(HttpServletResponse response, MesRiderEvaluationQueryCriteria criteria) throws IOException {
        mesRiderEvaluationService.download(mesRiderEvaluationService.queryAll(criteria), response);
    }
    @GetMapping
    @ApiOperation("查询消息")
    @PreAuthorize("@el.check('mesRiderEvaluation:list')")
    public ResponseEntity<PageResult<MesRiderEvaluation>> queryMesRiderEvaluation(MesRiderEvaluationQueryCriteria criteria){
        Page<Object> page = new Page<>(criteria.getPage(), criteria.getSize());
        return new ResponseEntity<>(mesRiderEvaluationService.queryAll(criteria,page),HttpStatus.OK);
    }
    @PostMapping
    @Log("新增消息")
    @ApiOperation("新增消息")
    @PreAuthorize("@el.check('mesRiderEvaluation:add')")
    public ResponseEntity<Object> createMesRiderEvaluation(@Validated @RequestBody MesRiderEvaluation resources){
        mesRiderEvaluationService.create(resources);
        return new ResponseEntity<>(HttpStatus.CREATED);
    }
    @PutMapping
    @Log("修改消息")
    @ApiOperation("修改消息")
    @PreAuthorize("@el.check('mesRiderEvaluation:edit')")
    public ResponseEntity<Object> updateMesRiderEvaluation(@Validated @RequestBody MesRiderEvaluation resources){
        mesRiderEvaluationService.update(resources);
        return new ResponseEntity<>(HttpStatus.NO_CONTENT);
    }
    @DeleteMapping
    @Log("删除消息")
    @ApiOperation("删除消息")
    @PreAuthorize("@el.check('mesRiderEvaluation:del')")
    public ResponseEntity<Object> deleteMesRiderEvaluation(@ApiParam(value = "传ID数组[]") @RequestBody List<Long> ids) {
        mesRiderEvaluationService.deleteAll(ids);
        return new ResponseEntity<>(HttpStatus.OK);
    }
    //对一个骑手评价 + 打分
    //
    @PostMapping("/addRiderEvaluation")
    @ApiOperation("对一个骑手评价 + 打分")
    public R<Object> addGoodsEvaluation(@RequestBody MesRiderEvaluationDto resources){
        try {
            mesRiderEvaluationService.addRiderEvaluation(resources);
            return R.success();
        } catch (Exception e) {
            return R.fail(e.getMessage());
        }
    }
}
oying-system/src/main/java/com/oying/modules/message/rest/MesShopReplyController.java
New file
@@ -0,0 +1,73 @@
package com.oying.modules.message.rest;
import com.oying.annotation.Log;
import com.oying.modules.message.domain.MesShopReply;
import com.oying.modules.message.service.MesShopReplyService;
import com.oying.modules.message.domain.dto.MesShopReplyQueryCriteria;
import lombok.RequiredArgsConstructor;
import java.util.List;
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
**/
@RestController
@RequiredArgsConstructor
@Api(tags = "消息")
@RequestMapping("/api/mesShopReply")
public class MesShopReplyController {
    private final MesShopReplyService mesShopReplyService;
    @ApiOperation("导出数据")
    @GetMapping(value = "/download")
    @PreAuthorize("@el.check('mesShopReply:list')")
    public void exportMesShopReply(HttpServletResponse response, MesShopReplyQueryCriteria criteria) throws IOException {
        mesShopReplyService.download(mesShopReplyService.queryAll(criteria), response);
    }
    @GetMapping
    @ApiOperation("查询消息")
    @PreAuthorize("@el.check('mesShopReply:list')")
    public ResponseEntity<PageResult<MesShopReply>> queryMesShopReply(MesShopReplyQueryCriteria criteria){
        Page<Object> page = new Page<>(criteria.getPage(), criteria.getSize());
        return new ResponseEntity<>(mesShopReplyService.queryAll(criteria,page),HttpStatus.OK);
    }
    @PostMapping
    @Log("新增消息")
    @ApiOperation("新增消息")
    @PreAuthorize("@el.check('mesShopReply:add')")
    public ResponseEntity<Object> createMesShopReply(@Validated @RequestBody MesShopReply resources){
        mesShopReplyService.create(resources);
        return new ResponseEntity<>(HttpStatus.CREATED);
    }
    @PutMapping
    @Log("修改消息")
    @ApiOperation("修改消息")
    @PreAuthorize("@el.check('mesShopReply:edit')")
    public ResponseEntity<Object> updateMesShopReply(@Validated @RequestBody MesShopReply resources){
        mesShopReplyService.update(resources);
        return new ResponseEntity<>(HttpStatus.NO_CONTENT);
    }
    @DeleteMapping
    @Log("删除消息")
    @ApiOperation("删除消息")
    @PreAuthorize("@el.check('mesShopReply:del')")
    public ResponseEntity<Object> deleteMesShopReply(@ApiParam(value = "传ID数组[]") @RequestBody List<Long> ids) {
        mesShopReplyService.deleteAll(ids);
        return new ResponseEntity<>(HttpStatus.OK);
    }
}
oying-system/src/main/java/com/oying/modules/message/service/MesAdvertisementService.java
New file
@@ -0,0 +1,60 @@
package com.oying.modules.message.service;
import com.oying.modules.message.domain.MesAdvertisement;
import com.oying.modules.message.domain.dto.MesAdvertisementQueryCriteria;
import java.util.Map;
import java.util.List;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.oying.utils.PageResult;
/**
* @description 服务接口
* @author 李萌
* @date 2025-07-25
**/
public interface MesAdvertisementService extends IService<MesAdvertisement> {
    /**
    * 查询数据分页
    * @param criteria 条件
    * @param page 分页参数
    * @return PageResult
    */
    PageResult<MesAdvertisement> queryAll(MesAdvertisementQueryCriteria criteria, Page<Object> page);
    /**
    * 查询所有数据不分页
    * @param criteria 条件参数
    * @return List<MesAdvertisementDto>
    */
    List<MesAdvertisement> queryAll(MesAdvertisementQueryCriteria criteria);
    /**
    * 创建
    * @param resources /
    */
    void create(MesAdvertisement resources);
    /**
    * 编辑
    * @param resources /
    */
    void update(MesAdvertisement resources);
    /**
    * 多选删除
    * @param ids /
    */
    void deleteAll(List<Long> ids);
    /**
    * 导出数据
    * @param all 待导出的数据
    * @param response /
    * @throws IOException /
    */
    void download(List<MesAdvertisement> all, HttpServletResponse response) throws IOException;
}
oying-system/src/main/java/com/oying/modules/message/service/MesCustomerCommentMsgService.java
New file
@@ -0,0 +1,63 @@
package com.oying.modules.message.service;
import com.oying.modules.message.domain.MesCustomerCommentMsg;
import com.oying.modules.message.domain.dto.MesCustomerCommentMsgQueryCriteria;
import java.util.Map;
import java.util.List;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.oying.modules.message.domain.myDto.MesCustomerCommentMsgDTO;
import com.oying.utils.PageResult;
/**
* @description 服务接口
* @author 李萌
* @date 2025-07-25
**/
public interface MesCustomerCommentMsgService extends IService<MesCustomerCommentMsg> {
    /**
    * 查询数据分页
    * @param criteria 条件
    * @param page 分页参数
    * @return PageResult
    */
    PageResult<MesCustomerCommentMsg> queryAll(MesCustomerCommentMsgQueryCriteria criteria, Page<Object> page);
    /**
    * 查询所有数据不分页
    * @param criteria 条件参数
    * @return List<MesCustomerCommentMsgDto>
    */
    List<MesCustomerCommentMsg> queryAll(MesCustomerCommentMsgQueryCriteria criteria);
    /**
    * 创建
    * @param resources /
    */
    void create(MesCustomerCommentMsg resources);
    /**
    * 编辑
    * @param resources /
    */
    void update(MesCustomerCommentMsg resources);
    /**
    * 多选删除
    * @param ids /
    */
    void deleteAll(List<Long> ids);
    /**
    * 导出数据
    * @param all 待导出的数据
    * @param response /
    * @throws IOException /
    */
    void download(List<MesCustomerCommentMsg> all, HttpServletResponse response) throws IOException;
    List<MesCustomerCommentMsgDTO> listCustomerComment(Long shopId);
}
oying-system/src/main/java/com/oying/modules/message/service/MesMsgRecordService.java
New file
@@ -0,0 +1,78 @@
package com.oying.modules.message.service;
import com.oying.modules.message.common.OrderStatusEnum;
import com.oying.modules.message.domain.MesMsgRecord;
import com.oying.modules.message.domain.dto.MesMsgRecordQueryCriteria;
import java.util.Map;
import java.util.List;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
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.utils.PageResult;
/**
* @description 服务接口
* @author 李萌
* @date 2025-07-25
**/
public interface MesMsgRecordService extends IService<MesMsgRecord> {
    /**
    * 查询数据分页
    * @param criteria 条件
    * @param page 分页参数
    * @return PageResult
    */
    PageResult<MesMsgRecord> queryAll(MesMsgRecordQueryCriteria criteria, Page<Object> page);
    /**
    * 查询所有数据不分页
    * @param criteria 条件参数
    * @return List<MesMsgRecordDto>
    */
    List<MesMsgRecord> queryAll(MesMsgRecordQueryCriteria criteria);
    /**
    * 创建
    * @param resources /
    */
    void create(MesMsgRecord resources);
    /**
    * 编辑
    * @param resources /
    */
    void update(MesMsgRecord resources);
    /**
    * 多选删除
    * @param ids /
    */
    void deleteAll(List<Long> ids);
    /**
    * 导出数据
    * @param all 待导出的数据
    * @param response /
    * @throws IOException /
    */
    void download(List<MesMsgRecord> all, HttpServletResponse response) throws IOException;
    List<MesMsgRecordQueryPollDto> PollMes(Long platform);
    void batchMarkRead(Long platform,List<Long> msgIds);
    PageResult<MesMsgRecordQuerySystemDto> queryAllSysNotice(MesMsgRecordQueryCriteria criteria, Page<Object> page);
    List<MesMsgRecordQueryOrderDto> queryorder(Long shopId);
    //插入订单消息
//    入参     订单编号 订单状态(内容)  店铺id
    void insertOrderMsg(String orderNo, OrderStatusEnum content, Long shopId);
}
oying-system/src/main/java/com/oying/modules/message/service/MesMsgTemplateService.java
New file
@@ -0,0 +1,60 @@
package com.oying.modules.message.service;
import com.oying.modules.message.domain.MesMsgTemplate;
import com.oying.modules.message.domain.dto.MesMsgTemplateQueryCriteria;
import java.util.Map;
import java.util.List;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.oying.utils.PageResult;
/**
* @description 服务接口
* @author 李萌
* @date 2025-07-25
**/
public interface MesMsgTemplateService extends IService<MesMsgTemplate> {
    /**
    * 查询数据分页
    * @param criteria 条件
    * @param page 分页参数
    * @return PageResult
    */
    PageResult<MesMsgTemplate> queryAll(MesMsgTemplateQueryCriteria criteria, Page<Object> page);
    /**
    * 查询所有数据不分页
    * @param criteria 条件参数
    * @return List<MesMsgTemplateDto>
    */
    List<MesMsgTemplate> queryAll(MesMsgTemplateQueryCriteria criteria);
    /**
    * 创建
    * @param resources /
    */
    void create(MesMsgTemplate resources);
    /**
    * 编辑
    * @param resources /
    */
    void update(MesMsgTemplate resources);
    /**
    * 多选删除
    * @param ids /
    */
    void deleteAll(List<Integer> ids);
    /**
    * 导出数据
    * @param all 待导出的数据
    * @param response /
    * @throws IOException /
    */
    void download(List<MesMsgTemplate> all, HttpServletResponse response) throws IOException;
}
oying-system/src/main/java/com/oying/modules/message/service/MesOrderEvaluationService.java
New file
@@ -0,0 +1,63 @@
package com.oying.modules.message.service;
import com.oying.modules.message.domain.MesOrderEvaluation;
import com.oying.modules.message.domain.dto.MesOrderEvaluationQueryCriteria;
import java.util.Map;
import java.util.List;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.oying.modules.message.domain.myDto.MesOrderEvaluationDto;
import com.oying.utils.PageResult;
/**
* @description 服务接口
* @author 李萌
* @date 2025-07-25
**/
public interface MesOrderEvaluationService extends IService<MesOrderEvaluation> {
    /**
    * 查询数据分页
    * @param criteria 条件
    * @param page 分页参数
    * @return PageResult
    */
    PageResult<MesOrderEvaluation> queryAll(MesOrderEvaluationQueryCriteria criteria, Page<Object> page);
    /**
    * 查询所有数据不分页
    * @param criteria 条件参数
    * @return List<MesOrderEvaluationDto>
    */
    List<MesOrderEvaluation> queryAll(MesOrderEvaluationQueryCriteria criteria);
    /**
    * 创建
    * @param resources /
    */
    void create(MesOrderEvaluation resources);
    /**
    * 编辑
    * @param resources /
    */
    void update(MesOrderEvaluation resources);
    /**
    * 多选删除
    * @param ids /
    */
    void deleteAll(List<Long> ids);
    /**
    * 导出数据
    * @param all 待导出的数据
    * @param response /
    * @throws IOException /
    */
    void download(List<MesOrderEvaluation> all, HttpServletResponse response) throws IOException;
    void addShopEvaluation(MesOrderEvaluationDto resources);
}
oying-system/src/main/java/com/oying/modules/message/service/MesOrderItemEvaluationService.java
New file
@@ -0,0 +1,63 @@
package com.oying.modules.message.service;
import com.oying.modules.message.domain.MesOrderItemEvaluation;
import com.oying.modules.message.domain.MesOrderItemEvaluationDto;
import com.oying.modules.message.domain.dto.MesOrderItemEvaluationQueryCriteria;
import java.util.Map;
import java.util.List;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.oying.utils.PageResult;
/**
* @description 服务接口
* @author 李萌
* @date 2025-07-25
**/
public interface MesOrderItemEvaluationService extends IService<MesOrderItemEvaluation> {
    /**
    * 查询数据分页
    * @param criteria 条件
    * @param page 分页参数
    * @return PageResult
    */
    PageResult<MesOrderItemEvaluation> queryAll(MesOrderItemEvaluationQueryCriteria criteria, Page<Object> page);
    /**
    * 查询所有数据不分页
    * @param criteria 条件参数
    * @return List<MesOrderItemEvaluationDto>
    */
    List<MesOrderItemEvaluation> queryAll(MesOrderItemEvaluationQueryCriteria criteria);
    /**
    * 创建
    * @param resources /
    */
    void create(MesOrderItemEvaluation resources);
    /**
    * 编辑
    * @param resources /
    */
    void update(MesOrderItemEvaluation resources);
    /**
    * 多选删除
    * @param ids /
    */
    void deleteAll(List<Long> ids);
    /**
    * 导出数据
    * @param all 待导出的数据
    * @param response /
    * @throws IOException /
    */
    void download(List<MesOrderItemEvaluation> all, HttpServletResponse response) throws IOException;
    void addGoodsEvaluation(MesOrderItemEvaluationDto resources);
}
oying-system/src/main/java/com/oying/modules/message/service/MesRiderEvaluationService.java
New file
@@ -0,0 +1,63 @@
package com.oying.modules.message.service;
import com.oying.modules.message.domain.MesRiderEvaluation;
import com.oying.modules.message.domain.dto.MesRiderEvaluationQueryCriteria;
import java.util.Map;
import java.util.List;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.oying.modules.message.domain.myDto.MesRiderEvaluationDto;
import com.oying.utils.PageResult;
/**
* @description 服务接口
* @author 李萌
* @date 2025-07-25
**/
public interface MesRiderEvaluationService extends IService<MesRiderEvaluation> {
    /**
    * 查询数据分页
    * @param criteria 条件
    * @param page 分页参数
    * @return PageResult
    */
    PageResult<MesRiderEvaluation> queryAll(MesRiderEvaluationQueryCriteria criteria, Page<Object> page);
    /**
    * 查询所有数据不分页
    * @param criteria 条件参数
    * @return List<MesRiderEvaluationDto>
    */
    List<MesRiderEvaluation> queryAll(MesRiderEvaluationQueryCriteria criteria);
    /**
    * 创建
    * @param resources /
    */
    void create(MesRiderEvaluation resources);
    /**
    * 编辑
    * @param resources /
    */
    void update(MesRiderEvaluation resources);
    /**
    * 多选删除
    * @param ids /
    */
    void deleteAll(List<Long> ids);
    /**
    * 导出数据
    * @param all 待导出的数据
    * @param response /
    * @throws IOException /
    */
    void download(List<MesRiderEvaluation> all, HttpServletResponse response) throws IOException;
    void addRiderEvaluation(MesRiderEvaluationDto resources);
}
oying-system/src/main/java/com/oying/modules/message/service/MesShopReplyService.java
New file
@@ -0,0 +1,60 @@
package com.oying.modules.message.service;
import com.oying.modules.message.domain.MesShopReply;
import com.oying.modules.message.domain.dto.MesShopReplyQueryCriteria;
import java.util.Map;
import java.util.List;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.oying.utils.PageResult;
/**
* @description 服务接口
* @author 李萌
* @date 2025-07-25
**/
public interface MesShopReplyService extends IService<MesShopReply> {
    /**
    * 查询数据分页
    * @param criteria 条件
    * @param page 分页参数
    * @return PageResult
    */
    PageResult<MesShopReply> queryAll(MesShopReplyQueryCriteria criteria, Page<Object> page);
    /**
    * 查询所有数据不分页
    * @param criteria 条件参数
    * @return List<MesShopReplyDto>
    */
    List<MesShopReply> queryAll(MesShopReplyQueryCriteria criteria);
    /**
    * 创建
    * @param resources /
    */
    void create(MesShopReply resources);
    /**
    * 编辑
    * @param resources /
    */
    void update(MesShopReply resources);
    /**
    * 多选删除
    * @param ids /
    */
    void deleteAll(List<Long> ids);
    /**
    * 导出数据
    * @param all 待导出的数据
    * @param response /
    * @throws IOException /
    */
    void download(List<MesShopReply> all, HttpServletResponse response) throws IOException;
}
oying-system/src/main/java/com/oying/modules/message/service/impl/MesAdvertisementServiceImpl.java
New file
@@ -0,0 +1,93 @@
package com.oying.modules.message.service.impl;
import com.oying.modules.message.domain.MesAdvertisement;
import com.oying.utils.FileUtil;
import lombok.RequiredArgsConstructor;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.oying.modules.message.service.MesAdvertisementService;
import com.oying.modules.message.domain.dto.MesAdvertisementQueryCriteria;
import com.oying.modules.message.mapper.MesAdvertisementMapper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.oying.utils.PageUtil;
import java.util.List;
import java.util.Map;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import com.oying.utils.PageResult;
/**
* @description 服务实现
* @author 李萌
* @date 2025-07-25
**/
@Service
@RequiredArgsConstructor
public class MesAdvertisementServiceImpl extends ServiceImpl<MesAdvertisementMapper, MesAdvertisement> implements MesAdvertisementService {
    private final MesAdvertisementMapper mesAdvertisementMapper;
    @Override
    public PageResult<MesAdvertisement> queryAll(MesAdvertisementQueryCriteria criteria, Page<Object> page){
        return PageUtil.toPage(mesAdvertisementMapper.findAll(criteria, page));
    }
    @Override
    public List<MesAdvertisement> queryAll(MesAdvertisementQueryCriteria criteria){
        return mesAdvertisementMapper.findAll(criteria);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void create(MesAdvertisement resources) {
        mesAdvertisementMapper.insert(resources);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void update(MesAdvertisement resources) {
        MesAdvertisement mesAdvertisement = getById(resources.getId());
        mesAdvertisement.copy(resources);
        mesAdvertisementMapper.updateById(mesAdvertisement);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void deleteAll(List<Long> ids) {
        mesAdvertisementMapper.deleteBatchIds(ids);
    }
    @Override
    public void download(List<MesAdvertisement> all, HttpServletResponse response) throws IOException {
        List<Map<String, Object>> list = new ArrayList<>();
        for (MesAdvertisement mesAdvertisement : all) {
            Map<String, Object> map = new LinkedHashMap<>();
            map.put("广告标题", mesAdvertisement.getTitle());
            map.put("副标题/简介", mesAdvertisement.getSubTitle());
            map.put("广告正文(支持富文本)", mesAdvertisement.getContent());
            map.put("封面图URL", mesAdvertisement.getCoverImg());
            map.put("Banner图URL(冗余)", mesAdvertisement.getBannerImg());
            map.put("投放渠道 1小程序 2APP 3全平台", mesAdvertisement.getPlatform());
            map.put("跳转类型 1内部 2外部", mesAdvertisement.getJumpType());
            map.put("跳转地址(内部路径或外部链接)", mesAdvertisement.getJumpUrl());
            map.put("跳转携带参数(JSON)", mesAdvertisement.getJumpParams());
            map.put("排序值 越大越前", mesAdvertisement.getSortOrder());
            map.put("是否置顶 0否 1是", mesAdvertisement.getIsTop());
            map.put("状态 1启用 2禁用", mesAdvertisement.getStatus());
            map.put("公告开始时间", mesAdvertisement.getEffectiveTime());
            map.put("公告结束时间", mesAdvertisement.getExpireTime());
            map.put("点击次数(冗余)", mesAdvertisement.getClickCount());
            map.put("展示次数(冗余)", mesAdvertisement.getShowCount());
            map.put("备注", mesAdvertisement.getRemark());
            map.put(" createBy",  mesAdvertisement.getCreateBy());
            map.put(" createTime",  mesAdvertisement.getCreateTime());
            map.put(" updateBy",  mesAdvertisement.getUpdateBy());
            map.put(" updateTime",  mesAdvertisement.getUpdateTime());
            list.add(map);
        }
        FileUtil.downloadExcel(list, response);
    }
}
oying-system/src/main/java/com/oying/modules/message/service/impl/MesCustomerCommentMsgServiceImpl.java
New file
@@ -0,0 +1,89 @@
package com.oying.modules.message.service.impl;
import com.oying.modules.message.domain.MesCustomerCommentMsg;
import com.oying.modules.message.domain.myDto.MesCustomerCommentMsgDTO;
import com.oying.utils.FileUtil;
import lombok.RequiredArgsConstructor;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.oying.modules.message.service.MesCustomerCommentMsgService;
import com.oying.modules.message.domain.dto.MesCustomerCommentMsgQueryCriteria;
import com.oying.modules.message.mapper.MesCustomerCommentMsgMapper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.oying.utils.PageUtil;
import java.util.*;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
import com.oying.utils.PageResult;
/**
* @description 服务实现
* @author 李萌
* @date 2025-07-25
**/
@Service
@RequiredArgsConstructor
public class MesCustomerCommentMsgServiceImpl extends ServiceImpl<MesCustomerCommentMsgMapper, MesCustomerCommentMsg> implements MesCustomerCommentMsgService {
    private final MesCustomerCommentMsgMapper mesCustomerCommentMsgMapper;
    @Override
    public PageResult<MesCustomerCommentMsg> queryAll(MesCustomerCommentMsgQueryCriteria criteria, Page<Object> page){
        return PageUtil.toPage(mesCustomerCommentMsgMapper.findAll(criteria, page));
    }
    @Override
    public List<MesCustomerCommentMsg> queryAll(MesCustomerCommentMsgQueryCriteria criteria){
        return mesCustomerCommentMsgMapper.findAll(criteria);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void create(MesCustomerCommentMsg resources) {
        mesCustomerCommentMsgMapper.insert(resources);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void update(MesCustomerCommentMsg resources) {
        MesCustomerCommentMsg mesCustomerCommentMsg = getById(resources.getId());
        mesCustomerCommentMsg.copy(resources);
        mesCustomerCommentMsgMapper.updateById(mesCustomerCommentMsg);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void deleteAll(List<Long> ids) {
        mesCustomerCommentMsgMapper.deleteBatchIds(ids);
    }
    @Override
    public void download(List<MesCustomerCommentMsg> all, HttpServletResponse response) throws IOException {
        List<Map<String, Object>> list = new ArrayList<>();
        for (MesCustomerCommentMsg mesCustomerCommentMsg : all) {
            Map<String, Object> map = new LinkedHashMap<>();
            map.put("对应 mes_msg_record.id", mesCustomerCommentMsg.getMsgRecordId());
            map.put("店铺ID", mesCustomerCommentMsg.getShopId());
            map.put("订单ID", mesCustomerCommentMsg.getOrderId());
            map.put("订单编号 冗余", mesCustomerCommentMsg.getOrderNo());
            map.put("买家用户ID", mesCustomerCommentMsg.getBuyerId());
            map.put("买家昵称 冗余", mesCustomerCommentMsg.getBuyerName());
            map.put("评价ID 冗余", mesCustomerCommentMsg.getEvaluationId());
            map.put("商户是否已回复 0=未回复 1=已回复", mesCustomerCommentMsg.getReplied());
            map.put("创建人", mesCustomerCommentMsg.getCreateBy());
            map.put("创建时间", mesCustomerCommentMsg.getCreateTime());
            map.put("更新人", mesCustomerCommentMsg.getUpdateBy());
            map.put("更新时间", mesCustomerCommentMsg.getUpdateTime());
            list.add(map);
        }
        FileUtil.downloadExcel(list, response);
    }
    @Override
    public List<MesCustomerCommentMsgDTO> listCustomerComment(Long shopId) {
        return mesCustomerCommentMsgMapper.listCustomerComment(shopId);
    }
}
oying-system/src/main/java/com/oying/modules/message/service/impl/MesMsgRecordServiceImpl.java
New file
@@ -0,0 +1,132 @@
package com.oying.modules.message.service.impl;
import com.oying.modules.message.common.MesReadEnum;
import com.oying.modules.message.common.MesTypeEnum;
import com.oying.modules.message.common.OrderStatusEnum;
import com.oying.modules.message.domain.MesMsgRecord;
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.utils.FileUtil;
import com.oying.utils.SecurityUtils;
import lombok.RequiredArgsConstructor;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.oying.modules.message.service.MesMsgRecordService;
import com.oying.modules.message.domain.dto.MesMsgRecordQueryCriteria;
import com.oying.modules.message.mapper.MesMsgRecordMapper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.oying.utils.PageUtil;
import java.sql.Timestamp;
import java.util.*;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
import com.oying.utils.PageResult;
/**
 * @author 李萌
 * @description 服务实现
 * @date 2025-07-25
 **/
@Service
@RequiredArgsConstructor
public class MesMsgRecordServiceImpl extends ServiceImpl<MesMsgRecordMapper, MesMsgRecord> implements MesMsgRecordService {
    private final MesMsgRecordMapper mesMsgRecordMapper;
    @Override
    public PageResult<MesMsgRecord> queryAll(MesMsgRecordQueryCriteria criteria, Page<Object> page) {
        return PageUtil.toPage(mesMsgRecordMapper.findAll(criteria, page));
    }
    @Override
    public List<MesMsgRecord> queryAll(MesMsgRecordQueryCriteria criteria) {
        return mesMsgRecordMapper.findAll(criteria);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void create(MesMsgRecord resources) {
        mesMsgRecordMapper.insert(resources);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void update(MesMsgRecord resources) {
        MesMsgRecord mesMsgRecord = getById(resources.getId());
        mesMsgRecord.copy(resources);
        mesMsgRecordMapper.updateById(mesMsgRecord);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void deleteAll(List<Long> ids) {
        mesMsgRecordMapper.deleteBatchIds(ids);
    }
    @Override
    public void download(List<MesMsgRecord> all, HttpServletResponse response) throws IOException {
        List<Map<String, Object>> list = new ArrayList<>();
        for (MesMsgRecord mesMsgRecord : all) {
            Map<String, Object> map = new LinkedHashMap<>();
            map.put("模板ID 可无", mesMsgRecord.getTemplateId());
            map.put("接收人ID", mesMsgRecord.getReceiverId());
            map.put("1=买家 2=商户 3=骑手", mesMsgRecord.getPlatform());
            map.put("同模板type", mesMsgRecord.getMsgType());
            map.put("最终标题", mesMsgRecord.getTitle());
            map.put("最终内容", mesMsgRecord.getContent());
            map.put("业务ID 例如订单ID", mesMsgRecord.getBizId());
            map.put("业务类型 ORDER/EVALUATION 等", mesMsgRecord.getBizType());
            map.put("已读 0=未读 1=已读", mesMsgRecord.getIsRead());
            map.put("阅读时间", mesMsgRecord.getReadTime());
            map.put("扩展字段 存跳转链接等", mesMsgRecord.getExtra());
            map.put("创建人", mesMsgRecord.getCreateBy());
            map.put("创建时间", mesMsgRecord.getCreateTime());
            map.put("更新人", mesMsgRecord.getUpdateBy());
            map.put("更新时间", mesMsgRecord.getUpdateTime());
            list.add(map);
        }
        FileUtil.downloadExcel(list, response);
    }
    @Override
    public List<MesMsgRecordQueryPollDto> PollMes(Long platform) {
        return mesMsgRecordMapper.PollMes(platform);
    }
    @Override
    public void batchMarkRead(Long platform, List<Long> msgIds) {
        mesMsgRecordMapper.batchMarkRead(platform, msgIds);
    }
    @Override
    public PageResult<MesMsgRecordQuerySystemDto> queryAllSysNotice(MesMsgRecordQueryCriteria criteria, Page<Object> page) {
        return PageUtil.toPage(mesMsgRecordMapper.queryAllSysNotice(criteria, page));
    }
    @Override
    public List<MesMsgRecordQueryOrderDto> queryorder(Long shopId) {
        return mesMsgRecordMapper.queryorder(shopId);
    }
    @Override
    public void insertOrderMsg(String orderNo, OrderStatusEnum content, Long shopId) {
        MesMsgRecord record = new MesMsgRecord();
        record.setOrderNo(orderNo);
        record.setContent(content.getValue()); // 使用枚举的描述作为消息内容
        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()));
        try {
            mesMsgRecordMapper.insert(record);
        } catch (Exception e) {
          log.error("插入订单消息失败:{}", e);
        }
    }
}
oying-system/src/main/java/com/oying/modules/message/service/impl/MesMsgTemplateServiceImpl.java
New file
@@ -0,0 +1,83 @@
package com.oying.modules.message.service.impl;
import com.oying.modules.message.domain.MesMsgTemplate;
import com.oying.exception.EntityExistException;
import com.oying.utils.FileUtil;
import lombok.RequiredArgsConstructor;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.oying.modules.message.service.MesMsgTemplateService;
import com.oying.modules.message.domain.dto.MesMsgTemplateQueryCriteria;
import com.oying.modules.message.mapper.MesMsgTemplateMapper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.oying.utils.PageUtil;
import java.util.List;
import java.util.Map;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import com.oying.utils.PageResult;
/**
* @description 服务实现
* @author 李萌
* @date 2025-07-25
**/
@Service
@RequiredArgsConstructor
public class MesMsgTemplateServiceImpl extends ServiceImpl<MesMsgTemplateMapper, MesMsgTemplate> implements MesMsgTemplateService {
    private final MesMsgTemplateMapper mesMsgTemplateMapper;
    @Override
    public PageResult<MesMsgTemplate> queryAll(MesMsgTemplateQueryCriteria criteria, Page<Object> page){
        return PageUtil.toPage(mesMsgTemplateMapper.findAll(criteria, page));
    }
    @Override
    public List<MesMsgTemplate> queryAll(MesMsgTemplateQueryCriteria criteria){
        return mesMsgTemplateMapper.findAll(criteria);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void create(MesMsgTemplate resources) {
        mesMsgTemplateMapper.insert(resources);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void update(MesMsgTemplate resources) {
        MesMsgTemplate mesMsgTemplate = getById(resources.getId());
        mesMsgTemplate.copy(resources);
        mesMsgTemplateMapper.updateById(mesMsgTemplate);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void deleteAll(List<Integer> ids) {
        mesMsgTemplateMapper.deleteBatchIds(ids);
    }
    @Override
    public void download(List<MesMsgTemplate> all, HttpServletResponse response) throws IOException {
        List<Map<String, Object>> list = new ArrayList<>();
        for (MesMsgTemplate mesMsgTemplate : all) {
            Map<String, Object> map = new LinkedHashMap<>();
            map.put("模板编码", mesMsgTemplate.getCode());
            map.put("模板名称", mesMsgTemplate.getName());
            map.put("标题模板 支持占位符", mesMsgTemplate.getTitleTpl());
            map.put("内容模板 支持占位符", mesMsgTemplate.getContentTpl());
            map.put("1=系统 2=订单 3=评价/留言", mesMsgTemplate.getType());
            map.put("1=买家 2=商户 3=骑手", mesMsgTemplate.getPlatform());
            map.put("创建人", mesMsgTemplate.getCreateBy());
            map.put("创建时间", mesMsgTemplate.getCreateTime());
            map.put("更新人", mesMsgTemplate.getUpdateBy());
            map.put("更新时间", mesMsgTemplate.getUpdateTime());
            list.add(map);
        }
        FileUtil.downloadExcel(list, response);
    }
}
oying-system/src/main/java/com/oying/modules/message/service/impl/MesOrderEvaluationServiceImpl.java
New file
@@ -0,0 +1,97 @@
package com.oying.modules.message.service.impl;
import com.oying.modules.message.domain.MesOrderEvaluation;
import com.oying.modules.message.domain.myDto.MesOrderEvaluationDto;
import com.oying.utils.FileUtil;
import lombok.RequiredArgsConstructor;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.oying.modules.message.service.MesOrderEvaluationService;
import com.oying.modules.message.domain.dto.MesOrderEvaluationQueryCriteria;
import com.oying.modules.message.mapper.MesOrderEvaluationMapper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.oying.utils.PageUtil;
import java.util.List;
import java.util.Map;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import com.oying.utils.PageResult;
/**
* @description 服务实现
* @author 李萌
* @date 2025-07-25
**/
@Service
@RequiredArgsConstructor
public class MesOrderEvaluationServiceImpl extends ServiceImpl<MesOrderEvaluationMapper, MesOrderEvaluation> implements MesOrderEvaluationService {
    private final MesOrderEvaluationMapper mesOrderEvaluationMapper;
    @Override
    public PageResult<MesOrderEvaluation> queryAll(MesOrderEvaluationQueryCriteria criteria, Page<Object> page){
        return PageUtil.toPage(mesOrderEvaluationMapper.findAll(criteria, page));
    }
    @Override
    public List<MesOrderEvaluation> queryAll(MesOrderEvaluationQueryCriteria criteria){
        return mesOrderEvaluationMapper.findAll(criteria);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void create(MesOrderEvaluation resources) {
        mesOrderEvaluationMapper.insert(resources);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void update(MesOrderEvaluation resources) {
        MesOrderEvaluation mesOrderEvaluation = getById(resources.getId());
        mesOrderEvaluation.copy(resources);
        mesOrderEvaluationMapper.updateById(mesOrderEvaluation);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void deleteAll(List<Long> ids) {
        mesOrderEvaluationMapper.deleteBatchIds(ids);
    }
    @Override
    public void download(List<MesOrderEvaluation> all, HttpServletResponse response) throws IOException {
        List<Map<String, Object>> list = new ArrayList<>();
        for (MesOrderEvaluation mesOrderEvaluation : all) {
            Map<String, Object> map = new LinkedHashMap<>();
            map.put("订单ID", mesOrderEvaluation.getOrderId());
            map.put("买家用户ID", mesOrderEvaluation.getBuyerId());
            map.put("订单编号 冗余字段", mesOrderEvaluation.getOrderNo());
            map.put("店铺ID 冗余字段", mesOrderEvaluation.getShopId());
            map.put("店铺名称 冗余字段", mesOrderEvaluation.getShopName());
            map.put("骑手ID", mesOrderEvaluation.getRiderId());
            map.put("骑手姓名 冗余字段", mesOrderEvaluation.getRiderName());
            map.put("商品评分 0-5,支持半星", mesOrderEvaluation.getGoodsScore());
            map.put("商品评价内容", mesOrderEvaluation.getGoodsContent());
            map.put("商品评价图片 最多5张 存JSON数组", mesOrderEvaluation.getGoodsImgs());
            map.put("店铺服务评分", mesOrderEvaluation.getShopScore());
            map.put("店铺服务评价内容", mesOrderEvaluation.getShopContent());
            map.put("骑手服务评分", mesOrderEvaluation.getRiderScore());
            map.put("骑手服务评价内容", mesOrderEvaluation.getRiderContent());
            map.put("买家删除评价 0=正常 1=已删除", mesOrderEvaluation.getIsDeleted());
            map.put("创建人", mesOrderEvaluation.getCreateBy());
            map.put("创建时间", mesOrderEvaluation.getCreateTime());
            map.put("更新人", mesOrderEvaluation.getUpdateBy());
            map.put("更新时间", mesOrderEvaluation.getUpdateTime());
            list.add(map);
        }
        FileUtil.downloadExcel(list, response);
    }
    @Override
    public void addShopEvaluation(MesOrderEvaluationDto resources) {
        mesOrderEvaluationMapper.addShopEvaluation(resources);
    }
}
oying-system/src/main/java/com/oying/modules/message/service/impl/MesOrderItemEvaluationServiceImpl.java
New file
@@ -0,0 +1,90 @@
package com.oying.modules.message.service.impl;
import com.oying.modules.message.domain.MesOrderItemEvaluation;
import com.oying.modules.message.domain.MesOrderItemEvaluationDto;
import com.oying.utils.FileUtil;
import lombok.RequiredArgsConstructor;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.oying.modules.message.service.MesOrderItemEvaluationService;
import com.oying.modules.message.domain.dto.MesOrderItemEvaluationQueryCriteria;
import com.oying.modules.message.mapper.MesOrderItemEvaluationMapper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.oying.utils.PageUtil;
import java.util.List;
import java.util.Map;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import com.oying.utils.PageResult;
/**
* @description 服务实现
* @author 李萌
* @date 2025-07-25
**/
@Service
@RequiredArgsConstructor
public class MesOrderItemEvaluationServiceImpl extends ServiceImpl<MesOrderItemEvaluationMapper, MesOrderItemEvaluation> implements MesOrderItemEvaluationService {
    private final MesOrderItemEvaluationMapper mesOrderItemEvaluationMapper;
    @Override
    public PageResult<MesOrderItemEvaluation> queryAll(MesOrderItemEvaluationQueryCriteria criteria, Page<Object> page){
        return PageUtil.toPage(mesOrderItemEvaluationMapper.findAll(criteria, page));
    }
    @Override
    public List<MesOrderItemEvaluation> queryAll(MesOrderItemEvaluationQueryCriteria criteria){
        return mesOrderItemEvaluationMapper.findAll(criteria);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void create(MesOrderItemEvaluation resources) {
        mesOrderItemEvaluationMapper.insert(resources);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void update(MesOrderItemEvaluation resources) {
        MesOrderItemEvaluation mesOrderItemEvaluation = getById(resources.getId());
        mesOrderItemEvaluation.copy(resources);
        mesOrderItemEvaluationMapper.updateById(mesOrderItemEvaluation);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void deleteAll(List<Long> ids) {
        mesOrderItemEvaluationMapper.deleteBatchIds(ids);
    }
    @Override
    public void download(List<MesOrderItemEvaluation> all, HttpServletResponse response) throws IOException {
        List<Map<String, Object>> list = new ArrayList<>();
        for (MesOrderItemEvaluation mesOrderItemEvaluation : all) {
            Map<String, Object> map = new LinkedHashMap<>();
            map.put("对应 mes_order_evaluation.id", mesOrderItemEvaluation.getOrderEvalId());
            map.put("订单明细ID", mesOrderItemEvaluation.getOrderItemId());
            map.put("商品ID", mesOrderItemEvaluation.getGoodsId());
            map.put("商品名称 冗余", mesOrderItemEvaluation.getGoodsName());
            map.put("商品主图 冗余", mesOrderItemEvaluation.getGoodsPic());
            map.put("商品单项评分", mesOrderItemEvaluation.getScore());
            map.put("评价内容", mesOrderItemEvaluation.getContent());
            map.put("评价图片JSON 最多5张", mesOrderItemEvaluation.getImgs());
            map.put("创建人", mesOrderItemEvaluation.getCreateBy());
            map.put("创建时间", mesOrderItemEvaluation.getCreateTime());
            map.put("更新人", mesOrderItemEvaluation.getUpdateBy());
            map.put("更新时间", mesOrderItemEvaluation.getUpdateTime());
            list.add(map);
        }
        FileUtil.downloadExcel(list, response);
    }
    @Override
    public void addGoodsEvaluation(MesOrderItemEvaluationDto resources) {
        mesOrderItemEvaluationMapper.addGoodsEvaluation(resources);
    }
}
oying-system/src/main/java/com/oying/modules/message/service/impl/MesRiderEvaluationServiceImpl.java
New file
@@ -0,0 +1,89 @@
package com.oying.modules.message.service.impl;
import com.oying.modules.message.domain.MesRiderEvaluation;
import com.oying.modules.message.domain.myDto.MesRiderEvaluationDto;
import com.oying.utils.FileUtil;
import lombok.RequiredArgsConstructor;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.oying.modules.message.service.MesRiderEvaluationService;
import com.oying.modules.message.domain.dto.MesRiderEvaluationQueryCriteria;
import com.oying.modules.message.mapper.MesRiderEvaluationMapper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.oying.utils.PageUtil;
import java.util.List;
import java.util.Map;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import com.oying.utils.PageResult;
/**
* @description 服务实现
* @author 李萌
* @date 2025-07-25
**/
@Service
@RequiredArgsConstructor
public class MesRiderEvaluationServiceImpl extends ServiceImpl<MesRiderEvaluationMapper, MesRiderEvaluation> implements MesRiderEvaluationService {
    private final MesRiderEvaluationMapper mesRiderEvaluationMapper;
    @Override
    public PageResult<MesRiderEvaluation> queryAll(MesRiderEvaluationQueryCriteria criteria, Page<Object> page){
        return PageUtil.toPage(mesRiderEvaluationMapper.findAll(criteria, page));
    }
    @Override
    public List<MesRiderEvaluation> queryAll(MesRiderEvaluationQueryCriteria criteria){
        return mesRiderEvaluationMapper.findAll(criteria);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void create(MesRiderEvaluation resources) {
        mesRiderEvaluationMapper.insert(resources);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void update(MesRiderEvaluation resources) {
        MesRiderEvaluation mesRiderEvaluation = getById(resources.getId());
        mesRiderEvaluation.copy(resources);
        mesRiderEvaluationMapper.updateById(mesRiderEvaluation);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void deleteAll(List<Long> ids) {
        mesRiderEvaluationMapper.deleteBatchIds(ids);
    }
    @Override
    public void download(List<MesRiderEvaluation> all, HttpServletResponse response) throws IOException {
        List<Map<String, Object>> list = new ArrayList<>();
        for (MesRiderEvaluation mesRiderEvaluation : all) {
            Map<String, Object> map = new LinkedHashMap<>();
            map.put("订单ID", mesRiderEvaluation.getOrderId());
            map.put("订单编号 冗余", mesRiderEvaluation.getOrderNo());
            map.put("骑手ID", mesRiderEvaluation.getRiderId());
            map.put("骑手姓名 冗余", mesRiderEvaluation.getRiderName());
            map.put("买家用户ID", mesRiderEvaluation.getBuyerId());
            map.put("骑手服务评分", mesRiderEvaluation.getScore());
            map.put("评价内容", mesRiderEvaluation.getContent());
            map.put("创建人", mesRiderEvaluation.getCreateBy());
            map.put("创建时间", mesRiderEvaluation.getCreateTime());
            map.put("更新人", mesRiderEvaluation.getUpdateBy());
            map.put("更新时间", mesRiderEvaluation.getUpdateTime());
            list.add(map);
        }
        FileUtil.downloadExcel(list, response);
    }
    @Override
    public void addRiderEvaluation(MesRiderEvaluationDto resources) {
     mesRiderEvaluationMapper.addRiderEvaluation(resources);
    }
}
oying-system/src/main/java/com/oying/modules/message/service/impl/MesShopReplyServiceImpl.java
New file
@@ -0,0 +1,79 @@
package com.oying.modules.message.service.impl;
import com.oying.modules.message.domain.MesShopReply;
import com.oying.utils.FileUtil;
import lombok.RequiredArgsConstructor;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.oying.modules.message.service.MesShopReplyService;
import com.oying.modules.message.domain.dto.MesShopReplyQueryCriteria;
import com.oying.modules.message.mapper.MesShopReplyMapper;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.oying.utils.PageUtil;
import java.util.List;
import java.util.Map;
import java.io.IOException;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import com.oying.utils.PageResult;
/**
* @description 服务实现
* @author 李萌
* @date 2025-07-25
**/
@Service
@RequiredArgsConstructor
public class MesShopReplyServiceImpl extends ServiceImpl<MesShopReplyMapper, MesShopReply> implements MesShopReplyService {
    private final MesShopReplyMapper mesShopReplyMapper;
    @Override
    public PageResult<MesShopReply> queryAll(MesShopReplyQueryCriteria criteria, Page<Object> page){
        return PageUtil.toPage(mesShopReplyMapper.findAll(criteria, page));
    }
    @Override
    public List<MesShopReply> queryAll(MesShopReplyQueryCriteria criteria){
        return mesShopReplyMapper.findAll(criteria);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void create(MesShopReply resources) {
        mesShopReplyMapper.insert(resources);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void update(MesShopReply resources) {
        MesShopReply mesShopReply = getById(resources.getId());
        mesShopReply.copy(resources);
        mesShopReplyMapper.updateById(mesShopReply);
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void deleteAll(List<Long> ids) {
        mesShopReplyMapper.deleteBatchIds(ids);
    }
    @Override
    public void download(List<MesShopReply> all, HttpServletResponse response) throws IOException {
        List<Map<String, Object>> list = new ArrayList<>();
        for (MesShopReply mesShopReply : all) {
            Map<String, Object> map = new LinkedHashMap<>();
            map.put("mes_order_evaluation.id", mesShopReply.getEvaluationId());
            map.put("1=商品评价回复 2=店铺服务评价回复", mesShopReply.getReplyType());
            map.put("回复内容", mesShopReply.getContent());
            map.put("商户ID", mesShopReply.getCreateBy());
            map.put("创建时间", mesShopReply.getCreateTime());
            map.put("更新人", mesShopReply.getUpdateBy());
            map.put("更新时间", mesShopReply.getUpdateTime());
            list.add(map);
        }
        FileUtil.downloadExcel(list, response);
    }
}
oying-system/src/main/java/com/oying/modules/pc/product/domain/dto/ProductQueryCriteria.java
@@ -37,4 +37,8 @@
    private Integer limit;
    private String sortColumn;
    private String sortDirection;
}
oying-system/src/main/java/com/oying/modules/pc/product/view/ProductCustomerView.java
@@ -32,6 +32,12 @@
    @ApiModelProperty(value = "商品标题")
    private String title;
    @ApiModelProperty(value = "一级分类ID")
    private Long categoryId;
    @ApiModelProperty(value = "二级分类ID")
    private Long secondCategoryId;
    @ApiModelProperty(value = "状态")
    private Integer status;
oying-system/src/main/java/com/oying/modules/pc/store/domain/Store.java
@@ -6,6 +6,7 @@
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.oying.base.BaseEntity;
import com.oying.modules.pc.product.domain.Product;
import io.swagger.annotations.ApiModelProperty;
@@ -78,19 +79,15 @@
    @ApiModelProperty(value = "店铺标签,逗号分隔")
    private String tags;
    @ApiModelProperty(value = "配送费用")
    private BigDecimal deliveryFee;
    @ApiModelProperty(value = "起送金额")
    private BigDecimal deliveryMinimum;
    @ApiModelProperty(value = "联系电话")
    private String contactPhone;
    @ApiModelProperty(value = "营业开始时间")
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "HH:mm")
    private LocalTime openTime;
    @ApiModelProperty(value = "营业结束时间")
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "HH:mm")
    private LocalTime closeTime;
    @ApiModelProperty(value = "营业状态")
@@ -139,6 +136,15 @@
    @ApiModelProperty(value = "评分")
    private Double score = 0d;
    @ApiModelProperty(value = "包装费用")
    private BigDecimal packagingFee;
    @ApiModelProperty(value = "配送费用")
    private BigDecimal deliveryFee;
    @ApiModelProperty(value = "起送金额")
    private BigDecimal deliveryMinimum;
    @TableField(exist = false)
    @ApiModelProperty(value = "配送距离")
    private Integer deliveryDuration = 0;
oying-system/src/main/java/com/oying/modules/pc/store/domain/dto/StoreCreateRequest.java
@@ -7,6 +7,7 @@
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.time.LocalTime;
import java.util.ArrayList;
import java.util.List;
@@ -67,6 +68,9 @@
    @ApiModelProperty(value = "是否支持自提")
    private Integer selfPickup;
    @ApiModelProperty(value = "包装费用")
    private BigDecimal packagingFee;
    @ApiModelProperty(value = "店铺资质", example = "[]")
    private List<StoreQualificationCreateRequest> qualificationList = new ArrayList<>();
oying-system/src/main/java/com/oying/modules/pc/store/domain/dto/StoreCustomerDetailDto.java
@@ -1,5 +1,6 @@
package com.oying.modules.pc.store.domain.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -39,9 +40,11 @@
    private String contactPhone;
    @ApiModelProperty(value = "营业开始时间")
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "HH:mm")
    private LocalTime openTime;
    @ApiModelProperty(value = "营业结束时间")
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "HH:mm")
    private LocalTime closeTime;
    private String businessHours;
oying-system/src/main/java/com/oying/modules/pc/store/domain/dto/StoreFieldUpdateRequest.java
@@ -1,5 +1,6 @@
package com.oying.modules.pc.store.domain.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -73,9 +74,11 @@
    public interface UpdateStoreBusinessHoursGroup{}
    @NotNull(groups = UpdateStoreBusinessHoursGroup.class)
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "HH:mm")
    private LocalTime openTime;
    @NotNull(groups = UpdateStoreBusinessHoursGroup.class)
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "HH:mm")
    private LocalTime closeTime;
    public interface UpdateStoreAddressGroup{}
oying-system/src/main/java/com/oying/modules/pc/store/domain/dto/StoreUpdateRequest.java
@@ -1,5 +1,6 @@
package com.oying.modules.pc.store.domain.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.oying.modules.pc.product.domain.Product;
import com.oying.modules.pc.store.domain.StoreQualification;
import io.swagger.annotations.ApiModelProperty;
@@ -61,13 +62,18 @@
    @ApiModelProperty(value = "起送金额")
    private BigDecimal deliveryMinimum;
    @ApiModelProperty(value = "包装费用")
    private BigDecimal packagingFee;
    @ApiModelProperty(value = "联系电话")
    private String contactPhone;
    @ApiModelProperty(value = "营业开始时间")
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "HH:mm")
    private LocalTime openTime;
    @ApiModelProperty(value = "营业结束时间")
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "HH:mm")
    private LocalTime closeTime;
    @ApiModelProperty(value = "详细地址")
oying-system/src/main/java/com/oying/modules/pc/store/rest/StoreCustomerController.java
@@ -1,5 +1,7 @@
package com.oying.modules.pc.store.rest;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import cn.hutool.core.util.ObjUtil;
import com.oying.modules.pc.product.domain.Product;
import com.oying.modules.pc.product.domain.dto.ProductQueryCriteria;
@@ -18,7 +20,6 @@
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
@@ -59,7 +60,7 @@
    public ResponseEntity<?> getStoreById(@PathVariable("storeId") Long storeId) {
        Store store = storeService.getById(storeId);
        CustomerStoreView view = new CustomerStoreView();
        BeanUtils.copyProperties(store, view);
        BeanUtil.copyProperties(store, view, CopyOptions.create().setIgnoreNullValue(true));
        view.setBusinessHours(BusinessHoursUtils.formatBusinessHours(store.getOpenTime(), store.getCloseTime()));
        return ResponseEntity.ok(R.success(view));
    }
@@ -68,10 +69,13 @@
    @ApiOperation("查询店铺")
    public ResponseEntity<?> getStoreDetailsById(@PathVariable("storeId") Long storeId) {
        Store store = storeService.getById(storeId);
        CustomerStoreView view = new CustomerStoreView();
        BeanUtil.copyProperties(store, view, CopyOptions.create().setIgnoreNullValue(true));
        view.setBusinessHours(BusinessHoursUtils.formatBusinessHours(store.getOpenTime(), store.getCloseTime()));
        if (ObjUtil.isNotEmpty(store)) {
            store.setQualifications(storeQualificationService.getByStoreId(storeId));
            view.setQualifications(storeQualificationService.getByStoreId(storeId));
        }
        return ResponseEntity.ok(R.success(store));
        return ResponseEntity.ok(R.success(view));
    }
    private List<Product> getProductsByStoreId(Long storeId) {
oying-system/src/main/java/com/oying/modules/pc/store/rest/StoreMerchantController.java
@@ -73,9 +73,9 @@
    //@PreAuthorize("@el.check('merchant:store:getById')")
    public ResponseEntity<?> getStoreById(@PathVariable Long storeId) {
        Store store = storeService.getById(storeId);
        StoreMerchantView view = new StoreMerchantView();
        BeanUtils.copyProperties(store, view);
        return ResponseEntity.ok(R.success(view));
        /*StoreMerchantView view = new StoreMerchantView();
        BeanUtils.copyProperties(store, view);*/
        return ResponseEntity.ok(R.success(store));
    }
    @GetMapping(value = "/{storeId}/details")
oying-system/src/main/java/com/oying/modules/pc/store/view/CustomerStoreView.java
@@ -1,12 +1,13 @@
package com.oying.modules.pc.store.view;
import com.baomidou.mybatisplus.annotation.TableField;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.oying.modules.pc.store.domain.StoreQualification;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import java.math.BigDecimal;
import java.time.LocalTime;
import java.util.List;
@Data
public class CustomerStoreView {
@@ -41,13 +42,22 @@
    @ApiModelProperty(value = "联系电话")
    private String contactPhone;
    @ApiModelProperty(value = "营业时间")
    private String businessHours;
    @ApiModelProperty(value = "营业开始时间")
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "HH:mm")
    private LocalTime openTime;
    @ApiModelProperty(value = "营业结束时间")
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "HH:mm")
    private LocalTime closeTime;
    private String businessHours;
    @ApiModelProperty(value = "营业状态")
    private Integer businessStatus;
    @ApiModelProperty(value = "市级代码")
    private String cityCode;
    @ApiModelProperty(value = "详细地址")
    private String address;
@@ -70,6 +80,15 @@
    @ApiModelProperty(value = "评分")
    private Double score = 0d;
    @ApiModelProperty(value = "包装费用")
    private BigDecimal packagingFee;
    @ApiModelProperty(value = "配送费用")
    private BigDecimal deliveryFee;
    @ApiModelProperty(value = "起送金额")
    private BigDecimal deliveryMinimum;
    @ApiModelProperty(value = "配送距离")
    private Integer deliveryDuration = 0;
@@ -82,4 +101,7 @@
    @ApiModelProperty(value = "月销售量")
    private Integer monthlyUnitsSold = 0;
    @ApiModelProperty(value = "资质")
    private List<StoreQualification> qualifications;
}
oying-system/src/main/java/com/oying/modules/pc/store/view/StoreMerchantView.java
@@ -1,9 +1,13 @@
package com.oying.modules.pc.store.view;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.oying.modules.pc.store.domain.StoreQualification;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalTime;
import java.util.List;
@Data
public class StoreMerchantView {
@@ -35,13 +39,18 @@
    @ApiModelProperty(value = "店铺描述")
    private String description;
    @ApiModelProperty(value = "包装费用")
    private BigDecimal packagingFee;
    @ApiModelProperty(value = "联系电话")
    private String contactPhone;
    @ApiModelProperty(value = "营业开始时间")
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "HH:mm")
    private LocalTime openTime;
    @ApiModelProperty(value = "营业结束时间")
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "HH:mm")
    private LocalTime closeTime;
    @ApiModelProperty(value = "详细地址")
@@ -65,4 +74,7 @@
    @ApiModelProperty(value = "版本号")
    private Long version;
    @ApiModelProperty(value = "资质")
    private List<StoreQualification> qualifications;
}
oying-system/src/main/java/com/oying/modules/pc/store/view/StoreSimpleView.java
@@ -1,5 +1,6 @@
package com.oying.modules.pc.store.view;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@@ -52,9 +53,11 @@
    private String contactPhone;
    @ApiModelProperty(value = "营业开始时间")
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "HH:mm")
    private LocalTime openTime;
    @ApiModelProperty(value = "营业结束时间")
    @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "HH:mm")
    private LocalTime closeTime;
    @ApiModelProperty(value = "市级代码")
oying-system/src/main/resources/mapper/message/MesAdvertisementMapper.xml
New file
@@ -0,0 +1,41 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.oying.modules.message.mapper.MesAdvertisementMapper">
    <resultMap id="BaseResultMap" type="com.oying.modules.message.domain.MesAdvertisement">
        <id column="id" property="id"/>
        <result column="title" property="title"/>
        <result column="sub_title" property="subTitle"/>
        <result column="content" property="content"/>
        <result column="cover_img" property="coverImg"/>
        <result column="banner_img" property="bannerImg"/>
        <result column="platform" property="platform"/>
        <result column="jump_type" property="jumpType"/>
        <result column="jump_url" property="jumpUrl"/>
        <result column="jump_params" property="jumpParams"/>
        <result column="sort_order" property="sortOrder"/>
        <result column="is_top" property="isTop"/>
        <result column="status" property="status"/>
        <result column="effective_time" property="effectiveTime"/>
        <result column="expire_time" property="expireTime"/>
        <result column="click_count" property="clickCount"/>
        <result column="show_count" property="showCount"/>
        <result column="remark" property="remark"/>
        <result column="create_by" property="createBy"/>
        <result column="create_time" property="createTime"/>
        <result column="update_by" property="updateBy"/>
        <result column="update_time" property="updateTime"/>
    </resultMap>
    <sql id="Base_Column_List">
        id, title, sub_title, content, cover_img, banner_img, platform, jump_type, jump_url, jump_params, sort_order, is_top, status, effective_time, expire_time, click_count, show_count, remark, create_by, create_time, update_by, update_time
    </sql>
    <select id="findAll" resultMap="BaseResultMap">
        select
        <include refid="Base_Column_List"/>
        from mes_advertisement
        <where>
        </where>
        order by id desc
    </select>
</mapper>
oying-system/src/main/resources/mapper/message/MesCustomerCommentMsgMapper.xml
New file
@@ -0,0 +1,50 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.oying.modules.message.mapper.MesCustomerCommentMsgMapper">
    <resultMap id="BaseResultMap" type="com.oying.modules.message.domain.MesCustomerCommentMsg">
        <id column="id" property="id"/>
        <result column="msg_record_id" property="msgRecordId"/>
        <result column="shop_id" property="shopId"/>
        <result column="order_id" property="orderId"/>
        <result column="order_no" property="orderNo"/>
        <result column="buyer_id" property="buyerId"/>
        <result column="buyer_name" property="buyerName"/>
        <result column="evaluation_id" property="evaluationId"/>
        <result column="replied" property="replied"/>
        <result column="create_by" property="createBy"/>
        <result column="create_time" property="createTime"/>
        <result column="update_by" property="updateBy"/>
        <result column="update_time" property="updateTime"/>
        <result column="comment_time" property="commentTime"/>
        <result column="comment_content" property="commentContent"/>
        <result column="reply_content" property="replyContent"/>
        <result column="ext_jump_url" property="extJumpUrl"/>
        <result column="int_jump_path" property="intJumpPath"/>
    </resultMap>
    <sql id="Base_Column_List">
        id, msg_record_id, shop_id, order_id, order_no, buyer_id, buyer_name, evaluation_id, replied, create_by, create_time, update_by, update_time, comment_time, comment_content, reply_content, ext_jump_url, int_jump_path
    </sql>
    <sql id="CustomerCommentMsg_Column_List">
        id, shop_id, order_no, buyer_id, buyer_name, replied, comment_time, comment_content, reply_content
    </sql>
    <select id="findAll" resultMap="BaseResultMap">
        SELECT
        <include refid="Base_Column_List"/>
        FROM mes_customer_comment_msg
        <where>
        </where>
        ORDER BY id DESC
    </select>
    <select id="listCustomerComment" resultType="com.oying.modules.message.domain.myDto.MesCustomerCommentMsgDTO"
            parameterType="java.lang.Long">
        SELECT
            <include refid="CustomerCommentMsg_Column_List"/>
        FROM mes_customer_comment_msg
        WHERE shop_id = #{shopId}
        ORDER BY id DESC
    </select>
</mapper>
oying-system/src/main/resources/mapper/message/MesMsgRecordMapper.xml
New file
@@ -0,0 +1,113 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.oying.modules.message.mapper.MesMsgRecordMapper">
    <resultMap id="BaseResultMap" type="com.oying.modules.message.domain.MesMsgRecord">
        <id column="id" property="id"/>
        <result column="template_id" property="templateId"/>
        <result column="receiver_id" property="receiverId"/>
        <result column="platform" property="platform"/>
        <result column="msg_type" property="msgType"/>
        <result column="title" property="title"/>
        <result column="content" property="content"/>
        <result column="biz_id" property="bizId"/>
        <result column="biz_type" property="bizType"/>
        <result column="is_read" property="isRead"/>
        <result column="read_time" property="readTime"/>
        <result column="extra" property="extra"/>
        <result column="create_by" property="createBy"/>
        <result column="create_time" property="createTime"/>
        <result column="update_by" property="updateBy"/>
        <result column="update_time" property="updateTime"/>
        <!-- 新增字段映射 -->
        <result column="order_id" property="orderId"/>
        <result column="buyer_id" property="buyerId"/>
        <result column="order_no" property="orderNo"/>
        <result column="shop_id" property="shopId"/>
        <result column="shop_name" property="shopName"/>
        <result column="rider_id" property="riderId"/>
        <result column="rider_name" property="riderName"/>
    </resultMap>
    <!-- 为 MesMsgRecordQueryPollDto 创建专门的 resultMap -->
    <resultMap id="PollResultMap" type="com.oying.modules.message.domain.myDto.MesMsgRecordQueryPollDto">
        <id column="id" property="id"/>
        <result column="title" property="title"/>
        <result column="content" property="content"/>
    </resultMap>
    <!-- 为 MesMsgRecordQuerySystemDto 创建专门的 resultMap -->
    <resultMap id="SystemResultMap" type="com.oying.modules.message.domain.myDto.MesMsgRecordQuerySystemDto">
        <id column="id" property="id"/>
        <result column="title" property="title"/>
        <result column="content" property="content"/>
    </resultMap>
    <sql id="Base_Column_List">
        id, template_id, receiver_id, platform, msg_type, title, content, biz_id, biz_type, is_read, read_time, extra, create_by, create_time, update_by, update_time
    </sql>
    <!-- 与 MesMsgRecordQueryPollDto 字段对应的 SQL 片段 -->
    <sql id="Poll_Column_List">
        id, title, content
    </sql>
    <!-- 与 MesMsgRecordQuerySystemDto 字段对应的 SQL 片段 -->
    <sql id="System_Column_List">
        id, title, content
    </sql>
    <update id="batchMarkRead">
        UPDATE mes_msg_record
        SET is_read = 1,
        read_time = NOW()
        WHERE id IN
        <foreach item="item" collection="msgIds" separator="," open="(" close=")">
            #{item}
        </foreach>
        AND platform = #{platform}
    </update>
    <select id="findAll" resultMap="BaseResultMap">
        select
        <include refid="Base_Column_List"/>
        from mes_msg_record
        <where>
        </where>
        order by id desc
    </select>
    <!-- 使用专门的 resultMap 进行映射 -->
    <select id="PollMes" parameterType="java.lang.Long" resultMap="PollResultMap">
        <!-- 根据平台 查询未读消息 -->
        select
        <include refid="Poll_Column_List"/>
        from mes_msg_record
        <where>
            <if test="platform != null">
                platform = #{platform}
            </if>
            and is_read = 0
        </where>
        order by id desc
    </select>
    <select id="queryAllSysNotice"
            resultMap="SystemResultMap">
        select
        <include refid="System_Column_List"/>
        from mes_msg_record
        <where>
#         系统1
        msg_type = 1
        </where>
        order by id desc
    </select>
    <select id="queryorder" resultType="com.oying.modules.message.domain.myDto.MesMsgRecordQueryOrderDto"
            parameterType="java.lang.Long">
#         根据店铺号 给出订单号与订单消息
        select  id,content,order_no
        from mes_msg_record
        <where>
            <if test="shopId != null">
                shop_id = #{shopId}
            </if>
        </where>
    </select>
</mapper>
oying-system/src/main/resources/mapper/message/MesMsgTemplateMapper.xml
New file
@@ -0,0 +1,30 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.oying.modules.message.mapper.MesMsgTemplateMapper">
    <resultMap id="BaseResultMap" type="com.oying.modules.message.domain.MesMsgTemplate">
        <id column="id" property="id"/>
        <result column="code" property="code"/>
        <result column="name" property="name"/>
        <result column="title_tpl" property="titleTpl"/>
        <result column="content_tpl" property="contentTpl"/>
        <result column="type" property="type"/>
        <result column="platform" property="platform"/>
        <result column="create_by" property="createBy"/>
        <result column="create_time" property="createTime"/>
        <result column="update_by" property="updateBy"/>
        <result column="update_time" property="updateTime"/>
    </resultMap>
    <sql id="Base_Column_List">
        id, code, name, title_tpl, content_tpl, type, platform, create_by, create_time, update_by, update_time
    </sql>
    <select id="findAll" resultMap="BaseResultMap">
        select
        <include refid="Base_Column_List"/>
        from mes_msg_template
        <where>
        </where>
        order by id desc
    </select>
</mapper>
oying-system/src/main/resources/mapper/message/MesOrderEvaluationMapper.xml
New file
@@ -0,0 +1,71 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.oying.modules.message.mapper.MesOrderEvaluationMapper">
    <resultMap id="BaseResultMap" type="com.oying.modules.message.domain.MesOrderEvaluation">
        <id column="id" property="id"/>
        <result column="order_id" property="orderId"/>
        <result column="buyer_id" property="buyerId"/>
        <result column="order_no" property="orderNo"/>
        <result column="shop_id" property="shopId"/>
        <result column="shop_name" property="shopName"/>
        <result column="rider_id" property="riderId"/>
        <result column="rider_name" property="riderName"/>
        <result column="goods_score" property="goodsScore"/>
        <result column="goods_content" property="goodsContent"/>
        <result column="goods_imgs" property="goodsImgs"/>
        <result column="shop_score" property="shopScore"/>
        <result column="shop_content" property="shopContent"/>
        <result column="rider_score" property="riderScore"/>
        <result column="rider_content" property="riderContent"/>
        <result column="is_deleted" property="isDeleted"/>
        <result column="create_by" property="createBy"/>
        <result column="create_time" property="createTime"/>
        <result column="update_by" property="updateBy"/>
        <result column="update_time" property="updateTime"/>
    </resultMap>
    <sql id="Base_Column_List">
        id, order_id, buyer_id, order_no, shop_id, shop_name, rider_id, rider_name, goods_score, goods_content, goods_imgs, shop_score, shop_content, rider_score, rider_content, is_deleted, create_by, create_time, update_by, update_time
    </sql>
    <insert id="addShopEvaluation" parameterType="com.oying.modules.message.domain.myDto.MesOrderEvaluationDto">
        INSERT INTO mes_order_evaluation
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="shopId != null">
                shop_id,
            </if>
            <if test="shopName != null and shopName != ''">
                shop_name,
            </if>
            <if test="shopScore != null">
                shop_score,
            </if>
            <if test="shopContent != null and shopContent != ''">
                shop_content,
            </if>
        </trim>
        <trim prefix="VALUES (" suffix=")" suffixOverrides=",">
            <if test="shopId != null">
                #{shopId},
            </if>
            <if test="shopName != null and shopName != ''">
                #{shopName},
            </if>
            <if test="shopScore != null">
                #{shopScore},
            </if>
            <if test="shopContent != null and shopContent != ''">
                #{shopContent},
            </if>
        </trim>
    </insert>
    <select id="findAll" resultMap="BaseResultMap">
        select
        <include refid="Base_Column_List"/>
        from mes_order_evaluation
        <where>
        </where>
        order by id desc
    </select>
</mapper>
oying-system/src/main/resources/mapper/message/MesOrderItemEvaluationMapper.xml
New file
@@ -0,0 +1,88 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.oying.modules.message.mapper.MesOrderItemEvaluationMapper">
    <resultMap id="BaseResultMap" type="com.oying.modules.message.domain.MesOrderItemEvaluation">
        <id column="id" property="id"/>
        <result column="order_eval_id" property="orderEvalId"/>
        <result column="order_item_id" property="orderItemId"/>
        <result column="goods_id" property="goodsId"/>
        <result column="goods_name" property="goodsName"/>
        <result column="goods_pic" property="goodsPic"/>
        <result column="score" property="score"/>
        <result column="content" property="content"/>
        <result column="imgs" property="imgs"/>
        <result column="create_by" property="createBy"/>
        <result column="create_time" property="createTime"/>
        <result column="update_by" property="updateBy"/>
        <result column="update_time" property="updateTime"/>
    </resultMap>
    <sql id="Base_Column_List">
        id, order_eval_id, order_item_id, goods_id, goods_name, goods_pic, score, content, imgs, create_by, create_time, update_by, update_time
    </sql>
    <insert id="addGoodsEvaluation" parameterType="com.oying.modules.message.domain.MesOrderItemEvaluationDto">
        INSERT INTO mes_order_item_evaluation
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="orderEvalId != null">
                order_eval_id,
            </if>
            <if test="orderItemId != null">
                order_item_id,
            </if>
            <if test="goodsId != null">
                goods_id,
            </if>
            <if test="goodsName != null and goodsName != ''">
                goods_name,
            </if>
            <if test="goodsPic != null and goodsPic != ''">
                goods_pic,
            </if>
            <if test="score != null">
                score,
            </if>
            <if test="content != null and content != ''">
                content,
            </if>
            <if test="imgs != null and imgs != ''">
                imgs,
            </if>
        </trim>
        <trim prefix="VALUES (" suffix=")" suffixOverrides=",">
            <if test="orderEvalId != null">
                #{orderEvalId},
            </if>
            <if test="orderItemId != null">
                #{orderItemId},
            </if>
            <if test="goodsId != null">
                #{goodsId},
            </if>
            <if test="goodsName != null and goodsName != ''">
                #{goodsName},
            </if>
            <if test="goodsPic != null and goodsPic != ''">
                #{goodsPic},
            </if>
            <if test="score != null">
                #{score},
            </if>
            <if test="content != null and content != ''">
                #{content},
            </if>
            <if test="imgs != null and imgs != ''">
                #{imgs},
            </if>
        </trim>
    </insert>
    <select id="findAll" resultMap="BaseResultMap">
        select
        <include refid="Base_Column_List"/>
        from mes_order_item_evaluation
        <where>
        </where>
        order by id desc
    </select>
</mapper>
oying-system/src/main/resources/mapper/message/MesRiderEvaluationMapper.xml
New file
@@ -0,0 +1,86 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.oying.modules.message.mapper.MesRiderEvaluationMapper">
    <resultMap id="BaseResultMap" type="com.oying.modules.message.domain.MesRiderEvaluation">
        <id column="id" property="id"/>
        <result column="order_id" property="orderId"/>
        <result column="order_no" property="orderNo"/>
        <result column="rider_id" property="riderId"/>
        <result column="rider_name" property="riderName"/>
        <result column="buyer_id" property="buyerId"/>
        <result column="score" property="score"/>
        <result column="content" property="content"/>
        <result column="create_by" property="createBy"/>
        <result column="create_time" property="createTime"/>
        <result column="update_by" property="updateBy"/>
        <result column="update_time" property="updateTime"/>
    </resultMap>
    <sql id="Base_Column_List">
        id, order_id, order_no, rider_id, rider_name, buyer_id, score, content, create_by, create_time, update_by, update_time
    </sql>
    <insert id="addRiderEvaluation" parameterType="com.oying.modules.message.domain.myDto.MesRiderEvaluationDto">
        INSERT INTO mes_rider_evaluation
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="orderId != null">
                order_id,
            </if>
            <if test="orderNo != null and orderNo != ''">
                order_no,
            </if>
            <if test="riderId != null">
                rider_id,
            </if>
            <if test="riderName != null and riderName != ''">
                rider_name,
            </if>
            <if test="buyerId != null and buyerId != ''">
                buyer_id,
            </if>
            <if test="score != null">
                score,
            </if>
            <if test="content != null and content != ''">
                content,
            </if>
            <if test="imgs != null and imgs != ''">
                imgs,
            </if>
        </trim>
        <trim prefix="VALUES (" suffix=")" suffixOverrides=",">
            <if test="orderId != null">
                #{orderId},
            </if>
            <if test="orderNo != null and orderNo != ''">
                #{orderNo},
            </if>
            <if test="riderId != null">
                #{riderId},
            </if>
            <if test="riderName != null and riderName != ''">
                #{riderName},
            </if>
            <if test="buyerId != null and buyerId != ''">
                #{buyerId},
            </if>
            <if test="score != null">
                #{score},
            </if>
            <if test="content != null and content != ''">
                #{content},
            </if>
            <if test="imgs != null and imgs != ''">
                #{imgs},
            </if>
        </trim>
    </insert>
    <select id="findAll" resultMap="BaseResultMap">
        select
        <include refid="Base_Column_List"/>
        from mes_rider_evaluation
        <where>
        </where>
        order by id desc
    </select>
</mapper>
oying-system/src/main/resources/mapper/message/MesShopReplyMapper.xml
New file
@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.oying.modules.message.mapper.MesShopReplyMapper">
    <resultMap id="BaseResultMap" type="com.oying.modules.message.domain.MesShopReply">
        <id column="id" property="id"/>
        <result column="evaluation_id" property="evaluationId"/>
        <result column="reply_type" property="replyType"/>
        <result column="content" property="content"/>
        <result column="create_by" property="createBy"/>
        <result column="create_time" property="createTime"/>
        <result column="update_by" property="updateBy"/>
        <result column="update_time" property="updateTime"/>
    </resultMap>
    <sql id="Base_Column_List">
        id, evaluation_id, reply_type, content, create_by, create_time, update_by, update_time
    </sql>
    <select id="findAll" resultMap="BaseResultMap">
        select
        <include refid="Base_Column_List"/>
        from mes_shop_reply
        <where>
        </where>
        order by id desc
    </select>
</mapper>
oying-system/src/main/resources/mapper/pc/product/ProductMapper.xml
@@ -38,9 +38,9 @@
    </sql>
    <select id="findAll" resultMap="BaseResultMap">
        select
        SELECT
        <include refid="Base_Column_List"/>
        from pc_product
        FROM pc_product
        <where>
            <if test="criteria.storeId != null">
                and store_id = #{criteria.storeId}
@@ -64,9 +64,20 @@
                and active = #{criteria.active}
            </if>
        </where>
        order by product_id desc
        <!--<if test="criteria.sortColumn != null and criteria.sortColumn != ''">
            order by ${criteria.sortColumn} ${criteria.sortDirection}
        </if>-->
        ORDER BY
        <choose>
            <!-- 价格升序 -->
            <when test="criteria.sortColumn == 'price' and criteria.sortDirection == 'asc'">price ASC</when>
            <!-- 价格降序 -->
            <when test="criteria.sortColumn == 'price' and criteria.sortDirection == 'desc'">price DESC</when>
            <!-- 创建时间降序(默认) -->
            <otherwise>create_time DESC</otherwise>
        </choose>
        <if test="criteria.limit != null">
            limit #{criteria.limit}
            LIMIT #{criteria.limit}
        </if>
    </select>
oying-system/src/main/resources/mapper/pc/store/StoreMapper.xml
@@ -23,6 +23,7 @@
        <result property="tags" column="tags"/>
        <result property="deliveryFee" column="delivery_fee"/>
        <result property="deliveryMinimum" column="delivery_minimum"/>
        <result property="packagingFee" column="packaging_fee"/>
        <result property="contactPhone" column="contact_phone"/>
        <result property="openTime" column="open_time"/>
        <result property="closeTime" column="close_time"/>
@@ -43,14 +44,14 @@
    <sql id="store_column_list">
        store_id, merchant_id, platform_category_id, store_type, store_code, store_name, business_scope, status, business_status, audit_status, logo_image_id, logo_image_url,
        cover_image_id, cover_image_url, description, tags, delivery_fee, delivery_minimum, contact_phone, open_time, close_time,
        cover_image_id, cover_image_url, description, tags, delivery_fee, delivery_minimum, packaging_fee, contact_phone, open_time, close_time,
        address, longitude, latitude, geo_hash, geo_point, coordinate_system, radius, returns, self_pickup, create_by, create_time, update_by, update_time, version
    </sql>
    <sql id="selectStoreVo">
        select
        store_id, merchant_id, platform_category_id, store_type, store_code, store_name, business_scope, status, business_status, audit_status, logo_image_id, logo_image_url,
        cover_image_id, cover_image_url, description, tags, delivery_fee, delivery_minimum, contact_phone, open_time, close_time,
        cover_image_id, cover_image_url, description, tags, delivery_fee, delivery_minimum, packaging_fee, contact_phone, open_time, close_time,
        address, longitude, latitude, geo_hash, geo_point, coordinate_system, radius, returns, self_pickup, create_by, create_time, update_by, update_time, version from pc_store
    </sql>