package jnpf.base.service.impl; import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import jnpf.base.UserInfo; import jnpf.base.entity.ModuleEntity; import jnpf.base.entity.ModuleUserNumEntity; import jnpf.base.entity.SystemEntity; import jnpf.base.mapper.ModuleUseNumMapper; import jnpf.base.mapper.SystemMapper; import jnpf.base.model.module.MenuSelectByUseNumVo; import jnpf.base.service.ModuleUseNumService; import jnpf.base.service.SuperServiceImpl; import jnpf.constant.JnpfConst; import jnpf.util.JsonUtil; import jnpf.util.UserProvider; import jnpf.util.context.RequestContext; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.*; import java.util.stream.Collectors; @Service public class ModuleUseNumServiceImpl extends SuperServiceImpl implements ModuleUseNumService { @Autowired private SystemMapper systemMapper; @Override public Boolean insertOrUpdateUseNum(String moduleId) { return this.baseMapper.insertOrUpdateUseNum(moduleId); } @Override public void deleteUseNum(String ModuleId) { this.baseMapper.deleteUseNum(ModuleId); } /** * 获取常用数据 * * @param type 0-最近常用 1-最近使用 * @return 返回常用数据 */ @Override public List getMenuUseNum(Integer type, List authMenuList, List allMenu) { if (CollectionUtil.isEmpty(authMenuList)) { return Collections.EMPTY_LIST; } boolean isPc = RequestContext.isOrignPc(); String category = isPc ? JnpfConst.WEB : JnpfConst.APP; String appCode = RequestContext.getAppCode(); SystemEntity infoByEnCode = systemMapper.getInfoByEnCode(appCode); UserInfo user = UserProvider.getUser(); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(ModuleUserNumEntity::getUserId, user.getUserId()); List moduleUserNumEntities = this.list(queryWrapper); if (moduleUserNumEntities == null || moduleUserNumEntities.isEmpty()) { return new ArrayList(); } List moduleUserNumEntityList = new ArrayList<>(); if (type.equals(0)) { moduleUserNumEntityList = moduleUserNumEntities.stream() .sorted(Comparator.comparing(ModuleUserNumEntity::getUseNum).reversed()) .distinct() .collect(Collectors.toList()); } else if (type.equals(1)) { moduleUserNumEntityList = moduleUserNumEntities.stream() .sorted(Comparator.comparing(ModuleUserNumEntity::getLastModifyTime, Comparator.nullsLast(Comparator.naturalOrder())).reversed()) .distinct() .collect(Collectors.toList()); } if (CollectionUtil.isEmpty(moduleUserNumEntityList)) { return new ArrayList<>(); } List menuSelectByUseNumVos = new ArrayList<>(); Map moduleEntityMap = allMenu.stream().collect(Collectors.toMap(ModuleEntity::getId, t -> t)); for (ModuleUserNumEntity moduleUserNumEntity : moduleUserNumEntityList) { ModuleEntity info = moduleEntityMap.get(moduleUserNumEntity.getModuleId()); if (info != null && Objects.equals(info.getEnabledMark(), 1)) { MenuSelectByUseNumVo vo = JsonUtil.getJsonToBean(info, MenuSelectByUseNumVo.class); vo.setHasChildren(false); vo.setSystemCode(moduleUserNumEntity.getSystemCode()); vo.setCategory(info.getCategory()); if (menuSelectByUseNumVos.size() >= 12) break; if (authMenuList.contains(vo.getId()) && category.equals(vo.getCategory())) { if (vo.getSystemId().equals(infoByEnCode.getId()) || JnpfConst.MAIN_SYSTEM_CODE.equals(infoByEnCode.getEnCode())) { menuSelectByUseNumVos.add(vo); } } } } return menuSelectByUseNumVos; } }