13404089107
2026-04-20 f4b6843a1b3990453d2aef6d87b5ac30723c5870
tcm-training-admin-backend/src/main/java/com/tcm/training/admin/points/service/PointsExchangeAppService.java
@@ -4,6 +4,9 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.tcm.training.admin.app.notice.service.AppSystemNoticeDispatchCommand;
import com.tcm.training.admin.app.notice.service.AppSystemNoticeDispatchService;
import com.tcm.training.admin.app.notice.service.AppSystemNoticeType;
import com.tcm.training.admin.common.DateTimes;
import com.tcm.training.admin.common.PageResponse;
import com.tcm.training.admin.common.PhoneMasker;
@@ -27,18 +30,23 @@
import java.net.URLEncoder;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
@Service
public class PointsExchangeAppService {
    private final PointsExchangeOrderMapper pointsExchangeOrderMapper;
    private final PointsExchangeOrderItemMapper pointsExchangeOrderItemMapper;
    private final AppSystemNoticeDispatchService appSystemNoticeDispatchService;
    public PointsExchangeAppService(PointsExchangeOrderMapper pointsExchangeOrderMapper,
                                    PointsExchangeOrderItemMapper pointsExchangeOrderItemMapper) {
                                    PointsExchangeOrderItemMapper pointsExchangeOrderItemMapper,
                                    AppSystemNoticeDispatchService appSystemNoticeDispatchService) {
        this.pointsExchangeOrderMapper = pointsExchangeOrderMapper;
        this.pointsExchangeOrderItemMapper = pointsExchangeOrderItemMapper;
        this.appSystemNoticeDispatchService = appSystemNoticeDispatchService;
    }
    public PageResponse<PointsExchangeOrderListItemVO> pageOrders(int page,
@@ -144,6 +152,7 @@
        order.setTrackingNo(request.getTrackingNo().trim());
        order.setShippedAt(now);
        pointsExchangeOrderMapper.updateById(order);
        dispatchOrderShippedNotice(order);
    }
    @Transactional
@@ -156,6 +165,30 @@
        item.setShippedAt(now);
        pointsExchangeOrderItemMapper.updateById(item);
        refreshOrderStatus(item.getOrderId(), request.getTrackingNo().trim(), now);
        dispatchOrderShippedNotice(requireOrder(item.getOrderId()));
    }
    /**
     * 在订单发货后为诊所用户发送订单状态更新通知。
     */
    private void dispatchOrderShippedNotice(PointsExchangeOrder order) {
        if (order == null || order.getId() == null || order.getClinicAppUserId() == null) {
            return;
        }
        AppSystemNoticeDispatchCommand command = new AppSystemNoticeDispatchCommand();
        command.setAppUserId(order.getClinicAppUserId());
        command.setNoticeTypeCode(AppSystemNoticeType.ORDER_STATUS_UPDATE);
        command.setTitle("订单状态更新");
        command.setContent("您的礼品兑换订单已发货");
        command.setReferenceType("POINTS_EXCHANGE_ORDER_SHIPPED");
        command.setReferenceId(order.getId());
        command.setRequireUserSetting(Boolean.TRUE);
        Map<String, String> payload = new LinkedHashMap<String, String>();
        payload.put("orderId", String.valueOf(order.getId()));
        payload.put("orderNo", defaultText(order.getOrderNo()));
        payload.put("trackingNo", defaultText(order.getTrackingNo()));
        command.setPayload(payload);
        appSystemNoticeDispatchService.createAndPush(command);
    }
    @Transactional