瀏覽代碼

Merge branch 'huangyuan-user' of lift-manager/lift-server into develop

huangyuan 5 年之前
父節點
當前提交
9b585f948f
共有 16 個文件被更改,包括 358 次插入60 次删除
  1. 56 1
      lift-system-service/src/main/java/cn/com/ty/lift/system/user/controller/LoginController.java
  2. 23 12
      lift-system-service/src/main/java/cn/com/ty/lift/system/user/controller/UserController.java
  3. 19 0
      lift-system-service/src/main/java/cn/com/ty/lift/system/user/dao/entity/model/UserInfoResponse.java
  4. 2 0
      lift-system-service/src/main/java/cn/com/ty/lift/system/user/dao/entity/model/UserRequest.java
  5. 8 0
      lift-system-service/src/main/java/cn/com/ty/lift/system/user/dao/mapper/MtCompanyUserMapper.java
  6. 15 7
      lift-system-service/src/main/java/cn/com/ty/lift/system/user/service/ILoginService.java
  7. 7 0
      lift-system-service/src/main/java/cn/com/ty/lift/system/user/service/IProjectService.java
  8. 10 0
      lift-system-service/src/main/java/cn/com/ty/lift/system/user/service/IUserLoginService.java
  9. 8 0
      lift-system-service/src/main/java/cn/com/ty/lift/system/user/service/IUserService.java
  10. 88 38
      lift-system-service/src/main/java/cn/com/ty/lift/system/user/service/impl/LoginService.java
  11. 5 0
      lift-system-service/src/main/java/cn/com/ty/lift/system/user/service/impl/ProjectService.java
  12. 12 0
      lift-system-service/src/main/java/cn/com/ty/lift/system/user/service/impl/UserLoginService.java
  13. 42 2
      lift-system-service/src/main/java/cn/com/ty/lift/system/user/service/impl/UserService.java
  14. 25 0
      lift-system-service/src/main/java/cn/com/ty/lift/system/wechat/constants/WxConstants.java
  15. 32 0
      lift-system-service/src/main/java/cn/com/ty/lift/system/wechat/utils/WxUtil.java
  16. 6 0
      lift-system-service/src/main/resources/mapper/MtCompanyUserMapper.xml

+ 56 - 1
lift-system-service/src/main/java/cn/com/ty/lift/system/user/controller/LoginController.java

@@ -9,6 +9,7 @@ import cn.com.ty.lift.system.user.dao.entity.model.UserRequest;
 import cn.com.ty.lift.system.user.service.ILoginService;
 import cn.com.ty.lift.system.user.service.IUserAccountService;
 import cn.com.ty.lift.system.utils.RandomValidateCodeUtil;
+import cn.com.ty.lift.system.wechat.utils.WxUtil;
 import cn.com.xwy.boot.web.dto.RestResponse;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -53,6 +54,23 @@ public class LoginController {
         return loginService.register(request, userRequest);
     }
 
