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.MsgStatusEnum;
|
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.modules.sh.domain.Order;
|
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<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, Long mestype) {
|
return mesMsgRecordMapper.PollMes(platform, mestype);
|
}
|
|
@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
|
// @Transactional(rollbackFor = Exception.class)
|
// public void insertOrderMsg(String orderNo, MsgStatusEnum content, Long shopId) {
|
// MesMsgRecord record = new MesMsgRecord();
|
// record.setOrderNo(orderNo);
|
// record.setContent(content.getValue()); // 使用枚举的描述作为消息内容
|
// record.setContentKey(String.valueOf(content.getKey()));// 使用枚举的描述作为消息内容key
|
// record.setShopId(shopId);
|
// record.setMsgType(MesTypeEnum.ORDER.getKey()); // 订单消息类型为2
|
// record.setIsRead(MesReadEnum.UNREAD.getKey()); // 默认未读 0
|
// record.setCreateTime(new Timestamp(System.currentTimeMillis()));
|
// record.setUpdateTime(new Timestamp(System.currentTimeMillis()));
|
// mesMsgRecordMapper.insert(record); // 让异常直接往外抛
|
//
|
// }
|
|
|
@Override
|
public List<MesMsgRecordQueryPollDto> PollMesAll(Long platform) {
|
return mesMsgRecordMapper.PollMesAll(platform);
|
}
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public void insertOrderMsg(Order order, MsgStatusEnum content, MesTypeEnum typeEnum) {
|
MesMsgRecord record = new MesMsgRecord();
|
record.setOrderNo(order.getOrderNum());
|
record.setContent(content.getValue()); // 使用枚举的描述作为消息内容
|
record.setContentKey(String.valueOf(content.getKey()));// 使用枚举的描述作为消息内容key
|
record.setBuyerId(String.valueOf(order.getUserId())); // 处理空值情况
|
record.setBuyerName(order.getUsername());
|
record.setRiderId(order.getRiderId() != null ? String.valueOf(order.getRiderId()) : null);
|
record.setRiderName(order.getRiderName() != null ? order.getRiderName() : null);
|
record.setShopId(order.getStoreId());
|
record.setMsgType(typeEnum.getKey()); // 订单消息类型为2
|
record.setIsRead(MesReadEnum.UNREAD.getKey()); // 默认未读 0
|
record.setCreateTime(new Timestamp(System.currentTimeMillis()));
|
record.setUpdateTime(new Timestamp(System.currentTimeMillis()));
|
mesMsgRecordMapper.insert(record);
|
}
|
|
// 设置一个买家状态为下单 不存在则插入 买家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(MsgStatusEnum.MERCHANT_ORDER_SUBMITTED.getValue()); // 使用枚举的描述作为消息内容
|
record.setContentKey(String.valueOf(MsgStatusEnum.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(MsgStatusEnum.BUYER_ORDER_STATUS_CHANGED.getValue()); // 使用枚举的描述作为消息内容
|
record.setContentKey(String.valueOf(MsgStatusEnum.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, MsgStatusEnum content, String riderId, String riderName) {
|
//content只能设置为如下 "商品已送达" "订单已完成" "订单送达"
|
if (content == null ||
|
(!content.equals(MsgStatusEnum.BUYER_ORDER_STATUS_CHANGED) &&
|
!content.equals(MsgStatusEnum.BUYER_ORDER_COMPLETED) &&
|
!content.equals(MsgStatusEnum.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, MsgStatusEnum content, String riderId, String riderName) {
|
//content只能为 "订单已提交" "商家已接单" 商家已备货"
|
if (content == null ||
|
(content != MsgStatusEnum.MERCHANT_ORDER_SUBMITTED &&
|
content != MsgStatusEnum.MERCHANT_ACCEPTED &&
|
content != MsgStatusEnum.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, MsgStatusEnum content, String riderId, String riderName) {
|
//content只能为 "骑手已接单" "骑手已取货" "骑手已到店" "订单已取消" "距离最晚送达时间不足1小时" "距离最晚送达时间不足30分钟"
|
if (content == null ||
|
(content != MsgStatusEnum.RIDER_PENDING_ACCEPTANCE &&
|
content != MsgStatusEnum.RIDER_PICKED_UP &&
|
content != MsgStatusEnum.RIDER_ARRIVED &&
|
content != MsgStatusEnum.RIDER_ORDER_CANCELLED && content != MsgStatusEnum.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<MesMsgRecordQueryOrderDto> queryorderPending(Long shopId, String content) {
|
return mesMsgRecordMapper.queryorderPending(shopId, content);
|
}
|
|
@Override
|
public List<MesMsgRecordQueryOrderDto> queryBuyerOrderMessages(Long buyerId) {
|
return mesMsgRecordMapper.queryBuyerOrderMessages(buyerId);
|
}
|
|
@Override
|
public List<MesMsgRecordQueryOrderDto> queryBuyerOrderMessagesComplete(Long buyerId) {
|
return mesMsgRecordMapper.queryBuyerOrderMessagesComplete(buyerId);
|
}
|
}
|