package com.sinata.appointment.service;
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.sinata.appointment.constants.CacheNames;
|
import com.sinata.appointment.dto.MiniFieldConfigVo;
|
import com.sinata.appointment.dto.MiniLocalUnitVo;
|
import com.sinata.appointment.constants.MiniUserType;
|
import com.sinata.appointment.dto.MiniPassAccessAreaTreeVo;
|
import com.sinata.appointment.dto.MiniVisitReasonVo;
|
import com.sinata.appointment.dto.MiniVisitedUserVo;
|
import com.sinata.appointment.entity.BizFieldConfig;
|
import com.sinata.appointment.entity.MpPassAccessArea;
|
import com.sinata.appointment.entity.BizVisitReason;
|
import com.sinata.appointment.entity.MpPassLocalUnit;
|
import com.sinata.appointment.entity.MpUser;
|
import com.sinata.appointment.entity.SysDept;
|
import com.sinata.appointment.mapper.BizFieldConfigMapper;
|
import com.sinata.appointment.mapper.BizVisitReasonMapper;
|
import com.sinata.appointment.mapper.MpPassAccessAreaMapper;
|
import com.sinata.appointment.mapper.MpPassLocalUnitMapper;
|
import com.sinata.appointment.mapper.MpUserMapper;
|
import com.sinata.appointment.mapper.SysDeptMapper;
|
import java.util.ArrayList;
|
import java.util.Comparator;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
import java.util.stream.Collectors;
|
import lombok.RequiredArgsConstructor;
|
import org.springframework.cache.annotation.Cacheable;
|
import org.springframework.stereotype.Service;
|
|
@Service
|
@RequiredArgsConstructor
|
public class MiniLookupApplicationService {
|
|
private final BizFieldConfigMapper bizFieldConfigMapper;
|
private final BizVisitReasonMapper bizVisitReasonMapper;
|
private final MpPassAccessAreaMapper mpPassAccessAreaMapper;
|
private final MpPassLocalUnitMapper mpPassLocalUnitMapper;
|
private final MpUserMapper mpUserMapper;
|
private final SysDeptMapper sysDeptMapper;
|
|
@Cacheable(cacheNames = CacheNames.MINI_LOOKUP, key = "'" + CacheNames.MINI_LOOKUP_FIELD_CONFIGS_KEY + "'")
|
public List<MiniFieldConfigVo> listFieldConfigs() {
|
return bizFieldConfigMapper.selectList(
|
new LambdaQueryWrapper<BizFieldConfig>()
|
.eq(BizFieldConfig::getDelFlag, 0)
|
.orderByAsc(BizFieldConfig::getSortOrder)
|
.orderByAsc(BizFieldConfig::getId))
|
.stream()
|
.map(this::toFieldConfigVo)
|
.toList();
|
}
|
|
@Cacheable(cacheNames = CacheNames.MINI_LOOKUP, key = "'" + CacheNames.MINI_LOOKUP_VISIT_REASONS_KEY + "'")
|
public List<MiniVisitReasonVo> listVisitReasons() {
|
return bizVisitReasonMapper.selectList(
|
new LambdaQueryWrapper<BizVisitReason>()
|
.eq(BizVisitReason::getDelFlag, 0)
|
.eq(BizVisitReason::getEnabled, 1)
|
.orderByAsc(BizVisitReason::getSortOrder)
|
.orderByAsc(BizVisitReason::getId))
|
.stream()
|
.map(this::toVisitReasonVo)
|
.toList();
|
}
|
|
@Cacheable(cacheNames = CacheNames.MINI_LOOKUP, key = "'" + CacheNames.MINI_LOOKUP_PASS_ACCESS_AREA_TREE_KEY + "'")
|
public List<MiniPassAccessAreaTreeVo> listPassAccessAreaTree() {
|
List<MpPassAccessArea> rows =
|
mpPassAccessAreaMapper.selectList(
|
new LambdaQueryWrapper<MpPassAccessArea>()
|
.eq(MpPassAccessArea::getDelFlag, 0)
|
.orderByAsc(MpPassAccessArea::getPid)
|
.orderByAsc(MpPassAccessArea::getAreaName)
|
.orderByAsc(MpPassAccessArea::getId));
|
if (rows.isEmpty()) {
|
return List.of();
|
}
|
Map<Long, MiniPassAccessAreaTreeVo> nodeMap = new HashMap<>();
|
List<MiniPassAccessAreaTreeVo> roots = new ArrayList<>();
|
for (MpPassAccessArea row : rows) {
|
MiniPassAccessAreaTreeVo node = new MiniPassAccessAreaTreeVo();
|
node.setId(row.getId());
|
node.setAreaName(row.getAreaName());
|
nodeMap.put(row.getId(), node);
|
}
|
for (MpPassAccessArea row : rows) {
|
MiniPassAccessAreaTreeVo current = nodeMap.get(row.getId());
|
if (row.getPid() == null || row.getPid() == 0) {
|
roots.add(current);
|
continue;
|
}
|
MiniPassAccessAreaTreeVo parent = nodeMap.get(row.getPid());
|
if (parent == null) {
|
roots.add(current);
|
continue;
|
}
|
parent.getChildren().add(current);
|
}
|
sortAreaTree(roots);
|
return roots;
|
}
|
|
private void sortAreaTree(List<MiniPassAccessAreaTreeVo> nodes) {
|
nodes.sort(
|
Comparator.comparing(
|
MiniPassAccessAreaTreeVo::getAreaName,
|
Comparator.nullsLast(String::compareTo))
|
.thenComparing(MiniPassAccessAreaTreeVo::getId));
|
for (MiniPassAccessAreaTreeVo node : nodes) {
|
sortAreaTree(node.getChildren());
|
}
|
}
|
|
public List<MiniVisitedUserVo> searchVisitedUsersByExactName(String realName) {
|
String name = realName == null ? "" : realName.trim();
|
if (name.isEmpty()) {
|
return List.of();
|
}
|
List<MpUser> users =
|
mpUserMapper.selectList(
|
new LambdaQueryWrapper<MpUser>()
|
.eq(MpUser::getDelFlag, 0)
|
.eq(MpUser::getStatus, 1)
|
.eq(MpUser::getUserType, MiniUserType.EMPLOYEE)
|
.eq(MpUser::getNickName, name)
|
.orderByAsc(MpUser::getId));
|
if (users.isEmpty()) {
|
return List.of();
|
}
|
|
List<Long> deptIds =
|
users.stream().map(MpUser::getDeptId).filter(id -> id != null && id > 0).distinct().toList();
|
Map<Long, String> deptNameMap = new HashMap<>();
|
if (!deptIds.isEmpty()) {
|
List<SysDept> depts =
|
sysDeptMapper.selectList(
|
new LambdaQueryWrapper<SysDept>()
|
.eq(SysDept::getDelFlag, 0)
|
.in(SysDept::getId, deptIds));
|
deptNameMap =
|
depts.stream().collect(Collectors.toMap(SysDept::getId, d -> d.getDeptName() == null ? "" : d.getDeptName(), (a, b) -> a));
|
}
|
final Map<Long, String> finalDeptNameMap = deptNameMap;
|
return users.stream().map(u -> toVo(u, finalDeptNameMap)).collect(Collectors.toList());
|
}
|
|
public List<MiniLocalUnitVo> searchLocalUnitsByExactName(String unitName) {
|
String name = unitName == null ? "" : unitName.trim();
|
if (name.isEmpty()) {
|
return List.of();
|
}
|
return mpPassLocalUnitMapper.selectList(
|
new LambdaQueryWrapper<MpPassLocalUnit>()
|
.eq(MpPassLocalUnit::getDelFlag, 0)
|
.eq(MpPassLocalUnit::getUnitName, name)
|
.orderByAsc(MpPassLocalUnit::getId))
|
.stream()
|
.map(this::toLocalUnitVo)
|
.toList();
|
}
|
|
private MiniVisitedUserVo toVo(MpUser user, Map<Long, String> deptNameMap) {
|
MiniVisitedUserVo vo = new MiniVisitedUserVo();
|
vo.setId(user.getId());
|
vo.setRealName(user.getNickName());
|
vo.setDeptName(user.getDeptId() == null ? "" : deptNameMap.getOrDefault(user.getDeptId(), ""));
|
return vo;
|
}
|
|
private MiniVisitReasonVo toVisitReasonVo(BizVisitReason row) {
|
MiniVisitReasonVo vo = new MiniVisitReasonVo();
|
vo.setId(row.getId());
|
vo.setReasonCode(row.getReasonCode());
|
vo.setReasonName(row.getReasonName());
|
vo.setSortOrder(row.getSortOrder());
|
return vo;
|
}
|
|
private MiniFieldConfigVo toFieldConfigVo(BizFieldConfig row) {
|
MiniFieldConfigVo vo = new MiniFieldConfigVo();
|
vo.setFieldCode(row.getFieldCode());
|
vo.setFieldName(row.getFieldName());
|
vo.setVisible(row.getVisible());
|
vo.setRequiredFlag(row.getRequiredFlag());
|
vo.setSortOrder(row.getSortOrder());
|
return vo;
|
}
|
|
private MiniLocalUnitVo toLocalUnitVo(MpPassLocalUnit row) {
|
MiniLocalUnitVo vo = new MiniLocalUnitVo();
|
vo.setId(row.getId());
|
vo.setUnitName(row.getUnitName());
|
return vo;
|
}
|
}
|