package com.oying.modules.message.service.impl; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 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.dto.MesMsgRecordQueryCriteria; import com.oying.modules.message.domain.myDto.MesMsgRecordQueryOrderDto; import com.oying.modules.message.domain.myDto.MesMsgRecordQueryPollDto; import com.oying.modules.message.domain.myDto.MesMsgRecordQuerySystemDto; import com.oying.modules.message.mapper.MesMsgRecordMapper; import com.oying.modules.message.service.MesMsgRecordService; import com.oying.utils.FileUtil; import com.oying.utils.PageResult; import com.oying.utils.PageUtil; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.sql.Timestamp; import java.util.ArrayList; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; /** * @author 李萌 * @description 服务实现 * @date 2025-07-25 **/ @Service @RequiredArgsConstructor public class MesMsgRecordServiceImpl extends ServiceImpl implements MesMsgRecordService { private final MesMsgRecordMapper mesMsgRecordMapper; @Override public PageResult queryAll(MesMsgRecordQueryCriteria criteria, Page page) { return PageUtil.toPage(mesMsgRecordMapper.findAll(criteria, page)); } @Override public List 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 ids) { mesMsgRecordMapper.deleteBatchIds(ids); } @Override public void download(List all, HttpServletResponse response) throws IOException { List> list = new ArrayList<>(); for (MesMsgRecord mesMsgRecord : all) { Map 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 PollMes(Long platform, Long mestype) { return mesMsgRecordMapper.PollMes(platform, mestype); } @Override public void batchMarkRead(Long platform, List msgIds) { mesMsgRecordMapper.batchMarkRead(platform, msgIds); } @Override public PageResult queryAllSysNotice(MesMsgRecordQueryCriteria criteria, Page page) { return PageUtil.toPage(mesMsgRecordMapper.queryAllSysNotice(criteria, page)); } @Override public List queryorder(Long shopId) { return mesMsgRecordMapper.queryorder(shopId); } // @Override // @Transactional(rollbackFor = Exception.class) // public void insertOrderMsg(String orderNo, OrderStatusEnum content, Long shopId) { // MesMsgRecord record = new MesMsgRecord(); // record.setOrderNo(orderNo); // record.setContent(content.getValue()); // 使用枚举的描述作为消息内容 // record.setContentKey(String.valueOf(content.getKey()));// 使用枚举的描述作为消息内容key // record.setShopId(shopId); // record.setMsgType(MesTypeEnum.ORDER.getKey()); // 订单消息类型为2 // record.setIsRead(MesReadEnum.UNREAD.getKey()); // 默认未读 0 // record.setCreateTime(new Timestamp(System.currentTimeMillis())); // record.setUpdateTime(new Timestamp(System.currentTimeMillis())); // mesMsgRecordMapper.insert(record); // 让异常直接往外抛 // // } @Override public List PollMesAll(Long platform) { return mesMsgRecordMapper.PollMesAll(platform); } // 设置一个买家状态为下单 不存在则插入 买家id name 订单属性 店铺号 @Override @Transactional(rollbackFor = Exception.class) public void setBuyerStatusOrderSubmitted(String buyerId, String buyerName, String orderNo, Long shopId, String riderId, String riderName) { MesMsgRecord record = new MesMsgRecord(); record.setOrderNo(orderNo); record.setContent(OrderStatusEnum.MERCHANT_ORDER_SUBMITTED.getValue()); // 使用枚举的描述作为消息内容 record.setContentKey(String.valueOf(OrderStatusEnum.MERCHANT_ORDER_SUBMITTED.getKey()));// 使用枚举的描述作为消息内容key record.setBuyerId(buyerId != null ? buyerId : ""); // 处理空值情况 record.setMsgType(MesTypeEnum.ORDER.getKey()); // 订单消息类型为2 record.setIsRead(MesReadEnum.UNREAD.getKey()); // 默认未读 0 if (riderId != null) { record.setRiderId(riderId); } if (riderName != null) { record.setRiderName(riderName); } if (shopId != null) { record.setShopId(shopId); } if (buyerName != null) { record.setBuyerName(buyerName); } record.setCreateTime(new Timestamp(System.currentTimeMillis())); record.setUpdateTime(new Timestamp(System.currentTimeMillis())); mesMsgRecordMapper.insert(record); } @Override @Transactional(rollbackFor = Exception.class) public void setBuyerStatusOrderDelivered(String buyerId, String buyerName, String orderNo, Long shopId, String riderId, String riderName) { MesMsgRecord record = new MesMsgRecord(); record.setOrderNo(orderNo); record.setContent(OrderStatusEnum.BUYER_ORDER_STATUS_CHANGED.getValue()); // 使用枚举的描述作为消息内容 record.setContentKey(String.valueOf(OrderStatusEnum.BUYER_ORDER_STATUS_CHANGED.getKey()));// 使用枚举的描述作为消息内容key record.setBuyerId(buyerId != null ? buyerId : ""); // 处理空值情况 record.setMsgType(MesTypeEnum.ORDER.getKey()); // 订单消息类型为2 record.setIsRead(MesReadEnum.UNREAD.getKey()); // 默认未读 0 if (riderId != null) { record.setRiderId(riderId); } if (riderName != null) { record.setRiderName(riderName); } if (shopId != null) { record.setShopId(shopId); } if (buyerName != null) { record.setBuyerName(buyerName); } record.setCreateTime(new Timestamp(System.currentTimeMillis())); record.setUpdateTime(new Timestamp(System.currentTimeMillis())); mesMsgRecordMapper.insert(record); } @Override @Transactional(rollbackFor = Exception.class) public void setBuyerStatusOrderDelivered(String buyerId, String buyerName, String orderNo, Long shopId, OrderStatusEnum content, String riderId, String riderName) { //content只能设置为如下 "商品已送达" "订单已完成" "订单送达" if (content == null || (!content.equals(OrderStatusEnum.BUYER_ORDER_STATUS_CHANGED) && !content.equals(OrderStatusEnum.BUYER_ORDER_COMPLETED) && !content.equals(OrderStatusEnum.BUYER_ORDER_DELIVERED))) { throw new IllegalArgumentException("content只能设置为如下 \"商品已送达\" \"订单已完成\" \"订单送达\""); } MesMsgRecord record = new MesMsgRecord(); record.setOrderNo(orderNo); record.setContent(content.getValue()); // 使用枚举的描述作为消息内容 record.setContentKey(String.valueOf(content.getKey()));// 使用枚举的描述作为消息内容key record.setBuyerId(buyerId != null ? buyerId : ""); // 处理空值情况 record.setMsgType(MesTypeEnum.BUYER.getKey()); // record.setIsRead(MesReadEnum.UNREAD.getKey()); // 默认未读 0 if (riderId != null) { record.setRiderId(riderId); } if (riderName != null) { record.setRiderName(riderName); } if (shopId != null) { record.setShopId(shopId); } if (buyerName != null) { record.setBuyerName(buyerName); } record.setCreateTime(new Timestamp(System.currentTimeMillis())); record.setUpdateTime(new Timestamp(System.currentTimeMillis())); mesMsgRecordMapper.insert(record); } @Override @Transactional(rollbackFor = Exception.class) public void setSellerStatusOrderDelivered(String buyerId, String buyerName, String orderNo, Long shopId, OrderStatusEnum content, String riderId, String riderName) { //content只能为 "订单已提交" "商家已接单" 商家已备货" if (content == null || (content != OrderStatusEnum.MERCHANT_ORDER_SUBMITTED && content != OrderStatusEnum.MERCHANT_ACCEPTED && content != OrderStatusEnum.MERCHANT_PREPARED)) { throw new IllegalArgumentException("content只能为 \"订单已提交\" \"商家已接单\" 商家已备货\""); } MesMsgRecord record = new MesMsgRecord(); record.setOrderNo(orderNo); record.setContent(content.getValue()); // 使用枚举的描述作为消息内容 record.setContentKey(String.valueOf(content.getKey()));// 使用枚举的描述作为消息内容key record.setBuyerId(buyerId != null ? buyerId : ""); // 处理空值情况 record.setMsgType(MesTypeEnum.MERCHANT.getKey()); // record.setIsRead(MesReadEnum.UNREAD.getKey()); // 默认未读 0 if (riderId != null) { record.setRiderId(riderId); } if (riderName != null) { record.setRiderName(riderName); } if (shopId != null) { record.setShopId(shopId); } if (buyerName != null) { record.setBuyerName(buyerName); } record.setCreateTime(new Timestamp(System.currentTimeMillis())); record.setUpdateTime(new Timestamp(System.currentTimeMillis())); mesMsgRecordMapper.insert(record); } @Override @Transactional(rollbackFor = Exception.class) public void setRiderStatusOrderDelivered(String buyerId, String buyerName, String orderNo, Long shopId, OrderStatusEnum content, String riderId, String riderName) { //content只能为 "骑手已接单" "骑手已取货" "骑手已到店" "订单已取消" "距离最晚送达时间不足1小时" "距离最晚送达时间不足30分钟" if (content == null || (content != OrderStatusEnum.RIDER_PENDING_ACCEPTANCE && content != OrderStatusEnum.RIDER_PICKED_UP && content != OrderStatusEnum.RIDER_ARRIVED && content != OrderStatusEnum.RIDER_ORDER_CANCELLED && content != OrderStatusEnum.RIDER_DELIVERY_WARNING)) { throw new IllegalArgumentException("content只能为 \"骑手已接单\" \"骑手已取货\" \"骑手已到店\" \"订单已取消\" \"订单已超时\" "); } MesMsgRecord record = new MesMsgRecord(); record.setOrderNo(orderNo); record.setContent(content.getValue()); // 使用枚举的描述作为消息内容 record.setContentKey(String.valueOf(content.getKey()));// 使用枚举的描述作为消息内容key record.setBuyerId(buyerId != null ? buyerId : ""); // 处理空值情况 record.setMsgType(MesTypeEnum.RIDER.getKey()); // record.setIsRead(MesReadEnum.UNREAD.getKey()); // 默认未读 0 if (riderId != null) { record.setRiderId(riderId); } if (riderName != null) { record.setRiderName(riderName); } if (shopId != null) { record.setShopId(shopId); } if (buyerName != null) { record.setBuyerName(buyerName); } record.setCreateTime(new Timestamp(System.currentTimeMillis())); record.setUpdateTime(new Timestamp(System.currentTimeMillis())); mesMsgRecordMapper.insert(record); } @Override public List queryorderPending(Long shopId, String content) { return mesMsgRecordMapper.queryorderPending(shopId, content); } @Override public List queryBuyerOrderMessages(Long buyerId) { return mesMsgRecordMapper.queryBuyerOrderMessages(buyerId); } @Override public List queryBuyerOrderMessagesComplete(Long buyerId) { return mesMsgRecordMapper.queryBuyerOrderMessagesComplete(buyerId); } }