longz
2026-05-14 11029948d45564975527b2c21e9c2def1903164a
backend/src/main/java/com/sinata/appointment/service/IntegrationWechatService.java
@@ -39,6 +39,8 @@
            "BX49OBHvRcoYiCw0ZLqx04BiWQ9KaEQwuVth_Lh_M2A";
    private static final String APPROVAL_TODO_PAGE = "pages/reviewList/index";
    private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");
    private static final DateTimeFormatter TEMPLATE_TIME_FORMATTER =
            DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
    private final WechatMiniGateway wechatMiniGateway;
    private final MpUserMapper mpUserMapper;
@@ -65,7 +67,7 @@
        Map<String, String> templateData = new LinkedHashMap<>();
        templateData.put("thing1", approved ? "审核通过" : "审核未通过");
        templateData.put("thing2", abbreviate(resolveSubmitterName(submitter), 20));
        templateData.put("time3", buildVisitTimeText(order));
        templateData.put("time3", buildVisitTemplateTimeValue(order));
        templateData.put("thing4", abbreviate(buildVisitReasonText(order), 20));
        wechatMiniGateway.sendSubscribeMessage(
                submitter.getOpenId(), APPROVAL_RESULT_TEMPLATE_ID, APPROVAL_RESULT_PAGE, templateData);
@@ -83,7 +85,7 @@
        }
        Map<String, String> templateData = new LinkedHashMap<>();
        templateData.put("thing6", buildVisitorCountText(visitorCount));
        templateData.put("time18", buildVisitTimeText(order));
        templateData.put("time18", buildVisitTemplateTimeValue(order));
        templateData.put("thing20", abbreviate(buildNoticeBusinessTypeText(order, approved), 20));
        for (MpUser noticeUser : noticeUsers) {
            if (noticeUser == null || !StringUtils.hasText(noticeUser.getOpenId())) {
@@ -179,6 +181,25 @@
        };
    }
    private String buildVisitTemplateTimeValue(AppointmentOrder order) {
        LocalDate start = order.getVisitStartDate();
        LocalDate end = order.getVisitEndDate();
        if (start == null && end == null) {
            return "2099-12-31 00:00";
        }
        if (start == null) {
            start = end;
        }
        if (end == null) {
            end = start;
        }
        return switch (safeTrim(order.getVisitTimeMode())) {
            case "MULTI" -> start.atTime(0, 0).format(TEMPLATE_TIME_FORMATTER);
            default -> start.atTime(resolveTemplateHour(order.getVisitTimeSlot()), 0)
                    .format(TEMPLATE_TIME_FORMATTER);
        };
    }
    private String buildVisitReasonText(AppointmentOrder order) {
        String reasonCode = safeTrim(order.getVisitReasonCode());
        if (!StringUtils.hasText(reasonCode)) {
@@ -186,7 +207,7 @@
        }
        if (AppointmentBizConstants.VISIT_REASON_OTHER.equalsIgnoreCase(reasonCode)) {
            String other = safeTrim(order.getVisitReasonOther());
            return StringUtils.hasText(other) ? other : "其他";
            return StringUtils.hasText(other) ? "其他:" + other : "其他";
        }
        BizVisitReason reason =
                bizVisitReasonMapper.selectOne(
@@ -239,6 +260,15 @@
        };
    }
    private int resolveTemplateHour(String slot) {
        return switch (safeTrim(slot)) {
            case "AM" -> 9;
            case "PM" -> 14;
            case "ALL_DAY" -> 9;
            default -> 9;
        };
    }
    private String formatDate(LocalDate date) {
        return date.format(DATE_FORMATTER);
    }