123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- package thyyxxk.webserver.service;
- import com.alibaba.fastjson.JSONObject;
- import com.baomidou.dynamic.datasource.annotation.DS;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import thyyxxk.webserver.config.exception.ExceptionEnum;
- import thyyxxk.webserver.dao.his.LoginDao;
- import thyyxxk.webserver.entity.ResultVo;
- import thyyxxk.webserver.entity.dictionary.CodeName;
- import thyyxxk.webserver.entity.login.UserInfo;
- import thyyxxk.webserver.entity.login.VueMenu;
- import thyyxxk.webserver.service.externalhttp.CorpWxSrvc;
- import thyyxxk.webserver.service.redislike.RedisLikeService;
- import thyyxxk.webserver.utils.*;
- import java.util.*;
- /**
- * @author dj
- */
- @Slf4j
- @Service
- public class LoginService {
- private final LoginDao dao;
- private final TokenService tokenService;
- private final RedisLikeService redisLikeService;
- private final CorpWxSrvc srvc;
- private final PublicServer publicServer;
- @Autowired
- public LoginService(LoginDao dao, TokenService tokenService,
- RedisLikeService redisLikeService,
- CorpWxSrvc srvc, PublicServer publicServer) {
- this.dao = dao;
- this.tokenService = tokenService;
- this.redisLikeService = redisLikeService;
- this.srvc = srvc;
- this.publicServer = publicServer;
- }
- public ResultVo<UserInfo> login(UserInfo userInfo) {
- UserInfo tempUserInfo = dao.findUserByCodeRsFromDjUserBase(userInfo.getCodeRs());
- if (null == tempUserInfo) {
- tempUserInfo = dao.findUserByCodeRsFromEmployeeMi(userInfo.getCodeRs());
- if (null == tempUserInfo) {
- return ResultVoUtil.fail(ExceptionEnum.USER_NOT_EXIST);
- }
- dao.insertNewUserToDjUserBase(tempUserInfo);
- }
- if (!Objects.equals("fromTriageScreen", userInfo.getSid()) && !userInfo.getPassword().equals(tempUserInfo.getPassword())) {
- return ResultVoUtil.fail(ExceptionEnum.INVALID_PASSWORD);
- }
- String token = tokenService.getToken(tempUserInfo);
- try {
- JSONObject json = srvc.getUserinfo(tokenService.getWeComAddressBookToken(), tempUserInfo.getCodeRs());
- tempUserInfo.setAvatar(json.getString("avatar"));
- } catch (Exception ignored) {
- }
- Set<String> deptList = publicServer.getChildDeptByUserCode(tempUserInfo.getCode());
- if (deptList != null && !deptList.isEmpty()) {
- Map<String, String> tempMap = new HashMap<>(deptList.size());
- deptList.forEach(item -> {
- tempMap.put(item, redisLikeService.getDeptName(item));
- });
- tempUserInfo.setPartTimeDeptMap(tempMap);
- }
- tempUserInfo.setToken(token);
- tempUserInfo.setSid(makeSid(tempUserInfo.getCode(), token, userInfo.getSid()));
- tempUserInfo.setRoles(dao.getUserRoles(tempUserInfo.getCode()));
- tempUserInfo.setDeptName(dao.getDeptName(tempUserInfo.getDeptCode()));
- tempUserInfo.setHzDay(dao.getDeptHzDayByCode(tempUserInfo.getDeptCode()));
- redisLikeService.handleUserLogin(tempUserInfo.getCode());
- return ResultVoUtil.success(tempUserInfo);
- }
- public ResultVo<JSONObject> simpleLogin(String code) {
- UserInfo us = dao.getUserInfoByCode(code);
- if (us == null) {
- return ResultVoUtil.fail(ExceptionEnum.NOT_EL_MESSAGE, "用户不存在");
- }
- JSONObject js = new JSONObject();
- ResultVo<UserInfo> userInfoResultVo = login(us);
- if (userInfoResultVo.getCode() == 200) {
- js.put("userInfo", userInfoResultVo.getData());
- } else {
- return ResultVoUtil.fail(ExceptionEnum.NOT_EL_MESSAGE, userInfoResultVo.getMessage());
- }
- ResultVo<Map<String, Object>> f = fetchVueMenus(us.getCode());
- if (f.getCode() == 200) {
- js.put("fetchVueMenus", f.getData());
- } else {
- return ResultVoUtil.fail(ExceptionEnum.NOT_EL_MESSAGE, f.getMessage());
- }
- return ResultVoUtil.success(js);
- }
- @DS("his")
- public ResultVo<Map<String, Object>> fetchVueMenus(String code) {
- // 63 只有个人中心的权限
- List<Integer> roles = dao.getUserRoles(code == null ? TokenUtil.getInstance().getTokenUserId() : code);
- if (null == roles || roles.isEmpty()) {
- roles = Collections.singletonList(63);
- } else {
- roles.add(63);
- }
- List<VueMenu> temp = dao.selectVueMenusByRoles(roles);
- Map<String, Object> map = new HashMap<>();
- List<VueMenu> list = TreeUtil.getVueMenuTree(temp);
- map.put("routes", list);
- map.put("flatRoutes", dao.selectRoutesByRoles(roles));
- map.put("paths", dao.selectVueMenusPathByRoles(roles));
- return ResultVoUtil.success(map);
- }
- public ResultVo<List<CodeName>> getWards() {
- String code = TokenUtil.getInstance().getTokenUserId();
- if (publicServer.needRule(2, 8, 52)) {
- return ResultVoUtil.success(dao.getAllWards());
- } else {
- return ResultVoUtil.success(dao.getUserWards(code));
- }
- }
- public UserInfo findUserByCode(String code) {
- return dao.findUserByCode(code);
- }
- private String makeSid(String code, String token, String sid) {
- String tempToken = token.replaceAll("\\.", "").replaceAll("_", "").replaceAll("-", "");
- String flakeIdSub = "-" + SnowFlakeId.instance().nextId() + "-";
- int random = new Random().nextInt(80);
- String tokenSub = tempToken.substring(random, random + 18);
- if (StringUtil.notBlank(sid) && "fromTriageScreen".equals(sid)) {
- tokenSub += "-triageFloorScreen";
- }
- return code + flakeIdSub + tokenSub;
- }
- }
|