|
@@ -1,19 +1,37 @@
|
|
|
package cn.iselab.mooctest.site.web.logic.impl;
|
|
|
|
|
|
+import cn.iselab.mooctest.rpc.user.data.UserDTO;
|
|
|
+import cn.iselab.mooctest.rpc.user.data.UserWechatDTO;
|
|
|
+import cn.iselab.mooctest.rpc.user.data.WechatUserInfoDTO;
|
|
|
+import cn.iselab.mooctest.site.configure.realm.DefaultUsernamepasswordToken;
|
|
|
import cn.iselab.mooctest.site.data.UserDTOForMT;
|
|
|
import cn.iselab.mooctest.site.models.AssignedTask;
|
|
|
import cn.iselab.mooctest.site.models.ContestMentorAssignedTask;
|
|
|
+import cn.iselab.mooctest.site.models.Permission;
|
|
|
+import cn.iselab.mooctest.site.rpc.user.WeChatService;
|
|
|
import cn.iselab.mooctest.site.service.*;
|
|
|
import cn.iselab.mooctest.site.service.application.WechatService;
|
|
|
+import cn.iselab.mooctest.site.util.data.Converter;
|
|
|
+import cn.iselab.mooctest.site.util.data.EncryptionUtil;
|
|
|
+import cn.iselab.mooctest.site.web.data.PermissionVO;
|
|
|
+import cn.iselab.mooctest.site.web.data.UserVO;
|
|
|
import cn.iselab.mooctest.site.web.data.internal.ContestResultVO;
|
|
|
import cn.iselab.mooctest.site.web.data.internal.JoinGroupWechatVO;
|
|
|
+import cn.iselab.mooctest.site.web.exception.HttpBadRequestException;
|
|
|
+import cn.iselab.mooctest.site.web.logic.MenuLogic;
|
|
|
+import cn.iselab.mooctest.site.web.logic.UserLogic;
|
|
|
import cn.iselab.mooctest.site.web.logic.WechatLogic;
|
|
|
+import com.google.gson.Gson;
|
|
|
+import org.apache.shiro.SecurityUtils;
|
|
|
+import org.apache.shiro.authc.AccountException;
|
|
|
+import org.apache.shiro.subject.Subject;
|
|
|
import org.json.JSONArray;
|
|
|
import org.json.JSONObject;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import javax.servlet.http.HttpServletRequest;
|
|
|
+import java.net.URLEncoder;
|
|
|
import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
@@ -35,6 +53,20 @@ public class WechatLogicImpl implements WechatLogic {
|
|
|
ContestMentorService contestMentorService;
|
|
|
@Autowired
|
|
|
User2RoleService user2RoleService;
|
|
|
+ @Autowired
|
|
|
+ WeChatService weChatRpcService;
|
|
|
+ @Autowired
|
|
|
+ private UserLogic userLogic;
|
|
|
+ @Autowired
|
|
|
+ private RecordService recordService;
|
|
|
+ @Autowired
|
|
|
+ private OpenId2UserIdService openId2UserIdService;
|
|
|
+ @Autowired
|
|
|
+ private MenuLogic menuLogic;
|
|
|
+ @Autowired
|
|
|
+ private ManagerPropertyService managerPropertyService;
|
|
|
+ @Autowired
|
|
|
+ private PermissionService permissionService;
|
|
|
|
|
|
public static final int HTTP_OK = 200;
|
|
|
private static final int HTTP_INTERNAL_ERROR = 500;
|
|
@@ -384,10 +416,54 @@ public class WechatLogicImpl implements WechatLogic {
|
|
|
return generateResponse(HTTP_OK,user.getName(),jsonArray.toString());
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * POST
|
|
|
- */
|
|
|
-
|
|
|
+ @Override
|
|
|
+ public String wxLogin(String code,HttpServletRequest request)throws Exception{
|
|
|
+ UserWechatDTO wechatDTO=weChatRpcService.loginByCode(code);
|
|
|
+ if(wechatDTO.getType()==UserWechatDTO.OLD){
|
|
|
+ UserDTO userDTO=wechatDTO.getUser();
|
|
|
+ DefaultUsernamepasswordToken token = new DefaultUsernamepasswordToken(userDTO.getEmail(),
|
|
|
+ userDTO.getPassword());
|
|
|
+ token.setLoginType("email&mobile");
|
|
|
+ Subject currentUser = SecurityUtils.getSubject();
|
|
|
+ currentUser.login(token);
|
|
|
+ UserVO userVO= Converter.convert(UserVO.class,userDTO);
|
|
|
+ if (userVO.getAvailability() != 1) {
|
|
|
+ throw new HttpBadRequestException("user has been forbidden");
|
|
|
+ }
|
|
|
+ if (user2RoleService.getByUserId(userVO.getId()).size() == 0) {
|
|
|
+ userLogic.adapUsertoEnterprise(userVO);
|
|
|
+ }
|
|
|
+ SecurityUtils.getSubject().getSession().setAttribute("userId", userDTO.getId());
|
|
|
+
|
|
|
+ recordService.recordLoginAction(request, userVO.getId());
|
|
|
+ userVO.setMenuVOs(menuLogic.getMenuListByUserId(userVO.getId()));
|
|
|
+ userVO.setOpenId(openId2UserIdService.findOpenIdByUserId(userVO.getId()));
|
|
|
+
|
|
|
+ List<Permission> permissions=permissionService.findByUserId(userDTO.getId());
|
|
|
+ System.out.println(new Gson().toJson(userVO).toString());
|
|
|
+ return "<html><head><script>"+
|
|
|
+ "localStorage.setItem('permissionSet','"+new Gson().toJson(permissions.stream().map(p-> p.toString()).collect(Collectors.toList())).toString()
|
|
|
+ +"');"+ "localStorage.setItem('user','"+new Gson().toJson(userVO).toString()+"');"+
|
|
|
+ "window.opener.location='http://www.mooctest.net/user/main';window.top.close();"+
|
|
|
+ "</script></head><body></body></html>";
|
|
|
+ }else{
|
|
|
+ WechatUserInfoDTO userInfoDTO=wechatDTO.getUserInfo();
|
|
|
+ return "<html><head><script>"+
|
|
|
+ "localStorage.setItem('wechatInfo','"+new Gson().toJson(userInfoDTO).toString()+"');"+
|
|
|
+ "window.opener.location='http://www.mooctest.net/wechatLogin';window.top.close();"+
|
|
|
+ "</script></head><body></body></html>";
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
+ @Override
|
|
|
+ public boolean bind(UserWechatDTO dto){
|
|
|
+ weChatRpcService.setUserWechat(dto);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
|
|
|
+ @Override
|
|
|
+ public UserVO register(UserWechatDTO dto){
|
|
|
+ UserVO userVO=new UserVO();
|
|
|
+ return userVO;
|
|
|
+ }
|
|
|
}
|