package com.product.admin.service; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.google.common.collect.Maps; import com.product.admin.config.CmnConst; import com.product.common.lang.StringUtils; import com.product.core.cache.util.RedisUtil; import com.product.core.config.Global; import com.product.core.entity.DataTableEntity; import com.product.core.exception.BaseException; import com.product.core.service.support.AbstractBaseService; import com.product.core.spring.context.SpringMVCContextHolder; import com.product.core.websocket.util.MessageHttpSocketServer; import com.product.module.sys.entity.SystemUser; import com.product.module.sys.service.UserService; import com.product.util.BaseUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; import java.util.Map; /** * @Author cheng * @Description 登录初始参数 * @Date 2021/10/27 16:22 * @Version 1.0 */ @Service public class LoginInitParameterService extends AbstractBaseService { @Autowired UserService userService; @Autowired @Qualifier("userOperService") com.product.admin.service.UserService userOperaService; public String getLoginParameter() throws Exception { SystemUser user = SpringMVCContextHolder.getCurrentUser(); String clientType = user.getClientType(); if (user != null) { Map result = Maps.newHashMap(); //app 不返回 门户 以及消息服务器地址信息 if (!"App".equals(clientType)) { String org_level_uuid = user.getOrg_level_uuid(); String dept_uuid = user.getDept_uuid(); String post_uuid = user.getPost(); int user_id = user.getUser_id(); String roles = user.getRoles(); result.put("portal", getPortal(user_id, org_level_uuid, dept_uuid, post_uuid, roles)); result.put("messageServerIp", MessageHttpSocketServer.getMEssageServerIp()); result.put("messageServerPort", Global.getSystemConfig("message.server.port", Global.getSystemConfig("server.port", "9998"))); } result.put("user", getUserInfo(user, "")); StringBuilder reg = new StringBuilder(); String fileTypes = Global.getSystemConfig("allowed_file_type", ""); if (!com.product.common.lang.StringUtils.isEmpty(fileTypes)) { reg.append("/\\.("); reg.append(fileTypes.replaceAll(",", "|")); reg.append(")$/i"); result.put("file_type_restriction", reg.toString()); } return BaseUtil.success(result); } throw new Exception("获取用户信息失败"); } /** * 登录返回用户信息 * * @param user * @return json 对象 */ public JSONObject getUserInfo(SystemUser user, Object themeMode) throws BaseException { JSONObject ui = new JSONObject(); ui.put("enableOnlineEdit", Global.getPropertyToBoolean("enable.online.edit", "false")); ui.put("clientType", user.getClientType()); ui.put("uuid", user.getUuid()); ui.put("org_level_all", user.getCurrentCompany().getValue(CmnConst.ORG_LEVEL_ALL)); ui.put(CmnConst.CLIENT_NAME, user.getCurrentCustomer().getString(CmnConst.CLIENT_NAME)); if (user.getCurrentManager() != null) { ui.put("clientUuid", user.getCurrentManager().getString("clients_uuid")); } else { ui.put("clientUuid", user.getClient_uuid()); } if (user.getCurrentStaff() != null) { ui.put("sex", user.getCurrentStaff().getString("sex")); ui.put("preferred_name", user.getCurrentStaff().getString("preferred_name")); ui.put("job_post_name", user.getCurrentStaff().getString("job_post_name")); ui.put("staff_code", user.getCurrentStaff().getString("staff_code")); ui.put("staff_avatar", user.getCurrentStaff().getString("staff_avatar")); ui.put("leader_tricode", user.getCurrentStaff().getString("leader_tricode"));//领导编码 } if (user.getCurrentCustomer() != null) { ui.put("client_role_uuid", user.getCurrentCustomer().getString("role_uuid")); } // if (user.getCurrentCompany() != null) { // ui.put("company_logo_addr", userService.loadCompanyLogo(user.getCurrentCompany(), themeMode)); // } if (user.getCurrentDept() != null) { ui.put("dept_name", user.getCurrentDept().getString("org_level_name")); ui.put("dept_uuid", user.getCurrentDept().getString("uuid")); String dept_all=user.getCurrentDept().getString("org_level_all"); ui.put("dept_all_name", dept_all.substring(dept_all.indexOf(user.getOrg_level_name()))); ui.put("dept_code", user.getCurrentDept().getString("org_level_code")); } ui.put("user_signature", RedisUtil.get(userOperaService.USER_SIGNATURE_KEY + user.getUser_id())); ui.put("user_primary_email", user.getUser_primary_email()); ui.put("user_id", user.getUser_id()); ui.put("is_signature", RedisUtil.exists(userOperaService.USER_SIGNATURE_KEY + user.getUser_id())); ui.put("org_level_code", user.getOrg_level_code()); ui.put("org_level_uuid", user.getOrg_level_uuid()); ui.put("org_level_name", user.getOrg_level_name()); ui.put("post_uuid", user.getPost()); ui.put("post_name", user.getJobPost() != null ? user.getJobPost().getObject("job_post_name") : ""); ui.put("roles", user.getRoles()); ui.put("userType", user.getUserType()); ui.put(CmnConst.USER_ACCOUNT, user.getUser_account()); ui.put("user_name", user.getUser_name()); ui.put("dept_name", user.getCurrentDept() != null ? user.getCurrentDept().getString("org_level_name") : ""); if (org.apache.commons.lang3.StringUtils.isEmpty(user.getThumbnail_img())) { ui.put("thumbnail_img", ""); } else { ui.put("thumbnail_img", user.getThumbnail_img()); ui.put("user_avatar", userOperaService.getUserAvatar(user.getUser_id() + "")); } return ui; } /** * 获取门户信息 * * @return */ private JSONArray getPortal(int user_id, String org_level_uuid, String dept_uuid, String post_uuid, String role_uuid) { String[] filters = {getOrganizingFilter(user_id, 4), getOrganizingFilter(post_uuid, 3), getOrganizingFilter(dept_uuid, 2), getOrganizingFilter(org_level_uuid, 1)}; DataTableEntity dt = getBaseDao().listTable(CmnConst.PRODUCT_SYS_PORTALS, getPortalFilter(filters, role_uuid), new Object[]{CmnConst.PRODUCT_SYS_ORG_CLIENT_UUID_VALUE}, new Object[]{"uuid,portal_name,permission"}, CmnConst.SEQUENCE); return BaseUtil.dataTableEntityToJson(dt); } /** * 获取门户条件 * * @return */ private String getPortalFilter(Object[] filters, String role_uuid) { String filter = BaseUtil.buildQuestionMarkLikeFilter("concat(',',permission,',')", filters, "%", "%"); filter += " OR " + BaseUtil.buildQuestionMarkLikeFilter("concat(',',role_uuid,',')", role_uuid.split(","), "%", "%"); return "(" + filter + ") AND ((length(permission)>0 OR length(role_uuid)>0)) AND is_use=1 OR UUID =?"; } /** * 替换组织机构 * * @param val * @param type 1 = 公司 2 = 部门 3 = 岗位 4 = 人 * @return */ private String getOrganizingFilter(Object val, int type) { if (StringUtils.isEmpty(val) || type < 1 || type > 4) { // 系统自带公司的uuid 预估表中 permission 字段没有这个数据出现 return CmnConst.PRODUCT_SYS_ORG_CLIENT_UUID_VALUE; } String[] template = {"", "{val}", "[val]", "(val)", ""}; return template[type].replace("val", String.valueOf(val)); } }