longz
2026-06-29 9d4cbff7464ebfd7803c2ce53ded49d0f73fe011
backend/src/main/java/com/sinata/appointment/service/MiniApprovalDetailApplicationService.java
@@ -5,6 +5,7 @@
import com.fasterxml.jackson.databind.ObjectMapper;
import com.sinata.appointment.config.MiniStpUtil;
import com.sinata.appointment.constants.AppointmentBizConstants;
import com.sinata.appointment.constants.AppointmentOrderStatus;
import com.sinata.appointment.constants.ApprovalNodeCode;
import com.sinata.appointment.constants.ApprovalTaskStatus;
import com.sinata.appointment.constants.BizErrorCode;
@@ -98,6 +99,9 @@
        vo.setOrderId(order.getId());
        vo.setOrderUuid(order.getUuid());
        vo.setOrderNo(order.getOrderNo());
        MpUser submitter = loadSubmitter(order.getSubmitterId());
        vo.setSubmitterName(resolveSubmitterName(submitter, order.getSubmitterId()));
        vo.setSubmitTime(order.getCreateTime());
        vo.setTaskStatus(currentUserTask == null ? null : currentUserTask.getTaskStatus());
        vo.setNodeCode(currentUserTask == null ? null : currentUserTask.getNodeCode());
        vo.setNodeName(resolveNodeName(currentUserTask == null ? null : currentUserTask.getNodeCode()));
@@ -109,6 +113,7 @@
        vo.setAccessAreaText(joinNames(parseStringList(order.getPassAccessAreaNames())));
        vo.setVisitTypeText(buildVisitTypeText(order));
        vo.setVisitReasonText(buildVisitReasonText(order));
        vo.setVisitReasonOther(order.getVisitReasonOther());
        vo.setVisitTimeText(buildVisitTimeText(order));
        vo.setPassAccessAreaIds(parseLongList(order.getPassAccessAreaIds()));
        vo.setPassAccessAreaNames(parseStringList(order.getPassAccessAreaNames()));
@@ -143,6 +148,10 @@
        vo.setPageMode(PAGE_MODE_GENERAL_READONLY);
        if (currentUserTask == null) {
            vo.setApprovalStatusText("已查看");
            return;
        }
        if (AppointmentOrderStatus.CANCELLED.equals(order.getStatus())) {
            vo.setApprovalStatusText("已取消");
            return;
        }
        if (ApprovalTaskStatus.APPROVED.equals(currentUserTask.getTaskStatus())) {
@@ -241,11 +250,10 @@
            vo.setGender(visitor == null ? null : visitor.getGender());
            vo.setCompanyName(visitor == null ? null : visitor.getVisitorCompany());
            vo.setMobileMasked(
                    MobileMaskUtil.mask(
                            firstNonBlank(
                                    row.getMobile(),
                                    visitor == null ? null : visitor.getVisitorMobile(),
                                    null)));
                    firstNonBlank(
                            row.getMobile(),
                            visitor == null ? null : visitor.getVisitorMobile(),
                            null));
            String idCardPlain =
                    StringUtils.hasText(row.getIdCardCipher())
                            ? SensitiveDataUtil.decryptIdCard(row.getIdCardCipher())
@@ -382,10 +390,6 @@
    private String buildVisitReasonText(AppointmentOrder order) {
        String code = trimToNull(order.getVisitReasonCode());
        if (AppointmentBizConstants.VISIT_REASON_OTHER.equalsIgnoreCase(code)) {
            String other = trimToNull(order.getVisitReasonOther());
            return StringUtils.hasText(other) ? "其他-" + other : "其他";
        }
        if (!StringUtils.hasText(code)) {
            return "-";
        }
@@ -404,9 +408,9 @@
        if (AppointmentBizConstants.TIME_MODE_SINGLE.equals(order.getVisitTimeMode())) {
            String slotLabel =
                    switch (trimToNull(order.getVisitTimeSlot())) {
                        case AppointmentBizConstants.TIME_SLOT_ALL_DAY -> "全天";
                        case AppointmentBizConstants.TIME_SLOT_AM -> "上午";
                        case AppointmentBizConstants.TIME_SLOT_PM -> "下午";
                        case AppointmentBizConstants.TIME_SLOT_ALL_DAY -> "00:00-23:59";
                        case AppointmentBizConstants.TIME_SLOT_AM -> "00:00-11:59";
                        case AppointmentBizConstants.TIME_SLOT_PM -> "12:00-23:59";
                        default -> "";
                    };
            if (order.getVisitStartDate() == null) {
@@ -447,6 +451,33 @@
        };
    }
    private MpUser loadSubmitter(Long submitterId) {
        if (submitterId == null) {
            return null;
        }
        List<MpUser> users =
                mpUserMapper.selectList(
                        new LambdaQueryWrapper<MpUser>()
                                .eq(MpUser::getDelFlag, 0)
                                .eq(MpUser::getId, submitterId)
                                .last("limit 1"));
        return users.isEmpty() ? null : users.get(0);
    }
    private String resolveSubmitterName(MpUser submitter, Long submitterId) {
        if (submitter != null) {
            String name = trimToNull(submitter.getNickName());
            if (StringUtils.hasText(name)) {
                return name;
            }
            String mobile = trimToNull(submitter.getMobile());
            if (StringUtils.hasText(mobile)) {
                return mobile;
            }
        }
        return submitterId == null ? "发起人" : "用户" + submitterId;
    }
    private List<Long> parseLongList(String json) {
        if (!StringUtils.hasText(json)) {
            return List.of();