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<String> DEFAULT_PRINT_FIELDS = Collections.unmodifiableList(
|
Arrays.asList("visitorName", "idCard", "appointmentTimeRange", "interviewee"));
|
|
private static final Map<String, String> PRINT_FIELD_LABELS;
|
|
static
|
{
|
Map<String, String> labels = new LinkedHashMap<String, String>();
|
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", "访问区域");
|
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<String> printFields)
|
{
|
LinkedHashSet<String> fields = new LinkedHashSet<String>();
|
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<String> parsePrintFields(String printFields)
|
{
|
List<String> fields = StringUtils.str2List(printFields, ",", true, true);
|
return fields.isEmpty() ? DEFAULT_PRINT_FIELDS : fields;
|
}
|
|
private List<PrintFieldOptionVO> buildPrintFieldOptions()
|
{
|
List<PrintFieldOptionVO> options = new ArrayList<PrintFieldOptionVO>();
|
for (Map.Entry<String, String> entry : PRINT_FIELD_LABELS.entrySet())
|
{
|
options.add(new PrintFieldOptionVO(entry.getKey(), entry.getValue()));
|
}
|
return options;
|
}
|
}
|