package com.ruoyi.system.service.impl; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.system.domain.SysVisitorConfig; import com.ruoyi.system.dto.SysVisitorConfigSaveRequest; import com.ruoyi.system.mapper.SysVisitorConfigMapper; import com.ruoyi.system.service.ISysVisitorConfigService; import com.ruoyi.system.vo.PrintFieldOptionVO; import com.ruoyi.system.vo.SysVisitorConfigVO; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; /** * 访客系统配置服务实现 * * @author ruoyi */ @Service public class SysVisitorConfigServiceImpl implements ISysVisitorConfigService { private static final List DEFAULT_PRINT_FIELDS = Collections.unmodifiableList( Arrays.asList("visitorName", "idCard", "appointmentTimeRange", "interviewee")); private static final Map PRINT_FIELD_LABELS; static { Map labels = new LinkedHashMap(); labels.put("visitorName", "访客姓名"); labels.put("idCard", "身份证号"); labels.put("appointmentTimeRange", "预约时间范围"); labels.put("interviewee", "被访者"); labels.put("visitorFaceImage", "访客人脸图片"); labels.put("registerNo", "登记编号"); labels.put("plateNo", "车牌号"); labels.put("visitReason", "来访事由"); labels.put("visitArea", "访问区域"); labels.put("receiverName", "接待人"); labels.put("registerTime", "登记时间"); PRINT_FIELD_LABELS = Collections.unmodifiableMap(labels); } @Autowired private SysVisitorConfigMapper visitorConfigMapper; @Override public SysVisitorConfigVO selectConfig() { return toVO(getCurrentOrDefault()); } @Override public SysVisitorConfigVO saveConfig(SysVisitorConfigSaveRequest request, String username) { if (request == null) { throw new ServiceException("配置内容不能为空"); } SysVisitorConfig current = visitorConfigMapper.selectCurrent(); boolean insert = current == null; SysVisitorConfig config = insert ? buildDefaultConfig() : current; mergeConfig(config, request); if (insert) { config.setCreateBy(username); visitorConfigMapper.insertConfig(config); } else { config.setUpdateBy(username); visitorConfigMapper.updateConfig(config); } return selectConfig(); } private void mergeConfig(SysVisitorConfig config, SysVisitorConfigSaveRequest request) { if (request.getOnsiteRegistrationEnabled() != null) { config.setOnsiteRegistrationEnabled(request.getOnsiteRegistrationEnabled()); } if (request.getAppointmentRegistrationEnabled() != null) { config.setAppointmentRegistrationEnabled(request.getAppointmentRegistrationEnabled()); } if (request.getRegisterReceiverConfirmEnabled() != null) { config.setRegisterReceiverConfirmEnabled(request.getRegisterReceiverConfirmEnabled()); } if (request.getSignReceiverConfirmEnabled() != null) { config.setSignReceiverConfirmEnabled(request.getSignReceiverConfirmEnabled()); } if (request.getFaceCompareEnabled() != null) { config.setFaceCompareEnabled(request.getFaceCompareEnabled()); } if (request.getFaceCaptureEnabled() != null) { config.setFaceCaptureEnabled(request.getFaceCaptureEnabled()); } if (request.getManualIdCardEnabled() != null) { config.setManualIdCardEnabled(request.getManualIdCardEnabled()); } if (request.getPrintFields() != null) { config.setPrintFields(joinPrintFields(request.getPrintFields())); } if (request.getSystemName() != null) { String systemName = StringUtils.trim(request.getSystemName()); if (StringUtils.isEmpty(systemName)) { throw new ServiceException("系统名称不能为空"); } config.setSystemName(systemName); } if (request.getLogoUrl() != null) { config.setLogoUrl(StringUtils.trim(request.getLogoUrl())); } if (request.getServiceProvider() != null) { config.setServiceProvider(StringUtils.trim(request.getServiceProvider())); } if (request.getSupportPhone() != null) { config.setSupportPhone(StringUtils.trim(request.getSupportPhone())); } if (request.getVisitorMachineEntryEnabled() != null) { config.setVisitorMachineEntryEnabled(request.getVisitorMachineEntryEnabled()); } } private String joinPrintFields(List printFields) { LinkedHashSet fields = new LinkedHashSet(); for (String field : printFields) { String fieldCode = StringUtils.trim(field); if (StringUtils.isEmpty(fieldCode)) { continue; } if (!PRINT_FIELD_LABELS.containsKey(fieldCode)) { throw new ServiceException("不支持的打印字段:" + fieldCode); } if (!fields.add(fieldCode)) { throw new ServiceException("打印字段不能重复:" + fieldCode); } } if (fields.isEmpty()) { throw new ServiceException("打印凭条至少选择一个字段"); } return String.join(",", fields); } private SysVisitorConfig getCurrentOrDefault() { SysVisitorConfig config = visitorConfigMapper.selectCurrent(); return config == null ? buildDefaultConfig() : config; } private SysVisitorConfig buildDefaultConfig() { SysVisitorConfig config = new SysVisitorConfig(); config.setOnsiteRegistrationEnabled(true); config.setAppointmentRegistrationEnabled(true); config.setRegisterReceiverConfirmEnabled(true); config.setSignReceiverConfirmEnabled(true); config.setFaceCompareEnabled(true); config.setFaceCaptureEnabled(true); config.setManualIdCardEnabled(true); config.setPrintFields(String.join(",", DEFAULT_PRINT_FIELDS)); config.setSystemName("自主访客登记管理平台"); config.setServiceProvider("XXX"); config.setSupportPhone("XXX"); config.setVisitorMachineEntryEnabled(true); return config; } private SysVisitorConfigVO toVO(SysVisitorConfig config) { SysVisitorConfigVO vo = new SysVisitorConfigVO(); vo.setConfigId(config.getConfigId()); vo.setOnsiteRegistrationEnabled(config.getOnsiteRegistrationEnabled()); vo.setAppointmentRegistrationEnabled(config.getAppointmentRegistrationEnabled()); vo.setRegisterReceiverConfirmEnabled(config.getRegisterReceiverConfirmEnabled()); vo.setSignReceiverConfirmEnabled(config.getSignReceiverConfirmEnabled()); vo.setFaceCompareEnabled(config.getFaceCompareEnabled()); vo.setFaceCaptureEnabled(config.getFaceCaptureEnabled()); vo.setManualIdCardEnabled(config.getManualIdCardEnabled()); vo.setPrintFields(parsePrintFields(config.getPrintFields())); vo.setPrintFieldOptions(buildPrintFieldOptions()); vo.setSystemName(config.getSystemName()); vo.setLogoUrl(config.getLogoUrl()); vo.setServiceProvider(config.getServiceProvider()); vo.setSupportPhone(config.getSupportPhone()); vo.setVisitorMachineEntryEnabled(config.getVisitorMachineEntryEnabled()); return vo; } private List parsePrintFields(String printFields) { List fields = StringUtils.str2List(printFields, ",", true, true); return fields.isEmpty() ? DEFAULT_PRINT_FIELDS : fields; } private List buildPrintFieldOptions() { List options = new ArrayList(); for (Map.Entry entry : PRINT_FIELD_LABELS.entrySet()) { options.add(new PrintFieldOptionVO(entry.getKey(), entry.getValue())); } return options; } }