+    /**
+     * @param
+     * @return
+     * @description 微信登录注册
+     * @date 2019-12-30 14:18
+     */
+    @PostMapping("/wxRegister")
+    @ResponseBody
+    public RestResponse wxRegister(HttpServletRequest request, @RequestBody UserRequest userRequest) {
+        RestResponse restResponse = judgeAuthCode(userRequest);
+        if (restResponse == null) {
+            //校验通过走正常注册流程
+            return loginService.register(request, userRequest);
+        }
+        return restResponse;
+    }
+
     @RequestMapping("/changeTeam")
     @ResponseBody
     public RestResponse changeTeam(UserRequest userRequest) {
@@ -72,6 +90,23 @@ public class LoginController {
         return loginService.login(request, userRequest);
     }
 
+    /**
+     * @param
+     * @return
+     * @description 微信登录
+     * @date 2019-12-30 10:50
+     */
+    @RequestMapping("/wxLogin")
+    @ResponseBody
+    public RestResponse wxLogin(HttpServletRequest request, @RequestBody UserRequest userRequest) {
+        RestResponse restResponse = judgeAuthCode(userRequest);
+        if (restResponse == null) {
+            //校验通过 用户微信登录
+            return loginService.wxLogin(request, userRequest);
+        }
+        return restResponse;
+    }
+
     /**
      * @param response http相应类
      * @param request  http请求类
@@ -145,7 +180,7 @@ public class LoginController {
             //校验同一号码两次获取间隔是否有一分钟
             Object timeStampCode = redisTemplate.opsForValue().get(mobile);
             if (timeStampCode != null) {
-                return RestResponse.fail(ApiConstants.RESULT_ERROR, "请一分钟后重获取");
+                return RestResponse.fail(ApiConstants.RESULT_ERROR, "请一分钟后重获取");
             }
             //校验通过获取短信验证码
             String smsCode = AliyunSmsUtil.sendSmsCode(mobile, AliConstants.SmsConstants.TEST_TEMPLATE_CODE);
@@ -199,4 +234,24 @@ public class LoginController {
         return loginService.resetPassword(userRequest);
     }
 
+    /**
+     * @param
+     * @return
+     * @description 微信授权码校验
+     * @date 2019-12-30 15:40
+     */
+    private RestResponse judgeAuthCode(UserRequest userRequest) {
+        //判断授权码
+        if (StringUtils.isBlank(userRequest.getAuthCode())) {
+            return RestResponse.fail(ApiConstants.RESULT_ERROR, "授权码为空无法进行注册");
+        }
+        //通过授权码获取用户openId
+        String openId = WxUtil.getOpenIdByAuthCode(userRequest.getAuthCode());
+        if (StringUtils.isBlank(openId)) {
+            return RestResponse.fail(ApiConstants.RESULT_ERROR, "授权码无效无法进行注册");
+        }
+        userRequest.setWeChatOpenId(openId);
+        return null;
+    }
+
 }

+ 23 - 12
lift-system-service/src/main/java/cn/com/ty/lift/system/user/controller/UserController.java

