|
@@ -1,266 +0,0 @@
|
|
|
-package com.fs.app.controller;
|
|
|
-
|
|
|
-import cn.binarywang.wx.miniapp.api.WxMaService;
|
|
|
-import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
|
|
|
-import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo;
|
|
|
-import cn.hutool.core.date.DateTime;
|
|
|
-import com.fs.app.param.LoginMaWxParam;
|
|
|
-import com.fs.app.utils.JwtUtils;
|
|
|
-import com.fs.common.core.domain.R;
|
|
|
-import com.fs.common.core.redis.RedisCache;
|
|
|
-
|
|
|
-import com.fs.common.utils.IpUtil;
|
|
|
-import com.fs.common.utils.ServletUtils;
|
|
|
-import com.fs.company.domain.Company;
|
|
|
-import com.fs.company.domain.CompanyUser;
|
|
|
-import com.fs.company.service.ICompanyDeptService;
|
|
|
-import com.fs.company.service.ICompanyService;
|
|
|
-import com.fs.company.service.ICompanyUserService;
|
|
|
-
|
|
|
-import com.fs.his.domain.FsUserWx;
|
|
|
-import com.fs.his.service.IFsUserWxService;
|
|
|
-import com.fs.store.domain.FsUser;
|
|
|
-import com.fs.store.service.IFsUserService;
|
|
|
-import com.fs.system.mapper.SysConfigMapper;
|
|
|
-import com.fs.wx.miniapp.config.WxMaConfiguration;
|
|
|
-import com.fs.wx.miniapp.config.WxMaProperties;
|
|
|
-import io.jsonwebtoken.Claims;
|
|
|
-import io.swagger.annotations.Api;
|
|
|
-import io.swagger.annotations.ApiOperation;
|
|
|
-import lombok.extern.slf4j.Slf4j;
|
|
|
-import me.chanjar.weixin.common.error.WxErrorException;
|
|
|
-import org.apache.commons.lang3.StringUtils;
|
|
|
-import org.slf4j.Logger;
|
|
|
-import org.slf4j.LoggerFactory;
|
|
|
-import org.springframework.beans.factory.annotation.Autowired;
|
|
|
-import org.springframework.web.bind.annotation.PostMapping;
|
|
|
-import org.springframework.web.bind.annotation.RequestBody;
|
|
|
-import org.springframework.web.bind.annotation.RequestMapping;
|
|
|
-import org.springframework.web.bind.annotation.RestController;
|
|
|
-
|
|
|
-import java.util.Date;
|
|
|
-
|
|
|
-import static com.fs.common.utils.PhoneUtil.encryptPhone;
|
|
|
-
|
|
|
-
|
|
|
-@Api("微信小程序相关接口")
|
|
|
-@RestController
|
|
|
-@RequestMapping(value = "/app/wx/miniapp/test")
|
|
|
-@Slf4j
|
|
|
-public class WxCompanyUserCopyController extends AppBaseController {
|
|
|
- private final Logger logger = LoggerFactory.getLogger(this.getClass());
|
|
|
-
|
|
|
- @Autowired
|
|
|
- private WxMaProperties maProperties;
|
|
|
-
|
|
|
- @Autowired
|
|
|
- JwtUtils jwtUtils;
|
|
|
-
|
|
|
- @Autowired
|
|
|
- RedisCache redisCache;
|
|
|
-
|
|
|
- @Autowired
|
|
|
- private ICompanyUserService companyUserService;
|
|
|
-
|
|
|
-
|
|
|
- @Autowired
|
|
|
- private IFsUserService userService;
|
|
|
-
|
|
|
- @Autowired
|
|
|
- ICompanyService companyService;
|
|
|
-
|
|
|
- @Autowired
|
|
|
- private SysConfigMapper sysConfigMapper;
|
|
|
-
|
|
|
- @Autowired
|
|
|
- private IFsUserWxService fsUserWxService;
|
|
|
-
|
|
|
- @ApiOperation("小程序-授权登录")
|
|
|
- @PostMapping("/loginByMa")
|
|
|
- public R login(@RequestBody LoginMaWxParam param) {
|
|
|
- log.info("=====================进入小程序授权登录, 入参: {}", param);
|
|
|
- if (StringUtils.isBlank(param.getCode())) {
|
|
|
- return R.error("code不存在");
|
|
|
- }
|
|
|
-
|
|
|
- // 特殊(需求设计:需要根据公司是否开启黑名单来设置会员初始化的状态)
|
|
|
- Company company = companyService.selectCompanyById(param.getCompanyId());
|
|
|
- if (company==null || company.getStatus()==0){
|
|
|
- return R.error("注册失败团队已停用,或不存在!");
|
|
|
- }
|
|
|
-
|
|
|
- // 根据销售后台设置的 是否需要单独注册会员 来判断是否需要设置销售的值
|
|
|
- CompanyUser companyUser = companyUserService.selectCompanyUserById(param.getCompanyUserId());;
|
|
|
- if(companyUser == null || companyUser.getStatus().equals("1")){
|
|
|
- return R.error("注册失败客服已停用,或不存在!");
|
|
|
- }
|
|
|
-// if (company.getCourseMiniAppId() == null) {
|
|
|
-// return R.error("小程序参数错误!");
|
|
|
-// }
|
|
|
-// if (!param.getAppId().equals(company.getCourseMiniAppId())){
|
|
|
-// return R.error("无权限,");
|
|
|
-// }
|
|
|
-
|
|
|
- final WxMaService wxService = WxMaConfiguration.getMaService(param.getAppId());
|
|
|
- try {
|
|
|
- WxMaJscode2SessionResult session = wxService.getUserService().getSessionInfo(param.getCode());
|
|
|
- this.logger.info(session.getSessionKey());
|
|
|
- this.logger.info(session.getOpenid());
|
|
|
- this.logger.info(session.getUnionid());
|
|
|
- if (StringUtils.isEmpty(session.getOpenid())){
|
|
|
- return R.error("登陆失败,openid未授权,请稍后再试!");
|
|
|
- }
|
|
|
-
|
|
|
- // 手机号信息
|
|
|
- WxMaPhoneNumberInfo phoneNoInfo = new WxMaPhoneNumberInfo();;
|
|
|
- if (param.getAuthType()==1){
|
|
|
- phoneNoInfo = wxService.getUserService().getPhoneNoInfo(session.getSessionKey(), param.getEncryptedData(), param.getIv());
|
|
|
- if (StringUtils.isEmpty(phoneNoInfo.getPhoneNumber())){
|
|
|
- return R.error("授权失败,请联系客服!");
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- FsUser user = getUserByAuthType(param, wxService, session, phoneNoInfo);
|
|
|
-
|
|
|
-
|
|
|
- if (user!=null && user.getCompanyUserId() != null && !param.getCompanyUserId().equals(user.getCompanyUserId())) {
|
|
|
- return R.error(500, "该用户("+user.getUserId() + ")已成为其他销售会员");
|
|
|
- }
|
|
|
-
|
|
|
- // 3. 处理用户注册或更新
|
|
|
- String ip = IpUtil.getRequestIp();
|
|
|
- user = handleUserRegisterOrUpdate(user, param, session, phoneNoInfo, company, companyUser, ip);
|
|
|
-
|
|
|
- // 4. 处理用户与小程序的绑定
|
|
|
- handleFsUserWx(user, param, company, session);
|
|
|
-
|
|
|
- log.info("保存成功的用户信息user: {}, 用户id: {},小程序AppId:{}", user, user.getUserId(), param.getAppId());
|
|
|
- String token = jwtUtils.generateToken(user.getUserId());
|
|
|
- // 返回TOKEN和user
|
|
|
- return R.ok("登录成功").put("token", token).put("user", user);
|
|
|
- } catch (WxErrorException e) {
|
|
|
- this.logger.error(e.getMessage(), e);
|
|
|
- return R.error("授权失败," + e.getMessage());
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 根据authType获取用户信息
|
|
|
- */
|
|
|
- private FsUser getUserByAuthType(LoginMaWxParam param, WxMaService wxService, WxMaJscode2SessionResult session, WxMaPhoneNumberInfo phoneNoInfo) throws WxErrorException {
|
|
|
- FsUser user = null;
|
|
|
- if (param.getAuthType() == 1) {
|
|
|
- user = userService.selectFsUserByPhone(encryptPhone(phoneNoInfo.getPhoneNumber()));
|
|
|
- } else {
|
|
|
- // unionid判定唯一
|
|
|
- if (StringUtils.isNotEmpty(session.getUnionid())) {
|
|
|
- user = userService.selectFsUserByUnionId(session.getUnionid());
|
|
|
- }
|
|
|
- }
|
|
|
- return user;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- /**
|
|
|
- * 处理用户注册或更新
|
|
|
- */
|
|
|
- private FsUser handleUserRegisterOrUpdate(FsUser user, LoginMaWxParam param, WxMaJscode2SessionResult session, WxMaPhoneNumberInfo phoneNoInfo, Company company, CompanyUser companyUser, String ip) {
|
|
|
- if (user == null) {
|
|
|
- return createUser(param, session, phoneNoInfo, company, companyUser);
|
|
|
- } else {
|
|
|
- return updateUser(user, param, session, phoneNoInfo, company, companyUser);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 新增用户
|
|
|
- */
|
|
|
- private FsUser createUser(LoginMaWxParam param, WxMaJscode2SessionResult session, WxMaPhoneNumberInfo phoneNoInfo, Company company, CompanyUser companyUser) {
|
|
|
- FsUser user = new FsUser();
|
|
|
- user.setStatus((company != null ? company.getFsUserIsDefaultBlack() : 0) == 1 ? 0 : 1);
|
|
|
- user.setUnionId(session.getUnionid() == null ? "" : session.getUnionid());
|
|
|
- user.setCreateTime(new Date());
|
|
|
- if (param.getAuthType() == 1 && phoneNoInfo != null) {
|
|
|
- user.setPhone(phoneNoInfo.getPhoneNumber());
|
|
|
- }
|
|
|
- if((companyUser.getIsAllowedAllRegister() == null || companyUser.getIsAllowedAllRegister() == 1)
|
|
|
- && companyUser.getIsNeedRegisterMember() != null && companyUser.getIsNeedRegisterMember() != 1){
|
|
|
- user.setCompanyId(param.getCompanyId());
|
|
|
- user.setCompanyUserId(param.getCompanyUserId());
|
|
|
- }
|
|
|
- userService.insertFsUser(user);
|
|
|
- return user;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 修改用户
|
|
|
- */
|
|
|
- private FsUser updateUser(FsUser user, LoginMaWxParam param, WxMaJscode2SessionResult session, WxMaPhoneNumberInfo phoneNoInfo, Company company, CompanyUser companyUser) {
|
|
|
- FsUser userMap = new FsUser();
|
|
|
- userMap.setUserId(user.getUserId());
|
|
|
- userMap.setUnionId(session.getUnionid() == null ? "" : session.getUnionid());
|
|
|
- userMap.setUpdateTime(new DateTime());
|
|
|
- if (param.getAuthType() == 1 && phoneNoInfo != null) {
|
|
|
- userMap.setPhone(phoneNoInfo.getPhoneNumber());
|
|
|
- }
|
|
|
- userService.updateFsUser(userMap);
|
|
|
- return userMap;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- /**
|
|
|
- * 处理用户与小程序的绑定
|
|
|
- */
|
|
|
- private void handleFsUserWx(FsUser user, LoginMaWxParam param, Company company, WxMaJscode2SessionResult session) {
|
|
|
- if (user == null) return;
|
|
|
- FsUserWx fsUserWx = fsUserWxService.selectByAppIdAndUserId(company.getCourseMiniAppId(), user.getUserId(), 1);
|
|
|
- if (fsUserWx == null) {
|
|
|
- fsUserWx = new FsUserWx();
|
|
|
- fsUserWx.setType(1);
|
|
|
- fsUserWx.setFsUserId(user.getUserId());
|
|
|
- fsUserWx.setCompanyId(param.getCompanyId());
|
|
|
- fsUserWx.setAppId(company.getCourseMiniAppId());
|
|
|
- fsUserWx.setOpenId(session.getOpenid());
|
|
|
- fsUserWx.setUnionId(session.getUnionid() == null ? "" : session.getUnionid());
|
|
|
- fsUserWx.setCreateTime(new Date());
|
|
|
- fsUserWxService.save(fsUserWx);
|
|
|
- } else {
|
|
|
- fsUserWx.setFsUserId(user.getUserId());
|
|
|
- fsUserWx.setCompanyId(param.getCompanyId());
|
|
|
- fsUserWx.setAppId(company.getCourseMiniAppId());
|
|
|
- fsUserWx.setOpenId(session.getOpenid());
|
|
|
- fsUserWx.setUnionId(session.getUnionid() == null ? "" : session.getUnionid());
|
|
|
- fsUserWx.setUpdateTime(new Date());
|
|
|
- fsUserWxService.updateById(fsUserWx);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
-// @Login(isMiniLogin = true)
|
|
|
-// @ApiOperation("获取销售通过小程序登录后的用户信息")
|
|
|
-// @GetMapping("/getMaUser")
|
|
|
-// public R getUserInfo() {
|
|
|
-// try {
|
|
|
-// CompanyUser companyUser = companyUserService.selectCompanyUserById(Long.parseLong(getUserId()));
|
|
|
-// if (companyUser == null) {
|
|
|
-// return R.error(401, "用户信息不存在");
|
|
|
-// }
|
|
|
-// return R.ok().put("user", companyUser);
|
|
|
-// } catch (Exception e) {
|
|
|
-// return R.error("操作异常");
|
|
|
-// }
|
|
|
-// }
|
|
|
-
|
|
|
- /**
|
|
|
- * 特殊要求:销售小程序临时登录,登录后页面中还有一个之前常用的登录,所以为了区分,token名称不能跟之前的一样
|
|
|
- *
|
|
|
- * @return 用户id
|
|
|
- */
|
|
|
- public String getUserId() {
|
|
|
- String headValue = ServletUtils.getRequest().getHeader("UserToken");
|
|
|
- Claims claims = jwtUtils.getClaimByToken(headValue);
|
|
|
- String userId = claims.getSubject().toString();
|
|
|
- return userId;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-}
|