| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406 |
- package jnpf.base.controller;
- import cn.hutool.core.collection.CollectionUtil;
- import com.alibaba.fastjson.JSON;
- import com.alibaba.fastjson.JSONObject;
- import com.google.common.collect.Lists;
- import io.swagger.v3.oas.annotations.Operation;
- import io.swagger.v3.oas.annotations.tags.Tag;
- import jnpf.base.ActionResult;
- import jnpf.base.UserInfo;
- import jnpf.base.entity.ModuleEntity;
- import jnpf.base.entity.SystemEntity;
- import jnpf.base.model.base.SystemBaeModel;
- import jnpf.base.model.home.ChartModel;
- import jnpf.base.model.home.HomeModel;
- import jnpf.base.model.home.MenuModel;
- import jnpf.base.model.home.TeamWorkModel;
- import jnpf.base.model.module.MenuSelectByUseNumVo;
- import jnpf.base.model.module.ModuleModel;
- import jnpf.base.service.*;
- import jnpf.constant.JnpfConst;
- import jnpf.flowable.model.task.TaskTo;
- import jnpf.flowable.model.template.TemplatePagination;
- import jnpf.message.model.message.MessageInfoVO;
- import jnpf.message.model.message.NoticeVO;
- import jnpf.message.service.MessageService;
- import jnpf.permission.model.authorize.AuthorizeVO;
- import jnpf.permission.service.AuthorizeService;
- import jnpf.permission.service.RoleService;
- import jnpf.util.JsonUtil;
- import jnpf.util.StringUtil;
- import jnpf.util.UserProvider;
- import jnpf.util.context.RequestContext;
- import jnpf.workflow.service.TaskApi;
- import jnpf.workflow.service.TemplateApi;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.web.bind.annotation.GetMapping;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RestController;
- import java.text.SimpleDateFormat;
- import java.time.LocalDate;
- import java.time.format.DateTimeFormatter;
- import java.util.*;
- import java.util.stream.Collectors;
- import java.util.stream.IntStream;
- /**
- * 控制台首页数据
- *
- * @author JNPF开发平台组
- * @version v6.0.0
- * @copyright 引迈信息技术有限公司
- * @date 2025/4/1 11:51:02
- */
- @Tag(name = "控制台首页数据", description = "HomeDataController")
- @RestController
- @RequestMapping("/api/system/HomeData")
- public class HomeDataController {
- private static final String NO1_WELCOME = "welcome";
- private static final String NO2_BANNER = "banner";
- private static final String NO3_WORK_FLOW = "workFlow";
- private static final String NO4_TEAMWORK = "teamwork";
- private static final String NO5_NOTICE = "notice";
- private static final String NO6_MESSAGE = "message";
- private static final String NO7_LATELY_USE = "latelyUse";
- private static final String NO8_COMMON_USE = "commonUse";
- private static final String NO9_FAVORITES = "favorites";
- private static final String N10_SYSTEM = "system";
- private static final String NO11_PIE_CHART = "pieChart";
- private static final String NO12_COLUMN_CHART = "columnChart";
- private static final String NO13_SERVER = "server";
- private static final String NO14_HELP = "help";
- @Autowired
- private TaskApi taskApi;
- @Autowired
- private TemplateApi templateApi;
- @Autowired
- private AuthorizeService authorizeService;
- @Autowired
- private MessageService messageService;
- @Autowired
- private SystemService systemService;
- @Autowired
- private RoleService roleService;
- @Autowired
- private ModuleUseNumService moduleUseNumService;
- @Autowired
- private ModuleDataService moduleDataService;
- @Autowired
- private SysconfigService sysConfigApi;
- @Autowired
- private ModuleService moduleService;
- @Operation(summary = "首页数据")
- @GetMapping
- public ActionResult get() {
- UserInfo userInfo = UserProvider.getUser();
- List<HomeModel> list = new ArrayList<>();
- AuthorizeVO authorize = authorizeService.getAuthorizeByUser(false);
- List<SystemEntity> sysListAll = systemService.getList();
- List<ModuleEntity> allMenu = moduleService.getList();
- Map<String, String> sysMap = sysListAll.stream().collect(Collectors.toMap(SystemEntity::getId, SystemEntity::getEnCode));
- List<ModuleModel> moduleList = authorize.getModuleList();
- List<String> authMenuList = moduleList.stream().filter(t -> JnpfConst.WEB.equals(t.getCategory()))
- .map(ModuleModel::getId).collect(Collectors.toList());
- Boolean iaAdmin = userInfo.getIsAdministrator();//超管
- Boolean isManageRole = userInfo.getIsManageRole();
- Boolean isDevRole = userInfo.getIsDevRole();
- boolean isFlowEnabled = Objects.equals(userInfo.getWorkflowEnabled(), 1);
- boolean isTeamEnabled = moduleList.stream().anyMatch(t -> JnpfConst.TEAMWORK_MODULE.contains(t.getEnCode()) && JnpfConst.WEB.equals(t.getCategory()));
- //1-欢迎语
- list.add(new HomeModel(NO1_WELCOME, 1, null));
- //2-banner
- if (isManageRole || isDevRole || iaAdmin) {
- list.add(new HomeModel(NO2_BANNER, 1, null));
- } else {
- list.add(new HomeModel(NO2_BANNER, 0, null));
- }
- //3-流程数据
- if (isFlowEnabled) {
- SystemEntity flowSys = systemService.getInfoByEnCode(JnpfConst.WORK_FLOW_CODE);
- List<ModuleModel> flowMenuList = moduleList.stream().filter(t -> t.getSystemId().equals(flowSys.getId())).collect(Collectors.toList());
- setFlow(flowMenuList, list);
- } else {
- list.add(new HomeModel(NO3_WORK_FLOW, 0, null));
- }
- //4-协作数据
- if (isTeamEnabled) {
- SystemEntity teamSys = systemService.getInfoByEnCode(JnpfConst.TEAMWORK_CODE);
- List<ModuleModel> teamworkList = moduleList.stream().filter(t -> t.getSystemId().equals(teamSys.getId())).collect(Collectors.toList());
- setTeamwork(teamworkList, list);
- } else {
- list.add(new HomeModel(NO4_TEAMWORK, 0, null));
- }
- //5-公告
- List<NoticeVO> noticeList = JsonUtil.getJsonToList(messageService.getNoticeList(new ArrayList<>()), NoticeVO.class);
- if (noticeList.size() > 0) {
- noticeList = Lists.partition(noticeList, 5).get(0);
- }
- list.add(new HomeModel(NO5_NOTICE, 1, noticeList));
- //6-消息
- List<MessageInfoVO> messageList = messageService.getUserMessageList();
- list.add(new HomeModel(NO6_MESSAGE, 1, messageList));
- //7-最近使用
- List<Object> menuNum = new ArrayList<>();
- List<MenuSelectByUseNumVo> menuLatelyList = moduleUseNumService.getMenuUseNum(1, authMenuList, allMenu);
- for (MenuSelectByUseNumVo item : menuLatelyList) {
- MenuModel menuModel = JsonUtil.getJsonToBean(item, MenuModel.class);
- setMenuModel(menuModel, sysMap, menuNum);
- }
- HomeModel latelyModel = HomeModel.builder().code(NO7_LATELY_USE).enable(1).appList(menuNum).flowEnabled(isFlowEnabled).build();
- if (isFlowEnabled) {
- List<Object> flowNum = new ArrayList<>(templateApi.getMenuUseNum(1, authorize.getFlowIdList()));
- latelyModel.setFlowList(flowNum);
- }
- list.add(latelyModel);
- //8-最近常用
- List<Object> menuUseNum = new ArrayList<>();
- List<MenuSelectByUseNumVo> menuComList = moduleUseNumService.getMenuUseNum(0, authMenuList, allMenu);
- for (MenuSelectByUseNumVo item : menuComList) {
- MenuModel menuModel = JsonUtil.getJsonToBean(item, MenuModel.class);
- setMenuModel(menuModel, sysMap, menuUseNum);
- }
- HomeModel commonUseModel = HomeModel.builder().code(NO8_COMMON_USE).enable(1).appList(menuUseNum).flowEnabled(isFlowEnabled).build();
- if (isFlowEnabled) {
- List<Object> flowUseNum = new ArrayList<>(templateApi.getMenuUseNum(0, authorize.getFlowIdList()));
- commonUseModel.setFlowList(flowUseNum);
- }
- list.add(commonUseModel);
- //9-我的收藏
- List<Object> favoritesMenuNum = new ArrayList<>();
- List<ModuleModel> favoritesList = moduleDataService.getFavoritesList(moduleList);
- for (ModuleModel item : favoritesList) {
- MenuModel menuModel = JsonUtil.getJsonToBean(item, MenuModel.class);
- setMenuModel(menuModel, sysMap, favoritesMenuNum);
- }
- HomeModel favoritesModel = HomeModel.builder().code(NO9_FAVORITES).enable(1).appList(favoritesMenuNum).flowEnabled(isFlowEnabled).build();
- if (isFlowEnabled || iaAdmin) {
- TemplatePagination pagination = new TemplatePagination();
- pagination.setPageSize(10000);
- pagination.setCategory("commonFlow");
- pagination.setIsLaunch(1);
- pagination.setAuthorize(authorize);
- List<Object> favoritesNum = new ArrayList<>(templateApi.getCommonList(pagination));
- favoritesModel.setFlowList(favoritesNum);
- }
- list.add(favoritesModel);
- //10-我的应用
- List<SystemBaeModel> systemList = authorize.getSystemList().stream().filter(t -> !Objects.equals(t.getIsMain(), 1)).collect(Collectors.toList());
- list.add(new HomeModel(N10_SYSTEM, 1, systemList));
- if (isManageRole || iaAdmin) {
- //11-饼图
- Map<String, Integer> roleCount = roleService.roleUserCount();
- List<ChartModel> roleCountList = roleCount.entrySet().stream().map(entry -> new ChartModel(entry.getKey(), entry.getValue())).collect(Collectors.toList());
- list.add(new HomeModel(NO11_PIE_CHART, 1, roleCountList));
- //12-柱形图
- setColumnChart(list);
- //13-服务器信息
- list.add(new HomeModel(NO13_SERVER, 1, null));
- } else {
- list.add(new HomeModel(NO11_PIE_CHART, 0, null));
- list.add(new HomeModel(NO12_COLUMN_CHART, 0, null));
- list.add(new HomeModel(NO13_SERVER, 0, null));
- }
- String help = sysConfigApi.getValueByKey(NO14_HELP);
- if (StringUtil.isNotBlank(help)) {
- JSONObject jsonObject = JSON.parseObject(help);
- list.add(new HomeModel(NO14_HELP, 1, jsonObject.get("java")));
- } else {
- list.add(new HomeModel(NO14_HELP, 0, null));
- }
- return ActionResult.success(list);
- }
- @Operation(summary = "首页数据")
- @GetMapping("/app")
- public ActionResult getApp() {
- List<HomeModel> list = new ArrayList<>();
- AuthorizeVO authorize = authorizeService.getAuthorize(false, RequestContext.getAppCode(), 0, false);
- List<SystemEntity> sysListAll = systemService.getList();
- List<ModuleEntity> allMenu = moduleService.getList();
- Map<String, String> sysMap = sysListAll.stream().collect(Collectors.toMap(SystemEntity::getId, SystemEntity::getEnCode));
- List<ModuleModel> moduleList = authorize.getModuleList();
- List<String> authMenuList = moduleList.stream().filter(t -> JnpfConst.APP.equals(t.getCategory()))
- .map(ModuleModel::getId).collect(Collectors.toList());
- boolean isFlowEnabled = moduleList.stream().anyMatch(t -> JnpfConst.MODULE_CODE.contains(t.getEnCode()) && JnpfConst.APP.equals(t.getCategory()));
- //7-最近使用
- List<Object> menuNum = new ArrayList<>();
- List<MenuSelectByUseNumVo> menuLatelyList = moduleUseNumService.getMenuUseNum(1, authMenuList, allMenu);
- for (MenuSelectByUseNumVo item : menuLatelyList) {
- MenuModel menuModel = JsonUtil.getJsonToBean(item, MenuModel.class);
- setMenuModel(menuModel, sysMap, menuNum);
- }
- HomeModel latelyModel = HomeModel.builder().code(NO7_LATELY_USE).enable(1).appList(menuNum).flowEnabled(isFlowEnabled).build();
- List<Object> flowNum = new ArrayList<>(templateApi.getMenuUseNum(1, authorize.getFlowIdList()));
- latelyModel.setFlowList(flowNum);
- list.add(latelyModel);
- //8-最近常用
- List<Object> menuUseNum = new ArrayList<>();
- List<MenuSelectByUseNumVo> menuComList = moduleUseNumService.getMenuUseNum(0, authMenuList, allMenu);
- for (MenuSelectByUseNumVo item : menuComList) {
- MenuModel menuModel = JsonUtil.getJsonToBean(item, MenuModel.class);
- setMenuModel(menuModel, sysMap, menuUseNum);
- }
- HomeModel commonUseModel = HomeModel.builder().code(NO8_COMMON_USE).enable(1).appList(menuUseNum).flowEnabled(isFlowEnabled).build();
- List<Object> flowUseNum = new ArrayList<>(templateApi.getMenuUseNum(0, authorize.getFlowIdList()));
- commonUseModel.setFlowList(flowUseNum);
- list.add(commonUseModel);
- //9-我的收藏
- List<Object> favoritesMenuNum = new ArrayList<>();
- List<ModuleModel> favoritesList = moduleDataService.getFavoritesList(moduleList);
- for (ModuleModel item : favoritesList) {
- MenuModel menuModel = JsonUtil.getJsonToBean(item, MenuModel.class);
- setMenuModel(menuModel, sysMap, favoritesMenuNum);
- }
- HomeModel favoritesModel = HomeModel.builder().code(NO9_FAVORITES).enable(1).appList(favoritesMenuNum).flowEnabled(isFlowEnabled).build();
- SystemEntity infoByEnCode = systemService.getInfoByEnCode(RequestContext.getAppCode());
- TemplatePagination pagination = new TemplatePagination();
- pagination.setPageSize(10000);
- pagination.setCategory("commonFlow");
- pagination.setIsLaunch(1);
- pagination.setSystemId(infoByEnCode.getId());
- List<Object> favoritesNum = new ArrayList<>(templateApi.getCommonList(pagination));
- favoritesModel.setFlowList(favoritesNum);
- list.add(favoritesModel);
- return ActionResult.success(list);
- }
- /**
- * 菜单信息补充
- *
- * @param menuModel
- * @param sysMap
- * @param list
- */
- private static void setMenuModel(MenuModel menuModel, Map<String, String> sysMap, List<Object> list) {
- JSONObject propertyJSON = JSONObject.parseObject(Optional.of(menuModel.getPropertyJson()).orElse("{}"));
- menuModel.setIconBackground(propertyJSON.getString("iconBackgroundColor"));
- List<String> appComModule = new ArrayList<>();
- appComModule.addAll(JnpfConst.APP_CONFIG_MODULE);
- appComModule.addAll(JnpfConst.ONLINE_DEV_MODULE);
- if (StringUtil.isEmpty(menuModel.getSystemCode())) {
- menuModel.setSystemCode(sysMap.get(menuModel.getSystemId()));
- }
- if (appComModule.contains(menuModel.getEnCode())) {
- menuModel.setIsBackend(1);
- } else {
- menuModel.setIsBackend(0);
- }
- list.add(menuModel);
- }
- /**
- * 柱形图数据
- *
- * @param list
- */
- private void setColumnChart(List<HomeModel> list) {
- DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
- List<String> dateList = IntStream.rangeClosed(0, 30)
- .mapToObj(i -> LocalDate.now().minusDays(30 - i))
- .map(formatter::format)
- .collect(Collectors.toList());
- List<String> category = dateList.stream().map(t -> t.substring(5)).collect(Collectors.toList());
- List<SystemEntity> allSysList = systemService.getList();
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
- Map<String, List<SystemEntity>> createDate = allSysList.stream()
- .collect(Collectors.groupingBy(obj -> sdf.format(obj.getCreatorTime())));
- Map<String, List<SystemEntity>> updateDate = allSysList.stream()
- .collect(Collectors.groupingBy(obj -> Optional.ofNullable(obj.getLastModifyTime()).map(sdf::format).orElse("N/A")));
- List<Integer> createData = new ArrayList<>();
- List<Integer> updateData = new ArrayList<>();
- for (String t : dateList) {
- createData.add(CollectionUtil.isEmpty(createDate.get(t)) ? 0 : createDate.get(t).size());
- updateData.add(CollectionUtil.isEmpty(updateDate.get(t)) ? 0 : updateDate.get(t).size());
- }
- List<ChartModel> listChart = new ArrayList<>();
- ChartModel createModel = new ChartModel();
- createModel.setName("创建");
- createModel.setData(createData);
- createModel.setCategory(category);
- listChart.add(createModel);
- ChartModel updateModel = new ChartModel();
- updateModel.setName("修改");
- updateModel.setData(updateData);
- updateModel.setCategory(category);
- listChart.add(updateModel);
- list.add(new HomeModel(NO12_COLUMN_CHART, 1, listChart));
- }
- /**
- * 添加流程数据
- *
- * @param moduleList
- * @param list
- */
- private void setFlow(List<ModuleModel> moduleList, List<HomeModel> list) {
- List<TeamWorkModel> flowData = new ArrayList<>();
- List<ModuleModel> flowMenu = moduleList.stream().filter(t -> JnpfConst.MODULE_CODE.contains(t.getEnCode())
- && !JnpfConst.WORK_FLOW_CODE.equals(t.getEnCode())).collect(Collectors.toList());
- if (CollectionUtil.isNotEmpty(flowMenu)) {
- TaskTo flowModel = new TaskTo();
- flowModel.setModuleList(moduleList);
- TaskTo taskTo = taskApi.getFlowTodoCount(flowModel);
- for (ModuleModel menu : flowMenu) {
- TeamWorkModel model = JsonUtil.getJsonToBean(menu, TeamWorkModel.class);
- switch (menu.getEnCode()) {
- case JnpfConst.WORK_FLOWLAUNCH:
- model.setCount(taskTo.getFlowLaunch());
- break;
- case JnpfConst.WORK_FLOWSIGN:
- model.setCount(taskTo.getFlowToSign());
- break;
- case JnpfConst.WORK_FLOWTODO:
- model.setCount(taskTo.getFlowTodo());
- break;
- case JnpfConst.WORK_FLOWDOING:
- model.setCount(taskTo.getFlowDoing());
- break;
- case JnpfConst.WORK_FLOWDONE:
- model.setCount(taskTo.getFlowDone());
- break;
- case JnpfConst.WORK_FLOWCIRCULATE:
- model.setCount(taskTo.getFlowCirculate());
- break;
- default:
- break;
- }
- flowData.add(model);
- }
- list.add(new HomeModel(NO3_WORK_FLOW, 1, flowData));
- } else {
- list.add(new HomeModel(NO3_WORK_FLOW, 0, flowData));
- }
- }
- /**
- * 添加协作数据
- *
- * @param moduleList
- * @param list
- */
- private void setTeamwork(List<ModuleModel> moduleList, List<HomeModel> list) {
- List<TeamWorkModel> teamworkData = new ArrayList<>();
- List<ModuleModel> flowMenu = moduleList.stream().filter(t -> JnpfConst.TEAMWORK_MODULE.contains(t.getEnCode())
- && !JnpfConst.TEAMWORK_CODE.equals(t.getEnCode())).collect(Collectors.toList());
- if (CollectionUtil.isNotEmpty(flowMenu)) {
- teamworkData.addAll(JsonUtil.getJsonToList(flowMenu, TeamWorkModel.class));
- list.add(new HomeModel(NO4_TEAMWORK, 1, teamworkData));
- } else {
- list.add(new HomeModel(NO4_TEAMWORK, 0, teamworkData));
- }
- }
- }
|