@@ -25,47 +25,58 @@ public class UserController {
     private IUserService userService;
 
     /**
-     * @description
-     * @date 2019/11/27 10:03 AM
      * @param userRequest 用户请求类
      * @return
+     * @description
+     * @date 2019/11/27 10:03 AM
      */
     @RequestMapping("/list")
-    public RestResponse list(UserRequest userRequest){
+    public RestResponse list(UserRequest userRequest) {
         IPage<UserAccount> userAccountPage = userService.list(userRequest);
         return RestResponse.success(userAccountPage, ApiConstants.RESULT_SUCCESS, "获取用户信息成功");
     }
 
     /**
-     * @description 添加用户
-     * @date 2019/11/27 10:03 AM
+     * @param
+     * @return
+     * @description app获取用户信息
+     * @date 2019-12-28 15:41
+     */
+    @RequestMapping("/info")
+    public RestResponse info(UserRequest userRequest) {
+        return userService.getUserInfo(userRequest);
+    }
+
+    /**
      * @param userRequest 用户请求参数
      * @return
+     * @description 添加用户
+     * @date 2019/11/27 10:03 AM
      */
     @PostMapping("/add")
-    public RestResponse addUser(@RequestBody UserRequest userRequest){
+    public RestResponse addUser(@RequestBody UserRequest userRequest) {
         return userService.addUser(userRequest);
     }
 
     /**
-     * @description 更新用户信息
-     * @date 2019/11/27 10:03 AM
      * @param userRequest 用户请求参数
      * @return
+     * @description 更新用户信息
+     * @date 2019/11/27 10:03 AM
      */
     @PostMapping("/update")
-    public RestResponse updateUser(@RequestBody UserRequest userRequest){
+    public RestResponse updateUser(@RequestBody UserRequest userRequest) {
         return userService.updateUser(userRequest);
     }
 
     /**
-     * @description 删除用户信息
-     * @date 2019/11/27 10:03 AM
      * @param userRequest 用户请求参数
      * @return
+     * @description 删除用户信息
+     * @date 2019/11/27 10:03 AM
      */
     @PostMapping("/delete")
-    public RestResponse deleteUser(@RequestBody UserRequest userRequest){
+    public RestResponse deleteUser(@RequestBody UserRequest userRequest) {
         return userService.deleteUser(userRequest);
     }
 

+ 19 - 0
lift-system-service/src/main/java/cn/com/ty/lift/system/user/dao/entity/model/UserInfoResponse.java

@@ -0,0 +1,19 @@
+package cn.com.ty.lift.system.user.dao.entity.model;
+
+import lombok.Data;
+
+/**
+ * @author huangyuan
+ * @date 2019-12-28
+ * @description 用户信息
+ */
+@Data
+public class UserInfoResponse {
+    private String companyName;//公司名
+    private String roleName;//角色名
+    private String userName;//用户名
+    private String avatarUrl;//用户头像路径
+    private String mobile;//用户手机号
+    private String remarks;//描述
+    private Integer certificateStatus;//操作证状态
+}

+ 2 - 0
lift-system-service/src/main/java/cn/com/ty/lift/system/user/dao/entity/model/UserRequest.java

@@ -19,6 +19,8 @@ public class UserRequest {
     private String name;//用户真实姓名
     private String queryCondition;//查询条件
     private String inputSmsCode;//用户输入的短信验证码
+    private String authCode;//微信授权码
+    private String weChatOpenId;//用户微信标识码
     private Long pageSize;//每页条数
     private Long pageNum;//页数
 }

+ 8 - 0
lift-system-service/src/main/java/cn/com/ty/lift/system/user/dao/mapper/MtCompanyUserMapper.java

@@ -38,4 +38,12 @@ public interface MtCompanyUserMapper extends BaseMapper<MtCompanyUser> {
      * @date 2019-12-17 15:43
      */
     List<LiftCertificate> getLiftCertificateList(ProjectUser projectUser);
+
+    /**
+     * @param
+     * @return
+     * @description 获取用户操作证信息
+     * @date 2019-12-28 16:34
+     */
+    LiftCertificate getLiftCertificateByUserIdAndCompanyId(ProjectUser projectUser);
 }

+ 15 - 7
lift-system-service/src/main/java/cn/com/ty/lift/system/user/service/ILoginService.java

@@ -8,35 +8,43 @@ import javax.servlet.http.HttpServletRequest;
 public interface ILoginService {
 
     /**
+     * @param userRequest 用户请求参数
+     * @return
      * @description 用户注册
      * @date 2019/11/27 10:03 AM
-     * @param userRequest  用户请求参数
-     * @return
      */
     RestResponse register(HttpServletRequest request, UserRequest userRequest);
 
     /**
-     * @description
-     * @date 2019/11/27 10:03 AM
      * @param request
      * @param userRequest 用户请求参数,包括用户手机号,用户密码。
      * @return
+     * @description
+     * @date 2019/11/27 10:03 AM
      */
     RestResponse login(HttpServletRequest request, UserRequest userRequest);
 
     /**
-     * @description 重置密码
-     * @date 2019-12-10
      * @param userRequest 请求对象
      * @return
+     * @description 重置密码
+     * @date 2019-12-10
      */
     RestResponse resetPassword(UserRequest userRequest);
 
     /**
+     * @param
+     * @return
      * @description 切换团队
      * @date 2019-12-18 16:15
+     */
+    RestResponse changeTeam(UserRequest userRequest);
+
+    /**
      * @param
      * @return
+     * @description 微信登录
+     * @date 2019-12-30 10:52
      */
-    RestResponse changeTeam(UserRequest userRequest);
+    RestResponse wxLogin(HttpServletRequest request, UserRequest userRequest);
 }

+ 7 - 0
lift-system-service/src/main/java/cn/com/ty/lift/system/user/service/IProjectService.java

@@ -29,4 +29,11 @@ public interface IProjectService {
      */
     List<LiftCertificate> getLiftCertificateList(ProjectUser projectUser);
 
+    /**
+     * @description 获取用户在指定公司的操作证
+     * @date 2019-12-28 16:33
+     * @param
+     * @return
+     */
+    LiftCertificate getLiftCertificateByUserIdAndCompanyId(ProjectUser projectUser);
 }

+ 10 - 0
lift-system-service/src/main/java/cn/com/ty/lift/system/user/service/IUserLoginService.java

@@ -3,6 +3,8 @@ package cn.com.ty.lift.system.user.service;
 import cn.com.ty.lift.system.user.dao.entity.UserLogin;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import javax.servlet.http.HttpServletRequest;
+
 /**
  * <p>
  * 用户登录记录表 服务类
@@ -13,4 +15,12 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface IUserLoginService extends IService<UserLogin> {
 
+    /**
+     * @description 保存登录信息
+     * @date 2019-12-30 11:15
+     * @param
+     * @return
+     */
+    void saveLoginInfo(HttpServletRequest request, Long userId);
+
 }

+ 8 - 0
lift-system-service/src/main/java/cn/com/ty/lift/system/user/service/IUserService.java

@@ -78,4 +78,12 @@ public interface IUserService {
      * @date 2019-12-23 16:17
      */
     List<Long> getIdListByQueryCondition(String queryCondition);
+
+    /**
+     * @description 获取用户信息
+     * @date 2019-12-28 15:41
+     * @param
+     * @return
+     */
+    RestResponse getUserInfo(UserRequest userRequest);
 }

+ 88 - 38
lift-system-service/src/main/java/cn/com/ty/lift/system/user/service/impl/LoginService.java

@@ -2,11 +2,13 @@ package cn.com.ty.lift.system.user.service.impl;
 
 import cn.com.ty.lift.common.aliservice.constants.AliConstants;
 import cn.com.ty.lift.common.constants.ApiConstants;
-import cn.com.ty.lift.system.user.dao.entity.*;
+import cn.com.ty.lift.system.user.dao.entity.Menu;
+import cn.com.ty.lift.system.user.dao.entity.Role;
+import cn.com.ty.lift.system.user.dao.entity.UserAccount;
+import cn.com.ty.lift.system.user.dao.entity.UserRole;
 import cn.com.ty.lift.system.user.dao.entity.model.UserRequest;
 import cn.com.ty.lift.system.user.dao.entity.model.UserResponse;
 import cn.com.ty.lift.system.user.service.*;
-import cn.com.ty.lift.system.utils.CommonUtil;
 import cn.com.ty.lift.system.utils.PasswordUtils;
 import cn.com.xwy.boot.web.dto.RestResponse;
 import cn.hutool.json.JSONUtil;
@@ -52,31 +54,28 @@ public class LoginService implements ILoginService {
     @Override
     public RestResponse register(HttpServletRequest request, UserRequest userRequest) {
         //判断手机号是否为空
-        if(StringUtils.isBlank(userRequest.getMobile())){
+        if (StringUtils.isBlank(userRequest.getMobile())) {
             return RestResponse.fail(ApiConstants.RESULT_ERROR, "手机号为空");
         }
         //判断密码是否为空
-        if(StringUtils.isBlank(userRequest.getPassword())){
+        if (StringUtils.isBlank(userRequest.getPassword())) {
             return RestResponse.fail(ApiConstants.RESULT_ERROR, "密码为空");
         }
-        //获取session中的短信验证码
-        Object smsCode = redisTemplate.opsForValue().get(userRequest.getMobile() + AliConstants.SmsConstants.SMS_CODE_NAME);
-        if(smsCode != null){
-            if(!(smsCode.equals(userRequest.getInputSmsCode()))){
-                return RestResponse.fail(ApiConstants.RESULT_ERROR, "短信验证码输入有误");
-            }
-        } else {
-            return RestResponse.fail(ApiConstants.RESULT_ERROR, "验证码过期,无法注册,请重新获取验证码");
+        //校验短信验证码
+        RestResponse verifyResult = verifySmsCode(userRequest.getMobile(), userRequest.getInputSmsCode());
+        //如果结果不为空说明校验未通过
+        if(verifyResult != null){
+            return verifyResult;
         }
         //判断手机号是否注册过
         UserAccount userAccount = userAccountService.getByMobile(userRequest.getMobile());
-        if(userAccount !=  null){
+        if (userAccount != null) {
             return RestResponse.fail(ApiConstants.RESULT_ERROR, "用户手机号已经注册过了");
         }
 
         //保存用户信息,并返回用户账户信息
         userAccount = userService.saveUserInfo(userRequest);
-        if(userAccount != null){
+        if (userAccount != null) {
             return RestResponse.success(null, ApiConstants.RESULT_SUCCESS, "注册成功");
         }
         return RestResponse.fail(ApiConstants.RESULT_ERROR, "注册失败");
@@ -85,45 +84,40 @@ public class LoginService implements ILoginService {
     @Override
     public RestResponse login(HttpServletRequest request, UserRequest userRequest) {
         String password = userRequest.getPassword();
-        if(StringUtils.isBlank(userRequest.getMobile())){
+        if (StringUtils.isBlank(userRequest.getMobile())) {
             return RestResponse.fail(ApiConstants.RESULT_ERROR, "手机号为空无法注册");
         }
-        if(StringUtils.isBlank(password)){
+        if (StringUtils.isBlank(password)) {
             return RestResponse.fail(ApiConstants.RESULT_ERROR, "用户密码为空无法注册");
         }
         //通过手机号获取用户账户信息
         UserAccount userAccount = userAccountService.getByMobile(userRequest.getMobile());
         //验证手机号是否存在
-        if(userAccount == null){
+        if (userAccount == null) {
             return RestResponse.fail(ApiConstants.RESULT_ERROR, "手机号尚未注册");
         }
         //校验密码是否正确
         String inputPassword = PasswordUtils.generatePassword(password, userAccount.getSalt());
-        if(!inputPassword.equals(userAccount.getPassword())){
+        if (!inputPassword.equals(userAccount.getPassword())) {
             return RestResponse.fail(ApiConstants.RESULT_ERROR, "密码输入有误");
         }
-        UserResponse userResponse = userService.getLoginUserInfo(userAccount.getUserId());
-
-        //将当前公司id放入session中
-        if(userResponse.getMaintenanceCompany() != null){
-            request.getSession().setAttribute(ApiConstants.CURRENT_COMPANY_ID, userResponse.getMaintenanceCompany().getId());
-        }
-        //将用户信息放入session中
-        request.getSession().setAttribute(ApiConstants.CURRENT_USER_ID, userResponse.getUserId());
-        //将用户登录的信息放入redis中,作为缓存处理
-        redisTemplate.opsForValue().set(userResponse.getToken(), JSONUtil.toJsonPrettyStr(userResponse));
-        UserLogin userLogin = new UserLogin();
-        userLogin.setUserId(userAccount.getUserId());
-        userLogin.setIp(CommonUtil.getIpAddress(request));
+        //登录成功后初始化登录信息
+        UserResponse userResponse = initLoginInfo(request, userAccount.getUserId());
         //添加登录记录
-        userLoginService.save(userLogin);
-        return RestResponse.success(userResponse,ApiConstants.RESULT_SUCCESS, "登录成功");
+        userLoginService.saveLoginInfo(request, userAccount.getUserId());
+        return RestResponse.success(userResponse, ApiConstants.RESULT_SUCCESS, "登录成功");
     }
 
     @Override
     public RestResponse resetPassword(UserRequest userRequest) {
+        RestResponse verifyResult = verifySmsCode(userRequest.getMobile(), userRequest.getInputSmsCode());
+        //如果结果不为空说明校验未通过
+        if(verifyResult != null){
+            return verifyResult;
+        }
+        //获取用户信息
         UserAccount userAccount = userAccountService.getByMobile(userRequest.getMobile());
-        if(userAccount == null) {
+        if (userAccount == null) {
             return RestResponse.fail(ApiConstants.RESULT_ERROR, "手机号尚未注册");
         }
         String salt = userAccount.getSalt();
@@ -139,14 +133,14 @@ public class LoginService implements ILoginService {
         Long companyId = userRequest.getCompanyId();
         UserResponse userResponse = new UserResponse();
         UserRole userRole = userRoleService.getOne(new QueryWrapper<UserRole>()
-            .eq("company_id", companyId)
-            .eq("user_id", userRequest.getUserId())
+                .eq("company_id", companyId)
+                .eq("user_id", userRequest.getUserId())
         );
-        if(userRole != null){
+        if (userRole != null) {
             Role role = roleService.getById(userRole.getRoleId());
             userResponse.setRole(role);
             //获取菜单信息
-            if(role != null){
+            if (role != null) {
                 //设置菜单树
                 List<Menu> menuTree = roleMenuService.getMenuTree(role.getId());
                 userResponse.setMenus(menuTree);
@@ -154,4 +148,60 @@ public class LoginService implements ILoginService {
         }
         return RestResponse.success(userResponse, ApiConstants.RESULT_SUCCESS, "切换团队成功");
     }
+
+    @Override
+    public RestResponse wxLogin(HttpServletRequest request, UserRequest userRequest) {
+        //通过授权码获取用户openId
+        String openId = userRequest.getAuthCode();
+        UserAccount userAccount = userAccountService.getOne(new QueryWrapper<UserAccount>()
+                .eq("wechat_open_id", openId)
+        );
+        if (userAccount == null) {
+            return RestResponse.fail(ApiConstants.RESULT_ERROR, "微信号尚未绑定用户信息");
+        }
+        //用户存在,关联登录成功
+        //登录成功初始化登录信息
+        UserResponse userResponse = initLoginInfo(request, userAccount.getUserId());
+        //保存登录记录
+        userLoginService.saveLoginInfo(request, userAccount.getUserId());
+        return RestResponse.success(userResponse, ApiConstants.RESULT_SUCCESS, "用户登录成功");
+    }
+
+    /**
+     * @param
+     * @return
+     * @description 初始化登录信息
+     * @date 2019-12-30 11:22
+     */
+    private UserResponse initLoginInfo(HttpServletRequest request, Long userId) {
+        //获取用户信息
+        UserResponse userResponse = userService.getLoginUserInfo(userId);
+        //将当前公司id放入session中
+        if (userResponse.getMaintenanceCompany() != null) {
+            request.getSession().setAttribute(ApiConstants.CURRENT_COMPANY_ID, userResponse.getMaintenanceCompany().getId());
+        }
+        //将用户信息放入session中
+        request.getSession().setAttribute(ApiConstants.CURRENT_USER_ID, userResponse.getUserId());
+        //将用户登录的信息放入redis中,作为缓存处理
+        redisTemplate.opsForValue().set(userResponse.getToken(), JSONUtil.toJsonPrettyStr(userResponse));
+        return userResponse;
+    }
+
+    /**
+     * @param
+     * @return
+     * @description 校验短信验证码
+     * @date 2019-12-30 17:46
+     */
+    private RestResponse verifySmsCode(String mobile, String inputSmsCode) {
+        Object smsCode = redisTemplate.opsForValue().get(mobile + AliConstants.SmsConstants.SMS_CODE_NAME);
+        if (smsCode != null) {
+            if (!(smsCode.equals(inputSmsCode))) {
+                return RestResponse.fail(ApiConstants.RESULT_ERROR, "短信验证码输入有误");
+            }
+        } else {
+            return RestResponse.fail(ApiConstants.RESULT_ERROR, "验证码过期,请重新获取验证码");
+        }
+        return null;
+    }
 }

+ 5 - 0
lift-system-service/src/main/java/cn/com/ty/lift/system/user/service/impl/ProjectService.java

@@ -50,4 +50,9 @@ public class ProjectService implements IProjectService {
     public List<LiftCertificate> getLiftCertificateList(ProjectUser projectUser) {
         return mtCompanyUserMapper.getLiftCertificateList(projectUser);
     }
+
+    @Override
+    public LiftCertificate getLiftCertificateByUserIdAndCompanyId(ProjectUser projectUser) {
+        return mtCompanyUserMapper.getLiftCertificateByUserIdAndCompanyId(projectUser);
+    }
 }

+ 12 - 0
lift-system-service/src/main/java/cn/com/ty/lift/system/user/service/impl/UserLoginService.java

@@ -3,9 +3,12 @@ package cn.com.ty.lift.system.user.service.impl;
 import cn.com.ty.lift.system.user.dao.entity.UserLogin;
 import cn.com.ty.lift.system.user.dao.mapper.UserLoginMapper;
 import cn.com.ty.lift.system.user.service.IUserLoginService;
+import cn.com.ty.lift.system.utils.CommonUtil;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
 
+import javax.servlet.http.HttpServletRequest;
+
 /**
  * <p>
  * 用户登录记录表 服务实现类
@@ -17,4 +20,13 @@ import org.springframework.stereotype.Service;
 @Service
 public class UserLoginService extends ServiceImpl<UserLoginMapper, UserLogin> implements IUserLoginService {
 
+    @Override
+    public void saveLoginInfo(HttpServletRequest request, Long userId){
+        UserLogin userLogin = new UserLogin();
+        userLogin.setUserId(userId);
+        userLogin.setIp(CommonUtil.getIpAddress(request));
+        //添加登录记录
+        this.save(userLogin);
+    }
+
 }

+ 42 - 2
lift-system-service/src/main/java/cn/com/ty/lift/system/user/service/impl/UserService.java

@@ -5,8 +5,8 @@ import cn.com.ty.lift.common.utils.ProjectUtils;
 import cn.com.ty.lift.system.settings.dao.entity.MaintenanceCompany;
 import cn.com.ty.lift.system.settings.service.IMaintenanceCompanyService;
 import cn.com.ty.lift.system.user.dao.entity.*;
-import cn.com.ty.lift.system.user.dao.entity.model.UserRequest;
-import cn.com.ty.lift.system.user.dao.entity.model.UserResponse;
+import cn.com.ty.lift.system.user.dao.entity.model.*;
+import cn.com.ty.lift.system.user.service.IProjectService;
 import cn.com.ty.lift.system.user.service.IUserAccountService;
 import cn.com.ty.lift.system.user.service.IUserInfoService;
 import cn.com.ty.lift.system.user.service.IUserService;
@@ -52,6 +52,9 @@ public class UserService implements IUserService {
     @Autowired
     private IMaintenanceCompanyService maintenanceCompanyService;
 
+    @Autowired
+    private IProjectService projectService;
+
     @Override
     public UserAccount saveUserInfo(UserRequest userRequest) {
         String password = userRequest.getPassword();
@@ -62,6 +65,8 @@ public class UserService implements IUserService {
         userAccount.setCreateDate(new Date());
         //设置用户类型
         userAccount.setType(ApiConstants.UserConstants.TYPE_USER);
+        //设置用户微信openId
+        userAccount.setWechatOpenId(userRequest.getWeChatOpenId());
         UserInfo userInfo = new UserInfo();
         userInfo.setMobile(userRequest.getMobile());
         userInfo.setName(userRequest.getName());
@@ -226,4 +231,39 @@ public class UserService implements IUserService {
         return accountUserIdList;
     }
 
+    @Override
+    public RestResponse getUserInfo(UserRequest userRequest) {
+        Long userId = userRequest.getUserId();
+        Long companyId = userRequest.getCompanyId();
+        if(userId == null){
+            return RestResponse.fail(ApiConstants.RESULT_ERROR, "获取用户信息失败");
+        }
+        UserInfoResponse userInfoResponse = new UserInfoResponse();
+        //设置用户基础信息
+        UserAccount account = userAccountService.getByUserId(userId);
+        UserInfo info = userInfoService.getByUserId(userId);
+        if(account == null || info == null){
+            return RestResponse.fail(ApiConstants.RESULT_ERROR, "用户信息不存在");
+        }
+        userInfoResponse.setUserName(info.getName());
+        userInfoResponse.setAvatarUrl(info.getAvatarUrl());
+        userInfoResponse.setRemarks(info.getRemarks());
+        //设置角色信息
+        Role role = roleService.getRoleByUserIdAndCompanyId(userId, companyId);
+        if(role != null){
+            userInfoResponse.setRoleName(role.getName());
+        }
+        //设置公司信息
+        MaintenanceCompany maintenanceCompany = maintenanceCompanyService.getById(companyId);
+        if(maintenanceCompany != null){
+            userInfoResponse.setCompanyName(maintenanceCompany.getName());
+        }
+        //设置操作证信息
+        LiftCertificate liftCertificate = projectService.getLiftCertificateByUserIdAndCompanyId(new ProjectUser(userId, companyId));
+        if(liftCertificate != null){
+            userInfoResponse.setCertificateStatus(liftCertificate.getStatus());
+        }
+        return RestResponse.success(userInfoResponse, ApiConstants.RESULT_SUCCESS, "获取用户信息成功");
+    }
+
 }

+ 25 - 0
lift-system-service/src/main/java/cn/com/ty/lift/system/wechat/constants/WxConstants.java

@@ -0,0 +1,25 @@
+package cn.com.ty.lift.system.wechat.constants;
+
+/**
+ * @author huangyuan
+ * @date 2019-12-30
+ * @description 微信常量
+ */
+public class WxConstants {
+
+    /**
+     * app_id
+     */
+    public static final String APP_ID = "wx0f10e6386fb9969e";
+
+    /**
+     * app密钥
+     */
+    public static final String APP_SECRET = "d4624c36b6795d1d99dcf0547af5443d";
+
+    /**
+     * 获取用户信息access_token路径
+     */
+    public static final String USER_INFO_ACCESS_TOKEN_URL = "https://api.weixin.qq.com/sns/oauth2/access_token?"
+            + "appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code";
+}

+ 32 - 0
lift-system-service/src/main/java/cn/com/ty/lift/system/wechat/utils/WxUtil.java

@@ -0,0 +1,32 @@
+package cn.com.ty.lift.system.wechat.utils;
+
+import cn.com.ty.lift.system.wechat.constants.WxConstants;
+import cn.hutool.http.HttpUtil;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+
+/**
+ * @author huangyuan
+ * @date 2019-12-30
+ * @description
+ */
+public class WxUtil {
+
+    /**
+     * @description 通过用户授权码获取用户openId
+     * @param authCode 用户授权码
+     * @return
+     */
+    public static String getOpenIdByAuthCode(String authCode){
+        String url = WxConstants.USER_INFO_ACCESS_TOKEN_URL
+                .replace("APPID", WxConstants.APP_ID)
+                .replace("SECRET", WxConstants.APP_SECRET)
+                .replace("CODE", authCode);
+        JSONObject result = JSONUtil.parseObj(HttpUtil.get(url));
+        if(result.containsKey("openid")){
+            return result.getStr("openid");
+        }
+        return null;
+    }
+
+}

+ 6 - 0
lift-system-service/src/main/resources/mapper/MtCompanyUserMapper.xml

@@ -60,4 +60,10 @@
 		and mt_company_id = #{companyId,jdbcType=BIGINT}
 	</select>
 
+	<select id="getLiftCertificateByUserIdAndCompanyId" parameterType="cn.com.ty.lift.system.user.dao.entity.model.ProjectUser" resultType="cn.com.ty.lift.system.user.dao.entity.model.LiftCertificate">
+		select owner_id as userId, mt_company_id as companyId, status as status from lift_certificate
+		where owner_id = #{userId,jdbcType=BIGINT}
+		and mt_company_id = #{companyId,jdbcType=BIGINT}
+	</select>
+
 </mapper>