| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245 |
- package com.jeesite.modules.mes.service;
- import java.text.Collator;
- import java.util.LinkedHashMap;
- import java.util.List;
- import java.util.Locale;
- import java.util.Map;
- import javax.annotation.Resource;
- import org.apache.shiro.subject.Subject;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import org.springframework.transaction.annotation.Transactional;
- import com.jeesite.common.cache.CacheUtils;
- import com.jeesite.common.collect.ListUtils;
- import com.jeesite.common.collect.MapUtils;
- import com.jeesite.common.config.Global;
- import com.jeesite.common.entity.Page;
- import com.jeesite.common.lang.StringUtils;
- import com.jeesite.common.service.CrudService;
- import com.jeesite.modules.file.entity.FileUpload;
- import com.jeesite.modules.file.service.FileUploadService;
- import com.jeesite.modules.file.utils.FileUploadUtils;
- import com.jeesite.modules.mes.dao.MesIconsDao;
- import com.jeesite.modules.mes.entity.MesIcons;
- import com.jeesite.modules.mes.entity.MesIconsCategory;
- import com.jeesite.modules.sys.utils.UserUtils;
- /**
- * 功能模块Service
- * @author hzd
- * @version 2023-07-05
- */
- @Service
- public class MesIconsService extends CrudService<MesIconsDao, MesIcons> {
- /** 参数键:PDA 功能模块是否按分类分组(0=扁平 1=分组) */
- public static final String CONFIG_ICONS_GROUPED = "mes.icons.grouped";
- @Autowired
- private MesIconsCategoryService mesIconsCategoryService;
- @Resource
- private FileUploadService fileUploadService;
- /**
- * 获取单条数据
- * @param mesIcons
- * @return
- */
- @Override
- public MesIcons get(MesIcons mesIcons) {
- return super.get(mesIcons);
- }
-
- /**
- * 查询分页数据
- * @param mesIcons 查询条件
- * @param mesIcons.page 分页对象
- * @return
- */
- @Override
- public Page<MesIcons> findPage(MesIcons mesIcons) {
- return super.findPage(mesIcons);
- }
-
- /**
- * 查询列表数据
- * @param mesIcons
- * @return
- */
- @Override
- public List<MesIcons> findList(MesIcons mesIcons) {
- return super.findList(mesIcons);
- }
-
- /**
- * 保存数据(插入或更新)
- * @param mesIcons
- */
- @Override
- @Transactional
- public void save(MesIcons mesIcons) {
- if (StringUtils.isBlank(mesIcons.getCategoryId())) {
- mesIcons.setCategoryId(MesIconsCategory.DEFAULT_ID);
- }
- super.save(mesIcons);
- // 保存上传图片
- FileUploadUtils.saveFileUpload(mesIcons, mesIcons.getId(), "mesIcons_image");
- CacheUtils.put("mes_icons","icons","");
- }
-
- /**
- * 更新状态
- * @param mesIcons
- */
- @Override
- @Transactional
- public void updateStatus(MesIcons mesIcons) {
- super.updateStatus(mesIcons);
- CacheUtils.put("mes_icons","icons","");
- }
-
- /**
- * 删除数据
- * @param mesIcons
- */
- @Override
- @Transactional
- public void delete(MesIcons mesIcons) {
- super.delete(mesIcons);
- CacheUtils.put("mes_icons","icons","");
- }
- /**
- * PDA 功能模块列表(分组 / 扁平由参数设置 mes.icons.grouped 控制)
- * @param mesIcons 查询条件
- * @param host 图片 URL 前缀
- */
- public List<Map<String, Object>> findIconsData(MesIcons mesIcons, String host) {
- return findIconsData(mesIcons, host, isIconsGroupedEnabled());
- }
- /**
- * 是否启用按分类分组(参数设置:mes.icons.grouped,1=分组,0=扁平)
- */
- public boolean isIconsGroupedEnabled() {
- return "1".equals(Global.getConfig(CONFIG_ICONS_GROUPED, "1"));
- }
- /**
- * PDA 功能模块列表
- * @param grouped true=按分类分组,false=扁平列表(兼容旧版)
- */
- private List<Map<String, Object>> findIconsData(MesIcons mesIcons, String host, boolean grouped) {
- List<MesIcons> list = findList(mesIcons);
- Subject subject = UserUtils.getSubject();
- if (!grouped) {
- return buildFlatIcons(list, host, subject);
- }
- return buildGroupedIcons(list, host, subject);
- }
- /**
- * 扁平列表(旧版格式)
- */
- private List<Map<String, Object>> buildFlatIcons(List<MesIcons> list, String host, Subject subject) {
- List<Map<String, Object>> mapList = ListUtils.newArrayList();
- for (MesIcons mi : list) {
- if (subject.isPermitted(mi.getAuth())) {
- mapList.add(buildModuleMap(mi, host));
- }
- }
- return mapList;
- }
- /**
- * 按分类分组列表(新版格式)
- */
- private List<Map<String, Object>> buildGroupedIcons(List<MesIcons> list, String host, Subject subject) {
- MesIconsCategory categoryQuery = new MesIconsCategory();
- categoryQuery.setStatus(MesIconsCategory.STATUS_NORMAL);
- List<MesIconsCategory> categories = mesIconsCategoryService.findList(categoryQuery);
- Map<String, List<Map<String, Object>>> grouped = new LinkedHashMap<>();
- for (MesIconsCategory category : categories) {
- grouped.put(category.getId(), ListUtils.newArrayList());
- }
- for (MesIcons mi : list) {
- if (!subject.isPermitted(mi.getAuth())) {
- continue;
- }
- String categoryId = resolveCategoryId(mi.getCategoryId(), grouped);
- grouped.computeIfAbsent(categoryId, k -> ListUtils.newArrayList()).add(buildModuleMap(mi, host));
- }
- List<Map<String, Object>> result = ListUtils.newArrayList();
- for (MesIconsCategory category : categories) {
- List<Map<String, Object>> children = grouped.get(category.getId());
- if (ListUtils.isEmpty(children)) {
- continue;
- }
- sortChildrenByTitle(children);
- Map<String, Object> categoryMap = MapUtils.newHashMap();
- categoryMap.put("categoryId", category.getId());
- categoryMap.put("title", category.getTitle());
- categoryMap.put("sort", category.getSortOrder() != null ? category.getSortOrder() : 0);
- categoryMap.put("children", children);
- result.add(categoryMap);
- }
- return result;
- }
- /**
- * children 按 title 字典序排列(中文按拼音)
- */
- private void sortChildrenByTitle(List<Map<String, Object>> children) {
- if (ListUtils.isEmpty(children) || children.size() <= 1) {
- return;
- }
- Collator collator = Collator.getInstance(Locale.CHINA);
- collator.setStrength(Collator.PRIMARY);
- children.sort((a, b) -> collator.compare(
- StringUtils.defaultString((String) a.get("title")),
- StringUtils.defaultString((String) b.get("title"))));
- }
- /**
- * 解析模块所属分类,无效分类归入「其他」
- */
- private String resolveCategoryId(String categoryId, Map<String, List<Map<String, Object>>> grouped) {
- if (StringUtils.isNotBlank(categoryId) && grouped.containsKey(categoryId)) {
- return categoryId;
- }
- return MesIconsCategory.DEFAULT_ID;
- }
- /**
- * 构建单个功能模块数据
- */
- private Map<String, Object> buildModuleMap(MesIcons mi, String host) {
- Map<String, Object> map = MapUtils.newHashMap();
- map.put("title", mi.getTitle());
- map.put("mode", mi.getMode());
- map.put("img", buildModuleImageUrl(mi.getId(), host));
- return map;
- }
- /**
- * 获取模块图标完整 URL
- */
- private String buildModuleImageUrl(String bizKey, String host) {
- FileUpload fu = new FileUpload();
- fu.setBizKey(bizKey);
- fu.setBizType("mesIcons_image");
- List<FileUpload> finfo = fileUploadService.findList(fu);
- if (ListUtils.isNotEmpty(finfo)) {
- return host + finfo.get(0).getFileUrl();
- }
- return host;
- }
-
- }
|